package zy.cloud.wms.manager.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.core.common.Cools; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import zy.cloud.wms.common.config.CodeCoolException; import zy.cloud.wms.manager.entity.CustOrder; import zy.cloud.wms.manager.entity.LocDetl; import zy.cloud.wms.manager.entity.Mat; import zy.cloud.wms.manager.entity.Prior; import zy.cloud.wms.manager.entity.param.StockTransferParam; import zy.cloud.wms.manager.mapper.LocDetlMapper; import zy.cloud.wms.manager.service.CustOrderService; import zy.cloud.wms.manager.service.LocDetlService; import zy.cloud.wms.manager.service.MatService; import zy.cloud.wms.manager.service.PriorService; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Service("locDetlService") public class LocDetlServiceImpl extends ServiceImpl implements LocDetlService { @Autowired private CustOrderService custOrderService; @Autowired private MatService matService; @Autowired private PriorService priorService; @Override public Page getPage(Page page) { page.setRecords(baseMapper.listByPage(page.getCondition())); page.setTotal(baseMapper.listByPageCount(page.getCondition())); return page; } @Override public LocDetl getLocDetl(Long nodeId, String matnr) { return this.baseMapper.selectByLocNoAndMatnr(nodeId, matnr); } @Override public List findOfSort(String matnr) { List result = new ArrayList<>(); List locDetls = this.baseMapper.selectByPrior(matnr, null); if (!Cools.isEmpty(locDetls)) { result.addAll(locDetls); } List nodeIds = locDetls.stream().map(LocDetl::getNodeId).distinct().collect(Collectors.toList()); List locDetls1 = this.selectList(new EntityWrapper().eq("matnr", matnr).eq("status", 1).orderBy("create_time")); for (LocDetl locDetl : locDetls1) { if (!nodeIds.contains(locDetl.getNodeId())) { result.add(locDetl); } } return result; } @Override public void checkLocDetlCount(String number) { List custOrders = custOrderService.selectList(new EntityWrapper().eq("number", number).eq("status", 1)); StringBuilder errorMsg = new StringBuilder(); boolean error = false; for (CustOrder custOrder : custOrders) { Double count = this.baseMapper.selectCountByMatnr(custOrder.getUserCode()); if (count == null) { count = 0.0D; } if (count < custOrder.getQty()) { if (!error) { error = true; } Mat mat = matService.selectByMatnr(custOrder.getUserCode()); errorMsg.append(mat == null ? custOrder.getUserCode() : mat.getMaktx()).append("库存不足,缺货数量:").append(custOrder.getQty() - count).append("
"); } } if (error) { throw new CodeCoolException("20001-" + errorMsg.toString()); } } @Override public List checkLocDetlCountOfRes(String number) { List custOrders = custOrderService.selectList(new EntityWrapper().eq("number", number).eq("status", 1)); boolean asrs = false; List params = new ArrayList<>(); for (CustOrder custOrder : custOrders) { Double count = this.baseMapper.selectCountByMatnr(custOrder.getUserCode()); if (count == null) { count = 0.0D; } if (count < custOrder.getQty()) { if (!asrs) { asrs = true; } StockTransferParam param = new StockTransferParam(); param.setMatnr(custOrder.getUserCode()); param.setAnfme(custOrder.getQty() - count); param.setTotal(custOrder.getQty()); params.add(param); } } return params; } @Override public Boolean reduceStock(Long nodeId, String matnr, Double anfme) { return this.baseMapper.reduceStock(nodeId, matnr, anfme)>0; } @Override public Boolean incrementStock(Long nodeId, String matnr, Double anfme) { return this.baseMapper.incrementStock(nodeId, matnr, anfme)>0; } @Override public Boolean removeStock(Long nodeId, String matnr) { return this.baseMapper.removeStock(nodeId, matnr)>0; } @Override public Boolean isPrior(Long nodeId, String matnr) { return priorService.selectCount(new EntityWrapper().eq("matnr", matnr).eq("node_id", nodeId).eq("status", 1))>0; } @Override public List getLocDetlStatis() { return this.baseMapper.getLocDetlStatis(); } @Override public Double selectCountByMatnr(String matnr) { return this.baseMapper.selectCountByMatnr(matnr); } @Override public List findByNodeUuid(String uuid) { return this.baseMapper.selectByNodeUuid(uuid); } }