diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productionissue/MesWmProductionIssueServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productionissue/MesWmProductionIssueServiceImpl.java index 2c8692b..d4f7010 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productionissue/MesWmProductionIssueServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productionissue/MesWmProductionIssueServiceImpl.java @@ -12,9 +12,13 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productionissue.MesWmProduc import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productionissue.MesWmProductionIssueDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productionissue.MesWmProductionIssueLineDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.productionissue.MesWmProductionIssueMapper; +import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; import cn.iocoder.yudao.module.mes.enums.wm.MesWmProductionIssueStatusEnum; +import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum; import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; +import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; +import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -24,6 +28,7 @@ import java.math.BigDecimal; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; /** @@ -44,6 +49,8 @@ public class MesWmProductionIssueServiceImpl implements MesWmProductionIssueServ private MesMdWorkstationService workstationService; @Resource private MesProWorkOrderService workOrderService; + @Resource + private MesWmTransactionService wmTransactionService; @Override @Transactional(rollbackFor = Exception.class) @@ -133,26 +140,31 @@ public class MesWmProductionIssueServiceImpl implements MesWmProductionIssueServ @Override @Transactional(rollbackFor = Exception.class) public void finishProductionIssue(Long id) { - // 校验存在 + // 1. 校验存在 MesWmProductionIssueDO issue = validateProductionIssueExists(id); if (ObjUtil.notEqual(MesWmProductionIssueStatusEnum.APPROVED.getStatus(), issue.getStatus())) { throw exception(WM_PRODUCTION_ISSUE_STATUS_INVALID); } - // 遍历所有明细,更新库存台账(扣减库存) - // TODO @芋艿:【后续在弄】这里可能有点问题;缺少库存更新;后面在弄; - List details = issueDetailService.getProductionIssueDetailListByIssueId(id); - for (MesWmProductionIssueDetailDO detail : details) { - // materialStockService.decreaseStock( - // detail.getItemId(), detail.getWarehouseId(), detail.getLocationId(), detail.getAreaId(), - // detail.getBatchId(), detail.getQuantity(), issue.getWorkOrderId(), null, null); - } + // 2. 遍历所有明细,创建库存事务(扣减库存 + 记录流水) + createTransactionList(issue); - // 更新出库单状态 + // 3. 更新出库单状态 issueMapper.updateById(new MesWmProductionIssueDO() .setId(id).setStatus(MesWmProductionIssueStatusEnum.FINISHED.getStatus())); } + private void createTransactionList(MesWmProductionIssueDO issue) { + List details = issueDetailService.getProductionIssueDetailListByIssueId(issue.getId()); + wmTransactionService.createTransactionList(convertList(details, detail -> new MesWmTransactionSaveReqDTO() + .setType(MesWmTransactionTypeEnum.OUT.getType()).setItemId(detail.getItemId()) + .setQuantity(detail.getQuantity().negate()) // 出库数量为负数 + .setBatchId(detail.getBatchId()).setBatchCode(detail.getBatchCode()) + .setWarehouseId(detail.getWarehouseId()).setLocationId(detail.getLocationId()).setAreaId(detail.getAreaId()) + .setBizType(MesBizTypeConstants.WM_ISSUE).setBizId(issue.getId()) + .setBizCode(issue.getCode()).setBizLineId(detail.getLineId()))); + } + @Override @Transactional(rollbackFor = Exception.class) public void cancelProductionIssue(Long id) { diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueServiceImpl.java index dd183ce..2b98d99 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueServiceImpl.java @@ -13,11 +13,15 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssu import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDetailDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueLineDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnissue.MesWmReturnIssueMapper; +import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnIssueStatusEnum; +import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum; import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; +import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; +import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,6 +32,7 @@ import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; /** @@ -50,6 +55,8 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService { private MesProWorkOrderService workOrderService; @Resource private MesMdItemService itemService; + @Resource + private MesWmTransactionService wmTransactionService; @Override @Transactional(rollbackFor = Exception.class) @@ -172,27 +179,31 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService { @Override @Transactional(rollbackFor = Exception.class) public void finishReturnIssue(Long id) { - // 校验存在 + 待执行退料状态 + // 1. 校验存在 + 待执行退料状态 MesWmReturnIssueDO issue = validateReturnIssueExists(id); if (ObjUtil.notEqual(MesWmReturnIssueStatusEnum.APPROVED.getStatus(), issue.getStatus())) { throw exception(WM_RETURN_ISSUE_NOT_APPROVED); } - // 完成退料(待执行退料 → 已完成),更新库存台账 - // 遍历所有明细,更新库存台账(增加库存,与领料出库相反) - // TODO @芋艿:【后续在弄】这里可能有点问题;缺少库存更新;后面在弄; - List details = issueDetailService.getReturnIssueDetailListByIssueId(id); - for (MesWmReturnIssueDetailDO detail : details) { - // materialStockService.increaseStock( - // detail.getItemId(), detail.getWarehouseId(), detail.getLocationId(), detail.getAreaId(), - // detail.getBatchId(), detail.getQuantity(), issue.getWorkOrderId(), null, null); - } + // 2. 遍历所有明细,创建库存事务(增加库存 + 记录流水) + createTransactionList(issue); - // 更新退料单状态 + // 3. 更新退料单状态 issueMapper.updateById(new MesWmReturnIssueDO() .setId(id).setStatus(MesWmReturnIssueStatusEnum.FINISHED.getStatus())); } + private void createTransactionList(MesWmReturnIssueDO issue) { + List details = issueDetailService.getReturnIssueDetailListByIssueId(issue.getId()); + wmTransactionService.createTransactionList(convertList(details, detail -> new MesWmTransactionSaveReqDTO() + .setType(MesWmTransactionTypeEnum.IN.getType()).setItemId(detail.getItemId()) + .setQuantity(detail.getQuantity()) // 入库数量为正数(退料回仓) + .setBatchId(detail.getBatchId()).setBatchCode(detail.getBatchCode()) + .setWarehouseId(detail.getWarehouseId()).setLocationId(detail.getLocationId()).setAreaId(detail.getAreaId()) + .setBizType(MesBizTypeConstants.WM_RETURN_ISSUE).setBizId(issue.getId()) + .setBizCode(issue.getCode()).setBizLineId(detail.getLineId()))); + } + @Override @Transactional(rollbackFor = Exception.class) public void cancelReturnIssue(Long id) {