From 20791bfadab91e8ca99e6409f9a405e23d0a6505 Mon Sep 17 00:00:00 2001
From: cuijian <cuijian@xalxzn.com>
Date: 星期一, 12 五月 2025 15:31:57 +0800
Subject: [PATCH] 工具信息参数
---
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java | 281 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 274 insertions(+), 7 deletions(-)
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
index 314cd31..b86ab14 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
@@ -1,27 +1,44 @@
package org.jeecg.modules.eam.service.impl;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
+import org.flowable.engine.TaskService;
+import org.flowable.task.api.Task;
+import org.jeecg.common.api.vo.FileUploadResult;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.modules.eam.constant.BusinessCodeConst;
-import org.jeecg.modules.eam.constant.ReportRepairEnum;
+import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
+import org.jeecg.modules.eam.constant.*;
import org.jeecg.modules.eam.entity.EamEquipment;
import org.jeecg.modules.eam.entity.EamRepairOrder;
import org.jeecg.modules.eam.entity.EamReportRepair;
import org.jeecg.modules.eam.mapper.EamRepairOrderMapper;
+import org.jeecg.modules.eam.request.EamRepairOrderQuery;
+import org.jeecg.modules.eam.request.EamRepairOrderRequest;
+import org.jeecg.modules.eam.request.EamRepairOrderResponse;
+import org.jeecg.modules.eam.request.EamReportRepairQuery;
+import org.jeecg.modules.eam.service.IEamEquipmentExtendService;
import org.jeecg.modules.eam.service.IEamEquipmentService;
import org.jeecg.modules.eam.service.IEamRepairOrderService;
import org.jeecg.modules.eam.service.IEamReportRepairService;
import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
+import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
import org.jeecg.modules.flowable.service.IFlowDefinitionService;
+import org.jeecg.modules.flowable.service.IFlowTaskService;
import org.jeecg.modules.mdc.util.DateUtils;
import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
+import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -53,15 +70,27 @@
@Resource
private IEamEquipmentService eamEquipmentService;
+ @Resource
+ private IFlowMyBusinessService flowMyBusinessService;
+
+ @Resource
+ private TaskService taskService;
+
+ @Resource
+ private IFlowTaskService flowTaskService;
+
+ @Resource
+ private IEamEquipmentExtendService eamEquipmentExtendService;
+
/**
* 鍒嗛〉鍒楄〃
*
* @param page
- * @param eamRepairOrder
+ * @param eamRepairOrderQuery
* @return
*/
@Override
- public IPage<EamRepairOrder> pageList(Page<EamRepairOrder> page, EamRepairOrder eamRepairOrder) {
+ public IPage<EamRepairOrder> pageList(Page<EamRepairOrder> page, EamRepairOrderQuery eamRepairOrderQuery) {
//鐢ㄦ埛鏁版嵁鏉冮檺
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
if (sysUser == null) {
@@ -72,7 +101,7 @@
//閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
equipmentIds = Arrays.asList(sysUser.getEquipmentIds().split(","));
}
- return this.baseMapper.pageList(page, eamRepairOrder, sysUser.getId(), equipmentIds);
+ return this.baseMapper.pageList(page, eamRepairOrderQuery, sysUser.getId(), equipmentIds);
}
@Override
@@ -85,8 +114,9 @@
eamRepairOrder.setEquipmentId(eamReportRepair.getEquipmentId());
eamRepairOrder.setRepairStatus(ReportRepairEnum.UNDER_REPAIR.name());
eamRepairOrder.setActualStartTime(DateUtils.getNow());
+ eamRepairOrder.setIsUseSpare(0);
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
- eamRepairOrder.setRepairer(user.getRealname());
+ eamRepairOrder.setRepairer(user.getUsername());
super.save(eamRepairOrder);
EamEquipment eamEquipment = eamEquipmentService.getById(eamReportRepair.getEquipmentId());
// 鍚姩缁翠慨娴佺▼
@@ -109,7 +139,244 @@
} else {
eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_REPAIR.name());
eamReportRepairService.updateById(eamReportRepair);
+ //鏇存柊璁惧缁翠慨鐘舵��
+ eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.UNDER_REPAIR.name());
}
+ }
+
+ /**
+ * 鎸囨淳
+ * @param eamReportRepairQuery
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void assign(EamReportRepairQuery eamReportRepairQuery) {
+ EamRepairOrder eamRepairOrder = new EamRepairOrder();
+ String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.REPAIR_ORDER_CODE_RULE);
+ eamRepairOrder.setRepairCode(codeSeq);
+ EamReportRepair eamReportRepair = eamReportRepairService.getById(eamReportRepairQuery.getId());
+ eamRepairOrder.setDelFlag(CommonConstant.DEL_FLAG_0);
+ eamRepairOrder.setEquipmentId(eamReportRepair.getEquipmentId());
+ eamRepairOrder.setRepairStatus(ReportRepairEnum.UNDER_REPAIR.name());
+ eamRepairOrder.setActualStartTime(DateUtils.getNow());
+ eamRepairOrder.setIsUseSpare(0);
+ eamRepairOrder.setRepairer(eamReportRepairQuery.getRepairer());
+ super.save(eamRepairOrder);
+ EamEquipment eamEquipment = eamEquipmentService.getById(eamReportRepair.getEquipmentId());
+ // 鍚姩缁翠慨娴佺▼
+ flowCommonService.initActBusiness("缁翠慨宸ュ崟鍙凤細" + codeSeq + ", 璁惧缂栧彿锛�" + eamEquipment.getEquipmentCode() + "寮�濮嬬淮淇�",
+ eamRepairOrder.getId(),
+ "IEamRepairOrderService",
+ "eam_repair",
+ null);
+ Map<String, Object> variables = new HashMap<>();
+ variables.put("dataId", eamRepairOrder.getId());
+ variables.put("organization", "缁翠慨宸ュ崟鍚姩娴佺▼");
+ variables.put("comment", "缁翠慨宸ュ崟鍚姩娴佺▼");
+ variables.put("proofreading", true);
+ List<String> usernames = new ArrayList<>();
+ usernames.add(eamReportRepairQuery.getRepairer());
+ variables.put("NextAssignee", usernames);
+ Result result = flowDefinitionService.startProcessInstanceByKey("eam_repair", variables);
+ if (!result.isSuccess()) {
+ super.removeById(eamRepairOrder);
+ } else {
+ eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_REPAIR.name());
+ eamReportRepairService.updateById(eamReportRepair);
+ //鏇存柊璁惧缁翠慨鐘舵��
+ eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.UNDER_REPAIR.name());
+ }
+ }
+
+ /**
+ * 娴佺▼鎿嶄綔
+ *
+ * @param request
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ @EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.REPAIRED, businessTable = "eam_repair_order")
+ public EamRepairOrder perform(EamRepairOrderRequest request) {
+ EamRepairOrder eamRepairOrder = this.baseMapper.selectById(request.getId());
+ EamReportRepair eamReportRepair = eamReportRepairService.getById(eamRepairOrder.getReportId());
+ if (eamRepairOrder == null) {
+ throw new JeecgBootException("瀹℃壒鐨勬暟鎹凡鍒犻櫎锛岃鍒锋柊閲嶈瘯锛�");
+ }
+ // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
+ LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+ if (user == null || StrUtil.isBlank(user.getId())) {
+ throw new JeecgBootException("鏈幏鍙栧埌鐧诲綍鐢ㄦ埛锛岃閲嶆柊鐧诲綍鍚庡啀璇曪紒");
+ }
+ request.setAssignee(user.getUsername());
+ // 鑾峰彇娴佺▼涓氬姟璁板綍
+ FlowMyBusiness flowMyBusiness = flowMyBusinessService.getFlowMyBusiness(request.getInstanceId());
+ if (flowMyBusiness == null) {
+ throw new JeecgBootException("娴佺▼瀹炰緥涓嶅瓨鍦紝璇峰埛鏂板悗閲嶈瘯锛�");
+ }
+ boolean userAuthorized = isUserAuthorized(flowMyBusiness, user);
+ if (!userAuthorized) {
+ throw new JeecgBootException("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔★紝璇峰埛鏂板悗閲嶈瘯锛�");
+ }
+ // 璁ら浠诲姟
+ if (!claimTask(flowMyBusiness.getTaskId(), user)) {
+ throw new JeecgBootException("浠诲姟涓嶅瓨鍦ㄣ�佸凡瀹屾垚鎴栧凡琚粬浜鸿棰嗭紒");
+ }
+ EamEquipment equipment = eamEquipmentService.getById(request.getEquipmentId());
+ if (equipment == null) {
+ throw new JeecgBootException("璁惧涓嶅瓨鍦紝璇锋鏌ワ紒");
+ }
+
+ ReportRepairEnum status = ReportRepairEnum.getInstance(eamRepairOrder.getRepairStatus());
+ if (status == null) {
+ return null;
+ }
+ //娴佺▼鍙橀噺
+ Map<String, Object> values = new HashMap<>();
+ switch (status) {
+ case UNDER_REPAIR:
+ //缁翠慨涓細涓嬩竴姝� 鍒ゆ柇鏄惁闇�瑕佸浠�, 闇�瑕佸浠惰浆璁惧绠$悊鍛橀鐢ㄥ浠�, 涓嶉渶瑕佸垯杞埌璁惧鎶ヤ慨鍛樼‘璁ょ淮淇畬鎴�
+ if (request.getIsUseSpare() == 1) {
+ // 闇�瑕�
+ if (StringUtils.isBlank(equipment.getEquipmentManager())) {
+ throw new JeecgBootException("璁惧鏈垎閰嶈澶囩鐞嗗憳锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒");
+ }
+ if (StringUtils.isBlank(eamRepairOrder.getSparePartDescription())) {
+ values.put("dataId", eamRepairOrder.getId());
+ values.put("organization", "缁翠慨宸ュ崟杩涘叆绛夊浠剁姸鎬�");
+ values.put("comment", "缁翠慨宸ュ崟杩涘叆绛夊浠剁姸鎬�");
+ values.put("NextAssignee", Arrays.asList(equipment.getEquipmentManager().split(",")));
+ values.put("status", 1);
+ request.setComment("缁翠慨宸ュ崟杩涘叆绛夊浠剁姸鎬�");
+ eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_SPARES.name());
+ eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_SPARES.name());
+ eamRepairOrder.setIsUseSpare(1);
+ } else {
+ values.put("dataId", eamRepairOrder.getId());
+ values.put("organization", "缁翠慨宸ュ崟杩涘叆鎶ヤ慨鍛樼‘璁ら樁娈�");
+ values.put("comment", "缁翠慨宸ュ崟杩涘叆鎶ヤ慨鍛樼‘璁ら樁娈�");
+ values.put("NextAssignee", Arrays.asList(eamReportRepair.getCreateBy().split(",")));
+ request.setComment("缁翠慨宸ュ崟杩涘叆绛夊浠剁姸鎬�");
+ eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_CONFIRM.name());
+ eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_CONFIRM.name());
+ eamRepairOrder.setFaultReason(request.getFaultReason());
+ eamRepairOrder.setRepairDescription(request.getRepairDescription());
+ // 澶勭悊闄勪欢
+ if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) {
+ List<FileUploadResult> fileUploadResultList = request.getImageFilesResult();
+ ObjectMapper mapper = new ObjectMapper();
+ try {
+ String referenceFile = mapper.writeValueAsString(fileUploadResultList);
+ eamRepairOrder.setImageFiles(referenceFile);
+ } catch (JsonProcessingException e) {
+ log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+ }
+ }
+ //鏇存柊璁惧缁翠慨鐘舵��
+ eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.WAIT_CONFIRM.name());
+ }
+ } else {
+ // 涓嶉渶瑕�
+ values.put("dataId", eamRepairOrder.getId());
+ values.put("organization", "缁翠慨宸ュ崟杩涘叆鎶ヤ慨鍛樼‘璁ら樁娈�");
+ values.put("comment", "缁翠慨宸ュ崟杩涘叆鎶ヤ慨鍛樼‘璁ら樁娈�");
+ values.put("NextAssignee", Arrays.asList(eamReportRepair.getCreateBy().split(",")));
+ values.put("status", 0);
+ request.setComment("缁翠慨宸ュ崟杩涘叆鎶ヤ慨鍛樼‘璁ら樁娈�");
+ eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_CONFIRM.name());
+ eamReportRepair.setReportStatus(ReportRepairEnum.WAIT_CONFIRM.name());
+ eamRepairOrder.setFaultReason(request.getFaultReason());
+ eamRepairOrder.setRepairDescription(request.getRepairDescription());
+ eamRepairOrder.setIsUseSpare(0);
+ // 澶勭悊闄勪欢
+ if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) {
+ List<FileUploadResult> fileUploadResultList = request.getImageFilesResult();
+ ObjectMapper mapper = new ObjectMapper();
+ try {
+ String referenceFile = mapper.writeValueAsString(fileUploadResultList);
+ eamRepairOrder.setImageFiles(referenceFile);
+ } catch (JsonProcessingException e) {
+ log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+ }
+ }
+ //鏇存柊璁惧缁翠慨鐘舵��
+ eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.WAIT_CONFIRM.name());
+ }
+ break;
+ case WAIT_SPARES:
+ // 绛夊浠�, 绠$悊鍛樼‘璁ゅ浠跺埌浣嶏紝娴佺▼杞埌缁翠慨鍛樼户缁淮淇�,鐘舵�佽浆涓虹淮淇腑
+ values.put("dataId", eamRepairOrder.getId());
+ values.put("organization", "缁翠慨宸ュ崟杩涘叆缁翠慨鍛樼户缁淮淇樁娈�");
+ values.put("comment", "缁翠慨宸ュ崟杩涘叆缁翠慨鍛樼户缁淮淇樁娈�");
+ values.put("NextAssignee", Arrays.asList(eamRepairOrder.getRepairer().split(",")));
+ values.put("status", 0);
+ request.setComment("缁翠慨宸ュ崟杩涘叆缁翠慨鍛樼户缁淮淇樁娈�");
+ eamRepairOrder.setRepairStatus(ReportRepairEnum.UNDER_REPAIR.name());
+ eamReportRepair.setReportStatus(ReportRepairEnum.UNDER_REPAIR.name());
+ eamRepairOrder.setSparePartDescription(request.getSparePartDescription());
+ break;
+ case WAIT_CONFIRM:
+ // 寰呯‘璁�, 缁翠慨鍛樼淮淇畬鎴愶紝鎶ヤ慨浜虹‘璁ょ粨鏉熸祦绋�
+ values.put("dataId", eamRepairOrder.getId());
+ values.put("organization", "缁翠慨宸ュ崟娴佺▼缁撴潫");
+ values.put("comment", "缁翠慨宸ュ崟娴佺▼缁撴潫");
+ values.put("NextAssignee", Arrays.asList(eamReportRepair.getCreateBy().split(",")));
+ values.put("status", 0);
+ request.setComment("缁翠慨宸ュ崟杩涘叆鎶ヤ慨鍛樼‘璁ら樁娈�");
+ eamRepairOrder.setRepairStatus(ReportRepairEnum.COMPLETE.name());
+ eamReportRepair.setReportStatus(ReportRepairEnum.COMPLETE.name());
+ eamRepairOrder.setActualEndTime(new Date());
+ //鏇存柊璁惧缁翠慨鐘舵��
+ eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.NORMAL.name());
+ break;
+ }
+ request.setValues(values);
+
+ // 瀹屾垚娴佺▼浠诲姟
+ Result result = flowTaskService.complete(request);
+ if (!result.isSuccess()) {
+ throw new JeecgBootException("瀹℃壒澶辫触锛岃鍒锋柊鏌ョ湅锛�");
+ }
+ //淇濆瓨宸ュ崟
+ this.baseMapper.updateById(eamRepairOrder);
+ // 鍚屾鏇存柊鎶ヤ慨琛ㄧ姸鎬�
+ eamReportRepairService.updateById(eamReportRepair);
+ return eamRepairOrder;
+ }
+
+ @Override
+ public EamRepairOrderResponse findById(String id) {
+ EamRepairOrderResponse eamRepairOrderResponse = new EamRepairOrderResponse();
+ EamRepairOrder eamRepairOrder = this.baseMapper.selectById(id);
+ BeanUtils.copyProperties(eamRepairOrder, eamRepairOrderResponse);
+ EamReportRepair eamReportRepair = eamReportRepairService.getById(eamRepairOrder.getReportId());
+ BeanUtils.copyProperties(eamReportRepair, eamRepairOrderResponse);
+ eamRepairOrderResponse.setReportImageFiles(eamReportRepair.getImageFiles());
+ eamRepairOrderResponse.setImageFiles(eamRepairOrder.getImageFiles());
+ return eamRepairOrderResponse;
+ }
+
+ private boolean claimTask(String taskId, LoginUser user) {
+ Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+ if (task == null) {
+ return false;
+ }
+ if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) {
+ return false;
+ }
+ taskService.claim(taskId, user.getUsername());
+ return true;
+ }
+
+ /**
+ * 鍒ゆ柇鐢ㄦ埛鏄惁鎷ユ湁姝ゆ潈闄�
+ * @param flowMyBusiness
+ * @param user
+ * @return
+ */
+ private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) {
+ List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class);
+ return todoUsers != null && todoUsers.contains(user.getUsername());
}
@@ -131,7 +398,7 @@
@Override
public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) {
//鑾峰彇涓嬩竴姝ュ鐞嗕汉
- Object object=values.get("NextAssignee");
+ Object object = values.get("NextAssignee");
return (List<String>) object;
}
}
--
Gitblit v1.9.3