package com.vincent.rsf.server.manager.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.manager.controller.params.PakinItem; import com.vincent.rsf.server.manager.controller.params.WaitPakinParam; import com.vincent.rsf.server.manager.entity.AsnOrder; import com.vincent.rsf.server.manager.entity.AsnOrderItem; import com.vincent.rsf.server.manager.entity.WaitPakinItem; import com.vincent.rsf.server.manager.mapper.WaitPakinMapper; import com.vincent.rsf.server.manager.entity.WaitPakin; import com.vincent.rsf.server.manager.service.AsnOrderItemService; import com.vincent.rsf.server.manager.service.AsnOrderService; import com.vincent.rsf.server.manager.service.WaitPakinItemService; import com.vincent.rsf.server.manager.service.WaitPakinService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.utils.SerialRuleUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @Service("waitPakinService") public class WaitPakinServiceImpl extends ServiceImpl implements WaitPakinService { @Autowired private AsnOrderItemService asnOrderItemService; @Autowired private AsnOrderService asnOrderService; @Autowired private WaitPakinItemService waitPakinItemService; /** * 单据组拖 * @param waitPakin * @return */ @Override @Transactional(rollbackFor = Exception.class) public WaitPakin mergeItems(WaitPakinParam waitPakin) { if (waitPakin.getItems().isEmpty()) { throw new CoolException("参数错误:物料跟踪码为空!"); } if (StringUtils.isBlank(waitPakin.getBarcode())) { throw new CoolException("参数错误:托盘码为空!!"); } double sum = waitPakin.getItems().stream().mapToDouble(PakinItem::getQty).sum(); WaitPakin pakin = new WaitPakin(); String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAIT_PAKIN_CODE, null); if (StringUtils.isBlank(ruleCode)) { throw new CoolException("编码规则错误: 编码规则「SYS_WAIT_PAKIN_CODE」规则是不存在"); } pakin.setCode(ruleCode) //状态修改为入库中 .setIoStatus(Short.parseShort("1")) .setAnfme(sum) .setBarcode(waitPakin.getBarcode()); if (!this.save(pakin)) { throw new CoolException("主单保存失败!!"); } /**物料跟踪码*/ List tracks = waitPakin.getItems().stream().map(PakinItem::getTrackCode).collect(Collectors.toList()); List asnOrderItems = asnOrderItemService.list(new LambdaQueryWrapper() .in(AsnOrderItem::getTrackCode, tracks)); if (Objects.isNull(asnOrderItems) || asnOrderItems.isEmpty()) { throw new CoolException("单据不存在!!"); } List items = new ArrayList<>(); for (AsnOrderItem item : asnOrderItems) { WaitPakinItem pakinItem = new WaitPakinItem(); pakinItem.setAnfme(item.getAnfme()) .setPakinId(pakin.getId()) .setAsnId(item.getAsnId()) .setAsnCode(item.getAsnCode()) .setAsnItemId(item.getId()) .setMatnrCode(item.getMatnrCode()) .setBatch(item.getSplrBatch()) .setUnit(item.getStockUnit()) .setFieldsIndex(item.getFieldsIndex()) .setUnit(item.getStockUnit()) .setMatnrId(StringUtils.isNotBlank(item.getMatnrId()) ? Long.parseLong(item.getMatnrId()) : null) .setMaktx(item.getMaktx()) .setMatnrCode(item.getMatnrCode()); for (PakinItem waitPakinItem : waitPakin.getItems()) { if (waitPakinItem.getTrackCode().equals(item.getTrackCode())) { Double v = item.getWorkQty() + waitPakinItem.getQty(); pakinItem.setWorkQty(v) .setAnfme(waitPakinItem.getQty()) .setTrackCode(waitPakinItem.getTrackCode()); /**更新单据执行中库存*/ if (v.compareTo(item.getAnfme()) > 0) {throw new CoolException("执行中数量大于收货数量!!");} if (!asnOrderItemService.update(new LambdaUpdateWrapper() .eq(AsnOrderItem::getTrackCode, waitPakinItem.getTrackCode()).set(AsnOrderItem::getWorkQty, v))) { throw new CoolException("执行中库存更新失败!!"); } } } items.add(pakinItem); } if (!waitPakinItemService.saveBatch(items)) { throw new CoolException("组拖明细保存失败!!"); } return pakin; } }