fix: 分切业务

This commit is contained in:
2024-03-01 14:34:52 +08:00
parent 1224ab4d74
commit 93035b716a
22 changed files with 354 additions and 143 deletions

View File

@@ -31,6 +31,6 @@
FROM
`bst_ivt_cutpointivt` bc
LEFT JOIN pdm_bi_slittingproductionplan pp ON pp.qzzno = bc.qzz_no1 OR pp.qzzno = bc.qzz_no2
WHERE bc.point_type = #{type} AND pp.shaft_size = #{size} AND bc.is_used = '1' AND bc.point_status = '3'
WHERE bc.point_type = #{type} AND pp.qzz_size = #{size} AND bc.is_used = '1' AND bc.point_status = '3'
</select>
</mapper>

View File

@@ -11,4 +11,5 @@ import java.util.List;
**/
public interface BstIvtShafttubeivtMapper extends BaseMapper<BstIvtShafttubeivt> {
List<BstIvtShafttubeivt> getAllShaftPointsByConditions(String type, String location, String have);
}

View File

@@ -2,4 +2,15 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.mapper.BstIvtShafttubeivtMapper">
<select id="getAllShaftPointsByConditions"
resultType="org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt">
SELECT
*
FROM
`bst_ivt_shafttubeivt` bst
WHERE bst.point_type = #{type} AND bst.point_location = #{location} AND bst.have_qzz = #{have} AND bst.is_used = '1'
AND 0 = (
SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status <![CDATA[ < ]]> '07' AND t.point_code2 = bst.point_code
)
</select>
</mapper>

View File

@@ -92,7 +92,7 @@ public class BstIvtShafttubeivtServiceImpl extends ServiceImpl<BstIvtShafttubeiv
.eq(BstIvtShafttubeivt::getPoint_type, type)
.eq(BstIvtShafttubeivt::getPoint_location, location)
.eq(BstIvtShafttubeivt::getHave_qzz, have);
return bstIvtShafttubeivtMapper.selectList(lam);
return bstIvtShafttubeivtMapper.getAllShaftPointsByConditions(type, location, have);
}
@Override

View File

@@ -4,24 +4,84 @@
<select id="getAllCutPlan"
resultType="org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto">
SELECT p.resource_name, p.parent_container_name, p.split_group, p.up_or_down, COALESCE(count_table.num, 0) AS num
FROM `pdm_bi_slittingproductionplan` p
SELECT
p.resource_name,
p.parent_container_name,
p.split_group,
p.up_or_down,
COALESCE ( count_table.num, 0 ) num,
COALESCE ( ct1.cn, 0 ) AS cn,
COALESCE ( ct2.cnn, 0 ) AS cnn
FROM
`pdm_bi_slittingproductionplan` p
LEFT JOIN (
SELECT pp.resource_name, COUNT(*) AS num
FROM pdm_bi_slittingproductionplan pp
WHERE pp.qzzno IN (SELECT IF(LENGTH(bc.qzz_no1)>0,bc.qzz_no1,bc.qzz_no2) FROM bst_ivt_cutpointivt bc)
AND pp.`status` <![CDATA[ < ]]> '09' AND pp.is_child_tz_ok = '1'
GROUP BY pp.resource_name ) AS count_table
ON p.resource_name = count_table.resource_name
WHERE p.`status` = '01'
SELECT
pp.resource_name,
COUNT(*) AS num
FROM
pdm_bi_slittingproductionplan pp
WHERE
pp.qzzno IN ( SELECT IF ( LENGTH( bc.qzz_no1 )> 0, bc.qzz_no1, bc.qzz_no2 ) FROM bst_ivt_cutpointivt bc )
AND pp.`status` <![CDATA[ < ]]> '09'
AND pp.is_child_tz_ok = '1'
GROUP BY pp.resource_name
) AS count_table ON p.resource_name = count_table.resource_name
LEFT JOIN (
SELECT
pp.resource_name,
COUNT(*) AS cn
FROM
pdm_bi_slittingproductionplan pp
WHERE
pp.qzzno IN ( SELECT IF ( LENGTH( tc.up_qzzno )> 0, tc.up_qzzno, tc.down_qzzno ) FROM st_ivt_cutpointivt tc )
AND pp.`status` = '05'
GROUP BY pp.resource_name
) AS ct1 ON p.resource_name = ct1.resource_name
LEFT JOIN (
SELECT
pp.resource_name,
pp.parent_container_name,
pp.split_group,
pp.up_or_down,
COUNT(*) AS cnn
FROM
pdm_bi_slittingproductionplan pp
WHERE
pp.`status` = '01'
AND pp.is_child_tz_ok = '1'
GROUP BY
pp.resource_name,
pp.parent_container_name,
pp.split_group,
pp.up_or_down
) AS ct2 ON p.resource_name = ct2.resource_name
AND p.parent_container_name = ct2.parent_container_name
AND p.split_group = ct2.split_group
AND p.up_or_down <![CDATA[ <> ]]> ct2.up_or_down
WHERE
p.`status` = '01'
AND p.is_child_tz_ok = '0'
AND p.is_paper_ok = '1'
AND p.is_delete = '0'
AND p.manufacture_date = '2024-01-05'
AND LEFT(p.resource_name, 2) IN ('B2')
AND LEFT ( p.resource_name, 2 ) IN ( 'B2' )
AND p.up_or_down IS NOT NULL
AND p.left_or_right IS NOT NULL
GROUP BY p.resource_name, p.parent_container_name, p.split_group, p.up_or_down, num
ORDER BY num, p.resource_name, p.parent_container_name, p.split_group, p.up_or_down
GROUP BY
p.resource_name,
p.parent_container_name,
p.split_group,
p.up_or_down,
num,
cn,
cnn
ORDER BY
cnn DESC,
num,
cn,
p.resource_name,
p.parent_container_name,
p.split_group,
p.up_or_down
</select>
</mapper>

View File

@@ -1,13 +1,12 @@
package org.nl.b_lms.sch.point.dao;
import java.math.BigDecimal;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import java.io.Serializable;
import java.math.BigDecimal;
/**
@@ -22,13 +21,12 @@ import com.baomidou.mybatisplus.extension.activerecord.Model;
public class StIvtCutpointivt extends Model<StIvtCutpointivt> {
private static final long serialVersionUID = -7739291296662381393L;
//@TableId(value = "id", type = IdType.NONE)
/**
* 库存记录标识
*/
private Long ivt_id;
@TableId(value = "ivt_id", type = IdType.NONE)
private String ivt_id;
/**

View File

@@ -90,7 +90,7 @@ public class SendAirShaftAgvTask extends AbstractAcsTask {
BstIvtCutpointivt startPointObj = bcutpointivtService.getPintByAgvCode(startPoint, false);
String endPoint = task.getPoint_code2();
BstIvtCutpointivt endPointObj = bcutpointivtService.getPintByAgvCode(endPoint, false);
TaskUtils.pointExchangeResources(startPointObj, endPointObj, "3");
TaskUtils.pointExchangeResources(startPointObj, endPointObj, "2");
bcutpointivtService.updateById(startPointObj);
bcutpointivtService.updateById(endPointObj);
// 分切计划状态修改02->03
@@ -98,9 +98,7 @@ public class SendAirShaftAgvTask extends AbstractAcsTask {
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
PdmBiSlittingproductionplan p = new PdmBiSlittingproductionplan();
p.setStatus("03");
p.setUpdate_optid("3");
p.setUpdate_optname("ACS");
p.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageBySlitterPlan(p);
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, collect));
}
@@ -127,6 +125,7 @@ public class SendAirShaftAgvTask extends AbstractAcsTask {
task.setPoint_code1(form.getString("point_code1"));
task.setPoint_code2(form.getString("point_code2"));
task.setVehicle_code(form.getString("vehicle_code1"));
task.setVehicle_code2(form.getString("vehicle_code2"));
task.setAcs_task_type("6");
task.setIs_delete("0");
task.setRequest_param(form.toJSONString());
@@ -149,12 +148,10 @@ public class SendAirShaftAgvTask extends AbstractAcsTask {
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
PdmBiSlittingproductionplan p = new PdmBiSlittingproductionplan();
p.setStatus("02");
p.setUpdate_optid("3");
p.setUpdate_optname("ACS");
p.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageBySlitterPlan(p);
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, collect));
this.immediateNotifyAcs(null);
// this.immediateNotifyAcs(null);
return task.getTask_id();
}

View File

@@ -17,6 +17,7 @@ import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.TaskUtils;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.sch.AcsTaskDto;
@@ -99,9 +100,7 @@ public class SlitterDownTrussTask extends AbstractAcsTask {
// 下来的分切计划状态06 -> 09
PdmBiSlittingproductionplan p = new PdmBiSlittingproductionplan();
p.setStatus("09");
p.setUpdate_optid("3");
p.setUpdate_optname("ACS");
p.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageBySlitterPlan(p);
List<String> downQzzNos = Stream.of(tmpUpQzzNo, tmpDownQzzNo)
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
@@ -110,8 +109,10 @@ public class SlitterDownTrussTask extends AbstractAcsTask {
p.setStatus("05");
List<String> upQzzNos = Stream.of(point2.getQzz_no1(), point2.getQzz_no2())
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, upQzzNos));
if (upQzzNos.size() > 0) {
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, upQzzNos));
}
// 点位数据更新
point1.setUp_qzzno(point2.getQzz_no1());
point1.setDown_qzzno(point2.getQzz_no2());
@@ -121,9 +122,7 @@ public class SlitterDownTrussTask extends AbstractAcsTask {
point2.setQzz_no1(tmpUpQzzNo);
point2.setQzz_no2(tmpDownQzzNo);
point2.setPoint_status("3");
point2.setUpdate_optid("3");
point2.setUpdate_optname("ACS");
point2.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageByBCutPoint(point2);
cutpointivtService.updateById(point1);
bcutpointivtService.updateById(point2);
}
@@ -148,7 +147,10 @@ public class SlitterDownTrussTask 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(form.getString("point_code3"));
task.setPoint_code4(form.getString("point_code4"));
task.setVehicle_code(form.getString("vehicle_code1"));
task.setVehicle_code2(form.getString("vehicle_code2"));
task.setAcs_task_type("6");
task.setIs_delete("0");
task.setRequest_param(form.toJSONString());
@@ -166,7 +168,7 @@ public class SlitterDownTrussTask extends AbstractAcsTask {
task.setPriority(priority_jo.getString("value"));
}
taskService.save(task);
this.immediateNotifyAcs(null);
// this.immediateNotifyAcs(null);
return task.getTask_id();
}

View File

@@ -19,6 +19,7 @@ import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.TaskUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
@@ -134,17 +135,13 @@ public class TrussCallAirShaftTask extends AbstractAcsTask {
}
endPointObj.setHave_qzz("1");
endPointObj.setQzz_size(extGroupData.getString("qzz_size"));
endPointObj.setUpdate_optid("3");
endPointObj.setUpdate_optname("ACS");
endPointObj.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageByBShaftPoint(endPointObj);
shafttubeivtService.updateById(endPointObj);
// 起点清空
startPointObj.setQzz_no1("");
startPointObj.setQzz_no2("");
startPointObj.setPoint_status("1");
startPointObj.setUpdate_optid("3");
startPointObj.setUpdate_optname("ACS");
startPointObj.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageByBCutPoint(startPointObj);
bcutpointivtService.updateById(startPointObj);
}
@@ -185,7 +182,7 @@ public class TrussCallAirShaftTask extends AbstractAcsTask {
task.setPriority(priority_jo.getString("value"));
}
taskService.save(task);
this.immediateNotifyAcs(null);
// this.immediateNotifyAcs(null);
return task.getTask_id();
}

View File

@@ -15,6 +15,7 @@ import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.TaskUtils;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.sch.AcsTaskDto;
@@ -95,12 +96,10 @@ public class TrussSendAirShaftTask extends AbstractAcsTask {
endPointObj.setQzz_no1(task.getVehicle_code());
} else {
// 下轴
endPointObj.setQzz_no2(task.getVehicle_code());
endPointObj.setQzz_no2(task.getVehicle_code2());
}
endPointObj.setPoint_status("2");
endPointObj.setUpdate_optid("3");
endPointObj.setUpdate_optname("ACS");
endPointObj.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageByBCutPoint(endPointObj);
bcutpointivtService.updateById(endPointObj);
// 起点清空
startPointObj.setQzz_size("");
@@ -111,9 +110,7 @@ public class TrussSendAirShaftTask extends AbstractAcsTask {
startPointObj.setContainer_name1("");
startPointObj.setContainer_name2("");
startPointObj.setHave_qzz("0");
startPointObj.setUpdate_optid("3");
startPointObj.setUpdate_optname("ACS");
startPointObj.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageByBShaftPoint(startPointObj);
shafttubeivtService.updateById(startPointObj);
}
// 取消
@@ -121,7 +118,7 @@ public class TrussSendAirShaftTask extends AbstractAcsTask {
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
// todo: 是否需要回退分切计划套轴完成?
}
task.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageByTask(task);
taskService.updateById(task);
}
@@ -136,7 +133,8 @@ public class TrussSendAirShaftTask 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.setVehicle_code(form.getString("vehicle_code"));
task.setVehicle_code(form.getString("vehicle_code1"));
task.setVehicle_code2(form.getString("vehicle_code2"));
task.setAcs_task_type("6");
task.setIs_delete("0");
task.setRequest_param(form.toJSONString());
@@ -154,7 +152,7 @@ public class TrussSendAirShaftTask extends AbstractAcsTask {
task.setPriority(priority_jo.getString("value"));
}
taskService.save(task);
this.immediateNotifyAcs(null);
// this.immediateNotifyAcs(null);
return task.getTask_id();
}

View File

@@ -17,6 +17,7 @@ import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.TaskUtils;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.sch.AcsTaskDto;
@@ -80,6 +81,7 @@ public class UpShaftTrussTask extends AbstractAcsTask {
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject taskObj, String status) {
SchBaseTask task = taskService.getById(taskObj.getString("task_id"));
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
@@ -98,25 +100,21 @@ public class UpShaftTrussTask extends AbstractAcsTask {
// 交换数据
point2.setUp_qzzno(point1.getQzz_no1());
point2.setDown_qzzno(point1.getQzz_no2());
point2.setUpdate_optid(3L);
point2.setUpdate_optname("ACS");
point2.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId()));
point2.setUpdate_optname(SecurityUtils.getCurrentUsername());
point2.setUpdate_time(DateUtil.now());
cutpointivtService.updateById(point2);
point1.setQzz_no1("");
point1.setQzz_no2("");
point1.setPoint_status("1");
point1.setUpdate_optid("3");
point1.setUpdate_optname("ACS");
point1.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageByBCutPoint(point1);
bcutpointivtService.updateById(point1);
// 分切计划修改状态04->05
List<String> collect = Stream.of(task.getVehicle_code(), task.getVehicle_code2())
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
PdmBiSlittingproductionplan p = new PdmBiSlittingproductionplan();
p.setStatus("05");
p.setUpdate_optid("3");
p.setUpdate_optname("ACS");
p.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageBySlitterPlan(p);
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, collect));
}
@@ -124,7 +122,7 @@ public class UpShaftTrussTask extends AbstractAcsTask {
if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) {
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
}
task.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageByTask(task);
taskService.updateById(task);
}
@@ -140,7 +138,10 @@ public class UpShaftTrussTask 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(form.getString("point_code3"));
task.setPoint_code4(form.getString("point_code4"));
task.setVehicle_code(form.getString("vehicle_code1"));
task.setVehicle_code2(form.getString("vehicle_code2"));
task.setAcs_task_type("6");
task.setIs_delete("0");
task.setRequest_param(form.toJSONString());
@@ -163,12 +164,10 @@ public class UpShaftTrussTask extends AbstractAcsTask {
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
PdmBiSlittingproductionplan p = new PdmBiSlittingproductionplan();
p.setStatus("04");
p.setUpdate_optid("3");
p.setUpdate_optname("ACS");
p.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageBySlitterPlan(p);
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, collect));
this.immediateNotifyAcs(null);
// this.immediateNotifyAcs(null);
return task.getTask_id();
}

View File

@@ -46,7 +46,7 @@ public class AutoCallAirShaftTask {
@Transactional(rollbackFor = Exception.class)
public void run() {
// 1、获取空的插拔轴位
// 1、获取空的插拔轴位(无任务)
List<BstIvtShafttubeivt> emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2","0","0");
emptyPoints.forEach(empty -> {
// 2、获取分切计划数据todo:暂时不考虑区域
@@ -127,7 +127,7 @@ public class AutoCallAirShaftTask {
});
}
private static void saveCutPlanMessage(BstIvtShafttubeivt empty, List<PdmBiSlittingproductionplan> needPlans, String qzzSize) {
private void saveCutPlanMessage(BstIvtShafttubeivt empty, List<PdmBiSlittingproductionplan> needPlans, String qzzSize) {
empty.setHave_qzz("1");
empty.setQzz_size(qzzSize);
empty.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -156,6 +156,14 @@ public class AutoCallAirShaftTask {
empty.setContainer_name2(plan.getContainer_name());
}
}
bstIvtShafttubeivtService.updateById(empty);
// 分切计划
// 将分切计划is_paper_ok 1 -> 2
needPlans.forEach(p -> {
p.setIs_paper_ok("2");
TaskUtils.updateOptMessageBySlitterPlan(p);
});
slittingproductionplanService.updateBatchById(needPlans);
}
private void makePullShaft(BstIvtShafttubeivt empty) {

View File

@@ -11,6 +11,7 @@ import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingprodu
import org.nl.b_lms.sch.point.dao.StIvtCutpointivt;
import org.nl.b_lms.sch.point.service.IstIvtCutpointivtService;
import org.nl.b_lms.sch.tasks.slitter.SendAirShaftAgvTask;
import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper;
import org.nl.modules.common.exception.BadRequestException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -35,6 +36,8 @@ public class AutoSendAirShaftAgvTask {
private IPdmBiSlittingproductionplanService slittingproductionplanService;
@Autowired
private SendAirShaftAgvTask sendAirShaftAgvTask;
@Autowired
private SlitterMapper slitterMapper;
public void run() {
// 获取套轴对接位有气涨轴没任务的点位
@@ -67,12 +70,8 @@ public class AutoSendAirShaftAgvTask {
}
}
// 如果两个气涨轴编码则表示一组满了
// 查找分切对接的空位 todo: (校验任务)
List<BstIvtCutpointivt> emptyPoint = bcutpointivtService.list(new LambdaQueryWrapper<BstIvtCutpointivt>()
.eq(BstIvtCutpointivt::getPoint_type, "3")
.eq(BstIvtCutpointivt::getPoint_status, "1")
.eq(BstIvtCutpointivt::getIs_used, "1")
.last("ORDER BY ABS(sort_seq - " + deviceCut.getSort_seq() + ")"));
// 查找分切对接没任务的空位
List<BstIvtCutpointivt> emptyPoint = slitterMapper.getEmptyCutPointNotTask(deviceCut.getSort_seq());
if (emptyPoint.size() == 0) {
log.warn("找不到对应的位置!");
return;

View File

@@ -52,16 +52,6 @@ public class AutoSlitterDownAgvTask {
// 获取满轴数据 todo: 先不考虑区域,后期添加
List<BstIvtCutpointivt> cutPointIvts = slitterMapper.getAreaFullVolume();
cutPointIvts.forEach(cut -> {
// 校验任务
List<String> collect = Stream.of(cut.getPoint_code(), cut.getTruss_point_code1(), cut.getTruss_point_code2())
.collect(Collectors.toList());
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.le(SchBaseTask::getTask_status, "07")
.in(SchBaseTask::getPoint_code1, collect).in(SchBaseTask::getPoint_code2, collect)
.in(SchBaseTask::getPoint_code3, collect).in(SchBaseTask::getPoint_code4, collect));
if (list.size() > 0) {
return;
}
// cut是起点
// 1、先去对应的套轴对接位没有气涨轴空位没有任务的点位
List<BstIvtCutpointivt> areaEmptyNotTaskPoint = cutpointivtService.getAreaNotTaskPointByStatus("1", "1", "2");

View File

@@ -13,9 +13,9 @@ import org.nl.b_lms.sch.point.service.IstIvtCutpointivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.slitter.UpShaftTrussTask;
import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
@@ -40,6 +40,8 @@ public class AutoUpShaftTrussTask {
private UpShaftTrussTask upShaftTrussTask;
@Autowired
private IschBaseTaskService taskService;
@Autowired
private SlitterMapper slitterMapper;
public void run() {
// 获取没有气涨轴的分切机点位
@@ -51,17 +53,25 @@ public class AutoUpShaftTrussTask {
// 校验任务
List<String> collect = Stream.of(device.getUp_point_code(), device.getDown_point_code()).collect(Collectors.toList());
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.le(SchBaseTask::getTask_status, "07")
.lt(SchBaseTask::getTask_status, "07")
.in(SchBaseTask::getPoint_code1, collect).in(SchBaseTask::getPoint_code2, collect)
.in(SchBaseTask::getPoint_code3, collect).in(SchBaseTask::getPoint_code4, collect));
if (list.size() > 0) {
return;
}
// 获取备好轴的对接点位
List<BstIvtCutpointivt> cutPointList = slitterMapper.getReadyShaftPoint(device.getExt_code());
if (cutPointList.size() == 0) {
log.warn("分切机【" + device.getExt_code() + "】未找到套好纸管的气涨轴");
// 下个分切机
return;
}
BstIvtCutpointivt newCutPoint = cutPointList.get(0);
// 获取当前分切机的下一组分切计划(最多四条分切计划)
List<String> qzzNos = Stream.of(newCutPoint.getQzz_no1(), newCutPoint.getQzz_no2())
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
List<PdmBiSlittingproductionplan> nextPlans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.eq(PdmBiSlittingproductionplan::getResource_name, device.getExt_code())
.eq(PdmBiSlittingproductionplan::getStatus, "03")
.eq(PdmBiSlittingproductionplan::getIs_delete, "0"));
.in(PdmBiSlittingproductionplan::getQzzno, qzzNos));
if (nextPlans.size() == 0) {
log.warn("分切机【" + device.getExt_code() + "】未找到套好轴的分切计划");
// 下个分切机
@@ -71,17 +81,6 @@ public class AutoUpShaftTrussTask {
// 筛选上下轴各一条
PdmBiSlittingproductionplan nextUpPlan = nextPlans.stream().filter(p -> "1".equals(p.getUp_or_down())).findFirst().orElse(null);
PdmBiSlittingproductionplan nextDownPlan = nextPlans.stream().filter(p -> "2".equals(p.getUp_or_down())).findFirst().orElse(null);
LambdaQueryWrapper<BstIvtCutpointivt> lam = new LambdaQueryWrapper<>();
lam.eq(BstIvtCutpointivt::getPoint_type, "3")
.eq(BstIvtCutpointivt::getPoint_status, "2")
.eq(BstIvtCutpointivt::getIs_used, "1");
if (ObjectUtil.isNotEmpty(nextUpPlan)) {
lam.eq(BstIvtCutpointivt::getQzz_no1, nextUpPlan.getQzzno());
}
if (ObjectUtil.isNotEmpty(nextDownPlan)) {
lam.eq(BstIvtCutpointivt::getQzz_no2, nextDownPlan.getQzzno());
}
BstIvtCutpointivt newCutPoint = bcutpointivtService.getOne(lam, false);
// 查找对应的分切对接位
if (ObjectUtil.isNotEmpty(nextUpPlan) && ObjectUtil.isNotEmpty(nextDownPlan)) {
// 双轴任务

View File

@@ -0,0 +1,50 @@
package org.nl.b_lms.sch.tasks.slitter.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.sch.tasks.slitter.service.SlitterService;
import org.nl.modules.logging.annotation.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Author: lyd
* @Description:
* @Date: 2024/2/29
*/
@Slf4j
@RestController
@SaIgnore
@RequestMapping("/api/wms/apply")
public class SlitterController {
@Autowired
private SlitterService slitterService;
@PostMapping("/test1")
@Log("1111")
public ResponseEntity<Object> create(@RequestBody JSONObject entity){
return new ResponseEntity<>(slitterService.acsRequestShaftPluckTube(entity), HttpStatus.CREATED);
}
@PostMapping("/test2")
@Log("1111")
public ResponseEntity<Object> create2(@RequestBody JSONObject entity){
return new ResponseEntity<>(slitterService.acsFinishLoadShaft(entity), HttpStatus.CREATED);
}
@PostMapping("/test3")
@Log("1111")
public ResponseEntity<Object> create3(@RequestBody JSONObject entity){
List<String> collect = Stream.of("B2382401020202A1").collect(Collectors.toList());
entity.put("container", collect);
return new ResponseEntity<>(slitterService.mesSlittingMachineSendMaterial(entity), HttpStatus.CREATED);
}
}

View File

@@ -3,6 +3,7 @@ package org.nl.b_lms.sch.tasks.slitter.mapper;
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -31,4 +32,18 @@ public interface SlitterMapper {
* @return /
*/
List<BstIvtCutpointivt> getAreaFullVolume();
/**
* 获取分切机下料位没任务的点位
* @param sortSeq
* @return
*/
List<BstIvtCutpointivt> getEmptyCutPointNotTask(BigDecimal sortSeq);
/**
* 获取分切机下一组分切计划对应的点位
* @param extCode
* @return
*/
List<BstIvtCutpointivt> getReadyShaftPoint(String extCode);
}

View File

@@ -11,6 +11,7 @@
LEFT JOIN pdm_bi_slittingproductionplan p ON p.qzzno = bct.qzz_no1 OR p.qzzno = bct.qzz_no2
WHERE bct.point_status = '2' AND p.parent_container_name = #{parent_container_name} AND p.split_group = #{split_group}
AND (bct.qzz_no1 IS NULL OR bct.qzz_no1 = '' OR bct.qzz_no2 IS NULL OR bct.qzz_no2 = '')
LIMIT 1
</select>
<select id="getSameGroupTaskPoint" resultType="java.lang.String">
SELECT t.point_code2
@@ -20,11 +21,47 @@
AND p.parent_container_name = #{parent_container_name} AND p.split_group = #{split_group}
</select>
<select id="getAreaFullVolume" resultType="org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt">
SELECT
*
FROM
`bst_ivt_cutpointivt` bct
WHERE bct.point_type IN ('2', '3') AND bct.point_status = '3'
SELECT bct.*
FROM `bst_ivt_cutpointivt` bct
WHERE bct.point_type IN ('2', '3')
AND bct.point_status = '3'
AND 0 = (SELECT COUNT(*)
FROM sch_base_task t
WHERE t.task_status <![CDATA[ < ]]> '07'
AND (
t.point_code1 = bct.point_code
OR t.point_code1 = bct.truss_point_code1
OR t.point_code1 = bct.truss_point_code1
OR t.point_code3 = bct.point_code
OR t.point_code3 = bct.truss_point_code1
OR t.point_code3 = bct.truss_point_code1
))
ORDER BY bct.point_type DESC
</select>
<select id="getEmptyCutPointNotTask"
resultType="org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt">
SELECT
bcp.*
FROM
`bst_ivt_cutpointivt` bcp
WHERE bcp.point_type = '3' AND bcp.point_status = '1' AND bcp.is_used = '1'
AND 0 = (
SELECT COUNT(*) FROM sch_base_task t
WHERE t.task_status <![CDATA[ < ]]> '07' AND (t.point_code2 = bcp.point_code OR t.point_code2 = bcp.truss_point_code1
OR t.point_code4 = bcp.truss_point_code1 OR t.point_code2 = bcp.truss_point_code2 OR t.point_code4 = bcp.truss_point_code2)
)
ORDER BY ABS(bcp.sort_seq - #{sortSeq})
</select>
<select id="getReadyShaftPoint"
resultType="org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt">
SELECT
bsp.*
FROM
`bst_ivt_cutpointivt` bsp
LEFT JOIN pdm_bi_slittingproductionplan p ON p.is_delete = '0' AND p.`status` = '03' AND (p.qzzno = bsp.qzz_no1 OR p.qzzno = bsp.qzz_no2)
WHERE bsp.point_type = '3' AND bsp.point_status = '2' AND p.workorder_id IS NOT NULL
AND p.resource_name = #{extCode}
ORDER BY bsp.update_time
</select>
</mapper>

View File

@@ -8,6 +8,13 @@ import com.alibaba.fastjson.JSONObject;
* @date 2024-02-26
**/
public interface SlitterService {
/**
* acs申请套轴
* @param param
* @return
*/
JSONObject acsRequestShaftPluckTube(JSONObject param);
/**
* acs申请拔轴完毕
* @param param

View File

@@ -28,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -57,6 +58,20 @@ public class SlitterServiceImpl implements SlitterService {
@Autowired
private SlitterDownTrussTask slitterDownTrussTask;
@Override
public JSONObject acsRequestShaftPluckTube(JSONObject param) {
JSONObject res = new JSONObject();
JSONObject con = new JSONObject();
String deviceCode = param.getString("device_code");
BstIvtShafttubeivt point = shafttubeivtService.getByPointCode(deviceCode, false);
res.put("code", HttpStatus.HTTP_OK);
res.put("device_code", deviceCode);
res.put("data", con);
con.put("left", point.getTube_code1());
con.put("right", point.getTube_code2());
return res;
}
@Override
public JSONObject acsFinishShaftPluckTube(JSONObject param) {
JSONObject res = new JSONObject();
@@ -96,9 +111,15 @@ public class SlitterServiceImpl implements SlitterService {
public JSONObject acsFinishLoadShaft(JSONObject param) {
JSONObject res = new JSONObject();
String deviceCode = param.getString("device_code");
// todo: 判断是否有未完成的任务
// 判断是否有未完成的任务
BstIvtShafttubeivt startPoint = shafttubeivtService.getOne(new LambdaQueryWrapper<BstIvtShafttubeivt>()
.eq(BstIvtShafttubeivt::getPoint_code, deviceCode));
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getPoint_code1, startPoint.getPoint_code())
.lt(SchBaseTask::getTask_status, "07"));
if (list.size() > 0) {
throw new BadRequestException("点位[" + deviceCode + "]存在未完成得任务!");
}
// 获取分切计划
List<String> collect = Stream.of(startPoint.getContainer_name1(), startPoint.getContainer_name2())
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
@@ -133,17 +154,16 @@ public class SlitterServiceImpl implements SlitterService {
plans.forEach(plan -> {
plan.setIs_child_tz_ok("1");
plan.setQzzno(qzzNo);
plan.setUpdate_optid("3");
plan.setUpdate_optname("ACS");
plan.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageBySlitterPlan(plan);
});
slittingproductionplanService.updateBatchById(plans);
// 创建任务
JSONObject taskParam = new JSONObject();
taskParam.put("point_code1", startPoint.getPoint_code());
taskParam.put("point_code2", ObjectUtil.isEmpty(cutPoint.getTruss_point_code1())
taskParam.put("point_code2", "1".equals(demoPlan.getUp_or_down())
? cutPoint.getTruss_point_code1() : cutPoint.getTruss_point_code2());
taskParam.put("vehicle_code", qzzNo);
taskParam.put("vehicle_code1", "1".equals(demoPlan.getUp_or_down()) ? qzzNo : "");
taskParam.put("vehicle_code2", "2".equals(demoPlan.getUp_or_down()) ? qzzNo : "");
taskParam.put("task_type", "6");
taskParam.put("product_area", "Test");
trussSendAirShaftTask.createTask(taskParam);
@@ -166,7 +186,11 @@ public class SlitterServiceImpl implements SlitterService {
}
// 获取分切计划最多4个需要出站的任务
List<PdmBiSlittingproductionplan> currentPlans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getContainer_name, containerList));
.in(PdmBiSlittingproductionplan::getContainer_name, containerList)
.eq(PdmBiSlittingproductionplan::getStatus, "05"));
if (currentPlans.size() == 0) {
throw new BadRequestException("当前子卷已经出卷或者不存在!");
}
// 获取上轴分切计划和下轴分切计划,各一条
PdmBiSlittingproductionplan currentUpPlan = currentPlans.stream().filter(p -> "1".equals(p.getUp_or_down())).findFirst().orElse(null);
PdmBiSlittingproductionplan currentDownPlan = currentPlans.stream().filter(p -> "2".equals(p.getUp_or_down())).findFirst().orElse(null);
@@ -187,12 +211,8 @@ public class SlitterServiceImpl implements SlitterService {
JSONObject taskParam = new JSONObject();
if (timePlans.size() == 0) {
// 如果没有下一组分切计划,就只做下卷任务(判断下单/下双)
// 获取分切对接位没任务的空位置 todo: 校验任务未作
List<BstIvtCutpointivt> emptyPoints = bcutpointivtService.list(new LambdaQueryWrapper<BstIvtCutpointivt>()
.eq(BstIvtCutpointivt::getPoint_type, "3")
.eq(BstIvtCutpointivt::getPoint_status, "1")
.eq(BstIvtCutpointivt::getIs_used, "1")
.last("ORDER BY ABS(sort_seq - " + device.getSort_seq() + ")"));
// 获取分切对接位没任务的空位置
List<BstIvtCutpointivt> emptyPoints = slitterMapper.getEmptyCutPointNotTask(device.getSort_seq());
if (emptyPoints.size() == 0) {
throw new BadRequestException("分切机【" + device.getExt_code() + "】找不到对应的对接位!");
}
@@ -219,10 +239,10 @@ public class SlitterServiceImpl implements SlitterService {
// 分切计划修改状态 05 -> 06
currentPlans.forEach(plan -> {
plan.setStatus("06");
plan.setUpdate_optid("3");
plan.setUpdate_optname("ACS");
plan.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageBySlitterPlan(plan);
});
// 创建任务
slitterDownTrussTask.createTask(taskParam);
slittingproductionplanService.updateBatchById(currentPlans);
return res;
}
@@ -234,7 +254,7 @@ public class SlitterServiceImpl implements SlitterService {
// 筛选上下轴各一条
PdmBiSlittingproductionplan nextUpPlan = nextPlans.stream().filter(p -> "1".equals(p.getUp_or_down())).findFirst().orElse(null);
PdmBiSlittingproductionplan nextDownPlan = nextPlans.stream().filter(p -> "2".equals(p.getUp_or_down())).findFirst().orElse(null);
// 找到该分切计划的点位 todo: 应该校验没任务
// 找到该分切计划的点位
LambdaQueryWrapper<BstIvtCutpointivt> newCutLam = new QueryWrapper<BstIvtCutpointivt>().lambda();
newCutLam.eq(BstIvtCutpointivt::getPoint_type, "3").eq(BstIvtCutpointivt::getPoint_status, "1")
.eq(BstIvtCutpointivt::getIs_used, "1");
@@ -298,19 +318,18 @@ public class SlitterServiceImpl implements SlitterService {
// 下来的分切计划修改状态05 -> 06
currentPlans.forEach(plan -> {
plan.setStatus("06");
plan.setUpdate_optid("3");
plan.setUpdate_optname("ACS");
plan.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageBySlitterPlan(plan);
});
slittingproductionplanService.updateBatchById(currentPlans);
// slittingproductionplanService.updateBatchById(currentPlans);
// 上去的分切计划修改状态03 -> 04
nextPlans.forEach(plan -> {
plan.setStatus("04");
plan.setUpdate_optid("3");
plan.setUpdate_optname("ACS");
plan.setUpdate_time(DateUtil.now());
TaskUtils.updateOptMessageBySlitterPlan(plan);
});
slittingproductionplanService.updateBatchById(nextPlans);
List<PdmBiSlittingproductionplan> mergedList = new ArrayList<>();
mergedList.addAll(currentPlans);
mergedList.addAll(nextPlans);
slittingproductionplanService.updateBatchById(mergedList);
return res;
}
}

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
import org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
@@ -22,18 +23,21 @@ public class TaskUtils {
* @param status 目标状态
*/
public static void pointExchangeResources(BstIvtCutpointivt source, BstIvtCutpointivt target, String status) {
String currentUserId = SecurityUtils.getCurrentUserId();
String currentUsername = SecurityUtils.getCurrentUsername();
String now = DateUtil.now();
target.setQzz_no1(source.getQzz_no1());
target.setQzz_no2(source.getQzz_no2());
target.setPoint_status(status);
target.setUpdate_optid("3");
target.setUpdate_optname("ACS");
target.setUpdate_time(DateUtil.now());
target.setUpdate_optid(currentUserId);
target.setUpdate_optname(currentUsername);
target.setUpdate_time(now);
source.setQzz_no1("");
source.setQzz_no2("");
source.setPoint_status("1");
source.setUpdate_optid("3");
source.setUpdate_optname("ACS");
source.setUpdate_time(DateUtil.now());
source.setUpdate_optid(currentUserId);
source.setUpdate_optname(currentUsername);
source.setUpdate_time(now);
}
/**
@@ -78,4 +82,24 @@ public class TaskUtils {
task.setUpdate_optname(SecurityUtils.getCurrentUsername());
task.setUpdate_time(DateUtil.now());
}
/**
* 赋值任务的修改时间、人等信息
* @param point 任务
*/
public static void updateOptMessageByBCutPoint(BstIvtCutpointivt point) {
point.setUpdate_optid(SecurityUtils.getCurrentUserId());
point.setUpdate_optname(SecurityUtils.getCurrentUsername());
point.setUpdate_time(DateUtil.now());
}
/**
* 赋值任务的修改时间、人等信息
* @param point 任务
*/
public static void updateOptMessageByBShaftPoint(BstIvtShafttubeivt point) {
point.setUpdate_optid(SecurityUtils.getCurrentUserId());
point.setUpdate_optname(SecurityUtils.getCurrentUsername());
point.setUpdate_time(DateUtil.now());
}
}

View File

@@ -15,6 +15,7 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.modules.wql.util.WqlUtil;
import org.nl.wms.basedata.master.service.ClassstandardService;
import org.nl.wms.basedata.master.service.dto.ClassstandardDto;
@@ -98,7 +99,7 @@ public class TaskServiceImpl implements TaskService {
UserAreaServiceImpl userAreaService = new UserAreaServiceImpl();
String in_area_id = userAreaService.getInArea();
if (ObjectUtil.isNotEmpty(in_area_id)) {
map.put("in_area_id", in_area_id);
// map.put("in_area_id", in_area_id);
}
JSONObject json = WQL.getWO("QSCH_TASK_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "update_time desc");
JSONArray content = json.getJSONArray("content");
@@ -139,8 +140,7 @@ public class TaskServiceImpl implements TaskService {
String processing_class = taskObj.getString("handle_class");
String message = "";
try {
Class<?> clz = Class.forName(processing_class);
Object obj = clz.newInstance();
Object obj = SpringContextHolder.getBean(Class.forName(processing_class));
// 调用每个任务类的method_name()强制结束方法
Method m = obj.getClass().getMethod(method_name, String.class);
JSONObject result = (JSONObject) m.invoke(obj, task_id);