From aea629d098bdab0918d90e0c51af9d7b099bca12 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 31 五月 2024 20:45:51 +0800
Subject: [PATCH] #新旧物料更新接口
---
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java | 713 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 681 insertions(+), 32 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 aa619aa..b222e61 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -1,65 +1,714 @@
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.baomidou.mybatisplus.mapper.Wrapper;
+import com.core.common.*;
import com.core.exception.CoolException;
-import com.zy.asrs.entity.MatCode;
-import com.zy.asrs.entity.WaitPakin;
-import com.zy.asrs.entity.param.CombParam;
-import com.zy.asrs.service.MatCodeService;
-import com.zy.asrs.service.MobileService;
-import com.zy.asrs.service.WaitPakinService;
-import com.zy.asrs.utils.VersionUtils;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.param.*;
+import com.zy.asrs.service.*;
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.handler.WorkLogHandler;
+import com.zy.asrs.utils.MatUtils;
+import com.zy.asrs.utils.SaasUtils;
+import com.zy.asrs.utils.Utils;
+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.utils.HttpHandler;
+import com.zy.system.entity.User;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
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;
/**
* 绉诲姩绔湇鍔℃牳蹇冪被
* Created by vincent on 2020/6/28
*/
+@Slf4j
@Service
public class MobileServiceImpl implements MobileService {
@Autowired
- private MatCodeService matCodeService;
+ private MatService matService;
@Autowired
private WaitPakinService waitPakinService;
+ @Autowired
+ private OrderService orderService;
+ @Autowired
+ private OrderDetlService orderDetlService;
+ @Autowired
+ private BasDevpService basDevpService;
+ @Autowired
+ private WrkMastService wrkMastService;
+ @Autowired
+ private WrkDetlService wrkDetlService;
+ @Autowired
+ private PackService packService;
+ @Autowired
+ private OpenService openService;
+ @Autowired
+ private SnowflakeIdWorker snowflakeIdWorker;
+ @Autowired
+ private ApiLogService apiLogService;
+ @Autowired
+ private WorkLogHandler workLogHandler;
+ @Autowired
+ private ManLocDetlService manLocDetlService;
+ @Autowired
+ private WaitPakinLogService waitPakinLogService;
+ @Autowired
+ private NodeService nodeService;
+ @Autowired
+ private ManPakOutService manPakOutService;
+ @Autowired
+ private LocDetlService locDetlService;
@Override
@Transactional
public void comb(CombParam param, Long userId) {
- if (Cools.isEmpty(param.getBarcode()) || param.getCombMats().isEmpty()) {
+// 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 (locDetlService.selectCount(new EntityWrapper<LocDetl>()
+ .eq("zpallet", param.getBarcode())) > 0) {
+ throw new CoolException(param.getBarcode() + "鏁版嵁宸茬粡鍦ㄥ簱");
+ }
+
+ //鍒ゆ柇鎵樼洏鏄惁宸茬粡鍦ㄥ伐浣滄。
+ if (wrkMastService.selectCount(new EntityWrapper<WrkMast>()
+ .eq("barcode", param.getBarcode())) > 0) {
+ throw new CoolException(param.getBarcode() + "鏁版嵁宸茬粡鍦ㄤ换鍔℃。涓�");
+ }
+
+ //鍒ゆ柇鏄惁瀛樺湪鏂欑鐮� => 瀛樺湪鏂欑鐮佸垯瑕佹眰鎻愪氦涓婃潵鐨勭墿鏂檒ist蹇呴』鍏ㄩ儴閮芥湁鏂欑鐮�
+ boolean hasContainerCode = false;
+ int containerCodeCount = 0;//鏂欑鐮佹暟閲�
+ for (CombParam.CombMat combMat : param.getCombMats()) {
+ if(!Cools.isEmpty(combMat.getContainerCode())){
+ //if (combMat.getContainerCode() != null) {
+ hasContainerCode = true;
+ containerCodeCount++;
+ continue;
+ }
+ }
+
+ //鍒ゆ柇鏂欑鏄惁宸茬粡鍑虹幇鍦ㄥ叆搴撻�氱煡妗c�佸簱瀛樹腑
+ if (hasContainerCode) {
+ if (containerCodeCount != param.getCombMats().size()) {
+ throw new CoolException(param.getBarcode() + "鎵樼洏鏈�" + (param.getCombMats().size()-containerCodeCount) + "涓湭鎵弿鐨勬枡绠�");
+ }
+
+ for (CombParam.CombMat combMat : param.getCombMats()) {
+ //鍒ゆ柇鏂欑鏄惁姝e湪鍏ュ簱
+ if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
+ eq("supp_code", combMat.getContainerCode()).eq("io_status", "N")) > 0) {
+ throw new CoolException(combMat.getContainerCode() + "鏂欑姝e湪杩涜鍏ュ簱");
+ }
+
+ //鍒ゆ柇鏂欑鏄惁宸茬粡鍦ㄥ簱
+ if (locDetlService.selectCount(new EntityWrapper<LocDetl>()
+ .eq("supp_code", combMat.getContainerCode())) > 0) {
+ throw new CoolException(combMat.getContainerCode() + "鏂欑宸茬粡鍦ㄥ簱");
+ }
+ }
+ }
+
+
+ // todo: 涓嶄笅绾块噸鏂板叆搴�
+ WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode());
+ if (wrkMast != null && wrkMast.getWrkSts() == 18) {
+ ReturnT<String> start = workLogHandler.start(wrkMast);
+ if (!start.isSuccess()) {
+ log.error("宸ヤ綔妗workNo={}]鍘嗗彶妗e鐞嗗け璐�", wrkMast.getWrkNo());
+ }
+ }
+
+ Date now = new Date();
+
+ // 鏃犲崟缁勬墭
+ if (Cools.isEmpty(param.getOrderNo())) {
+
+ // 鐢熸垚鍏ュ簱閫氱煡妗�
+ List<DetlDto> detlDtos = new ArrayList<>();
+ param.getCombMats().forEach(elem -> {
+ DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(), elem.getCsocode(), elem.getIsoseq(),elem.getContainerCode());
+ if (DetlDto.has(detlDtos, detlDto)) {
+ DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch(),detlDto.getCsocode(),detlDto.getIsoseq(),detlDto.getContainerCode());
+ assert one != null;
+ one.setAnfme(one.getAnfme() + detlDto.getAnfme());
+ } else {
+ detlDtos.add(detlDto);
+ }
+ });
+
+
+ for (DetlDto detlDto : detlDtos) {
+ Mat mat = matService.selectByMatnr(detlDto.getMatnr());
+ if (Cools.isEmpty(mat)) {
+ throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�");
+ }
+ WaitPakin waitPakin = new WaitPakin();
+ waitPakin.sync(mat);
+ waitPakin.setBatch(detlDto.getBatch());
+ waitPakin.setZpallet(param.getBarcode()); // 鎵樼洏鐮�
+ waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵��
+ waitPakin.setAnfme(detlDto.getAnfme()); // 鏁伴噺
+ waitPakin.setStatus("Y"); // 鐘舵��
+ waitPakin.setAppeUser(userId);
+ waitPakin.setAppeTime(now);
+ waitPakin.setModiUser(userId);
+ waitPakin.setModiTime(now);
+
+ waitPakin.setThreeCode(detlDto.getCsocode());
+ waitPakin.setDeadTime(detlDto.getIsoseq());
+ waitPakin.setSuppCode(detlDto.getContainerCode());
+ if (!waitPakinService.insert(waitPakin)) {
+ throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
+ }
+ }
+ // 鍏宠仈缁勬墭
+ } else {
+ Order order = orderService.selectByNo(param.getOrderNo());
+ if (order.getSettle() > 2) {
+ throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈�");
+ }
+ // 鐢熸垚鍏ュ簱閫氱煡妗�
+ List<DetlDto> detlDtos = new ArrayList<>();
+ param.getCombMats().forEach(elem -> {
+
+ // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙
+ OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch(),elem.getCsocode(),elem.getIsoseq());
+ if (elem.getAnfme() > orderDetl.getEnableQty()) {
+ throw new CoolException(orderDetl.getMatnr() + "鍏ュ簱鏁伴噺涓嶅悎娉�");
+ }
+ // 淇敼璁㈠崟鏄庣粏鏁伴噺
+ if (!orderDetlService.increase(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme(),elem.getCsocode(),elem.getIsoseq())) {
+ throw new CoolException("淇敼鍗曟嵁鏄庣粏鏁伴噺澶辫触");
+ }
+
+ DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),elem.getCsocode(),elem.getIsoseq(),elem.getContainerCode());
+ if (DetlDto.has(detlDtos, detlDto)) {
+ DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch(),detlDto.getCsocode(),detlDto.getIsoseq(),detlDto.getContainerCode());
+ assert one != null;
+ one.setAnfme(one.getAnfme() + detlDto.getAnfme());
+ } else {
+ detlDtos.add(detlDto);
+ }
+ });
+ for (DetlDto detlDto : detlDtos) {
+ Mat mat = matService.selectByMatnr(detlDto.getMatnr());
+ if (Cools.isEmpty(mat)) {
+ throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�");
+ }
+ WaitPakin waitPakin = new WaitPakin();
+ waitPakin.sync(mat);
+ waitPakin.setOrderNo(order.getOrderNo()); // 鍗曟嵁缂栧彿
+ waitPakin.setBatch(detlDto.getBatch()); // 搴忓垪鐮�
+ waitPakin.setZpallet(param.getBarcode()); // 鎵樼洏鐮�
+ waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵��
+ waitPakin.setAnfme(detlDto.getAnfme()); // 鏁伴噺
+ waitPakin.setStatus("Y"); // 鐘舵��
+ waitPakin.setAppeUser(userId);
+ waitPakin.setAppeTime(now);
+ waitPakin.setModiUser(userId);
+ waitPakin.setModiTime(now);
+
+ waitPakin.setThreeCode(detlDto.getCsocode());
+ waitPakin.setDeadTime(detlDto.getIsoseq());
+ waitPakin.setSuppCode(detlDto.getContainerCode());
+
+ if (!waitPakinService.insert(waitPakin)) {
+ throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
+ }
+ }
+ orderService.updateSettle(order.getId(), 2L, userId);
+ }
+
+ }
+
+ @Override
+ @Transactional
+ public void adjust(MobileAdjustParam param, Long userId) {
+ BasDevp basDevp = basDevpService.selectById(param.getStaNo());
+ if (null == basDevp || basDevp.getWrkNo() == null) {
+ throw new CoolException(param.getStaNo() + "鐩樼偣绔欐棤鏁�");
+ }
+ if (!param.getWrkNo().equals(basDevp.getWrkNo())) {
+ throw new CoolException(param.getStaNo() + "鐩樼偣绔欐洿鏂帮紝璇烽噸鏂版绱�");
+ }
+ WrkMast wrkMast = wrkMastService.selectById(param.getWrkNo());
+ if (wrkMast.getWrkSts() < 10) {
+ throw new CoolException("鐩樼偣鏃犳晥锛屼换鍔″凡鐩樼偣鍐嶅叆搴�");
+ }
+ Date now = new Date();
+ List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
+
+ List<WrkDetl> list = param.getWrkDetls();
+
+ // 淇敼鏁伴噺
+ Iterator<WrkDetl> iterator = wrkDetls.iterator();
+ while (iterator.hasNext()) {
+ WrkDetl wrkDetl = iterator.next();
+ Iterator<WrkDetl> iterator1 = list.iterator();
+ while (iterator1.hasNext()) {
+ WrkDetl wrkDetl1 = iterator1.next();
+ if (wrkDetl1.getAnfme() == 0) {
+ iterator1.remove();
+ }
+ if (wrkDetl.getMatnr().equals(wrkDetl1.getMatnr()) && Cools.eq(wrkDetl.getBatch(), wrkDetl1.getBatch())) {
+ if (!wrkDetl.getAnfme().equals(wrkDetl1.getAnfme())) {
+ // todo 鐩樼偣璁板綍銆佷繚瀛樿皟鏁磋褰�
+ // 淇敼鏄庣粏
+ if (!wrkDetlService.updateAnfme(wrkDetl1.getAnfme(), wrkMast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch())) {
+ throw new CoolException(wrkMast.getWrkNo() + "鐩樼偣浠诲姟锛�" + wrkDetl.getMatnr() + "鍟嗗搧锛�" + wrkDetl.getBatch() + "搴忓垪鐮佷慨鏀规暟閲忓け璐�");
+ }
+ }
+ iterator.remove();
+ iterator1.remove();
+ }
+ }
+ }
+
+ // 鍒犻櫎鏄庣粏
+ for (WrkDetl wrkDetl : wrkDetls) {
+ // todo 鐩樼偣璁板綍銆佷繚瀛樿皟鏁磋褰�
+ if (!wrkDetlService.updateAnfme(-1.0D, wrkMast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch())) {
+ throw new CoolException("鍒犻櫎" + wrkMast.getWrkNo() + "鐩樼偣浠诲姟锛�" + wrkDetl.getMatnr() + "鍟嗗搧锛�" + wrkDetl.getBatch() + "搴忓垪鐮佷换鍔℃槑缁嗗け璐�");
+ }
+ }
+
+ // 娣诲姞鏄庣粏
+ for (WrkDetl wrkDetl : list) {
+ if (wrkDetl.getAnfme() == 0.0D) { continue; }
+ // todo 鐩樼偣璁板綍銆佷繚瀛樿皟鏁磋褰�
+ String orderNo = wrkDetl.getOrderNo();
+ Mat mat = matService.selectByMatnr(wrkDetl.getMatnr());
+ wrkDetl.sync(mat);
+ wrkDetl.setOrderNo(orderNo);
+ wrkDetl.setModiTime(now);
+ wrkDetl.setModiUser(userId);
+ wrkDetl.setAppeTime(now);
+ wrkDetl.setAppeUser(userId);
+ if (!wrkDetlService.insert(wrkDetl)) {
+ throw new CoolException("娣诲姞" + wrkMast.getWrkNo() + "鐩樼偣浠诲姟锛�" + wrkDetl.getMatnr() + "鍟嗗搧锛�" + wrkDetl.getBatch() + "搴忓垪鐮佷换鍔℃槑缁嗗け璐�");
+ }
+ }
+
+ // 淇敼鐩樼偣浠诲姟涓绘。鐘舵��
+ wrkMast.setFullPlt(wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()).size() != 0?"Y":"N");
+ wrkMast.setModiTime(now);
+ wrkMast.setModiUser(userId);
+ if (!wrkMastService.updateById(wrkMast)) {
+ throw new CoolException("淇敼鐩樼偣浠诲姟涓绘。澶辫触");
+ }
+
+ }
+
+ @Override
+ @Transactional
+ public void packComb(CombParam param, Long userId) {
+ if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
throw new CoolException(BaseRes.PARAM);
}
- int count = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
- eq("zpallet", param.getBarcode()).eq("status", "N"));
- if (count > 0) {
- throw new CoolException("鏉$爜鏁版嵁宸插瓨鍦�");
+ // 鍒ゆ柇鏄惁鏈夌浉鍚屾潯鐮佺殑鏁版嵁
+ if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
+ eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
+ throw new CoolException(param.getBarcode() + "鏁版嵁姝e湪杩涜鍏ュ簱");
}
- for (CombParam.CombMat combMat : param.getCombMats()) {
- MatCode matCode = matCodeService.selectById(combMat.getMatNo());
- if (Cools.isEmpty(matCode)) {
- throw new CoolException("鐗╂枡鏁版嵁閿欒");
- }
- WaitPakin waitPakin = new WaitPakin();
- waitPakin.setZpallet(param.getBarcode()); // 鎵樼洏鐮�
- waitPakin.setStatus("N"); // 鐘舵��
- waitPakin.setAnfme(combMat.getCount()); // 鏁伴噺
- waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵��
- waitPakin.setAppeUser(userId);
- waitPakin.setAppeTime(new Date());
- waitPakin.setModiUser(userId);
- waitPakin.setModiTime(new Date());
- VersionUtils.setWaitPakIn(waitPakin, matCode);
+ Date now = new Date();
- if (!waitPakinService.insert(waitPakin)) {
- throw new CoolException("淇濆瓨鏁版嵁澶辫触");
+ boolean packDown = Parameter.get().getPackDown().equals("true");
+
+ // 鏃犲崟缁勬墭
+ if (Cools.isEmpty(param.getOrderNo())) {
+
+ // 鐢熸垚鍏ュ簱閫氱煡妗�
+ List<DetlDto> detlDtos = new ArrayList<>();
+ param.getCombMats().forEach(elem -> {
+ // 鎵撳寘涓婄嚎鏁版嵁鏍¢獙
+ if (packDown) {
+ Pack pack = packService.selectByBarcode(elem.getMatnr());
+ if (pack == null) {
+ throw new CoolException(elem.getMatnr() + "鏉$爜鍐椾綑锛岃妫�鏌ワ紒");
+ }
+ if (pack.getSettle() != 1) {
+ throw new CoolException(elem.getMatnr() + "鏉$爜宸蹭笅绾匡紝璇锋鏌ワ紒");
+ }
+ }
+ Mat analyse = MatUtils.analyseMat(elem.getMatnr());
+ // 鏉$爜銆佺墿鏂欎唬鐮併�佸簭鍒楀彿銆佹暟閲�
+ DetlDto detlDto = new DetlDto(elem.getMatnr(), analyse.getMatnr(), analyse.getBarcode(), elem.getAnfme(),elem.getCsocode(),elem.getIsoseq());
+// DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
+ detlDto.setContainerCode(elem.getContainerCode());
+
+ if (DetlDto.has(detlDtos, detlDto)) {
+ DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch(),detlDto.getCsocode(),detlDto.getIsoseq(),detlDto.getContainerCode());
+ assert one != null;
+ one.setAnfme(one.getAnfme() + detlDto.getAnfme());
+ } else {
+ detlDtos.add(detlDto);
+ }
+ });
+
+ if (packDown) {
+ 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.setOrderType("鎵撳寘鍏ュ簱鍗�");
+ openParam.setOrderDetails(detlDtos);
+ openService.pakinOrderCreate(openParam);
+ Order order = orderService.selectByNo(orderNo);
+ if (null == order) {
+ throw new CoolException("鐢熸垚鍗曟嵁澶辫触");
+ }
+ if (!orderService.updateSettle(order.getId(), 2L, userId)) {
+ throw new CoolException("淇敼鍗曟嵁鐘舵�佸け璐�");
+ }
+
+ // 鐢熸垚鍏ュ簱閫氱煡妗�
+ for (DetlDto detlDto : detlDtos) {
+
+ // 淇敼浣滀笟鏁伴噺 ----------------------------------------
+ // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙
+ OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), detlDto.getMatnr(), detlDto.getBatch(),detlDto.getCsocode(),detlDto.getIsoseq());
+ if (detlDto.getAnfme() > orderDetl.getEnableQty()) {
+ throw new CoolException(orderDetl.getMatnr() + "鍏ュ簱鏁伴噺涓嶅悎娉�");
+ }
+ // 淇敼璁㈠崟鏄庣粏鏁伴噺
+ if (!orderDetlService.increase(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme(),detlDto.getCsocode(),detlDto.getIsoseq())) {
+ throw new CoolException("淇敼鍗曟嵁鏄庣粏鏁伴噺澶辫触");
+ }
+
+ // 淇濆瓨鍏ュ簱閫氱煡妗�
+ Mat mat = matService.selectByMatnr(detlDto.getMatnr());
+ if (Cools.isEmpty(mat)) {
+ throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�");
+ }
+ WaitPakin waitPakin = new WaitPakin();
+ waitPakin.sync(mat);
+ waitPakin.setOrderNo(orderNo);
+ waitPakin.setBatch(detlDto.getBatch());
+ waitPakin.setZpallet(param.getBarcode()); // 鎵樼洏鐮�
+ waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵��
+ waitPakin.setAnfme(detlDto.getAnfme()); // 鏁伴噺
+ waitPakin.setStatus("Y"); // 鐘舵��
+ waitPakin.setAppeUser(userId);
+ waitPakin.setAppeTime(now);
+ waitPakin.setModiUser(userId);
+ waitPakin.setModiTime(now);
+
+ waitPakin.setThreeCode(detlDto.getCsocode());
+ waitPakin.setDeadTime(detlDto.getIsoseq());
+ waitPakin.setSuppCode(detlDto.getContainerCode());
+ if (!waitPakinService.insert(waitPakin)) {
+ throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
+ }
+ // 淇敼鎵撳寘鏁版嵁鐘舵��
+ Pack pack = packService.selectByBarcode(detlDto.getOrderNo());
+ pack.setSettle(2L);
+ pack.setUpdateTime(now);
+ pack.setUpdateBy(userId);
+ if (!packService.updateById(pack)) {
+ throw new CoolException("淇敼鎵撳寘鏁版嵁寮傚父");
+ }
+ }
+
}
}
+ @Transactional
+ public void nodePutway(String zpallet, String locNo, User user) {
+ Date now = new Date();
+
+ //澧炲姞骞冲簱搴撳瓨
+ List<WaitPakin> waitPakinList = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", zpallet));
+
+ if(Cools.isEmpty(waitPakinList)){
+ throw new CoolException("璇ユ墭鐩樼爜鏈粍鎵�");
+ }
+
+ waitPakinList.forEach(waitPakin -> {
+ //鏂欐兂鐮�
+ String containerCode = waitPakin.getSuppCode();
+ //濡傛灉褰撳墠搴撲綅宸插瓨鍦ㄨ揣鐗�
+ Wrapper<ManLocDetl> wrapper = new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr",waitPakin.getMatnr());
+ Utils.wapperSetCondition(wrapper,"container_code",containerCode);
+ Utils.wapperSetCondition(wrapper,"batch",waitPakin.getBatch());
+ Utils.wapperSetCondition(wrapper,"csocode",waitPakin.getThreeCode());
+ Utils.wapperSetCondition(wrapper,"isoseq",waitPakin.getDeadTime());
+ ManLocDetl manLocDetl = manLocDetlService.selectOne(wrapper);
+ if(Cools.isEmpty(manLocDetl)){
+ saveManlocDetl(waitPakin,now,locNo);
+ }else{
+ manLocDetl.setAnfme(manLocDetl.getAnfme() + waitPakin.getAnfme());
+ manLocDetlService.update(manLocDetl,wrapper);
+
+ }
+ //鐢熸垚骞冲簱鍏ュ嚭搴撴棩蹇�
+ SaasUtils.insertLog(0,locNo,waitPakin.getMatnr(), waitPakin.getAnfme(),user.getUsername());
+
+ });
+ Node node = nodeService.selectByUuid(locNo);
+ node.setStatus(0);
+ nodeService.updateById(node);
+
+ //鐢熸垚鍏ュ簱閫氱煡鍘嗗彶妗�
+ waitPakinLogService.save(zpallet);
+ //鍒犻櫎鍏ュ簱閫氱煡妗�
+ waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", zpallet));
+
+ orderService.checkComplete(waitPakinList.get(0).getOrderNo());
+
+
+ }
+
+ @Transactional
+ public void nodePakout(NodePakoutParam param, User user) {
+ Node node = nodeService.selectOne(new EntityWrapper<Node>().eq("name", param.getLocNo()));
+ Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", param.getOrderNo()));
+ if (Cools.isEmpty(node, order)) {
+ throw new CoolException("鍙傛暟涓虹┖");
+ }
+ //鏌ヨ褰撳墠鐗╂枡鐨勮鍗曡鎯�
+ Wrapper<OrderDetl> orderDetlWrapper = new EntityWrapper<OrderDetl>().eq("order_no", param.getOrderNo()).eq(false, "status", 1);
+ Utils.wapperSetCondition(orderDetlWrapper,"three_code",param.getCsocode());
+ Utils.wapperSetCondition(orderDetlWrapper,"dead_time",param.getIsoseq());
+ Utils.wapperSetCondition(orderDetlWrapper,"matnr",param.getMatnr());
+
+ //Utils.confirmOnlyMat(orderDetlWrapper,param.getMatnr(),param.getCsocode(),param.getIsoseq());
+ OrderDetl orderDetl = orderDetlService.selectOne(orderDetlWrapper);
+ //鏌ヨ褰撳墠鎷h揣鍗曚俊鎭�
+ Wrapper<ManPakOut> manPakOutWrapper = new EntityWrapper<ManPakOut>().eq("wrk_no", param.getWrkNo());
+ ManPakOut manPakOut = manPakOutService.selectOne(manPakOutWrapper);
+ if(Cools.isEmpty(manPakOut) || manPakOut.getStatus() == 1){
+ throw new CoolException("褰撳墠鎷h揣鐮佸凡缁忓畬鎴愭嫞璐�");
+ }
+ //鏌ヨ搴撳瓨淇℃伅
+ Wrapper<ManLocDetl> manLocDetlWrapper = new EntityWrapper<ManLocDetl>().eq("loc_no", param.getLocNo());
+ Utils.confirmOnlyMat(manLocDetlWrapper,param.getMatnr(),param.getCsocode(),param.getIsoseq());
+ ManLocDetl manLocDetl = manLocDetlService.selectOne(manLocDetlWrapper);
+
+ //鏍规嵁瀹為檯鍑哄簱鏁伴噺鎵e噺搴撳瓨
+ if(Double.doubleToLongBits(param.getAnfme()) != Double.doubleToLongBits(manPakOut.getAnfme())){
+ if(param.getAnfme() > manLocDetl.getAnfme() || (param.getAnfme() - manPakOut.getAnfme()) > (orderDetl.getAnfme() - orderDetl.getQty())){
+ throw new CoolException("鍑哄簱鏁伴噺涓嶅緱澶т簬璁㈠崟鏁伴噺鎴栬�呭簱瀛樻暟閲�");
+ }
+ //鏍规嵁瀹為檯鍑哄簱鏁伴噺鍥炲啓鎷h揣鍗�
+ manPakOut.setCount(param.getAnfme());
+ if(manPakOut.getCount() < manPakOut.getAnfme()){
+ manPakOut.setStatus(8);
+ }
+ //鏍规嵁瀹為檯鍑哄簱鏁伴噺鍥炲啓璁㈠崟璇︽儏
+ orderDetl.setQty(orderDetl.getQty() - (param.getAnfme()-manPakOut.getAnfme()));
+ orderDetlService.update(orderDetl,orderDetlWrapper);
+
+ }else {
+ manPakOut.setCount(param.getAnfme());
+ manPakOut.setStatus(1);
+ }
+
+ manPakOutService.update(manPakOut,manPakOutWrapper);
+ //妫�鏌ヨ璁㈠崟涓嬬殑鎷h揣鍗曟槸鍚﹀凡缁忓叏閮ㄥ嚭搴�
+ int status = checkManPakoutByOrder(param.getOrderNo());
+ manPakOutService.updateAllStatus(param.getOrderNo(),status);
+
+
+ //淇敼搴撳瓨
+ manLocDetl.setAnfme(manLocDetl.getAnfme()-manPakOut.getCount());
+ if (manLocDetl.getAnfme() == 0 ){
+ checkNodeStatus(manLocDetl.getLocNo());
+ manLocDetlService.delete(manLocDetlWrapper);
+ }else{
+ manLocDetl.setStatus(1);
+ manLocDetlService.update(manLocDetl,manLocDetlWrapper);
+ }
+ SaasUtils.insertLog(1,manLocDetl.getLocNo(),manLocDetl.getMatnr(), manLocDetl.getAnfme(),user.getUsername());
+ manLocDetl.setStatus(1);
+ manLocDetlService.update(manLocDetl,manLocDetlWrapper);
+
+ //妫�娴嬭鍗曟槸鍚﹀畬鎴�
+ orderService.checkComplete(param.getOrderNo());
+
+ }
+
+ @Transactional
+ public void modifyWrkDetl(List<WrkDetl> wrkDetls, List<ModifyPakoutParam.CA> params, Long userId) {
+
+ wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no",wrkDetls.get(0).getWrkNo()));
+
+ params.forEach(param ->{
+ WrkDetl wrkDetl = new WrkDetl();
+ LocDetl locDetl = locDetlService.selectByContainerCode(param.getContainerCode());
+ BeanUtils.copyProperties(locDetl,wrkDetl);
+ wrkDetl.setWrkNo(wrkDetls.get(0).getWrkNo());
+ if(wrkDetl.getAnfme() < param.getAnfme()){
+ throw new CoolException("鏂欑"+param.getContainerCode()+"鐨勭墿鏂欐暟閲忓皬浜庢嫞鏂欐暟閲忥紝璇烽噸鏂版牳瀵�");
+ }
+ wrkDetl.setAnfme(param.getAnfme());
+ wrkDetl.setModiTime(new Date());
+ wrkDetl.setAppeTime(new Date());
+ wrkDetl.setModiUser(userId);
+ wrkDetlService.insert(wrkDetl);
+
+ });
+ }
+
+ @Override
+ public void nodePakinNoComb(CombParam param) {
+ if(Cools.isEmpty(param.getLocno())){
+ throw new CoolException("搴撲綅鍙锋湭濉啓锛屾棤娉曞叆搴�");
+ }
+ param.getCombMats().forEach(combMat -> {
+ Wrapper<ManLocDetl> wrapper = new EntityWrapper<ManLocDetl>().eq("loc_no", param.getLocno()).eq("matnr",combMat.getMatnr());
+ Utils.wapperSetCondition(wrapper,"container_code",combMat.getContainerCode());
+ Utils.wapperSetCondition(wrapper,"batch",combMat.getBatch());
+ Utils.wapperSetCondition(wrapper,"csocode",combMat.getCsocode());
+ Utils.wapperSetCondition(wrapper,"isoseq",combMat.getIsoseq());
+ ManLocDetl manLocDetl = manLocDetlService.selectOne(wrapper);
+ if(Cools.isEmpty(manLocDetl)){
+ saveManlocDetl(combMat,param.getLocno());
+ }else{
+ manLocDetl.setAnfme(manLocDetl.getAnfme() + combMat.getAnfme());
+ manLocDetlService.update(manLocDetl,wrapper);
+ }
+ //鐢熸垚骞冲簱鍏ュ嚭搴撴棩蹇�
+ SaasUtils.insertLog(0,param.getLocno(),combMat.getMatnr(), combMat.getAnfme(),"");
+ });
+
+ }
+
+ private boolean saveManlocDetl(CombParam.CombMat combMat, String locNo){
+ Node node = nodeService.selectOne(new EntityWrapper<Node>()
+ .eq("name", locNo));
+ Mat mat = matService.selectByMatnr(combMat.getMatnr());
+ ManLocDetl manLocDetl = new ManLocDetl();
+ BeanUtils.copyProperties(mat,manLocDetl);
+ manLocDetl.setAnfme(combMat.getAnfme());
+ manLocDetl.setNodeId(node.getId());
+ manLocDetl.setContainerCode(combMat.getContainerCode());
+ manLocDetl.setCsocode(combMat.getCsocode());
+ manLocDetl.setIsoseq(combMat.getIsoseq());
+ manLocDetl.setCreateTime(new Date());
+ manLocDetl.setModiTime(new Date());
+ manLocDetl.setLocNo(locNo);
+ manLocDetl.setStatus(1);
+ return manLocDetlService.insert(manLocDetl);
+ }
+
+ private void saveManlocDetl(WaitPakin waitPakin, Date now, String locNo){
+
+ Node node = nodeService.selectOne(new EntityWrapper<Node>()
+ .eq("name", locNo));
+
+ ManLocDetl manLocDetl = new ManLocDetl();
+ BeanUtils.copyProperties(waitPakin,manLocDetl);
+ manLocDetl.setNodeId(node.getId());
+ manLocDetl.setContainerCode(waitPakin.getSuppCode());
+ manLocDetl.setCsocode(waitPakin.getThreeCode());
+ manLocDetl.setIsoseq(waitPakin.getDeadTime());
+ manLocDetl.setCreateTime(now);
+ manLocDetl.setModiTime(now);
+ manLocDetl.setLocNo(locNo);
+ manLocDetl.setStatus(1);
+ manLocDetlService.insert(manLocDetl);
+ }
+
+ private int checkManPakoutByOrder(String orderNo){
+ int status = 0;
+ List<ManPakOut> manPakOutList = manPakOutService.selectList(new EntityWrapper<ManPakOut>().eq("doc_num", orderNo));
+
+ for(int i=0; i<manPakOutList.size(); i++){
+ if(i == 0){
+ status = manPakOutList.get(i).getStatus();
+ }else {
+ if(manPakOutList.get(i).getStatus() != status){
+ status = 8;
+ }
+ }
+ }
+
+ return status;
+
+ }
+
+ private void checkNodeStatus(String locNo){
+ ManLocDetl manLocDetl = manLocDetlService.selectOne(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo));
+ //濡傛灉搴撳瓨淇℃伅涓病鏈夋敼搴撲綅锛屽垯淇敼搴撲綅鐘舵�佷负1
+ if(Cools.isEmpty(manLocDetl)){
+ Node node = nodeService.selectByUuid(locNo);
+ node.setStatus(1);
+ nodeService.updateById(node);
+ }
+ }
+
+
}
--
Gitblit v1.9.1