add: 手持生箔呼叫空辊、下料

This commit is contained in:
2024-08-07 18:52:39 +08:00
parent 9a8395f4b6
commit 01bd8257af
53 changed files with 828 additions and 276 deletions

View File

@@ -29,7 +29,7 @@ public class AcsToWmsController {
@PostMapping("/status")
@Log(value = "ACS给WMS反馈任务状态", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@SaIgnore
public ResponseEntity<Object> receiveTaskStatusAcs(@RequestBody String string) {
public ResponseEntity<Object> receiveTaskStatusAcs(@RequestBody String string) throws InterruptedException {
log.info("ACS给WMS反馈任务状态:{}", string);
return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(string), HttpStatus.OK);
}

View File

@@ -8,8 +8,8 @@ import org.nl.wms.ext.acs.service.AcsToWmsService;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.task.TaskFactory;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.TaskFactory;
import org.nl.wms.sch.task_manage.TaskStatus;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
@@ -60,7 +60,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
// 任务处理类
try {
AbstractTask task1 = taskFactory.getTask(task.getConfig_code());
task1.updateTaskStatus(row, status);
task1.updateStatus(row, status);
} catch (Exception e) {
e.printStackTrace();
message = e.getMessage();

View File

@@ -4,12 +4,9 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.ext.acs.service.dto.to.acs.IssueAcsRequest;
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
import org.nl.wms.ext.record.service.ISysInteractRecordService;
import org.nl.wms.sch.task_manage.AcsTaskDto;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.task.AcsUtil;
import org.nl.wms.sch.task_manage.AcsUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

View File

@@ -0,0 +1,49 @@
package org.nl.wms.pda.mps.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.logging.annotation.Log;
import org.nl.wms.pda.mps.service.RawFoilPdaService;
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: lyd
* @Description: 生箔手持控制类
* @Date: 2024/8/6
*/
@RestController
@RequestMapping("/api/pda/raw")
@Slf4j
@SaIgnore
public class RawFoilPdaController {
@Autowired
private RawFoilPdaService rawFoilPdaService;
@PostMapping("/queryRawFoilList")
@Log("查询生箔工单")
public ResponseEntity<Object> queryRawFoilList(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(rawFoilPdaService.queryRawFoilList(whereJson), HttpStatus.OK);
}
@PostMapping("/needEmptyVehicle")
@Log("生箔呼叫空辊")
public ResponseEntity<Object> needEmptyVehicle(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(rawFoilPdaService.needEmptyVehicle(whereJson), HttpStatus.OK);
}
@PostMapping("/needEmptyAxis")
@Log("生箔下料")
public ResponseEntity<Object> needEmptyAxis(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(rawFoilPdaService.needEmptyAxis(whereJson), HttpStatus.OK);
}
}

View File

@@ -0,0 +1,33 @@
package org.nl.wms.pda.mps.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
* @Author: lyd
* @Description:
* @Date: 2024/8/6
*/
public interface RawFoilPdaService {
/**
* 呼叫空辊
* @param param /
* @return /
*/
JSONObject needEmptyVehicle(JSONObject param);
/**
* 查询生箔工单
* @param param /
* @return /
*/
JSONObject queryRawFoilList(JSONObject param);
/**
* 生箔下料
* @param param /
* @return /
*/
JSONObject needEmptyAxis(JSONObject param);
}

View File

@@ -0,0 +1,125 @@
package org.nl.wms.pda.mps.service.impl;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.pda.mps.service.RawFoilPdaService;
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
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.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.tasks.raw.RawCallRollTrussTask;
import org.nl.wms.util.TaskUtils;
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.List;
/**
* @Author: lyd
* @Description:
* @Date: 2024/8/6
*/
@Slf4j
@Service
public class RawFoilPdaServiceImpl implements RawFoilPdaService {
@Autowired
private RawCallRollTrussTask rawCallRollTrussTask;
@Autowired
private ISchBasePointService pointService;
@Autowired
private IpdmBiRawfoilworkorderService rawfoilworkorderService;
@Autowired
private ISchBaseTaskService taskService;
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject needEmptyVehicle(JSONObject param) {
log.info("手持呼叫空收卷辊: {}", param);
// param point_code, vehicle_type
String pointCode = param.getString("point_code");
String vehicleType = param.getString("vehicle_type");
if (ObjectUtil.isEmpty(vehicleType)) {
throw new BadRequestException("收卷辊的类型不能为空!");
}
// 判断是否存在任务
List<SchBaseTask> unFinishTasks = taskService.checkHaveTask(pointCode);
// 判断是否存在对应的桁架任务
List<SchBaseTask> unFinishRelatedTasks = taskService.checkHaveRelatedTaskInRequestParam(pointCode);
if (unFinishTasks.size() > 0 || unFinishRelatedTasks.size() > 0) {
log.error("点位 [{}] 已经存在任务!", pointCode);
throw new BadRequestException("点位[" + pointCode + "]已经存在任务!");
}
param.put("config_code", "RawCallRollTrussTask");
param.put("device_code", pointCode);
param.put("create_mode", GeneralDefinition.PDA_CREATION);
param.put("requestNo", "LMS" + IdUtil.getSnowflake(1,1).nextIdStr());
// 调用通用口, 创建空辊桁架任务
rawCallRollTrussTask.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 queryRawFoilList(JSONObject param) {
// 查找生箔工单通过点位获取时间排序最近10条
// param: point_codevehicle_code
String pointCode = param.getString("point_code");
String vehicleCode = param.getString("vehicle_code");
List<PdmBiRawfoilworkorder> list = rawfoilworkorderService.list(new LambdaQueryWrapper<PdmBiRawfoilworkorder>()
.eq(ObjectUtil.isNotEmpty(pointCode), PdmBiRawfoilworkorder::getPoint_code, pointCode)
.eq(ObjectUtil.isNotEmpty(vehicleCode), PdmBiRawfoilworkorder::getWind_roll, vehicleCode)
.orderByDesc(PdmBiRawfoilworkorder::getCreate_time)
.last("limit 10"));
JSONObject jo = new JSONObject();
jo.put("data", list);
jo.put("message", "查询成功!");
return jo;
}
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject needEmptyAxis(JSONObject param) {
log.info("手持生箔下料: {}", param);
// point_code, vehicle_code, is_call_empty, vehicle_type, workorder_id
String pointCode = param.getString("point_code");
String vehicleCode = param.getString("vehicle_code");
String isCallEmpty = param.getString("is_call_empty");
String vehicleType = param.getString("vehicle_type");
String workOrderId = param.getString("workorder_id");
if (GeneralDefinition.YES.equals(isCallEmpty) && ObjectUtil.isEmpty(vehicleType)) {
throw new BadRequestException("收卷辊的类型不能为空!");
}
// 判断是否存在任务
List<SchBaseTask> unFinishTasks = taskService.checkHaveTask(pointCode);
// 判断是否存在对应的桁架任务
List<SchBaseTask> unFinishRelatedTasks = taskService.checkHaveRelatedTaskInRequestParam(pointCode);
if (unFinishTasks.size() > 0 || unFinishRelatedTasks.size() > 0) {
log.error("点位 [{}] 已经存在任务!", pointCode);
throw new BadRequestException("点位[" + pointCode + "]已经存在任务!");
}
// 获取生箔工单 01 -> 02
PdmBiRawfoilworkorder rawfoilworkorder = rawfoilworkorderService.getById(workOrderId);
rawfoilworkorder.setWind_roll(vehicleCode);
rawfoilworkorder.setStatus("02");
TaskUtils.setRawOrderUpdateByDefault(rawfoilworkorder);
rawfoilworkorderService.updateById(rawfoilworkorder);
// 判断是否呼叫空辊
if (GeneralDefinition.YES.equals(isCallEmpty)) {
// 创建桁架任务之后创建AGV任务需要备注是四点任务
} else {
// 创建AGV任务直接到烘箱的任务
}
return null;
}
}

View File

@@ -1,22 +1,20 @@
package org.nl.wms.pdm.bi.controller;
import java.util.Set;
import java.util.Map;
import com.alibaba.fastjson.JSONObject;
import org.nl.common.base.TableDataInfo;
import org.springframework.web.bind.annotation.*;
import lombok.RequiredArgsConstructor;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.nl.common.logging.annotation.Log;
import org.nl.wms.pdm.bi.dto.PdmBiRawfoilworkorderParam;
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
import java.util.Set;
/**
@@ -48,7 +46,6 @@ public class PdmBiRawfoilworkorderController {
return new ResponseEntity<>(TableDataInfo.build(pdmBiRawfoilworkorderService.query(whereJson, page)), HttpStatus.OK);
}
/**
* 条件查询
*
@@ -60,7 +57,6 @@ public class PdmBiRawfoilworkorderController {
return new ResponseEntity<>(pdmBiRawfoilworkorderService.selectList(params), HttpStatus.OK);
}
/**
* 新增数据
*
@@ -74,7 +70,6 @@ public class PdmBiRawfoilworkorderController {
return new ResponseEntity<>(HttpStatus.OK);
}
/**
* 修改数据
*
@@ -89,7 +84,6 @@ public class PdmBiRawfoilworkorderController {
return new ResponseEntity<>(HttpStatus.OK);
}
/**
* 删除数据
*
@@ -104,7 +98,6 @@ public class PdmBiRawfoilworkorderController {
return new ResponseEntity<>(HttpStatus.OK);
}
@Log("称重")
@PostMapping("/confirm")
public ResponseEntity<Object> confirm(@RequestBody JSONObject whereJson) {
@@ -118,6 +111,5 @@ public class PdmBiRawfoilworkorderController {
pdmBiRawfoilworkorderService.compelEnd(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -1,13 +1,11 @@
package org.nl.wms.pdm.bi.dao;
import java.math.BigDecimal;
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;
import java.math.BigDecimal;
/**
@@ -23,190 +21,157 @@ public class PdmBiRawfoilworkorder extends Model<PdmBiRawfoilworkorder> {
private static final long serialVersionUID = -7739291296662381393L;
/**
* 工单标识
*/
@TableId(type = IdType.ASSIGN_ID)
private String workorder_id;
/**
* 母卷号
*/
private String container_name;
/**
* 机台编码
*/
private String resource_name;
/**
* 生产工单
*/
private String mfg_order_name;
/**
* 产品编码
*/
private String product_name;
/**
* 产品名称
*/
private String description;
/**
* 理论长度
*/
private BigDecimal theory_height;
/**
* 设备生产速度
*/
private BigDecimal eqp_velocity;
/**
* 上卷开始时间
*/
private String up_coiler_date;
/**
* 是否重新更新
*/
private String is_reload_send;
/**
* 重量
*/
private BigDecimal productin_qty;
/**
* 开始时间
*/
private String realstart_time;
/**
* 结束时间
*/
private String realend_time;
/**
* 状态
*/
private String status;
/**
* 完成方式
*/
private String finish_type;
/**
* 车号
*/
private String agvno;
/**
* 备注
*/
private String remark;
/**
* 创建人
*/
private Long create_id;
private String create_id;
/**
* 创建人
*/
private String create_name;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private String create_time;
/**
* 修改人
*/
private Long update_optid;
private String update_optid;
/**
* 修改人
*/
private String update_optname;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private String update_time;
/**
* 是否删除
*/
private String is_delete;
/**
* 生产区域
*/
private String product_area;
/**
* 点位编码
*/
private String point_code;
/**
* 请求烘烤
* 是否烘烤
*/
private String is_baking;
/**
* 请求入半成品库
*/
private String is_instor;
/** 收卷辊 */
private String wind_roll;
/** 类型:标箔、锂电 */
private String order_type;
/**
* 获取主键值
*
* @return 主键值
*/
@Override
protected Serializable pkVal() {
return this.workorder_id;
}
/** 烘烤时间 */
private String baking_time;
}

View File

@@ -1,36 +1,36 @@
package org.nl.wms.pdm.bi.service.impl;
import cn.hutool.core.collection.CollectionUtil;
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 com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.enums.WorkOrderStatusEnum;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.basedata.material.dao.MdMeMaterialbase;
import org.nl.wms.basedata.material.service.ImdMeMaterialbaseService;
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
import org.nl.wms.pdm.bi.dto.PdmBiRawfoilworkorderParam;
import org.nl.wms.pdm.bi.dao.mapper.PdmBiRawfoilworkorderMapper;
import org.nl.wms.pdm.bi.dto.PdmBiRawfoilworkorderParam;
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
import cn.hutool.core.date.DateUtil;
import org.nl.wms.pdm.ivt.dao.StIvtSbpointivt;
import org.nl.wms.pdm.ivt.dao.mapper.StIvtSbpointivtMapper;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskconfigMapper;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.TaskStatus;
import org.nl.wms.storage_manage.ios.enums.IOSEnum;
import org.springframework.beans.BeanUtils;
import org.nl.common.utils.SecurityUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.common.domain.query.PageQuery;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@@ -48,10 +48,10 @@ import static org.nl.common.enums.WorkOrderStatusEnum.PRODUCT_STATUS;
*
* @since 2024-03-27
*/
@Service("pdmBiRawfoilworkorderService")
@Slf4j
@Service
public class PdmBiRawfoilworkorderServiceImpl extends ServiceImpl<PdmBiRawfoilworkorderMapper, PdmBiRawfoilworkorder> implements IpdmBiRawfoilworkorderService {
@Resource
private PdmBiRawfoilworkorderMapper pdmBiRawfoilworkorderMapper;
@@ -61,7 +61,6 @@ public class PdmBiRawfoilworkorderServiceImpl extends ServiceImpl<PdmBiRawfoilwo
private ImdMeMaterialbaseService materialBaseMapper;
@Resource
private SchBaseTaskMapper schBaseTaskMapper;
/**
* 查询数据分页
*
@@ -134,7 +133,6 @@ public class PdmBiRawfoilworkorderServiceImpl extends ServiceImpl<PdmBiRawfoilwo
pdmBiRawfoilworkorderMapper.updateById(getBasicInfo(params, false));
}
/**
* 业务参数校验
*
@@ -177,7 +175,6 @@ public class PdmBiRawfoilworkorderServiceImpl extends ServiceImpl<PdmBiRawfoilwo
pdmBiRawfoilworkorderMapper.update(null, updateWrapper);
}
/**
* 获取实体基础信息
*
@@ -222,7 +219,6 @@ public class PdmBiRawfoilworkorderServiceImpl extends ServiceImpl<PdmBiRawfoilwo
}
@Override
@Transactional(rollbackFor = Exception.class)
public void confirm(JSONObject whereJson) {

View File

@@ -27,7 +27,8 @@ public class StIvtSbpointivt extends Model<StIvtSbpointivt> {
/**
* 点位标识
*/
private Long point_id;
@TableId(value = "point_id", type = IdType.NONE)
private String point_id;
/**

View File

@@ -27,7 +27,8 @@ public class StIvtStpointivt extends Model<StIvtStpointivt> {
/**
* 点位标识
*/
private Long point_id;
@TableId(value = "point_id")
private String point_id;
/**

View File

@@ -1,9 +1,9 @@
package org.nl.wms.pdm.ivt.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.pdm.ivt.dao.StIvtSbpointivt;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.pdm.ivt.dto.StIvtSbpointivtParam;
import java.util.List;
@@ -59,7 +59,13 @@ public interface IstIvtSbpointivtService extends IService<StIvtSbpointivt> {
*/
void deleteAll(Set<String> ids);
/**
* 根据编码获取对应生箔点位
* @param pointCode 点位编码
* @param flag 是否判断禁用启用
* @return /
*/
StIvtSbpointivt getByPointCode(String pointCode, boolean flag);
}

View File

@@ -3,27 +3,22 @@ package org.nl.wms.pdm.ivt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
import org.nl.wms.pdm.ivt.dao.StIvtSbpointivt;
import org.nl.wms.pdm.ivt.dto.StIvtSbpointivtParam;
import org.nl.wms.pdm.ivt.dao.mapper.StIvtSbpointivtMapper;
import cn.hutool.core.util.ObjectUtil;
import org.nl.wms.pdm.ivt.service.IstIvtSbpointivtService;
import cn.hutool.core.date.DateUtil;
import org.nl.wms.storage_manage.ios.enums.IOSEnum;
import org.springframework.beans.BeanUtils;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.IdUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.pdm.ivt.dao.StIvtSbpointivt;
import org.nl.wms.pdm.ivt.dao.mapper.StIvtSbpointivtMapper;
import org.nl.wms.pdm.ivt.dto.StIvtSbpointivtParam;
import org.nl.wms.pdm.ivt.service.IstIvtSbpointivtService;
import org.nl.wms.storage_manage.ios.enums.IOSEnum;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.List;
/**
@@ -124,6 +119,14 @@ public class StIvtSbpointivtServiceImpl extends ServiceImpl<StIvtSbpointivtMappe
stIvtSbpointivtMapper.update(null, updateWrapper);
}
@Override
public StIvtSbpointivt getByPointCode(String pointCode, boolean flag) {
LambdaQueryWrapper<StIvtSbpointivt> lam = new QueryWrapper<StIvtSbpointivt>().lambda();
lam.eq(StIvtSbpointivt::getPoint_code, pointCode)
.eq(flag, StIvtSbpointivt::getIs_used, true);
return getOne(lam);
}
/**
* 获取实体基础信息

View File

@@ -17,7 +17,6 @@ import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.group.service.dao.mapper.SchBaseVehiclematerialgroupMapper;
import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

View File

@@ -6,6 +6,7 @@ import org.nl.common.domain.query.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -68,4 +69,22 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
* @param lock_ype 锁定类型
*/
void lockPoint(List<SchBasePoint> list, String lock_ype);
/**
* 获取指定载具类型,并没有任务的收卷辊点位
* @param vehicleType 载具类型
* @return /
*/
List<SchBasePoint> getWindRollNotTaskPoints(String vehicleType);
/**
* 根据条件获取点位
* @param area 生产区域(车间)
* @param region 区域
* @param pointType 点位类型
* @param pointStatus 点位状态
* @param flag 是否校验启用状态
* @return /
*/
List<SchBasePoint> getPointByConditions(String area, String region, String pointType, String pointStatus, @NotNull boolean flag);
}

View File

@@ -23,7 +23,7 @@ public class SchBasePoint implements Serializable {
private static final long serialVersionUID = 1L;
/** 点位编码 */
/** 点位标识 */
@TableId(value = "point_code", type = IdType.NONE)
private String point_code;
@@ -42,9 +42,6 @@ public class SchBasePoint implements Serializable {
/** 点位状态 */
private String point_status;
/** 可以存放物料类型 */
private String can_material_type;
/** 可以存放载具类型 */
private String can_vehicle_type;
@@ -84,21 +81,18 @@ public class SchBasePoint implements Serializable {
/** 出空顺序 */
private Integer out_empty_seq;
/** 父点位 */
private String parent_point_code;
/** 外部编码 */
private String ext_point_code;
/** 进行中的任务编码 */
private String ing_task_code;
/** 区域 */
private String product_area;
/** 是否工单 */
private Boolean is_has_workder;
/** 车间编码 */
private String workshop_code;
/** 是否自动 */
private Boolean is_auto;
@@ -152,7 +146,6 @@ public class SchBasePoint implements Serializable {
@TableField(exist = false)
private String record_id;
@TableField(exist = false)
private String device_code;
}

View File

@@ -17,4 +17,11 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
* @param used
*/
void batchChangeUsed(List<String> pointCodes, Boolean used);
/**
* 获取指定载具类型,并没有任务的收卷辊点位
* @param vehicleType 载具类型
* @return /
*/
List<SchBasePoint> getWindRollNotTaskPoints(String vehicleType);
}

View File

@@ -12,4 +12,15 @@
</foreach>
</where>
</update>
<select id="getWindRollNotTaskPoints" 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.vehicle_type = #{vehicleType}
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.in_order_seq
</select>
</mapper>

View File

@@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -62,10 +63,8 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
? Boolean.valueOf(whereJson.get("is_used").toString()) : null;
String lock_type = ObjectUtil.isNotEmpty(whereJson.get("lock_type"))
? String.valueOf(whereJson.get("lock_type").toString()) : null;
Boolean parent_point = ObjectUtil.isNotEmpty(whereJson.get("parent_point"))
? Boolean.valueOf(whereJson.get("parent_point").toString()) : false;
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
lam.eq(ObjectUtil.isNotEmpty(workshop_code), SchBasePoint::getWorkshop_code, workshop_code)
lam.eq(ObjectUtil.isNotEmpty(workshop_code), SchBasePoint::getProduct_area, workshop_code)
.and(ObjectUtil.isNotEmpty(blurry), la -> la.like(SchBasePoint::getPoint_code, blurry)
.or().like(SchBasePoint::getPoint_name, blurry))
.eq(ObjectUtil.isNotEmpty(region_code), SchBasePoint::getRegion_code, region_code)
@@ -75,8 +74,7 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
.eq(ObjectUtil.isNotEmpty(lock_type), SchBasePoint::getLock_type, lock_type)
.orderByAsc(SchBasePoint::getRegion_code)
.orderByAsc(SchBasePoint::getPoint_code)
.orderByAsc(SchBasePoint::getPoint_type)
.apply(parent_point, "point_code = parent_point_code");
.orderByAsc(SchBasePoint::getPoint_type);
IPage<SchBasePoint> pages = new Page<>(page.getPage() + 1, page.getSize());
pointMapper.selectPage(pages, lam);
// 可以存放的载具类型
@@ -112,8 +110,8 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
}
// 默认父类点位为自身
if (ObjectUtil.isEmpty(entity.getParent_point_code())) {
entity.setParent_point_code(entity.getPoint_code());
if (ObjectUtil.isEmpty(entity.getDevice_code())) {
entity.setDevice_code(entity.getPoint_code());
}
if (ObjectUtil.isNotEmpty(entity.getCan_vehicle_types())) {
@@ -211,4 +209,20 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
this.updateBatchById(list);
}
@Override
public List<SchBasePoint> getWindRollNotTaskPoints(String vehicleType) {
return pointMapper.getWindRollNotTaskPoints(vehicleType);
}
@Override
public List<SchBasePoint> getPointByConditions(String area, String region, String pointType, String pointStatus, boolean flag) {
LambdaQueryWrapper<SchBasePoint> lam = new QueryWrapper<SchBasePoint>().lambda();
lam.eq(ObjectUtil.isNotEmpty(area), SchBasePoint::getProduct_area, area)
.eq(ObjectUtil.isNotEmpty(region), SchBasePoint::getRegion_code, region)
.eq(ObjectUtil.isNotEmpty(pointType), SchBasePoint::getPoint_type, pointType)
.eq(ObjectUtil.isNotEmpty(pointStatus), SchBasePoint::getPoint_status, pointStatus)
.eq(flag, SchBasePoint::getIs_used, true);
return pointMapper.selectList(lam);
}
}

View File

@@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.ext.acs.service.dto.to.BaseRequest;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dto.SchBaseTaskQuery;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.TaskStatus;
import java.util.List;
import java.util.Map;
@@ -113,4 +113,19 @@ public interface ISchBaseTaskService extends IService<SchBaseTask> {
* @return SchBaseTask
*/
SchBaseTask getByCode(String taskCode);
/**
* 检测点位编码是否存在任务
* @param code 点位编码
* @return 任务
*/
List<SchBaseTask> checkHaveTask(String code);
/**
* 判断是否存在对应的桁架任务
* 参数like requestParam
* @param param 校验的字符串
* @return /
*/
List<SchBaseTask> checkHaveRelatedTaskInRequestParam(String param);
}

View File

@@ -30,6 +30,7 @@ public class SchBaseTask implements Serializable {
private String task_code;
/** 任务类型 */
@TableField(exist = false)
private String task_type;
/** 任务状态 */
@@ -93,7 +94,7 @@ public class SchBaseTask implements Serializable {
private String response_param;
/** 生成区域 */
private String workshop_code;
private String product_area;
/** 外部数据 */
private String ext_group_data;

View File

@@ -121,7 +121,7 @@ public class SchBaseTaskconfig implements Serializable {
private String sql_param;
private String workshop_code;
private String product_area;
private String remark;

View File

@@ -14,4 +14,8 @@ import java.util.List;
public interface SchBaseTaskMapper extends BaseMapper<SchBaseTask> {
IPage<SchBaseTask> selectPageLeftJoin(IPage<SchBaseTask> pages, SchBaseTaskQuery whereJson, List<String> collect);
List<SchBaseTask> checkHaveTask(String code);
List<SchBaseTask> checkHaveRelatedTaskInRequestParam(String param);
}

View File

@@ -45,4 +45,21 @@
</where>
ORDER BY t.create_time DESC
</select>
<select id="checkHaveTask" resultType="org.nl.wms.sch.task.service.dao.SchBaseTask">
SELECT *
FROM sch_base_task
WHERE task_status <![CDATA[ <= ]]> '071' AND task_status <![CDATA[ <> ]]> '07'
AND ( point_code1 = #{code}
OR point_code2 = #{code}
OR point_code3 = #{code}
OR point_code4 = #{code}
)
</select>
<select id="checkHaveRelatedTaskInRequestParam" resultType="org.nl.wms.sch.task.service.dao.SchBaseTask">
SELECT *
FROM sch_base_task
WHERE task_status <![CDATA[ <= ]]> '071'
AND task_status <![CDATA[ <> ]]> '07'
AND request_param LIKE '%${param}%'
</select>
</mapper>

View File

@@ -14,8 +14,8 @@
<if test="config.blurry != null">
AND sc.config_name LIKE '%${config.blurry}%'
</if>
<if test="config.workshop_code != null">
AND sc.workshop_code = #{config.workshop_code}
<if test="config.product_area != null">
AND sc.product_area = #{config.product_area}
</if>
</select>
</mapper>

View File

@@ -22,8 +22,8 @@ import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskconfigMapper;
import org.nl.wms.sch.task.service.dto.SchBaseTaskQuery;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.task.TaskFactory;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.TaskFactory;
import org.nl.wms.sch.task_manage.TaskStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -255,4 +255,14 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
return this.getOne(lam);
}
@Override
public List<SchBaseTask> checkHaveTask(String code) {
return schBaseTaskMapper.checkHaveTask(code);
}
@Override
public List<SchBaseTask> checkHaveRelatedTaskInRequestParam(String param) {
return schBaseTaskMapper.checkHaveRelatedTaskInRequestParam(param);
}
}

View File

@@ -17,8 +17,8 @@ import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task_manage.enums.TaskDirectionEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -26,6 +26,8 @@ import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import static org.nl.wms.sch.task_manage.constant.TaskConstant.*;
/**
* @author ldjun
* @version 1.0
@@ -122,7 +124,7 @@ public abstract class AbstractTask {
.eq(SchBaseTaskconfig::getConfig_code, config_code));
taskDto.setPriority(taskConfig.getPriority());
taskDto.setTask_type(taskConfig.getAcs_task_type());
taskDto.setProduct_area(taskConfig.getWorkshop_code());
taskDto.setProduct_area(taskConfig.getProduct_area());
taskDto.setAgv_system_type(taskConfig.getAgv_system_type());
taskDto.setRoute_plan_code(taskConfig.getRoute_plan_code());
return taskDto;
@@ -150,16 +152,6 @@ public abstract class AbstractTask {
this.renotifyAcs(list);
}
/**
* 更新任务状态,暴露给外围使用
* @param taskObj 任务信息
* @param status 状态
*/
public void updateTaskStatus(JSONObject taskObj, TaskStatus status) {
this.updateStatus(taskObj, status);
}
/**
* 自动生成任务
*/
@@ -169,12 +161,42 @@ public abstract class AbstractTask {
/**
* 修改状态
* 以下改为public会出现自动注入类出现问题
*
* @param taskObj 任务信息
* @param task 任务信息
* @param status 状态
*/
public abstract void updateStatus(JSONObject taskObj, TaskStatus status);
public void updateStatus(JSONObject task, TaskStatus status) {
String taskCode = task.getString("task_code");
// 校验任务
SchBaseTask taskObj = taskService.getByCode(taskCode);
// 根据传来的类型去对任务进行操作
if (status.equals(TaskStatus.EXECUTING)) {
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
taskObj.setRemark("执行中");
taskObj.setCar_no(task.getString("car_no"));
TaskUtils.setUpdateByAcs(taskObj);
taskService.updateById(taskObj);
}
if (status.equals(TaskStatus.FINISHED)) {
finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
}
if (status.equals(TaskStatus.CANCELED)) {
cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
}
}
/**
* 具体完成逻辑
* @param taskObj 任务数据
* @param autoAcs 完成枚举
*/
public abstract void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs);
/**
* 具体完成逻辑
* @param taskObj 任务数据
* @param autoAcs 完成枚举
*/
public abstract void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs);
/**
@@ -186,12 +208,14 @@ public abstract class AbstractTask {
*/
protected void setTaskPoint(SchBaseTaskconfig taskConfig, SchBaseTask task, String apply_point_code) {
String taskDirection = taskConfig.getTask_direction();
if (TaskDirectionEnum.SEND.getValue().equals(taskDirection)) {
if (ObjectUtil.isEmpty(taskDirection)) {
return;
}
if (VERIFY_START.equals(taskDirection)) {
task.setPoint_code1(apply_point_code);
} else {
} else if (VERIFY_END.equals(taskDirection)) {
task.setPoint_code2(apply_point_code);
}
}
/**
@@ -202,23 +226,21 @@ public abstract class AbstractTask {
public void deliveryBeforeProcessing(SchBaseTask task, AcsTaskDto acsTaskDto) {
}
/**
* 强制结束完成任务
*
* @param task_code 任务标识
* @return
* @discription 强制结束完成任务
* @author ldjun
* @created 2020年6月19日 上午10:34:58
*/
public abstract void forceFinish(String task_code);
public void forceFinish(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
}
/**
* 取消任务,货物搬回原点
*
* @param task_code
*/
public abstract void cancel(String task_code);
public void cancel(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("任务[" + task_code + "]不存在!");
}
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
}
/**
* 申请任务 - 暂时不用
@@ -233,6 +255,7 @@ public abstract class AbstractTask {
String applyPointCode = param.getString("device_code");
String requestNo = param.getString("requestNo");
String configCode = param.getString("config_code");
String productArea = param.getString("product_area");
// 1、校验数据
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
@@ -248,11 +271,11 @@ public abstract class AbstractTask {
Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, LangProcess.msg("common_maxTaskTip", applyPointCode));
// 校验同个点位,同种任务是否多次请求创建任务固定只能1个任务
List<SchBaseTask> applyPointTask = taskService.findUnFinishTasksByTaskConfig(
taskConfig.getConfig_code(), applyPointCode, taskConfig.getTask_direction());
if (applyPointTask.size() == 1) {
throw new BadRequestException(LangProcess.msg("common_taskCreatedTip", applyPointCode));
}
// List<SchBaseTask> applyPointTask = taskService.findUnFinishTasksByTaskConfig(
// taskConfig.getConfig_code(), applyPointCode, taskConfig.getTask_direction());
// if (applyPointTask.size() == 1) {
// throw new BadRequestException(LangProcess.msg("common_taskCreatedTip", applyPointCode));
// }
String vehicleType = param.getString("vehicle_type");
String vehicleCode = TaskUtils.defaultVehicleCode(param.getString("vehicle_code"));
@@ -266,6 +289,7 @@ public abstract class AbstractTask {
task.setCreate_mode(ObjectUtil.isNotEmpty(param.getString("create_mode"))
? param.getString("create_mode") : GeneralDefinition.ACS_CREATION);
task.setVehicle_code(vehicleCode);
task.setProduct_area(productArea);
task.setVehicle_qty(param.getInteger("vehicle_qty"));
task.setVehicle_type(vehicleType);
task.setTask_status(TaskStatus.CREATED.getCode());

View File

@@ -1,4 +1,4 @@
package org.nl.wms.sch.task_manage.task;
package org.nl.wms.sch.task_manage;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@@ -16,8 +16,7 @@ import org.nl.wms.ext.acs.service.dto.ResultForAcs;
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.constant.GeneralDefinition;
import org.nl.wms.util.URLEnum;
import org.springframework.http.HttpStatus;
@@ -48,7 +47,7 @@ public class AcsUtil {
JSONObject jo = list.getJSONObject(j);
String product_area = jo.getString("product_area");
if (StrUtil.isEmpty(product_area)) {
throw new BadRequestException("区域不能为空!下发信息:" + jo.toString());
throw new BadRequestException("区域不能为空!下发信息:" + jo);
}
String acs_url = URLEnum.find(product_area);
if (StrUtil.isEmpty(acs_url)) {

View File

@@ -1,4 +1,4 @@
package org.nl.wms.sch.task_manage.task.core;
package org.nl.wms.sch.task_manage;
/**
* @author ldjun

View File

@@ -1,4 +1,4 @@
package org.nl.wms.sch.task_manage.task;
package org.nl.wms.sch.task_manage;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.springframework.beans.BeansException;

View File

@@ -1,4 +1,4 @@
package org.nl.wms.sch.task_manage.task.core;
package org.nl.wms.sch.task_manage;
/**
* <p>
@@ -30,4 +30,4 @@ public enum TaskOperateType {
private String code;
private String name;
private String desc;
}
}

View File

@@ -1,4 +1,4 @@
package org.nl.wms.sch.task_manage.task;
package org.nl.wms.sch.task_manage;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@@ -1,4 +1,4 @@
package org.nl.wms.sch.task_manage;
package org.nl.wms.sch.task_manage.constant;
/**
* @Author: lyd
@@ -27,6 +27,10 @@ public class GeneralDefinition {
public static final String AUTO_CREATION = "1";
/**ACS创建**/
public static final String ACS_CREATION = "2";
/** 手持创建 */
public static final String PDA_CREATION = "3";
/** 任务完成追加创建 */
public static final String TASK_CREATION = "4";
// 请求方向
/**ACS->LMS**/
public static final String ACS_LMS = "1";

View File

@@ -0,0 +1,11 @@
package org.nl.wms.sch.task_manage.constant;
/**
* @Author: lyd
* @Description: 任务相关的常量
* @Date: 2024/8/7
*/
public class TaskConstant {
public static final String VERIFY_START = "1";
public static final String VERIFY_END = "2";
}

View File

@@ -1,47 +0,0 @@
package org.nl.wms.sch.task_manage.enums;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.nl.config.SpringContextHolder;
import org.nl.system.service.dict.dao.Dict;
import org.nl.system.service.dict.impl.SysDictServiceImpl;
import java.util.List;
/**
* @Author: lyd
* @Description: 任务配置 - 任务去向枚举
* @Date: 2023/5/25
*/
@Getter
public enum TaskDirectionEnum {
/**
* 送货
*/
SEND,
/**
* 取货
*/
CALL,
/**
* 移货
*/
MOVE;
private String value;
private String label;
static {
SysDictServiceImpl bean = SpringContextHolder.getBean(SysDictServiceImpl.class);
List<Dict> taskDirection = bean.list(new LambdaQueryWrapper<Dict>()
.eq(Dict::getCode, "task_direction")
.orderByAsc(Dict::getDict_sort));
TaskDirectionEnum[] values = TaskDirectionEnum.values();
for (int i = 0; i < values.length; i++) {
values[i].value = taskDirection.get(i).getValue();
values[i].label = taskDirection.get(i).getLabel();
}
}
}

View File

@@ -35,7 +35,8 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.AcsTaskDto;
import org.nl.wms.sch.task_manage.enums.PackageInfoIvtEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.TaskStatus;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.storage_manage.ios.enums.IOSEnum;
import org.nl.wms.util.TaskUtils;
import org.springframework.stereotype.Component;
@@ -143,7 +144,7 @@ public class CallEmpReelTask extends AbstractTask {
task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr());
task.setHandle_class(THIS_CLASS);
task.setTask_status(StrUtil.isBlank(task.getTask_status()) ? TaskStatus.START_AND_POINT.getCode() : task.getTask_status());
task.setWorkshop_code(StrUtil.isEmpty(task.getWorkshop_code())? "A1" : task.getWorkshop_code());
task.setProduct_area(StrUtil.isEmpty(task.getProduct_area())? "A1" : task.getProduct_area());
Dict dict = sysDictService.getOne(new LambdaQueryWrapper<Dict>()
.eq(Dict::getCode, "task_priority")
.eq(Dict::getLabel, task.getTask_type()));
@@ -368,6 +369,16 @@ public class CallEmpReelTask extends AbstractTask {
taskService.updateById(schBaseTask);
}
@Override
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
@Override
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
@Override
public void forceFinish(String taskId) {

View File

@@ -30,7 +30,8 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.AcsTaskDto;
import org.nl.wms.sch.task_manage.enums.PackageInfoIvtEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.TaskStatus;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.storage_manage.ios.enums.IOSEnum;
import org.nl.wms.util.TaskUtils;
import org.springframework.stereotype.Component;
@@ -136,7 +137,7 @@ public class CoolCutTask extends AbstractTask {
? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : (task.getAcs_task_type()));
task.setTask_status(StrUtil.isEmpty(task.getTask_status())
? TaskStatus.START_AND_POINT.getCode() : task.getTask_status());
task.setWorkshop_code(StrUtil.isEmpty(task.getWorkshop_code())? "A1" : task.getWorkshop_code());
task.setProduct_area(StrUtil.isEmpty(task.getProduct_area())? "A1" : task.getProduct_area());
if ("010301".equals(task.getTask_type())) {
task.setAcs_task_type("2");
} else {
@@ -330,6 +331,16 @@ public class CoolCutTask extends AbstractTask {
taskService.updateById(schBaseTask);
}
@Override
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
@Override
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
@Override
public void forceFinish(String taskId) {

View File

@@ -30,7 +30,8 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.AcsTaskDto;
import org.nl.wms.sch.task_manage.enums.PackageInfoIvtEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.TaskStatus;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.storage_manage.ios.enums.IOSEnum;
import org.nl.wms.util.TaskUtils;
import org.springframework.stereotype.Component;
@@ -134,7 +135,7 @@ public class InCoolIvtTask extends AbstractTask {
task.setAcs_task_type("3");
task.setTask_status(StrUtil.isEmpty(task.getTask_status())
? TaskStatus.START_AND_POINT.getCode() : task.getTask_status());
task.setWorkshop_code(StrUtil.isEmpty(task.getWorkshop_code()) ? "A1" : task.getWorkshop_code());
task.setProduct_area(StrUtil.isEmpty(task.getProduct_area()) ? "A1" : task.getProduct_area());
//根据类型获取对应的任务优先级
Dict dict = sysDictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getCode, "task_priority").eq(Dict::getLabel, task.getTask_type()));
if (dict == null) {
@@ -241,6 +242,16 @@ public class InCoolIvtTask extends AbstractTask {
taskService.updateById(schBaseTask);
}
@Override
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
@Override
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
@Override
public void forceFinish(String taskId) {

View File

@@ -37,7 +37,8 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.AcsTaskDto;
import org.nl.wms.sch.task_manage.enums.PackageInfoIvtEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.TaskStatus;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.storage_manage.ios.enums.IOSEnum;
import org.nl.wms.util.TaskUtils;
import org.springframework.stereotype.Component;
@@ -128,7 +129,7 @@ public class InHotTask extends AbstractTask {
task.setHandle_class(THIS_CLASS);
task.setTask_status(StrUtil.isEmpty(task.getTask_status())
? TaskStatus.START_AND_POINT.getCode() : task.getTask_status());
task.setWorkshop_code(StrUtil.isEmpty(task.getWorkshop_code()) ? "A1" : task.getWorkshop_code());
task.setProduct_area(StrUtil.isEmpty(task.getProduct_area()) ? "A1" : task.getProduct_area());
//根据类型获取对应的任务优先级
Dict dict = sysDictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getCode, "task_priority").eq(Dict::getLabel, task.getTask_type()));
@@ -335,6 +336,16 @@ public class InHotTask extends AbstractTask {
taskService.updateById(schBaseTask);
}
@Override
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
@Override
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
@Override
public void forceFinish(String taskId) {

View File

@@ -26,7 +26,8 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.AcsTaskDto;
import org.nl.wms.sch.task_manage.enums.PackageInfoIvtEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.TaskStatus;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.storage_manage.ios.enums.IOSEnum;
import org.nl.wms.util.TaskUtils;
import org.springframework.stereotype.Component;
@@ -128,7 +129,7 @@ public class OutHotTask extends AbstractTask {
task.setAcs_task_type("6");
task.setTask_status(StrUtil.isEmpty(task.getTask_status())
? TaskStatus.START_AND_POINT.getCode() : task.getTask_status());
task.setWorkshop_code(StrUtil.isEmpty(task.getWorkshop_code())? "A1" : task.getWorkshop_code());
task.setProduct_area(StrUtil.isEmpty(task.getProduct_area())? "A1" : task.getProduct_area());
//根据类型获取对应的任务优先级
Dict dict = sysDictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getCode, "task_priority").eq(Dict::getLabel, task.getTask_type()));
if (dict == null) {
@@ -220,6 +221,16 @@ public class OutHotTask extends AbstractTask {
taskService.updateById(schBaseTask);
}
@Override
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
@Override
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
@Override
public void forceFinish(String taskId) {

View File

@@ -0,0 +1,60 @@
package org.nl.wms.sch.task_manage.tasks.raw;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.TaskStatus;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import static org.nl.wms.util.TaskUtils.setUpdateByPC;
/**
* @Author: lyd
* @Description: 生箔呼叫空收卷辊AGV任务类
* @Date: 2024/8/7
*/
@Slf4j
@Component(value = "RawCallRollAGVTask")
public class RawCallRollAGVTask extends AbstractTask {
private final String THIS_CLASS = RawCallRollAGVTask.class.getName();
@Autowired
private ISchBaseTaskService taskService;
@Override
public void create() throws BadRequestException {
}
@Override
public void createCompletion(SchBaseTask task) {
// 需要校验是两点任务还是四点任务
// up_task_code上一个任务code
// start_point_code收卷辊库桁架出口
String requestParam = task.getRequest_param();
JSONObject requestObj = JSONObject.parseObject(requestParam);
String startPointCode = requestObj.getString("start_point_code");
// 创建任务
task.setPoint_code1(startPointCode);
task.setHandle_class(THIS_CLASS);
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
setUpdateByPC(task);
taskService.save(task);
}
@Override
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
@Override
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
}

View File

@@ -0,0 +1,130 @@
package org.nl.wms.sch.task_manage.tasks.raw;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.pdm.ivt.dao.StIvtSbpointivt;
import org.nl.wms.pdm.ivt.service.IstIvtSbpointivtService;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.TaskStatus;
import org.nl.wms.sch.task_manage.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 javax.annotation.Resource;
import java.util.List;
import static org.nl.wms.util.PointUtils.clearPoint;
import static org.nl.wms.util.TaskUtils.setUpdateByPC;
import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
/**
* @Author: lyd
* @Description: 生箔呼叫空收卷辊桁架任务类
* @Date: 2024/8/7
*/
@Slf4j
@Component(value = "RawCallRollTrussTask")
public class RawCallRollTrussTask extends AbstractTask {
private final String THIS_CLASS = RawCallRollTrussTask.class.getName();
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private RawCallRollAGVTask rawCallRollAGVTask;
@Resource
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());
if (startPoints.size() == 0) {
throw new BadRequestException("找不到同规格的收卷辊!");
}
// 终点为出口,不校验是否占用
List<SchBasePoint> endPoints = pointService.getPointByConditions("A1", "A1-SJGK", "2", null, true);
if (endPoints.size() == 0) {
throw new BadRequestException("收卷辊出口查询失败!");
}
// 获取点
SchBasePoint startPoint = startPoints.get(0);
SchBasePoint endPoint = endPoints.get(0);
// 创建任务
task.setHandle_class(THIS_CLASS);
task.setPoint_code1(startPoint.getPoint_code());
task.setPoint_code2(endPoint.getPoint_code());
task.setVehicle_code(startPoint.getVehicle_code());
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
setUpdateByPC(task);
taskService.save(task);
log.info("任务创建成功:{}", task);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
checkTaskOptionStatus(taskObj);
// 完成任务1、清空起点数据2、创建AGV任务
JSONObject taskParam = new JSONObject();
// 获取参数
String requestParam = taskObj.getRequest_param();
// 其中device_code代表AGV的终点生箔点位
JSONObject requestObj = JSONObject.parseObject(requestParam);
String endAgvPoint = requestObj.getString("device_code");
// 1、清空起点数据
String startPoint = taskObj.getPoint_code1();
SchBasePoint startPointObj = pointService.getById(startPoint);
// 设置载具类型、点位状态、释放点位
if (ObjectUtil.isNotEmpty(startPointObj)) {
// 起点清空
clearPoint(startPointObj);
}
log.info("点位清除完毕,清楚后的数据:{}", startPointObj);
StIvtSbpointivt startAgvPointObj = stIvtSbpointivtService.getByPointCode(endAgvPoint, false);
if (ObjectUtil.isEmpty(startAgvPointObj)) {
throw new BadRequestException("点位[" + endAgvPoint + "]不存在!");
}
log.info("桁架任务完毕,开始创建 [{}] 的AGV任务", endAgvPoint);
// 2、创建AGV任务
taskParam.put("vehicle_code", taskObj.getVehicle_code());
taskParam.put("vehicle_type", taskObj.getVehicle_type());
taskParam.put("device_code", endAgvPoint);
taskParam.put("start_point_code", taskObj.getPoint_code2());
taskParam.put("config_code", "RawCallRollAGVTask");
taskParam.put("up_task_code", taskObj.getTask_code());
taskParam.put("create_mode", GeneralDefinition.TASK_CREATION);
log.info("创建AGV任务的参数{}", taskParam);
rawCallRollAGVTask.apply(taskParam);
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
checkTaskOptionStatus(taskObj);
// 取消
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
}

View File

@@ -0,0 +1,32 @@
package org.nl.wms.sch.task_manage.tasks.raw;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.springframework.stereotype.Component;
/**
* @Author: lyd
* @Description: 生箔下料AGV任务 这里有四点或者两点任务
* @Date: 2024/8/7
*/
@Slf4j
@Component(value = "RawDownAGVTask")
public class RawDownAGVTask extends AbstractTask {
@Override
public void create() throws BadRequestException {
}
@Override
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
@Override
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum autoAcs) {
}
}

View File

@@ -11,7 +11,7 @@ import org.nl.system.service.notice.impl.SysNoticeServiceImpl;
import org.nl.system.service.param.dao.Param;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.ext.mes.service.dto.ResultForMes;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
/**

View File

@@ -7,7 +7,7 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
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.GeneralDefinition;
import org.nl.wms.sch.task_manage.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
@@ -38,7 +38,7 @@ public class PointUtils {
/**
* 清空点位
*
* 会直接更新数据使用时候不需要在update
* @param point
*/
public static void clearPoint(SchBasePoint point) {
@@ -67,7 +67,7 @@ public class PointUtils {
}
SchBasePointServiceImpl pointService = SpringContextHolder.getBean(SchBasePointServiceImpl.class);
// 获取父点位
String parentPointCode = point.getParent_point_code();
String parentPointCode = point.getDevice_code();
SchBasePoint basePoint = pointService.getById(parentPointCode);
point.setVehicle_type("");
point.setVehicle_code("");

View File

@@ -5,14 +5,16 @@ import cn.hutool.core.util.ObjectUtil;
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.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.TaskStatus;
import java.util.List;
@@ -39,6 +41,11 @@ 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) {
// 如果是人工创建,会带个用户过来
@@ -207,4 +214,18 @@ public class TaskUtils {
}
return result;
}
/**
* 任务操作前校验,判断是否完成或取消
* <p>注:此处直接抛出异常,如果不需要请捕获<p/>
* @param taskObj 任务对象实体
*/
public static void checkTaskOptionStatus(SchBaseTask taskObj) {
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
throw new BadRequestException("任务已完成,请勿多次请求!");
}
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
throw new BadRequestException("任务已被取消!");
}
}
}

View File

@@ -11,7 +11,7 @@ spring:
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
messages:
basename: language/login/login,language/error/error,language/buss/buss,language/task/task
basename: language/login/login,language/error/error,language/buss/buss,language/task/common
datasource:
druid:
initial-size: 5 #初始化时建立物理连接的个数