From e046dba174365eb8934ee1e4206f09821145e876 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期四, 21 八月 2025 13:23:22 +0800
Subject: [PATCH] no message

---
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java |  266 ++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 213 insertions(+), 53 deletions(-)

diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java
index ff53c59..5b25040 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java
@@ -1,11 +1,17 @@
 package com.zy.asrs.wms.asrs.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zy.asrs.framework.common.R;
 import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wms.apis.wcs.entity.request.SlapLightControlParam;
+import com.zy.asrs.wms.apis.wcs.entity.response.CommonReponse;
+import com.zy.asrs.wms.apis.wcs.utils.HttpEssUtils;
 import com.zy.asrs.wms.asrs.entity.*;
+import com.zy.asrs.wms.asrs.entity.dto.MatnrDetlDto;
 import com.zy.asrs.wms.asrs.entity.dto.PickSheetDetlDto;
 import com.zy.asrs.wms.asrs.entity.dto.ShippingOrderDetlDto;
 import com.zy.asrs.wms.asrs.entity.enums.*;
@@ -18,6 +24,7 @@
 import com.zy.asrs.wms.system.entity.Host;
 import com.zy.asrs.wms.system.service.HostService;
 import io.netty.util.internal.StringUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -28,6 +35,7 @@
 import java.util.stream.Collectors;
 
 @Service
+@Slf4j
 public class MobileServiceImpl implements MobileService {
 
     @Autowired
@@ -76,23 +84,23 @@
     @Autowired
     private OrderDetlMapper orderDetlMapper;
     @Autowired
-    private WaveSeedMapper waveSeedMapper;
+    private WaveSeedService waveSeedMapper;
     @Autowired
     private WaveSeedLogService waveSeedLogService;
     @Autowired
     private OrderDetlLogService orderDetlLogService;
-
     @Autowired
     private PlatformDetlService platformDetlService;
     @Autowired
     private PlatformDetlLogService platformDetlLogService;
 
 
-
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean batchMergeOrders(BatchMergeOrdersParam ordersParam) {
-        Loc locServiceOne = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, ordersParam.getMergeNo()), false);
+        Loc locServiceOne = locService.getOne(new LambdaQueryWrapper<Loc>()
+                .eq(Loc::getLocStsId, 1)
+                .eq(Loc::getBarcode, ordersParam.getMergeNo()), false);
         if (!Objects.isNull(locServiceOne)) {
             throw new CoolException("鎵樼洏宸插叆搴擄紝涓嶈兘鍐嶇粍鎵橈紒锛�");
         }
@@ -119,7 +127,7 @@
 
         //缁勬嫋閫氱煡妗�
         waitPakins.forEach(pakin -> {
-            waitPakinService.comb(pakin);
+            waitPakinService.comb(pakin, ordersParam.getInType());
         });
 
 
@@ -231,12 +239,12 @@
         orders.forEach(order -> {
             List<OrderDetl> detls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderId, order.getId()));
             Double sum = detls.stream().mapToDouble(OrderDetl::getQty).sum();
-            Double summed = detls.stream().mapToDouble(OrderDetl::getWorkQty).sum();
-            Double v = Math.round((sum + summed) * 1000) / 1000.0;
+//            Double summed = detls.stream().mapToDouble(OrderDetl::getWorkQty).sum();
+//            Double v = Math.round((sum ) * 1000) / 1000.0;
             Double anfme = detls.stream().mapToDouble(OrderDetl::getAnfme).sum();
-            if (v.compareTo(anfme) == 0.0) {
+            if (sum.compareTo(anfme) == 0.0) {
                 order.setOrderSettle(OrderSettleType.COMPLETE.val());
-                if (! orderService.updateById(order)) {
+                if (!orderService.updateById(order)) {
                     throw new CoolException("鍗曟嵁鐘舵�佷慨鏀瑰け璐ワ紒锛�");
                 }
             }
@@ -319,7 +327,7 @@
             pickSheet.setStatus(3);
             if (!pickSheetService.updateById(pickSheet)) {
                 throw new CoolException("杞巻鍙叉。澶辫触锛侊紒");
-            } else{
+            } else {
                 if (!pickSheetDetlService.update(new LambdaUpdateWrapper<PickSheetDetl>().eq(PickSheetDetl::getPickId, pickSheet.getId()).set(PickSheetDetl::getStatus, 3))) {
                     throw new CoolException("鎷h揣鍗曟槑缁嗚浆鍘嗗彶妗eけ璐ワ紒锛�");
                 }
@@ -366,27 +374,30 @@
                 }
             }
         });
+        
+        //鍒ゆ柇鏄惁涓烘尝娆″崟鎹�
+        if (pickSheet.getType().equals(1)) {
+            //鍒犻櫎娉㈡鍙婂搴旀槑缁嗕俊鎭�
+            if (!waveService.remove(new LambdaQueryWrapper<Wave>().eq(Wave::getId, pickSheet.getWaveId()))) {
+                throw new CoolException("娉㈡鍒楄〃鍗曟嵁鍒犻櫎澶辫触锛侊紒");
+            }
 
-        //鍒犻櫎娉㈡鍙婂搴旀槑缁嗕俊鎭�
-        if (!waveService.remove(new LambdaQueryWrapper<Wave>().eq(Wave::getId, pickSheet.getWaveId()))) {
-            throw new CoolException("娉㈡鍒楄〃鍗曟嵁鍒犻櫎澶辫触锛侊紒");
-        }
+            if (!waveDetlService.remove(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, pickSheet.getWaveId()))) {
+                throw new CoolException("娉㈡鏄庣粏鍒楄〃鍒犻櫎澶辫触锛侊紒");
+            }
 
-        if (!waveDetlService.remove(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, pickSheet.getWaveId()))) {
-            throw new CoolException("娉㈡鏄庣粏鍒楄〃鍒犻櫎澶辫触锛侊紒");
-        }
-
-        List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getWaveId, pickSheet.getWaveId()));
-        if (orders.isEmpty()) {
-            throw new CoolException("娉㈡璁㈠崟涓嶅瓨鍦紒锛�");
-        }
-        List<Long> list = orders.stream().map(Order::getId).collect(Collectors.toList());
-        boolean remove = orderDetlService.remove(new LambdaQueryWrapper<OrderDetl>().in(OrderDetl::getOrderId, list));
-        if (!remove) {
-            throw new CoolException("鍘熷璁㈠崟鏄庣粏鍒犻櫎澶辫触锛侊紒");
-        }
-        if (!orderService.remove(new LambdaQueryWrapper<Order>().in(Order::getId, list))) {
-            throw new CoolException("鍘熷璁㈠崟鍒犻櫎澶辫触锛侊紒");
+            List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getWaveId, pickSheet.getWaveId()));
+            if (orders.isEmpty()) {
+                throw new CoolException("娉㈡璁㈠崟涓嶅瓨鍦紒锛�");
+            }
+            List<Long> list = orders.stream().map(Order::getId).collect(Collectors.toList());
+            boolean remove = orderDetlService.remove(new LambdaQueryWrapper<OrderDetl>().in(OrderDetl::getOrderId, list));
+            if (!remove) {
+                throw new CoolException("鍘熷璁㈠崟鏄庣粏鍒犻櫎澶辫触锛侊紒");
+            }
+            if (!orderService.remove(new LambdaQueryWrapper<Order>().in(Order::getId, list))) {
+                throw new CoolException("鍘熷璁㈠崟鍒犻櫎澶辫触锛侊紒");
+            }
         }
 
         return true;
@@ -394,6 +405,7 @@
 
     /**
      * 鑾峰彇鎾澧欑珯鐐�
+     *
      * @return
      */
     @Override
@@ -403,13 +415,15 @@
 
     /**
      * 璁㈠崟缁戝畾鎾澧欑珯鐐�+
+     *
      * @param param
      * @return
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean bindOrderBySite(Map<String, Object> param) {
-        CacheSite siteNo = cacheSiteMapper.selectOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getSiteNo, param.get("siteNo")), false);
+        CacheSite siteNo = cacheSiteMapper.selectOne(new LambdaQueryWrapper<CacheSite>()
+                .eq(CacheSite::getSiteNo, param.get("siteNo")), false);
         if (Objects.isNull(siteNo)) {
             throw new CoolException("绔欑偣寮傚父锛侊紒");
         }
@@ -417,7 +431,8 @@
             if (!StringUtil.isNullOrEmpty(siteNo.getOrderNo())) {
                 throw new CoolException("褰撳墠鎾绔欑偣宸茬粦瀹氳鍗曪紒锛�");
             }
-            Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, param.get("orderNo").toString()));
+            Order order = orderService.getOne(new LambdaQueryWrapper<Order>()
+                    .eq(Order::getOrderNo, param.get("orderNo").toString()));
             if (Objects.isNull(order)) {
                 throw new CoolException("缁戝畾璁㈠崟涓嶅瓨鍦紒锛�");
             }
@@ -425,28 +440,68 @@
                     .setOrderId(order.getId())
                     .setSiteStatus(CacheSiteStatusType.R.id)
                     .setBarcode(param.get("barcode").toString());
-            if (cacheSiteMapper.updateById(siteNo) < 1) {
-                throw new CoolException("璁㈠崟鎾浣嶇粦瀹氬け璐ワ紒锛�" );
+            if (!cacheSiteService.saveOrUpdate(siteNo)) {
+                throw new CoolException("璁㈠崟鎾浣嶇粦瀹氬け璐ワ紒锛�");
             }
 
-            int update = waveSeedMapper.update(new LambdaUpdateWrapper<WaveSeed>()
-                    .eq(WaveSeed::getOrderNo, order.getOrderNo())
-                    .set(WaveSeed::getSiteId, siteNo.getId())
-                    .set(WaveSeed::getSiteNo, siteNo.getSiteNo()));
-            if (update < 1) {
-                throw new CoolException("鎾绔欑偣鏇存柊澶辫触锛侊紒");
-            }
+//            if (!waveSeedMapper.update(new LambdaUpdateWrapper<WaveSeed>()
+//                    .eq(WaveSeed::getOrderNo, order.getOrderNo())
+//                    .set(WaveSeed::getSiteId, siteNo.getId())
+//                    .set(WaveSeed::getSiteNo, siteNo.getSiteNo()))) {
+//                throw new CoolException("鎾绔欑偣鏇存柊澶辫触锛侊紒");
+//            }
+            //缁戝畾鎴愬姛锛屾挱绉嶅浜伅
+            sowLightMange(siteNo.getSiteNo(), order, "LIGHT");
         } else {
             if (StringUtil.isNullOrEmpty(siteNo.getOrderNo())) {
                 throw new CoolException("褰撳墠鎾绔欑偣鏈粦瀹氳鍗曪紒锛�");
             }
-           siteNo.setOrderId(null).setOrderNo(null).setBarcode(null).setSiteNo("0");
+            siteNo.setOrderId(null).setOrderNo(null).setBarcode(null).setSiteNo("0");
             if (cacheSiteMapper.updateById(siteNo) < 1) {
-                throw new CoolException("璁㈠崟涓庢挱绉嶄綅瑙g粦澶辫触锛侊紒" );
+                throw new CoolException("璁㈠崟涓庢挱绉嶄綅瑙g粦澶辫触锛侊紒");
             }
         }
         return true;
     }
+
+    /**
+     * @author Ryan
+     * @date 2025/7/11
+     * @description: 缁戝畾鎾澧欎寒鐏�
+     * @version 1.0
+     */
+    public void sowLightMange(String siteNo, Order order, String light) {
+        // 鍒拌揪鎷i�変綅锛屾帶鍒舵挱绉嶅浜伅
+        CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>()
+                .eq(CacheSite::getSiteNo, siteNo));
+        if (Objects.isNull(cacheSite)) {
+            log.error("鏉$爜锛歿}锛屾湭鎵惧埌鎾澧欎寒鐏�", siteNo);
+            throw new CoolException("鏈壘鍒版挱绉嶅");
+        }
+        List<OrderDetl> detls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderId, order.getId()));
+        if (Objects.isNull(detls)) {
+            throw new CoolException("鏁版嵁閿欒锛岃鍗曟槑缁嗕笉瀛樺湪锛侊紒");
+        }
+        int anfme = (int) detls.stream().mapToDouble(OrderDetl::getAnfme).sum();
+        SlapLightControlParam slapLightControlParam = new SlapLightControlParam();
+        slapLightControlParam
+                .setControllerCode(cacheSite.getMemo())
+                .setTagCode(cacheSite.getSiteNo())
+                .setColor("GREEN")
+                .setIndex(cacheSite.getIndex())
+//                .setMode("LIGHT")
+                .setMode(light)
+                .setDisplay(anfme + "");
+        // 鍙戣捣浜伅璇锋眰
+        log.info("鎾澧欎寒鐏笅鍙�", JSONObject.toJSONString(slapLightControlParam));
+        CommonReponse response = HttpEssUtils.post("鍒拌揪鎷i�変綅锛屾挱绉嶅浜伅", HttpEssUtils.PLT_SEND_COMMAND, slapLightControlParam);
+        if (response.getCode().equals(0)) {
+            log.info("鎾澧檣}浜伅鎴愬姛", cacheSite.getSiteNo());
+        } else {
+            log.info("鎾澧檣}浜伅澶辫触", cacheSite.getSiteNo());
+        }
+    }
+
 
     @Override
     public R selectShippingDetl(Map<String, Object> params) {
@@ -473,6 +528,7 @@
      * 1. 鍑哄簱淇敼璁㈠崟瀹屾垚鐘舵�侊紝鍒ゆ柇璁㈠崟鏄惁瀹屾垚锛屽畬鎴愬姞鍏ュ巻鍙叉。锛屾湭瀹屾垚淇敼璁㈠崟宸插畬鎴愭暟閲�
      * 2. 鍒犻櫎璁㈠崟宸插畬鎴愭挱绉嶆槑缁嗕俊鎭�
      * 3. 娓呴櫎闆嗚揣鍖虹粦瀹氭暟鎹�
+     *
      * @param params
      * @return
      */
@@ -522,24 +578,28 @@
                 }
             }
 
-            List<WaveSeed> waveSeeds = waveSeedMapper.selectList(new LambdaQueryWrapper<WaveSeed>().eq(WaveSeed::getOrderDetlId, order.getId()));
+            List<WaveSeed> waveSeeds = waveSeedMapper.list(new LambdaQueryWrapper<WaveSeed>().eq(WaveSeed::getOrderDetlId, order.getId()));
             //fixme 璁㈠崟鏄庣粏鏈挱绉嶏紝榛樿鍙彂璐�
             if (!waveSeeds.isEmpty()) {
                 ArrayList<WaveSeedLog> waveSeedLogs = new ArrayList<>();
                 waveSeeds.forEach(seed -> {
-                   WaveSeedLog waveSeedLog = new WaveSeedLog();
-                   BeanUtils.copyProperties(seed, waveSeedLog);
-                   waveSeedLog.setId(null);
+                    WaveSeedLog waveSeedLog = new WaveSeedLog();
+                    BeanUtils.copyProperties(seed, waveSeedLog);
+                    waveSeedLog.setId(null);
                     waveSeedLogs.add(waveSeedLog);
-               });
+                });
                 if (!waveSeedLogService.saveBatch(waveSeedLogs)) {
                     throw new CoolException("娉㈡槑鍘嗗彶妗d繚瀛樺け璐ワ紒锛�");
                 }
+
+                List<Long> list = waveSeeds.stream().map(WaveSeed::getId).collect(Collectors.toList());
+                //鍒犻櫎鎾鏄庣粏淇℃伅
+                if (!waveSeedMapper.removeByIds(list)) {
+                    throw new CoolException("鎾鏄庣粏鍒犻櫎鎼虹▼锛侊紒");
+                }
+
             }
-            //鍒犻櫎鎾鏄庣粏淇℃伅
-            if (waveSeedMapper.deleteByIds(waveSeeds) < 1) {
-                throw new CoolException("鎾鏄庣粏鍒犻櫎鎼虹▼锛侊紒");
-            }
+
         });
 
         orderList.forEach(one -> {
@@ -560,7 +620,7 @@
                 }
             } else { //涓嶄负绌猴紝淇敼璁㈠崟鐘舵�侊紝鍙噸鏂扮粍鎷�
                 one.setOrderSettle(OrderSettleType.INIT.val());
-                if (orderService.updateById(one));
+                if (orderService.updateById(one)) ;
             }
         });
 
@@ -603,7 +663,107 @@
      */
     @Override
     public R getMatsByCode(String matnr) {
-        return R.ok().add(matService.list(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, matnr)));
+        QueryWrapper<LocDetl> wrapper = new QueryWrapper<>();
+        wrapper.eq("matnr", matnr).select("matnr, SUM(anfme) anfme");
+        LocDetl detl = locDetlService.getOne(wrapper);
+
+        Mat one = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, detl.getMatnr()), false);
+        if (Objects.isNull(one)) {
+            throw new CoolException("鐗╂枡涓嶅瓨鍦紒锛�");
+        }
+        one.setAnfme(detl.getAnfme());
+        return R.ok().add(Arrays.asList(one));
     }
 
+    /**
+     * @author Ryan
+     * @date 2025/7/10
+     * @description: 鑾峰彇搴撲綅鏄庣粏
+     * @version 1.0
+     */
+    @Override
+    public List<LocDetl> getDetlsByCode(String barcode) {
+        Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, barcode));
+        if (Objects.isNull(loc)) {
+            throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�");
+        }
+        LocArea locArea = locAreaService.getOne(new LambdaQueryWrapper<LocArea>()
+                .eq(LocArea::getLocId, loc.getId())
+                .eq(LocArea::getTypeId, LocAreaTypeSts.LOC_AREA_TYPE_FLAT.id));
+        if (Objects.isNull(locArea)) {
+            throw new CoolException("闈炲钩搴撳簱浣嶄笉鍙墽琛屾鎿嶄綔锛侊紒");
+        }
+        List<LocDetl> detls = locDetlService.list(new LambdaQueryWrapper<LocDetl>()
+                .eq(LocDetl::getLocNo, barcode));
+        for (int i = 0; i < detls.size(); i++) {
+            Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getId, detls.get(i).getMatId()));
+            MatnrDetlDto detlDto = new MatnrDetlDto();
+            detlDto.setTspec(mat.getSpecs())
+                    .setType(mat.getModel())
+                    .setMatnrName(mat.getMaktx())
+                    .setMatnrNo(mat.getMatnr());
+            detls.get(i).setMats(detlDto);
+        }
+        return detls;
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/7/11
+     * @description: 骞冲簱搴撲綅杞Щ
+     * @version 1.0
+     */
+    @Override
+    public R transferLocs(Map<String, String> param) {
+        Loc barcode = locService.getOne(new LambdaQueryWrapper<Loc>()
+                .eq(Loc::getLocStsId, LocStsType.F.val())
+                .eq(Loc::getLocNo, param.get("barcode")));
+        if (Objects.isNull(barcode)) {
+            throw new CoolException(param.get("barcode") +  "搴撲綅鐘舵�佷笉鍙墽琛屾鎿嶄綔锛侊紒");
+        }
+        Loc tarCode = locService.getOne(new LambdaQueryWrapper<Loc>()
+                .eq(Loc::getLocStsId, LocStsType.O.val())
+                .eq(Loc::getLocNo, param.get("tarCode")));
+        if (Objects.isNull(tarCode)) {
+            throw new CoolException("璇锋鏌ョ洰鏍囦负鍞綅鏄惁瀛樺湪鎴栨槸鍚︿负绌哄簱锛侊紒");
+        }
+
+        List<Long> ids = Arrays.asList(barcode.getId(), tarCode.getId());
+
+        List<LocArea> locAreas = locAreaService.list(new LambdaQueryWrapper<LocArea>()
+                .in(LocArea::getLocId, ids)
+                .eq(LocArea::getTypeId, LocAreaTypeSts.LOC_AREA_TYPE_FLAT.id));
+        if (!locAreas.isEmpty() && locAreas.size() != ids.size()) {
+            throw new CoolException("闈炲钩搴撲笉鍙墽琛屾鎿嶄綔锛侊紒");
+        }
+
+        List<LocDetl> locDetls = locDetlService.list(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocNo, barcode.getLocNo()));
+        if (locDetls.isEmpty()) {
+            return R.error("搴撲綅鏄庣粏涓嶅瓨鍦紒锛�");
+        }
+
+        if (!locService.update(new LambdaUpdateWrapper<Loc>()
+                .eq(Loc::getLocNo, barcode.getLocNo())
+                .set(Loc::getBarcode, null)
+                .set(Loc::getLocStsId, LocStsType.O.val()))) {
+            throw new CoolException("婧愬簱浣嶇姸鎬佷慨鏀瑰け璐ワ紒锛�");
+        }
+
+        if (!locService.update(new LambdaUpdateWrapper<Loc>().eq(Loc::getLocNo, tarCode.getLocNo())
+                .set(Loc::getBarcode, barcode.getBarcode())
+                .set(Loc::getLocStsId, LocStsType.F.val()))) {
+            throw new CoolException("鐩爣搴撲綅淇敼澶辫触锛侊紒");
+        }
+
+        if (!locDetlService.update(new LambdaUpdateWrapper<LocDetl>()
+                .eq(LocDetl::getLocId, barcode.getId())
+                .set(LocDetl::getLocId, tarCode.getId())
+                .set(LocDetl::getLocNo, tarCode.getLocNo()))) {
+            throw new CoolException("搴撲綅鏄庣粏淇敼澶辫触锛侊紒");
+        }
+
+        return R.ok();
+    }
+
+
 }

--
Gitblit v1.9.1