|
|
|
|
@ -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<YieldOrderMapper, Yie |
|
|
|
|
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()); |
|
|
|
|
@ -560,34 +564,112 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie |
|
|
|
|
}else if(YieldOrderEnum.YIELD_TYPE_3.getCode() == yieldOrder.getYieldType()){ |
|
|
|
|
List<DsProcessMoldToolEntity> processMoldToolList = dsPartService.getClassCakeWork(yieldOrder.getPartCode(),yieldOrder.getRoamNo(),yieldOrder.getPartVersion()); |
|
|
|
|
if(CollectionUtils.isNotEmpty(processMoldToolList)){ |
|
|
|
|
MoldDemand moldDemand = moldDemandMapper.selectOne(Wrappers.<MoldDemand>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.<MoldDemand>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<DsPartEntity> subPartList = dsPartService.getPartSubList(yieldOrder.getPartCode(),yieldOrder.getPartVersion()); |
|
|
|
|
if(CollectionUtils.isNotEmpty(subPartList)){ |
|
|
|
|
for(DsPartEntity subPart : subPartList){ |
|
|
|
|
MoldDemand moldDemand = moldDemandMapper.selectOne(Wrappers.<MoldDemand>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<String, String> 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) { |
|
|
|
|
// 根据生产订单,给各工序分派作业中心||外协
|
|
|
|
|
|