From ba4501dd6a5cb8642a54b05c81de92ad00b632dd Mon Sep 17 00:00:00 2001 From: "HUOJIN\\92525" <925258474@qq.com> Date: Mon, 29 Apr 2024 17:12:40 +0800 Subject: [PATCH 1/3] no message --- .../src/main/java/com/youchain/AppRun.java | 2 + .../repository/AgvTaskRepository.java | 84 +++------- .../businessdata/rest/KMReSController.java | 3 +- .../businessdata/service/AgvTaskService.java | 150 +++++++++--------- .../service/impl/AgvTaskServiceImpl.java | 145 +++-------------- .../service/impl/MlsServiceImpl.java | 5 +- .../service/impl/MoServiceImpl.java | 2 +- .../youchain/modules/quartz/task/moTask.java | 2 - .../modules/quartz/task/pickTask.java | 76 +++------ .../modules/quartz/utils/TimeNumberUtils.java | 4 +- 10 files changed, 151 insertions(+), 322 deletions(-) diff --git a/youchain-system/src/main/java/com/youchain/AppRun.java b/youchain-system/src/main/java/com/youchain/AppRun.java index 472bfa7..4aa6a42 100644 --- a/youchain-system/src/main/java/com/youchain/AppRun.java +++ b/youchain-system/src/main/java/com/youchain/AppRun.java @@ -55,6 +55,8 @@ public class AppRun { // 或者在 application.yml 添加文件路径,方便 kill,kill `cat /home/eladmin/app.pid` springApplication.addListeners(new ApplicationPidFileWriter()); springApplication.run(args); + + } @Bean diff --git a/youchain-system/src/main/java/com/youchain/businessdata/repository/AgvTaskRepository.java b/youchain-system/src/main/java/com/youchain/businessdata/repository/AgvTaskRepository.java index 9bae964..e48a867 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/repository/AgvTaskRepository.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/repository/AgvTaskRepository.java @@ -1,19 +1,20 @@ /* -* Copyright 2019-2020 Zheng Jie -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.youchain.businessdata.repository; + import com.youchain.businessdata.domain.AgvTask; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -22,63 +23,18 @@ import org.springframework.data.jpa.repository.Query; import java.util.List; /** -* @website https://eladmin.vip -* @author baobinglin -* @date 2023-08-18 -**/ + * @author baobinglin + * @website https://eladmin.vip + * @date 2023-08-18 + **/ public interface AgvTaskRepository extends JpaRepository, JpaSpecificationExecutor { - /** - * 查询滚筒出库任务执行中的任务 - * @return - */ - @Query(value = "SELECT * FROM data_agv_task where type='PICK' and job_type='ROLLER_MOVE' and status not in ('FINISH','CANCEL') and stock_code=?1 ", nativeQuery = true) - AgvTask findBycontainerCode(String containerCode); - /** * 查询前后桶正在执行的任务 + * * @return */ @Query(value = "select * FROM data_agv_task a where a.`status` in ('ATCALL','UP_CONTAINER','OPEN') AND a.end_slot_code like 'MA1151-QH%'" + " UNION select * FROM data_agv_task a where a.`status` in ('ATCALL','UP_CONTAINER','OPEN') AND a.start_slot_code like 'MA1151-QH%' ", nativeQuery = true) List queryAgvTaskPerformedQH(); - - /** - * @param status-状态 - * @param type-类型 - * @param be_scan-是否扫描 - * @return - */ - @Query(value = "SELECT * FROM data_agv_task where 1=1 and if((?1 !='' or ?1 is not null) ,stock_code=?1,1=1) and status=?2 and type=?3 and be_scan=?4 and job_type=?5 order by update_time ", nativeQuery = true) - List queryByAgvTask(String stockCode, String status, String type, int be_scan,String jobType); - - /** - * 查询正在执行的开始点位有没有这个点位的任务 - * @param startPoint 开始点位 - * @return - */ - @Query(value = "select * FROM data_agv_task a where a.`status` in ('ATCALL','UP_CONTAINER') AND a.start_slot_code = ?1", nativeQuery = true) - List findStartTask(String startPoint); - - /** - * 查询正在执行的结束点位有没有这个点位的任务 - * @param endPoint - * @return - */ - @Query(value = "select * FROM data_agv_task a where a.`status` in ('ATCALL','UP_CONTAINER') AND a.end_slot_code = ?1", nativeQuery = true) - List findEndTask(String endPoint); - - /** - * 根据线边分组 - * @return - */ - @Query(value = "select line_slot_code from data_agv_task where type='PICK' and `status`='OPEN' and line_slot_code is not null GROUP BY line_slot_code order by line_slot_code ", nativeQuery = true) - List queryGroupAgvTask(); - - /** - * 查询线边任务待执行的任务 - * @return - */ - @Query(value = "select * from data_agv_task where line_slot_code=?1 and type='PICK' and `status`='OPEN' and line_slot_code is not null ORDER BY create_time ", nativeQuery = true) - List queryLineAgvTask(String line_slot_code); } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java index 7fc0f65..637e4b2 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java @@ -68,7 +68,7 @@ public class KMReSController { String missionStatus = missionStateCallback.getMissionStatus();//作业当前状态 try { //料箱出库任务 - if(id.indexOf("XJ")!=-1){ + if(id.indexOf("LX")!=-1){ if(missionStatus.equals("CANCELED")){ List agvTaskList= agvTaskService.findByjobCode(id); for(AgvTask agvTask:agvTaskList){ @@ -143,6 +143,7 @@ public class KMReSController { * * @param task */ + @Async public void returnIssue(@RequestBody Task task) { ReturnIssueInfo returnIssueInfo = getReturnIssueInfo(task); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java index 3cc3097..0efb4bf 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java @@ -1,18 +1,18 @@ /* -* Copyright 2019-2020 Zheng Jie -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.youchain.businessdata.service; import com.youchain.annotation.Log; @@ -23,70 +23,79 @@ import com.youchain.businessdata.service.dto.AgvTaskDto; import com.youchain.businessdata.service.dto.AgvTaskQueryCriteria; import io.swagger.annotations.Api; import org.springframework.data.domain.Pageable; + import java.util.Map; import java.util.List; import java.io.IOException; import javax.servlet.http.HttpServletResponse; /** -* @website https://eladmin.vip -* @description 服务接口 -* @author baobinglin -* @date 2023-08-18 -**/ + * @author baobinglin + * @website https://eladmin.vip + * @description 服务接口 + * @date 2023-08-18 + **/ public interface AgvTaskService { /** - * 查询数据分页 - * @param criteria 条件 - * @param pageable 分页参数 - * @return Map - */ - Map queryAll(AgvTaskQueryCriteria criteria, Pageable pageable); + * 查询数据分页 + * + * @param criteria 条件 + * @param pageable 分页参数 + * @return Map + */ + Map queryAll(AgvTaskQueryCriteria criteria, Pageable pageable); /** - * 查询所有数据不分页 - * @param criteria 条件参数 - * @return List - */ + * 查询所有数据不分页 + * + * @param criteria 条件参数 + * @return List + */ List queryAll(AgvTaskQueryCriteria criteria); /** * 根据ID查询 + * * @param id ID * @return AgvTaskDto */ AgvTaskDto findById(Integer id); /** - * 创建 - * @param resources / - * @return AgvTaskDto - */ + * 创建 + * + * @param resources / + * @return AgvTaskDto + */ AgvTaskDto create(AgvTask resources); /** - * 编辑 - * @param resources / - */ + * 编辑 + * + * @param resources / + */ void update(AgvTask resources); /** - * 多选删除 - * @param ids / - */ + * 多选删除 + * + * @param ids / + */ void deleteAll(Integer[] ids); /** - * 导出数据 - * @param all 待导出的数据 - * @param response / - * @throws IOException / - */ + * 导出数据 + * + * @param all 待导出的数据 + * @param response / + * @throws IOException / + */ void download(List all, HttpServletResponse response) throws IOException; /** * 发送货架搬运接口任务 + * * @param agvTasks * @return */ @@ -94,45 +103,25 @@ public interface AgvTaskService { /** * 发送料箱搬运接口任务 + * * @param agvTasks * @return */ - public String sendAgvTaskLXImpl(List agvTasks); + String sendAgvTaskLXImpl(List agvTasks); - /** - * 发送滚筒搬运接口任务 - * @param agvTasks1-满箱任务 - * @param agvTasks1-控销任务 - * @return - */ - public String sendAgvTaskGTImpl(List agvTasks1,List agvTasks2); - - - String containerIn(String containerCode,String position); + String containerIn(String containerCode, String position); /** * 容器出场 + * * @param containerCode-容器编号 * @return */ String containerOut(String containerCode); - /** - * 查询容器状态 - * @param containerCode-容器编号 - * @return - */ - String containerQuery(String containerCode); - - /** - * 查询输送线上料箱总数 - * @param taskCode-输送线编号 - * @return - */ - int QueryCount(String taskCode); - /** * 读取输送线、流利式货架状态 + * * @param conveyorId-输送线编号 * @return */ @@ -142,32 +131,43 @@ public interface AgvTaskService { /** * 任务回报更新状态 + * * @param agvTask * @param status * @param */ - void agvTaskCallback(AgvTask agvTask,Task task, String status); + void agvTaskCallback(AgvTask agvTask, Task task, String status); - void agvTaskCallback(AgvTask agvTask,String status,String containerCode); + void agvTaskCallback(AgvTask agvTask, String status, String containerCode); - List findById(List ids); +// List findById(List ids); double queryBillCodeSum(String billCode); /** - *根据组号+料箱号招找到对应的AGV + * 根据组号+料箱号招找到对应的AGV + * * @param jobForce-任务组号 * @param containerCode-容器号 * @return */ - AgvTask findByjobCode(String jobForce,String containerCode); + AgvTask findByjobCode(String jobForce, String containerCode); /** - *根据组号+找到对应的AGV集合 + * 根据组号+找到对应的AGV集合 + * * @param jobForce-任务组号 * @return */ List findByjobCode(String jobForce); + /** + * + * @param status + * @param type + * @return + */ + List queryByAgvTask(String status,String type); + } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java index 76c22fc..c7bc0b9 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java @@ -235,7 +235,7 @@ public class AgvTaskServiceImpl implements AgvTaskService { @Override public synchronized String sendAgvTaskLXImpl(List agvTasks) { JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); - String agvCode = TimeNumberUtils.getXJTaskCode(); + String agvCode = TimeNumberUtils.getLXTaskCode(); Map objMap = new LinkedHashMap<>(); objMap.put("orgId", agvCode);//库存组织 ID(或工厂代码,供应商代码) objMap.put("requestId", agvCode);//请求 id @@ -273,10 +273,19 @@ public class AgvTaskServiceImpl implements AgvTaskService { objMap.put("missionData", missionDataArray); jsonObject.putAll(objMap); - System.out.println(jsonObject.toString()); - String resultJson = HttpPostUtil.sendPostReq(UrlApi.submitMission, jsonObject.toString()); + String resultJson="{\n" + + " \"data\": null,\n" + + " \"code\": \"0\",\n" + + " \"message\": null,\n" + + " \"success\": true\n" + + "}"; + //String resultJson = HttpPostUtil.sendPostReq(UrlApi.submitMission, jsonObject.toString()); + if (resultJson == null) { + return null; + } JSONObject resulObject = JSON.parseObject(resultJson); String code = resulObject.getString("code") == null ? "" : resulObject.getString("code"); + if (code.equals("0")) { for (int i = 0; i < agvTasks.size(); i++) { AgvTask agvTask = agvTasks.get(i); @@ -299,92 +308,6 @@ public class AgvTaskServiceImpl implements AgvTaskService { return resultJson; } - @Override - public synchronized String sendAgvTaskGTImpl(List agvTasks1, List agvTasks2) { - JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); - String agvCode = TimeNumberUtils.getGTTaskCode(); - Map objMap = new LinkedHashMap<>(); - objMap.put("orgId", agvCode);//库存组织 ID(或工厂代码,供应商代码) - objMap.put("requestId", agvCode);//请求 id - objMap.put("missionCode", agvCode);//任务编号 - objMap.put("missionType", "ROLLER_MOVE");//任务类型 :滚筒 - objMap.put("viewBoardType", "");//上视识别类型: - JSONArray missionDataArray = new JSONArray(); - for (int i = 0; i < agvTasks1.size(); i++) { - AgvTask agvTask = agvTasks1.get(i); - JSONObject missionDataObj = new JSONObject(new LinkedHashMap<>()); - Map missionDataMap = new LinkedHashMap<>(); - missionDataMap.put("sequence", (i + 1));//序号 - missionDataMap.put("binCode", agvTask.getStockCode());//料箱号 - missionDataMap.put("startDeviceCode", agvTask.getStartSlotCode());//料箱所在的起始槽位 - missionDataMap.put("endDeviceCode", agvTask.getEndSlotCode());//料箱所在的目标槽位 - missionDataMap.put("rollerLevel", 2);//层 - missionDataMap.put("rollerColumn", (i + 1));//列 - missionDataObj.putAll(missionDataMap); - missionDataArray.add(missionDataObj); - } - int sum = agvTasks1.size(); - if (agvTasks2.size() > 0) { - for (int i = 0; i < agvTasks2.size(); i++) { - AgvTask agvTask = agvTasks2.get(i); - JSONObject missionDataObj = new JSONObject(new LinkedHashMap<>()); - Map missionDataMap = new LinkedHashMap<>(); - missionDataMap.put("sequence", (sum + (i + 1)));//序号 - missionDataMap.put("binCode", agvTask.getStockCode());//料箱号 - missionDataMap.put("startDeviceCode", agvTask.getStartSlotCode());//料箱所在的起始槽位 - missionDataMap.put("endDeviceCode", agvTask.getEndSlotCode());//料箱所在的目标槽位 - missionDataMap.put("rollerLevel", 1);//层 - missionDataMap.put("rollerColumn", (i + 1));//列 - missionDataObj.putAll(missionDataMap); - missionDataArray.add(missionDataObj); - } - } - - - objMap.put("missionData", missionDataArray); - jsonObject.putAll(objMap); - System.out.println(jsonObject.toString()); - String resultJson = HttpPostUtil.sendPostReq(UrlApi.submitMission, jsonObject.toString());//返回ResponseJson*/ - JSONObject resulObject = JSON.parseObject(resultJson); - String code = resulObject.getString("code") == null ? "" : resulObject.getString("code"); - if (code.equals("0")) { - for (int i = 0; i < agvTasks1.size(); i++) { - AgvTask agvTask = agvTasks1.get(i); - agvTask.setJobForce(agvCode);//任务组 - agvTask.setJobForceAsc((i + 1)); - agvTask.setStatus(BizStatus.ATCALL); - agvTask.setJobMessage(resultJson); - agvTask.setReqMessage(jsonObject.toString()); - agvTask.setStartTime(new Timestamp(new Date().getTime())); - update(agvTask); - } - for (int i = 0; i < agvTasks2.size(); i++) { - AgvTask agvTask = agvTasks2.get(i); - agvTask.setJobForce(agvCode);//任务组 - agvTask.setJobForceAsc((i + 1)); - agvTask.setStatus(BizStatus.ATCALL); - agvTask.setJobMessage(resultJson); - agvTask.setReqMessage(jsonObject.toString()); - agvTask.setStartTime(new Timestamp(new Date().getTime())); - update(agvTask); - } - } else { - for (int i = 0; i < agvTasks1.size(); i++) { - AgvTask agvTask = agvTasks1.get(i); - agvTask.setJobMessage(resultJson); - agvTask.setReqMessage(jsonObject.toString()); - update(agvTask); - } - for (int i = 0; i < agvTasks2.size(); i++) { - AgvTask agvTask = agvTasks2.get(i); - agvTask.setJobMessage(resultJson); - agvTask.setReqMessage(jsonObject.toString()); - update(agvTask); - } - } - return resultJson; - } - @Override public synchronized String containerIn(String containerCode, String position) { JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); @@ -406,28 +329,6 @@ public class AgvTaskServiceImpl implements AgvTaskService { return jsonObject.toJSONString(); } - @Override - public String containerQuery(String containerCode) { - JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); - jsonObject.put("nodeCode", "");//点位编码 - jsonObject.put("containerModelCode", "");//容器模型编码 - jsonObject.put("containerCode", containerCode);//容器编号 - jsonObject.put("areaCode", "");//区域编码 - jsonObject.put("emptyFullStatus", 2);//容器的空满状态 空 0 满 1 全部 2 - return jsonObject.toJSONString(); - } - - @Override - public int QueryCount(String taskCode) { - - String jsonObject = "{\"taskCode\":\"" + taskCode + "\"}";//查询出库缓存输送线上满料箱总数 - String resultJson = HttpPostUtil.sendPostReq(UrlApi.QueryCount, jsonObject); - JSONObject json = JSON.parseObject(resultJson); - String queryCount = json.getString("queryCount"); - - return Integer.parseInt(queryCount); - } - @Override public void getConveyorState(String conveyorId) { /* String resultJson= HttpPostUtil.sendPostReq(UrlApi.agv_url, jsonObject.toString());//返回ResponseJson*/ @@ -463,7 +364,7 @@ public class AgvTaskServiceImpl implements AgvTaskService { @Override public void agvTaskCallback(AgvTask agvTask, Task task, String status) { - if (status.equals("COMPLETED")) { + if (status.equals("COMPLETED")) { //入库 if (agvTask.getType().equals(BizStatus.ASN)) { //增加库存 @@ -524,16 +425,6 @@ public class AgvTaskServiceImpl implements AgvTaskService { } } - @Override - public List findById(List ids) { - String agvTaskIds = StringUtils.strip(ids.toString(), "[]"); - String hql = " from AgvTask agv where agv.id in (" + agvTaskIds + ") "; - Query query = entityMapper.createQuery(hql); - List agvTaskList = query.getResultList(); - return agvTaskList; - } - - @Override public double queryBillCodeSum(String billCode) { String hql = "select sum(task.moveQty) from Task task where task.billCode= :billCode"; @@ -569,4 +460,14 @@ public class AgvTaskServiceImpl implements AgvTaskService { return agvTaskList; } + @Override + public List queryByAgvTask(String status, String type) { + String hql = " from AgvTask agv where agv.status= :status and agv.type= :type"; + Query query = entityMapper.createQuery(hql); + query.setParameter("status", status); + query.setParameter("type", type); + List agvTaskList = query.getResultList(); + return agvTaskList; + } + } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java index 03d7d8c..b82e12e 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java @@ -447,7 +447,7 @@ public class MlsServiceImpl implements MlsService { pickDetailToCreate.add(pd); //生成搬运任务 - AgvTask agvTask = new AgvTask(BizStatus.PICK, stock.getCode(), startPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "01"); + AgvTask agvTask = new AgvTask(BizStatus.PICK, stock.getCode(), startPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "PICKER_MOVE"); agvTaskToCreate.add(agvTask); //生成Task @@ -478,14 +478,17 @@ public class MlsServiceImpl implements MlsService { batchCreateOrUpdate.batchUpdate(inventoryToUpdate); } + //批量生成出库明细 if (!pickDetailToCreate.isEmpty()) { batchCreateOrUpdate.batchCreate(pickDetailToCreate); } + //批量生成agv任务 if (!agvTaskToCreate.isEmpty()) { batchCreateOrUpdate.batchCreate(agvTaskToCreate); } + //批量生成task任务 if (!taskToCreate.isEmpty()) { batchCreateOrUpdate.batchCreate(taskToCreate); } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java index 6ddb96d..5a35c5d 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java @@ -235,7 +235,7 @@ public class MoServiceImpl implements MoService { public void createTasks(Item item, Stock stock, Point srcPoint, Point endPoint, String propC1, MoDto moDto, OrderDto orderDto) { // 生成AGV任务 - AgvTask agvTask = new AgvTask(BizStatus.ASN, stock.getCode(), srcPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "RACK_MOVE_FULL"); + AgvTask agvTask = new AgvTask(BizStatus.ASN, stock.getCode(), srcPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "PICKER_MOVE"); agvTaskService.create(agvTask); // 生成入库任务 diff --git a/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java b/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java index 4b7ae65..8125846 100644 --- a/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java +++ b/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java @@ -2,14 +2,12 @@ package com.youchain.modules.quartz.task; import com.youchain.businessdata.inputJson.MoInfo; import com.youchain.businessdata.inputJson.MoParams; -import com.youchain.businessdata.rest.MlsController; import com.youchain.businessdata.service.MlsService; import com.youchain.service.LogService; import com.youchain.utils.UrlApi; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import java.util.HashSet; import java.util.Set; diff --git a/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java b/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java index ae6de15..a3ff796 100644 --- a/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java +++ b/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java @@ -26,77 +26,45 @@ import java.util.concurrent.CopyOnWriteArrayList; @Service public class pickTask { - @Autowired - public AgvTaskRepository agvTaskRepository; - @Autowired public AgvTaskService agvTaskService; - private Map> groupedTasks = new HashMap<>(); + private static final int MAX_TASK_COUNT = 5; + private static final long TIMEOUT_MS = 2*60*1000; private long lastTaskTime = System.currentTimeMillis(); public void pickTask() { - //按线边分组 下发出库任务 - List objectList = agvTaskRepository.queryGroupAgvTask(); - for (Object obj : objectList) { - List agvTaskList = agvTaskRepository.queryLineAgvTask(obj.toString()); - for (AgvTask agvTask : agvTaskList) { - List agvTaskList1 = groupedTasks.get(obj.toString()); - if (agvTaskList1 == null) { - groupedTasks.computeIfAbsent(obj.toString(), k -> new CopyOnWriteArrayList<>()).add(agvTask.getId()); - } else if (agvTaskList1.size() <= 4) { - boolean containsElement = agvTaskList1.contains(agvTask.getId()); - if (!containsElement) { - groupedTasks.computeIfAbsent(obj.toString(), k -> new CopyOnWriteArrayList<>()).add(agvTask.getId()); - } - } - } - // 检查是否满足四个为一组或者时间超过五分钟 - if ((isGroupingConditionsMet() || timeExceeded()) && isLine() ) { - issueGroupedTasks(); - groupedTasks.clear(); + // 下发出库任务 + List agvTaskList = agvTaskService.queryByAgvTask(BizStatus.OPEN,BizStatus.PICK); + if (agvTaskList.size() > 0) { + if ((agvTaskList.size() == MAX_TASK_COUNT)) { + Result(agvTaskService.sendAgvTaskLXImpl(agvTaskList)); lastTaskTime = System.currentTimeMillis(); - }else{ - log.info("小件出库料箱任务未满足条件!"); + }else if((System.currentTimeMillis() - lastTaskTime >=TIMEOUT_MS) ){ + if(agvTaskList.size()>MAX_TASK_COUNT){ + List newAgvTask = agvTaskList.subList(0,MAX_TASK_COUNT); + Result(agvTaskService.sendAgvTaskLXImpl(newAgvTask)); + }else{ + Result(agvTaskService.sendAgvTaskLXImpl(agvTaskList)); + lastTaskTime = System.currentTimeMillis(); + } + } else { + throw new RuntimeException("出库料箱任务未满足条件(不满足五个料箱需等待2分钟)!"); } + } else { + throw new RuntimeException("无出库料箱任务!"); } } - private boolean isLine() { - // 判断缓存输送线上的料箱总数+AGV执行中的数量 不能超过6个 - int queryCount = agvTaskService.QueryCount("6x1"); - - //出库料箱AGV执行中的数量 - //List agvTaskList= agvTaskService.findByAgvList(BizStatus.PICK,"PICKER_MOVE"); - if(queryCount<=6){ - return true; + private void Result(String result) { + if(result==null ||result.length()==0){ + throw new RuntimeException("任务下发失败!"); } - return false; } - private boolean isGroupingConditionsMet() { - // 判断是否满足四个为一组的条件 - return groupedTasks.values().stream().anyMatch(tasks -> tasks.size() == 4); - } - - private boolean timeExceeded() { - // 判断时间是否超过3分钟 - return System.currentTimeMillis() - lastTaskTime >= 2 * 60 * 1000; - } - - private void issueGroupedTasks() { - // 实现任务下发的逻辑 - // 可以遍历groupedTasks,处理每个分组的任务 - for (List tasksInGroup : groupedTasks.values()) { - List agvTaskList= agvTaskService.findById(tasksInGroup); - String rul=agvTaskService.sendAgvTaskLXImpl(agvTaskList); - System.out.println(rul); - } - - } } diff --git a/youchain-system/src/main/java/com/youchain/modules/quartz/utils/TimeNumberUtils.java b/youchain-system/src/main/java/com/youchain/modules/quartz/utils/TimeNumberUtils.java index a1df986..c6ea230 100644 --- a/youchain-system/src/main/java/com/youchain/modules/quartz/utils/TimeNumberUtils.java +++ b/youchain-system/src/main/java/com/youchain/modules/quartz/utils/TimeNumberUtils.java @@ -31,12 +31,12 @@ public class TimeNumberUtils { return "RC"+datetime +addLeftZero(s, length); } - public static synchronized String getXJTaskCode() { + public static synchronized String getLXTaskCode() { sequence = sequence >= 999999 ? 1 : sequence + 1; String datetime = new SimpleDateFormat("yyMMddHHmmss") .format(new Date()); String s = Integer.toString(sequence); - return "XJ"+datetime +addLeftZero(s, length); + return "LX"+datetime +addLeftZero(s, length); } public static synchronized String getGTTaskCode() { From 3c8d036aa96fb1c6e41caafe44ba1777da761e31 Mon Sep 17 00:00:00 2001 From: "HUOJIN\\92525" <925258474@qq.com> Date: Tue, 30 Apr 2024 14:53:26 +0800 Subject: [PATCH 2/3] no message --- .../java/com/youchain/utils/RedisUtils.java | 2 + .../com/youchain/utils/RedisUtils.class | Bin 19135 -> 19268 bytes .../businessdata/rest/KMReSController.java | 104 +++++++++------- .../service/impl/MlsServiceImpl.java | 14 +-- .../service/impl/MoServiceImpl.java | 115 ++++++++++++------ .../youchain/modules/quartz/task/moTask.java | 4 +- .../security/service/dto/OnlineUserDto.java | 4 +- 7 files changed, 151 insertions(+), 92 deletions(-) diff --git a/youchain-common/src/main/java/com/youchain/utils/RedisUtils.java b/youchain-common/src/main/java/com/youchain/utils/RedisUtils.java index 8eb3f3f..59bfebb 100644 --- a/youchain-common/src/main/java/com/youchain/utils/RedisUtils.java +++ b/youchain-common/src/main/java/com/youchain/utils/RedisUtils.java @@ -23,6 +23,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.*; +import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.stereotype.Component; @@ -45,6 +46,7 @@ public class RedisUtils { this.redisTemplate.setHashKeySerializer(new StringRedisSerializer()); this.redisTemplate.setKeySerializer(new StringRedisSerializer()); this.redisTemplate.setStringSerializer(new StringRedisSerializer()); + this.redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); } /** diff --git a/youchain-common/target/classes/com/youchain/utils/RedisUtils.class b/youchain-common/target/classes/com/youchain/utils/RedisUtils.class index 320a355991430526b17e89ffc1231b8bc44dbf6a..7cf34f6ff5309c3e5c808c52eee17ade22dabe83 100644 GIT binary patch literal 19268 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 literal 19135 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 diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java index 637e4b2..495887a 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/KMReSController.java @@ -30,6 +30,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -49,6 +50,7 @@ import static org.springframework.http.HttpStatus.OK; @Api(tags = "KMReS") @RequestMapping("/interfaces/api/amr") @Slf4j +@EnableAsync public class KMReSController { private final AgvTaskService agvTaskService; @@ -63,57 +65,78 @@ public class KMReSController { @ApiOperation("KMReS接口回调") @AnonymousAccess public ResponseEntity missionStateCallback(@RequestBody MissionStateCallback missionStateCallback) { - String id = missionStateCallback.getMissionCode();//作业 id - String containerCode = missionStateCallback.getContainerCode();//容器编号 - String missionStatus = missionStateCallback.getMissionStatus();//作业当前状态 - try { - //料箱出库任务 - if(id.indexOf("LX")!=-1){ - if(missionStatus.equals("CANCELED")){ - List agvTaskList= agvTaskService.findByjobCode(id); - for(AgvTask agvTask:agvTaskList){ - if(!agvTask.getStatus().equals(BizStatus.FINISH)){ - agvTask.setStatus(BizStatus.CANCEL); - agvTask.setEndTime(new Timestamp(new Date().getTime())); - agvTaskService.update(agvTask); - } - } - }else { - AgvTask agvTask= agvTaskService.findByjobCode(id,containerCode); - agvTaskService.agvTaskCallback(agvTask,missionStatus,containerCode); - List taskList = taskRepository.getAgvTaskList(agvTask.getId()); - Task task = taskList.get(0); - if(task==null){ - return new ResponseEntity<>(ApiResult.fail(BAD_REQUEST.value(), "任务不存在!", ""), BAD_REQUEST); - } - returnIssue(task);//叫料结果回传 - } + String id = missionStateCallback.getMissionCode(); // 作业 id + String containerCode = missionStateCallback.getContainerCode(); // 容器编号 + String missionStatus = missionStateCallback.getMissionStatus(); // 作业当前状态 - }else{ + try { + if (id.contains("LX")) { + //出库 + pickTask(id, containerCode, missionStatus); + } else { //入库 - AgvTaskDto agvTaskDto = agvTaskService.findById(Integer.parseInt(id)); - AgvTask agvTask = agvTaskService.toEntity(agvTaskDto);//转实体 - List taskList = taskRepository.getAgvTaskList(agvTask.getId()); - if (taskList.isEmpty()) { - return new ResponseEntity<>(ApiResult.fail(BAD_REQUEST.value(), "任务不存在!", ""), BAD_REQUEST); - } - Task task = taskList.get(0); - agvTaskService.agvTaskCallback(agvTask, task, missionStatus); - returnMo(task.getBillCode());//回传MO信息 + asnTask(id, missionStatus); } - return new ResponseEntity<>(ApiResult.success(OK.value(), "", ""), HttpStatus.OK); + return ResponseEntity.ok(ApiResult.success(HttpStatus.OK.value(), "", "")); } catch (Exception e) { - return new ResponseEntity<>(ApiResult.fail(BAD_REQUEST.value(), "KMReS接口回调异常", e.getMessage()), BAD_REQUEST); + return new ResponseEntity<>(ApiResult.fail(HttpStatus.BAD_REQUEST.value(), "KMReS接口回调异常", e.getMessage()), HttpStatus.BAD_REQUEST); } } + private void asnTask(String id, String missionStatus) { + AgvTaskDto agvTaskDto = agvTaskService.findById(Integer.parseInt(id)); + AgvTask agvTask = agvTaskService.toEntity(agvTaskDto); + Task task = getFirstTask(agvTask.getId()); + + if (task == null) { + throw new RuntimeException("任务不存在!"); + } + + agvTaskService.agvTaskCallback(agvTask, task, missionStatus); + returnMo(task.getBillCode()); // 回传 MO 信息 + } + + private void pickTask(String id, String containerCode, String missionStatus) throws Exception { + if ("CANCELED".equals(missionStatus)) { + cancelAgvTasks(id); + } else { + AgvTask agvTask = agvTaskService.findByjobCode(id, containerCode); + agvTaskService.agvTaskCallback(agvTask, missionStatus, containerCode); + Task task = getFirstTask(agvTask.getId()); + + if (task == null) { + throw new RuntimeException("任务不存在!"); + } + + returnIssue(task); // 叫料结果回传 + } + } + + private void cancelAgvTasks(String id) { + List agvTaskList = agvTaskService.findByjobCode(id); + for (AgvTask agvTask : agvTaskList) { + if (!agvTask.getStatus().equals(BizStatus.FINISH)) { + agvTask.setStatus(BizStatus.CANCEL); + agvTask.setEndTime(new Timestamp(new Date().getTime())); + agvTaskService.update(agvTask); + } + } + } + + private Task getFirstTask(Integer agvTaskId) { + List taskList = taskRepository.getAgvTaskList(agvTaskId); + return taskList.isEmpty() ? null : taskList.get(0); + } + + /** * 回传MO信息 * * @param billCode */ + @Async public void returnMo(String billCode) { OrderDto orderDto = orderService.findByBarcodeNumber(billCode); @@ -131,8 +154,7 @@ public class KMReSController { long endTime = System.currentTimeMillis(); long time = endTime - startTime; // 保存日志 - logService.saveLogInfo(returnMoInfo,UrlApi.publicApi, resultJson, "按MO票入库", time); - + logService.saveLogInfo(returnMoInfo, UrlApi.publicApi, resultJson, "按MO票入库", time); } @@ -152,12 +174,10 @@ public class KMReSController { long endTime = System.currentTimeMillis(); long time = endTime - startTime; // 保存日志 - logService.saveLogInfo(returnIssueInfo,UrlApi.publicApi, resultJson, "叫料结果回传", time); + logService.saveLogInfo(returnIssueInfo, UrlApi.publicApi, resultJson, "叫料结果回传", time); } - - public static ReturnMoInfo getReturnMoInfo(List tasks) { ReturnMoParams params = new ReturnMoParams(); params.setOrgId(808); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java index b82e12e..020b53e 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java @@ -285,7 +285,7 @@ public class MlsServiceImpl implements MlsService { } else { DeptDto deptDto = deptService.findById(7L); dept = deptService.toEntity(deptDto); - redisUtils.set("dept", dept, 0); + redisUtils.set("dept", dept); } @@ -397,8 +397,7 @@ public class MlsServiceImpl implements MlsService { } @Override - @Transactional(rollbackFor = Exception.class) - public synchronized void getIssueInfo(IssueInfo issueInfo) { + public void getIssueInfo(IssueInfo issueInfo) { String taskNumber = issueInfo.getTaskNumber();//任务号 // 指定Set的类型 Set workOrderNameSet = issueInfo.getWorkOrderName(); @@ -407,18 +406,18 @@ public class MlsServiceImpl implements MlsService { } List inventoryList = inventoryService.findInvByBillCode(workOrderNameSet);//根据工单号查询库存信息 - if (inventoryList.size() == 0) { + if (inventoryList.isEmpty()) { throw new RuntimeException("无库存信息!"); } //目标点 Point endPoint = null; - boolean flag = redisUtils.hasKey("endPoint"); + boolean flag = redisUtils.hasKey("ckjbk"); if (flag) { - endPoint = (Point) redisUtils.get("endPoint"); + endPoint = (Point) redisUtils.get("ckjbk"); } else { endPoint = pointService.findByCode(null, null, null, "出库接驳口", null); - redisUtils.set("endPoint", endPoint, 0); + redisUtils.set("ckjbk", endPoint); } List inventoryToUpdate = new ArrayList<>(); @@ -444,6 +443,7 @@ public class MlsServiceImpl implements MlsService { pd.setOrderQty(inv.getQuantity()); pd.setAllocatedQty(inv.getQuantity()); pd.setStatus(BizStatus.ALLOCATE); + pd.setDept(item.getDept()); pickDetailToCreate.add(pd); //生成搬运任务 diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java index 5a35c5d..9d41383 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MoServiceImpl.java @@ -35,6 +35,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; + import java.util.*; import java.io.IOException; import javax.persistence.EntityManager; @@ -63,6 +64,7 @@ public class MoServiceImpl implements MoService { private final TaskService taskService; private final AsnDetailService asnDetailService; private final ItemKeyService itemKeyService; + private final RedisUtils redisUtils; @Override public Map queryAll(MoQueryCriteria criteria, Pageable pageable) { @@ -153,63 +155,62 @@ public class MoServiceImpl implements MoService { public void scanMo(String mo) { //条码格式;12227000016951-qth1847-240411422924 - String[] arr = mo.split("-"); - if (arr.length != 3) { - throw new RuntimeException("条码格式错误!"); - } + // 验证条码格式 + validateBarcodeFormat(mo); + String[] arr = mo.split("-"); String itemCode = arr[0];//物料编号 String stockCode = arr[1];//容器编号 String labelNo = arr[2];//标签号 - Item item = itemService.existItem(itemCode); - if (item == null) { - throw new RuntimeException(itemCode + "系统无此物料!"); + // 验证物料是否存在 + Item item = null; + boolean flagItem = redisUtils.hasKey(itemCode); + if (flagItem) { + item = (Item) redisUtils.get(itemCode); + } else { + item = getOrThrow(Optional.ofNullable(itemService.existItem(itemCode)), itemCode + " 系统无此物料!"); + redisUtils.set(itemCode,item); } - Stock stock = stockService.findByCode(stockCode, null); - if (stock == null) { - throw new RuntimeException(stockCode + "系统无此容器!"); + // 验证容器是否存在 + Stock stock=null; + boolean flagStock = redisUtils.hasKey(stockCode); + if (flagStock) { + stock = (Stock) redisUtils.get(stockCode); + } else { + stock = getOrThrow(Optional.ofNullable(stockService.findByCode(stockCode, null)), stockCode + " 系统无此容器!"); + redisUtils.set(stockCode,stock); } + // 验证容器状态 + validateStockStatus(stock); - if (stock.getStatus().equals(BaseStatus.USED)) { - throw new RuntimeException(stockCode + "箱码已经有绑定关系!"); + //验证入库接驳口是否存在 + Point srcPoint = null; + boolean flagSrcPoint = redisUtils.hasKey("rkjbk"); + if (flagSrcPoint) { + srcPoint = (Point) redisUtils.get("rkjbk"); + } else { + srcPoint = getOrThrow(Optional.ofNullable(pointService.findByCode(null, null, null, "入库接驳口", null)), "系统无入库接驳口!"); + redisUtils.set("rkjbk", srcPoint, 0); } + Point endPoint = getOrThrow(Optional.ofNullable(pointService.findByCode(null, BaseStatus.FREE, BaseStatus.STORAGE, "存储区", null)), "存储区没有空闲点位!"); - Point srcPoint = pointService.findByCode(null, null, null, "入库接驳口", null); - if (srcPoint == null) { - throw new RuntimeException("系统无入库接驳口!"); - } + MoDto moDto = getOrThrow(Optional.ofNullable(findByLabelNo(labelNo)), labelNo + " 系统无此标签!"); - Point endPoint = pointService.findByCode(null, BaseStatus.FREE, BaseStatus.STORAGE, "存储区", null); - if (endPoint == null) { - throw new RuntimeException("存储区没有空闲点位!"); - } + // 验证标签状态 + validateLabelState(moDto); - MoDto moDto = this.findByLabelNo(labelNo); - if (moDto == null) { - throw new RuntimeException(labelNo + "系统无此标签!"); - } + // 验证标签是否已入库 + validateTask(moDto); - if (!moDto.getLabelState().equals("PRINTED")) { - throw new RuntimeException(labelNo + "标签已被接收(已接收状态)!"); - } + // 验证送货单是否存在 + OrderDto orderDto = getOrThrow(Optional.ofNullable(orderService.findByDeliveryHeaderId(moDto.getDeliveryHeaderId())), moDto.getDeliveryHeaderId() + " 系统无此送货单!"); - if (taskService.findByLabelNo(labelNo).size() > 0) { - throw new RuntimeException(labelNo + "此标签已入库!"); - } - - OrderDto orderDto = orderService.findByDeliveryHeaderId(moDto.getDeliveryHeaderId()); - - if (orderDto == null) { - throw new RuntimeException(moDto.getDeliveryHeaderId() + "系统无此订单!"); - } - - if (!orderDto.getDeliveryStatus().equals("lm_initial")) { - throw new RuntimeException(moDto.getLabelNo() + "标签背后的送货单" + orderDto.getBarcodeNumber() + "已取消(标签失效)!"); - } + // 验证送货单状态 + validateOrder(orderDto, moDto); // 生成AGV任务和入库任务 createTasks(item, stock, srcPoint, endPoint, moDto.getLabelNo(), moDto, orderDto); @@ -220,6 +221,40 @@ public class MoServiceImpl implements MoService { } + private void validateBarcodeFormat(String mo) { + if (mo.split("-").length != 3) { + throw new IllegalArgumentException("条码格式错误!"); + } + } + + private T getOrThrow(Optional optional, String errorMessage) { + return optional.orElseThrow(() -> new RuntimeException(errorMessage)); + } + + private void validateStockStatus(Stock stock) { + if (stock.getStatus().equals(BaseStatus.USED)) { + throw new RuntimeException(stock.getCode() + " 箱码已经有绑定关系!"); + } + } + + private void validateLabelState(MoDto moDto) { + if (!"PRINTED".equals(moDto.getLabelState())) { + throw new RuntimeException(moDto.getLabelNo() + " 标签已被接收(已接收状态)!"); + } + } + + private void validateTask(MoDto moDto) { + if (taskService.findByLabelNo(moDto.getLabelNo()).size() > 0) { + throw new RuntimeException(moDto.getLabelNo() + "此标签已入库!"); + } + } + + private void validateOrder(OrderDto orderDto, MoDto moDto) { + if (!orderDto.getDeliveryStatus().equals("lm_initial")) { + throw new RuntimeException(moDto.getLabelNo() + "标签背后的送货单" + orderDto.getBarcodeNumber() + "已取消(标签失效)!"); + } + } + @Override public Map findBylabelNos(Set labelNos) { String hql = "from Mo where labelNo in (:labelNos) "; diff --git a/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java b/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java index 8125846..c8396df 100644 --- a/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java +++ b/youchain-system/src/main/java/com/youchain/modules/quartz/task/moTask.java @@ -44,8 +44,8 @@ public class moTask { params.setInvCodes(invCodes); //DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd HH:mm:ss") params.setIqcResult(""); - params.setStartTime("2024-04-28 00:00:00"); - params.setEndTime("2024-04-28 23:59:59"); + params.setStartTime("2024-04-27 00:00:00"); + params.setEndTime("2024-04-27 23:59:59"); params.setPageNo(1); params.setPageSize(100); MoInfo moInfo = new MoInfo(); diff --git a/youchain-system/src/main/java/com/youchain/modules/security/service/dto/OnlineUserDto.java b/youchain-system/src/main/java/com/youchain/modules/security/service/dto/OnlineUserDto.java index bff2d35..19ba01d 100644 --- a/youchain-system/src/main/java/com/youchain/modules/security/service/dto/OnlineUserDto.java +++ b/youchain-system/src/main/java/com/youchain/modules/security/service/dto/OnlineUserDto.java @@ -18,6 +18,8 @@ package com.youchain.modules.security.service.dto; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; + +import java.io.Serializable; import java.util.Date; /** @@ -27,7 +29,7 @@ import java.util.Date; @Data @AllArgsConstructor @NoArgsConstructor -public class OnlineUserDto { +public class OnlineUserDto implements Serializable { /** * 用户名 From 2a386490440418f1f19b0e1bd77019d054512507 Mon Sep 17 00:00:00 2001 From: "HUOJIN\\92525" <925258474@qq.com> Date: Mon, 6 May 2024 09:59:59 +0800 Subject: [PATCH 3/3] no message --- .../service/impl/MlsServiceImpl.java | 65 ++++++++++--------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java index 020b53e..e7afcc9 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MlsServiceImpl.java @@ -95,29 +95,26 @@ public class MlsServiceImpl implements MlsService { @Override public void getOrderInfo(String resultJson) { if (StringUtils.isEmpty(resultJson)) { - throw new RuntimeException("获取送货单接口失败!"); + throw new IllegalArgumentException("获取送货单接口失败!"); } JSONObject resulObject = JSON.parseObject(resultJson); - if (resulObject == null) { - throw new RuntimeException("获取送货单接口返回数据为空!"); - } String code = resulObject.getString("code") == null ? "" : resulObject.getString("code"); String msg = resulObject.getString("msg") == null ? "" : resulObject.getString("msg"); //判断接口是否成功 if (!"0".equals(code)) { - throw new RuntimeException("获取送货单接口异常信息:" + msg); + throw new IllegalArgumentException("获取送货单接口异常信息:" + msg); } String data = resulObject.getString("data") == null ? "" : resulObject.getString("data"); - JSONObject dataObject = JSON.parseObject(data); - if (dataObject == null) { - throw new RuntimeException("获取送货单接口返回数据为空!"); + if (StringUtils.isEmpty(data)) { + throw new IllegalArgumentException("获取送货单接口返回数据为空!"); } + JSONObject dataObject = JSON.parseObject(data); JSONArray details = dataObject.getJSONArray("list"); //判断是否有送货单数据 - if (details == null || details.size() == 0) { - throw new RuntimeException("没有获取到送货单数据!"); + if (details == null || details.isEmpty()) { + throw new IllegalArgumentException("没有获取到送货单数据!"); } List ordersToCreate = new ArrayList<>();//新增订单集合 @@ -233,31 +230,29 @@ public class MlsServiceImpl implements MlsService { * @return */ @Override - @Transactional(rollbackFor = Exception.class) public void getMoInfo(String resultJson) { if (StringUtils.isEmpty(resultJson)) { - throw new RuntimeException("获取MO票接口失败!"); + throw new IllegalArgumentException("MO票接口失败!"); } JSONObject resulObject = JSON.parseObject(resultJson); - if (resulObject == null) { - throw new RuntimeException("获取MO票接口返回数据为空!"); - } String code = resulObject.getString("code") == null ? "" : resulObject.getString("code"); String msg = resulObject.getString("msg") == null ? "" : resulObject.getString("msg"); + if (!"0".equals(code)) { - throw new RuntimeException("获取MO票接口异常信息:" + msg); + throw new IllegalArgumentException("MO票接口异常: " + msg); } String data = resulObject.getString("data") == null ? "" : resulObject.getString("data"); - JSONObject dataObject = JSON.parseObject(data); - if (dataObject == null) { - throw new RuntimeException("获取MO票接口返回数据为空!"); + if (StringUtils.isEmpty(data)) { + throw new IllegalArgumentException("获取MO票接口返回数据为空!"); } + + JSONObject dataObject = JSON.parseObject(data); JSONArray details = dataObject.getJSONArray("list"); //判断是否有MO票数据 - if (details == null || details.size() == 0) { - throw new RuntimeException("没有获取到MO票数据!"); + if (details == null || details.isEmpty()) { + throw new IllegalArgumentException("未获取到MO票数据!"); } List mosToCreate = new ArrayList<>();//新增Mo集合 @@ -278,21 +273,11 @@ public class MlsServiceImpl implements MlsService { Map existingMos = moService.findBylabelNos(labelNos); //获取仓库 - Dept dept = null; - boolean flag = redisUtils.hasKey("dept"); - if (flag) { - dept = (Dept) redisUtils.get("dept"); - } else { - DeptDto deptDto = deptService.findById(7L); - dept = deptService.toEntity(deptDto); - redisUtils.set("dept", dept); - } - + Dept dept = getDeptFromCache(); //循环处理每个MO票 for (int i = 0; i < details.size(); i++) { JSONObject detail = details.getJSONObject(i); - String labelState = detail.getString("labelState");//标签状态 //物料编码 String itemCode = detail.getString("itemCode").trim(); Item item = null; @@ -328,6 +313,22 @@ public class MlsServiceImpl implements MlsService { } } + private Dept getDeptFromCache() { + // 从缓存中获取部门信息 + Dept dept = (Dept) redisUtils.get("dept"); + if (dept == null) { + try { + // 缓存中不存在,从数据库中获取 + DeptDto deptDto = deptService.findById(7L); + dept = deptService.toEntity(deptDto); + redisUtils.set("dept", dept); // 存储到缓存,可考虑设置适当的过期时间或不设 + } catch (Exception e) { + e.printStackTrace(); + } + } + return dept; + } + /** * 创建订单 *