Merge commit '9186ce137f2a67a4d8d7bb1cbfcc40cf69729d22' into master_merge

This commit is contained in:
2024-06-18 16:37:40 +08:00
24 changed files with 260 additions and 103 deletions

View File

@@ -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>

View File

@@ -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);
}

View File

@@ -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(""))) {

View File

@@ -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("托盘类型不能为空!");
}

View File

@@ -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);
}
// 取消

View File

@@ -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());

View File

@@ -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("托盘类型不能为空!");
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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("放空(空载具缓存位->输送线)"));

View File

@@ -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);
// 生成任务

View File

@@ -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) {
//生成空托盘出库任务

View File

@@ -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)) {

View File

@@ -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);

View File

@@ -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);
// 查询移出货位的库存物料

View File

@@ -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)) {

View File

@@ -38,6 +38,7 @@ public interface InBussManageService {
* sect_id库区标识
* material_id: 物料标识
* box_no木箱号
* move_block_num: 是否移库:提前确定巷道
* }
* @return JSONObject 仓位对象
*/

View File

@@ -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: 任务组
*
* }
*/

View File

@@ -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) -> {

View File

@@ -37,4 +37,6 @@ public class AsyncTaskProperties {
private int keepAliveSeconds;
private int queueCapacity;
private int awaitTerminationSeconds;
}

View File

@@ -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)) {

View File

@@ -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

View File

@@ -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) {