From d4f47a3c09e994f896dc358df93656751a812e49 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 16 八月 2024 10:17:01 +0800
Subject: [PATCH] #
---
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LanewayRuleService.java | 3
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewLocDetlMapper.java | 2
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MatFieldServiceImpl.java | 7
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocTypeBindServiceImpl.java | 26 +
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderDetl.java | 15 +
zy-asrs-wms/src/main/resources/mapper/asrs/LocTypeBindMapper.xml | 5
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/TaskDetl.java | 6
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocTypeBindMapper.java | 4
zy-asrs-wms/src/main/resources/mapper/asrs/ViewOrderDetlMapper.xml | 5
zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/LocUtils.java | 316 +++++++++++++++++++++
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewOrderDetlMapper.java | 12
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/LocTypeHeightType.java | 33 ++
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/GeneratePakInParam.java | 3
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WorkController.java | 6
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/MatFieldMapper.java | 66 ++++
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocTypeBindService.java | 7
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewTaskDetlMapper.java | 20 +
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java | 253 ++++++++++++----
zy-asrs-wms/src/main/resources/mapper/asrs/ViewTaskDetlMapper.xml | 25 +
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LanewayRuleServiceImpl.java | 17 +
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WorkService.java | 12
zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml | 15 +
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LanewayRule.java | 20 +
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java | 2
24 files changed, 809 insertions(+), 71 deletions(-)
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WorkController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WorkController.java
index 3aeb2ca..17d3e81 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WorkController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WorkController.java
@@ -22,7 +22,11 @@
@PostMapping("/rpc/generatePakIn")
public R generatePakIn(@RequestBody GeneratePakInParam param) {
try {
- workService.generatePakIn(param);
+ if (param.getTaskType() == 10) {
+ workService.generateEmptyPakIn(param);//绌烘墭鐩�
+ }else {
+ workService.generatePakIn(param);//婊℃墭鐩�
+ }
return R.ok("娣诲姞鎴愬姛");
} catch (Exception e) {
return R.error(e.getMessage());
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LanewayRule.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LanewayRule.java
index 40b77e8..2939aae 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LanewayRule.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LanewayRule.java
@@ -1,5 +1,6 @@
package com.zy.asrs.wms.asrs.entity;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.annotation.TableLogic;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -25,6 +26,7 @@
import java.io.Serializable;
import java.util.Date;
+import java.util.List;
@Data
@TableName("strategy_laneway_rule")
@@ -136,6 +138,24 @@
// null // 澶囨敞
// );
+ public List<Integer> getLaneX$() {
+ if (null == this.laneX){ return null; }
+ List<Integer> list = JSON.parseArray(this.laneX, Integer.class);
+ if (list.isEmpty()) {
+ return null;
+ }
+ return list;
+ }
+
+ public List<Integer> getLaneY$() {
+ if (null == this.laneY){ return null; }
+ List<Integer> list = JSON.parseArray(this.laneY, Integer.class);
+ if (list.isEmpty()) {
+ return null;
+ }
+ return list;
+ }
+
public String getHostId$(){
HostService service = SpringUtils.getBean(HostService.class);
Host host = service.getById(this.hostId);
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderDetl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderDetl.java
index 2bcb924..06b1630 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderDetl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderDetl.java
@@ -9,6 +9,8 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.zy.asrs.common.utils.Synchro;
+import com.zy.asrs.wms.asrs.entity.param.FieldParam;
+import com.zy.asrs.wms.asrs.service.MatFieldService;
import com.zy.asrs.wms.asrs.service.MatService;
import com.zy.asrs.wms.asrs.service.OrderService;
import com.zy.asrs.wms.asrs.service.WaitPakinService;
@@ -333,5 +335,18 @@
dynamicFields.put(key, value);
}
+ //鑾峰彇绱㈠紩瀛楁
+ public List<FieldParam> getUniqueField() {
+ MatFieldService service = SpringUtils.getBean(MatFieldService.class);
+
+ List<FieldParam> list = new ArrayList<>();
+ for (MatField matField : service.list(new LambdaQueryWrapper<MatField>().eq(MatField::getUnique, 1))) {
+ FieldParam param = new FieldParam();
+ param.setName(matField.getName());
+ param.setValue(dynamicFields.get(matField.getName()));
+ list.add(param);
+ }
+ return list;
+ }
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/TaskDetl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/TaskDetl.java
index ccca36a..1b6f769 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/TaskDetl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/TaskDetl.java
@@ -103,6 +103,12 @@
private Long matId;
/**
+ * 鍟嗗搧缂栧彿
+ */
+ @ApiModelProperty(value= "鍟嗗搧缂栧彿")
+ private String matnr;
+
+ /**
* 鎵�灞炴満鏋�
*/
@ApiModelProperty(value= "鎵�灞炴満鏋�")
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/LocTypeHeightType.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/LocTypeHeightType.java
new file mode 100644
index 0000000..a93ffab
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/LocTypeHeightType.java
@@ -0,0 +1,33 @@
+package com.zy.asrs.wms.asrs.entity.enums;
+
+/**
+ * 搴撲綅楂樺害绫诲瀷
+ */
+public enum LocTypeHeightType {
+
+ LOW(1, "low", "浣庡簱浣�"),
+ MIDDLE(2, "middle", "涓簱浣�"),
+ HEIGHT(3, "height", "楂樺簱浣�"),
+ ;
+
+
+ public Integer id;
+ public String flag;
+ public String desc;
+
+ LocTypeHeightType(Integer id, String flag, String desc) {
+ this.id = id;
+ this.flag = flag;
+ this.desc = desc;
+ }
+
+ public static LocTypeHeightType get(Integer id) {
+ for (LocTypeHeightType value : LocTypeHeightType.values()) {
+ if (value.id.equals(id)) {
+ return value;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/GeneratePakInParam.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/GeneratePakInParam.java
index 7987ce5..a331938 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/GeneratePakInParam.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/GeneratePakInParam.java
@@ -14,4 +14,7 @@
//婧愮珯鐐�
private String originSite;
+ //搴撲綅楂樺害{LocTypeHeightType}
+ private Integer locTypeHeight;
+
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocTypeBindMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocTypeBindMapper.java
index f5471f9..0a19a71 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocTypeBindMapper.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocTypeBindMapper.java
@@ -5,8 +5,12 @@
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
+import java.util.List;
+
@Mapper
@Repository
public interface LocTypeBindMapper extends BaseMapper<LocTypeBind> {
+ List<Long> getLocIdListByTypeId(Long typeId);
+
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/MatFieldMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/MatFieldMapper.java
index 133a840..a4a3d44 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/MatFieldMapper.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/MatFieldMapper.java
@@ -1,6 +1,5 @@
package com.zy.asrs.wms.asrs.mapper;
-import com.zy.asrs.wms.asrs.entity.LocDetlField;
import com.zy.asrs.wms.asrs.entity.MatField;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@@ -18,9 +17,20 @@
@SelectProvider(type = SqlProvider.class, method = "createViewSql")
void createView(@Param("list") List<MatField> list);
-
@SelectProvider(type = SqlProvider.class, method = "createLocDetlView")
void createLocDetlView();
+
+ @SelectProvider(type = SqlProvider.class, method = "createTaskDetlFieldSql")
+ void createTaskDetlFieldView(@Param("list") List<MatField> list);
+
+ @SelectProvider(type = SqlProvider.class, method = "createViewTaskDetlSql")
+ void createViewTaskDetlView();
+
+ @SelectProvider(type = SqlProvider.class, method = "createOrderDetlFieldSql")
+ void createOrderDetlFieldView(@Param("list") List<MatField> list);
+
+ @SelectProvider(type = SqlProvider.class, method = "createViewOrderDetlSql")
+ void createViewOrderDetlView();
class SqlProvider {
public String createViewSql(Map<String, Object> params) {
@@ -48,6 +58,58 @@
return sql.toString();
}
+
+ public String createTaskDetlFieldSql(Map<String, Object> params) {
+ List<MatField> list = (List<MatField>) params.get("list");
+ StringBuilder sql = new StringBuilder();
+
+ sql.append(" CREATE OR REPLACE VIEW view_man_task_detl_field AS \n");
+ sql.append(" SELECT detl_id as _detl_id ");
+ for (MatField matField : list) {
+ sql.append(", MAX(CASE WHEN name = '").append(matField.getName()).append("' THEN value END) AS ").append(matField.getName());
+ }
+ sql.append(" FROM man_task_detl_field ");
+ sql.append(" GROUP BY _detl_id ");
+
+ return sql.toString();
+ }
+
+ public String createViewTaskDetlSql() {
+ StringBuilder sql = new StringBuilder();
+
+ sql.append(" CREATE OR REPLACE VIEW view_man_task_detl AS \n");
+ sql.append(" select * from man_task_detl td ");
+ sql.append(" left join view_man_task_detl_field tdf ");
+ sql.append(" on td.id = tdf._detl_id ");
+
+ return sql.toString();
+ }
+
+ public String createOrderDetlFieldSql(Map<String, Object> params) {
+ List<MatField> list = (List<MatField>) params.get("list");
+ StringBuilder sql = new StringBuilder();
+
+ sql.append(" CREATE OR REPLACE VIEW view_man_order_detl_field AS \n");
+ sql.append(" SELECT detl_id as _detl_id ");
+ for (MatField matField : list) {
+ sql.append(", MAX(CASE WHEN name = '").append(matField.getName()).append("' THEN value END) AS ").append(matField.getName());
+ }
+ sql.append(" FROM man_order_detl_field ");
+ sql.append(" GROUP BY _detl_id ");
+
+ return sql.toString();
+ }
+
+ public String createViewOrderDetlSql() {
+ StringBuilder sql = new StringBuilder();
+
+ sql.append(" CREATE OR REPLACE VIEW view_man_order_detl AS \n");
+ sql.append(" select * from man_order_detl od ");
+ sql.append(" left join view_man_order_detl_field odf ");
+ sql.append(" on od.id = odf._detl_id ");
+
+ return sql.toString();
+ }
}
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewLocDetlMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewLocDetlMapper.java
index 5cd1984..026c55a 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewLocDetlMapper.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewLocDetlMapper.java
@@ -15,6 +15,8 @@
List<Map<String,Object>> getList(String matnr, String batch, List<FieldParam> param);
+ List<Map<String,Object>> getListLike(String matnr, String batch, List<FieldParam> param);
+
Map<String,Object> getById(Long id);
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewOrderDetlMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewOrderDetlMapper.java
new file mode 100644
index 0000000..4c00e3f
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewOrderDetlMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zy.asrs.wms.asrs.entity.ViewLocDetl;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface ViewOrderDetlMapper extends BaseMapper<ViewLocDetl> {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewTaskDetlMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewTaskDetlMapper.java
new file mode 100644
index 0000000..6c0cad6
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewTaskDetlMapper.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.wms.asrs.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zy.asrs.wms.asrs.entity.ViewLocDetl;
+import com.zy.asrs.wms.asrs.entity.param.FieldParam;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+@Repository
+public interface ViewTaskDetlMapper extends BaseMapper<ViewLocDetl> {
+
+ List<Map<String,Object>> getList(String matnr, String batch, List<FieldParam> param);
+
+ Map<String,Object> getById(Long id);
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LanewayRuleService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LanewayRuleService.java
index bd1873f..7f2ec0e 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LanewayRuleService.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LanewayRuleService.java
@@ -2,7 +2,10 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.zy.asrs.wms.asrs.entity.LanewayRule;
+import com.zy.asrs.wms.asrs.entity.Loc;
public interface LanewayRuleService extends IService<LanewayRule> {
+ LanewayRule getLaneByLoc(Loc loc);
+
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocTypeBindService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocTypeBindService.java
index e9df8a4..b0f7bbc 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocTypeBindService.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocTypeBindService.java
@@ -1,8 +1,15 @@
package com.zy.asrs.wms.asrs.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.asrs.wms.asrs.entity.LocType;
import com.zy.asrs.wms.asrs.entity.LocTypeBind;
+import java.util.List;
+
public interface LocTypeBindService extends IService<LocTypeBind> {
+ List<Long> getLocIdListByTypeId(Long typeId);
+
+ List<Long> getLocIdListByType(LocType locType);
+
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WorkService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WorkService.java
index 8c478bc..1d613f3 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WorkService.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WorkService.java
@@ -11,12 +11,18 @@
//鐢熸垚浼樺厛绾�
Integer generateIoPri(Long taskType);
- //鐢熸垚鍙敤搴撲綅鍙�
- Loc generateLoc(Long taskType);
+ //鐢熸垚绌烘墭鐩樺彲鐢ㄥ簱浣嶅彿
+ Loc generateEmptyLoc(Long taskType, Integer locTypeHeight);
- //鐢熸垚鍏ュ簱浠诲姟
+ //鐢熸垚鍙敤搴撲綅鍙�
+ Loc generateLoc(Long taskType, String barcode, Integer locTypeHeight);
+
+ //鐢熸垚鍏ュ簱浠诲姟(婊℃墭鐩�)
boolean generatePakIn(GeneratePakInParam param);
+ //鐢熸垚鍏ュ簱浠诲姟(绌烘墭鐩�)
+ boolean generateEmptyPakIn(GeneratePakInParam param);
+
//瀹屾垚浠诲姟
boolean completeTask(Long taskId);
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LanewayRuleServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LanewayRuleServiceImpl.java
index 0a764cf..6c5523d 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LanewayRuleServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LanewayRuleServiceImpl.java
@@ -1,12 +1,29 @@
package com.zy.asrs.wms.asrs.service.impl;
+import com.zy.asrs.wms.asrs.entity.Loc;
import com.zy.asrs.wms.asrs.mapper.LanewayRuleMapper;
import com.zy.asrs.wms.asrs.entity.LanewayRule;
import com.zy.asrs.wms.asrs.service.LanewayRuleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
+import java.util.List;
+
@Service("lanewayRuleService")
public class LanewayRuleServiceImpl extends ServiceImpl<LanewayRuleMapper, LanewayRule> implements LanewayRuleService {
+ @Override
+ public LanewayRule getLaneByLoc(Loc loc) {
+ List<LanewayRule> list = this.list();
+ for (LanewayRule rule : list) {
+ List<Integer> laneX = rule.getLaneX$();
+ List<Integer> laneY = rule.getLaneY$();
+ laneX.addAll(laneY);
+
+ if (laneX.contains(loc.getRow1())) {
+ return rule;
+ }
+ }
+ return null;
+ }
}
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 b24d130..8457aec 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
@@ -66,7 +66,7 @@
param.add(fieldParam);
}
- List<Map<String, Object>> list2 = viewLocDetlMapper.getList(matnr, batch, param);
+ 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);
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocTypeBindServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocTypeBindServiceImpl.java
index 601ed30..0976615 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocTypeBindServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocTypeBindServiceImpl.java
@@ -1,12 +1,38 @@
package com.zy.asrs.wms.asrs.service.impl;
+import com.alibaba.fastjson.JSON;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.wms.asrs.entity.LocType;
import com.zy.asrs.wms.asrs.mapper.LocTypeBindMapper;
import com.zy.asrs.wms.asrs.entity.LocTypeBind;
import com.zy.asrs.wms.asrs.service.LocTypeBindService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
+import java.util.Collections;
+import java.util.List;
+
@Service("locTypeBindService")
public class LocTypeBindServiceImpl extends ServiceImpl<LocTypeBindMapper, LocTypeBind> implements LocTypeBindService {
+ @Override
+ public List<Long> getLocIdListByTypeId(Long typeId) {
+ return this.baseMapper.getLocIdListByTypeId(typeId);
+ }
+
+ @Override
+ public List<Long> getLocIdListByType(LocType locType) {
+ List<Long> locIdList = this.getLocIdListByTypeId(locType.getId());
+
+ if (!Cools.isEmpty(locType.getContain())) {
+ List<Long> list = JSON.parseArray(locType.getContain(), Long.class);
+ for (Long id : list) {
+ List<Long> longs = this.getLocIdListByTypeId(id);
+ if (!longs.isEmpty()) {
+ locIdList.addAll(longs);
+ }
+ }
+ }
+ return locIdList;
+ }
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MatFieldServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MatFieldServiceImpl.java
index c598c3d..4cced4e 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MatFieldServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MatFieldServiceImpl.java
@@ -19,6 +19,13 @@
List<MatField> list = this.list();
this.baseMapper.createView(list);
this.baseMapper.createLocDetlView();
+
+ this.baseMapper.createTaskDetlFieldView(list);
+ this.baseMapper.createViewTaskDetlView();
+
+ this.baseMapper.createOrderDetlFieldView(list);
+ this.baseMapper.createViewOrderDetlView();
+
}
@Override
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
index 5d793ba..1c6c199 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
@@ -7,13 +7,12 @@
import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType;
import com.zy.asrs.wms.asrs.entity.param.GeneratePakInParam;
import com.zy.asrs.wms.asrs.service.*;
+import com.zy.asrs.wms.utils.LocUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
+import java.util.*;
@Service("workService")
public class WorkServiceImpl implements WorkService {
@@ -44,6 +43,8 @@
private TaskDetlLogService taskDetlLogService;
@Autowired
private TaskDetlFieldLogService taskDetlFieldLogService;
+ @Autowired
+ private LocUtils locUtils;
@Override
public String generateTaskNo(Long taskType) {
@@ -58,20 +59,92 @@
}
@Override
- public Loc generateLoc(Long taskType) {
- LocSts locSts = locStsService.getOne(new LambdaQueryWrapper<LocSts>().eq(LocSts::getLocSts, String.valueOf(LocStsType.O)));
- List<Loc> list = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getLocStsId, locSts.getId()));
- if (list.isEmpty()) {
- throw new CoolException("娌℃湁绌哄簱浣�");
+ public Loc generateEmptyLoc(Long taskType, Integer locTypeHeight) {
+ Loc defaultLoc = null;
+
+ //1.浠庡簱瀛樻垨浠诲姟涓尮閰嶇浉閭诲簱浣�
+ defaultLoc = locUtils.getNeighborEmptyLoc(taskType, locTypeHeight);
+ if (defaultLoc != null) {
+ return defaultLoc;
}
- return list.get(0);
+
+ //2.鑾峰彇鎺ㄨ崘搴撲綅
+ List<Loc> suggestLoc = locUtils.getSuggestEmptyLoc(taskType, locTypeHeight);
+ //鑾峰彇搴撲綅
+ if (!suggestLoc.isEmpty()) {
+ defaultLoc = locUtils.filterLoc(taskType, suggestLoc);
+ if(defaultLoc != null) {
+ return defaultLoc;
+ }
+ }
+
+ //3.浠庡叏灞�搴撲綅涓幏鍙�(瀹屾暣宸烽亾)
+ List<Loc> globalLoc = locUtils.getGlobalEmptyLoc(taskType, locTypeHeight);
+ //鑾峰彇搴撲綅
+ if (!globalLoc.isEmpty()) {
+ defaultLoc = locUtils.filterAllLoc(globalLoc);
+ if(defaultLoc != null) {
+ return defaultLoc;
+ }
+ }
+
+ return defaultLoc;
+ }
+
+ @Override
+ public Loc generateLoc(Long taskType, String barcode, Integer locTypeHeight) {
+ List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, barcode));
+ if (taskType != 10 && waitPakins.isEmpty()) {
+ throw new CoolException("鎵樼洏鏈粍鎵�");
+ }
+
+ WaitPakin waitPakin = waitPakins.get(0);
+ OrderDetl detl = waitPakin.getDetl$();
+ if (detl == null) {
+ throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
+ }
+
+ Mat mat = detl.getMat$();
+ if (mat == null) {
+ throw new CoolException("鍟嗗搧涓嶅瓨鍦�");
+ }
+
+ Loc defaultLoc = null;
+
+ //1.浠庡簱瀛樻垨浠诲姟涓尮閰嶇浉閭诲簱浣�
+ defaultLoc = locUtils.getNeighborLoc(taskType, detl, locTypeHeight);
+ if (defaultLoc != null) {
+ return defaultLoc;
+ }
+
+ //2.鑾峰彇鎺ㄨ崘搴撲綅
+ List<Loc> suggestLoc = locUtils.getSuggestLoc(taskType, mat.getId(), detl.getBatch(), locTypeHeight);
+ //鑾峰彇搴撲綅
+ if (!suggestLoc.isEmpty()) {
+ defaultLoc = locUtils.filterLoc(taskType, suggestLoc);
+ if(defaultLoc != null) {
+ return defaultLoc;
+ }
+ }
+
+ //3.浠庡叏灞�搴撲綅涓幏鍙�(瀹屾暣宸烽亾)
+ List<Loc> globalLoc = locUtils.getGlobalLoc(taskType, locTypeHeight);
+ //鑾峰彇搴撲綅
+ if (!globalLoc.isEmpty()) {
+ defaultLoc = locUtils.filterAllLoc(globalLoc);
+ if(defaultLoc != null) {
+ return defaultLoc;
+ }
+ }
+
+ return defaultLoc;
}
@Override
@Transactional
public boolean generatePakIn(GeneratePakInParam param) {
List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, param.getBarcode()));
- if (waitPakins.isEmpty()) {
+ if (param.getTaskType() != 10 && waitPakins.isEmpty()) {
throw new CoolException("鎵樼洏鏈粍鎵�");
}
@@ -80,8 +153,16 @@
throw new CoolException("浠诲姟绫诲瀷涓嶅瓨鍦�");
}
+ Task one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, param.getBarcode()));
+ if (one != null) {
+ throw new CoolException("浠诲姟宸茬粡鍒涘缓锛岃鍕块噸澶嶈姹�");
+ }
+
//鐢熸垚搴撲綅
- Loc loc = this.generateLoc(param.getTaskType());
+ Loc loc = this.generateLoc(param.getTaskType(), param.getBarcode(), param.getLocTypeHeight());
+ if(loc == null) {
+ throw new CoolException("娌℃湁绌哄簱浣�");
+ }
Task task = new Task();
task.setTaskNo(this.generateTaskNo(taskType.getId()));//浠诲姟鍙�
@@ -111,6 +192,7 @@
taskDetl.setOrderNo(waitPakin.getOrderNo());
taskDetl.setDetlId(waitPakin.getDetlId());
taskDetl.setMatId(waitPakin.getDetl$().getMatId());
+ taskDetl.setMatnr(waitPakin.getDetl$().getMat$().getMatnr());
boolean taskDetlSave = taskDetlService.save(taskDetl);
if(!taskDetlSave){
throw new CoolException("浠诲姟鏄庣粏鐢熸垚澶辫触");
@@ -179,6 +261,45 @@
}
@Override
+ public boolean generateEmptyPakIn(GeneratePakInParam param) {
+ TaskType taskType = taskTypeService.getById(param.getTaskType());
+ if (taskType == null) {
+ throw new CoolException("浠诲姟绫诲瀷涓嶅瓨鍦�");
+ }
+
+ //鐢熸垚搴撲綅
+ Loc loc = this.generateEmptyLoc(param.getTaskType(), param.getLocTypeHeight());
+ if(loc == null) {
+ throw new CoolException("娌℃湁绌哄簱浣�");
+ }
+
+ Task task = new Task();
+ task.setTaskNo(this.generateTaskNo(taskType.getId()));//浠诲姟鍙�
+ task.setTaskSts(1L);//1.鐢熸垚鍏ュ簱浠诲姟
+ task.setTaskType(taskType.getId());//浠诲姟绫诲瀷
+ task.setIoPri(this.generateIoPri(taskType.getId()));//浼樺厛绾�
+ task.setOriginLoc(null);
+ task.setTargetLoc(loc.getLocNo());
+ task.setOriginSite(param.getOriginSite());
+ task.setTargetSite(null);
+ task.setBarcode(null);//鎵樼洏鐮�
+ boolean taskSave = taskService.save(task);
+ if (!taskSave) {
+ throw new CoolException("浠诲姟鐢熸垚澶辫触");
+ }
+
+ //搴撲綅O => S
+ loc.setLocStsId(LocStsType.S.val());
+ loc.setUpdateTime(new Date());
+ boolean locUpdate = locService.updateById(loc);
+ if(!locUpdate){
+ throw new CoolException("搴撲綅鐘舵�佹洿鏂板け璐�");
+ }
+
+ return true;
+ }
+
+ @Override
public boolean completeTask(Long taskId) {
Task task = taskService.getById(taskId);
if(task == null){
@@ -214,15 +335,11 @@
throw new CoolException("浠诲姟涓嶅瓨鍦�");
}
- List<TaskDetl> taskDetls = taskDetlService.getTaskDetlByTaskId(taskId);
- if (taskDetls.isEmpty()) {
- throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦�");
- }
-
//鏇存柊搴撲綅鐘舵��
Loc loc = null;
switch (task.getTaskType().intValue()) {
case 1://鍏ュ簱
+ case 10://绌烘澘
case 53://鎷f枡
case 54://骞舵澘
case 57://鐩樼偣
@@ -243,6 +360,7 @@
case 103://鎷f枡
case 104://骞舵澘
case 107://鐩樼偣
+ case 110://绌烘澘
loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, task.getOriginLoc()));
if(loc == null){
throw new CoolException("搴撲綅涓嶅瓨鍦�");
@@ -258,64 +376,71 @@
break;
}
- //鍥炴粴璁㈠崟
- for (TaskDetl taskDetl : taskDetls) {
- OrderDetl orderDetl = orderDetlService.getById(taskDetl.getDetlId());
- if(orderDetl == null){
- throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
+ if (task.getTaskType() != 10) {
+ List<TaskDetl> taskDetls = taskDetlService.getTaskDetlByTaskId(taskId);
+ if (taskDetls.isEmpty()) {
+ throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦�");
}
- //鍥炴粴宸ヤ綔鏁伴噺
- orderDetl.setWorkQty(orderDetl.getWorkQty() - taskDetl.getAnfme());
- orderDetl.setUpdateTime(new Date());
- boolean orderDetlUpdate = orderDetlService.updateById(orderDetl);
- if(!orderDetlUpdate){
- throw new CoolException("宸ヤ綔鏁伴噺鍥炴粴澶辫触");
- }
-
- //鍏ュ簱鍥炴粴缁勬墭閫氱煡妗�
- if (task.getTaskType() == 1) {
- WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getDetlId, taskDetl.getDetlId()).eq(WaitPakin::getBarcode, task.getBarcode()));
- if(waitPakin == null){
- throw new CoolException("缁勬墭閫氱煡妗d笉瀛樺湪");
+ //鍥炴粴璁㈠崟
+ for (TaskDetl taskDetl : taskDetls) {
+ OrderDetl orderDetl = orderDetlService.getById(taskDetl.getDetlId());
+ if(orderDetl == null){
+ throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
}
- waitPakin.setIoStatus(0);
- waitPakin.setUpdateTime(new Date());
- boolean updateWaitPakin = waitPakinService.updateById(waitPakin);
- if(!updateWaitPakin){
- throw new CoolException("缁勬墭閫氱煡妗e洖婊氬け璐�");
- }
- }
-
- List<TaskDetlField> detlFields = taskDetlFieldService.list(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId()));
- for (TaskDetlField detlField : detlFields) {
- //鏄庣粏鎵╁睍瀛楁鏁版嵁淇濆瓨鑷冲巻鍙叉。
- TaskDetlFieldLog taskDetlFieldLog = new TaskDetlFieldLog();
- taskDetlFieldLog.sync(detlField);
- if (!taskDetlFieldLogService.save(taskDetlFieldLog)) {
- throw new CoolException("鏄庣粏鎵╁睍瀛楁杞巻鍙叉。妗堝け璐�");
+ //鍥炴粴宸ヤ綔鏁伴噺
+ orderDetl.setWorkQty(orderDetl.getWorkQty() - taskDetl.getAnfme());
+ orderDetl.setUpdateTime(new Date());
+ boolean orderDetlUpdate = orderDetlService.updateById(orderDetl);
+ if(!orderDetlUpdate){
+ throw new CoolException("宸ヤ綔鏁伴噺鍥炴粴澶辫触");
}
- //鍒犻櫎鏄庣粏鎵╁睍
- boolean removeField = taskDetlFieldService.removeById(detlField.getId());
- if(!removeField){
- throw new CoolException("鍥炴粴鎵╁睍鏄庣粏澶辫触");
+ //鍏ュ簱鍥炴粴缁勬墭閫氱煡妗�
+ if (task.getTaskType() == 1) {
+ WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getDetlId, taskDetl.getDetlId()).eq(WaitPakin::getBarcode, task.getBarcode()));
+ if(waitPakin == null){
+ throw new CoolException("缁勬墭閫氱煡妗d笉瀛樺湪");
+ }
+
+ waitPakin.setIoStatus(0);
+ waitPakin.setUpdateTime(new Date());
+ boolean updateWaitPakin = waitPakinService.updateById(waitPakin);
+ if(!updateWaitPakin){
+ throw new CoolException("缁勬墭閫氱煡妗e洖婊氬け璐�");
+ }
}
- }
+
+ List<TaskDetlField> detlFields = taskDetlFieldService.list(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId()));
+ for (TaskDetlField detlField : detlFields) {
+ //鏄庣粏鎵╁睍瀛楁鏁版嵁淇濆瓨鑷冲巻鍙叉。
+ TaskDetlFieldLog taskDetlFieldLog = new TaskDetlFieldLog();
+ taskDetlFieldLog.sync(detlField);
+ if (!taskDetlFieldLogService.save(taskDetlFieldLog)) {
+ throw new CoolException("鏄庣粏鎵╁睍瀛楁杞巻鍙叉。妗堝け璐�");
+ }
+
+ //鍒犻櫎鏄庣粏鎵╁睍
+ boolean removeField = taskDetlFieldService.removeById(detlField.getId());
+ if(!removeField){
+ throw new CoolException("鍥炴粴鎵╁睍鏄庣粏澶辫触");
+ }
+ }
- //鏄庣粏鏁版嵁淇濆瓨鑷冲巻鍙叉。
- TaskDetlLog taskDetlLog = new TaskDetlLog();
- taskDetlLog.sync(taskDetl);
- if (!taskDetlLogService.save(taskDetlLog)) {
- throw new CoolException("鏄庣粏鏁版嵁杞巻鍙叉。妗堝け璐�");
- }
+ //鏄庣粏鏁版嵁淇濆瓨鑷冲巻鍙叉。
+ TaskDetlLog taskDetlLog = new TaskDetlLog();
+ taskDetlLog.sync(taskDetl);
+ if (!taskDetlLogService.save(taskDetlLog)) {
+ throw new CoolException("鏄庣粏鏁版嵁杞巻鍙叉。妗堝け璐�");
+ }
- //鍒犻櫎鏄庣粏
- boolean removeDetl = taskDetlService.removeById(taskDetl.getId());
- if(!removeDetl){
- throw new CoolException("鍥炴粴鏄庣粏澶辫触");
+ //鍒犻櫎鏄庣粏
+ boolean removeDetl = taskDetlService.removeById(taskDetl.getId());
+ if(!removeDetl){
+ throw new CoolException("鍥炴粴鏄庣粏澶辫触");
+ }
}
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/LocUtils.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/LocUtils.java
new file mode 100644
index 0000000..06d9e13
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/LocUtils.java
@@ -0,0 +1,316 @@
+package com.zy.asrs.wms.utils;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.framework.common.Cools;
+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.enums.LocTypeHeightType;
+import com.zy.asrs.wms.asrs.mapper.ViewLocDetlMapper;
+import com.zy.asrs.wms.asrs.mapper.ViewTaskDetlMapper;
+import com.zy.asrs.wms.asrs.service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class LocUtils {
+
+ @Autowired
+ private TaskService taskService;
+ @Autowired
+ private LocService locService;
+ @Autowired
+ private SuggestLocRuleService suggestLocRuleService;
+ @Autowired
+ private LanewayRuleService lanewayRuleService;
+ @Autowired
+ private LocTypeService locTypeService;
+ @Autowired
+ private LocTypeBindService locTypeBindService;
+ @Autowired
+ private ViewLocDetlMapper viewLocDetlMapper;
+ @Autowired
+ private ViewTaskDetlMapper viewTaskDetlMapper;
+
+ //浠庡簱瀛樻垨浠诲姟涓尮閰嶇浉閭诲簱浣�(婊℃墭鐩�)
+ public Loc getNeighborLoc(Long taskType, OrderDetl orderDetl, Integer locTypeHeight) {
+ //婊℃墭鐩�
+ //浠庝换鍔′腑杩涜鍖归厤
+ List<Loc> locs = new ArrayList<>();
+ List<Map<String, Object>> list = viewTaskDetlMapper.getList(orderDetl.getMat$().getMatnr(), orderDetl.getBatch(), orderDetl.getUniqueField());
+ for (Map<String, Object> map : list) {
+ Task task = taskService.getById(map.get("taskId").toString());
+ if(task == null) {
+ continue;
+ }
+
+ String targetLoc = task.getTargetLoc();
+ Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, targetLoc));
+ if(one == null) {
+ continue;
+ }
+ locs.add(one);
+ }
+
+ Loc loc = filterLoc(taskType, locs);
+ if (loc != null) {
+ return loc;
+ }
+
+ //浠庡簱瀛樹腑杩涜鍖归厤
+ List<Loc> locs2 = new ArrayList<>();
+ List<Map<String, Object>> list2 = viewLocDetlMapper.getList(orderDetl.getMat$().getMatnr(), orderDetl.getBatch(), orderDetl.getUniqueField());
+ for (Map<String, Object> map : list2) {
+ Loc one = locService.getById(map.get("locId").toString());
+ if(one == null) {
+ continue;
+ }
+ locs2.add(one);
+ }
+
+ Loc loc2 = filterLoc(taskType, locs2);
+ if (loc2 != null) {
+ return loc2;
+ }
+ return null;
+ }
+
+ //鑾峰彇鎺ㄨ崘搴撲綅(婊℃墭鐩�)
+ public List<Loc> getSuggestLoc(Long taskType, Long matId, String batch, Integer locTypeHeight) {
+ //婊℃墭鐩�
+ List<Loc> locs = new ArrayList<>();
+ LocTypeHeightType locTypeHeightType = LocTypeHeightType.get(locTypeHeight);
+ if (locTypeHeightType == null) {
+ throw new CoolException("搴撲綅楂樺害绫诲瀷寮傚父");
+ }
+ //鑾峰彇搴撲綅楂樺害
+ LocType locType = locTypeService.getOne(new LambdaQueryWrapper<LocType>().eq(LocType::getFlag, locTypeHeightType.flag));
+ //绗﹀悎搴撲綅楂樺害鐨勫簱浣嶉泦鍚�
+ List<Long> locIdList = locTypeBindService.getLocIdListByType(locType);
+
+ LambdaQueryWrapper<SuggestLocRule> wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(SuggestLocRule::getLocType, 1);
+ wrapper.eq(SuggestLocRule::getMatId, matId);
+ if (!Cools.isEmpty(batch)) {
+ wrapper.eq(SuggestLocRule::getBatch, batch);
+ }
+ List<SuggestLocRule> suggestLocRules = suggestLocRuleService.list(wrapper);
+ for (SuggestLocRule suggestLocRule : suggestLocRules) {
+ LambdaQueryWrapper<Loc> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.ge(Loc::getRow1, suggestLocRule.getStartRow());
+ queryWrapper.le(Loc::getRow1, suggestLocRule.getTargetRow());
+ queryWrapper.ge(Loc::getBay1, suggestLocRule.getStartBay());
+ queryWrapper.le(Loc::getBay1, suggestLocRule.getTargetBay());
+ queryWrapper.ge(Loc::getLev1, suggestLocRule.getStartLev());
+ queryWrapper.le(Loc::getLev1, suggestLocRule.getTargetLev());
+ queryWrapper.eq(Loc::getLocStsId, LocStsType.O.val());
+ queryWrapper.in(Loc::getId, locIdList);
+ List<Loc> list = locService.list(queryWrapper);
+ if (!list.isEmpty()) {
+ locs.addAll(list);
+ }
+ }
+ return locs;
+ }
+
+ //鑾峰彇鍏ㄥ眬搴撲綅(瀹屾暣宸烽亾)
+ public List<Loc> getGlobalLoc(Long taskType, Integer locTypeHeight) {
+ List<Loc> locs = new ArrayList<>();
+ LocTypeHeightType locTypeHeightType = LocTypeHeightType.get(locTypeHeight);
+ if (locTypeHeightType == null) {
+ throw new CoolException("搴撲綅楂樺害绫诲瀷寮傚父");
+ }
+ //鑾峰彇搴撲綅楂樺害
+ LocType locType = locTypeService.getOne(new LambdaQueryWrapper<LocType>().eq(LocType::getFlag, locTypeHeightType.flag));
+ //绗﹀悎搴撲綅楂樺害鐨勫簱浣嶉泦鍚�
+ List<Long> locIdList = locTypeBindService.getLocIdListByType(locType);
+
+ LambdaQueryWrapper<Loc> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(Loc::getLocStsId, LocStsType.O.val());
+ queryWrapper.in(Loc::getId, locIdList);
+ List<Loc> list = locService.list(queryWrapper);
+ if (!list.isEmpty()) {
+ locs.addAll(list);
+ }
+ return locs;
+ }
+
+ //浠庡簱浣嶉泦鍚堜腑鑾峰彇绗﹀悎娣辨祬鐨勫簱浣�
+ public Loc filterLoc(Long taskType, List<Loc> locs) {
+ if (locs == null || locs.isEmpty()) {
+ return null;
+ }
+
+ Loc defaultLoc = null;
+ for (Loc loc : locs) {
+ //鑾峰彇搴撲綅鎵�鍦ㄥ贩閬�
+ 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$();
+ }
+
+ 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(one.getLocStsId() != LocStsType.O.val()) {
+ continue;
+ }
+
+ //褰撳墠搴撲綅鏄┖搴撲綅
+ defaultLoc = one;
+ break;
+ }
+
+ if (defaultLoc != null) {
+ break;
+ }
+ }
+
+ return defaultLoc;
+ }
+
+ //浠庡簱浣嶉泦鍚堜腑鑾峰彇瀹屾暣绌哄贩閬�
+ public Loc filterAllLoc(List<Loc> locs) {
+ if (locs == null || locs.isEmpty()) {
+ return null;
+ }
+
+ Loc defaultLoc = null;
+ for (Loc loc : locs) {
+ //鑾峰彇搴撲綅鎵�鍦ㄥ贩閬�
+ 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$();
+ }
+
+ boolean flag = false;
+ List<Loc> allLocs = new ArrayList<>();
+ 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(one.getLocStsId() != LocStsType.O.val()) {
+ flag = true;
+ break;
+ }
+
+ allLocs.add(one);
+ }
+
+ if (flag) {
+ continue;
+ }
+
+ if (!allLocs.isEmpty()) {
+ defaultLoc = allLocs.get(0);
+ break;//鎵惧埌涓�涓畬鏁寸┖宸烽亾
+ }
+ }
+
+ return defaultLoc;
+ }
+
+ //浠庡簱瀛樻垨浠诲姟涓尮閰嶇浉閭诲簱浣�(绌烘墭鐩�)
+ public Loc getNeighborEmptyLoc(Long taskType, Integer locTypeHeight) {
+ //浠庝换鍔′腑杩涜鍖归厤
+ List<Loc> locs = new ArrayList<>();
+ List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskType, 10));
+ for (Task task : list) {
+ String targetLoc = task.getTargetLoc();
+ Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, targetLoc));
+ if(one == null) {
+ continue;
+ }
+ locs.add(one);
+ }
+
+ Loc loc = filterLoc(taskType, locs);
+ if (loc != null) {
+ return loc;
+ }
+
+ //浠庡簱瀛樹腑杩涜鍖归厤
+ List<Loc> locs2 = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getLocStsId, LocStsType.D.val()));
+ Loc loc2 = filterLoc(taskType, locs2);
+ if (loc2 != null) {
+ return loc2;
+ }
+ return null;
+ }
+
+ //鑾峰彇鎺ㄨ崘搴撲綅(绌烘墭鐩�)
+ public List<Loc> getSuggestEmptyLoc(Long taskType, Integer locTypeHeight) {
+ List<Loc> locs = new ArrayList<>();
+ //绌烘墭鐩�
+ List<SuggestLocRule> suggestLocRules = suggestLocRuleService.list(new LambdaQueryWrapper<SuggestLocRule>().eq(SuggestLocRule::getLocType, 0));
+ for (SuggestLocRule suggestLocRule : suggestLocRules) {
+ LambdaQueryWrapper<Loc> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.ge(Loc::getRow1, suggestLocRule.getStartRow());
+ queryWrapper.le(Loc::getRow1, suggestLocRule.getTargetRow());
+ queryWrapper.ge(Loc::getBay1, suggestLocRule.getStartBay());
+ queryWrapper.le(Loc::getBay1, suggestLocRule.getTargetBay());
+ queryWrapper.ge(Loc::getLev1, suggestLocRule.getStartLev());
+ queryWrapper.le(Loc::getLev1, suggestLocRule.getTargetLev());
+ queryWrapper.eq(Loc::getLocStsId, LocStsType.O.val());
+ List<Loc> list = locService.list(queryWrapper);
+ if (!list.isEmpty()) {
+ locs.addAll(list);
+ }
+ }
+ return locs;
+ }
+
+ //鑾峰彇鍏ㄥ眬搴撲綅(瀹屾暣宸烽亾)
+ public List<Loc> getGlobalEmptyLoc(Long taskType, Integer locTypeHeight) {
+ List<Loc> locs = new ArrayList<>();
+ LocTypeHeightType locTypeHeightType = LocTypeHeightType.get(locTypeHeight);
+ if (locTypeHeightType == null) {
+ throw new CoolException("搴撲綅楂樺害绫诲瀷寮傚父");
+ }
+ //鑾峰彇搴撲綅楂樺害
+ LocType locType = locTypeService.getOne(new LambdaQueryWrapper<LocType>().eq(LocType::getFlag, locTypeHeightType.flag));
+ //绗﹀悎搴撲綅楂樺害鐨勫簱浣嶉泦鍚�
+ List<Long> locIdList = locTypeBindService.getLocIdListByType(locType);
+
+ LambdaQueryWrapper<Loc> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(Loc::getLocStsId, LocStsType.O.val());
+ queryWrapper.in(Loc::getId, locIdList);
+ List<Loc> list = locService.list(queryWrapper);
+ if (!list.isEmpty()) {
+ locs.addAll(list);
+ }
+ return locs;
+ }
+
+}
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/LocTypeBindMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/LocTypeBindMapper.xml
index b568f0c..a91f9ae 100644
--- a/zy-asrs-wms/src/main/resources/mapper/asrs/LocTypeBindMapper.xml
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/LocTypeBindMapper.xml
@@ -2,4 +2,9 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zy.asrs.wms.asrs.mapper.LocTypeBindMapper">
+ <select id="getLocIdListByTypeId" resultType="long">
+ select distinct loc_id from man_loc_type_bind
+ where type_id = #{typeId}
+ </select>
+
</mapper>
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml
index b5edcf0..e5d0179 100644
--- a/zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml
@@ -10,6 +10,21 @@
</if>
<if test="param!=null and param.size()>0">
<foreach item="item" collection="param" index="index">
+ <if test="item.value!=null">
+ and ${item.name} = #{item.value}
+ </if>
+ </foreach>
+ </if>
+ </select>
+
+ <select id="getListLike" resultType="map">
+ select * from view_man_loc_detl ld
+ where matnr = #{matnr}
+ <if test="batch!=null">
+ and batch = #{batch}
+ </if>
+ <if test="param!=null and param.size()>0">
+ <foreach item="item" collection="param" index="index">
and ${item.name} like CONCAT('%',#{item.value},'%')
</foreach>
</if>
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/ViewOrderDetlMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/ViewOrderDetlMapper.xml
new file mode 100644
index 0000000..3f7836c
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/ViewOrderDetlMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.wms.asrs.mapper.ViewOrderDetlMapper">
+
+</mapper>
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/ViewTaskDetlMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/ViewTaskDetlMapper.xml
new file mode 100644
index 0000000..7687fd4
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/ViewTaskDetlMapper.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.wms.asrs.mapper.ViewTaskDetlMapper">
+
+ <select id="getList" resultType="map">
+ select * from view_man_task_detl td
+ where matnr = #{matnr}
+ <if test="batch!=null">
+ and batch = #{batch}
+ </if>
+ <if test="param!=null and param.size()>0">
+ <foreach item="item" collection="param" index="index">
+ <if test="item.value!=null">
+ and ${item.name} = #{item.value}
+ </if>
+ </foreach>
+ </if>
+ </select>
+
+ <select id="getById" resultType="map">
+ select * from view_man_task_detl
+ where id = #{id}
+ </select>
+
+</mapper>
--
Gitblit v1.9.1