6 Commits

Author SHA1 Message Date
zhouz
bf1ee590fb fix:包装关系变更校验 2026-04-17 13:51:38 +08:00
zhouz
0a04888129 fix:BUG修改 2026-04-09 15:05:37 +08:00
zhouz
6ce909fb21 fix:更新空木箱重量会校验重量是否为0 2026-04-08 13:54:18 +08:00
yangyufu
7b3cff7acd fixed:
新成品入库查询-->
界面:产品规格改成产品实际幅宽,新增客户要求幅宽
导出:同步导出这两个字段:产品实际幅宽、客户要求幅宽
新成品出库查询-->
界面:产品规格改成产品实际幅宽,新增客户要求幅宽
导出:同步导出这两个字段:产品实际幅宽、客户要求幅宽
2026-04-03 13:33:38 +08:00
zhouz
b733f3713c Merge remote-tracking branch 'origin/master_merge_0523' into master_merge_0523 2026-04-01 14:15:55 +08:00
zhouz
f97b2edcb5 fix:去除桁架任务卡控了逻辑、新增空木箱出库改为系统参数配置卡控 2026-04-01 14:15:41 +08:00
43 changed files with 452 additions and 2708 deletions

View File

@@ -117,9 +117,6 @@ public class BstIvtCutpointivtServiceImpl extends ServiceImpl<BstIvtCutpointivtM
@Override
public BstIvtCutpointivt getPintByTrussCode(String point, boolean flag) {
if (ObjectUtil.isEmpty(point)) {
return null;
}
LambdaQueryWrapper<BstIvtCutpointivt> lam = new QueryWrapper<BstIvtCutpointivt>().lambda();
lam.eq(flag, BstIvtCutpointivt::getIs_used, "1")
.and(blam -> blam.eq(BstIvtCutpointivt::getTruss_point_code1, point).or()

View File

@@ -32,6 +32,7 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.system.service.param.ISysParamService;
import org.nl.system.service.param.dao.Param;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.basedata.st.service.StructattrService;
@@ -97,6 +98,9 @@ public class VehicleTwoServiceImpl implements VehicleTwoService {
@Autowired
private StructattrService structattrService;
@Autowired
private ISysParamService iSysParamService;
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject vehicleIn(JSONObject whereJson) {
@@ -293,6 +297,19 @@ public class VehicleTwoServiceImpl implements VehicleTwoService {
.eq(BstIvtBoxinfo::getBox_no, boxNo)
);
if (boxDao != null) {
//校验长宽高是否符合
String box_limit_width = iSysParamService.findByCode("box_limit_width").getValue();
String box_limit_length = iSysParamService.findByCode("box_limit_length").getValue();
String box_limit_height = iSysParamService.findByCode("box_limit_height").getValue();
if (Integer.parseInt(box_limit_width) < Integer.parseInt(boxDao.getBox_width())) {
throw new BadRequestException("当前木箱宽度大于【"+box_limit_width+"】,不允许入库!");
}
if (Integer.parseInt(box_limit_length) < Integer.parseInt(boxDao.getBox_length())) {
throw new BadRequestException("当前木箱长度大于【"+box_limit_width+"】,不允许入库!");
}
if (Integer.parseInt(box_limit_height) < Integer.parseInt(boxDao.getBox_high())) {
throw new BadRequestException("当前木箱高度大于【"+box_limit_width+"】,不允许入库!");
}
whereJson.put("vehicleType", boxDao.getVehicle_type());
boxDao.setIs_packing("1");
iBstIvtBoxinfoService.updateById(boxDao);
@@ -309,6 +326,19 @@ public class VehicleTwoServiceImpl implements VehicleTwoService {
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, boxNo)
);
//校验长宽高是否符合
String box_limit_width = iSysParamService.findByCode("box_limit_width").getValue();
String box_limit_length = iSysParamService.findByCode("box_limit_length").getValue();
String box_limit_height = iSysParamService.findByCode("box_limit_height").getValue();
if (Integer.parseInt(box_limit_width) < Integer.parseInt(boxDao1.getBox_width())) {
throw new BadRequestException("当前木箱宽度大于【"+box_limit_width+"】,不允许入库!");
}
if (Integer.parseInt(box_limit_length) < Integer.parseInt(boxDao1.getBox_length())) {
throw new BadRequestException("当前木箱长度大于【"+box_limit_width+"】,不允许入库!");
}
if (Integer.parseInt(box_limit_height) < Integer.parseInt(boxDao1.getBox_high())) {
throw new BadRequestException("当前木箱高度大于【"+box_limit_width+"】,不允许入库!");
}
boxDao1.setIs_packing("1");
iBstIvtBoxinfoService.updateById(boxDao1);
whereJson.put("vehicleType", boxDao1.getVehicle_type());

View File

@@ -57,12 +57,6 @@ public interface IPdmBiSlittingproductionplanService extends IService<PdmBiSlitt
* @return 最多两个
*/
List<PdmBiSlittingproductionplan> getByQzzNo(String qzzNo);
/**
* 通过气涨轴编码获取分切计划(未删除)
* @param qzzNo 气胀轴尺寸
* @return 最多两个
*/
List<PdmBiSlittingproductionplan> getByQzzNoNotDeleted(String qzzNo);
/**
* 根据气胀轴数组获取分切计划
@@ -163,11 +157,4 @@ public interface IPdmBiSlittingproductionplanService extends IService<PdmBiSlitt
List<PdmBiSlittingproductionplan> getPlansByDto(SlitterPlanDistinctDto dto);
/**
* 获取相同母卷同躺的计划数量
* @param demoPlan
* @return
*/
Integer getSameTripParentContainerPlanCount(PdmBiSlittingproductionplan demoPlan);
}

View File

@@ -25,7 +25,6 @@ import org.nl.modules.common.exception.BadRequestException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -99,14 +98,6 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl<PdmBiSli
return pdmBiSlittingproductionplanMapper.selectList(lam);
}
@Override
public List<PdmBiSlittingproductionplan> getByQzzNoNotDeleted(String qzzNo) {
LambdaQueryWrapper<PdmBiSlittingproductionplan> lam = new QueryWrapper<PdmBiSlittingproductionplan>().lambda();
lam.eq(PdmBiSlittingproductionplan::getQzzno, qzzNo)
.eq(PdmBiSlittingproductionplan::getIs_delete, "0");
return pdmBiSlittingproductionplanMapper.selectList(lam);
}
@Override
public List<PdmBiSlittingproductionplan> getByQzzNos(List<String> qzzNo, String status) {
LambdaQueryWrapper<PdmBiSlittingproductionplan> lam = new QueryWrapper<PdmBiSlittingproductionplan>().lambda();
@@ -244,19 +235,6 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl<PdmBiSli
}
return checkPlans;
}
@Override
public Integer getSameTripParentContainerPlanCount(PdmBiSlittingproductionplan demoPlan) {
LambdaQueryWrapper<PdmBiSlittingproductionplan> lam = new LambdaQueryWrapper<>();
lam.eq(PdmBiSlittingproductionplan::getParent_container_name, demoPlan.getParent_container_name())
.eq(PdmBiSlittingproductionplan::getRestruct_container_name, demoPlan.getRestruct_container_name())
.eq(PdmBiSlittingproductionplan::getResource_name, demoPlan.getResource_name())
.eq(PdmBiSlittingproductionplan::getSplit_group, demoPlan.getSplit_group())
.eq(PdmBiSlittingproductionplan::getIs_delete, "0")
.ne(PdmBiSlittingproductionplan::getUp_or_down, demoPlan.getUp_or_down());
return count(lam);
}
@Override
public int getCountXN(String area, String location) {
return pdmBiSlittingproductionplanMapper.getCountXN(area, location);

View File

@@ -1,411 +0,0 @@
package org.nl.b_lms.sch.tasks;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService;
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import org.nl.b_lms.sch.point.dao.StIvtCutpointivt;
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.constant.SlitterConstant;
import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.utils.IdUtil;
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;
import org.nl.wms.pdm.ivt.deliverycache.service.IDeliverycachepointivtService;
import org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt;
import org.nl.wms.sch.AcsTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
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.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 分切下料任务类(新改动)
* @Author: liyongde
* @Date: 2026/4/22 14:10
*/
@Slf4j
@Service
public class SlitterDownNewTrussTask extends AbstractAcsTask {
private final String THIS_CLASS = SlitterDownNewTrussTask.class.getName();
@Autowired
private IschBaseTaskService taskService;
@Autowired
private IPdmBiSlittingproductionplanService slittingproductionplanService;
@Autowired
private IBstIvtCutpointivtService bcutpointivtService;
@Autowired
private IstIvtCutpointivtService cutpointivtService;
@Autowired
private IDeliverycachepointivtService deliverycachepointivtService;
@Override
public List<AcsTaskDto> addTask() {
/*
* 下发给ACS时需要特殊处理
*/
List<SchBaseTask> taskList = taskService.getIssueTasks(THIS_CLASS);
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
String agv_system_type = "2";
for (SchBaseTask task : taskList) {
String requestParam = task.getRequest_param();
JSONObject requestParamObj = JSONObject.parseObject(requestParam);
AcsTaskDto dto = AcsTaskDto.builder()
.ext_task_id(task.getTask_id())
.task_code(task.getTask_code())
.task_type(task.getAcs_task_type())
.start_device_code(task.getPoint_code1())
.next_device_code(task.getPoint_code2())
.start_device_code2(task.getPoint_code3())
.next_device_code2(task.getPoint_code4())
.vehicle_code(task.getVehicle_code())
.truss_type(requestParamObj.getString("truss_type"))
.empty_site(requestParamObj.getString("empty_site"))
.agv_system_type(agv_system_type)
.priority(task.getPriority())
.remark(task.getRemark())
.product_area(task.getProduct_area())
.build();
resultList.add(dto);
}
return resultList;
}
@Override
public List<AcsTaskDto> addTask(SchBaseTask task) {
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
String agv_system_type = "2";
String requestParam = task.getRequest_param();
JSONObject requestParamObj = JSONObject.parseObject(requestParam);
AcsTaskDto dto = AcsTaskDto.builder()
.ext_task_id(task.getTask_id())
.task_code(task.getTask_code())
.task_type(task.getAcs_task_type())
.start_device_code(task.getPoint_code1())
.next_device_code(task.getPoint_code2())
.start_device_code2(task.getPoint_code3())
.next_device_code2(task.getPoint_code4())
.vehicle_code(task.getVehicle_code())
.truss_type(requestParamObj.getString("truss_type"))
.empty_site(requestParamObj.getString("empty_site"))
.agv_system_type(agv_system_type)
.priority(task.getPriority())
.remark(task.getRemark())
.product_area(task.getProduct_area())
.build();
resultList.add(dto);
return resultList;
}
@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)) {
// 更新任务状态为执行中
task.setTask_status(TaskStatusEnum.EXECUTING.getCode());
}
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
JSONObject requestParam = JSONObject.parseObject(task.getRequest_param());
String flag = requestParam.getString("flag");
switch (flag) {
case "1":
handleFinishFlag1(task, requestParam);
break;
case "2":
handleFinishFlag2(task, requestParam);
break;
case "3":
handleFinishFlag3(task, requestParam);
break;
default:
handleDefaultFlag(flag);
}
}
// 取消
if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) {
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
// 分切计划回退
// 下来06 -> 05 上去04 -> 03
String nextPlanQzzNo = task.getVehicle_code();
JSONObject requestParam = JSONObject.parseObject(task.getRequest_param());
// 下来的分切计划
JSONArray downContainers = requestParam.getJSONArray("down_roll");
List<String> downCons = downContainers.toJavaList(String.class);
if (!downCons.isEmpty()) {
PdmBiSlittingproductionplan p = new PdmBiSlittingproductionplan();
p.setStatus("05");
TaskUtils.updateOptMessageBySlitterPlan(p);
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getContainer_name, downCons));
}
// 上去的分切计划状态04 -> 03
if (ObjectUtil.isNotEmpty(nextPlanQzzNo)) {
PdmBiSlittingproductionplan p = new PdmBiSlittingproductionplan();
p.setStatus("03");
TaskUtils.updateOptMessageBySlitterPlan(p);
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.eq(PdmBiSlittingproductionplan::getQzzno, nextPlanQzzNo));
}
}
task.setUpdate_time(DateUtil.now());
task.setUpdate_optid(SecurityUtils.getCurrentUserId());
task.setUpdate_optname(SecurityUtils.getCurrentUsername());
taskService.updateById(task);
}
public void handleFinishFlag1(SchBaseTask task, JSONObject requestParam) {
// flag=1 业务逻辑
Deliverycachepointivt cachePoint = deliverycachepointivtService.getOneByPointCode(task.getPoint_code1(), false);
StIvtCutpointivt devicePoint = cutpointivtService.getPintByUpOrDownCode(task.getPoint_code2(), false);
BstIvtCutpointivt trussPoint = bcutpointivtService.getPintByTrussCode(task.getPoint_code4(), false);
// 获取计划
String nextPlanQzzNo = task.getVehicle_code();
String currentPlanQzzNo = task.getVehicle_code2();
List<PdmBiSlittingproductionplan> nextPlans = slittingproductionplanService.getByQzzNoNotDeleted(nextPlanQzzNo);
// List<PdmBiSlittingproductionplan> currentPlans = slittingproductionplanService.getByQzzNoNotDeleted(currentPlanQzzNo);
boolean same = task.getPoint_code2().equals(task.getPoint_code3());
// 更新设备点位数据
if (task.getPoint_code2().equals(devicePoint.getUp_point_code())) {
devicePoint.setUp_qzzno(nextPlanQzzNo);
if (!same) {
devicePoint.setDown_qzzno("");
}
} else {
devicePoint.setDown_qzzno(nextPlanQzzNo);
if (!same) {
devicePoint.setUp_qzzno("");
}
}
TaskUtils.updateOptMessageByStIvtCutPoint(devicePoint);
cutpointivtService.updateById(devicePoint);
// 清空更新架子点位
cachePoint.setQzzno("");
cachePoint.setPoint_status("01");
TaskUtils.updateOptMessageByCachePoint(cachePoint);
deliverycachepointivtService.updateById(cachePoint);
// 更新分切计划
List<PdmBiSlittingproductionplan> pdmBiSlittingproductionplans = updateDownRollPlan(requestParam);
updateUpRollPlan(nextPlans, nextPlanQzzNo);
// 赋值子卷
trussPoint.setPoint_status("3");
if (trussPoint.getTruss_point_code1().equals(task.getPoint_code4())) {
trussPoint.setQzz_no1(pdmBiSlittingproductionplans.get(0).getQzzno());
} else {
trussPoint.setQzz_no2(pdmBiSlittingproductionplans.get(0).getQzzno());
}
TaskUtils.updateOptMessageByBCutPoint(trussPoint);
bcutpointivtService.updateById(trussPoint);
}
public void updateUpRollPlan(List<PdmBiSlittingproductionplan> nextPlans, String nextPlanQzzNo) {
// 上去的分切计划状态04 -> 05
PdmBiSlittingproductionplan p = new PdmBiSlittingproductionplan();
p.setStatus("05");
p.setEnd_time("");
log.info("即将上卷的气胀轴编码数据:{}", nextPlans);
if (nextPlans.size() > 0) {
PdmBiSlittingproductionplan pp = nextPlans.get(0);
// 需要把重量记录到分切机上
// point1.setRemark(SlitterTaskUtil.getPaperWeightStr(nextPlans));
if (pp.getContainer_name().contains("虚拟")) {
// 如果是虚拟卷,需要执行删除标记,并且清空数据
// 将分切计划删除,设备禁用
nextPlans.forEach(p1 -> {
p1.setIs_delete("1");
p1.setQzzno("");
p1.setUpdate_time(DateUtil.now());
p1.setUpdate_optname(SecurityUtils.getCurrentNickName());
p1.setUpdate_optid(SecurityUtils.getCurrentUserId());
});
slittingproductionplanService.updateBatchById(nextPlans);
} else {
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.eq(PdmBiSlittingproductionplan::getQzzno, nextPlanQzzNo));
}
}
}
public List<PdmBiSlittingproductionplan> updateDownRollPlan(JSONObject requestParam) {
// 下来的分切计划状态06 -> 09, 不在需要设置重量
JSONArray downContainers = requestParam.getJSONArray("down_roll");
List<String> downCons = downContainers.toJavaList(String.class);
log.info("即将下卷的上下轴的子卷号数据:{}", downCons);
List<PdmBiSlittingproductionplan> downPlans = slittingproductionplanService.getByContainerNames(downCons);
// 下来的卷的集合
List<PdmBiSlittingproductionplan> needUpdates = new ArrayList<>();
// 绑定气胀轴编码(可能没有气胀轴编码)
List<PdmBiSlittingproductionplan> deviceUpPlans = downPlans.stream().filter(p -> SlitterConstant.SLITTER_SHAFT_UP.equals(p.getUp_or_down())).collect(Collectors.toList());
List<PdmBiSlittingproductionplan> deviceDownPlans = downPlans.stream().filter(p -> SlitterConstant.SLITTER_SHAFT_DOWN.equals(p.getUp_or_down())).collect(Collectors.toList());
if (deviceUpPlans.size() > 0) {
PdmBiSlittingproductionplan upDemoPlan = deviceUpPlans.get(0);
String resourceName = upDemoPlan.getResource_name();
String qzzNO = resourceName.substring(0, 2)
+ resourceName.substring(resourceName.length() - 2)
+ upDemoPlan.getSplit_group()
+ TaskUtils.getDateTime("yyMMddHHmmss") + "-"
+ upDemoPlan.getUp_or_down();
for (PdmBiSlittingproductionplan deviceUpPlan : deviceUpPlans) {
deviceUpPlan.setQzzno(qzzNO);
deviceUpPlan.setStatus("09");
deviceUpPlan.setEnd_time(DateUtil.now());
TaskUtils.updateOptMessageBySlitterPlan(deviceUpPlan);
needUpdates.add(deviceUpPlan);
}
}
if (deviceDownPlans.size() > 0) {
PdmBiSlittingproductionplan downDemoPlan = deviceDownPlans.get(0);
String resourceName = downDemoPlan.getResource_name();
String qzzNO = resourceName.substring(0, 2)
+ resourceName.substring(resourceName.length() - 2)
+ downDemoPlan.getSplit_group()
+ TaskUtils.getDateTime("yyMMddHHmmss") + "-"
+ downDemoPlan.getUp_or_down();
for (PdmBiSlittingproductionplan deviceDownPlan : deviceDownPlans) {
deviceDownPlan.setQzzno(qzzNO);
deviceDownPlan.setStatus("09");
deviceDownPlan.setEnd_time(DateUtil.now());
TaskUtils.updateOptMessageBySlitterPlan(deviceDownPlan);
needUpdates.add(deviceDownPlan);
}
}
boolean b = slittingproductionplanService.updateBatchById(needUpdates);
log.info("{} - 即将下卷的上下轴的子卷号数据:{}", b, needUpdates);
return Stream.concat(deviceUpPlans.stream(), deviceDownPlans.stream()).collect(Collectors.toList());
}
public void handleFinishFlag2(SchBaseTask task, JSONObject requestParam) {
// flag=2 业务逻辑 (单下)
List<PdmBiSlittingproductionplan> pdmBiSlittingproductionplans = updateDownRollPlan(requestParam);
StIvtCutpointivt devicePoint = cutpointivtService.getPintByUpOrDownCode(task.getPoint_code1(), false);
BstIvtCutpointivt trussPoint = bcutpointivtService.getPintByTrussCode(task.getPoint_code2(), false);
// 设备清空
if (task.getPoint_code1().equals(devicePoint.getUp_point_code())) {
devicePoint.setUp_qzzno("");
} else {
devicePoint.setDown_qzzno("");
}
TaskUtils.updateOptMessageByStIvtCutPoint(devicePoint);
cutpointivtService.updateById(devicePoint);
// 站点赋值
trussPoint.setPoint_status("3");
if (trussPoint.getTruss_point_code1().equals(task.getPoint_code4())) {
trussPoint.setQzz_no1(pdmBiSlittingproductionplans.get(0).getQzzno());
} else {
trussPoint.setQzz_no2(pdmBiSlittingproductionplans.get(0).getQzzno());
}
TaskUtils.updateOptMessageByBCutPoint(trussPoint);
bcutpointivtService.updateById(trussPoint);
}
public void handleFinishFlag3(SchBaseTask task, JSONObject requestParam) {
// flag=3 业务逻辑 单上
Deliverycachepointivt cachePoint = deliverycachepointivtService.getOneByPointCode(task.getPoint_code1(), false);
StIvtCutpointivt devicePoint = cutpointivtService.getPintByUpOrDownCode(task.getPoint_code2(), false);
// 获取计划
String nextPlanQzzNo = task.getVehicle_code();
List<PdmBiSlittingproductionplan> nextPlans = slittingproductionplanService.getByQzzNoNotDeleted(nextPlanQzzNo);
// 起点清空
// 清空更新架子点位
cachePoint.setQzzno("");
cachePoint.setPoint_status("01");
TaskUtils.updateOptMessageByCachePoint(cachePoint);
deliverycachepointivtService.updateById(cachePoint);
// 终点赋值
if (task.getPoint_code2().equals(devicePoint.getUp_point_code())) {
devicePoint.setUp_qzzno(nextPlanQzzNo);
} else {
devicePoint.setDown_qzzno(nextPlanQzzNo);
}
TaskUtils.updateOptMessageByStIvtCutPoint(devicePoint);
cutpointivtService.updateById(devicePoint);
updateUpRollPlan(nextPlans, nextPlanQzzNo);
}
public void handleDefaultFlag(String flag) {
throw new BadRequestException("不支持的 flag" + flag);
}
@Override
public String createTask(JSONObject param) {
String currentUserId = SecurityUtils.getCurrentUserId();
String currentUsername = SecurityUtils.getCurrentUsername();
JSONArray tasks = param.getJSONArray("tasks");
for (int i = 0; i < tasks.size(); i++) {
JSONObject form = tasks.getJSONObject(i);
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(IdUtil.getStringId());
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.setTask_group_id(form.getString("groupId"));
task.setSort_seq(form.getBigDecimal("seq"));
task.setRequest_param(form.toJSONString());
task.setTask_type(form.getString("task_type"));
task.setProduct_area(form.getString("product_area"));
task.setCreate_id(currentUserId);
task.setCreate_name(currentUsername);
task.setCreate_time(DateUtil.now());
task.setHandle_class(THIS_CLASS);
//根据类型获取对应的任务优先级
JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag", "3").addParam("task_type", task.getTask_type()).process().uniqueResult(0);
if (ObjectUtil.isEmpty(priority_jo)) {
task.setPriority("1");
} else {
task.setPriority(priority_jo.getString("value"));
}
taskService.save(task);
this.immediateTaskNotifyAcs(task);
}
return "";
}
@Override
public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());
}
@Override
public void cancel(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, "0");
}
}

View File

@@ -152,6 +152,9 @@ public class ZxDjwTask extends AbstractAcsTask {
//7.改变子卷包装状态为已装箱1
PdmBiSubpackagerelation pdmBiSubpackagerelation = subpackageRelationService
.getOne(new LambdaUpdateWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getContainer_name, schBaseTask.getVehicle_code()), false);
if (!pdmBiSubpackagerelation.getStatus().equals(IOSEnum.IS_NOTANDYES.code(""))){
throw new BadRequestException("该子卷对应状态为["+pdmBiSubpackagerelation.getStatus()+"],不为生成状态,不允许进行状态变更!)");
}
pdmBiSubpackagerelation.setStatus(IOSEnum.IS_NOTANDYES.code(""));
subpackageRelationService.updateById(pdmBiSubpackagerelation);
}

View File

@@ -112,7 +112,7 @@ public class AutoIssueOutEmptyTask {
sortedArr.addAll(taskList);
for (int i = 0; i < sortedArr.size(); i++) {
if (num >= 2) {
if (num >= empty_num) {
break;
}
ArrayList<AcsTaskDto> resultList = new ArrayList<>();

View File

@@ -1,263 +0,0 @@
package org.nl.b_lms.sch.tasks.slitter;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService;
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
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.constant.SlitterConstant;
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterEnum;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.utils.IdUtil;
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.pdm.ivt.deliverycache.service.IDeliverycachepointivtService;
import org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt;
import org.nl.wms.pdm.ivt.deliverycache.service.dto.AreaBCachePointDto;
import org.nl.wms.sch.AcsTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
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.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 送气胀轴拆单AGV任务
*
* @Author: liyongde
* @Date: 2026/4/21 14:47
*/
@Slf4j
@Service
public class SendDisassemblyAgvTask extends AbstractAcsTask {
private final String THIS_CLASS = SendDisassemblyAgvTask.class.getName();
@Autowired
private IschBaseTaskService taskService;
@Autowired
private IPdmBiSlittingproductionplanService slittingproductionplanService;
@Autowired
private IBstIvtCutpointivtService bcutpointivtService;
@Autowired
private IDeliverycachepointivtService deliverycachepointivtService;
@Autowired
private TrussDisassemblyCacheTask trussDisassemblyCacheTask;
@Override
public List<AcsTaskDto> addTask() {
/*
* 下发给ACS时需要特殊处理
*/
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
String agv_system_type = "2";
List<SchBaseTask> taskList = taskService.getIssueTasks(THIS_CLASS);
for (SchBaseTask task : taskList) {
AcsTaskDto dto = AcsTaskDto.builder()
.ext_task_id(task.getTask_id())
.task_code(task.getTask_code())
.task_type(task.getAcs_task_type())
.start_device_code(task.getPoint_code1())
.next_device_code(task.getPoint_code2())
.start_device_code2(task.getPoint_code3())
.next_device_code2(task.getPoint_code4())
.vehicle_code(task.getVehicle_code())
.agv_system_type(agv_system_type)
.priority(task.getPriority())
.remark(task.getRemark())
.product_area(task.getProduct_area())
.build();
resultList.add(dto);
}
return resultList;
}
/**
* 单任务下发,业务逻辑与无参 addTask 保持一致
*/
@Override
public List<AcsTaskDto> addTask(SchBaseTask task) {
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
String agv_system_type = "2";
if (task != null) {
AcsTaskDto dto = AcsTaskDto.builder()
.ext_task_id(task.getTask_id())
.task_code(task.getTask_code())
.task_type(task.getAcs_task_type())
.start_device_code(task.getPoint_code1())
.next_device_code(task.getPoint_code2())
.start_device_code2(task.getPoint_code3())
.next_device_code2(task.getPoint_code4())
.vehicle_code(task.getVehicle_code())
.agv_system_type(agv_system_type)
.priority(task.getPriority())
.remark(task.getRemark())
.product_area(task.getProduct_area())
.build();
resultList.add(dto);
}
return resultList;
}
@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)) {
// 更新任务状态为执行中
task.setTask_status(TaskStatusEnum.EXECUTING.getCode());
}
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
// 互换资源
// update: 在acs请求取货完成就已经清空点位信息
String endPoint = task.getPoint_code2();
BstIvtCutpointivt endPointObj = bcutpointivtService.getPintByAgvCode(endPoint, false);
TaskUtils.pointMaintenanceInventory(task, endPointObj, "2");
bcutpointivtService.updateById(endPointObj);
List<Deliverycachepointivt> list = deliverycachepointivtService.getAreaBCacheByConditionsAndNoTask(AreaBCachePointDto.builder()
.area(endPointObj.getProduct_area())
.location(endPointObj.getPoint_location())
.pointStatus("01")
.plan(endPointObj.getPlan()).build());
// 创建桁架任务
JSONObject trussTaskParam = new JSONObject();
if (ObjectUtil.isNotEmpty(task.getVehicle_code()) && ObjectUtil.isNotEmpty(task.getVehicle_code2())) {
if (list.size() < 2) {
log.info("原地等待,无可用架子...");
// 原地等待
// 分切计划状态修改02->03
// 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("03");
// TaskUtils.updateOptMessageBySlitterPlan(p);
// slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
// .in(PdmBiSlittingproductionplan::getQzzno, collect));
return;
}
Deliverycachepointivt d1 = list.get(0);
Deliverycachepointivt d2 = list.get(1);
// 四点
trussTaskParam.put("point_code1", endPointObj.getTruss_point_code1());
trussTaskParam.put("point_code2", d1.getPoint_code());
trussTaskParam.put("point_code3", endPointObj.getTruss_point_code2());
trussTaskParam.put("point_code4", d2.getPoint_code());
trussTaskParam.put("vehicle_code", task.getVehicle_code());
trussTaskParam.put("vehicle_code2", task.getVehicle_code2());
trussTaskParam.put("truss_type", "8");
trussTaskParam.put("task_type", SlitterEnum.TASK_TYPE.code("拆单桁架任务"));
trussTaskParam.put("product_area", endPointObj.getProduct_area());
trussDisassemblyCacheTask.createTask(trussTaskParam);
} else {
if (list.isEmpty()) {
log.info("原地等待,无可用架子...");
// 原地等待
// 分切计划状态修改02->03
// 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("03");
// TaskUtils.updateOptMessageBySlitterPlan(p);
// slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
// .in(PdmBiSlittingproductionplan::getQzzno, collect));
return;
}
// 两点
Deliverycachepointivt d1 = list.get(0);
trussTaskParam.put("point_code1", ObjectUtil.isNotEmpty(endPointObj.getQzz_no1())
? endPointObj.getTruss_point_code1() : endPointObj.getTruss_point_code2());
trussTaskParam.put("point_code2", d1.getPoint_code());
trussTaskParam.put("truss_type", "8");
trussTaskParam.put("task_type", SlitterEnum.TASK_TYPE.code("拆单桁架任务"));
trussTaskParam.put("product_area", endPointObj.getProduct_area());
trussDisassemblyCacheTask.createTask(trussTaskParam);
}
}
// 取消
if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) {
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
// 分切计划是否需要回退 状态 02->01
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("01");
TaskUtils.updateOptMessageBySlitterPlan(p);
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, collect));
}
task.setUpdate_time(DateUtil.now());
taskService.updateById(task);
}
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject form) {
String currentUserId = SecurityUtils.getCurrentUserId();
String currentUsername = SecurityUtils.getCurrentUsername();
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(IdUtil.getStringId());
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_code1"));
task.setVehicle_code2(form.getString("vehicle_code2"));
task.setAcs_task_type("3");
task.setIs_delete(SlitterConstant.SLITTER_NO);
task.setRequest_param(form.toJSONString());
task.setTask_type(form.getString("task_type"));
task.setProduct_area(form.getString("product_area"));
task.setCreate_id(currentUserId);
task.setCreate_name(currentUsername);
task.setCreate_time(DateUtil.now());
task.setHandle_class(THIS_CLASS);
//根据类型获取对应的任务优先级
JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag", "3").addParam("task_type", task.getTask_type()).process().uniqueResult(0);
if (ObjectUtil.isEmpty(priority_jo)) {
task.setPriority("1");
} else {
task.setPriority(priority_jo.getString("value"));
}
taskService.save(task);
// 分切计划(最多四个)修改状态 01->02
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("02");
TaskUtils.updateOptMessageBySlitterPlan(p);
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, collect));
this.immediateTaskNotifyAcs(task);
return task.getTask_id();
}
@Override
public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());
}
@Override
public void cancel(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, "0");
}
}

View File

@@ -1,226 +0,0 @@
package org.nl.b_lms.sch.tasks.slitter;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService;
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
import org.nl.b_lms.bst.ivt.shafttubeivt.service.IBstIvtShafttubeivtService;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
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.IdUtil;
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.pdm.ivt.deliverycache.service.IDeliverycachepointivtService;
import org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt;
import org.nl.wms.sch.AcsTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
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;
/**
* 拆单桁架任务
* @Author: liyongde
* @Date: 2026/4/21 16:07
*/
@Slf4j
@Service
public class TrussDisassemblyCacheTask extends AbstractAcsTask {
private final String THIS_CLASS = TrussDisassemblyCacheTask.class.getName();
@Autowired
private IschBaseTaskService taskService;
@Autowired
private IPdmBiSlittingproductionplanService slittingproductionplanService;
@Autowired
private IBstIvtCutpointivtService bcutpointivtService;
@Autowired
private IBstIvtShafttubeivtService shafttubeivtService;
@Autowired
private IDeliverycachepointivtService deliverycachepointivtService;
@Override
public List<AcsTaskDto> addTask() {
/*
* 下发给ACS时需要特殊处理
*/
List<SchBaseTask> taskList = taskService.getIssueTasks(THIS_CLASS);
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
String agv_system_type = "2";
for (SchBaseTask task : taskList) {
JSONObject object = JSONObject.parseObject(task.getRequest_param());
String requestParam = task.getRequest_param();
JSONObject requestParamObj = JSONObject.parseObject(requestParam);
AcsTaskDto dto = AcsTaskDto.builder()
.ext_task_id(task.getTask_id())
.task_code(task.getTask_code())
.task_type(task.getAcs_task_type())
.start_device_code(task.getPoint_code1())
.next_device_code(task.getPoint_code2())
.start_device_code2(task.getPoint_code3())
.next_device_code2(task.getPoint_code4())
.vehicle_code(task.getVehicle_code())
.truss_type(requestParamObj.getString("truss_type"))
.empty_site("0")
.agv_system_type(agv_system_type)
.priority(task.getPriority())
.remark(task.getRemark())
.interaction_json(object)
.product_area(task.getProduct_area())
.build();
resultList.add(dto);
}
return resultList;
}
/**
* 单任务下发,业务逻辑与无参 addTask 保持一致
*/
@Override
public List<AcsTaskDto> addTask(SchBaseTask task) {
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
String agv_system_type = "2";
if (task != null) {
JSONObject object = JSONObject.parseObject(task.getRequest_param());
String requestParam = task.getRequest_param();
JSONObject requestParamObj = JSONObject.parseObject(requestParam);
AcsTaskDto dto = AcsTaskDto.builder()
.ext_task_id(task.getTask_id())
.task_code(task.getTask_code())
.task_type(task.getAcs_task_type())
.start_device_code(task.getPoint_code1())
.next_device_code(task.getPoint_code2())
.start_device_code2(task.getPoint_code3())
.next_device_code2(task.getPoint_code4())
.vehicle_code(task.getVehicle_code())
.truss_type(requestParamObj.getString("truss_type"))
.empty_site("0")
.agv_system_type(agv_system_type)
.priority(task.getPriority())
.remark(task.getRemark())
.interaction_json(object)
.product_area(task.getProduct_area())
.build();
resultList.add(dto);
}
return resultList;
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateTaskStatus(JSONObject taskObj, String status) {
SchBaseTask task = taskService.getById(taskObj.getString("task_id"));
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
// 更新任务状态为执行中
task.setTask_status(TaskStatusEnum.EXECUTING.getCode());
}
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
// 更改任务状态为完成
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
String startPoint = task.getPoint_code1();
String endPoint = task.getPoint_code2();
String endPoint2 = task.getPoint_code4();
BstIvtCutpointivt startPointObj = bcutpointivtService.getPintByTrussCode(startPoint, false);
Deliverycachepointivt endPointObj = deliverycachepointivtService.getPintByCode(endPoint, false);
Deliverycachepointivt endPointObj2 = deliverycachepointivtService.getPintByCode(endPoint2, false);
endPointObj.setQzzno(task.getVehicle_code());
endPointObj.setPoint_status("02");
TaskUtils.updateOptMessageByCachePoint(endPointObj);
deliverycachepointivtService.updateById(endPointObj);
if (endPointObj2 != null) {
endPointObj2.setQzzno(task.getVehicle_code());
endPointObj2.setPoint_status("02");
TaskUtils.updateOptMessageByCachePoint(endPointObj2);
deliverycachepointivtService.updateById(endPointObj2);
}
// 起点清空
startPointObj.setQzz_size("");
startPointObj.setQzz_no1("");
startPointObj.setQzz_no2("");
startPointObj.setPoint_status("1");
TaskUtils.updateOptMessageByBCutPoint(startPointObj);
bcutpointivtService.updateById(startPointObj);
// 分切计划状态修改02->03
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("03");
TaskUtils.updateOptMessageBySlitterPlan(p);
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, collect));
}
// 取消
if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) {
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
}
TaskUtils.updateOptMessageByTask(task);
taskService.updateById(task);
}
@Override
public String createTask(JSONObject form) {
String currentUserId = SecurityUtils.getCurrentUserId();
String currentUsername = SecurityUtils.getCurrentUsername();
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(IdUtil.getStringId());
task.setTask_status(ObjectUtil.isNotEmpty(form.getString("task_status"))
? form.getString("task_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_code1"));
task.setVehicle_code2(form.getString("vehicle_code2"));
task.setAcs_task_type("6");
task.setIs_delete("0");
task.setRequest_param(form.toJSONString());
task.setTask_type(form.getString("task_type"));
task.setProduct_area(form.getString("product_area"));
task.setCreate_id(currentUserId);
task.setCreate_name(currentUsername);
task.setCreate_time(DateUtil.now());
task.setHandle_class(THIS_CLASS);
//根据类型获取对应的任务优先级
JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag", "3").addParam("task_type", task.getTask_type()).process().uniqueResult(0);
if (ObjectUtil.isEmpty(priority_jo)) {
task.setPriority("1");
} else {
task.setPriority(priority_jo.getString("value"));
}
taskService.save(task);
this.immediateTaskNotifyAcs(task);
return task.getTask_id();
}
@Override
public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());
}
@Override
public void cancel(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, "0");
}
}

View File

@@ -124,7 +124,6 @@ public class TrussSendAirShaftTask extends AbstractAcsTask {
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
String startPoint = task.getPoint_code1();
String endPoint = task.getPoint_code2();
JSONObject parseObject = JSONObject.parseObject(task.getRequest_param());
BstIvtShafttubeivt startPointObj = shafttubeivtService.getByPointCode(startPoint, false);
BstIvtCutpointivt endPointObj = bcutpointivtService.getPintByTrussCode(endPoint, false);
// 设置点位信息
@@ -135,10 +134,6 @@ public class TrussSendAirShaftTask extends AbstractAcsTask {
// 下轴
endPointObj.setQzz_no2(task.getVehicle_code2());
}
// 如果parseObject为空或flag为空设置为"0"
String flag = (parseObject != null && StrUtil.isNotBlank(parseObject.getString("flag")))
? parseObject.getString("flag") : "0";
endPointObj.setPlan(flag);
endPointObj.setPoint_status("2");
TaskUtils.updateOptMessageByBCutPoint(endPointObj);
bcutpointivtService.updateById(endPointObj);

View File

@@ -1,263 +0,0 @@
package org.nl.b_lms.sch.tasks.slitter;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService;
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import org.nl.b_lms.sch.point.dao.StIvtCutpointivt;
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.util.SlitterTaskUtil;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.utils.IdUtil;
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.pdm.ivt.deliverycache.service.IDeliverycachepointivtService;
import org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt;
import org.nl.wms.sch.AcsTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
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;
/**
* 新的上轴任务
* @Author: liyongde
* @Date: 2026/4/24 14:21
*/
@Slf4j
@Service
public class UpShaftTrussNewTask extends AbstractAcsTask {
private final String THIS_CLASS = UpShaftTrussNewTask.class.getName();
@Autowired
private IschBaseTaskService taskService;
@Autowired
private IPdmBiSlittingproductionplanService slittingproductionplanService;
@Autowired
private IBstIvtCutpointivtService bcutpointivtService;
@Autowired
private IstIvtCutpointivtService cutpointivtService;
@Autowired
private IDeliverycachepointivtService deliverycachepointivtService;
@Override
public List<AcsTaskDto> addTask() {
/*
* 下发给ACS时需要特殊处理
*/
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
String agv_system_type = "2";
List<SchBaseTask> taskList = taskService.getIssueTasks(THIS_CLASS);
for (SchBaseTask task : taskList) {
String requestParam = task.getRequest_param();
JSONObject requestParamObj = JSONObject.parseObject(requestParam);
AcsTaskDto dto = AcsTaskDto.builder()
.ext_task_id(task.getTask_id())
.task_code(task.getTask_code())
.task_type(task.getAcs_task_type())
.start_device_code(task.getPoint_code1())
.next_device_code(task.getPoint_code2())
.start_device_code2(task.getPoint_code3())
.next_device_code2(task.getPoint_code4())
.vehicle_code(task.getVehicle_code())
.agv_system_type(agv_system_type)
.truss_type(requestParamObj.getString("truss_type"))
.empty_site(requestParamObj.getString("empty_site"))
.priority(task.getPriority())
.remark(task.getRemark())
.product_area(task.getProduct_area())
.build();
resultList.add(dto);
}
return resultList;
}
/**
* 单任务下发,业务逻辑与无参 addTask 保持一致
*/
@Override
public List<AcsTaskDto> addTask(SchBaseTask task) {
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
String agv_system_type = "2";
if (task != null) {
String requestParam = task.getRequest_param();
JSONObject requestParamObj = JSONObject.parseObject(requestParam);
AcsTaskDto dto = AcsTaskDto.builder()
.ext_task_id(task.getTask_id())
.task_code(task.getTask_code())
.task_type(task.getAcs_task_type())
.start_device_code(task.getPoint_code1())
.next_device_code(task.getPoint_code2())
.start_device_code2(task.getPoint_code3())
.next_device_code2(task.getPoint_code4())
.vehicle_code(task.getVehicle_code())
.agv_system_type(agv_system_type)
.truss_type(requestParamObj.getString("truss_type"))
.empty_site(requestParamObj.getString("empty_site"))
.priority(task.getPriority())
.remark(task.getRemark())
.product_area(task.getProduct_area())
.build();
resultList.add(dto);
}
return resultList;
}
@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)) {
// 更新任务状态为执行中
task.setTask_status(TaskStatusEnum.EXECUTING.getCode());
}
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
// 点位内容更新
// 1是缓存架位2是分切机下料位
String pointCode1 = task.getPoint_code1();
Deliverycachepointivt point1 = deliverycachepointivtService.getOneByPointCode(pointCode1, false);
String pointCode2 = task.getPoint_code2();
StIvtCutpointivt point2 = cutpointivtService.getPintByUpOrDownCode(pointCode2, false);
// 可能不存在
String pointCode3 = task.getPoint_code1();
Deliverycachepointivt point3 = deliverycachepointivtService.getOneByPointCode(pointCode3, false);
// 交换数据
point2.setUp_qzzno(task.getVehicle_code());
point2.setDown_qzzno(task.getVehicle_code2());
point2.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId()));
point2.setUpdate_optname(SecurityUtils.getCurrentUsername());
point2.setUpdate_time(DateUtil.now());
// 分切计划修改状态04->05
List<String> collect = Stream.of(task.getVehicle_code(), task.getVehicle_code2())
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.getByQzzNos(collect);
PdmBiSlittingproductionplan pp = plans.get(0);
String weightStr = SlitterTaskUtil.getPaperWeightStr(plans);
if (pp.getContainer_name().contains("虚拟")) {
// 如果是虚拟卷,需要执行删除标记,并且清空数据
// 将分切计划删除,设备禁用
plans.forEach(p1 -> {
p1.setIs_delete("1");
p1.setQzzno("");
p1.setUpdate_time(DateUtil.now());
p1.setUpdate_optname(SecurityUtils.getCurrentNickName());
p1.setUpdate_optid(SecurityUtils.getCurrentUserId());
});
slittingproductionplanService.updateBatchById(plans);
// 设备禁用
point2.setUp_qzzno("");
point2.setDown_qzzno("");
} else {
PdmBiSlittingproductionplan p = new PdmBiSlittingproductionplan();
p.setStatus("05");
TaskUtils.updateOptMessageBySlitterPlan(p);
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, collect));
}
point2.setRemark(weightStr);
cutpointivtService.updateById(point2);
point1.setQzzno("");
point1.setPoint_status("01");
TaskUtils.updateOptMessageByCachePoint(point1);
point3.setQzzno("");
point3.setPoint_status("01");
TaskUtils.updateOptMessageByCachePoint(point3);
deliverycachepointivtService.updateBatchById(Stream.of(point1, point3).collect(Collectors.toList()));
}
// 取消
if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) {
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
// 分切计划修改状态回退04 -> 03
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("03");
TaskUtils.updateOptMessageBySlitterPlan(p);
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, collect));
}
TaskUtils.updateOptMessageByTask(task);
taskService.updateById(task);
}
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject form) {
String currentUserId = SecurityUtils.getCurrentUserId();
String currentUsername = SecurityUtils.getCurrentUsername();
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(IdUtil.getStringId());
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());
task.setTask_type(form.getString("task_type"));
task.setProduct_area(form.getString("product_area"));
task.setCreate_id(currentUserId);
task.setCreate_name(currentUsername);
task.setCreate_time(DateUtil.now());
task.setHandle_class(THIS_CLASS);
//根据类型获取对应的任务优先级
JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag", "3").addParam("task_type", task.getTask_type()).process().uniqueResult(0);
if (ObjectUtil.isEmpty(priority_jo)) {
task.setPriority("1");
} else {
task.setPriority(priority_jo.getString("value"));
}
taskService.save(task);
// 分切计划修改状态 03->04
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("04");
TaskUtils.updateOptMessageBySlitterPlan(p);
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, collect));
this.immediateTaskNotifyAcs(task);
return task.getTask_id();
}
@Override
public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());
}
@Override
public void cancel(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, "0");
}
}

View File

@@ -43,7 +43,6 @@ import org.nl.system.service.notice.ISysNoticeService;
import org.nl.system.service.param.ISysParamService;
import org.nl.system.service.param.dao.Param;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.pdm.ivt.deliverycache.service.IDeliverycachepointivtService;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
@@ -104,16 +103,12 @@ public class AutoCallAirShaftTask extends Prun {
private RedisUtils redisUtils;
@Autowired
private IMdPbPapervehicleService papervehicleService;
@Autowired
private IDeliverycachepointivtService iDeliverycachepointivtService;
public final static String PARAM_CODE_PLAN_AREA = "PARAM_CODE_PLAN_AREA";
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 final static String BZ_CHECK_EMPTY = "BZ_CHECK_EMPTY";
/** 合单配送 */
public final static String IS_COMBINED_ORDER = "IS_COMBINED_ORDER";
public List<String> stepErrorInfo = new ArrayList<>();
@Autowired
private RedissonClient redissonClient;
@@ -1249,19 +1244,6 @@ public class AutoCallAirShaftTask extends Prun {
}
List<String> stringList = cuts2.stream().map(BstIvtCutpointivt::getPoint_code).collect(Collectors.toList());
stepErrorInfo.add("设备" + dto.getResource_name() + "检测到暂存架" + stringList + "有套好的管芯,不会进行套轴。");
// 检测是否存在气胀轴缓存架子上
Param codParam = paramService.findByCode(IS_COMBINED_ORDER);
// 不允许拼单(不拼单代表不使用拼单逻辑,无需检测)
if (ObjectUtil.isEmpty(codParam) || !"1".equals(codParam.getValue())) {
return true;
}
// 检测 todo: 可以优化考虑任务,但似乎没太大作用
Integer num = iDeliverycachepointivtService.countPendingUseByDevice(dto.getResource_name());
if (num == 0) {
return true;
}
}
log.info("检查有同母卷不允许套轴:{}", dto);
// 有就返回true

View File

@@ -14,15 +14,12 @@ 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.SendDisassemblyAgvTask;
import org.nl.b_lms.sch.tasks.slitter.SendNBJExceptionPointTask;
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant;
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterEnum;
import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper;
import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.system.service.param.ISysParamService;
import org.nl.system.service.param.dao.Param;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
@@ -41,10 +38,6 @@ import java.util.stream.Stream;
@Slf4j
@Component
public class AutoSendAirShaftAgvTask {
/** 合单配送 */
public final static String IS_COMBINED_ORDER = "IS_COMBINED_ORDER";
/** 合单超时时间 */
public final static String IS_COMBINED_ORDER_TIME = "IS_COMBINED_ORDER_TIME";
@Autowired
private IBstIvtCutpointivtService bcutpointivtService;
@Autowired
@@ -59,15 +52,13 @@ public class AutoSendAirShaftAgvTask {
private RedissonClient redissonClient;
@Autowired
private SendNBJExceptionPointTask sendNBJExceptionPointTask;
@Autowired
private SendDisassemblyAgvTask sendDisassemblyAgvTask;
@Autowired
private ISysParamService paramService;
@SneakyThrows
public void run() {
log.info("自动送气胀轴开始执行...");
// 获取套轴对接位有气涨轴没任务的点位
// 目前满足B1,B2
// todo: 可以把区域校验去掉就能够包括B1,B2,B3,B4
List<BstIvtCutpointivt> cutPoints = bcutpointivtService.getAreaNotTaskPointByStatus("1", "2", "0", "0");
for (BstIvtCutpointivt cutPoint : cutPoints) {
log.info("此时执行的点位:{}", cutPoint.getPoint_code());
@@ -142,16 +133,6 @@ public class AutoSendAirShaftAgvTask {
continue;
}
}
// 检测是否存在气胀轴缓存架子上
Param codParam = paramService.findByCode(IS_COMBINED_ORDER);
// plan=0/11代表拼单需要拆单不能走原来的逻辑
if (ObjectUtil.isNotEmpty(codParam)
&& "1".equals(codParam.getValue())
&& "1".equals(cutPoint.getPlan())) {
// 拼单输送
toCreateDisassemblyAgvTask(cutPoint, plans, deviceCut);
continue;
}
// 如果两个气涨轴编码则表示一组满了
// 查找分切对接没任务的空位
// hint: B1、B2、B3、B4分切区分两个桁架位置 (B1,B3: 1-6为上。B2B4是1-5为上区域)
@@ -160,7 +141,7 @@ public class AutoSendAirShaftAgvTask {
SlitterTaskUtil.getPointLocationInCutDevice(
SlitterTaskUtil.getNumberByResourceCode(demoPlan.getResource_name()),
area));
if (emptyPoint.isEmpty()) {
if (emptyPoint.size() == 0) {
log.warn("当前分切机找不到空闲的对接位置!");
cutPoint.setRemark("找不到当前分切机空闲的对接位置,暂时不送轴!");
cutPoint.setUpdate_time(DateUtil.now());
@@ -195,48 +176,4 @@ public class AutoSendAirShaftAgvTask {
}
/**
* 创建拆单AGV任务
* @param cutPoint
*/
public void toCreateDisassemblyAgvTask(BstIvtCutpointivt cutPoint, List<PdmBiSlittingproductionplan> plans, StIvtCutpointivt deviceCut) {
Param codParam = paramService.findByCode(IS_COMBINED_ORDER_TIME);
// 单位:分钟
String time = ObjectUtil.isNotEmpty(codParam) ? codParam.getValue() : "5";
time = ObjectUtil.defaultIfBlank(time, "5");
int limitMinutes = Integer.parseInt(time);
// 核心判断:两个编号为空 + 更新时间在规定分钟内
if ((ObjectUtil.isEmpty(cutPoint.getQzz_no1()) || ObjectUtil.isEmpty(cutPoint.getQzz_no2()))
&& ObjectUtil.isNotEmpty(cutPoint.getUpdate_time())
&& SlitterTaskUtil.isTimeWithinLimit(cutPoint.getUpdate_time(), limitMinutes)) {
log.info("等待拼单,等待时间未超过{}分钟...", time);
return;
}
PdmBiSlittingproductionplan demoPlan = plans.get(0);
// 找到对应的位置
String area = deviceCut.getProduct_area();
List<BstIvtCutpointivt> emptyPoint = slitterMapper.getEmptyAirShaftAgvPointNotTask(
area,
SlitterTaskUtil.getPointLocationInCutDevice(
SlitterTaskUtil.getNumberByResourceCode(demoPlan.getResource_name()),
area),
deviceCut.getPlan());
if (emptyPoint.isEmpty()) {
log.warn("当前分切机找不到空闲的对接位置!");
cutPoint.setRemark("找不到当前分切机空闲的对接位置,暂时不送轴!");
cutPoint.setUpdate_time(DateUtil.now());
bcutpointivtService.updateById(cutPoint);
}
BstIvtCutpointivt endPoint = emptyPoint.get(0);
JSONObject param = new JSONObject();
param.put("point_code1", cutPoint.getPoint_code());
param.put("point_code2", endPoint.getPoint_code());
param.put("vehicle_code1", cutPoint.getQzz_no1());
param.put("vehicle_code2", cutPoint.getQzz_no2());
param.put("task_type", SlitterEnum.TASK_TYPE.code("送轴拆单任务"));
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
param.put("containers", plans.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList()));
sendDisassemblyAgvTask.createTask(param);
}
}

View File

@@ -27,8 +27,7 @@ public enum SlitterEnum {
, "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815", "备货区单独送空载具", "010816"
, "拼单送轴", "010817", "拆单两点移动任务", "010818", "拆单四点移动任务", "010819"
, "满轴拼单桁架任务", "010820", "送空轴AGV任务", "010821", "人工叫空轴桁架任务", "010822"
, "备货区托盘入库", "010823", "备货区托盘出库", "010824", "送轴拆单任务", "010825"
, "拆单桁架任务", "010826", "分切合单下卷任务", "010827", "缓存上空轴任务", "010828")
, "备货区托盘入库", "010823", "备货区托盘出库", "010824")
),
/**
* 二次请求

View File

@@ -2,11 +2,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 org.nl.b_lms.sch.point.dao.StIvtCutpointivt;
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.CallPlanViewVO;
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.CombinedOrderDto;
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterDownNewDto;
import org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt;
import java.math.BigDecimal;
import java.util.List;
@@ -76,14 +72,4 @@ public interface SlitterMapper {
* @return
*/
List<String> getMoveTzdjwExceptionPoint();
List<BstIvtCutpointivt> getCombinedOrders(CombinedOrderDto cod);
List<BstIvtCutpointivt> getEmptyAirShaftAgvPointNotTask(String area, String location, String plan);
List<Deliverycachepointivt> getReadyShaftCachePoint(StIvtCutpointivt actualDevice);
List<SlitterDownNewDto> getCanDownPoints(StIvtCutpointivt actualDevice);
List<Deliverycachepointivt> getReadyShaftCachePointByDevice(StIvtCutpointivt extCode);
}

View File

@@ -330,180 +330,4 @@
ORDER BY p,
truss_point_code;
</select>
<select id="getCombinedOrders" resultType="org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt">
SELECT cp.*
FROM `bst_ivt_cutpointivt` cp
LEFT JOIN pdm_bi_slittingproductionplan p
ON p.qzzno = cp.qzz_no1 OR p.qzzno = cp.qzz_no2
WHERE cp.point_type = #{pointType}
AND cp.point_status = #{pointStatus}
AND cp.is_used = '1'
AND cp.point_location = #{pointLocation}
AND (cp.plan <![CDATA[ <> ]]> '1' OR ISNULL(cp.plan))
AND IFNULL(p.qzzno, '') <![CDATA[ <> ]]> ''
AND (IFNULL(cp.qzz_no2, '') = '' OR IFNULL(cp.qzz_no1, '') = '')
AND (IFNULL(cp.qzz_no2, '') != '' OR IFNULL(cp.qzz_no1, '') != '')
AND 0 <![CDATA[ < ]]> (SELECT COUNT(*)
FROM st_ivt_cutpointivt sc
WHERE sc.ext_code = p.resource_name
AND sc.plan = #{plan}
AND sc.product_area = #{area}
AND sc.point_location = #{pointLocation})
AND 0 = (SELECT COUNT(*)
FROM sch_base_task t
WHERE t.task_status <![CDATA[ <= ]]> '071'
AND t.task_status <![CDATA[ <> ]]> '07'
AND t.is_delete = '0'
AND (
t.point_code2 = cp.point_code
OR t.point_code1 = cp.truss_point_code1
OR t.point_code2 = cp.truss_point_code1
OR t.point_code1 = cp.truss_point_code2
OR t.point_code2 = cp.truss_point_code2
))
</select>
<select id="getEmptyAirShaftAgvPointNotTask"
resultType="org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt">
SELECT
bcp.*
FROM
`bst_ivt_cutpointivt` bcp
WHERE bcp.point_type = '5' AND bcp.point_status = '1' AND bcp.is_used = '1'
AND bcp.product_area = #{area}
AND bcp.point_location = #{location}
AND bcp.plan = #{plan}
AND 0 = (
SELECT COUNT(*) FROM sch_base_task t
WHERE t.task_status <![CDATA[ <= ]]> '071' AND t.task_status <![CDATA[ <> ]]> '07' AND t.is_delete = '0' 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)
)
</select>
<select id="getReadyShaftCachePoint"
resultType="org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt">
SELECT sd.*
FROM st_ivt_deliverycachepointivt sd
INNER JOIN pdm_bi_slittingproductionplan p
ON p.is_delete = '0'
AND p.status = '03'
AND p.resource_name = #{point_code}
AND (p.qzzno = sd.qzz_no1 OR p.qzzno = sd.qzz_no2)
WHERE sd.product_area = #{area}
AND sd.point_location = #{location}
AND sd.point_status = '02'
AND sd.point_type = '02'
AND sd.is_used = '1'
AND NOT EXISTS (SELECT 1
FROM sch_base_task task
WHERE (
task.point_code1 = sd.point_code
OR task.point_code2 = sd.point_code
OR task.point_code3 = sd.point_code
OR task.point_code4 = sd.point_code
)
AND task.task_status <![CDATA[ < ]]> '07'
AND task.is_delete = '0')
</select>
<select id="getCanDownPoints" resultType="org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterDownNewDto">
SELECT truss_code,
qzz_no,
point_type,
product_area,
point_location
FROM (SELECT t1.truss_point_code1 AS truss_code,
t1.qzz_no1 AS qzz_no,
t1.point_type,
t1.product_area,
t1.point_location,
t1.ivt_id AS base_id
FROM bst_ivt_cutpointivt t1
WHERE (t1.qzz_no1 IS NULL OR t1.qzz_no1 = '')
AND (t1.qzz_no2 IS NULL OR t1.qzz_no2 = '')
AND (t1.point_status <![CDATA[ <> ]]> '2' OR t1.point_status IS NULL)
AND t1.point_type = '3'
AND t1.is_used = '1'
AND t1.product_area = #{product_area}
AND t1.point_location = #{point_location}
AND t1.plan = #{plan}
AND NOT EXISTS (SELECT 1
FROM sch_base_task task
WHERE (
task.point_code1 = t1.truss_point_code1
OR task.point_code2 = t1.truss_point_code1
OR task.point_code3 = t1.truss_point_code1
OR task.point_code4 = t1.truss_point_code1
)
AND task.task_status <![CDATA[ < ]]> '07'
AND task.is_delete = '0')
UNION ALL
SELECT t2.truss_point_code2 AS truss_code,
t2.qzz_no2 AS qzz_no,
t2.point_type,
t2.product_area,
t2.point_location,
t2.ivt_id AS base_id
FROM bst_ivt_cutpointivt t2
WHERE (t2.qzz_no2 IS NULL OR t2.qzz_no2 = '')
AND (t2.point_status <![CDATA[ <> ]]> '2' OR t2.point_status IS NULL)
AND t2.point_type = '3'
AND t2.is_used = '1'
AND t2.product_area = #{product_area}
AND t2.point_location = #{point_location}
AND t2.plan = #{plan}
AND NOT EXISTS (SELECT 1
FROM sch_base_task task
WHERE (
task.point_code1 = t2.truss_point_code2
OR task.point_code2 = t2.truss_point_code2
OR task.point_code3 = t2.truss_point_code2
OR task.point_code4 = t2.truss_point_code2
)
AND task.task_status <![CDATA[ < ]]> '07'
AND task.is_delete = '0')) AS tmp
ORDER BY base_id,
truss_code
</select>
<select id="getReadyShaftCachePointByDevice"
resultType="org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt">
SELECT sd.*
FROM `st_ivt_deliverycachepointivt` sd
WHERE sd.product_area = #{product_area}
AND sd.point_location = #{point_location}
AND sd.point_status = '02'
AND EXISTS (SELECT 1
FROM pdm_bi_slittingproductionplan p
WHERE p.qzzno = sd.qzzno
AND p.resource_name = #{ext_code}
AND p.is_delete = '0')
AND NOT EXISTS (SELECT 1
FROM (SELECT point_code1 AS code
FROM sch_base_task
WHERE is_delete = '0'
AND task_status <![CDATA[ < ]]> '07'
UNION ALL
SELECT point_code2 AS code
FROM sch_base_task
WHERE is_delete = '0'
AND task_status <![CDATA[ < ]]> '07'
UNION ALL
SELECT point_code3 AS code
FROM sch_base_task
WHERE is_delete = '0'
AND task_status <![CDATA[ < ]]> '07'
UNION ALL
SELECT point_code4 AS code
FROM sch_base_task
WHERE is_delete = '0'
AND task_status <![CDATA[ < ]]> '07') t
WHERE t.code = sd.point_code)
ORDER BY sd.update_time
</select>
</mapper>

View File

@@ -1,29 +0,0 @@
package org.nl.b_lms.sch.tasks.slitter.mapper.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 合单需要的参数
* @Author: lyd
* @Date: 2025/8/18
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CombinedOrderDto implements Serializable {
private String pointType;
private String pointStatus;
private String pointLocation;
/**
* 判断是哪块合并区域
*/
private String plan;
private String area;
private String device;
}

View File

@@ -1,19 +0,0 @@
package org.nl.b_lms.sch.tasks.slitter.mapper.dto;
import lombok.Data;
import java.io.Serializable;
/**
*
* @Author: liyongde
* @Date: 2026/4/22 14:32
*/
@Data
public class SlitterDownNewDto implements Serializable {
private String truss_code;
private String qzz_no;
private String point_type;
private String product_area;
private String point_location;
}

View File

@@ -1,7 +1,6 @@
package org.nl.b_lms.sch.tasks.slitter.util;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
@@ -15,7 +14,6 @@ import org.nl.modules.common.exception.BadRequestException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -706,31 +704,4 @@ public class SlitterTaskUtil {
}
return true;
}
// ===================== 工具方法:判断字符串时间是否在 N 分钟内 =====================
/**
* 判断字符串格式的时间 是否在指定分钟内(未超时)
* @param timeStr 格式2024-03-03 14:00:00.000
* @param minutes 限制分钟数
* @return true=未超过规定时间 | false=已超过
*/
public static boolean isTimeWithinLimit(String timeStr, int minutes) {
try {
// 把字符串时间转成 Date自动适配你这种格式
Date updateTime = DateUtil.parse(timeStr);
// 计算时间差(毫秒)
long diffMs = System.currentTimeMillis() - updateTime.getTime();
// 转成分钟
long diffMinutes = TimeUnit.MILLISECONDS.toMinutes(diffMs);
// 未超过规定分钟 → 返回true
return diffMinutes <= minutes;
} catch (Exception e) {
// 时间格式异常 → 不进入if
return false;
}
}
}

View File

@@ -1532,7 +1532,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
jsonTaskParam.put("remark", "异常转库任务,触发转库单据【"+iostorinv_id+"");
jsonTaskParam.put("table_fk", iostorinv_id);
TwoOutExceptionalTask taskBean = new TwoOutExceptionalTask();
TwoOutExceptionalTask taskBean = SpringContextHolder.getBean(TwoOutExceptionalTask.class);
String task_id = taskBean.createTask(jsonTaskParam);
taskBean.immediateNotifyAcs(task_id);

View File

@@ -127,10 +127,10 @@ public class InBoxManageServiceImpl implements InBoxManageService {
.eq("is_delete", "0")
.orderByDesc("task_id")
.last("limit 1"));
String vehicleCode2 = one.getVehicle_code2();
if (one!=null){
if (whereJson.getString("vehicle_code").equals(vehicleCode2)){
throw new BadRequestException("当前托盘"+whereJson.getString("vehicle_code")+"已经存在木箱入库任务"+one.getTask_code());
if (one != null) {
String vehicleCode2 = one.getVehicle_code2();
if (whereJson.getString("vehicle_code").equals(vehicleCode2)) {
throw new BadRequestException("当前托盘" + whereJson.getString("vehicle_code") + "已经存在木箱入库任务" + one.getTask_code());
}
}
@@ -138,14 +138,14 @@ public class InBoxManageServiceImpl implements InBoxManageService {
JSONObject vehicle_ext = WQLObject.getWQLObject("md_pb_storagevehicleext").query("storagevehicle_code = '" + whereJson.getString("vehicle_code") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(vehicle_ext)) {
throw new BadRequestException("未查询到托盘的扩展信息");
}else {
} else {
//判断托盘重量是否为空或小于等于0
String qty = vehicle_ext.getString("qty");
if (StrUtil.isEmpty(qty) || Double.parseDouble(qty) <= 0){
throw new BadRequestException("托盘【"+whereJson.getString("vehicle_code")+"】在系统的重量有误,请在载具维护页面中维护托盘实际重量!");
if (StrUtil.isEmpty(qty) || Double.parseDouble(qty) <= 0) {
throw new BadRequestException("托盘【" + whereJson.getString("vehicle_code") + "】在系统的重量有误,请在载具维护页面中维护托盘实际重量!");
}
String pcsn = vehicle_ext.getString("pcsn");
if (ObjectUtil.isNotEmpty(pcsn)){
if (ObjectUtil.isNotEmpty(pcsn)) {
//更新子卷入库备注信息
JSONObject jsonTaskParam = new JSONObject();
//创建异常任务去异常入库口
@@ -154,7 +154,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
//异常位
jsonTaskParam.put("point_code2", "RK1003");
jsonTaskParam.put("vehicle_code", boxNo);
jsonTaskParam.put("remark", "当前托盘【"+whereJson.getString("vehicle_code")+"】已经绑定木箱【"+pcsn+"】,无法重复绑定!");
jsonTaskParam.put("remark", "当前托盘【" + whereJson.getString("vehicle_code") + "】已经绑定木箱【" + pcsn + "】,无法重复绑定!");
jsonTaskParam.put("vehicle_code2", whereJson.getString("vehicle_code"));
JSONObject request_param = new JSONObject();
if (whereJson.getString("vehicle_code").startsWith("A")) {
@@ -174,6 +174,38 @@ public class InBoxManageServiceImpl implements InBoxManageService {
}
}
//查询木箱重量
BstIvtBoxinfo boxinfo = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, boxNo));
if (ObjectUtil.isEmpty(boxinfo.getBox_weight()) || Double.parseDouble(boxinfo.getBox_weight()) == 0) {
//更新子卷入库备注信息
JSONObject jsonTaskParam = new JSONObject();
//创建异常任务去异常入库口
//入库口
jsonTaskParam.put("point_code1", whereJson.getString("device_code"));
//异常位
jsonTaskParam.put("point_code2", "RK1003");
jsonTaskParam.put("vehicle_code", boxNo);
jsonTaskParam.put("remark", "当前木箱重量为0不能进行入库");
jsonTaskParam.put("vehicle_code2", whereJson.getString("vehicle_code"));
JSONObject request_param = new JSONObject();
if (whereJson.getString("vehicle_code").startsWith("A")) {
request_param.put("containerType", "2");
} else if (whereJson.getString("vehicle_code").startsWith("B")) {
request_param.put("containerType", "1");
} else {
throw new BadRequestException("托盘号有误,无法找到对应的托盘类型!");
}
jsonTaskParam.put("request_param", request_param);
TwoExceptionInTask bean = SpringContextHolder.getBean(TwoExceptionInTask.class);
bean.createTask(jsonTaskParam);
bean.immediateNotifyAcs(null);
return;
}
//查询仓库是否存在相同木箱
JSONArray stIvtStructattr = WQLObject.getWQLObject("st_ivt_structattr").query("storagevehicle_code = '" + boxNo + "'").getResultJSONArray(0);
if (stIvtStructattr != null && stIvtStructattr.size() > 0) {
@@ -228,7 +260,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
JSONObject param = new JSONObject();
param.put("containerType", boxDao.getVehicle_type());
jsonTaskParam.put("request_param", param.toString());
TwoInBoxTask taskBean = new TwoInBoxTask();
TwoInBoxTask taskBean = SpringContextHolder.getBean(TwoInBoxTask.class);
taskBean.createTask(jsonTaskParam);
taskBean.immediateNotifyAcs(null);
// 锁定终点
@@ -294,9 +326,10 @@ public class InBoxManageServiceImpl implements InBoxManageService {
BstIvtBoxinfo boxinfo = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, boxNo));
if (ObjectUtil.isEmpty(boxinfo.getBox_weight()) || Double.parseDouble(boxinfo.getBox_weight()) == 0) {
//2026.3.27木箱重量改为称重模块获取,在空木箱入库口进行校验
/*if (ObjectUtil.isEmpty(boxinfo.getBox_weight()) || Double.parseDouble(boxinfo.getBox_weight()) == 0) {
throw new BadRequestException("请先维护木箱重量后进行入库!");
}
}*/
if (StrUtil.isEmpty(boxType)) {
boxType = boxinfo.getMaterial_code();
} else {
@@ -315,6 +348,21 @@ public class InBoxManageServiceImpl implements InBoxManageService {
throw new BadRequestException("木箱不存在!");
}
//校验长宽高是否符合
String box_limit_width = iSysParamService.findByCode("box_limit_width").getValue();
String box_limit_length = iSysParamService.findByCode("box_limit_length").getValue();
String box_limit_height = iSysParamService.findByCode("box_limit_height").getValue();
if (Integer.parseInt(box_limit_width) < Integer.parseInt(boxDao.getBox_width())) {
throw new BadRequestException("当前木箱宽度大于【" + box_limit_width + "】,不允许入库!");
}
if (Integer.parseInt(box_limit_length) < Integer.parseInt(boxDao.getBox_length())) {
throw new BadRequestException("当前木箱长度大于【" + box_limit_width + "】,不允许入库!");
}
if (Integer.parseInt(box_limit_height) < Integer.parseInt(boxDao.getBox_high())) {
throw new BadRequestException("当前木箱高度大于【" + box_limit_width + "】,不允许入库!");
}
//查询当前入库拆叠盘位的托盘类型是否一致如果一致
String vehicle_type = boxDao.getVehicle_type();
@@ -426,7 +474,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
param.put("height", boxDao.getBox_high());
param.put("containerType", boxDao.getVehicle_type());
param.put("barcode", whereJson.getString("box_no") + "-9" );
param.put("barcode", whereJson.getString("box_no") + "-9");
//根据木箱高度,判断入库仓位的高度
String height = "";
String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue();
@@ -483,8 +531,8 @@ public class InBoxManageServiceImpl implements InBoxManageService {
.ge(SchBaseTask::getCreate_time, queryDate)
.le(SchBaseTask::getCreate_time, DateUtil.now())
);
if (hasCount>0) {
throw new BadRequestException("当前木箱【"+whereJson.getString("box_no")+"】在1个小时之内生成过行架任务!");
if (hasCount > 0) {
throw new BadRequestException("当前木箱【" + whereJson.getString("box_no") + "】在1个小时之内生成过行架任务!");
}
// 根据木箱号查询是否有托盘绑定关系,如果有则解绑
@@ -533,6 +581,21 @@ public class InBoxManageServiceImpl implements InBoxManageService {
if (boxDao == null) {
throw new BadRequestException("木箱不存在!");
}
//校验长宽高是否符合
String box_limit_width = iSysParamService.findByCode("box_limit_width").getValue();
String box_limit_length = iSysParamService.findByCode("box_limit_length").getValue();
String box_limit_height = iSysParamService.findByCode("box_limit_height").getValue();
if (Integer.parseInt(box_limit_width) < Integer.parseInt(boxDao.getBox_width())) {
throw new BadRequestException("当前木箱宽度大于【" + box_limit_width + "】,不允许入库!");
}
if (Integer.parseInt(box_limit_length) < Integer.parseInt(boxDao.getBox_length())) {
throw new BadRequestException("当前木箱长度大于【" + box_limit_width + "】,不允许入库!");
}
if (Integer.parseInt(box_limit_height) < Integer.parseInt(boxDao.getBox_high())) {
throw new BadRequestException("当前木箱高度大于【" + box_limit_width + "】,不允许入库!");
}
boxDao.setIs_packing("1");
iBstIvtBoxinfoService.updateById(boxDao);
@@ -796,7 +859,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
// 如果是移库空并且仓位为空则报错
if (ObjectUtil.isNotEmpty(block_num) && ObjectUtil.isEmpty(jsonAttr)) {
throw new BadRequestException("转库任务巷道"+block_num+"仓位不足!");
throw new BadRequestException("转库任务巷道" + block_num + "仓位不足!");
}
// 为空则新找巷道
@@ -837,7 +900,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
notInBlockList.clear();
} else {
throw new BadRequestException("存在正在分配的空木箱任务,请稍后再试!");
throw new BadRequestException("存在正在分配的空木箱任务,请稍后再试!");
}
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
@@ -849,6 +912,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
/**
* 同巷道移库查看库位
*
* @param jsonParam
* @return
*/
@@ -860,7 +924,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
* 判断条件:库区、仓库、是否启用、是否删除、未锁定、没有载具
*/
String block_num = jsonParam.getString("move_block_num");
if (StringUtils.isEmpty(block_num)){
if (StringUtils.isEmpty(block_num)) {
throw new BadRequestException("同巷道分配库位巷道参数不能为空");
}
JSONArray structArray = attrTab.query("IFNULL(storagevehicle_code,'') = '' " +
@@ -884,7 +948,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
// 为空则新找巷道
if (ObjectUtil.isEmpty(jsonAttr)) {
throw new BadRequestException("当前巷道"+block_num+"没有可用库位");
throw new BadRequestException("当前巷道" + block_num + "没有可用库位");
}
notInRowList.clear();

View File

@@ -8,14 +8,12 @@ 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.bst.ivt.stockingivt.service.dao.BstIvtStockingivt;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import org.nl.b_lms.sch.point.dao.StIvtCutpointivt;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.system.service.param.ISysParamService;
import org.nl.system.service.param.dao.Param;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -127,15 +125,6 @@ public class TaskUtils {
task.setUpdate_time(DateUtil.now());
}
/**
* 赋值任务的修改时间、人等信息
* @param point 任务
*/
public static void updateOptMessageByCachePoint(Deliverycachepointivt point) {
point.setUpdate_optid(SecurityUtils.getCurrentUserId());
point.setUpdate_optname(SecurityUtils.getCurrentUsername());
point.setUpdate_time(DateUtil.now());
}
/**
* 赋值任务的修改时间、人等信息
* @param point 任务
@@ -165,15 +154,6 @@ public class TaskUtils {
point.setUpdate_optname(SecurityUtils.getCurrentUsername());
point.setUpdate_time(DateUtil.now());
}
/**
* 赋值分切设备的修改时间、人等信息
* @param point 分切设备点
*/
public static void updateOptMessageByStIvtCutPoint(StIvtCutpointivt point) {
point.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId()));
point.setUpdate_optname(SecurityUtils.getCurrentUsername());
point.setUpdate_time(DateUtil.now());
}
/**
* 获取指定格式的日期时间

View File

@@ -244,4 +244,11 @@ public class AcsToWmsController {
public ResponseEntity<Object> forceMove(@RequestBody JSONObject param) {
return new ResponseEntity<>(acsToWmsService.forceMove(param), HttpStatus.OK);
}
@PostMapping("/feedBackBoxWeight")
@Log(value = "二期木箱桁架反馈木箱重量", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@SaIgnore
public ResponseEntity<Object> feedBackBoxWeight(@RequestBody JSONObject param) {
return new ResponseEntity<>(acsToWmsService.feedBackBoxWeight(param), HttpStatus.OK);
}
}

View File

@@ -246,4 +246,11 @@ public interface AcsToWmsService {
* @return
*/
JSONObject acsRequestPoint(JSONObject param);
/**
* 二期木箱桁架反馈木箱重量
* @param param
* @return
*/
JSONObject feedBackBoxWeight(JSONObject param);
}

View File

@@ -76,6 +76,10 @@ public interface WmsToAcsService {
*/
JSONObject updateTask(JSONArray arr);
JSONObject changePointMove(JSONObject jo);
/**
* 更新任务状态
*

View File

@@ -3,6 +3,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.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper;
import org.nl.common.utils.IdUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -208,6 +209,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Autowired
private RedisUtils redisUtils;
@Resource
private BstIvtBoxinfoMapper bstIvtBoxinfoMapper;
/**
* task_id任务标识
* task_code任务编码
@@ -3298,4 +3302,30 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
return stepTipLogs;
}
@Override
public JSONObject feedBackBoxWeight(JSONObject param) {
log.info("feedBackBoxWeight输入参数为--------------------------" + param.toString());
String barcode = param.getString("barcode");
String task_code = param.getString("task_code");
String weight = param.getString("weight");
BstIvtBoxinfo boxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no, barcode));
if (boxinfo == null) {
throw new BadRequestException("未查询到该木箱对应的木箱信息");
}
if(ObjectUtil.isEmpty(boxinfo.getBox_weight()) || Double.parseDouble(boxinfo.getBox_weight()) == 0){
boxinfo.setBox_weight(weight);
}else {
log.info("当前木箱已有重量【"+boxinfo.getBox_weight()+"】,上传重量为【"+weight+"");
}
bstIvtBoxinfoMapper.updateById(boxinfo);
JSONObject result = new JSONObject();
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
log.info("feedBackBoxWeight输出参数为--------------------------" + result.toString());
return result;
}
}

View File

@@ -76,6 +76,12 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
return AcsUtil.notifyAcs(api, whereJson);
}
@Override
public JSONObject changePointMove(JSONObject jo) {
String api = "/api/wms/setDeviceMove";
return AcsUtil.notifyAcsObject(api, jo);
}
@Override
public JSONObject action(JSONArray whereJson) {
String api = "api/wms/action";

View File

@@ -100,4 +100,12 @@ public class RawFoilController {
rawFoilService.finish(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/changePointMove")
@Log("ACS库存变更")
public ResponseEntity<Object> changePointMove(@RequestBody JSONObject whereJson) {
rawFoilService.changePointMove(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -84,4 +84,6 @@ public interface RawFoilService {
* @return JSONObject
*/
JSONObject finish(JSONObject whereJson);
JSONObject changePointMove(JSONObject whereJson);
}

View File

@@ -665,4 +665,26 @@ public class RawFoilServiceImpl implements RawFoilService {
jo.put("message", "操作成功!");
return jo;
}
@Override
public JSONObject changePointMove(JSONObject whereJson) {
String point_code = whereJson.getString("point_code");
try {
String product_area = point_code.substring(0,2);
whereJson.put("product_area",product_area);
}catch (Exception e){
throw new BadRequestException("输入的点位有误请核对!");
}
//调用ACS接口
WmsToAcsServiceImpl wmsToAcsService = SpringContextHolder.getBean(WmsToAcsServiceImpl.class);
JSONObject result = wmsToAcsService.changePointMove(whereJson);
if (!StrUtil.equals(result.getString("status"), "200")) {
throw new BadRequestException("操作失败:" + result.getString("message "));
}
JSONObject jo = new JSONObject();
jo.put("message", "操作成功!");
return jo;
}
}

View File

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt;
import org.nl.wms.pdm.ivt.deliverycache.service.dto.AreaBCachePointDto;
import org.nl.wms.pdm.ivt.deliverycache.service.dto.DeliveryConDto;
import org.nl.wms.pdm.ivt.deliverycache.service.dto.DeliverycachepointivtQuery;
@@ -85,22 +84,4 @@ public interface IDeliverycachepointivtService extends IService<Deliverycachepoi
* @return
*/
List<Deliverycachepointivt> getMoreConformShaft(String gxCode1, String gcCode2, String area, String location);
/**
* 获取待使用的点位
* @param resourceName
* @return
*/
Integer countPendingUseByDevice(String resourceName);
/**
* 获取无任务的点位
* @param build
* @return
*/
List<Deliverycachepointivt> getAreaBCacheByConditionsAndNoTask(AreaBCachePointDto build);
Deliverycachepointivt getPintByCode(String pointCode, boolean flag);
Deliverycachepointivt getDeliveryByQzzNo(String qzzno);
}

View File

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt;
import org.nl.wms.pdm.ivt.deliverycache.service.dto.AreaBCachePointDto;
import org.nl.wms.pdm.ivt.deliverycache.service.dto.DeliveryConDto;
import org.nl.wms.pdm.ivt.deliverycache.service.dto.DeliverycachepointivtQuery;
@@ -25,8 +24,4 @@ public interface DeliverycachepointivtMapper extends BaseMapper<Deliverycachepoi
List<Deliverycachepointivt> getMoreConformShaft(String gxCode1, String gcCode2, String area, String location);
IPage<Deliverycachepointivt> selectPageLeftJoin(IPage<Deliverycachepointivt> pages, DeliverycachepointivtQuery param);
Integer countPendingUseByDevice(String resourceName);
List<Deliverycachepointivt> getAreaBCacheByConditionsAndNoTask(AreaBCachePointDto conDto);
}

View File

@@ -136,43 +136,4 @@
</if>
</where>
</select>
<select id="countPendingUseByDevice" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM `st_ivt_deliverycachepointivt` sc
WHERE sc.point_status = '02'
AND sc.product_area LIKE 'B%'
AND sc.qzzno IS NOT NULL
AND sc.qzzno <![CDATA[ <> ]]> ''
AND NOT EXISTS (SELECT 1
FROM pdm_bi_slittingproductionplan p
WHERE p.qzzno = sc.qzzno
AND p.resource_name = #{resourceName});
</select>
<select id="getAreaBCacheByConditionsAndNoTask"
resultType="org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt">
SELECT
sd.*
FROM
st_ivt_deliverycachepointivt sd
<where>
sd.product_area = #{area}
AND sd.point_location = #{location}
AND sd.point_status = #{pointStatus}
AND sd.plan = #{plan}
AND sd.is_used = '1'
AND NOT EXISTS (
SELECT 1
FROM sch_base_task sbt
WHERE
(
sbt.point_code1 = sd.point_code
OR sbt.point_code2 = sd.point_code
OR sbt.point_code3 = sd.point_code
OR sbt.point_code4 = sd.point_code
)
AND sbt.task_status <![CDATA[ < ]]> '07'
AND sbt.is_delete = '0'
)
</where>
</select>
</mapper>

View File

@@ -1,24 +0,0 @@
package org.nl.wms.pdm.ivt.deliverycache.service.dto;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
/**
* 二期缓存架子dto
* @Author: liyongde
* @Date: 2026/4/21 15:47
*/
@Data
@Builder
public class AreaBCachePointDto implements Serializable {
/** 区域 */
private String area;
/** 位置 */
private String location;
/** 点位状态: 01空位02有气胀轴03有子卷 */
private String pointStatus;
/** 子区域 */
private String plan;
}

View File

@@ -1,8 +1,6 @@
package org.nl.wms.pdm.ivt.deliverycache.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
import org.nl.common.utils.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -16,13 +14,11 @@ import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.pdm.ivt.deliverycache.service.IDeliverycachepointivtService;
import org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt;
import org.nl.wms.pdm.ivt.deliverycache.service.dao.mapper.DeliverycachepointivtMapper;
import org.nl.wms.pdm.ivt.deliverycache.service.dto.AreaBCachePointDto;
import org.nl.wms.pdm.ivt.deliverycache.service.dto.DeliveryConDto;
import org.nl.wms.pdm.ivt.deliverycache.service.dto.DeliverycachepointivtQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -120,36 +116,4 @@ public class DeliverycachepointivtServiceImpl extends ServiceImpl<Deliverycachep
return deliverycachepointivtMapper.getMoreConformShaft(gxCode1, gcCode2, area, location);
}
@Override
public Integer countPendingUseByDevice(String resourceName) {
return deliverycachepointivtMapper.countPendingUseByDevice(resourceName);
}
@Override
public List<Deliverycachepointivt> getAreaBCacheByConditionsAndNoTask(AreaBCachePointDto build) {
return deliverycachepointivtMapper.getAreaBCacheByConditionsAndNoTask(build);
}
@Override
public Deliverycachepointivt getPintByCode(String pointCode, boolean flag) {
if (ObjectUtil.isEmpty(pointCode)) {
return null;
}
LambdaQueryWrapper<Deliverycachepointivt> lam = new QueryWrapper<Deliverycachepointivt>().lambda();
lam.eq(flag, Deliverycachepointivt::getIs_used, "1")
.eq(Deliverycachepointivt::getPoint_code, pointCode);
return deliverycachepointivtMapper.selectOne(lam);
}
@Override
public Deliverycachepointivt getDeliveryByQzzNo(String qzzno) {
if (ObjectUtil.isEmpty(qzzno)) {
return null;
}
LambdaQueryWrapper<Deliverycachepointivt> lam = new QueryWrapper<Deliverycachepointivt>().lambda();
lam.eq(Deliverycachepointivt::getIs_used, "1")
.eq(Deliverycachepointivt::getQzzno, qzzno);
return deliverycachepointivtMapper.selectOne(lam);
}
}

View File

@@ -476,8 +476,8 @@ public class InBillQueryServiceImpl implements InBillQueryService {
mp.put("客户名称", json.getString("cust_name"));
mp.put("业务员", json.getString("sales_owner"));
mp.put("规格", json.getString("thickness_request"));
mp.put("尺寸mm客户要求幅宽", json.getString("width_standard"));
mp.put("实际尺寸mm实际幅宽", json.getString("width"));
mp.put("产品实际幅宽", json.getString("width"));
mp.put("客户要求幅宽", json.getString("width_standard"));
String box_name = json.getString("box_name");
if (StrUtil.isNotEmpty(box_name)) {
String[] s = box_name.split("木箱");

View File

@@ -459,7 +459,8 @@ public class OutBillQueryServiceImpl implements OutBillQueryService {
mp.put("业务员", json.getString("sales_owner"));
mp.put("出库日期", json.getString("input_time"));
mp.put("产品规格", json.getString("width"));
mp.put("产品实际幅宽", json.getString("width"));
mp.put("客户要求幅宽", json.getString("width_standard"));
mp.put("产品厚度", json.getString("thickness"));
mp.put("单位面积", json.getString("mass_per_unit_area"));
mp.put("制单人", json.getString("input_optname"));

View File

@@ -656,6 +656,7 @@
sub.date_of_production,
mst.input_optname,
sub.width,
sub.width_standard,
case when plan.paper_tube_or_FRP = '1' then '纸管' when plan.paper_tube_or_FRP = '2' then 'FRP管' end AS paper_type,
case when plan.paper_tube_or_FRP = '1' then plan.paper_tube_material when plan.paper_tube_or_FRP = '2' then plan.FRP_material end AS paper_code,
case when plan.paper_tube_or_FRP = '1' then plan.paper_tube_description when plan.paper_tube_or_FRP = '2' then plan.FRP_description end AS paper_name,

View File

@@ -280,6 +280,7 @@
sub.sale_order_name,
cust.sales_owner,
sub.width,
sub.width_standard,
sub.thickness,
sub.mass_per_unit_area,
case when plan.paper_tube_or_FRP = '1' then '纸管' when plan.paper_tube_or_FRP = '2' then 'FRP管' end AS paper_type,
@@ -335,6 +336,7 @@
max(record.customer_name) as customer_name,
max(record.customer_description) as customer_description,
max(record.width) as width,
max(record.width_standard) as width_standard,
max(record.quanlity_in_box) boxin_num,
max(record.thickness) as thickness,
max(record.mass_per_unit_area) as mass_per_unit_area,
@@ -405,6 +407,7 @@
sub.sale_order_name,
cust.sales_owner,
sub.width,
sub.width_standard,
sub.thickness,
sub.mass_per_unit_area,
case when plan.paper_tube_or_FRP = '1' then '纸管' when plan.paper_tube_or_FRP = '2' then 'FRP管' end AS paper_type,
@@ -460,6 +463,7 @@
max(record.customer_name) as customer_name,
max(record.customer_description) as customer_description,
max(record.width) as width,
max(record.width_standard) as width_standard,
max(record.thickness) as thickness,
max(record.mass_per_unit_area) as mass_per_unit_area,
max(record.net_weight) as net_weight,
@@ -501,4 +505,4 @@
limit 0,50000
ENDSELECT
ENDQUERY
ENDIF
ENDIF

View File

@@ -129,8 +129,5 @@
"browserslist": [
"> 1%",
"last 2 versions"
],
"volta": {
"node": "14.21.3"
}
]
}

View File

@@ -217,7 +217,8 @@
<el-table-column show-overflow-tooltip prop="confirm_time" label="入库日期" :min-width="flexWidth('confirm_time',crud.data,'入库日期')" />
<el-table-column show-overflow-tooltip prop="date_of_production" label="生产日期" :min-width="flexWidth('date_of_production',crud.data,'生产日期')" />
<el-table-column show-overflow-tooltip prop="input_optname" label="入库人" :min-width="flexWidth('input_optname',crud.data,'入库人')" />
<el-table-column v-if="crud.query.is_all === '0'" show-overflow-tooltip prop="width" label="产品规格" :min-width="flexWidth('width',crud.data,'产品规格')" />
<el-table-column v-if="crud.query.is_all === '0'" show-overflow-tooltip prop="width" label="产品实际幅宽" :min-width="flexWidth('width',crud.data,'产品实际幅宽')" />
<el-table-column v-if="crud.query.is_all === '0'" show-overflow-tooltip prop="width_standard" label="客户要求幅宽" :min-width="flexWidth('width_standard',crud.data,'客户要求幅宽')" />
<el-table-column v-if="crud.query.is_all === '0'" show-overflow-tooltip prop="thickness" label="产品厚度" :min-width="flexWidth('thickness',crud.data,'产品厚度')" />
<el-table-column v-if="crud.query.is_all === '0'" show-overflow-tooltip prop="paper_type" label="管件类型" :min-width="flexWidth('paper_type',crud.data,'管件类型')" />
<el-table-column v-if="crud.query.is_all === '0'" show-overflow-tooltip prop="paper_code" label="管件编码" :min-width="flexWidth('paper_code',crud.data,'管件编码')" />

View File

@@ -133,7 +133,8 @@
<el-table-column show-overflow-tooltip prop="sale_order_name" label="销售订单" :min-width="flexWidth('sale_order_name',crud.data,'销售订单')" />
<el-table-column show-overflow-tooltip prop="old_sale_order_name" label="原销售订单" :min-width="flexWidth('old_sale_order_name',crud.data,'原销售订单')" />
<el-table-column show-overflow-tooltip prop="confirm_time" label="出库日期" :min-width="flexWidth('confirm_time',crud.data,'出库日期')" />
<el-table-column show-overflow-tooltip prop="width" label="产品规格" :formatter="crud.formatNum1" :min-width="flexWidth('width',crud.data,'产品规格')" />
<el-table-column show-overflow-tooltip prop="width" label="产品实际幅宽" :formatter="crud.formatNum1" :min-width="flexWidth('width',crud.data,'产品实际幅宽')" />
<el-table-column show-overflow-tooltip prop="width_standard" label="客户要求幅宽" :formatter="crud.formatNum1" :min-width="flexWidth('width_standard',crud.data,'客户要求幅宽')" />
<el-table-column show-overflow-tooltip prop="thickness" label="产品厚度" :min-width="flexWidth('thickness',crud.data,'产品厚度')" />
<el-table-column show-overflow-tooltip prop="paper_type" label="管件类型" :min-width="flexWidth('paper_type',crud.data,'管件类型')" />
<el-table-column show-overflow-tooltip prop="paper_code" label="管件编码" :min-width="flexWidth('paper_code',crud.data,'管件编码')" />