| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackagePageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderMapper; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageLineMapper; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageMapper; |
| | | import cn.iocoder.yudao.module.mes.enums.wm.BarcodeBizTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmPackageStatusEnum; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; |
| | |
| | | |
| | | @Resource |
| | | private MesWmPackageLineService packageLineService; |
| | | @Resource |
| | | private MesWmPackageLineMapper packageLineMapper; |
| | | @Resource |
| | | private MesProWorkOrderMapper workOrderMapper; |
| | | @Resource |
| | | private MesWmBarcodeService barcodeService; |
| | | @Resource |
| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void finishPackage(Long id) { |
| | | // 校验存在且为草稿 |
| | | validatePackageExistsAndDraft(id); |
| | |
| | | // 更新状态为已完成 |
| | | packageMapper.updateById(new MesWmPackageDO() |
| | | .setId(id).setStatus(MesWmPackageStatusEnum.FINISHED.getStatus())); |
| | | |
| | | // 按生产工单汇总本次装箱数量与箱数,累加到工单并重算装箱状态 |
| | | Map<Long, List<MesWmPackageLineDO>> linesByWorkOrder = packageLineMapper.selectListByPackageId(id).stream() |
| | | .filter(line -> line.getWorkOrderId() != null) |
| | | .collect(Collectors.groupingBy(MesWmPackageLineDO::getWorkOrderId)); |
| | | linesByWorkOrder.forEach((workOrderId, lines) -> { |
| | | BigDecimal quantity = lines.stream() |
| | | .map(MesWmPackageLineDO::getQuantity) |
| | | .filter(Objects::nonNull) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | int boxCount = lines.stream() |
| | | .map(MesWmPackageLineDO::getBoxCount) |
| | | .filter(Objects::nonNull) |
| | | .mapToInt(Integer::intValue).sum(); |
| | | workOrderMapper.updatePackedQuantity(workOrderId, quantity, boxCount); |
| | | workOrderMapper.updatePackingStatus(workOrderId); |
| | | }); |
| | | } |
| | | |
| | | @Override |