From 96119ca3973d5ea643db6a87b6a23fe404ddb8cc Mon Sep 17 00:00:00 2001
From: shiyunteng <shiyunteng@example.com>
Date: 星期一, 29 六月 2026 15:35:40 +0800
Subject: [PATCH] feat:合同编号规则调整 出库编号规则调整

---
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java     |   14 -
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Contract.java                     |    3 
 /dev/null                                                                                                             |   40 -----
 platformx-boot/src/main/resources/application-dev.yml                                                                 |    1 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java    |  176 ++++++++++++++++++++++---
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductionPlanController.java |    4 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java    |  143 ++++++++++++++++++++
 7 files changed, 305 insertions(+), 76 deletions(-)

diff --git a/platformx-boot/src/main/resources/application-dev.yml b/platformx-boot/src/main/resources/application-dev.yml
index 8534025..9290cc8 100644
--- a/platformx-boot/src/main/resources/application-dev.yml
+++ b/platformx-boot/src/main/resources/application-dev.yml
@@ -60,6 +60,7 @@
 #erp鎺ㄩ��
 erp:
   ymj:
+  ymjToken:
   smj:
   sgb:
   jxc:
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Contract.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Contract.java
index 2e040df..5502bcc 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Contract.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Contract.java
@@ -255,4 +255,7 @@
 	@Column(columnDefinition = "VARCHAR(32) comment '缁忔祹浜嬮」 bip鎺ㄩ�佸簲鏀剁敤'")
 	private String economicMatters;
 
+	@Schema(description = "erp鍚堝悓缂栧彿")
+	@Column(columnDefinition = "VARCHAR(64) comment 'erp鍚堝悓缂栧彿'")
+	private String erpContractNo;
 }
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductionPlanController.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductionPlanController.java
index 662ad16..66d2ad7 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductionPlanController.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductionPlanController.java
@@ -6,11 +6,8 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.by4cloud.platformx.business.entity.ContractSubjectMatter;
 import com.by4cloud.platformx.business.entity.PlanSubjectMatter;
-import com.by4cloud.platformx.business.service.ContractSubjectMatterService;
 import com.by4cloud.platformx.business.service.PlanSubjectMatterService;
-import com.by4cloud.platformx.business.utils.ContractNumberGenerator;
 import com.by4cloud.platformx.common.core.util.R;
 import com.by4cloud.platformx.common.data.mybatis.BaseModel;
 import com.by4cloud.platformx.common.log.annotation.SysLog;
@@ -124,7 +121,6 @@
         }
         productionPlan.setPartybid(SecurityUtils.getUser().getCompId());
         productionPlan.setPartyb(SecurityUtils.getUser().getCompName());
-        productionPlan.setProductionPlanNo("p-"+ContractNumberGenerator.generateContractNumber());
         productionPlanService.save(productionPlan);
 
         if(productionPlan.getPlanSubjectMatterList()!=null){
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
index f3bd5f8..568ae38 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
@@ -7,6 +7,8 @@
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -21,7 +23,6 @@
 import com.by4cloud.platformx.business.entity.*;
 import com.by4cloud.platformx.business.mapper.*;
 import com.by4cloud.platformx.business.service.ContractService;
-import com.by4cloud.platformx.business.utils.ContractNumberGenerator;
 import com.by4cloud.platformx.business.utils.ItemGeneratorUtil;
 import com.by4cloud.platformx.business.vo.ContractDetailVo;
 import com.by4cloud.platformx.common.core.util.R;
@@ -37,6 +38,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.io.ClassPathResource;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
@@ -71,9 +73,13 @@
 	private final RemoteDeptService remoteDeptService;
 	private final ContractDelayOutMapper contractDelayOutMapper;
 	private final ErpRequestRecordMapper erpRequestRecordMapper;
+	private final StringRedisTemplate redisTemplate;
 
 	@Value("${erp.ymj}")
 	private String ymjErp;
+
+	@Value("${erp.ymjToken}")
+	private String ymjToken;
 
 	@Value("${erp.smj}")
 	private String smjErp;
@@ -107,7 +113,7 @@
 		Contract contract = BeanUtil.copyProperties(addDTO, Contract.class);
 		contract.setPartyBId(SecurityUtils.getUser().getCompId());
 		contract.setPartyB(SecurityUtils.getUser().getCompName());
-		contract.setContractNo(ContractNumberGenerator.generateContractNumber());
+
 		contract.setPaidAmount(new BigDecimal("0"));
 		contract.setBillingStatus("0");
 		contract.setErpPushFlag("0");
@@ -127,11 +133,22 @@
 
 			}
 		}
-		List<Contract> contracts = baseMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getContractNo, contract.getContractNo()));
-		while (ArrayUtil.isNotEmpty(contracts.toArray())) {
-			contract.setContractNo(ContractNumberGenerator.generateContractNumber());
-			contracts = baseMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getContractNo, contract.getContractNo()));
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){
+			contract.setContractNo(generateSMJContractNo());
 		}
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){
+			contract.setContractNo(generateGYBContractNo());
+		}
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",ymj)){
+			contract.setContractNo(generateYMJContractNo());
+		}
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",tfgs)){
+			contract.setContractNo(generateTFContractNo());
+		}
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",jxc)){
+			contract.setContractNo(generateJXCContractNo());
+		}
+
 		baseMapper.insert(contract);
 
 		if (ArrayUtil.isNotEmpty(addDTO.getContractSubjectMatter())) {
@@ -213,15 +230,23 @@
 			return R.failed("褰撳墠鐘舵�佹棤娉曚慨鏀瑰悎鍚�");
 		}
 		Contract contract = BeanUtil.copyProperties(updateDTO, Contract.class);
-		contract.setContractNo(ContractNumberGenerator.generateContractNumber());
 		contract.setBillingStatus("0");
 		contract.setErpPushFlag("0");
 		contract.setPaidAmount(new BigDecimal("0"));
-		List<Contract> contracts;
-		contracts = baseMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getContractNo, contract.getContractNo()));
-		while (ArrayUtil.isNotEmpty(contracts.toArray())) {
-			contract.setContractNo(ContractNumberGenerator.generateContractNumber());
-			contracts = baseMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getContractNo, contract.getContractNo()));
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){
+			contract.setContractNo(generateSMJContractNo());
+		}
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){
+			contract.setContractNo(generateGYBContractNo());
+		}
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",ymj)){
+			contract.setContractNo(generateYMJContractNo());
+		}
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",tfgs)){
+			contract.setContractNo(generateTFContractNo());
+		}
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",jxc)){
+			contract.setContractNo(generateJXCContractNo());
 		}
 		if (ObjUtil.isNotNull(updateDTO.getDeliveryCycle())){
 			contract.setExpirationDate(DateUtil.offsetDay(updateDTO.getSignDate(),updateDTO.getDeliveryCycle()));
@@ -572,10 +597,14 @@
 				request.put("details",subjectMatter);
 			}
 			log.info("涓�鐓ゆ満鍚堝悓鎺ㄩ�乪rp鍏ュ弬锛歿}",request.toJSONString());
-			String result = HttpUtil.post(ymjErp,request.toJSONString());
-			log.info("涓�鐓ゆ満鍚堝悓鎺ㄩ�乪rp鍥炲弬锛歿}",result);
+			HttpResponse response = HttpRequest.post(ymjErp)
+					.header("token", ymjToken)       // 娣诲姞璁よ瘉澶�
+					.header("Content-Type", "application/json")         // 璁剧疆鍐呭绫诲瀷
+					.body(request.toJSONString())                        // 璁剧疆璇锋眰浣�
+					.execute();                                         // 鎵ц璇锋眰.post(ymjErp,request.toJSONString());
+			log.info("涓�鐓ゆ満鍚堝悓鎺ㄩ�乪rp鍥炲弬锛歿}",response.body());
 			//淇濆瓨璇锋眰璁板綍
-			saveErpRequestRecord("ymj",request.toJSONString(),result);
+			saveErpRequestRecord("ymj",request.toJSONString(),response.body());
 			//鏇存柊鍚堝悓erp鎺ㄩ�佹爣璇�
 			contract.setErpPushFlag("1");
 			baseMapper.updateById(contract);
@@ -770,16 +799,24 @@
 	public R copyNewContract(Long id) {
 		Contract oldContract = baseMapper.selectById(id);
 		Contract newContract = BeanUtil.copyProperties(oldContract, Contract.class, "id", "createTime");
-		newContract.setContractNo(ContractNumberGenerator.generateContractNumber());
 		newContract.setPaidAmount(new BigDecimal("0"));
 		newContract.setBillingStatus("0");
 		newContract.setErpPushFlag("0");
 		newContract.setContractStatus(0);
-		List<Contract> contracts;
-		contracts = baseMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getContractNo, newContract.getContractNo()));
-		while (ArrayUtil.isNotEmpty(contracts.toArray())) {
-			newContract.setContractNo(ContractNumberGenerator.generateContractNumber());
-			contracts = baseMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getContractNo, newContract.getContractNo()));
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){
+			newContract.setContractNo(generateSMJContractNo());
+		}
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){
+			newContract.setContractNo(generateGYBContractNo());
+		}
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",ymj)){
+			newContract.setContractNo(generateYMJContractNo());
+		}
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",tfgs)){
+			newContract.setContractNo(generateTFContractNo());
+		}
+		if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",jxc)){
+			newContract.setContractNo(generateJXCContractNo());
 		}
 		baseMapper.insert(newContract);
 		List<ContractSubjectMatter> subjectMatterList = contractSubjectMatterMapper.selectList(Wrappers.<ContractSubjectMatter>lambdaQuery().eq(ContractSubjectMatter::getContractId, id));
@@ -1412,6 +1449,7 @@
 			return R.failed("浠樻闃舵姣斾緥寮傚父");
 		}
 		Contract contract = BeanUtil.copyProperties(addDTO, Contract.class);
+		contract.setErpContractNo(contract.getContractNo());
 		contract.setPartyBId(SecurityUtils.getUser().getCompId());
 		contract.setPartyB(SecurityUtils.getUser().getCompName());
 		contract.setContractStatus(2);
@@ -1421,6 +1459,9 @@
 		if (ObjUtil.isNotNull(addDTO.getDeliveryCycle())){
 			contract.setExpirationDate(DateUtil.offsetDay(addDTO.getSignDate(),addDTO.getDeliveryCycle()));
 		}
+
+		contract.setContractNo(generateGYBContractNo());
+
 		if (!StrUtil.equals(addDTO.getContractCategory(), "water_house")){
 			// 鍋囪 list 鏄綘鐨� List<ContractSubjectMatterAddDTO>
 			Optional<ContractSubjectMatterAddDTO> maxDateObj = addDTO.getContractSubjectMatter().stream()
@@ -1636,4 +1677,97 @@
 		return VALID_STAGES.equals(actualStageSet);
 	}
 
+	/**
+	 * 鐢熸垚鏍煎紡涓�: yyyyMMdd + 4浣嶅簭鍒楀彿 (渚嬪: 20260629000001)
+	 */
+	public  String generateSMJContractNo() {
+		// 1. 鑾峰彇褰撳墠鏃ユ湡瀛楃涓�
+		String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
+
+		// 2. 鏋勫缓 Redis Key锛屾寜澶╅殧绂伙紝渚嬪: order:no:20260629
+		String key = "ZB-SMJ:" + dateStr;
+
+		// 3. Redis 鍘熷瓙閫掑锛岃缃繃鏈熸椂闂翠负2澶╋紙闃叉Key鍫嗙Н锛屽悓鏃惰鐩栬法澶╄竟鐣屾儏鍐碉級
+		Long sequence = redisTemplate.opsForValue().increment(key, 1);
+		redisTemplate.expire(key, 1, java.util.concurrent.TimeUnit.DAYS);
+
+		// 4. 鏍煎紡鍖栧簭鍒楀彿锛屼笉瓒�6浣嶅墠琛�0
+		String seqStr = String.format("%04d", sequence);
+
+		// 5. 鎷兼帴杩斿洖
+		return "ZB-SMJ-"+dateStr + seqStr;
+	}
+
+	public  String generateYMJContractNo() {
+		// 1. 鑾峰彇褰撳墠鏃ユ湡瀛楃涓�
+		String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
+
+		// 2. 鏋勫缓 Redis Key锛屾寜澶╅殧绂伙紝渚嬪: order:no:20260629
+		String key = "ZB-YMJ:" + dateStr;
+
+		// 3. Redis 鍘熷瓙閫掑锛岃缃繃鏈熸椂闂翠负2澶╋紙闃叉Key鍫嗙Н锛屽悓鏃惰鐩栬法澶╄竟鐣屾儏鍐碉級
+		Long sequence = redisTemplate.opsForValue().increment(key, 1);
+		redisTemplate.expire(key, 1, java.util.concurrent.TimeUnit.DAYS);
+
+		// 4. 鏍煎紡鍖栧簭鍒楀彿锛屼笉瓒�6浣嶅墠琛�0
+		String seqStr = String.format("%04d", sequence);
+
+		// 5. 鎷兼帴杩斿洖
+		return "ZB-YMJ-"+dateStr + seqStr;
+	}
+
+	public  String generateJXCContractNo() {
+		// 1. 鑾峰彇褰撳墠鏃ユ湡瀛楃涓�
+		String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
+
+		// 2. 鏋勫缓 Redis Key锛屾寜澶╅殧绂伙紝渚嬪: order:no:20260629
+		String key = "ZB-JXC:" + dateStr;
+
+		// 3. Redis 鍘熷瓙閫掑锛岃缃繃鏈熸椂闂翠负2澶╋紙闃叉Key鍫嗙Н锛屽悓鏃惰鐩栬法澶╄竟鐣屾儏鍐碉級
+		Long sequence = redisTemplate.opsForValue().increment(key, 1);
+		redisTemplate.expire(key, 1, java.util.concurrent.TimeUnit.DAYS);
+
+		// 4. 鏍煎紡鍖栧簭鍒楀彿锛屼笉瓒�6浣嶅墠琛�0
+		String seqStr = String.format("%04d", sequence);
+
+		// 5. 鎷兼帴杩斿洖
+		return "ZB-JXC-"+dateStr + seqStr;
+	}
+
+	public  String generateTFContractNo() {
+		// 1. 鑾峰彇褰撳墠鏃ユ湡瀛楃涓�
+		String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
+
+		// 2. 鏋勫缓 Redis Key锛屾寜澶╅殧绂伙紝渚嬪: order:no:20260629
+		String key = "ZB-TF:" + dateStr;
+
+		// 3. Redis 鍘熷瓙閫掑锛岃缃繃鏈熸椂闂翠负2澶╋紙闃叉Key鍫嗙Н锛屽悓鏃惰鐩栬法澶╄竟鐣屾儏鍐碉級
+		Long sequence = redisTemplate.opsForValue().increment(key, 1);
+		redisTemplate.expire(key, 1, java.util.concurrent.TimeUnit.DAYS);
+
+		// 4. 鏍煎紡鍖栧簭鍒楀彿锛屼笉瓒�6浣嶅墠琛�0
+		String seqStr = String.format("%04d", sequence);
+
+		// 5. 鎷兼帴杩斿洖
+		return "ZB-TF-"+dateStr + seqStr;
+	}
+
+	public  String generateGYBContractNo() {
+		// 1. 鑾峰彇褰撳墠鏃ユ湡瀛楃涓�
+		String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
+
+		// 2. 鏋勫缓 Redis Key锛屾寜澶╅殧绂伙紝渚嬪: order:no:20260629
+		String key = "ZB-GYB:" + dateStr;
+
+		// 3. Redis 鍘熷瓙閫掑锛岃缃繃鏈熸椂闂翠负2澶╋紙闃叉Key鍫嗙Н锛屽悓鏃惰鐩栬法澶╄竟鐣屾儏鍐碉級
+		Long sequence = redisTemplate.opsForValue().increment(key, 1);
+		redisTemplate.expire(key, 1, java.util.concurrent.TimeUnit.DAYS);
+
+		// 4. 鏍煎紡鍖栧簭鍒楀彿锛屼笉瓒�6浣嶅墠琛�0
+		String seqStr = String.format("%04d", sequence);
+
+		// 5. 鎷兼帴杩斿洖
+		return "ZB-GYB-"+dateStr + seqStr;
+	}
+
 }
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
index 954cc14..05fb704 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
@@ -17,6 +17,8 @@
 import com.by4cloud.platformx.common.security.util.SecurityUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
@@ -41,6 +43,22 @@
 	private final ContractPaymentScheduleProcessMapper scheduleProcessMapper;
 	private final ContractOutBoundMapper contractOutBoundMapper;
 	private final DeliveryOverdueMapper deliveryOverdueMapper;
+	private final StringRedisTemplate redisTemplate;
+
+	@Value("${dept.smj}")
+	private String smj;
+
+	@Value("${dept.sgb}")
+	private String sgb;
+
+	@Value("${dept.jxc}")
+	private String jxc;
+
+	@Value("${dept.tfgs}")
+	private String tfgs;
+
+	@Value("${dept.ymj}")
+	private String ymj;
 
 	@Override
 	public R add(OutBoundAddDTO addDTO) {
@@ -82,7 +100,21 @@
 		//鍑哄簱
 		addDTO.getSubjectMatterList().stream().forEach(outSubjectMatterAddDTO -> {
 			OutBound outBound = BeanUtil.copyProperties(outSubjectMatterAddDTO, OutBound.class);
-			outBound.setBatchNumber(batchNumber);
+			if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){
+				outBound.setBatchNumber(generateSMJContractNo());
+			}
+			if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){
+				outBound.setBatchNumber(generateGYBContractNo());
+			}
+			if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",ymj)){
+				outBound.setBatchNumber(generateYMJContractNo());
+			}
+			if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",tfgs)){
+				outBound.setBatchNumber(generateTFContractNo());
+			}
+			if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",jxc)){
+				outBound.setBatchNumber(generateJXCContractNo());
+			}
 			outBound.setBusGuestName(addDTO.getBusGuestName());
 			outBound.setBusGuestId(addDTO.getBusGuestId());
 			outBound.setOutBoundTime(addDTO.getOutBoundTime());
@@ -451,7 +483,21 @@
 			contractSubjectMatterMapper.updateById(subjectMatter);
 			//
 			OutBound outBound = new OutBound();
-			outBound.setBatchNumber(batchNumber);
+			if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){
+				outBound.setBatchNumber(generateSMJContractNo());
+			}
+			if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){
+				outBound.setBatchNumber(generateGYBContractNo());
+			}
+			if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",ymj)){
+				outBound.setBatchNumber(generateYMJContractNo());
+			}
+			if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",tfgs)){
+				outBound.setBatchNumber(generateTFContractNo());
+			}
+			if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",jxc)){
+				outBound.setBatchNumber(generateJXCContractNo());
+			}
 			outBound.setOutBoundNum(outSubjectMatterAddDTO.getOutBoundNum());
 			outBound.setOutBoundAttNames(addDTO.getOutBoundAttNames());
 			outBound.setOutBoundAttPaths(addDTO.getOutBoundAttPaths());
@@ -676,4 +722,97 @@
 		}
 		return R.ok();
 	}
+
+	/**
+	 * 鐢熸垚鏍煎紡涓�: yyyyMMdd + 4浣嶅簭鍒楀彿 (渚嬪: 20260629000001)
+	 */
+	public  String generateSMJContractNo() {
+		// 1. 鑾峰彇褰撳墠鏃ユ湡瀛楃涓�
+		String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
+
+		// 2. 鏋勫缓 Redis Key锛屾寜澶╅殧绂伙紝渚嬪: order:no:20260629
+		String key = "ZB-SMJ-CK:" + dateStr;
+
+		// 3. Redis 鍘熷瓙閫掑锛岃缃繃鏈熸椂闂翠负2澶╋紙闃叉Key鍫嗙Н锛屽悓鏃惰鐩栬法澶╄竟鐣屾儏鍐碉級
+		Long sequence = redisTemplate.opsForValue().increment(key, 1);
+		redisTemplate.expire(key, 1, java.util.concurrent.TimeUnit.DAYS);
+
+		// 4. 鏍煎紡鍖栧簭鍒楀彿锛屼笉瓒�6浣嶅墠琛�0
+		String seqStr = String.format("%04d", sequence);
+
+		// 5. 鎷兼帴杩斿洖
+		return "ZB-SMJ-CK-"+dateStr + seqStr;
+	}
+
+	public  String generateYMJContractNo() {
+		// 1. 鑾峰彇褰撳墠鏃ユ湡瀛楃涓�
+		String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
+
+		// 2. 鏋勫缓 Redis Key锛屾寜澶╅殧绂伙紝渚嬪: order:no:20260629
+		String key = "ZB-YMJ-CK:" + dateStr;
+
+		// 3. Redis 鍘熷瓙閫掑锛岃缃繃鏈熸椂闂翠负2澶╋紙闃叉Key鍫嗙Н锛屽悓鏃惰鐩栬法澶╄竟鐣屾儏鍐碉級
+		Long sequence = redisTemplate.opsForValue().increment(key, 1);
+		redisTemplate.expire(key, 1, java.util.concurrent.TimeUnit.DAYS);
+
+		// 4. 鏍煎紡鍖栧簭鍒楀彿锛屼笉瓒�6浣嶅墠琛�0
+		String seqStr = String.format("%04d", sequence);
+
+		// 5. 鎷兼帴杩斿洖
+		return "ZB-YMJ-CK-"+dateStr + seqStr;
+	}
+
+	public  String generateJXCContractNo() {
+		// 1. 鑾峰彇褰撳墠鏃ユ湡瀛楃涓�
+		String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
+
+		// 2. 鏋勫缓 Redis Key锛屾寜澶╅殧绂伙紝渚嬪: order:no:20260629
+		String key = "ZB-JXC-CK:" + dateStr;
+
+		// 3. Redis 鍘熷瓙閫掑锛岃缃繃鏈熸椂闂翠负2澶╋紙闃叉Key鍫嗙Н锛屽悓鏃惰鐩栬法澶╄竟鐣屾儏鍐碉級
+		Long sequence = redisTemplate.opsForValue().increment(key, 1);
+		redisTemplate.expire(key, 1, java.util.concurrent.TimeUnit.DAYS);
+
+		// 4. 鏍煎紡鍖栧簭鍒楀彿锛屼笉瓒�6浣嶅墠琛�0
+		String seqStr = String.format("%04d", sequence);
+
+		// 5. 鎷兼帴杩斿洖
+		return "ZB-JXC-CK-"+dateStr + seqStr;
+	}
+
+	public  String generateTFContractNo() {
+		// 1. 鑾峰彇褰撳墠鏃ユ湡瀛楃涓�
+		String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
+
+		// 2. 鏋勫缓 Redis Key锛屾寜澶╅殧绂伙紝渚嬪: order:no:20260629
+		String key = "ZB-TF-CK:" + dateStr;
+
+		// 3. Redis 鍘熷瓙閫掑锛岃缃繃鏈熸椂闂翠负2澶╋紙闃叉Key鍫嗙Н锛屽悓鏃惰鐩栬法澶╄竟鐣屾儏鍐碉級
+		Long sequence = redisTemplate.opsForValue().increment(key, 1);
+		redisTemplate.expire(key, 1, java.util.concurrent.TimeUnit.DAYS);
+
+		// 4. 鏍煎紡鍖栧簭鍒楀彿锛屼笉瓒�6浣嶅墠琛�0
+		String seqStr = String.format("%04d", sequence);
+
+		// 5. 鎷兼帴杩斿洖
+		return "ZB-TF-CK-"+dateStr + seqStr;
+	}
+
+	public  String generateGYBContractNo() {
+		// 1. 鑾峰彇褰撳墠鏃ユ湡瀛楃涓�
+		String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
+
+		// 2. 鏋勫缓 Redis Key锛屾寜澶╅殧绂伙紝渚嬪: order:no:20260629
+		String key = "ZB-GYB-CK:" + dateStr;
+
+		// 3. Redis 鍘熷瓙閫掑锛岃缃繃鏈熸椂闂翠负2澶╋紙闃叉Key鍫嗙Н锛屽悓鏃惰鐩栬法澶╄竟鐣屾儏鍐碉級
+		Long sequence = redisTemplate.opsForValue().increment(key, 1);
+		redisTemplate.expire(key, 1, java.util.concurrent.TimeUnit.DAYS);
+
+		// 4. 鏍煎紡鍖栧簭鍒楀彿锛屼笉瓒�6浣嶅墠琛�0
+		String seqStr = String.format("%04d", sequence);
+
+		// 5. 鎷兼帴杩斿洖
+		return "ZB-GYB-CK-"+dateStr + seqStr;
+	}
 }
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java
index 86ae44f..72ead27 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java
@@ -1,29 +1,21 @@
 package com.by4cloud.platformx.business.service.impl;
 
-import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.lang.tree.TreeNode;
 import cn.hutool.core.lang.tree.TreeUtil;
-import cn.hutool.core.util.ArrayUtil;
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.by4cloud.platformx.business.dto.ProductQueryDTO;
 import com.by4cloud.platformx.business.entity.Product;
-import com.by4cloud.platformx.business.entity.TaxCode;
 import com.by4cloud.platformx.business.mapper.ProductMapper;
 import com.by4cloud.platformx.business.service.ProductService;
 import com.by4cloud.platformx.business.vo.ProductSelectVo;
-import com.by4cloud.platformx.business.vo.ProductTreeVo;
 import com.by4cloud.platformx.common.core.util.R;
 import com.by4cloud.platformx.common.data.datascope.DataScope;
-import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import jakarta.validation.constraints.NotNull;
-import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 
-import java.lang.reflect.Array;
 import java.util.Arrays;
 import java.util.List;
 import java.util.function.Function;
@@ -104,6 +96,10 @@
 //        		.eq(StrUtil.isNotEmpty(queryDTO.getParentId()),Product::getParentId,queryDTO.getParentId())
 //				.in(StrUtil.isNotEmpty(queryDTO.getContractCategory())&&StrUtil.equals(queryDTO.getContractCategory(), "water_house"),
 //						Product::getErpCode,erpCodes);
-		return R.ok(baseMapper.getProductListByParentId(queryDTO, Arrays.asList(erpCodes),DataScope.of("comp_id")));
+		List<ProductSelectVo> selectVos = baseMapper.getProductListByParentId(queryDTO, Arrays.asList(erpCodes),DataScope.of("comp_id"));
+		if (selectVos.size()>2000){
+			return R.ok(selectVos.subList(0,1999));
+		}
+		return R.ok(selectVos);
 	}
 }
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/utils/ContractNumberGenerator.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/utils/ContractNumberGenerator.java
deleted file mode 100644
index 5961933..0000000
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/utils/ContractNumberGenerator.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.by4cloud.platformx.business.utils;
-
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicInteger;
-
-public class ContractNumberGenerator {
-
-	// 鐢ㄤ簬瀛樺偍姣忓ぉ鐨勫簭鍒楀彿璁℃暟鍣紝Key涓烘棩鏈熷瓧绗︿覆锛孷alue涓哄師瀛愭暣鏁�
-	private static final ConcurrentHashMap<String, AtomicInteger> counterMap = new ConcurrentHashMap<>();
-
-	// 鏃ユ湡鏍煎紡鍖栧櫒锛屾牸寮忎负 yyyyMMdd
-	private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
-
-	/**
-	 * 鐢熸垚鍚堝悓缂栧彿
-	 * 鏍煎紡: yyyyMMdd-XXXX (XXXX涓哄綋鏃ヨ嚜澧炲簭鍒楋紝涓嶈冻4浣嶈ˉ0)
-	 *
-	 * @return 鍚堝悓缂栧彿瀛楃涓�
-	 */
-	public static String generateContractNumber() {
-		// 1. 鑾峰彇褰撳墠鏃ユ湡瀛楃涓�
-		String dateStr = LocalDate.now().format(DATE_FORMATTER);
-
-		// 2. 鑾峰彇鎴栧垱寤哄綋澶╃殑璁℃暟鍣�
-		// computeIfAbsent 淇濊瘉鍘熷瓙鎬э紝濡傛灉key涓嶅瓨鍦ㄥ垯鍒涘缓鏂扮殑AtomicInteger(0)
-		AtomicInteger counter = counterMap.computeIfAbsent(dateStr, k -> new AtomicInteger(0));
-
-		// 3. 閫掑骞惰幏鍙栧綋鍓嶅簭鍒楀彿
-		int sequence = counter.incrementAndGet();
-
-		// 4. 鏍煎紡鍖栧簭鍒楀彿锛屼緥濡� 1 -> "0001"
-		String formattedSequence = String.format("%04d", sequence);
-
-		// 5. 缁勫悎杩斿洖
-		return dateStr + "-" + formattedSequence;
-	}
-
-}

--
Gitblit v1.9.1