feat: 生箔->烘箱->分切->内包间变动修改与优化
This commit is contained in:
@@ -17,6 +17,9 @@ public enum TagNameEnum {
|
||||
RAW_DOWN("手持生箔下料"),
|
||||
RAW_EMPTY_HOME("手持生箔空辊回库"),
|
||||
RAW_READY("手持生箔准备就绪"),
|
||||
CUT_UP("手持分切上料"),
|
||||
CUT_UP_CONFIRM("手持分切确认上料"),
|
||||
CUT_EMPTY_BACK("手持空轴送回"),
|
||||
GX_IN("手持管芯入库"),
|
||||
GX_OUT("手持管芯出库"),
|
||||
SWITCH_STATUS_OF_LIFT("货梯切换状态"),
|
||||
|
||||
@@ -68,4 +68,17 @@ public class SlitterPdaController {
|
||||
public ResponseEntity<Object> querySlitterDeviceSubVolumeInfos(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(slitterPdaService.querySlitterDeviceSubVolumeInfos(param), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/devicePointQuery")
|
||||
// @Log("分切子卷维护 - 设备点位查询")
|
||||
public ResponseEntity<Object> devicePointQuery(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(slitterPdaService.devicePointQuery(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/bindSlitterSubVolumeInfo")
|
||||
@Log("绑定分切机上的子卷信息")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> bindSlitterSubVolumeInfo(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(slitterPdaService.bindSlitterSubVolumeInfo(param), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.pda.mps.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
/**
|
||||
@@ -57,4 +58,18 @@ public interface SlitterPdaService {
|
||||
* @return /
|
||||
*/
|
||||
JSONObject querySlitterDeviceSubVolumeInfos(JSONObject param);
|
||||
|
||||
/**
|
||||
* 查询分切机设备上下轴点位
|
||||
* @param param /
|
||||
* @return /
|
||||
*/
|
||||
JSONArray devicePointQuery(JSONObject param);
|
||||
|
||||
/**
|
||||
* 分切子卷维护
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
JSONObject bindSlitterSubVolumeInfo(JSONObject param);
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
|
||||
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
|
||||
import org.nl.wms.pdm.ivt.raw.service.IstIvtSbpointivtService;
|
||||
import org.nl.wms.pdm.ivt.raw.service.dao.StIvtSbpointivt;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
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;
|
||||
@@ -201,6 +200,7 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
|
||||
// 组织请求任务参数
|
||||
// 当前生箔的点位
|
||||
param.put("device_code", pointCode);
|
||||
param.put("workorder_id", rawOrder.getWorkorder_id());
|
||||
param.put("ext_code", sbPoint.getExt_code());
|
||||
param.put("create_mode", GeneralDefinition.PDA_CREATION);
|
||||
// 判断是否呼叫空辊
|
||||
|
||||
@@ -2,11 +2,13 @@ package org.nl.wms.pda.mps.service.impl;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
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.common.exception.BadRequestException;
|
||||
import org.nl.config.lucene.TagNameEnum;
|
||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||
import org.nl.wms.pda.mps.service.SlitterPdaService;
|
||||
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
|
||||
@@ -25,11 +27,14 @@ 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.nl.wms.util.TaskUtils;
|
||||
import org.slf4j.MDC;
|
||||
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.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
@@ -71,9 +76,11 @@ public class SlitterPdaServiceImpl implements SlitterPdaService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject callSlitterRoll(JSONObject param) {
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.CUT_UP.getTag());
|
||||
log.info("手持呼叫母卷:{}", param);
|
||||
// param: workorder_id, zc_point, point_code, vehicle_code
|
||||
// param: workorder_id, zc_point, point_code, vehicle_code, resource_name
|
||||
String workorderId = param.getString("workorder_id");
|
||||
// 分切机满料位
|
||||
String pointCode = param.getString("point_code");
|
||||
@@ -93,8 +100,9 @@ public class SlitterPdaServiceImpl implements SlitterPdaService {
|
||||
param.put("create_mode", GeneralDefinition.PDA_CREATION);
|
||||
// 判断空轴位状态
|
||||
// 标记一下, 0: 只做呼叫母卷,1:呼叫母卷还要送空辊
|
||||
param.put("is_flag", "01".equals(cutPoint.getEmpty_point_status()) ? "0" : "1");
|
||||
param.put("vehicle_code", cutPoint.getEmpty_vehicle_code());
|
||||
param.put("is_flag", "01".equals(cutPoint.getFull_point_status()) ? "0" : "1");
|
||||
param.put("vehicle_code", cutPoint.getFull_vehicle_code());
|
||||
param.put("vehicle_code2", param.getString("resource_name"));
|
||||
slitterUpTrussTask.apply(param);
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("message", "操作成功!");
|
||||
@@ -103,6 +111,7 @@ public class SlitterPdaServiceImpl implements SlitterPdaService {
|
||||
|
||||
@Override
|
||||
public JSONObject allowCoiling(JSONObject param) {
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.CUT_UP_CONFIRM.getTag());
|
||||
log.info("手持分切确认上料, {}", param);
|
||||
// point_code
|
||||
String pointCode = param.getString("point_code");
|
||||
@@ -131,11 +140,12 @@ public class SlitterPdaServiceImpl implements SlitterPdaService {
|
||||
|
||||
@Override
|
||||
public JSONObject vehicleReturn(JSONObject param) {
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.CUT_EMPTY_BACK.getTag());
|
||||
log.info("手持空轴送回, {}", param);
|
||||
// param: point_code
|
||||
String pointCode = param.getString("point_code");
|
||||
StIvtCutpointivt cutPoint = cutpointivtService.getByFullCode(pointCode, false);
|
||||
if ("01".equals(cutPoint.getEmpty_point_status())) {
|
||||
StIvtCutpointivt cutPoint = cutpointivtService.getOneByCode(pointCode);
|
||||
if ("01".equals(cutPoint.getFull_point_status())) {
|
||||
throw new BadRequestException("系统识别到分切上料位[ " + pointCode + " ]无空轴!");
|
||||
}
|
||||
// 校验是否有任务
|
||||
@@ -147,6 +157,7 @@ public class SlitterPdaServiceImpl implements SlitterPdaService {
|
||||
param.put("config_code", "SlitterSendRollAGVTask");
|
||||
// 最后一趟送回去的才需要清
|
||||
param.put("is_flag", "1");
|
||||
param.put("vehicle_code", cutPoint.getFull_vehicle_code());
|
||||
param.put("create_mode", GeneralDefinition.PDA_CREATION);
|
||||
slitterSendRollAGVTask.apply(param);
|
||||
JSONObject result = new JSONObject();
|
||||
@@ -301,4 +312,68 @@ public class SlitterPdaServiceImpl implements SlitterPdaService {
|
||||
data.put("msg", msg);
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONArray devicePointQuery(JSONObject param) {
|
||||
String device_code = param.getString("device_code");
|
||||
if (StrUtil.isEmpty(device_code)) {
|
||||
throw new BadRequestException("输入的设备号不能为空!");
|
||||
}
|
||||
StIvtCutpointivt device = cutpointivtService.getOneByCode(device_code);
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
JSONObject p1 = new JSONObject();
|
||||
p1.put("text", device.getPoint_code() + "上轴位");
|
||||
p1.put("value", device.getUp_point_code());
|
||||
JSONObject p2 = new JSONObject();
|
||||
p2.put("text", device.getPoint_code() + "下轴位");
|
||||
p2.put("value", device.getDown_point_code());
|
||||
jsonArray.add(p1);
|
||||
jsonArray.add(p2);
|
||||
return jsonArray;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject bindSlitterSubVolumeInfo(JSONObject param) {
|
||||
log.info("绑定分切机上的子卷信息:{}", param);
|
||||
// param: point_code, container_name(逗号隔开)
|
||||
// 子卷生成气胀轴编码,设置05状态
|
||||
String containerName = param.getString("container_name");
|
||||
String pointCode1 = param.getString("point_code");
|
||||
if (ObjectUtil.isEmpty(containerName)) {
|
||||
throw new BadRequestException("子卷号不能为空!");
|
||||
}
|
||||
List<String> collect = Arrays.stream(containerName.split(",")).collect(Collectors.toList());
|
||||
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.getByContainerNames(collect);
|
||||
if (plans.size() == 0) {
|
||||
throw new BadRequestException("子卷号:[" + containerName + "] 的分切计划没找到,检查是否推送或者子卷号是否正确!");
|
||||
}
|
||||
PdmBiSlittingproductionplan demoPlan = plans.get(0);
|
||||
String resourceName = demoPlan.getResource_name();
|
||||
String qzzNo = resourceName.substring(0, 2)
|
||||
+ resourceName.substring(resourceName.length() - 2)
|
||||
+ demoPlan.getSplit_group()
|
||||
+ TaskUtils.getDateTime("yyMMddHHmmss") + "-"
|
||||
+ demoPlan.getUp_or_down();
|
||||
if (ObjectUtil.isNotEmpty(demoPlan.getQzzno())) {
|
||||
qzzNo = demoPlan.getQzzno();
|
||||
}
|
||||
for (PdmBiSlittingproductionplan plan : plans) {
|
||||
plan.setQzzno(qzzNo);
|
||||
plan.setStatus("05");
|
||||
TaskUtils.updateOptMessageBySlitterPlan(plan);
|
||||
}
|
||||
slittingproductionplanService.updateBatchById(plans);
|
||||
// 气胀轴编码设置到分切机器上
|
||||
StIvtCutpointivt slitterDevice = cutpointivtService.getPintByUpOrDownCode(pointCode1, false);
|
||||
if (pointCode1.equals(slitterDevice.getUp_point_code())) {
|
||||
slitterDevice.setUp_qzzno(qzzNo);
|
||||
} else {
|
||||
slitterDevice.setDown_qzzno(qzzNo);
|
||||
}
|
||||
cutpointivtService.updateById(slitterDevice);
|
||||
JSONObject res = new JSONObject();
|
||||
res.put("status", cn.hutool.http.HttpStatus.HTTP_OK);
|
||||
res.put("message", "子卷信息绑定成功!");
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,7 +52,8 @@ public class NbjPdaController {
|
||||
|
||||
@PostMapping("/doSubVolumeBindingWeight")
|
||||
@Log("子卷重量维护")
|
||||
public ResponseEntity<Object> doSubVolumeBindingWeight(@RequestBody JSONObject param) {
|
||||
public ResponseEntity<Object>
|
||||
doSubVolumeBindingWeight(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(nbjPdaService.doSubVolumeBindingWeight(param), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@@ -79,4 +80,10 @@ public class NbjPdaController {
|
||||
public ResponseEntity<Object> doSendShaft(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(nbjPdaService.doSendShaft(param), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/toCleanCutCacheInventory")
|
||||
@Log("清除分切暂存")
|
||||
public ResponseEntity<Object> toCleanCutCacheInventory(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(nbjPdaService.toCleanCutCacheInventory(param), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,4 +78,11 @@ public interface NbjPdaService {
|
||||
* @return /
|
||||
*/
|
||||
JSONObject doBindingGxV2(JSONObject param);
|
||||
|
||||
/**
|
||||
* 清理分切暂存
|
||||
* @param param /
|
||||
* @return /
|
||||
*/
|
||||
JSONObject toCleanCutCacheInventory(JSONObject param);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.nl.wms.pda.st.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.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -65,6 +66,8 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
@Autowired
|
||||
private IstIvtCutpointivtService stIvtCutpointivtService;
|
||||
@Autowired
|
||||
private IBstIvtCutpointivtService bcutpointivtService;
|
||||
@Autowired
|
||||
private PointToPointAGVTask pointToPointAGVTask;
|
||||
@Autowired
|
||||
private PdaSendShaftAGVTask pdaSendShaftAGVTask;
|
||||
@@ -119,8 +122,9 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject doSubVolumeDown(JSONObject param) {
|
||||
log.info("手持子卷下线,送到货梯 - {}", param);
|
||||
// point_code, vehicle_code
|
||||
// point_code, vehicle_code, container_name
|
||||
String pointCode = param.getString("point_code");
|
||||
String containerName = param.getString("container_name");
|
||||
String vehicleCode = param.getString("vehicle_code");
|
||||
// 校验任务
|
||||
List<SchBaseTask> schBaseTasks = taskService.checkHaveTask(pointCode);
|
||||
@@ -129,6 +133,8 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
}
|
||||
SchBasePoint startPoint = pointService.getById(pointCode);
|
||||
startPoint.setPoint_status("2");
|
||||
// 子卷号
|
||||
startPoint.setMaterial_code(containerName);
|
||||
startPoint.setVehicle_code(vehicleCode);
|
||||
setUpdateByPC(startPoint);
|
||||
pointService.updateById(startPoint);
|
||||
@@ -136,6 +142,7 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
taskParam.put("device_code", pointCode);
|
||||
// 纸管编码
|
||||
taskParam.put("vehicle_code", vehicleCode);
|
||||
taskParam.put("container_name", containerName);
|
||||
taskParam.put("config_code", "SubRollDownAGVTask");
|
||||
taskParam.put("create_mode", GeneralDefinition.PDA_CREATION);
|
||||
subRollDownAGVTask.apply(taskParam);
|
||||
@@ -148,23 +155,28 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
@Override
|
||||
public JSONObject doSubVolumeBindingWeight(JSONObject param) {
|
||||
log.info("子卷绑定重量 - {}", param);
|
||||
// container_name, weight
|
||||
//container_name: 子卷号, roll_weight: 子卷重量, paper_weight:纸管重量
|
||||
String containerName = param.getString("container_name");
|
||||
String weight = param.getString("weight");
|
||||
Assert.notBlank(containerName, "子卷号不能为空!");
|
||||
String rollWeight = param.getString("roll_weight");
|
||||
String paperWeight = param.getString("paper_weight");
|
||||
PdmBiSlittingproductionplan plan = slittingproductionplanService.getByContainerName(containerName);
|
||||
if (ObjectUtil.isEmpty(plan)) {
|
||||
throw new BadRequestException("子卷号[ " + containerName + " ]分切计划不存在!");
|
||||
}
|
||||
log.info("更新子卷:{} - 重量:{}", containerName, weight);
|
||||
plan.setWeight(weight);
|
||||
plan.setUpdate_time(DateUtil.now());
|
||||
plan.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
plan.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
log.info("更新子卷:{} - 重量:{} - 纸管重量", containerName, rollWeight, paperWeight);
|
||||
if (ObjectUtil.isNotEmpty(rollWeight)) {
|
||||
plan.setWeight(rollWeight);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(paperWeight)) {
|
||||
plan.setPaper_weight(paperWeight);
|
||||
}
|
||||
TaskUtils.updateOptMessageBySlitterPlan(plan);
|
||||
slittingproductionplanService.updateById(plan);
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("status", HttpStatus.OK.value());
|
||||
result.put("message", "子卷绑定重量成功!");
|
||||
return result;
|
||||
JSONObject res = new JSONObject();
|
||||
res.put("status", cn.hutool.http.HttpStatus.HTTP_OK);
|
||||
res.put("message", "重量更新成功!");
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -187,9 +199,9 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
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"))
|
||||
List<PdmBiSlittingproductionplan> planList = rows.toJavaList(PdmBiSlittingproductionplan.class);
|
||||
List<String> orderIds = planList.stream()
|
||||
.map(o -> o.getWorkorder_id())
|
||||
.collect(Collectors.toList());
|
||||
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.getByIds(orderIds);
|
||||
// 当前套轴的分切计划
|
||||
@@ -221,6 +233,29 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject toCleanCutCacheInventory(JSONObject param) {
|
||||
log.info("手持清理分切暂存位参数:{}", param);
|
||||
// param: point_code
|
||||
String pointCode = param.getString("point_code");
|
||||
BstIvtCutpointivt agvCode = bcutpointivtService.getPintByTrussCode(pointCode, false);
|
||||
if (agvCode.getTruss_point_code1().equals(pointCode)) {
|
||||
agvCode.setQzz_no1("");
|
||||
}
|
||||
if (agvCode.getTruss_point_code2().equals(pointCode)) {
|
||||
agvCode.setQzz_no2("");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(agvCode.getQzz_no1()) && ObjectUtil.isEmpty(agvCode.getQzz_no2())) {
|
||||
agvCode.setPoint_status("1");
|
||||
}
|
||||
TaskUtils.updateOptMessageByBCutPoint(agvCode);
|
||||
bcutpointivtService.updateById(agvCode);
|
||||
JSONObject res = new JSONObject();
|
||||
res.put("status", cn.hutool.http.HttpStatus.HTTP_OK);
|
||||
res.put("message", "库存清除成功!");
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
||||
@@ -138,6 +138,13 @@ public interface IpdmBiSlittingproductionplanService extends IService<PdmBiSlitt
|
||||
* @return /
|
||||
*/
|
||||
PdmBiSlittingproductionplan getByContainerName(String containerName);
|
||||
|
||||
/**
|
||||
* 通过子卷获取多个分切计划
|
||||
* @param collect
|
||||
* @return
|
||||
*/
|
||||
List<PdmBiSlittingproductionplan> getByContainerNames(List<String> collect);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -288,5 +288,12 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl<PdmBiSli
|
||||
.eq(PdmBiSlittingproductionplan::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"));
|
||||
return pdmBiSlittingproductionplanMapper.selectOne(lam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PdmBiSlittingproductionplan> getByContainerNames(List<String> collect) {
|
||||
LambdaQueryWrapper<PdmBiSlittingproductionplan> lam = new QueryWrapper<PdmBiSlittingproductionplan>().lambda();
|
||||
lam.in(PdmBiSlittingproductionplan::getContainer_name, collect);
|
||||
return pdmBiSlittingproductionplanMapper.selectList(lam);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -90,6 +90,14 @@ public interface IstIvtCutpointivtService extends IService<StIvtCutpointivt> {
|
||||
* @return /
|
||||
*/
|
||||
StIvtCutpointivt getPintByExtCode(String code, boolean flag);
|
||||
|
||||
/**
|
||||
* 根据点位编码获取分切机上下轴
|
||||
* @param code 点位编码
|
||||
* @param flag 是否判断启用
|
||||
* @return /
|
||||
*/
|
||||
StIvtCutpointivt getPintByUpOrDownCode(String code, boolean flag);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ public class StIvtCutpointivtParam extends BaseQuery<StIvtCutpointivt> {
|
||||
/**
|
||||
* 库存记录标识
|
||||
*/
|
||||
private Long ivt_id;
|
||||
private String ivt_id;
|
||||
/**
|
||||
* 点位编码
|
||||
*/
|
||||
|
||||
@@ -146,6 +146,15 @@ public class StIvtCutpointivtServiceImpl extends ServiceImpl<StIvtCutpointivtMap
|
||||
return stIvtCutpointivtMapper.selectOne(lam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StIvtCutpointivt getPintByUpOrDownCode(String code, boolean flag) {
|
||||
LambdaQueryWrapper<StIvtCutpointivt> lam = new LambdaQueryWrapper<>();
|
||||
lam.eq(flag, StIvtCutpointivt::getIs_used, "1")
|
||||
.and(la -> la.eq(StIvtCutpointivt::getUp_point_code, code).or()
|
||||
.eq(StIvtCutpointivt::getDown_point_code, code));
|
||||
return stIvtCutpointivtMapper.selectOne(lam);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取实体基础信息
|
||||
@@ -154,16 +163,6 @@ public class StIvtCutpointivtServiceImpl extends ServiceImpl<StIvtCutpointivtMap
|
||||
* @param isCreate 是否创建
|
||||
*/
|
||||
private StIvtCutpointivt getBasicInfo(StIvtCutpointivtParam params, boolean isCreate) {
|
||||
// if (isCreate) {
|
||||
// params.setId(IdUtil.getStringId());
|
||||
// params.setCreate_id(Long.valueOf(SecurityUtils.getCurrentUserId()));
|
||||
// params.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
// params.setCreate_time(DateUtil.now());
|
||||
// params.setIs_delete(IOSEnum.IS_NOTANDYES.code("否"));
|
||||
// }
|
||||
// params.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId()));
|
||||
// params.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
// params.setUpdate_time(DateUtil.now());
|
||||
StIvtCutpointivt stIvtCutpointivt = new StIvtCutpointivt();
|
||||
BeanUtils.copyProperties(params, stIvtCutpointivt);
|
||||
return stIvtCutpointivt;
|
||||
|
||||
@@ -12,12 +12,19 @@
|
||||
AND 0 = (SELECT COUNT(*)
|
||||
FROM st_ivt_hotpointivt ht2
|
||||
WHERE ht2.group_name = ht.group_name
|
||||
AND ht2.plan <![CDATA[ <= ]]> ht.plan
|
||||
AND ht2.plan <![CDATA[ <> ]]> ht.plan
|
||||
AND ht2.point_status = '02')
|
||||
AND 0 = (SELECT COUNT(*)
|
||||
FROM sch_base_task t
|
||||
WHERE t.point_code2 = ht.point_code
|
||||
AND t.task_status <![CDATA[ < ]]> '07')
|
||||
AND 0 = (SELECT COUNT(*)
|
||||
FROM sch_base_task t2
|
||||
LEFT JOIN st_ivt_hotpointivt ht3 ON ht3.point_code = t2.point_code2
|
||||
WHERE ht3.plan <![CDATA[ <> ]]> ht.plan
|
||||
AND ht3.group_name = ht.group_name
|
||||
AND ht3.point_status = '01'
|
||||
AND t2.task_status <![CDATA[ < ]]> '07')
|
||||
</select>
|
||||
<select id="getHotDeviceInfoForAcs" resultType="com.alibaba.fastjson.JSONArray">
|
||||
SELECT point_code AS device_code,
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
package org.nl.wms.pdm.ivt.raw.service.dao;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.baomidou.mybatisplus.extension.activerecord.Model;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.extension.activerecord.Model;
|
||||
|
||||
|
||||
/**
|
||||
@@ -21,8 +18,6 @@ import com.baomidou.mybatisplus.extension.activerecord.Model;
|
||||
public class StIvtSbpointivt extends Model<StIvtSbpointivt> {
|
||||
|
||||
private static final long serialVersionUID = -7739291296662381393L;
|
||||
//@TableId(type = IdType.ASSIGN_ID)
|
||||
|
||||
|
||||
/**
|
||||
* 点位标识
|
||||
@@ -76,7 +71,7 @@ public class StIvtSbpointivt extends Model<StIvtSbpointivt> {
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private Long create_id;
|
||||
private String create_id;
|
||||
|
||||
|
||||
/**
|
||||
@@ -95,7 +90,7 @@ public class StIvtSbpointivt extends Model<StIvtSbpointivt> {
|
||||
/**
|
||||
* 修改人
|
||||
*/
|
||||
private Long update_optid;
|
||||
private String update_optid;
|
||||
|
||||
|
||||
/**
|
||||
@@ -123,16 +118,6 @@ public class StIvtSbpointivt extends Model<StIvtSbpointivt> {
|
||||
private String mes_used;
|
||||
|
||||
|
||||
/**
|
||||
* 获取主键值
|
||||
*
|
||||
* @return 主键值
|
||||
*/
|
||||
@Override
|
||||
protected Serializable pkVal() {
|
||||
return this.point_id;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -9,10 +9,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.wms.pdm.ivt.raw.service.dao.StIvtSbpointivt;
|
||||
import org.nl.wms.pdm.ivt.raw.service.dao.mapper.StIvtSbpointivtMapper;
|
||||
import org.nl.wms.pdm.ivt.raw.service.dao.dto.StIvtSbpointivtParam;
|
||||
import org.nl.wms.pdm.ivt.raw.service.IstIvtSbpointivtService;
|
||||
import org.nl.wms.pdm.ivt.raw.service.dao.StIvtSbpointivt;
|
||||
import org.nl.wms.pdm.ivt.raw.service.dao.dto.StIvtSbpointivtParam;
|
||||
import org.nl.wms.pdm.ivt.raw.service.dao.mapper.StIvtSbpointivtMapper;
|
||||
import org.nl.wms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -59,7 +59,6 @@ public class StIvtSbpointivtServiceImpl extends ServiceImpl<StIvtSbpointivtMappe
|
||||
if (whereJson.containsKey("mes_used")) {
|
||||
queryWrapper.eq(StIvtSbpointivt::getMes_used, whereJson.get("mes_used"));
|
||||
}
|
||||
queryWrapper.orderByDesc(StIvtSbpointivt::getPoint_code);
|
||||
return stIvtSbpointivtMapper.selectPage(resultPage, queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ import lombok.EqualsAndHashCode;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @description /
|
||||
* @description 区域表DO
|
||||
* @author lyd
|
||||
* @date 2023-05-16
|
||||
**/
|
||||
@@ -21,47 +21,47 @@ public class SchBaseRegion implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 区域编码 */
|
||||
@TableId(value = "region_code", type = IdType.NONE)
|
||||
|
||||
private String region_code;
|
||||
|
||||
|
||||
/** 区域名称 */
|
||||
private String region_name;
|
||||
|
||||
|
||||
/** 点位类型描述 */
|
||||
private String point_type_explain;
|
||||
|
||||
|
||||
/** 点位状态描述 */
|
||||
private String point_status_explain;
|
||||
|
||||
|
||||
/** 是否有工单 */
|
||||
private Boolean is_has_workder;
|
||||
|
||||
|
||||
/** 车间 */
|
||||
private String workshop_code;
|
||||
|
||||
|
||||
/** 备注 */
|
||||
private String remark;
|
||||
|
||||
|
||||
/** 创建id */
|
||||
private String create_id;
|
||||
|
||||
|
||||
/** 创建名 */
|
||||
private String create_name;
|
||||
|
||||
|
||||
/** 创建时间 */
|
||||
private String create_time;
|
||||
|
||||
|
||||
/** 修改人 */
|
||||
private String update_optid;
|
||||
|
||||
|
||||
/** 修改名 */
|
||||
private String update_optname;
|
||||
|
||||
|
||||
/** 修改时间 */
|
||||
private String update_time;
|
||||
|
||||
|
||||
/** 序号 */
|
||||
private Integer order_seq;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.nl.wms.sch.region.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -54,7 +55,6 @@ public class SchBaseRegionServiceImpl extends ServiceImpl<SchBaseRegionMapper, S
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
|
||||
entity.setCreate_id(currentUserId);
|
||||
entity.setCreate_name(nickName);
|
||||
entity.setCreate_time(now);
|
||||
|
||||
@@ -13,6 +13,7 @@ import org.nl.config.SpringContextHolder;
|
||||
import org.nl.config.language.LangProcess;
|
||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
|
||||
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
|
||||
@@ -224,6 +224,7 @@ public class AcsUtil {
|
||||
}
|
||||
|
||||
String url = acs_url + api;
|
||||
log.info("下发的ACS地址:{}", url);
|
||||
try {
|
||||
String resultMsg = HttpRequest.post(url)
|
||||
.body(String.valueOf(list))
|
||||
|
||||
@@ -31,7 +31,7 @@ public class GeneralDefinition {
|
||||
public static final String ACS_CREATION = "2";
|
||||
/** 手持创建 */
|
||||
public static final String PDA_CREATION = "3";
|
||||
/** 任务完成追加创建 */
|
||||
/** 任务完成创建 */
|
||||
public static final String TASK_CREATION = "4";
|
||||
// 请求方向
|
||||
/**ACS->LMS**/
|
||||
|
||||
@@ -69,7 +69,7 @@ public class InHotTrussTask extends AbstractTask {
|
||||
String orderCode = requestObj.getString("order_code");
|
||||
String flag = "0";
|
||||
PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode);
|
||||
if ("1".equals(order.getIs_baking())) {
|
||||
if (GeneralDefinition.YES.equals(order.getIs_baking())) {
|
||||
String bakingTemperature = order.getBaking_temperature();
|
||||
requestObj.put("temperature", bakingTemperature);
|
||||
requestObj.put("time", order.getBaking_time());
|
||||
@@ -154,7 +154,7 @@ public class InHotTrussTask extends AbstractTask {
|
||||
// 此字段存放工单号
|
||||
hotDjwPoint.setSource_id(order.getWorkorder_id());
|
||||
setUpdateByType(hotDjwPoint, taskFinishedType);
|
||||
pointService.update(hotDjwPoint);
|
||||
pointService.updateById(hotDjwPoint);
|
||||
} else {
|
||||
// 如果是烘箱位, 需要判断是做为暂存,还是说进行暂存,则状态为03:暂存中
|
||||
hotpointivt.setContainer_name(order.getContainer_name());
|
||||
|
||||
@@ -48,7 +48,8 @@ public class OutHotTrussTask extends AbstractTask {
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 从烘箱暂存位找一个空位
|
||||
List<SchBasePoint> hotDjwList = pointService.getHotNotTaskPoint("A1", "A1-HXZC", "4", "1");
|
||||
List<SchBasePoint> hotDjwList = pointService.getHotNotTaskPoint("A1", "A1-HXZC",
|
||||
"4", "1");
|
||||
if (hotDjwList.size() == 0) {
|
||||
throw new BadRequestException("烘箱烘烤完毕的暂存位不够!");
|
||||
}
|
||||
|
||||
@@ -88,10 +88,10 @@ public class SendShaftAGVTask extends AbstractTask {
|
||||
String endPointCode = taskObj.getPoint_code2();
|
||||
BstIvtCutpointivt startPoint = bcutpointivtService.getPintByAgvCode(startPointCode, false);
|
||||
StIvtCutpointivt endPoint = stIvtCutpointivtService.getOneByCode(endPointCode);
|
||||
// 分切计划修改状态:02->03
|
||||
// 分切计划修改状态:02->05
|
||||
List<String> qzzNos = Stream.of(startPoint.getQzz_no1(), startPoint.getQzz_no2()).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
|
||||
LambdaUpdateWrapper<PdmBiSlittingproductionplan> planLam = new LambdaUpdateWrapper<>();
|
||||
planLam.set(PdmBiSlittingproductionplan::getStatus, "03")
|
||||
planLam.set(PdmBiSlittingproductionplan::getStatus, "05")
|
||||
.set(PdmBiSlittingproductionplan::getUpdate_time, DateUtil.now())
|
||||
.in(PdmBiSlittingproductionplan::getQzzno, qzzNos);
|
||||
slittingproductionplanService.update(planLam);
|
||||
@@ -102,6 +102,7 @@ public class SendShaftAGVTask extends AbstractTask {
|
||||
startPoint.setUp_gx2("");
|
||||
startPoint.setDown_gx1("");
|
||||
startPoint.setDown_gx2("");
|
||||
startPoint.setPoint_status("1");
|
||||
PointUtils.setBCutUpdateByType(startPoint, taskFinishedType);
|
||||
bcutpointivtService.updateById(startPoint);
|
||||
// 终点赋值气胀轴编码
|
||||
@@ -109,6 +110,11 @@ public class SendShaftAGVTask extends AbstractTask {
|
||||
endPoint.setDown_qzzno(taskObj.getVehicle_code2());
|
||||
PointUtils.setCutUpdateByType(endPoint, taskFinishedType);
|
||||
stIvtCutpointivtService.updateById(endPoint);
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -49,7 +49,7 @@ public class SubRollDownAGVTask extends AbstractTask {
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 查找空位没任务的货梯
|
||||
// update: 查找空位没任务的货梯 -> 查找一楼暂存位空位
|
||||
List<SchBasePoint> lifts = pointService.getAllBusinessNotTaskPoint("A1", "A1-LIFT-AREA",
|
||||
"1", "1", null, null);
|
||||
if (lifts.size() == 0) {
|
||||
|
||||
@@ -3,6 +3,8 @@ package org.nl.wms.sch.task_manage.tasks.raw;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.wms.pdm.ivt.raw.service.IstIvtSbpointivtService;
|
||||
import org.nl.wms.pdm.ivt.raw.service.dao.StIvtSbpointivt;
|
||||
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;
|
||||
@@ -14,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import static org.nl.wms.util.PointUtils.setSbUpdateByType;
|
||||
import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
|
||||
import static org.nl.wms.util.TaskUtils.setUpdateByPC;
|
||||
|
||||
@@ -29,6 +32,8 @@ public class RawCallRollAGVTask extends AbstractTask {
|
||||
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private IstIvtSbpointivtService sbpointivtService;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
@@ -37,7 +42,6 @@ public class RawCallRollAGVTask extends AbstractTask {
|
||||
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 需要校验是两点任务还是四点任务
|
||||
// up_task_code:上一个任务code
|
||||
// start_point_code:收卷辊库桁架出口
|
||||
String requestParam = task.getRequest_param();
|
||||
@@ -45,6 +49,7 @@ public class RawCallRollAGVTask extends AbstractTask {
|
||||
String startPointCode = requestObj.getString("start_point_code");
|
||||
// 创建任务
|
||||
task.setPoint_code1(startPointCode);
|
||||
task.setPoint_code2(task.getPoint_code2() + "_K");
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
@@ -55,6 +60,11 @@ public class RawCallRollAGVTask extends AbstractTask {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
checkTaskOptionStatus(taskObj);
|
||||
String pointCode2 = taskObj.getPoint_code2();
|
||||
StIvtSbpointivt sbPoint = sbpointivtService.getByPointCode(pointCode2.substring(0, pointCode2.length() - 2), false);
|
||||
sbPoint.setVehicle_code(taskObj.getVehicle_code());
|
||||
setSbUpdateByType(sbPoint, taskFinishedType);
|
||||
sbpointivtService.updateById(sbPoint);
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
|
||||
@@ -22,6 +22,7 @@ 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.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@@ -56,6 +57,7 @@ public class RawDownAGVTask extends AbstractTask {
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
@@ -64,26 +66,26 @@ public class RawDownAGVTask extends AbstractTask {
|
||||
String deviceCode = requestObj.getString("device_code");
|
||||
// 收卷辊库出口
|
||||
String startPointCode = requestObj.getString("start_point_code");
|
||||
// 查找烘箱可用的位置(没货、没锁、没任务、没禁用)
|
||||
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);
|
||||
RLock lock = redissonClient.getLock(HX_REGION);
|
||||
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
// 查找烘箱对接位可用的位置(没货、没任务、没禁用)
|
||||
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_code2(deviceCode + "_K");
|
||||
task.setPoint_code3(deviceCode + "_M");
|
||||
task.setPoint_code4(hxPoint.getPoint_code());
|
||||
} else {
|
||||
// 创建两点任务: 搬运到烘箱位置
|
||||
task.setPoint_code1(deviceCode);
|
||||
task.setPoint_code1(deviceCode + "_M");
|
||||
task.setPoint_code2(hxPoint.getPoint_code());
|
||||
}
|
||||
// 保存任务参数
|
||||
@@ -129,28 +131,36 @@ public class RawDownAGVTask extends AbstractTask {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(taskCode);
|
||||
BigDecimal weight = task.getBigDecimal("weight");
|
||||
JSONObject requestObj = JSONObject.parseObject(taskObj.getRequest_param());
|
||||
String orderCode = requestObj.getString("order_code");
|
||||
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);
|
||||
rawfoilworkorderService.updateById(rawOrder);
|
||||
log.info("ACS请求更新生箔母卷: [{}]重量: [{}]", orderCode, weight);
|
||||
}
|
||||
String carNo = task.getString("car_no");
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
if (TaskStatus.FINISHED.equals(status)) {
|
||||
finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
} else if (TaskStatus.CANCELED.equals(status)) {
|
||||
cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
} else if (TaskStatus.EXECUTING.equals(status) || ObjectUtil.isNotEmpty(carNo)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setCar_no(task.getString("car_no"));
|
||||
taskObj.setCar_no(carNo);
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
if (ObjectUtil.isNotEmpty(carNo)) {
|
||||
// 更新车号到生箔工单
|
||||
PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode);
|
||||
order.setAgvno(carNo);
|
||||
TaskUtils.setRawOrderCreateByDefault(order);
|
||||
rawfoilworkorderService.updateById(order);
|
||||
log.info("ACS请求更新生箔母卷: [{}]车号: [{}]", orderCode, carNo);
|
||||
}
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,6 +144,7 @@ public class SlitterDownAGVTask extends AbstractTask {
|
||||
BstIvtCutpointivt endPoint = bstIvtCutpointivtService.getPintByAgvCode(endPointCode, false);
|
||||
endPoint.setQzz_no1(taskObj.getVehicle_code());
|
||||
endPoint.setQzz_no2(taskObj.getVehicle_code2());
|
||||
endPoint.setPoint_status("3");
|
||||
// 设置管芯编码
|
||||
setGxMaterialInfoToPoint(list, endPoint);
|
||||
setBCutUpdateByType(endPoint, taskFinishedType);
|
||||
|
||||
@@ -75,7 +75,7 @@ public class SlitterSendRollAGVTask extends AbstractTask {
|
||||
String startPointCode = taskObj.getPoint_code1();
|
||||
StIvtCutpointivt startPoint = cutpointivtService.getOneByCode(startPointCode);
|
||||
// todo: 是否改成取货完成上报
|
||||
if (ObjectUtil.isEmpty(startPoint)
|
||||
if (ObjectUtil.isNotEmpty(startPoint)
|
||||
&& ObjectUtil.isNotEmpty(requestObj.getString("is_flag"))
|
||||
&& "1".equals(requestObj.getString("is_flag"))) {
|
||||
// 如果是生箔就不做操作,只有分切上料位才需要清空数据
|
||||
|
||||
@@ -52,38 +52,41 @@ public class SlitterUpAGVTask extends AbstractTask {
|
||||
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String isFlag = requestObj.getString("is_flag");
|
||||
// 分切上料满料对接位
|
||||
String cutPointCode = requestObj.getString("cut_point");
|
||||
// 烘箱暂存对接位
|
||||
String deviceCode = requestObj.getString("device_code");
|
||||
StIvtCutpointivt cutPoint = cutpointivtService.getByFullCode(cutPointCode, false);
|
||||
if ("0".equals(isFlag)) {
|
||||
// 两点任务
|
||||
task.setPoint_code1(deviceCode);
|
||||
task.setPoint_code2(cutPoint.getFull_point_code());
|
||||
} else {
|
||||
// 收卷辊的入库不做校验
|
||||
List<SchBasePoint> sjgPoints = pointService.getPointByConditions("A1", "A1-SJGK",
|
||||
"1", null, null, false);
|
||||
if (sjgPoints.size() == 0) {
|
||||
throw new BadRequestException("收卷辊库找不到入口!");
|
||||
TaskUtils.createTask("A1-SJGK", () -> {
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String isFlag = requestObj.getString("is_flag");
|
||||
// 分切上料满料对接位
|
||||
String cutPointCode = requestObj.getString("cut_point");
|
||||
// 烘箱暂存对接位
|
||||
String deviceCode = requestObj.getString("device_code");
|
||||
StIvtCutpointivt cutPoint = cutpointivtService.getByFullCode(cutPointCode, false);
|
||||
if ("0".equals(isFlag)) {
|
||||
// 两点任务
|
||||
task.setPoint_code1(deviceCode);
|
||||
task.setPoint_code2(cutPoint.getFull_point_code());
|
||||
} else {
|
||||
// 收卷辊的入库不做校验
|
||||
List<SchBasePoint> sjgPoints = pointService.getPointByConditions("A1", "A1-SJGK",
|
||||
"1", null, null, false);
|
||||
if (sjgPoints.size() == 0) {
|
||||
throw new BadRequestException("收卷辊库找不到入口!");
|
||||
}
|
||||
SchBasePoint sjgPoint = sjgPoints.get(0);
|
||||
// 四点任务
|
||||
task.setPoint_code1(deviceCode);
|
||||
task.setPoint_code2(cutPoint.getFull_point_code());
|
||||
task.setPoint_code3(cutPoint.getEmpty_point_code());
|
||||
task.setPoint_code4(sjgPoint.getPoint_code());
|
||||
}
|
||||
SchBasePoint sjgPoint = sjgPoints.get(0);
|
||||
// 四点任务
|
||||
task.setPoint_code1(deviceCode);
|
||||
task.setPoint_code2(cutPoint.getFull_point_code());
|
||||
task.setPoint_code3(cutPoint.getEmpty_point_code());
|
||||
task.setPoint_code4(sjgPoint.getPoint_code());
|
||||
}
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
log.info("任务创建成功:{}", task);
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
log.info("任务创建成功:{}", task);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.nl.wms.sch.task_manage.tasks.slitter;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
|
||||
@@ -14,11 +15,15 @@ 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.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.nl.wms.util.PointUtils.clearPoint;
|
||||
import static org.nl.wms.util.TaskUtils.*;
|
||||
@@ -40,32 +45,47 @@ public class SlitterUpTrussTask extends AbstractTask {
|
||||
private SlitterUpAGVTask slitterUpAGVTask;
|
||||
@Autowired
|
||||
private IpdmBiRawfoilworkorderService rawfoilworkorderService;
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 桁架任务,到对接位
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String pointCode = requestObj.getString("zc_point");
|
||||
// 终点为出口,不校验是否占用
|
||||
List<SchBasePoint> endPoints = pointService.getPointByConditions("A1", "A1-HXZC",
|
||||
"1", null, null, true);
|
||||
if (endPoints.size() == 0) {
|
||||
throw new BadRequestException("烘箱出口查询失败!");
|
||||
RLock lock = redissonClient.getLock("A1-HXZC");
|
||||
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
// 终点为出口
|
||||
List<SchBasePoint> endPoints = pointService.getHotNotTaskPoint("A1", "A1-HXZC",
|
||||
"1", "1");
|
||||
if (endPoints.size() == 0) {
|
||||
throw new BadRequestException("烘箱没有可以用的对接位!");
|
||||
}
|
||||
SchBasePoint point = endPoints.get(0);
|
||||
task.setPoint_code1(pointCode);
|
||||
task.setPoint_code2(point.getPoint_code());
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
log.info("任务创建成功:{}", task);
|
||||
}
|
||||
} finally {
|
||||
if (lock.isHeldByCurrentThread() && lock.isLocked()) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
SchBasePoint point = endPoints.get(0);
|
||||
task.setPoint_code1(pointCode);
|
||||
task.setPoint_code2(point.getPoint_code());
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
log.info("任务创建成功:{}", task);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -92,7 +112,8 @@ public class SlitterUpTrussTask extends AbstractTask {
|
||||
taskParam.put("is_flag", isFlag);
|
||||
// 空轴的编码
|
||||
taskParam.put("vehicle_code", taskObj.getVehicle_code());
|
||||
taskParam.put("vehicle_code2", order.getWind_roll());
|
||||
// 满轴的载具号
|
||||
taskParam.put("vehicle_code2", order.getResource_name());
|
||||
taskParam.put("workorder_id", workorderId);
|
||||
taskParam.put("config_code", "SlitterUpAGVTask");
|
||||
taskParam.put("up_task_code", taskObj.getTask_code());
|
||||
|
||||
@@ -10,6 +10,7 @@ import org.nl.wms.pdm.ivt.cut.service.dao.StIvtCutpointivt;
|
||||
import org.nl.wms.pdm.ivt.hot.service.dao.StIvtHotpointivt;
|
||||
import org.nl.wms.pdm.ivt.hot.service.IstIvtHotpointivtService;
|
||||
import org.nl.wms.pdm.ivt.hot.service.impl.StIvtHotpointivtServiceImpl;
|
||||
import org.nl.wms.pdm.ivt.raw.service.dao.StIvtSbpointivt;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.point.service.impl.SchBasePointServiceImpl;
|
||||
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
@@ -248,4 +249,35 @@ public class PointUtils {
|
||||
setCutUpdateByPC(pointObj);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生箔点位修改更新信息
|
||||
**/
|
||||
public static void setSbUpdateByAcs(StIvtSbpointivt pointObj) {
|
||||
pointObj.setUpdate_optid(GeneralDefinition.ACS_ID);
|
||||
pointObj.setUpdate_optname(GeneralDefinition.ACS_NAME);
|
||||
pointObj.setUpdate_time(DateUtil.now());
|
||||
}
|
||||
|
||||
/**
|
||||
* 生箔位修改更新信息
|
||||
**/
|
||||
public static void setSbUpdateByPC(StIvtSbpointivt pointObj) {
|
||||
pointObj.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
pointObj.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
pointObj.setUpdate_time(DateUtil.now());
|
||||
}
|
||||
|
||||
/**
|
||||
* 生箔赋值点位修改信息,只做赋值不做更新!!!
|
||||
* @param pointObj 点位
|
||||
* @param taskFinishedType 操作类型
|
||||
*/
|
||||
public static void setSbUpdateByType(StIvtSbpointivt pointObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
if (taskFinishedType.equals(TaskFinishedTypeEnum.AUTO_ACS)) {
|
||||
setSbUpdateByAcs(pointObj);
|
||||
} else {
|
||||
setSbUpdateByPC(pointObj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
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.common.utils.SecurityUtils;
|
||||
@@ -17,10 +18,17 @@ 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.TaskStatus;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import org.springframework.transaction.TransactionDefinition;
|
||||
import org.springframework.transaction.TransactionStatus;
|
||||
import org.springframework.transaction.support.DefaultTransactionDefinition;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
@@ -30,6 +38,38 @@ import java.util.List;
|
||||
@Slf4j
|
||||
public class TaskUtils {
|
||||
|
||||
/**
|
||||
* 创建任务
|
||||
* @param region 区域编码
|
||||
* @param function
|
||||
*/
|
||||
@SneakyThrows
|
||||
public static void createTask(String region, Runnable function){
|
||||
RedissonClient redissonClient = SpringContextHolder.getBean(RedissonClient.class);
|
||||
RLock lock = redissonClient.getLock(region);
|
||||
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
PlatformTransactionManager txManager = SpringContextHolder.getBean(PlatformTransactionManager.class);
|
||||
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
|
||||
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
|
||||
TransactionStatus status = txManager.getTransaction(def);
|
||||
|
||||
//执行目标方法
|
||||
function.run();
|
||||
|
||||
txManager.commit(status);
|
||||
} else {
|
||||
throw new BadRequestException("其他设备占用锁,等待结束!");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void setCreateByAcs(SchBaseTask taskObj) {
|
||||
taskObj.setCreate_id(GeneralDefinition.ACS_ID);
|
||||
taskObj.setCreate_name(GeneralDefinition.ACS_NAME);
|
||||
@@ -337,4 +377,14 @@ public class TaskUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 赋值任务的修改时间、人等信息
|
||||
* @param point 任务
|
||||
*/
|
||||
public static void updateOptMessageByBCutPoint(BstIvtCutpointivt point) {
|
||||
point.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
point.setUpdate_optname(SecurityUtils.getCurrentUsername());
|
||||
point.setUpdate_time(DateUtil.now());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user