From 7bac1f6a6be795d36b94a6f77b23958e0590add4 Mon Sep 17 00:00:00 2001 From: fyxc <fyxc@qq.com> Date: 星期四, 03 四月 2025 10:20:29 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java | 1130 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 1,102 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java index 908cc26..f81a2ea 100644 --- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java @@ -1,27 +1,34 @@ package com.zy.asrs.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; -import com.core.common.BaseRes; -import com.core.common.Cools; -import com.core.common.DateUtils; -import com.core.common.SnowflakeIdWorker; +import com.baomidou.mybatisplus.mapper.Wrapper; +import com.core.common.*; import com.core.exception.CoolException; import com.zy.asrs.entity.*; -import com.zy.asrs.entity.param.CombParam; -import com.zy.asrs.entity.param.MobileAdjustParam; -import com.zy.asrs.entity.param.OpenOrderPakinParam; +import com.zy.asrs.entity.param.*; +import com.zy.asrs.mapper.BasDevpMapper; +import com.zy.asrs.mapper.ManLocDetlMapper; import com.zy.asrs.service.*; +import com.zy.asrs.utils.MatUtils; +import com.zy.common.constant.AgvSiteConstant; +import com.zy.common.constant.ApiInterfaceConstant; +import com.zy.common.constant.MesConstant; import com.zy.common.entity.Parameter; import com.zy.common.model.DetlDto; +import com.zy.common.model.MesCombParam; +import com.zy.common.service.CommonService; +import com.zy.common.utils.HttpHandler; import lombok.extern.slf4j.Slf4j; 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.Iterator; -import java.util.List; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.*; /** * 绉诲姩绔湇鍔℃牳蹇冪被 @@ -51,6 +58,220 @@ private OpenService openService; @Autowired private SnowflakeIdWorker snowflakeIdWorker; + @Autowired + private ApiLogService apiLogService; + @Autowired + private BasCrnpService basCrnpService; + @Autowired + private LocMastService locMastService; + @Autowired + private LocDetlService locDetlService; + @Autowired + private StaDescService staDescService; + @Autowired + private CommonService commonService; + @Autowired + private NodeService nodeService; + @Autowired + private ManLocDetlService manLocDetlService; + @Autowired + private ManLocDetlMapper manLocDetlMapper; + @Resource + private InventoryCheckOrderService checkOrderService; + @Resource + private InventoryCheckOrderDetlService checkOrderDetlService; + + @Resource + private BasDevpMapper basDevpMapper; + + @Override + public R inLocCallAgv(String sta, String inSta) { + + BasDevp basDevp = basDevpMapper.selectById(inSta); + + // 鍒ゆ柇鏄惁鏈夊嚭搴撲换鍔� + Wrapper<WrkMast> wrapper = new EntityWrapper<WrkMast>().lt("wrk_sts", 14).in("io_type", 101, 103, 107, 110); + + switch (inSta) { + case "1040": + wrapper.in("source_sta_no", "1043", "1044"); + break; + case "2010": + wrapper.in("source_sta_no", "2013", "2014"); + break; + case "2000": + wrapper.in("source_sta_no", "2003", "2004"); + break; + case "3010": + wrapper.in("source_sta_no", "3013", "3014"); + break; + default: + } + int count = wrkMastService.selectCount(wrapper); + log.info("鍏ュ簱鍛煎彨agv鍛煎彨绔欑偣锛歿}锛岀洰鏍囩珯鐐癸細{},鍑哄簱浠诲姟鏁帮細{}",sta,inSta,count); + if (count != 0) { + return R.parse(inSta + "绔欑偣瀛樺湪鍑哄簱浠诲姟"); + } + + // 鍏堢粦瀹� +// boolean flag = bindPodAndBerth(sta); +// if (!flag) { +// return R.parse(inSta + "缁戝畾澶辫触"); +// } + + ForwardAGVTaskParam forwardAGVTaskParam = new ForwardAGVTaskParam(); + forwardAGVTaskParam.setReqCode(UUID.randomUUID().toString().replace("-", "")); + forwardAGVTaskParam.setClientCode("IWMS"); + forwardAGVTaskParam.setTaskTyp("GT3"); + forwardAGVTaskParam.setCtnrTyp("2"); + forwardAGVTaskParam.setPriority("1"); + List<ForwardAGVTaskParam.PositionCodePaths> positionCodePathsList = new ArrayList<>(); + positionCodePathsList.add(new ForwardAGVTaskParam.PositionCodePaths(sta, "05")); + positionCodePathsList.add(new ForwardAGVTaskParam.PositionCodePaths(inSta, "05")); + forwardAGVTaskParam.setPositionCodePath(positionCodePathsList); + + String body = JSON.toJSONString(forwardAGVTaskParam); + String response = ""; + String message = ""; + boolean success = false; + try { + response = new HttpHandler.Builder() + .setUri(ApiInterfaceConstant.AGV_IP) + .setPath(ApiInterfaceConstant.AGV_CALL_IN_PATH) + .setJson(body) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + if (jsonObject.getInteger("code").equals(0)) { + success = true; + // 鍏ュ簱鏆傚瓨+1 + basDevp.setInQty(basDevp.getInQty() + 1); + basDevpMapper.updateById(basDevp); + } else { + message = jsonObject.getString("message"); + log.error("鍏ュ簱鍛煎彨agv澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", ApiInterfaceConstant.AGV_IP + ApiInterfaceConstant.AGV_CALL_IN_PATH, body, response); + } + } catch (Exception e) { + log.error("鍏ュ簱鍛煎彨agv寮傚父", e); + } finally { + try { + // 淇濆瓨鎺ュ彛鏃ュ織 + apiLogService.save( + "鍏ュ簱鍛煎彨agv", + ApiInterfaceConstant.AGV_IP + ApiInterfaceConstant.AGV_CALL_IN_PATH, + null, + "127.0.0.1", + body, + response, + success + ); + } catch (Exception e) { + log.error("", e); + } + } + + return success ? R.ok("鍛煎彨agv鎴愬姛") : R.parse(message); + } + + @Override + public R unbind(String site) { + String staMap = AgvSiteConstant.SiteMap.get(site); + if (staMap == null) { + return R.parse("娌℃湁鎵惧埌璇ョ珯鐐圭殑鍏ュ簱鏄犲皠锛�" + site); + } + JSONObject jsonObject = new JSONObject(); + jsonObject.put("reqCode",UUID.randomUUID().toString().replace("-", "")); // 璇锋眰鍞竴鍊� + jsonObject.put("ctnrTyp","2"); // 瀹瑰櫒绫诲瀷2 + jsonObject.put("stgBinCode",staMap); // 浠撲綅缂栧彿锛屾牴鎹浠撶紪鍙疯浆鎹� + jsonObject.put("indBind","0"); // 1缁戝畾锛�0瑙g粦 + + String body = jsonObject.toJSONString(); + String response = ""; + String message = ""; + boolean success = false; + try { + response = new HttpHandler.Builder() + .setUri(ApiInterfaceConstant.AGV_IP) + .setPath(ApiInterfaceConstant.AGV_BIND_PATH) + .setJson(body) + .build() + .doPost(); + JSONObject res = JSON.parseObject(response); + message = jsonObject.getString("message"); + if (res.getInteger("code").equals(0)) { + success = true; + } else { + log.error("璋冪敤agv瑙g粦鏆傚瓨浣嶅け璐ワ紒锛侊紒url锛歿}锛況equest锛歿}锛況esponse锛歿}", ApiInterfaceConstant.AGV_IP + ApiInterfaceConstant.AGV_BIND_PATH, body, response); + } + } catch (Exception e) { + log.error("璋冪敤agv瑙g粦鏆傚瓨浣嶅紓甯�", e); + } finally { + try { + // 淇濆瓨鎺ュ彛鏃ュ織 + apiLogService.save( + "璋冪敤agv瑙g粦鏆傚瓨浣�", + ApiInterfaceConstant.AGV_IP + ApiInterfaceConstant.AGV_BIND_PATH, + null, + "127.0.0.1", + body, + response, + success + ); + } catch (Exception e) { + log.error("", e); + } + } + return success ? R.ok("瑙g粦鎴愬姛") : R.parse(message); + } + + private boolean bindPodAndBerth(String sta) { + String staMap = AgvSiteConstant.SiteMap.get(sta); + if (staMap == null) { + log.error("娌℃湁鎵惧埌璇ョ珯鐐圭殑鍏ュ簱鏄犲皠:{}",sta); + return false; + } + JSONObject jsonObject = new JSONObject(); + jsonObject.put("reqCode",UUID.randomUUID().toString().replace("-", "")); // 璇锋眰鍞竴鍊� + jsonObject.put("ctnrTyp","2"); // 瀹瑰櫒绫诲瀷2 + jsonObject.put("stgBinCode",staMap); // 浠撲綅缂栧彿锛屾牴鎹浠撶紪鍙疯浆鎹� + jsonObject.put("indBind","1"); // 1缁戝畾锛�0瑙g粦 + + String body = jsonObject.toJSONString(); + String response = ""; + boolean success = false; + try { + response = new HttpHandler.Builder() + .setUri(ApiInterfaceConstant.AGV_IP) + .setPath(ApiInterfaceConstant.AGV_BIND_PATH) + .setJson(body) + .build() + .doPost(); + JSONObject res = JSON.parseObject(response); + if (res.getInteger("code").equals(0)) { + success = true; + } else { + log.error("璋冪敤agv缁戝畾浠撲綅澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", ApiInterfaceConstant.AGV_IP + ApiInterfaceConstant.AGV_BIND_PATH, body, response); + } + } catch (Exception e) { + log.error("璋冪敤agv缁戝畾浠撲綅寮傚父", e); + } finally { + try { + // 淇濆瓨鎺ュ彛鏃ュ織 + apiLogService.save( + "璋冪敤agv缁戝畾浠撲綅", + ApiInterfaceConstant.AGV_IP + ApiInterfaceConstant.AGV_BIND_PATH, + null, + "127.0.0.1", + body, + response, + success + ); + } catch (Exception e) { + log.error("", e); + } + } + return success; + } @Override @Transactional @@ -58,11 +279,30 @@ if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) { throw new CoolException(BaseRes.PARAM); } - // 鍒ゆ柇鏄惁鏈夌浉鍚屾潯鐮佺殑鏁版嵁 - if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). - eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) { - throw new CoolException(param.getBarcode() + "鏁版嵁姝e湪杩涜鍏ュ簱"); + if(param.getCombMats().size()>1){ + throw new CoolException("璇锋彁鍙栦竴涓晢鍝侊紝鎴栬�呭埛鏂伴噸鏂扮粍鎵橈紒"); } + param.getCombMats().forEach(elem -> { + // 鍒ゆ柇鏄惁鏈夌浉鍚屾潯鐮佺殑鏁版嵁 + if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). + eq("zpallet", param.getBarcode()) + .eq("io_status", "N") + .eq("matnr",elem.getMatnr()).eq("batch",elem.getBatch())) > 0) { + throw new CoolException(param.getBarcode() + "宸叉湁鐩稿悓鏁版嵁"); + } + }); + + if(param.getBarcode().length()!=9){ + throw new CoolException("鏉$爜闀垮害涓嶆槸9浣�===>>" + param.getBarcode()); + } + + int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode())); + int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode())); +// int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",param.getBarcode())); + if (countLoc > 0 || countWrk > 0) { + throw new CoolException("宸ヤ綔妗�/搴撳瓨鏉$爜鏁版嵁宸插瓨鍦�===>>" + param.getBarcode()); + } + Date now = new Date(); // 鏃犲崟缁勬墭 @@ -71,6 +311,15 @@ // 鐢熸垚鍏ュ簱閫氱煡妗� List<DetlDto> detlDtos = new ArrayList<>(); param.getCombMats().forEach(elem -> { + + // 鍒ゆ柇鏄惁鏈夌浉鍚屾潯鐮佺殑鏁版嵁 + if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). + eq("zpallet", param.getBarcode()) + .eq("io_status", "N") + .eq("matnr",elem.getMatnr()).eq("batch",elem.getBatch())) > 0) { + throw new CoolException(param.getBarcode() + "宸叉湁鐩稿悓鏁版嵁"); + } + DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme()); if (DetlDto.has(detlDtos, detlDto)) { DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch()); @@ -105,24 +354,33 @@ // 鍏宠仈缁勬墭 } else { Order order = orderService.selectByNo(param.getOrderNo()); - if (order.getSettle() > 2) { + if (Cools.isEmpty(order) || order.getSettle() > 2) { throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈�"); } // 鐢熸垚鍏ュ簱閫氱煡妗� List<DetlDto> detlDtos = new ArrayList<>(); - param.getCombMats().forEach(elem -> { + + for (CombParam.CombMat elem : param.getCombMats()) { + + +// param.getCombMats().forEach(elem -> { // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙 OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch()); + if (Cools.isEmpty(orderDetl)) { + throw new CoolException("璇ュ崟鎹腑鏈壘鍒板搴旂墿鏂欐槑缁�"); + } if (elem.getAnfme() > orderDetl.getEnableQty()) { throw new CoolException(orderDetl.getMatnr() + "鍏ュ簱鏁伴噺涓嶅悎娉�"); } - // 淇敼璁㈠崟鏄庣粏鏁伴噺 - if (!orderDetlService.increase(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) { - throw new CoolException("淇敼鍗曟嵁鏄庣粏鏁伴噺澶辫触"); + // 淇敼璁㈠崟浣滀笟鏁伴噺 + if (!orderDetlService.increaseWorkQty(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) { + throw new CoolException("淇敼鍗曟嵁浣滀笟鏁伴噺澶辫触"); } - DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme()); +// DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),orderDetl.getManu()); + DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),orderDetl.getSuppCode() + , orderDetl.getManu(),orderDetl.getSku(),orderDetl.getSupp(),orderDetl.getTemp1(),orderDetl.getTemp2(),orderDetl.getTemp3(),orderDetl.getTemp4()); if (DetlDto.has(detlDtos, detlDto)) { DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch()); assert one != null; @@ -130,7 +388,8 @@ } else { detlDtos.add(detlDto); } - }); +// }); + } for (DetlDto detlDto : detlDtos) { Mat mat = matService.selectByMatnr(detlDto.getMatnr()); if (Cools.isEmpty(mat)) { @@ -139,7 +398,7 @@ WaitPakin waitPakin = new WaitPakin(); waitPakin.sync(mat); waitPakin.setOrderNo(order.getOrderNo()); // 鍗曟嵁缂栧彿 - waitPakin.setBatch(detlDto.getBatch()); // 鎵瑰彿 + waitPakin.setBatch(detlDto.getBatch()); // 搴忓垪鐮� waitPakin.setZpallet(param.getBarcode()); // 鎵樼洏鐮� waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵�� waitPakin.setAnfme(detlDto.getAnfme()); // 鏁伴噺 @@ -148,6 +407,20 @@ waitPakin.setAppeTime(now); waitPakin.setModiUser(userId); waitPakin.setModiTime(now); + waitPakin.setManu(detlDto.getMark()); //鏍囪 + waitPakin.setOrigin(order.getItemName());//浠撳簱 + waitPakin.setSupp(detlDto.getSuppName()); //渚涘簲鍟� + waitPakin.setSku(detlDto.getCustomer()); //瀹㈡埛鍚嶇О + waitPakin.setThreeCode(detlDto.getOrderNo()); //u8鍙戣繃鏉ョ殑璁㈠崟鍙� + waitPakin.setSuppCode(detlDto.getFromOrderNo()); //鏉ユ簮鍗曞彿 + waitPakin.setTemp1(detlDto.getTemp1()); + waitPakin.setTemp2(detlDto.getTemp2()); + waitPakin.setTemp3(detlDto.getTemp3()); + waitPakin.setTemp4(detlDto.getTemp4()); + int countWrk2 = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode())); + if (countWrk2 > 0) { + throw new CoolException("宸ヤ綔妗f潯鐮佹暟鎹凡瀛樺湪===>>" + param.getBarcode()); + } if (!waitPakinService.insert(waitPakin)) { throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�"); } @@ -156,6 +429,138 @@ } } + + @Override + @Transactional + public void mergeComb(CombParam param, Long userId) { + + if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) { + throw new CoolException(BaseRes.PARAM); + } + if(param.getCombMats().stream().anyMatch(obj -> obj.getAnfme() == null)){ + throw new CoolException("鍏ュ簱鐗╂枡鏁伴噺涓嶈兘涓虹┖"); + } + Order order = orderService.selectByNo(param.getOrderNo()); + if (Cools.isEmpty(order) || order.getSettle() > 2) { + throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈�"); + } + + // 鍒ゆ柇鏄惁鏈夌浉鍚屾潯鐮佺殑鏁版嵁 + if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). + eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) { + throw new CoolException(param.getBarcode() + "鏁版嵁姝e湪杩涜鍏ュ簱"); + } + + int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode())); + WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode()); + if (wrkMast.getWrkSts() != 14 && wrkMast.getIoType() != 104){ + throw new CoolException(param.getBarcode() + "璇ユ潯鐮佹暟鎹笉涓哄苟鏉垮嚭搴�"); + } + + //璁剧疆闈瀗ull鎵瑰彿锛� + for (CombParam.CombMat combMat : param.getCombMats()) { + if (combMat.getBatch() == null){ + combMat.setBatch(""); + } + } + + Date now = new Date(); + for (CombParam.CombMat combMat : param.getCombMats()) { + // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙 + OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), combMat.getMatnr(), combMat.getBatch()); + if (Cools.isEmpty(orderDetl)) { + throw new CoolException("璇ュ崟鎹腑鏈壘鍒板搴旂墿鏂欐槑缁�"); + } + if (combMat.getAnfme() > orderDetl.getEnableQty()) { + throw new CoolException(orderDetl.getMatnr() + "鍏ュ簱鏁伴噺涓嶅悎娉�"); + } + // 淇敼璁㈠崟浣滀笟鏁伴噺 + if (!orderDetlService.increaseWorkQty(order.getId(), combMat.getMatnr(), combMat.getBatch(), combMat.getAnfme())) { + throw new CoolException("淇敼鍗曟嵁浣滀笟鏁伴噺澶辫触"); + } + + Mat mat = matService.selectByMatnr(combMat.getMatnr()); + WrkDetl wrkDetl = new WrkDetl(); + wrkDetl.sync(mat); + wrkDetl.setBatch(combMat.getBatch()); + wrkDetl.setWrkNo(wrkMast.getWrkNo()); + wrkDetl.setOrderNo(param.getOrderNo()); + wrkDetl.setZpallet(param.getBarcode()); + wrkDetl.setAnfme(combMat.getAnfme()); + wrkDetl.setAppeTime(now); + wrkDetl.setAppeUser(userId); + wrkDetl.setModiTime(now); + wrkDetl.setModiUser(userId); + wrkDetl.setManu(orderDetl.getManu()); + wrkDetl.setSupp(orderDetl.getSupp()); + wrkDetl.setTemp1(orderDetl.getTemp1()); + wrkDetl.setTemp2(orderDetl.getTemp2()); + wrkDetl.setTemp3(orderDetl.getTemp3()); + wrkDetl.setTemp4(orderDetl.getTemp4()); + wrkDetlService.insert(wrkDetl); + } + + + + + + } + + // 鍟嗗搧涓婃灦 + @Override + public void onSale(CombParam param) { + Date now = new Date(); + // 鑾峰彇搴撲綅鍙� + String locno = param.getLocno(); + Node node = nodeService.selectByUuid(locno); + if (Cools.isEmpty(node)) { + throw new CoolException(param.getLocno() + ":搴撲綅涓嶅瓨鍦�"); + } + + // 鑾峰彇鍟嗗搧鍒楄〃 + for(CombParam.CombMat combMat : param.getCombMats()){ + Mat mat = matService.selectByMatnr(combMat.getMatnr()); + if (Cools.isEmpty(mat)){ + throw new CoolException(combMat.getMatnr() + ":鍟嗗搧妗f涓嶅瓨鍦紒"); + } + if (Cools.isEmpty(combMat.getAnfme()) || combMat.getAnfme()==0){ + throw new CoolException(combMat.getMatnr() + ":鍟嗗搧鏁伴噺鏈夎锛�"); + } + if (Cools.isEmpty(combMat.getBatch())){ +// throw new CoolException(combMat.getMatnr() + ":鍟嗗搧鎵瑰彿鏈夎锛�"); + } + ManLocDetl manLocDetl = new ManLocDetl(); + manLocDetl.setLocNo(locno); + manLocDetl.setNodeId(node.getId()); + manLocDetl.setMaktx(mat.getMaktx()); + manLocDetl.setMatnr(mat.getMatnr()); + manLocDetl.setBatch(Cools.isEmpty(combMat.getBatch()) ? "" : combMat.getBatch()); + manLocDetl.setAnfme(combMat.getAnfme()); + manLocDetl.setModiTime(now); + if (!manLocDetlService.insert(manLocDetl)) { + throw new CoolException("鍟嗗搧涓婃灦澶辫触锛�"); + } + } + } + + // 鍟嗗搧涓嬫灦 + @Override + public void offSale(OffSaleParam offSaleParam) { + ManLocDetl manLocDetl = manLocDetlMapper.selectLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr()); + if (Cools.isEmpty(manLocDetl)){ + throw new CoolException("鏃犳鍟嗗搧锛�"); + } + double anfme = manLocDetl.getAnfme() - offSaleParam.getAnfme(); + if (anfme < 0) { + throw new CoolException("鍟嗗搧搴撳瓨涓嶈冻锛�"); + } else if (anfme == 0){ + manLocDetlMapper.deleteLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr()); + } + manLocDetlMapper.updateAnfme0(anfme,manLocDetl.getNodeId()); + } + + // 鏌ユ壘鍟嗗搧 + @Override @Transactional @@ -236,6 +641,7 @@ } @Override + @Transactional public void packComb(CombParam param, Long userId) { if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) { throw new CoolException(BaseRes.PARAM); @@ -265,7 +671,10 @@ throw new CoolException(elem.getMatnr() + "鏉$爜宸蹭笅绾匡紝璇锋鏌ワ紒"); } } - DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme()); + Mat analyse = MatUtils.analyseMat(elem.getMatnr()); + // 鏉$爜銆佺墿鏂欎唬鐮併�佸簭鍒楀彿銆佹暟閲� + DetlDto detlDto = new DetlDto(elem.getMatnr(), analyse.getMatnr(), analyse.getBarcode(), elem.getAnfme()); +// DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme()); if (DetlDto.has(detlDtos, detlDto)) { DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch()); assert one != null; @@ -276,14 +685,60 @@ }); if (packDown) { - // 鏁版嵁涓婃姤 todo + MesCombParam mesCombParam = new MesCombParam(); + mesCombParam.setZpallet(param.getBarcode()); + mesCombParam.setPakinTime(DateUtils.convert(now)); + mesCombParam.setLgort("5008"); + mesCombParam.setPlantCode("5000"); + mesCombParam.setFromCode("5012-20"); + mesCombParam.setStationCode("JJQ-PFZPDB-XX"); + for (DetlDto detlDto : detlDtos) { + mesCombParam.getList().add(new MesCombParam.Detl(detlDto.getOrderNo(), detlDto.getAnfme())); + } + String response = ""; + boolean success = false; + try { + response = new HttpHandler.Builder() + .setUri(MesConstant.URL) + .setPath(MesConstant.PACK_DOWN_URL) + .setJson(JSON.toJSONString(mesCombParam)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + if (jsonObject.getInteger("code").equals(200)) { + success = true; + } else if (jsonObject.getInteger("code").equals(500)) { + log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.URL+MesConstant.PACK_DOWN_URL, JSON.toJSONString(mesCombParam), response); + throw new CoolException(jsonObject.getString("msg")); + } else { + log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.URL+MesConstant.PACK_DOWN_URL, JSON.toJSONString(mesCombParam), response); + throw new CoolException("涓婃姤mes绯荤粺澶辫触"); + } + } catch (Exception e) { + log.error("fail", e); + throw new CoolException(e.getMessage()); + } finally { + try { + // 淇濆瓨鎺ュ彛鏃ュ織 + apiLogService.save( + "鎵撳寘涓嬬嚎甯墭涓婃姤", + MesConstant.URL + MesConstant.PACK_DOWN_URL, + null, + "127.0.0.1", + JSON.toJSONString(mesCombParam), + response, + success + ); + } catch (Exception e) { log.error("", e); } + } + } // 鐢熸垚鍏ュ簱鍗曟嵁 String orderNo = "PACK" + snowflakeIdWorker.nextId(); OpenOrderPakinParam openParam = new OpenOrderPakinParam(); openParam.setOrderNo(orderNo); - openParam.setOrderTime(DateUtils.convert(now)); + openParam.setInboundDate(DateUtils.convert(now)); openParam.setOrderType("鎵撳寘鍏ュ簱鍗�"); openParam.setOrderDetails(detlDtos); openService.pakinOrderCreate(openParam); @@ -291,12 +746,25 @@ if (null == order) { throw new CoolException("鐢熸垚鍗曟嵁澶辫触"); } - if (orderService.updateSettle(order.getId(), 2L, userId)) { + if (!orderService.updateSettle(order.getId(), 2L, userId)) { throw new CoolException("淇敼鍗曟嵁鐘舵�佸け璐�"); } // 鐢熸垚鍏ュ簱閫氱煡妗� for (DetlDto detlDto : detlDtos) { + + // 淇敼浣滀笟鏁伴噺 ---------------------------------------- + // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙 + OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), detlDto.getMatnr(), detlDto.getBatch()); + if (detlDto.getAnfme() > orderDetl.getEnableQty()) { + throw new CoolException(orderDetl.getMatnr() + "鍏ュ簱鏁伴噺涓嶅悎娉�"); + } + // 淇敼璁㈠崟浣滀笟鏁伴噺 + if (!orderDetlService.increaseWorkQty(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) { + throw new CoolException("淇敼鍗曟嵁浣滀笟鏁伴噺澶辫触"); + } + + // 淇濆瓨鍏ュ簱閫氱煡妗� Mat mat = matService.selectByMatnr(detlDto.getMatnr()); if (Cools.isEmpty(mat)) { throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�"); @@ -317,7 +785,7 @@ throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�"); } // 淇敼鎵撳寘鏁版嵁鐘舵�� - Pack pack = packService.selectByBarcode(detlDto.getMatnr()); + Pack pack = packService.selectByBarcode(detlDto.getOrderNo()); pack.setSettle(2L); pack.setUpdateTime(now); pack.setUpdateBy(userId); @@ -329,4 +797,610 @@ } } + @Override + @Transactional + public void pakoutByOrder(JSONObject param, Long userId) { + Integer staNo = param.containsKey("staNo") ? Integer.parseInt(param.get("staNo").toString()) : 0; + String orderNo = param.containsKey("orderNo") ? param.get("orderNo").toString() : ""; + + BasDevp sta = basDevpService.checkSiteStatus(staNo); + //鏍规嵁璁㈠崟鍙风敓鎴愬嚭搴撲换鍔″伐浣滄。 + Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", orderNo)); + if (order.getSettle() != 1 && order.getSettle() != 2){ + throw new CoolException("璇ヨ鍗曞凡澶勭悊"); + } + + List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no", orderNo)); + Date now = new Date(); + for(OrderDetl orderDetl : orderDetls){ + //鏌ヨ鎵�鏈夊簱浣嶇姸鎬佷负F鐨勫簱浣嶄俊鎭� + List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(),orderDetl.getBatch(),null,null,orderDetl.getSupp(),orderDetl.getTemp1(),orderDetl.getTemp2()); + if (locDetls.size() == 0) { + throw new CoolException("搴撳瓨涓病鏈夎鐗╂枡"); + } + for(LocDetl locDetl : locDetls){ + //濡傛灉璇ュ簱浣嶅嚭搴撹矾绾挎墍鐢ㄧ殑鍫嗗灈鏈簅ut_enable涓嶄负Y,璺宠繃璇ュ惊鐜� + LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() + .eq("loc_no", locDetl.getLocNo())); + if (Cools.isEmpty(locMast)) { + continue; + } + BasCrnp crn_no = basCrnpService.selectOne(new EntityWrapper<BasCrnp>() + .eq("crn_no", locMast.getCrnNo())); + if (Cools.isEmpty(crn_no) || !crn_no.getOutEnable().equals("Y")){ + continue; + } + + //鍙嚭搴撴暟閲� = 璁㈠崟鏁伴噺 - 浣滀笟涓暟閲� + Double outQty = orderDetl.getAnfme() - orderDetl.getWorkQty(); + if(outQty <= 0){ + break; + } + // 鍒ゆ柇鍏ュ嚭搴撶被鍨嬶細101.鍏ㄦ澘鍑哄簱 or 103.鎷f枡鍑哄簱 + Double sumCount = locDetlService.getLocDetlSumQty(locDetl.getLocNo()); + Double curOutQty = outQty >= locDetl.getAnfme() ? locDetl.getAnfme() : outQty; //鏈鍑哄簱閲� + int ioType = sumCount <= curOutQty ? 101 : 103; + + stockOut(orderDetl, sta, locDetl, curOutQty, ioType, userId, now); + order.setSettle(2L); + order.setUpdateBy(userId); + order.setUpdateTime(now); + if(!orderService.update(order, new EntityWrapper<Order>().eq("order_no", orderNo))){ + throw new CoolException("鏇存柊璁㈠崟鐘舵�佸け璐�"); + } + orderDetl.setWorkQty(orderDetl.getWorkQty() + curOutQty); + orderDetl.setUpdateBy(userId); + orderDetl.setUpdateTime(now); + Wrapper wrapper = new EntityWrapper<OrderDetl>().eq("order_no", orderNo) + .eq("matnr",orderDetl.getMatnr()); + if(!Cools.isEmpty(orderDetl.getBatch())){ + wrapper.eq("batch", orderDetl.getBatch()); + } + if(!orderDetlService.update(orderDetl, wrapper)){ + throw new CoolException("鏇存柊璁㈠崟鏄庣粏澶辫触"); + } + } + + } + } + + @Override +// @Transactional + public void leftoversOut(Map<String, Object> map,Long userId) { + String barcode = map.get("barcode").toString(); + String barcode2 = map.get("barcode2").toString(); + + int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",barcode2)); + int countWrk = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode",barcode2).ne("io_type",200)); + int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",barcode2)); + if (countLoc > 0 || countWrk > 0 || countwait > 0) { + throw new CoolException("璇ユ潯鐮佸凡琚娇鐢�===>>" + barcode2); + } + WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode).eq("io_type", 103)); + if (Cools.isEmpty(wrkMast)) { + throw new CoolException("鏈煡璇㈠埌鎷f枡浠诲姟"); + } + int workNo = commonService.getWorkNo(1); + WrkMast wrkMast2 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode2).eq("io_type", 200)); + if (Cools.isEmpty(wrkMast2)) { + Date now = new Date(); + + WrkMast wrkMast1 = new WrkMast(); + wrkMast1.sync(wrkMast); + wrkMast1.setWrkNo(workNo); + wrkMast1.setWrkSts(2L); + wrkMast1.setIoType(200); + wrkMast1.setSourceStaNo(wrkMast.getStaNo() == 113 ? 111 : 117); + wrkMast1.setStaNo(wrkMast.getStaNo() == 113 ? 204 : 304); + wrkMast1.setIoTime(now); + wrkMast1.setIoPri(13D); // 浼樺厛绾э細13 + wrkMast1.setCrnNo(wrkMast.getCrnNo()); + wrkMast1.setSourceLocNo(wrkMast.getLocNo()); // 婧愬簱浣� + wrkMast1.setFullPlt("Y"); // 婊℃澘锛歒 + wrkMast1.setPicking("N"); // 鎷f枡 + wrkMast1.setExitMk("N"); // 閫�鍑� + wrkMast1.setEmptyMk("N"); // 绌烘澘 + wrkMast1.setLinkMis("N"); + wrkMast1.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁 + wrkMast1.setAppeTime(now); + wrkMast1.setModiUser(userId); + wrkMast1.setModiTime(now); + wrkMast1.setBarcode(barcode2); + if (!wrkMastService.insert(wrkMast1)) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + } + } + + + List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("zpallet", map.get("barcode"))); + if (Cools.isEmpty(wrkDetls)) { + throw new CoolException("鏈煡璇㈠埌鎷f枡浠诲姟鏄庣粏"); + } + + for(WrkDetl wrkDetl : wrkDetls){ + WrkDetl wrkDetl1 = new WrkDetl(); + wrkDetl1.sync(wrkDetl); + wrkDetl1.setWrkNo(workNo); + wrkDetlService.insert(wrkDetl1); + } + + + + } + + @Override + public void pdaAdjust(pdaAdjustParam param, Long userId) { + if (Cools.isEmpty(param)){ + throw new CoolException("鐩樼偣鍒楄〃鍙傛暟涓虹┖"); + } + for (InventoryCheckOrderDetl orderDetl: param.getParam()){ + InventoryCheckOrderDetl inventoryCheckOrderDetl = checkOrderDetlService.selectOne(new EntityWrapper<InventoryCheckOrderDetl>() + .eq("order_no", orderDetl.getOrderNo()) + .eq("matnr", orderDetl.getMatnr()) + .eq("batch", orderDetl.getBatch())); + if (Cools.isEmpty(inventoryCheckOrderDetl)){ + throw new CoolException("鏈煡璇㈠埌鐩樼偣淇℃伅"); + } + if (!inventoryCheckOrderDetl.getStatus().equals("1")){ + throw new CoolException("璇ヤ换鍔″凡鐩樼偣"); + } + inventoryCheckOrderDetl.setCheckAnfme(orderDetl.getCheckAnfme()); + inventoryCheckOrderDetl.setStatus("2"); + if (!checkOrderDetlService.updateById(inventoryCheckOrderDetl)){ + throw new CoolException("淇濆瓨鐩樼偣淇℃伅澶辫触!"); + } + + } + + + + } + + @Override + @Transactional + public void inventoryUpload(String orderId) { + if (Cools.isEmpty(orderId)){ + throw new CoolException("鐩樼偣鍗昳d涓虹┖"); + } + InventoryCheckOrder inventoryCheckOrder = checkOrderService.selectById(orderId); + if (Cools.isEmpty(inventoryCheckOrder)){ + throw new CoolException("鏈壘鍒扮洏鐐瑰崟"); + } + if (inventoryCheckOrder.getStatus().equals("2")){ + throw new CoolException("鐩樼偣鍗曞凡鎻愪氦"); + } + int count = checkOrderDetlService.selectCount(new EntityWrapper<InventoryCheckOrderDetl>() + .eq("order_no", inventoryCheckOrder.getOrderNo()).isNull("check_anfme")); + if (count>0){ + throw new CoolException("鏈夋湭瀹屾垚鐨勭洏鐐逛换鍔�"); + } + + List<InventoryCheckOrderDetl> checkOrderProfitDetls = checkOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>() + .eq("order_no", inventoryCheckOrder.getOrderNo()) + .addFilter("anfme < check_anfme")); + if (!checkOrderProfitDetls.isEmpty()){ + //鑾峰彇鐩樼泩鍗昿aram + InventoryErpParam erpProfitParam = getErpProfitParam(inventoryCheckOrder, checkOrderProfitDetls); + uploadErp(erpProfitParam); + } + + List<InventoryCheckOrderDetl> checkOrderDeficitDetls = checkOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>() + .eq("order_no", inventoryCheckOrder.getOrderNo()) + .addFilter("anfme > check_anfme")); + + if (!checkOrderDeficitDetls.isEmpty()){ + //鑾峰彇鐩樹簭鍗昿aram + InventoryErpParam erpDeficitParam = getErpDeficitParam(inventoryCheckOrder, checkOrderDeficitDetls); + uploadErp(erpDeficitParam); + } + + inventoryCheckOrder.setStatus("2"); + if (!checkOrderService.updateById(inventoryCheckOrder)){ + throw new CoolException("鐘舵�佹洿鏂板け璐�"); + } + + + + + } + + @Override + @Transactional + public void pingKuShelves(CombParam combParam,Long userId) { + Node node = nodeService.selectOne(new EntityWrapper<Node>().eq("name", combParam.getLocno()).eq("type", 3)); + if (Cools.isEmpty(node)){ + throw new CoolException("鏈壘鍒板簱浣嶄俊鎭�"); + } + + Order order = orderService.selectByNo(combParam.getOrderNo()); + if (Cools.isEmpty(order) || order.getSettle() > 2) { + throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈�"); + } + // 鐢熸垚鍏ュ簱閫氱煡妗� + List<DetlDto> detlDtos = new ArrayList<>(); + + for (CombParam.CombMat elem : combParam.getCombMats()) { + + +// param.getCombMats().forEach(elem -> { + + // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙 + OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch()); + if (Cools.isEmpty(orderDetl)) { + throw new CoolException("璇ュ崟鎹腑鏈壘鍒板搴旂墿鏂欐槑缁�"); + } + if (elem.getAnfme() > orderDetl.getEnableQty()) { + throw new CoolException(orderDetl.getMatnr() + "鍏ュ簱鏁伴噺涓嶅悎娉�"); + } + // 淇敼璁㈠崟浣滀笟鏁伴噺 + if (!orderDetlService.increaseWorkQty(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) { + throw new CoolException("淇敼鍗曟嵁浣滀笟鏁伴噺澶辫触"); + } + +// DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),orderDetl.getManu()); + DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),orderDetl.getSuppCode() + , orderDetl.getManu(),orderDetl.getSku(),orderDetl.getSupp(),orderDetl.getTemp1(),orderDetl.getTemp2(),orderDetl.getTemp3(),orderDetl.getTemp4()); + if (DetlDto.has(detlDtos, detlDto)) { + DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch()); + assert one != null; + one.setAnfme(one.getAnfme() + detlDto.getAnfme()); + } else { + detlDtos.add(detlDto); + } +// }); + } + int workNo = commonService.getWorkNo(4); + Date now = new Date(); + // 鐢熸垚宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(new Date()); + wrkMast.setWrkSts(4L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID + wrkMast.setIoType(300); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱 + wrkMast.setIoPri(12D); // 浼樺厛绾� + wrkMast.setLocNo(node.getName()); + wrkMast.setBarcode(""); // 鎵樼洏鐮� + wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk("N"); // 绌烘澘 + wrkMast.setLinkMis("Y"); + wrkMast.setSheetNo(order.getOrderNo()); + // 鎿嶄綔浜哄憳鏁版嵁 + wrkMast.setAppeTime(now); + wrkMast.setModiTime(now); + boolean res = wrkMastService.insert(wrkMast); + if (!res) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + } + for (DetlDto detlDto : detlDtos) { + Mat mat = matService.selectByMatnr(detlDto.getMatnr()); + if (Cools.isEmpty(mat)) { + throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�"); + } + WrkDetl wrkDetl = new WrkDetl(); + + wrkDetl.sync(detlDto); + wrkDetl.sync(mat); + + wrkDetl.setOrderNo(order.getOrderNo()); + wrkDetl.setWrkNo(wrkMast.getWrkNo()); + wrkDetl.setIoTime(wrkMast.getIoTime()); + wrkDetl.setAppeTime(now); + wrkDetl.setModiTime(now); + wrkDetl.setManu(detlDto.getMark()); //鏍囪 + wrkDetl.setOrigin(order.getItemName());//浠撳簱 + wrkDetl.setSupp(detlDto.getSuppName()); //渚涘簲鍟� + wrkDetl.setSku(detlDto.getCustomer()); //瀹㈡埛鍚嶇О + wrkDetl.setThreeCode(detlDto.getOrderNo()); //u8鍙戣繃鏉ョ殑璁㈠崟鍙� + wrkDetl.setSuppCode(detlDto.getFromOrderNo()); //鏉ユ簮鍗曞彿 + wrkDetl.setTemp1(detlDto.getTemp1()); + wrkDetl.setTemp2(detlDto.getTemp2()); + wrkDetl.setTemp3(detlDto.getSuppName()); + wrkDetl.setTemp4(detlDto.getTemp4()); + if (!wrkDetlService.insert(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触"); + } + } + orderService.updateSettle(order.getId(), 2L, userId); + + + } + + @Override + @Transactional + public void pingKuUnShelves(CombParam combParam, Long userId) { + String orderNo = combParam.getOrderNo(); + + Node node = nodeService.selectOne(new EntityWrapper<Node>().eq("name", combParam.getLocno()).eq("type", 3)); + if (Cools.isEmpty(node)){ + throw new CoolException("鏈壘鍒板簱浣嶄俊鎭�"); + } + //鏍规嵁璁㈠崟鍙风敓鎴愬嚭搴撲换鍔″伐浣滄。 + Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", orderNo)); + if (order.getSettle() != 1 && order.getSettle() != 2){ + throw new CoolException("璇ヨ鍗曞凡澶勭悊"); + } + List<DetlDto> detlDtos = new ArrayList<>(); + for (CombParam.CombMat elem : combParam.getCombMats()) { + Wrapper<ManLocDetl> manLocDetlWrapper = new EntityWrapper<ManLocDetl>().eq("loc_no", combParam.getLocno()) + .eq("matnr", elem.getMatnr()).eq("batch", elem.getBatch()) + .eq("temp3", elem.getSupp()).eq("temp1", elem.getTemp1()).eq("temp2", elem.getTemp2()); + ManLocDetl manLocDetl = manLocDetlService.selectOne(manLocDetlWrapper); + + if (Cools.isEmpty(manLocDetl)){ + throw new CoolException("璇ュ簱浣嶆湭鏌ヨ鍒拌揣鐗╀俊鎭�"); + } + if (elem.getAnfme()> manLocDetl.getAnfme()){ + throw new CoolException("鍑哄簱鏁伴噺澶т簬搴撲綅鍓╀綑鏁伴噺"); + } + + OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch()); + if (Cools.isEmpty(orderDetl)) { + throw new CoolException("璇ュ崟鎹腑鏈壘鍒板搴旂墿鏂欐槑缁�"); + } + if (elem.getAnfme() > orderDetl.getEnableQty()) { + throw new CoolException(orderDetl.getMatnr() + "鍏ュ簱鏁伴噺涓嶅悎娉�"); + } + // 淇敼璁㈠崟浣滀笟鏁伴噺 + if (!orderDetlService.increaseWorkQty(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) { + throw new CoolException("淇敼鍗曟嵁浣滀笟鏁伴噺澶辫触"); + } + + DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),orderDetl.getSuppCode() + , orderDetl.getManu(),orderDetl.getSku(),orderDetl.getSupp(),orderDetl.getTemp1(),orderDetl.getTemp2(),orderDetl.getTemp3(),orderDetl.getTemp4()); + + + int workNo = commonService.getWorkNo(4); + Date now = new Date(); + // 鐢熸垚宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(new Date()); + wrkMast.setWrkSts(14L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID + wrkMast.setIoType(301); // 鍏ュ嚭搴撶姸鎬侊細301.骞冲簱鍑哄簱 + wrkMast.setIoPri(12D); // 浼樺厛绾� + wrkMast.setSourceLocNo(node.getName()); + wrkMast.setBarcode(""); // 鎵樼洏鐮� + wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk("N"); // 绌烘澘 + wrkMast.setLinkMis("Y"); + wrkMast.setSheetNo(order.getOrderNo()); + // 鎿嶄綔浜哄憳鏁版嵁 + wrkMast.setAppeTime(now); + wrkMast.setModiTime(now); + boolean res = wrkMastService.insert(wrkMast); + if (!res) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + } + + Mat mat = matService.selectByMatnr(detlDto.getMatnr()); + if (Cools.isEmpty(mat)) { + throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�"); + } + WrkDetl wrkDetl = new WrkDetl(); + + wrkDetl.sync(detlDto); + wrkDetl.sync(mat); + + wrkDetl.setOrderNo(order.getOrderNo()); + wrkDetl.setWrkNo(wrkMast.getWrkNo()); + wrkDetl.setIoTime(wrkMast.getIoTime()); + wrkDetl.setAppeTime(now); + wrkDetl.setModiTime(now); + wrkDetl.setManu(detlDto.getMark()); //鏍囪 + wrkDetl.setOrigin(order.getItemName());//浠撳簱 + wrkDetl.setSupp(detlDto.getSuppName()); //渚涘簲鍟� + wrkDetl.setSku(detlDto.getCustomer()); //瀹㈡埛鍚嶇О + wrkDetl.setThreeCode(detlDto.getOrderNo()); //u8鍙戣繃鏉ョ殑璁㈠崟鍙� + wrkDetl.setSuppCode(detlDto.getFromOrderNo()); //鏉ユ簮鍗曞彿 + wrkDetl.setTemp1(detlDto.getTemp1()); + wrkDetl.setTemp2(detlDto.getTemp2()); + wrkDetl.setTemp3(detlDto.getTemp3()); + wrkDetl.setTemp4(detlDto.getTemp4()); + if (!wrkDetlService.insert(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触"); + } + + if (new BigDecimal(manLocDetl.getAnfme()).subtract(new BigDecimal(elem.getAnfme())).doubleValue() == 0){ + manLocDetlService.delete(manLocDetlWrapper); + }else { + manLocDetl.setAnfme(new BigDecimal(manLocDetl.getAnfme()).subtract(new BigDecimal(elem.getAnfme())).doubleValue()); + if (!manLocDetlService.update(manLocDetl,manLocDetlWrapper)) { + throw new CoolException("鏇存柊鏄庣粏澶辫触"); + } + } + + + + + + } + orderService.updateSettle(order.getId(), 2L, userId); + + + } + + public void uploadErp(InventoryErpParam param){ + String response = ""; + boolean success = false; + try { + HashMap<String, Object> headers = new HashMap<>(); + headers.put("Content-Type", "application/json"); + response = new HttpHandler.Builder() + .setHeaders(headers) + .setUri("10.0.100.160:30108") + .setPath("web/apps/gongqi.df.dataTrans/DTInterFace/doJobWithupdateBody") + .setJson(JSON.toJSONString(param)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + if (jsonObject.getInteger("errcode").equals(0)) { + success = true; + } else if (jsonObject.getInteger("errcode").equals(1)) { + log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.URL+MesConstant.PACK_DOWN_URL, JSON.toJSONString(param), response); + throw new CoolException(jsonObject.getString("msg")); + } else { + log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.URL+MesConstant.PACK_DOWN_URL, JSON.toJSONString(param), response); + throw new CoolException("涓婃姤mes绯荤粺澶辫触"); + } + } catch (Exception e) { + log.error("fail", e); + throw new CoolException(e.getMessage()); + } finally { + try { + // 淇濆瓨鎺ュ彛鏃ュ織 + apiLogService.save( + "鐩樼偣鍗曚笂鎶�", + MesConstant.URL + MesConstant.PACK_DOWN_URL, + null, + "127.0.0.1", + JSON.toJSONString(param), + response, + success + ); + } catch (Exception e) { log.error("", e); } + } + } + + public InventoryErpParam getErpProfitParam(InventoryCheckOrder inventoryCheckOrder,List<InventoryCheckOrderDetl> checkOrderProfitDetls) { + Date date = new Date(); + InventoryErpParam erpProfitParam = new InventoryErpParam(); + InventoryErpParam.DataJson dataJson = new InventoryErpParam.DataJson(); + dataJson.setFlowCode("LIKUwms12GOTmes"); + dataJson.setTableCode("DTInventInTable_pdd"); + dataJson.setLogName("鐩樼泩鍗�-鍏ュ簱鍗�"); + erpProfitParam.setDataJson(dataJson); + List<InventoryErpParam.UpdateJson> updateJsonList = new ArrayList<>(); + InventoryErpParam.UpdateJson updateJson = new InventoryErpParam.UpdateJson(); + updateJson.setOrderNo(inventoryCheckOrder.getOrderNo()); + updateJson.setDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)); + List<InventoryErpParam.MatDetails> matDetails = new ArrayList<>(); + for (InventoryCheckOrderDetl checkOrderProfitDetl: checkOrderProfitDetls){ + InventoryErpParam.MatDetails matDetail = new InventoryErpParam.MatDetails(); + + Mat mat = matService.selectByMatnr(checkOrderProfitDetl.getMatnr()); + + matDetail.setMatnr(checkOrderProfitDetl.getMatnr()); + matDetail.setBatch(checkOrderProfitDetl.getBatch()); + matDetail.setSpecs(mat.getSpecs()); + Double anfme = new BigDecimal(checkOrderProfitDetl.getCheckAnfme()).subtract(new BigDecimal(checkOrderProfitDetl.getAnfme())).doubleValue(); + matDetail.setAnfme(anfme); + matDetail.setLocNo(checkOrderProfitDetl.getLocNo()); + matDetail.setWarehouse(checkOrderProfitDetl.getArea()); + matDetail.setSeq(updateJson.getMatDetails() == null?1:updateJson.getMatDetails().size()+1); + matDetails.add(matDetail); + } + updateJson.setMatDetails(matDetails); + updateJsonList.add(updateJson); + erpProfitParam.setUpdateJson(updateJsonList); + return erpProfitParam; + } + + public InventoryErpParam getErpDeficitParam(InventoryCheckOrder inventoryCheckOrder,List<InventoryCheckOrderDetl> checkOrderDeficitDetls) { + Date date = new Date(); + InventoryErpParam erpDeficitParam = new InventoryErpParam(); + InventoryErpParam.DataJson dataJson = new InventoryErpParam.DataJson(); + dataJson.setFlowCode("LIKUwms12GOTmes"); + dataJson.setTableCode("DTInventOutTable_pdd"); + dataJson.setLogName("鐩樹簭鍗�-鍑哄簱鍗�"); + erpDeficitParam.setDataJson(dataJson); + List<InventoryErpParam.UpdateJson> updateJsonList2 = new ArrayList<>(); + InventoryErpParam.UpdateJson updateJson2 = new InventoryErpParam.UpdateJson(); + updateJson2.setOrderNo(inventoryCheckOrder.getOrderNo()); + updateJson2.setDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)); + List<InventoryErpParam.MatDetails> matDetails = new ArrayList<>(); + for (InventoryCheckOrderDetl checkOrderDeficitDetl: checkOrderDeficitDetls){ + InventoryErpParam.MatDetails matDetail = new InventoryErpParam.MatDetails(); + + Mat mat = matService.selectByMatnr(checkOrderDeficitDetl.getMatnr()); + + matDetail.setMatnr(checkOrderDeficitDetl.getMatnr()); + matDetail.setBatch(checkOrderDeficitDetl.getBatch()); + matDetail.setSpecs(mat.getSpecs()); + Double anfme = new BigDecimal(checkOrderDeficitDetl.getAnfme()).subtract(new BigDecimal(checkOrderDeficitDetl.getCheckAnfme())).doubleValue(); + matDetail.setAnfme(anfme); + matDetail.setLocNo(checkOrderDeficitDetl.getLocNo()); + matDetail.setWarehouse(checkOrderDeficitDetl.getArea()); + matDetail.setSeq(updateJson2.getMatDetails() == null?1:updateJson2.getMatDetails().size()+1); + matDetails.add(matDetail); + } + updateJson2.setMatDetails(matDetails); + updateJsonList2.add(updateJson2); + erpDeficitParam.setUpdateJson(updateJsonList2); + return erpDeficitParam; + } + + @Override + @Transactional + public void stockOut(OrderDetl orderDetl, BasDevp staNo, LocDetl locDetl, + Double curOutQty, Integer ioType, Long userId, Date now) { + // 鑾峰彇搴撲綅 + LocMast locMast = locMastService.selectById(locDetl.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(2); + // 鐢熸垚宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(now); + 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(locDetl.getLocNo()); // 婧愬簱浣� + wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk("N"); // 绌烘澘 + wrkMast.setLinkMis("N"); + wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁 + wrkMast.setAppeTime(now); + wrkMast.setModiUser(userId); + wrkMast.setModiTime(now); + wrkMast.setBarcode(locMast.getBarcode()); + if (!wrkMastService.insert(wrkMast)) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細" + locDetl.getLocNo()); + } + + WrkDetl wrkDetl = new WrkDetl(); + wrkDetl.sync(locDetl); + wrkDetl.setWrkNo(workNo); + wrkDetl.setIoTime(now); + wrkDetl.setAnfme(curOutQty); // 鏁伴噺 + wrkDetl.setOrderNo(orderDetl.getOrderNo()); + wrkDetl.setAppeTime(now); + wrkDetl.setAppeUser(userId); + wrkDetl.setModiTime(now); + wrkDetl.setModiUser(userId); + if (!wrkDetlService.insert(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); + } + + // 淇敼搴撲綅鐘舵��: F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓� + locMast = locMastService.selectById(locDetl.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("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + locDetl.getLocNo()); + } + } else { + throw new CoolException(locDetl.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��"); + } + } } -- Gitblit v1.9.1