From 43cdb970b1db2b5e086b4dd8695e107fbdaa14db Mon Sep 17 00:00:00 2001 From: "459816669@qq.com" <459816669@qq.com> Date: Sat, 27 Mar 2021 15:05:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0form=E8=A1=A8=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- snow-admin/pom.xml | 3 +- .../controller/common/CommonController.java | 3 +- .../dingtalk/CallBackController.java | 4 + .../dingtalk/DingTaskController.java | 198 +++++++++ .../dingtalk/OfficialFlowController.java | 156 ++++++- .../system/SysProfileController.java | 2 +- snow-admin/src/main/resources/banner.txt | 34 +- .../main/resources/templates/big_screen.html | 17 +- .../templates/ding/flow/myStartProcess.html | 120 +++++ .../ding/flow/myStartProcessDetail.html | 156 +++++++ .../templates/ding/flow/templateManage.html | 38 +- .../resources/templates/ding/task/add.html | 126 ++++++ .../ding/{flow => task}/checkDetail.html | 55 ++- .../resources/templates/ding/task/edit.html | 127 ++++++ .../templates/ding/task/myTasked.html | 115 +++++ .../templates/ding/task/myTaskedDetail.html | 105 +++++ .../resources/templates/ding/task/task.html | 138 ++++++ snow-common/pom.xml | 2 +- .../com/snow/common/constant/Constants.java | 26 ++ .../common/enums/DingFlowOperationType.java | 50 +++ .../snow/common/enums/DingFlowTaskType.java | 54 +++ .../common/enums/DingTalkListenerType.java | 6 +- .../snow/common/enums/FormComponentType.java | 64 +++ .../FileNameLengthLimitExceededException.java | 2 +- .../java/com/snow/common/utils/DateUtils.java | 2 + .../common/utils/file/FileUploadUtils.java | 84 ++-- .../snow/common/utils/file/MimeTypeUtils.java | 6 +- snow-dingtalk/pom.xml | 3 +- .../snow/dingtalk/common/BaseConstantUrl.java | 7 + .../dingtalk/model/DingFinishTaskRequest.java | 62 +++ .../dingtalk/model/DingOperationRecordVO.java | 67 +++ .../com/snow/dingtalk/model/DingTaskVO.java | 67 +++ .../snow/dingtalk/model/SaveFlowRequest.java | 108 +++++ .../snow/dingtalk/model/StartFlowRequest.java | 51 +++ .../service/DingOfficialFlowService.java | 23 + .../impl/DingOfficialFlowServiceImpl.java | 115 +++++ .../snow/dingtalk/sync/SyncFlowService.java | 274 ++++++++++++ .../dingtalk/sync/SyncSysInfoFactory.java | 2 + snow-flowable/pom.xml | 3 +- .../snow/flowable/config/ResourcesConfig.java | 8 +- snow-framework/pom.xml | 2 +- .../config/StorageAutoConfiguration.java | 13 +- .../snow/framework/storage/AliyunStorage.java | 9 +- .../snow/framework/storage/LocalStorage.java | 280 +++++++++--- .../com/snow/framework/storage/Storage.java | 12 +- .../framework/storage/StorageService.java | 15 +- snow-from/pom.xml | 5 +- .../snow/from/controller/FromController.java | 38 +- .../controller/SysFormFieldController.java | 123 ++++++ .../controller/SysFormInstanceController.java | 234 ++++++++++ .../com/snow/from/domain/FieldContentDTO.java | 42 ++ .../from/{model => domain}/FromInfoDTO.java | 9 +- .../com/snow/from/domain/SysFormField.java | 53 +++ .../com/snow/from/domain/SysFormInstance.java | 52 +++ .../snow/from/mapper/SysFormFieldMapper.java | 62 +++ .../from/mapper/SysFormInstanceMapper.java | 76 ++++ .../from/service/ISysFormFieldService.java | 62 +++ .../from/service/ISysFormInstanceService.java | 76 ++++ .../service/impl/SysFormFieldServiceImpl.java | 98 +++++ .../impl/SysFormInstanceServiceImpl.java | 107 +++++ .../mapper/system/SysFormFieldMapper.xml | 114 +++++ .../mapper/system/SysFormInstanceMapper.xml | 116 +++++ .../src/main/resources/static/js/index.js | 118 ++--- .../main/resources/templates/fromIndex.html | 1 + .../main/resources/templates/fromPreview.html | 24 +- .../resources/templates/system/field/add.html | 67 +++ .../templates/system/field/edit.html | 68 +++ .../templates/system/field/field.html | 138 ++++++ .../templates/system/instance/add.html | 61 +++ .../templates/system/instance/edit.html | 62 +++ .../system/instance/fromPreview.html | 414 ++++++++++++++++++ .../templates/system/instance/instance.html | 106 +++++ snow-generator/pom.xml | 2 +- snow-quartz/pom.xml | 5 +- snow-system/pom.xml | 3 +- .../com/snow/system/domain/SysDingHiTask.java | 77 ++++ .../snow/system/domain/SysDingProcinst.java | 99 +++++ .../com/snow/system/domain/SysDingRuTask.java | 88 ++++ .../system/mapper/SysDingHiTaskMapper.java | 61 +++ .../system/mapper/SysDingProcinstMapper.java | 67 +++ .../system/mapper/SysDingRuTaskMapper.java | 61 +++ .../com/snow/system/mapper/SysUserMapper.java | 7 + .../system/service/ISysDingHiTaskService.java | 61 +++ .../service/ISysDingProcinstService.java | 67 +++ .../system/service/ISysDingRuTaskService.java | 61 +++ .../snow/system/service/ISysUserService.java | 7 + .../impl/SysDingHiTaskServiceImpl.java | 130 ++++++ .../impl/SysDingProcinstServiceImpl.java | 118 +++++ .../impl/SysDingRuTaskServiceImpl.java | 127 ++++++ .../service/impl/SysUserServiceImpl.java | 5 + .../mapper/system/SysDingHiTaskMapper.xml | 144 ++++++ .../mapper/system/SysDingProcinstMapper.xml | 132 ++++++ .../mapper/system/SysDingRuTaskMapper.xml | 134 ++++++ .../resources/mapper/system/SysUserMapper.xml | 5 + 94 files changed, 6203 insertions(+), 398 deletions(-) create mode 100644 snow-admin/src/main/java/com/snow/web/controller/dingtalk/DingTaskController.java create mode 100644 snow-admin/src/main/resources/templates/ding/flow/myStartProcess.html create mode 100644 snow-admin/src/main/resources/templates/ding/flow/myStartProcessDetail.html create mode 100644 snow-admin/src/main/resources/templates/ding/task/add.html rename snow-admin/src/main/resources/templates/ding/{flow => task}/checkDetail.html (61%) create mode 100644 snow-admin/src/main/resources/templates/ding/task/edit.html create mode 100644 snow-admin/src/main/resources/templates/ding/task/myTasked.html create mode 100644 snow-admin/src/main/resources/templates/ding/task/myTaskedDetail.html create mode 100644 snow-admin/src/main/resources/templates/ding/task/task.html create mode 100644 snow-common/src/main/java/com/snow/common/enums/DingFlowOperationType.java create mode 100644 snow-common/src/main/java/com/snow/common/enums/DingFlowTaskType.java create mode 100644 snow-common/src/main/java/com/snow/common/enums/FormComponentType.java create mode 100644 snow-dingtalk/src/main/java/com/snow/dingtalk/model/DingFinishTaskRequest.java create mode 100644 snow-dingtalk/src/main/java/com/snow/dingtalk/model/DingOperationRecordVO.java create mode 100644 snow-dingtalk/src/main/java/com/snow/dingtalk/model/DingTaskVO.java create mode 100644 snow-dingtalk/src/main/java/com/snow/dingtalk/model/SaveFlowRequest.java create mode 100644 snow-dingtalk/src/main/java/com/snow/dingtalk/model/StartFlowRequest.java create mode 100644 snow-dingtalk/src/main/java/com/snow/dingtalk/sync/SyncFlowService.java create mode 100644 snow-from/src/main/java/com/snow/from/controller/SysFormFieldController.java create mode 100644 snow-from/src/main/java/com/snow/from/controller/SysFormInstanceController.java create mode 100644 snow-from/src/main/java/com/snow/from/domain/FieldContentDTO.java rename snow-from/src/main/java/com/snow/from/{model => domain}/FromInfoDTO.java (86%) create mode 100644 snow-from/src/main/java/com/snow/from/domain/SysFormField.java create mode 100644 snow-from/src/main/java/com/snow/from/domain/SysFormInstance.java create mode 100644 snow-from/src/main/java/com/snow/from/mapper/SysFormFieldMapper.java create mode 100644 snow-from/src/main/java/com/snow/from/mapper/SysFormInstanceMapper.java create mode 100644 snow-from/src/main/java/com/snow/from/service/ISysFormFieldService.java create mode 100644 snow-from/src/main/java/com/snow/from/service/ISysFormInstanceService.java create mode 100644 snow-from/src/main/java/com/snow/from/service/impl/SysFormFieldServiceImpl.java create mode 100644 snow-from/src/main/java/com/snow/from/service/impl/SysFormInstanceServiceImpl.java create mode 100644 snow-from/src/main/resources/mapper/system/SysFormFieldMapper.xml create mode 100644 snow-from/src/main/resources/mapper/system/SysFormInstanceMapper.xml create mode 100644 snow-from/src/main/resources/templates/system/field/add.html create mode 100644 snow-from/src/main/resources/templates/system/field/edit.html create mode 100644 snow-from/src/main/resources/templates/system/field/field.html create mode 100644 snow-from/src/main/resources/templates/system/instance/add.html create mode 100644 snow-from/src/main/resources/templates/system/instance/edit.html create mode 100644 snow-from/src/main/resources/templates/system/instance/fromPreview.html create mode 100644 snow-from/src/main/resources/templates/system/instance/instance.html create mode 100644 snow-system/src/main/java/com/snow/system/domain/SysDingHiTask.java create mode 100644 snow-system/src/main/java/com/snow/system/domain/SysDingProcinst.java create mode 100644 snow-system/src/main/java/com/snow/system/domain/SysDingRuTask.java create mode 100644 snow-system/src/main/java/com/snow/system/mapper/SysDingHiTaskMapper.java create mode 100644 snow-system/src/main/java/com/snow/system/mapper/SysDingProcinstMapper.java create mode 100644 snow-system/src/main/java/com/snow/system/mapper/SysDingRuTaskMapper.java create mode 100644 snow-system/src/main/java/com/snow/system/service/ISysDingHiTaskService.java create mode 100644 snow-system/src/main/java/com/snow/system/service/ISysDingProcinstService.java create mode 100644 snow-system/src/main/java/com/snow/system/service/ISysDingRuTaskService.java create mode 100644 snow-system/src/main/java/com/snow/system/service/impl/SysDingHiTaskServiceImpl.java create mode 100644 snow-system/src/main/java/com/snow/system/service/impl/SysDingProcinstServiceImpl.java create mode 100644 snow-system/src/main/java/com/snow/system/service/impl/SysDingRuTaskServiceImpl.java create mode 100644 snow-system/src/main/resources/mapper/system/SysDingHiTaskMapper.xml create mode 100644 snow-system/src/main/resources/mapper/system/SysDingProcinstMapper.xml create mode 100644 snow-system/src/main/resources/mapper/system/SysDingRuTaskMapper.xml diff --git a/snow-admin/pom.xml b/snow-admin/pom.xml index 966dc59..1e3b049 100644 --- a/snow-admin/pom.xml +++ b/snow-admin/pom.xml @@ -5,7 +5,7 @@ snow com.snow - 4.3.1 + 2.0.0 4.0.0 jar @@ -99,7 +99,6 @@ com.snow snow-from - 4.3.1 diff --git a/snow-admin/src/main/java/com/snow/web/controller/common/CommonController.java b/snow-admin/src/main/java/com/snow/web/controller/common/CommonController.java index 86b063e..c8210be 100644 --- a/snow-admin/src/main/java/com/snow/web/controller/common/CommonController.java +++ b/snow-admin/src/main/java/com/snow/web/controller/common/CommonController.java @@ -77,8 +77,7 @@ public class CommonController { try { - String originalFilename = file.getOriginalFilename(); - SysFile store = storageService.store(file.getInputStream(), file.getSize(), file.getContentType(), originalFilename); + SysFile store = storageService.store(file); AjaxResult ajax = AjaxResult.success(); ajax.put("fileKey",store.getKey()); ajax.put("fileName", store.getName()); diff --git a/snow-admin/src/main/java/com/snow/web/controller/dingtalk/CallBackController.java b/snow-admin/src/main/java/com/snow/web/controller/dingtalk/CallBackController.java index 5162b49..29f87a6 100644 --- a/snow-admin/src/main/java/com/snow/web/controller/dingtalk/CallBackController.java +++ b/snow-admin/src/main/java/com/snow/web/controller/dingtalk/CallBackController.java @@ -80,6 +80,10 @@ public class CallBackController { if(StringUtils.isEmpty(type)){ return Constants.CALL_BACK_FAIL_RETURN; } + //测试回调URL事件,直接返回加密后的success即可 + if(eventType.equals(DingTalkListenerType.CALL_BACK_CHECK_URL.getInfo())){ + return dingTalkEncryptor.getEncryptedMap(Constants.CALL_BACK_SUCCESS_RETURN, timestamp, nonce); + } //调用工厂模式异步处理数据 SyncSysInfoFactory syncSysInfoFactory = new SyncSysInfoFactory(); ISyncSysInfo iSyncSysInfo = syncSysInfoFactory.getSyncSysInfoService(type); diff --git a/snow-admin/src/main/java/com/snow/web/controller/dingtalk/DingTaskController.java b/snow-admin/src/main/java/com/snow/web/controller/dingtalk/DingTaskController.java new file mode 100644 index 0000000..e6a6a14 --- /dev/null +++ b/snow-admin/src/main/java/com/snow/web/controller/dingtalk/DingTaskController.java @@ -0,0 +1,198 @@ +package com.snow.web.controller.dingtalk; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import com.dingtalk.api.response.OapiProcessinstanceGetResponse; +import com.snow.common.annotation.RepeatSubmit; +import com.snow.common.core.controller.BaseController; +import com.snow.common.core.domain.AjaxResult; +import com.snow.common.core.page.TableDataInfo; +import com.snow.common.enums.DingFlowTaskType; +import com.snow.dingtalk.model.DingFinishTaskRequest; +import com.snow.dingtalk.model.DingTaskVO; +import com.snow.dingtalk.model.FlowExecuteTaskRequest; +import com.snow.dingtalk.service.impl.DingOfficialFlowServiceImpl; +import com.snow.framework.util.ShiroUtils; +import com.snow.system.domain.SysDingHiTask; +import com.snow.system.domain.SysDingRuTask; +import com.snow.system.domain.SysUser; +import com.snow.system.service.ISysDingHiTaskService; +import com.snow.system.service.ISysDingRuTaskService; +import com.snow.system.service.impl.SysUserServiceImpl; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; +import java.util.stream.Collectors; + + +/** + * 钉钉任务Controller + * + * @author 没用的阿吉 + * @date 2021-03-24 + */ + +@Controller +@RequestMapping("/ding/task") +public class DingTaskController extends BaseController +{ + private String prefix = "ding/task"; + + @Autowired + private ISysDingRuTaskService sysDingRuTaskService; + + @Autowired + private DingOfficialFlowServiceImpl dingOfficialFlowService; + + @Autowired + private ISysDingHiTaskService sysDingHiTaskService; + + @Autowired + private SysUserServiceImpl sysUserService; + + @RequiresPermissions("ding:task:view") + @GetMapping() + public String task() + { + return prefix + "/task"; + } + + + /** + * 查询钉钉运行任务列表 + */ + + @RequiresPermissions("ding:task:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(SysDingRuTask sysDingRuTask) + { + startPage(); + SysUser sysUser = ShiroUtils.getSysUser(); + sysDingRuTask.setAssignee(sysUser.getDingUserId()); + //待办为处理中的 + sysDingRuTask.setTaskState(DingFlowTaskType.RUNNING.getCode()); + List list = sysDingRuTaskService.selectSysDingRuTaskList(sysDingRuTask); + return getDataTable(list); + } + + + + + /** + * 跳转完成任务界面 + * @return + */ + @GetMapping("/toFinishTask") + public String toFinishTask(String taskId,ModelMap mmap) + { + SysDingRuTask sysDingRuTask = sysDingRuTaskService.selectSysDingRuTaskById(taskId); + + OapiProcessinstanceGetResponse.ProcessInstanceTopVo processInstanceDetail = dingOfficialFlowService.getProcessInstanceDetail(sysDingRuTask.getProcInstId()); + + //获取表单值 + List formComponentValues = processInstanceDetail.getFormComponentValues(); + + mmap.put("formComponentValues",formComponentValues); + mmap.put("taskId",taskId); + mmap.put("processInstanceId",sysDingRuTask.getProcInstId()); + mmap.put("processInstanceDetail",processInstanceDetail); + return prefix+"/checkDetail"; + } + + /** + * 完成任务 + * @return + */ + @PostMapping("/finishTask") + @RequiresPermissions("ding:task:finishTask") + @ResponseBody + @RepeatSubmit + public AjaxResult finishTask(DingFinishTaskRequest finishTaskDTO) + { + SysUser sysUser = ShiroUtils.getSysUser(); + finishTaskDTO.setUserId(sysUser.getDingUserId()); + FlowExecuteTaskRequest flowExecuteTaskRequest=new FlowExecuteTaskRequest(); + flowExecuteTaskRequest.setTaskId(Long.parseLong(finishTaskDTO.getTaskId())); + flowExecuteTaskRequest.setActionerUserid(sysUser.getDingUserId()); + flowExecuteTaskRequest.setRemark(finishTaskDTO.getComment()); + flowExecuteTaskRequest.setResult(finishTaskDTO.getIsPass()?"agree":"refuse"); + flowExecuteTaskRequest.setProcessInstanceId(finishTaskDTO.getProcessInstanceId()); + Boolean aBoolean = dingOfficialFlowService.executeProcessInstance(flowExecuteTaskRequest); + return AjaxResult.success(aBoolean); + } + + /** + * 跳转我的已办 + * @return + */ + @RequiresPermissions("ding:task:myTasked") + @GetMapping("/toMyTasked") + public String toMyTasked() + { + + return prefix+"/myTasked"; + } + + /** + * 获取我办结的任务列表 + * @param sysDingHiTask + * @return + */ + @RequiresPermissions("ding:task:myTasked") + @PostMapping("/getMyTaskedList") + @ResponseBody + public TableDataInfo getMyTaskedList(SysDingHiTask sysDingHiTask){ + startPage(); + SysUser sysUser = ShiroUtils.getSysUser(); + sysDingHiTask.setAssignee(sysUser.getDingUserId()); + sysDingHiTask.setTaskState(DingFlowTaskType.COMPLETED.getCode()); + List list = sysDingHiTaskService.selectSysDingHiTaskList(sysDingHiTask); + return getDataTable(list); + } + + + /** + * 获取我的已办详情 + * @param taskId + * @return + */ + @RequiresPermissions("ding:task:getTaskedDetail") + @GetMapping("/getTaskedDetail") + public String getTaskedDetail(String taskId,ModelMap mmap){ + + SysDingHiTask sysDingHiTask = sysDingHiTaskService.selectSysDingHiTaskById(taskId); + OapiProcessinstanceGetResponse.ProcessInstanceTopVo processInstanceDetail = dingOfficialFlowService.getProcessInstanceDetail(sysDingHiTask.getProcInstId()); + + //获取表单值 + List formComponentValues = processInstanceDetail.getFormComponentValues(); + + //获取任务节点 + List tasks = processInstanceDetail.getTasks(); + DingTaskVO dingTaskVO=new DingTaskVO(); + if(CollectionUtil.isNotEmpty(tasks)){ + tasks.stream().filter(taskTopVo -> taskTopVo.getTaskid().equals(sysDingHiTask.getTaskId())).collect(Collectors.toList()).forEach(t->{ + BeanUtil.copyProperties(t,dingTaskVO); + dingTaskVO.defaultTaskSpendTime(); + SysUser sysUser = sysUserService.selectUserByDingUserId(t.getUserid()); + dingTaskVO.setUserName(sysUser.getUserName()); + dingTaskVO.setTaskStatus(DingFlowTaskType.getCode(t.getTaskStatus()).getInfo()); + }); + } + SysUser sysUser = sysUserService.selectUserByDingUserId(processInstanceDetail.getOriginatorUserid()); + mmap.put("formComponentValues",formComponentValues); + mmap.put("tasks",dingTaskVO); + mmap.put("applyUserName",sysUser.getUserName()); + mmap.put("processInstanceDetail",processInstanceDetail); + return prefix+"/myTaskedDetail"; + } + +} + diff --git a/snow-admin/src/main/java/com/snow/web/controller/dingtalk/OfficialFlowController.java b/snow-admin/src/main/java/com/snow/web/controller/dingtalk/OfficialFlowController.java index 02a352e..c23a0cc 100644 --- a/snow-admin/src/main/java/com/snow/web/controller/dingtalk/OfficialFlowController.java +++ b/snow-admin/src/main/java/com/snow/web/controller/dingtalk/OfficialFlowController.java @@ -1,19 +1,28 @@ package com.snow.web.controller.dingtalk; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.BetweenFormater; +import cn.hutool.core.date.DateUtil; import com.dingtalk.api.response.OapiProcessListbyuseridResponse; import com.dingtalk.api.response.OapiProcessTemplateManageGetResponse; import com.dingtalk.api.response.OapiProcessinstanceGetResponse; +import com.google.common.collect.Lists; import com.snow.common.core.controller.BaseController; import com.snow.common.core.domain.AjaxResult; -import com.snow.common.core.page.PageDomain; -import com.snow.common.core.page.PageModel; import com.snow.common.core.page.TableDataInfo; -import com.snow.common.core.page.TableSupport; -import com.snow.dingtalk.model.FlowExecuteTaskRequest; -import com.snow.dingtalk.model.FlowTerminateProcessInstanceRequest; +import com.snow.common.enums.DingFlowOperationType; +import com.snow.common.enums.DingFlowTaskType; +import com.snow.common.utils.DateUtils; +import com.snow.dingtalk.model.*; import com.snow.dingtalk.service.impl.DingOfficialFlowServiceImpl; import com.snow.framework.util.ShiroUtils; +import com.snow.system.domain.SysDingProcinst; +import com.snow.system.domain.SysDingRuTask; import com.snow.system.domain.SysUser; +import com.snow.system.service.impl.SysDingProcinstServiceImpl; +import com.snow.system.service.impl.SysDingRuTaskServiceImpl; +import com.snow.system.service.impl.SysUserServiceImpl; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -24,6 +33,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; /** * @program: snow @@ -40,8 +51,16 @@ public class OfficialFlowController extends BaseController { @Autowired private DingOfficialFlowServiceImpl dingOfficialFlowService; + @Autowired + private SysUserServiceImpl sysUserService; + + @Autowired + private SysDingRuTaskServiceImpl sysDingRuTaskService; + + @Autowired + private SysDingProcinstServiceImpl sysDingProcinstService; /** - * 跳转钉钉官方流程模板 + * 跳转钉钉当前用户可见的审批模板 * @return */ @RequiresPermissions("ding:officialFlow:getTemplateManageList") @@ -52,7 +71,7 @@ public class OfficialFlowController extends BaseController { } /** - * 获取钉钉官方流程模板 + * 获取当前用户可见的审批模板 */ @RequiresPermissions("ding:officialFlow:getTemplateManageList") @PostMapping("/getProcessTemplateManageList") @@ -60,20 +79,49 @@ public class OfficialFlowController extends BaseController { public TableDataInfo getProcessTemplateManageList() { SysUser sysUser = ShiroUtils.getSysUser(); - List processTemplateManage = dingOfficialFlowService.getProcessTemplateManage(sysUser.getDingUserId()); - return pageBySubList(processTemplateManage); + OapiProcessListbyuseridResponse.HomePageProcessTemplateVo homePageProcessTemplateVo = dingOfficialFlowService.getProcessListByUserId(sysUser.getDingUserId()); + return pageBySubList(homePageProcessTemplateVo.getProcessList()); } + /** - * 跳转 - * @param mmap + * 执行流程实例 + * @param * @return */ - @RequiresPermissions("ding:officialFlow:getProcessListByUserId") - @GetMapping("/toProcessListByUserId") - public String toProcessListByUserId(ModelMap mmap){ - - return prefix+"/myDingTask"; + @RequiresPermissions("ding:officialFlow:startProcessInstance") + @GetMapping("/startProcessInstance") + @ResponseBody + public AjaxResult startProcessInstance(){ + SysUser sysUser = ShiroUtils.getSysUser(); + StartFlowRequest startFlowRequest=new StartFlowRequest(); + startFlowRequest.setProcessCode("PROC-DAF427F7-89E2-4496-9481-53FE56551E9F"); + startFlowRequest.setOriginatorUserId(sysUser.getDingUserId()); + startFlowRequest.setDeptId(sysUser.getDeptId()); + List list=Lists.newArrayList(); + StartFlowRequest.FormComponentValueVo formComponentValueVo=new StartFlowRequest.FormComponentValueVo(); + formComponentValueVo.setName("商品编码"); + formComponentValueVo.setValue("OA-SP10002"); + list.add(formComponentValueVo); + StartFlowRequest.FormComponentValueVo formComponentValueVo0=new StartFlowRequest.FormComponentValueVo(); + formComponentValueVo0.setName("商品名称"); + formComponentValueVo0.setValue("测试商品"); + list.add(formComponentValueVo0); + StartFlowRequest.FormComponentValueVo formComponentValueVo1=new StartFlowRequest.FormComponentValueVo(); + formComponentValueVo1.setName("规格"); + formComponentValueVo1.setValue("OO--XX"); + list.add(formComponentValueVo1); + StartFlowRequest.FormComponentValueVo formComponentValueVo2=new StartFlowRequest.FormComponentValueVo(); + formComponentValueVo2.setName("审核日期"); + formComponentValueVo2.setValue(DateUtils.getDate()); + list.add(formComponentValueVo2); + StartFlowRequest.FormComponentValueVo formComponentValueVo3=new StartFlowRequest.FormComponentValueVo(); + formComponentValueVo3.setName("备注说明"); + formComponentValueVo3.setValue("nova 8系列 我由我掌镜。nova 8 Pro前置Vlog视频双镜头,66W超级快充,120Hz环幕屏。"); + list.add(formComponentValueVo3); + startFlowRequest.setFormComponentValueVoList(list); + String s = dingOfficialFlowService.startProcessInstance(startFlowRequest); + return AjaxResult.success(s); } /** @@ -84,7 +132,6 @@ public class OfficialFlowController extends BaseController { @PostMapping("/getProcessListByUserId") @ResponseBody public TableDataInfo getProcessListByUserId(){ - PageDomain pageDomain = TableSupport.buildPageRequest(); SysUser sysUser = ShiroUtils.getSysUser(); OapiProcessListbyuseridResponse.HomePageProcessTemplateVo processListByUserId = dingOfficialFlowService.getProcessListByUserId(sysUser.getDingUserId()); return pageBySubList(processListByUserId.getProcessList()); @@ -118,10 +165,49 @@ public class OfficialFlowController extends BaseController { //获取表单值 List formComponentValues = processInstanceDetail.getFormComponentValues(); - mmap.put("formComponentValues",formComponentValues); + //获取操作记录 + List operationRecords = processInstanceDetail.getOperationRecords(); + List dingOperationRecordVOList=Lists.newArrayList(); + if(CollectionUtil.isNotEmpty(operationRecords)){ + operationRecords.forEach(t->{ + DingOperationRecordVO dingOperationRecordVO=new DingOperationRecordVO(); + BeanUtil.copyProperties(t,dingOperationRecordVO); + SysUser sysUser = sysUserService.selectUserByDingUserId(t.getUserid()); + dingOperationRecordVO.setUserName(sysUser.getUserName()); + dingOperationRecordVO.setOperationType(DingFlowOperationType.getType(t.getOperationType()).getCode()); + String operationResult = t.getOperationResult(); + if(operationResult.equals("AGREE")){ + dingOperationRecordVO.setOperationResult("同意"); + }else if(operationResult.equals("REFUSE")){ + dingOperationRecordVO.setOperationResult("拒绝"); + }else if(operationResult.equals("NONE")){ + dingOperationRecordVO.setOperationResult(null); + } + dingOperationRecordVOList.add(dingOperationRecordVO); + }); + } + + //获取任务节点 + List tasks = processInstanceDetail.getTasks(); + List dingTaskVOList=Lists.newArrayList(); + if(CollectionUtil.isNotEmpty(tasks)){ + tasks.stream().filter(t->!t.getTaskStatus().equals(DingFlowTaskType.CANCELED.getCode())).collect(Collectors.toList()).forEach(t->{ + DingTaskVO dingTaskVO=new DingTaskVO(); + BeanUtil.copyProperties(t,dingTaskVO); + dingTaskVO.defaultTaskSpendTime(); + SysUser sysUser = sysUserService.selectUserByDingUserId(t.getUserid()); + dingTaskVO.setUserName(sysUser.getUserName()); + dingTaskVO.setTaskStatus(DingFlowTaskType.getCode(t.getTaskStatus()).getInfo()); + dingTaskVO.defaultTaskSpendTime(); + dingTaskVOList.add(dingTaskVO); + }); + } + mmap.put("formComponentValues",formComponentValues); + mmap.put("operationRecords",dingOperationRecordVOList); + mmap.put("tasks",dingTaskVOList); mmap.put("processInstanceDetail",processInstanceDetail); - return prefix+"/checkDetail"; + return prefix+"/myStartProcessDetail"; } /** @@ -139,4 +225,36 @@ public class OfficialFlowController extends BaseController { return AjaxResult.success(aBoolean); } + + /** + * 跳转我发起的流程 + * @return + */ + @RequiresPermissions("ding:flow:getMyStartProcess") + @GetMapping("/toMyStartProcess") + public String getMyHistoricProcessInstance() + { + return prefix+"/myStartProcess"; + } + + + + + + /** + * 获取我的流程实例 + * @param sysDingProcinst + * @return + */ + @RequiresPermissions("ding:flow:getMyStartProcess") + @PostMapping("/getMyStartProcessList") + @ResponseBody + public TableDataInfo getMyStartProcessList(SysDingProcinst sysDingProcinst){ + startPage(); + SysUser sysUser = ShiroUtils.getSysUser(); + sysDingProcinst.setStartUserId(sysUser.getDingUserId()); + List list = sysDingProcinstService.selectSysDingProcinstList(sysDingProcinst); + return getDataTable(list); + } + } diff --git a/snow-admin/src/main/java/com/snow/web/controller/system/SysProfileController.java b/snow-admin/src/main/java/com/snow/web/controller/system/SysProfileController.java index e42c35a..d5ae6a5 100644 --- a/snow-admin/src/main/java/com/snow/web/controller/system/SysProfileController.java +++ b/snow-admin/src/main/java/com/snow/web/controller/system/SysProfileController.java @@ -159,7 +159,7 @@ public class SysProfileController extends BaseController { if (!file.isEmpty()) { - SysFile store = storageService.store(file.getInputStream(), file.getSize(), file.getContentType(), file.getOriginalFilename()); + SysFile store = storageService.store(file); currentUser.setAvatar(store.getUrl()); if (userService.updateUserInfo(currentUser) > 0) { diff --git a/snow-admin/src/main/resources/banner.txt b/snow-admin/src/main/resources/banner.txt index 63ab03f..ce912c7 100644 --- a/snow-admin/src/main/resources/banner.txt +++ b/snow-admin/src/main/resources/banner.txt @@ -1,24 +1,10 @@ -Application Version: ${snow.version} -Spring Boot Version: ${spring-boot.version} -//////////////////////////////////////////////////////////////////// -// _ooOoo_ // -// o8888888o // -// 88" . "88 // -// (| ^_^ |) // -// O\ = /O // -// ____/`---'\____ // -// .' \\| |// `. // -// / \\||| : |||// \ // -// / _||||| -:- |||||- \ // -// | | \\\ - /// | | // -// | \_| ''\---/'' | | // -// \ .-\__ `-` ___/-. / // -// ___`. .' /--.--\ `. . ___ // -// ."" '< `.___\_<|>_/___.' >'"". // -// | | : `- \`.;`\ _ /`;.`/ - ` : | | // -// \ \ `-. \_ __\ /__ _/ .-` / / // -// ========`-.____`-.___\_____/___.-`____.-'======== // -// `=---=' // -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // -// 佛祖保佑 永不宕机 永无BUG // -//////////////////////////////////////////////////////////////////// \ No newline at end of file + +0000000 0000000 000000 000 0000000000 000 000 +000 000 000 00 000 000 000 000 000 000 000 +00 000 000 00 000 000 000 000 000 000 +00 000 000 000 00 0000 000 000 000 000 +000 0000 000 0000 0000 000 000 000 000 000 + 000000 000 00000 00 000 000 000 000 000 000 + 00 000 00 000 000 000 00 000 000 +000 000 00 00 00 00 000 000 0000 0000 000 000 + 0000000 00000000 00000000 000 000 0000000000 0000000000 diff --git a/snow-admin/src/main/resources/templates/big_screen.html b/snow-admin/src/main/resources/templates/big_screen.html index ef09037..a668930 100644 --- a/snow-admin/src/main/resources/templates/big_screen.html +++ b/snow-admin/src/main/resources/templates/big_screen.html @@ -41,6 +41,21 @@ $(".adduser ul").animate({marginTop:-'.5'*a+'rem'},800) },4300); }) + + function current(){ + var d=new Date(), + str=''; + str +=d.getFullYear()+'年';   //获取当前年份 + str +=d.getMonth()+1+'月';   //获取当前月份(0——11) + + str +=d.getDate()+'日'; + str +=d.getHours()+'时'; + str +=d.getMinutes()+'分'; + str +=d.getSeconds()+'秒'; + return str; + } + setInterval(function(){$("#nowTime").html(current)},1000); +
@@ -48,7 +63,7 @@

Ding-Flow可视化大屏

-
多云转小雨
+
多云转小雨
    diff --git a/snow-admin/src/main/resources/templates/ding/flow/myStartProcess.html b/snow-admin/src/main/resources/templates/ding/flow/myStartProcess.html new file mode 100644 index 0000000..072cfc9 --- /dev/null +++ b/snow-admin/src/main/resources/templates/ding/flow/myStartProcess.html @@ -0,0 +1,120 @@ + + + + + + +
    +
    +
    +
    +
    +
      + +
    • + + +
    • +
    • + + +
    • + + +
    • +  搜索 +  重置 +
    • +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/snow-admin/src/main/resources/templates/ding/flow/myStartProcessDetail.html b/snow-admin/src/main/resources/templates/ding/flow/myStartProcessDetail.html new file mode 100644 index 0000000..b896286 --- /dev/null +++ b/snow-admin/src/main/resources/templates/ding/flow/myStartProcessDetail.html @@ -0,0 +1,156 @@ + + + + + + +
    +
    +

    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +

    + +
    +

    业务表单

    +
    +
    + +
    + +
    +
    +
    +
    +
    +

    操作记录

    +
    +
    + +
    + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    +
    + + +
    +
    +
    +
    +
    + + + +
    +
    + +
    +
    +
    +
    +
    + +
    +

    审批节点

    +
    +
    +
    + +
    +

    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +
    +
    +
    +
    + + + + +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    + + + + \ No newline at end of file diff --git a/snow-admin/src/main/resources/templates/ding/flow/templateManage.html b/snow-admin/src/main/resources/templates/ding/flow/templateManage.html index d5a30e0..7191aae 100644 --- a/snow-admin/src/main/resources/templates/ding/flow/templateManage.html +++ b/snow-admin/src/main/resources/templates/ding/flow/templateManage.html @@ -16,18 +16,10 @@
@@ -36,11 +28,6 @@
+ + \ No newline at end of file diff --git a/snow-admin/src/main/resources/templates/ding/flow/checkDetail.html b/snow-admin/src/main/resources/templates/ding/task/checkDetail.html similarity index 61% rename from snow-admin/src/main/resources/templates/ding/flow/checkDetail.html rename to snow-admin/src/main/resources/templates/ding/task/checkDetail.html index d4ba6e6..f660cff 100644 --- a/snow-admin/src/main/resources/templates/ding/flow/checkDetail.html +++ b/snow-admin/src/main/resources/templates/ding/task/checkDetail.html @@ -12,30 +12,57 @@
- + +
-

离职审批信息

+

审批信息

-
- - +
+ +
+ +

- + +
+

填写信息

+
+ +
+
+ + +
+
+
+
+ +
+ +
+
+ +
+
+   +
+
+
diff --git a/snow-admin/src/main/resources/templates/ding/task/edit.html b/snow-admin/src/main/resources/templates/ding/task/edit.html new file mode 100644 index 0000000..0046854 --- /dev/null +++ b/snow-admin/src/main/resources/templates/ding/task/edit.html @@ -0,0 +1,127 @@ + + + + + + + +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ + + + + \ No newline at end of file diff --git a/snow-admin/src/main/resources/templates/ding/task/myTasked.html b/snow-admin/src/main/resources/templates/ding/task/myTasked.html new file mode 100644 index 0000000..7c42f40 --- /dev/null +++ b/snow-admin/src/main/resources/templates/ding/task/myTasked.html @@ -0,0 +1,115 @@ + + + + + + +
+ + + + \ No newline at end of file diff --git a/snow-admin/src/main/resources/templates/ding/task/myTaskedDetail.html b/snow-admin/src/main/resources/templates/ding/task/myTaskedDetail.html new file mode 100644 index 0000000..482952c --- /dev/null +++ b/snow-admin/src/main/resources/templates/ding/task/myTaskedDetail.html @@ -0,0 +1,105 @@ + + + + + + + + + + + + + +
+
+

+
+

流程信息

+ +
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+
+ + +
+ +

表单信息

+
+
+ +
+ +
+
+
+ +
+ + +
+

任务信息

+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/snow-admin/src/main/resources/templates/ding/task/task.html b/snow-admin/src/main/resources/templates/ding/task/task.html new file mode 100644 index 0000000..6ec0736 --- /dev/null +++ b/snow-admin/src/main/resources/templates/ding/task/task.html @@ -0,0 +1,138 @@ + + + + + + +
+
+
+
+
+ +
+
+
+ +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/snow-common/pom.xml b/snow-common/pom.xml index e4a5fc6..3376d34 100644 --- a/snow-common/pom.xml +++ b/snow-common/pom.xml @@ -5,7 +5,7 @@ snow com.snow - 4.3.1 + 2.0.0 4.0.0 diff --git a/snow-common/src/main/java/com/snow/common/constant/Constants.java b/snow-common/src/main/java/com/snow/common/constant/Constants.java index a7780ae..628e363 100644 --- a/snow-common/src/main/java/com/snow/common/constant/Constants.java +++ b/snow-common/src/main/java/com/snow/common/constant/Constants.java @@ -87,6 +87,32 @@ public class Constants */ public static final String SYS_DICT_KEY = "sys_dict:"; + + /** + * 本地文件上传key + */ + public static final String LOCAL_ADDRESS = "sys.local.file.address"; + + /** + * 阿里云accessKeyId + */ + public static final String ALIYUN_ACCESSKEYID = "sys.aliyun.file.accessKeyId"; + + /** + * 阿里云accessKeySecret + */ + public static final String ALIYUN_ACCESSKEYSECRET = "sys.aliyun.file.accessKeySecret"; + + /** + * 阿里云bucketName + */ + public static final String ALIYUN_BUCKETNAME= "sys.aliyun.file.bucketName"; + + + /** + * 阿里云endpoint + */ + public static final String ALIYUN_ENDPOINT = "sys.aliyun.file.endpoint"; /** * 资源映射路径 前缀 */ diff --git a/snow-common/src/main/java/com/snow/common/enums/DingFlowOperationType.java b/snow-common/src/main/java/com/snow/common/enums/DingFlowOperationType.java new file mode 100644 index 0000000..46d62cb --- /dev/null +++ b/snow-common/src/main/java/com/snow/common/enums/DingFlowOperationType.java @@ -0,0 +1,50 @@ +package com.snow.common.enums; + +/** + * @program: snow + * @description + * @author: 没用的阿吉 + * @create: 2021-03-24 16:17 + **/ +public enum DingFlowOperationType { + + EXECUTE_TASK_NORMAL("正常执行任务", "EXECUTE_TASK_NORMAL"), + EXECUTE_TASK_AGENT("代理人执行任务", "EXECUTE_TASK_AGENT"), + APPEND_TASK_BEFORE("前加签任务", "APPEND_TASK_BEFORE"), + APPEND_TASK_AFTER("后加签任务", "APPEND_TASK_AFTER"), + REDIRECT_TASK("转交任务", "REDIRECT_TASK"), + START_PROCESS_INSTANCE("发起流程实例", "START_PROCESS_INSTANCE"), + + TERMINATE_PROCESS_INSTANCE("终止(撤销)流程实例", "TERMINATE_PROCESS_INSTANCE"), + FINISH_PROCESS_INSTANCE("结束流程实例", "FINISH_PROCESS_INSTANCE"), + ADD_REMARK("添加评论", "ADD_REMARK"), + REDIRECT_PROCESS("审批退回", "redirect_process"); + + private final String code; + private final String info; + + DingFlowOperationType(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } + + public static DingFlowOperationType getType(String info) { + for (DingFlowOperationType dingFLowOperationType:DingFlowOperationType.values()){ + if(dingFLowOperationType.getInfo().equals(info)){ + return dingFLowOperationType; + } + } + return null; + } +} diff --git a/snow-common/src/main/java/com/snow/common/enums/DingFlowTaskType.java b/snow-common/src/main/java/com/snow/common/enums/DingFlowTaskType.java new file mode 100644 index 0000000..d731b4f --- /dev/null +++ b/snow-common/src/main/java/com/snow/common/enums/DingFlowTaskType.java @@ -0,0 +1,54 @@ +package com.snow.common.enums; + +/** + * @program: snow + * @description 钉钉任务类型 + * @author: 没用的阿吉 + * @create: 2021-03-24 16:17 + **/ +public enum DingFlowTaskType { + + NEW("NEW", "未启动"), + RUNNING("RUNNING", "待处理"), + PAUSED("PAUSED", "暂停"), + CANCELED("CANCELED", "取消"), + COMPLETED("COMPLETED", "完成"), + TERMINATED("TERMINATED", "终止"); + + private final String code; + private final String info; + + DingFlowTaskType(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } + + public static DingFlowTaskType getType(String info) { + for (DingFlowTaskType dingFLowOperationType:DingFlowTaskType.values()){ + if(dingFLowOperationType.getInfo().equals(info)){ + return dingFLowOperationType; + } + } + return null; + } + + public static DingFlowTaskType getCode(String code) { + for (DingFlowTaskType dingFLowOperationType:DingFlowTaskType.values()){ + if(dingFLowOperationType.getCode().equals(code)){ + return dingFLowOperationType; + } + } + return null; + } +} diff --git a/snow-common/src/main/java/com/snow/common/enums/DingTalkListenerType.java b/snow-common/src/main/java/com/snow/common/enums/DingTalkListenerType.java index 0162523..e41b4f5 100644 --- a/snow-common/src/main/java/com/snow/common/enums/DingTalkListenerType.java +++ b/snow-common/src/main/java/com/snow/common/enums/DingTalkListenerType.java @@ -17,6 +17,8 @@ public enum DingTalkListenerType { USER_DELETE(3,1,"user_leave_org"), + CALL_BACK_CHECK_URL(1,10, "check_url"), + CALL_BACK_REGISTER(1,10, "回调注册"), CALL_BACK_UPDATE(2,10, "回调更新"), @@ -35,13 +37,13 @@ public enum DingTalkListenerType { /** * 审批任务开始、结束、转交。 */ - BPMS_TASK_CHANGE(5,20,"bpms_instance_change"), + BPMS_TASK_CHANGE(5,20,"bpms_task_change"), /** * * 审批实例开始、结束。 */ - BPMS_INSTANCE_CHANGE(5,20,"bpms_instance_change"), + BPMS_INSTANCE_CHANGE(6,20,"bpms_instance_change"), ASYNCSEND_V2(10,20,"发送钉钉消息"), diff --git a/snow-common/src/main/java/com/snow/common/enums/FormComponentType.java b/snow-common/src/main/java/com/snow/common/enums/FormComponentType.java new file mode 100644 index 0000000..18d8883 --- /dev/null +++ b/snow-common/src/main/java/com/snow/common/enums/FormComponentType.java @@ -0,0 +1,64 @@ +package com.snow.common.enums; + +/** + * @author qimingjin + * @Title: 表单组件类型 + * @Description: + * @date 2020/9/18 10:18 + */ +public enum FormComponentType { + + TEXT_FIELD(1, "inputDom","TextField"), + + TEXTAREA_FIELD(2, "textareaDom","TextareaField"), + + + DDDATE_FIELD(3, "dateDom","DDDateField"), + + ; + + + /**WORK_RECODE_CREATE + * 一级code + */ + private final Integer code; + /** + * 系统类型 + */ + private final String sysType; + /** + * 钉钉类型 + */ + private final String dingType; + + FormComponentType(Integer code, String sysType, String dingType) + { + this.code = code; + this.sysType = sysType; + this.dingType=dingType; + } + + public Integer getCode() + { + return code; + } + + public String getSysType() + { + return sysType; + } + + public String getDingType() { + return dingType; + } + + public static FormComponentType getType(String sysType) { + for (FormComponentType formComponentType:FormComponentType.values()){ + if(formComponentType.getSysType().equals(sysType)){ + return formComponentType; + } + } + return null; + } + +} diff --git a/snow-common/src/main/java/com/snow/common/exception/file/FileNameLengthLimitExceededException.java b/snow-common/src/main/java/com/snow/common/exception/file/FileNameLengthLimitExceededException.java index d1aa0e0..d31e8a3 100644 --- a/snow-common/src/main/java/com/snow/common/exception/file/FileNameLengthLimitExceededException.java +++ b/snow-common/src/main/java/com/snow/common/exception/file/FileNameLengthLimitExceededException.java @@ -9,7 +9,7 @@ public class FileNameLengthLimitExceededException extends FileException { private static final long serialVersionUID = 1L; - public FileNameLengthLimitExceededException(int defaultFileNameLength) + public FileNameLengthLimitExceededException(long defaultFileNameLength) { super("upload.filename.exceed.length", new Object[] { defaultFileNameLength }); } diff --git a/snow-common/src/main/java/com/snow/common/utils/DateUtils.java b/snow-common/src/main/java/com/snow/common/utils/DateUtils.java index ca07b52..e87f461 100644 --- a/snow-common/src/main/java/com/snow/common/utils/DateUtils.java +++ b/snow-common/src/main/java/com/snow/common/utils/DateUtils.java @@ -158,4 +158,6 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils // long sec = diff % nd % nh % nm / ns; return day + "天" + hour + "小时" + min + "分钟"; } + + } diff --git a/snow-common/src/main/java/com/snow/common/utils/file/FileUploadUtils.java b/snow-common/src/main/java/com/snow/common/utils/file/FileUploadUtils.java index bd42126..fc79a27 100644 --- a/snow-common/src/main/java/com/snow/common/utils/file/FileUploadUtils.java +++ b/snow-common/src/main/java/com/snow/common/utils/file/FileUploadUtils.java @@ -3,6 +3,7 @@ package com.snow.common.utils.file; import java.io.File; import java.io.IOException; +import cn.hutool.core.util.IdUtil; import com.snow.common.config.Global; import com.snow.common.constant.Constants; import com.snow.common.exception.file.FileNameLengthLimitExceededException; @@ -36,6 +37,7 @@ public class FileUploadUtils */ private static String defaultBaseDir = Global.getProfile(); + public static void setDefaultBaseDir(String defaultBaseDir) { FileUploadUtils.defaultBaseDir = defaultBaseDir; @@ -75,12 +77,9 @@ public class FileUploadUtils */ public static final String upload(String baseDir, MultipartFile file) throws IOException { - try - { + try { return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); - } - catch (Exception e) - { + } catch (Exception e) { throw new IOException(e.getMessage(), e); } } @@ -98,20 +97,18 @@ public class FileUploadUtils * @throws InvalidExtensionException 文件校验异常 */ public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension) - throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, - InvalidExtensionException - { - int fileNamelength = file.getOriginalFilename().length(); - if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) - { + throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, InvalidExtensionException { + int fileNameLength = file.getOriginalFilename().length(); + if (fileNameLength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) { throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); } - + //文件大小和格式校验 assertAllowed(file, allowedExtension); - + //编码文件名字 String fileName = extractFilename(file); - + //创建file文件 File desc = getAbsoluteFile(baseDir, fileName); + //上传文件写到服务器上指定的文件 file.transferTo(desc); String pathFileName = getPathFileName(baseDir, fileName); return pathFileName; @@ -124,33 +121,40 @@ public class FileUploadUtils { String fileName = file.getOriginalFilename(); String extension = getExtension(file); - fileName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension; + fileName = DateUtils.datePath() + "/" + IdUtil.fastSimpleUUID() + "." + extension; return fileName; } + /** + * 创建File文件 + * @param uploadDir + * @param fileName + * @return + * @throws IOException + */ private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException { File desc = new File(uploadDir + File.separator + fileName); - if (!desc.getParentFile().exists()) - { - desc.getParentFile().mkdirs(); - } if (!desc.exists()) { - desc.createNewFile(); + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } } return desc; } private static final String getPathFileName(String uploadDir, String fileName) throws IOException { - int dirLastIndex = Global.getProfile().length() + 1; + int dirLastIndex = defaultBaseDir.length() + 1; String currentDir = StringUtils.substring(uploadDir, dirLastIndex); String pathFileName = Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName; return pathFileName; } + /** * 文件大小校验 * @@ -159,40 +163,28 @@ public class FileUploadUtils * @throws FileSizeLimitExceededException 如果超出最大大小 * @throws InvalidExtensionException */ - public static final void assertAllowed(MultipartFile file, String[] allowedExtension) - throws FileSizeLimitExceededException, InvalidExtensionException - { + public static final void assertAllowed(MultipartFile file, String[] allowedExtension) throws InvalidExtensionException { long size = file.getSize(); - if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE) - { - throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024); + if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE) { + throw new FileNameLengthLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024); } String fileName = file.getOriginalFilename(); String extension = getExtension(file); if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) { - if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) - { - throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, - fileName); - } - else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) - { - throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, - fileName); - } - else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) - { - throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, - fileName); - } - else - { + if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) { + throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, fileName); + } else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) { + throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, fileName); + } else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) { + throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, fileName); + } else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) { + throw new InvalidExtensionException(allowedExtension, extension, fileName); + } else { throw new InvalidExtensionException(allowedExtension, extension, fileName); } } - } /** @@ -216,7 +208,7 @@ public class FileUploadUtils /** * 获取文件名的后缀 - * + * * @param file 表单文件 * @return 后缀名 */ diff --git a/snow-common/src/main/java/com/snow/common/utils/file/MimeTypeUtils.java b/snow-common/src/main/java/com/snow/common/utils/file/MimeTypeUtils.java index 34794ad..9508245 100644 --- a/snow-common/src/main/java/com/snow/common/utils/file/MimeTypeUtils.java +++ b/snow-common/src/main/java/com/snow/common/utils/file/MimeTypeUtils.java @@ -16,7 +16,7 @@ public class MimeTypeUtils public static final String IMAGE_BMP = "image/bmp"; public static final String IMAGE_GIF = "image/gif"; - + public static final String[] IMAGE_EXTENSION = { "bmp", "gif", "jpg", "jpeg", "png" }; public static final String[] FLASH_EXTENSION = { "swf", "flv" }; @@ -24,6 +24,8 @@ public class MimeTypeUtils public static final String[] MEDIA_EXTENSION = { "swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg", "asf", "rm", "rmvb" }; + public static final String[] VIDEO_EXTENSION = { "mp4", "avi", "rmvb" }; + public static final String[] DEFAULT_ALLOWED_EXTENSION = { // 图片 "bmp", "gif", "jpg", "jpeg", "png", @@ -31,6 +33,8 @@ public class MimeTypeUtils "doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt", // 压缩文件 "rar", "zip", "gz", "bz2", + // 视频格式 + "mp4", "avi", "rmvb", // pdf "pdf" }; diff --git a/snow-dingtalk/pom.xml b/snow-dingtalk/pom.xml index 34b2200..b8b20cd 100644 --- a/snow-dingtalk/pom.xml +++ b/snow-dingtalk/pom.xml @@ -5,7 +5,7 @@ snow com.snow - 4.3.1 + 2.0.0 4.0.0 @@ -17,7 +17,6 @@ com.snow snow-framework - ${snow.version} com.taobao.top diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/common/BaseConstantUrl.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/common/BaseConstantUrl.java index cc12188..d42894e 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/common/BaseConstantUrl.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/common/BaseConstantUrl.java @@ -108,11 +108,18 @@ public class BaseConstantUrl { * 钉钉官方流程 * *********************************************************/ + + public static final String SAVE_PROCESS="https://oapi.dingtalk.com/topapi/process/save"; /** * 获取当前企业所有可管理的模版 */ public static final String GET_PROCESS_TEMPLATE_MANAGE="https://oapi.dingtalk.com/topapi/process/template/manage/get"; + /** + * 发起流程实例 + */ + public static final String START_PROCESS_INSTANCE="https://oapi.dingtalk.com/topapi/processinstance/create"; + /** * 执行流程 */ diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/model/DingFinishTaskRequest.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/model/DingFinishTaskRequest.java new file mode 100644 index 0000000..bdb5c6e --- /dev/null +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/model/DingFinishTaskRequest.java @@ -0,0 +1,62 @@ +package com.snow.dingtalk.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @program: snow + * @description + * @author: 没用的阿吉 + * @create: 2021-03-25 20:52 + **/ +@Data +public class DingFinishTaskRequest implements Serializable { + + private static final long serialVersionUID = 4115040416030667805L; + + /** + * 流程实例id + */ + private String processInstanceId; + + /** + * 任务ID + */ + private String taskId; + /** + * 完成任务人 + */ + private String userId; + /** + * 是否通过 + */ + private Boolean isPass; + + /** + * 是否通过 + */ + private Boolean isStart; + + /** + * 审批意见 + */ + private String comment; + + + + /** + * 是否修改业务参数 + */ + private Boolean isUpdateBus=false; + + + + public final static String IS_PASS="isPass"; + + public final static String IS_START="isStart"; + + public final static String FILES="files"; + + public final static String COMMENT="comment"; +} diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/model/DingOperationRecordVO.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/model/DingOperationRecordVO.java new file mode 100644 index 0000000..53cc467 --- /dev/null +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/model/DingOperationRecordVO.java @@ -0,0 +1,67 @@ +package com.snow.dingtalk.model; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @program: snow + * @description + * @author: 没用的阿吉 + * @create: 2021-03-24 15:45 + **/ +@Data +public class DingOperationRecordVO implements Serializable { + private static final long serialVersionUID = -281729978382670599L; + + + + /** + * AGREE:同意 + * + * REFUSE:拒绝 + * + * NONE + */ + private String operationResult; + /** + * EXECUTE_TASK_NORMAL:正常执行任务 + * + * EXECUTE_TASK_AGENT:代理人执行任务 + * + * APPEND_TASK_BEFORE:前加签任务 + * + * APPEND_TASK_AFTER:后加签任务 + * + * REDIRECT_TASK:转交任务 + * + * START_PROCESS_INSTANCE:发起流程实例 + * + * TERMINATE_PROCESS_INSTANCE:终止(撤销)流程实例 + * + * FINISH_PROCESS_INSTANCE:结束流程实例 + * + * ADD_REMARK:添加评论 + * + * redirect_process:审批退回 + */ + private String operationType; + + /** + * 备注 + */ + private String remark; + + /** + * 操作人钉钉id + */ + private String userid; + + private String userName; + + /** + * 操作时间。 + */ + private Date date; +} diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/model/DingTaskVO.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/model/DingTaskVO.java new file mode 100644 index 0000000..afa49d7 --- /dev/null +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/model/DingTaskVO.java @@ -0,0 +1,67 @@ +package com.snow.dingtalk.model; + +import cn.hutool.core.date.BetweenFormater; +import cn.hutool.core.date.DateUtil; +import com.snow.common.utils.StringUtils; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @program: snow + * @description + * @author: 没用的阿吉 + * @create: 2021-03-26 16:21 + **/ +@Data +public class DingTaskVO implements Serializable { + private static final long serialVersionUID = -1459137869980975766L; + + + private String activityId; + + private Date createTime; + + private Date finishTime; + + private String taskResult; + + private String taskStatus; + + /** + * 任务id + */ + private String taskid; + + private String url; + + /** + * 用户id + */ + private String userid; + + + /** + * 用户名称 + */ + private String userName; + + /** + * 任务花费时间 + */ + private String taskSpendTime; + + + /** + * 任务花费时间赋值 + * @return + */ + public String defaultTaskSpendTime() { + + if(StringUtils.isNotNull(finishTime)){ + setTaskSpendTime(DateUtil.formatBetween(createTime, finishTime, BetweenFormater.Level.SECOND)); + } + return taskSpendTime; + } +} diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/model/SaveFlowRequest.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/model/SaveFlowRequest.java new file mode 100644 index 0000000..7a2ae62 --- /dev/null +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/model/SaveFlowRequest.java @@ -0,0 +1,108 @@ +package com.snow.dingtalk.model; + +import com.dingtalk.api.request.OapiProcessSaveRequest; +import com.snow.common.enums.FormComponentType; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @program: snow + * @description + * @author: 没用的阿吉 + * @create: 2021-03-21 19:40 + **/ +@Data +public class SaveFlowRequest implements Serializable { + + private static final long serialVersionUID = -7038720879277547731L; + + + + private String createInstanceMobileUrl; + + private String createInstancePcUrl; + + private String description; + + private String dirId; + + private Boolean disableFormEdit; + + private Boolean disableStopProcessButton; + + private Boolean fakeMode; + + private List formComponentList; + + + private Boolean hidden; + + private String icon; + + private String name; + + private String originDirId; + + private String processCode; + + // private OapiProcessSaveRequest.ProcessConfig processConfig; + + private String templateEditUrl; + + private FormComponentType formComponentType; + + @Data + public static class FormComponentVo implements Serializable { + + + private static final long serialVersionUID = -1887336939225262377L; + + private String componentName; + + private FormComponentPropVo props; + } + + @Data + public static class FormComponentPropVo implements Serializable{ + + private static final long serialVersionUID = 6244866646550769755L; + + + private String actionName; + + private String bizAlias; + + private String bizType; + + private Long choice; + + private String content; + + private Boolean duration; + + private String format; + + private String formula; + + private String id; + + private String label; + + private String link; + + private String notPrint; + + private String notUpper; + + + private List options; + + private String placeholder; + + private Boolean required; + + private String unit; + } +} diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/model/StartFlowRequest.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/model/StartFlowRequest.java new file mode 100644 index 0000000..16b6c04 --- /dev/null +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/model/StartFlowRequest.java @@ -0,0 +1,51 @@ +package com.snow.dingtalk.model; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @program: snow + * @description + * @author: 没用的阿吉 + * @create: 2021-03-23 13:36 + **/ +@Data +public class StartFlowRequest implements Serializable { + + private static final long serialVersionUID = 792885986454419385L; + + /** + * 发起人所在的部门,如果发起人属于根部门,传-1。 + */ + private Long deptId; + + + /** + * 审批实例发起人的userid。 + */ + private String originatorUserId; + /** + * 审批流的唯一码。 + * + * process_code在审批流程编辑页面的URL中获取。 + */ + private String processCode; + + private List formComponentValueVoList; + + @Data + public static class FormComponentValueVo implements Serializable{ + + + private static final long serialVersionUID = 7297240924226083327L; + + private String extValue; + + private String name; + + private String value; + + } +} diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/DingOfficialFlowService.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/DingOfficialFlowService.java index c373588..fc8dd8c 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/DingOfficialFlowService.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/DingOfficialFlowService.java @@ -7,6 +7,8 @@ import com.snow.common.core.page.PageDomain; import com.snow.common.core.page.PageModel; import com.snow.dingtalk.model.FlowExecuteTaskRequest; import com.snow.dingtalk.model.FlowTerminateProcessInstanceRequest; +import com.snow.dingtalk.model.SaveFlowRequest; +import com.snow.dingtalk.model.StartFlowRequest; import java.util.List; @@ -18,6 +20,19 @@ import java.util.List; **/ public interface DingOfficialFlowService { + /** + * 创建审批模板 + * @param saveFlowRequest + * @return + */ + String saveProcess(SaveFlowRequest saveFlowRequest); + + /** + * 发起审批实例 + * @return + */ + String startProcessInstance(StartFlowRequest startFlowRequest); + /** * 获取当前企业所有可管理的模版 * @param userId @@ -54,4 +69,12 @@ public interface DingOfficialFlowService { * @return */ Boolean terminateProcessInstance(FlowTerminateProcessInstanceRequest flowTerminateProcessInstanceRequest); + + + void bpmsInstanceChange(); + + void bpmsTaskChange(); + + + } diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/DingOfficialFlowServiceImpl.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/DingOfficialFlowServiceImpl.java index 3a2db89..5b223c8 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/DingOfficialFlowServiceImpl.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/DingOfficialFlowServiceImpl.java @@ -5,14 +5,19 @@ import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.request.*; import com.dingtalk.api.response.*; +import com.snow.common.constant.Constants; import com.snow.common.exception.SyncDataException; import com.snow.common.utils.StringUtils; import com.snow.common.utils.bean.BeanUtils; +import com.snow.common.utils.spring.SpringUtils; import com.snow.dingtalk.common.BaseConstantUrl; import com.snow.dingtalk.common.BaseService; import com.snow.dingtalk.model.FlowExecuteTaskRequest; import com.snow.dingtalk.model.FlowTerminateProcessInstanceRequest; +import com.snow.dingtalk.model.SaveFlowRequest; +import com.snow.dingtalk.model.StartFlowRequest; import com.snow.dingtalk.service.DingOfficialFlowService; +import com.snow.system.service.impl.SysConfigServiceImpl; import com.taobao.api.ApiException; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -29,6 +34,106 @@ import java.util.List; @Service public class DingOfficialFlowServiceImpl extends BaseService implements DingOfficialFlowService { + private SysConfigServiceImpl isysConfigService=SpringUtils.getBean(SysConfigServiceImpl.class); + + @Override + public String saveProcess(SaveFlowRequest saveFlowRequest) { + DingTalkClient client = new DefaultDingTalkClient(BaseConstantUrl.SAVE_PROCESS); + + OapiProcessSaveRequest request = new OapiProcessSaveRequest(); + OapiProcessSaveRequest.SaveProcessRequest saveProcessRequest = new OapiProcessSaveRequest.SaveProcessRequest(); + // saveProcessRequest.setDisableFormEdit(true); + saveProcessRequest.setName(saveFlowRequest.getName()); + saveProcessRequest.setProcessCode(saveProcessRequest.getProcessCode()); + saveProcessRequest.setAgentid(Long.parseLong(isysConfigService.selectConfigByKey(Constants.AGENT_ID))); + saveProcessRequest.setFakeMode(true); + + + // List formComponentList = new ArrayList<>(); + + // 注意,每种表单组件,对应的componentName是固定的 + List formComponentList = BeanUtils.transformList(saveFlowRequest.getFormComponentList(), OapiProcessSaveRequest.FormComponentVo.class); + + + /*if(formComponentType.getDingType().equals(FormComponentType.TEXT_FIELD.getDingType())){ + // 单行文本框 + OapiProcessSaveRequest.FormComponentVo singleInput = new OapiProcessSaveRequest.FormComponentVo(); + singleInput.setComponentName(FormComponentType.TEXT_FIELD.getDingType()); + OapiProcessSaveRequest.FormComponentPropVo singleInputProp = new OapiProcessSaveRequest.FormComponentPropVo(); + + singleInputProp.setRequired(saveFlowRequest.getRequired()); + singleInputProp.setLabel("单行输入框"); + singleInputProp.setPlaceholder("请输入"); + singleInputProp.setId("TextField-J78F056R"); + singleInput.setProps(singleInputProp); + formComponentList.add(singleInput); + }*/ + + + // 多行文本框 + /* OapiProcessSaveRequest.FormComponentVo multipleInput = new OapiProcessSaveRequest.FormComponentVo(); + multipleInput.setComponentName("TextareaField"); + OapiProcessSaveRequest.FormComponentPropVo multipleInputProp = new OapiProcessSaveRequest.FormComponentPropVo(); + multipleInputProp.setRequired(true); + multipleInputProp.setLabel("多行输入框"); + multipleInputProp.setPlaceholder("请输入"); + multipleInputProp.setId("TextareaField-J78F056S"); + multipleInput.setProps(multipleInputProp); + formComponentList.add(multipleInput);*/ + + + // 日期 + /* OapiProcessSaveRequest.FormComponentVo dateComponent = new OapiProcessSaveRequest.FormComponentVo(); + dateComponent.setComponentName("DDDateField"); + OapiProcessSaveRequest.FormComponentPropVo dateComponentProp = new OapiProcessSaveRequest.FormComponentPropVo(); + dateComponentProp.setRequired(true); + dateComponentProp.setLabel("日期"); + dateComponentProp.setPlaceholder("请选择"); + dateComponentProp.setUnit("小时"); // 小时或天 + dateComponentProp.setId("DDDateField-J8MTJZVE"); + dateComponent.setProps(dateComponentProp); + formComponentList.add(dateComponent);*/ + + + saveProcessRequest.setFormComponentList(formComponentList); + request.setSaveProcessRequest(saveProcessRequest); + + try { + OapiProcessSaveResponse response = client.execute(request, getDingTalkToken()); + if (response.getErrcode() != 0) { + throw new SyncDataException(JSON.toJSONString(request), response.getErrmsg()); + } + return response.getResult().getProcessCode(); + } catch (ApiException e) { + log.error("创建审批模板saveProcess异常:{}", e.getMessage()); + throw new SyncDataException(JSON.toJSONString(request), e.getErrMsg()); + } + } + + @Override + public String startProcessInstance(StartFlowRequest startFlowRequest) { + DingTalkClient client = new DefaultDingTalkClient(BaseConstantUrl.START_PROCESS_INSTANCE); + OapiProcessinstanceCreateRequest req = new OapiProcessinstanceCreateRequest(); + req.setProcessCode(startFlowRequest.getProcessCode()); + req.setOriginatorUserId(startFlowRequest.getOriginatorUserId()); + req.setDeptId(startFlowRequest.getDeptId()); + //req.setApprovers("manager01, manager02"); + // req.setCcList("user2,user3"); + //req.setCcPosition("START"); + //组件赋值 + List formComponentList = BeanUtils.transformList(startFlowRequest.getFormComponentValueVoList(), OapiProcessinstanceCreateRequest.FormComponentValueVo.class); + req.setFormComponentValues(formComponentList); + try { + OapiProcessinstanceCreateResponse response = client.execute(req, getDingTalkToken()); + if (response.getErrcode() != 0) { + throw new SyncDataException(JSON.toJSONString(req), response.getErrmsg()); + } + return response.getProcessInstanceId(); + } catch (ApiException e) { + log.error("发起审批实例startProcessInstance异常:{}", e.getMessage()); + throw new SyncDataException(JSON.toJSONString(req), e.getErrMsg()); + } + } @Override public List getProcessTemplateManage(String userId) { @@ -145,4 +250,14 @@ public class DingOfficialFlowServiceImpl extends BaseService implements DingOffi } } + @Override + public void bpmsInstanceChange() { + + } + + @Override + public void bpmsTaskChange() { + + } + } diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/sync/SyncFlowService.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/sync/SyncFlowService.java new file mode 100644 index 0000000..b01999c --- /dev/null +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/sync/SyncFlowService.java @@ -0,0 +1,274 @@ +package com.snow.dingtalk.sync; + +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; +import com.dingtalk.api.response.OapiProcessinstanceGetResponse; +import com.snow.common.annotation.SyncLog; +import com.snow.common.enums.DingFlowTaskType; +import com.snow.common.enums.DingTalkListenerType; +import com.snow.common.enums.SyncLogType; +import com.snow.common.utils.StringUtils; +import com.snow.common.utils.spring.SpringUtils; +import com.snow.dingtalk.service.impl.DingOfficialFlowServiceImpl; +import com.snow.system.domain.SysDingHiTask; +import com.snow.system.domain.SysDingProcinst; +import com.snow.system.domain.SysDingRuTask; +import com.snow.system.service.impl.SysDingHiTaskServiceImpl; +import com.snow.system.service.impl.SysDingProcinstServiceImpl; +import com.snow.system.service.impl.SysDingRuTaskServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + * @program: snow + * @description + * @author: 没用的阿吉 + * @create: 2021-03-24 22:09 + **/ +@Component +@Slf4j +public class SyncFlowService implements ISyncSysInfo { + + @Autowired + private SysDingProcinstServiceImpl sysDingProcinstService=SpringUtils.getBean(SysDingProcinstServiceImpl.class); + + @Autowired + private DingOfficialFlowServiceImpl dingOfficialFlowService=SpringUtils.getBean(DingOfficialFlowServiceImpl.class); + + @Autowired + private SysDingRuTaskServiceImpl sysDingRuTaskService=SpringUtils.getBean(SysDingRuTaskServiceImpl.class); + + + @Autowired + private SysDingHiTaskServiceImpl sysDingHiTaskService=SpringUtils.getBean(SysDingHiTaskServiceImpl.class); + + @Override + @SyncLog(dingTalkListenerType = DingTalkListenerType.BPMS_INSTANCE_CHANGE,syncLogTpye = SyncLogType.SYNC_SYS) + public JSONObject SyncSysInfo(DingTalkListenerType dingTalkListenerType, JSONObject jsonObject) { + + Integer code = dingTalkListenerType.getCode(); + + if(code.equals(DingTalkListenerType.BPMS_INSTANCE_CHANGE.getCode())){ + handleSysInstance(jsonObject); + }else if(code.equals(DingTalkListenerType.BPMS_TASK_CHANGE.getCode())){ + handleSysTask(jsonObject); + } + return null; + } + + + private void handleSysInstance(JSONObject jsonObject){ + + SysDingProcinst sysDingProcinst= jsonObject.toJavaObject(SysDingProcinst.class); + sysDingProcinst.setProcInstId(String.valueOf(jsonObject.get("processInstanceId"))); + sysDingProcinst.setStartUserId(String.valueOf(jsonObject.get("staffId"))); + sysDingProcinst.setDingUrl(String.valueOf(jsonObject.get("url"))); + sysDingProcinst.setProcCode(String.valueOf(jsonObject.get("processCode"))); + Optional.ofNullable(jsonObject.get("result")).ifPresent(t->sysDingProcinst.setProcResult(String.valueOf(jsonObject.get("result")))); + Optional.ofNullable(jsonObject.get("createTime")).ifPresent(t->sysDingProcinst.setStartTime(new Date((long)jsonObject.get("createTime")))); + Optional.ofNullable(jsonObject.get("finishTime")).ifPresent(t->sysDingProcinst.setFinishTime(new Date((long)jsonObject.get("finishTime")))); + String type = sysDingProcinst.getType(); + switch (type){ + //实例开始 + case "start": + startDingSysInstance(sysDingProcinst); + break; + + case "finish": + finishDingSysInstance(sysDingProcinst); + break; + //审批终止(发起人撤销审批单) + case "terminate": + break; + default: + + + } + + } + + /** + * 开始流程时的逻辑处理 + * @param sysDingProcinst + */ + private void startDingSysInstance(SysDingProcinst sysDingProcinst){ + String processInstanceId=sysDingProcinst.getProcInstId(); + //添加流程实例记录 + SysDingProcinst querySysDingProcinst = sysDingProcinstService.selectSysDingProcinstByProcInstId(sysDingProcinst.getProcInstId()); + if(StringUtils.isNull(querySysDingProcinst)){ + + //查询流程详情,保存下个节点待办 + OapiProcessinstanceGetResponse.ProcessInstanceTopVo processInstanceDetail = dingOfficialFlowService.getProcessInstanceDetail(processInstanceId); + sysDingProcinst.setType(processInstanceDetail.getStatus()); + sysDingProcinst.setBusinessKey(processInstanceDetail.getBusinessId()); + //保存流程实例 + sysDingProcinstService.insertSysDingProcinst(sysDingProcinst); + + } + + } + + /** + * 结束流程时的逻辑处理 + * @param sysDingProcinst + */ + private void finishDingSysInstance(SysDingProcinst sysDingProcinst){ + String processInstanceId=sysDingProcinst.getProcInstId(); + //查询流程详情,保存下个节点待办 + OapiProcessinstanceGetResponse.ProcessInstanceTopVo processInstanceDetail = dingOfficialFlowService.getProcessInstanceDetail(processInstanceId); + //更新审批实例 + SysDingProcinst querySysDingProcinst = sysDingProcinstService.selectSysDingProcinstByProcInstId(processInstanceId); + if(StringUtils.isNotNull(querySysDingProcinst)){ + sysDingProcinst.setId(querySysDingProcinst.getId()); + sysDingProcinst.setType(processInstanceDetail.getStatus()); + sysDingProcinstService.updateSysDingProcinst(sysDingProcinst); + } + + } + + + private void handleSysTask(JSONObject jsonObject){ + SysDingRuTask sysDingRuTask= jsonObject.toJavaObject(SysDingRuTask.class); + sysDingRuTask.setProcInstId(String.valueOf(jsonObject.get("processInstanceId"))); + sysDingRuTask.setAssignee(String.valueOf(jsonObject.get("staffId"))); + + sysDingRuTask.setProcCode(String.valueOf(jsonObject.get("processCode"))); + + String type= String.valueOf(jsonObject.get("type")); + switch (type){ + //实例开始 + case "start": + startDingSysTask(sysDingRuTask); + break; + + case "finish": + finishDingSysTask(sysDingRuTask); + break; + //当前节点有多个审批人并且是或签,其中一个人执行了审批,其他审批人会推送cancel类型事件 + case "cancel": + finishDingSysTask(sysDingRuTask); + break; + default: + + + } + } + + /** + * 任务开始运行表和历史表添加数据 + * @param sysDingRuTask + */ + private void startDingSysTask(SysDingRuTask sysDingRuTask){ + String procInstId = sysDingRuTask.getProcInstId(); + //查询流程详情,保存下个节点待办 + OapiProcessinstanceGetResponse.ProcessInstanceTopVo processInstanceDetail = dingOfficialFlowService.getProcessInstanceDetail(procInstId); + //获取任务节点(写入钉钉待办表) + List tasks = processInstanceDetail.getTasks(); + if(CollectionUtil.isNotEmpty(tasks)){ + tasks.stream().forEach(t->{ + //第二步,运行中的任务保存到本地表 + if(t.getTaskStatus().equals(DingFlowTaskType.RUNNING.getCode())){ + SysDingRuTask querySysDingRuTask = sysDingRuTaskService.selectSysDingRuTaskById(t.getTaskid()); + if(StringUtils.isNull(querySysDingRuTask)){ + saveDingRunTask(t,procInstId,sysDingRuTask.getProcCode()); + } + SysDingHiTask sysDingHiTask = sysDingHiTaskService.selectSysDingHiTaskById(t.getTaskid()); + if(StringUtils.isNull(sysDingHiTask)){ + saveDingHiTask(t,procInstId,sysDingRuTask.getProcCode()); + } + } + + }); + } + } + + /** + * 任务完成删除运行中的表数据 + * @param sysDingRuTask + */ + private void finishDingSysTask(SysDingRuTask sysDingRuTask){ + String procInstId = sysDingRuTask.getProcInstId(); + //查询流程详情,保存下个节点待办 + OapiProcessinstanceGetResponse.ProcessInstanceTopVo processInstanceDetail = dingOfficialFlowService.getProcessInstanceDetail(procInstId); + //获取任务节点(写入钉钉待办表) + List tasks = processInstanceDetail.getTasks(); + if(CollectionUtil.isNotEmpty(tasks)){ + tasks.stream().forEach(t->{ + //第二步,删除运行中的任务,更新历史任务表 + if(t.getTaskStatus().equals(DingFlowTaskType.COMPLETED.getCode())){ + SysDingRuTask querySysDingRuTask = sysDingRuTaskService.selectSysDingRuTaskById(t.getTaskid()); + if(StringUtils.isNotNull(querySysDingRuTask)){ + sysDingRuTaskService.deleteSysDingRuTaskById(querySysDingRuTask.getId()); + SysDingHiTask sysDingHiTask=new SysDingHiTask(); + sysDingHiTask.setId(t.getTaskid()); + sysDingHiTask.setTaskResult(t.getTaskResult()); + sysDingHiTask.setFinishTime(t.getFinishTime()); + sysDingHiTask.setAssignee(t.getUserid()); + sysDingHiTask.setTaskState(t.getTaskStatus()); + sysDingHiTask.setDescription(processInstanceDetail.getTitle()); + sysDingHiTaskService.updateSysDingHiTask(sysDingHiTask); + } + } + //当前节点有多个审批人并且是或签,其中一个人执行了审批,其他审批人会推送cancel类型事件,修改运行表任务状态 + else if(t.getTaskStatus().equals(DingFlowTaskType.CANCELED.getCode())){ + + SysDingRuTask sysDingRuTask1=new SysDingRuTask(); + sysDingRuTask1.setId(t.getTaskid()); + sysDingRuTask1.setTaskState(t.getTaskStatus()); + sysDingRuTaskService.updateSysDingRuTask(sysDingRuTask1); + } + + }); + } + } + + + private void saveDingRunTask(OapiProcessinstanceGetResponse.TaskTopVo taskTopVo,String procInstId,String procCode){ + + try { + SysDingRuTask sysDingRuTask=new SysDingRuTask(); + sysDingRuTask.setId(taskTopVo.getTaskid()); + sysDingRuTask.setCreateTime(taskTopVo.getCreateTime()); + sysDingRuTask.setActivityId(taskTopVo.getActivityId()); + sysDingRuTask.setProcCode(procCode); + sysDingRuTask.setFinishTime(taskTopVo.getFinishTime()); + sysDingRuTask.setAssignee(taskTopVo.getUserid()); + sysDingRuTask.setTaskState(taskTopVo.getTaskStatus()); + sysDingRuTask.setFormKey(taskTopVo.getUrl()); + sysDingRuTask.setId(taskTopVo.getTaskid()); + sysDingRuTask.setProcInstId(procInstId); + sysDingRuTaskService.insertSysDingRuTask(sysDingRuTask); + }catch (Exception e){ + log.error("**************保存运行任务时候出现异常:{}",e.getMessage()); + } + + } + + private void saveDingHiTask(OapiProcessinstanceGetResponse.TaskTopVo taskTopVo,String procInstId,String procCode){ + try { + SysDingHiTask sysDingHiTask=new SysDingHiTask(); + sysDingHiTask.setId(taskTopVo.getTaskid()); + sysDingHiTask.setTaskId(taskTopVo.getTaskid()); + sysDingHiTask.setTaskResult(taskTopVo.getTaskResult()); + sysDingHiTask.setCreateTime(taskTopVo.getCreateTime()); + sysDingHiTask.setActivityId(taskTopVo.getActivityId()); + sysDingHiTask.setProcCode(procCode); + sysDingHiTask.setFinishTime(taskTopVo.getFinishTime()); + sysDingHiTask.setAssignee(taskTopVo.getUserid()); + sysDingHiTask.setTaskState(taskTopVo.getTaskStatus()); + sysDingHiTask.setFormKey(taskTopVo.getUrl()); + sysDingHiTask.setId(taskTopVo.getTaskid()); + sysDingHiTask.setProcInstId(procInstId); + + sysDingHiTaskService.insertSysDingHiTask(sysDingHiTask); + }catch (Exception e){ + log.error("**************保存历史任务时候出现异常:{}",e.getMessage()); + } + } + +} diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/sync/SyncSysInfoFactory.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/sync/SyncSysInfoFactory.java index 06f98eb..0be44a3 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/sync/SyncSysInfoFactory.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/sync/SyncSysInfoFactory.java @@ -15,6 +15,8 @@ public class SyncSysInfoFactory { Integer type = dingTalkListenerType.getType(); if(type==DingTalkListenerType.DEPARTMENT_CREATE.getType()){ return new SyncSysDepartmentService(); + }else if(type==DingTalkListenerType.BPMS_TASK_CHANGE.getType()){ + return new SyncFlowService(); } return null; diff --git a/snow-flowable/pom.xml b/snow-flowable/pom.xml index 4c0e9cc..10b9802 100644 --- a/snow-flowable/pom.xml +++ b/snow-flowable/pom.xml @@ -5,7 +5,7 @@ snow com.snow - 4.3.1 + 2.0.0 4.0.0 @@ -16,7 +16,6 @@ com.snow snow-dingtalk - 4.3.1 diff --git a/snow-flowable/src/main/java/com/snow/flowable/config/ResourcesConfig.java b/snow-flowable/src/main/java/com/snow/flowable/config/ResourcesConfig.java index 5129ec6..e2a2667 100644 --- a/snow-flowable/src/main/java/com/snow/flowable/config/ResourcesConfig.java +++ b/snow-flowable/src/main/java/com/snow/flowable/config/ResourcesConfig.java @@ -1,5 +1,6 @@ package com.snow.flowable.config; +import com.snow.system.service.ISysConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -30,6 +31,9 @@ public class ResourcesConfig implements WebMvcConfigurer @Autowired private CustomHandlerInterceptor customHandlerInterceptor; + @Autowired + private ISysConfigService configService; + /** * 默认首页的设置,当输入域名是可以自动跳转到默认指定的网页 */ @@ -42,8 +46,10 @@ public class ResourcesConfig implements WebMvcConfigurer @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { + //获取配置的文件地址 + String address= configService.selectConfigByKey(Constants.LOCAL_ADDRESS); /** 本地文件上传路径 */ - registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + Global.getProfile() + "/"); + registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + address + "/"); /** swagger配置 */ registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); diff --git a/snow-framework/pom.xml b/snow-framework/pom.xml index fb2a26e..d15698a 100644 --- a/snow-framework/pom.xml +++ b/snow-framework/pom.xml @@ -5,7 +5,7 @@ snow com.snow - 4.3.1 + 2.0.0 4.0.0 diff --git a/snow-framework/src/main/java/com/snow/framework/config/StorageAutoConfiguration.java b/snow-framework/src/main/java/com/snow/framework/config/StorageAutoConfiguration.java index 2e67ade..235c72c 100644 --- a/snow-framework/src/main/java/com/snow/framework/config/StorageAutoConfiguration.java +++ b/snow-framework/src/main/java/com/snow/framework/config/StorageAutoConfiguration.java @@ -1,5 +1,6 @@ package com.snow.framework.config; +import com.snow.common.constant.Constants; import com.snow.framework.storage.AliyunStorage; import com.snow.framework.storage.LocalStorage; import com.snow.framework.storage.StorageService; @@ -42,20 +43,18 @@ public class StorageAutoConfiguration { @Bean public LocalStorage localStorage() { LocalStorage localStorage = new LocalStorage(); - String address= configService.selectConfigByKey("sys.local.file.address"); - String path= configService.selectConfigByKey("sys.local.file.path"); + String address= configService.selectConfigByKey(Constants.LOCAL_ADDRESS); localStorage.setAddress(address); - localStorage.setStoragePath(path); return localStorage; } @Bean public AliyunStorage aliyunStorage() { AliyunStorage aliyunStorage = new AliyunStorage(); - String accessKeyId= configService.selectConfigByKey("sys.aliyun.file.accessKeyId"); - String accessKeySecret= configService.selectConfigByKey("sys.aliyun.file.accessKeySecret"); - String bucketName= configService.selectConfigByKey("sys.aliyun.file.bucketName"); - String endpoint= configService.selectConfigByKey("sys.aliyun.file.endpoint"); + String accessKeyId= configService.selectConfigByKey(Constants.ALIYUN_ACCESSKEYID); + String accessKeySecret= configService.selectConfigByKey(Constants.ALIYUN_ACCESSKEYSECRET); + String bucketName= configService.selectConfigByKey(Constants.ALIYUN_BUCKETNAME); + String endpoint= configService.selectConfigByKey(Constants.ALIYUN_ENDPOINT); aliyunStorage.setAccessKeyId(accessKeyId); aliyunStorage.setAccessKeySecret(accessKeySecret); aliyunStorage.setBucketName(bucketName); diff --git a/snow-framework/src/main/java/com/snow/framework/storage/AliyunStorage.java b/snow-framework/src/main/java/com/snow/framework/storage/AliyunStorage.java index 23278b8..d2262c3 100644 --- a/snow-framework/src/main/java/com/snow/framework/storage/AliyunStorage.java +++ b/snow-framework/src/main/java/com/snow/framework/storage/AliyunStorage.java @@ -12,6 +12,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.core.io.Resource; import org.springframework.core.io.UrlResource; +import org.springframework.web.multipart.MultipartFile; import java.io.BufferedReader; import java.io.IOException; @@ -85,14 +86,14 @@ public class AliyunStorage implements Storage{ * 阿里云OSS对象存储简单上传实现 */ @Override - public void store(InputStream inputStream, long contentLength, String contentType, String keyName) { + public void store(String keyName, MultipartFile file) { try { // 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20M以下的文件使用该接口 ObjectMetadata objectMetadata = new ObjectMetadata(); - objectMetadata.setContentLength(contentLength); - objectMetadata.setContentType(contentType); + objectMetadata.setContentLength(file.getSize()); + objectMetadata.setContentType(file.getContentType()); // 对象键(Key)是对象在存储桶中的唯一标识。 - PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, keyName, inputStream, objectMetadata); + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, keyName, file.getInputStream(), objectMetadata); getOSSClient().putObject(putObjectRequest); // 关闭OSSClient getOSSClient().shutdown(); diff --git a/snow-framework/src/main/java/com/snow/framework/storage/LocalStorage.java b/snow-framework/src/main/java/com/snow/framework/storage/LocalStorage.java index 5449901..a6aabc6 100644 --- a/snow-framework/src/main/java/com/snow/framework/storage/LocalStorage.java +++ b/snow-framework/src/main/java/com/snow/framework/storage/LocalStorage.java @@ -1,46 +1,47 @@ package com.snow.framework.storage; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import com.snow.common.config.ServerConfig; +import com.snow.common.constant.Constants; +import com.snow.common.exception.file.FileNameLengthLimitExceededException; +import com.snow.common.exception.file.FileSizeLimitExceededException; +import com.snow.common.exception.file.InvalidExtensionException; +import com.snow.common.utils.DateUtils; +import com.snow.common.utils.StringUtils; +import com.snow.common.utils.file.FileUploadUtils; +import com.snow.common.utils.file.MimeTypeUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FilenameUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; -import org.springframework.core.io.UrlResource; +import org.springframework.web.multipart.MultipartFile; +import java.io.File; import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; import java.util.stream.Stream; + /** * @author qimingjin * @Title: * @Description: * @date 2021/1/11 13:20 */ +@Slf4j public class LocalStorage implements Storage { - private final Log logger = LogFactory.getLog(LocalStorage.class); - - private String storagePath; + /** + * 本地文件上传地址 + */ private String address; - private Path rootLocation; - public String getStoragePath() { - return storagePath; - } + @Autowired + private ServerConfig serverConfig; - public void setStoragePath(String storagePath) { - this.storagePath = storagePath; + /** + * 默认大小 50M + */ + public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024; - this.rootLocation = Paths.get(storagePath); - try { - Files.createDirectories(rootLocation); - } catch (IOException e) { - logger.error(e.getMessage(), e); - } - } public String getAddress() { return address; @@ -50,61 +51,210 @@ public class LocalStorage implements Storage { this.address = address; } - @Override - public void store(InputStream inputStream, long contentLength, String contentType, String keyName) { - try { - Files.copy(inputStream, rootLocation.resolve(keyName), StandardCopyOption.REPLACE_EXISTING); - } catch (IOException e) { - throw new RuntimeException("Failed to store file " + keyName, e); + /** + * 以默认配置进行文件上传 + * + * @param file 上传的文件 + * @return 文件名称 + * @throws Exception + */ + public final String upload(MultipartFile file) throws IOException + { + try + { + return upload(address, file,null, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } + catch (Exception e) + { + throw new IOException(e.getMessage(), e); } } + /** + * 根据文件路径上传 + * + * @param file 上传的文件 + * @return 文件名称 + * @throws IOException + */ + @Override + public void store(String keyName,MultipartFile file) { + + try { + String url =address + "/upload"; + upload(url, file,keyName, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidExtensionException e) { + e.printStackTrace(); + } + + } + + /** + * 生成文件地址URL + * @param keyName + * @return + */ + @Override + public String generateUrl(String keyName) { + String url = serverConfig.getUrl()+getPathFileName(address + "/upload",DateUtils.datePath() + "/" +keyName) ; + return url; + } + + + /** + * 文件上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * @param allowedExtension 上传文件类型 + * @return 返回上传成功的文件名 + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws FileNameLengthLimitExceededException 文件名太长 + * @throws IOException 比如读写文件出错时 + * @throws InvalidExtensionException 文件校验异常 + */ + public String upload(String baseDir, MultipartFile file,String keyName, String[] allowedExtension) + throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, InvalidExtensionException { + int fileNameLength = file.getOriginalFilename().length(); + if (fileNameLength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) { + throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); + } + //文件大小和格式校验 + assertAllowed(file, allowedExtension); + //编码文件名字 + String fileName = extractFilename(keyName); + //创建file文件 + File desc = getAbsoluteFile(baseDir, fileName); + //上传文件写到服务器上指定的文件 + file.transferTo(desc); + String pathFileName = getPathFileName(baseDir, fileName); + return pathFileName; + } + + /** + * 编码文件名 + */ + public static final String extractFilename(String keyName) + { + return DateUtils.datePath() + "/" + keyName; + } + + /** + * 创建File文件 + * @param uploadDir + * @param fileName + * @return + * @throws IOException + */ + private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException + { + File desc = new File(uploadDir + File.separator + fileName); + + if (!desc.exists()) + { + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + } + return desc; + } + + private String getPathFileName(String uploadDir, String fileName) + { + int dirLastIndex = address.length() + 1; + String currentDir = StringUtils.substring(uploadDir, dirLastIndex); + String pathFileName = Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName; + return pathFileName; + } + + + /** + * 文件大小校验 + * + * @param file 上传的文件 + * @return + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws InvalidExtensionException + */ + public static final void assertAllowed(MultipartFile file, String[] allowedExtension) throws InvalidExtensionException { + long size = file.getSize(); + if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE) { + throw new FileNameLengthLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024); + } + + String fileName = file.getOriginalFilename(); + String extension = getExtension(file); + if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) + { + if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) { + throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, fileName); + } else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) { + throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, fileName); + } else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) { + throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, fileName); + } else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) { + throw new InvalidExtensionException(allowedExtension, extension, fileName); + } else { + throw new InvalidExtensionException(allowedExtension, extension, fileName); + } + } + } + + /** + * 判断MIME类型是否是允许的MIME类型 + * + * @param extension + * @param allowedExtension + * @return + */ + public static final boolean isAllowedExtension(String extension, String[] allowedExtension) + { + for (String str : allowedExtension) + { + if (str.equalsIgnoreCase(extension)) + { + return true; + } + } + return false; + } + + /** + * 获取文件名的后缀 + * + * @param file 表单文件 + * @return 后缀名 + */ + public static final String getExtension(MultipartFile file) + { + String extension = FilenameUtils.getExtension(file.getOriginalFilename()); + if (StringUtils.isEmpty(extension)) + { + extension = MimeTypeUtils.getExtension(file.getContentType()); + } + return extension; + } + @Override public Stream loadAll() { - try { - return Files.walk(rootLocation, 1) - .filter(path -> !path.equals(rootLocation)) - .map(path -> rootLocation.relativize(path)); - } catch (IOException e) { - throw new RuntimeException("Failed to read stored files", e); - } - + return null; } @Override - public Path load(String filename) { - return rootLocation.resolve(filename); + public Path load(String keyName) { + return null; } @Override - public Resource loadAsResource(String filename) { - try { - Path file = load(filename); - Resource resource = new UrlResource(file.toUri()); - if (resource.exists() || resource.isReadable()) { - return resource; - } else { - return null; - } - } catch (MalformedURLException e) { - logger.error(e.getMessage(), e); - return null; - } + public Resource loadAsResource(String keyName) { + return null; } @Override - public void delete(String filename) { - Path file = load(filename); - try { - Files.delete(file); - } catch (IOException e) { - logger.error(e.getMessage(), e); - } - } + public void delete(String keyName) { - @Override - public String generateUrl(String keyName) { - - return address + keyName; } } diff --git a/snow-framework/src/main/java/com/snow/framework/storage/Storage.java b/snow-framework/src/main/java/com/snow/framework/storage/Storage.java index b5a9c9a..12b3ebb 100644 --- a/snow-framework/src/main/java/com/snow/framework/storage/Storage.java +++ b/snow-framework/src/main/java/com/snow/framework/storage/Storage.java @@ -1,7 +1,9 @@ package com.snow.framework.storage; import org.springframework.core.io.Resource; +import org.springframework.web.multipart.MultipartFile; +import java.io.File; import java.io.InputStream; import java.nio.file.Path; import java.util.stream.Stream; @@ -16,13 +18,15 @@ public interface Storage { /** * 存储一个文件对象 * - * @param inputStream 文件输入流 - * @param contentLength 文件长度 - * @param contentType 文件类型 + * @param file * @param keyName 文件名 */ - void store(InputStream inputStream, long contentLength, String contentType, String keyName); + void store(String keyName, MultipartFile file); + /** + * + * @return + */ Stream loadAll(); /** diff --git a/snow-framework/src/main/java/com/snow/framework/storage/StorageService.java b/snow-framework/src/main/java/com/snow/framework/storage/StorageService.java index 301bb67..7818926 100644 --- a/snow-framework/src/main/java/com/snow/framework/storage/StorageService.java +++ b/snow-framework/src/main/java/com/snow/framework/storage/StorageService.java @@ -7,6 +7,7 @@ import com.snow.system.domain.SysUser; import com.snow.system.service.ISysFileService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; +import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; import java.nio.file.Path; @@ -46,19 +47,19 @@ public class StorageService { /** * 存储一个文件对象 * - * @param inputStream 文件输入流 - * @param contentLength 文件长度 - * @param contentType 文件类型 - * @param fileName 文件索引名 + * @param file 文件输入流 */ - public SysFile store(InputStream inputStream, long contentLength, String contentType, String fileName) { + public SysFile store(MultipartFile file){ + String fileName = file.getOriginalFilename(); + String contentType = file.getContentType(); + long size = file.getSize(); String key = generateKey(fileName); - storage.store(inputStream, contentLength, contentType, key); + storage.store(key,file); SysUser sysUser = ShiroUtils.getSysUser(); String url = generateUrl(key); SysFile storageInfo = new SysFile(); storageInfo.setName(fileName); - storageInfo.setSize(contentLength); + storageInfo.setSize(size); storageInfo.setType(contentType); storageInfo.setKey(key); storageInfo.setUrl(url); diff --git a/snow-from/pom.xml b/snow-from/pom.xml index 8e12ead..b23e331 100644 --- a/snow-from/pom.xml +++ b/snow-from/pom.xml @@ -5,12 +5,11 @@ snow com.snow - 4.3.1 + 2.0.0 4.0.0 snow-from - 4.3.1 @@ -23,7 +22,7 @@ com.snow - snow-common + snow-framework diff --git a/snow-from/src/main/java/com/snow/from/controller/FromController.java b/snow-from/src/main/java/com/snow/from/controller/FromController.java index 476fcd9..c5b78b4 100644 --- a/snow-from/src/main/java/com/snow/from/controller/FromController.java +++ b/snow-from/src/main/java/com/snow/from/controller/FromController.java @@ -1,14 +1,8 @@ package com.snow.from.controller; -import cn.hutool.cache.CacheUtil; -import cn.hutool.cache.impl.TimedCache; -import com.alibaba.fastjson.JSON; -import com.snow.common.core.domain.AjaxResult; - -import com.snow.from.model.FromInfoDTO; -import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; /** * @program: snow @@ -123,32 +117,4 @@ public class FromController { return "/common/select_settings"; } - - - - /** - * - * 保存表单数据 - * @param fromInfoDTO - * @return - */ - @PostMapping("/saveFromInfo") - @ResponseBody - public AjaxResult saveFromInfo(@RequestBody FromInfoDTO fromInfoDTO) - { - - TimedCache timedCache = CacheUtil.newTimedCache(7100); - timedCache.put("fromInfoData",JSON.toJSONString(fromInfoDTO)); - return AjaxResult.success(fromInfoDTO); - } - - - @GetMapping("/getFromInfo") - @ResponseBody - public AjaxResult getFromInfo() - { - String f="{\"ortumJson\":[{\"frame\":\"Bootstrap\",\"children\":[],\"componentKey\":\"inputDom\",\"name\":\"input_1616296539862130a\",\"title\":\"名称\",\"html\":\"
\",\"componentProperties\":\"{\\\"data\\\":\\\"{\\\\\\\"id\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"input_1616296539862130a\\\\\\\",\\\\\\\"defaultVal\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"verification\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"authority\\\\\\\":\\\\\\\"edit\\\\\\\",\\\\\\\"placeholder\\\\\\\":\\\\\\\"请输入\\\\\\\",\\\\\\\"cssClass\\\\\\\":\\\\\\\"form-control col\\\\\\\",\\\\\\\"hideLabel\\\\\\\":true,\\\\\\\"labelName\\\\\\\":\\\\\\\"名称\\\\\\\",\\\\\\\"title\\\\\\\":\\\\\\\"名称\\\\\\\",\\\\\\\"labelPosition\\\\\\\":\\\\\\\"rowLeft\\\\\\\",\\\\\\\"labelCSS\\\\\\\":\\\\\\\"col-form-label col-2 ortum_display_NONE\\\\\\\",\\\\\\\"onBefore\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"onAfter\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"onClick\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"onBlur\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"onInput\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"uuid\\\\\\\":\\\\\\\"3a50665e-ed1f-8dc6-b804-aa6e4fe8a0c3\\\\\\\",\\\\\\\"attributesArr\\\\\\\":\\\\\\\"[\\\\\\\\\\\\\\\"{\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"label\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"autocomplete\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"off\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}\\\\\\\\\\\\\\\"]\\\\\\\"}\\\",\\\"inputChange\\\":\\\"[\\\\\\\"id\\\\\\\",\\\\\\\"name\\\\\\\",\\\\\\\"defaultVal\\\\\\\",\\\\\\\"verification\\\\\\\",\\\\\\\"placeholder\\\\\\\",\\\\\\\"cssClass\\\\\\\",\\\\\\\"labelName\\\\\\\",\\\\\\\"labelCSS\\\\\\\",\\\\\\\"title\\\\\\\"]\\\",\\\"clickChange\\\":\\\"[\\\\\\\"authority\\\\\\\",\\\\\\\"hideLabel\\\\\\\",\\\\\\\"labelPosition\\\\\\\"]\\\",\\\"purview\\\":\\\"{\\\\\\\"id\\\\\\\":3,\\\\\\\"name\\\\\\\":3,\\\\\\\"defaultVal\\\\\\\":3,\\\\\\\"verification\\\\\\\":3,\\\\\\\"authority\\\\\\\":3,\\\\\\\"placeholder\\\\\\\":3,\\\\\\\"cssClass\\\\\\\":3,\\\\\\\"hideLabel\\\\\\\":3,\\\\\\\"labelName\\\\\\\":3,\\\\\\\"labelPosition\\\\\\\":3,\\\\\\\"labelCSS\\\\\\\":3,\\\\\\\"title\\\\\\\":3}\\\",\\\"dataShowType\\\":\\\"{\\\\\\\"hideLabel\\\\\\\":\\\\\\\"switch\\\\\\\",\\\\\\\"authority\\\\\\\":\\\\\\\"checkbox\\\\\\\",\\\\\\\"labelPosition\\\\\\\":\\\\\\\"checkbox\\\\\\\"}\\\"}\",\"ortumChildren\":null,\"script\":\"\"}],\"ortumSet\":{}}"; - - return AjaxResult.success(f); - } } diff --git a/snow-from/src/main/java/com/snow/from/controller/SysFormFieldController.java b/snow-from/src/main/java/com/snow/from/controller/SysFormFieldController.java new file mode 100644 index 0000000..429887c --- /dev/null +++ b/snow-from/src/main/java/com/snow/from/controller/SysFormFieldController.java @@ -0,0 +1,123 @@ +package com.snow.from.controller; + +import com.snow.common.annotation.Log; +import com.snow.common.core.controller.BaseController; +import com.snow.common.core.domain.AjaxResult; +import com.snow.common.core.page.TableDataInfo; +import com.snow.common.enums.BusinessType; +import com.snow.common.utils.poi.ExcelUtil; +import com.snow.from.domain.SysFormField; +import com.snow.from.service.ISysFormFieldService; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 单字段Controller + * + * @author 没用的阿吉 + * @date 2021-03-21 + */ +@Controller +@RequestMapping("/system/field") +public class SysFormFieldController extends BaseController +{ + private String prefix = "system/field"; + + @Autowired + private ISysFormFieldService sysFormFieldService; + + @RequiresPermissions("system:field:view") + @GetMapping() + public String field() + { + return prefix + "/field"; + } + + /** + * 查询单字段列表 + */ + @RequiresPermissions("system:field:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(SysFormField sysFormField) + { + startPage(); + List list = sysFormFieldService.selectSysFormFieldList(sysFormField); + return getDataTable(list); + } + + /** + * 导出单字段列表 + */ + @RequiresPermissions("system:field:export") + @Log(title = "单字段", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(SysFormField sysFormField) + { + List list = sysFormFieldService.selectSysFormFieldList(sysFormField); + ExcelUtil util = new ExcelUtil(SysFormField.class); + return util.exportExcel(list, "field"); + } + + /** + * 新增单字段 + */ + @GetMapping("/add") + public String add() + { + return prefix + "/add"; + } + + /** + * 新增保存单字段 + */ + @RequiresPermissions("system:field:add") + @Log(title = "单字段", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(SysFormField sysFormField) + { + return toAjax(sysFormFieldService.insertSysFormField(sysFormField)); + } + + /** + * 修改单字段 + */ + @GetMapping("/edit/{id}") + public String edit(@PathVariable("id") Long id, ModelMap mmap) + { + SysFormField sysFormField = sysFormFieldService.selectSysFormFieldById(id); + mmap.put("sysFormField", sysFormField); + return prefix + "/edit"; + } + + /** + * 修改保存单字段 + */ + @RequiresPermissions("system:field:edit") + @Log(title = "单字段", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(SysFormField sysFormField) + { + return toAjax(sysFormFieldService.updateSysFormField(sysFormField)); + } + + /** + * 删除单字段 + */ + @RequiresPermissions("system:field:remove") + @Log(title = "单字段", businessType = BusinessType.DELETE) + @PostMapping( "/remove") + @ResponseBody + public AjaxResult remove(String ids) + { + return toAjax(sysFormFieldService.deleteSysFormFieldByIds(ids)); + } +} diff --git a/snow-from/src/main/java/com/snow/from/controller/SysFormInstanceController.java b/snow-from/src/main/java/com/snow/from/controller/SysFormInstanceController.java new file mode 100644 index 0000000..27a64fc --- /dev/null +++ b/snow-from/src/main/java/com/snow/from/controller/SysFormInstanceController.java @@ -0,0 +1,234 @@ +package com.snow.from.controller; + +import cn.hutool.cache.CacheUtil; +import cn.hutool.cache.impl.TimedCache; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.ListUtil; +import com.alibaba.fastjson.JSON; +import com.snow.common.annotation.Log; +import com.snow.common.core.controller.BaseController; +import com.snow.common.core.domain.AjaxResult; +import com.snow.common.core.page.TableDataInfo; +import com.snow.common.enums.BusinessType; +import com.snow.common.utils.StringUtils; +import com.snow.common.utils.poi.ExcelUtil; +import com.snow.framework.util.ShiroUtils; +import com.snow.from.domain.FieldContentDTO; +import com.snow.from.domain.FromInfoDTO; +import com.snow.from.domain.SysFormField; +import com.snow.from.domain.SysFormInstance; +import com.snow.from.service.ISysFormFieldService; +import com.snow.from.service.ISysFormInstanceService; +import com.snow.system.domain.SysUser; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.*; + +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 单实例Controller + * + * @author 没用的阿吉 + * @date 2021-03-21 + */ +@Controller +@RequestMapping("/from/instance") +public class SysFormInstanceController extends BaseController +{ + private String prefix = "system/instance"; + + @Autowired + private ISysFormInstanceService sysFormInstanceService; + + @Autowired + private ISysFormFieldService sysFormFieldService; + + + @RequiresPermissions("system:instance:view") + @GetMapping() + public String instance() + { + return prefix + "/instance"; + } + + /** + * 查询单实例列表 + */ + @RequiresPermissions("system:instance:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(SysFormInstance sysFormInstance) + { + startPage(); + List list = sysFormInstanceService.selectSysFormInstanceList(sysFormInstance); + return getDataTable(list); + } + + /** + * 导出单实例列表 + */ + @RequiresPermissions("system:instance:export") + @Log(title = "单实例", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(SysFormInstance sysFormInstance) + { + List list = sysFormInstanceService.selectSysFormInstanceList(sysFormInstance); + ExcelUtil util = new ExcelUtil(SysFormInstance.class); + return util.exportExcel(list, "instance"); + } + + /** + * + * 保存表单数据 + * @param fromInfoDTO + * @return + */ + @PostMapping("/saveFromInfo") + @ResponseBody + @Transactional + public AjaxResult saveFromInfo(@RequestBody FromInfoDTO fromInfoDTO) + { + SysUser sysUser = ShiroUtils.getSysUser(); + String contentHtml = fromInfoDTO.getContentHtml(); + Object ortumJson = JSON.parseObject(contentHtml).get(FromInfoDTO.ORTUM_JSON); + + List fieldContentDTOS = JSON.parseArray(JSON.toJSONString(ortumJson), FieldContentDTO.class); + if(fieldContentDTOS.size()==0){ + return AjaxResult.error("还没有创建组件呢!"); + } + SysFormInstance sysFormInstanceCode = sysFormInstanceService.selectSysFormInstanceByFormCode(fromInfoDTO.getFormCode()); + if(StringUtils.isNotNull(sysFormInstanceCode)){ + return AjaxResult.error(String.format("表单编号:%已存在",fromInfoDTO.getFormCode())); + } + SysFormInstance sysFormInstanceName = sysFormInstanceService.selectSysFormInstanceByFormCode(fromInfoDTO.getColumnName()); + if(StringUtils.isNotNull(sysFormInstanceName)){ + return AjaxResult.error(String.format("表单名称:%已存在",fromInfoDTO.getFormName())); + } + SysFormInstance sysFormInstance=new SysFormInstance(); + sysFormInstance.setFormCode(fromInfoDTO.getFormCode()); + sysFormInstance.setFormName(fromInfoDTO.getFormName()); + sysFormInstance.setRev(Long.parseLong(fromInfoDTO.getVersion())); + sysFormInstance.setFromContentHtml(contentHtml); + sysFormInstance.setCreateBy(sysUser.getUserName()); + sysFormInstance.setUpdateTime(new Date()); + sysFormInstanceService.insertSysFormInstance(sysFormInstance); + + fieldContentDTOS.stream().forEach(t->{ + SysFormField sysFormField=new SysFormField(); + sysFormField.setFromId(sysFormInstance.getId()); + sysFormField.setFieldKey(t.getName()); + sysFormField.setFieldName(t.getTitle()); + sysFormField.setFieldType(t.getComponentKey()); + sysFormField.setFieldHtml(t.getHtml()); + sysFormField.setRev(sysFormInstance.getRev()); + //组件属性 + sysFormField.setRemark(t.getComponentProperties()); + sysFormFieldService.insertSysFormField(sysFormField); + }); + return AjaxResult.success(fromInfoDTO); + } + + /** + * 预览 + * @return + */ + @GetMapping("/fromPreview/{id}") + public String fromPreview(@PathVariable("id") Long id,ModelMap mmap) + { + mmap.put("formId",id); + return prefix+"/fromPreview"; + } + /** + * 获取表单内容 + * @param formId + * @return + */ + @GetMapping("/getFromInfo/{formId}") + @ResponseBody + public AjaxResult getFromInfo(@PathVariable("formId")Long formId) + { + FromInfoDTO fromInfoDTO=new FromInfoDTO(); + SysFormInstance sysFormInstance = sysFormInstanceService.selectSysFormInstanceById(formId); + fromInfoDTO.setFormCode(sysFormInstance.getFormCode()); + fromInfoDTO.setFormName(sysFormInstance.getFormName()); + fromInfoDTO.setVersion(String.valueOf(sysFormInstance.getRev())); + fromInfoDTO.setId(String.valueOf(sysFormInstance.getId())); + SysFormField sysFormField=new SysFormField(); + sysFormField.setFromId(formId); + List sysFormFieldList = sysFormFieldService.selectSysFormFieldList(sysFormField); + if(CollectionUtil.isNotEmpty(sysFormFieldList)){ + String columnID = sysFormFieldList.stream().map(SysFormField::getFieldKey).collect(Collectors.joining(",")); + String columnName = sysFormFieldList.stream().map(SysFormField::getFieldName).collect(Collectors.joining(",")); + fromInfoDTO.setColumnID(columnID); + fromInfoDTO.setColumnName(columnName); + fromInfoDTO.setContentHtml(sysFormInstance.getFromContentHtml()); + fromInfoDTO.setEditor(sysFormInstance.getCreateBy()); + fromInfoDTO.setEditTime(sysFormInstance.getUpdateTime()); + } + return AjaxResult.success(fromInfoDTO); + } + /** + * 新增单实例 + */ + @GetMapping("/add") + public String add() + { + return prefix + "/add"; + } + + /** + * 新增保存单实例 + */ + @RequiresPermissions("system:instance:add") + @Log(title = "单实例", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(SysFormInstance sysFormInstance) + { + return toAjax(sysFormInstanceService.insertSysFormInstance(sysFormInstance)); + } + + /** + * 修改单实例 + */ + @GetMapping("/edit/{id}") + public String edit(@PathVariable("id") Long id, ModelMap mmap) + { + SysFormInstance sysFormInstance = sysFormInstanceService.selectSysFormInstanceById(id); + mmap.put("sysFormInstance", sysFormInstance); + return prefix + "/edit"; + } + + /** + * 修改保存单实例 + */ + @RequiresPermissions("system:instance:edit") + @Log(title = "单实例", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(SysFormInstance sysFormInstance) + { + return toAjax(sysFormInstanceService.updateSysFormInstance(sysFormInstance)); + } + + /** + * 删除单实例 + */ + @RequiresPermissions("system:instance:remove") + @Log(title = "单实例", businessType = BusinessType.DELETE) + @PostMapping( "/remove") + @ResponseBody + public AjaxResult remove(String ids) + { + return toAjax(sysFormInstanceService.deleteSysFormInstanceByIds(ids)); + } +} diff --git a/snow-from/src/main/java/com/snow/from/domain/FieldContentDTO.java b/snow-from/src/main/java/com/snow/from/domain/FieldContentDTO.java new file mode 100644 index 0000000..59b2478 --- /dev/null +++ b/snow-from/src/main/java/com/snow/from/domain/FieldContentDTO.java @@ -0,0 +1,42 @@ +package com.snow.from.domain; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @program: snow + * @description + * @author: 没用的阿吉 + * @create: 2021-03-21 13:49 + **/ +@Data +public class FieldContentDTO implements Serializable { + private static final long serialVersionUID = 5539925619264110377L; + + private String frame; + + + private String componentKey; + + private String name; + + + private String title; + + /** + * 组件属性 + */ + private String componentProperties; + + private String html; + + private String[] children; + + + private Object ortumChildren; + + + private String script; + +} diff --git a/snow-from/src/main/java/com/snow/from/model/FromInfoDTO.java b/snow-from/src/main/java/com/snow/from/domain/FromInfoDTO.java similarity index 86% rename from snow-from/src/main/java/com/snow/from/model/FromInfoDTO.java rename to snow-from/src/main/java/com/snow/from/domain/FromInfoDTO.java index a8c7059..d9a5dca 100644 --- a/snow-from/src/main/java/com/snow/from/model/FromInfoDTO.java +++ b/snow-from/src/main/java/com/snow/from/domain/FromInfoDTO.java @@ -1,4 +1,4 @@ -package com.snow.from.model; +package com.snow.from.domain; import lombok.Data; @@ -39,6 +39,7 @@ public class FromInfoDTO implements Serializable { private String editor; + private Date editTime; /** @@ -48,10 +49,14 @@ public class FromInfoDTO implements Serializable { /** * from表单name */ - private Date formName; + private String formName; /** * 版本号 */ private String version; + + + + public static String ORTUM_JSON="ortumJson"; } diff --git a/snow-from/src/main/java/com/snow/from/domain/SysFormField.java b/snow-from/src/main/java/com/snow/from/domain/SysFormField.java new file mode 100644 index 0000000..3bf92b3 --- /dev/null +++ b/snow-from/src/main/java/com/snow/from/domain/SysFormField.java @@ -0,0 +1,53 @@ +package com.snow.from.domain; + +import com.snow.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.snow.common.core.domain.BaseEntity; +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 单字段对象 sys_form_field + * + * @author 没用的阿吉 + * @date 2021-03-21 + */ +@Data +public class SysFormField extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键ID */ + private Long id; + + /** 字段标识 */ + @Excel(name = "字段标识") + private String fieldKey; + + /** 字段名称 */ + @Excel(name = "字段名称") + private String fieldName; + + /** 字段类型 */ + @Excel(name = "字段类型") + private String fieldType; + + /** 字段html */ + @Excel(name = "字段html") + private String fieldHtml; + + /** 乐观锁版本号 */ + @Excel(name = "乐观锁版本号") + private Long rev; + + /** 租户ID */ + @Excel(name = "租户ID") + private String tenantId; + + /** 删除标识(0--正常,1--删除) */ + @Excel(name = "删除标识", readConverterExp = "0=--正常,1--删除") + private Long isDelete; + + private Long fromId; +} diff --git a/snow-from/src/main/java/com/snow/from/domain/SysFormInstance.java b/snow-from/src/main/java/com/snow/from/domain/SysFormInstance.java new file mode 100644 index 0000000..e241030 --- /dev/null +++ b/snow-from/src/main/java/com/snow/from/domain/SysFormInstance.java @@ -0,0 +1,52 @@ +package com.snow.from.domain; + +import com.snow.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.snow.common.core.domain.BaseEntity; +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 单实例对象 sys_form_instance + * + * @author 没用的阿吉 + * @date 2021-03-21 + */ +@Data +public class SysFormInstance extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键ID */ + private Long id; + + /** 表单定义code */ + @Excel(name = "表单定义code") + private String formCode; + + /** 表单名称 */ + @Excel(name = "表单名称") + private String formName; + + /** + * 表单内容 + */ + private String fromContentHtml; + + /** 表单url */ + @Excel(name = "表单url") + private String fromUrl; + + /** 乐观锁版本号 */ + @Excel(name = "乐观锁版本号") + private Long rev; + + /** 删除标识(0--正常,1--删除) */ + @Excel(name = "删除标识", readConverterExp = "0=--正常,1--删除") + private Long isDelete; + + /** 租户ID */ + @Excel(name = "租户ID") + private String tenantId; +} diff --git a/snow-from/src/main/java/com/snow/from/mapper/SysFormFieldMapper.java b/snow-from/src/main/java/com/snow/from/mapper/SysFormFieldMapper.java new file mode 100644 index 0000000..ed35294 --- /dev/null +++ b/snow-from/src/main/java/com/snow/from/mapper/SysFormFieldMapper.java @@ -0,0 +1,62 @@ +package com.snow.from.mapper; + +import com.snow.from.domain.SysFormField; + +import java.util.List; + +/** + * 单字段Mapper接口 + * + * @author 没用的阿吉 + * @date 2021-03-21 + */ +public interface SysFormFieldMapper +{ + /** + * 查询单字段 + * + * @param id 单字段ID + * @return 单字段 + */ + public SysFormField selectSysFormFieldById(Long id); + + /** + * 查询单字段列表 + * + * @param sysFormField 单字段 + * @return 单字段集合 + */ + public List selectSysFormFieldList(SysFormField sysFormField); + + /** + * 新增单字段 + * + * @param sysFormField 单字段 + * @return 结果 + */ + public int insertSysFormField(SysFormField sysFormField); + + /** + * 修改单字段 + * + * @param sysFormField 单字段 + * @return 结果 + */ + public int updateSysFormField(SysFormField sysFormField); + + /** + * 删除单字段 + * + * @param id 单字段ID + * @return 结果 + */ + public int deleteSysFormFieldById(Long id); + + /** + * 批量删除单字段 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSysFormFieldByIds(String[] ids); +} diff --git a/snow-from/src/main/java/com/snow/from/mapper/SysFormInstanceMapper.java b/snow-from/src/main/java/com/snow/from/mapper/SysFormInstanceMapper.java new file mode 100644 index 0000000..ee7b58a --- /dev/null +++ b/snow-from/src/main/java/com/snow/from/mapper/SysFormInstanceMapper.java @@ -0,0 +1,76 @@ +package com.snow.from.mapper; + +import com.snow.from.domain.SysFormInstance; + +import java.util.List; + +/** + * 单实例Mapper接口 + * + * @author 没用的阿吉 + * @date 2021-03-21 + */ +public interface SysFormInstanceMapper +{ + /** + * 查询单实例 + * + * @param id 单实例ID + * @return 单实例 + */ + public SysFormInstance selectSysFormInstanceById(Long id); + + /** + * 查询单实例 + * @param fromCode + * @return + */ + public SysFormInstance selectSysFormInstanceByFormCode(String fromCode); + + /** + * 查询单实例 + * @param fromName + * @return + */ + public SysFormInstance selectSysFormInstanceByFormName(String fromName); + + /** + * 查询单实例列表 + * + * @param sysFormInstance 单实例 + * @return 单实例集合 + */ + public List selectSysFormInstanceList(SysFormInstance sysFormInstance); + + /** + * 新增单实例 + * + * @param sysFormInstance 单实例 + * @return 结果 + */ + public int insertSysFormInstance(SysFormInstance sysFormInstance); + + /** + * 修改单实例 + * + * @param sysFormInstance 单实例 + * @return 结果 + */ + public int updateSysFormInstance(SysFormInstance sysFormInstance); + + /** + * 删除单实例 + * + * @param id 单实例ID + * @return 结果 + */ + public int deleteSysFormInstanceById(Long id); + + /** + * 批量删除单实例 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSysFormInstanceByIds(String[] ids); +} diff --git a/snow-from/src/main/java/com/snow/from/service/ISysFormFieldService.java b/snow-from/src/main/java/com/snow/from/service/ISysFormFieldService.java new file mode 100644 index 0000000..f89ae86 --- /dev/null +++ b/snow-from/src/main/java/com/snow/from/service/ISysFormFieldService.java @@ -0,0 +1,62 @@ +package com.snow.from.service; + +import com.snow.from.domain.SysFormField; + +import java.util.List; + +/** + * 单字段Service接口 + * + * @author 没用的阿吉 + * @date 2021-03-21 + */ +public interface ISysFormFieldService +{ + /** + * 查询单字段 + * + * @param id 单字段ID + * @return 单字段 + */ + public SysFormField selectSysFormFieldById(Long id); + + /** + * 查询单字段列表 + * + * @param sysFormField 单字段 + * @return 单字段集合 + */ + public List selectSysFormFieldList(SysFormField sysFormField); + + /** + * 新增单字段 + * + * @param sysFormField 单字段 + * @return 结果 + */ + public int insertSysFormField(SysFormField sysFormField); + + /** + * 修改单字段 + * + * @param sysFormField 单字段 + * @return 结果 + */ + public int updateSysFormField(SysFormField sysFormField); + + /** + * 批量删除单字段 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSysFormFieldByIds(String ids); + + /** + * 删除单字段信息 + * + * @param id 单字段ID + * @return 结果 + */ + public int deleteSysFormFieldById(Long id); +} diff --git a/snow-from/src/main/java/com/snow/from/service/ISysFormInstanceService.java b/snow-from/src/main/java/com/snow/from/service/ISysFormInstanceService.java new file mode 100644 index 0000000..c7dd709 --- /dev/null +++ b/snow-from/src/main/java/com/snow/from/service/ISysFormInstanceService.java @@ -0,0 +1,76 @@ +package com.snow.from.service; + +import com.snow.from.domain.SysFormInstance; + +import java.util.List; + +/** + * 单实例Service接口 + * + * @author 没用的阿吉 + * @date 2021-03-21 + */ +public interface ISysFormInstanceService +{ + /** + * 查询单实例 + * + * @param id 单实例ID + * @return 单实例 + */ + public SysFormInstance selectSysFormInstanceById(Long id); + + /** + * + * @param fromCode + * @return + */ + public SysFormInstance selectSysFormInstanceByFormCode(String fromCode); + + /** + * 查询单实例 + * @param fromName + * @return + */ + public SysFormInstance selectSysFormInstanceByFormName(String fromName); + + /** + * 查询单实例列表 + * + * @param sysFormInstance 单实例 + * @return 单实例集合 + */ + public List selectSysFormInstanceList(SysFormInstance sysFormInstance); + + /** + * 新增单实例 + * + * @param sysFormInstance 单实例 + * @return 结果 + */ + public int insertSysFormInstance(SysFormInstance sysFormInstance); + + /** + * 修改单实例 + * + * @param sysFormInstance 单实例 + * @return 结果 + */ + public int updateSysFormInstance(SysFormInstance sysFormInstance); + + /** + * 批量删除单实例 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSysFormInstanceByIds(String ids); + + /** + * 删除单实例信息 + * + * @param id 单实例ID + * @return 结果 + */ + public int deleteSysFormInstanceById(Long id); +} diff --git a/snow-from/src/main/java/com/snow/from/service/impl/SysFormFieldServiceImpl.java b/snow-from/src/main/java/com/snow/from/service/impl/SysFormFieldServiceImpl.java new file mode 100644 index 0000000..c9e872c --- /dev/null +++ b/snow-from/src/main/java/com/snow/from/service/impl/SysFormFieldServiceImpl.java @@ -0,0 +1,98 @@ +package com.snow.from.service.impl; + +import com.snow.common.core.text.Convert; +import com.snow.common.utils.DateUtils; +import com.snow.from.domain.SysFormField; +import com.snow.from.mapper.SysFormFieldMapper; +import com.snow.from.service.ISysFormFieldService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 单字段Service业务层处理 + * + * @author 没用的阿吉 + * @date 2021-03-21 + */ +@Service +public class SysFormFieldServiceImpl implements ISysFormFieldService +{ + @Autowired + private SysFormFieldMapper sysFormFieldMapper; + + /** + * 查询单字段 + * + * @param id 单字段ID + * @return 单字段 + */ + @Override + public SysFormField selectSysFormFieldById(Long id) + { + return sysFormFieldMapper.selectSysFormFieldById(id); + } + + /** + * 查询单字段列表 + * + * @param sysFormField 单字段 + * @return 单字段 + */ + @Override + public List selectSysFormFieldList(SysFormField sysFormField) + { + return sysFormFieldMapper.selectSysFormFieldList(sysFormField); + } + + /** + * 新增单字段 + * + * @param sysFormField 单字段 + * @return 结果 + */ + @Override + public int insertSysFormField(SysFormField sysFormField) + { + sysFormField.setCreateTime(DateUtils.getNowDate()); + return sysFormFieldMapper.insertSysFormField(sysFormField); + } + + /** + * 修改单字段 + * + * @param sysFormField 单字段 + * @return 结果 + */ + @Override + public int updateSysFormField(SysFormField sysFormField) + { + sysFormField.setUpdateTime(DateUtils.getNowDate()); + return sysFormFieldMapper.updateSysFormField(sysFormField); + } + + /** + * 删除单字段对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteSysFormFieldByIds(String ids) + { + return sysFormFieldMapper.deleteSysFormFieldByIds(Convert.toStrArray(ids)); + } + + /** + * 删除单字段信息 + * + * @param id 单字段ID + * @return 结果 + */ + @Override + public int deleteSysFormFieldById(Long id) + { + return sysFormFieldMapper.deleteSysFormFieldById(id); + } +} diff --git a/snow-from/src/main/java/com/snow/from/service/impl/SysFormInstanceServiceImpl.java b/snow-from/src/main/java/com/snow/from/service/impl/SysFormInstanceServiceImpl.java new file mode 100644 index 0000000..6607e71 --- /dev/null +++ b/snow-from/src/main/java/com/snow/from/service/impl/SysFormInstanceServiceImpl.java @@ -0,0 +1,107 @@ +package com.snow.from.service.impl; + +import java.util.List; +import com.snow.common.utils.DateUtils; +import com.snow.from.domain.SysFormInstance; +import com.snow.from.mapper.SysFormInstanceMapper; +import com.snow.from.service.ISysFormInstanceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.snow.common.core.text.Convert; + +/** + * 单实例Service业务层处理 + * + * @author 没用的阿吉 + * @date 2021-03-21 + */ +@Service +public class SysFormInstanceServiceImpl implements ISysFormInstanceService +{ + @Autowired + private SysFormInstanceMapper sysFormInstanceMapper; + + /** + * 查询单实例 + * + * @param id 单实例ID + * @return 单实例 + */ + @Override + public SysFormInstance selectSysFormInstanceById(Long id) + { + return sysFormInstanceMapper.selectSysFormInstanceById(id); + } + + @Override + public SysFormInstance selectSysFormInstanceByFormCode(String fromCode) { + return sysFormInstanceMapper.selectSysFormInstanceByFormCode(fromCode); + } + + @Override + public SysFormInstance selectSysFormInstanceByFormName(String fromName) { + return sysFormInstanceMapper.selectSysFormInstanceByFormName(fromName); + } + + /** + * 查询单实例列表 + * + * @param sysFormInstance 单实例 + * @return 单实例 + */ + @Override + public List selectSysFormInstanceList(SysFormInstance sysFormInstance) + { + return sysFormInstanceMapper.selectSysFormInstanceList(sysFormInstance); + } + + /** + * 新增单实例 + * + * @param sysFormInstance 单实例 + * @return 结果 + */ + @Override + public int insertSysFormInstance(SysFormInstance sysFormInstance) + { + sysFormInstance.setCreateTime(DateUtils.getNowDate()); + return sysFormInstanceMapper.insertSysFormInstance(sysFormInstance); + } + + /** + * 修改单实例 + * + * @param sysFormInstance 单实例 + * @return 结果 + */ + @Override + public int updateSysFormInstance(SysFormInstance sysFormInstance) + { + sysFormInstance.setUpdateTime(DateUtils.getNowDate()); + return sysFormInstanceMapper.updateSysFormInstance(sysFormInstance); + } + + /** + * 删除单实例对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteSysFormInstanceByIds(String ids) + { + return sysFormInstanceMapper.deleteSysFormInstanceByIds(Convert.toStrArray(ids)); + } + + /** + * 删除单实例信息 + * + * @param id 单实例ID + * @return 结果 + */ + @Override + public int deleteSysFormInstanceById(Long id) + { + return sysFormInstanceMapper.deleteSysFormInstanceById(id); + } +} diff --git a/snow-from/src/main/resources/mapper/system/SysFormFieldMapper.xml b/snow-from/src/main/resources/mapper/system/SysFormFieldMapper.xml new file mode 100644 index 0000000..f5a4062 --- /dev/null +++ b/snow-from/src/main/resources/mapper/system/SysFormFieldMapper.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + select id_, field_key_, field_name_, field_type_, from_id,field_html_, remark_, create_by, create_time, update_time, update_by, rev_, tenant_id_, is_delete from sys_form_field + + + + + + + + insert into sys_form_field + + field_key_, + field_name_, + field_type_, + field_html_, + remark_, + create_by, + create_time, + update_time, + update_by, + rev_, + tenant_id_, + is_delete, + from_id , + + + #{fieldKey}, + #{fieldName}, + #{fieldType}, + #{fieldHtml}, + #{remark}, + #{createBy}, + #{createTime}, + #{updateTime}, + #{updateBy}, + #{rev}, + #{tenantId}, + #{isDelete}, + #{fromId} + + + + + update sys_form_field + + field_key_ = #{fieldKey}, + field_name_ = #{fieldName}, + field_type_ = #{fieldType}, + field_html_ = #{fieldHtml}, + remark_ = #{remark}, + create_by = #{createBy}, + create_time = #{createTime}, + update_time = #{updateTime}, + update_by = #{updateBy}, + rev_ = #{rev}, + tenant_id_ = #{tenantId}, + is_delete = #{isDelete}, + from_id = #{fromId}, + + where id_ = #{id} + + + + delete from sys_form_field where id_ = #{id} + + + + delete from sys_form_field where id_ in + + #{id} + + + + \ No newline at end of file diff --git a/snow-from/src/main/resources/mapper/system/SysFormInstanceMapper.xml b/snow-from/src/main/resources/mapper/system/SysFormInstanceMapper.xml new file mode 100644 index 0000000..dfe586d --- /dev/null +++ b/snow-from/src/main/resources/mapper/system/SysFormInstanceMapper.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + select id_, form_code_, form_name_, from_url_, create_by, from_content_html_,create_time, update_time, update_by, rev_, is_delete, tenant_id_ from sys_form_instance + + + + + + + + + + + + + + + insert into sys_form_instance + + form_code_, + form_name_, + from_url_, + create_by, + create_time, + update_time, + update_by, + rev_, + is_delete, + tenant_id_, + from_content_html_, + + + #{formCode}, + #{formName}, + #{fromUrl}, + #{createBy}, + #{createTime}, + #{updateTime}, + #{updateBy}, + #{rev}, + #{isDelete}, + #{tenantId}, + #{fromContentHtml}, + + + + + update sys_form_instance + + form_code_ = #{formCode}, + form_name_ = #{formName}, + from_url_ = #{fromUrl}, + create_by = #{createBy}, + create_time = #{createTime}, + update_time = #{updateTime}, + update_by = #{updateBy}, + rev_ = #{rev}, + is_delete = #{isDelete}, + tenant_id_ = #{tenantId}, + from_content_html_=#{fromContentHtml}, + + where id_ = #{id} + + + + delete from sys_form_instance where id_ = #{id} + + + + delete from sys_form_instance where id_ in + + #{id} + + + + \ No newline at end of file diff --git a/snow-from/src/main/resources/static/js/index.js b/snow-from/src/main/resources/static/js/index.js index c2ea660..66c8f68 100644 --- a/snow-from/src/main/resources/static/js/index.js +++ b/snow-from/src/main/resources/static/js/index.js @@ -85,29 +85,6 @@ $("#ortum_exchangeItemBtn").on("click",function(){ $("#ortum_exchangeA_tempObj").eq(0).replaceWith(Global.ortum_active_item); $("#ortum_exchangeB_tempObj").eq(0).replaceWith(Global.ortum_replace_item); } - - /*if(activeItemParentDom.hasClass('ortum_bootstrap_td') && replaceItemParentDom.hasClass('ortum_bootstrap_td')){ - BootstrapTable.sonOrtumItemNew(activeItemParentDom,$(Global.ortum_replace_item)); - $(Global.ortum_replace_item).remove();//清除被替换组件 - BootstrapTable.sonOrtumItemNew(replaceItemParentDom,$(Global.ortum_active_item)); - $(Global.ortum_active_item).remove();//清除替换组件 - }else if(!activeItemParentDom.hasClass('ortum_bootstrap_td') && replaceItemParentDom.hasClass('ortum_bootstrap_td')){ - $(Global.ortum_active_item).eq(0).before("
"); - $("#ortum_exchange_tempObj").eq(0).replaceWith(Global.ortum_replace_item); - BootstrapTable.sonOrtumItemNew(replaceItemParentDom,$(Global.ortum_active_item)); - $(Global.ortum_active_item).remove();//清除被替换组件 - }else if(activeItemParentDom.hasClass('ortum_bootstrap_td') && !replaceItemParentDom.hasClass('ortum_bootstrap_td')){ - $(Global.ortum_replace_item).eq(0).before("
"); - $("#ortum_exchange_tempObj").eq(0).replaceWith(Global.ortum_active_item) - BootstrapTable.sonOrtumItemNew(activeItemParentDom,$(Global.ortum_replace_item)); - $(Global.ortum_replace_item).remove();//清除被替换组件 - }else{ - $(Global.ortum_replace_item).eq(0).before("
"); - $(Global.ortum_active_item).eq(0).before("
"); - $("#ortum_exchangeA_tempObj").eq(0).replaceWith(Global.ortum_active_item); - $("#ortum_exchangeB_tempObj").eq(0).replaceWith(Global.ortum_replace_item); - }*/ - Global.ortum_replace_item = null; Global.ortum_active_item = null; @@ -167,36 +144,9 @@ $(function(){ } }) }); -}) +}); + -//getFormContentJson函数的返回值 从数组中获取 name和title数组 -/*function getTitleAndNameFun(arr){ - let nameArr = []; - let titleArr = []; - arr.forEach((item,index)=>{ - if(!item.bindComponentName){//该组件没有绑定组件 - if(item.name){ - //只处理form组件 - if(item.componentKey && require("settings").menuListDataJSON[item.componentKey].sort === "form"){ - nameArr.push(item.name) - titleArr.push(item.title) - }else if(item.childrenType==="choose"){ - nameArr.push(item.name) - titleArr.push(item.title) - }; - if(item.children.length){ - let backData = getTitleAndNameFun(item.children); - nameArr = nameArr.concat(backData.nameArr) - titleArr = titleArr.concat(backData.titleArr) - } - } - } - }) - return { - titleArr:titleArr, - nameArr:nameArr, - }; -}*/ let showTipSetTime;//定时器 @@ -310,7 +260,6 @@ $('#ortum_table_act').on('click','.iconfont',function(e){ // debugger let getTitleAndName = Feature.getTitleAndNameFun(ortumJson)//后端需要的数据 - console.log("=======后端需要的数据============"+getTitleAndName); let titleArr = getTitleAndName.titleArr; let nameArr = getTitleAndName.nameArr; @@ -319,9 +268,6 @@ $('#ortum_table_act').on('click','.iconfont',function(e){ //获取localstore中的信息 let CATARC_INFO_SYS = window.localStorage.getItem("CATARC_INFO_SYS"); - //let account = JSON.parse(CATARC_INFO_SYS).account; - //let usename = JSON.parse(account).usname; - let usename = "阿吉"; let ajaxJsom = { columnID:nameArr.toString(), columnName:titleArr.toString(), @@ -331,6 +277,7 @@ $('#ortum_table_act').on('click','.iconfont',function(e){ ortumSet:ortumSet, ortumCss:ortumCss, }), + ortumJson:ortumJson, editor:"ortum", // editTime:new Date(), formCode:tableCode, @@ -345,7 +292,7 @@ $('#ortum_table_act').on('click','.iconfont',function(e){ } //有formID时 校验版本号 - formId && axios.get("/from/interface/saveFromInfo/"+formId) + formId && axios.get("/from/instance/saveFromInfo/"+formId) .then(function (res) { if(res.data.code==0){ if(!res.data.data){ @@ -381,15 +328,16 @@ $('#ortum_table_act').on('click','.iconfont',function(e){ }); //无formID时 不检查版本号 console.log("-------ajaxJsom---------------"+JSON.stringify(ajaxJsom)); - !formId && axios.post("/from/interface/saveFromInfo?_ts="+(new Date()).getTime(),ajaxJsom) + !formId && axios.post("/from/instance/saveFromInfo?_ts="+(new Date()).getTime(),ajaxJsom) .then(function(res){ //alert(JSON.stringify(res)) if(res.data.code==0){ Assist.infoTip("保存成功"); + closeItem(); //切换为编辑 - switchTableAct("edit",{formName:res.data.data.formName,formCode:res.data.data.formCode,formId:res.data.data.id,version:res.data.data.version}) + // switchTableAct("edit",{formName:res.data.data.formName,formCode:res.data.data.formCode,formId:res.data.data.id,version:res.data.data.version}) }else{ - Assist.dangerTip(res.data.message); + Assist.dangerTip(res.data.msg); } }) .catch(function (error) { @@ -398,32 +346,7 @@ $('#ortum_table_act').on('click','.iconfont',function(e){ }).finally(function () { showOrtumLoading(false); }); - /*ortumReq({ - "url":"/catarc_infoSys/api/form?_ts=1603870623362", - "method":Settings.ortum_tableAct[actWay].way, - "header":{ - "Content-Type": "application/json; charset=UTF-8", - }, - "data":JSON.stringify(ajaxJsom), - "success":(xhr,e)=>{ - console.log(xhr) - console.log(e) - if(xhr.status == 200){ - let response = JSON.parse(xhr.response); - console.log(response) - response.ok && Assist.infoTip("保存成功") - !response.ok && Assist.dangerTip(response.message) - }else{ - Assist.dangerTip("保存失败,状态码为"+xhr.status) - } - }, - "error":(xhr,e)=>{ - Assist.dangerTip("网络异常,保存失败"); - console.log(xhr) - console.log(e) - }, - })*/ - }) + }); return; } //编辑js @@ -552,4 +475,27 @@ window.onbeforeunload = function (e) { return '请确定所做修改已经保存!'; }; +var closeItem = function(dataId){ + var topWindow = $(window.parent.document); + if($.common.isNotEmpty(dataId)){ + window.parent.$.modal.closeLoading(); + // 根据dataId关闭指定选项卡 + $('.menuTab[data-id="' + dataId + '"]', topWindow).remove(); + // 移除相应tab对应的内容区 + $('.mainContent .RuoYi_iframe[data-id="' + dataId + '"]', topWindow).remove(); + return; + } + var panelUrl = window.frameElement.getAttribute('data-panel'); + $('.page-tabs-content .active i', topWindow).click(); + if($.common.isNotEmpty(panelUrl)){ + $('.menuTab[data-id="' + panelUrl + '"]', topWindow).addClass('active').siblings('.menuTab').removeClass('active'); + $('.mainContent .RuoYi_iframe', topWindow).each(function() { + if ($(this).data('id') == panelUrl) { + $(this).show().siblings('.RuoYi_iframe').hide(); + return false; + } + }); + } +} + diff --git a/snow-from/src/main/resources/templates/fromIndex.html b/snow-from/src/main/resources/templates/fromIndex.html index c40e981..acf97db 100644 --- a/snow-from/src/main/resources/templates/fromIndex.html +++ b/snow-from/src/main/resources/templates/fromIndex.html @@ -635,5 +635,6 @@ + \ No newline at end of file diff --git a/snow-from/src/main/resources/templates/fromPreview.html b/snow-from/src/main/resources/templates/fromPreview.html index 1cb9b15..d41c9bb 100644 --- a/snow-from/src/main/resources/templates/fromPreview.html +++ b/snow-from/src/main/resources/templates/fromPreview.html @@ -260,31 +260,9 @@ + + \ No newline at end of file diff --git a/snow-from/src/main/resources/templates/system/field/edit.html b/snow-from/src/main/resources/templates/system/field/edit.html new file mode 100644 index 0000000..b2284cd --- /dev/null +++ b/snow-from/src/main/resources/templates/system/field/edit.html @@ -0,0 +1,68 @@ + + + + + + +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/snow-from/src/main/resources/templates/system/field/field.html b/snow-from/src/main/resources/templates/system/field/field.html new file mode 100644 index 0000000..d255f95 --- /dev/null +++ b/snow-from/src/main/resources/templates/system/field/field.html @@ -0,0 +1,138 @@ + + + + + + +
+
+
+
+
+
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • +  搜索 +  重置 +
  • +
+
+
+
+ + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/snow-from/src/main/resources/templates/system/instance/add.html b/snow-from/src/main/resources/templates/system/instance/add.html new file mode 100644 index 0000000..b20e6f5 --- /dev/null +++ b/snow-from/src/main/resources/templates/system/instance/add.html @@ -0,0 +1,61 @@ + + + + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/snow-from/src/main/resources/templates/system/instance/edit.html b/snow-from/src/main/resources/templates/system/instance/edit.html new file mode 100644 index 0000000..06a6f11 --- /dev/null +++ b/snow-from/src/main/resources/templates/system/instance/edit.html @@ -0,0 +1,62 @@ + + + + + + +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/snow-from/src/main/resources/templates/system/instance/fromPreview.html b/snow-from/src/main/resources/templates/system/instance/fromPreview.html new file mode 100644 index 0000000..b0f4d6d --- /dev/null +++ b/snow-from/src/main/resources/templates/system/instance/fromPreview.html @@ -0,0 +1,414 @@ + + + + + + ortum + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ + + + + + + \ No newline at end of file diff --git a/snow-from/src/main/resources/templates/system/instance/instance.html b/snow-from/src/main/resources/templates/system/instance/instance.html new file mode 100644 index 0000000..a5dcef0 --- /dev/null +++ b/snow-from/src/main/resources/templates/system/instance/instance.html @@ -0,0 +1,106 @@ + + + + + + +
+
+
+
+
+
    +
  • + + +
  • +
  • + + +
  • +
  • +  搜索 +  重置 +
  • +
+
+
+
+ + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/snow-generator/pom.xml b/snow-generator/pom.xml index 2b8dc72..87511ae 100644 --- a/snow-generator/pom.xml +++ b/snow-generator/pom.xml @@ -5,7 +5,7 @@ snow com.snow - 4.3.1 + 2.0.0 4.0.0 diff --git a/snow-quartz/pom.xml b/snow-quartz/pom.xml index 1526ad0..8c392d9 100644 --- a/snow-quartz/pom.xml +++ b/snow-quartz/pom.xml @@ -5,7 +5,7 @@ snow com.snow - 4.3.1 + 2.0.0 4.0.0 @@ -29,11 +29,10 @@
- + com.snow snow-framework - 4.3.1 diff --git a/snow-system/pom.xml b/snow-system/pom.xml index 11908de..edd1670 100644 --- a/snow-system/pom.xml +++ b/snow-system/pom.xml @@ -5,7 +5,7 @@ snow com.snow - 4.3.1 + 2.0.0 4.0.0 @@ -21,7 +21,6 @@ com.snow snow-common - 4.3.1 org.projectlombok diff --git a/snow-system/src/main/java/com/snow/system/domain/SysDingHiTask.java b/snow-system/src/main/java/com/snow/system/domain/SysDingHiTask.java new file mode 100644 index 0000000..9ef1fee --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/domain/SysDingHiTask.java @@ -0,0 +1,77 @@ +package com.snow.system.domain; + +import java.util.Date; +import com.snow.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.snow.common.core.domain.BaseEntity; +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 对象 sys_ding_hi_task + * + * @author + * @date 2021-03-24 + */ +@Data +public class SysDingHiTask extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + private String id; + + private String taskId; + + private Long rev; + + + private String procInstId; + + private String procCode; + + private String activityId; + + + private String name; + + private String parentTaskId; + + + private String taskResult; + + private String taskState; + + private String taskDefKey; + + + private String description; + + + private String assignee; + + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date finishTime; + + + + private String category; + + + + private Long suspensionState; + + private String tenantId; + + + private String formKey; + + /** + * 任务历时 + */ + private String taskSpendTime; + + private SysDingProcinst sysDingProcinst; + + +} diff --git a/snow-system/src/main/java/com/snow/system/domain/SysDingProcinst.java b/snow-system/src/main/java/com/snow/system/domain/SysDingProcinst.java new file mode 100644 index 0000000..3659e65 --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/domain/SysDingProcinst.java @@ -0,0 +1,99 @@ +package com.snow.system.domain; + +import java.util.Date; +import com.snow.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.snow.common.core.domain.BaseEntity; +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 钉钉流程实例对象 sys_ding_procinst + * + * @author 没用的阿吉 + * @date 2021-03-24 + */ +@Data +public class SysDingProcinst extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** id */ + private Long id; + + /** 版本号 */ + @Excel(name = "版本号") + private Long rev; + + /** 流程实例id */ + @Excel(name = "流程实例id") + private String procInstId; + + /** 业务参数 */ + @Excel(name = "业务参数") + private String businessKey; + + /** 审批实例对应的企业 */ + @Excel(name = "审批实例对应的企业") + private String corpId; + + /** 流程开始时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "流程开始时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date startTime; + + /** 流程结束时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "流程结束时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date finishTime; + + /** 事件类型 */ + @Excel(name = "事件类型") + private String eventType; + + /** finish:审批正常结束(同意或拒绝)terminate:审批终止(发起人撤销审批单) */ + @Excel(name = "finish:审批正常结束", readConverterExp = "同=意或拒绝") + private String type; + + /** 实例标题 */ + @Excel(name = "实例标题") + private String title; + + /** 审批模板的唯一码 */ + @Excel(name = "审批模板的唯一码") + private String procCode; + + /** 租户id */ + @Excel(name = "租户id") + private String tenantId; + + /** null */ + @Excel(name = "null") + private String name; + + /** 审批实例url,可在钉钉内跳转到审批页面 */ + @Excel(name = "审批实例url,可在钉钉内跳转到审批页面") + private String dingUrl; + + /** 正常结束时result为agree,拒绝时result为refuse,审批终止时没这个值 */ + @Excel(name = "正常结束时result为agree,拒绝时result为refuse,审批终止时没这个值") + private String procResult; + + + /** + * 流程发起人钉钉ID + */ + private String startUserId; + + + /** + *流程发起人名字 + */ + private String startUserName; + + /** + * 流程用时 + */ + private String processSpendTime; +} diff --git a/snow-system/src/main/java/com/snow/system/domain/SysDingRuTask.java b/snow-system/src/main/java/com/snow/system/domain/SysDingRuTask.java new file mode 100644 index 0000000..d794fbd --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/domain/SysDingRuTask.java @@ -0,0 +1,88 @@ +package com.snow.system.domain; + +import java.util.Date; +import com.snow.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.snow.common.core.domain.BaseEntity; +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 钉钉运行任务对象 sys_ding_ru_task + * + * @author 没用的阿吉 + * @date 2021-03-24 + */ +@Data +public class SysDingRuTask extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 任务id(来自钉钉taskId) */ + private String id; + + /** 版本号 */ + @Excel(name = "版本号") + private Long rev; + + /** 流程实例id */ + @Excel(name = "流程实例id") + private String procInstId; + + /** 钉钉流程code */ + @Excel(name = "钉钉流程code") + private String procCode; + + /** 活动id */ + @Excel(name = "活动id") + private String activityId; + + /** 任务名称 */ + @Excel(name = "任务名称") + private String name; + + /** 父任务id */ + @Excel(name = "父任务id") + private String parentTaskId; + + /** 描述 */ + @Excel(name = "描述") + private String description; + + /** 任务定义key */ + @Excel(name = "任务定义key") + private String taskDefKey; + + /** 待办人 */ + @Excel(name = "待办人") + private String assignee; + + /** 结束时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date finishTime; + + /** 任务状态(NEW:未启动RUNNING:处理中PAUSED:暂停CANCELED:取消COMPLETED:完成TERMINATED:终止) */ + @Excel(name = "任务状态", readConverterExp = "N=EW:未启动RUNNING:处理中PAUSED:暂停CANCELED:取消COMPLETED:完成TERMINATED:终止") + private String taskState; + + /** 分类 */ + @Excel(name = "分类") + private String category; + + /** 任务挂起状态(0--正常,1--挂起) */ + @Excel(name = "任务挂起状态", readConverterExp = "0=--正常,1--挂起") + private Long suspensionState; + + /** 租户id */ + @Excel(name = "租户id") + private String tenantId; + + /** 外部表单key */ + @Excel(name = "外部表单key") + private String formKey; + + private SysDingProcinst sysDingProcinst; + +} diff --git a/snow-system/src/main/java/com/snow/system/mapper/SysDingHiTaskMapper.java b/snow-system/src/main/java/com/snow/system/mapper/SysDingHiTaskMapper.java new file mode 100644 index 0000000..6402ea5 --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/mapper/SysDingHiTaskMapper.java @@ -0,0 +1,61 @@ +package com.snow.system.mapper; + +import java.util.List; +import com.snow.system.domain.SysDingHiTask; + +/** + * 历史任务Mapper接口 + * + * @author 没用的阿吉 + * @date 2021-03-24 + */ +public interface SysDingHiTaskMapper +{ + /** + * 查询历史任务 + * + * @param id 历史任务ID + * @return 历史任务 + */ + public SysDingHiTask selectSysDingHiTaskById(String id); + + /** + * 查询历史任务列表 + * + * @param sysDingHiTask 历史任务 + * @return 历史任务集合 + */ + public List selectSysDingHiTaskList(SysDingHiTask sysDingHiTask); + + /** + * 新增历史任务 + * + * @param sysDingHiTask 历史任务 + * @return 结果 + */ + public int insertSysDingHiTask(SysDingHiTask sysDingHiTask); + + /** + * 修改历史任务 + * + * @param sysDingHiTask 历史任务 + * @return 结果 + */ + public int updateSysDingHiTask(SysDingHiTask sysDingHiTask); + + /** + * 删除历史任务 + * + * @param id 历史任务ID + * @return 结果 + */ + public int deleteSysDingHiTaskById(String id); + + /** + * 批量删除历史任务 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSysDingHiTaskByIds(String[] ids); +} diff --git a/snow-system/src/main/java/com/snow/system/mapper/SysDingProcinstMapper.java b/snow-system/src/main/java/com/snow/system/mapper/SysDingProcinstMapper.java new file mode 100644 index 0000000..6ab1ef3 --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/mapper/SysDingProcinstMapper.java @@ -0,0 +1,67 @@ +package com.snow.system.mapper; + +import java.util.List; +import com.snow.system.domain.SysDingProcinst; + +/** + * 钉钉流程实例Mapper接口 + * + * @author 没用的阿吉 + * @date 2021-03-24 + */ +public interface SysDingProcinstMapper +{ + /** + * 查询钉钉流程实例 + * + * @param id 钉钉流程实例ID + * @return 钉钉流程实例 + */ + public SysDingProcinst selectSysDingProcinstById(Long id); + + /** + * 查询钉钉流程实例 + * @param procInstId 钉钉流程实例ID + * @return 钉钉流程实例 + */ + public SysDingProcinst selectSysDingProcinstByProcInstId(String procInstId); + /** + * 查询钉钉流程实例列表 + * + * @param sysDingProcinst 钉钉流程实例 + * @return 钉钉流程实例集合 + */ + public List selectSysDingProcinstList(SysDingProcinst sysDingProcinst); + + /** + * 新增钉钉流程实例 + * + * @param sysDingProcinst 钉钉流程实例 + * @return 结果 + */ + public int insertSysDingProcinst(SysDingProcinst sysDingProcinst); + + /** + * 修改钉钉流程实例 + * + * @param sysDingProcinst 钉钉流程实例 + * @return 结果 + */ + public int updateSysDingProcinst(SysDingProcinst sysDingProcinst); + + /** + * 删除钉钉流程实例 + * + * @param id 钉钉流程实例ID + * @return 结果 + */ + public int deleteSysDingProcinstById(Long id); + + /** + * 批量删除钉钉流程实例 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSysDingProcinstByIds(String[] ids); +} diff --git a/snow-system/src/main/java/com/snow/system/mapper/SysDingRuTaskMapper.java b/snow-system/src/main/java/com/snow/system/mapper/SysDingRuTaskMapper.java new file mode 100644 index 0000000..4e7072e --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/mapper/SysDingRuTaskMapper.java @@ -0,0 +1,61 @@ +package com.snow.system.mapper; + +import java.util.List; +import com.snow.system.domain.SysDingRuTask; + +/** + * 钉钉运行任务Mapper接口 + * + * @author 没用的阿吉 + * @date 2021-03-24 + */ +public interface SysDingRuTaskMapper +{ + /** + * 查询钉钉运行任务 + * + * @param id 钉钉运行任务ID + * @return 钉钉运行任务 + */ + public SysDingRuTask selectSysDingRuTaskById(String id); + + /** + * 查询钉钉运行任务列表 + * + * @param sysDingRuTask 钉钉运行任务 + * @return 钉钉运行任务集合 + */ + public List selectSysDingRuTaskList(SysDingRuTask sysDingRuTask); + + /** + * 新增钉钉运行任务 + * + * @param sysDingRuTask 钉钉运行任务 + * @return 结果 + */ + public int insertSysDingRuTask(SysDingRuTask sysDingRuTask); + + /** + * 修改钉钉运行任务 + * + * @param sysDingRuTask 钉钉运行任务 + * @return 结果 + */ + public int updateSysDingRuTask(SysDingRuTask sysDingRuTask); + + /** + * 删除钉钉运行任务 + * + * @param id 钉钉运行任务ID + * @return 结果 + */ + public int deleteSysDingRuTaskById(String id); + + /** + * 批量删除钉钉运行任务 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSysDingRuTaskByIds(String[] ids); +} diff --git a/snow-system/src/main/java/com/snow/system/mapper/SysUserMapper.java b/snow-system/src/main/java/com/snow/system/mapper/SysUserMapper.java index 2f0f4b3..f6b38ed 100644 --- a/snow-system/src/main/java/com/snow/system/mapper/SysUserMapper.java +++ b/snow-system/src/main/java/com/snow/system/mapper/SysUserMapper.java @@ -83,6 +83,13 @@ public interface SysUserMapper */ public SysUser selectUserById(Long userId); + /** + * 通过用户dingUserId查询用户 + * @param dingUserId + * @return + */ + public SysUser selectUserByDingUserId(String dingUserId); + /** * 通过用户ID删除用户 * diff --git a/snow-system/src/main/java/com/snow/system/service/ISysDingHiTaskService.java b/snow-system/src/main/java/com/snow/system/service/ISysDingHiTaskService.java new file mode 100644 index 0000000..c95aea3 --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/service/ISysDingHiTaskService.java @@ -0,0 +1,61 @@ +package com.snow.system.service; + +import java.util.List; +import com.snow.system.domain.SysDingHiTask; + +/** + * 历史任务Service接口 + * + * @author 没用的阿吉 + * @date 2021-03-24 + */ +public interface ISysDingHiTaskService +{ + /** + * 查询历史任务 + * + * @param id 历史任务ID + * @return 历史任务 + */ + public SysDingHiTask selectSysDingHiTaskById(String id); + + /** + * 查询历史任务列表 + * + * @param sysDingHiTask 历史任务 + * @return 历史任务集合 + */ + public List selectSysDingHiTaskList(SysDingHiTask sysDingHiTask); + + /** + * 新增历史任务 + * + * @param sysDingHiTask 历史任务 + * @return 结果 + */ + public int insertSysDingHiTask(SysDingHiTask sysDingHiTask); + + /** + * 修改历史任务 + * + * @param sysDingHiTask 历史任务 + * @return 结果 + */ + public int updateSysDingHiTask(SysDingHiTask sysDingHiTask); + + /** + * 批量删除历史任务 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSysDingHiTaskByIds(String ids); + + /** + * 删除历史任务信息 + * + * @param id 历史任务ID + * @return 结果 + */ + public int deleteSysDingHiTaskById(String id); +} diff --git a/snow-system/src/main/java/com/snow/system/service/ISysDingProcinstService.java b/snow-system/src/main/java/com/snow/system/service/ISysDingProcinstService.java new file mode 100644 index 0000000..31bda01 --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/service/ISysDingProcinstService.java @@ -0,0 +1,67 @@ +package com.snow.system.service; + +import java.util.List; +import com.snow.system.domain.SysDingProcinst; + +/** + * 钉钉流程实例Service接口 + * + * @author 没用的阿吉 + * @date 2021-03-24 + */ +public interface ISysDingProcinstService +{ + /** + * 查询钉钉流程实例 + * + * @param id 钉钉流程实例ID + * @return 钉钉流程实例 + */ + public SysDingProcinst selectSysDingProcinstById(Long id); + + /** + * 查询钉钉流程实例 + * @param procInstId + * @return + */ + public SysDingProcinst selectSysDingProcinstByProcInstId(String procInstId); + /** + * 查询钉钉流程实例列表 + * + * @param sysDingProcinst 钉钉流程实例 + * @return 钉钉流程实例集合 + */ + public List selectSysDingProcinstList(SysDingProcinst sysDingProcinst); + + /** + * 新增钉钉流程实例 + * + * @param sysDingProcinst 钉钉流程实例 + * @return 结果 + */ + public int insertSysDingProcinst(SysDingProcinst sysDingProcinst); + + /** + * 修改钉钉流程实例 + * + * @param sysDingProcinst 钉钉流程实例 + * @return 结果 + */ + public int updateSysDingProcinst(SysDingProcinst sysDingProcinst); + + /** + * 批量删除钉钉流程实例 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSysDingProcinstByIds(String ids); + + /** + * 删除钉钉流程实例信息 + * + * @param id 钉钉流程实例ID + * @return 结果 + */ + public int deleteSysDingProcinstById(Long id); +} diff --git a/snow-system/src/main/java/com/snow/system/service/ISysDingRuTaskService.java b/snow-system/src/main/java/com/snow/system/service/ISysDingRuTaskService.java new file mode 100644 index 0000000..4c9d203 --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/service/ISysDingRuTaskService.java @@ -0,0 +1,61 @@ +package com.snow.system.service; + +import java.util.List; +import com.snow.system.domain.SysDingRuTask; + +/** + * 钉钉运行任务Service接口 + * + * @author 没用的阿吉 + * @date 2021-03-24 + */ +public interface ISysDingRuTaskService +{ + /** + * 查询钉钉运行任务 + * + * @param id 钉钉运行任务ID + * @return 钉钉运行任务 + */ + public SysDingRuTask selectSysDingRuTaskById(String id); + + /** + * 查询钉钉运行任务列表 + * + * @param sysDingRuTask 钉钉运行任务 + * @return 钉钉运行任务集合 + */ + public List selectSysDingRuTaskList(SysDingRuTask sysDingRuTask); + + /** + * 新增钉钉运行任务 + * + * @param sysDingRuTask 钉钉运行任务 + * @return 结果 + */ + public int insertSysDingRuTask(SysDingRuTask sysDingRuTask); + + /** + * 修改钉钉运行任务 + * + * @param sysDingRuTask 钉钉运行任务 + * @return 结果 + */ + public int updateSysDingRuTask(SysDingRuTask sysDingRuTask); + + /** + * 批量删除钉钉运行任务 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSysDingRuTaskByIds(String ids); + + /** + * 删除钉钉运行任务信息 + * + * @param id 钉钉运行任务ID + * @return 结果 + */ + public int deleteSysDingRuTaskById(String id); +} diff --git a/snow-system/src/main/java/com/snow/system/service/ISysUserService.java b/snow-system/src/main/java/com/snow/system/service/ISysUserService.java index 580fd1e..a735e6f 100644 --- a/snow-system/src/main/java/com/snow/system/service/ISysUserService.java +++ b/snow-system/src/main/java/com/snow/system/service/ISysUserService.java @@ -76,6 +76,13 @@ public interface ISysUserService */ public SysUser selectUserById(Long userId); + /** + * 通过用户dingUserId查询用户 + * @param dingUserId + * @return + */ + public SysUser selectUserByDingUserId(String dingUserId); + /** * 通过用户ID查询用户和角色关联 * diff --git a/snow-system/src/main/java/com/snow/system/service/impl/SysDingHiTaskServiceImpl.java b/snow-system/src/main/java/com/snow/system/service/impl/SysDingHiTaskServiceImpl.java new file mode 100644 index 0000000..940d89f --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/service/impl/SysDingHiTaskServiceImpl.java @@ -0,0 +1,130 @@ +package com.snow.system.service.impl; + +import java.util.List; +import java.util.Optional; + +import cn.hutool.core.date.BetweenFormater; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import com.snow.common.utils.DateUtils; +import com.snow.common.utils.StringUtils; +import com.snow.system.domain.SysDingProcinst; +import com.snow.system.domain.SysUser; +import com.snow.system.mapper.SysDingProcinstMapper; +import com.snow.system.mapper.SysUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.snow.system.mapper.SysDingHiTaskMapper; +import com.snow.system.domain.SysDingHiTask; +import com.snow.system.service.ISysDingHiTaskService; +import com.snow.common.core.text.Convert; + +import javax.annotation.Resource; + +/** + * 历史任务Service业务层处理 + * + * @author 没用的阿吉 + * @date 2021-03-24 + */ +@Service +public class SysDingHiTaskServiceImpl implements ISysDingHiTaskService +{ + @Resource + private SysDingHiTaskMapper sysDingHiTaskMapper; + + @Autowired + private SysDingProcinstServiceImpl sysDingProcinstService; + + + @Resource + private SysUserMapper sysUserMapper; + + /** + * 查询历史任务 + * + * @param id 历史任务ID + * @return 历史任务 + */ + @Override + public SysDingHiTask selectSysDingHiTaskById(String id) + { + return sysDingHiTaskMapper.selectSysDingHiTaskById(id); + } + + /** + * 查询历史任务列表 + * + * @param sysDingHiTask 历史任务 + * @return 历史任务 + */ + @Override + public List selectSysDingHiTaskList(SysDingHiTask sysDingHiTask) + { + List sysDingHiTaskList =sysDingHiTaskMapper.selectSysDingHiTaskList(sysDingHiTask); + sysDingHiTaskList.parallelStream().forEach(t->{ + if(StringUtils.isNotNull(t.getProcInstId())){ + SysDingProcinst sysDingProcinst = sysDingProcinstService.selectSysDingProcinstByProcInstId(t.getProcInstId()); + Optional.ofNullable(sysDingProcinst).ifPresent(s->{ + SysUser sysUser = sysUserMapper.selectUserByDingUserId(sysDingProcinst.getStartUserId()); + sysDingProcinst.setStartUserName(sysUser.getUserName()); + }); + + t.setSysDingProcinst(sysDingProcinst); + } + + Optional.ofNullable(t.getFinishTime()).ifPresent(s->t.setTaskSpendTime( DateUtil.formatBetween(t.getCreateTime(), t.getFinishTime(), BetweenFormater.Level.SECOND))); + + + }); + return sysDingHiTaskList; + } + + /** + * 新增历史任务 + * + * @param sysDingHiTask 历史任务 + * @return 结果 + */ + @Override + public int insertSysDingHiTask(SysDingHiTask sysDingHiTask) + { + return sysDingHiTaskMapper.insertSysDingHiTask(sysDingHiTask); + } + + /** + * 修改历史任务 + * + * @param sysDingHiTask 历史任务 + * @return 结果 + */ + @Override + public int updateSysDingHiTask(SysDingHiTask sysDingHiTask) + { + return sysDingHiTaskMapper.updateSysDingHiTask(sysDingHiTask); + } + + /** + * 删除历史任务对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteSysDingHiTaskByIds(String ids) + { + return sysDingHiTaskMapper.deleteSysDingHiTaskByIds(Convert.toStrArray(ids)); + } + + /** + * 删除历史任务信息 + * + * @param id 历史任务ID + * @return 结果 + */ + @Override + public int deleteSysDingHiTaskById(String id) + { + return sysDingHiTaskMapper.deleteSysDingHiTaskById(id); + } +} diff --git a/snow-system/src/main/java/com/snow/system/service/impl/SysDingProcinstServiceImpl.java b/snow-system/src/main/java/com/snow/system/service/impl/SysDingProcinstServiceImpl.java new file mode 100644 index 0000000..7c2eaf5 --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/service/impl/SysDingProcinstServiceImpl.java @@ -0,0 +1,118 @@ +package com.snow.system.service.impl; + +import java.util.List; +import java.util.Optional; + +import cn.hutool.core.date.BetweenFormater; +import cn.hutool.core.date.DateUtil; +import com.snow.common.utils.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.snow.system.mapper.SysDingProcinstMapper; +import com.snow.system.domain.SysDingProcinst; +import com.snow.system.service.ISysDingProcinstService; +import com.snow.common.core.text.Convert; + +/** + * 钉钉流程实例Service业务层处理 + * + * @author 没用的阿吉 + * @date 2021-03-24 + */ +@Service +public class SysDingProcinstServiceImpl implements ISysDingProcinstService +{ + @Autowired + private SysDingProcinstMapper sysDingProcinstMapper; + + /** + * 查询钉钉流程实例 + * + * @param id 钉钉流程实例ID + * @return 钉钉流程实例 + */ + @Override + public SysDingProcinst selectSysDingProcinstById(Long id) + { + return sysDingProcinstMapper.selectSysDingProcinstById(id); + } + + /** + * 查询钉钉流程实例 + * @param procInstId 钉钉流程实例ID + * @return + */ + public SysDingProcinst selectSysDingProcinstByProcInstId(String procInstId){ + SysDingProcinst sysDingProcinst=sysDingProcinstMapper.selectSysDingProcinstByProcInstId(procInstId); + if(StringUtils.isNotNull(sysDingProcinst)){ + Optional.ofNullable(sysDingProcinst.getFinishTime()).ifPresent(m->DateUtil.formatBetween(sysDingProcinst.getStartTime(),sysDingProcinst.getFinishTime(), BetweenFormater.Level.SECOND)); + } + return sysDingProcinst; + } + /** + * 查询钉钉流程实例列表 + * + * @param sysDingProcinst 钉钉流程实例 + * @return 钉钉流程实例 + */ + @Override + public List selectSysDingProcinstList(SysDingProcinst sysDingProcinst) + { + List sysDingProcinstList=sysDingProcinstMapper.selectSysDingProcinstList(sysDingProcinst); + + sysDingProcinstList.forEach(t-> + + Optional.ofNullable(t.getFinishTime()).ifPresent(m->t.setProcessSpendTime(DateUtil.formatBetween(t.getStartTime(), t.getFinishTime(), BetweenFormater.Level.SECOND))) + ); + + return sysDingProcinstList; + } + + /** + * 新增钉钉流程实例 + * + * @param sysDingProcinst 钉钉流程实例 + * @return 结果 + */ + @Override + public int insertSysDingProcinst(SysDingProcinst sysDingProcinst) + { + return sysDingProcinstMapper.insertSysDingProcinst(sysDingProcinst); + } + + /** + * 修改钉钉流程实例 + * + * @param sysDingProcinst 钉钉流程实例 + * @return 结果 + */ + @Override + public int updateSysDingProcinst(SysDingProcinst sysDingProcinst) + { + return sysDingProcinstMapper.updateSysDingProcinst(sysDingProcinst); + } + + /** + * 删除钉钉流程实例对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteSysDingProcinstByIds(String ids) + { + return sysDingProcinstMapper.deleteSysDingProcinstByIds(Convert.toStrArray(ids)); + } + + /** + * 删除钉钉流程实例信息 + * + * @param id 钉钉流程实例ID + * @return 结果 + */ + @Override + public int deleteSysDingProcinstById(Long id) + { + return sysDingProcinstMapper.deleteSysDingProcinstById(id); + } +} diff --git a/snow-system/src/main/java/com/snow/system/service/impl/SysDingRuTaskServiceImpl.java b/snow-system/src/main/java/com/snow/system/service/impl/SysDingRuTaskServiceImpl.java new file mode 100644 index 0000000..e1f728b --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/service/impl/SysDingRuTaskServiceImpl.java @@ -0,0 +1,127 @@ +package com.snow.system.service.impl; + +import java.util.List; +import java.util.Optional; + +import com.snow.common.utils.DateUtils; +import com.snow.common.utils.StringUtils; +import com.snow.system.domain.SysDingProcinst; +import com.snow.system.domain.SysUser; +import com.snow.system.mapper.SysDingProcinstMapper; +import com.snow.system.mapper.SysUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.snow.system.mapper.SysDingRuTaskMapper; +import com.snow.system.domain.SysDingRuTask; +import com.snow.system.service.ISysDingRuTaskService; +import com.snow.common.core.text.Convert; + +/** + * 钉钉运行任务Service业务层处理 + * + * @author 没用的阿吉 + * @date 2021-03-24 + */ +@Service +public class SysDingRuTaskServiceImpl implements ISysDingRuTaskService +{ + @Autowired + private SysDingRuTaskMapper sysDingRuTaskMapper; + + @Autowired + private SysDingProcinstMapper sysDingProcinstMapper; + + @Autowired + private SysUserMapper sysUserMapper; + + /** + * 查询钉钉运行任务 + * + * @param id 钉钉运行任务ID + * @return 钉钉运行任务 + */ + @Override + public SysDingRuTask selectSysDingRuTaskById(String id) + { + SysDingRuTask sysDingRuTask = sysDingRuTaskMapper.selectSysDingRuTaskById(id); + if(StringUtils.isNotNull(sysDingRuTask)&&StringUtils.isNotNull(sysDingRuTask.getProcInstId())){ + SysDingProcinst sysDingProcinst = sysDingProcinstMapper.selectSysDingProcinstByProcInstId(sysDingRuTask.getProcInstId()); + sysDingRuTask.setSysDingProcinst(sysDingProcinst); + } + + return sysDingRuTask; + } + + /** + * 查询钉钉运行任务列表 + * + * @param sysDingRuTask 钉钉运行任务 + * @return 钉钉运行任务 + */ + @Override + public List selectSysDingRuTaskList(SysDingRuTask sysDingRuTask) + { + List sysDingRuTaskList=sysDingRuTaskMapper.selectSysDingRuTaskList(sysDingRuTask); + sysDingRuTaskList.parallelStream().forEach(t->{ + if(StringUtils.isNotNull(t.getProcInstId())){ + SysDingProcinst sysDingProcinst = sysDingProcinstMapper.selectSysDingProcinstByProcInstId(t.getProcInstId()); + Optional.ofNullable(sysDingProcinst).ifPresent(s->{ + SysUser sysUser = sysUserMapper.selectUserByDingUserId(sysDingProcinst.getStartUserId()); + sysDingProcinst.setStartUserName(sysUser.getUserName()); + }); + + t.setSysDingProcinst(sysDingProcinst); + } + + }); + return sysDingRuTaskList; + } + + /** + * 新增钉钉运行任务 + * + * @param sysDingRuTask 钉钉运行任务 + * @return 结果 + */ + @Override + public int insertSysDingRuTask(SysDingRuTask sysDingRuTask) + { + return sysDingRuTaskMapper.insertSysDingRuTask(sysDingRuTask); + } + + /** + * 修改钉钉运行任务 + * + * @param sysDingRuTask 钉钉运行任务 + * @return 结果 + */ + @Override + public int updateSysDingRuTask(SysDingRuTask sysDingRuTask) + { + return sysDingRuTaskMapper.updateSysDingRuTask(sysDingRuTask); + } + + /** + * 删除钉钉运行任务对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteSysDingRuTaskByIds(String ids) + { + return sysDingRuTaskMapper.deleteSysDingRuTaskByIds(Convert.toStrArray(ids)); + } + + /** + * 删除钉钉运行任务信息 + * + * @param id 钉钉运行任务ID + * @return 结果 + */ + @Override + public int deleteSysDingRuTaskById(String id) + { + return sysDingRuTaskMapper.deleteSysDingRuTaskById(id); + } +} diff --git a/snow-system/src/main/java/com/snow/system/service/impl/SysUserServiceImpl.java b/snow-system/src/main/java/com/snow/system/service/impl/SysUserServiceImpl.java index 3eef299..96ad416 100644 --- a/snow-system/src/main/java/com/snow/system/service/impl/SysUserServiceImpl.java +++ b/snow-system/src/main/java/com/snow/system/service/impl/SysUserServiceImpl.java @@ -154,6 +154,11 @@ public class SysUserServiceImpl implements ISysUserService return userMapper.selectUserById(userId); } + @Override + public SysUser selectUserByDingUserId(String dingUserId) { + return userMapper.selectUserByDingUserId(dingUserId); + } + /** * 通过用户ID查询用户和角色关联 * diff --git a/snow-system/src/main/resources/mapper/system/SysDingHiTaskMapper.xml b/snow-system/src/main/resources/mapper/system/SysDingHiTaskMapper.xml new file mode 100644 index 0000000..e9e699f --- /dev/null +++ b/snow-system/src/main/resources/mapper/system/SysDingHiTaskMapper.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + select ID_, TASK_ID_, REV_, PROC_INST_ID_, PROC_CODE_, ACTIVITY_ID_, NAME_, PARENT_TASK_ID_, TASK_RESULT_, TASK_STATE, DESCRIPTION_, TASK_DEF_KEY_, ASSIGNEE_, CREATE_TIME_, FINISH_TIME_, CATEGORY_, SUSPENSION_STATE_, TENANT_ID_, FORM_KEY_ from sys_ding_hi_task + + + + + + + + insert into sys_ding_hi_task + + ID_, + TASK_ID_, + REV_, + PROC_INST_ID_, + PROC_CODE_, + ACTIVITY_ID_, + NAME_, + PARENT_TASK_ID_, + TASK_RESULT_, + TASK_STATE, + DESCRIPTION_, + TASK_DEF_KEY_, + ASSIGNEE_, + CREATE_TIME_, + FINISH_TIME_, + CATEGORY_, + SUSPENSION_STATE_, + TENANT_ID_, + FORM_KEY_, + + + #{id}, + #{taskId}, + #{rev}, + #{procInstId}, + #{procCode}, + #{activityId}, + #{name}, + #{parentTaskId}, + #{taskResult}, + #{taskState}, + #{description}, + #{taskDefKey}, + #{assignee}, + #{createTime}, + #{finishTime}, + #{category}, + #{suspensionState}, + #{tenantId}, + #{formKey}, + + + + + update sys_ding_hi_task + + TASK_ID_ = #{taskId}, + REV_ = #{rev}, + PROC_INST_ID_ = #{procInstId}, + PROC_CODE_ = #{procCode}, + ACTIVITY_ID_ = #{activityId}, + NAME_ = #{name}, + PARENT_TASK_ID_ = #{parentTaskId}, + TASK_RESULT_ = #{taskResult}, + TASK_STATE = #{taskState}, + DESCRIPTION_ = #{description}, + TASK_DEF_KEY_ = #{taskDefKey}, + ASSIGNEE_ = #{assignee}, + CREATE_TIME_ = #{createTime}, + FINISH_TIME_ = #{finishTime}, + CATEGORY_ = #{category}, + SUSPENSION_STATE_ = #{suspensionState}, + TENANT_ID_ = #{tenantId}, + FORM_KEY_ = #{formKey}, + + where ID_ = #{id} + + + + delete from sys_ding_hi_task where ID_ = #{id} + + + + delete from sys_ding_hi_task where ID_ in + + #{id} + + + + \ No newline at end of file diff --git a/snow-system/src/main/resources/mapper/system/SysDingProcinstMapper.xml b/snow-system/src/main/resources/mapper/system/SysDingProcinstMapper.xml new file mode 100644 index 0000000..f2633a2 --- /dev/null +++ b/snow-system/src/main/resources/mapper/system/SysDingProcinstMapper.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select ID_, REV_, PROC_INST_ID_, BUSINESS_KEY_, START_USER_ID_,CORP_ID_, START_TIME_, FINISH_TIME_, EVENT_TYPE_, TYPE_, TITLE_, PROC_CODE, TENANT_ID_, NAME_, DING_URL, PROC_RESULT_ from sys_ding_procinst + + + + + + + + + insert into sys_ding_procinst + + REV_, + PROC_INST_ID_, + BUSINESS_KEY_, + CORP_ID_, + START_TIME_, + FINISH_TIME_, + EVENT_TYPE_, + TYPE_, + TITLE_, + PROC_CODE, + TENANT_ID_, + NAME_, + DING_URL, + PROC_RESULT_, + START_USER_ID_, + + + #{rev}, + #{procInstId}, + #{businessKey}, + #{corpId}, + #{startTime}, + #{finishTime}, + #{eventType}, + #{type}, + #{title}, + #{procCode}, + #{tenantId}, + #{name}, + #{dingUrl}, + #{procResult}, + #{startUserId}, + + + + + update sys_ding_procinst + + REV_ = #{rev}, + PROC_INST_ID_ = #{procInstId}, + BUSINESS_KEY_ = #{businessKey}, + CORP_ID_ = #{corpId}, + START_TIME_ = #{startTime}, + FINISH_TIME_ = #{finishTime}, + EVENT_TYPE_ = #{eventType}, + TYPE_ = #{type}, + TITLE_ = #{title}, + PROC_CODE = #{procCode}, + TENANT_ID_ = #{tenantId}, + NAME_ = #{name}, + DING_URL = #{dingUrl}, + PROC_RESULT_ = #{procResult}, + START_USER_ID_ = #{startUserId}, + + where ID_ = #{id} + + + + delete from sys_ding_procinst where ID_ = #{id} + + + + delete from sys_ding_procinst where ID_ in + + #{id} + + + + \ No newline at end of file diff --git a/snow-system/src/main/resources/mapper/system/SysDingRuTaskMapper.xml b/snow-system/src/main/resources/mapper/system/SysDingRuTaskMapper.xml new file mode 100644 index 0000000..786bd13 --- /dev/null +++ b/snow-system/src/main/resources/mapper/system/SysDingRuTaskMapper.xml @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select ID_, REV_, PROC_INST_ID_, PROC_CODE_, ACTIVITY_ID_, NAME_, PARENT_TASK_ID_, DESCRIPTION_, TASK_DEF_KEY_, ASSIGNEE_, CREATE_TIME_, FINISH_TIME_, TASK_STATE, CATEGORY_, SUSPENSION_STATE_, TENANT_ID_, FORM_KEY_ from sys_ding_ru_task + + + + + + + + insert into sys_ding_ru_task + + ID_, + REV_, + PROC_INST_ID_, + PROC_CODE_, + ACTIVITY_ID_, + NAME_, + PARENT_TASK_ID_, + DESCRIPTION_, + TASK_DEF_KEY_, + ASSIGNEE_, + CREATE_TIME_, + FINISH_TIME_, + TASK_STATE, + CATEGORY_, + SUSPENSION_STATE_, + TENANT_ID_, + FORM_KEY_, + + + #{id}, + #{rev}, + #{procInstId}, + #{procCode}, + #{activityId}, + #{name}, + #{parentTaskId}, + #{description}, + #{taskDefKey}, + #{assignee}, + #{createTime}, + #{finishTime}, + #{taskState}, + #{category}, + #{suspensionState}, + #{tenantId}, + #{formKey}, + + + + + update sys_ding_ru_task + + REV_ = REV_+1, + PROC_INST_ID_ = #{procInstId}, + PROC_CODE_ = #{procCode}, + ACTIVITY_ID_ = #{activityId}, + NAME_ = #{name}, + PARENT_TASK_ID_ = #{parentTaskId}, + DESCRIPTION_ = #{description}, + TASK_DEF_KEY_ = #{taskDefKey}, + ASSIGNEE_ = #{assignee}, + CREATE_TIME_ = #{createTime}, + FINISH_TIME_ = #{finishTime}, + TASK_STATE = #{taskState}, + CATEGORY_ = #{category}, + SUSPENSION_STATE_ = #{suspensionState}, + TENANT_ID_ = #{tenantId}, + FORM_KEY_ = #{formKey}, + + where ID_ = #{id} + + + + delete from sys_ding_ru_task where ID_ = #{id} + + + + delete from sys_ding_ru_task where ID_ in + + #{id} + + + + \ No newline at end of file diff --git a/snow-system/src/main/resources/mapper/system/SysUserMapper.xml b/snow-system/src/main/resources/mapper/system/SysUserMapper.xml index b4134b4..7b186ec 100644 --- a/snow-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/snow-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -187,6 +187,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where u.user_id = #{userId} + + update sys_user set del_flag = '2' where user_id = #{userId}