fix:去除桁架任务卡控了逻辑、新增空木箱出库改为系统参数配置卡控

This commit is contained in:
zhouz
2026-04-01 14:15:41 +08:00
parent 0cb1b47d59
commit f97b2edcb5
11 changed files with 195 additions and 20 deletions

View File

@@ -32,6 +32,7 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.system.service.param.ISysParamService;
import org.nl.system.service.param.dao.Param;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.basedata.st.service.StructattrService;
@@ -97,6 +98,9 @@ public class VehicleTwoServiceImpl implements VehicleTwoService {
@Autowired
private StructattrService structattrService;
@Autowired
private ISysParamService iSysParamService;
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject vehicleIn(JSONObject whereJson) {
@@ -293,6 +297,19 @@ public class VehicleTwoServiceImpl implements VehicleTwoService {
.eq(BstIvtBoxinfo::getBox_no, boxNo)
);
if (boxDao != null) {
//校验长宽高是否符合
String box_limit_width = iSysParamService.findByCode("box_limit_width").getValue();
String box_limit_length = iSysParamService.findByCode("box_limit_length").getValue();
String box_limit_height = iSysParamService.findByCode("box_limit_height").getValue();
if (Integer.parseInt(box_limit_width) < Integer.parseInt(boxDao.getBox_width())) {
throw new BadRequestException("当前木箱宽度大于【"+box_limit_width+"】,不允许入库!");
}
if (Integer.parseInt(box_limit_length) < Integer.parseInt(boxDao.getBox_length())) {
throw new BadRequestException("当前木箱长度大于【"+box_limit_width+"】,不允许入库!");
}
if (Integer.parseInt(box_limit_height) < Integer.parseInt(boxDao.getBox_high())) {
throw new BadRequestException("当前木箱高度大于【"+box_limit_width+"】,不允许入库!");
}
whereJson.put("vehicleType", boxDao.getVehicle_type());
boxDao.setIs_packing("1");
iBstIvtBoxinfoService.updateById(boxDao);
@@ -309,6 +326,19 @@ public class VehicleTwoServiceImpl implements VehicleTwoService {
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, boxNo)
);
//校验长宽高是否符合
String box_limit_width = iSysParamService.findByCode("box_limit_width").getValue();
String box_limit_length = iSysParamService.findByCode("box_limit_length").getValue();
String box_limit_height = iSysParamService.findByCode("box_limit_height").getValue();
if (Integer.parseInt(box_limit_width) < Integer.parseInt(boxDao1.getBox_width())) {
throw new BadRequestException("当前木箱宽度大于【"+box_limit_width+"】,不允许入库!");
}
if (Integer.parseInt(box_limit_length) < Integer.parseInt(boxDao1.getBox_length())) {
throw new BadRequestException("当前木箱长度大于【"+box_limit_width+"】,不允许入库!");
}
if (Integer.parseInt(box_limit_height) < Integer.parseInt(boxDao1.getBox_high())) {
throw new BadRequestException("当前木箱高度大于【"+box_limit_width+"】,不允许入库!");
}
boxDao1.setIs_packing("1");
iBstIvtBoxinfoService.updateById(boxDao1);
whereJson.put("vehicleType", boxDao1.getVehicle_type());

View File

@@ -112,7 +112,7 @@ public class AutoIssueOutEmptyTask {
sortedArr.addAll(taskList);
for (int i = 0; i < sortedArr.size(); i++) {
if (num >= 2) {
if (num >= empty_num) {
break;
}
ArrayList<AcsTaskDto> resultList = new ArrayList<>();

View File

@@ -127,10 +127,10 @@ public class InBoxManageServiceImpl implements InBoxManageService {
.eq("is_delete", "0")
.orderByDesc("task_id")
.last("limit 1"));
String vehicleCode2 = one.getVehicle_code2();
if (one!=null){
if (whereJson.getString("vehicle_code").equals(vehicleCode2)){
throw new BadRequestException("当前托盘"+whereJson.getString("vehicle_code")+"已经存在木箱入库任务"+one.getTask_code());
if (one != null) {
String vehicleCode2 = one.getVehicle_code2();
if (whereJson.getString("vehicle_code").equals(vehicleCode2)) {
throw new BadRequestException("当前托盘" + whereJson.getString("vehicle_code") + "已经存在木箱入库任务" + one.getTask_code());
}
}
@@ -138,14 +138,14 @@ public class InBoxManageServiceImpl implements InBoxManageService {
JSONObject vehicle_ext = WQLObject.getWQLObject("md_pb_storagevehicleext").query("storagevehicle_code = '" + whereJson.getString("vehicle_code") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(vehicle_ext)) {
throw new BadRequestException("未查询到托盘的扩展信息");
}else {
} else {
//判断托盘重量是否为空或小于等于0
String qty = vehicle_ext.getString("qty");
if (StrUtil.isEmpty(qty) || Double.parseDouble(qty) <= 0){
throw new BadRequestException("托盘【"+whereJson.getString("vehicle_code")+"】在系统的重量有误,请在载具维护页面中维护托盘实际重量!");
if (StrUtil.isEmpty(qty) || Double.parseDouble(qty) <= 0) {
throw new BadRequestException("托盘【" + whereJson.getString("vehicle_code") + "】在系统的重量有误,请在载具维护页面中维护托盘实际重量!");
}
String pcsn = vehicle_ext.getString("pcsn");
if (ObjectUtil.isNotEmpty(pcsn)){
if (ObjectUtil.isNotEmpty(pcsn)) {
//更新子卷入库备注信息
JSONObject jsonTaskParam = new JSONObject();
//创建异常任务去异常入库口
@@ -154,7 +154,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
//异常位
jsonTaskParam.put("point_code2", "RK1003");
jsonTaskParam.put("vehicle_code", boxNo);
jsonTaskParam.put("remark", "当前托盘【"+whereJson.getString("vehicle_code")+"】已经绑定木箱【"+pcsn+"】,无法重复绑定!");
jsonTaskParam.put("remark", "当前托盘【" + whereJson.getString("vehicle_code") + "】已经绑定木箱【" + pcsn + "】,无法重复绑定!");
jsonTaskParam.put("vehicle_code2", whereJson.getString("vehicle_code"));
JSONObject request_param = new JSONObject();
if (whereJson.getString("vehicle_code").startsWith("A")) {
@@ -174,6 +174,38 @@ public class InBoxManageServiceImpl implements InBoxManageService {
}
}
//查询木箱重量
BstIvtBoxinfo boxinfo = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, boxNo));
if (ObjectUtil.isEmpty(boxinfo.getBox_weight()) || Double.parseDouble(boxinfo.getBox_weight()) == 0) {
//更新子卷入库备注信息
JSONObject jsonTaskParam = new JSONObject();
//创建异常任务去异常入库口
//入库口
jsonTaskParam.put("point_code1", whereJson.getString("device_code"));
//异常位
jsonTaskParam.put("point_code2", "RK1003");
jsonTaskParam.put("vehicle_code", boxNo);
jsonTaskParam.put("remark", "当前木箱重量为0不能进行入库");
jsonTaskParam.put("vehicle_code2", whereJson.getString("vehicle_code"));
JSONObject request_param = new JSONObject();
if (whereJson.getString("vehicle_code").startsWith("A")) {
request_param.put("containerType", "2");
} else if (whereJson.getString("vehicle_code").startsWith("B")) {
request_param.put("containerType", "1");
} else {
throw new BadRequestException("托盘号有误,无法找到对应的托盘类型!");
}
jsonTaskParam.put("request_param", request_param);
TwoExceptionInTask bean = SpringContextHolder.getBean(TwoExceptionInTask.class);
bean.createTask(jsonTaskParam);
bean.immediateNotifyAcs(null);
return;
}
//查询仓库是否存在相同木箱
JSONArray stIvtStructattr = WQLObject.getWQLObject("st_ivt_structattr").query("storagevehicle_code = '" + boxNo + "'").getResultJSONArray(0);
if (stIvtStructattr != null && stIvtStructattr.size() > 0) {
@@ -228,7 +260,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
JSONObject param = new JSONObject();
param.put("containerType", boxDao.getVehicle_type());
jsonTaskParam.put("request_param", param.toString());
TwoInBoxTask taskBean = new TwoInBoxTask();
TwoInBoxTask taskBean = SpringContextHolder.getBean(TwoInBoxTask.class);
taskBean.createTask(jsonTaskParam);
taskBean.immediateNotifyAcs(null);
// 锁定终点
@@ -294,9 +326,10 @@ public class InBoxManageServiceImpl implements InBoxManageService {
BstIvtBoxinfo boxinfo = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, boxNo));
if (ObjectUtil.isEmpty(boxinfo.getBox_weight()) || Double.parseDouble(boxinfo.getBox_weight()) == 0) {
//2026.3.27木箱重量改为称重模块获取,在空木箱入库口进行校验
/*if (ObjectUtil.isEmpty(boxinfo.getBox_weight()) || Double.parseDouble(boxinfo.getBox_weight()) == 0) {
throw new BadRequestException("请先维护木箱重量后进行入库!");
}
}*/
if (StrUtil.isEmpty(boxType)) {
boxType = boxinfo.getMaterial_code();
} else {
@@ -315,6 +348,21 @@ public class InBoxManageServiceImpl implements InBoxManageService {
throw new BadRequestException("木箱不存在!");
}
//校验长宽高是否符合
String box_limit_width = iSysParamService.findByCode("box_limit_width").getValue();
String box_limit_length = iSysParamService.findByCode("box_limit_length").getValue();
String box_limit_height = iSysParamService.findByCode("box_limit_height").getValue();
if (Integer.parseInt(box_limit_width) < Integer.parseInt(boxDao.getBox_width())) {
throw new BadRequestException("当前木箱宽度大于【" + box_limit_width + "】,不允许入库!");
}
if (Integer.parseInt(box_limit_length) < Integer.parseInt(boxDao.getBox_length())) {
throw new BadRequestException("当前木箱长度大于【" + box_limit_width + "】,不允许入库!");
}
if (Integer.parseInt(box_limit_height) < Integer.parseInt(boxDao.getBox_high())) {
throw new BadRequestException("当前木箱高度大于【" + box_limit_width + "】,不允许入库!");
}
//查询当前入库拆叠盘位的托盘类型是否一致如果一致
String vehicle_type = boxDao.getVehicle_type();
@@ -426,7 +474,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
param.put("height", boxDao.getBox_high());
param.put("containerType", boxDao.getVehicle_type());
param.put("barcode", whereJson.getString("box_no") + "-9" );
param.put("barcode", whereJson.getString("box_no") + "-9");
//根据木箱高度,判断入库仓位的高度
String height = "";
String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue();
@@ -483,8 +531,8 @@ public class InBoxManageServiceImpl implements InBoxManageService {
.ge(SchBaseTask::getCreate_time, queryDate)
.le(SchBaseTask::getCreate_time, DateUtil.now())
);
if (hasCount>0) {
throw new BadRequestException("当前木箱【"+whereJson.getString("box_no")+"】在1个小时之内生成过行架任务!");
if (hasCount > 0) {
throw new BadRequestException("当前木箱【" + whereJson.getString("box_no") + "】在1个小时之内生成过行架任务!");
}
// 根据木箱号查询是否有托盘绑定关系,如果有则解绑
@@ -533,6 +581,21 @@ public class InBoxManageServiceImpl implements InBoxManageService {
if (boxDao == null) {
throw new BadRequestException("木箱不存在!");
}
//校验长宽高是否符合
String box_limit_width = iSysParamService.findByCode("box_limit_width").getValue();
String box_limit_length = iSysParamService.findByCode("box_limit_length").getValue();
String box_limit_height = iSysParamService.findByCode("box_limit_height").getValue();
if (Integer.parseInt(box_limit_width) < Integer.parseInt(boxDao.getBox_width())) {
throw new BadRequestException("当前木箱宽度大于【" + box_limit_width + "】,不允许入库!");
}
if (Integer.parseInt(box_limit_length) < Integer.parseInt(boxDao.getBox_length())) {
throw new BadRequestException("当前木箱长度大于【" + box_limit_width + "】,不允许入库!");
}
if (Integer.parseInt(box_limit_height) < Integer.parseInt(boxDao.getBox_high())) {
throw new BadRequestException("当前木箱高度大于【" + box_limit_width + "】,不允许入库!");
}
boxDao.setIs_packing("1");
iBstIvtBoxinfoService.updateById(boxDao);
@@ -796,7 +859,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
// 如果是移库空并且仓位为空则报错
if (ObjectUtil.isNotEmpty(block_num) && ObjectUtil.isEmpty(jsonAttr)) {
throw new BadRequestException("转库任务巷道"+block_num+"仓位不足!");
throw new BadRequestException("转库任务巷道" + block_num + "仓位不足!");
}
// 为空则新找巷道
@@ -837,7 +900,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
notInBlockList.clear();
} else {
throw new BadRequestException("存在正在分配的空木箱任务,请稍后再试!");
throw new BadRequestException("存在正在分配的空木箱任务,请稍后再试!");
}
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
@@ -849,6 +912,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
/**
* 同巷道移库查看库位
*
* @param jsonParam
* @return
*/
@@ -860,7 +924,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
* 判断条件:库区、仓库、是否启用、是否删除、未锁定、没有载具
*/
String block_num = jsonParam.getString("move_block_num");
if (StringUtils.isEmpty(block_num)){
if (StringUtils.isEmpty(block_num)) {
throw new BadRequestException("同巷道分配库位巷道参数不能为空");
}
JSONArray structArray = attrTab.query("IFNULL(storagevehicle_code,'') = '' " +
@@ -884,7 +948,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
// 为空则新找巷道
if (ObjectUtil.isEmpty(jsonAttr)) {
throw new BadRequestException("当前巷道"+block_num+"没有可用库位");
throw new BadRequestException("当前巷道" + block_num + "没有可用库位");
}
notInRowList.clear();

View File

@@ -244,4 +244,11 @@ public class AcsToWmsController {
public ResponseEntity<Object> forceMove(@RequestBody JSONObject param) {
return new ResponseEntity<>(acsToWmsService.forceMove(param), HttpStatus.OK);
}
@PostMapping("/feedBackBoxWeight")
@Log(value = "二期木箱桁架反馈木箱重量", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@SaIgnore
public ResponseEntity<Object> feedBackBoxWeight(@RequestBody JSONObject param) {
return new ResponseEntity<>(acsToWmsService.feedBackBoxWeight(param), HttpStatus.OK);
}
}

View File

@@ -246,4 +246,11 @@ public interface AcsToWmsService {
* @return
*/
JSONObject acsRequestPoint(JSONObject param);
/**
* 二期木箱桁架反馈木箱重量
* @param param
* @return
*/
JSONObject feedBackBoxWeight(JSONObject param);
}

View File

@@ -76,6 +76,10 @@ public interface WmsToAcsService {
*/
JSONObject updateTask(JSONArray arr);
JSONObject changePointMove(JSONObject jo);
/**
* 更新任务状态
*

View File

@@ -3,6 +3,7 @@ package org.nl.wms.ext.acs.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import org.nl.b_lms.sch.point.dao.mapper.BstIvtPackageinfoivtMapper;
import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper;
import org.nl.common.utils.IdUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -208,6 +209,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Autowired
private RedisUtils redisUtils;
@Resource
private BstIvtBoxinfoMapper bstIvtBoxinfoMapper;
/**
* task_id任务标识
* task_code任务编码
@@ -3298,4 +3302,25 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
return stepTipLogs;
}
@Override
public JSONObject feedBackBoxWeight(JSONObject param) {
log.info("feedBackBoxWeight输入参数为--------------------------" + param.toString());
String barcode = param.getString("barcode");
String task_code = param.getString("task_code");
String weight = param.getString("weight");
BstIvtBoxinfo boxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no, barcode));
if (boxinfo == null) {
throw new BadRequestException("未查询到该木箱对应的木箱信息");
}
boxinfo.setBox_weight(weight);
bstIvtBoxinfoMapper.updateById(boxinfo);
JSONObject result = new JSONObject();
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
log.info("feedBackBoxWeight输出参数为--------------------------" + result.toString());
return result;
}
}

View File

@@ -76,6 +76,12 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
return AcsUtil.notifyAcs(api, whereJson);
}
@Override
public JSONObject changePointMove(JSONObject jo) {
String api = "/api/wms/setDeviceMove";
return AcsUtil.notifyAcsObject(api, jo);
}
@Override
public JSONObject action(JSONArray whereJson) {
String api = "api/wms/action";

View File

@@ -100,4 +100,12 @@ public class RawFoilController {
rawFoilService.finish(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/changePointMove")
@Log("ACS库存变更")
public ResponseEntity<Object> changePointMove(@RequestBody JSONObject whereJson) {
rawFoilService.changePointMove(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -84,4 +84,6 @@ public interface RawFoilService {
* @return JSONObject
*/
JSONObject finish(JSONObject whereJson);
JSONObject changePointMove(JSONObject whereJson);
}

View File

@@ -665,4 +665,26 @@ public class RawFoilServiceImpl implements RawFoilService {
jo.put("message", "操作成功!");
return jo;
}
@Override
public JSONObject changePointMove(JSONObject whereJson) {
String point_code = whereJson.getString("point_code");
try {
String product_area = point_code.substring(0,2);
whereJson.put("product_area",product_area);
}catch (Exception e){
throw new BadRequestException("输入的点位有误请核对!");
}
//调用ACS接口
WmsToAcsServiceImpl wmsToAcsService = SpringContextHolder.getBean(WmsToAcsServiceImpl.class);
JSONObject result = wmsToAcsService.changePointMove(whereJson);
if (!StrUtil.equals(result.getString("status"), "200")) {
throw new BadRequestException("操作失败:" + result.getString("message "));
}
JSONObject jo = new JSONObject();
jo.put("message", "操作成功!");
return jo;
}
}