Merge remote-tracking branch 'origin/master'

liweidong
maxiangong 3 days ago
commit 643adce808
  1. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderDailyAssignMapper.xml
  2. 26
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  3. 10
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java
  4. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGlassCakeOutController.java
  5. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java
  6. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StOtherOutRecordController.java
  7. 6
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.java
  8. 24
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StStockInoutRecordMapper.xml
  9. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStStockInoutRecordService.java
  10. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StClassRequestServiceImpl.java
  11. 23
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java
  12. 21
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGraphiteMoldOutServiceImpl.java
  13. 24
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherOutRecordServiceImpl.java
  14. 19
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java
  15. 81
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StStockInoutRecordServiceImpl.java

@ -26,7 +26,7 @@
INNER JOIN BS_TEAM_TIME d ON c.TS_ID = d.TS_ID INNER JOIN BS_TEAM_TIME d ON c.TS_ID = d.TS_ID
WHERE WHERE
a.CA_ID = #{hostCaId} 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 AND a.wc_id IN
<foreach collection="wcList" item="id" open="(" close=")" separator=","> <foreach collection="wcList" item="id" open="(" close=")" separator=",">
#{id} #{id}
@ -61,7 +61,7 @@
INNER JOIN BS_TEAM_TIME d ON c.TS_ID = d.TS_ID INNER JOIN BS_TEAM_TIME d ON c.TS_ID = d.TS_ID
WHERE WHERE
a.CA_ID = #{hostCaId} a.CA_ID = #{hostCaId}
AND a.DAA_DATE >= TRUNC(SYSDATE) AND a.DAA_DATE &lt; TRUNC(SYSDATE) + 1 AND a.CREATE_TIME >= TRUNC(SYSDATE) AND a.CREATE_TIME &lt; TRUNC(SYSDATE) + 1
AND a.wc_id IN AND a.wc_id IN
<foreach collection="wcList" item="id" open="(" close=")" separator=","> <foreach collection="wcList" item="id" open="(" close=")" separator=",">
#{id} #{id}

@ -413,6 +413,14 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
for (WorkPlanRun wpr : wprList) { for (WorkPlanRun wpr : wprList) {
wp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>() wp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getId, wpr.getWpId())); .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()) { if (!wpr.getHandle()) {
continue; continue;
@ -422,18 +430,18 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
if (nextWorkPlan == null) { if (nextWorkPlan == null) {
throw new ServiceException("未找到下道工序,工序ID:" + wp.getNextWpId()); throw new ServiceException("未找到下道工序,工序ID:" + wp.getNextWpId());
} }
BsProcessSetEntity bsProcessSetEntity = processSetMapper.selectOne(new LambdaQueryWrapper<BsProcessSetEntity>() // BsProcessSetEntity bsProcessSetEntity = processSetMapper.selectOne(new LambdaQueryWrapper<BsProcessSetEntity>()
.eq(BsProcessSetEntity::getId, nextWorkPlan.getPpsId())); // .eq(BsProcessSetEntity::getId, nextWorkPlan.getPpsId()));
if (nextWorkPlan.getMakeTeam() != null && bsProcessSetEntity != null && !"1".equalsIgnoreCase(bsProcessSetEntity.getIsDispatch())) { // if (nextWorkPlan.getMakeTeam() != null && bsProcessSetEntity != null && !"1".equalsIgnoreCase(bsProcessSetEntity.getIsDispatch())) {
teamSet = teamSetMapper.selectOne(new LambdaQueryWrapper<TeamSet>() // teamSet = teamSetMapper.selectOne(new LambdaQueryWrapper<TeamSet>()
.eq(TeamSet::getId, nextWorkPlan.getMakeTeam())); // .eq(TeamSet::getId, nextWorkPlan.getMakeTeam()));
} // }
wp.setMakeTeam(teamSet == null ? null : teamSet.getId()); // wp.setMakeTeam(teamSet == null ? null : teamSet.getId());
// 工序信息重置,重新排产
wp.setOem(null); wp.setOem(null);
wp.setPlanStartTime(null);
wp.setUnqualifiedQty(0d); wp.setUnqualifiedQty(0d);
wp.setWorkQty(0d); wp.setWorkQty(0d);
wp.setPlanEndTime(null);
wp.setSubsidiaryTeam(null); wp.setSubsidiaryTeam(null);
wp.setOem("0"); wp.setOem("0");
wp.setCaId(wpr.getCaId()); wp.setCaId(wpr.getCaId());

@ -496,9 +496,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} }
//查询已经加工完的 //查询已经加工完的
List<WorkPlanEntity> oldWorkPlanList = workPlanService.list(Wrappers.<WorkPlanEntity>lambdaQuery().eq(WorkPlanEntity::getWoId,oldWorkOrder.getId()).orderByAsc(WorkPlanEntity::getOrders)); List<WorkPlanEntity> oldWorkPlanList = workPlanService.list(Wrappers.<WorkPlanEntity>lambdaQuery().eq(WorkPlanEntity::getWoId,oldWorkOrder.getId()).orderByAsc(WorkPlanEntity::getOrders));
if(CollectionUtils.isNotEmpty(oldWorkPlanList)){
List<Long> ppsIds = oldWorkPlanList.stream().map(WorkPlanEntity::getPpsId).collect(Collectors.toList()); List<Long> ppsIds = oldWorkPlanList.stream().map(WorkPlanEntity::getPpsId).collect(Collectors.toList());
craftList = yieldOrderCraftService.list(Wrappers.<YieldOrderCraftEntity>lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).ne(YieldOrderCraftEntity::getCaId, 27).notIn(YieldOrderCraftEntity::getPpsId,ppsIds).orderByAsc(YieldOrderCraftEntity::getProcessNo)); craftList = yieldOrderCraftService.list(Wrappers.<YieldOrderCraftEntity>lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).ne(YieldOrderCraftEntity::getCaId, 27).notIn(YieldOrderCraftEntity::getPpsId,ppsIds).orderByAsc(YieldOrderCraftEntity::getProcessNo));
} }
}
//过滤非外协工序 //过滤非外协工序
List<YieldOrderCraftEntity> craftList1 = craftList.stream().filter(item -> item.getIsOutsource() == false).collect(Collectors.toList()); List<YieldOrderCraftEntity> craftList1 = craftList.stream().filter(item -> item.getIsOutsource() == false).collect(Collectors.toList());
List<Long> workCenterList = craftList1.stream().filter(item -> item.getWorkCenterId() != null).map(YieldOrderCraftEntity::getWorkCenterId).collect(Collectors.toList()); List<Long> workCenterList = craftList1.stream().filter(item -> item.getWorkCenterId() != null).map(YieldOrderCraftEntity::getWorkCenterId).collect(Collectors.toList());
@ -617,6 +619,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
isSchecuding = false; isSchecuding = false;
continue; continue;
} }
log.info("开始获取设备资源:" + DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
Map<Integer, List<EquipAbilityEntity>> equipAbilityMap = equipAbilityList.stream().collect(Collectors.groupingBy(EquipAbilityEntity::getEquipOrder)); Map<Integer, List<EquipAbilityEntity>> equipAbilityMap = equipAbilityList.stream().collect(Collectors.groupingBy(EquipAbilityEntity::getEquipOrder));
//匹配设备资源 //匹配设备资源
@ -629,8 +632,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
LambdaQueryWrapper<EquipResourceEntity> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<EquipResourceEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(EquipResourceEntity::getCraftId, craft.getCaId()) wrapper.eq(EquipResourceEntity::getCraftId, craft.getCaId())
.eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()) .eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId())
.ge(EquipResourceEntity::getStartTime, dateTime)
.eq(EquipResourceEntity::getIsUsed, 0) .eq(EquipResourceEntity::getIsUsed, 0)
.ge(EquipResourceEntity::getStartTime, dateTime)
.in(EquipResourceEntity::getEquipOrder, entry.getKey()); .in(EquipResourceEntity::getEquipOrder, entry.getKey());
//返工订单需要原班组加工 //返工订单需要原班组加工
if(StringUtils.isNotEmpty(order.getReworkCode())){ if(StringUtils.isNotEmpty(order.getReworkCode())){
@ -658,6 +661,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
isSchecuding = false; isSchecuding = false;
continue; continue;
} }
log.info("已获取设备资源:" + DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
//设备资源按照时间段分组并按时间排序,然后再每个组内按照剩余产能倒序排序 //设备资源按照时间段分组并按时间排序,然后再每个组内按照剩余产能倒序排序
Map<LocalDateTime, List<EquipResourceEntity>> equipResourceMap = equipResourceList.stream() Map<LocalDateTime, List<EquipResourceEntity>> equipResourceMap = equipResourceList.stream()
.collect(Collectors.groupingBy( .collect(Collectors.groupingBy(
@ -677,6 +681,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
) )
)); ));
//计算生产所需产能 //计算生产所需产能
log.info("开始计算所需产能:" + DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
BigDecimal sumCapacity = order.getYieldType() == YieldOrderEnum.YIELD_TYPE_1.getCode() ? order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())) : BigDecimal.valueOf(order.getYpQty()); BigDecimal sumCapacity = order.getYieldType() == YieldOrderEnum.YIELD_TYPE_1.getCode() ? order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())) : BigDecimal.valueOf(order.getYpQty());
//需要判断设备额定生产能力是否满足订单总产能,如果不满足,则需要把总产能进行拆分 //需要判断设备额定生产能力是否满足订单总产能,如果不满足,则需要把总产能进行拆分
List<BigDecimal> capacityList = capacitySplit(equipResourceMap, sumCapacity); List<BigDecimal> capacityList = capacitySplit(equipResourceMap, sumCapacity);
@ -726,7 +731,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} }
personHours = Double.valueOf(hourMap.get("totalTime").toString()); personHours = Double.valueOf(hourMap.get("totalTime").toString());
workPlan.setPlanEndTime(workPlan.getPlanEndTime().plusMinutes(personHours.longValue())); workPlan.setPlanEndTime(workPlan.getPlanEndTime().plusMinutes(personHours.longValue()));
workPlan.setStandardTime(Double.valueOf(hourMap.get("standartTime").toString())); workPlan.setStandardTime(Double.valueOf(hourMap.get("standardTime").toString()));
workPlan.setPrepareTime(Double.valueOf(hourMap.get("prepareTime").toString())); workPlan.setPrepareTime(Double.valueOf(hourMap.get("prepareTime").toString()));
workPlan.setHourType(hourMap.get("hourType").toString()); workPlan.setHourType(hourMap.get("hourType").toString());
} }
@ -799,6 +804,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} }
} }
log.info("匹配设备资源结束:" + DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
if(CollectionUtils.isNotEmpty(processPlanList)){ if(CollectionUtils.isNotEmpty(processPlanList)){
log.info("设备排产用到的资源是:" + JSONObject.toJSONString(processPlanList)); log.info("设备排产用到的资源是:" + JSONObject.toJSONString(processPlanList));
WorkPlanEntity workPlan = new WorkPlanEntity(); WorkPlanEntity workPlan = new WorkPlanEntity();

@ -140,7 +140,7 @@ public class StGlassCakeOutController extends BladeController {
@Operation(summary = "生成玻璃饼出库单号", description = "获取新单据号并返回空账单对象") @Operation(summary = "生成玻璃饼出库单号", description = "获取新单据号并返回空账单对象")
public R<StStockInoutRecordVO> generateCode() { public R<StStockInoutRecordVO> generateCode() {
// 1. 生成单号 // 1. 生成单号
String sirCode = stStockInoutRecordService.generateCode(); String sirCode = stStockInoutRecordService.generateOutStockNo();
// 2. 封装合表 VO // 2. 封装合表 VO
StStockInoutRecordVO vo = new StStockInoutRecordVO(); StStockInoutRecordVO vo = new StStockInoutRecordVO();

@ -140,7 +140,7 @@ public class StGraphiteMoldOutController extends BladeController {
@Operation(summary = "生成石墨模出库单号", description = "获取新单据号并返回空账单对象") @Operation(summary = "生成石墨模出库单号", description = "获取新单据号并返回空账单对象")
public R<StStockInoutRecordVO> generateCode() { public R<StStockInoutRecordVO> generateCode() {
// 1. 生成单号 // 1. 生成单号
String sirCode = stStockInoutRecordService.generateCode(); String sirCode = stStockInoutRecordService.generateOutStockNo();
// 2. 封装合表 VO // 2. 封装合表 VO
StStockInoutRecordVO vo = new StStockInoutRecordVO(); StStockInoutRecordVO vo = new StStockInoutRecordVO();

@ -219,7 +219,7 @@ public class StOtherOutRecordController extends BladeController {
@Operation(summary = "生成其他出库单号", description = "获取新单据号并返回空账单对象") @Operation(summary = "生成其他出库单号", description = "获取新单据号并返回空账单对象")
public R<StStockInoutRecordVO> generateCode() { public R<StStockInoutRecordVO> generateCode() {
// 1. 生成单号 // 1. 生成单号
String sirCode = stStockInoutRecordService.generateCode(); String sirCode = stStockInoutRecordService.generateOutStockNo();
// 2. 封装合表 VO // 2. 封装合表 VO
StStockInoutRecordVO vo = new StStockInoutRecordVO(); StStockInoutRecordVO vo = new StStockInoutRecordVO();

@ -48,6 +48,10 @@ public interface StStockInoutRecordMapper extends BaseMapper<StStockInoutRecord>
String getTeamSetByUserId(Long picker); String getTeamSetByUserId(Long picker);
int getMaxSerialNoByDate(String dateTime); void insertTodaySeq(String today);
Integer getCurrentSeqForUpdate(String today);
void incrementSeq(String today);
} }

@ -174,10 +174,26 @@
USER_ID USER_ID
</select> </select>
<select id="getMaxSerialNoByDate" resultType="java.lang.Integer"> <insert id="insertTodaySeq">
SELECT NVL(MAX(TO_NUMBER(SUBSTR(SIR_CODE, 13, 4))), 0) + 1 MERGE INTO st_seq_daily t
FROM ST_STOCK_INOUT_RECORD USING DUAL
WHERE SIR_CODE LIKE CONCAT('CK', #{dateTime}, '%') ON (t.seq_date = #{today})
WHEN NOT MATCHED THEN
INSERT (seq_date, current_num) VALUES (#{today}, 0)
</insert>
<!-- 2. 序号 +1(原子操作) -->
<update id="incrementSeq">
UPDATE st_seq_daily
SET current_num = current_num + 1
WHERE seq_date = #{today}
</update>
<!-- 3. 行锁查询(Oracle 写法:FOR UPDATE) -->
<select id="getCurrentSeqForUpdate" resultType="java.lang.Integer">
SELECT current_num
FROM st_seq_daily
WHERE seq_date = #{today}
FOR UPDATE FOR UPDATE
</select> </select>

@ -49,5 +49,7 @@ public interface IStStockInoutRecordService extends BaseService<StStockInoutReco
StStockInoutRecord createInoutRecord(Short inOutSource, Long shId, BladeUser createUser, BladeUser userId, Double arriveQuantity, Double unitPrice, String piNo, StGoods stGoods, Long brId, Long slId, String checkNo, String quantityLevel, String buyCode, boolean moldBaseMaterial); StStockInoutRecord createInoutRecord(Short inOutSource, Long shId, BladeUser createUser, BladeUser userId, Double arriveQuantity, Double unitPrice, String piNo, StGoods stGoods, Long brId, Long slId, String checkNo, String quantityLevel, String buyCode, boolean moldBaseMaterial);
String getTeamSetByUserId(Long picker); String getTeamSetByUserId(Long picker);
String generateOutStockNo();
} }

@ -343,7 +343,7 @@ public class StClassRequestServiceImpl extends BaseServiceImpl<StClassRequestMap
List<StRealtimeStock> stockList = Collections.singletonList(stock); List<StRealtimeStock> stockList = Collections.singletonList(stock);
/* 2. 生成账单号 & 批次号 */ /* 2. 生成账单号 & 批次号 */
String sirCode = stStockInoutRecordService.generateCode(); String sirCode = stStockInoutRecordService.generateOutStockNo();
// String piNo = stStockInoutRecordService.generatePiNo("Q"); // String piNo = stStockInoutRecordService.generatePiNo("Q");
/* 3. 一条记录 = 原主账单 + 原明细 字段合并 */ /* 3. 一条记录 = 原主账单 + 原明细 字段合并 */

@ -1,8 +1,6 @@
package org.springblade.wms.service.impl; package org.springblade.wms.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; 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.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -160,23 +158,6 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl<StGlassCakeOutMap
// 3. 初始化预出库列表(收集所有库存充足的预出库实体) // 3. 初始化预出库列表(收集所有库存充足的预出库实体)
List<StGlassCakeOut> preOutStockList = new ArrayList<>(); List<StGlassCakeOut> 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. 遍历每个玻璃饼,单独匹配库存+判断是否生成预出库 // 4. 遍历每个玻璃饼,单独匹配库存+判断是否生成预出库
if (!CollectionUtils.isEmpty(glassCakePartList)) { if (!CollectionUtils.isEmpty(glassCakePartList)) {
for (DsPartEntity glassCake : glassCakePartList) { for (DsPartEntity glassCake : glassCakePartList) {
@ -291,9 +272,7 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl<StGlassCakeOutMap
preOutStock.setPartCode(faYieldOrder.getPartCode()); preOutStock.setPartCode(faYieldOrder.getPartCode());
preOutStock.setPartName(faYieldOrder.getPartName()); preOutStock.setPartName(faYieldOrder.getPartName());
lastNum++; preOutStock.setOutCode(stStockInoutRecordService.generateOutStockNo());
String sirCode = datePrefix + StrUtil.padPre(String.valueOf(lastNum), 4, '0');
preOutStock.setOutCode(sirCode);
// preOutStock.setOutCode(stStockInoutRecordService.generateCode()); // preOutStock.setOutCode(stStockInoutRecordService.generateCode());
preOutStock.setRequireQty(requireQty); preOutStock.setRequireQty(requireQty);
preOutStock.setPreOutQty(actualTake); preOutStock.setPreOutQty(actualTake);

@ -1,8 +1,6 @@
package org.springblade.wms.service.impl; package org.springblade.wms.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; 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.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -135,24 +133,8 @@ public class StGraphiteMoldOutServiceImpl extends BaseServiceImpl<StGraphiteMold
List<StGraphiteMoldOut> preOutStockList = new ArrayList<>(); List<StGraphiteMoldOut> 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; int childNum = 1;
lastNum++; String parentOutCode = stStockInoutRecordService.generateOutStockNo();
// 遍历每个子件 // 遍历每个子件
for (DsPartEntity subItem : allChildPartList) { for (DsPartEntity subItem : allChildPartList) {
@ -183,7 +165,6 @@ public class StGraphiteMoldOutServiceImpl extends BaseServiceImpl<StGraphiteMold
preOutStock.setYoCode(faYieldOrder.getYoCode()); preOutStock.setYoCode(faYieldOrder.getYoCode());
preOutStock.setCardNo(dto.getCardNo()); preOutStock.setCardNo(dto.getCardNo());
String parentOutCode = datePrefix + StrUtil.padPre(String.valueOf(lastNum), 4, '0');
preOutStock.setParentOutCode(parentOutCode); preOutStock.setParentOutCode(parentOutCode);
String outCode = parentOutCode + "-" + childNum; String outCode = parentOutCode + "-" + childNum;
preOutStock.setOutCode(outCode); preOutStock.setOutCode(outCode);

@ -151,7 +151,7 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
stock.setOutQuantity(stOtherOutRecord.getOutQty()); stock.setOutQuantity(stOtherOutRecord.getOutQty());
StStockInoutRecord detail = new StStockInoutRecord(); StStockInoutRecord detail = new StStockInoutRecord();
// 明细复用主单公共属性 // 明细复用主单公共属性
detail.setSirCode(stStockInoutRecordService.generateCode()); // 单据编码 detail.setSirCode(stStockInoutRecordService.generateOutStockNo()); // 单据编码
detail.setInOutDate(mainInout.getInOutDate()); detail.setInOutDate(mainInout.getInOutDate());
detail.setInOutSource(mainInout.getInOutSource()); detail.setInOutSource(mainInout.getInOutSource());
detail.setShId(stock.getShId()); detail.setShId(stock.getShId());
@ -240,23 +240,6 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
Map<Long, StRealtimeStock> stockMap = stockList.stream() Map<Long, StRealtimeStock> stockMap = stockList.stream()
.collect(Collectors.toMap(StRealtimeStock::getId, Function.identity())); .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 组装所有商品明细 ========== // ========== 1.3 组装所有商品明细 ==========
for (StRealtimeStock stock : outList) { for (StRealtimeStock stock : outList) {
StRealtimeStock entity = stockMap.get(stock.getId()); StRealtimeStock entity = stockMap.get(stock.getId());
@ -265,9 +248,8 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
} }
StStockInoutRecord detail = new StStockInoutRecord(); StStockInoutRecord detail = new StStockInoutRecord();
// 明细复用主单公共属性 // 明细复用主单公共属性
lastNum++;
String sirCode = datePrefix + StrUtil.padPre(String.valueOf(lastNum), 4, '0'); detail.setSirCode(stStockInoutRecordService.generateOutStockNo());
detail.setSirCode(sirCode);
// detail.setSirCode(stStockInoutRecordService.generateCode()); // 单据编码 // detail.setSirCode(stStockInoutRecordService.generateCode()); // 单据编码
detail.setInOutDate(mainInout.getInOutDate()); detail.setInOutDate(mainInout.getInOutDate());
detail.setInOutSource(mainInout.getInOutSource()); detail.setInOutSource(mainInout.getInOutSource());

@ -111,21 +111,6 @@ public class StOtherReceiptRecordServiceImpl extends BaseServiceImpl<StOtherRece
.map(p -> Integer.parseInt(p.substring(9))) .map(p -> Integer.parseInt(p.substring(9)))
.orElse(0); .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) { for (StStockInoutRecord detail : inoutList) {
// 校验单条明细的必传字段 // 校验单条明细的必传字段
@ -145,9 +130,7 @@ public class StOtherReceiptRecordServiceImpl extends BaseServiceImpl<StOtherRece
} }
if (detail.getSirCode() == null) { if (detail.getSirCode() == null) {
lastNum++; detail.setSirCode(stStockInoutRecordService.generateCode());
String sirCode = datePrefix + StrUtil.padPre(String.valueOf(lastNum), 4, '0');
detail.setSirCode(sirCode);
} }
detail.setInOutSource(StStockInoutRecord.INOUT_SOURCE_OTHER_PURCHASE_RECEIPT); detail.setInOutSource(StStockInoutRecord.INOUT_SOURCE_OTHER_PURCHASE_RECEIPT);
// 赋值公共属性:批次号、入库单关联ID、部门/创建人 // 赋值公共属性:批次号、入库单关联ID、部门/创建人

@ -2,7 +2,6 @@ package org.springblade.wms.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -18,6 +17,7 @@ import org.springblade.wms.pojo.vo.StStockInoutRecordVO;
import org.springblade.wms.service.IStStockInoutRecordService; import org.springblade.wms.service.IStStockInoutRecordService;
import org.springblade.wms.service.IStStorehouseService; import org.springblade.wms.service.IStStorehouseService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -77,41 +77,56 @@ public class StStockInoutRecordServiceImpl extends BaseServiceImpl<StStockInoutR
return voPage; return voPage;
} }
@Override // @Override
// public String generateCode1() {
// // 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');
// }
@Transactional(rollbackFor = Exception.class)
public String generateCode() { public String generateCode() {
// 1. 日期前缀 // 1. 获取日期
String datePrefix = DateUtil.format(new Date(), "yyyyMMdd"); String today = DateUtil.format(new Date(), "yyMMdd");
// 2. 当天最大序号 // 初始化当天序号(不存在则插入0)
String maxCode = baseMapper.getMaxCheckCode(datePrefix); baseMapper.insertTodaySeq(today);
int lastNum = 0; // 3. 原子 +1
if (StrUtil.isNotBlank(maxCode)) { baseMapper.incrementSeq(today);
String number = maxCode.substring(datePrefix.length()); // 4. 加行锁,查询当前值
String[] arr = number.split("-"); Integer currentNum = baseMapper.getCurrentSeqForUpdate(today);
// 防止没有"-"导致数组空 String seqNo = String.format("%05d", currentNum);
if(arr.length >= 1){ return "RK" + today + seqNo;
String realNum = arr[0];
// 只有全数字才转整型
if(StrUtil.isNumeric(realNum)){
lastNum = Integer.parseInt(realNum);
}
}
}
// 3. 补零拼接
return datePrefix + StrUtil.padPre(String.valueOf(++lastNum), 4, '0');
} }
// @Override @Transactional(rollbackFor = Exception.class)
// @Transactional public String generateOutStockNo() {
// public String makeCode() { // 1. 获取日期
// // 时间格式:yyMMddHHmmss(2位年+月+日+时+分+秒) String today = DateUtil.format(new Date(), "yyMMdd");
// String dateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")); // 初始化当天序号(不存在则插入0)
// // 获取下一个流水号 baseMapper.insertTodaySeq(today);
// int serialNo = baseMapper.getMaxSerialNoByDate(dateTime); // 3. 原子 +1
// // 拼接最终单号:CK + 时间 + 4位流水号(前面补0) baseMapper.incrementSeq(today);
// String sirCode = "CK" + dateTime + String.format("%04d", serialNo); // 4. 加行锁,查询当前值
// Integer currentNum = baseMapper.getCurrentSeqForUpdate(today);
// return sirCode; String seqNo = String.format("%05d", currentNum);
// } return "CK" + today + seqNo;
}
@Override @Override
public String getMaxPiNo(String typeCode) { public String getMaxPiNo(String typeCode) {

Loading…
Cancel
Save