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