feat: 生箔->烘箱->分切->内包间变动修改与优化

This commit is contained in:
2024-08-28 17:56:04 +08:00
parent efc856bd23
commit 89947ee04f
33 changed files with 454 additions and 151 deletions

View File

@@ -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("货梯切换状态"),

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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);
// 判断是否呼叫空辊

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -78,4 +78,11 @@ public interface NbjPdaService {
* @return /
*/
JSONObject doBindingGxV2(JSONObject param);
/**
* 清理分切暂存
* @param param /
* @return /
*/
JSONObject toCleanCutCacheInventory(JSONObject param);
}

View File

@@ -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)

View File

@@ -138,6 +138,13 @@ public interface IpdmBiSlittingproductionplanService extends IService<PdmBiSlitt
* @return /
*/
PdmBiSlittingproductionplan getByContainerName(String containerName);
/**
* 通过子卷获取多个分切计划
* @param collect
* @return
*/
List<PdmBiSlittingproductionplan> getByContainerNames(List<String> collect);
}

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -25,7 +25,7 @@ public class StIvtCutpointivtParam extends BaseQuery<StIvtCutpointivt> {
/**
* 库存记录标识
*/
private Long ivt_id;
private String ivt_id;
/**
* 点位编码
*/

View File

@@ -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;

View File

@@ -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,

View File

@@ -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;
}
}

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -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))

View File

@@ -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**/

View File

@@ -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());

View File

@@ -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("烘箱烘烤完毕的暂存位不够!");
}

View File

@@ -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

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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);
}
}
}

View File

@@ -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);

View File

@@ -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"))) {
// 如果是生箔就不做操作,只有分切上料位才需要清空数据

View File

@@ -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

View File

@@ -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());

View File

@@ -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);
}
}
}

View File

@@ -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());
}
}