网页版领料工单接入,材料站退料单

This commit is contained in:
hongchao 2025-09-15 18:02:33 +08:00
parent c9f1e51d3f
commit 7141100081
7 changed files with 243 additions and 26 deletions

View File

@ -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

View File

@ -249,5 +249,7 @@ public interface IBackApplyInfoService {
int syncProject(BackApplyInfo backApplyInfo);
int syncProjectDetails(BackApplyInfo backApplyInfo);
AjaxResult selectBackApplyInfoByIdClz(Long id, String keyWord);
}

View File

@ -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<String> userRoles = SecurityUtils.getLoginUser().getRoles();
// 检查用户是否具有特殊角色
backApplyInfo.setUserId(null);
// 首先根据用户名去ma_type_manage表查询是否存在绑定物资信息
/*List<Long> 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<MaCodeVo> newCodeList = new ArrayList<>();
List<BackApplyDetails> 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<MaCodeVo> maCodeList = backApplyInfoMapper.selectByCode(id);
// 2. 处理状态不为在用的设备编码
if ("0".equals(backApplyInfo.getStatus()) && CollectionUtils.isNotEmpty(maCodeList)) {
newCodeList = filterNonInUseEquipment(maCodeList);
maCodeList = filterInUseEquipment(maCodeList);
}
// 3. 优化只有在有编码设备时才查询类型树减少不必要的复杂查询
Map<Long, BigDecimal> typeNumMap = new HashMap<>();
if (hasCodedEquipment(backApplyDetailsList)) {
List<TypeTreeNode> listL4 = mapper.getUseTypeTreeL4(backApplyInfo);
typeNumMap = buildTypeNumMappingSimple(listL4);
}
// 4. 一次性查询所有附件信息
Map<Long, List<BmFileInfo>> allFileInfoMap = fetchAllFileInfosOptimized(id);
// 5. 预构建映射表
Map<Long, List<MaCodeVo>> typeCodeMap = buildTypeCodeMappingSimple(maCodeList);
Map<Long, MaCodeVo> 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;
}
/**
* 检查是否有编码设备
*/

View File

@ -187,7 +187,7 @@ public interface LeaseTaskMapper {
void updateWorkPeopleInfo(WorkPeopleInfo peopleInfo);
WorkPeopleInfo getWorkPeopleInfo(WorkPeopleInfo peopleInfo);
List<WorkPeopleInfo> getWorkPeopleInfo(WorkPeopleInfo peopleInfo);
/**
* 根据code查询领用申请详情

View File

@ -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<WorkPeopleInfo> workPeopleInfoList = mapper.selectWorkPeopleInfoList(info.getFlowId());
if (countWork > 0) {
//查询审批人集合
WorkPeopleInfo info = new WorkPeopleInfo();
info.setFlowId(newId);
List<WorkPeopleInfo> 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<WorkPeopleInfo> 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类型的工单 *********/
}

View File

@ -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<WorkPeopleInfo> 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<WorkPeopleInfo> 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<WorkPeopleInfo> 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<WorkPeopleInfo> 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<WorkPeopleInfo> userList) {

View File

@ -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
</select>
<select id="selectPublishDetailsByCode" resultType="com.bonus.material.lease.domain.LeasePublishDetails">
SELECT id as id,