From ac4341ea6b66ae02427d39d35f41d42d78b2eb2e Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 14 二月 2025 10:08:32 +0800
Subject: [PATCH] #

---
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java |  162 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 141 insertions(+), 21 deletions(-)

diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java
index 7a13a1a..badac6c 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java
@@ -5,23 +5,25 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zy.asrs.wms.asrs.entity.LocDetl;
-import com.zy.asrs.wms.asrs.entity.LocDetlField;
-import com.zy.asrs.wms.asrs.entity.ViewLocDetl;
+import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wms.asrs.entity.*;
+import com.zy.asrs.wms.asrs.entity.enums.LocStsType;
 import com.zy.asrs.wms.asrs.entity.param.FieldParam;
 import com.zy.asrs.wms.asrs.entity.param.FieldSortParam;
+import com.zy.asrs.wms.asrs.entity.param.LocDetlFreezeParam;
 import com.zy.asrs.wms.asrs.mapper.LocDetlMapper;
 import com.zy.asrs.wms.asrs.mapper.ViewLocDetlMapper;
+import com.zy.asrs.wms.asrs.service.LanewayRuleService;
 import com.zy.asrs.wms.asrs.service.LocDetlFieldService;
 import com.zy.asrs.wms.asrs.service.LocDetlService;
+import com.zy.asrs.wms.asrs.service.LocService;
 import com.zy.asrs.wms.common.domain.BaseParam;
 import com.zy.asrs.wms.common.domain.PageParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Service("locDetlService")
 public class LocDetlServiceImpl extends ServiceImpl<LocDetlMapper, LocDetl> implements LocDetlService {
@@ -30,6 +32,10 @@
     private ViewLocDetlMapper viewLocDetlMapper;
     @Autowired
     private LocDetlFieldService locDetlFieldService;
+    @Autowired
+    private LocService locService;
+    @Autowired
+    private LanewayRuleService lanewayRuleService;
 
     @Override
     public PageParam<ViewLocDetl, BaseParam> getPage(PageParam<ViewLocDetl, BaseParam> pageParam, QueryWrapper<ViewLocDetl> buildWrapper) {
@@ -88,22 +94,136 @@
         return list;
     }
 
-    /**
-     * 鏍规嵁鍑哄簱鏉′欢鏌ヨ绗﹀悎鐨勫簱瀛�
-     * @param param 鏌ヨ鏉′欢
-     * @param sortParam 鎺掑簭瀛楁
-     * @return
-     */
     @Override
-    public List<LocDetl> listSuitableMat( List<FieldParam> param, List<FieldSortParam> sortParam) {
-        List<Map<String, Object>> stock = viewLocDetlMapper.listSuitableMat(param, sortParam);
-        List<LocDetl> locDetls = new ArrayList<>();
-        for (Map<String, Object> objectMap : stock) {
-            LocDetl detl = JSON.parseObject(JSON.toJSONString(objectMap), LocDetl.class);
-            detl.syncFieldMap(objectMap);
-            locDetls.add(detl);
-        }
-        return locDetls;
+    public List<LocDetl> queryStock(String matnr, String batch, List<FieldParam> param) {
+        return queryStock(matnr, batch, param, null);
     }
 
+    @Override
+    public List<LocDetl> queryStock(String matnr, String batch, List<FieldParam> param, List<FieldSortParam> sortParam) {
+        List<Map<String, Object>> list = viewLocDetlMapper.queryStock(matnr, batch, param, sortParam);
+        List<LocDetl> locDetlsSort = resortDetls(list);
+        return locDetlsSort;
+    }
+
+    private List<LocDetl> resortDetls(List<Map<String, Object>> list) {
+        List<LocDetl> locDetls = new ArrayList<>();
+
+        for (Map<String, Object> map : list) {
+            LocDetl locDetl = JSON.parseObject(JSON.toJSONString(map), LocDetl.class);
+            locDetls.add(locDetl);
+        }
+
+        locDetls = parseLocDetl(locDetls);
+
+        List<Long> sortDirctLoc = new ArrayList<>();
+        HashMap<Long, List<LocDetl>> sortMap = new HashMap<>();
+        for (LocDetl locDetl : locDetls) {
+            List<LocDetl> detls = sortMap.get(locDetl.getLocId());
+            if (detls == null) {
+                detls = new ArrayList<>();
+                detls.add(locDetl);
+                sortMap.put(locDetl.getLocId(), detls);
+            }else {
+                detls.add(locDetl);
+                sortMap.put(locDetl.getLocId(), detls);
+            }
+
+            Loc loc = locService.getById(locDetl.getLocId());
+            if (loc == null) {
+                continue;
+            }
+
+            if(!loc.getLocStsId().equals(LocStsType.F.val())){
+                continue;
+            }
+
+            //鑾峰彇搴撲綅鎵�鍦ㄥ贩閬�
+            LanewayRule lanewayRule = lanewayRuleService.getLaneByLoc(loc);
+            if(lanewayRule == null) {
+                throw new CoolException("搴撲綅鏈厤缃贩閬�");
+            }
+
+            //鑾峰彇搴撲綅鏂瑰悜
+            List<Integer> direction = null;
+            if (lanewayRule.getLaneX$().contains(loc.getRow1())) {
+                direction = lanewayRule.getLaneX$();
+            }else {
+                direction = lanewayRule.getLaneY$();
+            }
+            Collections.reverse(direction);
+
+            for (Integer row : direction) {
+                Loc one = locService.getOne(new LambdaQueryWrapper<Loc>()
+                        .eq(Loc::getRow1, row)
+                        .eq(Loc::getBay1, loc.getBay1())
+                        .eq(Loc::getLev1, loc.getLev1()));
+                if (one == null) {
+                    continue;
+                }
+
+                if (!sortDirctLoc.contains(one.getId())) {
+                    sortDirctLoc.add(one.getId());
+                }
+            }
+        }
+
+        List<LocDetl> sortDirctDetls = new ArrayList<>();
+
+        for (Long locId : sortDirctLoc) {
+            List<LocDetl> detls = sortMap.get(locId);
+            if(detls == null) {
+                continue;
+            }
+
+            sortDirctDetls.addAll(detls);
+        }
+
+        return sortDirctDetls;
+    }
+
+    @Override
+    @Transactional
+    public void locDetlFreeze(LocDetlFreezeParam param) {
+        if (param == null) {
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
+        }
+
+        if (param.getDetlIds() == null) {
+            throw new CoolException("搴撳瓨鏄庣粏鍙傛暟涓嶈兘涓虹┖");
+        }
+
+        if (param.getFreeze() == null) {
+            throw new CoolException("鍐荤粨鍙傛暟涓嶈兘涓虹┖");
+        }
+
+        List<LocDetl> locDetls = this.listByIds(param.getDetlIds());
+        if(locDetls.isEmpty()){
+            throw new CoolException("搴撳瓨涓嶅瓨鍦�");
+        }
+
+        for (LocDetl locDetl : locDetls) {
+            locDetl.setFreeze(param.getFreeze());
+            locDetl.setUpdateTime(new Date());
+            if (!this.updateById(locDetl)) {
+                throw new CoolException("鏇存柊澶辫触");
+            }
+        }
+    }
+
+    @Override
+    public void removeLocDetl(Long locId) {
+        List<LocDetl> locDetls = this.list(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocId, locId));
+        for (LocDetl locDetl : locDetls) {
+            boolean remove = locDetlFieldService.remove(new LambdaQueryWrapper<LocDetlField>().eq(LocDetlField::getDetlId, locDetl.getId()));
+            if (!remove) {
+                throw new CoolException("鎵╁睍瀛楁鍒犻櫎澶辫触");
+            }
+
+            boolean result = this.removeById(locDetl.getId());
+            if (!result) {
+                throw new CoolException("鏄庣粏鍒犻櫎澶辫触");
+            }
+        }
+    }
 }

--
Gitblit v1.9.1