diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/controller/api/oa/OaFormReportController.java b/module-activiti/src/main/java/ink/wgink/module/activiti/controller/api/oa/OaFormReportController.java index 15711482..cd78f951 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/controller/api/oa/OaFormReportController.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/controller/api/oa/OaFormReportController.java @@ -43,7 +43,7 @@ public class OaFormReportController extends DefaultBaseController { @ApiImplicitParam(name = "formVersion", value = "表单版本", paramType = "path") }) @PostMapping("save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}") - public SuccessResult save(@PathVariable("processDefinitionId") String processDefinitionId, + public synchronized SuccessResult save(@PathVariable("processDefinitionId") String processDefinitionId, @PathVariable("formCode") String formCode, @PathVariable("formVersion") Integer formVersion, @RequestBody Map params) { @@ -60,7 +60,7 @@ public class OaFormReportController extends DefaultBaseController { @ApiImplicitParam(name = "uid", value = "表单主键", paramType = "path") }) @PutMapping("update/task-id/{taskId}/code/{formCode}/version/{formVersion}/is-need-claim/{isNeedClaim}/uid/{uid}") - public SuccessResult update(@PathVariable("taskId") String taskId, + public synchronized SuccessResult update(@PathVariable("taskId") String taskId, @PathVariable("formCode") String formCode, @PathVariable("formVersion") Integer formVersion, @PathVariable("isNeedClaim") Integer isNeedClaim, diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/controller/app/api/oa/OaFormReportAppController.java b/module-activiti/src/main/java/ink/wgink/module/activiti/controller/app/api/oa/OaFormReportAppController.java index 98f9815f..fc0c1b48 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/controller/app/api/oa/OaFormReportAppController.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/controller/app/api/oa/OaFormReportAppController.java @@ -1,8 +1,10 @@ package ink.wgink.module.activiti.controller.app.api.oa; +import ink.wgink.annotation.CheckRequestBodyAnnotation; import ink.wgink.common.base.DefaultBaseController; import ink.wgink.exceptions.ParamsException; import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.module.activiti.pojo.vos.oa.UpdateTaskAssigneeVO; import ink.wgink.module.activiti.service.oa.IOaFormReportService; import ink.wgink.module.activiti.util.oa.OaFormReportUtil; import ink.wgink.pojo.ListPage; @@ -42,7 +44,7 @@ public class OaFormReportAppController extends DefaultBaseController { @ApiImplicitParam(name = "formVersion", value = "表单版本", paramType = "path") }) @PostMapping("save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}") - public SuccessResult save(@RequestHeader("token") String token, + public synchronized SuccessResult save(@RequestHeader("token") String token, @PathVariable("processDefinitionId") String processDefinitionId, @PathVariable("formCode") String formCode, @PathVariable("formVersion") Integer formVersion, @@ -61,7 +63,7 @@ public class OaFormReportAppController extends DefaultBaseController { @ApiImplicitParam(name = "uid", value = "表单主键", paramType = "path") }) @PutMapping("update/task-id/{taskId}/code/{formCode}/version/{formVersion}/is-need-claim/{isNeedClaim}/uid/{uid}") - public SuccessResult update(@RequestHeader("token") String token, + public synchronized SuccessResult update(@RequestHeader("token") String token, @PathVariable("taskId") String taskId, @PathVariable("formCode") String formCode, @PathVariable("formVersion") Integer formVersion, @@ -76,6 +78,62 @@ public class OaFormReportAppController extends DefaultBaseController { return new SuccessResult(); } + @ApiOperation(value = "更新回退", notes = "更新回退接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "token", value = "token", paramType = "header"), + @ApiImplicitParam(name = "processInstanceId", value = "流程实例ID", paramType = "path"), + @ApiImplicitParam(name = "taskId", value = "当前任务ID", paramType = "path"), + @ApiImplicitParam(name = "nodeId", value = "跳转节点ID", paramType = "path") + }) + @PutMapping("update-go-back/process-instance-id/{processInstanceId}/task-id/{taskId}/node-id/{nodeId}") + public synchronized SuccessResult updateGoBack(@RequestHeader("token") String token, + @PathVariable("processInstanceId") String processInstanceId, + @PathVariable("taskId") String taskId, + @PathVariable("nodeId") String nodeId, + @RequestBody Map params) { + String reason = params.get(IOaFormReportService.KEY_REASON); + if (StringUtils.isBlank(reason)) { + throw new ParamsException("回退原因不能为空"); + } + oaFormReportService.updateGoBack(token, processInstanceId, taskId, nodeId, reason); + return new SuccessResult(); + } + + @ApiOperation(value = "更新强制结束", notes = "更新强制结束接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "token", value = "token", paramType = "header"), + @ApiImplicitParam(name = "processInstanceId", value = "流程实例ID", paramType = "path"), + @ApiImplicitParam(name = "taskId", value = "当前任务ID", paramType = "path") + }) + @PutMapping("update-forced-end/process-instance-id/{processInstanceId}/task-id/{taskId}") + public synchronized SuccessResult updateForcedEnd(@RequestHeader("token") String token, + @PathVariable("processInstanceId") String processInstanceId, + @PathVariable("taskId") String taskId, + @RequestBody Map params) { + String reason = params.get(IOaFormReportService.KEY_REASON); + if (StringUtils.isBlank(reason)) { + throw new ParamsException("结束原因不能为空"); + } + oaFormReportService.updateForcedEnd(token, processInstanceId, taskId, reason); + return new SuccessResult(); + } + + @ApiOperation(value = "更新代理人", notes = "更新代理人接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "token", value = "token", paramType = "header"), + @ApiImplicitParam(name = "processInstanceId", value = "流程实例ID", paramType = "path"), + @ApiImplicitParam(name = "taskId", value = "当前任务ID", paramType = "path") + }) + @PutMapping("update-assignee/process-instance-id/{processInstanceId}/task-id/{taskId}") + @CheckRequestBodyAnnotation + public synchronized SuccessResult updateAssignee(@RequestHeader("token") String token, + @PathVariable("processInstanceId") String processInstanceId, + @PathVariable("taskId") String taskId, + @RequestBody UpdateTaskAssigneeVO updateTaskAssigneeVO) { + oaFormReportService.updateTaskAssignee(token, processInstanceId, taskId, updateTaskAssigneeVO); + return new SuccessResult(); + } + @ApiOperation(value = "查询表单", notes = "更新表单接口") @ApiImplicitParams({ @ApiImplicitParam(name = "token", value = "token", paramType = "header"), diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/controller/app/route/oa/OaFormReportAppRouteController.java b/module-activiti/src/main/java/ink/wgink/module/activiti/controller/app/route/oa/OaFormReportAppRouteController.java index 4f224d14..7c5c3a80 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/controller/app/route/oa/OaFormReportAppRouteController.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/controller/app/route/oa/OaFormReportAppRouteController.java @@ -28,10 +28,10 @@ public class OaFormReportAppRouteController extends DefaultBaseController { private IOaFormReportRouteService oaFormReportRouteService; @GetMapping("save/definition-id/{processDefinitionId}/code/{formCode}/version/{formVersion}") - public void get(@RequestParam("token") String token, - @PathVariable("processDefinitionId") String processDefinitionId, + public void get(@PathVariable("processDefinitionId") String processDefinitionId, @PathVariable("formCode") String formCode, @PathVariable("formVersion") Integer formVersion, + @RequestParam("token") String token, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { @@ -39,11 +39,11 @@ public class OaFormReportAppRouteController extends DefaultBaseController { } @GetMapping("update/task-id/{taskId}/code/{formCode}/version/{formVersion}/is-need-claim/{isNeedClaim}") - public void update(@RequestHeader("token") String token, - @PathVariable("taskId") String taskId, + public void update(@PathVariable("taskId") String taskId, @PathVariable("formCode") String formCode, @PathVariable("formVersion") Integer formVersion, @PathVariable("isNeedClaim") Integer isNeedClaim, + @RequestParam("token") String token, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { @@ -51,9 +51,9 @@ public class OaFormReportAppRouteController extends DefaultBaseController { } @GetMapping("show/code/{formCode}/version/{formVersion}") - public void show(@RequestHeader("token") String token, - @PathVariable("formCode") String formCode, + public void show(@PathVariable("formCode") String formCode, @PathVariable("formVersion") Integer formVersion, + @RequestParam("token") String token, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaFormReportService.java b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaFormReportService.java index 1c8febbb..e40ecf77 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaFormReportService.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaFormReportService.java @@ -123,6 +123,29 @@ public interface IOaFormReportService { */ void updateGoBack(String processInstanceId, String currentTaskId, String jumpNodeId, String reason); + /** + * 更新回退 + * + * @param token + * @param processInstanceId + * @param currentTaskId + * @param jumpNodeId + * @param reason + */ + void updateGoBack(String token, String processInstanceId, String currentTaskId, String jumpNodeId, String reason); + + /** + * 更新回退 + * + * @param userId + * @param userName + * @param processInstanceId + * @param currentTaskId + * @param jumpNodeId + * @param reason + */ + void updateGoBackByUserIdAndUserName(String userId, String userName, String processInstanceId, String currentTaskId, String jumpNodeId, String reason); + /** * 强制结束 * @@ -132,6 +155,27 @@ public interface IOaFormReportService { */ void updateForcedEnd(String processInstanceId, String currentTaskId, String reason); + /** + * 强制结束 + * + * @param token + * @param processInstanceId + * @param currentTaskId + * @param reason + */ + void updateForcedEnd(String token, String processInstanceId, String currentTaskId, String reason); + + /** + * 强制结束 + * + * @param userId + * @param userName + * @param processInstanceId + * @param currentTaskId + * @param reason + */ + void updateForcedEndByUserIdAndUserName(String userId, String userName, String processInstanceId, String currentTaskId, String reason); + /** * 更新任务 * @@ -141,6 +185,25 @@ public interface IOaFormReportService { */ void updateTaskAssignee(String processInstanceId, String taskId, UpdateTaskAssigneeVO updateTaskAssigneeVO); + /** + * 更新任务 + * @param token + * @param processInstanceId + * @param taskId + * @param updateTaskAssigneeVO + */ + void updateTaskAssignee(String token, String processInstanceId, String taskId, UpdateTaskAssigneeVO updateTaskAssigneeVO); + + /** + * 更新任务 + * @param userId + * @param userName + * @param processInstanceId + * @param taskId + * @param updateTaskAssigneeVO + */ + void updateTaskAssigneeByUserIdAndUserName(String userId, String userName, String processInstanceId, String taskId, UpdateTaskAssigneeVO updateTaskAssigneeVO); + /** * 表单详情 * diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportRouteServiceImpl.java b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportRouteServiceImpl.java index 1f745d31..0842a0d5 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportRouteServiceImpl.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportRouteServiceImpl.java @@ -21,6 +21,7 @@ import ink.wgink.module.form.service.design.IFormService; import ink.wgink.module.form.service.report.IFormReportRouteService; import ink.wgink.module.form.service.report.IFormReportService; import ink.wgink.pojo.app.AppTokenUser; +import ink.wgink.pojo.app.AppTokenUserDepartment; import ink.wgink.pojo.bos.UserInfoBO; import ink.wgink.pojo.dtos.department.DepartmentSimpleDTO; import ink.wgink.pojo.dtos.user.UserDTO; @@ -88,15 +89,17 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements @Override public void save(String processDefinitionId, String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { - Map model = getSaveModel(processDefinitionId); - setPageCurrentUser(model); + UserInfoBO currentUser = securityComponent.getCurrentUser(); + Map model = getSaveModel(currentUser.getUserId(), processDefinitionId); + setPageCurrentUser(currentUser.getUserId(), currentUser.getUserName(), currentUser.getDepartments(), model); formReportRouteService.save(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model); } @Override public void update(String taskId, String formCode, Integer formVersion, Integer isNeedClaim, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { - Map model = getUpdateModel(taskId, isNeedClaim); - setPageCurrentUser(model); + UserInfoBO currentUser = securityComponent.getCurrentUser(); + Map model = getUpdateModel(currentUser.getUserId(), taskId, isNeedClaim); + setPageCurrentUser(currentUser.getUserId(), currentUser.getUserName(), currentUser.getDepartments(), model); // 设置代理人 formReportRouteService.update(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model); } @@ -135,15 +138,17 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements @Override public void appSave(String token, String processDefinitionId, String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { - Map model = getSaveModel(processDefinitionId); - setAppPageCurrentUser(token, model); + AppTokenUser appTokenUser = getAppTokenUser(token); + Map model = getSaveModel(appTokenUser.getId(), processDefinitionId); + setAppPageCurrentUser(appTokenUser.getId(), appTokenUser.getName(), appTokenUser.getDepartments(), model); formReportRouteService.appSave(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model); } @Override public void appUpdate(String token, String taskId, String formCode, Integer formVersion, Integer isNeedClaim, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { - Map model = getUpdateModel(taskId, isNeedClaim); - setAppPageCurrentUser(token, model); + AppTokenUser appTokenUser = getAppTokenUser(token); + Map model = getUpdateModel(appTokenUser.getId(), taskId, isNeedClaim); + setAppPageCurrentUser(appTokenUser.getId(), appTokenUser.getName(), appTokenUser.getDepartments(), model); formReportRouteService.appUpdate(formCode, formVersion, httpSession, httpServletRequest, httpServletResponse, model); } @@ -170,7 +175,6 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements } - /** * 设置会签 * @@ -211,12 +215,11 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements * * @param model */ - private void setPageCurrentUser(Map model) { + private void setPageCurrentUser(String userId, String userName, List departmentSimpleDTOS, Map model) { CurrentUserVO currentUserVO = new CurrentUserVO(); - UserInfoBO currentUser = securityComponent.getCurrentUser(); - currentUserVO.setUserId(currentUser.getUserId()); - currentUserVO.setUserName(currentUser.getUserName()); - currentUserVO.setDepartments(currentUser.getDepartments()); + currentUserVO.setUserId(userId); + currentUserVO.setUserName(userName); + currentUserVO.setDepartments(departmentSimpleDTOS); model.put("currentUser", JSONObject.toJSONString(currentUserVO)); } @@ -225,12 +228,11 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements * * @param model */ - private void setAppPageCurrentUser(String token, Map model) { - AppTokenUser appTokenUser = getAppTokenUser(token); + private void setAppPageCurrentUser(String userId, String userName, List appTokenUserDepartments, Map model) { CurrentUserVO currentUserVO = new CurrentUserVO(); - currentUserVO.setUserId(appTokenUser.getId()); - currentUserVO.setUserName(appTokenUser.getName()); - currentUserVO.setDepartments(appTokenUser.getDepartments().stream().map(appTokenUserDepartment -> { + currentUserVO.setUserId(userId); + currentUserVO.setUserName(userName); + currentUserVO.setDepartments(appTokenUserDepartments.stream().map(appTokenUserDepartment -> { DepartmentSimpleDTO departmentSimpleDTO = new DepartmentSimpleDTO(); departmentSimpleDTO.setDepartmentId(appTokenUserDepartment.getDepartmentId()); departmentSimpleDTO.setDepartmentName(appTokenUserDepartment.getDepartmentName()); @@ -245,7 +247,7 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements * @param processDefinitionId * @return */ - private Map getSaveModel(String processDefinitionId) { + private Map getSaveModel(String currentUserId, String processDefinitionId) { Map model = getHashMap(10); model.put("processDefinitionId", processDefinitionId); model.put("formType", FormTypeEnum.OA.getValue()); @@ -257,7 +259,7 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements LOG.debug("发起流程,查询第一个用户任务"); UserTask firstUserTask = activitiModelService.getFirstUserTaskByProcessDefinitionId(processDefinitionId); LOG.debug("发起流程,查询第一个用户任务后直连用户任务列表"); - List confirmAssigneeVOs = listConfirmAssignee(deploymentId, firstUserTask); + List confirmAssigneeVOs = listConfirmAssignee(currentUserId, deploymentId, firstUserTask); model.put("confirmAssignees", JSON.toJSONString(confirmAssigneeVOs)); setPageFields(deploymentId, firstUserTask, model); @@ -268,11 +270,12 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements /** * 编辑页面Model * + * @param currentUserId * @param taskId * @param isNeedClaim * @return */ - private Map getUpdateModel(String taskId, Integer isNeedClaim) { + private Map getUpdateModel(String currentUserId, String taskId, Integer isNeedClaim) { Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); if (task == null) { throw new SearchException("任务不存在"); @@ -292,7 +295,7 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements model.put("processInstanceId", task.getProcessInstanceId()); model.put("isNeedClaim", isNeedClaim); LOG.debug("查询下一个用户任务后直连用户任务列表"); - List confirmAssigneeVOs = listConfirmAssignee(deploymentId, currentUserTask); + List confirmAssigneeVOs = listConfirmAssignee(currentUserId, deploymentId, currentUserTask); model.put("confirmAssignees", JSON.toJSONString(confirmAssigneeVOs)); setPageFields(deploymentId, currentUserTask, model); @@ -394,7 +397,7 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements * @param currentUserTask * @return */ - private List listConfirmAssignee(String deploymentId, UserTask currentUserTask) { + private List listConfirmAssignee(String currentUserId, String deploymentId, UserTask currentUserTask) { LOG.debug("1.获取后续任务节点"); List nextUserTasks = activitiModelService.listNextUserTasksByUserTask(currentUserTask); clearUserTask(nextUserTasks); @@ -424,7 +427,7 @@ public class OaFormReportRouteServiceImpl extends DefaultBaseService implements // 设置节点类型 confirmAssigneeVO.setNodeType(oaNodeAssigneePO.getNodeType()); // 设置节点代理人列表 - List assigneeList = nodeAssigneeService.listAssigneeUserId(securityComponent.getCurrentUser().getUserId(), oaNodeAssigneePO); + List assigneeList = nodeAssigneeService.listAssigneeUserId(currentUserId, oaNodeAssigneePO); List userDTOs = userBaseService.listByUserIds(assigneeList); List assigneeVOs = userDTOs.stream().map(userDTO -> { ConfirmAssigneeVO.AssigneeVO assigneeVO = new ConfirmAssigneeVO.AssigneeVO(); diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportServiceImpl.java b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportServiceImpl.java index 79bdb8d0..30d01a0b 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportServiceImpl.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportServiceImpl.java @@ -86,7 +86,7 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo OaFormReportUnWantedValueBO oaFormReportUnWantedValueBO = getOaFormReportUnWantedValue(params); LOG.debug("保存表单"); - String uid = formReportService.saveAndReturnId(formCode, formVersion, params); + String uid = formReportService.saveByUserIdAndReturnId(userId, formCode, formVersion, params); LOG.debug("定义流程发起人"); Map variables = getHashMap(2); variables.put(KEY_FORM_CODE, formCode); @@ -157,14 +157,27 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo @Override public void updateGoBack(String processInstanceId, String currentTaskId, String jumpNodeId, String reason) { + UserInfoBO currentUser = securityComponent.getCurrentUser(); + String userId = currentUser.getUserId(); + String userName = currentUser.getUserName(); + updateGoBackByUserIdAndUserName(userId, userName, processInstanceId, currentTaskId, jumpNodeId, reason); + } + + @Override + public void updateGoBack(String token, String processInstanceId, String currentTaskId, String jumpNodeId, String reason) { + AppTokenUser appTokenUser = getAppTokenUser(token); + String userId = appTokenUser.getId(); + String userName = appTokenUser.getName(); + updateGoBackByUserIdAndUserName(userId, userName, processInstanceId, currentTaskId, jumpNodeId, reason); + } + + @Override + public void updateGoBackByUserIdAndUserName(String userId, String userName, String processInstanceId, String currentTaskId, String jumpNodeId, String reason) { LOG.debug("OA流程回退"); Task currentTask = taskService.createTaskQuery().taskId(currentTaskId).singleResult(); if (currentTask == null) { throw new SearchException("任务不存在或已被处理"); } - UserInfoBO currentUser = securityComponent.getCurrentUser(); - String userId = currentUser.getUserId(); - String userName = currentUser.getUserName(); List historicTaskInstances = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).list(); BpmnModel bpmnModel = activitiModelService.getBpmnModelByProcessDefinitionId(currentTask.getProcessDefinitionId()); @@ -266,14 +279,27 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo @Override public void updateForcedEnd(String processInstanceId, String currentTaskId, String reason) { + UserInfoBO currentUser = securityComponent.getCurrentUser(); + String userId = currentUser.getUserId(); + String userName = currentUser.getUserName(); + updateForcedEndByUserIdAndUserName(userId, userName, processInstanceId, currentTaskId, reason); + } + + @Override + public void updateForcedEnd(String token, String processInstanceId, String currentTaskId, String reason) { + AppTokenUser appTokenUser = getAppTokenUser(token); + String userId = appTokenUser.getId(); + String userName = appTokenUser.getName(); + updateForcedEndByUserIdAndUserName(userId, userName, processInstanceId, currentTaskId, reason); + } + + @Override + public void updateForcedEndByUserIdAndUserName(String userId, String userName, String processInstanceId, String currentTaskId, String reason) { LOG.debug("OA强制结束"); Task currentTask = taskService.createTaskQuery().taskId(currentTaskId).singleResult(); if (currentTask == null) { throw new SearchException("任务不存在或已被处理"); } - UserInfoBO currentUser = securityComponent.getCurrentUser(); - String userId = currentUser.getUserId(); - String userName = currentUser.getUserName(); List historicTaskInstances = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).unfinished().list(); BpmnModel bpmnModel = activitiModelService.getBpmnModelByProcessDefinitionId(currentTask.getProcessDefinitionId()); @@ -286,7 +312,7 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo List outgoingFlows = currentUserTask.getOutgoingFlows(); LOG.debug("4. 缓存原始输出流"); List oldOutgoingFlows = new ArrayList<>(); - oldOutgoingFlows.addAll(currentUserTask.getOutgoingFlows()); + oldOutgoingFlows.addAll(outgoingFlows); LOG.debug("5. 创建新序列流"); currentUserTask.getOutgoingFlows().clear(); List newOutgoingFlows = new ArrayList<>(); @@ -344,7 +370,19 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo UserInfoBO currentUser = securityComponent.getCurrentUser(); String userId = currentUser.getUserId(); String userName = currentUser.getUserName(); + updateTaskAssigneeByUserIdAndUserName(userId, userName, processInstanceId, taskId, updateTaskAssigneeVO); + } + @Override + public void updateTaskAssignee(String token, String processInstanceId, String taskId, UpdateTaskAssigneeVO updateTaskAssigneeVO) { + AppTokenUser appTokenUser = getAppTokenUser(token); + String userId = appTokenUser.getId(); + String userName = appTokenUser.getName(); + updateTaskAssigneeByUserIdAndUserName(userId, userName, processInstanceId, taskId, updateTaskAssigneeVO); + } + + @Override + public void updateTaskAssigneeByUserIdAndUserName(String userId, String userName, String processInstanceId, String taskId, UpdateTaskAssigneeVO updateTaskAssigneeVO) { taskService.setAssignee(taskId, updateTaskAssigneeVO.getAssignee()); TaskCommentBO taskCommentBO = new TaskCommentBO(); diff --git a/module-form/src/main/java/ink/wgink/module/form/service/report/impl/FormReportServiceImpl.java b/module-form/src/main/java/ink/wgink/module/form/service/report/impl/FormReportServiceImpl.java index 402ae8b8..2f05d226 100644 --- a/module-form/src/main/java/ink/wgink/module/form/service/report/impl/FormReportServiceImpl.java +++ b/module-form/src/main/java/ink/wgink/module/form/service/report/impl/FormReportServiceImpl.java @@ -81,7 +81,6 @@ public class FormReportServiceImpl extends DefaultBaseService implements IFormRe // 设置主标题,并更新到params,保存到流程中 inserts.add(IFormDesignService.FIELD_MAIN_TITLE); String mainTitle = getMainTitleCode(formPO.getMainTitleTpl(), params); - params.put(IFormDesignService.FIELD_MAIN_TITLE, mainTitle); values.add(mainTitle); for (Map.Entry kv : params.entrySet()) { @@ -105,6 +104,8 @@ public class FormReportServiceImpl extends DefaultBaseService implements IFormRe insertParams.put(IFormDesignService.PARAM_FORM_VERSION, formVersion); insertParams.put(IFormDesignService.PARAM_INSERTS, inserts); insertParams.put(IFormDesignService.PARAM_VALUES, values); + params.put(IFormDesignService.FIELD_MAIN_TITLE, mainTitle); + formReportDao.save(insertParams); return uid; } diff --git a/module-form/src/main/resources/static/form/css/form-app.css b/module-form/src/main/resources/static/form/css/form-app.css index 371f9cef..de987f42 100644 --- a/module-form/src/main/resources/static/form/css/form-app.css +++ b/module-form/src/main/resources/static/form/css/form-app.css @@ -3,7 +3,7 @@ } .layui-form-item { margin-bottom: 0px; - padding: 15px 0; + padding: 0; clear: both; border-top: 1px; border-left: 0; @@ -237,3 +237,45 @@ text-align: center; background-color: #FFF; } + +#appSubmitFormBtns { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.3); + z-index: 1000; +} + +#appSubmitFormBtnsContainer { + position: absolute; + bottom: -160px; + left: 0; + width: 100%; + max-height: 160px; + background-color: white; + overflow: auto; +} + +#appFormBtns { + display: none; + position: fixed; + top: 0; + right: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.3); + z-index: 1000; +} + +#appFormBtnsContainer { + position: absolute; + bottom: -160px; + left: 0; + width: 100%; + max-height: 160px; + background-color: white; + overflow: auto; +} \ No newline at end of file diff --git a/module-form/src/main/resources/static/form/css/oa-form.css b/module-form/src/main/resources/static/form/css/oa-form.css index 4526e0d9..ef2b9c31 100644 --- a/module-form/src/main/resources/static/form/css/oa-form.css +++ b/module-form/src/main/resources/static/form/css/oa-form.css @@ -9,6 +9,17 @@ border-bottom: 1px solid #f1f1f1; } +.oa-form-footer-tool-bar { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + padding: 15px 0; + z-index: 100; + background-color: #FFF; + border-bottom: 1px solid #f1f1f1; +} + .layui-card { margin-bottom: 0px; } @@ -30,6 +41,17 @@ padding: 0 15px; } +.oa-form-footer-tool-bar .tool-bar-left { + min-height: 30px; + padding: 0 15px; +} + +.oa-form-footer-tool-bar .tool-bar-right { + min-height: 30px; + text-align: right; + padding: 0 15px; +} + #runtimeProcessImageBox { position: relative; } @@ -69,11 +91,18 @@ } #submitFormBtnsContainer { - position: relative; + position: absolute; top: 0; - left: -180px; + left: 0; width: 180px; height: 100%; background-color: white; overflow: auto; + animation-name: slideLeftBtnsIn; + animation-duration: 300ms; +} + +@keyframes slideLeftBtnsIn { + from {left: -180px} + to {left: 0px} } \ No newline at end of file diff --git a/module-form/src/main/resources/static/form/js/oa-form-util.js b/module-form/src/main/resources/static/form/js/oa-form-util.js index 31e07e4d..3588d5ab 100644 --- a/module-form/src/main/resources/static/form/js/oa-form-util.js +++ b/module-form/src/main/resources/static/form/js/oa-form-util.js @@ -243,22 +243,21 @@ function OaFormUtil(layui) { /** * 初始化提交按钮 * @param confirmAssignees + * @param opt */ - this.initSubmitBtns = function (confirmAssignees) { + this.initSubmitBtns = function (confirmAssignees, opt) { var btnColor = ['', 'layui-btn-normal', 'layui-btn-warm']; - if(confirmAssignees.length < 3) { - var btns = ''; - for (var i = 0, item; item = confirmAssignees[i++];) { - btns += '' - } - $('#submitBtnGroup').append(btns); - } else { - $('#submitBtnGroup').append(''); + var isApp = opt && opt.isApp ? opt.isApp : false; + if(isApp) { + var appButtonCount = 0; - var html = '
'; - html += '
'; - html += '
' + $('#submitBtnGroup').append(''); + + var html = '
'; + html += '
'; + html += '
'; for (var i = 0, item; item = confirmAssignees[i++];) { + appButtonCount++; html += '' } html += '
'; @@ -267,19 +266,56 @@ function OaFormUtil(layui) { $('#submitBtnGroup').append(html) - $(document).on('click', '#submitFormBtns', function() { + var maxHeight = appButtonCount * 30 + (appButtonCount + 1) * 10; + maxHeight = maxHeight > 160 ? 160 : maxHeight; + + $(document).on('click', '#appSubmitFormBtns', function() { $(this).hide(); - $('#submitFormBtnsContainer').css('left', '-180px'); + $('#appSubmitFormBtnsContainer').css('bottom', (-1 * maxHeight +'px')); }) - $(document).on('click', '#submitFormBtnsContainer', function(e) { + $(document).on('click', '#appSubmitFormBtnsContainer', function(e) { e.stopPropagation() }) - $(document).on('click', '#showSubmitFormBtns', function() { - $('#submitFormBtns').show(); - $('#submitFormBtnsContainer').animate({left: '0'}, 300); + $(document).on('click', '#appShowSubmitFormBtns', function() { + $('#appSubmitFormBtns').show(); + $('#appSubmitFormBtnsContainer').animate({bottom: 0}, 200); }) + } else { + if(confirmAssignees.length < 4) { + var btns = ''; + for (var i = 0, item; item = confirmAssignees[i++];) { + btns += '' + } + $('#submitBtnGroup').append(btns); + } else { + $('#submitBtnGroup').append(''); + + var html = '
'; + html += '
'; + html += '
' + for (var i = 0, item; item = confirmAssignees[i++];) { + html += '' + } + html += '
'; + html += '
'; + html += '
'; + + $('#submitBtnGroup').append(html) + + $(document).on('click', '#submitFormBtns', function() { + $(this).hide(); + }) + + $(document).on('click', '#submitFormBtnsContainer', function(e) { + e.stopPropagation() + }) + + $(document).on('click', '#showSubmitFormBtns', function() { + $('#submitFormBtns').show(); + }) + } } } @@ -371,29 +407,65 @@ function OaFormUtil(layui) { var formVersion = opt.formVersion; var uid = opt.uid; var onPreview = typeof (opt.onPreview) === 'function' ? opt.onPreview : null; + var appButtonCount = 0; function initButton() { var buttons = ''; - buttons += '
' - if(formButton.btnPrint) { - buttons += ''; + + if(isApp) { + buttons += '' + buttons += '
'; + buttons += '
'; + buttons += '
' + if(formButton.btnPrint) { + buttons += ''; + appButtonCount++; + } + if (formButton.btnGoBack) { + buttons += ''; + appButtonCount++; + } + if(formButton.btnForcedEnd) { + buttons += ''; + appButtonCount++; + } + if(formButton.btnCc) { + buttons += ''; + appButtonCount++; + } + if(formButton.btnTransfer) { + buttons += ''; + appButtonCount++; + } + if (formButton.btnAttachment) { + buttons += ''; + appButtonCount++; + } + buttons += '
'; + buttons += '
'; + buttons += '
'; + } else { + buttons += '
' + if(formButton.btnPrint) { + buttons += ''; + } + if (formButton.btnGoBack) { + buttons += ''; + } + if(formButton.btnForcedEnd) { + buttons += ''; + } + if(formButton.btnCc) { + buttons += ''; + } + if(formButton.btnTransfer) { + buttons += ''; + } + if (formButton.btnAttachment) { + buttons += ''; + } + buttons += '
'; } - if (formButton.btnGoBack) { - buttons += ''; - } - if(formButton.btnForcedEnd) { - buttons += ''; - } - if(formButton.btnCc) { - buttons += ''; - } - if(formButton.btnTransfer) { - buttons += ''; - } - if (formButton.btnAttachment) { - buttons += ''; - } - buttons += '
'; buttons += '
'; buttons += ''; buttons += ''; @@ -403,6 +475,24 @@ function OaFormUtil(layui) { } function addClick() { + if(isApp) { + var maxHeight = appButtonCount * 30 + (appButtonCount + 1) * 10; + maxHeight = maxHeight > 160 ? 160 : maxHeight; + $(document).on('click', '#appFormBtns', function() { + $(this).hide(); + $('#appFormBtnsContainer').css('bottom', (-1 * maxHeight +'px')); + }) + + $(document).on('click', '#appFormBtnsContainer', function(e) { + e.stopPropagation() + }) + + $(document).on('click', '#appShowFormBtns', function() { + $('#appFormBtns').show(); + $('#appFormBtnsContainer').animate({bottom: 0}, 200); + }) + } + if (formButton.btnAttachment) { var layerLoadingIndex; var url = 'api/file/v2/upload-file'; @@ -465,7 +555,7 @@ function OaFormUtil(layui) { ' ', ' ', ' ', - onPreview && formButton.btnAttachment ? '' : '', + onPreview && formButton.btnAttachment ? '' : '', ' ', ' ', ' ', @@ -500,11 +590,21 @@ function OaFormUtil(layui) { '
', '
' ].join(''); + + var area; + var offset; + if(isApp) { + area = ['100%', '400px']; + offset = 'b'; + } else { + area = ['400px', '100%']; + offset = 'r'; + } layer.open({ type: 1, title: false, - area: ['400px', '100%'], - offset: 'r', + area: area, + offset: offset, anim: 2, isOutAnim: false, closeBtn: 0, diff --git a/module-form/src/main/resources/static/form/js/oa-user-select.js b/module-form/src/main/resources/static/form/js/oa-user-select.js index 3909a963..07b7b2a6 100644 --- a/module-form/src/main/resources/static/form/js/oa-user-select.js +++ b/module-form/src/main/resources/static/form/js/oa-user-select.js @@ -222,9 +222,18 @@ function OaUserSelect(layui, opt) { Methods.refreshSelectedUser(); return; } - top.restAjax.post(top.restAjax.path('api/user/listbyids', []), { + var url; + if(isApp) { + url = 'app/user/list/ids'; + } else { + url = 'api/user/listbyids'; + } + console.log(headers); + restAjax.post(restAjax.path(url, []), { ids: selectedUserIdArray - }, null, function(code, data) { + }, { + headers: headers + }, function(code, data) { for(var i = 0, item; item = data[i++];) { var user = { userId: item.userId, @@ -246,7 +255,16 @@ function OaUserSelect(layui, opt) { // 初始化部门与部门用户 initDepartmentAndUser: function(parentDepartmentId) { var loadLayerIndex; - top.restAjax.get(top.restAjax.path('api/department/user/get-department-contain-user-and-sub/department-id/{departmentId}', [parentDepartmentId]), {}, null, function(code, data) { + var url; + if(isApp) { + url = 'app/department/user/get-department-contain-user-and-sub/department-id/{departmentId}'; + } else { + url = 'api/department/user/get-department-contain-user-and-sub/department-id/{departmentId}'; + } + console.log(headers); + restAjax.get(restAjax.path(url, [parentDepartmentId]), {}, { + headers: headers + }, function(code, data) { Properties.selectedDepartmentArray.push({ departmentId: data.departmentId, departmentName: data.departmentName, diff --git a/module-form/src/main/resources/templates/ftl/page/app/oa/app-form-save.ftl b/module-form/src/main/resources/templates/ftl/page/app/oa/app-form-save.ftl index 030e5dc3..96ceafdb 100644 --- a/module-form/src/main/resources/templates/ftl/page/app/oa/app-form-save.ftl +++ b/module-form/src/main/resources/templates/ftl/page/app/oa/app-form-save.ftl @@ -13,21 +13,26 @@ - + +
- <#list fields as field> - ${field.html} - -
- @@ -37,6 +42,8 @@
+ +