From 826d7a2d241c24a1ef47fe0e69533a18b3464bc2 Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期五, 04 七月 2025 21:16:46 +0800 Subject: [PATCH] art:技术状态鉴定工单变更-数据库设计 --- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java | 307 +++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 246 insertions(+), 61 deletions(-) diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java index 6d30e4b..d69efd8 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java @@ -1,35 +1,55 @@ 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.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 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.exception.JeecgBootException; import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.modules.eam.base.entity.BaseFactory; +import org.jeecg.modules.eam.base.entity.BaseFactoryUser; +import org.jeecg.modules.eam.base.service.IBaseFactoryService; +import org.jeecg.modules.eam.base.service.IBaseFactoryUserService; +import org.jeecg.modules.eam.constant.BusinessCodeConst; import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum; +import org.jeecg.modules.eam.entity.EamEquipment; import org.jeecg.modules.eam.entity.EamMaintenanceStandard; import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail; import org.jeecg.modules.eam.mapper.EamMaintenanceStandardMapper; import org.jeecg.modules.eam.request.EamMaintenanceStandardRequest; +import org.jeecg.modules.eam.service.IEamEquipmentService; import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService; import org.jeecg.modules.eam.service.IEamMaintenanceStandardService; +import org.jeecg.modules.eam.vo.EamMaintenanceStandardVo; +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.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -38,15 +58,31 @@ * @Date: 2025-03-26 * @Version: V1.0 */ -@Service -public class EamMaintenanceStandardServiceImpl extends ServiceImpl<EamMaintenanceStandardMapper, EamMaintenanceStandard> implements IEamMaintenanceStandardService { +@Service("IEamMaintenanceStandardService") +public class EamMaintenanceStandardServiceImpl extends ServiceImpl<EamMaintenanceStandardMapper, EamMaintenanceStandard> implements IEamMaintenanceStandardService , FlowCallBackServiceI { @Resource private EamMaintenanceStandardMapper eamMaintenanceStandardMapper; - @Autowired private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService; - + @Autowired + private IBaseFactoryUserService baseFactoryUserService; + @Autowired + private IBaseFactoryService baseFactoryService; + @Resource + private FlowCommonService flowCommonService; + @Resource + private IFlowDefinitionService flowDefinitionService; + @Autowired + private IFlowTaskService flowTaskService; + @Autowired + private TaskService taskService; + @Autowired + private IFlowMyBusinessService flowMyBusinessService; + @Autowired + private ISysUserService sysUserService; + @Autowired + private IEamEquipmentService eamEquipmentService; @Override public IPage<EamMaintenanceStandard> queryPageList(Page<EamMaintenanceStandard> page, EamMaintenanceStandard eamMaintenanceStandard) { QueryWrapper<EamMaintenanceStandard> queryWrapper = new QueryWrapper<>(); @@ -56,13 +92,19 @@ if (sysUser == null) { return page; } - if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) { + if (StringUtils.isNotBlank(sysUser.getEamEquipmentIds())) { //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧 - List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(",")); + List<String> equipArr = Arrays.asList(sysUser.getEamEquipmentIds().split(",")); queryWrapper.in("e.equipment_code", equipArr); } else { - //娌℃湁閫夋嫨璁惧锛屾牴鎹溅闂磋繃婊よ澶� - queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id ", sysUser.getId()); + //娌℃湁閫夋嫨璁惧锛屾牴鎹腑蹇冭繃婊よ澶� + List<BaseFactoryUser> baseFactoryUserList=baseFactoryUserService. + list(new LambdaQueryWrapper<BaseFactoryUser>().eq(BaseFactoryUser::getUserId,sysUser.getId())); + if(!CollectionUtils.isEmpty(baseFactoryUserList)){ + List<String> factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toList()); + List<String> factoryCode= baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getFactoryCode).collect(Collectors.toList()); + queryWrapper.in("e.factory_code", factoryCode); + } } if(eamMaintenanceStandard != null) { //缂栫爜 妯$硦鏌ヨ @@ -71,7 +113,7 @@ } //鍚嶇О 妯$硦鏌ヨ if(StringUtils.isNotBlank(eamMaintenanceStandard.getStandardName())) { - queryWrapper.like("ems.standard_name", eamMaintenanceStandard.getStandardCode()); + queryWrapper.like("ems.standard_name", eamMaintenanceStandard.getStandardName()); } //璁惧 if(StringUtils.isNotBlank(eamMaintenanceStandard.getEquipmentId())) { @@ -100,13 +142,8 @@ @Transactional(rollbackFor = Exception.class) public boolean addMaintenanceStandard(EamMaintenanceStandardRequest standardRequest) { EamMaintenanceStandard entity = new EamMaintenanceStandard(); - entity.setStandardCode(standardRequest.getStandardCode()); - entity.setStandardName(standardRequest.getStandardName()); - entity.setMaintenanceCategory(standardRequest.getMaintenanceCategory()); - entity.setMaintenancePeriod(standardRequest.getMaintenancePeriod()); - entity.setInitialDate(standardRequest.getInitialDate()); - entity.setFileCode(standardRequest.getFileCode()); - entity.setStandardStatus(MaintenanceStandardStatusEnum.NORMAL.name()); + BeanUtils.copyProperties(standardRequest, entity); + entity.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); //鐗堟湰閫掑 entity.setStandardVersion(CommonConstant.OPERATE_TYPE_1); //璁惧澶勭悊 @@ -117,17 +154,6 @@ EamMaintenanceStandard exist = checkDuplicate(entity.getEquipmentId(), entity.getMaintenanceCategory()); if(exist != null){ throw new JeecgBootException("璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�"); - } - //澶勭悊闄勪欢 - if(CollectionUtil.isNotEmpty(standardRequest.getFileList())) { - FileUploadResult fileUploadResult = standardRequest.getFileList().get(0); - ObjectMapper mapper = new ObjectMapper(); - try { - String referenceFile = mapper.writeValueAsString(fileUploadResult); - entity.setReferenceFile(referenceFile); - } catch (JsonProcessingException e) { - log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e); - } } eamMaintenanceStandardMapper.insert(entity); //澶勭悊鏄庣粏鏁版嵁 @@ -149,20 +175,6 @@ } entity.setStandardName(standardRequest.getStandardName()); entity.setMaintenancePeriod(standardRequest.getMaintenancePeriod()); - entity.setFileCode(standardRequest.getFileCode()); - //澶勭悊闄勪欢 - if(CollectionUtil.isNotEmpty(standardRequest.getFileList())) { - FileUploadResult fileUploadResult = standardRequest.getFileList().get(0); - ObjectMapper mapper = new ObjectMapper(); - try { - String referenceFile = mapper.writeValueAsString(fileUploadResult); - entity.setReferenceFile(referenceFile); - } catch (JsonProcessingException e) { - log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e); - } - }else { - entity.setReferenceFile(null); - } eamMaintenanceStandardMapper.updateById(entity); //澶勭悊璇︽儏 if(CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) { @@ -208,8 +220,7 @@ newEntity.setMaintenanceCategory(standardRequest.getMaintenanceCategory()); newEntity.setMaintenancePeriod(standardRequest.getMaintenancePeriod()); newEntity.setInitialDate(standardRequest.getInitialDate()); - newEntity.setFileCode(standardRequest.getFileCode()); - newEntity.setStandardStatus(MaintenanceStandardStatusEnum.NORMAL.name()); + newEntity.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); //鐗堟湰閫掑 newEntity.setStandardVersion(entity.getStandardVersion() + 1); //璁惧澶勭悊 @@ -220,17 +231,6 @@ EamMaintenanceStandard exist = checkDuplicate(newEntity.getEquipmentId(), newEntity.getMaintenanceCategory()); if(exist != null){ throw new JeecgBootException("璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�"); - } - //澶勭悊闄勪欢 - if(CollectionUtil.isNotEmpty(standardRequest.getFileList())) { - FileUploadResult fileUploadResult = standardRequest.getFileList().get(0); - ObjectMapper mapper = new ObjectMapper(); - try { - String referenceFile = mapper.writeValueAsString(fileUploadResult); - newEntity.setReferenceFile(referenceFile); - } catch (JsonProcessingException e) { - log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e); - } } eamMaintenanceStandardMapper.insert(newEntity); //澶勭悊鏄庣粏鏁版嵁 @@ -254,7 +254,7 @@ queryWrapper.eq(EamMaintenanceStandard::getEquipmentId, equipmentId); queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory); queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0); - queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.NORMAL.name()); + queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); queryWrapper.orderByDesc(EamMaintenanceStandard::getStandardVersion); List<EamMaintenanceStandard> list = eamMaintenanceStandardMapper.selectList(queryWrapper); @@ -277,7 +277,7 @@ query.setEquipmentId(equipmentId); query.setKeyword(keyword); query.setMaintenanceCategory(maintenanceCategory); - query.setStandardStatus(MaintenanceStandardStatusEnum.NORMAL.name()); + query.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); IPage<EamMaintenanceStandard> pageData = this.queryPageList(page, query); return pageData.getRecords(); } @@ -287,7 +287,192 @@ LambdaQueryWrapper<EamMaintenanceStandard> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0); queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory); - queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.NORMAL.name()); + queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); return eamMaintenanceStandardMapper.selectList(queryWrapper); } + + + /*娴佺▼涓氬姟浠g爜--------------------------寮�濮�*/ + + /** + * 娴佺▼鍚姩,淇濆瓨瀵瑰簲鐨勬暟鎹� + * @param id + * @return + */ + @Override + public Result<?> saveEamMaintenanceStandardProcess(String id){ + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + EamMaintenanceStandard maintenanceStandard=this.getById(id); + if (maintenanceStandard==null){ + return Result.error("鏈壘鍒板搴斾繚鍏绘爣鍑�"); + } + System.out.println("淇濆吇瑙勮寖娴佺▼锛�" + maintenanceStandard.getId()); + flowCommonService.initActBusiness(maintenanceStandard.getStandardName()+"瑙勮寖杩涜娴佺▼瀹℃牳", + maintenanceStandard.getId(), "IEamMaintenanceStandardService", "eam_maintenance_standard", null); + Map<String, Object> variables = new HashMap<>(); + variables.put("dataId", maintenanceStandard.getId()); + variables.put("organization", "淇濆吇瑙勮寖鍚姩娴佺▼"); + variables.put("comment", "淇濆吇瑙勮寖鍚姩娴佺▼"); + variables.put("proofreading",true); + Result result= flowDefinitionService.startProcessInstanceByKey("eam_maintenance_standard", variables); + if (!result.isSuccess()) { + super.removeById(maintenanceStandard.getId()); + }else { + maintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name()); + maintenanceStandard.setDesigner(user.getUsername()); + maintenanceStandard.setDesignTime(new Date()); + eamMaintenanceStandardMapper.updateById(maintenanceStandard); + //鑾峰彇flow鐨勬祦绋嬪疄渚媔d,璁剧疆涓嬩竴姝ョ殑澶勭悊浜哄憳 + List<FlowMyBusiness> businessList = flowMyBusinessService.list( + new QueryWrapper<FlowMyBusiness>() + .eq("data_id", maintenanceStandard.getId()) + ); + if (businessList.isEmpty()) { + return Result.error("娴佺▼璁板綍涓嶅瓨鍦�"); + } + FlowMyBusiness flowMyBusiness = businessList.get(0); + EamEquipment eamEquipment=eamEquipmentService.getById(maintenanceStandard.getEquipmentId()); + BaseFactory baseFactory=baseFactoryService.getOne(new QueryWrapper<BaseFactory>().eq("org_code", eamEquipment.getFactoryOrgCode())); + List<UserSelector> userSelectorList=sysUserService.selectOperatorFactoryList(eamEquipment.getEquipmentCode(),baseFactory.getId(), BusinessCodeConst.PCR0007); + if (!CollectionUtils.isEmpty(userSelectorList)) { + List<String> usernameList=userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList()); + flowMyBusiness.setTodoUsers(JSON.toJSONString(usernameList)); + flowMyBusinessService.updateById(flowMyBusiness); + } + } + return result; + } + + /** + * 瀹℃壒鎿嶄綔 + * @param eamMaintenanceStandardVo + * @return + */ + @Override + public Result<?> auditEamMaintenanceStandard(EamMaintenanceStandardVo eamMaintenanceStandardVo){ + try { + // 鍙傛暟鏍¢獙 + if (StrUtil.isEmpty(eamMaintenanceStandardVo.getTaskId()) || StrUtil.isEmpty(eamMaintenanceStandardVo.getDataId())) { + return Result.error("鍙傛暟閿欒"); + } + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = user.getId(); + eamMaintenanceStandardVo.setAssignee(user.getUsername()); + if (StrUtil.isEmpty(userId)) { + return Result.error("鏈壘鍒板搴旂敤鎴�"); + } + + // 鏁版嵁鏌ヨ + EamMaintenanceStandard eamMaintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId()); + if (eamMaintenanceStandard == null) { + return Result.error("鏈壘鍒板搴斾繚鍏绘爣鍑�"); + } + + // 2. 鏌ヨ娴佺▼涓氬姟璁板綍锛堝鐞嗙┖缁撴灉锛� + List<FlowMyBusiness> businessList = flowMyBusinessService.list( + new QueryWrapper<FlowMyBusiness>() + .eq("process_instance_id", eamMaintenanceStandardVo.getInstanceId()) + ); + if (businessList.isEmpty()) { + return Result.error("娴佺▼璁板綍涓嶅瓨鍦�"); + } + FlowMyBusiness flowMyBusiness = businessList.get(0); + + // 3. 鏍¢獙鐢ㄦ埛鏄惁涓哄�欓�夊鐞嗕汉 + List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class); + if (todoUsers == null || !todoUsers.contains(user.getUsername())) { + return Result.error("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔�"); + } + + // 4. 璁ら浠诲姟锛堝鐞嗗凡琚棰嗙殑鎯呭喌锛� + String taskId = flowMyBusiness.getTaskId(); + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + if (task == null) { + return Result.error("浠诲姟涓嶅瓨鍦ㄦ垨宸插畬鎴�"); + } + if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) { + return Result.error("浠诲姟宸茶浠栦汉璁ら"); + } + taskService.claim(taskId, user.getUsername()); + + // 璁剧疆娴佺▼鍙橀噺 + Map<String, Object> values = setProcessVariables(eamMaintenanceStandard, userId, eamMaintenanceStandardVo); + eamMaintenanceStandardVo.setValues(values); + + // 瀹屾垚娴佺▼浠诲姟 + Result result = flowTaskService.complete(eamMaintenanceStandardVo); + if (result.isSuccess()) { + if (eamMaintenanceStandardVo.getRepairManagerApproveResult() != null) { + if (eamMaintenanceStandardVo.getRepairManagerApproveResult().equals("1")){ + eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name()); + }else { + eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); + } + eamMaintenanceStandard.setRepairManager(user.getUsername()); + eamMaintenanceStandard.setRepairManagerApproveResult(eamMaintenanceStandardVo.getRepairManagerApproveResult()); + eamMaintenanceStandard.setRepairManagerApproveTime(new Date()); + eamMaintenanceStandard.setRepairManagerApproveComment(eamMaintenanceStandardVo.getComment()); + } + if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult() != null) { + if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult().equals("1")){ + eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.START.name()); + }else { + eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); + } + eamMaintenanceStandard.setTechnicalManager(user.getUsername()); + eamMaintenanceStandard.setTechnicalManagerApproveResult(eamMaintenanceStandardVo.getTechnicalManagerApproveResult()); + eamMaintenanceStandard.setTechnicalManagerApproveTime(new Date()); + eamMaintenanceStandard.setTechnicalManagerApproveComment(eamMaintenanceStandardVo.getComment()); + } + this.updateById(eamMaintenanceStandard); + } else { + return result; + } + + return Result.OK("鎿嶄綔鎴愬姛"); + } catch (Exception e) { + return Result.error("鎿嶄綔澶辫触锛�" + e.getMessage()); + } + } + + private Map<String, Object> setProcessVariables(EamMaintenanceStandard eamMaintenanceStandard, String userId, EamMaintenanceStandardVo eamMaintenanceStandardVo) { + Map<String, Object> values = new HashMap<>(); + values.put("dataId", eamMaintenanceStandard.getId()); + values.put("assignee", userId); + values.put("organization", eamMaintenanceStandardVo.getComment()); + values.put("comment", eamMaintenanceStandardVo.getComment()); + if (eamMaintenanceStandardVo.getRepairManagerApproveResult() != null) { + values.put("repairManagerApproveResult", eamMaintenanceStandardVo.getRepairManagerApproveResult()); + } + if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult() != null) { + values.put("technicalManagerApproveResult", eamMaintenanceStandardVo.getTechnicalManagerApproveResult()); + } + return values; + } + + + @Override + public void afterFlowHandle(FlowMyBusiness business) { + business.getTaskNameId();//鎺ヤ笅鏉ュ鎵圭殑鑺傜偣 + business.getValues();//鍓嶇浼犺繘鏉ョ殑鍙傛暟 + business.getActStatus(); + } + + @Override + public Object getBusinessDataById(String dataId) { + return this.getById(dataId); + } + + @Override + public Map<String, Object> flowValuesOfTask(String taskNameId, Map<String, Object> values) { + return null; + } + + @Override + public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) { + //涓氬姟鏄惁骞查娴佺▼锛屼笟鍔″共棰勶紝娴佺▼骞查锛屾寚瀹氫汉鍛樿繘琛屽鐞� + return null; + } + + /*娴佺▼涓氬姟浠g爜--------------------------缁撴潫*/ } -- Gitblit v1.9.3