diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml index d08ade145..b2dd6d33c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml @@ -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') AND sale_order_name LIKE CONCAT('%', #{sale_order_name}, '%') diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java index 69f0cf497..bb2774e37 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java @@ -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 queryContainerization(Map whereJson, PageQuery pageable) { Page 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 packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class); List isOutBox = packagerelationList.stream().filter(r -> r.getStatus().equals("0")).collect(Collectors.toList()); - if (isOutBox.size() > 0) { - throw new BadRequestException("标记为黄色的子卷号已分配木箱,请重新选择未分配木箱的子卷"); - } - List 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 pdmBiSubpackagerelationList = pdmBiSubpackagerelationMapper - .selectList(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getSale_order_name, whereJson.getString("sale_order_name"))); + .selectList(new LambdaQueryWrapper().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 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 updateWrapper = new UpdateWrapper<>(); String boxType = whereJson.getString("checked"); @@ -440,8 +446,38 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl entityList, List 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 bstIvtPackageinfoivtList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper().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 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 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 entityList, String boxSn) { + UpdateWrapper 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 packagerelationList, String deviceCode, String boxSn) { + protected void agvTransfer(List packagerelationList, String deviceCode, String boxSn) { //待检区点位 List djqPointList = packageinfoivtService .list(new LambdaUpdateWrapper() @@ -571,7 +599,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl 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()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutEmpTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutEmpTask.java index 81c4b1f54..bbe974087 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutEmpTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutEmpTask.java @@ -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("托盘类型不能为空!"); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java index 7b09ce8a2..1217b4be8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java @@ -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); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java index 62f100129..b530d2f1d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java @@ -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); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java index 0e1627be5..ff459e99d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java @@ -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("放空(空载具缓存位->输送线)")); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java index dd5ad95cf..3cc003f8b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java @@ -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 '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().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().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); // 生成任务 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java index b58db433f..832d900ae 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java @@ -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) { //生成空托盘出库任务 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java index 17cfb5c40..b299ad1cb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBussManageServiceImpl.java @@ -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)) { 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 index e9b6c7a76..d9d300604 100644 --- 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 @@ -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); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java index c419f8b50..acb269bd8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java @@ -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 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().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); // 查询移出货位的库存物料 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutVehicleManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutVehicleManageServiceImpl.java index 27e78ddd7..7b97a0da3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutVehicleManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutVehicleManageServiceImpl.java @@ -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)) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBussManageService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBussManageService.java index 332a11f87..45ebf41ae 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBussManageService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/service/InBussManageService.java @@ -38,6 +38,7 @@ public interface InBussManageService { * sect_id:库区标识 * material_id: 物料标识 * box_no:木箱号 + * move_block_num: 是否移库:提前确定巷道 * } * @return JSONObject 仓位对象 */ 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 index 0d86dce68..d5ae9ab9e 100644 --- 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 @@ -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: 任务组 * * } */ diff --git a/lms/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java b/lms/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java index d0405e84d..9eb668558 100644 --- a/lms/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java +++ b/lms/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java @@ -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) -> { diff --git a/lms/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskProperties.java b/lms/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskProperties.java index 51c6f92ab..b97096f0e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskProperties.java +++ b/lms/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskProperties.java @@ -37,4 +37,6 @@ public class AsyncTaskProperties { private int keepAliveSeconds; private int queueCapacity; + + private int awaitTerminationSeconds; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java index 6ea777cfa..75d52607a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java @@ -43,6 +43,8 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { @Override public Map 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)) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_ME_MATERIAL.wql b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_ME_MATERIAL.wql index e42bb7ce0..fea6e648c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_ME_MATERIAL.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_ME_MATERIAL.wql @@ -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 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index bb50cebe3..ea8d1d595 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -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) { diff --git a/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue b/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue index 64daf2c6d..7313a8da2 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/sub/MaterDialog.vue @@ -66,7 +66,7 @@ export default { url: 'api/Materialbase', idField: 'material_id', sort: 'material_id,desc', - query: { search: 'MX', material_id: '' }, + query: { box: '木箱', material_id: '' }, crudMethod: { ...crudMaterattr } }) },