package com.chinaztt.mes.production.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.chinaztt.mes.basic.entity.Part; import com.chinaztt.mes.basic.mapper.PartMapper; import com.chinaztt.mes.production.service.CommonService; import com.chinaztt.mes.quality.dto.ApplyDTO; import com.chinaztt.mes.quality.dto.ApplyPartDTO; import com.chinaztt.mes.quality.entity.Apply; import com.chinaztt.mes.quality.service.ApplyService; import com.chinaztt.mes.warehouse.dto.EscortDTO; import com.chinaztt.mes.warehouse.dto.EscortDetailDTO; import com.chinaztt.mes.warehouse.dto.SendBackDTO; import com.chinaztt.mes.warehouse.dto.StockAddDTO; import com.chinaztt.mes.warehouse.entity.Escort; import com.chinaztt.mes.warehouse.entity.EscortDetail; import com.chinaztt.mes.warehouse.entity.Stock; import com.chinaztt.mes.warehouse.mapper.EscortDetailMapper; import com.chinaztt.mes.warehouse.mapper.EscortMapper; import com.chinaztt.mes.warehouse.mapper.SendBackMapper; import com.chinaztt.mes.warehouse.mapper.StockMapper; import com.chinaztt.mes.warehouse.service.impl.EscortServiceImpl; import com.chinaztt.mes.warehouse.util.StockUtils; import com.chinaztt.mes.warehouse.util.TransactionType; import com.chinaztt.ztt.common.core.util.R; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; /** * @author zhangxy */ @Slf4j @Service @AllArgsConstructor @Transactional(rollbackFor = Exception.class) public class CommonServiceImpl implements CommonService { private EscortServiceImpl escortService; private EscortDetailMapper escortDetailMapper; private EscortMapper escortMapper; private StockUtils stockUtils; private StockMapper stockMapper; private PartMapper partMapper; private ApplyService applyService; private SendBackMapper sendBackMapper; @Override public R fullSave(SendBackDTO sendBackDTO) { if (CollectionUtil.isNotEmpty(sendBackDTO.getEscortList())) { for (EscortDetailDTO escortDetailDTO : sendBackDTO.getEscortList()) { sendBackDTO.setEscortDetailId(escortDetailDTO.getId()); sendBackDTO.setPartNo(escortDetailDTO.getPartNo()); sendBackDTO.setPartName(escortDetailDTO.getPartName()); sendBackDTO.setPartBatchNo(escortDetailDTO.getPartBatchNo()); sendBackDTO.setSystemNo(escortDetailDTO.getSystemNo()); sendBackDTO.setPartUnit(escortDetailDTO.getPartUnit()); sendBackDTO.setSendBackLocationId(sendBackDTO.getSendBackLocationId()); sendBackDTO.setSendBackLocationName(sendBackDTO.getSendBackLocationName()); sendBackDTO.setStatus("02completed"); sendBackMapper.insert(sendBackDTO); //进行移库 库位一样就增加数量 不然在这个库位新增数量 库位号 零件批号 系统编号确定唯一 Stock stock = stockMapper.selectById(escortDetailDTO.getStockId()); Long stockId = escortDetailDTO.getStockId(); List parts = partMapper.selectList(Wrappers.lambdaQuery() .eq(Part::getPartNo, escortDetailDTO.getPartNo()).orderByDesc(Part::getId)); if (CollectionUtil.isEmpty(parts)) { throw new RuntimeException("缺少" + escortDetailDTO.getPartNo() + "的零件"); } Part part = parts.get(0); if (null == sendBackDTO.getSendBackLocationId()) { throw new RuntimeException("缺少库位"); } if (!stock.getLocationId().equals(sendBackDTO.getSendBackLocationId())) { // stockUtils.updateById(escortDetailDTO.getStockId(), sendBackDTO.getSendBackQuantity(), BigDecimal.ZERO // , escortDetailDTO.getEscortNo(), TransactionType.SALES_ORDER_RETURNS.getValue()); // }else{ //新增库存记录 StockAddDTO stockAdd = new StockAddDTO(); stockAdd.setPartsId(part.getId()); stockAdd.setNewLocationId(sendBackDTO.getSendBackLocationId()); stockAdd.setNewPartBatchNo(escortDetailDTO.getPartBatchNo()); stockAdd.setNewSystemNo(escortDetailDTO.getSystemNo()); stockAdd.setReelNumber(stock.getReelNumber()); Stock stockNew = stockUtils.query(stockAdd); stockId = stockNew.getId(); } stockUtils.updateById(stockId, sendBackDTO.getSendBackQuantity(), BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO , escortDetailDTO.getEscortNo(), TransactionType.SALES_ORDER_RETURNS.getValue()); //生成 检测申请 ApplyDTO applyDTO = new ApplyDTO(); applyDTO.setApplyType(Apply.BACK_APPLY); applyDTO.setRemark("退货报检"); List applyPartList = new ArrayList(); ApplyPartDTO applyPartDTO = new ApplyPartDTO(); applyPartDTO.setSystemNo(escortDetailDTO.getSystemNo()); applyPartDTO.setPartNo(escortDetailDTO.getPartNo()); applyPartDTO.setPartName(escortDetailDTO.getPartName()); applyPartDTO.setQtyArrived(sendBackDTO.getSendBackQuantity().toPlainString()); applyPartDTO.setLotBatchNo(escortDetailDTO.getPartBatchNo()); applyPartDTO.setPartId(part.getId()); applyPartList.add(applyPartDTO); applyDTO.setApplyPartList(applyPartList); applyService.saveDto(applyDTO); //同步gsm 删除发货 入库 EscortDetail escortDetail = escortDetailMapper.selectById(sendBackDTO.getEscortDetailId()); EscortDTO escortDTO = new EscortDTO(); if (escortDetail != null) { Escort escort = escortMapper.selectById(escortDetail.getEscortId()); BeanUtils.copyProperties(escort, escortDTO); } try { // escortService.deleteOutStorage(escortDTO, escortDetail); escortService.deleteInStorage(escortDTO, escortDetail); } catch (Exception e) { log.error("退货失败:" + e.getMessage()); log.error("退货失败:sendBackDTO" + sendBackDTO); e.printStackTrace(); } } } else { return R.failed("没有选择已完成发货的明细"); } return R.ok(); } }