feat: 气胀轴库与密集库库存校验

fix: 呼叫套轴信息管芯规格、时间排序、天数
fix: 内包间二次分配多次请求过滤。
This commit is contained in:
2025-03-22 13:41:48 +08:00
parent 62d64ac107
commit 753c7547fc
4 changed files with 97 additions and 42 deletions

View File

@@ -231,10 +231,13 @@ public class AutoCallAirShaftTask {
// todo: 需要校验区域0/1
List<BstIvtCutpointivt> qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize, specification);
if (qzzPoint.size() == 0) {
// 调用ACS滚条气涨轴下来
if (!toAcsOutShaft(qzzSize, location, empty)) {
log.error("穿拔轴{}不进行套轴,跳过!", empty.getPoint_code());
return;
}
// 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划
saveCutPlanMessage(empty, needPlans, qzzSize);
// 调用ACS滚条气涨轴下来
toAcsOutShaft(qzzSize, location, empty);
toCallAgvMovePaperTube(needPlans, location, empty);
return;
}
@@ -245,7 +248,10 @@ public class AutoCallAirShaftTask {
saveCutPlanMessage(empty, needPlans, qzzSize);
// 如果不存在,则发起信号滚气涨轴
// 调用ACS滚条气涨轴下来
toAcsOutShaft(qzzSize, location, empty);
if (!toAcsOutShaft(qzzSize, location, empty)) {
log.error("穿拔轴{}不进行套轴,跳过!", empty.getPoint_code());
return;
}
toCallAgvMovePaperTube(needPlans, location, empty);
return;
}
@@ -429,13 +435,46 @@ public class AutoCallAirShaftTask {
* @param location 位置:上半部分还是下半部分
* @param empty 套拔轴点位
*/
private void toAcsOutShaft(String qzzSize, String location, BstIvtShafttubeivt empty) {
private Boolean toAcsOutShaft(String qzzSize, String location, BstIvtShafttubeivt empty) {
// 需要区分上下
List<BstIvtShafttubeivt> shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize, empty.getPoint_code(), location);
if (shafttubeivts.size() == 0) {
throw new BadRequestException("气胀轴库找不到[" + qzzSize + "]规格的气涨轴位");
log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴位");
return false;
}
// 气涨轴库
BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0);
// 判断气胀轴是否有轴
JSONArray device_rows = new JSONArray();
JSONObject device_obj = new JSONObject();
device_rows.add(device_obj);
device_obj.put("device_code", shafttubeivt.getPoint_code());
// todo: 暂时都是B1
device_obj.put("product_area", "B1");
JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows);
if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) {
log.error("获取气胀轴库信息失败");
return false;
}
boolean judgment1 = true;
boolean judgment2 = true;
JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0);
if (data2.getInteger("qty") == 0) {
log.warn("气胀轴库【" + shafttubeivt.getPoint_code() + "】没有气胀轴。");
judgment1 = false;
}
// 获取气涨轴缓存没有任务的点位
List<BstIvtShafttubeivt> qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache(qzzSize,
shafttubeivt.getQzz_generation(), location);
if (qzzCache.size() == 0) {
log.warn("未找到气胀轴密集库气涨轴规格「" + qzzSize + "」的暂存位");
judgment2 = false;
}
if (!judgment1 && !judgment2) {
log.warn("没有气胀轴不给ACS写出轴信息");
return false;
}
// 判断气胀轴密集库是否有数据
JSONArray acsParam = new JSONArray();
// 出轴的信号
JSONObject acsQzz = new JSONObject();
@@ -447,6 +486,7 @@ public class AutoCallAirShaftTask {
log.info("开始给ACS写信号出气胀轴 - {}", acsQzz);
JSONObject action = wmsToAcsService.action(acsParam);
log.info("下发给ACS写信号出气涨轴返回参数{}", action);
return true;
}
/**

View File

@@ -148,6 +148,7 @@
p.qzz_size,
p.qzz_generation,
MIN(p.start_time) AS start_time,
IF(p.paper_tube_or_FRP='1',p.paper_tube_description,p.FRP_description) AS tube,
MIN( p.`status` ) AS `status`
FROM
`pdm_bi_slittingproductionplan` p
@@ -156,7 +157,7 @@
AND p.is_delete = '0'
AND IFNULL(p.up_or_down, '') <![CDATA[ <> ]]> ''
AND IFNULL(p.left_or_right, '') <![CDATA[ <> ]]> ''
AND DATE(p.start_time) >= DATE_SUB(CURDATE(), INTERVAL 0 DAY)
AND DATE(p.start_time) >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
AND '1' = (SELECT c.is_used FROM st_ivt_cutpointivt c WHERE c.ext_code = p.resource_name)
AND p.parent_container_name LIKE '%虚拟%'
GROUP BY
@@ -168,6 +169,6 @@
p.qzz_size,
p.qzz_generation
ORDER BY
`status`, start_time DESC
`status`, start_time
</select>
</mapper>

View File

@@ -34,6 +34,7 @@ public class CallPlanViewVO implements Serializable {
* 气胀轴尺寸
*/
private String qzz_size;
private String tube;
/**
* 气胀轴代数
*/

View File

@@ -2749,47 +2749,60 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
throw new BadRequestException("任务号【" + taskCode + "】对应的任务找不到!");
}
String targetPoint = "";
boolean updateFlag = false;
if ("1".equals(type)) {
// 请求取货
String deviceCode = task.getPoint_code2();
BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false);
JSONObject requestParam = JSONObject.parseObject(task.getRequest_param());
String qzzSize = requestParam.getString("qzz_size");
// 获取气涨轴缓存没有任务的点位
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskShaftCache(qzzSize,
startPoint.getQzz_generation(), startPoint.getPoint_location());
if (shafttubeivts.size() == 0) {
throw new BadRequestException("未找到气涨轴规格「" + qzzSize + "」的暂存位");
if (task.getPoint_code1().contains("QHD")) {
// 请求取货
String deviceCode = task.getPoint_code2();
BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false);
JSONObject requestParam = JSONObject.parseObject(task.getRequest_param());
String qzzSize = requestParam.getString("qzz_size");
// 获取气涨轴缓存没有任务的点位
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskShaftCache(qzzSize,
startPoint.getQzz_generation(), startPoint.getPoint_location());
if (shafttubeivts.size() == 0) {
throw new BadRequestException("未找到气涨轴规格「" + qzzSize + "」的暂存位");
}
BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0);
targetPoint = shafttubeivt.getPoint_code();
// 修改任务
task.setPoint_code1(targetPoint);
task.setRemark("取货请求成功");
task.setUpdate_time(DateUtil.now());
updateFlag = true;
} else {
targetPoint = task.getPoint_code1();
}
BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0);
targetPoint = shafttubeivt.getPoint_code();
// 修改任务
task.setPoint_code1(targetPoint);
task.setRemark("取货请求成功");
task.setUpdate_time(DateUtil.now());
}
if ("2".equals(type)) {
// 请求放货
// 穿拔轴点位
String deviceCode = task.getPoint_code1();
BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false);
JSONObject requestParam = JSONObject.parseObject(task.getRequest_param());
String qzzSize = requestParam.getString("qzz_size");
// 临时存放气涨轴尺寸
startPoint.setQzz_size(qzzSize);
// 获取空位
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskShaftCacheEmpty(startPoint);
if (shafttubeivts.size() == 0) {
throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位");
if (task.getPoint_code1().contains("FHD")) {
// 请求放货
// 穿拔轴点位
String deviceCode = task.getPoint_code1();
BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false);
JSONObject requestParam = JSONObject.parseObject(task.getRequest_param());
String qzzSize = requestParam.getString("qzz_size");
// 临时存放气涨轴尺寸
startPoint.setQzz_size(qzzSize);
// 获取空位
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskShaftCacheEmpty(startPoint);
if (shafttubeivts.size() == 0) {
throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位");
}
BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0);
targetPoint = shafttubeivt.getPoint_code();
// 修改任务
task.setPoint_code2(targetPoint);
task.setRemark("放货请求成功");
task.setUpdate_time(DateUtil.now());
updateFlag = true;
} else {
targetPoint = task.getPoint_code2();
}
BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0);
targetPoint = shafttubeivt.getPoint_code();
// 修改任务
task.setPoint_code2(targetPoint);
task.setRemark("放货请求成功");
task.setUpdate_time(DateUtil.now());
}
taskService.updateById(task);
if (updateFlag) {
taskService.updateById(task);
}
result.put("status", HttpStatus.OK.value());
result.put("device_code", targetPoint);
result.put("message", "反馈成功!");