From 34e08619ee8fa88ea81b32b19a553743587f9244 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期二, 29 三月 2022 10:37:44 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | 170 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 155 insertions(+), 15 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 cbbf3d5..0ce118a 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -22,6 +22,7 @@
import com.zy.common.service.wms.WmsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -67,6 +68,10 @@
private WmsService wmsService;
@Autowired
private SnowflakeIdWorker snowflakeIdWorker;
+ @Autowired
+ private OrderService orderService;
+ @Autowired
+ private OrderDetlService orderDetlService;
@Override
@Transactional
@@ -113,11 +118,11 @@
throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
}
// 鐢熸垚宸ヤ綔妗f槑缁�
- List<MatCodeCountDto> matDtos = new ArrayList<>();
+ List<DetlDto> detlDtos = new ArrayList<>();
param.getList().forEach(elem -> {
- matDtos.add(new MatCodeCountDto(elem.getMatNo(), elem.getCount()));
+ detlDtos.add(new DetlDto(elem.getMatNo(), elem.getCount()));
});
- wrkDetlService.createWorkDetail(workNo, matDtos, param.getBarcode(), userId);
+ wrkDetlService.createWorkDetail(workNo, detlDtos, param.getBarcode(), userId);
// 鏇存柊婧愮珯鐐逛俊鎭�
sourceStaNo.setWrkNo(workNo);
sourceStaNo.setModiUser(userId);
@@ -158,7 +163,7 @@
}
if (!locDetlDtos.isEmpty()) {
// 鍚姩鍑哄簱寮�濮� 101.鍑哄簱
- stockOut(staNo, locDetlDtos, null, userId, null, false, null);
+ stockOut(staNo, locDetlDtos, null, userId);
} else {
throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�");
}
@@ -166,7 +171,8 @@
@Override
@Transactional
- public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, Integer ioType, Long userId, String allotNo, Boolean sell, Double more) {
+ public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, Integer ioType, Long userId) {
+ Date now = new Date();
// 鍚堝苟鍚岀被椤�
Set<String> locNos = new HashSet<>();
locDetlDtos.forEach(dto -> locNos.add(dto.getLocDetl().getLocNo()));
@@ -205,7 +211,7 @@
// 鐢熸垚宸ヤ綔妗�
WrkMast wrkMast = new WrkMast();
wrkMast.setWrkNo(workNo);
- wrkMast.setIoTime(new Date());
+ wrkMast.setIoTime(now);
wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
wrkMast.setIoPri(13D); // 浼樺厛绾э細13
@@ -218,13 +224,10 @@
wrkMast.setExitMk("N"); // 閫�鍑�
wrkMast.setEmptyMk("N"); // 绌烘澘
wrkMast.setLinkMis("N");
- wrkMast.setPacked(allotNo); // 骞充粨琛ヤ粨鍗曞彿
- wrkMast.setPdcType(sell?"Y":"N"); // ERP閿�鍞鍗曞嚭搴撲换鍔�
- wrkMast.setRefWrkno(more==null?0.0D:more);
wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
- wrkMast.setAppeTime(new Date());
+ wrkMast.setAppeTime(now);
wrkMast.setModiUser(userId);
- wrkMast.setModiTime(new Date());
+ wrkMast.setModiTime(now);
if (!wrkMastService.insert(wrkMast)) {
throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細"+dto.getLocNo());
}
@@ -238,9 +241,9 @@
Double anfme = ioType==101?detlDto.getLocDetl().getAnfme():detlDto.getCount();
wrkDetl.setAnfme(anfme); // 鏁伴噺
VersionUtils.setWrkDetl(wrkDetl, detlDto.getLocDetl()); // 鐗堟湰鎺у埗
- wrkDetl.setAppeTime(new Date());
+ wrkDetl.setAppeTime(now);
wrkDetl.setAppeUser(userId);
- wrkDetl.setModiTime(new Date());
+ wrkDetl.setModiTime(now);
wrkDetl.setModiUser(userId);
if (!wrkDetlService.insert(wrkDetl)) {
throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
@@ -251,13 +254,88 @@
if (locMast.getLocSts().equals("F")) {
locMast.setLocSts(ioType==101?"R":"P");
locMast.setModiUser(userId);
- locMast.setModiTime(new Date());
+ locMast.setModiTime(now);
if (!locMastService.updateById(locMast)) {
throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細"+dto.getLocNo());
}
} else {
throw new CoolException(dto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
}
+ }
+ }
+
+ @Override
+ @Transactional
+ public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId) {
+ Date now = new Date();
+ List<LocDto> locDtos = taskDto.getLocDtos();
+ for (LocDto locDto : locDtos) {
+ if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) {
+ throw new CoolException("璁㈠崟鍑哄簱寮傚父锛岃鑱旂郴绠$悊鍛�");
+ }
+ }
+ // 鑾峰彇搴撲綅
+ LocMast locMast = locMastService.selectById(taskDto.getLocNo());
+ // 鑾峰彇璺緞
+ int ioType = taskDto.isAll() ? 101 : 103;
+ StaDesc staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), staNo.getDevNo());
+ // 鐢熸垚宸ヤ綔鍙�
+ int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
+ // 鐢熸垚宸ヤ綔妗�
+ 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(taskDto.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);
+ if (!wrkMastService.insert(wrkMast)) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細"+taskDto.getLocNo());
+ }
+ // 鐢熸垚宸ヤ綔妗f槑缁�
+ for (LocDto locDto : taskDto.getLocDtos()) {
+ if (locDto.getAnfme()==null || locDto.getAnfme() <= 0.0D) { continue; }
+
+ OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
+
+ WrkDetl wrkDetl = new WrkDetl();
+ wrkDetl.setIoTime(now);
+ wrkDetl.setWrkNo(workNo);
+ wrkDetl.setBatch(locDto.getBatch());
+ wrkDetl.setOrderNo(locDto.getOrderNo());
+ wrkDetl.setAnfme(locDto.getAnfme()); // 鏁伴噺
+ VersionUtils.setWrkDetl(wrkDetl, orderDetl); // 鐗堟湰鎺у埗
+ 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(taskDto.getLocNo());
+ if (locMast.getLocSts().equals("F")) {
+ locMast.setLocSts(ioType==101?"R":"P");
+ locMast.setModiUser(userId);
+ locMast.setModiTime(now);
+ if (!locMastService.updateById(locMast)) {
+ throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細"+taskDto.getLocNo());
+ }
+ } else {
+ throw new CoolException(taskDto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
}
}
@@ -397,7 +475,7 @@
}
if (!locDetlDtos.isEmpty()) {
// 鍚姩鍑哄簱寮�濮� 107.鐩樼偣鍑哄簱
- stockOut(staNo, locDetlDtos, 107, userId, null, false, null);
+ stockOut(staNo, locDetlDtos, 107, userId);
} else {
throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�");
}
@@ -673,6 +751,18 @@
// 鍑哄簱 ===>> F.鍦ㄥ簱
if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
locSts = "F";
+ // 閿�鍞崟鍏宠仈锛屽垯鐢熸垚鏂扮殑鍑哄簱浠诲姟
+ if (wrkMast.getPdcType().equals("Y")) {
+ List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo));
+ for (WrkDetl wrkDetl : wrkDetls) {
+ Double sumAnfme = Optional.ofNullable(locDetlService.getSumAnfme(wrkDetl.getMatnr())).orElse(0.0D);
+ if (sumAnfme < wrkDetl.getAnfme()) {
+ throw new CoolException("鍙栨秷澶辫触锛佸簱瀛樹笉瓒充互閲嶆柊鐢熸垚鍑哄簱浣滀笟");
+ }
+ }
+ // 鐢熸垚鏂扮殑鍑哄簱浣滀笟
+ stockOutRe(wrkMast, wrkDetls);
+ }
// 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉�
} else if (wrkMast.getIoType() == 110) {
locSts = "D";
@@ -785,4 +875,54 @@
}
}
+ @Autowired
+ private JdbcTemplate jdbcTemplate;
+ private boolean pickSite = false;
+ private void stockOutRe(WrkMast wrkMast, List<WrkDetl> wrkDetls) {
+ for (WrkDetl wrkDetl : wrkDetls) {
+ List<LocDetl> locDetls = locDetlService.selectPakoutByRule(wrkDetl.getMatnr());
+ double issued = wrkDetl.getAnfme();
+ for (LocDetl locDetl : locDetls) {
+ if (issued > 0) {
+ // 鐢熸垚鍑哄簱宸ヤ綔妗�
+ // 鍏ㄦ澘
+ if (issued>=locDetl.getAnfme()) {
+ BasDevp staNo = basDevpService.checkSiteStatus(103);
+ List<LocDetlDto> detlDtos = new ArrayList<>();
+ LocDetlDto dto = new LocDetlDto();
+ dto.setLocDetl(locDetl);
+ dto.setCount(issued>=locDetl.getAnfme()?locDetl.getAnfme():issued);
+ detlDtos.add(dto);
+ stockOut(staNo, detlDtos, 101, 9527L);
+ // 鎷f枡
+ } else {
+ int priorCount = jdbcTemplate.queryForObject("select isnull(count(*),0) from man_prior where 1=1 and matnr = '" + wrkDetl.getMatnr() + "'", Integer.class);
+ if (priorCount > 0) {
+ BasDevp staNo = basDevpService.checkSiteStatus(103);
+ List<LocDetlDto> detlDtos = new ArrayList<>();
+ LocDetlDto dto = new LocDetlDto();
+ dto.setLocDetl(locDetl);
+ dto.setCount(locDetl.getAnfme());
+ detlDtos.add(dto);
+ stockOut(staNo, detlDtos, 101, 9527L);
+ } else {
+ BasDevp staNo = basDevpService.checkSiteStatus(pickSite?113:109);
+ List<LocDetlDto> detlDtos = new ArrayList<>();
+ LocDetlDto dto = new LocDetlDto();
+ dto.setLocDetl(locDetl);
+ dto.setCount(issued>=locDetl.getAnfme()?locDetl.getAnfme():issued);
+ detlDtos.add(dto);
+ stockOut(staNo, detlDtos, 103, 9527L);
+ }
+
+ }
+
+ // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
+ issued = issued - locDetl.getAnfme();
+ }
+ }
+ }
+ pickSite = !pickSite;
+ }
+
}
--
Gitblit v1.9.1