diff --git a/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java b/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java index 5fea7d17..73888efb 100644 --- a/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java +++ b/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java @@ -12,9 +12,9 @@ public interface LauncherConstant { /** * nacos 命名空间 */ -// String NACOS_NAMESPACE = "feaf627f-a847-463b-8b73-24a0538f526e"; + String NACOS_NAMESPACE = "feaf627f-a847-463b-8b73-24a0538f526e"; // 生产环境 - String NACOS_NAMESPACE = "db3f4da1-ae19-4104-8c17-6d9b8f069401"; +// String NACOS_NAMESPACE = "db3f4da1-ae19-4104-8c17-6d9b8f069401"; // 测试环境 // String NACOS_NAMESPACE = "6cdd0310-0d61-4f54-891a-7fb06224d9b8"; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java index 179ded22..f5e876c1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java @@ -342,4 +342,14 @@ public class YieldOrderController extends BladeController { List list = yieldOrderService.getToolByPartCode(partCode); return R.data(list); } + + /** + * 根据零件号获取工装 + */ + @GetMapping("/test") + public R test(@RequestParam String test) { + + String code = yieldOrderService.generateMdCode(); + return R.data(code); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/MoldDemandMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/MoldDemandMapper.java index 408bdff4..5c129235 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/MoldDemandMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/MoldDemandMapper.java @@ -34,4 +34,6 @@ public interface MoldDemandMapper extends BaseMapper { List pageNearlyMonth(IPage page, MoldDemand entity); MoldDemand getDetailById(String id); + + String getMaxMdCodeByDate(@Param("today")String today); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/MoldDemandMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/MoldDemandMapper.xml index eeced584..b5093a82 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/MoldDemandMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/MoldDemandMapper.xml @@ -188,4 +188,8 @@ IS_DELETED = 0 and a.id = #{id} + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java index ee198634..1360f59d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java @@ -292,4 +292,6 @@ public interface IYieldOrderService extends BaseService { void calculateCoatingMaterial(); List confirm(String cardNo,String mark); + + String generateMdCode(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java index 5cd7e928..298edaeb 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java @@ -57,6 +57,7 @@ import org.springblade.scheduling.pojo.entity.QualityGradeEntity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -65,8 +66,10 @@ import java.text.MessageFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -544,6 +547,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl processMoldToolList = dsPartService.getClassCakeWork(yieldOrder.getPartCode(),yieldOrder.getRoamNo(),yieldOrder.getPartVersion()); if(CollectionUtils.isNotEmpty(processMoldToolList)){ - MoldDemand moldDemand = moldDemandMapper.selectOne(Wrappers.lambdaQuery().eq(MoldDemand::getPartCode,yieldOrder.getPartCode()).eq(MoldDemand::getMafStatus,MoldDemandEnum.MAF_STATUS_CREATE.getCode())); - if(moldDemand == null){ - moldDemand = new MoldDemand(); - moldDemand.setMoCode(null); - moldDemand.setPartCode(yieldOrder.getPartCode()); - moldDemand.setPartName(yieldOrder.getPartName()); - moldDemand.setDemandNum(yieldOrder.getYpQty()); - moldDemand.setToolCode(processMoldToolList.get(0).getMoldCode()); - moldDemand.setToolName(processMoldToolList.get(0).getMoldName()); - moldDemand.setLinkOrderIds(yieldOrder.getId().toString()); + for (DsProcessMoldToolEntity dsProcessMoldToolEntity : processMoldToolList) { + MoldDemand moldDemand = moldDemandMapper.selectOne(Wrappers.lambdaQuery().eq(MoldDemand::getPartCode,dsProcessMoldToolEntity.getMoldCode()).eq(MoldDemand::getMafStatus,MoldDemandEnum.MAF_STATUS_CREATE.getCode())); + if(moldDemand == null){ + moldDemand = new MoldDemand(); + moldDemand.setMoCode(null); + moldDemand.setPartCode(yieldOrder.getPartCode()); + moldDemand.setPartName(yieldOrder.getPartName()); + moldDemand.setDemandNum(yieldOrder.getYpQty()); + moldDemand.setToolCode(processMoldToolList.get(0).getMoldCode()); + moldDemand.setToolName(processMoldToolList.get(0).getMoldName()); + moldDemand.setLinkOrderIds(yieldOrder.getId().toString()); // moldDemand.setStatus(MoldDemandEnum.STATUS_WAITING.getCode()); - moldDemand.setMafStatus(MoldDemandEnum.MAF_STATUS_CREATE.getCode()); - moldDemand.setMafType(MoldDemandEnum.MAF_TYPE_RB.getCode()); - moldDemand.setNeedDate(yieldOrder.getDemandDate()); - moldDemand.setQuaLevel(yieldOrder.getProductIdent()); - moldDemandMapper.insert(moldDemand); - }else{ - moldDemand.setDemandNum(moldDemand.getDemandNum() + yieldOrder.getYpQty()); - moldDemand.setLinkOrderIds(moldDemand.getLinkOrderIds().concat(",").concat(yieldOrder.getId().toString())); - moldDemandMapper.updateById(moldDemand); + moldDemand.setMafStatus(MoldDemandEnum.MAF_STATUS_CREATE.getCode()); + moldDemand.setMafType(MoldDemandEnum.MAF_TYPE_RB.getCode()); + moldDemand.setNeedDate(yieldOrder.getDemandDate()); + moldDemand.setQuaLevel(yieldOrder.getProductIdent()); + moldDemand.setMdCode(generateMdCode()); + moldDemandMapper.insert(moldDemand); + }else{ + moldDemand.setDemandNum(moldDemand.getDemandNum() + yieldOrder.getYpQty()); + moldDemand.setLinkOrderIds(moldDemand.getLinkOrderIds().concat(",").concat(yieldOrder.getId().toString())); + moldDemandMapper.updateById(moldDemand); + } + yieldOrder.setToolsDemand(BigDecimal.valueOf(moldDemand.getDemandNum())); + this.updateById(yieldOrder); } - yieldOrder.setToolsDemand(BigDecimal.valueOf(moldDemand.getDemandNum())); - this.updateById(yieldOrder); + } + }else if(YieldOrderEnum.YIELD_TYPE_6.getCode() == yieldOrder.getYieldType()){ + List subPartList = dsPartService.getPartSubList(yieldOrder.getPartCode(),yieldOrder.getPartVersion()); + if(CollectionUtils.isNotEmpty(subPartList)){ + for(DsPartEntity subPart : subPartList){ + MoldDemand moldDemand = moldDemandMapper.selectOne(Wrappers.lambdaQuery().eq(MoldDemand::getPartCode,subPart.getPartCode()).eq(MoldDemand::getMafStatus,MoldDemandEnum.MAF_STATUS_CREATE.getCode())); + if(moldDemand == null){ + moldDemand = new MoldDemand(); + moldDemand.setMoCode(null); + moldDemand.setPartCode(yieldOrder.getPartCode()); + moldDemand.setPartName(yieldOrder.getPartName()); + moldDemand.setToolCode(subPart.getPartCode()); + moldDemand.setToolName(subPart.getPartName()); + moldDemand.setDemandNum(subPart.getQuota() * yieldOrder.getYpQty()); + moldDemand.setLinkOrderIds(yieldOrder.getId().toString()); + moldDemand.setMafStatus(MoldDemandEnum.MAF_STATUS_CREATE.getCode()); + moldDemand.setMafType(MoldDemandEnum.MAF_TYPE_RB.getCode()); + moldDemand.setNeedDate(yieldOrder.getDemandDate()); + moldDemand.setQuaLevel(yieldOrder.getProductIdent()); + moldDemand.setMdCode(generateMdCode()); + moldDemandMapper.insert(moldDemand); + }else{ + moldDemand.setDemandNum(moldDemand.getDemandNum() + subPart.getQuota() * yieldOrder.getYpQty()); + moldDemand.setLinkOrderIds(moldDemand.getLinkOrderIds().concat(",").concat(yieldOrder.getId().toString())); + moldDemandMapper.updateById(moldDemand); + } + yieldOrder.setToolsDemand(BigDecimal.valueOf(moldDemand.getDemandNum())); + this.updateById(yieldOrder); + + } + } } return Boolean.TRUE; } + @Autowired + private RedisTemplate redisTemplate; + + /** + * 生成模具单号 + * @return 单号 例:202604280001 + */ + @Override + public String generateMdCode() { + // 1. 获取当前日期(用于单号中的日期部分) + String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + + // 2. 获取当天的流水号 + String key = "md_code:" + today; + Long seq = redisTemplate.opsForValue().increment(key); + + // 3. 如果是当天第一个,设置过期时间为2天(避免Redis内存堆积) + if (seq == 1) { + redisTemplate.expire(key, 2, TimeUnit.DAYS); + // 同时从数据库查询当天最大流水号(防止Redis数据丢失后重复) + seq = getMaxSeqFromDb(today) + 1; + redisTemplate.opsForValue().set(key, String.valueOf(seq), 2, TimeUnit.DAYS); + } + + // 4. 格式化流水号(4位,不足补0) + String serial = String.format("%04d", seq); + + // 5. 拼接单号 + return today + serial; + } + + /** + * 从数据库查询当天最大流水号(用于重启后恢复) + */ + private Long getMaxSeqFromDb(String today) { + String maxCode = moldDemandMapper.getMaxMdCodeByDate(today); + if (maxCode == null || maxCode.isEmpty()) { + return 0L; + } + // 提取流水号部分(日期共8位,后面的是流水号) + String serialStr = maxCode.substring(today.length()); + return Long.parseLong(serialStr); + } + @Override public Boolean verifyYieldOrderResource(YieldOrder yieldOrder) { // 根据生产订单,给各工序分派作业中心||外协