package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.core.common.Cools; import com.zy.asrs.entity.AgvLocDetl; import com.zy.asrs.entity.AgvLocMast; import com.zy.asrs.entity.AgvWrkDetl; import com.zy.asrs.mapper.AgvLocDetlMapper; import com.zy.asrs.service.AgvBasDevpService; import com.zy.asrs.service.AgvLocDetlService; import com.zy.asrs.service.AgvLocMastService; import com.zy.asrs.service.AgvWrkDetlService; import com.zy.common.model.LocDto; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Service public class AgvLocDetlServiceImpl extends ServiceImpl implements AgvLocDetlService { @Autowired AgvWrkDetlService agvWrkDetlService; @Autowired AgvBasDevpService agvBasDevpService; @Autowired AgvLocMastService agvLocMastService; public void addLocDetlInfo(String locNo, int taskCode) { List agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper().eq("wrk_no", taskCode)); List agvLocDetlList = agvWrkDetls.stream().map(agvWrkDetl -> { AgvLocDetl agvLocDetl = new AgvLocDetl(); BeanUtils.copyProperties(agvWrkDetl, agvLocDetl); agvLocDetl.setLocNo(locNo); this.insert(agvLocDetl); return agvLocDetl; }).collect(Collectors.toList()); } public double queryStockAndSetLocDto(String matnr, String batch, String orderNo, List locDtoList, double issued, String csocode, String isoseq) { //根据物料号和批次找到对应的库存,并且按照修改时间排序 Wrapper wrapper = new EntityWrapper().eq("matnr", matnr).orderBy("modi_time"); wapperSetCondition(wrapper,"batch",batch); wapperSetCondition(wrapper,"three_code",csocode); wapperSetCondition(wrapper,"dead_time",isoseq); List agvLocDetls = this.selectList(wrapper); for (AgvLocDetl agvLocDetl: agvLocDetls) { //判断当前库位货物是否F在库 AgvLocMast agvLocMast = agvLocMastService.selectById(agvLocDetl.getLocNo()); if(!"F".equals(agvLocMast.getLocSts())){ continue; } //如果订单剩余出库量大于0 if(issued > 0) { //当前库位的库存量 double anfme = agvLocDetl.getAnfme(); //int ioType = anfme > issued ? 101 : 103; anfme = anfme > issued ? issued : anfme; LocDto locDto = new LocDto(agvLocDetl.getLocNo(), agvLocDetl.getMatnr(), agvLocDetl.getMaktx(), agvLocDetl.getBatch(), orderNo, anfme); locDto.setCsocode(csocode); locDto.setIsoseq(isoseq); locDto.setContainerCode(agvLocDetl.getZpallet()); //当前库位所处楼层 int floor = Integer.parseInt(agvLocDetl.getLocNo().split("@")[1]); locDto.setAgvStaNos(queryAgvStaNosByFloor(floor)); locDtoList.add(locDto); issued -= anfme; } } return issued; } /* 更新库存明细 */ public void updateStock(String sourceLoc, String targetLoc) { this.baseMapper.updateStock(sourceLoc,targetLoc); } public Page getStockStatis(Page page) { page.setRecords(baseMapper.getStockStatis(page.getCondition())); page.setTotal(baseMapper.getStockStatisCount(page.getCondition())); return page; } /* 获取库存总数 */ public Integer sum() { return this.baseMapper.sum(); } public List getStockStatisExcel(){ return this.baseMapper.getStockStatisExcel(); } public List searchByLike(String orderNo, String matnr, String maktx, String specs, String locNo) { if (Cools.isEmpty(orderNo) && Cools.isEmpty(matnr) && Cools.isEmpty(maktx) && Cools.isEmpty(specs) && Cools.isEmpty(locNo)) { return new ArrayList(); } EntityWrapper wrapper = new EntityWrapper<>(); if(Cools.isEmpty(orderNo)){ wrapper.like("order_no",orderNo); } if(Cools.isEmpty(matnr)){ wrapper.like("matnr",matnr); } if(Cools.isEmpty(maktx)){ wrapper.like("maktx",maktx); } if(Cools.isEmpty(specs)){ wrapper.like("specs",specs); } if(Cools.isEmpty()){ wrapper.like("loc_no",locNo); } return this.selectList(wrapper); } public boolean updateAnfme(Double anfme, String locNo, String matnr, String batch) { if (anfme <= 0) { return this.delete(new EntityWrapper().eq("matnr", matnr).eq("loc_no", locNo)); } else { AgvLocDetl agvLocDetl = this.selectOne(new EntityWrapper().eq("loc_no", locNo).eq("matnr", matnr)); agvLocDetl.setAnfme(anfme); return this.update(agvLocDetl,new EntityWrapper().eq("loc_no", locNo).eq("matnr", matnr)); //return baseMapper.updateAnfme(anfme, locNo, matnr, batch) > 0; } } private List queryAgvStaNosByFloor(int floor){ List agvStaNos = new ArrayList<>(); if(floor == 1){ agvStaNos.add("CS-101"); agvStaNos.add("CS-102"); }else if(floor ==3){ agvStaNos.add("CS-305"); agvStaNos.add("CS-306"); agvStaNos.add("CS-307"); } return agvStaNos; } private void wapperSetCondition(Wrapper wrapper,String column, String condition){ if(Cools.isEmpty(condition)){ wrapper.isNull(column); }else { wrapper.eq(column,condition); } } }