From 166bee7164d043e4f981ae2a47b7ed0847eddc10 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期五, 04 六月 2021 16:47:14 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/OutStockServiceImpl.java | 191 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 190 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/OutStockServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OutStockServiceImpl.java index 55965d5..1771ce8 100644 --- a/src/main/java/com/zy/asrs/service/impl/OutStockServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/OutStockServiceImpl.java @@ -1,18 +1,207 @@ 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.core.exception.CoolException; +import com.zy.asrs.entity.*; +import com.zy.asrs.entity.param.StockOutParam; import com.zy.asrs.mapper.OutStockMapper; -import com.zy.asrs.service.OutStockService; +import com.zy.asrs.service.*; +import com.zy.asrs.utils.VersionUtils; +import com.zy.common.model.LocDetlDto; +import com.zy.common.model.OutLocDto; +import com.zy.common.service.CommonService; import com.zy.common.service.erp.entity.OutStockBillEntry; +import io.swagger.models.auth.In; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.*; @Service("outStockService") public class OutStockServiceImpl extends ServiceImpl<OutStockMapper, OutStockBillEntry> implements OutStockService{ + // 宸ヤ綔鍙风敓鎴愯鍒欓粯璁ょ被鍨� + private static final int DEFAULT_WORK_NO_TYPE = 0; + @Autowired + private WrkMastService wrkMastService; + @Autowired + private BasDevpService basDevpService; + @Autowired + private LocDetlService locDetlService; + @Autowired + private LocMastService locMastService; + @Autowired + private StaDescService staDescService; + @Autowired + private CommonService commonService; + @Autowired + private WrkDetlService wrkDetlService; + @Autowired + private LocNormalService locNormalService; + @Override public Page<OutStockBillEntry> queryOutStock(Page<OutStockBillEntry> page) { page.setRecords(baseMapper.queryOutStock(page.getCondition())); page.setTotal(baseMapper.queryOutStockCount(page.getCondition())); return page; } + + @Override + public List<LocDetl> queryMatWithLoc(String fbillNo) { + List<OutStockBillEntry> matList = baseMapper.queryMatnrWithBillNo(fbillNo); + List<LocDetl> tempLocList = new ArrayList<LocDetl>(); + List<LocDetl> locList = new ArrayList<LocDetl>(); + for (Integer i = 0; i < matList.size(); i++) { + /*鑷姩鏍规嵁鐗╂枡缂栫爜閫夊彇鏈�浼樺嚭璐ч『搴忥紙鍏堣繘鍏堝嚭锛岄潬澶栬揣鐗╁厛鍑猴級*/ + tempLocList = baseMapper.queryMatWithLoc(matList.get(i).getFnumber()); + BigDecimal needNum = matList.get(i).getFAuxQty(); + BigDecimal locNum = BigDecimal.ZERO; + if (tempLocList.size() > 0) { + for (Integer j = 0; j < tempLocList.size(); j ++) { + locNum = locNum.add(new BigDecimal(tempLocList.get(j).getAnfme())); + /* 璁$畻闇�瑕佺殑鏁伴噺锛岀鍚堟暟閲忓悗缁撴潫寰幆 */ + if (needNum.compareTo(locNum) == 1) { + locList.add(tempLocList.get(j)); + } else { + locList.add(tempLocList.get(j)); + break; + } + } + } + } + return locList; + } + + @Override + public Integer queryOutStockFInterID(String supplier) { + return baseMapper.queryOutStockFInterID(supplier); + } + + @Override + @Transactional + public void startupFullTakeStore(StockOutParam param, Long userId) { + // 鐩爣绔欑偣鐘舵�佹娴� + BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite()); + // 鑾峰彇搴撲綅鏄庣粏 + List<LocDetlDto> locDetlDtos = new ArrayList<>(); + for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) { + if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) { + LocDetl sqlParam = new LocDetl(); + sqlParam.setLocNo(paramLocDetl.getLocNo()); + sqlParam.setMatnr(paramLocDetl.getMatnr()); + LocDetl one = locDetlService.selectOne(new EntityWrapper<>(sqlParam)); + if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount())); + } + } + if (!locDetlDtos.isEmpty()) { + // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱 + stockOut(staNo, locDetlDtos, null, userId, param.getFbillNo()); + } else { + throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�"); + } + } + +// @Override + @Transactional + public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, Integer ioType, Long userId, String fbillNo) { + // 鍚堝苟鍚岀被椤� + Set<String> locNos = new HashSet<>(); + locDetlDtos.forEach(dto -> locNos.add(dto.getLocDetl().getLocNo())); + List<OutLocDto> dtos = new ArrayList<>(); + for (String locNo : locNos) { + List<LocDetlDto> list = new ArrayList<>(); + Iterator<LocDetlDto> iterator = locDetlDtos.iterator(); + while (iterator.hasNext()) { + LocDetlDto dto = iterator.next(); + if (locNo.equals(dto.getLocDetl().getLocNo())) { + list.add(dto); + iterator.remove(); + } + } + dtos.add(new OutLocDto(locNo, list)); + } + // 鐢熸垚宸ヤ綔妗� + for (OutLocDto dto : dtos) { + // 鍒ゆ柇鍏ュ嚭搴撶被鍨嬶細101.鍏ㄦ澘鍑哄簱 or 103.鎷f枡鍑哄簱 + if (ioType == null) { + ioType = dto.isAll() ? 101 : 103; + } + // 鑾峰彇搴撲綅 + LocMast locMast = locMastService.selectById(dto.getLocNo()); + // 鑾峰彇璺緞 + Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() + .eq("type_no", ioType) + .eq("stn_no", staNo.getDevNo()) + .eq("crn_no", locMast.getCrnNo()); + StaDesc staDesc = staDescService.selectOne(wrapper); + if (Cools.isEmpty(staDesc)) { + throw new CoolException("鍑哄簱璺緞涓嶅瓨鍦�"); + } + // 鐢熸垚宸ヤ綔鍙� + int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE); + // 鐢熸垚宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(new Date()); + wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID + wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬� + wrkMast.setIoPri(13D); // 浼樺厛绾э細13 + wrkMast.setCrnNo(locMast.getCrnNo()); + wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯 + wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔� + wrkMast.setSourceLocNo(dto.getLocNo()); // 婧愬簱浣� + wrkMast.setBarcode(locMast.getBarcode()); // 鏉$爜 + wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk("N"); // 绌烘澘 + wrkMast.setLinkMis("N"); + wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁 + wrkMast.setAppeTime(new Date()); + wrkMast.setModiUser(userId); + wrkMast.setModiTime(new Date()); + if (!wrkMastService.insert(wrkMast)) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細"+dto.getLocNo()); + } + // 鐢熸垚宸ヤ綔妗f槑缁� + for (LocDetlDto detlDto : dto.getLocDetlDtos()) { + // 鍑哄簱鏃讹紝鏁伴噺涓�0鐨勭洿鎺ュ拷鐣� + if (detlDto.getCount()==null || detlDto.getCount() <= 0.0D) {continue;} + WrkDetl wrkDetl = new WrkDetl(); + wrkDetl.setWrkNo(workNo); + wrkDetl.setIoTime(new Date()); + Double anfme = ioType==101?detlDto.getLocDetl().getAnfme():detlDto.getCount(); + wrkDetl.setAnfme(anfme); // 鏁伴噺 + VersionUtils.setWrkDetl(wrkDetl, detlDto.getLocDetl()); // 鐗堟湰鎺у埗 + wrkDetl.setAppeTime(new Date()); + wrkDetl.setAppeUser(userId); + wrkDetl.setModiTime(new Date()); + wrkDetl.setModiUser(userId); + wrkDetl.setSupplier(fbillNo); + wrkDetl.setMemo(detlDto.getLocDetl().getMemo()); + if (!wrkDetlService.insert(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); + } + } + // 淇敼搴撲綅鐘舵��: F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓� + locMast = locMastService.selectById(dto.getLocNo()); + if (locMast.getLocSts().equals("F")) { + locMast.setLocSts(ioType==101?"R":"P"); + locMast.setModiUser(userId); + locMast.setModiTime(new Date()); + if (!locMastService.updateById(locMast)) { + throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細"+dto.getLocNo()); + } + } else { + throw new CoolException(dto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��"); + } + } + // todo:luxiaotao + // 鍚屼竴鍒楃殑鍚屾椂鍑哄簱锛屽垯浼樺厛鍑烘祬搴撲綅 + } } -- Gitblit v1.9.1