| | |
| | | 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.LocDetl; |
| | | import com.zy.asrs.entity.LocMast; |
| | | import com.zy.asrs.entity.result.StockVo; |
| | | import com.zy.asrs.mapper.LocDetlMapper; |
| | | import com.zy.asrs.service.BasDevpService; |
| | | import com.zy.asrs.service.LocDetlService; |
| | | import com.zy.asrs.service.LocMastService; |
| | | import com.zy.asrs.service.StaDescService; |
| | | import com.zy.asrs.utils.Utils; |
| | | import com.zy.common.model.LocDto; |
| | | import com.zy.common.model.QueryStockPreDo; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.*; |
| | | |
| | | @Service("locDetlService") |
| | | public class LocDetlServiceImpl extends ServiceImpl<LocDetlMapper, LocDetl> implements LocDetlService { |
| | | |
| | | @Autowired |
| | | private StaDescService staDescService; |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | @Autowired |
| | | private BasDevpService basDevpService; |
| | | |
| | | @Override |
| | | public Page<LocDetl> getStockOut(Page<LocDetl> page) { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public boolean updateAnfme(Double anfme, String locNo, String matnr) { |
| | | int res = baseMapper.updateAnfme(anfme, locNo, matnr); |
| | | return res > 0; |
| | | public boolean updateAnfme(Double anfme, String locNo, String matnr, String batch, String containerCode, String csoCode, String isoCode) { |
| | | if (anfme <= 0) { |
| | | return this.baseMapper.deleteItem(locNo, matnr, batch, containerCode, csoCode, isoCode) > 0; |
| | | } else { |
| | | return baseMapper.updateAnfme(anfme, locNo, matnr, batch, containerCode, csoCode, isoCode) > 0; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public boolean updateLocNo(String newLocNo, String oldLocNo) { |
| | | return baseMapper.updateLocNo(newLocNo, oldLocNo) > 0; |
| | | } |
| | | |
| | | @Override |
| | | public List<String> getSameDetl(String matnr) { |
| | | return this.baseMapper.selectSameDetl(matnr); |
| | | } |
| | | |
| | | @Override |
| | | public List<String> getSameLevDetl(String matnr, Integer lev) { |
| | | return this.baseMapper.selectSameLevDetl(matnr, lev); |
| | | } |
| | | |
| | | @Override |
| | | public List<String> getSameDetlToday(String matnr, Integer start, Integer end) { |
| | | return this.baseMapper.selectSameDetlToday(matnr, start, end); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public Page<LocDetl> getStockStatis(Page<LocDetl> page) { |
| | | page.setRecords(baseMapper.getStockStatis(page.getCondition())); |
| | | page.setTotal(baseMapper.getStockStatisCount(page.getCondition())); |
| | | return page; |
| | | } |
| | | |
| | | @Override |
| | | public Double getSumAnfme(String matnr) { |
| | | return this.baseMapper.selectSumAnfmeByMatnr(matnr); |
| | | } |
| | | |
| | | @Override |
| | | public List<LocDetl> selectPakoutByRule(String matnr) { |
| | | return this.baseMapper.selectPakoutByRule(matnr); |
| | | } |
| | | |
| | | @Override |
| | | public List<LocDetl> getAsrsLocDetl(String matnr) { |
| | | return this.baseMapper.getAsrsLocDetl(matnr); |
| | | } |
| | | |
| | | @Override |
| | | public Integer countLocNoNum(String locNo) { |
| | | return this.baseMapper.countLocNoNum(locNo); |
| | | } |
| | | |
| | | @Override |
| | | public List<LocDetl> queryStock(String matnr, String batch, String orderNo, Set<String> locNos) { |
| | | List<LocDetl> result = new ArrayList<>(); |
| | | List<QueryStockPreDo> preDos = this.baseMapper.queryStockPre(matnr); |
| | | for (QueryStockPreDo preDo : preDos) { |
| | | List<LocDetl> locDetls = this.baseMapper.queryStock(matnr, preDo.getNo(), preDo.getOrderBy(), preDo.getBay()); |
| | | result.addAll(locDetls); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | //出库 |
| | | public double queryStockAndSetLocDto(String matnr, String batch, String orderNo, List<LocDto> locDtoList, double issued, String csocode, String isoseq) { |
| | | Wrapper<LocDetl> wrapper = new EntityWrapper<LocDetl>().eq("matnr", matnr).orderBy("modi_time"); |
| | | wapperSetCondition(wrapper,"batch",batch); |
| | | wapperSetCondition(wrapper,"three_code",csocode); |
| | | wapperSetCondition(wrapper,"dead_time",isoseq); |
| | | |
| | | List<LocDetl> locDetlList = this.selectList(wrapper); |
| | | |
| | | Set<LocDetl> resort = resort(locDetlList); |
| | | |
| | | for (LocDetl locDetl : resort) { |
| | | |
| | | if (issued > 0) { |
| | | double anfme = locDetl.getAnfme(); |
| | | int ioType = anfme > issued ? 103 : 101; |
| | | anfme = anfme > issued ? issued : anfme; |
| | | |
| | | //用于显示工作明细档的订单号 |
| | | String orderNoWrkDtel = Utils.getOrderNo(orderNo,anfme); |
| | | //更新订单数量 |
| | | orderNo = Utils.orderMergeUpdate(orderNo,anfme); |
| | | |
| | | LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderNoWrkDtel, anfme); |
| | | |
| | | List<Integer> outSite = basDevpService.getAvailableOutSite(101); |
| | | List<Integer> pickOutSite = basDevpService.getAvailableOutSite(103); |
| | | pickOutSite.forEach(site -> { |
| | | if(!outSite.contains(site)){ |
| | | outSite.add(site); |
| | | } |
| | | }); |
| | | |
| | | locDto.setStaNos(outSite); |
| | | locDto.setCsocode(csocode); |
| | | locDto.setIsoseq(isoseq); |
| | | locDto.setContainerCode(locDetl.getSuppCode()); |
| | | locDtoList.add(locDto); |
| | | // 剩余待出数量递减 |
| | | issued = issued - locDetl.getAnfme(); |
| | | } |
| | | } |
| | | return issued; |
| | | } |
| | | |
| | | //补货出库 |
| | | public double queryStockAndSetLocDto1(String matnr, String batch, String orderNo, List<LocDto> locDtoList, double issued, String csocode, String isoseq) { |
| | | Wrapper<LocDetl> wrapper = new EntityWrapper<LocDetl>().eq("matnr", matnr).orderBy("modi_time"); |
| | | wapperSetCondition(wrapper,"batch",batch); |
| | | wapperSetCondition(wrapper,"three_code",csocode); |
| | | wapperSetCondition(wrapper,"dead_time",isoseq); |
| | | |
| | | List<LocDetl> locDetlList = this.selectList(wrapper); |
| | | Set<LocDetl> resort = resort(locDetlList); |
| | | for (LocDetl locDetl : resort) { |
| | | //判断当前库位货物是否F在库 |
| | | LocMast locMast = locMastService.selectById(locDetl.getLocNo()); |
| | | if(!"F".equals(locMast.getLocSts())){ |
| | | continue; |
| | | } |
| | | if (issued > 0) { |
| | | double anfme = locDetl.getAnfme(); |
| | | int ioType = anfme > issued ? 103 : 101; |
| | | //anfme = anfme > issued ? issued : anfme; |
| | | LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderNo, anfme); |
| | | //List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), ioType); |
| | | List<Integer> outSite = basDevpService.getAvailableOutSite(101); |
| | | |
| | | locDto.setStaNos(outSite); |
| | | locDto.setCsocode(csocode); |
| | | locDto.setIsoseq(isoseq); |
| | | locDto.setContainerCode(locDetl.getSuppCode()); |
| | | locDtoList.add(locDto); |
| | | // 剩余待出数量递减 |
| | | issued = issued - locDetl.getAnfme(); |
| | | } |
| | | } |
| | | return issued; |
| | | } |
| | | |
| | | @Override |
| | | public Double queryStockAnfme(String matnr, String batch) { |
| | | return this.baseMapper.queryStockAnfme(matnr, batch); |
| | | } |
| | | |
| | | @Override |
| | | public List<StockVo> queryStockTotal() { |
| | | return this.baseMapper.queryStockTotal(); |
| | | } |
| | | |
| | | /** |
| | | * 获取库存总数 |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Integer sum() { |
| | | |
| | | return this.baseMapper.sum(); |
| | | } |
| | | |
| | | @Override |
| | | public List<LocDetl> unreason() { |
| | | return this.baseMapper.unreason(); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public LocDetl selectItem(String locNo, String matnr, String batch,String suppCode) { |
| | | return this.baseMapper.selectItem(locNo, matnr, batch,suppCode); |
| | | } |
| | | |
| | | @Override |
| | | public List<LocDetl> 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<LocDetl>(); |
| | | } |
| | | return this.baseMapper.searchByLike(orderNo, matnr, maktx, specs, locNo); |
| | | } |
| | | |
| | | @Override |
| | | public List<LocDetl> selectByLocNo(String locNo) { |
| | | return this.baseMapper.selectByLocNo(locNo); |
| | | } |
| | | |
| | | @Override |
| | | public List<String> selectLocNo(String matnr) { |
| | | return this.baseMapper.selectLocNo(matnr); |
| | | } |
| | | |
| | | public Set<String> selectLocNos(String matnr) { |
| | | |
| | | Wrapper<LocDetl> wrapper = new EntityWrapper<LocDetl>().eq("matnr", matnr); |
| | | //Utils.confirmOnlyMat(wrapper,matnr,batch,csocode,isocode); |
| | | List<LocDetl> locDetls = this.selectList(wrapper); |
| | | |
| | | Set<String> locNos = new HashSet<>(); |
| | | locDetls.forEach(locDetl -> { |
| | | locNos.add(locDetl.getLocNo()); |
| | | }); |
| | | |
| | | return locNos; |
| | | |
| | | } |
| | | |
| | | public LocDetl selectByContainerCode(String containerCode) { |
| | | return this.selectOne(new EntityWrapper<LocDetl>().eq("supp_code",containerCode)); |
| | | } |
| | | |
| | | @Override |
| | | public List<LocDetl> selectByLocWithoutContainer(String locNo) { |
| | | return this.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locNo) |
| | | .andNew().eq("supp_code", "").or().isNull("supp_code")); |
| | | } |
| | | |
| | | @Override |
| | | public int updateStockFreeze(String matnr, String locNo, Integer stockFreeze) { |
| | | return this.baseMapper.updateStockFreeze(matnr, locNo, stockFreeze); |
| | | } |
| | | |
| | | private void wapperSetCondition(Wrapper wrapper,String column, String condition){ |
| | | if(Cools.isEmpty(condition)){ |
| | | wrapper.andNew().eq(column,"").or().isNull(column); |
| | | }else { |
| | | wrapper.andNew().eq(column,condition); |
| | | } |
| | | } |
| | | |
| | | //根据深浅库位进行重新排序 |
| | | private Set<LocDetl> resort(List<LocDetl> locDetls){ |
| | | Set<LocDetl> locDetlsResort = new LinkedHashSet<>(); |
| | | |
| | | for(LocDetl locDetl : locDetls){ |
| | | LocMast locMast = locMastService.selectById(locDetl.getLocNo()); |
| | | if(!"F".equals(locMast.getLocSts())){ |
| | | continue; |
| | | } |
| | | |
| | | List<String> groupOuterLoc = Utils.getGroupOuterLoc(locDetl.getLocNo()); |
| | | |
| | | if(Cools.isEmpty(groupOuterLoc)){ |
| | | locDetlsResort.add(locDetl); |
| | | }else { |
| | | groupOuterLoc.add(locDetl.getLocNo()); |
| | | //如果是深库位,则先找外侧的库位 |
| | | for (String locNo : groupOuterLoc){ |
| | | LocMast locMastOuter = locMastService.selectById(locNo); |
| | | //外侧如果是拣料,则内测不允许出 |
| | | if("P".equals(locMastOuter.getLocSts()) || "Q".equals(locMastOuter.getLocSts()) || "S".equals(locMastOuter.getLocSts())){ |
| | | break; |
| | | } |
| | | |
| | | if(!"F".equals(locMastOuter.getLocSts())){ |
| | | continue; |
| | | } |
| | | locDetlsResort.addAll(this.selectByLocNo(locNo)); |
| | | |
| | | } |
| | | } |
| | | } |
| | | return locDetlsResort; |
| | | } |
| | | } |