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)")
public ResponseEntity<Object> getPointCode(@RequestBody JSONObject whereJson) {
Integer num = whereJson.getInteger("num");
pdmBiSubpackagerelationService.getPointCode(num);
return new ResponseEntity<>(HttpStatus.OK);
return new ResponseEntity<>(pdmBiSubpackagerelationService.getPointCode(num),HttpStatus.OK);
}
/**

View File

@@ -216,15 +216,13 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
//调用MES接口判断是否是NG卷
JSONObject result_jo = new JSONObject();
result_jo.put("container_name", whereJson.get("container_name"));
//todo S把注释去掉
// JSONObject jsonObject = lmsToMesServiceImpl.GetChildWeightIsSamplePDA(result_jo);
// if (ObjectUtils.isEmpty(jsonObject) || !jsonObject.containsKey("result")) {
// throw new BadRequestException("反馈内容有误," + jsonObject.toString());
// }
// if (!jsonObject.getBoolean("result")) {
// throw new BadRequestException("MES查询出当前子卷【" + whereJson.get("container_name") + "】检测结果不通过无法进行装箱MES反馈内容为【" + jsonObject.getString("rtdat") + "】");
// }
//todo E把注释去掉
JSONObject jsonObject = lmsToMesServiceImpl.GetChildWeightIsSamplePDA(result_jo);
if (ObjectUtils.isEmpty(jsonObject) || !jsonObject.containsKey("result")) {
throw new BadRequestException("反馈内容有误," + jsonObject.toString());
}
if (!jsonObject.getBoolean("result")) {
throw new BadRequestException("MES查询出当前子卷【" + whereJson.get("container_name") + "】检测结果不通过无法进行装箱MES反馈内容为" + jsonObject.getString("rtdat") + "");
}
// if (ivtList.stream().noneMatch(r -> r.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("待检区")))) {
// throw new BadRequestException("该子卷不在待检区,请检查!");
// }
@@ -364,7 +362,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
.eq("status", "0")
.in("container_name", split));
if (CollectionUtils.isEmpty(subList)) {
throw new BadRequestException("当前子卷还组盘");
throw new BadRequestException("当前子卷还组盘");
}
if (subList.size() != split.length) {
throw new BadRequestException("子卷包装信息与子卷不相符合");
@@ -379,19 +377,10 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
if (StringUtils.isEmpty(containerName)) {
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 deviceCode = this.getPointCode(split.length);
//理论毛重
List<PdmBiSubpackagerelation> subList = this.list(new QueryWrapper<PdmBiSubpackagerelation>()
.eq("status", "0")
@@ -448,23 +437,23 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
if (ObjectUtil.isEmpty(浅Attr)) {
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 (!浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
throw new BadRequestException("木箱货位" + boxAttr.getString("struct_code") + "的浅货位存在正在执行的任务");
if (!浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定")) && ObjectUtil.isNotEmpty(list)) {
throw new BadRequestException("木箱货位" + boxAttr.getString("struct_code") + "的浅货位存在正在执行的任务" + list.get(0).getTask_code());
}
} else {
if (浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
// 判断浅货位木箱和深货位木箱是否相同规格
task_group_id = outBoxManageService.createBoxMove(浅Attr);
} 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)) {
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)) {
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<>();
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)) {
for (Map<String, Object> map : zxTaskCount) {
String pointCode = map.get("point_code2").toString();
@@ -673,7 +729,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
//任务数量超过10个不满足装箱任务创建
result.removeIf(map -> {
Map.Entry<String, Integer> entry = map.entrySet().iterator().next();
return entry.getValue() + entitySize > 10;
return entry.getValue() + entitySize > 8;
});
//获取数量最少的点位
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 id="getZxqTaskCount" resultType="java.util.Map">
SELECT
CASE
WHEN t.task_type = '010704' THEN t.point_code2
WHEN t.task_type = '010908' THEN t.vehicle_code2
END AS point_code2,
COUNT(*) AS count
FROM sch_base_task t
bp.point_code,
COALESCE(COUNT(DISTINCT t.task_id), 0) AS count
FROM
bst_ivt_packageinfoivt bp -- 你的所有点位基准表
LEFT JOIN sch_base_task t ON bp.point_code = t.point_code2
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
t.task_type IN ('010704', '010908')
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>
bp.point_code IN ('ZXQ_1_1', 'ZXQ_2_1') -- 指定需要的点位
GROUP BY
CASE
WHEN t.task_type = '010704' THEN t.point_code2
WHEN t.task_type = '010908' THEN t.vehicle_code2
END
bp.point_code
ORDER BY
count, bp.point_code;
</select>
<select id="getTaskList1" resultType="org.nl.b_lms.sch.task.dao.SchBaseTask">
SELECT

View File

@@ -168,9 +168,17 @@ public class TwoOutBoxTask extends AbstractAcsTask {
attrTab.update(jsonAttr);
//更新木箱信息
JSONObject packageInfo = packageinfoivt.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
packageInfo.put("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具"));
packageInfo.put("container_name", jsonTask.getString("vehicle_code"));
packageinfoivt.update(packageInfo);
if (packageInfo.getString("plan").equals("0")) {
packageInfo.put("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具"));
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->{
if (status.equals(TaskStatusEnum.FINISHED.getCode())) {
immediateNotifyAcs(null);

View File

@@ -181,6 +181,7 @@ public class AutoSendZxToDjw extends Prun{
//子卷号
param.put("frpModel", paperSize);
param.put("barcode", containerName);
param.put("isHave", "0");
jo.put("request_param", param.toString());
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.date.DateUtil;
import org.nl.b_lms.sch.point.dao.mapper.BstIvtPackageinfoivtMapper;
import org.nl.common.utils.IdUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -178,6 +179,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Resource
private SsxDjwTask ssxDjwTask;
@Resource
private IbstIvtPackageinfoivtService ibstIvtPackageinfoivtService;
@Autowired
private ISysParamService iSysParamService;
@@ -3041,6 +3045,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
public JSONObject getIsUncap(JSONObject param) {
String material_barcode = param.getString("material_barcode");
String vehicle_code = param.getString("vehicle_code");
String task_code = param.getString("task");
//干燥剂模板
String desiccantTemplate = "6";
//是否开盖
@@ -3098,6 +3103,22 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
jsonObject.put("isUncap", isUncap);
jsonObject.put("heightLevel", height);
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;
}

View File

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