From 99d6db0aab044b740ce02f57872c1e38ae647b58 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期二, 29 七月 2025 19:00:50 +0800
Subject: [PATCH] 三不原则分析 中心修改 台账导入导出字段修改

---
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportThreeNoSpareServiceImpl.java |  298 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 296 insertions(+), 2 deletions(-)

diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportThreeNoSpareServiceImpl.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportThreeNoSpareServiceImpl.java
index f874280..709081b 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportThreeNoSpareServiceImpl.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportThreeNoSpareServiceImpl.java
@@ -1,11 +1,53 @@
 package org.jeecg.modules.eam.service.impl;
 
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+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.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.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.BusinessCodeConst;
+import org.jeecg.modules.eam.constant.EamReportThreeNoSpareEnum;
+import org.jeecg.modules.eam.dto.EamReportThreeNoSpareDto;
+import org.jeecg.modules.eam.entity.EamEquipment;
 import org.jeecg.modules.eam.entity.EamReportThreeNoSpare;
 import org.jeecg.modules.eam.mapper.EamReportThreeNoSpareMapper;
+import org.jeecg.modules.eam.request.EamReportThreeNoSpareQuery;
+import org.jeecg.modules.eam.service.IEamEquipmentService;
+import org.jeecg.modules.eam.service.IEamReportRepairService;
 import org.jeecg.modules.eam.service.IEamReportThreeNoSpareService;
+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.entity.BaseFactory;
+import org.jeecg.modules.system.entity.BaseFactoryUser;
+import org.jeecg.modules.system.service.IBaseFactoryService;
+import org.jeecg.modules.system.service.IBaseFactoryUserService;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.jeecg.modules.system.vo.UserSelector;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 鈥滀笁涓嶆斁杩囩殑鍘熷垯鈥濆垎鏋愯〃
@@ -13,7 +55,259 @@
  * @Date:   2025-07-17
  * @Version: V1.0
  */
-@Service
-public class EamReportThreeNoSpareServiceImpl extends ServiceImpl<EamReportThreeNoSpareMapper, EamReportThreeNoSpare> implements IEamReportThreeNoSpareService {
+@Service("eamReportThreeNoSpareService")
+public class EamReportThreeNoSpareServiceImpl extends ServiceImpl<EamReportThreeNoSpareMapper, EamReportThreeNoSpare> implements IEamReportThreeNoSpareService , FlowCallBackServiceI {
 
+    @Autowired
+    private IBaseFactoryUserService baseFactoryUserService;
+    @Autowired
+    private IBaseFactoryService baseFactoryService;
+    @Autowired
+    @Lazy
+    private IEamReportRepairService iEamReportRepairService;
+    @Resource
+    private FlowCommonService flowCommonService;
+
+    @Resource
+    private IFlowDefinitionService flowDefinitionService;
+
+    @Resource
+    private IEamEquipmentService eamEquipmentService;
+
+    @Resource
+    private IFlowMyBusinessService flowMyBusinessService;
+
+    @Resource
+    private TaskService taskService;
+
+    @Resource
+    private IFlowTaskService flowTaskService;
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+
+    /**
+     * 鍒嗛〉鍒楄〃
+     * @param page
+     * @param EamReportThreeNoSpareQuery
+     * @return
+     */
+    @Override
+    public IPage<EamReportThreeNoSpareQuery> pageList(Page<EamReportThreeNoSpareQuery> page, EamReportThreeNoSpareQuery EamReportThreeNoSpareQuery){
+        QueryWrapper<EamReportThreeNoSpareQuery> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("ertns.del_flag", CommonConstant.DEL_FLAG_0);
+        //鐢ㄦ埛鏁版嵁鏉冮檺
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) {
+            return page;
+        }
+        if (StringUtils.isNotBlank(sysUser.getEamEquipmentIds())) {
+            //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
+            List<String> equipArr = Arrays.asList(sysUser.getEamEquipmentIds().split(","));
+            queryWrapper.in("e.equipment_code", equipArr);
+        } else {
+            //娌℃湁閫夋嫨璁惧锛屾牴鎹腑蹇冭繃婊よ澶�
+            List<BaseFactoryUser> baseFactoryUserList = baseFactoryUserService.
+                    list(new LambdaQueryWrapper<BaseFactoryUser>().eq(BaseFactoryUser::getUserId, sysUser.getId()));
+            if (!CollectionUtils.isEmpty(baseFactoryUserList)) {
+                Set<String> factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toSet());
+                Set<String> factoryCode = baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getOrgCode).collect(Collectors.toSet());
+                queryWrapper.in("e.factory_org_code", factoryCode);
+            } else {
+                return page;
+            }
+        }
+        //鏌ヨ鏉′欢杩囨护
+        if (EamReportThreeNoSpareQuery != null) {
+            if (StringUtils.isNotBlank(EamReportThreeNoSpareQuery.getEquipmentId())) {
+                queryWrapper.eq("ertns.equipment_id", EamReportThreeNoSpareQuery.getEquipmentId());
+            }
+            if (StringUtils.isNotBlank(EamReportThreeNoSpareQuery.getEquipmentCode())) {
+                queryWrapper.like("e.equipment_code", EamReportThreeNoSpareQuery.getEquipmentCode());
+            }
+            if (StringUtils.isNotBlank(EamReportThreeNoSpareQuery.getEquipmentName())) {
+                queryWrapper.like("e.equipment_name", EamReportThreeNoSpareQuery.getEquipmentName());
+            }
+            if (StringUtils.isNotBlank(EamReportThreeNoSpareQuery.getSubmitStatus())) {
+                queryWrapper.eq("ertns.submit_status", EamReportThreeNoSpareQuery.getSubmitStatus());
+            }
+            if (StringUtils.isNotBlank(EamReportThreeNoSpareQuery.getCauseAnalysis())) {
+                queryWrapper.like("ertns.cause_analysis", EamReportThreeNoSpareQuery.getCauseAnalysis());
+            }
+            if (StringUtils.isNotBlank(EamReportThreeNoSpareQuery.getTrainingFormat())) {
+                queryWrapper.like("ertns.training_format", EamReportThreeNoSpareQuery.getTrainingFormat());
+            }
+            if (StringUtils.isNotBlank(EamReportThreeNoSpareQuery.getTrainingContent())) {
+                queryWrapper.like("ertns.training_content", EamReportThreeNoSpareQuery.getTrainingContent());
+            }
+            //鎺掑簭
+            if (StringUtils.isNotBlank(EamReportThreeNoSpareQuery.getColumn()) && StringUtils.isNotBlank(EamReportThreeNoSpareQuery.getOrder())) {
+                String column = EamReportThreeNoSpareQuery.getColumn();
+                if (column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) {
+                    column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX));
+                }
+                if (DataBaseConstant.SQL_ASC.equalsIgnoreCase(EamReportThreeNoSpareQuery.getOrder())) {
+                    queryWrapper.orderByAsc("ertns." + oConvertUtils.camelToUnderline(column));
+                } else {
+                    queryWrapper.orderByDesc("ertns." + oConvertUtils.camelToUnderline(column));
+                }
+            } else {
+                queryWrapper.orderByDesc("ertns.create_time");
+            }
+        } else {
+            queryWrapper.orderByDesc("ertns.create_time");
+        }
+        return baseMapper.queryPageList(page, queryWrapper);
+    }
+
+    /**
+     * 鎿嶄綔宸ユ彁浜�-鍙戣捣娴佺▼
+     * @param id
+     * @return
+     */
+    @Override
+    public Result<?> submit(String id){
+        EamReportThreeNoSpare eamReportThreeNoSpare=this.getById(id);
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        EamEquipment eamEquipment = eamEquipmentService.getById(eamReportThreeNoSpare.getEquipmentId());
+        //鏍规嵁user鐨勫矖浣嶈繘琛屽垽鏂笅涓�姝ュ鐞嗕汉
+        List<UserSelector> userSelectorList = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0019);
+        // 鍚姩璁惧浜嬫晠鐧昏娴佺▼
+        flowCommonService.initActBusiness("璁惧缂栧彿锛�" + eamEquipment.getEquipmentCode() + ", 璁惧鍚嶇О锛�" + eamEquipment.getEquipmentName()+"鍙戣捣鈥滀笁涓嶆斁杩囩殑鍘熷垯鈥濆垎鏋愭祦绋�",
+                eamReportThreeNoSpare.getId(),
+                "eamReportThreeNoSpareService",
+                "eam_report_three_no_spare",
+                null);
+        Map<String, Object> variables = new HashMap<>();
+        variables.put("dataId", eamReportThreeNoSpare.getId());
+        variables.put("organization", "鍩硅浜烘彁浜ゅ惎鍔ㄦ祦绋�");
+        variables.put("comment", "鍩硅浜烘彁浜ゅ崟鍚姩娴佺▼");
+        variables.put("proofreading", true);
+        if (CollectionUtils.isEmpty(userSelectorList)) {
+            throw new JeecgBootException("璁惧鏈瓨鍦ㄥ鏍搁瀵硷紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+        }else {
+            List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+            variables.put("NextAssignee", usernameList);
+        }
+        Result result = flowDefinitionService.startProcessInstanceByKey("eam_report_three_no_spare", variables);
+        if (!result.isSuccess()) {
+            return Result.error("娴佺▼鍚姩澶辫触");
+        } else {
+            eamReportThreeNoSpare.setTrainingUser(user.getUsername());
+            eamReportThreeNoSpare.setTrainingUserTime(new Date());
+            eamReportThreeNoSpare.setSubmitStatus(EamReportThreeNoSpareEnum.PENDING_APPROVAL.name());
+            this.updateById(eamReportThreeNoSpare);
+            return result;
+        }
+    }
+
+    /**
+     * 娴佺▼瀹℃牳
+     * @param eamReportThreeNoSpareDto
+     */
+    @Override
+    public Result<?> audit(EamReportThreeNoSpareDto eamReportThreeNoSpareDto){
+        EamReportThreeNoSpare eamReportThreeNoSpare = this.baseMapper.selectById(eamReportThreeNoSpareDto.getId());
+        if (eamReportThreeNoSpare == null) {
+            throw new JeecgBootException("宸ュ崟涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒");
+        }
+        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (user == null || StrUtil.isBlank(user.getId())) {
+            throw new JeecgBootException("鏈幏鍙栧埌鐧诲綍鐢ㄦ埛锛岃閲嶆柊鐧诲綍鍚庡啀璇曪紒");
+        }
+        eamReportThreeNoSpareDto.setAssignee(user.getUsername());
+        // 鑾峰彇娴佺▼涓氬姟璁板綍
+        FlowMyBusiness flowMyBusiness = flowMyBusinessService.getFlowMyBusiness(eamReportThreeNoSpareDto.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(eamReportThreeNoSpareDto.getEquipmentId());
+        if (equipment == null) {
+            throw new JeecgBootException("璁惧涓嶅瓨鍦紝璇锋鏌ワ紒");
+        }
+        //娴佺▼鍙橀噺
+        Map<String, Object> values = new HashMap<>();
+        values.put("dataId", eamReportThreeNoSpareDto.getId());
+        values.put("assignee", user.getId());
+        if(StrUtil.isEmpty(eamReportThreeNoSpareDto.getLeaderOpinion())){
+            eamReportThreeNoSpareDto.setLeaderOpinion("");
+        }
+        values.put("organization", eamReportThreeNoSpareDto.getLeaderOpinion());
+        values.put("comment", eamReportThreeNoSpareDto.getLeaderOpinion());
+        values.put("leaderConfirmResult", eamReportThreeNoSpareDto.getLeaderConfirmResult());
+        values.put("proofreading", true);
+        if ("1".equals(eamReportThreeNoSpareDto.getLeaderConfirmResult())){
+            eamReportThreeNoSpare.setSubmitStatus(EamReportThreeNoSpareEnum.REPAIR_COMPLETED.name());
+        }else {
+            eamReportThreeNoSpare.setSubmitStatus(EamReportThreeNoSpareEnum.REJECTED.name());
+        }
+        eamReportThreeNoSpare.setUnitLeader(user.getUsername());
+        eamReportThreeNoSpare.setLeaderOpinion(eamReportThreeNoSpareDto.getLeaderOpinion());
+        eamReportThreeNoSpare.setLeaderConfirmResult(eamReportThreeNoSpareDto.getLeaderConfirmResult());
+        eamReportThreeNoSpare.setLeaderConfirmTime(new Date());
+        eamReportThreeNoSpareDto.setComment(eamReportThreeNoSpareDto.getLeaderOpinion());
+        eamReportThreeNoSpareDto.setValues(values);
+        //淇濆瓨宸ュ崟
+        this.updateById(eamReportThreeNoSpare);
+        Result result = flowTaskService.complete(eamReportThreeNoSpareDto);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException("瀹℃壒澶辫触锛岃鍒锋柊鏌ョ湅锛�");
+        }
+        return Result.ok("瀹℃壒鎴愬姛");
+    }
+
+    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) {
+
+    }
+
+    @Override
+    public Object getBusinessDataById(String dataId) {
+        return null;
+    }
+
+    @Override
+    public Map<String, Object> flowValuesOfTask(String taskNameId, Map<String, Object> values) {
+        return Collections.emptyMap();
+    }
+
+    @Override
+    public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) {
+        //鑾峰彇涓嬩竴姝ュ鐞嗕汉
+        Object object = values.get("NextAssignee");
+        return (List<String>) object;
+    }
 }

--
Gitblit v1.9.3