modified: 生箔下料,出空辊,上烘箱,自动入烘箱业务改动
This commit is contained in:
@@ -16,6 +16,7 @@ import org.apache.lucene.index.IndexWriter;
|
||||
import org.apache.lucene.index.IndexWriterConfig;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.store.FSDirectory;
|
||||
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
@@ -86,8 +87,8 @@ public class LuceneAppender extends AppenderBase<ILoggingEvent> {
|
||||
if (ObjectUtil.isNotEmpty(mdcPropertyMap) && ObjectUtil.isNotEmpty(mdcPropertyMap.get(LogMessageConstant.FIELD_TRACEID))) {
|
||||
String traceId = mdcPropertyMap.get(LogMessageConstant.FIELD_TRACEID);
|
||||
doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, traceId, Field.Store.YES));
|
||||
doc.add(new StringField(LogMessageConstant.FIELD_LABEL, ObjectUtil.isNotEmpty(mdcPropertyMap.get("tag_name"))
|
||||
? mdcPropertyMap.get("tag_name") : "-", Field.Store.YES));
|
||||
doc.add(new StringField(LogMessageConstant.FIELD_LABEL, ObjectUtil.isNotEmpty(mdcPropertyMap.get(GeneralDefinition.MDC_KEY))
|
||||
? mdcPropertyMap.get(GeneralDefinition.MDC_KEY) : "-", Field.Store.YES));
|
||||
}
|
||||
doc.add(new TextField(LogMessageConstant.FIELD_MESSAGE, message, Field.Store.YES));
|
||||
try {
|
||||
|
||||
@@ -14,12 +14,14 @@ public enum TagNameEnum {
|
||||
/**
|
||||
* LMS系统
|
||||
*/
|
||||
LMS("LMS系统"),
|
||||
RAW_DOWN("手持生箔下料"),
|
||||
RAW_READY("手持生箔准备就绪"),
|
||||
GX_IN("手持管芯入库"),
|
||||
GX_OUT("手持管芯出库"),
|
||||
SWITCH_STATUS_OF_LIFT("货梯切换状态"),
|
||||
ERROR_GX_IN_OUT("管芯满入空出异常处理"),
|
||||
AUTO_CALL_EMPTY_BY_CZZC("自动称重暂存位叫空"),
|
||||
AUTO_IN_HOT("自动创建入烘箱"),
|
||||
/**
|
||||
* 标记符号
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.nl.wms.ext.erp.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description:
|
||||
* @Date: 2024/8/22
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/api/erp")
|
||||
@Slf4j
|
||||
@SaIgnore
|
||||
public class ErpToLmsController {
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* ERP交互类
|
||||
*/
|
||||
package org.nl.wms.ext.erp;
|
||||
@@ -0,0 +1,9 @@
|
||||
package org.nl.wms.ext.erp.service;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description:
|
||||
* @Date: 2024/8/22
|
||||
*/
|
||||
public interface ErpToLmsService {
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package org.nl.wms.ext.erp.service;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description:
|
||||
* @Date: 2024/8/22
|
||||
*/
|
||||
public interface LmsToErpService {
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.nl.wms.ext.erp.service.impl;
|
||||
|
||||
import org.nl.wms.ext.erp.service.ErpToLmsService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description:
|
||||
* @Date: 2024/8/22
|
||||
*/
|
||||
@Service
|
||||
public class ErpToLmsServiceImpl implements ErpToLmsService {
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.nl.wms.ext.erp.service.impl;
|
||||
|
||||
import org.nl.wms.ext.erp.service.LmsToErpService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description:
|
||||
* @Date: 2024/8/22
|
||||
*/
|
||||
@Service
|
||||
public class LmsToErpServiceImpl implements LmsToErpService {
|
||||
}
|
||||
@@ -41,9 +41,15 @@ public class RawFoilPdaController {
|
||||
|
||||
@PostMapping("/needEmptyAxis")
|
||||
@Log("生箔下料")
|
||||
public ResponseEntity<Object> needEmptyAxis(@RequestBody JSONObject whereJson) {
|
||||
public ResponseEntity<Object> needEmptyAxisBack(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(rawFoilPdaService.needEmptyAxis(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/needEmptyAxis/v2")
|
||||
@Log("生箔下料")
|
||||
public ResponseEntity<Object> needEmptyAxisV2(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(rawFoilPdaService.needEmptyAxisV2(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/confirmBlanking")
|
||||
@Log("准备就绪")
|
||||
public ResponseEntity<Object> confirmBlanking(@RequestBody JSONObject whereJson) {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.nl.wms.pda.mps.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
/**
|
||||
@@ -31,6 +30,13 @@ public interface RawFoilPdaService {
|
||||
*/
|
||||
JSONObject needEmptyAxis(JSONObject param);
|
||||
|
||||
/**
|
||||
* 生箔下料 2
|
||||
* @param param /
|
||||
* @return /
|
||||
*/
|
||||
JSONObject needEmptyAxisV2(JSONObject param);
|
||||
|
||||
/**
|
||||
* 准备就绪
|
||||
* @param param /
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.pda.mps.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;
|
||||
@@ -8,10 +9,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
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.RawFoilPdaService;
|
||||
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;
|
||||
@@ -19,11 +23,13 @@ import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.tasks.raw.RawCallRollTrussTask;
|
||||
import org.nl.wms.sch.task_manage.tasks.raw.RawDownAGVTask;
|
||||
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.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -46,6 +52,8 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private WmsToAcsService wmsToAcsService;
|
||||
@Autowired
|
||||
IstIvtSbpointivtService stIvtSbpointivtService;
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject needEmptyVehicle(JSONObject param) {
|
||||
@@ -131,7 +139,6 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
|
||||
// 当前生箔的点位
|
||||
param.put("device_code", pointCode);
|
||||
param.put("create_mode", GeneralDefinition.PDA_CREATION);
|
||||
param.put("requestNo", "LMS" + IdUtil.getSnowflake(1,1).nextIdStr());
|
||||
// 判断是否呼叫空辊
|
||||
if (GeneralDefinition.YES.equals(isCallEmpty)) {
|
||||
// 创建桁架任务,之后创建AGV任务需要备注是四点任务
|
||||
@@ -153,8 +160,73 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject needEmptyAxisV2(JSONObject param) {
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.RAW_DOWN.getTag());
|
||||
log.info("手持生箔下料: {}", param);
|
||||
// point_code, order_code, is_call_empty
|
||||
String pointCode = param.getString("point_code");
|
||||
String orderCode = param.getString("order_code");
|
||||
String isCallEmpty = param.getString("is_call_empty");
|
||||
// 判断是否存在任务
|
||||
List<SchBaseTask> unFinishTasks = taskService.checkHaveTask(pointCode);
|
||||
// 判断是否存在对应的桁架任务
|
||||
List<SchBaseTask> unFinishRelatedTasks = taskService.checkHaveRelatedTaskInRequestParam(pointCode);
|
||||
if (unFinishTasks.size() > 0 || unFinishRelatedTasks.size() > 0) {
|
||||
throw new BadRequestException("点位[" + pointCode + "]已经存在任务!");
|
||||
}
|
||||
StIvtSbpointivt sbPoint = stIvtSbpointivtService.getByPointCode(pointCode, true);
|
||||
if (ObjectUtil.isEmpty(sbPoint)) {
|
||||
throw new BadRequestException("生箔位:" + pointCode + " 不存在,请检查是否被锁住!");
|
||||
}
|
||||
// todo: 通过流转卡号到ERP系统查找对应的信息,最后生成工单存到LMS
|
||||
// 创建工单
|
||||
PdmBiRawfoilworkorder rawOrder = new PdmBiRawfoilworkorder();
|
||||
rawOrder.setWorkorder_id(IdUtil.getSnowflake(1,1).nextIdStr());
|
||||
rawOrder.setContainer_name(orderCode);
|
||||
rawOrder.setResource_name(sbPoint.getExt_code());
|
||||
rawOrder.setMfg_order_name("$$$$");
|
||||
rawOrder.setProduct_name("锂电");
|
||||
rawOrder.setDescription("锂电");
|
||||
rawOrder.setTheory_height(BigDecimal.valueOf(2000));
|
||||
rawOrder.setUp_coiler_date(DateUtil.now());
|
||||
rawOrder.setStatus("01");
|
||||
TaskUtils.setRawOrderCreateByDefault(rawOrder);
|
||||
rawOrder.setProduct_area(sbPoint.getProduct_area());
|
||||
rawOrder.setIs_baking("0");
|
||||
rawOrder.setOrder_type("1");
|
||||
rawOrder.setBaking_time("80");
|
||||
rawOrder.setRoll_type("1");
|
||||
rawOrder.setBaking_temperature("80");
|
||||
rawfoilworkorderService.save(rawOrder);
|
||||
// 组织请求任务参数
|
||||
// 当前生箔的点位
|
||||
param.put("device_code", pointCode);
|
||||
param.put("ext_code", sbPoint.getExt_code());
|
||||
param.put("create_mode", GeneralDefinition.PDA_CREATION);
|
||||
// 判断是否呼叫空辊
|
||||
if (GeneralDefinition.YES.equals(isCallEmpty)) {
|
||||
// 创建桁架任务,之后创建AGV任务需要备注是四点任务
|
||||
param.put("config_code", "RawCallRollTrussTask");
|
||||
param.put("is_flag", "1");
|
||||
rawCallRollTrussTask.apply(param);
|
||||
} else {
|
||||
// 创建AGV任务,直接到烘箱的任务
|
||||
param.put("config_code", "RawDownAGVTask");
|
||||
param.put("is_flag", "0");
|
||||
rawDownAGVTask.apply(param);
|
||||
}
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("status", HttpStatus.OK.value());
|
||||
result.put("message", "任务创建成功!");
|
||||
result.put("data", new JSONObject());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject confirmBlanking(JSONObject param) {
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.RAW_READY.getTag());
|
||||
log.info("手持生箔准备就绪, {}", param);
|
||||
// param: point_code
|
||||
String pointCode = param.getString("point_code");
|
||||
@@ -171,12 +243,12 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
|
||||
}
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String workorderId = requestObj.getString("workorder_id");
|
||||
if (ObjectUtil.isNotEmpty(workorderId)) {
|
||||
String orderCode = requestObj.getString("order_code");
|
||||
if (ObjectUtil.isNotEmpty(orderCode)) {
|
||||
rawfoilworkorderService.update(new LambdaUpdateWrapper<PdmBiRawfoilworkorder>()
|
||||
.set(PdmBiRawfoilworkorder::getStatus, "03")
|
||||
.eq(PdmBiRawfoilworkorder::getWorkorder_id, workorderId));
|
||||
log.info("工单修改完毕 - 工单标识 - {}", workorderId);
|
||||
.eq(PdmBiRawfoilworkorder::getContainer_name, orderCode));
|
||||
log.info("工单修改完毕 - 工单标识 - {}", orderCode);
|
||||
}
|
||||
//下发ACS,执行AGV动作
|
||||
JSONArray paramArr = new JSONArray();
|
||||
@@ -184,7 +256,7 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
|
||||
acsParam.put("device_code", pointCode);
|
||||
acsParam.put("task_code", task.getTask_code());
|
||||
acsParam.put("product_area", task.getProduct_area());
|
||||
acsParam.put("option", "1");
|
||||
acsParam.put("option", "2");
|
||||
paramArr.add(acsParam);
|
||||
JSONObject jsonObject = wmsToAcsService.updateTask(paramArr);
|
||||
log.info("生箔下发ACS,执行AGV动作,请求参数{},返回结果:{}", paramArr, jsonObject);
|
||||
|
||||
@@ -25,6 +25,11 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
public class OtherPdaController {
|
||||
@Autowired
|
||||
private OtherPdaService otherPdaService;
|
||||
@PostMapping("/startMoveWasteFoil/v2")
|
||||
@Log("开始搬运废箔信息")
|
||||
public ResponseEntity<Object> startMoveWasteFoilV2(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(otherPdaService.startMoveWasteFoilV2(param), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/startMoveWasteFoil")
|
||||
@Log("开始搬运废箔信息")
|
||||
public ResponseEntity<Object> startMoveWasteFoil(@RequestBody JSONObject param) {
|
||||
|
||||
@@ -8,6 +8,12 @@ import com.alibaba.fastjson.JSONObject;
|
||||
* @Date: 2024/8/14
|
||||
*/
|
||||
public interface OtherPdaService {
|
||||
/**
|
||||
* 开始搬运废箔 2
|
||||
* @param param /
|
||||
* @return /
|
||||
*/
|
||||
JSONObject startMoveWasteFoilV2(JSONObject param);
|
||||
/**
|
||||
* 开始搬运废箔
|
||||
* @param param /
|
||||
|
||||
@@ -70,7 +70,7 @@ public class GxPdaServiceImpl implements GxPdaService {
|
||||
@Deprecated
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject confirmedInStorage(JSONObject param) {
|
||||
MDC.put("tag_name", TagNameEnum.GX_IN.getTag());
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.GX_IN.getTag());
|
||||
log.info("手持确认管芯入库 - {}", param);
|
||||
// row: gx_code, material_code, material_spec
|
||||
// 将每一根存到物料表中,并且创建任务
|
||||
@@ -138,7 +138,7 @@ public class GxPdaServiceImpl implements GxPdaService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject confirmedInStorageV2(JSONObject param) {
|
||||
MDC.put("tag_name", TagNameEnum.GX_IN.getTag());
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.GX_IN.getTag());
|
||||
log.info("手持确认管芯入库 - {}", param);
|
||||
// 获取管芯库入口
|
||||
List<SchBasePoint> gxRks = pointService.getPointByConditions("A1", "A1-GXK",
|
||||
@@ -207,7 +207,7 @@ public class GxPdaServiceImpl implements GxPdaService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject confirmedOutStorage(JSONObject param) {
|
||||
MDC.put("tag_name", TagNameEnum.GX_OUT.getTag());
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.GX_OUT.getTag());
|
||||
log.info("手持操作管芯出库 - {}", param);
|
||||
// param: number, material_code, material_spec
|
||||
int number = param.getInteger("number");
|
||||
@@ -238,7 +238,7 @@ public class GxPdaServiceImpl implements GxPdaService {
|
||||
for (int i = 0; i < number; i++) {
|
||||
// 由任务完成来清除点位
|
||||
SchBasePoint point = allPoint.get(i);
|
||||
// 查找点位最终一次性发给ACS
|
||||
// 查找点位发给ACS
|
||||
JSONObject taskParam = new JSONObject();
|
||||
taskParam.put("product_area", URLEnum.ACS_URL_A1.getProduct_area());
|
||||
taskParam.put("point_code1", point.getPoint_code());
|
||||
|
||||
@@ -70,7 +70,7 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
private PdaSendShaftAGVTask pdaSendShaftAGVTask;
|
||||
@Override
|
||||
public JSONObject changeLiftStatus(JSONObject param) {
|
||||
MDC.put("tag_name", TagNameEnum.SWITCH_STATUS_OF_LIFT.getTag());
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.SWITCH_STATUS_OF_LIFT.getTag());
|
||||
log.info("货梯切换状态 - {}", param);
|
||||
// type: 1: 清空, 2:放空架子, point_code
|
||||
String type = param.getString("type");
|
||||
|
||||
@@ -43,6 +43,14 @@ public class OtherPdaServiceImpl implements OtherPdaService {
|
||||
private SlitterSendRollTrussTask slitterSendRollTrussTask;
|
||||
@Autowired
|
||||
private WmsToAcsService wmsToAcsService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject startMoveWasteFoilV2(JSONObject param) {
|
||||
log.info("手持开始搬运废箔 - {}", param);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject startMoveWasteFoil(JSONObject param) {
|
||||
|
||||
@@ -86,6 +86,13 @@ public interface IpdmBiRawfoilworkorderService extends IService<PdmBiRawfoilwork
|
||||
* @return /
|
||||
*/
|
||||
List<PdmBiRawfoilworkorder> getAllUsedRawPlanOnZc();
|
||||
|
||||
/**
|
||||
* 母卷号唯一,通过母卷号获取生箔工单
|
||||
* @param code /
|
||||
* @return /
|
||||
*/
|
||||
PdmBiRawfoilworkorder getByContainerName(String code);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ public class PdmBiRawfoilworkorderServiceImpl extends ServiceImpl<PdmBiRawfoilwo
|
||||
*/
|
||||
@Override
|
||||
public IPage<PdmBiRawfoilworkorder> query(Map whereJson, PageQuery page) {
|
||||
IPage<PdmBiRawfoilworkorder> resultPage = new Page<>(page.getPage(), page.getSize());
|
||||
IPage<PdmBiRawfoilworkorder> resultPage = new Page<>(page.getPage() + 1, page.getSize());
|
||||
LambdaQueryWrapper<PdmBiRawfoilworkorder> queryWrapper = new LambdaQueryWrapper<>();
|
||||
if (whereJson.containsKey("product_area")) {
|
||||
queryWrapper.eq(PdmBiRawfoilworkorder::getProduct_area, whereJson.get("product_area"));
|
||||
@@ -91,7 +91,7 @@ public class PdmBiRawfoilworkorderServiceImpl extends ServiceImpl<PdmBiRawfoilwo
|
||||
if (whereJson.containsKey("end_time")) {
|
||||
queryWrapper.le(PdmBiRawfoilworkorder::getCreate_time, whereJson.get("end_time"));
|
||||
}
|
||||
if (whereJson.containsKey("statusX") && "1".equals(whereJson.get("statusX"))) {
|
||||
if (ObjectUtil.isNotEmpty(whereJson.get("statusX")) && "1".equals(whereJson.get("statusX"))) {
|
||||
queryWrapper.ne(PdmBiRawfoilworkorder::getStatus, "09");
|
||||
queryWrapper.eq(ObjectUtil.isNotEmpty(whereJson.get("material_spec")),
|
||||
PdmBiRawfoilworkorder::getWind_roll, whereJson.get("material_spec"));
|
||||
@@ -256,5 +256,13 @@ public class PdmBiRawfoilworkorderServiceImpl extends ServiceImpl<PdmBiRawfoilwo
|
||||
return pdmBiRawfoilworkorderMapper.getAllUsedRawPlanOnZc();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdmBiRawfoilworkorder getByContainerName(String code) {
|
||||
LambdaQueryWrapper<PdmBiRawfoilworkorder> lam = new LambdaQueryWrapper<>();
|
||||
lam.eq(PdmBiRawfoilworkorder::getContainer_name, code)
|
||||
.eq(PdmBiRawfoilworkorder::getIs_delete, false);
|
||||
return this.getOne(lam);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ public class StIvtCutpointivtServiceImpl extends ServiceImpl<StIvtCutpointivtMap
|
||||
*/
|
||||
@Override
|
||||
public IPage<StIvtCutpointivt> query(Map whereJson, PageQuery page) {
|
||||
IPage<StIvtCutpointivt> resultPage = new Page<>(page.getPage(), page.getSize());
|
||||
IPage<StIvtCutpointivt> resultPage = new Page<>(page.getPage() + 1, page.getSize());
|
||||
LambdaQueryWrapper<StIvtCutpointivt> queryWrapper = new LambdaQueryWrapper<>();
|
||||
// if (whereJson.containsKey("name")) {
|
||||
// queryWrapper.like(StIvtCutpointivt::getName, whereJson.get("name"));
|
||||
|
||||
@@ -83,6 +83,12 @@ public interface IstIvtHotpointivtService extends IService<StIvtHotpointivt> {
|
||||
* @return /
|
||||
*/
|
||||
StIvtHotpointivt getPointByCode(String pointCode, boolean flag);
|
||||
|
||||
/**
|
||||
* 获取需要烘烤的点位
|
||||
* @return /
|
||||
*/
|
||||
List<StIvtHotpointivt> getNeedBakingPoint();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -18,4 +18,6 @@ public interface StIvtHotpointivtMapper extends BaseMapper<StIvtHotpointivt> {
|
||||
List<StIvtHotpointivt> getNotTaskHotOven(String rollType, String used);
|
||||
|
||||
JSONArray getHotDeviceInfoForAcs(String productArea);
|
||||
|
||||
List<StIvtHotpointivt> getNeedBakingPoint();
|
||||
}
|
||||
|
||||
@@ -26,4 +26,14 @@
|
||||
WHERE is_used = '1'
|
||||
AND ivt.product_area = #{productArea}
|
||||
</select>
|
||||
<select id="getNeedBakingPoint" resultType="org.nl.wms.pdm.ivt.hot.service.dao.StIvtHotpointivt">
|
||||
SELECT
|
||||
hot.*
|
||||
FROM
|
||||
`st_ivt_hotpointivt` hot
|
||||
LEFT JOIN pdm_bi_rawfoilworkorder raw ON hot.workorder_id = raw.workorder_id
|
||||
WHERE
|
||||
raw.is_baking = '1' AND hot.point_status = '03'
|
||||
ORDER BY hot.update_time
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -132,6 +132,11 @@ public class StIvtHotpointivtServiceImpl extends ServiceImpl<StIvtHotpointivtMap
|
||||
return getOne(lam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StIvtHotpointivt> getNeedBakingPoint() {
|
||||
return stIvtHotpointivtMapper.getNeedBakingPoint();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取实体基础信息
|
||||
|
||||
@@ -26,7 +26,7 @@ public class AutoCallEmptyToWeighTemp {
|
||||
@Autowired
|
||||
private CzzcCallEmptyAGVTask czzcCallEmptyAGVTask;
|
||||
public void run() {
|
||||
MDC.put("tag_name", TagNameEnum.AUTO_CALL_EMPTY_BY_CZZC.getTag());
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.AUTO_CALL_EMPTY_BY_CZZC.getTag());
|
||||
log.info("称重暂存位叫空自动任务开始执行...");
|
||||
List<SchBasePoint> allZcPoints = pointService.getAllBusinessNotTaskPoint("A1", "A1-CZZC",
|
||||
"1", "1", null, null);
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
package org.nl.wms.quartz;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.config.lucene.TagNameEnum;
|
||||
import org.nl.wms.pdm.ivt.hot.service.IstIvtHotpointivtService;
|
||||
import org.nl.wms.pdm.ivt.hot.service.dao.StIvtHotpointivt;
|
||||
import org.nl.wms.quartz.dto.NeedBakingDto;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.tasks.hot.AutoInHotTrussTask;
|
||||
import org.slf4j.MDC;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Date: 2024/8/23
|
||||
* @Description: 自动入烘箱任务
|
||||
* @see AutoInHotTrussTask
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class AutoCreateInHotTask {
|
||||
private final static String HX_REGION = "A1-HXZC";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private IstIvtHotpointivtService hotpointivtService;
|
||||
@Autowired
|
||||
private AutoInHotTrussTask autoInHotTrussTask;
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void run() {
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.AUTO_IN_HOT.getTag());
|
||||
log.info("自动创建入烘箱任务开始执行...");
|
||||
// 获取烘箱暂存位点位状态是2:待烘烤,没任务的点位
|
||||
List<SchBasePoint> hotNotTaskPoints = pointService.getHotNotTaskPoint("A1", HX_REGION,
|
||||
null, "2");
|
||||
log.info("找到待烘烤的暂存位:{}", hotNotTaskPoints);
|
||||
// 获取烘箱点位状态是暂存且需要烘烤的点位数据。
|
||||
List<StIvtHotpointivt> hotPoints = hotpointivtService.getNeedBakingPoint();
|
||||
log.info("找到待烘烤的烘箱位:{}", hotPoints);
|
||||
// 合并一起
|
||||
List<NeedBakingDto> collect1 = hotNotTaskPoints.stream().map(item -> NeedBakingDto
|
||||
.builder()
|
||||
.point_code(item.getPoint_code())
|
||||
.workorder_id(item.getSource_id())
|
||||
.update_time(item.getUpdate_time()).build()).collect(Collectors.toList());
|
||||
List<NeedBakingDto> collect2 = hotPoints.stream().map(item -> NeedBakingDto
|
||||
.builder()
|
||||
.point_code(item.getPoint_code())
|
||||
.workorder_id(item.getWorkorder_id())
|
||||
.update_time(item.getUpdate_time()).build()).collect(Collectors.toList());
|
||||
List<NeedBakingDto> combinedList = new ArrayList<>();
|
||||
combinedList.addAll(collect1);
|
||||
combinedList.addAll(collect2);
|
||||
combinedList.sort(Comparator.comparing(NeedBakingDto::getUpdate_time));
|
||||
log.info("排序后的数据 {}", combinedList);
|
||||
// 调用自动入烘箱的任务
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("intoPoints", combinedList);
|
||||
autoInHotTrussTask.createTask(param);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.nl.wms.quartz.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 需要烘烤的实体
|
||||
* <p>使用此对象的原因是,两张不同的点位,需要放在一起。</p>
|
||||
* @Date: 2024/8/23
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class NeedBakingDto {
|
||||
private String point_code;
|
||||
private String workorder_id;
|
||||
private String update_time;
|
||||
}
|
||||
@@ -111,4 +111,11 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
|
||||
*/
|
||||
List<SchBasePoint> getAllBusinessNotTaskPoint(String area, String region, String pointType,
|
||||
String pointStatus, String vehicleType, String vehicleCode);
|
||||
|
||||
/**
|
||||
* 获取收卷没任务、生箔机指定的收卷的点位
|
||||
* @param code
|
||||
* @return
|
||||
*/
|
||||
List<SchBasePoint> getWindRollConformRawNotTaskPoints(String code);
|
||||
}
|
||||
|
||||
@@ -20,10 +20,10 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
|
||||
|
||||
/**
|
||||
* 获取指定载具类型,并没有任务的收卷辊点位
|
||||
* @param vehicleType 载具类型
|
||||
* @param vehicleCode 载具编码
|
||||
* @return /
|
||||
*/
|
||||
List<SchBasePoint> getWindRollNotTaskPoints(String vehicleType);
|
||||
List<SchBasePoint> getWindRollNotTaskPoints(String vehicleCode);
|
||||
|
||||
/**
|
||||
* 获取烘箱可用点位
|
||||
@@ -37,4 +37,11 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
|
||||
|
||||
List<SchBasePoint> getAllBusinessNotTaskPoint(String area, String region, String pointType, String pointStatus,
|
||||
String vehicleType, String vehicleCode);
|
||||
|
||||
/**
|
||||
* 获取收卷没任务、生箔机指定的收卷的点位
|
||||
* @param code /
|
||||
* @return /
|
||||
*/
|
||||
List<SchBasePoint> getWindRollConformRawNotTaskPoints(String code);
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
AND p.point_type = '3'
|
||||
AND p.point_status = '2'
|
||||
AND p.region_code = 'A1-SJGK'
|
||||
AND p.vehicle_type = #{vehicleType}
|
||||
AND p.vehicle_code = #{vehicleCode}
|
||||
AND p.is_used = TRUE
|
||||
AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.point_code1 = p.point_code AND t.task_status <![CDATA[<]]> '07')
|
||||
ORDER BY p.update_time
|
||||
@@ -64,4 +64,20 @@
|
||||
OR t.point_code4 = p.point_code))
|
||||
ORDER BY p.in_order_seq, p.update_time
|
||||
</select>
|
||||
<select id="getWindRollConformRawNotTaskPoints" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
|
||||
SELECT
|
||||
p.*
|
||||
FROM
|
||||
sch_base_point p
|
||||
WHERE
|
||||
p.product_area = 'A1'
|
||||
AND p.point_type = '3'
|
||||
AND p.point_status = '2'
|
||||
AND p.region_code = 'A1-SJGK'
|
||||
AND (SELECT sb.can_vehicle FROM st_ivt_sbpointivt sb WHERE sb.point_code = #{code}) LIKE CONCAT('%', p.vehicle_code, '%')
|
||||
AND p.is_used = TRUE
|
||||
AND 0 = ( SELECT COUNT(*) FROM sch_base_task t WHERE t.point_code1 = p.point_code AND t.task_status <![CDATA[<]]> '07' )
|
||||
ORDER BY
|
||||
p.update_time
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -237,4 +237,9 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
return pointMapper.getAllBusinessNotTaskPoint(area, region, pointType, pointStatus, vehicleType, vehicleCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SchBasePoint> getWindRollConformRawNotTaskPoints(String code) {
|
||||
return pointMapper.getWindRollConformRawNotTaskPoints(code);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -145,6 +145,10 @@ public class SchBaseTask implements Serializable {
|
||||
@TableField(exist = false)
|
||||
private String dtl_type;
|
||||
|
||||
/** 重量 */
|
||||
@TableField(exist = false)
|
||||
private String weight;
|
||||
|
||||
private String material_code;
|
||||
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@ package org.nl.wms.sch.task_manage.core.constant;
|
||||
* @Date: 2023/7/13
|
||||
*/
|
||||
public class GeneralDefinition {
|
||||
/** 日志分配MDC的key */
|
||||
public static final String MDC_KEY = "tag_name";
|
||||
/** 未知 */
|
||||
public static final String UNKNOWN = "-";
|
||||
// 是否
|
||||
|
||||
@@ -8,6 +8,7 @@ import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.config.lucene.TagNameEnum;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.service.NbjOperationService;
|
||||
import org.slf4j.MDC;
|
||||
@@ -34,7 +35,7 @@ public class NbjOperationServiceImpl implements NbjOperationService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject tubeExceptionHandling(JSONObject param) {
|
||||
MDC.put("tag_name", TagNameEnum.ERROR_GX_IN_OUT.getTag());
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.ERROR_GX_IN_OUT.getTag());
|
||||
log.info("ACS请求满入/空出异常处理 - {}", param);
|
||||
// type: 1满入,2空出、device_code: 异常点位
|
||||
String type = param.getString("type");
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
package org.nl.wms.sch.task_manage.tasks.auto;
|
||||
package org.nl.wms.sch.task_manage.tasks.hot;
|
||||
|
||||
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;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
@@ -11,6 +12,7 @@ import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
|
||||
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
|
||||
import org.nl.wms.pdm.ivt.hot.service.dao.StIvtHotpointivt;
|
||||
import org.nl.wms.pdm.ivt.hot.service.IstIvtHotpointivtService;
|
||||
import org.nl.wms.quartz.dto.NeedBakingDto;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
@@ -22,7 +24,6 @@ import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -32,7 +33,8 @@ import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 自动创建入烘箱任务 (统一调度执行,不合适则换定时任务)
|
||||
* @Description: 自动创建入烘箱任务
|
||||
* <p>通过定时任务 {@link org.nl.wms.quartz.AutoCreateInHotTask} 调用此类</p>
|
||||
* @Date: 2024/8/9
|
||||
*/
|
||||
@Slf4j
|
||||
@@ -54,20 +56,18 @@ public class AutoInHotTrussTask extends AbstractTask {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
protected void autoCreate() {
|
||||
// 自动创建
|
||||
log.info("自动创建入烘箱的任务...");
|
||||
// 获取烘箱暂存位点位状态是2:待烘烤,没任务的点位
|
||||
List<SchBasePoint> hotNotTaskPoint = pointService.getHotNotTaskPoint("A1", HX_REGION, null, "2");
|
||||
log.info("找到待烘烤的暂存位:{}", hotNotTaskPoint);
|
||||
for (SchBasePoint hotPoint : hotNotTaskPoint) {
|
||||
public String createTask(JSONObject form) {
|
||||
// 创建任务
|
||||
JSONArray intoPoints = form.getJSONArray("intoPoints");
|
||||
List<NeedBakingDto> needBakingDtos = intoPoints.toJavaList(NeedBakingDto.class);
|
||||
for (NeedBakingDto bakingDto : needBakingDtos) {
|
||||
log.info("当前准备入烘箱点位:{}", bakingDto.getPoint_code());
|
||||
try {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
// 查找可用的烘箱
|
||||
String workOrderId = hotPoint.getGroup_id();
|
||||
String workOrderId = bakingDto.getWorkorder_id();
|
||||
if (ObjectUtil.isEmpty(workOrderId)) {
|
||||
log.error("点位{}的工单号为空!", hotPoint.getPoint_code());
|
||||
log.error("点位{}的工单号为空!", bakingDto.getPoint_code());
|
||||
break;
|
||||
}
|
||||
PdmBiRawfoilworkorder order = rawfoilworkorderService.getById(workOrderId);
|
||||
@@ -94,12 +94,11 @@ public class AutoInHotTrussTask extends AbstractTask {
|
||||
}
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("workorder_id", workOrderId);
|
||||
task.setPoint_code1(hotPoint.getPoint_code());
|
||||
task.setPoint_code1(bakingDto.getPoint_code());
|
||||
task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.setConfig_code("AutoInHotTrussTask");
|
||||
task.setCreate_mode(GeneralDefinition.AUTO_CREATION);
|
||||
task.setVehicle_code(hotPoint.getVehicle_code());
|
||||
task.setRequest_param(JSONObject.toJSONString(param));
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
task.setHandle_status(THIS_CLASS);
|
||||
@@ -109,7 +108,7 @@ public class AutoInHotTrussTask extends AbstractTask {
|
||||
log.error("自动创建入烘箱的任务执行异常:{}", e);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.nl.wms.sch.task_manage.tasks.auto;
|
||||
package org.nl.wms.sch.task_manage.tasks.hot;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
@@ -6,7 +6,6 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.nl.wms.sch.task_manage.tasks.hot.OutHotTrussTask;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
@@ -33,7 +33,7 @@ import static org.nl.wms.util.PointUtils.setHxUpdateByType;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 入烘箱的任务类
|
||||
* @Description: 入烘箱的任务类 todo: 需要修改
|
||||
* @Date: 2024/8/8
|
||||
*/
|
||||
@Slf4j
|
||||
@@ -66,11 +66,13 @@ public class InHotTrussTask extends AbstractTask {
|
||||
// 查找烘箱同大卷小卷
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String workorderId = requestObj.getString("workorder_id");
|
||||
String orderCode = requestObj.getString("order_code");
|
||||
String flag = "0";
|
||||
PdmBiRawfoilworkorder order = rawfoilworkorderService.getById(workorderId);
|
||||
PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode);
|
||||
if ("1".equals(order.getIs_baking())) {
|
||||
String bakingTemperature = order.getBaking_temperature();
|
||||
requestObj.put("temperature", bakingTemperature);
|
||||
requestObj.put("time", order.getBaking_time());
|
||||
// 如果需要烘烤, 先找对应点
|
||||
List<StIvtHotpointivt> hotList = hotpointivtService.getNotTaskHotOven(order.getRoll_type(), "1");
|
||||
if (hotList.size() > 0) {
|
||||
@@ -92,15 +94,18 @@ public class InHotTrussTask extends AbstractTask {
|
||||
// 没有烘烤位置或者没有找到对应的点就区待烘烤区, 就去待烘烤
|
||||
if (hotList.size() == 0 || ObjectUtil.isEmpty(task.getPoint_code2())) {
|
||||
// 找不到就去找暂存区(待烘烤区)
|
||||
List<SchBasePoint> hotDjwList = pointService.getHotNotTaskPoint("A1", HX_REGION, "2", "1");
|
||||
List<SchBasePoint> hotDjwList = pointService.getHotNotTaskPoint("A1", HX_REGION,
|
||||
"2", "1");
|
||||
if (hotDjwList.size() > 0) {
|
||||
SchBasePoint point = hotDjwList.get(0);
|
||||
task.setPoint_code2(point.getPoint_code());
|
||||
}
|
||||
}
|
||||
// todo: 需要烘烤,且是小卷,但是没有位置,需要将最快结束的烘箱组锁住
|
||||
} else {
|
||||
// 不需要烘烤,则送到暂存区(无需烘烤区 - 任务做完需要将点位设置为待分切)
|
||||
List<SchBasePoint> hotDjwList = pointService.getHotNotTaskPoint("A1", HX_REGION, "3", "1");
|
||||
List<SchBasePoint> hotDjwList = pointService.getHotNotTaskPoint("A1", HX_REGION,
|
||||
"3", "1");
|
||||
if (hotDjwList.size() > 0) {
|
||||
SchBasePoint point = hotDjwList.get(0);
|
||||
task.setPoint_code2(point.getPoint_code());
|
||||
@@ -108,9 +113,10 @@ public class InHotTrussTask extends AbstractTask {
|
||||
|
||||
}
|
||||
// 如果都没有位置, 就去未开启的烘箱的空位,也是区分大小卷
|
||||
// todo: (有可能是待烘烤、也有可能是不需要烘烤做为暂存)
|
||||
// todo: (有可能是待烘烤、也有可能是不需要烘烤做为暂存, 目前是判断未使用的点位,后期可能需要加字段)
|
||||
if (ObjectUtil.isEmpty(task.getPoint_code2())) {
|
||||
List<StIvtHotpointivt> notTaskHotOven = hotpointivtService.getNotTaskHotOven(order.getRoll_type(), "0");
|
||||
List<StIvtHotpointivt> notTaskHotOven = hotpointivtService.getNotTaskHotOven(order.getRoll_type(),
|
||||
"0");
|
||||
if (notTaskHotOven.size() == 0) {
|
||||
throw new BadRequestException("未找到可用货位!");
|
||||
}
|
||||
@@ -120,9 +126,10 @@ public class InHotTrussTask extends AbstractTask {
|
||||
task.setPoint_code2(stIvtHotpointivt.getPoint_code());
|
||||
}
|
||||
// 保存任务参数
|
||||
requestObj.put("caching", flag);
|
||||
task.setRequest_param(requestObj.toJSONString());
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
requestObj.put("caching", flag);
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
}
|
||||
@@ -134,19 +141,18 @@ public class InHotTrussTask extends AbstractTask {
|
||||
// 完成任务,需要设置对应点位状态(可能入的是烘箱,也有可能入的是暂存区)
|
||||
String requestParam = taskObj.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String workorderId = requestObj.getString("workorder_id");
|
||||
String orderCode = requestObj.getString("order_code");
|
||||
String caching = requestObj.getString("caching");
|
||||
String endPointCode = taskObj.getPoint_code2();
|
||||
SchBasePoint hotDjwPoint = pointService.getById(endPointCode);
|
||||
StIvtHotpointivt hotpointivt = hotpointivtService.getPointByCode(endPointCode, false);
|
||||
PdmBiRawfoilworkorder order = rawfoilworkorderService.getById(workorderId);
|
||||
PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode);
|
||||
Assert.notNull(order, "工单不能为空!");
|
||||
if (ObjectUtil.isEmpty(hotpointivt)) {
|
||||
// 如果是对接位, 判断区域,修改对应的点位状态,并且绑定载具号
|
||||
hotDjwPoint.setVehicle_code(taskObj.getVehicle_code());
|
||||
// 如果是对接位, 判断区域,修改对应的点位状态
|
||||
hotDjwPoint.setPoint_status("1".equals(order.getIs_baking()) ? "2" : "4");
|
||||
// 此字段存放工单号
|
||||
hotDjwPoint.setSource_id(workorderId);
|
||||
hotDjwPoint.setSource_id(order.getWorkorder_id());
|
||||
setUpdateByType(hotDjwPoint, taskFinishedType);
|
||||
pointService.update(hotDjwPoint);
|
||||
} else {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.sch.task_manage.tasks.nbj;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
@@ -11,11 +12,14 @@ import org.nl.wms.sch.task_manage.TaskStatus;
|
||||
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
|
||||
import static org.nl.wms.util.TaskUtils.setUpdateByPC;
|
||||
@@ -35,11 +39,14 @@ public class SubRollDownAGVTask extends AbstractTask {
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 查找空位没任务的货梯
|
||||
@@ -49,12 +56,24 @@ public class SubRollDownAGVTask extends AbstractTask {
|
||||
throw new BadRequestException("暂无可用的货梯!");
|
||||
}
|
||||
SchBasePoint liftPoint = lifts.get(0);
|
||||
task.setPoint_code2(liftPoint.getPoint_code());
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
RLock lock = redissonClient.getLock(liftPoint.getPoint_code());
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
task.setPoint_code2(liftPoint.getPoint_code());
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
} else {
|
||||
throw new BadRequestException("点位编码:" + liftPoint.getPoint_code() + "正在使用中,请重试!");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -48,16 +48,17 @@ public class RawCallRollTrussTask extends AbstractTask {
|
||||
private IstIvtSbpointivtService stIvtSbpointivtService;
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
// 此任务不走apply路口创建任务
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
log.info("生箔手持呼叫空辊任务创建, 参数:{}", task);
|
||||
// 查找同类型的起点, 并且没有任务
|
||||
List<SchBasePoint> startPoints = pointService.getWindRollNotTaskPoints(task.getVehicle_type());
|
||||
// 查找同类型且与生箔机指定的收卷辊的起点, 并且没有任务
|
||||
// 先获取生箔机指定的收卷辊
|
||||
JSONObject requestObj = JSONObject.parseObject(task.getRequest_param());
|
||||
List<SchBasePoint> startPoints = pointService.getWindRollNotTaskPoints(requestObj.getString("ext_code"));
|
||||
if (startPoints.size() == 0) {
|
||||
throw new BadRequestException("找不到同规格的收卷辊!");
|
||||
throw new BadRequestException("找不到生箔机指定的收卷辊!");
|
||||
}
|
||||
// 终点为出口,不校验是否占用
|
||||
List<SchBasePoint> endPoints = pointService.getPointByConditions("A1", "A1-SJGK",
|
||||
@@ -112,10 +113,9 @@ public class RawCallRollTrussTask extends AbstractTask {
|
||||
log.info("桁架任务完毕,开始创建 [{}] 的AGV任务", endAgvPoint);
|
||||
// 收卷辊库里的载具编码
|
||||
taskParam.put("vehicle_code", taskObj.getVehicle_code());
|
||||
taskParam.put("vehicle_type", taskObj.getVehicle_type());
|
||||
taskParam.put("device_code", endAgvPoint);
|
||||
taskParam.put("is_flag", flag);
|
||||
taskParam.put("workorder_id", requestObj.getString("workorder_id"));
|
||||
taskParam.put("order_code", requestObj.getString("order_code"));
|
||||
taskParam.put("start_point_code", taskObj.getPoint_code2());
|
||||
taskParam.put("up_task_code", taskObj.getTask_code());
|
||||
taskParam.put("create_mode", GeneralDefinition.TASK_CREATION);
|
||||
@@ -123,7 +123,6 @@ public class RawCallRollTrussTask extends AbstractTask {
|
||||
if ("1".equals(flag)) {
|
||||
// 需要的是四点任务
|
||||
taskParam.put("config_code", "RawDownAGVTask");
|
||||
taskParam.put("vehicle_code2", requestObj.getString("vehicle_code"));
|
||||
rawDownAGVTask.apply(taskParam);
|
||||
} else {
|
||||
// 单纯送空
|
||||
|
||||
@@ -89,12 +89,12 @@ public class RawDownAGVTask extends AbstractTask {
|
||||
JSONObject taskParam = new JSONObject();
|
||||
String requestParam = taskObj.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String workorderId = requestObj.getString("workorder_id");
|
||||
if (ObjectUtil.isNotEmpty(workorderId)) {
|
||||
String orderCode = requestObj.getString("order_code");
|
||||
if (ObjectUtil.isNotEmpty(orderCode)) {
|
||||
rawfoilworkorderService.update(new LambdaUpdateWrapper<PdmBiRawfoilworkorder>()
|
||||
.set(PdmBiRawfoilworkorder::getStatus, "04")
|
||||
.eq(PdmBiRawfoilworkorder::getWorkorder_id, workorderId));
|
||||
log.info("工单修改完毕 - 工单标识 - {}", workorderId);
|
||||
.eq(PdmBiRawfoilworkorder::getContainer_name, orderCode));
|
||||
log.info("工单修改完毕 - 母卷号 - {}", orderCode);
|
||||
}
|
||||
String hxPointCode = "";
|
||||
// 获取点位
|
||||
@@ -106,7 +106,7 @@ public class RawDownAGVTask extends AbstractTask {
|
||||
hxPointCode = taskObj.getPoint_code4();
|
||||
}
|
||||
log.info("开始创建桁架任务入烘箱....");
|
||||
taskParam.put("workorder_id", requestObj.getString("workorder_id"));
|
||||
taskParam.put("order_code", orderCode);
|
||||
taskParam.put("up_task_code", taskObj.getTask_code());
|
||||
taskParam.put("device_code", hxPointCode);
|
||||
taskParam.put("config_code", "InHotTrussTask");
|
||||
|
||||
@@ -45,11 +45,6 @@ public class TaskUtils {
|
||||
taskObj.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
taskObj.setCreate_time(DateUtil.now());
|
||||
}
|
||||
public static void setRawOrderUpdateByDefault(PdmBiRawfoilworkorder order) {
|
||||
order.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
order.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
order.setUpdate_time(DateUtil.now());
|
||||
}
|
||||
|
||||
public static void setCreateByAcsOrPda(SchBaseTask taskObj, JSONObject param) {
|
||||
// 如果是人工创建,会带个用户过来
|
||||
@@ -127,6 +122,25 @@ public class TaskUtils {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置生箔工单更新人
|
||||
* @param order 生箔工单
|
||||
*/
|
||||
public static void setRawOrderUpdateByDefault(PdmBiRawfoilworkorder order) {
|
||||
order.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
order.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
order.setUpdate_time(DateUtil.now());
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置生箔工单创建人
|
||||
* @param order 生箔工单
|
||||
*/
|
||||
public static void setRawOrderCreateByDefault(PdmBiRawfoilworkorder order) {
|
||||
order.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
order.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
order.setCreate_time(DateUtil.now());
|
||||
}
|
||||
/**
|
||||
* 校验是否有起点终点的任务
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user