Browse Source

add:手持任务操作

master
刘先源 2 months ago
parent
commit
e245e4c289
  1. 25
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/enums/SysParamConstant.java
  2. 7
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/enums/EXTConstant.java
  3. 25
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java
  4. 29
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java
  5. 7
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToErpServiceImpl.java
  6. 23
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/util/AcsResponse.java
  7. 73
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/util/AcsUtil.java
  8. 21
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/controller/PdaSchTaskController.java
  9. 35
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/PdaSchTaskService.java
  10. 48
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/impl/PdaSchTaskServiceImpl.java
  11. 10
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.java
  12. 29
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml
  13. 184
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java
  14. 60
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AutoSendTask.java
  15. 6
      wms/nladmin-system/nlsso-server/src/main/resources/log/ErpToWms.xml
  16. 28
      wms/nladmin-system/nlsso-server/src/main/resources/log/SendAcsTask.xml

25
wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/enums/SysParamConstant.java

@ -0,0 +1,25 @@
package org.nl.system.enums;
/**
* @author Liuyx
* @date 2025年06月03日
* @desc 系统参数常量
*/
public class SysParamConstant {
/**
* 是否连接ACS
*/
public final static String IS_CONNECT_ACS = "is_connect_acs";
/**
* ACS系统IP
*/
public final static String ACS_URL = "acs_url";
/**
* ERP系统IP
*/
public final static String ERP_URL = "erp_url";
}

7
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/enuums/EXTConstant.java → wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/enums/EXTConstant.java

@ -1,4 +1,4 @@
package org.nl.wms.ext.enuums;
package org.nl.wms.ext.enums;
/**
* @author Liuyx
@ -16,4 +16,9 @@ public class EXTConstant {
* 物料同步ERP接口地址
*/
public final static String MATERIAL_SYNC_ERP_API = "CamstarApi/MomRollBakeInBound";
/**
* ACS下发任务接口地址
*/
public final static String SEND_TASK_ACS_API = "api/wms/task";
}

25
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java

@ -0,0 +1,25 @@
package org.nl.wms.ext.service;
import org.nl.wms.ext.service.util.AcsResponse;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import java.util.List;
/**
* <p>
* WMS调用ACS 服务类
* </p>
*
* @author Liuxy
* @since 2025-06-09
*/
public interface WmsToAcsService {
/**
* 下发任务
* @param list 任务集合
* @return AcsResponse
*/
AcsResponse renotifyAcs(List<AcsTaskDto> list);
}

29
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java

@ -0,0 +1,29 @@
package org.nl.wms.ext.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.nl.wms.ext.enums.EXTConstant;
import org.nl.wms.ext.service.WmsToAcsService;
import org.nl.wms.ext.service.util.AcsResponse;
import org.nl.wms.ext.util.AcsUtil;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* WMS调用ACS 实现类
* </p>
*
* @author Liuxy
* @since 2025-06-09
*/
@Slf4j
@Service
public class WmsToAcsServiceImpl implements WmsToAcsService {
@Override
public AcsResponse renotifyAcs(List<AcsTaskDto> list) {
return AcsUtil.notifyAcs(EXTConstant.SEND_TASK_ACS_API, list);
}
}

7
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToErpServiceImpl.java

@ -5,8 +5,9 @@ import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.config.SpringContextHolder;
import org.nl.system.enums.SysParamConstant;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.ext.enuums.EXTConstant;
import org.nl.wms.ext.enums.EXTConstant;
import org.nl.wms.ext.service.WmsToErpService;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
@ -28,7 +29,7 @@ public class WmsToErpServiceImpl implements WmsToErpService {
log.info("uploadErp回传接口输入参数为:-------------------" + whereJson.toString());
JSONObject result = new JSONObject();
String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("ERP_URL").getValue();
String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode(SysParamConstant.ERP_URL).getValue();
url = url + EXTConstant.UPLOAD_ERP_API;
try {
@ -56,7 +57,7 @@ public class WmsToErpServiceImpl implements WmsToErpService {
log.info("materialSync物料同步接口输入参数为:-------------------" + whereJson.toString());
JSONObject result = new JSONObject();
String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("ERP_URL").getValue();
String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode(SysParamConstant.ERP_URL).getValue();
url = url + EXTConstant.MATERIAL_SYNC_ERP_API;
try {

23
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/util/AcsResponse.java

@ -16,14 +16,35 @@ public class AcsResponse extends BaseResponse {
private JSONArray errArr = new JSONArray();
private JSONArray data = new JSONArray();
public static AcsResponse requestRefuse(String message) {
/**
* 请求失败
* @param message 错误信息
* @return AcsResponse
*/
public static AcsResponse requestError(String message) {
AcsResponse result = new AcsResponse();
result.setCode(HttpStatus.HTTP_BAD_REQUEST);
result.setMessage(message);
result.setResponseDate(DateUtil.now());
return result;
}
/**
* 请求成功带信息
* @param message 信息
* @return AcsResponse
*/
public static AcsResponse requestOkMessage(String message) {
AcsResponse result = new AcsResponse();
result.setCode(HttpStatus.HTTP_OK);
result.setMessage(message);
result.setResponseDate(DateUtil.now());
return result;
}
/**
* 请求成功
* @return AcsResponse
*/
public static AcsResponse requestOk() {
AcsResponse result = new AcsResponse();
result.setCode(HttpStatus.HTTP_OK);

73
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/util/AcsUtil.java

@ -0,0 +1,73 @@
package org.nl.wms.ext.util;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.config.SpringContextHolder;
import org.nl.system.enums.SysParamConstant;
import org.nl.system.service.param.dao.Param;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.ext.service.util.AcsResponse;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.springframework.stereotype.Component;
/**
* <p>
* ACS工具类
* </p>
*
* @author Liuxy
* @since 2025-06-09
*/
@Slf4j
@Component
public class AcsUtil {
/**
* 下发任务
* @param api acs地址
* @param param 下发参数
* @return AcsResponse
*/
public static <T> AcsResponse notifyAcs(String api, T param) {
log.info("下发ACS任务的输入参数为:-------------------" + param.toString());
// 返回参数
AcsResponse resultAcs;
// 系统参数类
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
//判断是否连接ACS系统
Param isConnectAcs = sysParamService.findByCode(SysParamConstant.IS_CONNECT_ACS);
if (ObjectUtil.isEmpty(isConnectAcs)) {
return AcsResponse.requestError("系统参数表中:" + SysParamConstant.IS_CONNECT_ACS + "不存在");
}
if (isConnectAcs.getValue().equals(IOSConstant.IS_DELETE_NO)) {
return AcsResponse.requestOkMessage("下发成功,未连接ACS系统!");
}
//ACS地址
Param acsUrlParam = sysParamService.findByCode(SysParamConstant.ACS_URL);
if (ObjectUtil.isEmpty(acsUrlParam)) {
return AcsResponse.requestError("系统参数表中:" + SysParamConstant.ACS_URL + "不存在");
}
String url = acsUrlParam.getValue() + api;
try {
String resultMsg = HttpRequest.post(url)
.body(String.valueOf(param))
.execute().body();
// 格式转换
JSONObject result = JSONObject.parseObject(resultMsg);
resultAcs = JSONObject.toJavaObject(result, AcsResponse.class);
log.info("下发ACS任务的输出参数为:-------------------" + resultMsg);
} catch (Exception e) {
//网络不通
String msg = e.getMessage();
log.error("连接失败:{}", msg);
return AcsResponse.requestError("网络不通,操作失败!");
}
return resultAcs;
}
}

21
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/controller/PdaSchTaskController.java

@ -39,4 +39,25 @@ public class PdaSchTaskController {
return new ResponseEntity<>(pdaSchTaskService.pointTask(whereJson), HttpStatus.OK);
}
@PostMapping("/queryTask")
@Log("查询未完成的任务")
@SaIgnore
public ResponseEntity<Object> queryTask(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaSchTaskService.queryTask(whereJson), HttpStatus.OK);
}
@PostMapping("/againTask")
@Log("重新下发")
@SaIgnore
public ResponseEntity<Object> againTask(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaSchTaskService.againTask(whereJson), HttpStatus.OK);
}
@PostMapping("/forceConfirm")
@Log("强制确认")
@SaIgnore
public ResponseEntity<Object> forceConfirm(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaSchTaskService.forceConfirm(whereJson), HttpStatus.OK);
}
}

35
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/PdaSchTaskService.java

@ -26,4 +26,39 @@ public interface PdaSchTaskService extends IService<SchBaseTask> {
* @return PdaResponse
*/
PdaResponse pointTask(JSONObject whereJson);
/**
* 查询未完成的任务
* @param whereJson {
* task_code: 任务号载具号点位号
* }
* @return PdaResponse
*/
PdaResponse queryTask(JSONObject whereJson);
/**
* 重新下发
* @param whereJson {
* task_code任务号
* vehicle_code载具号
* point_code1起点
* point_code2终点
* task_status状态
* }
* @return PdaResponse
*/
PdaResponse againTask(JSONObject whereJson);
/**
* 强制确认
* @param whereJson {
* task_code任务号
* vehicle_code载具号
* point_code1起点
* point_code2终点
* task_status状态
* }
* @return PdaResponse
*/
PdaResponse forceConfirm(JSONObject whereJson);
}

48
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/impl/PdaSchTaskServiceImpl.java

@ -1,11 +1,15 @@
package org.nl.wms.pda.sch_manage.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.ext.service.util.AcsResponse;
import org.nl.wms.pda.sch_manage.service.PdaSchTaskService;
import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.sch_manage.enums.TaskEnum;
@ -13,6 +17,8 @@ import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.TaskFactory;
import org.nl.wms.sch_manage.service.util.tasks.PdaPointTask;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
@ -55,6 +61,12 @@ public class PdaSchTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
@Autowired
private PdaPointTask pdaPointTask;
/**
* 任务工厂服务
*/
@Autowired
private TaskFactory taskFactory;
@Override
@Transactional
public PdaResponse pointTask(JSONObject whereJson) {
@ -71,6 +83,42 @@ public class PdaSchTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
return PdaResponse.requestOk();
}
@Override
public PdaResponse queryTask(JSONObject whereJson) {
return PdaResponse.requestParamOk(this.baseMapper.queryPdaTask(whereJson));
}
@Override
@Transactional
public PdaResponse againTask(JSONObject whereJson) {
// 查询当前任务
SchBaseTask taskDao = this.getOne(
new QueryWrapper<SchBaseTask>().lambda()
.eq(SchBaseTask::getTask_code, whereJson.getString("task_code"))
);
// 根据任务配置编码获取所属任务类抽象类
AbstractTask task = taskFactory.getTask(taskDao.getConfig_code());
AcsResponse acsResponse = task.sendTaskOne(taskDao.getTask_id());
if (acsResponse.getCode() != HttpStatus.HTTP_OK) {
throw new BadRequestException(acsResponse.getMessage());
}
return PdaResponse.requestOk();
}
@Override
@Transactional
public PdaResponse forceConfirm(JSONObject whereJson) {
// 查询当前任务
SchBaseTask taskDao = this.getOne(
new QueryWrapper<SchBaseTask>().lambda()
.eq(SchBaseTask::getTask_code, whereJson.getString("task_code"))
);
// 根据任务配置编码获取所属任务类抽象类
AbstractTask task = taskFactory.getTask(taskDao.getConfig_code());
task.forceFinish(taskDao.getTask_code());
return PdaResponse.requestOk();
}
/**
* 校验起点终点载具
* @param whereJson {

10
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.java

@ -1,7 +1,9 @@
package org.nl.wms.sch_manage.service.dao.mapper;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.dto.SchBaseTaskQuery;
@ -21,4 +23,12 @@ public interface SchBaseTaskMapper extends BaseMapper<SchBaseTask> {
int getCarryingByDevice(String deviceCode, String taskConfig);
IPage<SchBaseTask> selectPageLeftJoin(IPage<SchBaseTask> pages, SchBaseTaskQuery whereJson, List<String> collect);
/**
* 手持查询任务
* @param whereJson {
* task_code: 任务号载具号点位号
* }
*/
List<JSONObject> queryPdaTask(@Param("param") JSONObject whereJson);
}

29
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml

@ -73,4 +73,33 @@
</where>
ORDER BY t.create_time DESC
</select>
<select id="queryPdaTask" resultType="com.alibaba.fastjson.JSONObject">
SELECT
task_id,
task_code,
vehicle_code,
point_code1,
point_code2,
(CASE task_status
WHEN '0' THEN '生成'
WHEN '1' THEN '申请'
WHEN '2' THEN '创建完成'
WHEN '3' THEN '下发'
WHEN '4' THEN '执行中'
END) AS task_status
FROM
sch_base_task
<where>
is_delete = '0'
AND task_status IN ('0','1','2','3','4')
<if test="param.task_code != null and param.task_code != ''">
AND
(task_code = #{param.task_code} or
vehicle_code = #{param.task_code} or
point_code1 = #{param.task_code} or
point_code2 = #{param.task_code})
</if>
</where>
</select>
</mapper>

184
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java

@ -1,44 +1,47 @@
package org.nl.wms.sch_manage.service.util;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpStatus;
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 lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.ext.service.WmsToAcsService;
import org.nl.wms.ext.service.util.AcsResponse;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.ISchBaseTaskconfigService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.dao.SchBaseTaskconfig;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Liuxy
* @version 1.0
* @date 2025年05月19日
* @desc 任务抽象父类申请任务的相关率先判断以及生成接着到子类执行任务的创建最后统一通过定时任务去下发到ACS
*/
@Slf4j
@Component
public abstract class AbstractTask {
@Autowired
private ISchBaseTaskService taskService;
/**
* 任务服务
*/
@Autowired
private ISchBaseTaskconfigService taskConfigService;
/* @Autowired
private ISchBasePointService pointService;
private ISchBaseTaskService taskService;
/**
* wms调用acs接口服务
*/
@Autowired
private WmsToAcsService wmsToAcsService;*/
private WmsToAcsService wmsToAcsService;
/**
* 任务创建
@ -48,55 +51,59 @@ public abstract class AbstractTask {
/**
* 下发acs前参数整理
* @param taskId
*
*/
public abstract AcsTaskDto sendAcsParam(String taskId);
/**
* @return WCS的任务集合
* @discription 重新下发给wcs任务
* @author ldjun
* @created 2020年6月12日 下午5:52:28
* 定时任务
*/
protected AcsResponse renotifyAcs(SchBaseTask task) {
Assert.notNull(task);
List<SchBaseTask> taskList = new ArrayList<>();
taskList.add(task);
return this.renotifyAcs(taskList);
public void schedule() {
this.autoTask();
}
/**
* @return WCS的任务集合
* @discription 重新下发给wcs任务
* @author ldjun
* @created 2020年6月12日 下午5:52:28
* 查询所有任务并整理好参数
*/
public void autoTask() {
// 查询未执行下发的任务
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
.eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode()));
if (ObjectUtil.isEmpty(taskList)) {
return;
}
// 整理下发acs参数
List<AcsTaskDto> taskDtoList = new ArrayList<>();
for (SchBaseTask taskDao : taskList) {
AcsTaskDto acsTaskDto = this.sendAcsParam(taskDao.getTask_id());
taskDtoList.add(acsTaskDto);
}
// 下发
this.renotifyAcs(taskDtoList);
}
/**
* 下发当前任务
* @param task_id 任务标识
*/
public AcsResponse sendTaskOne(String task_id) {
List<AcsTaskDto> taskDtoList = new ArrayList<>();
taskDtoList.add(this.sendAcsParam(task_id));
return this.renotifyAcs(taskDtoList);
}
/**
* 下发任务
* @param taskDtoList 任务集合
* @return AcsResponse
*/
@SneakyThrows
protected AcsResponse renotifyAcs(List<SchBaseTask> taskList) {
protected AcsResponse renotifyAcs(List<AcsTaskDto> taskDtoList) {
AcsResponse resultForAcs = AcsResponse.requestOk();
//1、获取任务
//2、根据任务配置补全任务
//3、下发
List<AcsTaskDto> list = new ArrayList<>();
for (SchBaseTask task : taskList) {
AcsTaskDto taskDto = new AcsTaskDto();
String responseParam = task.getResponse_param();
if (ObjectUtil.isNotEmpty(responseParam)) {
JSONObject jsonObject = JSONObject.parseObject(responseParam);
taskDto.setDirection(jsonObject.getString("direction"));
taskDto.setPut_device_code(jsonObject.getString("fmj_device"));
}
taskDto.setExt_task_uuid(task.getTask_id());
taskDto.setTask_code(task.getTask_code());
taskDto.setRoute_plan_code("normal");
taskDto.setVehicle_code(task.getVehicle_code());
taskDto.setVehicle_code2(task.getVehicle_code2());
this.setTask(task.getConfig_code(), taskDto);
list.add(taskDto);
}
try {
// 创建下发对象
// TODO resultForAcs = wmsToAcsService.renotifyAcs(list);
resultForAcs = wmsToAcsService.renotifyAcs(taskDtoList);
} catch (Exception e) {
log.error("任务下发异常: {}", e.getMessage());
resultForAcs.setResponseDate(DateUtil.now());
@ -105,7 +112,16 @@ public abstract class AbstractTask {
}
// 如果下发完毕,就修改状态
if (resultForAcs.getCode() == HttpStatus.HTTP_OK) {
// 解析
// 查询所有任务
List<SchBaseTask> taskList = taskService.list(
new QueryWrapper<SchBaseTask>().lambda()
.in(SchBaseTask::getTask_code, taskDtoList.stream()
.map(AcsTaskDto::getTask_code)
.collect(Collectors.toList())
)
);
// 解析并备注
JSONArray errArr = resultForAcs.getErrArr();
for (SchBaseTask schBaseTask : taskList) {
schBaseTask.setTask_status(TaskStatus.ISSUED.getCode());
@ -126,87 +142,31 @@ public abstract class AbstractTask {
return resultForAcs;
}
private AcsTaskDto setTask(String configCode, AcsTaskDto taskDto) {
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, configCode));
taskDto.setPriority(taskConfig.getPriority());
taskDto.setTask_type(taskConfig.getAcs_task_type());
taskDto.setRoute_plan_code(taskConfig.getRoute_plan_code());
return taskDto;
}
/**
* 定时任务
*/
public void schedule() {
this.autoCreate();
// 下发
this.getAllFinishTask();
}
public void getAllFinishTask() {
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_status, TaskStatus.CREATED.getCode()));
if (ObjectUtil.isEmpty(list)) {
return;
}
// 下发
this.renotifyAcs(list);
}
public void updateTaskStatus(String taskCode, TaskStatus status) {
this.updateStatus(taskCode, status);
}
/**
* 自动生成任务
*/
protected void autoCreate() {
}
/**
* 以下改为public会出现自动注入类出现问题
*
* @param task_code
* @param status
* @param task_code r任务号
* @param status 状态码
*/
protected abstract void updateStatus(String task_code, TaskStatus status);
/**
* 首先组盘在下发任务
*
* @param param 具体参数
*/
public String setGroupPlate(JSONObject param) {
return "";
}
/**
* 强制结束完成任务
*
* @param task_code
* @param task_code 任务号
*/
public abstract void forceFinish(String task_code);
/**
* 取消任务,货物搬回原点
*
* @param task_code
* @param task_code 任务号
*/
public abstract void cancel(String task_code);
/**
* 申请任务
*
* @param param
* @throws BadRequestException
* 回传mes
* @param task_code 任务号
*/
public void apply(JSONObject param) throws BadRequestException {
}
public abstract void backMes(String task_code);
}

60
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AutoSendTask.java

@ -0,0 +1,60 @@
package org.nl.wms.sch_manage.service.util;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.config.SpringContextHolder;
import org.reflections.Reflections;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Set;
/**
* <p>
* 任务自动下发
* </p>
*
* @author Liuxy
* @since 2025-06-09
*/
@Slf4j
@Component
@Order(value = 1)
public class AutoSendTask {
private static Set<Class<? extends AbstractTask>> subTypes = null;
// 类加载时候执行扫描
static {
Reflections reflections = new Reflections("org.nl.wms.sch_manage.service.util.tasks");
subTypes = reflections.getSubTypesOf(AbstractTask.class);
}
@SneakyThrows
public void run() {
log.debug("定时任务AutoCreateTask开始执行:");
this.doExecute();
}
/**
* 需要按照任务配置类型并行执行
*/
private void doExecute() {
subTypes.forEach(clz -> {
// 调用AbstractAcsTask类的每个子类的schedule()方法
try {
Object obj = SpringContextHolder.getBean(clz);
Method m = obj.getClass().getMethod("schedule");
m.invoke(obj);
} catch (InvocationTargetException e) {
e.printStackTrace();
log.info("定时器执行失败:{}", e.getTargetException().getMessage());
} catch (Exception e) {
e.printStackTrace();
log.info("定时器执行失败:{}", e.getMessage());
}
});
}
}

6
wms/nladmin-system/nlsso-server/src/main/resources/log/ErpToWms.xml

@ -3,10 +3,10 @@
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
<property name="LOG_HOME" value="${logPath}"/>
<!-- 按照每天生成日志文件 -->
<appender name="FILE_ERPTOWMS" class="ch.qos.logback.core.rolling.RollingFileAppender">
<appender name="FILE_SENDTASK" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/ErpToWms/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<FileNamePattern>${LOG_HOME}/SendAcsTask/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
<!--单个日志最大容量 至少10MB才能看得出来-->
@ -23,6 +23,6 @@
</appender>
<!-- 打印sql -->
<logger name="org.nl.wms.ext.service.impl.ErpToWmsServiceImpl" level="info" additivity="false">
<appender-ref ref="FILE_ERPTOWMS"/>
<appender-ref ref="FILE_SENDTASK"/>
</logger>
</included>

28
wms/nladmin-system/nlsso-server/src/main/resources/log/SendAcsTask.xml

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<included>
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
<property name="LOG_HOME" value="${logPath}"/>
<!-- 按照每天生成日志文件 -->
<appender name="FILE_ERPTOWMS" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/ErpToWms/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
<!--单个日志最大容量 至少10MB才能看得出来-->
<maxFileSize>200MB</maxFileSize>
<!--所有日志最多占多大容量-->
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>${log.charset}</charset>
</encoder>
</appender>
<!-- 打印sql -->
<logger name="org.nl.wms.ext.util.AcsUtil" level="info" additivity="false">
<appender-ref ref="FILE_ERPTOWMS"/>
</logger>
</included>
Loading…
Cancel
Save