fix:新增装箱桁架

This commit is contained in:
zhouz
2026-01-12 19:26:40 +08:00
parent b43002396b
commit 30130025b0
8 changed files with 139 additions and 58 deletions

View File

@@ -208,8 +208,7 @@ public class PdmBiSubpackagerelationController {
//@SaCheckPermission("@el.check(updateEntityList)") //@SaCheckPermission("@el.check(updateEntityList)")
public ResponseEntity<Object> getPointCode(@RequestBody JSONObject whereJson) { public ResponseEntity<Object> getPointCode(@RequestBody JSONObject whereJson) {
Integer num = whereJson.getInteger("num"); Integer num = whereJson.getInteger("num");
pdmBiSubpackagerelationService.getPointCode(num); return new ResponseEntity<>(pdmBiSubpackagerelationService.getPointCode(num),HttpStatus.OK);
return new ResponseEntity<>(HttpStatus.OK);
} }
/** /**

View File

@@ -216,15 +216,13 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
//调用MES接口判断是否是NG卷 //调用MES接口判断是否是NG卷
JSONObject result_jo = new JSONObject(); JSONObject result_jo = new JSONObject();
result_jo.put("container_name", whereJson.get("container_name")); result_jo.put("container_name", whereJson.get("container_name"));
//todo S把注释去掉 JSONObject jsonObject = lmsToMesServiceImpl.GetChildWeightIsSamplePDA(result_jo);
// JSONObject jsonObject = lmsToMesServiceImpl.GetChildWeightIsSamplePDA(result_jo); if (ObjectUtils.isEmpty(jsonObject) || !jsonObject.containsKey("result")) {
// if (ObjectUtils.isEmpty(jsonObject) || !jsonObject.containsKey("result")) { throw new BadRequestException("反馈内容有误," + jsonObject.toString());
// throw new BadRequestException("反馈内容有误," + jsonObject.toString()); }
// } if (!jsonObject.getBoolean("result")) {
// if (!jsonObject.getBoolean("result")) { throw new BadRequestException("MES查询出当前子卷【" + whereJson.get("container_name") + "】检测结果不通过无法进行装箱MES反馈内容为" + jsonObject.getString("rtdat") + "");
// throw new BadRequestException("MES查询出当前子卷【" + whereJson.get("container_name") + "】检测结果不通过无法进行装箱MES反馈内容为【" + jsonObject.getString("rtdat") + "】"); }
// }
//todo E把注释去掉
// if (ivtList.stream().noneMatch(r -> r.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("待检区")))) { // if (ivtList.stream().noneMatch(r -> r.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("待检区")))) {
// throw new BadRequestException("该子卷不在待检区,请检查!"); // throw new BadRequestException("该子卷不在待检区,请检查!");
// } // }
@@ -364,7 +362,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
.eq("status", "0") .eq("status", "0")
.in("container_name", split)); .in("container_name", split));
if (CollectionUtils.isEmpty(subList)) { if (CollectionUtils.isEmpty(subList)) {
throw new BadRequestException("当前子卷还组盘"); throw new BadRequestException("当前子卷还组盘");
} }
if (subList.size() != split.length) { if (subList.size() != split.length) {
throw new BadRequestException("子卷包装信息与子卷不相符合"); throw new BadRequestException("子卷包装信息与子卷不相符合");
@@ -379,19 +377,10 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
if (StringUtils.isEmpty(containerName)) { if (StringUtils.isEmpty(containerName)) {
throw new BadRequestException("子卷编码不能为空"); throw new BadRequestException("子卷编码不能为空");
} }
String deviceCode = "ZXQ_1_1";
int count = taskService.count(new QueryWrapper<SchBaseTask>()
.eq("task_type", "010908")
.eq("is_delete", "0")
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
int count2 = packageinfoivtService.count(new QueryWrapper<BstIvtPackageinfoivt>()
.eq("point_status", PackageInfoIvtEnum.POINT_STATUS.code("装箱区"))
.eq("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("合格品")));
if (count + count2 > 8) {
throw new BadRequestException("当前装箱区木箱任务已满,稍后再试");
}
String[] split = containerName.split(","); String[] split = containerName.split(",");
String deviceCode = this.getPointCode(split.length);
//理论毛重 //理论毛重
List<PdmBiSubpackagerelation> subList = this.list(new QueryWrapper<PdmBiSubpackagerelation>() List<PdmBiSubpackagerelation> subList = this.list(new QueryWrapper<PdmBiSubpackagerelation>()
.eq("status", "0") .eq("status", "0")
@@ -448,23 +437,23 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
if (ObjectUtil.isEmpty(浅Attr)) { if (ObjectUtil.isEmpty(浅Attr)) {
throw new BadRequestException(boxAttr.getString("struct_code") + "对应浅货位信息不正确"); throw new BadRequestException(boxAttr.getString("struct_code") + "对应浅货位信息不正确");
} }
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("is_delete", "0")
.and(wq -> wq.eq("point_code1", 浅Attr.getString("struct_code")).or().eq("point_code2", 浅Attr.getString("struct_code")))
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
if (ObjectUtil.isEmpty(浅Attr.getString("storagevehicle_code"))) { if (ObjectUtil.isEmpty(浅Attr.getString("storagevehicle_code"))) {
if (!浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { if (!浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定")) && ObjectUtil.isNotEmpty(list)) {
throw new BadRequestException("木箱货位" + boxAttr.getString("struct_code") + "的浅货位存在正在执行的任务"); throw new BadRequestException("木箱货位" + boxAttr.getString("struct_code") + "的浅货位存在正在执行的任务" + list.get(0).getTask_code());
} }
} else { } else {
if (浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { if (浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
// 判断浅货位木箱和深货位木箱是否相同规格 // 判断浅货位木箱和深货位木箱是否相同规格
task_group_id = outBoxManageService.createBoxMove(浅Attr); task_group_id = outBoxManageService.createBoxMove(浅Attr);
} else { } else {
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("is_delete", "0")
.eq("point_code1", 浅Attr.getString("struct_code"))
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
throw new BadRequestException("当前木箱所在货位" + boxAttr.getString("struct_code") + "对应浅货位" + 浅Attr.getString("struct_code") + "存在任务" + 浅Attr.getString("task_code")); throw new BadRequestException("当前木箱所在货位" + boxAttr.getString("struct_code") + "对应浅货位" + 浅Attr.getString("struct_code") + "存在任务" + list.get(0).getTask_code());
} }
throw new BadRequestException("当前木箱所在货位" + boxAttr.getString("struct_code") + "对应浅货位" + 浅Attr.getString("struct_code") + "被锁定" + 浅Attr.getString("task_code")); throw new BadRequestException("当前木箱所在货位" + boxAttr.getString("struct_code") + "对应浅货位" + 浅Attr.getString("struct_code") + "被锁定" + 浅Attr.getString("storagevehicle_code"));
} }
} }
} }
@@ -639,10 +628,77 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
if (ObjectUtils.isEmpty(bstIvtPackageinfoivtList)) { if (ObjectUtils.isEmpty(bstIvtPackageinfoivtList)) {
throw new BadRequestException("没有可用的装箱区对接位"); throw new BadRequestException("没有可用的装箱区对接位");
} }
bstIvtPackageinfoivtList.forEach(r -> {
int count = taskService.count(new QueryWrapper<SchBaseTask>()
.eq("task_type", "010908")
.eq("is_delete", "0")
.eq("vehicle_code2", r.getBlock())
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
int count2 = packageinfoivtService.count(new QueryWrapper<BstIvtPackageinfoivt>()
.eq("point_status", PackageInfoIvtEnum.POINT_STATUS.code("装箱区"))
.eq("block", r.getBlock())
.eq("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("合格品")));
if (count + count2 + entitySize > 8) {
bstIvtPackageinfoivtList.remove(r);
}
});
if (ObjectUtils.isEmpty(bstIvtPackageinfoivtList)) {
throw new BadRequestException("当前装箱区木箱任务已满,稍后再试");
}
String pointCode = "";
//装箱区任务数
List<Map<String, Object>> zxTaskCount = bstIvtPackageinfoivtMapper.getZxqTaskCount();
if (ObjectUtils.isNotEmpty(zxTaskCount)) {
Set<String> packageCodeSet = bstIvtPackageinfoivtList.stream()
.map(BstIvtPackageinfoivt::getPoint_code)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
// 从zxTaskCount中过滤出bstIvtPackageinfoivtList不包含的point_code并按count和point_code2排序
List<Map<String, Object>> filteredZxTaskCount = zxTaskCount.stream()
.filter(map -> {
Object pointCodeObj = map.get("point_code");
String code = pointCodeObj != null ? pointCodeObj.toString() : null;
// 过滤掉包含在packageCodeSet中的只保留包含的
return code != null && packageCodeSet.contains(code);
})
.collect(Collectors.toList());
return filteredZxTaskCount.get(0).get("point_code").toString();
} else {
pointCode = bstIvtPackageinfoivtList.get(0).getPoint_code();
}
return pointCode;
}
public String getPointCode2(Integer entitySize) {
//装箱区对接位
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = bstIvtPackageinfoivtMapper.selectList(new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("装箱位"))
.eq(BstIvtPackageinfoivt::getIs_used, IOSEnum.IS_NOTANDYES.code(""))
.orderByAsc(BstIvtPackageinfoivt::getPoint_code));
if (ObjectUtils.isEmpty(bstIvtPackageinfoivtList)) {
throw new BadRequestException("没有可用的装箱区对接位");
}
String deviceCode = "ZXQ_1_1";
int count = taskService.count(new QueryWrapper<SchBaseTask>()
.eq("task_type", "010908")
.eq("is_delete", "0")
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
int count2 = packageinfoivtService.count(new QueryWrapper<BstIvtPackageinfoivt>()
.eq("point_status", PackageInfoIvtEnum.POINT_STATUS.code("装箱区"))
.eq("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("合格品")));
if (count + count2 > 8) {
throw new BadRequestException("当前装箱区木箱任务已满,稍后再试");
}
Map<String, Integer> resultMap = new LinkedHashMap<>(); Map<String, Integer> resultMap = new LinkedHashMap<>();
Set<String> zxIvtSet = bstIvtPackageinfoivtList.stream().map(BstIvtPackageinfoivt::getBlock).collect(Collectors.toSet()); Set<String> zxIvtSet = bstIvtPackageinfoivtList.stream().map(BstIvtPackageinfoivt::getBlock).collect(Collectors.toSet());
//装箱区任务数 //装箱区任务数
List<Map<String, Object>> zxTaskCount = bstIvtPackageinfoivtMapper.getZxqTaskCount(zxIvtSet); List<Map<String, Object>> zxTaskCount = bstIvtPackageinfoivtMapper.getZxqTaskCount();
if (ObjectUtils.isNotEmpty(zxTaskCount)) { if (ObjectUtils.isNotEmpty(zxTaskCount)) {
for (Map<String, Object> map : zxTaskCount) { for (Map<String, Object> map : zxTaskCount) {
String pointCode = map.get("point_code2").toString(); String pointCode = map.get("point_code2").toString();
@@ -673,7 +729,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
//任务数量超过10个不满足装箱任务创建 //任务数量超过10个不满足装箱任务创建
result.removeIf(map -> { result.removeIf(map -> {
Map.Entry<String, Integer> entry = map.entrySet().iterator().next(); Map.Entry<String, Integer> entry = map.entrySet().iterator().next();
return entry.getValue() + entitySize > 10; return entry.getValue() + entitySize > 8;
}); });
//获取数量最少的点位 //获取数量最少的点位
Optional<String> minPointCode = result.stream() Optional<String> minPointCode = result.stream()

View File

@@ -27,7 +27,7 @@ public interface BstIvtPackageinfoivtMapper extends BaseMapper<BstIvtPackageinfo
/** /**
* 获取待检区到装箱区的任务数量 * 获取待检区到装箱区的任务数量
*/ */
List<Map<String, Object>> getZxqTaskCount(Set<String> groupIds); List<Map<String, Object>> getZxqTaskCount();
/** /**

View File

@@ -12,26 +12,22 @@
</select> </select>
<select id="getZxqTaskCount" resultType="java.util.Map"> <select id="getZxqTaskCount" resultType="java.util.Map">
SELECT SELECT
CASE bp.point_code,
WHEN t.task_type = '010704' THEN t.point_code2 COALESCE(COUNT(DISTINCT t.task_id), 0) AS count
WHEN t.task_type = '010908' THEN t.vehicle_code2 FROM
END AS point_code2, bst_ivt_packageinfoivt bp -- 你的所有点位基准表
COUNT(*) AS count LEFT JOIN sch_base_task t ON bp.point_code = t.point_code2
FROM sch_base_task t AND t.task_type = '010704'
AND t.task_status <![CDATA[ < ]]> '07'
AND t.is_delete = '0'
LEFT JOIN bst_ivt_packageinfoivt p ON t.point_code2 = p.point_code
AND p.point_status = '5'
WHERE WHERE
t.task_type IN ('010704', '010908') bp.point_code IN ('ZXQ_1_1', 'ZXQ_2_1') -- 指定需要的点位
AND t.create_time >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%s')
AND t.task_status <![CDATA[ < ]]> '07'
<if test="groupIds != null and groupIds.size() > 0">
AND (t.task_type != '010908' OR t.vehicle_code2 IN
<foreach item="code" collection="groupIds" open="(" separator="," close=")">#{code}</foreach>
)
</if>
GROUP BY GROUP BY
CASE bp.point_code
WHEN t.task_type = '010704' THEN t.point_code2 ORDER BY
WHEN t.task_type = '010908' THEN t.vehicle_code2 count, bp.point_code;
END
</select> </select>
<select id="getTaskList1" resultType="org.nl.b_lms.sch.task.dao.SchBaseTask"> <select id="getTaskList1" resultType="org.nl.b_lms.sch.task.dao.SchBaseTask">
SELECT SELECT

View File

@@ -168,9 +168,17 @@ public class TwoOutBoxTask extends AbstractAcsTask {
attrTab.update(jsonAttr); attrTab.update(jsonAttr);
//更新木箱信息 //更新木箱信息
JSONObject packageInfo = packageinfoivt.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); JSONObject packageInfo = packageinfoivt.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
packageInfo.put("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")); if (packageInfo.getString("plan").equals("0")) {
packageInfo.put("container_name", jsonTask.getString("vehicle_code")); packageInfo.put("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具"));
packageinfoivt.update(packageInfo); packageInfo.put("container_name", jsonTask.getString("vehicle_code"));
packageinfoivt.update(packageInfo);
}else {
//校验当前目的地的木箱号与任务中的木箱号是否一致
if (!packageInfo.getString("container_name").equals(jsonTask.getString("vehicle_code"))) {
log.info("目的地的木箱号与任务中的木箱号不一致");
}
}
RedissonUtils.lock(c->{ RedissonUtils.lock(c->{
if (status.equals(TaskStatusEnum.FINISHED.getCode())) { if (status.equals(TaskStatusEnum.FINISHED.getCode())) {
immediateNotifyAcs(null); immediateNotifyAcs(null);

View File

@@ -181,6 +181,7 @@ public class AutoSendZxToDjw extends Prun{
//子卷号 //子卷号
param.put("frpModel", paperSize); param.put("frpModel", paperSize);
param.put("barcode", containerName); param.put("barcode", containerName);
param.put("isHave", "0");
jo.put("request_param", param.toString()); jo.put("request_param", param.toString());
zxDjwTask.createTask(jo); zxDjwTask.createTask(jo);
} }

View File

@@ -2,6 +2,7 @@ package org.nl.wms.ext.acs.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import org.nl.b_lms.sch.point.dao.mapper.BstIvtPackageinfoivtMapper;
import org.nl.common.utils.IdUtil; import org.nl.common.utils.IdUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
@@ -178,6 +179,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Resource @Resource
private SsxDjwTask ssxDjwTask; private SsxDjwTask ssxDjwTask;
@Resource
private IbstIvtPackageinfoivtService ibstIvtPackageinfoivtService;
@Autowired @Autowired
private ISysParamService iSysParamService; private ISysParamService iSysParamService;
@@ -3041,6 +3045,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
public JSONObject getIsUncap(JSONObject param) { public JSONObject getIsUncap(JSONObject param) {
String material_barcode = param.getString("material_barcode"); String material_barcode = param.getString("material_barcode");
String vehicle_code = param.getString("vehicle_code"); String vehicle_code = param.getString("vehicle_code");
String task_code = param.getString("task");
//干燥剂模板 //干燥剂模板
String desiccantTemplate = "6"; String desiccantTemplate = "6";
//是否开盖 //是否开盖
@@ -3098,6 +3103,22 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
jsonObject.put("isUncap", isUncap); jsonObject.put("isUncap", isUncap);
jsonObject.put("heightLevel", height); jsonObject.put("heightLevel", height);
jsonObject.put("status", HttpStatus.OK.value()); jsonObject.put("status", HttpStatus.OK.value());
//判断该任务是否属于空木箱出库任务
SchBaseTask one = taskService.getOne(new LambdaQueryWrapper<SchBaseTask>().eq(SchBaseTask::getTask_code, task_code));
if (one.getHandle_class().equals("org.nl.b_lms.sch.tasks.TwoOutBoxTask")){
BstIvtPackageinfoivt packageinfoivt = ibstIvtPackageinfoivtService.getOne(new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getPoint_code, one.getPoint_code2()));
if (packageinfoivt.getPlan().equals("1")){
//往redis里面添加空木箱队列
if (redisUtils.lGetListSize(one.getPoint_code2()) == 0 || !redisUtils.lGetIndex(one.getPoint_code2(), -1).equals(material_barcode)){
redisUtils.lSet(one.getPoint_code2(),material_barcode);
}else {
log.info("reids队列中的最后一个木箱与当前木箱一致");
}
}
}
return jsonObject; return jsonObject;
} }

View File

@@ -212,7 +212,7 @@
> >
设置站点 设置站点
</el-button>--> </el-button>-->
<el-button <!-- <el-button
v-if="this.mstrow.bill_type !== '1011' && mstrow.stor_id !== '1582991156504039455'" v-if="this.mstrow.bill_type !== '1011' && mstrow.stor_id !== '1582991156504039455'"
slot="left" slot="left"
class="filter-item" class="filter-item"
@@ -224,7 +224,7 @@
@click="oneSetPoint2" @click="oneSetPoint2"
> >
设置站点 设置站点
</el-button> </el-button>-->
<el-button <el-button
v-if="this.mstrow.bill_type !== '1011'" v-if="this.mstrow.bill_type !== '1011'"
slot="left" slot="left"