完善表单

This commit is contained in:
wanggeng 2022-03-25 11:01:54 +08:00
parent 2f04c79eda
commit e26b4468e6
26 changed files with 773 additions and 42 deletions

View File

@ -7,13 +7,11 @@ import ink.wgink.module.activiti.pojo.dtos.ActivitiProcdefDTO;
import ink.wgink.module.activiti.service.activiti.IActivitiProcdefService;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.result.ErrorResult;
import ink.wgink.pojo.result.SuccessResult;
import ink.wgink.pojo.result.SuccessResultList;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -32,6 +30,17 @@ public class ActivitiProcdefController extends DefaultBaseController {
@Autowired
private IActivitiProcdefService activitiProcdefService;
@ApiOperation(value = "删除流程", notes = "删除流程接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "deploymentId", value = "部署ID", paramType = "path")
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@DeleteMapping("delete/{deploymentId}")
public SuccessResult delete(@PathVariable("deploymentId") String deploymentId) {
activitiProcdefService.delete(deploymentId);
return new SuccessResult();
}
@ApiOperation(value = "部署分页列表", notes = "部署分页列表接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "page", value = "当前页码", paramType = "query", dataType = "Integer", defaultValue = "1"),

View File

@ -2,6 +2,7 @@ package ink.wgink.module.activiti.controller.api.oa;
import ink.wgink.common.base.DefaultBaseController;
import ink.wgink.interfaces.consts.ISystemConstant;
import ink.wgink.module.activiti.pojo.dtos.oa.OaHistoryTaskDTO;
import ink.wgink.module.activiti.pojo.dtos.oa.OaProcdefDTO;
import ink.wgink.module.activiti.pojo.dtos.oa.OaTaskDTO;
import ink.wgink.module.activiti.service.oa.IOaService;
@ -53,10 +54,38 @@ public class OaController extends DefaultBaseController {
return oaService.listPageProcdef(page.getPage(), page.getRows());
}
@ApiOperation(value = "我的任务(待办)", notes = "我的任务(待办)接口")
@ApiOperation(value = "我的任务(待办)列表", notes = "我的任务(待办)列表接口")
@GetMapping("list-task-of-mine")
public List<OaTaskDTO> listTaskOfMine() {
return oaService.listTaskOfMine();
}
@ApiOperation(value = "我的任务(待办)分页列表", notes = "我的任务(待办)分页列表接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "page", value = "当前页码", paramType = "query", dataType = "int", defaultValue = "1"),
@ApiImplicitParam(name = "rows", value = "显示数量", paramType = "query", dataType = "int", defaultValue = "20"),
})
@GetMapping("listpage-task-of-mine")
public SuccessResultList<List<OaTaskDTO>> listPageTaskOfMine(ListPage page) {
return oaService.listPageTaskOfMine(page.getPage(), page.getRows());
}
@ApiOperation(value = "我的历史任务(已办)列表", notes = "我的历史任务(已办)列表接口")
@GetMapping("list-history-task-of-mine")
public List<OaHistoryTaskDTO> listHistoryTaskOfMine() {
return oaService.listHistoryTaskOfMine();
}
@ApiOperation(value = "我的历史任务(已办)分页列表", notes = "我的历史任务(已办)分页列表接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "page", value = "当前页码", paramType = "query", dataType = "int", defaultValue = "1"),
@ApiImplicitParam(name = "rows", value = "显示数量", paramType = "query", dataType = "int", defaultValue = "20"),
})
@GetMapping("listpage-history-task-of-mine")
public SuccessResultList<List<OaHistoryTaskDTO>> listPageHistoryTaskOfMine(ListPage page) {
return oaService.listPageHistoryTaskOfMine(page.getPage(), page.getRows());
}
}

View File

@ -45,6 +45,24 @@ public class OaFormReportController extends DefaultBaseController {
return new SuccessResult();
}
@ApiOperation(value = "更新表单", notes = "更新表单接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "taskId", value = "任务ID", paramType = "path"),
@ApiImplicitParam(name = "formCode", value = "表单编码", paramType = "path"),
@ApiImplicitParam(name = "formVersion", value = "表单版本", paramType = "path"),
@ApiImplicitParam(name = "uid", value = "表单主键", paramType = "path")
})
@PutMapping("update/task-id/{taskId}/code/{formCode}/version/{formVersion}/uid/{uid}")
public SuccessResult update(@PathVariable("taskId") String taskId,
@PathVariable("formCode") String formCode,
@PathVariable("formVersion") Integer formVersion,
@PathVariable("uid") String uid,
@RequestBody Map<String, Object> params) {
checkParams(params);
oaFormReportService.update(taskId, formCode, formVersion, uid, params);
return new SuccessResult();
}
private void checkParams(Map<String, Object> body) {
if (body.isEmpty()) {
throw new ParamsException("提交内容不能为空");

View File

@ -0,0 +1,61 @@
package ink.wgink.module.activiti.controller.route.oa;
import ink.wgink.common.base.DefaultBaseController;
import ink.wgink.interfaces.consts.ISystemConstant;
import ink.wgink.module.activiti.service.oa.IOaFormReportRouteService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* @ClassName: OaController
* @Description: Oa管理
* @Author: wanggeng
* @Date: 2022/3/23 09:54
* @Version: 1.0
*/
@Api(tags = ISystemConstant.ROUTE_TAGS_PREFIX + "oa管理")
@Controller
@RequestMapping(ISystemConstant.ROUTE_PREFIX + "/oa-form-report")
public class OaFormReportRouteController extends DefaultBaseController {
@Autowired
private IOaFormReportRouteService oaFormReportRouteService;
@GetMapping("save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}")
public void get(@PathVariable("processDefinitionId") String processDefinitionId,
@PathVariable("formCode") String formCode,
@PathVariable("formVersion") Integer formVersion,
HttpSession httpSession,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
oaFormReportRouteService.save(processDefinitionId, formCode, formVersion, httpSession, httpServletRequest, httpServletResponse);
}
@GetMapping("update/task-id/{taskId}/code/{formCode}/version/{formVersion}")
public void update(@PathVariable("taskId") String taskId,
@PathVariable("formCode") String formCode,
@PathVariable("formVersion") Integer formVersion,
HttpSession httpSession,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
oaFormReportRouteService.update(taskId, formCode, formVersion, httpSession, httpServletRequest, httpServletResponse);
}
@GetMapping("show/code/{formCode}/version/{formVersion}")
public void show(@PathVariable("formCode") String formCode,
@PathVariable("formVersion") Integer formVersion,
HttpSession httpSession,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
oaFormReportRouteService.show(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse);
}
}

View File

@ -17,7 +17,7 @@ import org.springframework.web.servlet.ModelAndView;
*/
@Api(tags = ISystemConstant.ROUTE_TAGS_PREFIX + "oa管理")
@Controller
@RequestMapping(ISystemConstant.ROUTE_PREFIX + "/oa")
@RequestMapping(ISystemConstant.ROUTE_PREFIX + "/oa")
public class OaRouteController extends DefaultBaseController {
@GetMapping("list-procdef")
@ -26,4 +26,10 @@ public class OaRouteController extends DefaultBaseController {
return mv;
}
@GetMapping("list-task-of-mine")
public ModelAndView listTaskOfMine() {
ModelAndView mv = new ModelAndView("oa/list-task-of-mine");
return mv;
}
}

View File

@ -18,8 +18,12 @@ public class NodeFieldDTO {
private String formId;
@ApiModelProperty(name = "deploymentId", value = "部署ID")
private String deploymentId;
@ApiModelProperty(name = "flowNodeId", value = "节点")
@ApiModelProperty(name = "flowNodeIndex", value = "节点下标")
private String flowNodeIndex;
@ApiModelProperty(name = "flowNodeId", value = "节点ID")
private String flowNodeId;
@ApiModelProperty(name = "flowNodeName", value = "节点名称")
private String flowNodeName;
@ApiModelProperty(name = "fieldName", value = "字段名")
private String fieldName;
@ApiModelProperty(name = "isVisible", value = "是否可见")
@ -51,14 +55,30 @@ public class NodeFieldDTO {
this.deploymentId = deploymentId;
}
public String getFlowNodeIndex() {
return flowNodeIndex == null ? "" : flowNodeIndex.trim();
}
public void setFlowNodeIndex(String flowNodeIndex) {
this.flowNodeIndex = flowNodeIndex;
}
public String getFlowNodeId() {
return flowNodeId;
return flowNodeId == null ? "" : flowNodeId.trim();
}
public void setFlowNodeId(String flowNodeId) {
this.flowNodeId = flowNodeId;
}
public String getFlowNodeName() {
return flowNodeName == null ? "" : flowNodeName.trim();
}
public void setFlowNodeName(String flowNodeName) {
this.flowNodeName = flowNodeName;
}
public String getFieldName() {
return fieldName;
}

View File

@ -0,0 +1,69 @@
package ink.wgink.module.activiti.pojo.dtos.oa;
import io.swagger.annotations.ApiModel;
/**
* @ClassName: OaTaskDTO
* @Description: oa任务
* @Author: wanggeng
* @Date: 2022/3/23 09:33
* @Version: 1.0
*/
@ApiModel
public class OaHistoryTaskDTO {
private String taskId;
private String taskName;
private String taskDescription;
private String formKey;
private String formCode;
private Integer formVersion;
public String getTaskId() {
return taskId == null ? "" : taskId.trim();
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public String getTaskName() {
return taskName == null ? "" : taskName.trim();
}
public void setTaskName(String taskName) {
this.taskName = taskName;
}
public String getTaskDescription() {
return taskDescription == null ? "" : taskDescription.trim();
}
public void setTaskDescription(String taskDescription) {
this.taskDescription = taskDescription;
}
public String getFormKey() {
return formKey == null ? "" : formKey.trim();
}
public void setFormKey(String formKey) {
this.formKey = formKey;
}
public String getFormCode() {
return formCode == null ? "" : formCode.trim();
}
public void setFormCode(String formCode) {
this.formCode = formCode;
}
public Integer getFormVersion() {
return formVersion == null ? 0 : formVersion;
}
public void setFormVersion(Integer formVersion) {
this.formVersion = formVersion;
}
}

View File

@ -3,6 +3,7 @@ package ink.wgink.module.activiti.pojo.vos.oa;
import ink.wgink.annotation.CheckEmptyAnnotation;
import ink.wgink.annotation.CheckListAnnotation;
import ink.wgink.annotation.CheckListBeanAnnotation;
import ink.wgink.annotation.CheckNumberAnnotation;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -17,6 +18,9 @@ import java.util.List;
@ApiModel
public class NodeFieldUpdateVO {
@ApiModelProperty(name = "flowNodeIndex", value = "流程节点下标")
@CheckNumberAnnotation(name = "流程节点下标")
private Integer flowNodeIndex;
@ApiModelProperty(name = "deploymentId", value = "部署ID")
@CheckEmptyAnnotation(name = "部署ID")
private String deploymentId;
@ -26,10 +30,21 @@ public class NodeFieldUpdateVO {
@ApiModelProperty(name = "flowNodeId", value = "流程节点ID")
@CheckEmptyAnnotation(name = "流程节点ID")
private String flowNodeId;
@ApiModelProperty(name = "flowNodeName", value = "流程节点名称")
@CheckEmptyAnnotation(name = "流程节点名称")
private String flowNodeName;
@CheckListAnnotation(name = "表单字段列表")
@CheckListBeanAnnotation
private List<NodeFieldVO> formFields;
public Integer getFlowNodeIndex() {
return flowNodeIndex == null ? 0 : flowNodeIndex;
}
public void setFlowNodeIndex(Integer flowNodeIndex) {
this.flowNodeIndex = flowNodeIndex;
}
public String getDeploymentId() {
return deploymentId;
}
@ -54,6 +69,14 @@ public class NodeFieldUpdateVO {
this.flowNodeId = flowNodeId;
}
public String getFlowNodeName() {
return flowNodeName == null ? "" : flowNodeName.trim();
}
public void setFlowNodeName(String flowNodeName) {
this.flowNodeName = flowNodeName;
}
public List<NodeFieldVO> getFormFields() {
return formFields;
}

View File

@ -16,6 +16,8 @@ import java.util.List;
*/
public interface IActivitiProcdefService {
void delete(String deploymentId);
SuccessResultList<List<ActivitiProcdefDTO>> listPage(int page, int rows);
List<ActivitiFlowNodeDTO> listFlowNodeByDeploymentId(String deploymentId);

View File

@ -10,6 +10,7 @@ import ink.wgink.pojo.result.SuccessResultList;
import org.activiti.bpmn.model.Process;
import org.activiti.bpmn.model.*;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.springframework.beans.BeanUtils;
@ -31,6 +32,13 @@ public class ActivitiProcdefServiceImpl extends DefaultBaseService implements IA
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Override
public void delete(String deploymentId) {
repositoryService.deleteDeployment(deploymentId, true);
}
@Override
public SuccessResultList<List<ActivitiProcdefDTO>> listPage(int page, int rows) {

View File

@ -21,6 +21,7 @@ import ink.wgink.module.form.service.design.IFormFieldService;
import ink.wgink.module.form.service.design.IFormService;
import ink.wgink.pojo.result.SuccessResultList;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.EndEvent;
import org.activiti.bpmn.model.StartEvent;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.editor.language.json.converter.BpmnJsonConverter;
@ -143,22 +144,28 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
if (formFieldPOs.isEmpty()) {
throw new SystemException("表单字段为空");
}
activitiFlowNodeDTOs.forEach(activitiFlowNodeDTO -> {
for (int i = 0; i < activitiFlowNodeDTOs.size(); i++) {
ActivitiFlowNodeDTO activitiFlowNodeDTO = activitiFlowNodeDTOs.get(i);
if (StringUtils.equals(activitiFlowNodeDTO.getType(), EndEvent.class.getSimpleName())) {
return;
}
NodeFieldUpdateVO nodeFieldUpdateVO = new NodeFieldUpdateVO();
nodeFieldUpdateVO.setFlowNodeIndex(i);
nodeFieldUpdateVO.setFlowNodeId(activitiFlowNodeDTO.getId());
nodeFieldUpdateVO.setFlowNodeName(activitiFlowNodeDTO.getName());
nodeFieldUpdateVO.setFormId(formPO.getFormId());
nodeFieldUpdateVO.setDeploymentId(deploymentId);
List<NodeFieldVO> nodeFieldVOs = new ArrayList<>();
formFieldPOs.forEach(formFieldPO -> {
for (FormFieldPO formFieldPO : formFieldPOs) {
NodeFieldVO nodeFieldVO = new NodeFieldVO();
nodeFieldVO.setFieldName(formFieldPO.getFieldName());
nodeFieldVO.setIsVisible(1);
nodeFieldVO.setIsEditable(1);
nodeFieldVOs.add(nodeFieldVO);
});
}
nodeFieldUpdateVO.setFormFields(nodeFieldVOs);
nodeFieldService.save(nodeFieldUpdateVO);
});
}
}
private String getFormIdByStartEvent(List<ActivitiFlowNodeDTO> activitiFlowNodeDTOs) {

View File

@ -0,0 +1,22 @@
package ink.wgink.module.activiti.service.oa;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* @ClassName: IOaFormReportRouteService
* @Description: oa表单提交
* @Author: wanggeng
* @Date: 2022/3/24 09:31
* @Version: 1.0
*/
public interface IOaFormReportRouteService {
void save(String processDefinitionId, String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
void update(String taskId, String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
void show(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
}

View File

@ -1,8 +1,5 @@
package ink.wgink.module.activiti.service.oa;
import ink.wgink.module.activiti.pojo.dtos.oa.OaTaskDTO;
import java.util.List;
import java.util.Map;
/**
@ -28,6 +25,14 @@ public interface IOaFormReportService {
*/
void save(String processDefinitionId, String formCode, Integer formVersion, Map<String, Object> params);
/**
* 更新表单
* @param taskId
* @param formCode
* @param formVersion
* @param uid
* @param params
*/
void update(String taskId, String formCode, Integer formVersion, String uid, Map<String, Object> params);
}

View File

@ -1,5 +1,6 @@
package ink.wgink.module.activiti.service.oa;
import ink.wgink.module.activiti.pojo.dtos.oa.OaHistoryTaskDTO;
import ink.wgink.module.activiti.pojo.dtos.oa.OaProcdefDTO;
import ink.wgink.module.activiti.pojo.dtos.oa.OaTaskDTO;
import ink.wgink.pojo.result.SuccessResultList;
@ -38,4 +39,29 @@ public interface IOaService {
*/
List<OaTaskDTO> listTaskOfMine();
/**
* 我的任务待办分页列表
*
* @param page
* @param rows
* @return
*/
SuccessResultList<List<OaTaskDTO>> listPageTaskOfMine(int page, int rows);
/**
* 我的历史已办列表
*
* @return
*/
List<OaHistoryTaskDTO> listHistoryTaskOfMine();
/**
* 我的历史已办分页列表
*
* @param page
* @param rows
* @return
*/
SuccessResultList<List<OaHistoryTaskDTO>> listPageHistoryTaskOfMine(int page, int rows);
}

View File

@ -31,7 +31,12 @@ public class NodeFieldFieldServiceImpl extends DefaultBaseService implements INo
LOG.debug("删除原有配置");
delete(nodeFieldUpdateVO.getDeploymentId(), nodeFieldUpdateVO.getFormId(), nodeFieldUpdateVO.getFlowNodeId());
LOG.debug("新增现有配置");
save(nodeFieldUpdateVO.getDeploymentId(), nodeFieldUpdateVO.getFormId(), nodeFieldUpdateVO.getFlowNodeId(), nodeFieldUpdateVO.getFormFields());
save(nodeFieldUpdateVO.getDeploymentId(),
nodeFieldUpdateVO.getFormId(),
nodeFieldUpdateVO.getFlowNodeIndex(),
nodeFieldUpdateVO.getFlowNodeId(),
nodeFieldUpdateVO.getFlowNodeName(),
nodeFieldUpdateVO.getFormFields());
}
@Override
@ -73,13 +78,15 @@ public class NodeFieldFieldServiceImpl extends DefaultBaseService implements INo
* @param flowNodeId
* @param formFields
*/
private void save(String deploymentId, String formId, String flowNodeId, List<NodeFieldVO> formFields) {
private void save(String deploymentId, String formId, Integer flowNodeIndex, String flowNodeId, String flowNodeName, List<NodeFieldVO> formFields) {
formFields.forEach(nodeFieldVO -> {
Map<String, Object> params = HashMapUtil.beanToMap(nodeFieldVO);
params.put("nodeFieldId", UUIDUtil.getUUID());
params.put("deploymentId", deploymentId);
params.put("formId", formId);
params.put("flowNodeIndex", flowNodeIndex);
params.put("flowNodeId", flowNodeId);
params.put("flowNodeName", flowNodeName);
nodeFieldDao.save(params);
});
}

View File

@ -0,0 +1,45 @@
package ink.wgink.module.activiti.service.oa.impl;
import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.module.activiti.service.oa.IOaFormReportRouteService;
import ink.wgink.module.form.service.report.IFormReportRouteService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Map;
/**
* @ClassName: OaFormReportRouteServiceImpl
* @Description: oa表单提交
* @Author: wanggeng
* @Date: 2022/3/24 09:31
* @Version: 1.0
*/
@Service
public class OaFormReportRouteServiceImpl extends DefaultBaseService implements IOaFormReportRouteService {
@Autowired
private IFormReportRouteService formReportRouteService;
@Override
public void save(String processDefinitionId, String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
Map<String, Object> modal = getHashMap(10);
modal.put("processDefinitionId", processDefinitionId);
formReportRouteService.save(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, modal);
}
@Override
public void update(String taskId, String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
Map<String, Object> modal = getHashMap(10);
modal.put("taskId", taskId);
formReportRouteService.update(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, modal);
}
@Override
public void show(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
}
}

View File

@ -41,4 +41,10 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo
formReportService.updateProcessInstanceId(formCode, formVersion, uid, processInstance.getProcessInstanceId());
}
@Override
public void update(String taskId, String formCode, Integer formVersion, String uid, Map<String, Object> params) {
formReportService.update(formCode, formVersion, uid, params);
taskService.complete(taskId, params);
}
}

View File

@ -1,6 +1,7 @@
package ink.wgink.module.activiti.service.oa.impl;
import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.module.activiti.pojo.dtos.oa.OaHistoryTaskDTO;
import ink.wgink.module.activiti.pojo.dtos.oa.OaProcdefDTO;
import ink.wgink.module.activiti.pojo.dtos.oa.OaTaskDTO;
import ink.wgink.module.activiti.service.oa.IOaFormReportService;
@ -8,10 +9,9 @@ import ink.wgink.module.activiti.service.oa.IOaService;
import ink.wgink.module.form.pojo.dtos.design.FormDTO;
import ink.wgink.module.form.service.design.IFormService;
import ink.wgink.pojo.result.SuccessResultList;
import org.activiti.engine.FormService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.*;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricTaskInstanceQuery;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.task.Task;
@ -43,6 +43,8 @@ public class OaServiceImpl extends DefaultBaseService implements IOaService {
@Autowired
private TaskService taskService;
@Autowired
private HistoryService historyService;
@Autowired
private IFormService iFormService;
@Override
@ -104,6 +106,25 @@ public class OaServiceImpl extends DefaultBaseService implements IOaService {
String userId = securityComponent.getCurrentUser().getUserId();
TaskQuery taskQuery = taskService.createTaskQuery().taskCandidateOrAssigned(userId);
List<Task> tasks = taskQuery.list();
return listOaTask(tasks);
}
@Override
public SuccessResultList<List<OaTaskDTO>> listPageTaskOfMine(int page, int rows) {
String userId = securityComponent.getCurrentUser().getUserId();
TaskQuery taskQuery = taskService.createTaskQuery().taskCandidateOrAssigned(userId);
List<Task> tasks = taskQuery.listPage(page - 1, rows);
List<OaTaskDTO> oaTaskDTOs = listOaTask(tasks);
return new SuccessResultList<>(oaTaskDTOs, page, taskQuery.count());
}
/**
* oa任务列表
*
* @param tasks
* @return
*/
private List<OaTaskDTO> listOaTask(List<Task> tasks) {
List<OaTaskDTO> oaTaskDTOs = new ArrayList<>();
tasks.forEach(task -> {
OaTaskDTO oaTaskDTO = new OaTaskDTO();
@ -115,7 +136,7 @@ public class OaServiceImpl extends DefaultBaseService implements IOaService {
oaTaskDTO.setOwner(task.getOwner());
Map<String, Object> variables = runtimeService.getVariables(task.getProcessInstanceId());
if(variables.isEmpty()) {
if (variables.isEmpty()) {
return;
}
oaTaskDTO.setFormCode(variables.get(IOaFormReportService.KEY_FORM_CODE).toString());
@ -124,4 +145,33 @@ public class OaServiceImpl extends DefaultBaseService implements IOaService {
});
return oaTaskDTOs;
}
@Override
public List<OaHistoryTaskDTO> listHistoryTaskOfMine() {
String userId = securityComponent.getCurrentUser().getUserId();
HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery().taskAssignee(userId);
List<HistoricTaskInstance> historicTaskInstances = historicTaskInstanceQuery.list();
return listOaHistoryTask(historicTaskInstances);
}
@Override
public SuccessResultList<List<OaHistoryTaskDTO>> listPageHistoryTaskOfMine(int page, int rows) {
String userId = securityComponent.getCurrentUser().getUserId();
HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery().taskAssignee(userId);
List<HistoricTaskInstance> historicTaskInstances = historicTaskInstanceQuery.listPage(page - 1, rows);
List<OaHistoryTaskDTO> oaHistoryTaskDTOs = listOaHistoryTask(historicTaskInstances);
return new SuccessResultList<>(oaHistoryTaskDTOs, page, historicTaskInstanceQuery.count());
}
private List<OaHistoryTaskDTO> listOaHistoryTask(List<HistoricTaskInstance> historicTaskInstances) {
List<OaHistoryTaskDTO> oaHistoryTaskDTOs = new ArrayList<>();
historicTaskInstances.forEach(historicTaskInstance -> {
OaHistoryTaskDTO oaHistoryTaskDTO = new OaHistoryTaskDTO();
oaHistoryTaskDTO.setTaskId(historicTaskInstance.getId());
oaHistoryTaskDTO.setTaskName(historicTaskInstance.getName());
});
return oaHistoryTaskDTOs;
}
}

View File

@ -6,7 +6,9 @@
<id column="node_field_id" property="nodeFieldId"/>
<result column="deployment_id" property="deploymentId"/>
<result column="form_id" property="formId"/>
<result column="flow_node_index" property="flowNodeIndex"/>
<result column="flow_node_id" property="flowNodeId"/>
<result column="flow_node_name" property="flowNodeName"/>
<result column="field_name" property="fieldName"/>
<result column="is_visible" property="isVisible"/>
<result column="is_editable" property="isEditable"/>
@ -18,7 +20,9 @@
`node_field_id` char(36) DEFAULT NULL COMMENT '主键',
`deployment_id` char(36) DEFAULT NULL COMMENT '流程部署ID',
`form_id` char(36) DEFAULT NULL COMMENT '表单ID',
`flow_node_index` int(11) DEFAULT '0' COMMENT '流程节点下标',
`flow_node_id` char(60) DEFAULT NULL COMMENT '流程节点ID',
`flow_node_name` varchar(255) DEFAULT NULL COMMENT '流程节点名称',
`field_name` varchar(255) DEFAULT NULL COMMENT '字段名',
`is_visible` int(1) DEFAULT '1' COMMENT '是否可见',
`is_editable` int(1) DEFAULT '1' COMMENT '是否可编辑',
@ -32,7 +36,9 @@
node_field_id,
deployment_id,
form_id,
flow_node_index,
flow_node_id,
flow_node_name,
field_name,
is_visible,
is_editable
@ -40,7 +46,9 @@
#{nodeFieldId},
#{deploymentId},
#{formId},
#{flowNodeIndex},
#{flowNodeId},
#{flowNodeName},
#{fieldName},
#{isVisible},
#{isEditable}
@ -84,7 +92,9 @@
SELECT
deployment_id,
form_id,
flow_node_id
flow_node_index,
flow_node_id,
flow_node_name
FROM
oa_node_field
<where>
@ -100,9 +110,11 @@
GROUP BY
deployment_id,
form_id,
flow_node_id
flow_node_index,
flow_node_id,
flow_node_name
ORDER BY
id
flow_node_index
</select>
<!-- 列表 -->
@ -111,7 +123,9 @@
node_field_id,
deployment_id,
form_id,
flow_node_index,
flow_node_id,
flow_node_name,
field_name,
is_visible,
is_editable
@ -132,7 +146,7 @@
</if>
</where>
ORDER BY
id
flow_node_index
</select>
</mapper>

View File

@ -65,7 +65,6 @@
},
cols: [
[
{type:'checkbox', fixed: 'left'},
{field:'rowNum', width:80, title: '序号', fixed: 'left', align:'center', templet: '<span>{{d.LAY_INDEX}}</span>'},
{field:'name', width:150, title: '模型名称', align:'center',
templet: function(row) {

View File

@ -132,10 +132,11 @@
return flowChatImg;
}
},
{field: 'form', width: 100, title: '操作', align:'center', fixed: 'right',
{field: 'form', width: 140, title: '操作', align:'center', fixed: 'right',
templet: function(row) {
return '<div class="layui-btn-group">' +
'<button class="layui-btn layui-btn-xs" lay-event="nodeEvent">节点管理</button>'+
'<button class="layui-btn layui-btn-xs layui-btn-danger" lay-event="deleteEvent">删除</button>'+
'</div>';
}
}
@ -184,10 +185,30 @@
top.dialog.open({
url: top.restAjax.path('route/oa/node-field/list-node?deploymentId={deploymentId}', [data.deploymentId]),
title: '节点字段管理',
width: '400px',
width: '800px',
height: '500px',
onClose: function() {}
});
} else if(layEvent === 'deleteEvent') {
top.dialog.msg('删除流程会删除与流程有关的所有数据,确定删除吗?', {
time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],
shade: 0.3,
yes: function (index) {
top.dialog.close(index);
var layIndex;
top.restAjax.delete(top.restAjax.path('api/activiti/procdef/delete/{deploymentId}', [data.deploymentId]), {}, null, function (code, data) {
top.dialog.msg(top.dataMessage.deleteSuccess, {time: 1000});
reloadTable();
}, function (code, data) {
top.dialog.msg(data.msg);
}, function () {
layIndex = top.dialog.msg(top.dataMessage.deleting, {icon: 16, time: 0, shade: 0.3});
}, function () {
top.dialog.close(layIndex);
});
}
});
}
});
});

View File

@ -20,12 +20,14 @@
<table class="layui-table">
<col width="60">
<col>
<col>
<col width="80">
</colgroup>
<thead>
<tr>
<th>序号</th>
<th>节点ID</th>
<th>节点名称</th>
<th>表单管理</th>
</tr>
</thead>
@ -58,6 +60,7 @@
var tr = '<tr>' +
'<td>'+ i +'</td>' +
'<td>'+ item.flowNodeId +'</td>' +
'<td>'+ item.flowNodeName +'</td>' +
'<td><button type="button" class="layui-btn layui-btn-xs form-config" data-flow-node-id="'+ item.flowNodeId +'" data-form-id="'+ item.formId +'">表单配置</button></td>' +
'</tr>';
trs += tr;

View File

@ -158,7 +158,7 @@
var layEvent = obj.event;
if(layEvent === 'startProcess') {
top.dialog.open({
url: top.restAjax.path('route/form-report/save/code/{formCode}/version/{formVersion}?processDefinitionId={processDefinitionId}', [data.formCode, data.formVersion, data.id]),
url: top.restAjax.path('route/oa-form-report/save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}', [data.id, data.formCode, data.formVersion]),
title: '发起流程',
width: '500px',
height: '80%',

View File

@ -0,0 +1,142 @@
<!doctype html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<base th:href="${#request.getContextPath() + '/'} ">
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
<link rel="stylesheet" type="text/css" href="assets/js/vendor/viewer/viewer.min.css">
</head>
<body>
<div class="layui-fluid layui-anim layui-anim-fadein">
<div class="layui-row">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body">
<table class="layui-hide" id="dataTable" lay-filter="dataTable"></table>
</div>
</div>
</div>
</div>
</div>
<script src="assets/layuiadmin/layui/layui.js"></script>
<script src="assets/js/vendor/viewer/viewer.min.js"></script>
<script>
layui.config({
base: 'assets/layuiadmin/'
}).extend({
index: 'lib/index'
}).use(['index', 'table', 'laydate', 'common'], function() {
var $ = layui.$;
var $win = $(window);
var table = layui.table;
var admin = layui.admin;
var laydate = layui.laydate;
var common = layui.common;
var resizeTimeout = null;
var tableUrl = 'api/oa/listpage-task-of-mine';
// 初始化表格
function initTable() {
table.render({
elem: '#dataTable',
id: 'dataTable',
url: top.restAjax.path(tableUrl, []),
width: admin.screen() > 1 ? '100%' : '',
height: $win.height() - 50,
limit: 20,
limits: [20, 40, 60, 80, 100, 200],
request: {
pageName: 'page',
limitName: 'rows'
},
cols: [
[
{field:'rowNum', width:80, title: '序号', fixed: 'left', align:'center', templet: '<span>{{d.LAY_INDEX}}</span>'},
{field:'taskId', width:150, title: '主键', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field:'taskName', width:200, title: '任务名称', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'form', width: 100, title: '操作', align:'center', fixed: 'right',
templet: function(row) {
if(!row.formCode || !row.formVersion) {
return '-';
}
return '<div class="layui-btn-group">' +
'<button class="layui-btn layui-btn-xs" lay-event="handleEvent">处理</button>'+
'</div>';
}
}
]
],
page: true,
parseData: function(data) {
return {
'code': 0,
'msg': '',
'count': data.total,
'data': data.rows
};
}
});
}
// 重载表格
function reloadTable(currentPage) {
table.reload('dataTable', {
url: top.restAjax.path(tableUrl, []),
where: {},
page: {
curr: currentPage
},
height: $win.height() - 50,
});
}
initTable();
// 事件 - 页面变化
$win.on('resize', function() {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(function() {
reloadTable();
}, 500);
});
// 事件 - 搜索
$(document).on('click', '#search', function() {
reloadTable(1);
});
table.on('tool(dataTable)', function(obj) {
var data = obj.data;
var layEvent = obj.event;
if(layEvent === 'handleEvent') {
top.dialog.open({
url: top.restAjax.path('route/oa-form-report/update/task-id/{taskId}/code/{formCode}/version/{formVersion}?uid={reportUid}', [data.taskId, data.formCode, data.formVersion, data.reportUid]),
title: '编辑',
width: '500px',
height: '80%',
onClose: function() {}
});
}
});
});
</script>
</body>
</html>

View File

@ -3,6 +3,7 @@ package ink.wgink.module.form.service.report;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Map;
/**
* @ClassName: IFormReportService
@ -25,7 +26,7 @@ public interface IFormReportRouteService {
void save(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
/**
* 修改页面
* 新增页面
*
* @param formCode
* @param formVersion
@ -33,8 +34,32 @@ public interface IFormReportRouteService {
* @param httpServletRequest
* @param httpServletResponse
*/
void save(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> modal);
/**
* 修改页面
*
* @param formCode
* @param formVersion
* @param httpSession
* @param httpServletRequest
* @param httpServletResponse
* @param modal
*/
void update(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
/**
* 修改页面
*
* @param formCode
* @param formVersion
* @param httpSession
* @param httpServletRequest
* @param httpServletResponse
* @param modal
*/
void update(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> modal);
/**
* 详情页面
*
@ -46,6 +71,18 @@ public interface IFormReportRouteService {
*/
void show(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
/**
* 详情页面
*
* @param formCode
* @param formVersion
* @param httpSession
* @param httpServletRequest
* @param httpServletResponse
* @param modal
*/
void show(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> modal);
/**
* APP新增页面
*
@ -57,6 +94,18 @@ public interface IFormReportRouteService {
*/
void appSave(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
/**
* APP新增页面
*
* @param formCode
* @param formVersion
* @param httpSession
* @param httpServletRequest
* @param httpServletResponse
* @param modal
*/
void appSave(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> modal);
/**
* APP修改页面
*
@ -68,6 +117,18 @@ public interface IFormReportRouteService {
*/
void appUpdate(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
/**
* APP修改页面
*
* @param formCode
* @param formVersion
* @param httpSession
* @param httpServletRequest
* @param httpServletResponse
* @param modal
*/
void appUpdate(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> modal);
/**
* APP详情页面
*
@ -78,4 +139,16 @@ public interface IFormReportRouteService {
* @param httpServletResponse
*/
void appShow(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse);
/**
* APP详情页面
*
* @param formCode
* @param formVersion
* @param httpSession
* @param httpServletRequest
* @param httpServletResponse
* @param modal
*/
void appShow(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> modal);
}

View File

@ -45,7 +45,18 @@ public class FormReportRouteServiceImpl extends DefaultBaseService implements IF
if (formPO == null) {
return;
}
Map<String, Object> modal = getModal(formPO);
Map<String, Object> modal = getHashMap(10);
setModal(formPO, modal);
showPage(modal, formCode, formPO.getSavePageCode(), httpSession, httpServletRequest, httpServletResponse);
}
@Override
public void save(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> modal) {
FormPO formPO = getFormPO(formCode, formVersion);
if (formPO == null) {
return;
}
setModal(formPO, modal);
showPage(modal, formCode, formPO.getSavePageCode(), httpSession, httpServletRequest, httpServletResponse);
}
@ -55,7 +66,18 @@ public class FormReportRouteServiceImpl extends DefaultBaseService implements IF
if (formPO == null) {
return;
}
Map<String, Object> modal = getModal(formPO);
Map<String, Object> modal = getHashMap(10);
setModal(formPO, modal);
showPage(modal, formCode, formPO.getUpdatePageCode(), httpSession, httpServletRequest, httpServletResponse);
}
@Override
public void update(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> modal) {
FormPO formPO = getFormPO(formCode, formVersion);
if (formPO == null) {
return;
}
setModal(formPO, modal);
showPage(modal, formCode, formPO.getUpdatePageCode(), httpSession, httpServletRequest, httpServletResponse);
}
@ -65,7 +87,18 @@ public class FormReportRouteServiceImpl extends DefaultBaseService implements IF
if (formPO == null) {
return;
}
Map<String, Object> modal = getModal(formPO);
Map<String, Object> modal = getHashMap(10);
setModal(formPO, modal);
showPage(modal, formCode, formPO.getShowPageCode(), httpSession, httpServletRequest, httpServletResponse);
}
@Override
public void show(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> modal) {
FormPO formPO = getFormPO(formCode, formVersion);
if (formPO == null) {
return;
}
setModal(formPO, modal);
showPage(modal, formCode, formPO.getShowPageCode(), httpSession, httpServletRequest, httpServletResponse);
}
@ -75,7 +108,18 @@ public class FormReportRouteServiceImpl extends DefaultBaseService implements IF
if (formPO == null) {
return;
}
Map<String, Object> modal = getModal(formPO);
Map<String, Object> modal = getHashMap(10);
setModal(formPO, modal);
showPage(modal, formCode, formPO.getAppSavePageCode(), httpSession, httpServletRequest, httpServletResponse);
}
@Override
public void appSave(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> modal) {
FormPO formPO = getFormPO(formCode, formVersion);
if (formPO == null) {
return;
}
setModal(formPO, modal);
showPage(modal, formCode, formPO.getAppSavePageCode(), httpSession, httpServletRequest, httpServletResponse);
}
@ -85,7 +129,18 @@ public class FormReportRouteServiceImpl extends DefaultBaseService implements IF
if (formPO == null) {
return;
}
Map<String, Object> modal = getModal(formPO);
Map<String, Object> modal = getHashMap(10);
setModal(formPO, modal);
showPage(modal, formCode, formPO.getAppUpdatePageCode(), httpSession, httpServletRequest, httpServletResponse);
}
@Override
public void appUpdate(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> modal) {
FormPO formPO = getFormPO(formCode, formVersion);
if (formPO == null) {
return;
}
setModal(formPO, modal);
showPage(modal, formCode, formPO.getAppUpdatePageCode(), httpSession, httpServletRequest, httpServletResponse);
}
@ -95,7 +150,18 @@ public class FormReportRouteServiceImpl extends DefaultBaseService implements IF
if (formPO == null) {
return;
}
Map<String, Object> modal = getModal(formPO);
Map<String, Object> modal = getHashMap(10);
setModal(formPO, modal);
showPage(modal, formCode, formPO.getAppShowPageCode(), httpSession, httpServletRequest, httpServletResponse);
}
@Override
public void appShow(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Map<String, Object> modal) {
FormPO formPO = getFormPO(formCode, formVersion);
if (formPO == null) {
return;
}
setModal(formPO, modal);
showPage(modal, formCode, formPO.getAppShowPageCode(), httpSession, httpServletRequest, httpServletResponse);
}
@ -124,17 +190,17 @@ public class FormReportRouteServiceImpl extends DefaultBaseService implements IF
}
/**
* 获取模型
* 设置模型
*
* @param formPO
* @param modal
* @return
*/
private Map<String, Object> getModal(FormPO formPO) {
Map<String, Object> modal = getHashMap(10);
private void setModal(FormPO formPO, Map<String, Object> modal) {
modal.put("contextPath", httpServletRequest.getContextPath() + "/");
modal.put("formName", formPO.getFormName());
modal.put("formCode", formPO.getFormCode());
modal.put("formVersion", formPO.getFormVersion());
return modal;
}
/**