diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/controller/BackApplyInfoController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/controller/BackApplyInfoController.java index d5cd0cef..5dc7ebde 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/controller/BackApplyInfoController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/controller/BackApplyInfoController.java @@ -287,6 +287,17 @@ public class BackApplyInfoController extends BaseController { return backApplyInfoService.selectBackApplyInfoById(id, keyWord); } + /** + * 获取材料站退料任务详细信息 + */ + @ApiOperation(value = "获取材料站退料任务详细信息") +// @RequiresPermissions("back:info:query") + @GetMapping(value = "/clz/{id}") + public AjaxResult getInfoClz(@PathVariable("id") Long id, + @RequestParam(value = "keyWord", required = false) String keyWord) { + return backApplyInfoService.selectBackApplyInfoByIdClz(id, keyWord); + } + /** * 查询退料任务详情信息 * @param backApplyDetails diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/service/IBackApplyInfoService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/service/IBackApplyInfoService.java index bb6fabf6..1d3b2617 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/service/IBackApplyInfoService.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/service/IBackApplyInfoService.java @@ -249,5 +249,7 @@ public interface IBackApplyInfoService { int syncProject(BackApplyInfo backApplyInfo); int syncProjectDetails(BackApplyInfo backApplyInfo); + + AjaxResult selectBackApplyInfoByIdClz(Long id, String keyWord); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/service/impl/BackApplyInfoServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/service/impl/BackApplyInfoServiceImpl.java index 1aacbe58..2b6712df 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/service/impl/BackApplyInfoServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/service/impl/BackApplyInfoServiceImpl.java @@ -201,6 +201,111 @@ public class BackApplyInfoServiceImpl implements IBackApplyInfoService { return ajaxResult; } + /** + * 查询材料站退料任务 - 性能优化版 + * + * @param id 退料任务主键 + * @return 退料任务 + */ + @Override + public AjaxResult selectBackApplyInfoByIdClz(Long id, String keyWord) { + BackApplyRequestVo backApplyRequestVo = new BackApplyRequestVo(); + //先根据外层id查询上层信息 + BackApplyInfo backApplyInfo = backApplyInfoMapper.selectBackApplyInfoById(id); + Long userId = SecurityUtils.getLoginUser().getUserid(); + Set userRoles = SecurityUtils.getLoginUser().getRoles(); + // 检查用户是否具有特殊角色 + + backApplyInfo.setUserId(null); + + // 首先根据用户名去ma_type_manage表查询是否存在绑定物资信息 + /*List typeIdList = backApplyInfoMapper.selectTypeIdList(userId); + if (CollectionUtils.isEmpty(typeIdList)) { + backApplyInfo.setUserId(userId == 0 ? null : userId); + }*/ + + // 设置审批人签名url,目前固定查询夏成刚签名信息 + BackApplyInfo info = backApplyInfoMapper.getDirectAuditUrl(backApplyInfo); + if (info != null && StringUtils.isNotBlank(info.getDirectAuditSignUrl())) { + backApplyInfo.setDirectAuditSignType(info.getDirectAuditSignType()); + if (!info.getDirectAuditSignUrl().startsWith("http")) { + backApplyInfo.setDirectAuditSignUrl("data:image/png;base64," + info.getDirectAuditSignUrl()); + } else { + backApplyInfo.setDirectAuditSignUrl(info.getDirectAuditSignUrl()); + } + } + + // 设置退料人签名url + if (StringUtils.isNotBlank(backApplyInfo.getBackSignUrl())) { + if (!backApplyInfo.getBackSignUrl().startsWith("http")) { + backApplyInfo.setBackSignUrl("data:image/png;base64," + backApplyInfo.getBackSignUrl()); + } + } + + // 设置制单人签名url + if (StringUtils.isNotBlank(backApplyInfo.getSignUrl())) { + if (!backApplyInfo.getSignUrl().startsWith("http")) { + backApplyInfo.setSignUrl("data:image/png;base64," + backApplyInfo.getBackSignUrl()); + } + } + + backApplyRequestVo.setBackApplyInfo(backApplyInfo); + + //查询退料详情信息 + backApplyInfo.setKeyWord(keyWord); + // 移出maCodeList集合中状态不为在用的数据 + List newCodeList = new ArrayList<>(); + List backApplyDetailsList = backApplyInfoMapper.selectBackApplyDetailsListByTaskId(backApplyInfo); + + if (CollectionUtils.isNotEmpty(backApplyDetailsList)) { + /*if (!CollectionUtils.isEmpty(typeIdList)) { + backApplyDetailsList = backApplyDetailsList.stream() + .filter(item -> typeIdList.contains(item.getFirstId())) + .collect(Collectors.toList()); + }*/ + + // 核心优化:减少数据库查询次数 + // 1. 一次性查询编码设备信息 + List maCodeList = backApplyInfoMapper.selectByCode(id); + + // 2. 处理状态不为在用的设备编码 + if ("0".equals(backApplyInfo.getStatus()) && CollectionUtils.isNotEmpty(maCodeList)) { + newCodeList = filterNonInUseEquipment(maCodeList); + maCodeList = filterInUseEquipment(maCodeList); + } + + // 3. 优化:只有在有编码设备时才查询类型树,减少不必要的复杂查询 + Map typeNumMap = new HashMap<>(); + if (hasCodedEquipment(backApplyDetailsList)) { + List listL4 = mapper.getUseTypeTreeL4(backApplyInfo); + typeNumMap = buildTypeNumMappingSimple(listL4); + } + + // 4. 一次性查询所有附件信息 + Map> allFileInfoMap = fetchAllFileInfosOptimized(id); + + // 5. 预构建映射表 + Map> typeCodeMap = buildTypeCodeMappingSimple(maCodeList); + Map maIdCodeMap = buildMaIdCodeMappingSimple(maCodeList); + + // 6. 快速处理每个退料详情 + for (BackApplyDetails details : backApplyDetailsList) { + processBackApplyDetailsSimple(details, typeNumMap, typeCodeMap, allFileInfoMap, newCodeList, maIdCodeMap); + } + + backApplyRequestVo.setBackApplyDetailsList(backApplyDetailsList); + } + + AjaxResult ajaxResult = AjaxResult.success(); + ajaxResult.put("data", backApplyRequestVo); + + if (CollectionUtils.isNotEmpty(newCodeList)) { + String msg = buildNotificationMessage(newCodeList); + ajaxResult.put("msg", msg); + } + return ajaxResult; + } + /** * 检查是否有编码设备 */ diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/mapper/LeaseTaskMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/mapper/LeaseTaskMapper.java index db6f81ad..848652be 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/mapper/LeaseTaskMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/mapper/LeaseTaskMapper.java @@ -187,7 +187,7 @@ public interface LeaseTaskMapper { void updateWorkPeopleInfo(WorkPeopleInfo peopleInfo); - WorkPeopleInfo getWorkPeopleInfo(WorkPeopleInfo peopleInfo); + List getWorkPeopleInfo(WorkPeopleInfo peopleInfo); /** * 根据code查询领用申请详情 diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/impl/LeaseTaskServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/impl/LeaseTaskServiceImpl.java index c38f6fbb..c0aa71ef 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/impl/LeaseTaskServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/impl/LeaseTaskServiceImpl.java @@ -284,6 +284,7 @@ public class LeaseTaskServiceImpl implements ILeaseTaskService { private void createWorkOrderAndPeople(SysUser sysUser, LeaseApplyInfo leaseApplyInfo, TmTask tmTask, int newId) { //获取工程名称 + /********* information表中塞 app类型的工单 *********/ String projectName = mapper.getProjectNameById(leaseApplyInfo.getProjectId()); leaseApplyInfo.setProjectName(projectName); String id = UUID.randomUUID().toString().replace("-", ""); @@ -309,15 +310,13 @@ public class LeaseTaskServiceImpl implements ILeaseTaskService { workApplyInfo.setWebUrl(webUrlBase + queryParams); workApplyInfo.setRout(webUrlBase + queryParams); + int countWork = mapper.insertWorkOrder(workApplyInfo); + //查询审批人集合 + WorkPeopleInfo info = new WorkPeopleInfo(); + info.setFlowId(newId); + List workPeopleInfoList = mapper.selectWorkPeopleInfoList(info.getFlowId()); if (countWork > 0) { - - //查询审批人集合 - WorkPeopleInfo info = new WorkPeopleInfo(); - info.setFlowId(newId); - - List workPeopleInfoList = mapper.selectWorkPeopleInfoList(info.getFlowId()); - if(workPeopleInfoList != null && workPeopleInfoList.size() > 0){ WorkPeopleInfo person = workPeopleInfoList.get(0); String roleIds = person.getRoleIds(); @@ -341,6 +340,50 @@ public class LeaseTaskServiceImpl implements ILeaseTaskService { } } + + /********* information表中塞 app类型的工单 *********/ + + /********* information表中塞 web类型的工单 *********/ + WorkApplyInfo workApplyInfoWeb = new WorkApplyInfo(); + workApplyInfoWeb = workApplyInfo; + String idWeb = UUID.randomUUID().toString().replace("-", ""); + String webUrlBaseWeb = "/mea-view/#/business-details/receive-apply/index"; + String queryParamsWeb = UriComponentsBuilder.newInstance() + .queryParam("appId", "b72d4088a412217dc807bcc3620d4408") + .queryParam("taskId", tmTask.getTaskId()) + .queryParam("id", leaseApplyInfo.getId()) + .build().encode().toUriString(); + workApplyInfoWeb.setId(idWeb); + workApplyInfoWeb.setTypeId(2025051001); + workApplyInfoWeb.setWebAppId("b72d4088a412217dc807bcc3620d4408"); + workApplyInfoWeb.setWebUrl(webUrlBaseWeb + queryParamsWeb); + workApplyInfoWeb.setRout(webUrlBaseWeb + queryParamsWeb); + int countWorkWeb = mapper.insertWorkOrder(workApplyInfoWeb); + if (countWorkWeb > 0) { + if(workPeopleInfoList != null && workPeopleInfoList.size() > 0){ + WorkPeopleInfo person = workPeopleInfoList.get(0); + String roleIds = person.getRoleIds(); + String[] roleIdArray = roleIds.split(","); + long deptId = sysUser.getDeptId(); + //根据角色和部门查询用户集合 + WorkPeopleInfo param = new WorkPeopleInfo(); + param.setRoleIdArray(roleIdArray); + param.setDeptId(deptId); + List userList = mapper.selectUserListByRoleAndDept(param); + for (WorkPeopleInfo user : userList) { + WorkPeopleInfo workPeopleInfo = new WorkPeopleInfo(); + workPeopleInfo.setId(UUID.randomUUID().toString().replace("-", "")); + workPeopleInfo.setInformationId(idWeb); + workPeopleInfo.setReceiverUsername(user.getReceiverUsername()); + workPeopleInfo.setReadState(0); + workPeopleInfo.setHandleState(0); + workPeopleInfo.setIsExamine(0); + mapper.insertWorkPeople(workPeopleInfo); + } + + } + } + /********* information表中塞 web类型的工单 *********/ } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowRecordHistoryServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowRecordHistoryServiceImpl.java index dd2c1fc9..b6881620 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowRecordHistoryServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowRecordHistoryServiceImpl.java @@ -900,9 +900,13 @@ public class SysWorkflowRecordHistoryServiceImpl implements SysWorkflowRecordHis peopleInfo.setFlowId(recordId); peopleInfo.setReceiverUsername(userName); - WorkPeopleInfo info = lMapper.getWorkPeopleInfo(peopleInfo); - peopleInfo.setInformationId(info.getInformationId()); - lMapper.updateWorkPeopleInfo(peopleInfo); + List infos = lMapper.getWorkPeopleInfo(peopleInfo); + if(CollectionUtils.isNotEmpty(infos)){ + for(WorkPeopleInfo info : infos){ + peopleInfo.setInformationId(info.getInformationId()); + lMapper.updateWorkPeopleInfo(peopleInfo); + } + } } /** @@ -915,6 +919,22 @@ public class SysWorkflowRecordHistoryServiceImpl implements SysWorkflowRecordHis * @param newId */ private void createWorkOrderAndPeople(SysUser sysUser, Integer taskId,Integer leaseId,String recordCode,String projectName,int newId) { + //查询审批人集合 + WorkPeopleInfo info = new WorkPeopleInfo(); + info.setFlowId(newId); + + List workPeopleInfoList = new ArrayList<>(); + workPeopleInfoList = lMapper.selectWorkPeopleInfoList(info.getFlowId()); + + // 过滤掉nextNodeId为null的数据 + if (workPeopleInfoList != null && workPeopleInfoList.size() > 0) { + workPeopleInfoList = workPeopleInfoList.stream() + .filter(person -> person.getNextNodeId() != null) // 过滤条件:nextNodeId不为null + .collect(Collectors.toList()); + } + + + /********* information表中塞 app类型的工单 *********/ String id = UUID.randomUUID().toString().replace("-", ""); String webUrlBase = "/mea-h5/#/pages/picking/review/details"; String queryParams = UriComponentsBuilder.newInstance() @@ -942,19 +962,6 @@ public class SysWorkflowRecordHistoryServiceImpl implements SysWorkflowRecordHis if(information == null){ int countWork = lMapper.insertWorkOrder(workApplyInfo); if (countWork > 0) { - - //查询审批人集合 - WorkPeopleInfo info = new WorkPeopleInfo(); - info.setFlowId(newId); - - List workPeopleInfoList = new ArrayList<>(); - workPeopleInfoList = lMapper.selectWorkPeopleInfoList(info.getFlowId()); - // 过滤掉nextNodeId为null的数据 - if (workPeopleInfoList != null) { - workPeopleInfoList = workPeopleInfoList.stream() - .filter(person -> person.getNextNodeId() != null) // 过滤条件:nextNodeId不为null - .collect(Collectors.toList()); - } if(workPeopleInfoList != null && workPeopleInfoList.size() > 0){ WorkPeopleInfo person = workPeopleInfoList.get(0); String roleIds = person.getRoleIds(); @@ -983,6 +990,57 @@ public class SysWorkflowRecordHistoryServiceImpl implements SysWorkflowRecordHis } } } + /********* information表中塞 app类型的工单 *********/ + WorkApplyInfo workApplyInfoWeb = new WorkApplyInfo(); + workApplyInfoWeb = workApplyInfo; + String idWeb = UUID.randomUUID().toString().replace("-", ""); + String webUrlBaseWeb = "/mea-view/#/business-details/receive-apply/index"; + String queryParamsWeb = UriComponentsBuilder.newInstance() + .queryParam("appId", "b72d4088a412217dc807bcc3620d4408") + .queryParam("taskId", taskId) + .queryParam("id", leaseId) + .build().encode().toUriString(); + workApplyInfoWeb.setId(idWeb); + workApplyInfoWeb.setTypeId(2025051001); + workApplyInfoWeb.setWebAppId("b72d4088a412217dc807bcc3620d4408"); + workApplyInfoWeb.setWebUrl(webUrlBaseWeb + queryParamsWeb); + workApplyInfoWeb.setRout(webUrlBaseWeb + queryParamsWeb); + /********* information表中塞 web类型的工单 *********/ + //判断表中是否已经有该条information数据 + WorkApplyInfo informationWeb = lMapper.getInformationById(workApplyInfoWeb); + if(informationWeb == null){ + int countWork = lMapper.insertWorkOrder(workApplyInfoWeb); + if (countWork > 0) { + if(workPeopleInfoList != null && workPeopleInfoList.size() > 0){ + WorkPeopleInfo person = workPeopleInfoList.get(0); + String roleIds = person.getRoleIds(); + String[] roleIdArray = roleIds.split(","); + long deptId = sysUser.getDeptId(); + //根据角色和部门查询用户集合 + WorkPeopleInfo param = new WorkPeopleInfo(); + param.setRoleIdArray(roleIdArray); + param.setDeptId(deptId); + List userList = lMapper.selectUserListByRoleAndDept(param); + if (userList == null || userList.size() == 0) { + param.setDeptId(0); + userList = lMapper.selectUserListByRoleAndDept(param); + } + for (WorkPeopleInfo user : userList) { + WorkPeopleInfo workPeopleInfo = new WorkPeopleInfo(); + workPeopleInfo.setId(UUID.randomUUID().toString().replace("-", "")); + workPeopleInfo.setInformationId(idWeb); + workPeopleInfo.setReceiverUsername(user.getReceiverUsername()); + workPeopleInfo.setReadState(0); + workPeopleInfo.setHandleState(0); + workPeopleInfo.setIsExamine(0); + lMapper.insertWorkPeople(workPeopleInfo); + } + + } + } + } + /********* information表中塞 web类型的工单 *********/ + } private void createWorkOrderAndPeopleDirect(SysUser sysUser, int proId, int taskId,String taskCode, int newId,int nodeId,List userList) { diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/lease/LeaseTaskMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/lease/LeaseTaskMapper.xml index 7210dc09..2119b68c 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/lease/LeaseTaskMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/lease/LeaseTaskMapper.xml @@ -1072,8 +1072,6 @@ uni_org.sys_information si LEFT JOIN uni_org.sys_information_people sp on si.id = sp.information_id WHERE si.business_id =#{flowId} and sp.receiver_username = #{receiverUsername} and sp.is_examine = 0 - limit 1 -