From 080fdceed464c56f43633e85daeaf929d40496af Mon Sep 17 00:00:00 2001 From: zyx <zyx123456> Date: 星期三, 18 十月 2023 13:16:07 +0800 Subject: [PATCH] 连接ERP 获取ERP库存信息 --- src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java | 635 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 600 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java index 4d06510..1ed3d71 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java @@ -1,19 +1,29 @@ package com.zy.asrs.service.impl; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.*; +import com.zy.asrs.entity.param.EmptyPlateOutParam; +import com.zy.asrs.entity.param.LocDetlAdjustParam; +import com.zy.asrs.entity.param.StockOutParam; import com.zy.asrs.service.*; +import com.zy.common.model.LocDto; +import com.zy.common.model.OrderDto; import com.zy.common.model.StartupDto; +import com.zy.common.model.TaskDto; import com.zy.common.service.AgvCommonService; +import com.zy.common.web.BaseController; 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.Date; +import java.util.Iterator; import java.util.List; +import java.util.UUID; /** * Created by vincent on 2020/6/11 @@ -32,7 +42,9 @@ @Autowired private AgvBasDevpService agvBasDevpService; @Autowired - private AgvLocMastService agvLockMastService; + private AgvLocMastService agvLocMastService; + @Autowired + private AgvLocDetlService agvLocDetlService; @Autowired private AgvCommonService agvCommonService; @Autowired @@ -41,75 +53,517 @@ private AgvWrkDetlService agvWrkDetlService; @Autowired private MatService matService; + @Autowired + private OrderService orderService; + @Autowired + private OrderDetlService orderDetlService; + @Autowired + private AdjDetlService adjDetlService; + @Autowired + private AgvWrkMastLogService agvWrkMastLogService; + @Autowired + private AgvWrkDetlLogService agvWrkDetlLogService; - @Override + + /* + 鍏ュ簱 + */ + @Transactional public StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId) { Date now = new Date(); agvBasDevpList.forEach(agvBasDevp -> { if(Cools.isEmpty(agvBasDevp.getBarcode())){ - throw new CoolException("閫変腑鐨勭珯鐐逛腑鍚湁浣嶇粦瀹氭墭鐩樼殑绔欑偣锛岃閲嶆柊閫夋嫨"); + throw new CoolException("閫変腑鐨勭珯鐐逛腑鍚湁鏈粦瀹氭墭鐩樼殑绔欑偣锛岃閲嶆柊閫夋嫨"); } if(!"F".equals(agvBasDevp.getLocSts())){ throw new CoolException("閫変腑鐨勭珯鐐逛腑鍚湁璐т綅鐘舵�佷笉涓篎.鍦ㄥ簱鐨勭珯鐐癸紝璇烽噸鏂伴�夋嫨"); } - List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectList(new EntityWrapper<AgvWaitPakin>().eq("zpallet", agvBasDevp.getBarcode())); + List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectList(new EntityWrapper<AgvWaitPakin>().eq("supp_code", agvBasDevp.getBarcode())); //妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅 AgvLocMast agvLocMast = agvCommonService.getLocNo(agvWaitPakinList, agvBasDevp.getFloor()); //鐢熸垚宸ヤ綔妗� - AgvWrkMast wrkMast = createWrkMast(agvBasDevp, agvLocMast, now, userId); + //AgvWrkMast wrkMast = createWrkMast(agvBasDevp, agvLocMast, now, userId); + AgvWrkMast wrkMast = createWrkMast(1,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),agvBasDevp.getBarcode(),now,userId); //鐢熸垚宸ヤ綔妗f槑缁� - createWrkDetlReWrite(agvWaitPakinList,wrkMast,userId); + //createWrkDetlReWrite(agvWaitPakinList,wrkMast,userId); + agvWaitPakinList.forEach(wp -> { + createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime()); + }); //鏇存柊婧愮珯鐐逛俊鎭� - updateAgvBasDevp(agvBasDevp); + updateAgvBasDevp(agvBasDevp,"R"); //鏇存柊鐩爣搴撲綅鐘舵�� - updateAgvLocMast(agvLocMast); + updateAgvLocMast(agvLocMast,"S"); }); + //TODO return null; + } + + /* + 璁㈠崟鍑哄簱 + */ + @Transactional + public void stockOutWrkMast(List<TaskDto> agvTaskDtos, Long userId) { + Date now = new Date(); + + agvTaskDtos.forEach(taskDto -> { + + AgvLocMast agvLocMast = agvLocMastService.selectById(taskDto.getLocNo()); + AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", taskDto.getLocNo())); + + //宸ヤ綔妗f墍闇�鍙傛暟 + double anfme = taskDto.getLocDtos().get(0).getAnfme(); + long wrkSts = 21L; + String sourceLocNo = taskDto.getLocNo(); + String targetLocNo = taskDto.getAgvStaNo(); + String barcode = agvLocDetl.getSuppCode(); + //鏄庣粏妗f墍闇�鍙傛暟 + String mantr = taskDto.getLocDtos().get(0).getMatnr(); + String orderNo = taskDto.getLocDtos().get(0).getOrderNo(); + String batch = taskDto.getLocDtos().get(0).getBatch(); + + String csocode = agvLocDetl.getThreeCode(); + String isoseq = agvLocDetl.getDeadTime(); + + //鍒ゆ柇鏄惁鍏ㄦ澘鍑哄簱 + int ioType = isPakOut(sourceLocNo,anfme) ? 101 : 103; + //鐢熸垚宸ヤ綔妗� + AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,barcode,now,userId); + //鐢熸垚宸ヤ綔妗f槑缁� + createWrkDetlReWrite(mantr,wrkMast.getWrkNo(),orderNo,batch,anfme,barcode,now,userId,csocode,isoseq); + //淇敼璁㈠崟淇℃伅 + modifyOrderDetl(taskDto.getLocDtos().get(0), userId); + //鏇存柊婧愮珯鐐逛俊鎭� + String locSts = ioType == 101 ? "R" : "P"; + updateAgvLocMast(agvLocMastService.selectById(sourceLocNo),locSts); + //鏇存柊鐩爣绔欑偣鐘舵�� + //locSts = ioType == 101 ? "S" : "Q"; + updateAgvBasDevp(agvBasDevpService.selectById(targetLocNo),"S"); + + }); + } + + //鎷f枡鍏ュ簱 + @Transactional + public void pickIn(List<AgvWrkMast> agvWrkMastList){ + Date now = new Date(); + agvWrkMastList.forEach(agvWrkMast -> { + //淇敼宸ヤ綔鍏� + agvWrkMast.setWrkSts(201L); + + //鏍规嵁鍑哄簱绫诲瀷 璁剧疆鍏ュ簱绫诲瀷 53鎷f枡鍏ュ簱 57鐩樼偣鍏ュ簱 + int ioType = agvWrkMast.getIoType() == 103 ? 53 : 57; + + agvWrkMast.setIoType(ioType); + String locNo = agvWrkMast.getLocNo(); + agvWrkMast.setLocNo(agvWrkMast.getSourceLocNo()); + agvWrkMast.setSourceLocNo(locNo); + agvWrkMast.setIoTime(now); + agvWrkMastService.updateById(agvWrkMast); + + AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); + AgvLocMast agvLocMast = agvLocMastService.selectById(agvWrkMast.getLocNo()); + AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocMast.getLocNo())); + AgvBasDevp agvBasDevp = agvBasDevpService.selectById(agvWrkMast.getSourceLocNo()); + + //鎷f枡鍏ュ簱 + if(ioType == 53){ + //淇敼宸ヤ綔鍏氭槑缁� + agvWrkDetl.setAnfme(agvLocDetl.getAnfme() - agvWrkDetl.getAnfme()); + agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("wrk_no",agvWrkDetl.getWrkNo())); + //淇敼搴撳瓨淇℃伅 + agvLocDetl.setAnfme(agvWrkDetl.getAnfme()); + agvLocDetlService.update(agvLocDetl,new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocDetl.getLocNo())); + } + //淇敼搴撲綅淇℃伅 + updateAgvLocMast(agvLocMast,"Q"); + //淇敼绔欑偣淇℃伅 + updateAgvBasDevp(agvBasDevp,"R"); + + }); + } + + /* + 鐩樼偣鍑哄簱 + */ + @Transactional + public void locCheckOut(StockOutParam param, Long userId) { + String station = param.getStation(); + List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>() + .eq("station_code", station) + .eq("loc_sts","O")); + + if(param.getLocDetls().size() > agvBasDevpList.size()){ + throw new CoolException("褰撳墠绔欑偣鍙敤缂撳瓨璐ф灦鏁伴噺涓�" + agvBasDevpList.size() + ",灏戜簬闇�瑕佺洏鐐瑰嚭搴撳簱浣嶆暟閲忥紝璇烽噸鏂伴�夋嫨鐩樼偣搴撲綅"); + } + + param.getLocDetls().forEach(locDetl -> { + AgvLocMast agvLocMast = agvLocMastService.selectById(locDetl.getLocNo()); + AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", locDetl.getLocNo())); + AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>() + .eq("station_code", station) + .eq("loc_sts","O")); + Date now = new Date(); + + //鐢熸垚宸ヤ綔鍏� + AgvWrkMast wrkMast = createWrkMast(107, 21L, locDetl.getLocNo(), agvBasDevp.getDevNo(), agvLocDetl.getSuppCode(), now, userId); + //鐢熸垚宸ヤ綔鏄庣粏妗� + createWrkDetlReWrite(locDetl.getMatnr(),wrkMast.getWrkNo(),null,locDetl.getBatch(),locDetl.getCount(),wrkMast.getBarcode(),now,userId,agvLocDetl.getThreeCode(),agvLocDetl.getDeadTime()); + //淇敼搴撲綅淇℃伅 + updateAgvLocMast(agvLocMast,"P"); + //淇敼绔欑偣淇℃伅 + updateAgvBasDevp(agvBasDevp,"S"); + + }); + + } + + /* + 搴撲綅绉昏浆 + */ + @Transactional + public void locMove(String sourceLocNo, String targetLocNo, Long userId) { + AgvLocMast sourceLocMast = agvLocMastService.selectById(sourceLocNo); + AgvLocMast targetLocMast = agvLocMastService.selectById(targetLocNo); + AgvLocDetl sourceLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", sourceLocMast.getLocNo())); + + if(!sourceLocMast.getLocSts().equals("F")){ + throw new CoolException(sourceLocMast.getLocNo() + "婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細"+sourceLocMast.getLocSts$()); + } + if(!targetLocMast.getLocSts().equals("O")){ + throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細"+targetLocMast.getLocSts$()); + } + + Date now = new Date(); + //鐢熸垚绉诲簱宸ヤ綔妗� + AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getSuppCode(), now, userId); + //鐢熸垚宸ヤ綔鍏氭槑缁� + createWrkDetlReWrite(sourceLocDetl.getMatnr(),wrkMast.getWrkNo(),null,sourceLocDetl.getBatch(),sourceLocDetl.getAnfme(),sourceLocDetl.getZpallet(),now,userId,sourceLocDetl.getThreeCode(),sourceLocDetl.getDeadTime()); + //淇敼鐩爣搴撲綅鐘舵�� + updateAgvLocMast(targetLocMast,"S"); + //淇敼鍘熷簱浣嶇姸鎬� + updateAgvLocMast(sourceLocMast,"R"); + } + + /* + 绌烘澘鍏ュ簱 + */ + @Transactional + public String emptyPlateIn(String sourceStaion, Long userId) { + Date now = new Date(); + // 婧愮珯鐐圭姸鎬佹娴� + AgvBasDevp agvBasDevp = agvBasDevpService.selectById(sourceStaion); + if(!agvBasDevp.getLocSts().equals("O")){ + throw new CoolException("褰撳墠宸ヤ綔浣嶇姸鎬佷负" + agvBasDevp.getLocSts()+",鏃犳硶杩涜绌烘澘鍏ュ簱"); + } + // 妫�绱㈠簱浣� + AgvLocMast locMast = agvCommonService.getLocNo(null, agvBasDevp.getFloor()); + // 鐢熸垚宸ヤ綔妗� 10.绌烘澘鍏ュ簱 + createWrkMast(10,201L,agvBasDevp.getDevNo(),locMast.getLocNo(),null,now,userId); + //鏇存柊婧愮珯鐐圭姸鎬� + updateAgvBasDevp(agvBasDevp,"R"); + //鏇存柊鐩爣搴撲綅鐘舵�� + updateAgvLocMast(locMast,"S"); + return locMast.getLocNo(); + } + + /* + 绌烘澘鍑哄簱 + */ + @Transactional + public void emptyPlateOut(EmptyPlateOutParam param, Long userId) { + Date now = new Date(); + //鍒ゆ柇鎵�閫夊伐浣滅珯绌轰綑宸ヤ綔浣嶆暟閲忔槸鍚︽弧瓒冲嚭搴撴暟閲� + List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>() + .eq("station_code", param.getStationCode()) + .eq("loc_sts","O")); + if(agvBasDevpList.size() < param.getLocNos().size()){ + throw new CoolException("褰撳墠宸ヤ綔绔欏彲鍑哄簱宸ヤ綔浣嶆暟閲忎负"+ agvBasDevpList.size() + "锛屽皬浜庤鍑哄簱鐨勫簱浣嶆暟閲忥紝璇烽噸鏂伴�夋嫨鍑哄簱搴撲綅"); + } + param.getLocNos().forEach(locNo -> { + AgvLocMast agvLocMast = agvLocMastService.selectById(locNo); + if(!agvLocMast.getLocSts().equals("D")){ + throw new CoolException(agvLocMast.getLocNo() + "搴撲綅鐘舵�佸凡缁忎笉涓篋.绌烘《/绌烘爤鏉匡紝璇烽噸鏂伴�夋嫨搴撲綅杩涜绌烘澘鍑哄簱"); + } + //妫�绱㈠伐浣滀綅 + AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>() + .eq("station_code", param.getStationCode()) + .eq("loc_sts", "O")); + //鐢熸垚宸ヤ綔妗� + createWrkMast(110,21L,locNo,agvBasDevp.getDevNo(),null,now,userId); + //淇敼婧愬簱浣嶇姸鎬� + updateAgvLocMast(agvLocMast,"R"); + //淇敼鐩爣宸ヤ綔浣嶇姸鎬� + updateAgvBasDevp(agvBasDevp,"S"); + }); + } + + @Transactional + public void adjustLocDetl(LocDetlAdjustParam param, Long userId) { + param.integrate(); + AgvLocMast locMast = agvLocMastService.selectById(param.getLocNo()); + if (Cools.isEmpty(locMast)) { + throw new CoolException("搴撲綅涓嶅瓨鍦�"); + } + if (!(locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") || locMast.getLocSts().equals("O"))) { + throw new CoolException("褰撳墠搴撲綅涓嶅彲璋冩暣锛佸簱浣嶇姸鎬侊細" + locMast.getLocSts$()); + } + + Date now = new Date(); + List<AgvLocDetl> locDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", param.getLocNo())); + + List<LocDetlAdjustParam.LocDetlAdjust> list = param.getList(); + + // 淇敼鏁伴噺 + Iterator<AgvLocDetl> iterator = locDetls.iterator(); + while (iterator.hasNext()) { + AgvLocDetl locDetl = iterator.next(); + + Iterator<LocDetlAdjustParam.LocDetlAdjust> iterator1 = list.iterator(); + while (iterator1.hasNext()) { + LocDetlAdjustParam.LocDetlAdjust adjust = iterator1.next(); + if (adjust.getCount() == 0) { continue; } + if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch())) { + if (!locDetl.getAnfme().equals(adjust.getCount())) { + // todo 鐩樼偣璁板綍 + // 淇敼搴撳瓨 + if (!agvLocDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) { + throw new CoolException(locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佷慨鏀规暟閲忓け璐�"); + } + // 淇濆瓨璋冩暣璁板綍 + AdjDetl adjDetl = new AdjDetl(); + adjDetl.setLocNo(locDetl.getLocNo()); + adjDetl.setMatnr(locDetl.getMatnr()); + adjDetl.setBatch(locDetl.getBatch()); + adjDetl.setOriQty(locDetl.getAnfme()); + adjDetl.setAdjQty(adjust.getCount()); + adjDetl.setModiTime(now); + adjDetl.setModiUser(userId); + adjDetl.setAppeTime(now); + adjDetl.setAppeUser(userId); + + UUID uuid = UUID.randomUUID(); + adjDetl.setOrderNo(uuid.toString()); + adjDetl.setCsocode(locDetl.getThreeCode()); + adjDetl.setIsoseq(locDetl.getDeadTime()); + + adjDetlService.save(adjDetl, userId); + } + iterator.remove(); + iterator1.remove(); + } + } + } + + // 鍒犻櫎搴撳瓨 + for (AgvLocDetl locDetl : locDetls) { + // todo 鐩樼偣璁板綍 + if (!agvLocDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) { + throw new CoolException("鍒犻櫎" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佸簱瀛樻槑缁嗗け璐�"); + } + // 淇濆瓨璋冩暣璁板綍 + AdjDetl adjDetl = new AdjDetl(); + adjDetl.setLocNo(locDetl.getLocNo()); + adjDetl.setMatnr(locDetl.getMatnr()); + adjDetl.setBatch(locDetl.getBatch()); + adjDetl.setOriQty(locDetl.getAnfme()); + adjDetl.setAdjQty(0.0D); + adjDetl.setModiTime(now); + adjDetl.setModiUser(userId); + adjDetl.setAppeTime(now); + adjDetl.setAppeUser(userId); + + adjDetlService.save(adjDetl, userId); + } + + // 娣诲姞搴撳瓨 + for (LocDetlAdjustParam.LocDetlAdjust adjust : list) { + if (adjust.getCount() == 0.0D) { continue; } + Mat mat = matService.selectByMatnr(adjust.getMatnr()); + AgvLocDetl locDetl = new AgvLocDetl(); + locDetl.sync(mat); + locDetl.setBatch(adjust.getBatch()); + locDetl.setLocNo(locMast.getLocNo()); + locDetl.setAnfme(adjust.getCount()); // 鏁伴噺 + locDetl.setModiUser(userId); // 鎿嶄綔浜哄憳淇℃伅 + locDetl.setModiTime(now); + locDetl.setAppeUser(userId); + locDetl.setAppeTime(now); + locDetl.setThreeCode(adjust.getThreeCode()); + locDetl.setDeadTime(adjust.getDeadTime()); + if (!agvLocDetlService.insert(locDetl)) { + throw new CoolException("娣诲姞" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佸簱瀛樻槑缁嗗け璐�"); + } + // 淇濆瓨璋冩暣璁板綍 + AdjDetl adjDetl = new AdjDetl(); + adjDetl.setLocNo(locMast.getLocNo()); + adjDetl.setMatnr(adjust.getMatnr()); + adjDetl.setBatch(adjust.getBatch()); + adjDetl.setOriQty(0.0D); + adjDetl.setAdjQty(adjust.getCount()); + adjDetl.setModiTime(now); + adjDetl.setModiUser(userId); + adjDetl.setAppeTime(now); + adjDetl.setAppeUser(userId); + + UUID uuid = UUID.randomUUID(); + adjDetl.setOrderNo(uuid.toString()); + adjDetl.setCsocode(locDetl.getThreeCode()); + adjDetl.setIsoseq(locDetl.getDeadTime()); + + adjDetlService.save(adjDetl, userId); + } + // 淇敼搴撲綅鐘舵�� + int count = agvLocDetlService.selectCount(new EntityWrapper<AgvLocDetl>().eq("loc_no", locMast.getLocNo())); + if (locMast.getLocSts().equals("F")) { + if (count == 0) { + locMast.setLocSts("D"); + } + } + if (locMast.getLocSts().equals("D") || locMast.getLocSts().equals("O")) { + if (count > 0) { + locMast.setLocSts("F"); + } + } + locMast.setModiUser(userId); + locMast.setModiTime(new Date()); + if (!agvLocMastService.updateById(locMast)) { + throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�"); + } + } + + @Override + @Transactional + public void completeWrkMast(String workNo, Long userId) { + AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo); + if (Cools.isEmpty(wrkMast)){ + throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪"); + } + + if(wrkMast.getWrkSts() > 202){ + //淇敼AGV宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚 + agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(),205); + + //鍑哄簱浠诲姟 101.鍑哄簱 || 103.鎷f枡鍑哄簱 || 107.鐩樼偣鍑哄簱 + if(wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107){ + //淇敼鍑哄簱绔欑偣鐘舵�� + agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode()); + } + //鍑哄簱浠诲姟 110.绌烘澘鍑哄簱 + if(wrkMast.getIoType() == 110){ + agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode()); + } + } + + } + + @Transactional + public void cancelWrkMast(String workNo, Long userId) { + AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo); + if (Cools.isEmpty(wrkMast)){ + throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪"); + } + //鎷f枡鍏ュ簱 鐩樼偣鍏ュ簱涓嶅彲鍙栨秷 + if(wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57){ + throw new CoolException("褰撳墠浠诲姟涓嶅彲鍙栨秷"); + } + + //AGV鏈哄櫒浜烘湭鍙栬揣鍓嶅彇娑� + if(wrkMast.getWrkSts() < 203){ + //鍏ュ簱鍙栨秷 + if(wrkMast.getIoType() == 1 || wrkMast.getIoType() == 10){ + //婧愮珯鐐� + String devNo = wrkMast.getSourceLocNo(); + //鐩爣搴撲綅 + String locNo = wrkMast.getLocNo(); + agvLocMastService.updateLocStsByLocNo(locNo,"O"); + agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"F",wrkMast.getBarcode()); + + //鍑哄簱鍙栨秷 + }else { + //婧愬簱浣� + String locNo = wrkMast.getSourceLocNo(); + //鐩爣绔欑偣 + String devNo = wrkMast.getLocNo(); + agvLocMastService.updateLocStsByLocNo(locNo,"F"); + agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"O",""); + } + + } + + //璁㈠崟鍥炴粴 + AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectByWrkNo(wrkMast.getWrkNo()).get(0); + if(!Cools.isEmpty(agvWrkDetl.getOrderNo())){ + OrderDetl orderDetl = orderDetlService.selectByOrderNoAndMatnr(agvWrkDetl.getOrderNo(),agvWrkDetl.getMatnr(),agvWrkDetl.getThreeCode(),agvWrkDetl.getDeadTime()); + orderDetl.setQty(orderDetl.getQty() - agvWrkDetl.getAnfme()); + orderDetlService.updateById(orderDetl); + } + + //淇濆瓨宸ヤ綔妗d互鍙婃槑缁� + agvWrkMastLogService.save(wrkMast); + agvWrkDetlLogService.save(wrkMast.getWrkNo()); + + //鍒犻櫎宸ヤ綔妗d互鍙婃槑缁� + if(!agvWrkMastService.deleteByWrkNo(wrkMast.getWrkNo()) || !agvWrkDetlService.deleteByWrkNo(wrkMast.getWrkNo())){ + throw new CoolException("鍒犻櫎澶辫触锛岃鑱旂郴绠$悊鍛�"); + } + } /* 鏇存柊鐩爣搴撲綅淇℃伅 */ - private void updateAgvLocMast(AgvLocMast locMast){ - locMast.setLocSts("S"); - agvLockMastService.updateById(locMast); + private void updateAgvLocMast(AgvLocMast locMast, String locSts){ + locMast.setLocSts(locSts); + agvLocMastService.updateById(locMast); } /* 鏇存柊婧愮珯鐐逛俊鎭� */ - private void updateAgvBasDevp(AgvBasDevp agvBasDevp){ - agvBasDevp.setLocSts("R"); + private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts){ + agvBasDevp.setLocSts(locSts); agvBasDevpService.updateById(agvBasDevp); } /* 鐢熸垚宸ヤ綔妗f槑缁� */ - /* private void createWrkDetl(List<AgvWaitPakin> agvWaitPakinList, AgvWrkMast wrkMast, Long userId){ - List<DetlDto> detlDtos = new ArrayList<>(); - agvWaitPakinList.forEach(agvWaitPakin -> { - DetlDto detlDto = new DetlDto(agvWaitPakin.getMatnr(), agvWaitPakin.getBatch(), agvWaitPakin.getAnfme()); - if (DetlDto.has(detlDtos, detlDto)) { - DetlDto detlDto1 = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch()); - assert detlDto1 != null; - detlDto1.setAnfme(detlDto1.getAnfme() + detlDto.getAnfme()); - } else { - detlDtos.add(detlDto); - } - }); - agvWrkDetlService.createWorkDetail(wrkMast.getWrkNo(), detlDtos, wrkMast.getBarcode(), userId); - }*/ + private void createWrkDetlReWrite(String matnr, int wrkNo, String orderNo,String batch, double anfme, String zpallet, Date now, Long userId, String csocode, String isoseq){ + Mat mat = matService.selectByMatnr(matnr); + if (Cools.isEmpty(mat)) { + throw new CoolException(matnr + "鍟嗗搧缁存姢澶辫触"); + } + AgvWrkDetl wrkDetl = new AgvWrkDetl(); + wrkDetl.sync(mat); + wrkDetl.setWrkNo(wrkNo); + wrkDetl.setOrderNo(orderNo); + wrkDetl.setIoTime(now); + wrkDetl.setBatch(batch); + wrkDetl.setAnfme(anfme); // 鏁伴噺 + wrkDetl.setSuppCode(zpallet); // 鎵樼洏鏉$爜 + wrkDetl.setAppeUser(userId); + wrkDetl.setAppeTime(now); + wrkDetl.setModiUser(userId); + wrkDetl.setModiTime(now); + + wrkDetl.setThreeCode(csocode); + wrkDetl.setDeadTime(isoseq); + if (!agvWrkDetlService.insert(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触"); + } + } + /* 鐢熸垚宸ヤ綔妗f槑缁� */ + @Deprecated private void createWrkDetlReWrite(List<AgvWaitPakin> agvWaitPakinList, AgvWrkMast wrkMast, Long userId){ Date now = new Date(); agvWaitPakinList.stream().forEach(agvWaitPakin -> { @@ -138,23 +592,78 @@ /* 鐢熸垚宸ヤ綔妗� */ + private AgvWrkMast createWrkMast(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode, Date now, Long userId){ + AgvWrkMast wrkMast = new AgvWrkMast(); + //鐢熸垚宸ヤ綔鍙� +// int workNo = agvCommonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); +// wrkMast.setWrkNo(); + //宸ヤ綔鐘舵�� + wrkMast.setWrkSts(wrkSts); + //鍏ュ嚭搴撶被鍨� + wrkMast.setIoType(ioType); + wrkMast.setIoTime(now); + //浼樺厛绾� + wrkMast.setIoPri(300.0); + //婧愮珯鐐� + wrkMast.setSourceLocNo(sourceLocNo); + //鐩爣绔欑偣 + wrkMast.setLocNo(locNo); + //瀹瑰櫒缂栫爜 + wrkMast.setBarcode(barcode); + // 婊℃澘锛歒 + //wrkMast.setFullPlt("Y"); + // 鎷f枡 + //wrkMast.setPicking("N"); + // 閫�鍑� + //wrkMast.setExitMk("N"); + // 绌烘澘 + //wrkMast.setEmptyMk("N"); + //wrkMast.setLinkMis("N"); + wrkMast.setAppeUser(userId); + wrkMast.setAppeTime(now); + wrkMast.setModiUser(userId); + wrkMast.setModiTime(now); + + if (!agvWrkMastService.insertByIncrease(wrkMast)) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + } + + int i = agvWrkMastService.selectCount(new EntityWrapper<AgvWrkMast>()); + log.info(i + ""); + + + wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locNo).eq("source_loc_no",sourceLocNo)); + + return wrkMast; + } + + /* + 鐢熸垚宸ヤ綔妗� + */ + @Deprecated private AgvWrkMast createWrkMast(AgvBasDevp agvBasDevp,AgvLocMast agvLocMast, Date now, Long userId){ AgvWrkMast wrkMast = new AgvWrkMast(); //鐢熸垚宸ヤ綔鍙� - int workNo = agvCommonService.getWorkNo(0); - wrkMast.setWrkNo(workNo); + //int workNo = agvCommonService.getWorkNo(0); + //wrkMast.setWrkNo(workNo); wrkMast.setIoTime(new Date()); - wrkMast.setWrkSts(201L); // 宸ヤ綔鐘舵�侊細201.鐢熸垚鍏ュ簱浠诲姟ID - wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱 + // 宸ヤ綔鐘舵�侊細201.鐢熸垚鍏ュ簱浠诲姟ID + wrkMast.setWrkSts(201L); + // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱 + wrkMast.setIoType(1); //鐢熸垚浼樺厛绾� wrkMast.setIoPri(300.0); wrkMast.setSourceLocNo(agvBasDevp.getDevNo()); wrkMast.setLocNo(agvLocMast.getLocNo()); wrkMast.setBarcode(agvBasDevp.getBarcode()); - wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 - wrkMast.setPicking("N"); // 鎷f枡 - wrkMast.setExitMk("N"); // 閫�鍑� - wrkMast.setEmptyMk("N"); // 绌烘澘 + // 婊℃澘锛歒 + wrkMast.setFullPlt("Y"); + // 鎷f枡 + wrkMast.setPicking("N"); + // 閫�鍑� + wrkMast.setExitMk("N"); + // 绌烘澘 + wrkMast.setEmptyMk("N"); wrkMast.setLinkMis("N"); wrkMast.setAppeUser(userId); wrkMast.setAppeTime(now); @@ -164,6 +673,62 @@ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); } return wrkMast; + } + + private boolean isPakOut(String locNo, double anfme){ + AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo)); + if(agvLocDetl.getAnfme() > anfme){ + return false; + } + return true; + } + + /* + AGV鐢熸垚鍑哄簱宸ヤ綔妗e悗淇敼璁㈠崟淇℃伅 + TODO 涓庡洓椤瑰簱鐢熸垚鍑哄簱宸ヤ綔妗e悗淇敼璁㈠崟淇℃伅鏁村悎鍒颁竴璧� + */ + private void modifyOrderDetl(LocDto locDto, Long userId){ + + if (!BaseController.isJSON(locDto.getOrderNo())) { + //闈炲悎骞跺嚭搴� + OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch()); + if (orderDetl == null) { + orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null); + } + if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) { + throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触"); + } + orderService.updateSettle(orderDetl.getOrderId(), 2L, userId); + }else { + //鍚堝苟鍑哄簱 + List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class); + + //瀹為檯鍑哄簱鏁伴噺 + Double locAnfme = locDto.getAnfme(); + //璁㈠崟瀹為檯鍑哄簱鏁伴噺 + Double orderAnfme; + + for (OrderDto orderDto : orderDtoList) { + OrderDetl orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch()); + if (orderDetl == null) { + orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), null); + } + + if(locAnfme > orderDetl.getAnfme()){ + orderAnfme = orderDetl.getAnfme(); + locAnfme -= orderAnfme; + }else { + orderAnfme = locAnfme; + } + + if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderAnfme)) { + throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触"); + } + orderService.updateSettle(orderDetl.getOrderId(), 2L, userId); + } + } + } + } -- Gitblit v1.9.1