From c6c9b7d3baa822765768c110304d27623f946286 Mon Sep 17 00:00:00 2001
From: pjb <123456>
Date: 星期二, 15 七月 2025 14:29:09 +0800
Subject: [PATCH] `1`
---
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java | 317 ++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 242 insertions(+), 75 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 7fccb7c..02848c0 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
@@ -1,75 +1,242 @@
-package com.zy.asrs.wms.asrs.service.impl;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.zy.asrs.wms.asrs.entity.LocDetlField;
-import com.zy.asrs.wms.asrs.entity.ViewLocDetl;
-import com.zy.asrs.wms.asrs.entity.param.FieldParam;
-import com.zy.asrs.wms.asrs.mapper.LocDetlMapper;
-import com.zy.asrs.wms.asrs.entity.LocDetl;
-import com.zy.asrs.wms.asrs.mapper.ViewLocDetlMapper;
-import com.zy.asrs.wms.asrs.service.LocDetlService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-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 java.util.*;
-
-@Service("locDetlService")
-public class LocDetlServiceImpl extends ServiceImpl<LocDetlMapper, LocDetl> implements LocDetlService {
-
- @Autowired
- private ViewLocDetlMapper viewLocDetlMapper;
-
- @Override
- public PageParam<ViewLocDetl, BaseParam> getPage(PageParam<ViewLocDetl, BaseParam> pageParam, QueryWrapper<ViewLocDetl> buildWrapper) {
- PageParam<ViewLocDetl, BaseParam> result = viewLocDetlMapper.selectPage(pageParam, buildWrapper);
-
- //瑙f瀽鍔ㄦ�佸瓧娈�
- JSONObject data = JSON.parseObject(JSON.toJSONString(result));
- List<ViewLocDetl> records = result.getRecords();
- data.put("records", records);
- for (ViewLocDetl locDetl : records) {
- Map<String, Object> resultMap = viewLocDetlMapper.getById(locDetl.getId());
- locDetl.syncFieldMap(resultMap);
- }
- return result;
- }
-
- @Override
- public List<LocDetl> getLocDetlList(Map<String, Object> map) {
- String matnr = null;
- String batch = null;
- if (map.containsKey("matnr")) {
- matnr = map.get("matnr").toString();
- map.remove("matnr");
- }
- if (map.containsKey("batch")) {
- batch = map.get("batch").toString();
- map.remove("batch");
- }
- ArrayList<FieldParam> param = new ArrayList<>();
- for (Map.Entry<String, Object> entry : map.entrySet()) {
- if (entry.getValue() == null) {
- continue;
- }
- FieldParam fieldParam = new FieldParam();
- fieldParam.setName(entry.getKey());
- fieldParam.setValue(entry.getValue());
- param.add(fieldParam);
- }
-
- List<Map<String, Object>> list2 = viewLocDetlMapper.getList(matnr, batch, param);
- List<LocDetl> locDetls = new ArrayList<>();
- for (Map<String, Object> objectMap : list2) {
- LocDetl locDetl = JSON.parseObject(JSON.toJSONString(objectMap), LocDetl.class);
- locDetl.syncFieldMap(objectMap);
- locDetls.add(locDetl);
- }
- return locDetls;
- }
-}
+package com.zy.asrs.wms.asrs.service.impl;
+
+import com.alibaba.fastjson.JSON;
+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.extension.service.impl.ServiceImpl;
+import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wms.asrs.entity.*;
+import com.zy.asrs.wms.asrs.entity.enums.LocAreaTypeSts;
+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.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service("locDetlService")
+public class LocDetlServiceImpl extends ServiceImpl<LocDetlMapper, LocDetl> implements LocDetlService {
+
+ @Autowired
+ 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) {
+ PageParam<ViewLocDetl, BaseParam> result = viewLocDetlMapper.selectPage(pageParam, buildWrapper);
+ //瑙f瀽鍔ㄦ�佸瓧娈�
+// JSONObject data = JSON.parseObject(JSON.toJSONString(result));
+// List<ViewLocDetl> records = result.getRecords();
+// data.put("records", records);
+// for (ViewLocDetl locDetl : records) {
+// Map<String, Object> resultMap = viewLocDetlMapper.getById(locDetl.getId());
+// locDetl.syncFieldMap(resultMap);
+// }
+ return result;
+ }
+
+ @Override
+ public List<LocDetl> getLocDetlList(Map<String, Object> map) {
+ String matnr = null;
+ String batch = null;
+ if (map.containsKey("matnr")) {
+ matnr = map.get("matnr").toString();
+ map.remove("matnr");
+ }
+ if (map.containsKey("batch")) {
+ batch = map.get("batch").toString();
+ map.remove("batch");
+ }
+ ArrayList<FieldParam> param = new ArrayList<>();
+ for (Map.Entry<String, Object> entry : map.entrySet()) {
+ if (entry.getValue() == null) {
+ continue;
+ }
+ FieldParam fieldParam = new FieldParam();
+ fieldParam.setName(entry.getKey());
+ fieldParam.setValue(entry.getValue());
+ param.add(fieldParam);
+ }
+
+ List<Map<String, Object>> list2 = viewLocDetlMapper.getListLike(matnr, batch, param);
+ List<LocDetl> locDetls = new ArrayList<>();
+ for (Map<String, Object> objectMap : list2) {
+ LocDetl locDetl = JSON.parseObject(JSON.toJSONString(objectMap), LocDetl.class);
+ locDetl.syncFieldMap(objectMap);
+ locDetls.add(locDetl);
+ }
+ return locDetls;
+ }
+
+ @Override
+ public List<LocDetl> parseLocDetl(List<LocDetl> list) {
+ for (LocDetl locDetl : list) {
+ List<LocDetlField> locDetlFieldList = locDetlFieldService.list(new LambdaQueryWrapper<LocDetlField>().eq(LocDetlField::getDetlId, locDetl.getId()));
+ locDetl.syncField(locDetlFieldList);
+ }
+ return list;
+ }
+
+ @Override
+ 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, LocAreaTypeSts.LOC_AREA_TYPE_UTC.id);
+ List<LocDetl> locDetlsSort = resortDetls(list);
+ return locDetlsSort.stream().sorted(Comparator.comparing(LocDetl::getCreateTime)).collect(Collectors.toList());
+ }
+
+ 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(rollbackFor = Exception.class)
+ 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
+ @Transactional(rollbackFor = Exception.class)
+ 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("鏄庣粏鍒犻櫎澶辫触");
+// }
+ }
+ }
+
+ @Override
+ public List<LocDetl> queryFlatStock(String matnr, String batch, List<FieldParam> params) {
+ //鑾峰彇骞冲簱涓鍚堟潯浠剁殑搴撲綅
+ List<Map<String, Object>> list = viewLocDetlMapper.queryFlatStock(matnr, batch, params, LocAreaTypeSts.LOC_AREA_TYPE_FLAT.id);
+ List<LocDetl> detls = new ArrayList<>();
+ list.forEach(action -> {
+ LocDetl parseObject = JSONObject.parseObject(JSON.toJSONString(action), LocDetl.class);
+ detls.add(parseObject);
+ });
+ return detls;
+ }
+}
--
Gitblit v1.9.1