From 03ffc2598a261d1dc19e77b559268bb84032a389 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 21 四月 2026 08:51:45 +0800
Subject: [PATCH] feat(approve): 新增销售审批功能并优化审批流程
---
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java | 128 +++++++++++++++++++++++++++++++++---------
1 files changed, 99 insertions(+), 29 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 e9a0d82..ee26903 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -25,8 +26,12 @@
import com.ruoyi.project.system.mapper.SysDeptMapper;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.project.system.service.ISysNoticeService;
+import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
+import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.sales.mapper.CommonFileMapper;
+import com.ruoyi.sales.mapper.ShippingInfoMapper;
import com.ruoyi.sales.pojo.CommonFile;
+import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
@@ -88,14 +93,15 @@
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;
+// 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();
- approveProcess.setApproveId(approveID);
+ String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "","approve_id");
+ approveProcess.setApproveId(no);
approveProcess.setApproveUser(approveProcessVO.getApproveUser());
approveProcess.setApproveUserName(sysUser.getNickName());
approveProcess.setApproveDeptId(approveProcessVO.getApproveDeptId());
@@ -115,6 +121,7 @@
approveProcess.setTenantId(approveProcessVO.getApproveDeptId());
approveProcess.setApproveUserIds(approveProcessVO.getApproveUserIds());
approveProcess.setApproveUserCurrentId(longList.get(0));
+ approveProcess.setApproveTitle(ObjectUtils.isNotEmpty(approveProcessVO.getApproveTitle()) ? approveProcessVO.getApproveTitle() : "");
approveProcess.setApproveUserCurrentName(sysUsers
.stream()
.filter(SysUser -> SysUser.getUserId().equals(longList.get(0)))
@@ -129,15 +136,22 @@
}
save(approveProcess);
//鍒濆鍖栧鎵硅妭鐐�
- approveNodeService.initApproveNodes(approveProcessVO.getApproveUserIds(), approveID, approveProcessVO.getApproveDeptId());
+ approveNodeService.initApproveNodes(approveProcessVO.getApproveUserIds(), no, approveProcessVO.getApproveDeptId());
// 闄勪欢缁戝畾
tempFileService.migrateTempFilesToFormal(approveProcess.getId(), approveProcessVO.getTempFileIds(), FileNameType.ApproveProcess.getValue());
/*娑堟伅閫氱煡*/
String id = approveProcessVO.getApproveUserIds().split(",")[0];
- sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcessVO.getApproveType()),
- approveID + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
- Arrays.asList(Long.valueOf(id)),
- "/collaborativeApproval/approvalProcess?approveType=" + approveProcessVO.getApproveType() + "&approveId=" + approveID);
+ if (approveProcess.getApproveType()==8){
+ sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
+ approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
+ Arrays.asList(Long.valueOf(id)),
+ "/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
+ }else {
+ sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
+ approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
+ Arrays.asList(Long.valueOf(id)),
+ "/collaborativeApproval/approvalProcess?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
+ }
}
@Override
@@ -150,33 +164,78 @@
return sysDeptList;
}
+ @Autowired
+ private PurchaseLedgerMapper purchaseLedgerMapper;
+
+ @Autowired
+ private ShippingInfoMapper shippingInfoMapper;
+
@Override
public IPage<ApproveProcess> listAll(Page page, ApproveProcess approveProcess) {
IPage<ApproveProcess> approveProcessIPage = approveProcessMapper.listPage(page, approveProcess);
List<ApproveProcess> records = approveProcessIPage.getRecords();
+
for (ApproveProcess record : records) {
- List<CommonFile> commonFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
- .eq(CommonFile::getCommonId, record.getId())
- .eq(CommonFile::getType, FileNameType.ApproveProcess.getValue()));
- record.setCommonFileList(commonFiles);
+ List<CommonFile> allFiles = new ArrayList<>();
+
+ // 閲囪喘瀹℃壒鏌ヨ
+ if (record.getApproveType() == 5) {
+ String contractNo = record.getApproveReason();
+ PurchaseLedger ledger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
+ .eq(PurchaseLedger::getPurchaseContractNumber, contractNo)
+ .last("limit 1"));
+
+ if (ledger != null) {
+ allFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
+ .eq(CommonFile::getCommonId, ledger.getId())
+ .eq(CommonFile::getType, FileNameType.PURCHASE.getValue()));
+ }
+ }
+
+ // 鍙戣揣瀹℃壒鏌ヨ
+ else if (record.getApproveType() == 7) {
+ String reason = record.getApproveReason(); // 鏍煎紡涓� "xx:...-..."
+ if (StringUtils.hasText(reason) && reason.contains(":")) {
+ // 鎻愬彇鍐掑彿鍚庨潰鐨勫彂璐у崟鍙�
+ String shippingNo = reason.split(":")[1];
+ // 鏍规嵁鍙戣揣鍗曞彿鏌ヨ鍙戣揣鍙拌处璁板綍
+ ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
+ .eq(ShippingInfo::getShippingNo, shippingNo)
+ .last("limit 1"));
+ if (shippingInfo != null) {
+ // 浣跨敤鍙戣揣鍙拌处鐨� 閿�鍞彴璐D 鍘绘煡闄勪欢
+ allFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
+ .eq(CommonFile::getCommonId, shippingInfo.getSalesLedgerId())
+ .eq(CommonFile::getType, FileNameType.SALE.getValue()));
+ }
+ }
+ }
+
+ // 鏌ヨ瀹℃壒鍗曡嚜韬殑闄勪欢
+ else {
+ allFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
+ .eq(CommonFile::getCommonId, record.getId())
+ .eq(CommonFile::getType, FileNameType.ApproveProcess.getValue()));
+ }
+
+ record.setCommonFileList(allFiles);
}
return approveProcessIPage;
}
- public void delByIds(List<Long> ids) {
- for (Long approveId : ids) {
+ @Override
+ public void delByIds(List<Long> longs) {
+ ApproveProcess approveProcess;
+ for (Long approveId : longs) {
// 閫昏緫鍒犻櫎瀹℃壒娴佺▼
update(new UpdateWrapper<ApproveProcess>()
.lambda()
.set(ApproveProcess::getApproveDelete, 1)
- .eq(ApproveProcess::getId, approveId));
- // 鍒犻櫎瀵瑰簲鐨勯檮浠�
- commonFileService.deleteByBusinessId(approveId, FileNameType.ApproveProcess.getValue());
- ApproveProcess approveProcess = approveProcessMapper.selectById(approveId);
+ .eq(ApproveProcess::getApproveId, approveId));
// 鍒犻櫎瀹℃壒鑺傜偣
- approveNodeService.delApproveNodeByApproveId(approveProcess.getApproveId());
+ approveNodeService.delApproveNodeByApproveId(approveId);
// 鍙煡鏈�鏂颁竴鏉″鎵规祦绋�
ApproveProcess latestProcess = approveProcessMapper.selectOne(
@@ -189,14 +248,12 @@
continue;
}
-
// 鍒犻櫎瀵瑰簲鐨勬秷鎭�氱煡
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()));
}
-
}
@Override
@@ -214,7 +271,7 @@
// 鍒犻櫎瀵瑰簲鐨勯檮浠�
commonFileService.deleteByBusinessId(approveProcess.getId(), FileNameType.ApproveProcess.getValue());
// 鍒犻櫎瀹℃壒鑺傜偣
- approveNodeService.delApproveNodeByApproveId(approveId.toString());
+ approveNodeService.delApproveNodeByApproveId(approveId);
// 鍙煡鏈�鏂颁竴鏉″鎵规祦绋�
ApproveProcess latestProcess = approveProcessMapper.selectOne(
@@ -285,10 +342,17 @@
approveNodeService.initApproveNodes(approveGetAndUpdateVo.getApproveUserIds(), approveProcess.getApproveId(), approveProcess.getTenantId());
/*娑堟伅閫氱煡*/
String id = approveProcess.getApproveUserIds().split(",")[0];
- sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
- approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
- Arrays.asList(Long.valueOf(id)),
- "/collaborativeApproval/approvalProcess?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
+ if (approveProcess.getApproveType()==8){
+ sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
+ approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
+ Arrays.asList(Long.valueOf(id)),
+ "/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
+ }else {
+ sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
+ approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
+ Arrays.asList(Long.valueOf(id)),
+ "/collaborativeApproval/approvalProcess?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
+ }
}
@@ -308,9 +372,11 @@
if (sysUser == null) throw new RuntimeException("鐢宠浜轰笉瀛樺湪");
approve.setApproveUserName(sysUser.getNickName());
approve.setApproveUser(sysUser.getUserId());
+ approve.setApproveTitle(approveGetAndUpdateVo.getApproveTitle());
//瀹℃牳涓笉鍙互缂栬緫瀹℃牳浜�
if (approve.getApproveStatus() != 1) {
approve.setApproveUserCurrentId(Long.parseLong(split[0]));
+
approve.setApproveUserCurrentName(sysUsers.stream().filter(user -> user.getUserId().equals(Long.parseLong(split[0]))).collect(Collectors.toList()).get(0).getNickName());
}
updateById(approve);
@@ -377,6 +443,10 @@
return "鍙戣揣瀹℃壒";
case 8:
return "鍗遍櫓浣滀笟瀹℃壒";
+ case 9:
+ return "閿�鍞鎵�";
+ case 10:
+ return "鑷敱鍗忓悓瀹℃壒";
}
return null;
}
--
Gitblit v1.9.3