From de05a9eb3524d8ebcfe26fcb1605696a02e6ab5e Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期二, 15 四月 2025 09:16:28 +0800
Subject: [PATCH] art: 设备管理-周保-执行接口

---
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/WeekMaintenanceStatusEnum.java                          |   10 +
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/BusinessCodeConst.java                                  |   14 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamWeekMaintenanceOrderController.java                       |   26 +++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java                                    |   21 ++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java                    |  248 ++++++++++++++++++++++++++++--
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java |    8 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamWeekMaintenanceRequest.java                                  |   34 ++++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java                            |   50 ++++++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamWeekMaintenanceOrderService.java                            |    7 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/IFlowMyBusinessService.java         |    6 
 10 files changed, 401 insertions(+), 23 deletions(-)

diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/BusinessCodeConst.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/BusinessCodeConst.java
index 98764d0..f33a01e 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/BusinessCodeConst.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/BusinessCodeConst.java
@@ -24,4 +24,18 @@
     String SPARE_REQUISITION_STATUS_4 = "4";
     String SPARE_REQUISITION_STATUS_5 = "5";
 
+    /**
+     * 宀椾綅缂栫爜
+     */
+    //鎿嶄綔宸�
+    String PCR0001 = "PCR0001";
+    //缁翠慨宸�
+    String PCR0002 = "PCR0002";
+    //鐝粍闀�
+    String PCR0003 = "PCR0003";
+    //璁惧绠$悊鍛�
+    String PCR0004 = "PCR0004";
+    //璁惧鑳芥簮閮�
+    String PCR0005 = "PCR0005";
+
 }
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/WeekMaintenanceStatusEnum.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/WeekMaintenanceStatusEnum.java
index 0956b7e..b22a1bf 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/WeekMaintenanceStatusEnum.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/WeekMaintenanceStatusEnum.java
@@ -9,4 +9,14 @@
     COMPLETE,  //宸插畬鎴�
     ABOLISH, //宸蹭綔搴�
     ;
+
+    public static WeekMaintenanceStatusEnum getInstance(String code) {
+        WeekMaintenanceStatusEnum[] values = WeekMaintenanceStatusEnum.values();
+        for (WeekMaintenanceStatusEnum value : values) {
+            if (value.name().equals(code)) {
+                return value;
+            }
+        }
+        return null;
+    }
 }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamWeekMaintenanceOrderController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamWeekMaintenanceOrderController.java
index 13b404e..231ad89 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamWeekMaintenanceOrderController.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamWeekMaintenanceOrderController.java
@@ -1,6 +1,7 @@
 package org.jeecg.modules.eam.controller;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
@@ -208,4 +209,29 @@
         EamWeekMaintenanceOrder eamWeekMaintenanceOrder = eamWeekMaintenanceOrderService.getById(id);
         return Result.OK(eamWeekMaintenanceOrder);
     }
+
+    /**
+     * 鎴戠殑寰呭姙锛屽鎵瑰姩浣�
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "鍛ㄤ繚宸ュ崟-鎵ц鎿嶄綔", notes = "鍛ㄤ繚宸ュ崟-鎵ц鎿嶄綔")
+    @PutMapping(value = "/approval")
+    public Result<?> approval(@RequestBody EamWeekMaintenanceRequest request) {
+        if (request == null) {
+            return Result.error("瀹℃壒鐨勫璞′笉鑳戒负绌猴紒");
+        }
+        if (CollectionUtil.isEmpty(request.getTableDetailList())) {
+            return Result.error("淇濆吇椤逛笉鑳戒负绌猴紒");
+        }
+        // 妫�鏌ヨ姹傚弬鏁�
+        if (StrUtil.isBlank(request.getTaskId()) || StrUtil.isBlank(request.getDataId()) || StrUtil.isBlank(request.getInstanceId())) {
+            return Result.error("瀹℃壒浠诲姟閿欒鎴栦笉瀛樺湪锛�");
+        }
+        boolean b = eamWeekMaintenanceOrderService.approval(request);
+        if(!b) {
+            return Result.error("鎿嶄綔澶辫触锛�");
+        }
+        return Result.ok("鎿嶄綔鎴愬姛锛�");
+    }
 }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamWeekMaintenanceRequest.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamWeekMaintenanceRequest.java
index df69050..010eb5a 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamWeekMaintenanceRequest.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamWeekMaintenanceRequest.java
@@ -6,7 +6,9 @@
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+import org.jeecg.common.api.vo.FileUploadResult;
 import org.jeecg.modules.eam.entity.EamWeekMaintenanceOrderDetail;
+import org.jeecg.modules.flowable.domain.vo.FlowTaskVo;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
@@ -17,7 +19,7 @@
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
 @ApiModel(value="eam_maintenance_standard瀵硅薄", description="淇濆吇鏍囧噯")
-public class EamWeekMaintenanceRequest implements Serializable {
+public class EamWeekMaintenanceRequest extends FlowTaskVo implements Serializable {
 
     /**涓婚敭*/
     @ApiModelProperty(value = "涓婚敭")
@@ -42,6 +44,9 @@
     /**淇濆吇鍥剧墖*/
     @ApiModelProperty(value = "淇濆吇鍥剧墖")
     private String imageFiles;
+    /**淇濆吇鍥剧墖*/
+    @ApiModelProperty(value = "淇濆吇鍥剧墖")
+    private List<FileUploadResult> imageFilesResult;
     /**澶囨敞*/
     @ApiModelProperty(value = "澶囨敞")
     private String remark;
@@ -51,4 +56,31 @@
     /**鍒犻櫎 淇濆吇椤规槑缁�*/
     @ApiModelProperty(value = "鍒犻櫎 淇濆吇椤规槑缁�")
     private List<EamWeekMaintenanceOrderDetail> removeDetailList;
+
+    //纭鎿嶄綔
+    /**纭鎰忚*/
+    @ApiModelProperty(value = "纭鎰忚")
+    private String confirmComment;
+    @ApiModelProperty(value = "纭绫诲瀷")
+    private String confirmDealType;
+    //鍒濋獙鏀舵搷浣�
+    /**鍒濋獙鏀舵剰瑙�*/
+    @ApiModelProperty(value = "鍒濋獙鏀舵剰瑙�")
+    private String initialAcceptanceComment;
+    /**鍒濋獙鏀堕檮浠�*/
+    @ApiModelProperty(value = "鍒濋獙鏀堕檮浠�")
+    private String initialAcceptanceFiles;
+    /**鍒濋獙鏀堕檮浠�*/
+    @ApiModelProperty(value = "鍒濋獙鏀堕檮浠�")
+    private List<FileUploadResult> initialAcceptanceFilesResult;
+    //缁堥獙鏀舵搷浣�
+    /**缁堥獙鏀舵剰瑙�*/
+    @ApiModelProperty(value = "缁堥獙鏀舵剰瑙�")
+    private String finalAcceptanceComment;
+    /**缁堥獙鏀堕檮浠�*/
+    @ApiModelProperty(value = "缁堥獙鏀堕檮浠�")
+    private String finalAcceptanceFiles;
+    /**缁堥獙鏀堕檮浠�*/
+    @ApiModelProperty(value = "缁堥獙鏀堕檮浠�")
+    private List<FileUploadResult> finalAcceptanceFilesResult;
 }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java
index dbaedda..b952b85 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java
@@ -2,9 +2,13 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.jeecg.modules.eam.entity.EamReportRepair;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.EamInspectionOrderDetail;
+import org.jeecg.modules.eam.entity.EamReportRepair;
+import org.jeecg.modules.eam.entity.EamWeekMaintenanceOrderDetail;
 import org.jeecg.modules.eam.request.EamReportRepairQuery;
+
+import java.util.List;
 
 /**
  * @Description: 鏁呴殰鎶ヤ慨
@@ -20,4 +24,19 @@
      * @return
      */
     IPage<EamReportRepair> pageList(Page<EamReportRepair> page, EamReportRepairQuery eamReportRepairQuery);
+
+    /**
+     * 浠庡懆淇濅腑鐢熸垚鎶ヤ慨
+     * @param detailList
+     * @return
+     */
+    boolean reportRepairFromMaintenance(String equipmentId, String reportUser, List<EamWeekMaintenanceOrderDetail> detailList);
+
+
+    /**
+     * 浠庡懆淇濅腑鐢熸垚鎶ヤ慨
+     * @param detailList
+     * @return
+     */
+    boolean reportRepairFromInspection(String equipmentId, String reportUser, List<EamInspectionOrderDetail> detailList);
 }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamWeekMaintenanceOrderService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamWeekMaintenanceOrderService.java
index 8679fcd..8e22279 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamWeekMaintenanceOrderService.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamWeekMaintenanceOrderService.java
@@ -43,4 +43,11 @@
      * @return
      */
     boolean collect(String id);
+
+    /**
+     * 鎴戠殑寰呭姙锛屽鎵瑰姩浣�
+     * @param request
+     * @return
+     */
+    boolean approval(EamWeekMaintenanceRequest request);
 }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java
index 996b510..1e28e3a 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java
@@ -4,17 +4,23 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.eam.constant.ReportRepairEnum;
+import org.jeecg.modules.eam.entity.EamInspectionOrderDetail;
 import org.jeecg.modules.eam.entity.EamReportRepair;
+import org.jeecg.modules.eam.entity.EamWeekMaintenanceOrderDetail;
 import org.jeecg.modules.eam.mapper.EamReportRepairMapper;
 import org.jeecg.modules.eam.request.EamReportRepairQuery;
 import org.jeecg.modules.eam.service.IEamReportRepairService;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -46,4 +52,48 @@
         }
         return this.baseMapper.pageList(page, eamReportRepairQuery, sysUser.getId(), equipmentIds);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean reportRepairFromMaintenance(String equipmentId, String reportUser, List<EamWeekMaintenanceOrderDetail> detailList) {
+        StringBuilder sb = new StringBuilder();
+        detailList.forEach(detail -> {
+            sb.append(detail.getItemCode()).append("銆�");
+            sb.append(detail.getExceptionDescription()).append(";");
+        });
+        EamReportRepair entity = new EamReportRepair();
+        entity.setEquipmentId(equipmentId);
+        entity.setCreateBy(reportUser);
+        entity.setFaultStartTime(new Date());
+        entity.setBreakdownFlag(CommonConstant.DEFAULT_0);
+        entity.setDelFlag(CommonConstant.DEL_FLAG_0);
+        entity.setFaultName("鍛ㄤ繚鎵ц鎶ヤ慨澶勭悊");
+        entity.setFaultDescription(sb.toString());
+        entity.setFaultType(CommonConstant.DEFAULT_1);
+        entity.setReportStatus(ReportRepairEnum.WAIT_REPAIR.name());
+        this.baseMapper.insert(entity);
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean reportRepairFromInspection(String equipmentId, String reportUser, List<EamInspectionOrderDetail> detailList) {
+        StringBuilder sb = new StringBuilder();
+        detailList.forEach(detail -> {
+            sb.append(detail.getItemCode()).append("銆�");
+            sb.append(detail.getExceptionDescription()).append(";");
+        });
+        EamReportRepair entity = new EamReportRepair();
+        entity.setEquipmentId(equipmentId);
+        entity.setCreateBy(reportUser);
+        entity.setFaultStartTime(new Date());
+        entity.setBreakdownFlag(CommonConstant.DEFAULT_0);
+        entity.setDelFlag(CommonConstant.DEL_FLAG_0);
+        entity.setFaultName("鐐规鎵ц鎶ヤ慨澶勭悊");
+        entity.setFaultDescription(sb.toString());
+        entity.setFaultType(CommonConstant.DEFAULT_1);
+        entity.setReportStatus(ReportRepairEnum.WAIT_REPAIR.name());
+        this.baseMapper.insert(entity);
+        return true;
+    }
 }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java
index c17c420..b5396f5 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java
@@ -2,31 +2,45 @@
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.constant.DataBaseConstant;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.modules.eam.constant.WeekMaintenanceStatusEnum;
+import org.jeecg.modules.eam.constant.BusinessCodeConst;
 import org.jeecg.modules.eam.constant.OrderCreationMethodEnum;
+import org.jeecg.modules.eam.constant.WeekMaintenanceStatusEnum;
+import org.jeecg.modules.eam.entity.EamEquipment;
 import org.jeecg.modules.eam.entity.EamWeekMaintenanceOrder;
 import org.jeecg.modules.eam.entity.EamWeekMaintenanceOrderDetail;
 import org.jeecg.modules.eam.mapper.EamWeekMaintenanceOrderMapper;
 import org.jeecg.modules.eam.request.EamWeekMaintenanceQuery;
 import org.jeecg.modules.eam.request.EamWeekMaintenanceRequest;
+import org.jeecg.modules.eam.service.IEamEquipmentService;
+import org.jeecg.modules.eam.service.IEamReportRepairService;
 import org.jeecg.modules.eam.service.IEamWeekMaintenanceOrderDetailService;
 import org.jeecg.modules.eam.service.IEamWeekMaintenanceOrderService;
 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.system.service.ISysUserService;
+import org.jeecg.modules.system.vo.UserSelector;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -38,7 +52,7 @@
 /**
  * @Description: 鍛ㄤ繚宸ュ崟
  * @Author: jeecg-boot
- * @Date:   2025-04-02
+ * @Date: 2025-04-02
  * @Version: V1.0
  */
 @Service("IEamWeekMaintenanceOrderService")
@@ -50,10 +64,23 @@
     @Autowired
     private IEamWeekMaintenanceOrderDetailService eamWeekMaintenanceOrderDetailService;
 
-    @Resource
+    @Autowired
     private FlowCommonService flowCommonService;
-    @Resource
+    @Autowired
     private IFlowDefinitionService flowDefinitionService;
+    @Autowired
+    private IFlowMyBusinessService flowMyBusinessService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private IFlowTaskService flowTaskService;
+
+    @Autowired
+    private ISysUserService sysUserService;
+    @Autowired
+    private IEamEquipmentService eamEquipmentService;
+    @Autowired
+    private IEamReportRepairService eamReportRepairService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -72,7 +99,7 @@
         order.setDelFlag(CommonConstant.DEL_FLAG_0);
         eamWeekMaintenanceOrderMapper.insert(order);
         //澶勭悊鏄庣粏鏁版嵁
-        if(CollectionUtil.isNotEmpty(request.getTableDetailList())) {
+        if (CollectionUtil.isNotEmpty(request.getTableDetailList())) {
             request.getTableDetailList().forEach(tableDetail -> {
                 tableDetail.setId(null);
                 tableDetail.setOrderId(order.getId());
@@ -80,7 +107,7 @@
             eamWeekMaintenanceOrderDetailService.saveBatch(request.getTableDetailList());
         }
         //鍒ゆ柇鏄惁瀛樺湪淇濆吇浜� 濡傛灉瀛樺湪鍒欏惎鍔ㄦ祦绋�
-        if(StringUtils.isNotBlank(order.getOperator())) {
+        if (StringUtils.isNotBlank(order.getOperator())) {
             //鍚姩娴佺▼
             flowCommonService.initActBusiness("宸ュ崟鍙�:" + order.getOrderNum() + ";寮�濮嬭繘琛岃澶囧懆淇�",
                     order.getId(), "IEamWeekMaintenanceOrderService", "week_maintenance_process", null);
@@ -98,7 +125,7 @@
             usernames.add(order.getOperator());
             variables.put("NextAssignee", usernames);
             Result result = flowDefinitionService.startProcessInstanceByKey("week_maintenance_process", variables);
-            if(result != null){
+            if (result != null) {
                 //鏇存柊鍛ㄤ繚鐘舵��
                 order.setMaintenanceStatus(WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name());
                 order.setActualStartTime(new Date());
@@ -165,10 +192,10 @@
     @Transactional(rollbackFor = Exception.class)
     public boolean editWeekMaintenance(EamWeekMaintenanceRequest request) {
         EamWeekMaintenanceOrder entity = eamWeekMaintenanceOrderMapper.selectById(request.getId());
-        if(entity == null){
+        if (entity == null) {
             throw new JeecgBootException("缂栬緫鐨勬暟鎹凡鍒犻櫎锛岃鍒锋柊閲嶈瘯锛�");
         }
-        if(!WeekMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())){
+        if (!WeekMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())) {
             throw new JeecgBootException("鍙湁寰呬繚鍏荤姸鎬佺殑鏁版嵁鎵嶅彲缂栬緫锛�");
         }
         entity.setMaintenanceDate(request.getMaintenanceDate());
@@ -177,30 +204,30 @@
 
         eamWeekMaintenanceOrderMapper.updateById(entity);
         //澶勭悊璇︽儏
-        if(CollectionUtil.isNotEmpty(request.getTableDetailList())) {
+        if (CollectionUtil.isNotEmpty(request.getTableDetailList())) {
             List<EamWeekMaintenanceOrderDetail> addList = new ArrayList<>();
             List<EamWeekMaintenanceOrderDetail> updateList = new ArrayList<>();
             request.getTableDetailList().forEach(tableDetail -> {
                 tableDetail.setOrderId(entity.getId());
-                if(tableDetail.getId() == null){
+                if (tableDetail.getId() == null) {
                     addList.add(tableDetail);
-                }else {
+                } else {
                     updateList.add(tableDetail);
                 }
             });
-            if(CollectionUtil.isNotEmpty(addList)){
+            if (CollectionUtil.isNotEmpty(addList)) {
                 eamWeekMaintenanceOrderDetailService.saveBatch(addList);
             }
-            if(CollectionUtil.isNotEmpty(updateList)){
+            if (CollectionUtil.isNotEmpty(updateList)) {
                 eamWeekMaintenanceOrderDetailService.updateBatchById(updateList);
             }
         }
-        if(CollectionUtil.isNotEmpty(request.getRemoveDetailList())) {
+        if (CollectionUtil.isNotEmpty(request.getRemoveDetailList())) {
             List<String> ids = request.getRemoveDetailList().stream().map(EamWeekMaintenanceOrderDetail::getId).collect(Collectors.toList());
             eamWeekMaintenanceOrderDetailService.removeBatchByIds(ids);
         }
         //鍒ゆ柇鏄惁瀛樺湪淇濆吇浜� 濡傛灉瀛樺湪鍒欏惎鍔ㄦ祦绋�
-        if(StringUtils.isNotBlank(entity.getOperator())) {
+        if (StringUtils.isNotBlank(entity.getOperator())) {
             //鍚姩娴佺▼
             flowCommonService.initActBusiness("宸ュ崟鍙�:" + entity.getOrderNum() + ";寮�濮嬭繘琛岃澶囧懆淇�",
                     entity.getId(), "IEamWeekMaintenanceOrderService", "week_maintenance_process", null);
@@ -218,7 +245,7 @@
             usernames.add(entity.getOperator());
             variables.put("NextAssignee", usernames);
             Result result = flowDefinitionService.startProcessInstanceByKey("week_maintenance_process", variables);
-            if(result != null){
+            if (result != null) {
                 //鏇存柊鍛ㄤ繚鐘舵��
                 entity.setMaintenanceStatus(WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name());
                 entity.setActualStartTime(new Date());
@@ -233,10 +260,10 @@
     @Transactional(rollbackFor = Exception.class)
     public boolean collect(String id) {
         EamWeekMaintenanceOrder entity = eamWeekMaintenanceOrderMapper.selectById(id);
-        if(entity == null) {
+        if (entity == null) {
             throw new JeecgBootException("瑕侀鍙栫殑宸ュ崟涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒");
         }
-        if(!WeekMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())) {
+        if (!WeekMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())) {
             throw new JeecgBootException("璇ュ伐鍗曞凡杩涜杩囬鍙栵紒");
         }
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
@@ -262,9 +289,188 @@
         usernames.add(entity.getOperator());
         variables.put("NextAssignee", usernames);
         Result result = flowDefinitionService.startProcessInstanceByKey("week_maintenance_process", variables);
-        if(result != null){
+        if (result != null) {
             return result.isSuccess();
         }
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean approval(EamWeekMaintenanceRequest request) {
+        EamWeekMaintenanceOrder entity = eamWeekMaintenanceOrderMapper.selectById(request.getId());
+        if (entity == 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(entity.getEquipmentId());
+        if (equipment == null) {
+            throw new JeecgBootException("璁惧涓嶅瓨鍦紝璇锋鏌ワ紒");
+        }
+
+        WeekMaintenanceStatusEnum status = WeekMaintenanceStatusEnum.getInstance(entity.getMaintenanceStatus());
+        if (status == null) {
+            return false;
+        }
+        //娴佺▼鍙橀噺
+        Map<String, Object> values = new HashMap<>();
+        switch (status) {
+            case UNDER_MAINTENANCE:
+                //鎵ц瀹屾垚
+                List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0003);
+                if (CollectionUtil.isEmpty(userSelectors)) {
+                    throw new JeecgBootException("璁惧鏈垎閰嶇粰鐝粍闀匡紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+                }
+                List<String> userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                values.put("dataId", entity.getId());
+                values.put("organization", "鍛ㄤ繚鎵ц缁撴潫");
+                values.put("comment", "鍛ㄤ繚鎵ц缁撴潫");
+                values.put("NextAssignee", userApprovalList);
+                request.setComment("鍛ㄤ繚鎵ц缁撴潫");
+                //璁剧疆entity
+                entity.setMaintenanceStatus(WeekMaintenanceStatusEnum.WAIT_CONFIRM.name());
+                entity.setActualEndTime(new Date());
+                //澶勭悊闄勪欢
+                if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) {
+                    List<FileUploadResult> fileUploadResultList = request.getImageFilesResult();
+                    ObjectMapper mapper = new ObjectMapper();
+                    try {
+                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
+                        entity.setImageFiles(referenceFile);
+                    } catch (JsonProcessingException e) {
+                        log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+                    }
+                }
+                //澶勭悊璇︽儏
+                if (CollectionUtil.isNotEmpty(request.getTableDetailList())) {
+                    eamWeekMaintenanceOrderDetailService.updateBatchById(request.getTableDetailList());
+                }
+                break;
+            case WAIT_CONFIRM:
+                //鐝粍闀跨‘璁�
+                userApprovalList = new ArrayList<>();
+                userApprovalList.add(equipment.getEquipmentManager());
+                values.put("dataId", entity.getId());
+                values.put("organization", request.getConfirmComment());
+                values.put("comment", request.getConfirmComment());
+                values.put("NextAssignee", userApprovalList);
+                values.put("confirmation", request.getConfirmDealType());
+                request.setComment(request.getConfirmComment());
+                //璁剧疆entity
+                entity.setMaintenanceStatus(WeekMaintenanceStatusEnum.WAIT_INITIAL_ACCEPTANCE.name());
+                entity.setConfirmUser(user.getUsername());
+                entity.setConfirmComment(request.getConfirmComment());
+                entity.setConfirmTime(new Date());
+                if (CommonConstant.HAS_CANCLE.equals(request.getConfirmDealType())) {
+                    //椹冲洖
+                    userApprovalList = new ArrayList<>();
+                    userApprovalList.add(entity.getOperator());
+                    values.put("NextAssignee", userApprovalList);
+                    entity.setMaintenanceStatus(WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name());
+                }
+                //澶勭悊鎶ヤ慨
+                List<EamWeekMaintenanceOrderDetail> collect = request.getTableDetailList().stream().filter((detail) -> CommonConstant.DEFAULT_1.equals(detail.getReportFlag())).collect(Collectors.toList());
+                if (CollectionUtil.isNotEmpty(collect)) {
+                    eamReportRepairService.reportRepairFromMaintenance(equipment.getId(), entity.getOperator(), collect);
+                }
+                break;
+            case WAIT_INITIAL_ACCEPTANCE:
+                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0005);
+                if (CollectionUtil.isEmpty(userSelectors)) {
+                    throw new JeecgBootException("璁惧鏈垎閰嶇粰鐝粍闀匡紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+                }
+                userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                values.put("dataId", entity.getId());
+                values.put("organization", request.getInitialAcceptanceComment());
+                values.put("comment", request.getInitialAcceptanceComment());
+                values.put("NextAssignee", userApprovalList);
+                request.setComment(request.getInitialAcceptanceComment());
+                //璁剧疆entity
+                entity.setMaintenanceStatus(WeekMaintenanceStatusEnum.WAIT_FINAL_ACCEPTANCE.name());
+                entity.setInitialAcceptanceUser(user.getUsername());
+                entity.setInitialAcceptanceComment(request.getInitialAcceptanceComment());
+                entity.setInitialAcceptanceTime(new Date());
+                //澶勭悊闄勪欢
+                if (CollectionUtil.isNotEmpty(request.getInitialAcceptanceFilesResult())) {
+                    List<FileUploadResult> fileUploadResultList = request.getInitialAcceptanceFilesResult();
+                    ObjectMapper mapper = new ObjectMapper();
+                    try {
+                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
+                        entity.setInitialAcceptanceFiles(referenceFile);
+                    } catch (JsonProcessingException e) {
+                        log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+                    }
+                }
+                break;
+            case WAIT_FINAL_ACCEPTANCE:
+                values.put("dataId", entity.getId());
+                values.put("organization", request.getInitialAcceptanceComment());
+                values.put("comment", request.getInitialAcceptanceComment());
+                request.setComment(request.getInitialAcceptanceComment());
+                //璁剧疆entity
+                entity.setMaintenanceStatus(WeekMaintenanceStatusEnum.COMPLETE.name());
+                entity.setFinalAcceptanceUser(user.getUsername());
+                entity.setFinalAcceptanceComment(request.getFinalAcceptanceComment());
+                entity.setFinalAcceptanceTime(new Date());
+                //澶勭悊闄勪欢
+                if (CollectionUtil.isNotEmpty(request.getFinalAcceptanceFilesResult())) {
+                    List<FileUploadResult> fileUploadResultList = request.getFinalAcceptanceFilesResult();
+                    ObjectMapper mapper = new ObjectMapper();
+                    try {
+                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
+                        entity.setFinalAcceptanceFiles(referenceFile);
+                    } catch (JsonProcessingException e) {
+                        log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+                    }
+                }
+                break;
+        }
+        request.setValues(values);
+
+        // 瀹屾垚娴佺▼浠诲姟
+        Result result = flowTaskService.complete(request);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException("瀹℃壒澶辫触锛岃鍒锋柊鏌ョ湅锛�");
+        }
+        //淇濆瓨宸ュ崟
+        eamWeekMaintenanceOrderMapper.updateById(entity);
+        return true;
+    }
+
+    private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) {
+        List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class);
+        return todoUsers != null && todoUsers.contains(user.getUsername());
+    }
+
+    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;
     }
 
@@ -289,7 +495,7 @@
     public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) {
         //涓氬姟鏄惁骞查娴佺▼锛屼笟鍔″共棰勶紝娴佺▼骞查锛屾寚瀹氫汉鍛樿繘琛屽鐞�
         //鑾峰彇涓嬩竴姝ュ鐞嗕汉
-        Object object=values.get("NextAssignee");
+        Object object = values.get("NextAssignee");
         return (List<String>) object;
     }
 }
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/IFlowMyBusinessService.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/IFlowMyBusinessService.java
index aca2489..0af1a5b 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/IFlowMyBusinessService.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/IFlowMyBusinessService.java
@@ -10,4 +10,10 @@
  */
 public interface IFlowMyBusinessService extends IService<FlowMyBusiness> {
 
+    /**
+     * 鏍规嵁娴佺▼瀹炰緥id 鑾峰彇 鎴戠殑寰呭姙
+     * @param instanceId 娴佺▼瀹炰緥id
+     * @return
+     */
+    FlowMyBusiness getFlowMyBusiness(String instanceId);
 }
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java
index 793799f..5148928 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java
@@ -1,6 +1,7 @@
 package org.jeecg.modules.flowable.apithird.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -124,4 +125,11 @@
         });
         return flowMyBusinessDtoIPage;
     }
+
+    @Override
+    public FlowMyBusiness getFlowMyBusiness(String instanceId) {
+        List<FlowMyBusiness> businessList = super.list(
+                new QueryWrapper<FlowMyBusiness>().eq("process_instance_id", instanceId));
+        return businessList.isEmpty() ? null : businessList.get(0);
+    }
 }

--
Gitblit v1.9.3