From a9e96fd58f95a5e1c40628afa2f6f5961d0ad0d2 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 25 五月 2026 17:38:11 +0800
Subject: [PATCH] refactor(approve): 优化部门列表查询逻辑
---
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java | 132 +++++++++++++++++++++++++++++++++-----------
1 files changed, 99 insertions(+), 33 deletions(-)
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
index b75fedf..eb78371 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -1,12 +1,13 @@
package com.ruoyi.approve.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.approve.vo.ApproveProcessVo;
import com.ruoyi.approve.bean.vo.ApproveGetAndUpdateVo;
import com.ruoyi.approve.bean.vo.ApproveProcessConfigNodeVo;
import com.ruoyi.approve.bean.vo.ApproveProcessVO;
@@ -19,13 +20,16 @@
import com.ruoyi.approve.service.ApproveProcessConfigNodeService;
import com.ruoyi.approve.service.IApproveNodeService;
import com.ruoyi.approve.service.IApproveProcessService;
+import com.ruoyi.approve.vo.ApproveProcessVo;
import com.ruoyi.basic.enums.ApplicationTypeEnum;
import com.ruoyi.basic.enums.RecordTypeEnum;
import com.ruoyi.basic.utils.FileUtil;
import com.ruoyi.common.enums.FileNameType;
+import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.OrderUtils;
import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.other.service.impl.TempFileServiceImpl;
+import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.domain.SysNotice;
import com.ruoyi.project.system.domain.SysUser;
@@ -35,8 +39,12 @@
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.sales.mapper.CommonFileMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.mapper.SalesQuotationMapper;
import com.ruoyi.sales.mapper.ShippingInfoMapper;
import com.ruoyi.sales.pojo.CommonFile;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.pojo.SalesQuotation;
import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import lombok.RequiredArgsConstructor;
@@ -61,11 +69,13 @@
private final IApproveNodeService approveNodeService;
private final SysUserMapper sysUserMapper;
private final ApproveProcessMapper approveProcessMapper;
- private final TempFileServiceImpl tempFileService;
private final CommonFileMapper commonFileMapper;
private final CommonFileServiceImpl commonFileService;
private final ISysNoticeService sysNoticeService;
private final PurchaseLedgerMapper purchaseLedgerMapper;
+ private final SalesLedgerProductMapper salesLedgerProductMapper;
+ private final SalesQuotationMapper salesQuotationMapper;
+ private final StockUtils stockUtils;
private final ShippingInfoMapper shippingInfoMapper;
private final ApproveNodeMapper approveNodeMapper;
private final ApproveProcessConfigNodeService approveProcessConfigNodeService;
@@ -76,22 +86,33 @@
public void addApprove(ApproveProcessVO approveProcessVO) throws Exception {
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
SysDept sysDept = sysDeptMapper.selectDeptById(SecurityUtils.getLoginUser().getCurrentDeptId());
- List<ApproveProcessConfigNodeVo> list = approveProcessConfigNodeService.listNode( approveProcessVO.getApproveType());
+ List<ApproveProcessConfigNodeVo> list = approveProcessConfigNodeService.listNode(approveProcessVO.getApproveType());
List<Long> nodeIds = list.stream()
.map(ApproveProcessConfigNodeVo::getApproverId)
+ .filter(Objects::nonNull)
.collect(Collectors.toList());
+ // 鏃犲鏍镐汉閫昏緫娣诲姞
+ if (CollectionUtils.isEmpty(nodeIds)) {
+ switch (approveProcessVO.getApproveType()){
+ case 5:
+ autoPassPurchaseApproveIfNoApprover(approveProcessVO); // 閲囪喘鍗曟棤瀹℃牳浜洪�昏緫
+ break;
+ case 6:
+ autoPassSalesApproveIfNoApprover(approveProcessVO); // 閿�鍞姤浠锋棤瀹℃牳浜洪�昏緫
+ break;
+ case 7:
+ autoShippingApproveIfNoApprover(approveProcessVO); // 閿�鍞彂璐ф棤瀹℃牳浜洪�昏緫
+ break;
+ }
+ return;
+ }
List<SysUser> sysUsers = sysUserMapper.selectUserByIds(nodeIds);
if (CollectionUtils.isEmpty(sysUsers)) throw new RuntimeException("瀹℃牳鐢ㄦ埛涓嶅瓨鍦�");
if (sysDept == null) throw new RuntimeException("閮ㄩ棬涓嶅瓨鍦�");
if (sysUser == null) throw new RuntimeException("鐢宠浜轰笉瀛樺湪");
-// String today = LocalDate.now().format(DATE_FORMAT);
-// Long approveId = dailyRedisCounter.incrementAndGetByDb();
-// String formattedCount = String.format("%03d", approveId);
-// //娴佺▼ ID
-// String approveID = today + formattedCount;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
ApproveProcess approveProcess = new ApproveProcess();
- String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "","approve_id");
+ String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "", "approve_id");
approveProcess.setApproveId(no);
approveProcess.setApproveUser(sysUser.getUserId());
approveProcess.setApproveUserName(sysUser.getNickName());
@@ -99,7 +120,7 @@
approveProcess.setApproveUserIds(nodeIds.stream().map(String::valueOf).collect(Collectors.joining(",")));
approveProcess.setApproveDeptName(sysDept.getDeptName());
approveProcess.setApproveUserNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
- approveProcess.setApproveTime(StringUtils.isEmpty(approveProcessVO.getApproveTime()) ? new Date(): dateFormat.parse(approveProcessVO.getApproveTime()));
+ approveProcess.setApproveTime(StringUtils.isEmpty(approveProcessVO.getApproveTime()) ? new Date() : dateFormat.parse(approveProcessVO.getApproveTime()));
approveProcess.setApproveReason(approveProcessVO.getApproveReason());
approveProcess.setDeviceRepairId(approveProcessVO.getDeviceRepairId());
approveProcess.setMaintenancePrice(approveProcessVO.getMaintenancePrice());
@@ -131,15 +152,15 @@
.collect(Collectors.joining(","));
approveNodeService.initApproveNodes(nodeIdStr, no, approveProcessVO.getApproveDeptId());
// 闄勪欢缁戝畾
- tempFileService.migrateTempFilesToFormal(approveProcess.getId(), approveProcessVO.getTempFileIds(), FileNameType.ApproveProcess.getValue());
+ fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVE_PROCESS, approveProcess.getId(), approveProcessVO.getStorageBlobDTOS());
/*娑堟伅閫氱煡*/
Long id = nodeIds.getFirst();
- if (approveProcess.getApproveType()==8){
+ if (approveProcess.getApproveType() == 8) {
sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Collections.singletonList(id),
"/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
- }else {
+ } else {
sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Collections.singletonList(id),
@@ -147,14 +168,59 @@
}
}
+ private void autoPassSalesApproveIfNoApprover(ApproveProcessVO approveProcessVO) {
+ if (!StringUtils.hasText(approveProcessVO.getApproveReason())) {
+ return;
+ }
+ salesQuotationMapper.update(null, new LambdaUpdateWrapper<SalesQuotation>()
+ .eq(SalesQuotation::getQuotationNo, approveProcessVO.getApproveReason())
+ .set(SalesQuotation::getStatus, "閫氳繃"));
+ }
+
+ private void autoShippingApproveIfNoApprover(ApproveProcessVO approveProcessVO) {
+ if (!StringUtils.hasText(approveProcessVO.getApproveReason())) {
+ return;
+ }
+ ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
+ .eq(ShippingInfo::getShippingNo, approveProcessVO.getApproveReason())
+ .last("limit 1"));
+ if(shippingInfo == null){
+ return;
+ }
+ shippingInfoMapper.update(null, new LambdaUpdateWrapper<ShippingInfo>()
+ .eq(ShippingInfo::getShippingNo, approveProcessVO.getApproveReason())
+ .set(ShippingInfo::getStatus, "瀹℃牳閫氳繃"));
+ //鏇存敼鍑哄簱瀹℃牳鐘舵�侊紙寰呯‘璁ゆ敼鎴愬緟瀹℃牳锛�
+ stockUtils.shipmentStatus(StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), shippingInfo.getId());
+ }
+
+ private void autoPassPurchaseApproveIfNoApprover(ApproveProcessVO approveProcessVO) {
+ if (!StringUtils.hasText(approveProcessVO.getApproveReason())) {
+ return;
+ }
+
+ purchaseLedgerMapper.update(null, new LambdaUpdateWrapper<PurchaseLedger>()
+ .eq(PurchaseLedger::getPurchaseContractNumber, approveProcessVO.getApproveReason())
+ .set(PurchaseLedger::getApprovalStatus, 3));
+ //閲囪喘鍏ュ簱
+ PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
+ .eq(PurchaseLedger::getPurchaseContractNumber, approveProcessVO.getApproveReason())
+ .last("limit 1"));
+ List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new QueryWrapper<SalesLedgerProduct>()
+ .lambda().eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId()).eq(SalesLedgerProduct::getType, 2));
+ for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) {
+ stockUtils.addStockWithBatchNo(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId(),purchaseLedger.getPurchaseContractNumber()+"-"+salesLedgerProduct.getId());
+ }
+ }
+
@Override
public List<SysDept> selectDeptListByDeptIds(Long[] deptIds) {
- List<SysDept> sysDeptList = new ArrayList<SysDept>();
- for (Long deptId : deptIds) {
- SysDept sysDept = sysDeptMapper.selectDeptById(deptId);
- sysDeptList.add(sysDept);
- }
- return sysDeptList;
+// List<SysDept> sysDeptList = new ArrayList<SysDept>();
+// for (Long deptId : deptIds) {
+// SysDept sysDept = sysDeptMapper.selectDeptById(deptId);
+// sysDeptList.add(sysDept);
+// }
+ return sysDeptMapper.selectList(new QueryWrapper<SysDept>());
}
@Override
@@ -277,9 +343,9 @@
// 鍒犻櫎瀵瑰簲鐨勬秷鎭�氱煡
sysNoticeService.remove(new LambdaQueryWrapper<SysNotice>()
- .eq(SysNotice::getNoticeTitle, approveProcessType(latestProcess.getApproveType()))
- .eq(SysNotice::getSenderId, latestProcess.getApproveUser())
- .apply("CAST(notice_content AS CHAR) LIKE CONCAT('%', {0}, '%')", latestProcess.getApproveId()));
+ .eq(SysNotice::getNoticeTitle, approveProcessType(latestProcess.getApproveType()))
+ .eq(SysNotice::getSenderId, latestProcess.getApproveUser())
+ .apply("CAST(notice_content AS CHAR) LIKE CONCAT('%', {0}, '%')", latestProcess.getApproveId()));
}
}
@@ -287,11 +353,9 @@
@Override
public ApproveProcess getApproveById(String id) {
ApproveProcess one = approveProcessMapper.selectList(Wrappers.<ApproveProcess>lambdaQuery()
- .eq(ApproveProcess::getApproveId,id)
- .eq(ApproveProcess::getApproveDelete,0)).get(0);
- one.setCommonFileList(commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
- .eq(CommonFile::getCommonId, one.getId())
- .eq(CommonFile::getType, FileNameType.ApproveProcess.getValue())));
+ .eq(ApproveProcess::getApproveId, id)
+ .eq(ApproveProcess::getApproveDelete, 0)).get(0);
+ one.setStorageBlobVOS(fileUtil.getStorageBlobVOsByRecordTypeAndRecordId(RecordTypeEnum.APPROVE_PROCESS, one.getId()));
return one;
}
@@ -337,12 +401,12 @@
approveNodeService.initApproveNodes(approveGetAndUpdateVo.getApproveUserIds(), approveProcess.getApproveId(), approveProcess.getTenantId());
/*娑堟伅閫氱煡*/
Long id = configNodeIds.get(0);
- if (approveProcess.getApproveType()==8){
+ if (approveProcess.getApproveType() == 8) {
sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Collections.singletonList(id),
"/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
- }else {
+ } else {
sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Collections.singletonList(id),
@@ -399,15 +463,15 @@
// approveNodeMapper.updateById(approveNode);
// i++;
// }
- tempFileService.migrateTempFilesToFormal(approve.getId(), approveGetAndUpdateVo.getTempFileIds(), FileNameType.ApproveProcess.getValue());
+ fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVE_PROCESS, approve.getId(), approveGetAndUpdateVo.getStorageBlobDTOS());
/*娑堟伅閫氱煡*/
String id = approve.getApproveUserIds().split(",")[0];
- if (approve.getApproveType()==8){
+ if (approve.getApproveType() == 8) {
sysNoticeService.simpleNoticeByUser(approveProcessType(approve.getApproveType()),
approve.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Arrays.asList(Long.valueOf(id)),
"/safeProduction/safeWorkApproval?approveType=" + approve.getApproveType() + "&approveId=" + approve.getApproveId());
- }else {
+ } else {
sysNoticeService.simpleNoticeByUser(approveProcessType(approve.getApproveType()),
approve.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Arrays.asList(Long.valueOf(id)),
@@ -436,6 +500,8 @@
return "鍙戣揣瀹℃壒";
case 8:
return "鍗遍櫓浣滀笟瀹℃壒";
+ case 9:
+ return "鍔炲叕鐢ㄥ搧瀹℃壒";
}
return null;
}
--
Gitblit v1.9.3