diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderDailyAssignMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderDailyAssignMapper.xml index 9b6c48f90..8d2668263 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderDailyAssignMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderDailyAssignMapper.xml @@ -26,7 +26,7 @@ INNER JOIN BS_TEAM_TIME d ON c.TS_ID = d.TS_ID WHERE a.CA_ID = #{hostCaId} - AND a.DAA_DATE >= TRUNC(SYSDATE) AND a.DAA_DATE < TRUNC(SYSDATE) + 1 + AND a.CREATE_TIME >= TRUNC(SYSDATE) AND a.CREATE_TIME < TRUNC(SYSDATE) + 1 AND a.wc_id IN #{id} @@ -61,7 +61,7 @@ INNER JOIN BS_TEAM_TIME d ON c.TS_ID = d.TS_ID WHERE a.CA_ID = #{hostCaId} - AND a.DAA_DATE >= TRUNC(SYSDATE) AND a.DAA_DATE < TRUNC(SYSDATE) + 1 + AND a.CREATE_TIME >= TRUNC(SYSDATE) AND a.CREATE_TIME < TRUNC(SYSDATE) + 1 AND a.wc_id IN #{id} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java index 99318e844..2799440f1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java @@ -413,6 +413,14 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl() .eq(WorkPlan::getId, wpr.getWpId())); + + // 如果是外协工序,且未报工,清空班组和时间,便于排产 + if (wp.getStatus().compareTo(WorkPlan.STATUS_WORK_OK) < 0) { + wp.setMakeTeam(null); + wp.setPlanStartTime(null); + wp.setPlanEndTime(null); + } + //如果不是勾选工序不处理 if (!wpr.getHandle()) { continue; @@ -422,18 +430,18 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl() - .eq(BsProcessSetEntity::getId, nextWorkPlan.getPpsId())); - if (nextWorkPlan.getMakeTeam() != null && bsProcessSetEntity != null && !"1".equalsIgnoreCase(bsProcessSetEntity.getIsDispatch())) { - teamSet = teamSetMapper.selectOne(new LambdaQueryWrapper() - .eq(TeamSet::getId, nextWorkPlan.getMakeTeam())); - } - wp.setMakeTeam(teamSet == null ? null : teamSet.getId()); +// BsProcessSetEntity bsProcessSetEntity = processSetMapper.selectOne(new LambdaQueryWrapper() +// .eq(BsProcessSetEntity::getId, nextWorkPlan.getPpsId())); +// if (nextWorkPlan.getMakeTeam() != null && bsProcessSetEntity != null && !"1".equalsIgnoreCase(bsProcessSetEntity.getIsDispatch())) { +// teamSet = teamSetMapper.selectOne(new LambdaQueryWrapper() +// .eq(TeamSet::getId, nextWorkPlan.getMakeTeam())); +// } +// wp.setMakeTeam(teamSet == null ? null : teamSet.getId()); + + // 工序信息重置,重新排产 wp.setOem(null); - wp.setPlanStartTime(null); wp.setUnqualifiedQty(0d); wp.setWorkQty(0d); - wp.setPlanEndTime(null); wp.setSubsidiaryTeam(null); wp.setOem("0"); wp.setCaId(wpr.getCaId()); diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index bdb6f972b..3b802c01c 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -496,8 +496,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl oldWorkPlanList = workPlanService.list(Wrappers.lambdaQuery().eq(WorkPlanEntity::getWoId,oldWorkOrder.getId()).orderByAsc(WorkPlanEntity::getOrders)); - List ppsIds = oldWorkPlanList.stream().map(WorkPlanEntity::getPpsId).collect(Collectors.toList()); - craftList = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).ne(YieldOrderCraftEntity::getCaId, 27).notIn(YieldOrderCraftEntity::getPpsId,ppsIds).orderByAsc(YieldOrderCraftEntity::getProcessNo)); + if(CollectionUtils.isNotEmpty(oldWorkPlanList)){ + List ppsIds = oldWorkPlanList.stream().map(WorkPlanEntity::getPpsId).collect(Collectors.toList()); + craftList = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).ne(YieldOrderCraftEntity::getCaId, 27).notIn(YieldOrderCraftEntity::getPpsId,ppsIds).orderByAsc(YieldOrderCraftEntity::getProcessNo)); + } } //过滤非外协工序 List craftList1 = craftList.stream().filter(item -> item.getIsOutsource() == false).collect(Collectors.toList()); @@ -617,6 +619,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl> equipAbilityMap = equipAbilityList.stream().collect(Collectors.groupingBy(EquipAbilityEntity::getEquipOrder)); //匹配设备资源 @@ -629,8 +632,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.eq(EquipResourceEntity::getCraftId, craft.getCaId()) .eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()) - .ge(EquipResourceEntity::getStartTime, dateTime) .eq(EquipResourceEntity::getIsUsed, 0) + .ge(EquipResourceEntity::getStartTime, dateTime) .in(EquipResourceEntity::getEquipOrder, entry.getKey()); //返工订单需要原班组加工 if(StringUtils.isNotEmpty(order.getReworkCode())){ @@ -658,6 +661,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl> equipResourceMap = equipResourceList.stream() .collect(Collectors.groupingBy( @@ -677,6 +681,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl capacityList = capacitySplit(equipResourceMap, sumCapacity); @@ -726,7 +731,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl generateCode() { // 1. 生成单号 - String sirCode = stStockInoutRecordService.generateCode(); + String sirCode = stStockInoutRecordService.generateOutStockNo(); // 2. 封装合表 VO StStockInoutRecordVO vo = new StStockInoutRecordVO(); diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java index e2287665c..88b383db0 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java @@ -140,7 +140,7 @@ public class StGraphiteMoldOutController extends BladeController { @Operation(summary = "生成石墨模出库单号", description = "获取新单据号并返回空账单对象") public R generateCode() { // 1. 生成单号 - String sirCode = stStockInoutRecordService.generateCode(); + String sirCode = stStockInoutRecordService.generateOutStockNo(); // 2. 封装合表 VO StStockInoutRecordVO vo = new StStockInoutRecordVO(); diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherOutRecordController.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherOutRecordController.java index b4d0cf0ac..b4d0bc9bb 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherOutRecordController.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherOutRecordController.java @@ -219,7 +219,7 @@ public class StOtherOutRecordController extends BladeController { @Operation(summary = "生成其他出库单号", description = "获取新单据号并返回空账单对象") public R generateCode() { // 1. 生成单号 - String sirCode = stStockInoutRecordService.generateCode(); + String sirCode = stStockInoutRecordService.generateOutStockNo(); // 2. 封装合表 VO StStockInoutRecordVO vo = new StStockInoutRecordVO(); diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.java index b9d2c8421..097663b92 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.java @@ -48,6 +48,10 @@ public interface StStockInoutRecordMapper extends BaseMapper String getTeamSetByUserId(Long picker); - int getMaxSerialNoByDate(String dateTime); + void insertTodaySeq(String today); + + Integer getCurrentSeqForUpdate(String today); + + void incrementSeq(String today); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml index f13f0be0c..6bc449e14 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml @@ -174,10 +174,26 @@ USER_ID - + SELECT current_num + FROM st_seq_daily + WHERE seq_date = #{today} FOR UPDATE diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStStockInoutRecordService.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStStockInoutRecordService.java index 7f9bada86..4ed2a5e11 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStStockInoutRecordService.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStStockInoutRecordService.java @@ -49,5 +49,7 @@ public interface IStStockInoutRecordService extends BaseService stockList = Collections.singletonList(stock); /* 2. 生成账单号 & 批次号 */ - String sirCode = stStockInoutRecordService.generateCode(); + String sirCode = stStockInoutRecordService.generateOutStockNo(); // String piNo = stStockInoutRecordService.generatePiNo("Q"); /* 3. 一条记录 = 原主账单 + 原明细 字段合并 */ diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java index ea71a512c..389105223 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java @@ -1,8 +1,6 @@ package org.springblade.wms.service.impl; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -160,23 +158,6 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl preOutStockList = new ArrayList<>(); - String datePrefix = DateUtil.format(new Date(), "yyyyMMdd"); - // 2. 当天最大序号 - String maxCode = stStockInoutRecordMapper.getMaxCheckCode(datePrefix); - int lastNum = 0; - if (StrUtil.isNotBlank(maxCode)) { - String number = maxCode.substring(datePrefix.length()); - String[] arr = number.split("-"); - // 防止没有"-"导致数组空 - if(arr.length >= 1){ - String realNum = arr[0]; - // 只有全数字才转整型 - if(StrUtil.isNumeric(realNum)){ - lastNum = Integer.parseInt(realNum); - } - } - } - // 4. 遍历每个玻璃饼,单独匹配库存+判断是否生成预出库 if (!CollectionUtils.isEmpty(glassCakePartList)) { for (DsPartEntity glassCake : glassCakePartList) { @@ -291,9 +272,7 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl preOutStockList = new ArrayList<>(); - String datePrefix = DateUtil.format(new Date(), "yyyyMMdd"); - // 2. 当天最大序号 - String maxCode = stStockInoutRecordMapper.getMaxCheckCode(datePrefix); - int lastNum = 0; - if (StrUtil.isNotBlank(maxCode)) { - String number = maxCode.substring(datePrefix.length()); - String[] arr = number.split("-"); - // 防止没有"-"导致数组空 - if(arr.length >= 1){ - String realNum = arr[0]; - // 只有全数字才转整型 - if(StrUtil.isNumeric(realNum)){ - lastNum = Integer.parseInt(realNum); - } - } - } int childNum = 1; - lastNum++; + String parentOutCode = stStockInoutRecordService.generateOutStockNo(); // 遍历每个子件 for (DsPartEntity subItem : allChildPartList) { @@ -183,7 +165,6 @@ public class StGraphiteMoldOutServiceImpl extends BaseServiceImpl stockMap = stockList.stream() .collect(Collectors.toMap(StRealtimeStock::getId, Function.identity())); - String datePrefix = DateUtil.format(new Date(), "yyyyMMdd"); - // 2. 当天最大序号 - String maxCode = stStockInoutRecordMapper.getMaxCheckCode(datePrefix); - int lastNum = 0; - if (StrUtil.isNotBlank(maxCode)) { - String number = maxCode.substring(datePrefix.length()); - String[] arr = number.split("-"); - // 防止没有"-"导致数组空 - if(arr.length >= 1){ - String realNum = arr[0]; - // 只有全数字才转整型 - if(StrUtil.isNumeric(realNum)){ - lastNum = Integer.parseInt(realNum); - } - } - } - // ========== 1.3 组装所有商品明细 ========== for (StRealtimeStock stock : outList) { StRealtimeStock entity = stockMap.get(stock.getId()); @@ -265,9 +248,8 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl Integer.parseInt(p.substring(9))) .orElse(0); - // 当天最大序号 - String maxCode = stStockInoutRecordMapper.getMaxCheckCode(datePrefix); - int lastNum = 0; - if (StrUtil.isNotBlank(maxCode)) { - String number = maxCode.substring(datePrefix.length()); - String[] arr = number.split("-"); - // 防止没有"-"导致数组空 - if(arr.length >= 1){ - String realNum = arr[0]; - // 只有全数字才转整型 - if(StrUtil.isNumeric(realNum)){ - lastNum = Integer.parseInt(realNum); - } - } - } // 主账单字段 = 明细合计 for (StStockInoutRecord detail : inoutList) { // 校验单条明细的必传字段 @@ -145,9 +130,7 @@ public class StOtherReceiptRecordServiceImpl extends BaseServiceImpl= 1){ +// String realNum = arr[0]; +// // 只有全数字才转整型 +// if(StrUtil.isNumeric(realNum)){ +// lastNum = Integer.parseInt(realNum); +// } +// } +// } +// // 3. 补零拼接 +// return datePrefix + StrUtil.padPre(String.valueOf(++lastNum), 4, '0'); +// } + + @Transactional(rollbackFor = Exception.class) public String generateCode() { - // 1. 日期前缀 - String datePrefix = DateUtil.format(new Date(), "yyyyMMdd"); - // 2. 当天最大序号 - String maxCode = baseMapper.getMaxCheckCode(datePrefix); - int lastNum = 0; - if (StrUtil.isNotBlank(maxCode)) { - String number = maxCode.substring(datePrefix.length()); - String[] arr = number.split("-"); - // 防止没有"-"导致数组空 - if(arr.length >= 1){ - String realNum = arr[0]; - // 只有全数字才转整型 - if(StrUtil.isNumeric(realNum)){ - lastNum = Integer.parseInt(realNum); - } - } - } - // 3. 补零拼接 - return datePrefix + StrUtil.padPre(String.valueOf(++lastNum), 4, '0'); + // 1. 获取日期 + String today = DateUtil.format(new Date(), "yyMMdd"); + // 初始化当天序号(不存在则插入0) + baseMapper.insertTodaySeq(today); + // 3. 原子 +1 + baseMapper.incrementSeq(today); + // 4. 加行锁,查询当前值 + Integer currentNum = baseMapper.getCurrentSeqForUpdate(today); + String seqNo = String.format("%05d", currentNum); + return "RK" + today + seqNo; } -// @Override -// @Transactional -// public String makeCode() { -// // 时间格式:yyMMddHHmmss(2位年+月+日+时+分+秒) -// String dateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")); -// // 获取下一个流水号 -// int serialNo = baseMapper.getMaxSerialNoByDate(dateTime); -// // 拼接最终单号:CK + 时间 + 4位流水号(前面补0) -// String sirCode = "CK" + dateTime + String.format("%04d", serialNo); -// -// return sirCode; -// } + @Transactional(rollbackFor = Exception.class) + public String generateOutStockNo() { + // 1. 获取日期 + String today = DateUtil.format(new Date(), "yyMMdd"); + // 初始化当天序号(不存在则插入0) + baseMapper.insertTodaySeq(today); + // 3. 原子 +1 + baseMapper.incrementSeq(today); + // 4. 加行锁,查询当前值 + Integer currentNum = baseMapper.getCurrentSeqForUpdate(today); + String seqNo = String.format("%05d", currentNum); + return "CK" + today + seqNo; + } @Override public String getMaxPiNo(String typeCode) {