Merge commit '9186ce137f2a67a4d8d7bb1cbfcc40cf69729d22' into master_merge
This commit is contained in:
@@ -54,7 +54,7 @@
|
||||
FROM
|
||||
pdm_bi_subpackagerelation
|
||||
WHERE
|
||||
container_name IN (SELECT container_name FROM bst_ivt_packageinfoivt WHERE point_status = '3')
|
||||
container_name IN (SELECT container_name FROM bst_ivt_packageinfoivt WHERE point_status = '6')
|
||||
<if test="sale_order_name != null and sale_order_name != ''">
|
||||
AND sale_order_name LIKE CONCAT('%', #{sale_order_name}, '%')
|
||||
</if>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.b_lms.pdm.subpackagerelation.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
@@ -26,6 +27,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
@@ -34,6 +37,8 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@@ -55,7 +60,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
private ISysParamService iSysParamService;
|
||||
|
||||
|
||||
|
||||
@Resource
|
||||
private DjqTask djqTask;
|
||||
@Resource
|
||||
@@ -84,6 +88,9 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
private TaskQueueManager taskQueueManager;
|
||||
@Resource
|
||||
private TaskQueue taskQueue;
|
||||
@Resource
|
||||
@Qualifier("threadPoolExecutor")
|
||||
private ThreadPoolExecutor pool;
|
||||
|
||||
/**
|
||||
* 查询数据分页
|
||||
@@ -101,11 +108,10 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
@Override
|
||||
public IPage<PdmBiSubpackagerelation> queryContainerization(Map whereJson, PageQuery pageable) {
|
||||
Page<PdmBiSubpackagerelation> pageObject = new Page<>(pageable.getPage(), pageable.getSize());
|
||||
return pdmBiSubpackagerelationMapper.selectGroupedSubPackageRelation(pageObject,(String)whereJson.get("sale_order_name"),(String)whereJson.get("customer_name"),(String)whereJson.get("customer_description"),(String)whereJson.get("status"));
|
||||
return pdmBiSubpackagerelationMapper.selectGroupedSubPackageRelation(pageObject, (String) whereJson.get("sale_order_name"), (String) whereJson.get("customer_name"), (String) whereJson.get("customer_description"), (String) whereJson.get("status"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询订单装箱信息
|
||||
*
|
||||
@@ -140,10 +146,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 根据订单号查询子卷信息
|
||||
*
|
||||
@@ -402,18 +404,15 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
public void updateEntityList(JSONObject whereJson) {
|
||||
List<PdmBiSubpackagerelation> packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class);
|
||||
List<PdmBiSubpackagerelation> isOutBox = packagerelationList.stream().filter(r -> r.getStatus().equals("0")).collect(Collectors.toList());
|
||||
if (isOutBox.size() > 0) {
|
||||
throw new BadRequestException("标记为黄色的子卷号已分配木箱,请重新选择未分配木箱的子卷");
|
||||
}
|
||||
List<String> entityList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class).stream()
|
||||
.map(PdmBiSubpackagerelation::getWorkorder_id)
|
||||
.map(String::valueOf)
|
||||
.collect(Collectors.toList());
|
||||
if (entityList.isEmpty()) {
|
||||
return;
|
||||
if (isOutBox.size() > 0) {
|
||||
throw new BadRequestException("标记为黄色的子卷号已分配木箱,请重新选择未分配木箱的子卷");
|
||||
}
|
||||
JSONArray jsonArray = whereJson.getJSONArray("tableMater");
|
||||
if (jsonArray == null || jsonArray.size() == 0) {
|
||||
throw new BadRequestException("无选中子卷信息");
|
||||
}
|
||||
List<PdmBiSubpackagerelation> pdmBiSubpackagerelationList = pdmBiSubpackagerelationMapper
|
||||
.selectList(new LambdaQueryWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getSale_order_name, whereJson.getString("sale_order_name")));
|
||||
.selectList(new LambdaQueryWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getSale_order_name, jsonArray.getJSONObject(0).getString("sale_order_name")));
|
||||
Integer maxBoxGroup = pdmBiSubpackagerelationList.stream()
|
||||
.map(PdmBiSubpackagerelation::getBox_group)
|
||||
.filter(Objects::nonNull)
|
||||
@@ -421,6 +420,13 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
.max(Integer::compareTo)
|
||||
.orElse(0) + 1;
|
||||
try {
|
||||
List<String> entityList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class).stream()
|
||||
.map(PdmBiSubpackagerelation::getWorkorder_id)
|
||||
.map(String::valueOf)
|
||||
.collect(Collectors.toList());
|
||||
if (entityList.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
// code:终点,material_code:木箱规格,num: 子卷数
|
||||
UpdateWrapper<PdmBiSubpackagerelation> updateWrapper = new UpdateWrapper<>();
|
||||
String boxType = whereJson.getString("checked");
|
||||
@@ -440,8 +446,38 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
* 空木箱出库
|
||||
*/
|
||||
private void outBox(List<String> entityList, List<PdmBiSubpackagerelation> packagerelationList, String boxType) {
|
||||
//均衡获取装箱对接位
|
||||
//String deviceCode= getPointCode();
|
||||
String deviceCode = "ZXQ_1_1";
|
||||
JSONObject boxInfo = new JSONObject();
|
||||
String deviceCode;
|
||||
//确定装箱区终点
|
||||
boxInfo.put("device_code", deviceCode);
|
||||
boxInfo.put("material_code", boxType);
|
||||
boxInfo.put("num", entityList.size());
|
||||
String boxSn = outBoxManageService.outBox(boxInfo);
|
||||
if (StringUtils.isBlank(boxSn)) {
|
||||
throw new BadRequestException("库位 -> 装箱对接位,木箱码不能为空!");
|
||||
}
|
||||
//更新子卷包装关系更新木箱号
|
||||
CompletableFuture.runAsync(() -> {
|
||||
try {
|
||||
updateBoxInfo(entityList, boxSn);
|
||||
} catch (Exception e) {
|
||||
log.error("异常信息:" + e);
|
||||
}
|
||||
}, pool);
|
||||
//待检区->装箱区agv任务
|
||||
// String finalDeviceCode = deviceCode;
|
||||
// CompletableFuture.runAsync(() -> {
|
||||
// try {
|
||||
// agvTransfer(packagerelationList, finalDeviceCode, boxSn);
|
||||
// } catch (Exception e) {
|
||||
// log.error("异常信息:" + e);
|
||||
// }
|
||||
// }, pool);
|
||||
}
|
||||
|
||||
private String getPointCode() {
|
||||
//均衡获取木箱出库终点
|
||||
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper<BstIvtPackageinfoivt>().eq(BstIvtPackageinfoivt::getPoint_status, "5").eq(BstIvtPackageinfoivt::getIs_used, "1").orderByAsc(BstIvtPackageinfoivt::getPoint_code));
|
||||
if (CollectionUtils.isEmpty(bstIvtPackageinfoivtList)) {
|
||||
@@ -476,23 +512,15 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
Optional<String> minPointCode = result.stream()
|
||||
.min(Comparator.comparingInt(map -> map.entrySet().iterator().next().getValue()))
|
||||
.map(map -> map.keySet().iterator().next());
|
||||
deviceCode = minPointCode.orElseGet(() -> bstIvtPackageinfoivtList.get(0).getPoint_code());
|
||||
//确定装箱区终点
|
||||
boxInfo.put("device_code", deviceCode);
|
||||
boxInfo.put("material_code", boxType);
|
||||
boxInfo.put("num", entityList.size());
|
||||
String boxSn = outBoxManageService.outBox(boxInfo);
|
||||
//String boxSn = "MX61401";
|
||||
if (StringUtils.isBlank(boxSn)) {
|
||||
throw new BadRequestException("库位 -> 装箱对接位,木箱码不能为空!");
|
||||
}
|
||||
//更新子卷包装关系更新木箱号
|
||||
UpdateWrapper<PdmBiSubpackagerelation> updateWrapper1 = new UpdateWrapper<>();
|
||||
updateWrapper1.set("package_box_sn", boxSn);
|
||||
updateWrapper1.in("workorder_id", entityList);
|
||||
pdmBiSubpackagerelationMapper.update(null, updateWrapper1);
|
||||
//待检区->装箱区agv任务
|
||||
agvTransfer(packagerelationList, deviceCode, boxSn);
|
||||
return minPointCode.orElseGet(() -> bstIvtPackageinfoivtList.get(0).getPoint_code());
|
||||
}
|
||||
|
||||
|
||||
protected void updateBoxInfo(List<String> entityList, String boxSn) {
|
||||
UpdateWrapper<PdmBiSubpackagerelation> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.set("package_box_sn", boxSn);
|
||||
updateWrapper.in("workorder_id", entityList);
|
||||
pdmBiSubpackagerelationMapper.update(null, updateWrapper);
|
||||
}
|
||||
|
||||
|
||||
@@ -539,7 +567,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
}
|
||||
|
||||
|
||||
private void agvTransfer(List<PdmBiSubpackagerelation> packagerelationList, String deviceCode, String boxSn) {
|
||||
protected void agvTransfer(List<PdmBiSubpackagerelation> packagerelationList, String deviceCode, String boxSn) {
|
||||
//待检区点位
|
||||
List<BstIvtPackageinfoivt> djqPointList = packageinfoivtService
|
||||
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
|
||||
@@ -571,7 +599,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
|
||||
schBaseTaskList.add(task);
|
||||
});
|
||||
//taskQueueManager.addTasksToQueue(groupId, schBaseTaskList);
|
||||
taskQueue.addTasksToQueue(groupId, schBaseTaskList);
|
||||
// taskQueue.addTasksToQueue(groupId, schBaseTaskList);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.nl.b_lms.sch.tasks;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -72,6 +73,8 @@ public class TwoInBoxTask extends AbstractAcsTask {
|
||||
// 任务表
|
||||
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
|
||||
|
||||
WQLObject vehicleTab = WQLObject.getWQLObject("md_pb_storagevehicleinfo");
|
||||
|
||||
JSONObject jsonTask = taskTab.query("task_id = '" + taskObj.getString("task_id") + "'").uniqueResult(0);
|
||||
|
||||
// 更新任务的参数
|
||||
@@ -96,7 +99,29 @@ public class TwoInBoxTask extends AbstractAcsTask {
|
||||
jsonAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
|
||||
jsonAttr.put("storagevehicle_code", jsonTask.getString("vehicle_code"));
|
||||
attrTab.update(jsonAttr);
|
||||
}
|
||||
|
||||
JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + jsonTask.getString("vehicle_code2") + "'")
|
||||
.uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(jsonVehicle)) {
|
||||
throw new BadRequestException("载具不存在!");
|
||||
}
|
||||
JSONObject ext_jo = veExtTab.query("storagevehicle_code = '"+jsonVehicle.getString("storagevehicle_code")+"'").uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(ext_jo)) {
|
||||
JSONObject jsonVeExt = new JSONObject();
|
||||
jsonVeExt.put("storagevehicleext_id", org.nl.common.utils.IdUtil.getLongId());
|
||||
jsonVeExt.put("storagevehicle_id", jsonVehicle.getLongValue("storagevehicle_id"));
|
||||
jsonVeExt.put("storagevehicle_code", jsonVehicle.getString("storagevehicle_code"));
|
||||
jsonVeExt.put("storagevehicle_type", jsonVehicle.getString("storagevehicle_type"));
|
||||
jsonVeExt.put("pcsn", jsonTask.getString("vehicle_code"));
|
||||
jsonVeExt.put("device_uuid", org.nl.common.utils.IdUtil.getLongId());
|
||||
jsonVeExt.put("update_time", DateUtil.now());
|
||||
veExtTab.insert(jsonVeExt);
|
||||
}else {
|
||||
ext_jo.put("pcsn", jsonTask.getString("vehicle_code2"));
|
||||
ext_jo.put("device_uuid", org.nl.common.utils.IdUtil.getLongId());
|
||||
ext_jo.put("update_time", DateUtil.now());
|
||||
veExtTab.update(ext_jo);
|
||||
} }
|
||||
|
||||
// 取消
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
|
||||
@@ -131,7 +131,7 @@ public class TwoInEmpExcepTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("托盘号不能为空!");
|
||||
}
|
||||
|
||||
if (StrUtil.isBlank(form.getString("vehicle_type"))) {
|
||||
if (StrUtil.isBlank(form.getString("containerType"))) {
|
||||
throw new BadRequestException("托盘类型不能为空!");
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.nl.b_lms.sch.tasks;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -90,6 +91,8 @@ public class TwoInEmpTask extends AbstractAcsTask {
|
||||
// 完成
|
||||
if (status.equals(TaskStatusEnum.FINISHED.getCode())) {
|
||||
|
||||
|
||||
|
||||
map.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||
|
||||
// 更新仓位
|
||||
@@ -100,6 +103,7 @@ public class TwoInEmpTask extends AbstractAcsTask {
|
||||
jsonAttr.put("is_emptyvehicle",IOSEnum.IS_NOTANDYES.code("是"));
|
||||
|
||||
attrTab.update(jsonAttr);
|
||||
|
||||
}
|
||||
|
||||
// 取消
|
||||
|
||||
@@ -141,6 +141,21 @@ public class TwoLashTask extends AbstractAcsTask {
|
||||
// 完成
|
||||
if (status.equals(TaskStatusEnum.FINISHED.getCode())) {
|
||||
|
||||
// 判断当前任务组的所有任务是否都为完成:如果都为完成则 调用acs接口允许此木箱离开
|
||||
JSONObject groupTask = WQLObject.getWQLObject("sch_base_task").query("task_group_id = '" + taskObj.getString("task_group_id") + "' and is_delete = '0' and task_status <> 07 and task_id <> '"+taskObj.getString("task_id")+"'")
|
||||
.uniqueResult(0);
|
||||
|
||||
if (ObjectUtil.isEmpty(groupTask)) {
|
||||
// 更新点位载具、数量
|
||||
JSONObject pointDao = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0);
|
||||
pointDao.put("vehicle_code", "");
|
||||
pointDao.put("vehicle_qty",0);
|
||||
WQLObject.getWQLObject("sch_base_point").update(pointDao);
|
||||
|
||||
// TODO 调用acs接口告诉此木箱可以离开
|
||||
|
||||
}
|
||||
|
||||
map.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||
}
|
||||
|
||||
@@ -219,6 +234,7 @@ public class TwoLashTask extends AbstractAcsTask {
|
||||
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("task_group_id", form.getString("task_group_id"));
|
||||
json.put("is_auto_issue", form.getString("is_auto_issue"));
|
||||
json.put("handle_class", this.getClass().getName());
|
||||
json.put("create_id", SecurityUtils.getCurrentUserId());
|
||||
|
||||
@@ -150,7 +150,7 @@ public class TwoOutEmpTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("托盘号不能为空!");
|
||||
}
|
||||
|
||||
if (StrUtil.isBlank(form.getString("vehicle_type"))) {
|
||||
if (StrUtil.isBlank(form.getString("containerType"))) {
|
||||
throw new BadRequestException("托盘类型不能为空!");
|
||||
}
|
||||
|
||||
|
||||
@@ -110,6 +110,7 @@ public class TwoOutHeapTask extends AbstractAcsTask {
|
||||
JSONObject jsonParam = new JSONObject();
|
||||
jsonParam.put("device_code",jsonTask.getString("point_code2"));
|
||||
jsonParam.put("vehicle_code",jsonTask.getString("vehicle_code"));
|
||||
jsonParam.put("task_group_id",jsonTask.getString("task_group_id"));
|
||||
|
||||
LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class);
|
||||
bean1.createLashTask(jsonParam);
|
||||
|
||||
@@ -163,13 +163,14 @@ public class TwoOutTask extends AbstractAcsTask {
|
||||
bean.finishTask(jsonTask);
|
||||
|
||||
// 判断此任务组是否全部完成
|
||||
JSONArray resultJSONArray = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'")
|
||||
JSONArray resultJSONArray = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "' and handle_class = '"+THIS_CLASS+"'")
|
||||
.getResultJSONArray(0);
|
||||
|
||||
// 下发堆垛机至行架任务(2个行架位)
|
||||
JSONObject jsonParam = new JSONObject();
|
||||
jsonParam.put("device_code",jsonTask.getString("point_code2"));
|
||||
jsonParam.put("vehicle_code",jsonTask.getString("vehicle_code"));
|
||||
jsonParam.put("task_group_id",jsonTask.getString("task_group_id"));
|
||||
jsonParam.put("vehicle_type",jsonTask.getJSONObject("request_param").getString("containerType"));
|
||||
|
||||
LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class);
|
||||
|
||||
@@ -130,7 +130,7 @@ public class MzhcwTask extends AbstractAcsTask {
|
||||
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
|
||||
.eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"))
|
||||
.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具"))
|
||||
.orderByAsc(BstIvtPackageinfoivt::getSort_seq));
|
||||
.orderByDesc(BstIvtPackageinfoivt::getSort_seq));
|
||||
JSONObject toSsxTask = new JSONObject();
|
||||
toSsxTask.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
|
||||
toSsxTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
|
||||
|
||||
@@ -33,6 +33,7 @@ import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.modules.wql.WQL;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.wms.basedata.st.service.StorattrService;
|
||||
import org.nl.wms.basedata.st.service.dto.StorattrDto;
|
||||
import org.nl.wms.pda.mps.eum.RegionTypeEnum;
|
||||
@@ -102,6 +103,9 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
||||
@Autowired
|
||||
private IBstIvtBoxinfoService iBstIvtBoxinfoService;
|
||||
|
||||
@Autowired
|
||||
private ISysParamService iSysParamService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public String insertMst(JSONObject whereJson) {
|
||||
@@ -1132,26 +1136,16 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
||||
);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(disDaoList)) {
|
||||
// 相同
|
||||
JSONObject jsonSub1 = subTab.query("package_box_sn = '" + jsonAttr.getString("storagevehicle_code") + "'").uniqueResult(0);
|
||||
JSONObject jsonSub2 = subTab.query("package_box_sn = '" + jsonLow.getString("storagevehicle_code") + "'").uniqueResult(0);
|
||||
|
||||
if (jsonSub1.getString("sale_order_name").equals(jsonSub2.getString("sale_order_name")) &&
|
||||
jsonSub1.getString("box_length").equals(jsonSub2.getString("box_length")) &&
|
||||
jsonSub1.getString("box_width").equals(jsonSub2.getString("box_width")) &&
|
||||
jsonSub1.getString("box_high").equals(jsonSub2.getString("box_high")) &&
|
||||
jsonSub1.getString("product_name").equals(jsonSub2.getString("product_name"))) {
|
||||
// 不为空说明是此单据下的木箱
|
||||
flag = false;
|
||||
} else {
|
||||
// 为空:判断此木箱是否有任务
|
||||
JSONObject jsonTask = taskService.query("vehicle_code = '" + jsonLow.getString("storagevehicle_code") + "' and task_status <> '07' and is_delete = '0'").uniqueResult(0);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(jsonTask)) {
|
||||
flag = false;
|
||||
} else {
|
||||
// 不相同:判断是否有此木箱的任务
|
||||
JSONObject jsonTask = taskService.query("table_fk = '" + iostorinv_id + "' and vehicle_code = '" + jsonLow.getString("storagevehicle_code") + "' and is_delete = '0'").uniqueResult(0);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(jsonTask)) {
|
||||
flag = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
@@ -1160,7 +1154,36 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
||||
moveParam.put("stor_id", IOSEnum.STOR_ID.code("二期"));
|
||||
moveParam.put("sect_id", RegionTypeEnum.TWO_BZC01.getId());
|
||||
moveParam.put("box_no", jsonLow.getString("storagevehicle_code"));
|
||||
// moveParam.put("material_id", jsonMater.getString("material_id"));
|
||||
//根据木箱高度,判断入库仓位的高度、
|
||||
String height = "";
|
||||
String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue();
|
||||
String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue();
|
||||
// 查询木箱信息
|
||||
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
|
||||
new QueryWrapper<BstIvtBoxinfo>().lambda()
|
||||
.eq(BstIvtBoxinfo::getBox_no, jsonLow.getString("storagevehicle_code"))
|
||||
);
|
||||
|
||||
String box_high = boxDao.getBox_high();
|
||||
if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) {
|
||||
height = "1";
|
||||
} else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) {
|
||||
height = "2";
|
||||
} else {
|
||||
height = "3";
|
||||
}
|
||||
moveParam.put("height", height);
|
||||
moveParam.put("vehicle_type", boxDao.getVehicle_type());
|
||||
moveParam.put("move_block_num", jsonLow.getString("block_num"));
|
||||
|
||||
// 查询物料id
|
||||
StIvtIostorinvdis disDao = iStIvtIostorinvdisService.list(
|
||||
new QueryWrapper<StIvtIostorinvdis>().lambda()
|
||||
.ne(StIvtIostorinvdis::getWork_status,IOSEnum.BILL_STATUS.code("完成"))
|
||||
.eq(StIvtIostorinvdis::getBox_no, jsonLow.getString("storagevehicle_code"))
|
||||
).get(0);
|
||||
|
||||
moveParam.put("material_id", disDao.getMaterial_id());
|
||||
JSONObject jsonMove = inBussManageService.getOneStruct(moveParam);
|
||||
|
||||
// 生成任务
|
||||
|
||||
@@ -69,9 +69,6 @@ public class InBoxManageServiceImpl implements InBoxManageService {
|
||||
@Autowired
|
||||
private WmsToAcsService wmsToAcsService;
|
||||
|
||||
@Autowired
|
||||
private AcsToWmsService acsToWmsService;
|
||||
|
||||
@Autowired
|
||||
private ISysParamService iSysParamService;
|
||||
|
||||
@@ -161,10 +158,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
|
||||
@Override
|
||||
@Transactional
|
||||
public void boxBinVehicle(JSONObject whereJson) {
|
||||
// 载具表
|
||||
WQLObject vehicleTab = WQLObject.getWQLObject("md_pb_storagevehicleinfo");
|
||||
// 载具扩展属性表
|
||||
WQLObject veExtTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
|
||||
|
||||
/*
|
||||
* 查询mes木箱信息,插入木箱信息表
|
||||
*/
|
||||
@@ -205,28 +199,6 @@ public class InBoxManageServiceImpl implements InBoxManageService {
|
||||
if (boxDao == null) {
|
||||
throw new BadRequestException("木箱不存在!");
|
||||
}
|
||||
// JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + whereJson.getString("vehicle_code") + "'")
|
||||
// .uniqueResult(0);
|
||||
// if (ObjectUtil.isEmpty(jsonVehicle)) {
|
||||
// throw new BadRequestException("载具不存在!");
|
||||
// }
|
||||
// JSONObject ext_jo = veExtTab.query("storagevehicle_code = '"+jsonVehicle.getString("storagevehicle_code")+"'").uniqueResult(0);
|
||||
// if (ObjectUtil.isEmpty(ext_jo)) {
|
||||
// JSONObject jsonVeExt = new JSONObject();
|
||||
// jsonVeExt.put("storagevehicleext_id", IdUtil.getLongId());
|
||||
// jsonVeExt.put("storagevehicle_id", jsonVehicle.getLongValue("storagevehicle_id"));
|
||||
// jsonVeExt.put("storagevehicle_code", jsonVehicle.getString("storagevehicle_code"));
|
||||
// jsonVeExt.put("storagevehicle_type", jsonVehicle.getString("storagevehicle_type"));
|
||||
// jsonVeExt.put("pcsn", whereJson.getString("box_no"));
|
||||
// jsonVeExt.put("device_uuid", IdUtil.getLongId());
|
||||
// jsonVeExt.put("update_time", DateUtil.now());
|
||||
// veExtTab.insert(jsonVeExt);
|
||||
// }else {
|
||||
// ext_jo.put("pcsn", whereJson.getString("box_no"));
|
||||
// ext_jo.put("device_uuid", IdUtil.getLongId());
|
||||
// ext_jo.put("update_time", DateUtil.now());
|
||||
// veExtTab.update(ext_jo);
|
||||
// }
|
||||
|
||||
// 下发桁架任务
|
||||
|
||||
@@ -242,6 +214,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
|
||||
device_ja.add(device_jo);
|
||||
JSONObject device_data = wmsToAcsService.getPointStatus(device_ja);
|
||||
JSONObject data = device_data.getJSONArray("data").getJSONObject(0);
|
||||
AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsService.class);
|
||||
//如果此时拆叠盘位为空
|
||||
if (data.getIntValue("qty") == 0) {
|
||||
//生成空托盘出库任务
|
||||
|
||||
@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONAware;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
@@ -119,12 +120,27 @@ public class InBussManageServiceImpl implements InBussManageService {
|
||||
* 判断是否有仓位
|
||||
* 判断条件:库区、仓库、是否启用、是否删除、未锁定、没有载具
|
||||
*/
|
||||
JSONArray attrArry = attrTab.query("IFNULL(storagevehicle_code,'') = '' " +
|
||||
"AND is_used = '" + IOSEnum.IS_NOTANDYES.code("是") + "' AND is_delete = '" + IOSEnum.IS_NOTANDYES.code("否") + "' " +
|
||||
"AND lock_type = '" + IOSEnum.LOCK_TYPE.code("未锁定") + "' AND stor_id = '" + jsonObject.getString("stor_id") + "' " +
|
||||
"AND storagevehicle_type = '" + jsonObject.getString("vehicle_type") + "'" +
|
||||
"AND height = '" + jsonObject.getString("height") + "'" +
|
||||
"AND sect_id = '" + jsonObject.getString("sect_id") + "'").getResultJSONArray(0);
|
||||
// 是否是移库: 提前确定的巷道
|
||||
String block_num = jsonObject.getString("move_block_num");
|
||||
|
||||
JSONArray attrArry = new JSONArray();
|
||||
if (ObjectUtil.isEmpty(block_num)) {
|
||||
attrArry = attrTab.query("IFNULL(storagevehicle_code,'') = '' " +
|
||||
"AND is_used = '" + IOSEnum.IS_NOTANDYES.code("是") + "' AND is_delete = '" + IOSEnum.IS_NOTANDYES.code("否") + "' " +
|
||||
"AND lock_type = '" + IOSEnum.LOCK_TYPE.code("未锁定") + "' AND stor_id = '" + jsonObject.getString("stor_id") + "' " +
|
||||
"AND storagevehicle_type = '" + jsonObject.getString("vehicle_type") + "'" +
|
||||
"AND height = '" + jsonObject.getString("height") + "'" +
|
||||
"AND sect_id = '" + jsonObject.getString("sect_id") + "'").getResultJSONArray(0);
|
||||
} else {
|
||||
attrArry = attrTab.query("IFNULL(storagevehicle_code,'') = '' " +
|
||||
"AND is_used = '" + IOSEnum.IS_NOTANDYES.code("是") + "' AND is_delete = '" + IOSEnum.IS_NOTANDYES.code("否") + "' " +
|
||||
"AND lock_type = '" + IOSEnum.LOCK_TYPE.code("未锁定") + "' AND stor_id = '" + jsonObject.getString("stor_id") + "' " +
|
||||
"AND storagevehicle_type = '" + jsonObject.getString("vehicle_type") + "'" +
|
||||
"AND height = '" + jsonObject.getString("height") + "'" +
|
||||
"AND sect_id = '" + jsonObject.getString("sect_id") + "' AND block_num = '"+block_num+"'")
|
||||
.getResultJSONArray(0);
|
||||
}
|
||||
|
||||
|
||||
if (ObjectUtil.isEmpty(attrArry)) {
|
||||
notInRowList.clear();
|
||||
@@ -143,7 +159,10 @@ public class InBussManageServiceImpl implements InBussManageService {
|
||||
jsonSub.put("vehicle_type", jsonObject.getString("vehicle_type"));
|
||||
jsonSub.put("height", jsonObject.getString("height"));
|
||||
|
||||
String block_num = getMinBlock(jsonSub);
|
||||
// 不是移库则需要找新巷道
|
||||
if (ObjectUtil.isEmpty(block_num)) {
|
||||
block_num = getMinBlock(jsonSub);
|
||||
}
|
||||
/*
|
||||
* 确定哪排:查看每排相同木箱规格等 的数量,找到数量最小的那排
|
||||
*/
|
||||
@@ -156,6 +175,11 @@ public class InBussManageServiceImpl implements InBussManageService {
|
||||
jsonSub.put("row_num", row_num);
|
||||
JSONObject jsonAttr = queryStruct(jsonSub);
|
||||
|
||||
// 如果是移库空并且仓位为空则报错
|
||||
if (ObjectUtil.isNotEmpty(jsonObject.getString("move_block_num")) && ObjectUtil.isEmpty(jsonAttr)) {
|
||||
throw new BadRequestException("仓位不足!");
|
||||
}
|
||||
|
||||
// 为空则新找巷道
|
||||
if (ObjectUtil.isEmpty(jsonAttr)) {
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ import org.hibernate.annotations.Source;
|
||||
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.task.dao.SchBaseTask;
|
||||
import org.nl.b_lms.sch.task.dao.mapper.SchBaseTaskMapper;
|
||||
import org.nl.b_lms.sch.tasks.TwoLashTask;
|
||||
import org.nl.b_lms.sch.tasks.TwoOutHeapTask;
|
||||
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
|
||||
@@ -184,6 +186,7 @@ public class LashManageServiceImpl implements LashManageService {
|
||||
jsonTaskParam.put("task_type", "010707");
|
||||
jsonTaskParam.put("start_device_code", whereJson.getString("device_code"));
|
||||
jsonTaskParam.put("next_device_code", end_point);
|
||||
jsonTaskParam.put("task_group_id", whereJson.getString("task_group_id"));
|
||||
jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code"));
|
||||
jsonTaskParam.put("is_auto_issue", is_move);
|
||||
|
||||
@@ -218,6 +221,7 @@ public class LashManageServiceImpl implements LashManageService {
|
||||
jsonTaskParam.put("task_type", "010720");
|
||||
whereJson.put("containerType", whereJson.getString("vehicle_type"));
|
||||
jsonTaskParam.put("point_code1", whereJson.getString("device_code"));
|
||||
jsonTaskParam.put("task_group_id", whereJson.getString("task_group_id"));
|
||||
jsonTaskParam.put("point_code2", next_device_code);
|
||||
jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code"));
|
||||
jsonTaskParam.put("request_param", whereJson);
|
||||
|
||||
@@ -5,6 +5,9 @@ import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
|
||||
import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvOutService;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService;
|
||||
@@ -17,6 +20,7 @@ import org.nl.common.utils.IdUtil;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.wql.WQL;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.wms.pda.mps.eum.RegionTypeEnum;
|
||||
import org.nl.wms.st.inbill.service.StorPublicService;
|
||||
import org.nl.wms.st.instor.service.HandMoveStorService;
|
||||
@@ -72,6 +76,12 @@ public class OutBussManageServiceImpl implements OutBussManageService {
|
||||
@Autowired
|
||||
private HandMoveStorService handMoveStorService;
|
||||
|
||||
@Autowired
|
||||
private ISysParamService iSysParamService;
|
||||
|
||||
@Autowired
|
||||
private IBstIvtBoxinfoService iBstIvtBoxinfoService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void lockStruct(List<String> param, JSONObject json) {
|
||||
@@ -381,6 +391,29 @@ public class OutBussManageServiceImpl implements OutBussManageService {
|
||||
moveParam.put("sect_id", RegionTypeEnum.TWO_BZC01.getId());
|
||||
moveParam.put("box_no", json.getString("storagevehicle_code"));
|
||||
moveParam.put("material_id", jsonMater.getString("material_id"));
|
||||
//根据木箱高度,判断入库仓位的高度、
|
||||
String height = "";
|
||||
String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue();
|
||||
String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue();
|
||||
// 查询木箱信息
|
||||
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
|
||||
new QueryWrapper<BstIvtBoxinfo>().lambda()
|
||||
.eq(BstIvtBoxinfo::getBox_no, json.getString("storagevehicle_code"))
|
||||
);
|
||||
|
||||
String box_high = boxDao.getBox_high();
|
||||
if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) {
|
||||
height = "1";
|
||||
} else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) {
|
||||
height = "2";
|
||||
} else {
|
||||
height = "3";
|
||||
}
|
||||
moveParam.put("height", height);
|
||||
moveParam.put("vehicle_type", boxDao.getVehicle_type());
|
||||
// 移库巷道
|
||||
moveParam.put("move_block_num",json.getString("block_num"));
|
||||
|
||||
JSONObject jsonMove = inBussManageService.getOneStruct(moveParam);
|
||||
|
||||
// 查询移出货位的库存物料
|
||||
|
||||
@@ -79,6 +79,13 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
|
||||
throw new BadRequestException("终点点位不存在或未启用!");
|
||||
}*/
|
||||
|
||||
//判断当前点位是否存在任务,如果存在则不生成任务
|
||||
WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
JSONObject jsonObject = wo_Task.query("point_code2 = '" + whereJson.getString("device_code") + "' AND task_status < '07' AND is_delete = '0'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(jsonObject)){
|
||||
throw new BadRequestException("点位【"+jsonObject.getString("point_code2")+"】正在出空托盘任务!");
|
||||
}
|
||||
|
||||
JSONObject jsonAttr = getStruct(whereJson);
|
||||
|
||||
if (ObjectUtil.isEmpty(jsonAttr)) {
|
||||
|
||||
@@ -38,6 +38,7 @@ public interface InBussManageService {
|
||||
* sect_id:库区标识
|
||||
* material_id: 物料标识
|
||||
* box_no:木箱号
|
||||
* move_block_num: 是否移库:提前确定巷道
|
||||
* }
|
||||
* @return JSONObject 仓位对象
|
||||
*/
|
||||
|
||||
@@ -17,6 +17,7 @@ public interface LashManageService {
|
||||
* @param whereJson {
|
||||
* device_code:起点
|
||||
* vehicle_code: 箱号
|
||||
* task_group_id: 任务组
|
||||
*
|
||||
* }
|
||||
*/
|
||||
@@ -28,6 +29,7 @@ public interface LashManageService {
|
||||
* device_code:起点
|
||||
* vehicle_code: 箱号
|
||||
* vehicle_type: 载具类型
|
||||
* task_group_id: 任务组
|
||||
*
|
||||
* }
|
||||
*/
|
||||
|
||||
@@ -17,6 +17,7 @@ package org.nl.config.thread;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.scheduling.annotation.AsyncConfigurer;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
@@ -63,6 +64,8 @@ public class AsyncTaskExecutePool implements AsyncConfigurer {
|
||||
return executor;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
|
||||
return (throwable, method, objects) -> {
|
||||
|
||||
@@ -37,4 +37,6 @@ public class AsyncTaskProperties {
|
||||
private int keepAliveSeconds;
|
||||
|
||||
private int queueCapacity;
|
||||
|
||||
private int awaitTerminationSeconds;
|
||||
}
|
||||
|
||||
@@ -43,6 +43,8 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
|
||||
@Override
|
||||
public Map<String, Object> queryAll(Map whereJson, Pageable page) {
|
||||
String search = MapUtil.getStr(whereJson, "search");
|
||||
//只查询木箱
|
||||
String box = MapUtil.getStr(whereJson, "box");
|
||||
//物料限制的时候使用,初始化页面
|
||||
String class_idStr = MapUtil.getStr(whereJson, "class_idStr");
|
||||
String material_type_id = MapUtil.getStr(whereJson, "material_type_id");
|
||||
@@ -60,6 +62,13 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
|
||||
}
|
||||
map.put("search", "%" + search + "%");
|
||||
}
|
||||
if (!StrUtil.isEmpty(box)) {
|
||||
//处理转义字符
|
||||
if (box.contains("\\")) {
|
||||
box = box.replace("\\", "\\\\\\");
|
||||
}
|
||||
map.put("box", "%" + box + "%");
|
||||
}
|
||||
|
||||
//处理物料当前节点的所有子节点
|
||||
if (!StrUtil.isEmpty(material_type_id)) {
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#################################################
|
||||
输入.flag TYPEAS s_string
|
||||
输入.search TYPEAS s_string
|
||||
输入.box TYPEAS s_string
|
||||
输入.class_code TYPEAS s_string
|
||||
输入.idssql TYPEAS f_string
|
||||
输入.classIds TYPEAS f_string
|
||||
@@ -59,6 +60,11 @@
|
||||
mb.material_name like 输入.search
|
||||
)
|
||||
ENDOPTION
|
||||
OPTION 输入.box <> ""
|
||||
(
|
||||
mb.material_name like 输入.box
|
||||
)
|
||||
ENDOPTION
|
||||
ENDSELECT
|
||||
ENDPAGEQUERY
|
||||
ENDIF
|
||||
|
||||
@@ -1968,11 +1968,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
log.info("applyTwo返回参数:---------------------------------------------" + result.toString());
|
||||
return result;
|
||||
}
|
||||
}catch (Exception ex){
|
||||
log.info("applyTwo申请任务异常,任务类型为:---------------------------------------------"+type+"异常信息为"+ex.toString());
|
||||
result.put("status", HttpStatus.BAD_REQUEST.value());
|
||||
result.put("message","申请任务异常,任务类型为:"+type+"异常信息为"+ex.toString());
|
||||
return result;
|
||||
}
|
||||
finally {
|
||||
if (tryLock) {
|
||||
|
||||
Reference in New Issue
Block a user