From b3eabfc54ae08cbce3777aa20142f75cb9d0fb2e Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期一, 21 四月 2025 15:11:01 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java |  188 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 187 insertions(+), 1 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 5bcf4b8..d3f73f0 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,28 +1,48 @@
 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.aspect.annotation.EquipmentHistoryLog;
 import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.constant.EquipmentOperationTagEnum;
 import org.jeecg.modules.eam.constant.ReportRepairEnum;
+import org.jeecg.modules.eam.constant.WeekMaintenanceStatusEnum;
 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.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.jeecg.modules.system.service.ISysUserService;
+import org.jeecg.modules.system.vo.UserSelector;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -53,6 +73,18 @@
 
     @Resource
     private IEamEquipmentService eamEquipmentService;
+
+    @Resource
+    private IFlowMyBusinessService flowMyBusinessService;
+
+    @Resource
+    private TaskService taskService;
+
+    @Resource
+    private IFlowTaskService flowTaskService;
+
+    @Resource
+    private ISysUserService sysUserService;
 
     /**
      * 鍒嗛〉鍒楄〃
@@ -113,6 +145,160 @@
         }
     }
 
+    /**
+     * 娴佺▼鎿嶄綔
+     *
+     * @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());
+        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(request.getRepairStatus());
+        if (status == null) {
+            return null;
+        }
+        //娴佺▼鍙橀噺
+        Map<String, Object> values = new HashMap<>();
+        switch (status) {
+            case UNDER_REPAIR:
+                //缁翠慨涓細涓嬩竴姝� 鍒ゆ柇鏄惁闇�瑕佸浠�, 闇�瑕佸浠惰浆璁惧绠$悊鍛橀鐢ㄥ浠�, 涓嶉渶瑕佸垯杞埌璁惧鎶ヤ慨鍛樼‘璁ょ淮淇畬鎴�
+                if (request.getStatus() == 1) {
+                    // 闇�瑕�
+                    List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0004);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈垎閰嶈澶囩鐞嗗憳锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒");
+                    }
+                    values.put("dataId", eamRepairOrder.getId());
+                    values.put("organization", "缁翠慨宸ュ崟杩涘叆绛夊浠剁姸鎬�");
+                    values.put("comment", "缁翠慨宸ュ崟杩涘叆绛夊浠剁姸鎬�");
+                    values.put("NextAssignee", userSelectors);
+                    values.put("status", 1);
+                    request.setComment("缁翠慨宸ュ崟杩涘叆绛夊浠剁姸鎬�");
+                    eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_SPARES.name());
+                } else {
+                    // 涓嶉渶瑕�
+                    EamReportRepair eamReportRepair = eamReportRepairService.getById(eamRepairOrder.getReportId());
+                    values.put("dataId", eamRepairOrder.getId());
+                    values.put("organization", "缁翠慨宸ュ崟杩涘叆鎶ヤ慨鍛樼‘璁ら樁娈�");
+                    values.put("comment", "缁翠慨宸ュ崟杩涘叆鎶ヤ慨鍛樼‘璁ら樁娈�");
+                    values.put("NextAssignee", eamReportRepair.getCreateBy());
+                    values.put("status", 0);
+                    request.setComment("缁翠慨宸ュ崟杩涘叆鎶ヤ慨鍛樼‘璁ら樁娈�");
+                    eamRepairOrder.setRepairStatus(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);
+                        }
+                    }
+                }
+                break;
+            case WAIT_SPARES:
+                // 绛夊浠�, 绠$悊鍛樼‘璁ゅ浠跺埌浣嶏紝娴佺▼杞埌缁翠慨鍛樼户缁淮淇�,鐘舵�佽浆涓虹淮淇腑
+                values.put("dataId", eamRepairOrder.getId());
+                values.put("organization", "缁翠慨宸ュ崟杩涘叆缁翠慨鍛樼户缁淮淇樁娈�");
+                values.put("comment", "缁翠慨宸ュ崟杩涘叆缁翠慨鍛樼户缁淮淇樁娈�");
+                values.put("NextAssignee", eamRepairOrder.getRepairer());
+                values.put("status", 0);
+                request.setComment("缁翠慨宸ュ崟杩涘叆缁翠慨鍛樼户缁淮淇樁娈�");
+                eamRepairOrder.setRepairStatus(ReportRepairEnum.UNDER_REPAIR.name());
+                break;
+            case WAIT_CONFIRM:
+                // 寰呯‘璁�, 缁翠慨鍛樼淮淇畬鎴愶紝鎶ヤ慨浜虹‘璁ょ粨鏉熸祦绋�
+                EamReportRepair eamReportRepair = eamReportRepairService.getById(eamRepairOrder.getReportId());
+                values.put("dataId", eamRepairOrder.getId());
+                values.put("organization", "缁翠慨宸ュ崟娴佺▼缁撴潫");
+                values.put("comment", "缁翠慨宸ュ崟娴佺▼缁撴潫");
+                values.put("NextAssignee", eamReportRepair.getCreateBy());
+                values.put("status", 0);
+                request.setComment("缁翠慨宸ュ崟杩涘叆鎶ヤ慨鍛樼‘璁ら樁娈�");
+                eamRepairOrder.setRepairStatus(ReportRepairEnum.COMPLETE.name());
+                eamRepairOrder.setActualEndTime(new Date());
+                break;
+        }
+        request.setValues(values);
+
+        // 瀹屾垚娴佺▼浠诲姟
+        Result result = flowTaskService.complete(request);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException("瀹℃壒澶辫触锛岃鍒锋柊鏌ョ湅锛�");
+        }
+        //淇濆瓨宸ュ崟
+        this.baseMapper.updateById(eamRepairOrder);
+        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());
+        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());
+    }
+
 
     @Override
     public void afterFlowHandle(FlowMyBusiness business) {
@@ -132,7 +318,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