modified: 分切下料、分切上料、烘箱、内包间套轴、废箔、取样业务
This commit is contained in:
@@ -47,6 +47,18 @@ public class AcsToWmsController {
|
||||
public ResponseEntity<Object> outHotTaskApply(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(acsToWmsService.outHotTaskApply(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/applyOvenGantryTask")
|
||||
@Log(value = "申请出烘箱任务", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> applyOvenGantryTask(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(acsToWmsService.applyOvenGantryTask(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/applyNewPoint")
|
||||
@Log(value = "管芯库满入空出申请新点位", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> applyNewPoint(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(acsToWmsService.applyNewPoint(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/receiveWasteFoilWeight")
|
||||
@Log(value = "废箔重量反馈", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
|
||||
@SaIgnore
|
||||
|
||||
@@ -132,4 +132,18 @@ public interface AcsToWmsService {
|
||||
* @return
|
||||
*/
|
||||
JSONObject receiveWasteFoilWeight(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* ACS申请入烘箱
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
JSONObject applyOvenGantryTask(JSONObject param);
|
||||
|
||||
/**
|
||||
* 管芯库满入空出
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
JSONObject applyNewPoint(JSONObject param);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package org.nl.wms.ext.acs.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
|
||||
import org.nl.wms.sch.task_manage.AcsTaskDto;
|
||||
|
||||
import java.util.List;
|
||||
@@ -40,7 +39,7 @@ public interface WmsToAcsService {
|
||||
*/
|
||||
JSONObject canFinishPreviousTask(JSONArray param);
|
||||
/**
|
||||
* 通知ACS可以完成任务
|
||||
* 管芯入库
|
||||
* @param param /
|
||||
* @return /
|
||||
*/
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.TaskFactory;
|
||||
import org.nl.wms.sch.task_manage.TaskStatus;
|
||||
import org.nl.wms.sch.task_manage.service.BakingOperationService;
|
||||
import org.nl.wms.sch.task_manage.service.NbjOperationService;
|
||||
import org.nl.wms.sch.task_manage.service.OtherOperationService;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
@@ -35,6 +36,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
private BakingOperationService bakingOperationService;
|
||||
@Autowired
|
||||
private OtherOperationService otherOperationService;
|
||||
@Autowired
|
||||
private NbjOperationService nbjOperationService;
|
||||
@Override
|
||||
public Map<String, Object> receiveTaskStatusAcs(String string) throws InterruptedException {
|
||||
log.info("acs向lms反馈任务状态,请求参数:--------------------------------------" + string);
|
||||
@@ -175,4 +178,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
public JSONObject receiveWasteFoilWeight(JSONObject whereJson) {
|
||||
return otherOperationService.acsRequestWasteFoilWeight(whereJson);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject applyOvenGantryTask(JSONObject param) {
|
||||
return bakingOperationService.acsRequestInHotTask(param);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject applyNewPoint(JSONObject param) {
|
||||
return nbjOperationService.tubeExceptionHandling(param);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
|
||||
@Override
|
||||
public JSONObject updateTask(JSONArray arr) {
|
||||
String api = "api/wms/updateTask";
|
||||
return AcsUtil.notifyAcs(api, arr);
|
||||
return AcsUtil.notifyAcs4(api, arr);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -36,13 +36,19 @@ public class SlitterPdaController {
|
||||
return new ResponseEntity<>(slitterPdaService.queryOrderInfo(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/sendSlitterRoll")
|
||||
@Log("母卷送回 - 分切复烤")
|
||||
public ResponseEntity<Object> sendSlitterRoll(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(slitterPdaService.sendSlitterRoll(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/callSlitterRoll")
|
||||
@Log("呼叫母卷")
|
||||
@Log("呼叫母卷 - 分切上料")
|
||||
public ResponseEntity<Object> callSlitterRoll(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(slitterPdaService.callSlitterRoll(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/allowCoiling")
|
||||
@Log("允许上卷")
|
||||
@Log("允许上卷 - 确认上料")
|
||||
public ResponseEntity<Object> allowCoiling(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(slitterPdaService.allowCoiling(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@@ -56,4 +62,10 @@ public class SlitterPdaController {
|
||||
public ResponseEntity<Object> slitterDown(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(slitterPdaService.slitterDown(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/querySlitterDeviceSubVolumeInfos")
|
||||
@Log("查询手持查询设备对应的子卷数据")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> querySlitterDeviceSubVolumeInfos(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(slitterPdaService.querySlitterDeviceSubVolumeInfos(param), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,4 +42,19 @@ public interface SlitterPdaService {
|
||||
* @return /
|
||||
*/
|
||||
JSONObject slitterDown(JSONObject param);
|
||||
|
||||
/**
|
||||
* 母卷送回-分切复烤
|
||||
* @see org.nl.wms.sch.task_manage.tasks.slitter.SlitterInHotAGVTask
|
||||
* @param param /
|
||||
* @return /
|
||||
*/
|
||||
JSONObject sendSlitterRoll(JSONObject param);
|
||||
|
||||
/**
|
||||
* 查询手持查询设备对应的子卷数据
|
||||
* @param param /
|
||||
* @return /
|
||||
*/
|
||||
JSONObject querySlitterDeviceSubVolumeInfos(JSONObject param);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
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.common.exception.BadRequestException;
|
||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||
@@ -12,6 +13,8 @@ import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
|
||||
import org.nl.wms.pdm.bi.dao.PdmBiSlittingproductionplan;
|
||||
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
|
||||
import org.nl.wms.pdm.bi.service.IpdmBiSlittingproductionplanService;
|
||||
import org.nl.wms.pdm.ivt.bcut.service.IBstIvtCutpointivtService;
|
||||
import org.nl.wms.pdm.ivt.bcut.service.dao.BstIvtCutpointivt;
|
||||
import org.nl.wms.pdm.ivt.cut.service.dao.StIvtCutpointivt;
|
||||
import org.nl.wms.pdm.ivt.cut.service.IstIvtCutpointivtService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
@@ -19,6 +22,7 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.tasks.nbj.SendShaftAGVTask;
|
||||
import org.nl.wms.sch.task_manage.tasks.slitter.SlitterDownAGVTask;
|
||||
import org.nl.wms.sch.task_manage.tasks.slitter.SlitterInHotAGVTask;
|
||||
import org.nl.wms.sch.task_manage.tasks.slitter.SlitterSendRollAGVTask;
|
||||
import org.nl.wms.sch.task_manage.tasks.slitter.SlitterUpTrussTask;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -51,14 +55,17 @@ public class SlitterPdaServiceImpl implements SlitterPdaService {
|
||||
@Autowired
|
||||
private IstIvtCutpointivtService cutpointivtService;
|
||||
@Autowired
|
||||
private IBstIvtCutpointivtService bstIvtCutpointivtService;
|
||||
@Autowired
|
||||
private IpdmBiSlittingproductionplanService slittingproductionplanService;
|
||||
@Autowired
|
||||
private SlitterDownAGVTask slitterDownAGVTask;
|
||||
@Autowired
|
||||
private SlitterInHotAGVTask slitterInHotAGVTask;
|
||||
@Override
|
||||
public JSONObject queryOrderInfo(JSONObject param) {
|
||||
List<PdmBiRawfoilworkorder> orders = rawfoilworkorderService.getAllUsedRawPlanOnZc();
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("data", orders);
|
||||
result.put("data", rawfoilworkorderService.getAllUsedRawPlanOnZc());
|
||||
result.put("message", "操作成功!");
|
||||
return result;
|
||||
}
|
||||
@@ -70,19 +77,24 @@ public class SlitterPdaServiceImpl implements SlitterPdaService {
|
||||
String workorderId = param.getString("workorder_id");
|
||||
// 分切机满料位
|
||||
String pointCode = param.getString("point_code");
|
||||
String vehicleCode = param.getString("vehicle_code");
|
||||
String zcPoint = param.getString("zc_point");
|
||||
Assert.notBlank(workorderId, "请选择母卷!");
|
||||
Assert.notBlank(pointCode, "点位不能为空!");
|
||||
// 校验桁架任务
|
||||
Boolean isTask = taskService.checkHaveTaskByPoints(
|
||||
Stream.of(zcPoint, pointCode).collect(Collectors.toList()));
|
||||
// 判断是否呼叫过任务
|
||||
List<SchBaseTask> schBaseTasks = taskService.checkHaveTask(pointCode);
|
||||
if (schBaseTasks.size() > 0) {
|
||||
if (isTask) {
|
||||
throw new BadRequestException("点位[" + pointCode + "]已经创建过任务!");
|
||||
}
|
||||
StIvtCutpointivt cutPoint = cutpointivtService.getOneByCode(pointCode);
|
||||
param.put("config_code", "SlitterUpTrussTask");
|
||||
param.put("device_code", pointCode);
|
||||
param.put("create_mode", GeneralDefinition.PDA_CREATION);
|
||||
// 判断空轴位状态
|
||||
// 标记一下, 0: 只做呼叫母卷,1:呼叫母卷还要送空辊
|
||||
param.put("is_flag", ObjectUtil.isEmpty(vehicleCode) ? "0" : "1");
|
||||
param.put("is_flag", "01".equals(cutPoint.getEmpty_point_status()) ? "0" : "1");
|
||||
param.put("vehicle_code", cutPoint.getEmpty_vehicle_code());
|
||||
slitterUpTrussTask.apply(param);
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("message", "操作成功!");
|
||||
@@ -91,7 +103,7 @@ public class SlitterPdaServiceImpl implements SlitterPdaService {
|
||||
|
||||
@Override
|
||||
public JSONObject allowCoiling(JSONObject param) {
|
||||
log.info("手持分切准备就绪, {}", param);
|
||||
log.info("手持分切确认上料, {}", param);
|
||||
// point_code
|
||||
String pointCode = param.getString("point_code");
|
||||
// 获取对应任务
|
||||
@@ -120,19 +132,21 @@ public class SlitterPdaServiceImpl implements SlitterPdaService {
|
||||
@Override
|
||||
public JSONObject vehicleReturn(JSONObject param) {
|
||||
log.info("手持空轴送回, {}", param);
|
||||
// param: point_code, vehicle_code
|
||||
// param: point_code
|
||||
String pointCode = param.getString("point_code");
|
||||
String vehicleCode = param.getString("vehicle_code");
|
||||
Assert.notBlank(vehicleCode, "载具编码不能为空!");
|
||||
StIvtCutpointivt cutPoint = cutpointivtService.getByFullCode(pointCode, false);
|
||||
if ("01".equals(cutPoint.getEmpty_point_status())) {
|
||||
throw new BadRequestException("系统识别到分切上料位[ " + pointCode + " ]无空轴!");
|
||||
}
|
||||
// 校验是否有任务
|
||||
List<SchBaseTask> schBaseTasks = taskService.checkHaveTask(cutPoint.getEmpty_point_code());
|
||||
if (schBaseTasks.size() > 0) {
|
||||
throw new BadRequestException("点位[" + pointCode + "]已经存在任务!");
|
||||
}
|
||||
// todo: 载具类型没有获取
|
||||
param.put("device_code", cutPoint.getEmpty_point_code());
|
||||
param.put("config_code", "SlitterSendRollAGVTask");
|
||||
// 最后一趟送回去的才需要清
|
||||
param.put("is_flag", "1");
|
||||
param.put("create_mode", GeneralDefinition.PDA_CREATION);
|
||||
slitterSendRollAGVTask.apply(param);
|
||||
JSONObject result = new JSONObject();
|
||||
@@ -177,4 +191,114 @@ public class SlitterPdaServiceImpl implements SlitterPdaService {
|
||||
result.put("message", "分切机" + deviceCode + "下卷成功!");
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject sendSlitterRoll(JSONObject param) {
|
||||
log.info("手持母卷复烤, {}", param);
|
||||
// param: point_code
|
||||
String pointCode = param.getString("point_code");
|
||||
// 判断是否存在任务
|
||||
List<SchBaseTask> unFinishTasks = taskService.checkHaveTask(pointCode);
|
||||
// 判断是否存在对应的桁架任务
|
||||
List<SchBaseTask> unFinishRelatedTasks = taskService.checkHaveRelatedTaskInRequestParam(pointCode);
|
||||
if (unFinishTasks.size() > 0 || unFinishRelatedTasks.size() > 0) {
|
||||
throw new BadRequestException("点位[" + pointCode + "]已经存在任务!");
|
||||
}
|
||||
StIvtCutpointivt cutPoint = cutpointivtService.getOneByCode(pointCode);
|
||||
if ("01".equals(cutPoint.getFull_point_status())
|
||||
|| ObjectUtil.isEmpty(cutPoint.getContainer_name())) {
|
||||
throw new BadRequestException("点位[" + pointCode + "]系统检测空位!");
|
||||
}
|
||||
// 获取生箔工单
|
||||
PdmBiRawfoilworkorder rawOrder = rawfoilworkorderService.getByContainerName(cutPoint.getContainer_name());
|
||||
// 组织请求任务参数
|
||||
JSONObject taskParam = new JSONObject();
|
||||
taskParam.put("device_code", pointCode);
|
||||
taskParam.put("config_code", "SlitterInHotAGVTask");
|
||||
// todo: 流转单号暂时当作母卷号
|
||||
taskParam.put("order_code", rawOrder.getContainer_name());
|
||||
taskParam.put("create_mode", GeneralDefinition.PDA_CREATION);
|
||||
slitterInHotAGVTask.apply(taskParam);
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("message", "母卷回库任务创建成功!");
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject querySlitterDeviceSubVolumeInfos(JSONObject param) {
|
||||
JSONObject res = new JSONObject();
|
||||
JSONObject data = new JSONObject();
|
||||
res.put("status", cn.hutool.http.HttpStatus.HTTP_OK);
|
||||
res.put("data", data);
|
||||
// param: device_code
|
||||
String device_code = param.getString("point_code");
|
||||
String msg = "";
|
||||
StIvtCutpointivt deviceCode = cutpointivtService.getPintByExtCode(device_code, false);
|
||||
String upQzzno = deviceCode.getUp_qzzno();
|
||||
String downQzzno = deviceCode.getDown_qzzno();
|
||||
if (ObjectUtil.isNotEmpty(upQzzno)) {
|
||||
List<PdmBiSlittingproductionplan> byQzzNo = slittingproductionplanService.getByQzzNoByStatus(upQzzno, "05");
|
||||
if (byQzzNo.size() == 0) {
|
||||
msg = "上轴对应的数据不存在!";
|
||||
} else {
|
||||
String collect = byQzzNo
|
||||
.stream()
|
||||
.map(PdmBiSlittingproductionplan::getContainer_name)
|
||||
.collect(Collectors.joining(","));
|
||||
data.put("up", collect);
|
||||
}
|
||||
} else {
|
||||
msg = "上轴无子卷信息!";
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(downQzzno)) {
|
||||
List<PdmBiSlittingproductionplan> byQzzNo = slittingproductionplanService.getByQzzNoByStatus(downQzzno, "05");
|
||||
if (byQzzNo.size() == 0) {
|
||||
msg = msg + "下轴对应的数据不存在!";
|
||||
} else {
|
||||
String collect = byQzzNo
|
||||
.stream()
|
||||
.map(PdmBiSlittingproductionplan::getContainer_name)
|
||||
.collect(Collectors.joining(","));
|
||||
data.put("down", collect);
|
||||
}
|
||||
} else {
|
||||
msg = msg + "下轴无子卷信息!";
|
||||
}
|
||||
// 获取当前分切机的下一组分切计划(最多四条分切计划)
|
||||
// hint: 获取到的分切可能是不同组的但具有一定时间顺序, 可能是以前的脏数据
|
||||
List<PdmBiSlittingproductionplan> timePlans = slittingproductionplanService.list(
|
||||
new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
||||
.eq(PdmBiSlittingproductionplan::getResource_name, deviceCode.getExt_code())
|
||||
.eq(PdmBiSlittingproductionplan::getStatus, "03")
|
||||
.eq(PdmBiSlittingproductionplan::getIs_delete, "0")
|
||||
.orderByAsc(PdmBiSlittingproductionplan::getUpdate_time));
|
||||
log.info("获取下一组分切计划:{}", timePlans);
|
||||
if (timePlans.size() > 0) {
|
||||
// 寻找备好轴的对接点位
|
||||
List<BstIvtCutpointivt> cutPointList = bstIvtCutpointivtService.getReadyShaftPoint(deviceCode.getExt_code());
|
||||
if (cutPointList.size() == 0) {
|
||||
msg = msg + "没有套好轴的位置!";
|
||||
} else {
|
||||
// 找到该分切计划的点位
|
||||
BstIvtCutpointivt newCutPoint = cutPointList.get(0);
|
||||
List<String> qzzNos = Stream.of(newCutPoint.getQzz_no1(), newCutPoint.getQzz_no2())
|
||||
.filter(value -> value != null && !value.isEmpty())
|
||||
.collect(Collectors.toList());
|
||||
List<PdmBiSlittingproductionplan> nextPlans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
||||
.in(PdmBiSlittingproductionplan::getQzzno, qzzNos)
|
||||
.eq(PdmBiSlittingproductionplan::getStatus, "03")
|
||||
.eq(PdmBiSlittingproductionplan::getIs_delete, "0"));
|
||||
String collect = nextPlans.stream()
|
||||
.map(PdmBiSlittingproductionplan::getContainer_name)
|
||||
.filter(ObjectUtil::isNotEmpty)
|
||||
.collect(Collectors.joining(","));
|
||||
msg = msg + "下一趟子卷号[" + collect + "]准备的气胀轴位置[" + newCutPoint.getPoint_code() + "]";
|
||||
}
|
||||
} else {
|
||||
msg = msg + " 没有套好轴的下一趟分切计划!";
|
||||
}
|
||||
data.put("msg", msg);
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* 手持相关包
|
||||
*/
|
||||
package org.nl.wms.pda;
|
||||
@@ -65,8 +65,9 @@ public class NbjPdaController {
|
||||
@PostMapping("/doBindingGx")
|
||||
@Log("套轴绑定-绑定管芯")
|
||||
public ResponseEntity<Object> doBindingGx(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(nbjPdaService.doBindingGx(param), HttpStatus.OK);
|
||||
return new ResponseEntity<>(nbjPdaService.doBindingGxV2(param), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getSlitterDeviceBox")
|
||||
@Log(value = "套轴绑定-分切机设备下拉框", isAddLogTable=false)
|
||||
public ResponseEntity<Object> getSlitterDeviceBox() {
|
||||
|
||||
@@ -30,6 +30,11 @@ public class OtherPdaController {
|
||||
public ResponseEntity<Object> startMoveWasteFoilV2(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(otherPdaService.startMoveWasteFoilV2(param), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/resumeMoveWasteFoil/v2")
|
||||
@Log("继续/结束搬运废箔信息")
|
||||
public ResponseEntity<Object> resumeMoveWasteFoilV2(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(otherPdaService.resumeMoveWasteFoilV2(param), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/startMoveWasteFoil")
|
||||
@Log("开始搬运废箔信息")
|
||||
public ResponseEntity<Object> startMoveWasteFoil(@RequestBody JSONObject param) {
|
||||
@@ -45,6 +50,11 @@ public class OtherPdaController {
|
||||
public ResponseEntity<Object> callAgvToSampling(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(otherPdaService.callAgvToSampling(param), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/callAgvToSamplingVerify")
|
||||
@Log("取样确认")
|
||||
public ResponseEntity<Object> callAgvToSamplingVerify(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(otherPdaService.callAgvToSamplingVerify(param), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/onlyCallRollTruss")
|
||||
@Log("呼叫出辊-桁架任务完成不做AGV")
|
||||
public ResponseEntity<Object> onlyCallRollTruss(@RequestBody JSONObject param) {
|
||||
|
||||
@@ -71,4 +71,11 @@ public interface NbjPdaService {
|
||||
* @return /
|
||||
*/
|
||||
JSONObject doSendShaft(JSONObject param);
|
||||
|
||||
/**
|
||||
* 套轴绑定-绑定管芯
|
||||
* @param param /
|
||||
* @return /
|
||||
*/
|
||||
JSONObject doBindingGxV2(JSONObject param);
|
||||
}
|
||||
|
||||
@@ -14,6 +14,14 @@ public interface OtherPdaService {
|
||||
* @return /
|
||||
*/
|
||||
JSONObject startMoveWasteFoilV2(JSONObject param);
|
||||
|
||||
/**
|
||||
* 继续/结束搬运废箔信息
|
||||
* @param param /
|
||||
* @return /
|
||||
*/
|
||||
JSONObject resumeMoveWasteFoilV2(JSONObject param);
|
||||
|
||||
/**
|
||||
* 开始搬运废箔
|
||||
* @param param /
|
||||
@@ -48,4 +56,11 @@ public interface OtherPdaService {
|
||||
* @return /
|
||||
*/
|
||||
JSONObject onlySendRollTruss(JSONObject param);
|
||||
|
||||
/**
|
||||
* 取样送样确认
|
||||
* @param param /
|
||||
* @return /
|
||||
*/
|
||||
JSONObject callAgvToSamplingVerify(JSONObject param);
|
||||
}
|
||||
|
||||
@@ -151,17 +151,16 @@ public class GxPdaServiceImpl implements GxPdaService {
|
||||
throw new BadRequestException("一次性最多只能入5个管芯");
|
||||
}
|
||||
// 找管芯库中的空位。
|
||||
List<SchBasePoint> allGxPoints = pointService.getPointByConditions("A1", "A1-GXK",
|
||||
"3", "1", null, true);
|
||||
List<SchBasePoint> allGxPoints = pointService.getGxPointNotLock();
|
||||
if (allGxPoints.size() < gxNumber) {
|
||||
log.warn("管芯库不够存放,只够存放{}个管芯", allGxPoints.size());
|
||||
}
|
||||
gxNumber = Math.min(gxNumber, allGxPoints.size());
|
||||
int actualQuantity = Math.min(gxNumber, allGxPoints.size());
|
||||
// 更新点位信息
|
||||
List<SchBasePoint> updatePoint = new ArrayList<>();
|
||||
for (int i = 0; i < gxNumber; i++) {
|
||||
for (int i = 0; i < actualQuantity; i++) {
|
||||
SchBasePoint point = allGxPoints.get(i);
|
||||
point.setPoint_status("2");
|
||||
point.setLock_type("2");
|
||||
point.setVehicle_code(materialCode);
|
||||
point.setRemark(materialSpec);
|
||||
updatePoint.add(point);
|
||||
@@ -172,10 +171,11 @@ public class GxPdaServiceImpl implements GxPdaService {
|
||||
JSONObject acs = new JSONObject();
|
||||
acs.put("product_area", URLEnum.ACS_URL_A1.getProduct_area());
|
||||
acs.put("device_code", gxRks.get(0).getPoint_code());
|
||||
for (int i = 0; i < gxNumber; i++) {
|
||||
acs.put("num", gxNumber);
|
||||
for (int i = 0; i < actualQuantity; i++) {
|
||||
// 查找点位最终一次性发给ACS
|
||||
acs.put("to_barcode" + (i + 1), materialCode);
|
||||
acs.put("to_target" + (i + 1), allGxPoints.get(i).getPoint_code());
|
||||
acs.put("barcode" + (i + 1), materialCode);
|
||||
acs.put("target" + (i + 1), allGxPoints.get(i).getPoint_code());
|
||||
acsArray.add(acs);
|
||||
}
|
||||
// 调用ACS
|
||||
|
||||
@@ -148,13 +148,14 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
@Override
|
||||
public JSONObject doSubVolumeBindingWeight(JSONObject param) {
|
||||
log.info("子卷绑定重量 - {}", param);
|
||||
// vehicle_code, weight
|
||||
String vehicleCode = param.getString("vehicle_code");
|
||||
// container_name, weight
|
||||
String containerName = param.getString("container_name");
|
||||
String weight = param.getString("weight");
|
||||
PdmBiSlittingproductionplan plan = slittingproductionplanService.getByTubeCode(vehicleCode);
|
||||
PdmBiSlittingproductionplan plan = slittingproductionplanService.getByContainerName(containerName);
|
||||
if (ObjectUtil.isEmpty(plan)) {
|
||||
throw new BadRequestException("分切计划不存在!");
|
||||
throw new BadRequestException("子卷号[ " + containerName + " ]分切计划不存在!");
|
||||
}
|
||||
log.info("更新子卷:{} - 重量:{}", containerName, weight);
|
||||
plan.setWeight(weight);
|
||||
plan.setUpdate_time(DateUtil.now());
|
||||
plan.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
@@ -168,8 +169,8 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
|
||||
@Override
|
||||
public List<PdmBiSlittingproductionplan> getSlitterNeedShaftPlans(@RequestBody JSONObject param) {
|
||||
String pointCode = param.getString("point_code");
|
||||
// 获取所有状态是01的分切计划
|
||||
String pointCode = param.getString("device");
|
||||
// 获取所有状态是01的分切计划 device
|
||||
List<PdmBiSlittingproductionplan> list = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
||||
.eq(PdmBiSlittingproductionplan::getStatus, "01")
|
||||
.eq(PdmBiSlittingproductionplan::getIs_child_tz_ok, "0")
|
||||
@@ -180,6 +181,49 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject doBindingGxV2(JSONObject param) {
|
||||
log.info("手持绑定管芯 - {}", param);
|
||||
// param: point_code,row
|
||||
String pointCode = param.getString("point_code");
|
||||
BstIvtCutpointivt tzzcPoint = bstIvtCutpointivtService.getPintByTrussCode(pointCode, false);
|
||||
JSONArray rows = param.getJSONArray("row");
|
||||
List<String> orderIds = rows.stream()
|
||||
.map(o -> ((JSONObject) o))
|
||||
.map(o -> o.getString("workorder_id"))
|
||||
.collect(Collectors.toList());
|
||||
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.getByIds(orderIds);
|
||||
// 当前套轴的分切计划
|
||||
PdmBiSlittingproductionplan demoPlan = plans.get(0);
|
||||
String resourceName = demoPlan.getResource_name();
|
||||
// 生成虚拟气胀轴编码
|
||||
String qzzNo = TaskUtils.createVirtualQzzNo(resourceName, "yyMMddHHmmss", demoPlan);
|
||||
for (PdmBiSlittingproductionplan plan : plans) {
|
||||
plan.setQzzno(qzzNo);
|
||||
plan.setIs_child_tz_ok("1");
|
||||
TaskUtils.updateOptMessageBySlitterPlan(plan);
|
||||
}
|
||||
// 批量更新
|
||||
slittingproductionplanService.updateBatchById(plans);
|
||||
// 点位更新数据
|
||||
if (tzzcPoint.getTruss_point_code1().equals(pointCode)) {
|
||||
// 上轴
|
||||
tzzcPoint.setQzz_no1(qzzNo);
|
||||
} else {
|
||||
// 下轴
|
||||
tzzcPoint.setQzz_no2(qzzNo);
|
||||
}
|
||||
tzzcPoint.setPoint_status("2");
|
||||
setBCutUpdateByPC(tzzcPoint);
|
||||
bstIvtCutpointivtService.updateById(tzzcPoint);
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("status", HttpStatus.OK.value());
|
||||
result.put("message", "管芯绑定成功!");
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject doBindingGx(JSONObject param) {
|
||||
log.info("手持绑定管芯 - {}", param);
|
||||
// param: point_code, vehicle_code,workorder_id(row)
|
||||
@@ -316,11 +360,11 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
PdmBiSlittingproductionplan currentUpPlan = plans.stream()
|
||||
.filter(p -> "1".equals(p.getUp_or_down()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
.orElse(new PdmBiSlittingproductionplan());
|
||||
PdmBiSlittingproductionplan currentDownPlan = plans.stream()
|
||||
.filter(p -> "2".equals(p.getUp_or_down()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
.orElse(new PdmBiSlittingproductionplan());
|
||||
PdmBiSlittingproductionplan demoPlan = plans.get(0);
|
||||
StIvtCutpointivt endPoint = stIvtCutpointivtService.getPintByExtCode(demoPlan.getResource_name(), false);
|
||||
taskParam.put("point_code2", endPoint.getPoint_code());
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.nl.wms.pda.st.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -8,14 +10,18 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||
import org.nl.wms.pda.st.service.OtherPdaService;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task_manage.TaskStatus;
|
||||
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.tasks.other.CallToSamplingAGVTask;
|
||||
import org.nl.wms.sch.task_manage.tasks.other.SendWasteFoilAGVTask;
|
||||
import org.nl.wms.sch.task_manage.tasks.other.WasteFoilAGVTask;
|
||||
import org.nl.wms.sch.task_manage.tasks.raw.RawCallRollTrussTask;
|
||||
import org.nl.wms.sch.task_manage.tasks.slitter.SlitterSendRollTrussTask;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -43,16 +49,109 @@ public class OtherPdaServiceImpl implements OtherPdaService {
|
||||
private SlitterSendRollTrussTask slitterSendRollTrussTask;
|
||||
@Autowired
|
||||
private WmsToAcsService wmsToAcsService;
|
||||
@Autowired
|
||||
private SendWasteFoilAGVTask sendWasteFoilAGVTask;
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject startMoveWasteFoilV2(JSONObject param) {
|
||||
// 点击开始,都将废箔任务创建单条任务存储到任务表中,
|
||||
// 在通过定时任务,确保只有一条执行中/终点不是废箔终点的任务
|
||||
log.info("手持开始搬运废箔 - {}", param);
|
||||
return null;
|
||||
// 只做保存任务
|
||||
// point_code
|
||||
String pointCode = param.getString("point_code");
|
||||
List<SchBaseTask> schBaseTasks = taskService.checkHaveTask(pointCode);
|
||||
if (schBaseTasks.size() > 0) {
|
||||
throw new BadRequestException("点位[" + pointCode + "]已经存在任务!");
|
||||
}
|
||||
JSONObject taskParam = new JSONObject();
|
||||
taskParam.put("point_code2", pointCode);
|
||||
taskParam.put("index_task", 1);
|
||||
taskParam.put("config_code", "SendWasteFoilAGVTask");
|
||||
taskParam.put("create_mode", GeneralDefinition.PDA_CREATION);
|
||||
taskParam.put("task_status", TaskStatus.SURE_END.getCode());
|
||||
sendWasteFoilAGVTask.createTask(taskParam);
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("status", HttpStatus.OK.value());
|
||||
result.put("message", "废箔开始搬运请求成功!");
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject resumeMoveWasteFoilV2(JSONObject param) {
|
||||
log.info("继续/结束搬运废箔 - {}", param);
|
||||
// 当前的点位是放好废箔的点位 参数:flag:1-确认,2-结束 point_code
|
||||
String flag = param.getString("flag");
|
||||
// 判断是否能够搬运
|
||||
String pointCode = param.getString("point_code");
|
||||
// 校验是否二次创建任务
|
||||
List<SchBaseTask> schBaseTasks = taskService.checkHaveTask(pointCode);
|
||||
if (schBaseTasks.size() > 0) {
|
||||
throw new BadRequestException("点位[" + pointCode + "]已经存在任务!");
|
||||
}
|
||||
// 查找执行中的任务
|
||||
SchBaseTask task = taskService.getOne(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getPoint_code2, pointCode)
|
||||
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()));
|
||||
if (ObjectUtil.isEmpty(task)) {
|
||||
throw new BadRequestException("点位[" + pointCode + "]上一个任务不存在!");
|
||||
}
|
||||
JSONObject upTaskRequestObj = JSONObject.parseObject(task.getRequest_param());
|
||||
// 获取下一条的任务
|
||||
List<SchBaseTask> waitTask = taskService.getTaskByConfigAndStatus(task.getConfig_code(), TaskStatus.SURE_END.getCode());
|
||||
if (waitTask.size() == 0 || "2".equals(flag)) {
|
||||
// 最后一条任务, 创建去终点的任务
|
||||
// 获取一个废箔位置
|
||||
List<SchBasePoint> fbPoints = pointService.getAllBusinessNotTaskPoint("A1", "A1-FB",
|
||||
"2", null, null, null);
|
||||
if (CollectionUtil.isEmpty(fbPoints)) {
|
||||
throw new BadRequestException("找不到废箔点位,请稍后再试!");
|
||||
}
|
||||
JSONObject taskParam = new JSONObject();
|
||||
taskParam.put("point_code1", pointCode);
|
||||
taskParam.put("point_code2", fbPoints.get(0).getPoint_code());
|
||||
taskParam.put("config_code", "SendWasteFoilAGVTask");
|
||||
taskParam.put("create_mode", GeneralDefinition.PDA_CREATION);
|
||||
taskParam.put("remark", "废箔回去");
|
||||
taskParam.put("index_task", upTaskRequestObj.getInteger("index_task") + 1);
|
||||
taskParam.put("carNo", task.getCar_no());
|
||||
taskParam.put("task_status", TaskStatus.START_AND_POINT.getCode());
|
||||
sendWasteFoilAGVTask.createTask(taskParam);
|
||||
} else {
|
||||
// 获取其中一条任务设置起点
|
||||
SchBaseTask nextTask = waitTask.get(0);
|
||||
JSONObject requestObj = JSONObject.parseObject(nextTask.getRequest_param());
|
||||
requestObj.put("up_task_code", task.getTask_code());
|
||||
requestObj.put("index_task", upTaskRequestObj.getInteger("index_task") + 1);
|
||||
nextTask.setCar_no(task.getCar_no());
|
||||
nextTask.setPoint_code1(task.getPoint_code2());
|
||||
nextTask.setRequest_param(requestObj.toJSONString());
|
||||
nextTask.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
TaskUtils.setUpdateByDefault(nextTask);
|
||||
taskService.updateById(nextTask);
|
||||
}
|
||||
// 通知ACS完成上一个任务
|
||||
JSONArray acs = new JSONArray();
|
||||
JSONObject acsParam = new JSONObject();
|
||||
acsParam.put("task_code", task.getTask_code());
|
||||
acsParam.put("product_area", task.getProduct_area());
|
||||
acs.add(acsParam);
|
||||
log.info("通知ACS完成上一个任务的参数 - {}", acs);
|
||||
JSONObject jsonObject = wmsToAcsService.canFinishPreviousTask(acs);
|
||||
log.info("通知ACS完成上一个任务的反馈 - {}", jsonObject);
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("status", HttpStatus.OK.value());
|
||||
result.put("message", "废箔继续搬运请求成功!");
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject startMoveWasteFoil(JSONObject param) {
|
||||
log.info("手持开始搬运废箔 - {}", param);
|
||||
// row
|
||||
@@ -78,6 +177,7 @@ public class OtherPdaServiceImpl implements OtherPdaService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject resumeMoveWasteFoil(JSONObject param) {
|
||||
log.info("继续/结束搬运废箔 - {}", param);
|
||||
@@ -194,4 +294,37 @@ public class OtherPdaServiceImpl implements OtherPdaService {
|
||||
result.put("message", "收卷辊入库任务请求成功!");
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject callAgvToSamplingVerify(JSONObject param) {
|
||||
log.info("取样/放样确认 - {}", param);
|
||||
// 放货1, 取货2 : flag, startPoint, endPoint
|
||||
String flag = param.getString("flag");
|
||||
String startPoint = param.getString("startPoint");
|
||||
String endPoint = param.getString("endPoint");
|
||||
JSONArray acs = new JSONArray();
|
||||
JSONObject acsParam = new JSONObject();
|
||||
SchBaseTask task;
|
||||
if ("1".equals(flag)) {
|
||||
Assert.notBlank(startPoint, "起点不能为空!");
|
||||
// 获取这个任务
|
||||
task = taskService.getTaskByPointCodeX(startPoint, null, null, null);
|
||||
acsParam.put("device_code", startPoint);
|
||||
acsParam.put("option", "2");
|
||||
} else {
|
||||
Assert.notBlank(endPoint, "终点不能为空!");
|
||||
task = taskService.getTaskByPointCodeX(null, endPoint, null, null);
|
||||
acsParam.put("device_code", endPoint);
|
||||
acsParam.put("option", "3");
|
||||
}
|
||||
acsParam.put("task_code", task.getTask_code());
|
||||
acsParam.put("product_area", task.getProduct_area());
|
||||
acs.add(acsParam);
|
||||
JSONObject jsonObject = wmsToAcsService.updateTask(acs);
|
||||
log.info("取样下发ACS,执行AGV动作,请求参数{},返回结果:{}", acs, jsonObject);
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("status", HttpStatus.OK.value());
|
||||
result.put("message", "取样确认请求成功!");
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import org.nl.wms.pdm.bi.dao.PdmBiSlittingproductionplan;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.wms.pdm.bi.dto.PdmBiSlittingproductionplanParam;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@@ -116,6 +117,27 @@ public interface IpdmBiSlittingproductionplanService extends IService<PdmBiSlitt
|
||||
* @return /
|
||||
*/
|
||||
List<PdmBiSlittingproductionplan> getByQzzNos(List<String> qzzNo);
|
||||
|
||||
/**
|
||||
* 获取id对应的分切计划
|
||||
* @param ids /
|
||||
* @return /
|
||||
*/
|
||||
List<PdmBiSlittingproductionplan> getByIds(Collection<String> ids);
|
||||
|
||||
/**
|
||||
* 获取分切计划
|
||||
* @param qzzno 气胀轴
|
||||
* @param status 状态
|
||||
* @return /
|
||||
*/
|
||||
List<PdmBiSlittingproductionplan> getByQzzNoByStatus(String qzzno, String status);
|
||||
/**
|
||||
* 根据子卷获取分切
|
||||
* @param containerName 子卷
|
||||
* @return /
|
||||
*/
|
||||
PdmBiSlittingproductionplan getByContainerName(String containerName);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -266,5 +266,27 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl<PdmBiSli
|
||||
return pdmBiSlittingproductionplanMapper.selectList(lam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PdmBiSlittingproductionplan> getByIds(Collection<String> ids) {
|
||||
LambdaQueryWrapper<PdmBiSlittingproductionplan> lam = new QueryWrapper<PdmBiSlittingproductionplan>().lambda();
|
||||
lam.in(PdmBiSlittingproductionplan::getWorkorder_id, ids);
|
||||
return list(lam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PdmBiSlittingproductionplan> getByQzzNoByStatus(String qzzNo, String status) {
|
||||
LambdaQueryWrapper<PdmBiSlittingproductionplan> lam = new QueryWrapper<PdmBiSlittingproductionplan>().lambda();
|
||||
lam.eq(PdmBiSlittingproductionplan::getQzzno, qzzNo)
|
||||
.eq(PdmBiSlittingproductionplan::getIs_delete, "0")
|
||||
.eq(PdmBiSlittingproductionplan::getStatus, status);
|
||||
return pdmBiSlittingproductionplanMapper.selectList(lam);
|
||||
}
|
||||
@Override
|
||||
public PdmBiSlittingproductionplan getByContainerName(String containerName) {
|
||||
LambdaQueryWrapper<PdmBiSlittingproductionplan> lam = new QueryWrapper<PdmBiSlittingproductionplan>().lambda();
|
||||
lam.eq(PdmBiSlittingproductionplan::getContainer_name, containerName)
|
||||
.eq(PdmBiSlittingproductionplan::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"));
|
||||
return pdmBiSlittingproductionplanMapper.selectOne(lam);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -129,4 +129,11 @@ public interface IBstIvtCutpointivtService extends IService<BstIvtCutpointivt> {
|
||||
* @return /
|
||||
*/
|
||||
BstIvtCutpointivt getSleeveShaftOkNotTaskPoint(String resourceName);
|
||||
|
||||
/**
|
||||
* 获取准备好的点
|
||||
* @param code /
|
||||
* @return /
|
||||
*/
|
||||
List<BstIvtCutpointivt> getReadyShaftPoint(String code);
|
||||
}
|
||||
|
||||
@@ -25,4 +25,6 @@ public interface BstIvtCutpointivtMapper extends BaseMapper<BstIvtCutpointivt> {
|
||||
List<BstIvtCutpointivt> getAreaNotTaskPointByStatusNotCheckPickUpCompleted(String type, String pointStatus, String area, String sort);
|
||||
|
||||
BstIvtCutpointivt getSleeveShaftOkNotTaskPoint(String resourceName);
|
||||
|
||||
List<BstIvtCutpointivt> getReadyShaftPoint(String code);
|
||||
}
|
||||
|
||||
@@ -156,4 +156,14 @@
|
||||
AND pp.resource_name = #{resourceName}
|
||||
ORDER BY bic.update_time LIMIT 1
|
||||
</select>
|
||||
<select id="getReadyShaftPoint" resultType="org.nl.wms.pdm.ivt.bcut.service.dao.BstIvtCutpointivt">
|
||||
SELECT
|
||||
bsp.*
|
||||
FROM
|
||||
`bst_ivt_cutpointivt` bsp
|
||||
LEFT JOIN pdm_bi_slittingproductionplan p ON p.is_delete = '0' AND p.`status` = '03' AND (p.qzzno = bsp.qzz_no1 OR p.qzzno = bsp.qzz_no2)
|
||||
WHERE bsp.point_type = '3' AND bsp.point_status = '2' AND p.workorder_id IS NOT NULL
|
||||
AND p.resource_name = #{extCode} AND bsp.is_used = '1' AND IFNULL(p.qzzno, '') <![CDATA[ <> ]]> ''
|
||||
ORDER BY bsp.update_time
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -149,4 +149,9 @@ public class BstIvtCutpointivtServiceImpl extends ServiceImpl<BstIvtCutpointivtM
|
||||
public BstIvtCutpointivt getSleeveShaftOkNotTaskPoint(String resourceName) {
|
||||
return bstIvtCutpointivtMapper.getSleeveShaftOkNotTaskPoint(resourceName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BstIvtCutpointivt> getReadyShaftPoint(String code) {
|
||||
return bstIvtCutpointivtMapper.getReadyShaftPoint(code);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
package org.nl.wms.quartz;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task_manage.TaskStatus;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 从废箔起点开始
|
||||
* @Date: 2024/8/27
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class AutoSendWasteFoilAGVTask {
|
||||
public static final String TASK_CODE = "SendWasteFoilAGVTask";
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
public void run() {
|
||||
log.info("查找废箔起点任务开始执行...");
|
||||
// 获取下一条的任务
|
||||
List<SchBaseTask> waitTask = taskService.getTaskByConfigAndStatus(TASK_CODE, TaskStatus.SURE_END.getCode());
|
||||
if (taskService.checkAllWaiteByWasteFoil()) {
|
||||
log.info("没有搬运中的废箔,执行创建从废箔起点到废箔终点的任务!");
|
||||
// 都是等待状态的任务
|
||||
SchBaseTask task = waitTask.get(0);
|
||||
// 查找废箔起点
|
||||
List<SchBasePoint> fbPoints = pointService.getAllBusinessNotTaskPoint("A1", "A1-FB",
|
||||
"2", "2", null, null);
|
||||
if (CollectionUtil.isEmpty(fbPoints)) {
|
||||
log.error("找不到废箔点位 - {}", task);
|
||||
return;
|
||||
}
|
||||
SchBasePoint point = fbPoints.get(0);
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
TaskUtils.setUpdateByDefault(task);
|
||||
taskService.updateById(task);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -118,4 +118,10 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
|
||||
* @return
|
||||
*/
|
||||
List<SchBasePoint> getWindRollConformRawNotTaskPoints(String code);
|
||||
|
||||
/**
|
||||
* 获取管芯无锁位置
|
||||
* @return
|
||||
*/
|
||||
List<SchBasePoint> getGxPointNotLock();
|
||||
}
|
||||
|
||||
@@ -44,4 +44,10 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
|
||||
* @return /
|
||||
*/
|
||||
List<SchBasePoint> getWindRollConformRawNotTaskPoints(String code);
|
||||
|
||||
/**
|
||||
* 获取无锁点位
|
||||
* @return
|
||||
*/
|
||||
List<SchBasePoint> getGxPointNotLock();
|
||||
}
|
||||
|
||||
@@ -80,4 +80,13 @@
|
||||
ORDER BY
|
||||
p.update_time
|
||||
</select>
|
||||
<select id="getGxPointNotLock" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
|
||||
SELECT
|
||||
p.*
|
||||
FROM
|
||||
`sch_base_point` p
|
||||
WHERE p.region_code = 'A1-GXK' AND p.point_status = '1' AND p.point_type = '3' AND p.is_used = TRUE
|
||||
AND p.lock_type = '1'
|
||||
ORDER BY p.update_time
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -242,4 +242,9 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
return pointMapper.getWindRollConformRawNotTaskPoints(code);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SchBasePoint> getGxPointNotLock() {
|
||||
return pointMapper.getGxPointNotLock();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -145,4 +145,25 @@ public interface ISchBaseTaskService extends IService<SchBaseTask> {
|
||||
* @return /
|
||||
*/
|
||||
List<SchBaseTask> getWasteFoilTask(String code);
|
||||
|
||||
/**
|
||||
* 判断是否存在任务
|
||||
* @param collect 点位集合
|
||||
* @return /
|
||||
*/
|
||||
Boolean checkHaveTaskByPoints(List<String> collect);
|
||||
|
||||
/**
|
||||
* 获取同配置、状态的任务
|
||||
* @param configCode 配置
|
||||
* @param status 状态
|
||||
* @return /
|
||||
*/
|
||||
List<SchBaseTask> getTaskByConfigAndStatus(String configCode, String status);
|
||||
|
||||
/**
|
||||
* 判断废箔是否都是等待的任务
|
||||
* @return /
|
||||
*/
|
||||
boolean checkAllWaiteByWasteFoil();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.sch.task.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
@@ -31,6 +32,7 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -272,7 +274,9 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
.eq(ObjectUtil.isNotEmpty(p2), SchBaseTask::getPoint_code2, p2)
|
||||
.eq(ObjectUtil.isNotEmpty(p3), SchBaseTask::getPoint_code3, p3)
|
||||
.eq(ObjectUtil.isNotEmpty(p4), SchBaseTask::getPoint_code4, p4)
|
||||
.lt(SchBaseTask::getTask_status, "07");
|
||||
.gt(SchBaseTask::getTask_status, TaskStatus.SURE_END.getCode())
|
||||
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
|
||||
.eq(SchBaseTask::getIs_delete, "0");
|
||||
return getOne(lam, false);
|
||||
}
|
||||
|
||||
@@ -281,4 +285,41 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
return schBaseTaskMapper.getWasteFoilTask(code);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean checkHaveTaskByPoints(List<String> collect) {
|
||||
if (CollectionUtil.isEmpty(collect)) {
|
||||
return true;
|
||||
}
|
||||
LambdaQueryWrapper<SchBaseTask> lam = new QueryWrapper<SchBaseTask>().lambda();
|
||||
lam.eq(SchBaseTask::getIs_delete, "0")
|
||||
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()).and(la -> la.in(SchBaseTask::getPoint_code1, collect).or()
|
||||
.in(SchBaseTask::getPoint_code2, collect).or()
|
||||
.in(SchBaseTask::getPoint_code3, collect).or()
|
||||
.in(SchBaseTask::getPoint_code4, collect));
|
||||
List<SchBaseTask> list = list(lam);
|
||||
return list.size() > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SchBaseTask> getTaskByConfigAndStatus(String configCode, String status) {
|
||||
LambdaQueryWrapper<SchBaseTask> lam = new QueryWrapper<SchBaseTask>().lambda();
|
||||
lam.eq(SchBaseTask::getConfig_code, configCode)
|
||||
.eq(SchBaseTask::getTask_status, status)
|
||||
.eq(SchBaseTask::getIs_delete, "0")
|
||||
.orderByAsc(SchBaseTask::getCreate_time);
|
||||
return list(lam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkAllWaiteByWasteFoil() {
|
||||
LambdaQueryWrapper<SchBaseTask> lam = new QueryWrapper<SchBaseTask>().lambda();
|
||||
lam.eq(SchBaseTask::getConfig_code, "SendWasteFoilAGVTask")
|
||||
.gt(SchBaseTask::getTask_status, TaskStatus.SURE_END.getCode())
|
||||
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
|
||||
.eq(SchBaseTask::getIs_delete, "0")
|
||||
.orderByAsc(SchBaseTask::getCreate_time);
|
||||
List<SchBaseTask> list = list(lam);
|
||||
return list.size() == 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -112,6 +112,7 @@ public abstract class AbstractTask {
|
||||
taskDto.setVehicle_code(task.getVehicle_code());
|
||||
taskDto.setVehicle_code2(task.getVehicle_code2());
|
||||
taskDto.setProduct_area(task.getProduct_area());
|
||||
taskDto.setCar_no(task.getCar_no());
|
||||
// 如果各类方法对返回参数有不同,可以通过调用子类实现的deliveryBeforeProcessing方法来完成赋值,
|
||||
// 也可以是统一封装到参数值中。
|
||||
this.deliveryBeforeProcessing(task, taskDto);
|
||||
|
||||
@@ -130,6 +130,11 @@ public class AcsTaskDto {
|
||||
*/
|
||||
private String direction;
|
||||
|
||||
/**
|
||||
* 车号
|
||||
*/
|
||||
private String car_no;
|
||||
|
||||
/**
|
||||
* 扩展属性
|
||||
*/
|
||||
|
||||
@@ -14,4 +14,11 @@ public interface BakingOperationService {
|
||||
* @return /
|
||||
*/
|
||||
JSONObject acsRequestOutHotTask(JSONObject param);
|
||||
|
||||
/**
|
||||
* ACS请求入烘箱
|
||||
* @param param /
|
||||
* @return /
|
||||
*/
|
||||
JSONObject acsRequestInHotTask(JSONObject param);
|
||||
}
|
||||
|
||||
@@ -1,11 +1,18 @@
|
||||
package org.nl.wms.sch.task_manage.service.impl;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
|
||||
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.service.BakingOperationService;
|
||||
import org.nl.wms.sch.task_manage.tasks.hot.InHotTrussTask;
|
||||
import org.nl.wms.sch.task_manage.tasks.hot.OutHotTrussTask;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@@ -25,6 +32,10 @@ public class BakingOperationServiceImpl implements BakingOperationService {
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private OutHotTrussTask outHotTrussTask;
|
||||
@Autowired
|
||||
private IpdmBiRawfoilworkorderService rawfoilworkorderService;
|
||||
@Autowired
|
||||
private InHotTrussTask inHotTrussTask;
|
||||
@Override
|
||||
public JSONObject acsRequestOutHotTask(JSONObject param) {
|
||||
log.info("acs请求出烘箱:{}", param);
|
||||
@@ -43,4 +54,48 @@ public class BakingOperationServiceImpl implements BakingOperationService {
|
||||
result.put("data", new JSONObject());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject acsRequestInHotTask(JSONObject param) {
|
||||
log.info("acs请求入烘箱:{}", param);
|
||||
// 任务完成将工单对应的状态设置04, 维护重量信息。触发烘箱桁架任务
|
||||
// param: task_code
|
||||
String taskCode = param.getString("task_code");
|
||||
Assert.notBlank(taskCode, "任务编码不能为空!");
|
||||
SchBaseTask taskObj = taskService.getByCode(taskCode);
|
||||
JSONObject taskParam = new JSONObject();
|
||||
String requestParam = taskObj.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String orderCode = requestObj.getString("order_code");
|
||||
if (ObjectUtil.isNotEmpty(orderCode)) {
|
||||
rawfoilworkorderService.update(new LambdaUpdateWrapper<PdmBiRawfoilworkorder>()
|
||||
.set(PdmBiRawfoilworkorder::getStatus, "04")
|
||||
.eq(PdmBiRawfoilworkorder::getContainer_name, orderCode));
|
||||
log.info("工单修改完毕 - 母卷号 - {}", orderCode);
|
||||
}
|
||||
// 烘箱暂存位
|
||||
String hxPointCode = "";
|
||||
// 获取点位
|
||||
if (ObjectUtil.isEmpty(taskObj.getPoint_code3())) {
|
||||
// 取满任务
|
||||
hxPointCode = taskObj.getPoint_code2();
|
||||
} else {
|
||||
// 取满放空任务
|
||||
hxPointCode = taskObj.getPoint_code4();
|
||||
}
|
||||
log.info("开始创建桁架任务入烘箱....");
|
||||
taskParam.put("order_code", orderCode);
|
||||
taskParam.put("up_task_code", taskObj.getTask_code());
|
||||
taskParam.put("device_code", hxPointCode);
|
||||
taskParam.put("config_code", "InHotTrussTask");
|
||||
taskParam.put("create_mode", GeneralDefinition.ACS_CREATION);
|
||||
// 满卷的收卷辊编码放在AGV任务的载具2上
|
||||
taskParam.put("vehicle_code", taskObj.getVehicle_code2());
|
||||
inHotTrussTask.apply(taskParam);
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("status", HttpStatus.OK.value());
|
||||
result.put("message", "任务创建成功!");
|
||||
result.put("data", new JSONObject());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,15 +2,19 @@ package org.nl.wms.sch.task_manage.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.config.lucene.TagNameEnum;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.service.NbjOperationService;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.slf4j.MDC;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@@ -32,14 +36,17 @@ import static org.nl.wms.util.PointUtils.clearPoint;
|
||||
public class NbjOperationServiceImpl implements NbjOperationService {
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject tubeExceptionHandling(JSONObject param) {
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.ERROR_GX_IN_OUT.getTag());
|
||||
log.info("ACS请求满入/空出异常处理 - {}", param);
|
||||
// type: 1满入,2空出、device_code: 异常点位
|
||||
// type: 1满入,2空出、target: 异常点位、barcode:条码、task_code: 任务编码
|
||||
String type = param.getString("type");
|
||||
String deviceCode = param.getString("device_code");
|
||||
String deviceCode = param.getString("target");
|
||||
String vehicleCode = param.getString("barcode");
|
||||
Assert.notBlank(type, "类型不能为空!");
|
||||
Assert.notBlank(deviceCode, "点位不能为空!");
|
||||
SchBasePoint exceptionPoint = pointService.getById(deviceCode);
|
||||
@@ -48,15 +55,25 @@ public class NbjOperationServiceImpl implements NbjOperationService {
|
||||
// 满入: 把点位禁用,重新分配点位
|
||||
exceptionPoint.setIs_used(false);
|
||||
exceptionPoint.setUpdate_time(DateUtil.now());
|
||||
allGxPoints = pointService.getPointByConditions("A1", "A1-GXK",
|
||||
"2", "1", null, true);
|
||||
// 找管芯库中的空位。
|
||||
allGxPoints = pointService.getGxPointNotLock();
|
||||
log.info("满入禁用点位");
|
||||
pointService.updateById(exceptionPoint);
|
||||
} else {
|
||||
// 空出: 根据点位的载具类型查找相同位置
|
||||
String vehicleType = exceptionPoint.getVehicle_type();
|
||||
allGxPoints = pointService.getPointByConditions("A1", "A1-GXK",
|
||||
"2", "2", vehicleType, true);
|
||||
String taskCode = param.getString("task_code");
|
||||
SchBaseTask task = taskService.getByCode(taskCode);
|
||||
if (ObjectUtil.isEmpty(task)) {
|
||||
throw new BadRequestException("任务[ {" + taskCode + "} ]不存在!");
|
||||
}
|
||||
// 空出: 根据点位的载具类型查找相同位置: 应该查找没有任务的点位
|
||||
allGxPoints = pointService.getAllBusinessNotTaskPoint("A1", "A1-GXK",
|
||||
"3", "2", null, vehicleCode);
|
||||
if (allGxPoints.size() > 0) {
|
||||
task.setPoint_code3(allGxPoints.get(0).getPoint_code());
|
||||
task.setRemark("重新分配货位");
|
||||
TaskUtils.setUpdateByDefault(task);
|
||||
taskService.updateById(task);
|
||||
}
|
||||
}
|
||||
if (allGxPoints.size() == 0) {
|
||||
throw new BadRequestException("重新分配货位失败!");
|
||||
|
||||
@@ -16,6 +16,7 @@ import org.nl.wms.sch.task_manage.service.OtherOperationService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@@ -34,6 +35,7 @@ public class OtherOperationServiceImpl implements OtherOperationService {
|
||||
@Autowired
|
||||
private IWastefoilrecordService wastefoilrecordService;
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject acsRequestWasteFoilWeight(JSONObject param) {
|
||||
log.info("ACS反馈废箔重量: {}", param);
|
||||
// task_code, point_code, weight
|
||||
@@ -47,7 +49,7 @@ public class OtherOperationServiceImpl implements OtherOperationService {
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
int indexTask = requestObj.getInteger("index_task");
|
||||
requestObj.put("weight", weight);
|
||||
if (indexTask != 0) {
|
||||
if (indexTask != 1) {
|
||||
// 获取上一条任务的重量
|
||||
String upTaskCode = requestObj.getString("up_task_code");
|
||||
SchBaseTask upTask = taskService.getByCode(upTaskCode);
|
||||
|
||||
@@ -59,6 +59,7 @@ public class SendShaftAGVTask extends AbstractTask {
|
||||
BstIvtCutpointivt startPoint = bcutpointivtService.getSleeveShaftOkNotTaskPoint(requestObj.getString("resource_name"));
|
||||
if (ObjectUtil.isEmpty(startPoint)) {
|
||||
log.warn("没有找到设备为[ {} ]套好轴的气胀轴点位信息!", requestObj.getString("resource_name"));
|
||||
return;
|
||||
}
|
||||
List<String> collect = Stream.of(startPoint.getUp_gx1(), startPoint.getUp_gx2(), startPoint.getDown_gx1(), startPoint.getDown_gx2())
|
||||
.filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
package org.nl.wms.sch.task_manage.tasks.other;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.TaskStatus;
|
||||
import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.service.OtherOperationService;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 废箔业务
|
||||
* @Date: 2024/8/27
|
||||
*/
|
||||
@Slf4j
|
||||
@Component(value = "SendWasteFoilAGVTask")
|
||||
public class SendWasteFoilAGVTask extends AbstractTask {
|
||||
private final String THIS_CLASS = SendWasteFoilAGVTask.class.getName();
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private OtherOperationService otherOperationService;
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String createTask(JSONObject form) {
|
||||
String taskStatus = form.getString("task_status");
|
||||
// 创建任务
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
task.setTask_id(IdUtil.getSnowflake(1,1).nextIdStr());
|
||||
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.setConfig_code("SendWasteFoilAGVTask");
|
||||
task.setPoint_code1(form.getString("point_code1"));
|
||||
task.setPoint_code2(form.getString("point_code2"));
|
||||
task.setProduct_area(form.getString("product_area"));
|
||||
task.setVehicle_code(form.getString("vehicle_code"));
|
||||
task.setVehicle_type(form.getString("vehicle_type"));
|
||||
task.setCreate_mode(form.getString("create_mode"));
|
||||
task.setRemark(form.getString("remark"));
|
||||
task.setCar_no(form.getString("carNo"));
|
||||
task.setRequest_param(JSONObject.toJSONString(form));
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(ObjectUtil.isEmpty(taskStatus)
|
||||
? TaskStatus.START_AND_POINT.getCode()
|
||||
: taskStatus);
|
||||
TaskUtils.setCreateByDefault(task);
|
||||
taskService.save(task);
|
||||
return task.getTask_id();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
checkTaskOptionStatus(taskObj);
|
||||
// 如果是废箔起点,需要吧点位置空
|
||||
String startPointCode = taskObj.getPoint_code1();
|
||||
SchBasePoint startPoint = pointService.getById(startPointCode);
|
||||
if ("A1-FB".equals(startPoint.getRegion_code())) {
|
||||
// 清空
|
||||
PointUtils.clearPoint(startPoint, taskFinishedType);
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
checkTaskOptionStatus(taskObj);
|
||||
// 取消
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(JSONObject task, TaskStatus status) {
|
||||
String taskCode = task.getString("task_code");
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(taskCode);
|
||||
BigDecimal weight = task.getBigDecimal("weight");
|
||||
if (ObjectUtil.isNotEmpty(weight)) {
|
||||
// 调用更新重量
|
||||
otherOperationService.acsRequestWasteFoilWeight(task);
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setCar_no(task.getString("car_no"));
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.sch.task_manage.tasks.other;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -12,11 +13,13 @@ import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.TaskStatus;
|
||||
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.service.OtherOperationService;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
|
||||
@@ -28,6 +31,7 @@ import static org.nl.wms.util.TaskUtils.setUpdateByPC;
|
||||
* @Date: 2024/8/14
|
||||
*/
|
||||
@Slf4j
|
||||
@Deprecated
|
||||
@Component(value = "WasteFoilAGVTask")
|
||||
public class WasteFoilAGVTask extends AbstractTask {
|
||||
private final String THIS_CLASS = WasteFoilAGVTask.class.getName();
|
||||
@@ -35,6 +39,8 @@ public class WasteFoilAGVTask extends AbstractTask {
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private OtherOperationService otherOperationService;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
@@ -102,4 +108,29 @@ public class WasteFoilAGVTask extends AbstractTask {
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(JSONObject task, TaskStatus status) {
|
||||
String taskCode = task.getString("task_code");
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(taskCode);
|
||||
BigDecimal weight = task.getBigDecimal("weight");
|
||||
if (ObjectUtil.isNotEmpty(weight)) {
|
||||
// 调用更新重量
|
||||
otherOperationService.acsRequestWasteFoilWeight(task);
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setCar_no(task.getString("car_no"));
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* <h1>所有任务类</h1>
|
||||
* <p>包括所有的任务业务,找点业务,更新任务业务</p>
|
||||
* <li>hot: 烘箱相关任务</li>
|
||||
* <li>nbj: 内包间相关任务</li>
|
||||
* <li>other: 废箔搬运、检验搬运相关任务</li>
|
||||
* <li>raw: 生箔相关任务</li>
|
||||
* <li>slitter: 分切相关任务</li>
|
||||
*/
|
||||
package org.nl.wms.sch.task_manage.tasks;
|
||||
@@ -3,6 +3,7 @@ package org.nl.wms.sch.task_manage.tasks.raw;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
|
||||
@@ -17,11 +18,15 @@ import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.tasks.hot.InHotTrussTask;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
|
||||
import static org.nl.wms.util.TaskUtils.setUpdateByPC;
|
||||
@@ -43,12 +48,13 @@ public class RawDownAGVTask extends AbstractTask {
|
||||
@Autowired
|
||||
private IpdmBiRawfoilworkorderService rawfoilworkorderService;
|
||||
@Autowired
|
||||
private InHotTrussTask inHotTrussTask;
|
||||
private RedissonClient redissonClient;
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
String requestParam = task.getRequest_param();
|
||||
@@ -59,60 +65,46 @@ public class RawDownAGVTask extends AbstractTask {
|
||||
// 收卷辊库出口
|
||||
String startPointCode = requestObj.getString("start_point_code");
|
||||
// 查找烘箱可用的位置(没货、没锁、没任务、没禁用)
|
||||
List<SchBasePoint> hxPoints = pointService.getHotNotTaskPoint("A1", HX_REGION, "1", "1");
|
||||
List<SchBasePoint> hxPoints = pointService.getHotNotTaskPoint("A1", HX_REGION,
|
||||
"1", "1");
|
||||
if (hxPoints.size() == 0) {
|
||||
throw new BadRequestException("烘箱没有可以用的对接位!");
|
||||
}
|
||||
SchBasePoint hxPoint = hxPoints.get(0);
|
||||
if ("1".equals(flag)) {
|
||||
// 创建四点任务:先到生箔位,在从生箔到烘箱对接位
|
||||
task.setPoint_code1(startPointCode);
|
||||
task.setPoint_code2(deviceCode);
|
||||
task.setPoint_code3(deviceCode);
|
||||
task.setPoint_code4(hxPoint.getPoint_code());
|
||||
} else {
|
||||
// 创建两点任务: 搬运到烘箱位置
|
||||
task.setPoint_code1(deviceCode);
|
||||
task.setPoint_code2(hxPoint.getPoint_code());
|
||||
RLock lock = redissonClient.getLock(hxPoint.getPoint_code());
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
if ("1".equals(flag)) {
|
||||
// 创建四点任务:先去收卷辊出口在到生箔位,在从生箔到烘箱对接位
|
||||
task.setPoint_code1(startPointCode);
|
||||
task.setPoint_code2(deviceCode);
|
||||
task.setPoint_code3(deviceCode);
|
||||
task.setPoint_code4(hxPoint.getPoint_code());
|
||||
} else {
|
||||
// 创建两点任务: 搬运到烘箱位置
|
||||
task.setPoint_code1(deviceCode);
|
||||
task.setPoint_code2(hxPoint.getPoint_code());
|
||||
}
|
||||
// 保存任务参数
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
} else {
|
||||
throw new BadRequestException("系统繁忙,稍后再试!");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
// 保存任务参数
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 任务完成将工单对应的状态设置04, 维护重量信息。触发烘箱桁架任务
|
||||
JSONObject taskParam = new JSONObject();
|
||||
String requestParam = taskObj.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String orderCode = requestObj.getString("order_code");
|
||||
if (ObjectUtil.isNotEmpty(orderCode)) {
|
||||
rawfoilworkorderService.update(new LambdaUpdateWrapper<PdmBiRawfoilworkorder>()
|
||||
.set(PdmBiRawfoilworkorder::getStatus, "04")
|
||||
.eq(PdmBiRawfoilworkorder::getContainer_name, orderCode));
|
||||
log.info("工单修改完毕 - 母卷号 - {}", orderCode);
|
||||
}
|
||||
String hxPointCode = "";
|
||||
// 获取点位
|
||||
if (ObjectUtil.isEmpty(taskObj.getPoint_code3())) {
|
||||
// 取满任务
|
||||
hxPointCode = taskObj.getPoint_code2();
|
||||
} else {
|
||||
// 取满放空任务
|
||||
hxPointCode = taskObj.getPoint_code4();
|
||||
}
|
||||
log.info("开始创建桁架任务入烘箱....");
|
||||
taskParam.put("order_code", orderCode);
|
||||
taskParam.put("up_task_code", taskObj.getTask_code());
|
||||
taskParam.put("device_code", hxPointCode);
|
||||
taskParam.put("config_code", "InHotTrussTask");
|
||||
// 满卷的收卷辊编码放在AGV任务的载具2上
|
||||
taskParam.put("vehicle_code", taskObj.getVehicle_code2());
|
||||
inHotTrussTask.apply(taskParam);
|
||||
// update: 任务完成创建桁架任务改成等待AGV申请
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
@@ -130,4 +122,35 @@ public class RawDownAGVTask extends AbstractTask {
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(JSONObject task, TaskStatus status) {
|
||||
String taskCode = task.getString("task_code");
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(taskCode);
|
||||
BigDecimal weight = task.getBigDecimal("weight");
|
||||
if (ObjectUtil.isNotEmpty(weight)) {
|
||||
// 更新生箔重量
|
||||
JSONObject requestObj = JSONObject.parseObject(taskObj.getRequest_param());
|
||||
String orderCode = requestObj.getString("order_code");
|
||||
PdmBiRawfoilworkorder rawOrder = rawfoilworkorderService.getByContainerName(orderCode);
|
||||
rawOrder.setProductin_qty(weight);
|
||||
TaskUtils.setRawOrderCreateByDefault(rawOrder);
|
||||
rawfoilworkorderService.getById(rawOrder);
|
||||
log.info("ACS请求更新生箔母卷: [{}]重量: [{}]", orderCode, weight);
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setCar_no(task.getString("car_no"));
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.wms.pdm.bi.dao.PdmBiSlittingproductionplan;
|
||||
@@ -60,6 +61,7 @@ public class SlitterDownAGVTask extends AbstractTask {
|
||||
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 分切下料,子卷信息在请求参数中
|
||||
@@ -93,12 +95,7 @@ public class SlitterDownAGVTask extends AbstractTask {
|
||||
}
|
||||
BstIvtCutpointivt endPoint = areaEmptyNotTaskPoint.get(0);
|
||||
RLock lock = redissonClient.getLock(endPoint.getPoint_code());
|
||||
boolean tryLock;
|
||||
try {
|
||||
tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
} catch (InterruptedException e) {
|
||||
throw new BadRequestException("获取锁异常");
|
||||
}
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
task.setPoint_code2(endPoint.getPoint_code());
|
||||
@@ -160,7 +157,7 @@ public class SlitterDownAGVTask extends AbstractTask {
|
||||
.in(PdmBiSlittingproductionplan::getQzzno, qzzNo));
|
||||
}
|
||||
PdmBiSlittingproductionplan demoPlan = list.get(0);
|
||||
// 创建送气胀轴任务
|
||||
// hint: 创建送气胀轴任务
|
||||
JSONObject taskParam = new JSONObject();
|
||||
taskParam.put("up_task_code", taskObj.getTask_code());
|
||||
taskParam.put("config_code", "SendShaftAGVTask");
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
package org.nl.wms.sch.task_manage.tasks.slitter;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.TaskStatus;
|
||||
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
|
||||
import static org.nl.wms.util.TaskUtils.setUpdateByPC;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 分切入烘箱任务
|
||||
* @Date: 2024/8/26
|
||||
*/
|
||||
@Slf4j
|
||||
@Component(value = "SlitterInHotAGVTask")
|
||||
public class SlitterInHotAGVTask extends AbstractTask {
|
||||
private final String THIS_CLASS = SlitterInHotAGVTask.class.getName();
|
||||
private final static String HX_REGION = "A1-HXZC";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 查找烘箱可用的位置(没货、没任务、没禁用)
|
||||
List<SchBasePoint> hxPoints = pointService.getHotNotTaskPoint("A1", HX_REGION,
|
||||
"1", "1");
|
||||
if (hxPoints.size() == 0) {
|
||||
throw new BadRequestException("烘箱没有可以用的对接位!");
|
||||
}
|
||||
SchBasePoint hxPoint = hxPoints.get(0);
|
||||
RLock lock = redissonClient.getLock(hxPoint.getPoint_code());
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
// 搬运到烘箱暂存位置
|
||||
task.setPoint_code2(hxPoint.getPoint_code());
|
||||
// 保存任务参数
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
} else {
|
||||
throw new BadRequestException("系统繁忙,稍后再试!");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// update: 任务完成创建桁架任务改成等待AGV申请
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
checkTaskOptionStatus(taskObj);
|
||||
// 取消
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -70,10 +70,14 @@ public class SlitterSendRollAGVTask extends AbstractTask {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
checkTaskOptionStatus(taskObj);
|
||||
JSONObject requestObj = JSONObject.parseObject(taskObj.getRequest_param());
|
||||
// 起点清除
|
||||
String startPointCode = taskObj.getPoint_code1();
|
||||
StIvtCutpointivt startPoint = cutpointivtService.getOneByCode(startPointCode);
|
||||
if (ObjectUtil.isEmpty(startPoint)) {
|
||||
// todo: 是否改成取货完成上报
|
||||
if (ObjectUtil.isEmpty(startPoint)
|
||||
&& ObjectUtil.isNotEmpty(requestObj.getString("is_flag"))
|
||||
&& "1".equals(requestObj.getString("is_flag"))) {
|
||||
// 如果是生箔就不做操作,只有分切上料位才需要清空数据
|
||||
startPoint.setContainer_name("");
|
||||
startPoint.setFull_point_status("01");
|
||||
|
||||
@@ -101,7 +101,7 @@ public class SlitterUpAGVTask extends AbstractTask {
|
||||
cutPoint.setFull_point_status("02");
|
||||
cutPoint.setContainer_name(order.getContainer_name());
|
||||
cutPoint.setEmpty_vehicle_code("");
|
||||
cutPoint.setEmpty_point_status("01");
|
||||
cutPoint.setEmpty_point_status("02");
|
||||
setCutUpdateByType(cutPoint, taskFinishedType);
|
||||
cutpointivtService.updateById(cutPoint);
|
||||
if (ObjectUtil.isNotEmpty(taskObj.getPoint_code3())) {
|
||||
|
||||
@@ -47,7 +47,7 @@ public class SlitterUpTrussTask extends AbstractTask {
|
||||
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 桁架任务,到对接位。(对接位不作更新。)
|
||||
// 桁架任务,到对接位
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String pointCode = requestObj.getString("zc_point");
|
||||
@@ -94,7 +94,7 @@ public class SlitterUpTrussTask extends AbstractTask {
|
||||
taskParam.put("vehicle_code", taskObj.getVehicle_code());
|
||||
taskParam.put("vehicle_code2", order.getWind_roll());
|
||||
taskParam.put("workorder_id", workorderId);
|
||||
taskParam.put("config_code", "SlitterSendRollTrussTask");
|
||||
taskParam.put("config_code", "SlitterUpAGVTask");
|
||||
taskParam.put("up_task_code", taskObj.getTask_code());
|
||||
taskParam.put("create_mode", GeneralDefinition.TASK_CREATION);
|
||||
slitterUpAGVTask.apply(taskParam);
|
||||
|
||||
Reference in New Issue
Block a user