opt: 去掉预分配逻辑\备货区搬运优化(将空托盘自动搬出去)\拔轴桁架任务做完触发半条任务
This commit is contained in:
@@ -106,4 +106,6 @@ public interface IBstIvtStockingivtService extends IService<BstIvtStockingivt> {
|
||||
List<MdPbPapervehicle> showDetail2(Map param);
|
||||
|
||||
PdmBiOrderbominfo showBom2(Map param);
|
||||
|
||||
List<BstIvtStockingivt> getMoveTaskPoints();
|
||||
}
|
||||
|
||||
@@ -42,4 +42,6 @@ public interface BstIvtStockingivtMapper extends BaseMapper<BstIvtStockingivt> {
|
||||
List<BhTubePointDto> getNeedPaperTubePoint(String pointType, String tube, String location);
|
||||
|
||||
List<BhTubeMovePointDto> getCanMovePointList(String location, String pointType);
|
||||
|
||||
List<BstIvtStockingivt> getMoveTaskPoints();
|
||||
}
|
||||
|
||||
@@ -90,4 +90,14 @@
|
||||
ORDER BY ivt_status ASC,
|
||||
qty ASC;
|
||||
</select>
|
||||
<select id="getMoveTaskPoints" resultType="org.nl.b_lms.bst.ivt.stockingivt.service.dao.BstIvtStockingivt">
|
||||
SELECT
|
||||
s.*
|
||||
FROM
|
||||
sch_base_task t
|
||||
LEFT JOIN bst_ivt_stockingivt s ON s.point_code = t.point_code1 AND s.point_type = '1' AND s.is_used = '1'
|
||||
WHERE t.task_type = '010816'
|
||||
AND t.task_status <![CDATA[ <> ]]> '07'
|
||||
AND t.is_delete = '0'
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -379,4 +379,9 @@ public class BstIvtStockingivtServiceImpl extends ServiceImpl<BstIvtStockingivtM
|
||||
PdmBiOrderbominfo order = pdmBiOrderbominfoService.getOne(lam);
|
||||
return order;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BstIvtStockingivt> getMoveTaskPoints() {
|
||||
return bstIvtStockingivtMapper.getMoveTaskPoints();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,32 +92,44 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask {
|
||||
String endPoint = task.getPoint_code2();
|
||||
BstIvtStockingivt startPointObj = stockingivtService.getPointByCode(startPoint, false);
|
||||
BstIvtStockingivt endPointObj = stockingivtService.getPointByCode(endPoint, false);
|
||||
// 互换资源 (交换载具号)
|
||||
endPointObj.setIvt_status("1");
|
||||
endPointObj.setVehicle_code(task.getVehicle_code());
|
||||
TaskUtils.updateOptMessageByBStockingPoint(endPointObj);
|
||||
stockingivtService.update(endPointObj);
|
||||
startPointObj.setVehicle_code("");
|
||||
startPointObj.setIvt_status("0");
|
||||
TaskUtils.updateOptMessageByBStockingPoint(startPointObj);
|
||||
stockingivtService.update(startPointObj);
|
||||
// 创建搬运任务, 将所需要的纸管对应的托盘换过来。
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject jsonObject = JSONObject.parseObject(requestParam);
|
||||
if (ObjectUtil.isEmpty(requestParam)) {
|
||||
throw new BadRequestException("任务 code = " + task.getTask_code() + " 参数错误");
|
||||
if (SlitterEnum.TASK_TYPE.code("备货区单独送空载具").equals(task.getTask_type())) {
|
||||
// 终点赋值
|
||||
endPointObj.setIvt_status("1");
|
||||
endPointObj.setVehicle_code(task.getVehicle_code());
|
||||
TaskUtils.updateOptMessageByBStockingPoint(endPointObj);
|
||||
stockingivtService.update(endPointObj);
|
||||
startPointObj.setVehicle_code("");
|
||||
startPointObj.setIvt_status("0");
|
||||
TaskUtils.updateOptMessageByBStockingPoint(startPointObj);
|
||||
stockingivtService.update(startPointObj);
|
||||
} else {
|
||||
// 互换资源 (交换载具号)
|
||||
endPointObj.setIvt_status("1");
|
||||
endPointObj.setVehicle_code(task.getVehicle_code());
|
||||
TaskUtils.updateOptMessageByBStockingPoint(endPointObj);
|
||||
stockingivtService.update(endPointObj);
|
||||
startPointObj.setVehicle_code("");
|
||||
startPointObj.setIvt_status("0");
|
||||
TaskUtils.updateOptMessageByBStockingPoint(startPointObj);
|
||||
stockingivtService.update(startPointObj);
|
||||
// 创建搬运任务, 将所需要的纸管对应的托盘换过来。
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject jsonObject = JSONObject.parseObject(requestParam);
|
||||
if (ObjectUtil.isEmpty(requestParam)) {
|
||||
throw new BadRequestException("任务 code = " + task.getTask_code() + " 参数错误");
|
||||
}
|
||||
JSONObject callPoint = jsonObject.getJSONObject("call_point");
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("point_code1", callPoint.getString("point_code"));
|
||||
param.put("point_code2", startPoint);
|
||||
param.put("vehicle_code", callPoint.getString("vehicle_code"));
|
||||
param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管"));
|
||||
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||
List<MdPbPapervehicle> paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper<MdPbPapervehicle>()
|
||||
.eq(MdPbPapervehicle::getVehicle_code, callPoint.getString("vehicle_code")));
|
||||
doSavePaperInfos(paperList, param);
|
||||
stockAreaCallTubeTask.createTask(param);
|
||||
}
|
||||
JSONObject callPoint = jsonObject.getJSONObject("call_point");
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("point_code1", callPoint.getString("point_code"));
|
||||
param.put("point_code2", startPoint);
|
||||
param.put("vehicle_code", callPoint.getString("vehicle_code"));
|
||||
param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管"));
|
||||
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||
List<MdPbPapervehicle> paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper<MdPbPapervehicle>()
|
||||
.eq(MdPbPapervehicle::getVehicle_code, callPoint.getString("vehicle_code")));
|
||||
doSavePaperInfos(paperList, param);
|
||||
stockAreaCallTubeTask.createTask(param);
|
||||
}
|
||||
// 取消
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
@@ -138,7 +150,9 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask {
|
||||
task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
|
||||
task.setPoint_code1(form.getString("point_code1"));
|
||||
task.setPoint_code2(form.getString("point_code2"));
|
||||
task.setPoint_code3(callPoint.getString("point_code"));
|
||||
task.setPoint_code3(ObjectUtil.isNotEmpty(callPoint)
|
||||
? callPoint.getString("point_code")
|
||||
: "");
|
||||
task.setVehicle_code(form.getString("vehicle_code"));
|
||||
task.setAcs_task_type("3");
|
||||
task.setIs_delete("0");
|
||||
|
||||
@@ -54,6 +54,8 @@ public class TrussCallAirShaftTask extends AbstractAcsTask {
|
||||
private IBstIvtCutpointivtService bcutpointivtService;
|
||||
@Autowired
|
||||
private IBstIvtShafttubeivtService shafttubeivtService;
|
||||
@Autowired
|
||||
private TrussSendAirShaftTask trussSendAirShaftTask;
|
||||
@Override
|
||||
public List<AcsTaskDto> addTask() {
|
||||
/*
|
||||
@@ -117,6 +119,29 @@ public class TrussCallAirShaftTask extends AbstractAcsTask {
|
||||
.set(BstIvtShafttubeivt::getUpdate_time, DateUtil.now())
|
||||
.eq(BstIvtShafttubeivt::getPoint_code, task.getPoint_code2());
|
||||
shafttubeivtService.update(shaftLamUpdate);
|
||||
if (ObjectUtil.isEmpty(startPointObj.getQzz_no1()) && ObjectUtil.isEmpty(startPointObj.getQzz_no2())) {
|
||||
// 查找半条任务,并创建下发
|
||||
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getTask_type, "010814")
|
||||
.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())
|
||||
.eq(SchBaseTask::getIs_delete, "0")
|
||||
.orderByAsc(SchBaseTask::getCreate_time));
|
||||
if (list.size() > 0) {
|
||||
SchBaseTask schBaseTask = list.get(0);
|
||||
JSONObject requestParam = JSONObject.parseObject(schBaseTask.getRequest_param());
|
||||
if (ObjectUtil.isNotEmpty(requestParam.getString("needPosition")) && "A".equals(requestParam.getString("needPosition"))) {
|
||||
schBaseTask.setPoint_code2(task.getPoint_code1() + "_" + requestParam.getString("needPosition"));
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(requestParam.getString("needPosition")) && "B".equals(requestParam.getString("needPosition"))) {
|
||||
schBaseTask.setPoint_code2(task.getPoint_code1() + "_" + requestParam.getString("needPosition"));
|
||||
}
|
||||
schBaseTask.setRemark("AGV取货完成触发!");
|
||||
schBaseTask.setUpdate_time(DateUtil.now());
|
||||
schBaseTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
|
||||
taskService.updateById(schBaseTask);
|
||||
trussSendAirShaftTask.immediateNotifyAcs(schBaseTask.getTask_id());
|
||||
}
|
||||
}
|
||||
}
|
||||
// 取消
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
|
||||
@@ -60,6 +60,7 @@ import java.util.stream.Stream;
|
||||
import static org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil.doSavePaperInfos;
|
||||
|
||||
/**
|
||||
* 定时器呼叫套轴任务
|
||||
* @Author: lyd
|
||||
* @Date: 2024/2/1
|
||||
* @Description: 自动任务 呼叫套轴 根据分切计划来呼叫套轴任务 桁架任务
|
||||
@@ -105,10 +106,7 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
public final static String IS_ONLY_PULLING = "IS_ONLY_PULLING";
|
||||
public final static String TZ_DAY = "TZ_DAY";
|
||||
public final static String USE_XN = "USE_XN";
|
||||
public String stepStr = "";
|
||||
public List<String> stepErrorInfo = new ArrayList<>();
|
||||
private static final DateTimeFormatter TIME_FORMATTER =
|
||||
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
|
||||
@@ -141,10 +139,9 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
List<BstIvtShafttubeivt> emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2",
|
||||
"0", "0");
|
||||
for (BstIvtShafttubeivt empty : emptyPoints) {
|
||||
stepStr = "";
|
||||
stepErrorInfo = new ArrayList<>();
|
||||
doCallShaft(empty, isOnlyPulling, tzDay, paramObj, useXn);
|
||||
redisUtils.set("INFO" + empty.getPoint_code(), stepStr);
|
||||
log.info("--------------------------------------------------");
|
||||
redisUtils.set("ERROR" + empty.getPoint_code(), stepErrorInfo);
|
||||
}
|
||||
} else {
|
||||
@@ -159,17 +156,16 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void doCallShaft(BstIvtShafttubeivt empty, Param isOnlyPulling, Param tzDay, Param paramObj, Param useXn) {
|
||||
log.info(empty.getPoint_code() + "执行中...");
|
||||
// 标箔:1,锂电:2 改:大小:4代5代
|
||||
String specification = empty.getQzz_generation();
|
||||
String location = empty.getPoint_location();
|
||||
stepStr += "1";
|
||||
if (ObjectUtil.isNotEmpty(isOnlyPulling) && SlitterConstant.SLITTER_YES.equals(isOnlyPulling.getValue())) {
|
||||
stepErrorInfo.add("系统设置了只做拔轴,详细看参数表:" + IS_ONLY_PULLING);
|
||||
// 只做拔轴
|
||||
makePullShaft(empty, specification);
|
||||
return;
|
||||
}
|
||||
stepStr += ",2";
|
||||
Integer integer = Integer.valueOf(ObjectUtil.isEmpty(tzDay.getValue()) ? "0" : tzDay.getValue());
|
||||
// 2、获取分切计划数据 校验代数
|
||||
List<SlitterPlanDistinctDto> planAll;
|
||||
@@ -228,13 +224,11 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
// 查看套轴对接位是否满了
|
||||
List<BstIvtCutpointivt> emptyShaftPoint = bcutpointivtService.getAreaNotTaskPointByStatus("1",
|
||||
"1", location, "0");
|
||||
stepStr += ",6";
|
||||
// 如果满了就只做拔轴 预留一个货位?,防止套轴直接站满
|
||||
if (emptyShaftPoint.size() < 1) {
|
||||
log.info("暂存位没有空位!正在检测是否存在半个点位!");
|
||||
// 校验是否存在半个位置,且有分切计划
|
||||
// 获取只有一个位置的点位
|
||||
stepStr += ",7";
|
||||
List<BstIvtCutpointivt> halfPlacePoint = bcutpointivtService.getAllHalfPlacePoints("1",
|
||||
"1", location);
|
||||
List<String> qzzs = halfPlacePoint.stream()
|
||||
@@ -247,11 +241,9 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
makePullShaft(empty, specification);
|
||||
return;
|
||||
}
|
||||
stepStr += ",12";
|
||||
// 从寻查找分切计划,并放在plans, 没有考虑区域问题, 里面会考虑代数
|
||||
List<PdmBiSlittingproductionplan> tzOKPlans = slittingproductionplanService.getByQzzNos(qzzs, "01");
|
||||
if (ObjectUtil.isEmpty(tzOKPlans)) {
|
||||
stepStr += ",13";
|
||||
log.info("计划找不到");
|
||||
List<String> collect = halfPlacePoint.stream().map(BstIvtCutpointivt::getPoint_code).collect(Collectors.toList());
|
||||
stepErrorInfo.add("找不到气胀[" + qzzs + "]对应的计划。请检查点位" + collect);
|
||||
@@ -273,7 +265,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
}
|
||||
log.info("找到对应的另一半的计划 - {}", plans);
|
||||
}
|
||||
stepStr += ",14";
|
||||
// 获取一个分切计划的Dto。如果是6寸,可以直接使用、如果是3寸,需要判断当前位置是否满足
|
||||
// todo: 需要校验分切设备是在对应的区域中
|
||||
SlitterPlanDistinctDto planDto = plans.stream()
|
||||
@@ -316,12 +307,10 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
String qzz_generation = needPlan.getQzz_generation();
|
||||
// 从套轴对接位获取相同气涨轴大小
|
||||
// update: 不需要(同标箔或者锂电分开)
|
||||
stepStr += ",15";
|
||||
List<BstIvtCutpointivt> qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize, specification);
|
||||
log.info("查找到满足到对应尺寸的点位-{}", qzzPoint);
|
||||
if (qzzPoint.size() == 0) {
|
||||
stepErrorInfo.add("没有可拔轴的点位。");
|
||||
stepStr += ",16";
|
||||
//若套轴暂存位没有相同规格的气胀轴,直接去气胀轴库找即可
|
||||
// 调用ACS滚条气涨轴下来
|
||||
if (!toAcsOutShaft(qzzSize,location, empty)) {
|
||||
@@ -332,7 +321,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
toCallAgvMovePaperTube(needPlans, location, empty);
|
||||
// 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划
|
||||
saveCutPlanMessage(empty, needPlans, qzzSize);
|
||||
stepStr += ",97";
|
||||
return;
|
||||
}
|
||||
// 查找一条没任务的点位
|
||||
@@ -340,10 +328,8 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
// 当前纸管的规格信息
|
||||
String oldQzzNo = ObjectUtil.isNotEmpty(startPoint.getQzz_no1())
|
||||
? startPoint.getQzz_no1() : startPoint.getQzz_no2();
|
||||
stepStr += ",33";
|
||||
if (oldQzzNo == null) {
|
||||
log.error("当前气胀轴的编码为空!");
|
||||
stepStr += ",96";
|
||||
stepErrorInfo.add(startPoint.getPoint_code() + "的气胀轴编码为空,请检查...");
|
||||
return;
|
||||
}
|
||||
@@ -351,11 +337,9 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
? startPoint.getTruss_point_code1() : startPoint.getTruss_point_code2();
|
||||
if (startPointCode == null) {
|
||||
log.error("当前点位的编码为空!");
|
||||
stepStr += ",96";
|
||||
stepErrorInfo.add(startPoint.getPoint_code() + "的点位编码为空,检查A或B点位的信息是否正常");
|
||||
return;
|
||||
}
|
||||
stepStr += ",34";
|
||||
// 如果A6寸 B3寸,则需要过滤到精确点位
|
||||
if (ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) && ObjectUtil.isNotEmpty(startPoint.getQzz_no2())) {
|
||||
// 获取需要的数据
|
||||
@@ -378,7 +362,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
}
|
||||
}
|
||||
}
|
||||
stepStr += ",35";
|
||||
// 创建任务
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("point_code1", startPointCode);
|
||||
@@ -399,7 +382,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
// 最多两条
|
||||
List<PdmBiSlittingproductionplan> oldPlans = slittingproductionplanService.getByQzzNo(oldQzzNo);
|
||||
if (oldPlans.size() == 0) {
|
||||
stepStr += ",96";
|
||||
log.warn("当前气胀轴编码{},找不到对应的计划", oldQzzNo);
|
||||
// 把点位禁用
|
||||
startPoint.setIs_used("0");
|
||||
@@ -418,16 +400,13 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
param.put("pullCount", oldPlans.size());
|
||||
param.put("containers", oldPlans.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList()));
|
||||
toCallAgvMovePaperTube(needPlans, location, empty);
|
||||
stepStr += ",36";
|
||||
trussCallAirShaftTask.createTask(param);
|
||||
stepStr += ",37";
|
||||
// 将分切计划is_paper_ok 1(纸管已经准备好) -> 2(已经套轴)
|
||||
needPlans.forEach(p -> {
|
||||
p.setIs_paper_ok("2");
|
||||
TaskUtils.updateOptMessageBySlitterPlan(p);
|
||||
});
|
||||
slittingproductionplanService.updateBatchById(needPlans);
|
||||
stepStr += ",97";
|
||||
}
|
||||
|
||||
public List<SlitterPlanDistinctDto> getSlitterPlanByTubesDtos(List<SlitterPlanDistinctDto> filteredList
|
||||
@@ -516,7 +495,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
// 从套轴对接位获取相同气涨轴大小
|
||||
// update: 不需要(同标箔或者锂电分开)
|
||||
// todo: 需要校验区域0/1
|
||||
stepStr += ",15";
|
||||
List<BstIvtCutpointivt> qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize, qzzGeneration);
|
||||
log.info("查找可以拔轴的点位数:{}", qzzPoint.size());
|
||||
if (!judgment1 && !judgment2 && qzzPoint.size() == 0) {
|
||||
@@ -555,7 +533,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
* @param location 位置
|
||||
*/
|
||||
public Boolean toCallAgvMovePaperTube(List<PdmBiSlittingproductionplan> needPlans, String location, BstIvtShafttubeivt empty) {
|
||||
stepStr += ",17";
|
||||
// 最多两根
|
||||
List<String> tubes = needPlans.stream().map(plan -> {
|
||||
if (SlitterConstant.SLITTER_TYPE_PAPER.equals(plan.getPaper_tube_or_FRP())) {
|
||||
@@ -571,7 +548,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
.eq(BstIvtShafttubeivt::getPoint_type, empty.getPoint_type())
|
||||
.eq(BstIvtShafttubeivt::getIs_used, "1"));
|
||||
log.info("同位置的另一台穿拔轴机构:{}", one);
|
||||
stepStr += ",18";
|
||||
// 另一台所需要的数量
|
||||
int otherDeviceTubeSize = 0;
|
||||
// 缺省的数量
|
||||
@@ -590,7 +566,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
}
|
||||
// 说明三个位置中有包含此纸管的数据。
|
||||
if (sum >= tubes.size() + otherDeviceTubeSize) {
|
||||
stepStr += ",19";
|
||||
return true;
|
||||
}
|
||||
// 如果不够,就计算还缺多少个
|
||||
@@ -598,7 +573,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
// 兜底
|
||||
needQuantity = needTemp > 0 ? needTemp : 1;
|
||||
}
|
||||
stepStr += ",20";
|
||||
// 查找type=0的位置(待命的托盘)中是否存在(需要判断的是单独一个托盘) 校验了不在搬运中
|
||||
List<BhTubePointDto> stockingivtList = stockingivtService.getNeedPaperTubePoint("0", tubes.get(0), location);
|
||||
// 找一个点位: 目的需要的点位
|
||||
@@ -611,7 +585,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
}
|
||||
}
|
||||
if (needPoint == null) {
|
||||
stepStr += ",21";
|
||||
// 不存在则站内通知
|
||||
noticeService.createNotice("备货区找不到[" + tubes.get(0) + "]的纸管信息",
|
||||
"点位[" + empty.getPoint_name() + "]无法从备货区找到纸管信息",
|
||||
@@ -624,7 +597,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
List<BhTubeMovePointDto> needMovePointList = stockingivtService.getCanMovePointList(location, "1");
|
||||
// 空位就直接创建搬过来的任务
|
||||
BhTubeMovePointDto needMovePoint = needMovePointList.size() > 0 ? needMovePointList.get(0) : null;
|
||||
stepStr += ",22";
|
||||
if (ObjectUtil.isEmpty(needMovePoint) || "0".equals(needMovePoint.getIvt_status())) {
|
||||
// 直接搬过来即可
|
||||
JSONObject param = new JSONObject();
|
||||
@@ -638,14 +610,29 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
.eq(MdPbPapervehicle::getVehicle_code, needPoint.getVehicle_code()));
|
||||
doSavePaperInfos(paperList, param);
|
||||
stockAreaCallTubeTask.createTask(param);
|
||||
stepStr += ",23";
|
||||
return true;
|
||||
}
|
||||
stepStr += ",24";
|
||||
// 判断是否有单独拉出去的任务,有的话直接拉过来。
|
||||
List<BstIvtStockingivt> stockingivts = stockingivtService.getMoveTaskPoints();
|
||||
if (CollectionUtil.isNotEmpty(stockingivts)) {
|
||||
BstIvtStockingivt bstIvtStockingivt = stockingivts.get(0);
|
||||
// 直接搬过来即可
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("point_code1", needPoint.getPoint_code());
|
||||
param.put("point_code2", bstIvtStockingivt.getPoint_code());
|
||||
param.put("vehicle_code", needPoint.getVehicle_code());
|
||||
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||
param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管"));
|
||||
// 存储纸管信息
|
||||
List<MdPbPapervehicle> paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper<MdPbPapervehicle>()
|
||||
.eq(MdPbPapervehicle::getVehicle_code, needPoint.getVehicle_code()));
|
||||
doSavePaperInfos(paperList, param);
|
||||
stockAreaCallTubeTask.createTask(param);
|
||||
return true;
|
||||
}
|
||||
// 查找一个没有任务的空位
|
||||
List<BstIvtStockingivt> list = stockingivtService.getEmptyPointNotTask(location, "0");
|
||||
if (list.size() == 0) {
|
||||
stepStr += ",25";
|
||||
noticeService.createNotice("备货区找不到空位置搬运",
|
||||
"点位[" + empty.getPoint_name() + "]无法从备货区找到空位",
|
||||
NoticeTypeEnum.EXCEPTION.getCode());
|
||||
@@ -663,7 +650,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送载具"));
|
||||
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||
stockAreaSendVehicleTask.createTask(param);
|
||||
stepStr += ",26";
|
||||
stepErrorInfo.add("备货区交换托盘中...请等待。");
|
||||
return true;
|
||||
}
|
||||
@@ -677,19 +663,15 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
* @param empty 套拔轴点位
|
||||
*/
|
||||
private Boolean toAcsOutShaft(String qzzSize, String location, BstIvtShafttubeivt empty) {
|
||||
stepStr += ",27";
|
||||
// 需要区分上下
|
||||
List<BstIvtShafttubeivt> shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), location);
|
||||
stepStr += ",28";
|
||||
if (shafttubeivts.size() == 0) {
|
||||
log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴位");
|
||||
stepErrorInfo.add("气胀轴库找不到[" + qzzSize + "]规格的气涨轴位");
|
||||
stepStr += ",98";
|
||||
return false;
|
||||
}
|
||||
// 气涨轴库
|
||||
BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0);
|
||||
stepStr += ",29";
|
||||
// 判断气胀轴是否有轴
|
||||
JSONArray device_rows = new JSONArray();
|
||||
JSONObject device_obj = new JSONObject();
|
||||
@@ -699,7 +681,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
device_obj.put("product_area", "B1");
|
||||
JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows);
|
||||
if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) {
|
||||
stepStr += ",98";
|
||||
log.error("获取气胀轴库信息失败");
|
||||
stepErrorInfo.add("获取ACS气胀轴库信息失败...");
|
||||
return false;
|
||||
@@ -707,7 +688,7 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
boolean judgment1 = true;
|
||||
boolean judgment2 = true;
|
||||
// 获取气涨轴缓存没有任务的点位
|
||||
List<BstIvtShafttubeivt> qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache2(qzzSize,
|
||||
List<BstIvtShafttubeivt> qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache(qzzSize,
|
||||
shafttubeivt.getQzz_generation(), location);
|
||||
if (qzzCache.size() == 0) {
|
||||
log.warn("未找到气胀轴密集库气涨轴规格「" + qzzSize + "」的暂存位");
|
||||
@@ -717,20 +698,10 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
if (data2.getInteger("qty") == 0) {
|
||||
log.warn("气胀轴库【" + shafttubeivt.getPoint_code() + "】没有气胀轴。");
|
||||
judgment1 = false;
|
||||
// 预扣除
|
||||
if (judgment2) {
|
||||
BstIvtShafttubeivt waitUsedPoint = qzzCache.get(0);
|
||||
waitUsedPoint.setPlan("1");
|
||||
waitUsedPoint.setTube_name1("预分配给" + empty.getPoint_code());
|
||||
waitUsedPoint.setUpdate_time(DateUtil.now());
|
||||
bstIvtShafttubeivtService.updateById(waitUsedPoint);
|
||||
}
|
||||
}
|
||||
stepStr += ",30";
|
||||
if (!judgment1 && !judgment2) {
|
||||
log.warn("没有气胀轴,不给ACS写出轴信息");
|
||||
stepErrorInfo.add("呼叫气胀轴失败,(密集库/暂存架)没有"+qzzSize+"寸的气胀轴,不给ACS写出轴信息。请人工补轴或将对应的分切计划点击入站完成");
|
||||
stepStr += ",98";
|
||||
return false;
|
||||
}
|
||||
// 判断气胀轴密集库是否有数据
|
||||
@@ -742,7 +713,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
acsQzz.put("value", "1");
|
||||
acsQzz.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||
acsParam.add(acsQzz);
|
||||
stepStr += ",31";
|
||||
log.info("开始给ACS写信号出气胀轴 - {}", acsQzz);
|
||||
JSONObject action = wmsToAcsService.action(acsParam);
|
||||
log.info("下发给ACS写信号出气涨轴返回参数:{}", action);
|
||||
@@ -781,7 +751,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
* @param qzzSize 气涨轴尺寸
|
||||
*/
|
||||
private void saveCutPlanMessage(BstIvtShafttubeivt empty, List<PdmBiSlittingproductionplan> needPlans, String qzzSize) {
|
||||
stepStr += ",32";
|
||||
log.info("正在保存套轴信息 - {} , 尺寸 - {} 到点位 - {}", needPlans, qzzSize, empty);
|
||||
empty.setHave_qzz(SlitterConstant.SLITTER_YES);
|
||||
empty.setQzz_size(qzzSize);
|
||||
@@ -828,19 +797,15 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
* @param specification 代数(4、5)
|
||||
*/
|
||||
private void makePullShaft(BstIvtShafttubeivt empty, String specification) {
|
||||
stepStr += ",3";
|
||||
stepStr += ",8";
|
||||
log.info("不需要套轴,只做拔轴!");
|
||||
//查询套轴缓存位哦:point_type=1
|
||||
List<CutpointAirShhaftDto> notTaskPoints = bcutpointivtService.getAreaNotTaskPointByTcQzzPoint(empty.getPoint_location());
|
||||
//所有TC暂存位有卷的:Truss_point_code1,Truss_point_code2有任务的
|
||||
//根据point_code排序
|
||||
if (notTaskPoints.size() == 0) {
|
||||
stepStr += ",99";
|
||||
stepErrorInfo.add("只进行拔轴,没有可以拔轴的点位。");
|
||||
return;
|
||||
}
|
||||
stepStr += ",9";
|
||||
// 筛选一个满足的位置:3寸:看代数4/5;6寸直接
|
||||
//判断气胀轴代
|
||||
CutpointAirShhaftDto cutpointivt = notTaskPoints.stream()
|
||||
@@ -850,11 +815,9 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if (cutpointivt == null) {
|
||||
stepStr += ",99";
|
||||
stepErrorInfo.add("只进行拔轴,没有与机构匹配尺寸/代数可以拔轴的点位。");
|
||||
return;
|
||||
}
|
||||
stepStr += ",10";
|
||||
String pointCode1 = cutpointivt.getQzz_point();
|
||||
String qzzNo = cutpointivt.getQzz_no();
|
||||
// 获取对应的分切计划
|
||||
@@ -862,7 +825,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
.eq(PdmBiSlittingproductionplan::getQzzno, qzzNo)
|
||||
.eq(PdmBiSlittingproductionplan::getIs_delete, "0"));
|
||||
if (list.size() == 0) {
|
||||
stepStr += ",99";
|
||||
log.warn("气涨轴[{}]对应的分切计划不存在!", qzzNo);
|
||||
bcutpointivtService.update(new UpdateWrapper<BstIvtCutpointivt>()
|
||||
.eq("ivt_id",cutpointivt.getIvt_id())
|
||||
@@ -895,7 +857,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
param.put("is_pulling", SlitterConstant.SLITTER_YES);
|
||||
trussCallAirShaftTask.createTask(param);
|
||||
stepErrorInfo.add("只做拔轴,拔轴任务已经创建...");
|
||||
stepStr += ",11";
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -912,7 +873,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
}
|
||||
stepErrorInfo.add("存在为" + dto.getResource_name() + "送轴任务,不会继续套轴...");
|
||||
log.info("存在任务,不允许套轴{}", dto);
|
||||
stepStr += ",5";
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -947,7 +907,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
&& byContainerName.getSplit_group().equals(dto.getSplit_group())) {
|
||||
return true;
|
||||
}
|
||||
stepStr += ",4";
|
||||
stepErrorInfo.add("穿拔轴机" + shafttubeivt.getPoint_code() + "已经在为" + dto.getResource_name() + "套轴了...");
|
||||
return false;
|
||||
}
|
||||
@@ -963,7 +922,6 @@ public class AutoCallAirShaftTask extends Prun {
|
||||
stepErrorInfo.add("设备" + dto.getResource_name() + "检测到暂存架" + stringList + "有套好的管芯,不会进行套轴。");
|
||||
}
|
||||
log.info("检查有同母卷不允许套轴:{}", dto);
|
||||
stepStr += ",4";
|
||||
// 有就返回true
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ public enum SlitterEnum {
|
||||
TASK_TYPE(MapOf.of("穿拔轴缓存<>穿拔轴位", "010801", "穿拔轴缓存<>分切对接位", "010802", "穿拔轴位<>气胀轴缓存位", "010803"
|
||||
, "分切机下料AGV任务", "010804", "分切机上气胀轴", "010805", "分切机下气胀轴", "010806", "备货区送载具", "010807"
|
||||
, "备货区送纸管", "010808", "分切机下料桁架任务", "010809", "分切机下料AGV到内包间", "010810", "套轴异常处理AGV任务", "010811"
|
||||
, "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813", "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815"));
|
||||
, "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813", "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815", "备货区单独送空载具", "010816"));
|
||||
private Map<String, String> code;
|
||||
|
||||
public String code(String desc) {
|
||||
|
||||
@@ -41,6 +41,7 @@ import org.nl.b_lms.sch.tasks.slitter.mapper.dto.CallPlanViewVO;
|
||||
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.GxQtyDto;
|
||||
import org.nl.b_lms.sch.tasks.slitter.service.SlitterService;
|
||||
import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil;
|
||||
import org.nl.common.enums.NoticeTypeEnum;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.common.utils.TaskUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
@@ -135,6 +136,8 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
private RedisUtils redisUtils;
|
||||
@Autowired
|
||||
private ClassstandardService classstandardService;
|
||||
@Autowired
|
||||
private StockAreaSendVehicleTask stockAreaSendVehicleTask;
|
||||
|
||||
@Override
|
||||
public JSONObject acsRequestShaftLoadTube(JSONObject param) {
|
||||
@@ -958,12 +961,13 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
JSONObject res = new JSONObject();
|
||||
res.put("status", HttpStatus.HTTP_OK);
|
||||
res.put("message", "请求成功!");
|
||||
String deviceCode = param.getString("device_code");
|
||||
// param: device_code row_num
|
||||
if (ObjectUtil.isEmpty(param.getString("row_num"))) {
|
||||
log.error("设备:{},排数不能为空", param.getString("device_code"));
|
||||
throw new BadRequestException("设备:" + param.getString("device_code") + "排数不能为空");
|
||||
log.error("设备:{},排数不能为空", deviceCode);
|
||||
throw new BadRequestException("设备:" + deviceCode + "排数不能为空");
|
||||
}
|
||||
BstIvtStockingivt device = stockingivtService.getPointByCode(param.getString("device_code"), false);
|
||||
BstIvtStockingivt device = stockingivtService.getPointByCode(deviceCode, false);
|
||||
String vehicleCode = device.getVehicle_code();
|
||||
if (ObjectUtil.isEmpty(vehicleCode)) {
|
||||
// 如果托盘号为空,那就是任务没完成,需要从任务中获取
|
||||
@@ -997,7 +1001,33 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
} else {
|
||||
papervehicleService.update(mdPbPapervehicle);
|
||||
}
|
||||
// todo: 如果qty=0,创建AGV送空任务,(新的task_type)、后期优化可以新增诺宝取货完成提前释放货位,任务状态变成071
|
||||
// 如果qty=0,创建AGV送空任务,(新的task_type 010816)、后期优化可以新增诺宝取货完成提前释放货位,任务状态变成071
|
||||
List<MdPbPapervehicle> papers = papervehicleService.list(new LambdaQueryWrapper<MdPbPapervehicle>()
|
||||
.eq(MdPbPapervehicle::getVehicle_code, vehicleCode));
|
||||
BigDecimal reduce = papers.stream().map(MdPbPapervehicle::getQty).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
if (reduce.intValue() <= 0) {
|
||||
// 搬走
|
||||
List<SchBaseTask> tasks = taskService.checkHaveTask(deviceCode);
|
||||
if (CollectionUtil.isEmpty(tasks)) {
|
||||
// 查找一个没有任务的空位
|
||||
List<BstIvtStockingivt> list = stockingivtService.getEmptyPointNotTask(device.getPoint_location(), "0");
|
||||
if (list.size() == 0) {
|
||||
noticeService.createNotice("备货区找不到空位置搬运",
|
||||
"备货区" + deviceCode + "异常",
|
||||
NoticeTypeEnum.EXCEPTION.getCode());
|
||||
return res;
|
||||
}
|
||||
BstIvtStockingivt moveEmptyPoint = list.get(0);
|
||||
JSONObject moveTaskParam = new JSONObject();
|
||||
moveTaskParam.put("point_code1", deviceCode);
|
||||
moveTaskParam.put("point_code2", moveEmptyPoint.getPoint_code());
|
||||
moveTaskParam.put("vehicle_code", vehicleCode);
|
||||
moveTaskParam.put("task_type", SlitterEnum.TASK_TYPE.code("备货区单独送空载具"));
|
||||
moveTaskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||
stockAreaSendVehicleTask.createTask(moveTaskParam);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -108,6 +108,7 @@ public class AcsToWmsController {
|
||||
return new ResponseEntity<>(acsToWmsService.actionFinishRequest(jo), HttpStatus.OK);
|
||||
}
|
||||
|
||||
/** 二期二楼取货完成上报 */
|
||||
@PostMapping("/actionFinishRequest2")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> actionFinishRequest2(@RequestBody JSONObject jo) {
|
||||
|
||||
@@ -12,7 +12,7 @@ https://juejin.cn/post/6844903775631572999
|
||||
<contextName>nlAdmin</contextName>
|
||||
<property name="log.charset" value="utf-8"/>
|
||||
<property name="log.pattern"
|
||||
value="%black(%contextName-) %X{traceId} %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
|
||||
value="%black(%contextName-) %X{traceId} %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %cyan(%msg%n)"/>
|
||||
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
||||
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
|
||||
<property name="LOG_HOME" value="${logPath}"/>
|
||||
|
||||
Reference in New Issue
Block a user