From b2a578ffd5bc01d51a4b111b7d1dc306feac8179 Mon Sep 17 00:00:00 2001
From: liuxy
Date: Tue, 6 Feb 2024 18:01:46 +0800
Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E6=8D=86=E6=89=8E=E4=BB=BB?=
=?UTF-8?q?=E5=8A=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../point/dao/mapper/SchBasePointMapper.java | 9 +-
.../point/dao/mapper/SchBasePointMapper.xml | 27 +++
.../org/nl/b_lms/sch/tasks/TwoLashTask.java | 196 ++++++++++++++++++
.../BstIvtBoxlashboundController.java | 19 ++
.../service/IBstIvtBoxlashboundService.java | 16 ++
.../database/service/dao/BstIvtBoxinfo.java | 5 +
.../service/dao/BstIvtBoxlashbound.java | 38 ++++
.../dao/mapper/BstIvtBoxlashboundMapper.java | 16 ++
.../dao/mapper/BstIvtBoxlashboundMapper.xml} | 3 +-
.../impl/BstIvtBoxinfoServiceImpl.java | 2 +
.../impl/BstIvtBoxlashboundServiceImpl.java | 20 ++
.../util/impl/LashManageServiceImpl.java | 196 ++++++++++++++++++
.../util/service/LashManageService.java | 25 +++
.../java/org/nl/wms/basedata/st/wql/stivt.xls | Bin 368640 -> 333312 bytes
.../nl/wms/pda/mps/eum/RegionTypeEnum.java | 3 +-
.../outbill/rest/CheckOutBillController.java | 17 +-
16 files changed, 584 insertions(+), 8 deletions(-)
create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.xml
create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java
create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/controller/BstIvtBoxlashboundController.java
create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/IBstIvtBoxlashboundService.java
create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/BstIvtBoxlashbound.java
create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/mapper/BstIvtBoxlashboundMapper.java
rename lms/nladmin-system/src/main/java/org/nl/b_lms/{sch/point/dao/xml/SchBasePointMapper.xml => storage_manage/database/service/dao/mapper/BstIvtBoxlashboundMapper.xml} (60%)
create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/impl/BstIvtBoxlashboundServiceImpl.java
create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java
create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java
diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.java
index 9bf1c28f7..adf1a31ec 100644
--- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.java
+++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.java
@@ -1,8 +1,11 @@
package org.nl.b_lms.sch.point.dao.mapper;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.b_lms.sch.point.dao.SchBasePoint;
+import java.util.List;
+
/**
* {@code @Description:} 点位基础表(SchBasePoint)数据持久层
* {@code @Author:} gbx
@@ -11,5 +14,9 @@ import org.nl.b_lms.sch.point.dao.SchBasePoint;
*/
public interface SchBasePointMapper extends BaseMapper {
-
+ /**
+ * 获取捆扎区域的点位木箱信息
+ * @return 点位木箱信息集合
+ */
+ List queryKZPoint();
}
diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.xml
new file mode 100644
index 000000000..d39f1f697
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/SchBasePointMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java
new file mode 100644
index 000000000..5335da5c6
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoLashTask.java
@@ -0,0 +1,196 @@
+package org.nl.b_lms.sch.tasks;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import org.nl.b_lms.sch.point.dao.SchBasePoint;
+import org.nl.b_lms.sch.point.service.IschBasePointService;
+import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxlashboundService;
+import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxlashbound;
+import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
+import org.nl.common.utils.SecurityUtils;
+import org.nl.modules.common.exception.BadRequestException;
+import org.nl.modules.wql.core.bean.WQLObject;
+import org.nl.wms.sch.AcsTaskDto;
+import org.nl.wms.sch.manage.AbstractAcsTask;
+import org.nl.wms.sch.manage.TaskStatusEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 二期捆扎任务类
+ * Created by Lxy on 2024/1/19.
+ */
+public class TwoLashTask extends AbstractAcsTask {
+
+ /**
+ * 处理类
+ */
+ private final String THIS_CLASS = TwoLashTask.class.getName();
+
+ @Override
+ public List addTask() {
+ /*
+ * 下发给ACS时需要特殊处理
+ */
+ JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
+
+ ArrayList resultList = new ArrayList<>();
+ for (int i = 0; i < arr.size(); i++) {
+ JSONObject json = arr.getJSONObject(i);
+
+ char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1);
+ AcsTaskDto dto = AcsTaskDto.builder()
+ .ext_task_id(json.getString("task_id"))
+ .task_code(json.getString("task_code"))
+ .task_type(json.getString("acs_task_type"))
+ .start_device_code(json.getString("point_code1"))
+ .next_device_code(json.getString("point_code2"))
+ .vehicle_code(json.getString("vehicle_code"))
+ .priority(json.getString("priority"))
+ .class_type(json.getString("task_type"))
+ .dtl_type(String.valueOf(dtl_type))
+ .remark(json.getString("remark"))
+ .build();
+ resultList.add(dto);
+ }
+ return resultList;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void updateTaskStatus(JSONObject taskObj, String status) {
+ // 点位表
+ WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
+ // 木箱绑定表
+ WQLObject boxTab = WQLObject.getWQLObject("bst_ivt_boxlashbound");
+
+ // 更新任务的参数
+ JSONObject map = new JSONObject();
+
+ /*
+ * 1-执行中, 2-完成 ,0-acs取消
+ */
+ // 执行中
+ if (status.equals(TaskStatusEnum.EXECUTING.getCode())) {
+
+ map.put("task_status", TaskStatusEnum.EXECUTING.getCode());
+ }
+
+ // 完成
+ if (status.equals(TaskStatusEnum.FINISHED.getCode())) {
+
+ map.put("task_status", TaskStatusEnum.FINISHED.getCode());
+ }
+
+ // 取消
+ if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
+
+ if (taskObj.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) {
+ throw new BadRequestException("任务已执行不能取消");
+ }
+
+ // 更新任务表删除字段
+ map.put("is_delete", IOSEnum.IS_NOTANDYES.code("是"));
+
+ // 减去终点点位载具数量
+ JSONObject pointDao = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0);
+
+ pointDao.put("vehicle_qty", NumberUtil.sub(pointDao.getIntValue("vehicle_qty"),1));
+
+ if (pointDao.getIntValue("vehicle_qty") <= 0) {
+ // 清空载具号
+ pointDao.put("vehicle_code", "");
+ pointDao.put("vehicle_qty",0);
+ }
+ pointTab.update(pointDao);
+
+ // 删除木箱绑定数据
+ boxTab.delete("box_no = '"+taskObj.getString("vehicle_code")+"'");
+
+ }
+ map.put("update_optid", SecurityUtils.getCurrentUserId());
+ map.put("update_optname", SecurityUtils.getCurrentNickName());
+ map.put("update_time", DateUtil.now());
+
+ WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'");
+ }
+
+ @Override
+ public void findStartPoint() {
+
+ }
+
+ @Override
+ public void findNextPoint() {
+
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public String createTask(JSONObject form) {
+
+ if (StrUtil.isBlank(form.getString("task_type"))) {
+ throw new BadRequestException("业务类型不能为空!");
+ }
+
+ if (StrUtil.isBlank(form.getString("start_device_code"))) {
+ throw new BadRequestException("起点不能为空!");
+ }
+
+ if (StrUtil.isBlank(form.getString("next_device_code"))) {
+ throw new BadRequestException("终点不能为空!");
+ }
+
+ if (StrUtil.isBlank(form.getString("vehicle_code"))) {
+ throw new BadRequestException("托盘号不能为空!");
+ }
+
+ if (StrUtil.isBlank(form.getString("is_auto_issue"))) {
+ throw new BadRequestException("是否自动下发不能为空!");
+ }
+
+ JSONObject json = new JSONObject();
+ json.put("task_id", IdUtil.getSnowflake(1, 1).nextId());
+ json.put("task_code", IdUtil.getSnowflake(1, 1).nextId());
+ json.put("task_type", form.getString("task_type"));
+ json.put("vehicle_code", form.getString("vehicle_code"));
+ json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
+ json.put("point_code1", form.getString("start_device_code"));
+ json.put("point_code2", form.getString("next_device_code"));
+ json.put("is_auto_issue", form.getString("is_auto_issue"));
+ json.put("handle_class", this.getClass().getName());
+ json.put("create_id", SecurityUtils.getCurrentUserId());
+ json.put("create_name", SecurityUtils.getCurrentUsername());
+ json.put("create_time", DateUtil.now());
+ json.put("priority", "1");
+ json.put("acs_task_type", "7");
+
+ WQLObject.getWQLObject("SCH_BASE_Task").insert(json);
+ return json.getString("task_id");
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void forceFinish(String task_id) {
+ JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
+ this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());
+ }
+
+ @Override
+ public void cancel(String task_id) {
+ JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
+ this.updateTaskStatus(taskObj, IOSEnum.ACS_RESULT.code("取消"));
+ }
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/controller/BstIvtBoxlashboundController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/controller/BstIvtBoxlashboundController.java
new file mode 100644
index 000000000..c1863126a
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/controller/BstIvtBoxlashboundController.java
@@ -0,0 +1,19 @@
+package org.nl.b_lms.storage_manage.database.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author author
+ * @since 2024-02-06
+ */
+@RestController
+@RequestMapping("/bst-ivt-boxlashbound")
+public class BstIvtBoxlashboundController {
+
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/IBstIvtBoxlashboundService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/IBstIvtBoxlashboundService.java
new file mode 100644
index 000000000..ecb201146
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/IBstIvtBoxlashboundService.java
@@ -0,0 +1,16 @@
+package org.nl.b_lms.storage_manage.database.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxlashbound;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author author
+ * @since 2024-02-06
+ */
+public interface IBstIvtBoxlashboundService extends IService {
+
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/BstIvtBoxinfo.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/BstIvtBoxinfo.java
index 22e4712ec..4a0d58f36 100644
--- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/BstIvtBoxinfo.java
+++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/BstIvtBoxinfo.java
@@ -67,6 +67,11 @@ public class BstIvtBoxinfo implements Serializable {
*/
private String box_high;
+ /*
+ * 捆绑数量
+ */
+ private String lash_num;
+
/*
* 插入时间
*/
diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/BstIvtBoxlashbound.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/BstIvtBoxlashbound.java
new file mode 100644
index 000000000..ddf4e4f1d
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/BstIvtBoxlashbound.java
@@ -0,0 +1,38 @@
+package org.nl.b_lms.storage_manage.database.service.dao;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ *
+ *
+ *
+ *
+ * @author author
+ * @since 2024-02-06
+ */
+@Data
+@Builder
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("bst_ivt_boxlashbound")
+public class BstIvtBoxlashbound implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId
+ private Long lash_id;
+
+ private Long bound_id;
+
+ private String box_no;
+
+
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/mapper/BstIvtBoxlashboundMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/mapper/BstIvtBoxlashboundMapper.java
new file mode 100644
index 000000000..68e092ce2
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/mapper/BstIvtBoxlashboundMapper.java
@@ -0,0 +1,16 @@
+package org.nl.b_lms.storage_manage.database.service.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxlashbound;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author author
+ * @since 2024-02-06
+ */
+public interface BstIvtBoxlashboundMapper extends BaseMapper {
+
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/xml/SchBasePointMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/mapper/BstIvtBoxlashboundMapper.xml
similarity index 60%
rename from lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/xml/SchBasePointMapper.xml
rename to lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/mapper/BstIvtBoxlashboundMapper.xml
index 1f63febf6..c9599a51a 100644
--- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/xml/SchBasePointMapper.xml
+++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/dao/mapper/BstIvtBoxlashboundMapper.xml
@@ -1,6 +1,5 @@
-
-
+
diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/impl/BstIvtBoxinfoServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/impl/BstIvtBoxinfoServiceImpl.java
index 71fe13d02..2d0db4a18 100644
--- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/impl/BstIvtBoxinfoServiceImpl.java
+++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/service/impl/BstIvtBoxinfoServiceImpl.java
@@ -34,6 +34,8 @@ public class BstIvtBoxinfoServiceImpl extends ServiceImpl
+ * 服务实现类
+ *
+ *
+ * @author author
+ * @since 2024-02-06
+ */
+@Service
+public class BstIvtBoxlashboundServiceImpl extends ServiceImpl implements IBstIvtBoxlashboundService {
+
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java
new file mode 100644
index 000000000..fa6c19424
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java
@@ -0,0 +1,196 @@
+package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl;
+
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.nl.b_lms.sch.point.dao.SchBasePoint;
+import org.nl.b_lms.sch.point.dao.mapper.SchBasePointMapper;
+import org.nl.b_lms.sch.point.service.IschBasePointService;
+import org.nl.b_lms.sch.tasks.TwoLashTask;
+import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
+import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxlashboundService;
+import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo;
+import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxlashbound;
+import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
+import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.LashManageService;
+import org.nl.common.utils.IdUtil;
+import org.nl.modules.common.exception.BadRequestException;
+import org.nl.modules.wql.core.bean.WQLObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 捆扎业务处理 服务实现类
+ *
+ *
+ * @author generator
+ * @since 2023-11-10
+ */
+@Service
+@RequiredArgsConstructor
+public class LashManageServiceImpl implements LashManageService {
+
+ /**
+ * 木箱信息服务
+ */
+ @Autowired
+ private IBstIvtBoxinfoService iBstIvtBoxinfoService;
+
+ /**
+ * 点位服务
+ */
+ @Autowired
+ private IschBasePointService ischBasePointService;
+
+ /**
+ * 点位mapper服务
+ */
+ @Autowired
+ private SchBasePointMapper schBasePointMapper;
+
+ /**
+ * 木箱捆扎绑定服务
+ */
+ @Autowired
+ private IBstIvtBoxlashboundService iBstIvtBoxlashboundService;
+
+ @Override
+ @Transactional
+ public void createLashTask(JSONObject whereJson) {
+ /*
+ * 1.判断此木箱是否需要堆叠
+ * 2.插入木箱捆扎绑定表
+ * 3.生成任务
+ */
+ // 查询木箱信息
+ BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
+ new QueryWrapper().lambda()
+ .eq(BstIvtBoxinfo::getBox_no, whereJson.getString("box_no"))
+ );
+
+ if (ObjectUtil.isEmpty(boxDao)) {
+ throw new BadRequestException("没有此木箱信息:"+whereJson.getString("box_no"));
+ }
+
+ JSONObject jsonSub = WQLObject.getWQLObject("pdm_bi_subpackagerelation")
+ .query("package_box_sn = '" + boxDao.getBox_no() + "'")
+ .uniqueResult(0);
+
+ /*
+ * 查看点位是否为空:
+ * 为空记当前载具号,载具数量为1,
+ * 不为空,加载具数量,当点位载具数量与木箱信息捆扎数量相同时下发捆绑
+ */
+ // 查询捆扎的两个点位及木箱信息
+ List pointDaoList = schBasePointMapper.queryKZPoint();
+
+ if (ObjectUtil.isEmpty(pointDaoList)) {
+ throw new BadRequestException("点位不存在,或未启用!");
+ }
+
+ // 是否要移动至捆扎位
+ String is_move = IOSEnum.IS_NOTANDYES.code("否");
+ // 桁架任务终点
+ String end_point;
+
+ // 判断是否有相同订单号、木箱规格的木箱
+ List likeBoxList = pointDaoList.stream()
+ .filter(row -> ObjectUtil.isNotEmpty(row.getString("box_length")) &&
+ ObjectUtil.isNotEmpty(row.getString("box_width")) &&
+ ObjectUtil.isNotEmpty(row.getString("box_high")) &&
+ ObjectUtil.isNotEmpty(row.getString("sale_order_name"))
+
+ )
+ .filter(row -> row.getString("box_length").equals(boxDao.getBox_length()) &&
+ row.getString("box_width").equals(boxDao.getBox_width()) &&
+ row.getString("box_high").equals(boxDao.getBox_high()) &&
+ row.getString("sale_order_name").equals(jsonSub.getString("sale_order_name"))
+ )
+ .collect(Collectors.toList());
+
+ if (ObjectUtil.isNotEmpty(likeBoxList)) {
+ // 加载具数量
+ JSONObject jsonPoint = likeBoxList.get(0);
+
+ jsonPoint.put("vehicle_qty", NumberUtil.add(jsonPoint.getBigDecimal("vehicle_qty"),1));
+
+ if (jsonPoint.getIntValue("vehicle_qty") == Integer.parseInt(boxDao.getLash_num())) {
+ // 相同清空载具以及数量
+ jsonPoint.put("vehicle_qty",0);
+ jsonPoint.put("vehicle_code","");
+ is_move = IOSEnum.IS_NOTANDYES.code("是");
+ }
+
+ end_point = jsonPoint.getString("point_code");
+ ischBasePointService.updateById(JSON.parseObject(jsonPoint.toString(), SchBasePoint.class));
+
+ // 查询此点位绑定木箱表
+ BstIvtBoxlashbound boundDao = iBstIvtBoxlashboundService.getOne(
+ new QueryWrapper().lambda()
+ .eq(BstIvtBoxlashbound::getBox_no, jsonPoint.getString("box_no"))
+ );
+ /*
+ * 插入绑定木箱表
+ */
+ BstIvtBoxlashbound insertBound = BstIvtBoxlashbound.builder()
+ .lash_id(IdUtil.getLongId())
+ .bound_id(boundDao.getBound_id())
+ .box_no(boxDao.getBox_no())
+ .build();
+ iBstIvtBoxlashboundService.save(insertBound);
+
+ } else {
+ // 判断是否有载具
+ List empPointList = pointDaoList.stream()
+ .filter(row -> ObjectUtil.isEmpty(row.getString("vehicle_code")))
+ .collect(Collectors.toList());
+
+ if (ObjectUtil.isNotEmpty(empPointList)) {
+ // 有空位
+ JSONObject jsonPoint = empPointList.get(0);
+
+ // 加载具数量、更新载具号
+ jsonPoint.put("vehicle_qty", NumberUtil.add(jsonPoint.getBigDecimal("vehicle_qty"),1));
+ jsonPoint.put("vehicle_code",boxDao.getBox_no());
+
+ end_point = jsonPoint.getString("point_code");
+ ischBasePointService.updateById(JSON.parseObject(jsonPoint.toString(), SchBasePoint.class));
+ /*
+ * 插入绑定木箱表
+ */
+ BstIvtBoxlashbound insertBound = BstIvtBoxlashbound.builder()
+ .lash_id(IdUtil.getLongId())
+ .bound_id(IdUtil.getLongId())
+ .box_no(boxDao.getBox_no())
+ .build();
+ iBstIvtBoxlashboundService.save(insertBound);
+ } else {
+ // 没有空位
+ throw new BadRequestException("没有空位!");
+ }
+ }
+ /*
+ * 生成任务并下发
+ */
+ JSONObject jsonTaskParam = new JSONObject();
+ jsonTaskParam.put("task_type", "010504");
+ jsonTaskParam.put("start_device_code", whereJson.getString("device_code"));
+ jsonTaskParam.put("next_device_code", end_point);
+ jsonTaskParam.put("vehicle_code", whereJson.getString("box_no"));
+ jsonTaskParam.put("is_auto_issue", is_move);
+
+ TwoLashTask taskBean = new TwoLashTask();
+ taskBean.createTask(jsonTaskParam);
+ taskBean.immediateNotifyAcs(null);
+ }
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java
new file mode 100644
index 000000000..a6fbc9723
--- /dev/null
+++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/LashManageService.java
@@ -0,0 +1,25 @@
+package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+/**
+ *
+ * 捆扎业务处理 服务类
+ *
+ *
+ * @author generator
+ * @since 2023-11-16
+ */
+public interface LashManageService {
+
+ /**
+ * 创建桁架任务
+ * @param whereJson {
+ * device_code:起点
+ * box_no: 箱号
+ *
+ * }
+ */
+ void createLashTask(JSONObject whereJson);
+
+}
diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls
index 8219246a5d5a1a198c65095d3ba1774737770a58..9f5da05762988d5b227438b901a59b556fde926d 100644
GIT binary patch
delta 17802
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
ajl$6Y>(JA(HttpStatus.OK);
}
+ @PostMapping("/testBoxLash")
+ @Log("木箱捆扎测试")
+ public ResponseEntity