From ebc766304439d72c69b580eaef83681096e4ee3d Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期四, 18 六月 2020 16:06:56 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | 385 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 375 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java index ee29b85..9185303 100644 --- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java @@ -8,22 +8,27 @@ import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.EmptyPlateOutParam; import com.zy.asrs.entity.param.FullStoreParam; +import com.zy.asrs.entity.param.LocDetlAdjustParam; +import com.zy.asrs.entity.param.StockOutParam; import com.zy.asrs.service.*; +import com.zy.common.model.LocDetlDto; +import com.zy.common.model.OutLocDto; import com.zy.common.model.StartupDto; import com.zy.common.service.CommonService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; /** * Created by vincent on 2020/6/11 */ @Service public class WorkServiceImpl implements WorkService { + + // 宸ヤ綔鍙风敓鎴愯鍒欓粯璁ょ被鍨� + private static final int DEFAULT_WORK_NO_TYPE = 0; @Autowired private WrkMastService wrkMastService; @@ -37,10 +42,14 @@ private LocMastService locMastService; @Autowired private StaDescService staDescService; + @Autowired + private LocDetlService locDetlService; + @Autowired + private MatCodeService matCodeService; @Override @Transactional - public void startupFullStore(FullStoreParam param, Long userId) { + public String startupFullPutStore(FullStoreParam param, Long userId) { // 鍙傛暟闈炵┖鍒ゆ柇 if (Cools.isEmpty(param.getDevpNo(), param.getList())) { throw new CoolException(BaseRes.PARAM); @@ -48,7 +57,7 @@ // 婧愮珯鐐圭姸鎬佹娴� BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getDevpNo()); // 鐢熸垚宸ヤ綔鍙� - int workNo = commonService.getWorkNo(0); + int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE); // 妫�绱㈠簱浣� StartupDto dto = commonService.getLocNo(1, 1, param.getDevpNo()); // 鐢熸垚宸ヤ綔妗� @@ -57,7 +66,7 @@ wrkMast.setIoTime(new Date()); wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱 - wrkMast.setIoPri(10D); // 浼樺厛绾э細10 + wrkMast.setIoPri(13D); // 浼樺厛绾э細10 wrkMast.setCrnNo(dto.getCrnNo()); wrkMast.setSourceStaNo(dto.getSourceStaNo()); wrkMast.setStaNo(dto.getStaNo()); @@ -102,14 +111,135 @@ } else { throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤"); } + return dto.getLocNo(); } @Override - public void emptyPlateIn(Integer devpNo, Long userId) { + @Transactional + public void startupFullTakeStore(StockOutParam param, Long userId) { + // 鐩爣绔欑偣鐘舵�佹娴� + BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite()); + // 鑾峰彇搴撲綅鏄庣粏 + List<LocDetlDto> locDetlDtos = new ArrayList<>(); + for (StockOutParam.LocDetl locDetl : param.getLocDetls()) { + if (!Cools.isEmpty(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getCount())) { + LocDetl sqlParam = new LocDetl(); + sqlParam.setLocNo(locDetl.getLocNo()); + sqlParam.setMatnr(locDetl.getMatnr()); + LocDetl one = locDetlService.selectOne(new EntityWrapper<>(sqlParam)); + if (null != one) locDetlDtos.add(new LocDetlDto(one, locDetl.getCount())); + } + } + if (!locDetlDtos.isEmpty()) { + // 鍚姩鍑哄簱寮�濮� + stockOut(staNo, locDetlDtos, userId); + } else { + throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�"); + } + } + + @Override + @Transactional + public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, Long userId) { + // 鐢熸垚宸ヤ綔鍙� + int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE); + // 鍚堝苟鍚岀被椤� + 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) { + // 鑾峰彇搴撲綅 + LocMast locMast = locMastService.selectById(dto.getLocNo()); + // 鑾峰彇璺緞 + Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() + .eq("type_no", 101) + .eq("stn_no", staNo.getDevNo()) + .eq("crn_no", locMast.getCrnNo()); + StaDesc staDesc = staDescService.selectOne(wrapper); + if (Cools.isEmpty(staDesc)) { + throw new CoolException("鍑哄簱璺緞涓嶅瓨鍦�"); + } + // 鐢熸垚宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(new Date()); + wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID + wrkMast.setIoType(101); // 鍏ュ嚭搴撶姸鎬侊細101.鍑哄簱 + wrkMast.setIoPri(13D); // 浼樺厛绾э細13 + wrkMast.setCrnNo(locMast.getCrnNo()); + wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯 + wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔� + wrkMast.setSourceLocNo(dto.getLocNo()); // 婧愬簱浣� + 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()) { + if (detlDto.getCount() <= 0.0D) {continue;} + WrkDetl wrkDetl = new WrkDetl(); + wrkDetl.setWrkNo(workNo); + wrkDetl.setIoTime(new Date()); + wrkDetl.setMatnr(detlDto.getLocDetl().getMatnr()); + wrkDetl.setAnfme(detlDto.getCount()); // 鏁伴噺 + wrkDetl.setZmatid(detlDto.getLocDetl().getZmatid()); + wrkDetl.setTbpos(detlDto.getLocDetl().getTbpos()); + wrkDetl.setTbnum(detlDto.getLocDetl().getTbnum()); + wrkDetl.setLgnum(detlDto.getLocDetl().getLgnum()); + wrkDetl.setAltme(detlDto.getLocDetl().getAltme()); + wrkDetl.setBname(detlDto.getLocDetl().getBname()); + wrkDetl.setMaktx(detlDto.getLocDetl().getMaktx()); + wrkDetl.setAppeTime(new Date()); + wrkDetl.setAppeUser(userId); + wrkDetl.setModiTime(new Date()); + wrkDetl.setModiUser(userId); + if (!wrkDetlService.insert(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); + } + } + // 淇敼搴撲綅鐘舵��: F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害 + locMast = locMastService.selectById(dto.getLocNo()); + if (locMast.getLocType().equals("F")) { + locMast.setLocType("R"); + locMast.setModiUser(userId); + locMast.setModiTime(new Date()); + if (!locMastService.updateById(locMast)) { + throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細"+dto.getLocNo()); + } + } else { + throw new CoolException(dto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��"); + } + } + } + + @Override + @Transactional + public String emptyPlateIn(Integer devpNo, Long userId) { // 婧愮珯鐐圭姸鎬佹娴� BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo); // 鐢熸垚宸ヤ綔鍙� - int workNo = commonService.getWorkNo(0); + int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE); // 妫�绱㈠簱浣� StartupDto dto = commonService.getLocNo(1, 10, devpNo); // 鐢熸垚宸ヤ綔妗� @@ -118,7 +248,7 @@ wrkMast.setIoTime(new Date()); wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱 - wrkMast.setIoPri(10D); // 浼樺厛绾э細10 + wrkMast.setIoPri(13D); // 浼樺厛绾э細10 wrkMast.setCrnNo(dto.getCrnNo()); wrkMast.setSourceStaNo(dto.getSourceStaNo()); wrkMast.setStaNo(dto.getStaNo()); @@ -157,6 +287,7 @@ } else { throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤"); } + return dto.getLocNo(); } @Override @@ -167,7 +298,7 @@ } for (String locNo : param.getLocNos()) { // 鑾峰彇宸ヤ綔鍙� - int workNo = commonService.getWorkNo(0); + int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE); // 鑾峰彇搴撲綅 LocMast locMast = locMastService.selectById(locNo); if (Cools.isEmpty(locMast)) { @@ -220,4 +351,238 @@ } } + @Override + @Transactional + public void locMove(String sourceLocNo, String locNo, Long userId) { + LocMast sourceLoc = locMastService.selectById(sourceLocNo); + if (Cools.isEmpty(sourceLoc)){ + throw new CoolException("鏈壘鍒板簱浣�"); + } + LocMast loc = locMastService.selectById(locNo); + if (Cools.isEmpty(loc)){ + throw new CoolException("鏈壘鍒板簱浣�"); + } + if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) { + 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(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱 + wrkMast.setIoPri(10D); + wrkMast.setCrnNo(sourceLoc.getCrnNo()); + wrkMast.setSourceLocNo(sourceLocNo); // 婧愬簱浣� + wrkMast.setLocNo(locNo); // 鐩爣搴撲綅 + wrkMast.setFullPlt("N"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk(sourceLoc.getLocType().equals("D")?"Y":"N"); // 绌烘澘 + wrkMast.setLinkMis("N"); + wrkMast.setAppeUser(userId); + wrkMast.setAppeTime(new Date()); + wrkMast.setModiUser(userId); + wrkMast.setModiTime(new Date()); + boolean res = wrkMastService.insert(wrkMast); + if (!res) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + } + // 宸ヤ綔妗f槑缁嗕繚瀛� + List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo)); + for (LocDetl locDetl : locDetls) { + WrkDetl wrkDetl = new WrkDetl(); + wrkDetl.setWrkNo(workNo); + wrkDetl.setIoTime(new Date()); + wrkDetl.setMatnr(locDetl.getMatnr()); + wrkDetl.setAnfme(locDetl.getAnfme()); + wrkDetl.setZmatid(locDetl.getZmatid()); + wrkDetl.setTbpos(locDetl.getTbpos()); + wrkDetl.setTbnum(locDetl.getTbnum()); + wrkDetl.setLgnum(locDetl.getLgnum()); + wrkDetl.setAltme(locDetl.getAltme()); + wrkDetl.setBname(locDetl.getBname()); + wrkDetl.setMaktx(locDetl.getMaktx()); + wrkDetl.setAppeTime(new Date()); + wrkDetl.setAppeUser(userId); + wrkDetl.setModiTime(new Date()); + wrkDetl.setModiUser(userId); + if (!wrkDetlService.insert(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); + } + } + // 淇敼婧愬簱浣嶇姸鎬� + if (sourceLoc.getLocType().equals("D") || sourceLoc.getLocType().equals("F")) { + sourceLoc.setLocType("R"); // R.鍑哄簱棰勭害 + sourceLoc.setModiUser(userId); + sourceLoc.setModiTime(new Date()); + if (!locMastService.updateById(sourceLoc)){ + throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�"); + } + } else { + throw new CoolException("棰勭害婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細"+sourceLoc.getLocType$()); + } + // 淇敼鐩爣搴撲綅鐘舵�� + if (loc.getLocType().equals("O")) { + loc.setLocType("S"); // S.鍏ュ簱棰勭害 + loc.setModiTime(new Date()); + loc.setModiUser(userId); + if (!locMastService.updateById(loc)) { + throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�"); + } + } else { + throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細"+loc.getLocType$()); + } + } + + @Override + @Transactional + public void completeWrkMast(String workNo, Long userId) { + WrkMast wrkMast = wrkMastService.selectById(workNo); + if (Cools.isEmpty(wrkMast)){ + throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪"); + } + if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) { + throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚"); + } + // 鍏ュ簱 + 搴撲綅杞Щ + if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()==11)) { + wrkMast.setWrkSts(4L); + // 鍑哄簱 + } else if (wrkMast.getWrkSts() > 10) { + wrkMast.setWrkSts(14L); + } + wrkMast.setModiTime(new Date()); + wrkMast.setModiUser(userId); + if (!wrkMastService.updateById(wrkMast)) { + throw new CoolException("淇敼宸ヤ綔妗eけ璐�"); + } + } + + @Override + @Transactional + public void adjustLocDetl(LocDetlAdjustParam param, Long userId) { + LocMast locMast = locMastService.selectById(param.getLocNo()); + if (Cools.isEmpty(locMast)) { + throw new CoolException("搴撲綅涓嶅瓨鍦�"); + } + for (LocDetlAdjustParam.LocDetlAdjust adjust : param.getList()) { + LocDetl sqlParam = new LocDetl(); + sqlParam.setLocNo(locMast.getLocNo()); + sqlParam.setMatnr(adjust.getMatNo()); + LocDetl one = locDetlService.selectOne(new EntityWrapper<>(sqlParam)); + // 淇濆瓨鏂板簱瀛樻槑缁� + if (Cools.isEmpty(one)) { + MatCode matCode = matCodeService.selectById(adjust.getMatNo()); + LocDetl locDetl = new LocDetl(); + locDetl.setLocNo(locMast.getLocNo()); + locDetl.setMatnr(matCode.getMatNo()); + locDetl.setMaktx(matCode.getMatName()); // 鐗╂枡鎻忚堪 + locDetl.setAnfme(adjust.getCount()); // 鏁伴噺 + locDetl.setAltme(matCode.getStr1()); // 鍗曚綅 + // todo:luxiaoao + locDetl.setModiUser(userId); // 鎿嶄綔浜哄憳淇℃伅 + locDetl.setModiTime(new Date()); + locDetl.setAppeUser(userId); + locDetl.setAppeTime(new Date()); + if (!locDetlService.insert(locDetl)) { + throw new CoolException("淇濆瓨搴撳瓨鏄庣粏澶辫触"); + } + // 淇敼鍘熷簱瀛樻槑缁� + } else { + // 濡傛灉鏁伴噺淇敼锛屽垯鏇存柊搴撳瓨鏄庣粏 + if (!adjust.getCount().equals(one.getAnfme())) { + // 褰撴暟閲忚淇敼涓� 0 鏃讹紝鐩存帴娓呴櫎搴撳瓨鏄庣粏 + if (adjust.getCount() == 0) { + if (!locDetlService.delete(new EntityWrapper<>(one))) { + throw new CoolException("娓呴櫎搴撳瓨鏄庣粏澶辫触"); + } + } else { + one.setAnfme(adjust.getCount()); + one.setModiTime(new Date()); + one.setModiUser(userId); + if (!locDetlService.updateById(one)) { + throw new CoolException("淇敼搴撳瓨鏄庣粏澶辫触"); + } + } + } + } + + } + } + + @Override + @Transactional + public void cancelWrkMast(String workNo, Long userId) { + WrkMast wrkMast = wrkMastService.selectById(workNo); + if (Cools.isEmpty(wrkMast)){ + throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪"); + } + String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣� + String locType = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬� + // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級 + if (wrkMast.getWrkSts() < 4) { + locNo = wrkMast.getLocNo(); + locType = "O"; + /** + * 搴撲綅杞Щ + * 鍙栨秷鍚� 婧愬簱浣� ==>> F.鍦ㄥ簱 + * 鐩爣搴撲綅 ===>> O.绌哄簱浣� + **/ + if (wrkMast.getIoType() == 11) { + // 搴撲綅杞Щ锛氭簮搴撲綅 + LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); + if (Cools.isEmpty(locMast)) { + throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛屾簮搴撲綅涓嶅瓨鍦�:"+ wrkMast.getSourceLocNo()); + } + locMast.setLocType("F"); + locMast.setModiTime(new Date()); + locMast.setModiUser(userId); + locMastService.updateById(locMast); + } + // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛� + } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) { + locNo = wrkMast.getSourceLocNo(); + // 鍑哄簱 ===>> F.鍦ㄥ簱 + if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) { + locType = "F"; + // 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉� + } else if (wrkMast.getIoType() == 110) { + locType = "D"; + // 搴撲綅杞Щ ===>> D.绌烘《/绌烘爤鏉� + } else if (wrkMast.getIoType() == 11) { + locType = "F"; + // 搴撲綅杞Щ锛氱洰鏍囧簱浣� + LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); + if (Cools.isEmpty(locMast)) { + throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛岀洰鏍囧簱浣嶄笉瀛樺湪:"+ wrkMast.getSourceLocNo()); + } + locMast.setLocType("O"); + locMast.setModiTime(new Date()); + locMast.setModiUser(userId); + locMastService.updateById(locMast); + } + } else { + throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�"); + } + // 鍒犻櫎宸ヤ綔妗� + boolean wrkMastRes = wrkMastService.deleteById(wrkMast); + // 鍒犻櫎宸ヤ綔妗f槑缁� + boolean wrkDetlRes = wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo)); + // 淇敼搴撲綅鐘舵�� + LocMast locMast = locMastService.selectById(locNo); + if (Cools.isEmpty(locMast)) { + throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐ワ紝搴撲綅涓嶅瓨鍦�:"+ locNo); + } + locMast.setLocType(locType); + locMast.setModiTime(new Date()); + locMast.setModiUser(userId); + boolean locMastRes = locMastService.updateById(locMast); + if (!wrkMastRes || !wrkDetlRes || !locMastRes) { + throw new CoolException("淇濆瓨鏁版嵁澶辫触"); + } + } + } -- Gitblit v1.9.1