From 1a8e7f30035b45771d05cd4cc99aae2743576112 Mon Sep 17 00:00:00 2001 From: whycq <913841844@qq.com> Date: 星期五, 17 五月 2024 00:16:46 +0800 Subject: [PATCH] # 手动调拨 --- src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java | 1683 ++++++++++++++++++++++++--------------------------------- 1 files changed, 699 insertions(+), 984 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 7f9947a..a5cd6e2 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java @@ -1,774 +1,423 @@ package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; -import com.baomidou.mybatisplus.mapper.Wrapper; -import com.core.common.BaseRes; import com.core.common.Cools; -import com.core.common.DateUtils; -import com.core.common.SnowflakeIdWorker; import com.core.exception.CoolException; import com.zy.asrs.entity.*; -import com.zy.asrs.entity.param.EmptyPlateOutParam; -import com.zy.asrs.entity.param.FullStoreParam; import com.zy.asrs.entity.param.LocDetlAdjustParam; import com.zy.asrs.entity.param.StockOutParam; import com.zy.asrs.service.*; import com.zy.asrs.utils.Utils; -import com.zy.common.model.*; -import com.zy.common.model.enums.IoWorkType; -import com.zy.common.model.enums.WorkNoType; -import com.zy.common.properties.SlaveProperties; -import com.zy.common.service.CommonService; +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 com.zy.common.web.WcsController; +import lombok.Synchronized; 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.*; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; /** * Created by vincent on 2020/6/11 */ @Slf4j @Service +@Transactional public class AgvWorkServiceImpl implements AgvWorkService { // 宸ヤ綔鍙风敓鎴愯鍒欓粯璁ょ被鍨� private static final int DEFAULT_WORK_NO_TYPE = 0; // 搴撲綅鎺掑彿鍒嗛厤榛樿绫诲埆 private static final int DEFAULT_ROW_NO_TYPE = 1; - + @Autowired + private AgvWaitPakinService agvWaitPakinService; + @Autowired + private AgvBasDevpService agvBasDevpService; + @Autowired + private AgvLocMastService agvLocMastService; + @Autowired + private AgvLocDetlService agvLocDetlService; + @Autowired + private AgvCommonService agvCommonService; + @Autowired + private AgvWrkMastService agvWrkMastService; + @Autowired + private AgvWrkDetlService agvWrkDetlService; @Autowired private MatService matService; - @Autowired - private WrkMastService wrkMastService; - @Autowired - private WrkDetlService wrkDetlService; - @Autowired - private BasDevpService basDevpService; - @Autowired - private CommonService commonService; - @Autowired - private LocMastService locMastService; - @Autowired - private StaDescService staDescService; - @Autowired - private LocDetlService locDetlService; - @Autowired - private AdjDetlService adjDetlService; - @Autowired - private WrkMastLogService wrkMastLogService; - @Autowired - private WrkDetlLogService wrkDetlLogService; - @Autowired - private SnowflakeIdWorker snowflakeIdWorker; @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired - private WcsController wcsController; + private AdjDetlService adjDetlService; @Autowired - private RowLastnoService rowLastnoService; + private AgvWrkMastLogService agvWrkMastLogService; @Autowired - private SlaveProperties slaveProperties; + private AgvWrkDetlLogService agvWrkDetlLogService; - @Override + + /* + 鍏ュ簱 + */ @Transactional - public String startupFullPutStore(FullStoreParam param, Long userId) { - // 鍙傛暟闈炵┖鍒ゆ柇 - if (Cools.isEmpty(param.getDevpNo(), param.getList())) { - throw new CoolException(BaseRes.PARAM); - } + @Synchronized + public StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId, boolean isConveyor) { + Date now = new Date(); - // 婧愮珯鐐圭姸鎬佹娴� - BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getDevpNo(), true); - // 妫�绱㈠簱浣� - LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo); - List<String> matnrs = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatnr).distinct().collect(Collectors.toList()); - StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matnrs, locTypeDto, 0); - // 鐢熸垚宸ヤ綔鍙� - int workNo = dto.getWorkNo(); - // 鐢熸垚宸ヤ綔妗� - WrkMast wrkMast = new WrkMast(); - wrkMast.setWrkNo(workNo); - wrkMast.setIoTime(new Date()); - wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID - wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱 - Double ioPri = wrkMastService.getIoPri(1, dto.getLocNo()); - wrkMast.setIoPri(ioPri); // 浼樺厛绾э細13 - wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true)?1:0);; - wrkMast.setCrnNo(dto.getCrnNo()); - wrkMast.setSourceStaNo(dto.getSourceStaNo()); - wrkMast.setStaNo(dto.getStaNo()); - wrkMast.setLocNo(dto.getLocNo()); - wrkMast.setBarcode(param.getBarcode()); // 鎵樼洏鐮� - wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 - wrkMast.setPicking("N"); // 鎷f枡 - wrkMast.setExitMk("N"); // 閫�鍑� - wrkMast.setEmptyMk("N"); // 绌烘澘 - wrkMast.setLinkMis("N"); - wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷 - wrkMast.setAppeUser(userId); - wrkMast.setAppeTime(now); - wrkMast.setModiUser(userId); - wrkMast.setModiTime(now); - if (!wrkMastService.insert(wrkMast)) { - throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); - } - // 鐢熸垚宸ヤ綔妗f槑缁� - List<DetlDto> detlDtos = new ArrayList<>(); - param.getList().forEach(elem -> { - DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.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); + + agvBasDevpList.forEach(agvBasDevp -> { + if(Cools.isEmpty(agvBasDevp.getBarcode())){ + throw new CoolException("閫変腑鐨勭珯鐐逛腑鍚湁鏈粦瀹氭墭鐩樼殑绔欑偣锛岃閲嶆柊閫夋嫨"); } + + if(!"F".equals(agvBasDevp.getLocSts())){ + throw new CoolException("閫変腑鐨勭珯鐐逛腑鍚湁璐т綅鐘舵�佷笉涓篎.鍦ㄥ簱鐨勭珯鐐癸紝璇烽噸鏂伴�夋嫨"); + } + + List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectList(new EntityWrapper<AgvWaitPakin>().eq("supp_code", agvBasDevp.getBarcode())); + + //妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅 + AgvLocMast agvLocMast = agvCommonService.getLocNo(agvBasDevp.getLocType1(),agvBasDevp.getFloor()); + //鐢熸垚宸ヤ綔妗� + AgvWrkMast wrkMast = createWrkMast(1,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),agvBasDevp.getBarcode(),now,userId, agvBasDevp.getLocType2()); + //鏍囪鏄惁涓鸿緭閫佺嚎鍏ュ簱 + wrkMast.setMk(isConveyor ? "Y" : "N"); + //鐢熸垚宸ヤ綔妗f槑缁� + agvWaitPakinList.forEach(wp -> { + createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime()); + }); + //鏇存柊婧愮珯鐐逛俊鎭� + updateAgvBasDevp(agvBasDevp,"R"); + //鏇存柊鐩爣搴撲綅鐘舵�� + updateAgvLocMast(agvLocMast,"S"); + }); - wrkDetlService.createWorkDetail(workNo, detlDtos, param.getBarcode(), userId); - // 鏇存柊婧愮珯鐐逛俊鎭� - sourceStaNo.setWrkNo(workNo); - sourceStaNo.setModiUser(userId); - sourceStaNo.setModiTime(now); - if (!basDevpService.updateById(sourceStaNo)){ - throw new CoolException("鏇存柊婧愮珯澶辫触"); - } - // 鏇存柊鐩爣搴撲綅鐘舵�� - LocMast locMast = locMastService.selectById(dto.getLocNo()); - if (locMast.getLocSts().equals("O")){ - locMast.setLocSts("S"); // S.鍏ュ簱棰勭害 - locMast.setModiUser(userId); - locMast.setModiTime(now); - if (!locMastService.updateById(locMast)){ - throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�"); - } - } else { - throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤"); - } - return dto.getLocNo(); + + //TODO + return null; } - @Override + /* + 璁㈠崟鍑哄簱 + */ @Transactional - public void startupFullTakeStore(StockOutParam param, Long userId) { - ArrayList<String> locNos = new ArrayList<>(); - for (StockOutParam.LocDetl locDetl:param.getLocDetls()){ - if (!locNos.contains(locDetl.getLocNo())){ - locNos.add(locDetl.getLocNo()); - } - } - //妫�娴嬫槸鍚︿负娴呭簱浣� - boolean sign=false; - String th = ""; - for (String locNo:locNos){ - if (sign){ - break; - } - - //妫�娴嬪嚭搴撶殑璐х墿涓槸鍚︽湁鐘舵�佷负绂佹鐨勮揣鐗┿�� - for (LocDetl locDetl : locDetlService.selectByLocNo(locNo)) { - if (locDetl.getStockFreeze() == 0) { - th="搴撲綅鍙凤細"+locNo+" 鏈夌姝㈠嚭搴撶殑璐х墿锛�"; - throw new CoolException("鍑哄簱澶辫触锛�"+th); - } - - Mat mat = matService.selectByMatnr(locDetl.getMatnr()); - if (mat == null) { - continue; - } - if (mat.getStatus() == 0) { - th="搴撲綅鍙凤細"+locNo+" 鏈夌姝㈠嚭搴撶殑璐х墿锛�"; - throw new CoolException("鍑哄簱澶辫触锛�"+th); - } - } - - List<String> groupInsideLoc = Utils.getGroupInsideLoc(locNo); - if (!Cools.isEmpty(groupInsideLoc)) { - for (String insideLoc : groupInsideLoc) { - if (locNos.contains(insideLoc)){ - continue; - } - LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", insideLoc)); - if (locMast != null) { - if (!locMast.getLocSts().equals("O") && !locMast.getLocSts().equals("R")){ - sign=true; - th="搴撲綅鍙凤細"+locNo+" 娴呭簱浣嶆湁闈炵┖搴撲綅锛�"; - break; - } - } - } - } - } - if (sign){ - throw new CoolException("鍑哄簱澶辫触锛�"+th); - } - // 鐩爣绔欑偣鐘舵�佹娴� - BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite()); - // 鑾峰彇搴撲綅鏄庣粏 - List<LocDetlDto> locDetlDtos = new ArrayList<>(); - for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) { - if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) { - LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch()); - if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount())); - } - } - if (!locDetlDtos.isEmpty()) { - // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱 - stockOut(staNo, locDetlDtos, null, userId); - } else { - throw new CoolException("搴撳瓨涓嶅瓨鍦�"); - } - } - /** - * 閫氳繃搴撲綅鍙疯幏鍙� 鎺� - */ - public static int getRow(String locNo) { - if (!Cools.isEmpty(locNo)) { - return Integer.parseInt(locNo.substring(0, 2)); - } - throw new RuntimeException("搴撲綅瑙f瀽寮傚父"); - } - /** - * 閫氳繃搴撲綅鍙疯幏鍙� 鍒� - */ - public static int getBay(String locNo) { - if (!Cools.isEmpty(locNo)) { - return Integer.parseInt(locNo.substring(2, 5)); - } - throw new RuntimeException("搴撲綅瑙f瀽寮傚父"); - } - /** - * 閫氳繃搴撲綅鍙疯幏鍙� 灞� - */ - public static int getLev(String locNo) { - if (!Cools.isEmpty(locNo)) { - return Integer.parseInt(locNo.substring(5, 7)); - } - throw new RuntimeException("搴撲綅瑙f瀽寮傚父"); - } - - @Override - @Transactional - public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, IoWorkType ioWorkType, Long userId) { + public void stockOutWrkMast(List<TaskDto> agvTaskDtos, Long userId) { Date now = new Date(); - // 鍚堝苟鍚岀被椤� - Set<String> locNos = new HashSet<>(); - List<OutLocDto> dtos = new ArrayList<>(); - for (LocDetlDto locDetlDto : locDetlDtos) { - String locNo = locDetlDto.getLocDetl().getLocNo(); - if (locNos.contains(locNo)) { - for (OutLocDto dto : dtos) { - if (dto.getLocNo().equals(locNo)) { - dto.getLocDetlDtos().add(locDetlDto); - break; - } - } - } else { - locNos.add(locNo); - dtos.add(new OutLocDto(locNo, locDetlDto)); - } - } - Integer ioType = null; - List<String> excludeLocNos = dtos.stream().map(OutLocDto::getLocNo).distinct().collect(Collectors.toList()); - // 鐢熸垚宸ヤ綔妗� - for (OutLocDto dto : dtos) { - // 濡傛灉涓烘繁搴撲綅锛屼笖瀵瑰簲娴呭簱浣嶄负X.绂佺敤锛屽垯鐣ヨ繃姝ゅ簱浣� - if (Utils.isDeepLoc(slaveProperties, dto.getLocNo())) { - String shallowLoc = Utils.getShallowLoc(slaveProperties, dto.getLocNo()); - if (locMastService.selectById(shallowLoc).getLocSts().equals("X")) { - continue; - } - } - // 鍒ゆ柇鍏ュ嚭搴撶被鍨嬶細101.鍏ㄦ澘鍑哄簱 or 103.鎷f枡鍑哄簱 - if (ioWorkType == null) { - ioType = dto.isAll() ? 101 : 103; - } else if (ioWorkType.equals(IoWorkType.CHECK_OUT)) { - ioType = 107; - } - assert ioType != null; - // 鑾峰彇搴撲綅 - LocMast locMast = locMastService.selectById(dto.getLocNo()); - // 鑾峰彇璺緞 - Boolean outMost = locMastService.isOutMost(dto.getLocNo(), false); - Integer outCrnNo = locMastService.getOutCrnNo(locMast); - StaDesc staDesc = staDescService.queryCrnStn(ioType, outCrnNo, staNo.getDevNo()); - // 鐢熸垚宸ヤ綔鍙� - int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); - // 鐢熸垚宸ヤ綔妗� - WrkMast wrkMast = new WrkMast(); - wrkMast.setWrkNo(workNo); - wrkMast.setIoTime(now); - wrkMast.setWrkSts(21L); // 宸ヤ綔鐘舵�侊細21.鐢熸垚鍑哄簱浠诲姟 - wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬� - Double ioPri = wrkMastService.getIoPri(ioType, dto.getLocNo()); - wrkMast.setIoPri(ioPri); // 浼樺厛绾э細13 - wrkMast.setOutMost(outMost?1:0);; - wrkMast.setCrnNo(outMost?outCrnNo:locMast.getCrnNo()); - wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯 - wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔� - wrkMast.setSourceLocNo(dto.getLocNo()); // 婧愬簱浣� - wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 - wrkMast.setPicking("N"); // 鎷f枡 - wrkMast.setExitMk("N"); // 閫�鍑� - wrkMast.setEmptyMk("N"); // 绌烘澘 - wrkMast.setLinkMis("N"); - wrkMast.setBarcode(locMast.getBarcode()); - wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁 - wrkMast.setAppeTime(now); - wrkMast.setModiUser(userId); - wrkMast.setModiTime(now); - if (!wrkMastService.insert(wrkMast)) { - throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細"+dto.getLocNo()); - } - // 鐢熸垚宸ヤ綔妗f槑缁� - for (LocDetlDto detlDto : dto.getLocDetlDtos()) { - if (detlDto.getCount()==null || detlDto.getCount() <= 0.0D) {continue;} - WrkDetl wrkDetl = new WrkDetl(); - wrkDetl.sync(detlDto.getLocDetl()); - wrkDetl.setOrderNo(""); // 鎵嬪姩鍑哄簱涓嶉渶瑕佸甫鍑哄簱瀛樹腑鐨勫崟鎹紪鍙� - wrkDetl.setWrkNo(workNo); - wrkDetl.setIoTime(now); - Double anfme = ioType==101?detlDto.getLocDetl().getAnfme():detlDto.getCount(); - wrkDetl.setAnfme(anfme); // 鏁伴噺 - wrkDetl.setAppeTime(now); - wrkDetl.setAppeUser(userId); - wrkDetl.setModiTime(now); - wrkDetl.setModiUser(userId); - if (!wrkDetlService.insert(wrkDetl)) { - throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); + agvTaskDtos.forEach(taskDto -> { + + List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectByTaskDto(taskDto); + + //AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", taskDto.getLocNo())); + + //宸ヤ綔妗f墍闇�鍙傛暟 + + long wrkSts = 21L; + String sourceLocNo = taskDto.getLocNo(); + String targetLocNo = taskDto.getAgvStaNo(); + //String barcode = agvLocDetls.get(0).getSuppCode(); + String containerCode = taskDto.getLocDtos().get(0).getContainerCode(); + + + //鍒ゆ柇鏄惁鍏ㄦ澘鍑哄簱 + int ioType = isPakOut(sourceLocNo,taskDto) ? 101 : 103; + //鐢熸垚宸ヤ綔妗� + AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,containerCode,now,userId,Short.valueOf(containerCode.substring(0,2))); + //鐢熸垚宸ヤ綔妗f槑缁� + taskDto.getLocDtos().forEach(locDto -> { + if (!BaseController.isJSON(locDto.getOrderNo())) { + //鏄庣粏妗f墍闇�鍙傛暟 + createWrkDetlReWrite(locDto.getMatnr(), + wrkMast.getWrkNo(), + locDto.getOrderNo(), + locDto.getBatch(), + locDto.getAnfme(), + locDto.getContainerCode(), + now, + userId, + locDto.getCsocode(), + locDto.getIsoseq()); + }else { + List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class); + orderDtoList.forEach(orderDto -> { + //鏄庣粏妗f墍闇�鍙傛暟 + createWrkDetlReWrite(locDto.getMatnr(), + wrkMast.getWrkNo(), + orderDto.getOrderNo(), + locDto.getBatch(), + orderDto.getAnfme(), + locDto.getContainerCode(), + now, + userId, + locDto.getCsocode(), + locDto.getIsoseq()); + }); } - } - // 淇敼搴撲綅鐘舵��: F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓� - locMast = locMastService.selectById(dto.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("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細"+dto.getLocNo()); - } - } else { - throw new CoolException(dto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��"); - } - locMastService.breakUp(dto.getLocNo(), excludeLocNos); - } + + //淇敼璁㈠崟淇℃伅 + modifyOrderDetl(locDto, userId); + }); +// //淇敼璁㈠崟淇℃伅 +// 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"); + + }); } - @Override + //鎷f枡鍏ュ簱 @Transactional - public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId) { + public void pickIn(List<AgvWrkMast> agvWrkMastList){ 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("璁㈠崟鍑哄簱寮傚父锛岃鑱旂郴绠$悊鍛�"); + agvWrkMastList.forEach(agvWrkMast -> { + + //淇濆瓨鎷f枡鍑哄簱鐨勫伐浣滄。鍜屾槑缁� + agvWrkMastLogService.save(agvWrkMast); + agvWrkDetlLogService.save(agvWrkMast.getWrkNo()); + + //淇敼宸ヤ綔鍏� + 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); + + List<AgvWrkDetl> agvWrkDetlList = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); + AgvLocMast agvLocMast = agvLocMastService.selectById(agvWrkMast.getLocNo()); + //List<AgvLocDetl> agvLocDetlList = agvLocDetlService.selectList(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())); + //淇敼搴撳瓨淇℃伅 + agvWrkDetlList.forEach(agvWrkDetl -> { + AgvLocDetl agvLocDetl = agvLocDetlService.selectByMatnrAndBatchAndCsocodeAndisoCode(agvWrkMast.getLocNo(), agvWrkDetl.getMatnr(), agvWrkDetl.getBatch(), agvWrkDetl.getThreeCode(), agvWrkDetl.getDeadTime()); + + //AgvLocDetl agvLocDetl = agvLocDetlService.selectLocdetl(agvWrkMast.getLocNo(),agvWrkDetl.getMatnr(),agvWrkDetl.getBatch(),agvWrkDetl.getThreeCode(),agvWrkDetl.getDeadTime()); + double updateAnfme = agvLocDetl.getAnfme() - agvWrkDetl.getAnfme(); + agvLocDetlService.updateAnfme(updateAnfme,agvLocDetl.getLocNo(),agvLocDetl.getMatnr(),agvLocDetl.getBatch(),agvLocDetl.getThreeCode(),agvLocDetl.getDeadTime()); + }); } - } - // 鑾峰彇搴撲綅 - LocMast locMast = locMastService.selectById(taskDto.getLocNo()); - // 鑾峰彇璺緞 - int ioType = taskDto.isAll() ? 101 : 103; - Boolean outMost = locMastService.isOutMost(taskDto.getLocNo(), false); - Integer outCrnNo = locMastService.getOutCrnNo(locMast); - StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, outCrnNo, staNo.getDevNo()); - // 鐢熸垚宸ヤ綔鍙� - int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); - // 鐢熸垚宸ヤ綔妗� - WrkMast wrkMast = new WrkMast(); - wrkMast.setWrkNo(workNo); - wrkMast.setIoTime(now); - wrkMast.setWrkSts(21L); // 宸ヤ綔鐘舵�侊細21.鐢熸垚鍑哄簱浠诲姟 - wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬� - Double ioPri = wrkMastService.getIoPri(ioType, taskDto.getLocNo()); - wrkMast.setIoPri(ioPri); // 浼樺厛绾э細13 - wrkMast.setOutMost(outMost?1:0);; - wrkMast.setCrnNo(outMost?outCrnNo: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.setBarcode(locMast.getBarcode()); - 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; } - LocDetl locDetl = locDetlService.selectItem(locDto.getLocNo(), locDto.getMatnr(), locDto.getBatch()); - if (locDetl == null || locDetl.getAnfme() < locDto.getAnfme()) { - throw new CoolException(locDto.getLocNo() + "搴撲綅涓�" + locDto.getMatnr() + "鍟嗗搧搴撳瓨涓嶈冻锛�"); - } - Mat mat = matService.selectByMatnr(locDto.getMatnr()); - assert mat != null; - WrkDetl wrkDetl = new WrkDetl(); - wrkDetl.sync(mat); - wrkDetl.setZpallet(wrkMast.getBarcode()); - wrkDetl.setIoTime(now); - wrkDetl.setWrkNo(workNo); - wrkDetl.setBatch(locDto.getBatch()); - wrkDetl.setOrderNo(locDto.getOrderNo()); - wrkDetl.setAnfme(locDto.getAnfme()); // 鏁伴噺 - wrkDetl.setAppeTime(now); - wrkDetl.setAppeUser(userId); - wrkDetl.setModiTime(now); - wrkDetl.setModiUser(userId); - if (!wrkDetlService.insert(wrkDetl)) { - throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); - } - // 淇敼璁㈠崟鏄庣粏 - 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); - 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 (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDto.getAnfme())) { - throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触"); - } - orderService.updateSettle(orderDetl.getOrderId(), 2L, userId); - } - } - } - // 淇敼搴撲綅鐘舵��: 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() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��"); - } + //淇敼搴撲綅淇℃伅 + updateAgvLocMast(agvLocMast,"Q"); + //淇敼绔欑偣淇℃伅 + updateAgvBasDevp(agvBasDevp,"R"); + + }); } - @Override - @Transactional - public String emptyPlateIn(Integer devpNo, Long userId) { - // 婧愮珯鐐圭姸鎬佹娴� - BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true); - // 妫�绱㈠簱浣� - LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo); - StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null, locTypeDto, 0); - int workNo = dto.getWorkNo(); - // 鐢熸垚宸ヤ綔妗� - WrkMast wrkMast = new WrkMast(); - wrkMast.setWrkNo(workNo); - wrkMast.setIoTime(new Date()); - wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID - wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱 - Double ioPri = wrkMastService.getIoPri(10, dto.getLocNo()); - wrkMast.setIoPri(ioPri); // 浼樺厛绾э細10 - wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true)?1:0);; - wrkMast.setCrnNo(dto.getCrnNo()); - wrkMast.setSourceStaNo(dto.getSourceStaNo()); - wrkMast.setStaNo(dto.getStaNo()); - wrkMast.setLocNo(dto.getLocNo()); - wrkMast.setFullPlt("N"); // 婊℃澘 - wrkMast.setPicking("N"); // 鎷f枡 - wrkMast.setExitMk("N"); // 閫�鍑� - wrkMast.setEmptyMk("Y"); // 绌烘澘 - wrkMast.setLinkMis("N"); - wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷 - // 鎿嶄綔浜哄憳鏁版嵁 - wrkMast.setAppeUser(userId); - wrkMast.setAppeTime(new Date()); - wrkMast.setModiUser(userId); - wrkMast.setModiTime(new Date()); - boolean res = wrkMastService.insert(wrkMast); - if (!res) { - throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); - } - // 鏇存柊婧愮珯鐐逛俊鎭� - sourceStaNo.setWrkNo(workNo); - sourceStaNo.setModiUser(userId); - sourceStaNo.setModiTime(new Date()); - if (!basDevpService.updateById(sourceStaNo)){ - throw new CoolException("鏇存柊婧愮珯澶辫触"); - } - // 鏇存柊鐩爣搴撲綅鐘舵�� - LocMast locMast = locMastService.selectById(dto.getLocNo()); - if (locMast.getLocSts().equals("O")){ - locMast.setLocSts("S"); // S.鍏ュ簱棰勭害 - locMast.setModiUser(userId); - locMast.setModiTime(new Date()); - if (!locMastService.updateById(locMast)){ - throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�"); - } - } else { - throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤"); - } - return dto.getLocNo(); - } - - @Override - @Transactional - public void emptyPlateOut(EmptyPlateOutParam param, Long userId) { - List<String> locNos = param.getLocNos(); - //妫�娴嬫槸鍚︿负娴呭簱浣� - boolean sign=false; - String th = ""; - for (String locNo:locNos){ - if (sign){ - break; - } - List<String> groupInsideLoc = Utils.getGroupInsideLoc(locNo); - if (!Cools.isEmpty(groupInsideLoc)) { - for (String insideLoc : groupInsideLoc) { - if (locNos.contains(insideLoc)){ - continue; - } - LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", insideLoc)); - if (locMast != null) { - if (!locMast.getLocSts().equals("O") && !locMast.getLocSts().equals("R")){ - sign=true; - th="搴撲綅鍙凤細"+locNo+" 娴呭簱浣嶆湁闈炵┖搴撲綅锛�"; - break; - } - } - } - } - } - if (sign){ - throw new CoolException("鍑哄簱澶辫触锛�"+th); - } - if (Cools.isEmpty(param.getOutSite())) { - throw new CoolException("绔欑偣涓嶅瓨鍦�"); - } - for (String locNo : param.getLocNos()) { - // 濡傛灉涓烘繁搴撲綅锛屼笖瀵瑰簲娴呭簱浣嶄负X.绂佺敤锛屽垯鐣ヨ繃姝ゅ簱浣� - if (Utils.isDeepLoc(slaveProperties, locNo)) { - String shallowLoc = Utils.getShallowLoc(slaveProperties, locNo); - if (locMastService.selectById(shallowLoc).getLocSts().equals("X")) { - continue; - } - } - // 鑾峰彇宸ヤ綔鍙� - int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type); - // 鑾峰彇搴撲綅 - LocMast locMast = locMastService.selectById(locNo); - if (Cools.isEmpty(locMast)) { - throw new CoolException(locNo+"搴撲綅涓嶅瓨鍦�"); - } - Boolean outMost = locMastService.isOutMost(locNo, false); - Integer outCrnNo = locMastService.getOutCrnNo(locMast); - // 鑾峰彇婧愮珯 - Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() - .eq("type_no", 110) - .eq("stn_no", param.getOutSite()) - .eq("crn_no", outCrnNo); - StaDesc staDesc = staDescService.selectOne(wrapper); - if (Cools.isEmpty(staDesc)) { - throw new CoolException("闈炴硶璺緞锛�"); - } - Integer sourceStaNo = staDesc.getCrnStn(); - if (Cools.isEmpty(sourceStaNo)) { - throw new CoolException("妫�绱㈡簮绔欏け璐�"); - } - // 淇濆瓨宸ヤ綔妗� - WrkMast wrkMast = new WrkMast(); - wrkMast.setWrkNo(workNo); - wrkMast.setIoTime(new Date()); - wrkMast.setWrkSts(21L); // 宸ヤ綔鐘舵�侊細21.鐢熸垚鍑哄簱浠诲姟 - wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱 - Double ioPri = wrkMastService.getIoPri(110, locNo); - wrkMast.setIoPri(ioPri); - wrkMast.setSourceStaNo(sourceStaNo); // 婧愮珯 - wrkMast.setStaNo(param.getOutSite()); // 鐩爣绔� - wrkMast.setOutMost(outMost?1:0);; - wrkMast.setCrnNo(outMost?outCrnNo:locMast.getCrnNo()); - wrkMast.setSourceLocNo(locNo); // 婧愬簱浣� - wrkMast.setFullPlt("N"); // 婊℃澘锛歒 - wrkMast.setPicking("N"); // 鎷f枡 - wrkMast.setExitMk("N"); // 閫�鍑� - wrkMast.setEmptyMk("Y"); // 绌烘澘 - wrkMast.setLinkMis("N"); - wrkMast.setAppeUser(userId); - wrkMast.setAppeTime(new Date()); - wrkMast.setModiUser(userId); - wrkMast.setModiTime(new Date()); - boolean res = wrkMastService.insert(wrkMast); - if (!res) { - throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); - } - // 鏇存柊搴撲綅鐘舵�� D.绌烘澘 -> R.鍑哄簱棰勭害 - if (locMast.getLocSts().equals("D")){ - locMast.setLocSts("R"); - locMast.setModiUser(userId); - locMast.setModiTime(new Date()); - if (!locMastService.updateById(locMast)) { - throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�"); - } - } - } - } - - @Override + /* + 鐩樼偣鍑哄簱 + */ @Transactional public void locCheckOut(StockOutParam param, Long userId) { - // 鐩爣绔欑偣鐘舵�佹娴� - BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite()); - // 鑾峰彇搴撲綅鏄庣粏 - List<LocDetlDto> locDetlDtos = new ArrayList<>(); - for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) { - if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) { - LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch()); - if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount())); - } - } - if (!locDetlDtos.isEmpty()) { - // 鍚姩鍑哄簱寮�濮� 107.鐩樼偣鍑哄簱 - stockOut(staNo, locDetlDtos, IoWorkType.CHECK_OUT, userId); - } else { - throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�"); - } - } + String station = param.getStation(); - @Override - @Transactional - public void locMove(String sourceLocNo, String locNo, Long userId) { - LocMast sourceLoc = locMastService.selectById(sourceLocNo); - List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo)); - if (Cools.isEmpty(sourceLoc)){ - throw new CoolException("鏈壘鍒板簱浣�"); - } - LocMast loc = locMastService.selectById(locNo); - if (Cools.isEmpty(loc)){ - throw new CoolException("鏈壘鍒板簱浣�"); - } - if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) { -// throw new CoolException("绉昏浆搴撲綅灞炰簬涓嶅悓鍫嗗灈鏈�"); todo:luxiaotao - } + List<TaskDto> taskDtos = new ArrayList<>(); + param.getLocDetls().forEach(locDetl -> { + LocDto locDto = new LocDto(locDetl.getLocNo(),locDetl.getCount(),locDetl.getMatnr(),locDetl.getBatch(),locDetl.getThreeCode(),locDetl.getDeadTime(),locDetl.getSuppCode()); + TaskDto taskDto = new TaskDto(locDetl.getLocNo(),station,locDto); + if(TaskDto.has(taskDtos,taskDto)){ + TaskDto.find(taskDtos,taskDto).getLocDtos().add(locDto); + }else { + taskDtos.add(taskDto); + } + }); + Date now = new Date(); - // 鑾峰彇宸ヤ綔鍙� - int workNo = commonService.getWorkNo(WorkNoType.PICK.type); - // 淇濆瓨宸ヤ綔妗� - WrkMast wrkMast = new WrkMast(); - wrkMast.setWrkNo(workNo); - wrkMast.setIoTime(now); - wrkMast.setWrkSts(21L); // 宸ヤ綔鐘舵�侊細21.鐢熸垚鍑哄簱浠诲姟 - wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇 - wrkMast.setIoPri(10D); - wrkMast.setOutMost(locMastService.isOutMost(locNo, false)?1:0);; - wrkMast.setCrnNo(sourceLoc.getCrnNo()); - wrkMast.setSourceLocNo(sourceLocNo); // 婧愬簱浣� - wrkMast.setLocNo(locNo); // 鐩爣搴撲綅 - wrkMast.setFullPlt(Cools.isEmpty(locDetls)?"N":"Y"); // 婊℃澘锛歒 - wrkMast.setPicking("N"); // 鎷f枡 - wrkMast.setExitMk("N"); // 閫�鍑� - wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D")?"Y":"N"); // 绌烘澘 - wrkMast.setBarcode(sourceLoc.getBarcode()); // 鎵樼洏鐮� - wrkMast.setLinkMis("N"); - wrkMast.setAppeUser(userId); - wrkMast.setAppeTime(now); - wrkMast.setModiUser(userId); - wrkMast.setModiTime(now); - boolean res = wrkMastService.insert(wrkMast); - if (!res) { - throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); - } - // 宸ヤ綔妗f槑缁嗕繚瀛� - for (LocDetl locDetl : locDetls) { - WrkDetl wrkDetl = new WrkDetl(); - wrkDetl.sync(locDetl); - wrkDetl.setWrkNo(workNo); - wrkDetl.setIoTime(now); - wrkDetl.setAnfme(locDetl.getAnfme()); - wrkDetl.setAppeTime(now); - wrkDetl.setAppeUser(userId); - wrkDetl.setModiTime(now); - wrkDetl.setModiUser(userId); - if (!wrkDetlService.insert(wrkDetl)) { - throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); + taskDtos.forEach(taskDto -> { + + //鍒ゆ柇鏄惁鏈夐噸澶嶆枡鎯崇殑宸ヤ綔褰� + AgvWrkMast agvWrkMastList = agvWrkMastService.selectByContainerCode(taskDto.getLocDtos().get(0).getContainerCode()); + if(!Cools.isEmpty(agvWrkMastList)){ + return; } - } - // 淇敼婧愬簱浣嶇姸鎬� - if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) { - sourceLoc.setLocSts("R"); // R.鍑哄簱棰勭害 - sourceLoc.setModiUser(userId); - sourceLoc.setModiTime(now); - if (!locMastService.updateById(sourceLoc)){ - throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�"); - } - } else { - throw new CoolException(sourceLoc.getLocNo() + "婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細"+sourceLoc.getLocSts$()); - } - // 淇敼鐩爣搴撲綅鐘舵�� - if (loc.getLocSts().equals("O")) { - loc.setLocSts("S"); // S.鍏ュ簱棰勭害 - loc.setModiTime(now); - loc.setModiUser(userId); - if (!locMastService.updateById(loc)) { - throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�"); - } - } else { - throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細"+loc.getLocSts$()); - } + + int containerType = getContainerTypeByloc(taskDto.getLocNo()); + + //鐢熸垚宸ヤ綔妗� + AgvWrkMast wrkMast = createWrkMast(107, 21L,taskDto.getLocNo(),taskDto.getAgvStaNo(),taskDto.getLocDtos().get(0).getContainerCode(),now,userId,containerType); + //鐢熸垚宸ヤ綔妗f槑缁� + taskDto.getLocDtos().forEach(locDto -> { + //鏄庣粏妗f墍闇�鍙傛暟 + createWrkDetlReWrite(locDto.getMatnr(), + wrkMast.getWrkNo(), + locDto.getOrderNo(), + locDto.getBatch(), + locDto.getAnfme(), + locDto.getContainerCode(), + now, + userId, + locDto.getCsocode(), + locDto.getIsoseq()); + }); + updateAgvLocMast(agvLocMastService.selectById(wrkMast.getSourceLocNo()),"P"); + //鏇存柊鐩爣绔欑偣鐘舵�� + //locSts = ioType == 101 ? "S" : "Q"; + updateAgvBasDevp(agvBasDevpService.selectById(wrkMast.getLocNo()),"S"); + }); + } - @Override + /* + 搴撲綅绉昏浆 + */ @Transactional - public void completeWrkMast(String workNo, Long userId) { - WrkMast wrkMast = wrkMastService.selectById(workNo); - if (Cools.isEmpty(wrkMast)){ - throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪"); + 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 (wrkMast.getWrkSts() == 9 || wrkMast.getWrkSts() == 17) { - throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚"); + if(!targetLocMast.getLocSts().equals("O")){ + throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細"+targetLocMast.getLocSts$()); } - // 鍏ュ簱 + 搴撲綅杞Щ - if (wrkMast.getWrkSts() < 9 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()==11)) { - wrkMast.setWrkSts(9L); - // 鍑哄簱 - } else if (wrkMast.getWrkSts() > 10) { - wrkMast.setWrkSts(17L); - } + Date now = new Date(); - wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true)); - wrkMast.setCrnEndTime(now); - wrkMast.setModiTime(now); - wrkMast.setModiUser(userId); - // 瀹屾垚鎿嶄綔浜哄憳璁板綍 - wrkMast.setManuType("鎵嬪姩瀹屾垚"); - if (!wrkMastService.updateById(wrkMast)) { - throw new CoolException("淇敼宸ヤ綔妗eけ璐�"); - } + + //鐢熸垚绉诲簱宸ヤ綔妗� + AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getSuppCode(), now, userId,getContainerTypeByloc(sourceLocNo)); + //鐢熸垚宸ヤ綔鍏氭槑缁� + createWrkDetlReWrite(sourceLocDetl.getMatnr(),wrkMast.getWrkNo(),null,sourceLocDetl.getBatch(),sourceLocDetl.getAnfme(),sourceLocDetl.getZpallet(),now,userId,sourceLocDetl.getThreeCode(),sourceLocDetl.getDeadTime()); + //淇敼鐩爣搴撲綅鐘舵�� + updateAgvLocMast(targetLocMast,"S"); + //淇敼鍘熷簱浣嶇姸鎬� + updateAgvLocMast(sourceLocMast,"R"); } - @Override + /* + 鍏ュ簱 + */ + @Transactional + public String emptyPlateIn(String station,String containerCode,Short containerType, Long userId, boolean emptyAutoIn) { + + Date now = new Date(); + + Short locType = 0; + + AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station); + if (Cools.isEmpty(agvBasDevp)) { + throw new CoolException("鏆傛棤"+ station + "绔欑偣"); + } + if (containerType == 40) { + locType = 5; + } else if (containerType == 21 && agvBasDevp.getFloor() == 3) { + locType = 4; + } else if (containerType == 20 && agvBasDevp.getFloor() == 3) { + locType = 2; + } else { + locType = agvBasDevp.getLocType1(); + } + + if(!Cools.eq(agvBasDevp.getBarcode(),containerCode) && !agvBasDevp.getLocSts().equals("O") && !emptyAutoIn){ + throw new CoolException("褰撳墠宸ヤ綔浣嶇姸鎬佷负" + agvBasDevp.getLocSts()+",鏃犳硶杩涜绌烘澘鍏ュ簱"); + } + + //鏌ヨ宸ヤ綔妗� + AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(containerCode); + if(!Cools.isEmpty(agvWrkMast) && !emptyAutoIn){ + throw new CoolException("褰撳墠瀹瑰櫒宸叉湁鍏ュ簱浠诲姟锛屾棤娉曡繘琛屽叆搴�"); + } + + //妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅 + AgvLocMast agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor()); + + //鏌ヨ鍏ュ簱閫氱煡妗� + List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectByContainerCode(containerCode); + if(!Cools.isEmpty(agvWaitPakinList)){ + + + String devNo = agvBasDevp.getDevNo(); + String locNo = agvLocMast.getLocNo(); + + //鐢熸垚宸ヤ綔妗� + AgvWrkMast wrkMast = createWrkMast(1,201L,devNo,locNo,containerCode,now,userId, containerType); + //鐢熸垚宸ヤ綔妗f槑缁� + agvWaitPakinList.forEach(wp -> { + createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime()); + }); + //淇敼鍏ュ簱閫氱煡妗g姸鎬� + agvWaitPakinService.updateIoStatus(containerCode,"Y"); + //鏇存柊婧愮珯鐐圭姸鎬� + updateAgvBasDevp(agvBasDevp,"R",containerType); + }else { + // 鐢熸垚宸ヤ綔妗� 10.绌烘澘鍏ュ簱 + createWrkMast(10,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),containerCode,now,userId,containerType); + //鏇存柊婧愮珯鐐圭姸鎬� + updateAgvBasDevp(agvBasDevp,"R",containerType,containerCode); + } + + //鏇存柊鐩爣搴撲綅鐘舵�佸拰淇℃伅 + updateAgvLocMast(agvLocMast,"S"); + return agvLocMast.getLocNo(); + } + + /* + 绌烘澘鍑哄簱 + */ + @Transactional + public void emptyPlateOut(String station, int containerType, Long userId) { + Date now = new Date(); + + // 绔欑偣妫�娴� + AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station); + if(!agvBasDevp.getLocSts().equals("O")){ + throw new CoolException("褰撳墠宸ヤ綔浣嶇姸鎬佷负" + agvBasDevp.getLocSts()+",鏃犳硶杩涜绌烘澘鍑哄簱"); + } + + //瀵绘壘鐩稿簲绫诲瀷鐨勭┖鎵樼洏 + AgvLocMast agvLocMast = agvLocMastService.selectEmptyZpallet(containerType,agvBasDevp.getFloor()); + if(containerType == 0){ + //绌烘澘鑷姩鍑哄簱锛屾牴鎹珯鐐圭被鍨嬮�夋嫨 + agvLocMastService.selectEmptyZpalletByLocType1(agvBasDevp.getLocType1()); + + } + + if (Cools.isEmpty(agvLocMast)) { + throw new CoolException("鏆傛棤褰撳墠鍑哄簱绔欑偣绫诲瀷鐨勭┖鎵樼洏锛�"); + } + //鐢熸垚宸ヤ綔妗� + createWrkMast(110,21L,agvLocMast.getLocNo(),agvBasDevp.getDevNo(),agvLocMast.getBarcode(),now,userId,containerType); + + //淇敼婧愬簱浣嶇姸鎬� + updateAgvLocMast(agvLocMast,"R"); + + //淇敼绔欑偣鐘舵�� + updateAgvBasDevp(agvBasDevp,"S",(short)containerType,agvLocMast.getBarcode()); + + } + @Transactional public void adjustLocDetl(LocDetlAdjustParam param, Long userId) { param.integrate(); - LocMast locMast = locMastService.selectById(param.getLocNo()); + AgvLocMast locMast = agvLocMastService.selectById(param.getLocNo()); if (Cools.isEmpty(locMast)) { throw new CoolException("搴撲綅涓嶅瓨鍦�"); } @@ -777,24 +426,24 @@ } Date now = new Date(); - List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", param.getLocNo())); + List<AgvLocDetl> locDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", param.getLocNo())); List<LocDetlAdjustParam.LocDetlAdjust> list = param.getList(); // 淇敼鏁伴噺 - Iterator<LocDetl> iterator = locDetls.iterator(); + Iterator<AgvLocDetl> iterator = locDetls.iterator(); while (iterator.hasNext()) { - LocDetl locDetl = iterator.next(); + 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.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch()) && Cools.eq(locDetl.getSuppCode(),adjust.getSuppCode()) && Cools.eq(locDetl.getThreeCode(),adjust.getThreeCode()) && Cools.eq(locDetl.getDeadTime(),adjust.getDeadTime())) { if (!locDetl.getAnfme().equals(adjust.getCount())) { // todo 鐩樼偣璁板綍 // 淇敼搴撳瓨 - if (!locDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) { + if (!agvLocDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(),locDetl.getThreeCode(),locDetl.getDeadTime())) { throw new CoolException(locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佷慨鏀规暟閲忓け璐�"); } // 淇濆瓨璋冩暣璁板綍 @@ -808,6 +457,12 @@ adjDetl.setModiUser(userId); adjDetl.setAppeTime(now); adjDetl.setAppeUser(userId); + + adjDetl.setOrderNo(Utils.generateAdjustOrderNo()); + + adjDetl.setCsocode(locDetl.getThreeCode()); + adjDetl.setIsoseq(locDetl.getDeadTime()); + adjDetlService.save(adjDetl, userId); } iterator.remove(); @@ -817,9 +472,9 @@ } // 鍒犻櫎搴撳瓨 - for (LocDetl locDetl : locDetls) { + for (AgvLocDetl locDetl : locDetls) { // todo 鐩樼偣璁板綍 - if (!locDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) { + if (!agvLocDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(),locDetl.getThreeCode(),locDetl.getDeadTime())) { throw new CoolException("鍒犻櫎" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佸簱瀛樻槑缁嗗け璐�"); } // 淇濆瓨璋冩暣璁板綍 @@ -833,6 +488,8 @@ adjDetl.setModiUser(userId); adjDetl.setAppeTime(now); adjDetl.setAppeUser(userId); + adjDetl.setOrderNo(Utils.generateAdjustOrderNo()); + adjDetlService.save(adjDetl, userId); } @@ -840,7 +497,7 @@ for (LocDetlAdjustParam.LocDetlAdjust adjust : list) { if (adjust.getCount() == 0.0D) { continue; } Mat mat = matService.selectByMatnr(adjust.getMatnr()); - LocDetl locDetl = new LocDetl(); + AgvLocDetl locDetl = new AgvLocDetl(); locDetl.sync(mat); locDetl.setBatch(adjust.getBatch()); locDetl.setLocNo(locMast.getLocNo()); @@ -849,7 +506,11 @@ locDetl.setModiTime(now); locDetl.setAppeUser(userId); locDetl.setAppeTime(now); - if (!locDetlService.insert(locDetl)) { + locDetl.setOrderNo(adjust.getOrderNo()); + locDetl.setThreeCode(adjust.getThreeCode()); + locDetl.setDeadTime(adjust.getDeadTime()); + locDetl.setSuppCode(adjust.getSuppCode()); + if (!agvLocDetlService.insert(locDetl)) { throw new CoolException("娣诲姞" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佸簱瀛樻槑缁嗗け璐�"); } // 淇濆瓨璋冩暣璁板綍 @@ -863,10 +524,15 @@ adjDetl.setModiUser(userId); adjDetl.setAppeTime(now); adjDetl.setAppeUser(userId); + + adjDetl.setOrderNo(Utils.generateAdjustOrderNo()); + adjDetl.setCsocode(locDetl.getThreeCode()); + adjDetl.setIsoseq(locDetl.getDeadTime()); + adjDetlService.save(adjDetl, userId); } // 淇敼搴撲綅鐘舵�� - int count = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo())); + int count = agvLocDetlService.selectCount(new EntityWrapper<AgvLocDetl>().eq("loc_no", locMast.getLocNo())); if (locMast.getLocSts().equals("F")) { if (count == 0) { locMast.setLocSts("D"); @@ -879,311 +545,360 @@ } locMast.setModiUser(userId); locMast.setModiTime(new Date()); - if (!locMastService.updateById(locMast)) { + if (!agvLocMastService.updateById(locMast)) { throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�"); } } - @Override @Transactional - public void cancelWrkMast(String workNo, Long userId) { - WrkMast wrkMast = wrkMastService.selectById(workNo); + public void completeWrkMast(String workNo, Long userId) { + AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo); if (Cools.isEmpty(wrkMast)){ throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪"); } - String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣� - String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬� - // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級 - if (wrkMast.getWrkSts() < 9) { - locNo = wrkMast.getLocNo(); - locSts = "O"; - - // 搴撲綅杞Щ - if (wrkMast.getIoType() == 11) { - // 搴撲綅杞Щ锛氭簮搴撲綅 - LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); - if (Cools.isEmpty(locMast)) { - throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛屾簮搴撲綅涓嶅瓨鍦�:"+ wrkMast.getSourceLocNo()); - } - locMast.setLocSts("F"); - locMast.setModiTime(new Date()); - locMast.setModiUser(userId); - locMastService.updateById(locMast); - } - // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛� - } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 19) { - locNo = wrkMast.getSourceLocNo(); - // 鍑哄簱 ===>> F.鍦ㄥ簱 - if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) { - locSts = "F"; - // 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉� - } else if (wrkMast.getIoType() == 110) { - locSts = "D"; - // 搴撲綅杞Щ ===>> D.绌烘《/绌烘爤鏉� - } else if (wrkMast.getIoType() == 11) { - locSts = wrkMast.getFullPlt().equalsIgnoreCase("N")?"D":"F"; - // 搴撲綅杞Щ锛氱洰鏍囧簱浣� - LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); - if (Cools.isEmpty(locMast)) { - throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛岀洰鏍囧簱浣嶄笉瀛樺湪:"+ wrkMast.getSourceLocNo()); - } - locMast.setLocSts("O"); - locMast.setModiTime(new Date()); - locMast.setModiUser(userId); - locMastService.updateById(locMast); - } - } else { - throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�"); - } - // 璁㈠崟鍏宠仈 - List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); - for (WrkDetl wrkDetl : wrkDetls) { - if (!Cools.isEmpty(wrkDetl.getOrderNo())) { - if (!BaseController.isJSON(wrkDetl.getOrderNo())) { - if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) { - throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触"); - } - } else { - // 璁㈠崟鍚堝苟鍑哄簱 - List<OrderDto> orderDtoList = JSON.parseArray(wrkDetl.getOrderNo(), OrderDto.class); - for (OrderDto orderDto : orderDtoList) { - if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderDto.getAnfme())) { - throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触"); - } - } - } - } - } - // 鍙栨秷鎿嶄綔浜哄憳璁板綍 - wrkMast.setManuType("鎵嬪姩鍙栨秷"); - wrkMast.setModiUser(userId); - wrkMast.setModiTime(new Date()); - if (!wrkMastService.updateById(wrkMast)) { - throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐�"); - } - // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� - if (!wrkMastLogService.save(wrkMast.getWrkNo())) { - throw new CoolException("淇濆瓨宸ヤ綔鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo()); - } - // 鍒犻櫎宸ヤ綔涓绘。 - boolean wrkMastRes = wrkMastService.deleteById(wrkMast); - - if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) { - // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。 - if (!wrkDetlLogService.save(wrkMast.getWrkNo())) { -// throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo()); - } - // 鍒犻櫎宸ヤ綔妗f槑缁� - boolean wrkDetlRes = wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo)); - } - - // 淇敼搴撲綅鐘舵�� - LocMast locMast = locMastService.selectById(locNo); - if (Cools.isEmpty(locMast)) { - throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐ワ紝搴撲綅涓嶅瓨鍦�:"+ locNo); - } - locMast.setLocSts(locSts); - locMast.setModiTime(new Date()); - locMast.setModiUser(userId); - boolean locMastRes = locMastService.updateById(locMast); - if (!wrkMastRes || !locMastRes) { - throw new CoolException("淇濆瓨鏁版嵁澶辫触"); - } - } - - @Override - @Transactional - public void pickWrkMast(String workNo, Long userId) { - WrkMast wrkMast = wrkMastService.selectById(workNo); - if (Cools.isEmpty(wrkMast)){ - throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪"); - } - // 鍏ュ嚭搴撶被鍨嬪垽鏂� - if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) { - throw new CoolException("褰撳墠鍏ュ嚭搴撶被鍨嬫棤娉曡繘琛屾搷浣�"); - } - // 宸ヤ綔鐘舵�佸垽鏂� - if (wrkMast.getWrkSts() < 11 || wrkMast.getWrkSts() == 15) { - throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曡繘琛屾搷浣�"); - } - // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。 -// if (!wrkDetlLogService.save(wrkMast.getWrkNo())) { -// throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触"); +// if(!wrkMast.getLocNo().contains("@") || !wrkMast.getSourceLocNo().contains("@")){ +// throw new CoolException("鐩爣搴撲綅鎴栬�呮簮搴撲綅鏆傛湭鍒嗛厤锛屾棤娉曞彇娑�"); // } - // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� - if (!wrkMastLogService.save(wrkMast.getWrkNo())) { - throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�"); + //淇敼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(),wrkMast.getWhsType().shortValue()); } - // 鑾峰彇鐩爣绔� - Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() - .eq("type_no", wrkMast.getIoType() - 50) - .eq("stn_no", wrkMast.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯 - .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿 - StaDesc staDesc = staDescService.selectOne(wrapper); - if (Cools.isEmpty(staDesc)) { - throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�"); + if(wrkMast.getIoType() == 1 || wrkMast.getIoType() == 53 ){ + //淇敼鍑哄簱绔欑偣鐘舵�� + agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getSourceLocNo(),"O","",wrkMast.getWhsType().shortValue()); } - // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�) - Integer staNo = staDesc.getCrnStn(); - // 鏇存柊宸ヤ綔妗f暟鎹姸鎬� - wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57 - wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋 - wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯 - wrkMast.setStaNo(staNo); // 鐩爣绔� - wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣� - wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌� - wrkMast.setModiTime(new Date()); - wrkMast.setModiUser(userId); - if (!wrkMastService.updateById(wrkMast)) { - throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); + //鍑哄簱浠诲姟 110.绌烘澘鍑哄簱 + if(wrkMast.getIoType() == 110){ + agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode(),wrkMast.getWhsType().shortValue()); } - // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴� - LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); - locMast.setLocSts("Q"); - locMast.setModiTime(new Date()); - locMast.setModiUser(userId); - if (!locMastService.updateById(locMast)) { - throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�"); - } + } - @Override - public StartupDto createWaitPainWrkMastStart(List<AgvWaitPakin> list, Long userId) { - return null; - } - - @Override @Transactional - public String dealPreHaveStart(Integer wrkNo, Long userId) { - if (true) { - throw new CoolException("鍔熻兘鍋滅敤"); + public void cancelWrkMast(String workNo, Long userId,Integer type) { + AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo); + if (Cools.isEmpty(wrkMast)){ + throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪"); } - return ""; + //鎷f枡鍏ュ簱 鐩樼偣鍏ュ簱涓嶅彲鍙栨秷 + if(wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57){ + throw new CoolException("褰撳墠浠诲姟涓嶅彲鍙栨秷"); + } + + //鍏ュ簱鍙栨秷 + if(wrkMast.getIoType() == 1 || wrkMast.getIoType() == 10){ + //婧愮珯鐐� + String devNo = wrkMast.getSourceLocNo(); + //鐩爣搴撲綅 + String locNo = wrkMast.getLocNo(); + agvLocMastService.updateLocStsByLocNo(locNo,"O","",null); + agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"F",wrkMast.getBarcode(),wrkMast.getWhsType().shortValue()); + + // 绉诲簱鍙栨秷 + } else if( wrkMast.getIoType() == 11 || wrkMast.getIoType() == 12) { + //婧愬簱浣� + String locNo = wrkMast.getSourceLocNo(); + + // 鐩爣搴撲綅 + String targetLocNo = wrkMast.getLocNo(); + agvLocMastService.updateLocStsByLocNo(locNo,"F",wrkMast.getBarcode(),(short)getContainerTypeByloc(locNo)); + agvLocMastService.updateLocStsByLocNo(targetLocNo,"O","",null); + // 鑷姩璋冩嫧鍑哄簱鍙栨秷 + } else if(wrkMast.getIoType() == 108 || wrkMast.getIoType() == 111) { + // 婧愬簱浣� + String locNo = wrkMast.getSourceLocNo(); + // 鐩爣搴撲綅 + String targetLocNo = wrkMast.getLocNo(); + agvLocMastService.updateLocStsByLocNo(locNo,"F",wrkMast.getBarcode(),(short)getContainerTypeByloc(locNo),"",(short)0); + if (wrkMast.getIoType() == 108) { + agvLocMastService.updateLocStsByLocNo(targetLocNo,"O","",null); + } else { + agvBasDevpService.updateLocStsAndBarcodeByDevNo(targetLocNo,"O","",wrkMast.getWhsType().shortValue()); + } + + List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo)); + // 鏇存柊璁㈠崟 + for (AgvLocDetl agvLocDetl : agvLocDetls) { + OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", "DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode())); + orderDetl.setQty(orderDetl.getQty() - agvLocDetl.getAnfme()); + if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("order_no","DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode()))){ + throw new CoolException("淇敼璁㈠崟鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�"+agvLocDetl.getOrderNo()+agvLocDetl.getMatnr()); + } + } + //鍑哄簱鍙栨秷 + } else { + //婧愬簱浣� + String locNo = wrkMast.getSourceLocNo(); + //鐩爣绔欑偣 + String devNo = wrkMast.getLocNo(); + agvLocMastService.updateLocStsByLocNo(locNo,"F",wrkMast.getBarcode(),(short)getContainerTypeByloc(locNo)); + agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"O","",null); + } + + if(wrkMast.getIoType() != 1 && wrkMast.getIoType() != 10){ + //璁㈠崟鍥炴粴 + //List<AgvWrkDetl> agvWrkDetlList = agvWrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); + List<AgvWrkDetl> agvWrkDetlList1 = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); + agvWrkDetlList1.forEach(agvWrkDetl -> { + + if(!Cools.isEmpty(agvWrkDetl.getOrderNo())){ + String orderNo = agvWrkDetl.getOrderNo(); + if(orderNo.contains("{")){ + JSONArray orderArray = JSON.parseArray(orderNo); + for (Object o : orderArray){ + JSONObject jsonobject = (JSONObject) o; + OrderDetl orderDetl = orderDetlService.selectByOrderNoAndMatnr(jsonobject.get("orderNo").toString(),agvWrkDetl.getMatnr(),agvWrkDetl.getThreeCode(),agvWrkDetl.getDeadTime()); + orderDetl.setQty(orderDetl.getQty() - agvWrkDetl.getAnfme()); + orderDetlService.updateById(orderDetl); + } + + }else { + 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("鍒犻櫎澶辫触锛岃鑱旂郴绠$悊鍛�"); + } + if (type == 2) { + //璋冪敤agv鍙栨秷浠诲姟鎺ュ彛 + agvWrkMastService.callCancelTask(wrkMast.getWrkNo()); + } + + } - @Override - @Transactional - public void shuttleTransfer(List<String> locNos) { - if (Cools.isEmpty(locNos)) { - return; + /* + 鏇存柊鐩爣搴撲綅淇℃伅 + */ + private void updateAgvLocMast(AgvLocMast locMast, String locSts){ + locMast.setLocSts(locSts); + agvLocMastService.updateById(locMast); + } + + /* + 鏇存柊鐩爣搴撲綅淇℃伅鍜屽簱浣嶆墭鐩樼被鍨� + */ + private void updateAgvLocMast(AgvLocMast locMast, String locSts, short type){ + locMast.setLocSts(locSts); + locMast.setLocType2(type); + agvLocMastService.updateById(locMast); + } + + /* + 鏇存柊婧愮珯鐐逛俊鎭� + */ + private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts){ + if(!Cools.isEmpty(agvBasDevp)){ + agvBasDevp.setLocSts(locSts); + agvBasDevpService.updateById(agvBasDevp); } - if (true && !Cools.isEmpty(locNos)) { - throw new CoolException("鏆備笉鏀寔绉诲簱浠诲姟"); // todo:luxiaotao 绉诲簱寮�鍏� + } + + /* + 鏇存柊婧愮珯鐐逛俊鎭拰搴撲綅鎵樼洏绫诲瀷 + */ + private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts, Short continerType){ + if(!Cools.isEmpty(agvBasDevp)){ + agvBasDevp.setLocSts(locSts); + agvBasDevp.setLocType2(continerType); + agvBasDevpService.updateById(agvBasDevp); } - LocMast one = locMastService.selectById(locNos.get(0)); - List<Integer> rows = Utils.getGroupLoc(Integer.parseInt(locNos.get(0).substring(0, 2))); - List<LocMast> locMasts = locMastService.queryFreeLocMast(rows, rows.size(), one.getLocType1()); - if (Cools.isEmpty(locMasts)) { - throw new CoolException("搴撲綅绉昏浆澶辫触锛屽凡鏃犵┖搴撲綅"); + } + + private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts, Short continerType, String containerCode){ + if(!Cools.isEmpty(agvBasDevp)){ + agvBasDevp.setLocSts(locSts); + agvBasDevp.setLocType2(continerType); + agvBasDevp.setBarcode(containerCode); + agvBasDevpService.updateById(agvBasDevp); } - // 鍏ュ簱鎺掑簭 娣卞簱浣� ==> 娴呭簱浣� - switch (locMasts.get(0).getRow1()) { - case 4: - case 5: - case 6: - case 7: - case 12: - case 13: - case 14: - case 19: - case 20: - case 21: - Collections.reverse(locMasts); - break; - default: - break; + } + + /* + 鐢熸垚宸ヤ綔妗f槑缁� + */ + 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 + "鍟嗗搧缁存姢澶辫触"); } - if (locNos.size() > locMasts.size()) { - throw new CoolException("鏈嶅姟鍣ㄩ敊璇�"); + 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(); - // 鐢熸垚绉诲簱宸ヤ綔妗� - Iterator<LocMast> iterator = locMasts.iterator(); - for (String sourceLocNo : locNos) { + agvWaitPakinList.stream().forEach(agvWaitPakin -> { + Mat mat = matService.selectByMatnr(agvWaitPakin.getMatnr()); + if (Cools.isEmpty(mat)) { + throw new CoolException(agvWaitPakin.getMatnr() + "鍟嗗搧缁存姢澶辫触"); + } + AgvWrkDetl wrkDetl = new AgvWrkDetl(); + wrkDetl.sync(mat); + wrkDetl.setWrkNo(wrkMast.getWrkNo()); + wrkDetl.setOrderNo(agvWaitPakin.getOrderNo()); + wrkDetl.setIoTime(now); + wrkDetl.setBatch(agvWaitPakin.getBatch()); + wrkDetl.setAnfme(agvWaitPakin.getAnfme()); // 鏁伴噺 + wrkDetl.setZpallet(agvWaitPakin.getZpallet()); // 鎵樼洏鏉$爜 + wrkDetl.setAppeUser(userId); + wrkDetl.setAppeTime(now); + wrkDetl.setModiUser(userId); + wrkDetl.setModiTime(now); + if (!agvWrkDetlService.insert(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触"); + } + }); + } - while (iterator.hasNext()) { - LocMast sourceLoc = locMastService.selectById(sourceLocNo); - List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo)); - if (Cools.isEmpty(sourceLoc)){ - throw new CoolException("鏈壘鍒板簱浣�"); - } - LocMast loc = iterator.next(); - if (Cools.isEmpty(loc)){ - throw new CoolException("鏈壘鍒板簱浣�"); - } - if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) { -// throw new CoolException("绉昏浆搴撲綅灞炰簬涓嶅悓鍫嗗灈鏈�"); todo:luxiaotao - } - // 鑾峰彇宸ヤ綔鍙� - int workNo = commonService.getWorkNo(WorkNoType.PICK.type); - // 淇濆瓨宸ヤ綔妗� - WrkMast wrkMast = new WrkMast(); - wrkMast.setWrkNo(workNo); - wrkMast.setIoTime(now); - wrkMast.setWrkSts(21L); // 宸ヤ綔鐘舵�侊細21.鐢熸垚鍑哄簱浠诲姟 - wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇 - wrkMast.setIoPri(15D); - wrkMast.setOutMost(locMastService.isOutMost(loc.getLocNo(), false)?1:0);; - wrkMast.setCrnNo(sourceLoc.getCrnNo()); - wrkMast.setSourceLocNo(sourceLocNo); // 婧愬簱浣� - wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅 - wrkMast.setFullPlt(Cools.isEmpty(locDetls)?"N":"Y"); // 婊℃澘锛歒 - wrkMast.setPicking("N"); // 鎷f枡 - wrkMast.setExitMk("N"); // 閫�鍑� - wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D")?"Y":"N"); // 绌烘澘 - wrkMast.setBarcode(sourceLoc.getBarcode()); // 鎵樼洏鐮� - wrkMast.setLinkMis("N"); - wrkMast.setAppeUser(9527L); - wrkMast.setAppeTime(now); - wrkMast.setModiUser(9527L); - wrkMast.setModiTime(now); - boolean res = wrkMastService.insert(wrkMast); - if (!res) { - throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); - } - // 宸ヤ綔妗f槑缁嗕繚瀛� - for (LocDetl locDetl : locDetls) { - WrkDetl wrkDetl = new WrkDetl(); - wrkDetl.sync(locDetl); - wrkDetl.setWrkNo(workNo); - wrkDetl.setIoTime(now); - wrkDetl.setAnfme(locDetl.getAnfme()); - wrkDetl.setAppeTime(now); - wrkDetl.setAppeUser(9527L); - wrkDetl.setModiTime(now); - wrkDetl.setModiUser(9527L); - if (!wrkDetlService.insert(wrkDetl)) { - throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); - } - } - // 淇敼婧愬簱浣嶇姸鎬� - if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) { - sourceLoc.setLocSts("R"); // R.鍑哄簱棰勭害 - sourceLoc.setModiUser(9527L); - sourceLoc.setModiTime(now); - if (!locMastService.updateById(sourceLoc)){ - throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�"); - } - } else { - throw new CoolException(sourceLoc.getLocNo() + "婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細"+sourceLoc.getLocSts$()); - } - // 淇敼鐩爣搴撲綅鐘舵�� - if (loc.getLocSts().equals("O")) { - loc.setLocSts("S"); // S.鍏ュ簱棰勭害 - loc.setModiTime(now); - loc.setModiUser(9527L); - if (!locMastService.updateById(loc)) { - throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�"); - } - } else { - throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細"+loc.getLocSts$()); + /* + 鐢熸垚宸ヤ綔妗� + */ + private AgvWrkMast createWrkMast(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode, Date now, Long userId, int containerType){ + AgvWrkMast wrkMast = new AgvWrkMast(); + //宸ヤ綔鐘舵�� + wrkMast.setWrkSts(wrkSts); + //鍏ュ嚭搴撶被鍨� + wrkMast.setIoType(ioType); + wrkMast.setIoTime(now); + //浼樺厛绾� + wrkMast.setIoPri(300.0); + //婧愮珯鐐� + wrkMast.setSourceLocNo(sourceLocNo); + //鐩爣绔欑偣 + wrkMast.setLocNo(locNo); + //瀹瑰櫒缂栫爜 + wrkMast.setBarcode(barcode); + //瀹瑰櫒绫诲瀷 + wrkMast.setWhsType(containerType); + + wrkMast.setAppeUser(userId); + wrkMast.setAppeTime(now); + wrkMast.setModiUser(userId); + wrkMast.setModiTime(now); + + if (!agvWrkMastService.insertByIncrease(wrkMast)) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + } + + //鏆傚瓨浣嶄换鍔�+1 + addInQty(locNo); + + wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locNo).eq("source_loc_no",sourceLocNo)); + + return wrkMast; + } + + private boolean isPakOut(String locNo, TaskDto taskDto){ + Double allAnfme = agvLocDetlService.selectSumAnfmeByLocNo(locNo); + Double pakOutAnfme = 0.0; + for (LocDto locDto : taskDto.getLocDtos()){ + pakOutAnfme += locDto.getAnfme(); + } + + if(allAnfme > pakOutAnfme){ + 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(),locDto.getCsocode(),locDto.getIsoseq()); + if (orderDetl == null) { + orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null,locDto.getCsocode(),locDto.getIsoseq()); + } + if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme(),locDto.getCsocode(),locDto.getIsoseq())) { + 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(),locDto.getCsocode(),locDto.getIsoseq()); + if (orderDetl == null) { + orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), null,locDto.getCsocode(),locDto.getIsoseq()); } - iterator.remove(); - break; + orderAnfme = orderDetl.getAnfme() - orderDetl.getQty(); + + if(locAnfme > orderAnfme){ + locAnfme -= orderAnfme; + }else { + orderAnfme = locAnfme; + } + + if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderAnfme,orderDetl.getThreeCode(),orderDetl.getDeadTime())) { + throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触"); + } + orderService.updateSettle(orderDetl.getOrderId(), 2L, userId); } } } + private void addInQty(String devno){ + AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devno); + if(!Cools.isEmpty(agvBasDevp)){ + if(Cools.isEmpty(agvBasDevp.getInQty())){ + agvBasDevp.setInQty(1); + }else { + agvBasDevp.setInQty(agvBasDevp.getInQty() + 1); + } + } + } + + private int getContainerTypeByloc(String locNo){ + + return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no",locNo)).getLocType2(); + + } + } -- Gitblit v1.9.1