| | |
| | | import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; |
| | | import cn.iocoder.yudao.module.mes.service.wm.productreceipt.MesWmProductReceiptService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | |
| | | private MesWmWarehouseLocationService locationService; |
| | | @Resource |
| | | private MesWmWarehouseAreaService areaService; |
| | | @Resource |
| | | @Lazy // 避免循环依赖:产品收货单自动生成逻辑依赖生产入库单 Mapper/行 Service |
| | | private MesWmProductReceiptService productReceiptService; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | // 3.2 无需检验:按合格品/不合格品各生成一行 + 明细 |
| | | BigDecimal qualifiedQty = ObjectUtil.defaultIfNull(feedback.getQualifiedQuantity(), BigDecimal.ZERO); |
| | | BigDecimal unqualifiedQty = ObjectUtil.defaultIfNull(feedback.getUnqualifiedQuantity(), BigDecimal.ZERO); |
| | | // 3.2.0 兜底:合格/不良数量都未填写时(报工只填报工数量),默认整单为合格品 |
| | | if (qualifiedQty.compareTo(BigDecimal.ZERO) <= 0 && unqualifiedQty.compareTo(BigDecimal.ZERO) <= 0) { |
| | | qualifiedQty = feedback.getFeedbackQuantity(); |
| | | } |
| | | // 3.2.1 不合格品行 + 明细 |
| | | if (unqualifiedQty.compareTo(BigDecimal.ZERO) > 0) { |
| | | MesWmProductProduceLineDO unqualifiedLine = buildProduceLine(produce, feedback, batchId, batchCode, |
| | |
| | | |
| | | // 4. 完成产出单(创建库存事务 + 更新状态为已完成) |
| | | finishProductProduce(produce.getId()); |
| | | |
| | | // 5. 报工产出定稿后自动生成产品入库单(一次报工=一条,幂等) |
| | | productReceiptService.createProductReceiptByFeedback(feedbackId); |
| | | } |
| | | |
| | | } |