diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/enums/SysParamConstant.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/enums/SysParamConstant.java new file mode 100644 index 0000000..0c8f446 --- /dev/null +++ b/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"; + +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/enuums/EXTConstant.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/enums/EXTConstant.java similarity index 71% rename from wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/enuums/EXTConstant.java rename to wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/enums/EXTConstant.java index a16d24f..528550b 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/enuums/EXTConstant.java +++ b/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"; } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java new file mode 100644 index 0000000..dba20bf --- /dev/null +++ b/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; + +/** + *

+ * WMS调用ACS 服务类 + *

+ * + * @author Liuxy + * @since 2025-06-09 + */ +public interface WmsToAcsService { + + /** + * 下发任务 + * @param list 任务集合 + * @return AcsResponse + */ + AcsResponse renotifyAcs(List list); +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java new file mode 100644 index 0000000..0b3b8a2 --- /dev/null +++ b/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; + +/** + *

+ * WMS调用ACS 实现类 + *

+ * + * @author Liuxy + * @since 2025-06-09 + */ +@Slf4j +@Service +public class WmsToAcsServiceImpl implements WmsToAcsService { + + @Override + public AcsResponse renotifyAcs(List list) { + return AcsUtil.notifyAcs(EXTConstant.SEND_TASK_ACS_API, list); + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToErpServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToErpServiceImpl.java index 68d0d00..2d2b430 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToErpServiceImpl.java +++ b/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 { diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/util/AcsResponse.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/util/AcsResponse.java index 2ad1cfe..b5cd7e4 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/util/AcsResponse.java +++ b/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); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/util/AcsUtil.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/util/AcsUtil.java new file mode 100644 index 0000000..300ad13 --- /dev/null +++ b/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; + +/** + *

+ * ACS工具类 + *

+ * + * @author Liuxy + * @since 2025-06-09 + */ +@Slf4j +@Component +public class AcsUtil { + + /** + * 下发任务 + * @param api acs地址 + * @param param 下发参数 + * @return AcsResponse + */ + public static 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; + } + +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/controller/PdaSchTaskController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/controller/PdaSchTaskController.java index 70779fa..d4606e2 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/controller/PdaSchTaskController.java +++ b/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 queryTask(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaSchTaskService.queryTask(whereJson), HttpStatus.OK); + } + + @PostMapping("/againTask") + @Log("重新下发") + @SaIgnore + public ResponseEntity againTask(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaSchTaskService.againTask(whereJson), HttpStatus.OK); + } + + @PostMapping("/forceConfirm") + @Log("强制确认") + @SaIgnore + public ResponseEntity forceConfirm(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaSchTaskService.forceConfirm(whereJson), HttpStatus.OK); + } + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/PdaSchTaskService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/PdaSchTaskService.java index 7ebc998..3cc764e 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/PdaSchTaskService.java +++ b/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 { * @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); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/impl/PdaSchTaskServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/impl/PdaSchTaskServiceImpl.java index cfdeb1e..08d75ce 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/sch_manage/service/impl/PdaSchTaskServiceImpl.java +++ b/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().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().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 { diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.java index 2b0a345..d1ebdf0 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.java +++ b/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 { int getCarryingByDevice(String deviceCode, String taskConfig); IPage selectPageLeftJoin(IPage pages, SchBaseTaskQuery whereJson, List collect); + + /** + * 手持查询任务 + * @param whereJson { + * task_code: 任务号、载具号、点位号 + * } + */ + List queryPdaTask(@Param("param") JSONObject whereJson); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml index 44e2df2..b90961e 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml @@ -73,4 +73,33 @@ ORDER BY t.create_time DESC + + diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java index 6c47456..a6f42f9 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java +++ b/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 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 taskList = taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO) + .eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode())); + if (ObjectUtil.isEmpty(taskList)) { + return; + } + // 整理下发acs参数 + List 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 taskDtoList = new ArrayList<>(); + taskDtoList.add(this.sendAcsParam(task_id)); + return this.renotifyAcs(taskDtoList); + } + + /** + * 下发任务 + * @param taskDtoList 任务集合 + * @return AcsResponse */ @SneakyThrows - protected AcsResponse renotifyAcs(List taskList) { + protected AcsResponse renotifyAcs(List taskDtoList) { AcsResponse resultForAcs = AcsResponse.requestOk(); - //1、获取任务 - //2、根据任务配置补全任务 - //3、下发 - List 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 taskList = taskService.list( + new QueryWrapper().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() - .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 list = taskService.list(new LambdaQueryWrapper() - .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); + + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AutoSendTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AutoSendTask.java new file mode 100644 index 0000000..a47965e --- /dev/null +++ b/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; + +/** + *

+ * 任务自动下发 + *

+ * + * @author Liuxy + * @since 2025-06-09 + */ +@Slf4j +@Component +@Order(value = 1) +public class AutoSendTask { + private static Set> 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()); + } + }); + } + +} + diff --git a/wms/nladmin-system/nlsso-server/src/main/resources/log/ErpToWms.xml b/wms/nladmin-system/nlsso-server/src/main/resources/log/ErpToWms.xml index 3d60c0e..a86d012 100644 --- a/wms/nladmin-system/nlsso-server/src/main/resources/log/ErpToWms.xml +++ b/wms/nladmin-system/nlsso-server/src/main/resources/log/ErpToWms.xml @@ -3,10 +3,10 @@ - + - ${LOG_HOME}/ErpToWms/%d{yyyy-MM-dd}.%i.log + ${LOG_HOME}/SendAcsTask/%d{yyyy-MM-dd}.%i.log 15 @@ -23,6 +23,6 @@ - + diff --git a/wms/nladmin-system/nlsso-server/src/main/resources/log/SendAcsTask.xml b/wms/nladmin-system/nlsso-server/src/main/resources/log/SendAcsTask.xml new file mode 100644 index 0000000..caf210d --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/resources/log/SendAcsTask.xml @@ -0,0 +1,28 @@ + + + + + + + + + ${LOG_HOME}/ErpToWms/%d{yyyy-MM-dd}.%i.log + + 15 + + 200MB + + 2GB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + ${log.charset} + + + + + + + +