From 1b576a30a84b8b57f5b7d7a22424f9fc08d08516 Mon Sep 17 00:00:00 2001 From: xjj <xjj@123> Date: 星期二, 27 二月 2024 13:03:56 +0800 Subject: [PATCH] # --- zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WorkServiceImpl.java | 742 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 741 insertions(+), 1 deletions(-) diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WorkServiceImpl.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WorkServiceImpl.java index dffe8f5..ee20d56 100644 --- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WorkServiceImpl.java +++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WorkServiceImpl.java @@ -1,8 +1,28 @@ package com.zy.asrs.common.wms.service.impl; -import com.zy.asrs.common.wms.service.WorkService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zy.asrs.common.domain.dto.*; +import com.zy.asrs.common.domain.entity.StaDesc; +import com.zy.asrs.common.domain.enums.IoWorkType; +import com.zy.asrs.common.domain.enums.WorkNoType; +import com.zy.asrs.common.domain.param.FullStoreParam; +import com.zy.asrs.common.domain.param.LocDetlAdjustParam; +import com.zy.asrs.common.domain.param.StockOutParam; +import com.zy.asrs.common.sys.service.StaDescService; +import com.zy.asrs.common.utils.Utils; +import com.zy.asrs.common.wms.entity.*; +import com.zy.asrs.common.wms.service.*; +import com.zy.asrs.framework.common.BaseRes; +import com.zy.asrs.framework.common.Cools; +import com.zy.asrs.framework.exception.CoolException; 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; /** * Created by vincent on 2020/6/11 @@ -11,4 +31,724 @@ @Service public class WorkServiceImpl implements WorkService { + @Autowired + private BasDevpService basDevpService; + @Autowired + private CommonService commonService; + @Autowired + private WrkMastService wrkMastService; + @Autowired + private WrkDetlService wrkDetlService; + @Autowired + private LocMastService locMastService; + @Autowired + private MatService matService; + @Autowired + private OrderDetlService orderDetlService; + @Autowired + private WrkMastLogService wrkMastLogService; + @Autowired + private WrkDetlLogService wrkDetlLogService; + @Autowired + private StaDescService staDescService; + @Autowired + private LocDetlService locDetlService; + @Autowired + private AdjDetlService adjDetlService; + @Autowired + private OrderService orderService; + + @Override + @Transactional + public String startupFullPutStore(FullStoreParam param, Long userId, Long hostId) { + // 鍙傛暟闈炵┖鍒ゆ柇 + if (Cools.isEmpty(param.getDevpNo(), param.getList())) { + throw new CoolException(BaseRes.PARAM); + } + Date now = new Date(); + LocTypeDto locTypeDto = new LocTypeDto(); + locTypeDto.setLocType1(param.getLocType1()); + locTypeDto.setLocRangeDto(param.getLocRangeDto()); + List<String> matnrs = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatnr).distinct().collect(Collectors.toList()); + String batch = param.getList().get(0).getBatch(); + StartupDto dto = commonService.getLocNo(1, param.getDevpNo(), matnrs, batch, hostId, locTypeDto, 0); + // 鐢熸垚宸ヤ綔鍙� + int workNo = dto.getWorkNo(); + // 鐢熸垚宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(now); + wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱 + wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱 + wrkMast.setIoPri(13D); // 浼樺厛绾э細13 + 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.setAppeUser(String.valueOf(userId)); + wrkMast.setAppeTime(now); + wrkMast.setModiUser(String.valueOf(userId)); + wrkMast.setModiTime(now); + wrkMast.setHostId(hostId); + if (!wrkMastService.save(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); + } + }); + + for (DetlDto detlDto : detlDtos) { + Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, detlDto.getMatnr()).eq(Mat::getHostId, hostId)); + if (Cools.isEmpty(mat)){ + throw new CoolException(detlDto.getMatnr() + "鍟嗗搧缁存姢澶辫触"); + } + // 淇濇寔宸ヤ綔妗f槑缁� + WrkDetl wrkDetl = new WrkDetl(); + wrkDetl.sync(mat); + wrkDetl.setWrkNo(workNo); + wrkDetl.setIoTime(now); + wrkDetl.setBatch(detlDto.getBatch()); + wrkDetl.setAnfme(detlDto.getAnfme()); // 鏁伴噺 + wrkDetl.setZpallet(param.getBarcode()); // 鎵樼洏鏉$爜 + wrkDetl.setAppeUser(userId); + wrkDetl.setAppeTime(now); + wrkDetl.setModiUser(userId); + wrkDetl.setModiTime(now); + wrkDetl.setWrkMastId(wrkMast.getId()); + if (!wrkDetlService.save(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触"); + } + } + + // 鏇存柊鐩爣搴撲綅鐘舵�� + LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, dto.getLocNo()).eq(LocMast::getHostId, hostId)); + 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(); + } + + @Override + @Transactional + public void startupFullTakeStore(StockOutParam param, Long userId, Long hostId) { + // 鑾峰彇搴撲綅鏄庣粏 + 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(), hostId); + if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount())); + } + } + if (!locDetlDtos.isEmpty()) { + // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱 + stockOut(param.getOutSite(), locDetlDtos, null, userId, hostId); + } else { + throw new CoolException("搴撳瓨涓嶅瓨鍦�"); + } + } + + @Override + @Transactional + public void stockOut(Integer staNo, List<LocDetlDto> locDetlDtos, IoWorkType ioWorkType, Long userId, Long hostId) { + 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, hostId)); + } + } + Integer ioType = null; + // 鐢熸垚宸ヤ綔妗� + for (OutLocDto dto : dtos) { + // 鍒ゆ柇鍏ュ嚭搴撶被鍨嬶細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.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, dto.getLocNo()).eq(LocMast::getHostId, hostId)); + // 鑾峰彇璺緞 + StaDesc staDesc = staDescService.getOne(new LambdaQueryWrapper<StaDesc>().eq(StaDesc::getTypeNo, ioType).eq(StaDesc::getDeviceStn, staNo).eq(StaDesc::getHostId, hostId)); + // 鐢熸垚宸ヤ綔鍙� + int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); + // 鐢熸垚宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(now); + wrkMast.setWrkSts(101L); // 宸ヤ綔鐘舵�侊細101.鐢熸垚鍑哄簱 + wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬� + wrkMast.setIoPri(13D); // 浼樺厛绾э細13 + wrkMast.setSourceStaNo(staDesc.getDeviceStn()); // 婧愮珯 + wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔� + wrkMast.setSourceLocNo(dto.getLocNo()); // 婧愬簱浣� + wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk("N"); // 绌烘澘 + wrkMast.setBarcode(locMast.getBarcode()); + wrkMast.setAppeUser(String.valueOf(userId)); // 鎿嶄綔浜哄憳鏁版嵁 + wrkMast.setAppeTime(now); + wrkMast.setModiUser(String.valueOf(userId)); + wrkMast.setModiTime(now); + wrkMast.setHostId(hostId); + if (!wrkMastService.save(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); + wrkDetl.setHostId(hostId); + wrkDetl.setWrkMastId(wrkMast.getId()); + if (!wrkDetlService.save(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); + } + } + // 淇敼搴撲綅鐘舵��: F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓� + locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, dto.getLocNo()).eq(LocMast::getHostId, hostId)); + 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() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��"); + } + } + } + + @Override + @Transactional + public void stockOut(Integer staNo, TaskDto taskDto, Long userId, Long hostId) { + 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.getOne(new LambdaQueryWrapper<LocMast>() + .eq(LocMast::getLocNo, taskDto.getLocNo()) + .eq(LocMast::getHostId, hostId)); + // 鑾峰彇璺緞 + int ioType = taskDto.isAll() ? 101 : 103; + // 鑾峰彇璺緞 + StaDesc staDesc = staDescService.getOne(new LambdaQueryWrapper<StaDesc>().eq(StaDesc::getTypeNo, ioType).eq(StaDesc::getDeviceStn, staNo).eq(StaDesc::getHostId, hostId)); + // 鐢熸垚宸ヤ綔鍙� + int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); + // 鐢熸垚宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(now); + wrkMast.setWrkSts(101L); // 宸ヤ綔鐘舵�侊細101.鐢熸垚鍑哄簱 + wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬� + wrkMast.setIoPri(13D); // 浼樺厛绾э細13 + wrkMast.setSourceStaNo(staDesc.getDeviceStn()); // 婧愮珯 + wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔� + wrkMast.setSourceLocNo(taskDto.getLocNo()); // 婧愬簱浣� + wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk("N"); // 绌烘澘 + wrkMast.setBarcode(locMast.getBarcode()); + wrkMast.setAppeUser(String.valueOf(userId)); // 鎿嶄綔浜哄憳鏁版嵁 + wrkMast.setAppeTime(now); + wrkMast.setModiUser(String.valueOf(userId)); + wrkMast.setModiTime(now); + wrkMast.setHostId(hostId); + if (!wrkMastService.save(wrkMast)) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細"+taskDto.getLocNo()); + } + // 鐢熸垚宸ヤ綔妗f槑缁� + for (LocDto locDto : taskDto.getLocDtos()) { + if (locDto.getAnfme()==null || locDto.getAnfme() <= 0.0D) { continue; } + Order order = orderService.getOne(new LambdaQueryWrapper<Order>() + .eq(Order::getOrderNo, locDto.getOrderNo()) + .eq(Order::getHostId, hostId)); + OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), locDto.getMatnr(), locDto.getBatch()); + if (orderDetl == null) { + orderDetl = orderDetlService.selectItem(order.getId(), locDto.getMatnr(), null); + } + LocDetl locDetl = locDetlService.selectItem(locDto.getLocNo(), locDto.getMatnr(), locDto.getBatch(), hostId); + if (locDetl == null || locDetl.getAnfme() < locDto.getAnfme()) { + throw new CoolException(locDto.getLocNo() + "搴撲綅涓�" + locDto.getMatnr() + "鍟嗗搧搴撳瓨涓嶈冻锛�"); + } + WrkDetl wrkDetl = new WrkDetl(); + wrkDetl.sync(orderDetl); + 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); + wrkDetl.setHostId(hostId); + wrkDetl.setWrkMastId(wrkMast.getId()); + if (!wrkDetlService.save(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); + } + // 淇敼璁㈠崟鏄庣粏 + if (!orderDetlService.increase(orderDetl.getOrderId(), hostId, orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) { + throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触"); + } + orderService.updateSettle(orderDetl.getOrderId(), 2L, userId, hostId); + } + // 淇敼搴撲綅鐘舵��: F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓� + locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>() + .eq(LocMast::getLocNo, taskDto.getLocNo()) + .eq(LocMast::getHostId, hostId)); + 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() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��"); + } + } + + @Override + @Transactional + public void completeWrkMast(String workNo, Long userId, Long hostId) { + WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getWrkNo, workNo).eq(WrkMast::getHostId, hostId)); + if (Cools.isEmpty(wrkMast)){ + throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪"); + } + if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) { + throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚"); + } + // 鍏ュ簱 + 搴撲綅杞Щ + if (wrkMast.getWrkSts() < 99 || (wrkMast.getWrkSts() > 100 && wrkMast.getIoType()==11)) { + wrkMast.setWrkSts(99L);//99.鍏ュ簱瀹屾垚 + // 鍑哄簱 + } else if (wrkMast.getWrkSts() > 100) { + wrkMast.setWrkSts(199L);//199.鍑哄簱瀹屾垚 + } + Date now = new Date(); + wrkMast.setModiTime(now); + wrkMast.setModiUser(String.valueOf(userId)); + // 瀹屾垚鎿嶄綔浜哄憳璁板綍 + wrkMast.setManuType("鎵嬪姩瀹屾垚"); + if (!wrkMastService.updateById(wrkMast)) { + throw new CoolException("淇敼宸ヤ綔妗eけ璐�"); + } + } + + @Override + @Transactional + public void cancelWrkMast(String workNo, Long userId, Long hostId) { + WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getWrkNo, workNo).eq(WrkMast::getHostId, hostId)); + if (Cools.isEmpty(wrkMast)) { + throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪"); + } + String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣� + String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬� + // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級 + if (wrkMast.getWrkSts() < 99) { + locNo = wrkMast.getLocNo(); + locSts = "O"; + + // 搴撲綅杞Щ + if (wrkMast.getIoType() == 11) { + // 搴撲綅杞Щ锛氭簮搴撲綅 + LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, wrkMast.getSourceLocNo()).eq(LocMast::getHostId, hostId)); + 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() > 100 && wrkMast.getWrkSts() != 199) { + 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.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, wrkMast.getLocNo()).eq(LocMast::getHostId, hostId)); + 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.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId)); + for (WrkDetl wrkDetl : wrkDetls) { + if (!Cools.isEmpty(wrkDetl.getOrderNo())) { + if (!orderDetlService.decrease(wrkDetl.getOrderNo(), hostId, wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) { + throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触"); + } + } + } + // 鍙栨秷鎿嶄綔浜哄憳璁板綍 + wrkMast.setManuType("鎵嬪姩鍙栨秷"); + wrkMast.setModiUser(String.valueOf(userId)); + wrkMast.setModiTime(new Date()); + if (!wrkMastService.updateById(wrkMast)) { + throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐�"); + } + // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� + if (!wrkMastLogService.saveToHistory(wrkMast.getId())) { + throw new CoolException("淇濆瓨宸ヤ綔鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo()); + } + // 鍒犻櫎宸ヤ綔涓绘。 + boolean wrkMastRes = wrkMastService.removeById(wrkMast); + + if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) { + // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。 + if (!wrkDetlLogService.saveToHistory(wrkMast.getWrkNo(), hostId)) { + throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo()); + } + // 鍒犻櫎宸ヤ綔妗f槑缁� + boolean wrkDetlRes = wrkDetlService.remove(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, workNo).eq(WrkDetl::getHostId, hostId)); + } + + // 淇敼搴撲綅鐘舵�� + LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, locNo).eq(LocMast::getHostId, hostId)); + 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, Long hostId) { + WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getWrkNo, workNo).eq(WrkMast::getHostId, hostId)); + 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() < 101 || wrkMast.getWrkSts() == 200) { + throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曡繘琛屾搷浣�"); + } + // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。 +// if (!wrkDetlLogService.save(wrkMast.getWrkNo())) { +// throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触"); +// } + // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� + if (!wrkMastLogService.saveToHistory(wrkMast.getId())) { + throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�"); + } + // 鑾峰彇鐩爣绔� + LambdaQueryWrapper<StaDesc> wrapper = new LambdaQueryWrapper<StaDesc>() + .eq(StaDesc::getTypeNo, wrkMast.getIoType() - 50) + .eq(StaDesc::getStnNo, wrkMast.getStaNo()); // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯 + StaDesc staDesc = staDescService.getOne(wrapper); + if (Cools.isEmpty(staDesc)) { + throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�"); + } + // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�) + Integer staNo = staDesc.getDeviceStn(); + Date now = new Date(); + // 鏇存柊宸ヤ綔妗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(now); + wrkMast.setModiUser(String.valueOf(userId)); + if (!wrkMastService.updateById(wrkMast)) { + throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); + } + // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴� + LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, wrkMast.getLocNo()).eq(LocMast::getHostId, hostId)); + locMast.setLocSts("Q"); + locMast.setModiTime(now); + locMast.setModiUser(userId); + if (!locMastService.updateById(locMast)) { + throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�"); + } + } + + @Override + @Transactional + public void adjustLocDetl(LocDetlAdjustParam param, Long userId, Long hostId) { + param.integrate(); + LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, param.getLocNo()).eq(LocMast::getHostId, hostId)); + 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<LocDetl> locDetls = locDetlService.list(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocNo, param.getLocNo()).eq(LocDetl::getHostId, hostId)); + + List<LocDetlAdjustParam.LocDetlAdjust> list = param.getList(); + + // 淇敼鏁伴噺 + Iterator<LocDetl> iterator = locDetls.iterator(); + while (iterator.hasNext()) { + LocDetl 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 (!locDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), hostId)) { + 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); + adjDetl.setHostId(hostId); + adjDetlService.save(adjDetl); + } + iterator.remove(); + iterator1.remove(); + } + } + } + + // 鍒犻櫎搴撳瓨 + for (LocDetl locDetl : locDetls) { + // todo 鐩樼偣璁板綍 + if (!locDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), hostId)) { + 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); + adjDetl.setHostId(hostId); + adjDetlService.save(adjDetl); + } + + // 娣诲姞搴撳瓨 + for (LocDetlAdjustParam.LocDetlAdjust adjust : list) { + if (adjust.getCount() == 0.0D) { continue; } + Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, adjust.getMatnr()).eq(Mat::getHostId, hostId)); + LocDetl locDetl = new LocDetl(); + 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.setHostId(hostId); + if (!locDetlService.save(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); + adjDetl.setHostId(hostId); + adjDetlService.save(adjDetl); + } + // 淇敼搴撲綅鐘舵�� + int count = locDetlService.count(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocNo, locMast.getLocNo()).eq(LocDetl::getHostId, hostId)); + 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 (!locMastService.updateById(locMast)) { + throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�"); + } + } + + @Override + @Transactional + public void locMove(String sourceLocNo, String locNo, Long userId, Long hostId) { + LocMast sourceLoc = locMastService.getOne(new LambdaQueryWrapper<LocMast>() + .eq(LocMast::getLocNo, sourceLocNo) + .eq(LocMast::getHostId, hostId)); + List<LocDetl> locDetls = locDetlService.list(new LambdaQueryWrapper<LocDetl>() + .eq(LocDetl::getLocNo, sourceLocNo) + .eq(LocDetl::getHostId, hostId)); + if (Cools.isEmpty(sourceLoc)){ + throw new CoolException("鏈壘鍒板簱浣�"); + } + LocMast loc = locMastService.getOne(new LambdaQueryWrapper<LocMast>() + .eq(LocMast::getLocNo, locNo) + .eq(LocMast::getHostId, hostId)); + if (Cools.isEmpty(loc)){ + throw new CoolException("鏈壘鍒板簱浣�"); + } + if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) { +// throw new CoolException("绉昏浆搴撲綅灞炰簬涓嶅悓鍫嗗灈鏈�"); todo:luxiaotao + } + Date now = new Date(); + // 鑾峰彇宸ヤ綔鍙� + int workNo = commonService.getWorkNo(WorkNoType.PICK.type); + // 淇濆瓨宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(now); + wrkMast.setWrkSts(101L); // 宸ヤ綔鐘舵�侊細101.鐢熸垚鍑哄簱浠诲姟 + wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇 + wrkMast.setIoPri(10D); + 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.setAppeUser(String.valueOf(userId)); + wrkMast.setAppeTime(now); + wrkMast.setModiUser(String.valueOf(userId)); + wrkMast.setModiTime(now); + wrkMast.setHostId(hostId); + boolean res = wrkMastService.save(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); + wrkDetl.setHostId(hostId); + wrkDetl.setWrkMastId(wrkMast.getId()); + if (!wrkDetlService.save(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); + } + } + // 淇敼婧愬簱浣嶇姸鎬� + 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$()); + } + } } -- Gitblit v1.9.1