diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java new file mode 100644 index 0000000..32f67c9 --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller.workbench; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 审批通过通知消息 前端控制器 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@RestController +@RequestMapping("/workbench/approvalMessage") +public class WorkbenchApprovalMessageController { + +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java new file mode 100644 index 0000000..32f67c9 --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller.workbench; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 审批通过通知消息 前端控制器 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@RestController +@RequestMapping("/workbench/approvalMessage") +public class WorkbenchApprovalMessageController { + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index 0374632..1542cb6 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -120,4 +120,4 @@ #作者 author: wangpeng #待生成对象表名 - table-name: workbench_message + table-name: workbench_approval_message diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java new file mode 100644 index 0000000..32f67c9 --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller.workbench; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 审批通过通知消息 前端控制器 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@RestController +@RequestMapping("/workbench/approvalMessage") +public class WorkbenchApprovalMessageController { + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index 0374632..1542cb6 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -120,4 +120,4 @@ #作者 author: wangpeng #待生成对象表名 - table-name: workbench_message + table-name: workbench_approval_message diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 02da89a..76c1ee7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -56,8 +56,8 @@ COMPLETE_SAMPLE_NOT_EXIST(2411, "检测中不存在扫描收入的样品"), CANNOT_CHANGE_MEASURE_INFO(2412, "无法更改非当前登录用户的检测信息"), NON_EXIST_ORDER_OR_SAMPLE(2413, "不存在该委托单或该委托单下的样品"), - AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"); - + AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"), + LOGIN_USER_NOT_STAFF(2415, "登录用户非计量人员"); private Integer code; private String message; diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java new file mode 100644 index 0000000..32f67c9 --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller.workbench; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 审批通过通知消息 前端控制器 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@RestController +@RequestMapping("/workbench/approvalMessage") +public class WorkbenchApprovalMessageController { + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index 0374632..1542cb6 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -120,4 +120,4 @@ #作者 author: wangpeng #待生成对象表名 - table-name: workbench_message + table-name: workbench_approval_message diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 02da89a..76c1ee7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -56,8 +56,8 @@ COMPLETE_SAMPLE_NOT_EXIST(2411, "检测中不存在扫描收入的样品"), CANNOT_CHANGE_MEASURE_INFO(2412, "无法更改非当前登录用户的检测信息"), NON_EXIST_ORDER_OR_SAMPLE(2413, "不存在该委托单或该委托单下的样品"), - AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"); - + AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"), + LOGIN_USER_NOT_STAFF(2415, "登录用户非计量人员"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java index 26a4e2c..e63ac86 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java @@ -2,6 +2,7 @@ import com.alibaba.excel.util.DateUtils; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.enums.ApplyFromIdEnum; @@ -16,12 +17,17 @@ import com.casic.missiles.mapper.equipment.EquipmentStateChangeLogMapper; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.business.BusinessCertificateReport; +import com.casic.missiles.mapper.workbench.WorkbenchApprovalMessageMapper; import com.casic.missiles.model.equipment.EquipmentApply; import com.casic.missiles.model.equipment.EquipmentApplyEquipment; import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.equipment.EquipmentStateChangeLog; import com.casic.missiles.model.system.SystemFlowForm; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; +import com.casic.missiles.modular.system.dao.UserMapper; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.utils.SpringContextUtil; +import com.casic.missiles.utils.WebSocket; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.RepositoryService; import org.flowable.engine.delegate.DelegateExecution; @@ -29,7 +35,6 @@ import org.flowable.engine.repository.ProcessDefinition; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.ObjectUtils; import java.util.Date; import java.util.List; @@ -41,6 +46,7 @@ public class ProcessUpdateStateListener implements ExecutionListener { @Override + @Transactional public void notify(DelegateExecution execution) { RepositoryService repositoryService = SpringContextUtil.getBean(RepositoryService.class); SystemFlowFormMapper flowFormMapper = SpringContextUtil.getBean(SystemFlowFormMapper.class); @@ -90,6 +96,9 @@ updateCertificateState(Long.valueOf(id)); break; } + + //审批通过,通知发起人 + sendMessageAndSocket(execution, systemFlowForm); } private void updateEquipmentApplyState(String id, String state) { @@ -118,41 +127,73 @@ UpdateWrapper logUpdateWrapper = new UpdateWrapper<>(); // 修改状态变更记录结束时间 logUpdateWrapper.in("equipment_id", equipmentIds).isNull("end_date").set("end_date", DateUtils.format(new Date())); - stateChangeLogMapper.update(null, logUpdateWrapper); + if (stateChangeLogMapper.update(null, logUpdateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + ; // 获取当前申请的信息 EquipmentApply equipmentApply = equipmentApplyMapper.selectById(id); // 新增状态变更记录 for (EquipmentApplyEquipment equipment : equipmentApplyEquipments) { EquipmentStateChangeLog stateChangeLog = new EquipmentStateChangeLog(Long.parseLong(id), Long.parseLong(equipment.getEquipmentId()), state, DateUtils.format(new Date()), null, Long.parseLong(equipmentApply.getApplyPerson())); - stateChangeLogMapper.insert(stateChangeLog); + if (stateChangeLogMapper.insert(stateChangeLog) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } } - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + } else { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } - private void updateStandardState (String id, String state){ - MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.in("id", id).set("manager_state", state); - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateStandardState(String id, String state) { + MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", id).set("manager_state", state); + if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } - private void updateCertificateState (Long id){ - Assert.isFalse(Objects.isNull(id), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); - BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); - BusinessCertificateReport certificateReport = new BusinessCertificateReport(); - certificateReport.setId(id); - certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 - certificateReport.setPrintStatus("1"); //打印状态可打印 - int row = certificateReportMapper.updateById(certificateReport); - if (row <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateCertificateState(Long id) { + Assert.isFalse(Objects.isNull(id), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); + BusinessCertificateReport certificateReport = new BusinessCertificateReport(); + certificateReport.setId(id); + certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 + certificateReport.setPrintStatus("1"); //打印状态可打印 + int row = certificateReportMapper.updateById(certificateReport); + if (row <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } + + private void sendMessageAndSocket(DelegateExecution execution, SystemFlowForm systemFlowForm) { + JSONObject jsonObject = JSONObject.parseObject(systemFlowForm.getFlowDef()); + JSONObject workFlowDef = jsonObject.getJSONObject("workFlowDef"); + Integer noticeStarter = workFlowDef.getInteger("noticeStarter"); + if (1 == noticeStarter) { + Long rootId = Long.valueOf(String.valueOf(execution.getVariable("root"))); + String formName = workFlowDef.getString("formName"); + String formId = systemFlowForm.getFormId(); + //总工作台中需要展示所有业务的用户待审批的列表(查询每个业务的待审批进行组合) + //每个业务和前端定一个type(用formId即可,前提要保证流程定义和formId为一对一关系),用于前端页面跳转 + WorkbenchApprovalMessageMapper approvalMessageMapper = SpringContextUtil.getBean(WorkbenchApprovalMessageMapper.class); + UserMapper userMapper = SpringContextUtil.getBean(UserMapper.class); + User user = userMapper.selectById(rootId); + WorkbenchApprovalMessage approvalMessage = new WorkbenchApprovalMessage(); + approvalMessage.setNoticeId(rootId); + approvalMessage.setNoticeDeptId(user.getDeptId()); + approvalMessage.setMessageTitle(null); + approvalMessage.setMessageContent(formName); + approvalMessage.setFormId(formId); + if (approvalMessageMapper.insert(approvalMessage) < 0) { + log.error("审批通过,通知发起人失败,approvalMessage:{}", approvalMessage.toString()); + } + //websocket消息推送 + WebSocket webSocket = SpringContextUtil.getBean(WebSocket.class); + webSocket.sendOneMessage(String.valueOf(rootId), JSONObject.toJSONString(approvalMessage)); + } + } } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java new file mode 100644 index 0000000..32f67c9 --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller.workbench; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 审批通过通知消息 前端控制器 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@RestController +@RequestMapping("/workbench/approvalMessage") +public class WorkbenchApprovalMessageController { + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index 0374632..1542cb6 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -120,4 +120,4 @@ #作者 author: wangpeng #待生成对象表名 - table-name: workbench_message + table-name: workbench_approval_message diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 02da89a..76c1ee7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -56,8 +56,8 @@ COMPLETE_SAMPLE_NOT_EXIST(2411, "检测中不存在扫描收入的样品"), CANNOT_CHANGE_MEASURE_INFO(2412, "无法更改非当前登录用户的检测信息"), NON_EXIST_ORDER_OR_SAMPLE(2413, "不存在该委托单或该委托单下的样品"), - AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"); - + AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"), + LOGIN_USER_NOT_STAFF(2415, "登录用户非计量人员"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java index 26a4e2c..e63ac86 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java @@ -2,6 +2,7 @@ import com.alibaba.excel.util.DateUtils; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.enums.ApplyFromIdEnum; @@ -16,12 +17,17 @@ import com.casic.missiles.mapper.equipment.EquipmentStateChangeLogMapper; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.business.BusinessCertificateReport; +import com.casic.missiles.mapper.workbench.WorkbenchApprovalMessageMapper; import com.casic.missiles.model.equipment.EquipmentApply; import com.casic.missiles.model.equipment.EquipmentApplyEquipment; import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.equipment.EquipmentStateChangeLog; import com.casic.missiles.model.system.SystemFlowForm; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; +import com.casic.missiles.modular.system.dao.UserMapper; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.utils.SpringContextUtil; +import com.casic.missiles.utils.WebSocket; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.RepositoryService; import org.flowable.engine.delegate.DelegateExecution; @@ -29,7 +35,6 @@ import org.flowable.engine.repository.ProcessDefinition; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.ObjectUtils; import java.util.Date; import java.util.List; @@ -41,6 +46,7 @@ public class ProcessUpdateStateListener implements ExecutionListener { @Override + @Transactional public void notify(DelegateExecution execution) { RepositoryService repositoryService = SpringContextUtil.getBean(RepositoryService.class); SystemFlowFormMapper flowFormMapper = SpringContextUtil.getBean(SystemFlowFormMapper.class); @@ -90,6 +96,9 @@ updateCertificateState(Long.valueOf(id)); break; } + + //审批通过,通知发起人 + sendMessageAndSocket(execution, systemFlowForm); } private void updateEquipmentApplyState(String id, String state) { @@ -118,41 +127,73 @@ UpdateWrapper logUpdateWrapper = new UpdateWrapper<>(); // 修改状态变更记录结束时间 logUpdateWrapper.in("equipment_id", equipmentIds).isNull("end_date").set("end_date", DateUtils.format(new Date())); - stateChangeLogMapper.update(null, logUpdateWrapper); + if (stateChangeLogMapper.update(null, logUpdateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + ; // 获取当前申请的信息 EquipmentApply equipmentApply = equipmentApplyMapper.selectById(id); // 新增状态变更记录 for (EquipmentApplyEquipment equipment : equipmentApplyEquipments) { EquipmentStateChangeLog stateChangeLog = new EquipmentStateChangeLog(Long.parseLong(id), Long.parseLong(equipment.getEquipmentId()), state, DateUtils.format(new Date()), null, Long.parseLong(equipmentApply.getApplyPerson())); - stateChangeLogMapper.insert(stateChangeLog); + if (stateChangeLogMapper.insert(stateChangeLog) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } } - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + } else { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } - private void updateStandardState (String id, String state){ - MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.in("id", id).set("manager_state", state); - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateStandardState(String id, String state) { + MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", id).set("manager_state", state); + if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } - private void updateCertificateState (Long id){ - Assert.isFalse(Objects.isNull(id), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); - BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); - BusinessCertificateReport certificateReport = new BusinessCertificateReport(); - certificateReport.setId(id); - certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 - certificateReport.setPrintStatus("1"); //打印状态可打印 - int row = certificateReportMapper.updateById(certificateReport); - if (row <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateCertificateState(Long id) { + Assert.isFalse(Objects.isNull(id), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); + BusinessCertificateReport certificateReport = new BusinessCertificateReport(); + certificateReport.setId(id); + certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 + certificateReport.setPrintStatus("1"); //打印状态可打印 + int row = certificateReportMapper.updateById(certificateReport); + if (row <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } + + private void sendMessageAndSocket(DelegateExecution execution, SystemFlowForm systemFlowForm) { + JSONObject jsonObject = JSONObject.parseObject(systemFlowForm.getFlowDef()); + JSONObject workFlowDef = jsonObject.getJSONObject("workFlowDef"); + Integer noticeStarter = workFlowDef.getInteger("noticeStarter"); + if (1 == noticeStarter) { + Long rootId = Long.valueOf(String.valueOf(execution.getVariable("root"))); + String formName = workFlowDef.getString("formName"); + String formId = systemFlowForm.getFormId(); + //总工作台中需要展示所有业务的用户待审批的列表(查询每个业务的待审批进行组合) + //每个业务和前端定一个type(用formId即可,前提要保证流程定义和formId为一对一关系),用于前端页面跳转 + WorkbenchApprovalMessageMapper approvalMessageMapper = SpringContextUtil.getBean(WorkbenchApprovalMessageMapper.class); + UserMapper userMapper = SpringContextUtil.getBean(UserMapper.class); + User user = userMapper.selectById(rootId); + WorkbenchApprovalMessage approvalMessage = new WorkbenchApprovalMessage(); + approvalMessage.setNoticeId(rootId); + approvalMessage.setNoticeDeptId(user.getDeptId()); + approvalMessage.setMessageTitle(null); + approvalMessage.setMessageContent(formName); + approvalMessage.setFormId(formId); + if (approvalMessageMapper.insert(approvalMessage) < 0) { + log.error("审批通过,通知发起人失败,approvalMessage:{}", approvalMessage.toString()); + } + //websocket消息推送 + WebSocket webSocket = SpringContextUtil.getBean(WebSocket.class); + webSocket.sendOneMessage(String.valueOf(rootId), JSONObject.toJSONString(approvalMessage)); + } + } } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java new file mode 100644 index 0000000..dc6fc8b --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.workbench; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; + +/** + *

+ * 审批通过通知消息 Mapper 接口 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +public interface WorkbenchApprovalMessageMapper extends BaseMapper { + +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java new file mode 100644 index 0000000..32f67c9 --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller.workbench; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 审批通过通知消息 前端控制器 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@RestController +@RequestMapping("/workbench/approvalMessage") +public class WorkbenchApprovalMessageController { + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index 0374632..1542cb6 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -120,4 +120,4 @@ #作者 author: wangpeng #待生成对象表名 - table-name: workbench_message + table-name: workbench_approval_message diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 02da89a..76c1ee7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -56,8 +56,8 @@ COMPLETE_SAMPLE_NOT_EXIST(2411, "检测中不存在扫描收入的样品"), CANNOT_CHANGE_MEASURE_INFO(2412, "无法更改非当前登录用户的检测信息"), NON_EXIST_ORDER_OR_SAMPLE(2413, "不存在该委托单或该委托单下的样品"), - AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"); - + AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"), + LOGIN_USER_NOT_STAFF(2415, "登录用户非计量人员"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java index 26a4e2c..e63ac86 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java @@ -2,6 +2,7 @@ import com.alibaba.excel.util.DateUtils; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.enums.ApplyFromIdEnum; @@ -16,12 +17,17 @@ import com.casic.missiles.mapper.equipment.EquipmentStateChangeLogMapper; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.business.BusinessCertificateReport; +import com.casic.missiles.mapper.workbench.WorkbenchApprovalMessageMapper; import com.casic.missiles.model.equipment.EquipmentApply; import com.casic.missiles.model.equipment.EquipmentApplyEquipment; import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.equipment.EquipmentStateChangeLog; import com.casic.missiles.model.system.SystemFlowForm; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; +import com.casic.missiles.modular.system.dao.UserMapper; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.utils.SpringContextUtil; +import com.casic.missiles.utils.WebSocket; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.RepositoryService; import org.flowable.engine.delegate.DelegateExecution; @@ -29,7 +35,6 @@ import org.flowable.engine.repository.ProcessDefinition; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.ObjectUtils; import java.util.Date; import java.util.List; @@ -41,6 +46,7 @@ public class ProcessUpdateStateListener implements ExecutionListener { @Override + @Transactional public void notify(DelegateExecution execution) { RepositoryService repositoryService = SpringContextUtil.getBean(RepositoryService.class); SystemFlowFormMapper flowFormMapper = SpringContextUtil.getBean(SystemFlowFormMapper.class); @@ -90,6 +96,9 @@ updateCertificateState(Long.valueOf(id)); break; } + + //审批通过,通知发起人 + sendMessageAndSocket(execution, systemFlowForm); } private void updateEquipmentApplyState(String id, String state) { @@ -118,41 +127,73 @@ UpdateWrapper logUpdateWrapper = new UpdateWrapper<>(); // 修改状态变更记录结束时间 logUpdateWrapper.in("equipment_id", equipmentIds).isNull("end_date").set("end_date", DateUtils.format(new Date())); - stateChangeLogMapper.update(null, logUpdateWrapper); + if (stateChangeLogMapper.update(null, logUpdateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + ; // 获取当前申请的信息 EquipmentApply equipmentApply = equipmentApplyMapper.selectById(id); // 新增状态变更记录 for (EquipmentApplyEquipment equipment : equipmentApplyEquipments) { EquipmentStateChangeLog stateChangeLog = new EquipmentStateChangeLog(Long.parseLong(id), Long.parseLong(equipment.getEquipmentId()), state, DateUtils.format(new Date()), null, Long.parseLong(equipmentApply.getApplyPerson())); - stateChangeLogMapper.insert(stateChangeLog); + if (stateChangeLogMapper.insert(stateChangeLog) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } } - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + } else { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } - private void updateStandardState (String id, String state){ - MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.in("id", id).set("manager_state", state); - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateStandardState(String id, String state) { + MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", id).set("manager_state", state); + if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } - private void updateCertificateState (Long id){ - Assert.isFalse(Objects.isNull(id), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); - BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); - BusinessCertificateReport certificateReport = new BusinessCertificateReport(); - certificateReport.setId(id); - certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 - certificateReport.setPrintStatus("1"); //打印状态可打印 - int row = certificateReportMapper.updateById(certificateReport); - if (row <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateCertificateState(Long id) { + Assert.isFalse(Objects.isNull(id), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); + BusinessCertificateReport certificateReport = new BusinessCertificateReport(); + certificateReport.setId(id); + certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 + certificateReport.setPrintStatus("1"); //打印状态可打印 + int row = certificateReportMapper.updateById(certificateReport); + if (row <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } + + private void sendMessageAndSocket(DelegateExecution execution, SystemFlowForm systemFlowForm) { + JSONObject jsonObject = JSONObject.parseObject(systemFlowForm.getFlowDef()); + JSONObject workFlowDef = jsonObject.getJSONObject("workFlowDef"); + Integer noticeStarter = workFlowDef.getInteger("noticeStarter"); + if (1 == noticeStarter) { + Long rootId = Long.valueOf(String.valueOf(execution.getVariable("root"))); + String formName = workFlowDef.getString("formName"); + String formId = systemFlowForm.getFormId(); + //总工作台中需要展示所有业务的用户待审批的列表(查询每个业务的待审批进行组合) + //每个业务和前端定一个type(用formId即可,前提要保证流程定义和formId为一对一关系),用于前端页面跳转 + WorkbenchApprovalMessageMapper approvalMessageMapper = SpringContextUtil.getBean(WorkbenchApprovalMessageMapper.class); + UserMapper userMapper = SpringContextUtil.getBean(UserMapper.class); + User user = userMapper.selectById(rootId); + WorkbenchApprovalMessage approvalMessage = new WorkbenchApprovalMessage(); + approvalMessage.setNoticeId(rootId); + approvalMessage.setNoticeDeptId(user.getDeptId()); + approvalMessage.setMessageTitle(null); + approvalMessage.setMessageContent(formName); + approvalMessage.setFormId(formId); + if (approvalMessageMapper.insert(approvalMessage) < 0) { + log.error("审批通过,通知发起人失败,approvalMessage:{}", approvalMessage.toString()); + } + //websocket消息推送 + WebSocket webSocket = SpringContextUtil.getBean(WebSocket.class); + webSocket.sendOneMessage(String.valueOf(rootId), JSONObject.toJSONString(approvalMessage)); + } + } } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java new file mode 100644 index 0000000..dc6fc8b --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.workbench; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; + +/** + *

+ * 审批通过通知消息 Mapper 接口 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +public interface WorkbenchApprovalMessageMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml new file mode 100644 index 0000000..a31eede --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, notice_id, notice_dept_id, message_title, message_content, form_id, status, create_time, update_time + + + diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java new file mode 100644 index 0000000..32f67c9 --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller.workbench; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 审批通过通知消息 前端控制器 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@RestController +@RequestMapping("/workbench/approvalMessage") +public class WorkbenchApprovalMessageController { + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index 0374632..1542cb6 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -120,4 +120,4 @@ #作者 author: wangpeng #待生成对象表名 - table-name: workbench_message + table-name: workbench_approval_message diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 02da89a..76c1ee7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -56,8 +56,8 @@ COMPLETE_SAMPLE_NOT_EXIST(2411, "检测中不存在扫描收入的样品"), CANNOT_CHANGE_MEASURE_INFO(2412, "无法更改非当前登录用户的检测信息"), NON_EXIST_ORDER_OR_SAMPLE(2413, "不存在该委托单或该委托单下的样品"), - AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"); - + AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"), + LOGIN_USER_NOT_STAFF(2415, "登录用户非计量人员"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java index 26a4e2c..e63ac86 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java @@ -2,6 +2,7 @@ import com.alibaba.excel.util.DateUtils; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.enums.ApplyFromIdEnum; @@ -16,12 +17,17 @@ import com.casic.missiles.mapper.equipment.EquipmentStateChangeLogMapper; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.business.BusinessCertificateReport; +import com.casic.missiles.mapper.workbench.WorkbenchApprovalMessageMapper; import com.casic.missiles.model.equipment.EquipmentApply; import com.casic.missiles.model.equipment.EquipmentApplyEquipment; import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.equipment.EquipmentStateChangeLog; import com.casic.missiles.model.system.SystemFlowForm; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; +import com.casic.missiles.modular.system.dao.UserMapper; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.utils.SpringContextUtil; +import com.casic.missiles.utils.WebSocket; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.RepositoryService; import org.flowable.engine.delegate.DelegateExecution; @@ -29,7 +35,6 @@ import org.flowable.engine.repository.ProcessDefinition; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.ObjectUtils; import java.util.Date; import java.util.List; @@ -41,6 +46,7 @@ public class ProcessUpdateStateListener implements ExecutionListener { @Override + @Transactional public void notify(DelegateExecution execution) { RepositoryService repositoryService = SpringContextUtil.getBean(RepositoryService.class); SystemFlowFormMapper flowFormMapper = SpringContextUtil.getBean(SystemFlowFormMapper.class); @@ -90,6 +96,9 @@ updateCertificateState(Long.valueOf(id)); break; } + + //审批通过,通知发起人 + sendMessageAndSocket(execution, systemFlowForm); } private void updateEquipmentApplyState(String id, String state) { @@ -118,41 +127,73 @@ UpdateWrapper logUpdateWrapper = new UpdateWrapper<>(); // 修改状态变更记录结束时间 logUpdateWrapper.in("equipment_id", equipmentIds).isNull("end_date").set("end_date", DateUtils.format(new Date())); - stateChangeLogMapper.update(null, logUpdateWrapper); + if (stateChangeLogMapper.update(null, logUpdateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + ; // 获取当前申请的信息 EquipmentApply equipmentApply = equipmentApplyMapper.selectById(id); // 新增状态变更记录 for (EquipmentApplyEquipment equipment : equipmentApplyEquipments) { EquipmentStateChangeLog stateChangeLog = new EquipmentStateChangeLog(Long.parseLong(id), Long.parseLong(equipment.getEquipmentId()), state, DateUtils.format(new Date()), null, Long.parseLong(equipmentApply.getApplyPerson())); - stateChangeLogMapper.insert(stateChangeLog); + if (stateChangeLogMapper.insert(stateChangeLog) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } } - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + } else { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } - private void updateStandardState (String id, String state){ - MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.in("id", id).set("manager_state", state); - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateStandardState(String id, String state) { + MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", id).set("manager_state", state); + if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } - private void updateCertificateState (Long id){ - Assert.isFalse(Objects.isNull(id), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); - BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); - BusinessCertificateReport certificateReport = new BusinessCertificateReport(); - certificateReport.setId(id); - certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 - certificateReport.setPrintStatus("1"); //打印状态可打印 - int row = certificateReportMapper.updateById(certificateReport); - if (row <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateCertificateState(Long id) { + Assert.isFalse(Objects.isNull(id), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); + BusinessCertificateReport certificateReport = new BusinessCertificateReport(); + certificateReport.setId(id); + certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 + certificateReport.setPrintStatus("1"); //打印状态可打印 + int row = certificateReportMapper.updateById(certificateReport); + if (row <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } + + private void sendMessageAndSocket(DelegateExecution execution, SystemFlowForm systemFlowForm) { + JSONObject jsonObject = JSONObject.parseObject(systemFlowForm.getFlowDef()); + JSONObject workFlowDef = jsonObject.getJSONObject("workFlowDef"); + Integer noticeStarter = workFlowDef.getInteger("noticeStarter"); + if (1 == noticeStarter) { + Long rootId = Long.valueOf(String.valueOf(execution.getVariable("root"))); + String formName = workFlowDef.getString("formName"); + String formId = systemFlowForm.getFormId(); + //总工作台中需要展示所有业务的用户待审批的列表(查询每个业务的待审批进行组合) + //每个业务和前端定一个type(用formId即可,前提要保证流程定义和formId为一对一关系),用于前端页面跳转 + WorkbenchApprovalMessageMapper approvalMessageMapper = SpringContextUtil.getBean(WorkbenchApprovalMessageMapper.class); + UserMapper userMapper = SpringContextUtil.getBean(UserMapper.class); + User user = userMapper.selectById(rootId); + WorkbenchApprovalMessage approvalMessage = new WorkbenchApprovalMessage(); + approvalMessage.setNoticeId(rootId); + approvalMessage.setNoticeDeptId(user.getDeptId()); + approvalMessage.setMessageTitle(null); + approvalMessage.setMessageContent(formName); + approvalMessage.setFormId(formId); + if (approvalMessageMapper.insert(approvalMessage) < 0) { + log.error("审批通过,通知发起人失败,approvalMessage:{}", approvalMessage.toString()); + } + //websocket消息推送 + WebSocket webSocket = SpringContextUtil.getBean(WebSocket.class); + webSocket.sendOneMessage(String.valueOf(rootId), JSONObject.toJSONString(approvalMessage)); + } + } } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java new file mode 100644 index 0000000..dc6fc8b --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.workbench; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; + +/** + *

+ * 审批通过通知消息 Mapper 接口 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +public interface WorkbenchApprovalMessageMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml new file mode 100644 index 0000000..a31eede --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, notice_id, notice_dept_id, message_title, message_content, form_id, status, create_time, update_time + + + diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/workbench/WorkbenchApprovalMessage.java b/casic-metering-model/src/main/java/com/casic/missiles/model/workbench/WorkbenchApprovalMessage.java new file mode 100644 index 0000000..452feeb --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/workbench/WorkbenchApprovalMessage.java @@ -0,0 +1,76 @@ +package com.casic.missiles.model.workbench; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 审批通过通知消息 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@Data +@TableName("workbench_approval_message") +public class WorkbenchApprovalMessage implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId("id") + private Long id; + + /** + * 通知的用户id + */ + @TableField("notice_id") + private Long noticeId; + + /** + * 通知的用户部门id + */ + @TableField("notice_dept_id") + private Long noticeDeptId; + + /** + * 消息主题(标题,冗余) + */ + @TableField("message_title") + private String messageTitle; + + /** + * 消息内容(表单名字) + */ + @TableField("message_content") + private String messageContent; + + /** + * 前端表单id(用于区分业务类型及页面跳转) + */ + @TableField("form_id") + private String formId; + + /** + * 1已读0未读 + */ + @TableField("status") + private Integer status; + + /** + * 创建时间 + */ + @TableField("create_time") + private String createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private String updateTime; + + +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java new file mode 100644 index 0000000..32f67c9 --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller.workbench; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 审批通过通知消息 前端控制器 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@RestController +@RequestMapping("/workbench/approvalMessage") +public class WorkbenchApprovalMessageController { + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index 0374632..1542cb6 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -120,4 +120,4 @@ #作者 author: wangpeng #待生成对象表名 - table-name: workbench_message + table-name: workbench_approval_message diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 02da89a..76c1ee7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -56,8 +56,8 @@ COMPLETE_SAMPLE_NOT_EXIST(2411, "检测中不存在扫描收入的样品"), CANNOT_CHANGE_MEASURE_INFO(2412, "无法更改非当前登录用户的检测信息"), NON_EXIST_ORDER_OR_SAMPLE(2413, "不存在该委托单或该委托单下的样品"), - AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"); - + AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"), + LOGIN_USER_NOT_STAFF(2415, "登录用户非计量人员"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java index 26a4e2c..e63ac86 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java @@ -2,6 +2,7 @@ import com.alibaba.excel.util.DateUtils; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.enums.ApplyFromIdEnum; @@ -16,12 +17,17 @@ import com.casic.missiles.mapper.equipment.EquipmentStateChangeLogMapper; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.business.BusinessCertificateReport; +import com.casic.missiles.mapper.workbench.WorkbenchApprovalMessageMapper; import com.casic.missiles.model.equipment.EquipmentApply; import com.casic.missiles.model.equipment.EquipmentApplyEquipment; import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.equipment.EquipmentStateChangeLog; import com.casic.missiles.model.system.SystemFlowForm; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; +import com.casic.missiles.modular.system.dao.UserMapper; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.utils.SpringContextUtil; +import com.casic.missiles.utils.WebSocket; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.RepositoryService; import org.flowable.engine.delegate.DelegateExecution; @@ -29,7 +35,6 @@ import org.flowable.engine.repository.ProcessDefinition; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.ObjectUtils; import java.util.Date; import java.util.List; @@ -41,6 +46,7 @@ public class ProcessUpdateStateListener implements ExecutionListener { @Override + @Transactional public void notify(DelegateExecution execution) { RepositoryService repositoryService = SpringContextUtil.getBean(RepositoryService.class); SystemFlowFormMapper flowFormMapper = SpringContextUtil.getBean(SystemFlowFormMapper.class); @@ -90,6 +96,9 @@ updateCertificateState(Long.valueOf(id)); break; } + + //审批通过,通知发起人 + sendMessageAndSocket(execution, systemFlowForm); } private void updateEquipmentApplyState(String id, String state) { @@ -118,41 +127,73 @@ UpdateWrapper logUpdateWrapper = new UpdateWrapper<>(); // 修改状态变更记录结束时间 logUpdateWrapper.in("equipment_id", equipmentIds).isNull("end_date").set("end_date", DateUtils.format(new Date())); - stateChangeLogMapper.update(null, logUpdateWrapper); + if (stateChangeLogMapper.update(null, logUpdateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + ; // 获取当前申请的信息 EquipmentApply equipmentApply = equipmentApplyMapper.selectById(id); // 新增状态变更记录 for (EquipmentApplyEquipment equipment : equipmentApplyEquipments) { EquipmentStateChangeLog stateChangeLog = new EquipmentStateChangeLog(Long.parseLong(id), Long.parseLong(equipment.getEquipmentId()), state, DateUtils.format(new Date()), null, Long.parseLong(equipmentApply.getApplyPerson())); - stateChangeLogMapper.insert(stateChangeLog); + if (stateChangeLogMapper.insert(stateChangeLog) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } } - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + } else { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } - private void updateStandardState (String id, String state){ - MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.in("id", id).set("manager_state", state); - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateStandardState(String id, String state) { + MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", id).set("manager_state", state); + if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } - private void updateCertificateState (Long id){ - Assert.isFalse(Objects.isNull(id), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); - BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); - BusinessCertificateReport certificateReport = new BusinessCertificateReport(); - certificateReport.setId(id); - certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 - certificateReport.setPrintStatus("1"); //打印状态可打印 - int row = certificateReportMapper.updateById(certificateReport); - if (row <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateCertificateState(Long id) { + Assert.isFalse(Objects.isNull(id), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); + BusinessCertificateReport certificateReport = new BusinessCertificateReport(); + certificateReport.setId(id); + certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 + certificateReport.setPrintStatus("1"); //打印状态可打印 + int row = certificateReportMapper.updateById(certificateReport); + if (row <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } + + private void sendMessageAndSocket(DelegateExecution execution, SystemFlowForm systemFlowForm) { + JSONObject jsonObject = JSONObject.parseObject(systemFlowForm.getFlowDef()); + JSONObject workFlowDef = jsonObject.getJSONObject("workFlowDef"); + Integer noticeStarter = workFlowDef.getInteger("noticeStarter"); + if (1 == noticeStarter) { + Long rootId = Long.valueOf(String.valueOf(execution.getVariable("root"))); + String formName = workFlowDef.getString("formName"); + String formId = systemFlowForm.getFormId(); + //总工作台中需要展示所有业务的用户待审批的列表(查询每个业务的待审批进行组合) + //每个业务和前端定一个type(用formId即可,前提要保证流程定义和formId为一对一关系),用于前端页面跳转 + WorkbenchApprovalMessageMapper approvalMessageMapper = SpringContextUtil.getBean(WorkbenchApprovalMessageMapper.class); + UserMapper userMapper = SpringContextUtil.getBean(UserMapper.class); + User user = userMapper.selectById(rootId); + WorkbenchApprovalMessage approvalMessage = new WorkbenchApprovalMessage(); + approvalMessage.setNoticeId(rootId); + approvalMessage.setNoticeDeptId(user.getDeptId()); + approvalMessage.setMessageTitle(null); + approvalMessage.setMessageContent(formName); + approvalMessage.setFormId(formId); + if (approvalMessageMapper.insert(approvalMessage) < 0) { + log.error("审批通过,通知发起人失败,approvalMessage:{}", approvalMessage.toString()); + } + //websocket消息推送 + WebSocket webSocket = SpringContextUtil.getBean(WebSocket.class); + webSocket.sendOneMessage(String.valueOf(rootId), JSONObject.toJSONString(approvalMessage)); + } + } } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java new file mode 100644 index 0000000..dc6fc8b --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.workbench; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; + +/** + *

+ * 审批通过通知消息 Mapper 接口 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +public interface WorkbenchApprovalMessageMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml new file mode 100644 index 0000000..a31eede --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, notice_id, notice_dept_id, message_title, message_content, form_id, status, create_time, update_time + + + diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/workbench/WorkbenchApprovalMessage.java b/casic-metering-model/src/main/java/com/casic/missiles/model/workbench/WorkbenchApprovalMessage.java new file mode 100644 index 0000000..452feeb --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/workbench/WorkbenchApprovalMessage.java @@ -0,0 +1,76 @@ +package com.casic.missiles.model.workbench; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 审批通过通知消息 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@Data +@TableName("workbench_approval_message") +public class WorkbenchApprovalMessage implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId("id") + private Long id; + + /** + * 通知的用户id + */ + @TableField("notice_id") + private Long noticeId; + + /** + * 通知的用户部门id + */ + @TableField("notice_dept_id") + private Long noticeDeptId; + + /** + * 消息主题(标题,冗余) + */ + @TableField("message_title") + private String messageTitle; + + /** + * 消息内容(表单名字) + */ + @TableField("message_content") + private String messageContent; + + /** + * 前端表单id(用于区分业务类型及页面跳转) + */ + @TableField("form_id") + private String formId; + + /** + * 1已读0未读 + */ + @TableField("status") + private Integer status; + + /** + * 创建时间 + */ + @TableField("create_time") + private String createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private String updateTime; + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java index cf5144b..3bd316c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java @@ -21,10 +21,12 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.business.*; import com.casic.missiles.mapper.meter.MeterOrganizeMapper; +import com.casic.missiles.mapper.meter.MeterStaffMapper; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.business.BusinessLabExecutiveInfo; import com.casic.missiles.model.business.BusinessLabExecutiveOperateLog; import com.casic.missiles.model.business.BusinessLabExecutiveTemplateInfo; +import com.casic.missiles.model.meter.MeterStaff; import com.casic.missiles.service.business.IBusinessLabExecutiveInfoService; import com.casic.missiles.service.business.IBusinessLabExecutiveTemplateInfoService; import com.casic.missiles.utils.ConvertUtils; @@ -67,6 +69,8 @@ private MeterOrganizeMapper organizeMapper; @Autowired private AbstractDictService dictService; + @Autowired + private MeterStaffMapper staffMapper; @Override public Page handOutListPage(Page page, SampleHandOutListRequest handOutListRequest) throws Exception{ @@ -277,7 +281,11 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - Long userId = user.getId(); + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + String measureStatus = labExecutiveListRequest.getMeasureStatus(); Page resultPage = new Page<>(); switch (measureStatus) { @@ -325,7 +333,11 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - Long userId = user.getId(); + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + //查询扫描样品中为该用户待检测中的样品列表 List preList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.TO_MEASURE); if(CollectionUtils.isEmpty(preList)){ @@ -346,7 +358,11 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - Long userId = user.getId(); + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + //查询扫描样品中为该用户检测中的样品列表 List preList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.IN_MEASURE); if(CollectionUtils.isEmpty(preList)){ @@ -453,7 +469,12 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - if(request.getMeasurePersonId() != user.getId()){ + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + + if(request.getMeasurePersonId() != userId){ throw new BusinessException(BusinessExceptionEnum.CANNOT_CHANGE_MEASURE_INFO); } BusinessLabExecutiveInfo executiveInfo = new BusinessLabExecutiveInfo(); @@ -489,7 +510,11 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - Long userId = user.getId(); + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + //删除实验室检测列表中退回数据 int deleteFlag = labExecutiveInfoMapper.deleteById(request.getId()); //退回操作记录表中增加数据 @@ -534,6 +559,13 @@ return wrapper; } + private MeterStaff getMeterStaffInfo(AuthUser user) { + String account = user.getAccount(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("account", account); + return staffMapper.selectOne(wrapper); + } + private HandOutLabExecutiveDTO getHandOutLabExecutiveDTO(Long orderId, Long sampleId) { List labExecutiveList = labExecutiveInfoMapper.selectListByInMeasureStatus(orderId, sampleId); if (CollectionUtils.isEmpty(labExecutiveList)) { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java new file mode 100644 index 0000000..32f67c9 --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller.workbench; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 审批通过通知消息 前端控制器 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@RestController +@RequestMapping("/workbench/approvalMessage") +public class WorkbenchApprovalMessageController { + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index 0374632..1542cb6 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -120,4 +120,4 @@ #作者 author: wangpeng #待生成对象表名 - table-name: workbench_message + table-name: workbench_approval_message diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 02da89a..76c1ee7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -56,8 +56,8 @@ COMPLETE_SAMPLE_NOT_EXIST(2411, "检测中不存在扫描收入的样品"), CANNOT_CHANGE_MEASURE_INFO(2412, "无法更改非当前登录用户的检测信息"), NON_EXIST_ORDER_OR_SAMPLE(2413, "不存在该委托单或该委托单下的样品"), - AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"); - + AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"), + LOGIN_USER_NOT_STAFF(2415, "登录用户非计量人员"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java index 26a4e2c..e63ac86 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java @@ -2,6 +2,7 @@ import com.alibaba.excel.util.DateUtils; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.enums.ApplyFromIdEnum; @@ -16,12 +17,17 @@ import com.casic.missiles.mapper.equipment.EquipmentStateChangeLogMapper; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.business.BusinessCertificateReport; +import com.casic.missiles.mapper.workbench.WorkbenchApprovalMessageMapper; import com.casic.missiles.model.equipment.EquipmentApply; import com.casic.missiles.model.equipment.EquipmentApplyEquipment; import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.equipment.EquipmentStateChangeLog; import com.casic.missiles.model.system.SystemFlowForm; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; +import com.casic.missiles.modular.system.dao.UserMapper; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.utils.SpringContextUtil; +import com.casic.missiles.utils.WebSocket; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.RepositoryService; import org.flowable.engine.delegate.DelegateExecution; @@ -29,7 +35,6 @@ import org.flowable.engine.repository.ProcessDefinition; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.ObjectUtils; import java.util.Date; import java.util.List; @@ -41,6 +46,7 @@ public class ProcessUpdateStateListener implements ExecutionListener { @Override + @Transactional public void notify(DelegateExecution execution) { RepositoryService repositoryService = SpringContextUtil.getBean(RepositoryService.class); SystemFlowFormMapper flowFormMapper = SpringContextUtil.getBean(SystemFlowFormMapper.class); @@ -90,6 +96,9 @@ updateCertificateState(Long.valueOf(id)); break; } + + //审批通过,通知发起人 + sendMessageAndSocket(execution, systemFlowForm); } private void updateEquipmentApplyState(String id, String state) { @@ -118,41 +127,73 @@ UpdateWrapper logUpdateWrapper = new UpdateWrapper<>(); // 修改状态变更记录结束时间 logUpdateWrapper.in("equipment_id", equipmentIds).isNull("end_date").set("end_date", DateUtils.format(new Date())); - stateChangeLogMapper.update(null, logUpdateWrapper); + if (stateChangeLogMapper.update(null, logUpdateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + ; // 获取当前申请的信息 EquipmentApply equipmentApply = equipmentApplyMapper.selectById(id); // 新增状态变更记录 for (EquipmentApplyEquipment equipment : equipmentApplyEquipments) { EquipmentStateChangeLog stateChangeLog = new EquipmentStateChangeLog(Long.parseLong(id), Long.parseLong(equipment.getEquipmentId()), state, DateUtils.format(new Date()), null, Long.parseLong(equipmentApply.getApplyPerson())); - stateChangeLogMapper.insert(stateChangeLog); + if (stateChangeLogMapper.insert(stateChangeLog) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } } - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + } else { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } - private void updateStandardState (String id, String state){ - MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.in("id", id).set("manager_state", state); - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateStandardState(String id, String state) { + MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", id).set("manager_state", state); + if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } - private void updateCertificateState (Long id){ - Assert.isFalse(Objects.isNull(id), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); - BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); - BusinessCertificateReport certificateReport = new BusinessCertificateReport(); - certificateReport.setId(id); - certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 - certificateReport.setPrintStatus("1"); //打印状态可打印 - int row = certificateReportMapper.updateById(certificateReport); - if (row <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateCertificateState(Long id) { + Assert.isFalse(Objects.isNull(id), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); + BusinessCertificateReport certificateReport = new BusinessCertificateReport(); + certificateReport.setId(id); + certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 + certificateReport.setPrintStatus("1"); //打印状态可打印 + int row = certificateReportMapper.updateById(certificateReport); + if (row <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } + + private void sendMessageAndSocket(DelegateExecution execution, SystemFlowForm systemFlowForm) { + JSONObject jsonObject = JSONObject.parseObject(systemFlowForm.getFlowDef()); + JSONObject workFlowDef = jsonObject.getJSONObject("workFlowDef"); + Integer noticeStarter = workFlowDef.getInteger("noticeStarter"); + if (1 == noticeStarter) { + Long rootId = Long.valueOf(String.valueOf(execution.getVariable("root"))); + String formName = workFlowDef.getString("formName"); + String formId = systemFlowForm.getFormId(); + //总工作台中需要展示所有业务的用户待审批的列表(查询每个业务的待审批进行组合) + //每个业务和前端定一个type(用formId即可,前提要保证流程定义和formId为一对一关系),用于前端页面跳转 + WorkbenchApprovalMessageMapper approvalMessageMapper = SpringContextUtil.getBean(WorkbenchApprovalMessageMapper.class); + UserMapper userMapper = SpringContextUtil.getBean(UserMapper.class); + User user = userMapper.selectById(rootId); + WorkbenchApprovalMessage approvalMessage = new WorkbenchApprovalMessage(); + approvalMessage.setNoticeId(rootId); + approvalMessage.setNoticeDeptId(user.getDeptId()); + approvalMessage.setMessageTitle(null); + approvalMessage.setMessageContent(formName); + approvalMessage.setFormId(formId); + if (approvalMessageMapper.insert(approvalMessage) < 0) { + log.error("审批通过,通知发起人失败,approvalMessage:{}", approvalMessage.toString()); + } + //websocket消息推送 + WebSocket webSocket = SpringContextUtil.getBean(WebSocket.class); + webSocket.sendOneMessage(String.valueOf(rootId), JSONObject.toJSONString(approvalMessage)); + } + } } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java new file mode 100644 index 0000000..dc6fc8b --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.workbench; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; + +/** + *

+ * 审批通过通知消息 Mapper 接口 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +public interface WorkbenchApprovalMessageMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml new file mode 100644 index 0000000..a31eede --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, notice_id, notice_dept_id, message_title, message_content, form_id, status, create_time, update_time + + + diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/workbench/WorkbenchApprovalMessage.java b/casic-metering-model/src/main/java/com/casic/missiles/model/workbench/WorkbenchApprovalMessage.java new file mode 100644 index 0000000..452feeb --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/workbench/WorkbenchApprovalMessage.java @@ -0,0 +1,76 @@ +package com.casic.missiles.model.workbench; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 审批通过通知消息 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@Data +@TableName("workbench_approval_message") +public class WorkbenchApprovalMessage implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId("id") + private Long id; + + /** + * 通知的用户id + */ + @TableField("notice_id") + private Long noticeId; + + /** + * 通知的用户部门id + */ + @TableField("notice_dept_id") + private Long noticeDeptId; + + /** + * 消息主题(标题,冗余) + */ + @TableField("message_title") + private String messageTitle; + + /** + * 消息内容(表单名字) + */ + @TableField("message_content") + private String messageContent; + + /** + * 前端表单id(用于区分业务类型及页面跳转) + */ + @TableField("form_id") + private String formId; + + /** + * 1已读0未读 + */ + @TableField("status") + private Integer status; + + /** + * 创建时间 + */ + @TableField("create_time") + private String createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private String updateTime; + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java index cf5144b..3bd316c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java @@ -21,10 +21,12 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.business.*; import com.casic.missiles.mapper.meter.MeterOrganizeMapper; +import com.casic.missiles.mapper.meter.MeterStaffMapper; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.business.BusinessLabExecutiveInfo; import com.casic.missiles.model.business.BusinessLabExecutiveOperateLog; import com.casic.missiles.model.business.BusinessLabExecutiveTemplateInfo; +import com.casic.missiles.model.meter.MeterStaff; import com.casic.missiles.service.business.IBusinessLabExecutiveInfoService; import com.casic.missiles.service.business.IBusinessLabExecutiveTemplateInfoService; import com.casic.missiles.utils.ConvertUtils; @@ -67,6 +69,8 @@ private MeterOrganizeMapper organizeMapper; @Autowired private AbstractDictService dictService; + @Autowired + private MeterStaffMapper staffMapper; @Override public Page handOutListPage(Page page, SampleHandOutListRequest handOutListRequest) throws Exception{ @@ -277,7 +281,11 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - Long userId = user.getId(); + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + String measureStatus = labExecutiveListRequest.getMeasureStatus(); Page resultPage = new Page<>(); switch (measureStatus) { @@ -325,7 +333,11 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - Long userId = user.getId(); + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + //查询扫描样品中为该用户待检测中的样品列表 List preList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.TO_MEASURE); if(CollectionUtils.isEmpty(preList)){ @@ -346,7 +358,11 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - Long userId = user.getId(); + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + //查询扫描样品中为该用户检测中的样品列表 List preList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.IN_MEASURE); if(CollectionUtils.isEmpty(preList)){ @@ -453,7 +469,12 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - if(request.getMeasurePersonId() != user.getId()){ + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + + if(request.getMeasurePersonId() != userId){ throw new BusinessException(BusinessExceptionEnum.CANNOT_CHANGE_MEASURE_INFO); } BusinessLabExecutiveInfo executiveInfo = new BusinessLabExecutiveInfo(); @@ -489,7 +510,11 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - Long userId = user.getId(); + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + //删除实验室检测列表中退回数据 int deleteFlag = labExecutiveInfoMapper.deleteById(request.getId()); //退回操作记录表中增加数据 @@ -534,6 +559,13 @@ return wrapper; } + private MeterStaff getMeterStaffInfo(AuthUser user) { + String account = user.getAccount(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("account", account); + return staffMapper.selectOne(wrapper); + } + private HandOutLabExecutiveDTO getHandOutLabExecutiveDTO(Long orderId, Long sampleId) { List labExecutiveList = labExecutiveInfoMapper.selectListByInMeasureStatus(orderId, sampleId); if (CollectionUtils.isEmpty(labExecutiveList)) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java new file mode 100644 index 0000000..8d07e18 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.Impl.workbench; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.mapper.workbench.WorkbenchApprovalMessageMapper; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; +import com.casic.missiles.service.workbench.IWorkbenchApprovalMessageService; +import org.springframework.stereotype.Service; + +/** + *

+ * 审批通过通知消息 服务实现类 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@Service +public class WorkbenchApprovalMessageServiceImpl extends ServiceImpl implements IWorkbenchApprovalMessageService { + +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java new file mode 100644 index 0000000..32f67c9 --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/workbench/WorkbenchApprovalMessageController.java @@ -0,0 +1,18 @@ +package com.casic.missiles.controller.workbench; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 审批通过通知消息 前端控制器 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@RestController +@RequestMapping("/workbench/approvalMessage") +public class WorkbenchApprovalMessageController { + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index 0374632..1542cb6 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -120,4 +120,4 @@ #作者 author: wangpeng #待生成对象表名 - table-name: workbench_message + table-name: workbench_approval_message diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 02da89a..76c1ee7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -56,8 +56,8 @@ COMPLETE_SAMPLE_NOT_EXIST(2411, "检测中不存在扫描收入的样品"), CANNOT_CHANGE_MEASURE_INFO(2412, "无法更改非当前登录用户的检测信息"), NON_EXIST_ORDER_OR_SAMPLE(2413, "不存在该委托单或该委托单下的样品"), - AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"); - + AGAIN_PRINT_SUBMIT_FAILED(2414, "再次打印提交处理失败"), + LOGIN_USER_NOT_STAFF(2415, "登录用户非计量人员"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java index 26a4e2c..e63ac86 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/ProcessUpdateStateListener.java @@ -2,6 +2,7 @@ import com.alibaba.excel.util.DateUtils; import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.enums.ApplyFromIdEnum; @@ -16,12 +17,17 @@ import com.casic.missiles.mapper.equipment.EquipmentStateChangeLogMapper; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.business.BusinessCertificateReport; +import com.casic.missiles.mapper.workbench.WorkbenchApprovalMessageMapper; import com.casic.missiles.model.equipment.EquipmentApply; import com.casic.missiles.model.equipment.EquipmentApplyEquipment; import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.equipment.EquipmentStateChangeLog; import com.casic.missiles.model.system.SystemFlowForm; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; +import com.casic.missiles.modular.system.dao.UserMapper; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.utils.SpringContextUtil; +import com.casic.missiles.utils.WebSocket; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.RepositoryService; import org.flowable.engine.delegate.DelegateExecution; @@ -29,7 +35,6 @@ import org.flowable.engine.repository.ProcessDefinition; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.ObjectUtils; import java.util.Date; import java.util.List; @@ -41,6 +46,7 @@ public class ProcessUpdateStateListener implements ExecutionListener { @Override + @Transactional public void notify(DelegateExecution execution) { RepositoryService repositoryService = SpringContextUtil.getBean(RepositoryService.class); SystemFlowFormMapper flowFormMapper = SpringContextUtil.getBean(SystemFlowFormMapper.class); @@ -90,6 +96,9 @@ updateCertificateState(Long.valueOf(id)); break; } + + //审批通过,通知发起人 + sendMessageAndSocket(execution, systemFlowForm); } private void updateEquipmentApplyState(String id, String state) { @@ -118,41 +127,73 @@ UpdateWrapper logUpdateWrapper = new UpdateWrapper<>(); // 修改状态变更记录结束时间 logUpdateWrapper.in("equipment_id", equipmentIds).isNull("end_date").set("end_date", DateUtils.format(new Date())); - stateChangeLogMapper.update(null, logUpdateWrapper); + if (stateChangeLogMapper.update(null, logUpdateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + ; // 获取当前申请的信息 EquipmentApply equipmentApply = equipmentApplyMapper.selectById(id); // 新增状态变更记录 for (EquipmentApplyEquipment equipment : equipmentApplyEquipments) { EquipmentStateChangeLog stateChangeLog = new EquipmentStateChangeLog(Long.parseLong(id), Long.parseLong(equipment.getEquipmentId()), state, DateUtils.format(new Date()), null, Long.parseLong(equipmentApply.getApplyPerson())); - stateChangeLogMapper.insert(stateChangeLog); + if (stateChangeLogMapper.insert(stateChangeLog) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } } - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + } else { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } } - private void updateStandardState (String id, String state){ - MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.in("id", id).set("manager_state", state); - if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateStandardState(String id, String state) { + MeterFixedAssetsMapper meterFixedAssetsMapper = SpringContextUtil.getBean(MeterFixedAssetsMapper.class); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", id).set("manager_state", state); + if (meterFixedAssetsMapper.update(null, updateWrapper) <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } - private void updateCertificateState (Long id){ - Assert.isFalse(Objects.isNull(id), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); - BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); - BusinessCertificateReport certificateReport = new BusinessCertificateReport(); - certificateReport.setId(id); - certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 - certificateReport.setPrintStatus("1"); //打印状态可打印 - int row = certificateReportMapper.updateById(certificateReport); - if (row <= 0) { - throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); - } + private void updateCertificateState(Long id) { + Assert.isFalse(Objects.isNull(id), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + BusinessCertificateReportMapper certificateReportMapper = SpringContextUtil.getBean(BusinessCertificateReportMapper.class); + BusinessCertificateReport certificateReport = new BusinessCertificateReport(); + certificateReport.setId(id); + certificateReport.setApprovalStatus(ApprovalStatusEnum.PASSED); //审批状态为审批中 + certificateReport.setPrintStatus("1"); //打印状态可打印 + int row = certificateReportMapper.updateById(certificateReport); + if (row <= 0) { + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } + } + + private void sendMessageAndSocket(DelegateExecution execution, SystemFlowForm systemFlowForm) { + JSONObject jsonObject = JSONObject.parseObject(systemFlowForm.getFlowDef()); + JSONObject workFlowDef = jsonObject.getJSONObject("workFlowDef"); + Integer noticeStarter = workFlowDef.getInteger("noticeStarter"); + if (1 == noticeStarter) { + Long rootId = Long.valueOf(String.valueOf(execution.getVariable("root"))); + String formName = workFlowDef.getString("formName"); + String formId = systemFlowForm.getFormId(); + //总工作台中需要展示所有业务的用户待审批的列表(查询每个业务的待审批进行组合) + //每个业务和前端定一个type(用formId即可,前提要保证流程定义和formId为一对一关系),用于前端页面跳转 + WorkbenchApprovalMessageMapper approvalMessageMapper = SpringContextUtil.getBean(WorkbenchApprovalMessageMapper.class); + UserMapper userMapper = SpringContextUtil.getBean(UserMapper.class); + User user = userMapper.selectById(rootId); + WorkbenchApprovalMessage approvalMessage = new WorkbenchApprovalMessage(); + approvalMessage.setNoticeId(rootId); + approvalMessage.setNoticeDeptId(user.getDeptId()); + approvalMessage.setMessageTitle(null); + approvalMessage.setMessageContent(formName); + approvalMessage.setFormId(formId); + if (approvalMessageMapper.insert(approvalMessage) < 0) { + log.error("审批通过,通知发起人失败,approvalMessage:{}", approvalMessage.toString()); + } + //websocket消息推送 + WebSocket webSocket = SpringContextUtil.getBean(WebSocket.class); + webSocket.sendOneMessage(String.valueOf(rootId), JSONObject.toJSONString(approvalMessage)); + } + } } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java new file mode 100644 index 0000000..dc6fc8b --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/workbench/WorkbenchApprovalMessageMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.workbench; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; + +/** + *

+ * 审批通过通知消息 Mapper 接口 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +public interface WorkbenchApprovalMessageMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml new file mode 100644 index 0000000..a31eede --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/workbench/WorkbenchApprovalMessageMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, notice_id, notice_dept_id, message_title, message_content, form_id, status, create_time, update_time + + + diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/workbench/WorkbenchApprovalMessage.java b/casic-metering-model/src/main/java/com/casic/missiles/model/workbench/WorkbenchApprovalMessage.java new file mode 100644 index 0000000..452feeb --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/workbench/WorkbenchApprovalMessage.java @@ -0,0 +1,76 @@ +package com.casic.missiles.model.workbench; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 审批通过通知消息 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@Data +@TableName("workbench_approval_message") +public class WorkbenchApprovalMessage implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId("id") + private Long id; + + /** + * 通知的用户id + */ + @TableField("notice_id") + private Long noticeId; + + /** + * 通知的用户部门id + */ + @TableField("notice_dept_id") + private Long noticeDeptId; + + /** + * 消息主题(标题,冗余) + */ + @TableField("message_title") + private String messageTitle; + + /** + * 消息内容(表单名字) + */ + @TableField("message_content") + private String messageContent; + + /** + * 前端表单id(用于区分业务类型及页面跳转) + */ + @TableField("form_id") + private String formId; + + /** + * 1已读0未读 + */ + @TableField("status") + private Integer status; + + /** + * 创建时间 + */ + @TableField("create_time") + private String createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private String updateTime; + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java index cf5144b..3bd316c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java @@ -21,10 +21,12 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.business.*; import com.casic.missiles.mapper.meter.MeterOrganizeMapper; +import com.casic.missiles.mapper.meter.MeterStaffMapper; import com.casic.missiles.model.business.BusinessCertificateReport; import com.casic.missiles.model.business.BusinessLabExecutiveInfo; import com.casic.missiles.model.business.BusinessLabExecutiveOperateLog; import com.casic.missiles.model.business.BusinessLabExecutiveTemplateInfo; +import com.casic.missiles.model.meter.MeterStaff; import com.casic.missiles.service.business.IBusinessLabExecutiveInfoService; import com.casic.missiles.service.business.IBusinessLabExecutiveTemplateInfoService; import com.casic.missiles.utils.ConvertUtils; @@ -67,6 +69,8 @@ private MeterOrganizeMapper organizeMapper; @Autowired private AbstractDictService dictService; + @Autowired + private MeterStaffMapper staffMapper; @Override public Page handOutListPage(Page page, SampleHandOutListRequest handOutListRequest) throws Exception{ @@ -277,7 +281,11 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - Long userId = user.getId(); + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + String measureStatus = labExecutiveListRequest.getMeasureStatus(); Page resultPage = new Page<>(); switch (measureStatus) { @@ -325,7 +333,11 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - Long userId = user.getId(); + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + //查询扫描样品中为该用户待检测中的样品列表 List preList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.TO_MEASURE); if(CollectionUtils.isEmpty(preList)){ @@ -346,7 +358,11 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - Long userId = user.getId(); + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + //查询扫描样品中为该用户检测中的样品列表 List preList = labExecutiveInfoMapper.selectListForSampleOperate(requestList, userId, MeasureStatusEnum.IN_MEASURE); if(CollectionUtils.isEmpty(preList)){ @@ -453,7 +469,12 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - if(request.getMeasurePersonId() != user.getId()){ + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + + if(request.getMeasurePersonId() != userId){ throw new BusinessException(BusinessExceptionEnum.CANNOT_CHANGE_MEASURE_INFO); } BusinessLabExecutiveInfo executiveInfo = new BusinessLabExecutiveInfo(); @@ -489,7 +510,11 @@ Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - Long userId = user.getId(); + //登录用户id获取计量人员id,实验室检测信息中存储的是计量人员id + MeterStaff meterStaff = getMeterStaffInfo(user); + if(Objects.isNull(meterStaff)) throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_NOT_STAFF); + Long userId = meterStaff.getId(); + //删除实验室检测列表中退回数据 int deleteFlag = labExecutiveInfoMapper.deleteById(request.getId()); //退回操作记录表中增加数据 @@ -534,6 +559,13 @@ return wrapper; } + private MeterStaff getMeterStaffInfo(AuthUser user) { + String account = user.getAccount(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("account", account); + return staffMapper.selectOne(wrapper); + } + private HandOutLabExecutiveDTO getHandOutLabExecutiveDTO(Long orderId, Long sampleId) { List labExecutiveList = labExecutiveInfoMapper.selectListByInMeasureStatus(orderId, sampleId); if (CollectionUtils.isEmpty(labExecutiveList)) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java new file mode 100644 index 0000000..8d07e18 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java @@ -0,0 +1,20 @@ +package com.casic.missiles.service.Impl.workbench; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.mapper.workbench.WorkbenchApprovalMessageMapper; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; +import com.casic.missiles.service.workbench.IWorkbenchApprovalMessageService; +import org.springframework.stereotype.Service; + +/** + *

+ * 审批通过通知消息 服务实现类 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +@Service +public class WorkbenchApprovalMessageServiceImpl extends ServiceImpl implements IWorkbenchApprovalMessageService { + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/workbench/IWorkbenchApprovalMessageService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/workbench/IWorkbenchApprovalMessageService.java new file mode 100644 index 0000000..611cad0 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/workbench/IWorkbenchApprovalMessageService.java @@ -0,0 +1,16 @@ +package com.casic.missiles.service.workbench; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.model.workbench.WorkbenchApprovalMessage; + +/** + *

+ * 审批通过通知消息 服务类 + *

+ * + * @author wangpeng + * @since 2023-02-24 + */ +public interface IWorkbenchApprovalMessageService extends IService { + +}