From 8addf6e707a7f5cf534f045b0099e111bca929f9 Mon Sep 17 00:00:00 2001 From: gengby <858962040@qq.com> Date: Mon, 15 Jan 2024 17:16:58 +0800 Subject: [PATCH 1/8] =?UTF-8?q?rev:=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/acs/common/base/CommonFinalParam.java | 1 - .../FeedBackTaskStatusRequest.java | 4 + .../org/nl/acs/task/service/TaskService.java | 85 +- .../task/service/impl/TaskServiceImpl.java | 976 ++++++------------ 4 files changed, 301 insertions(+), 765 deletions(-) diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/common/base/CommonFinalParam.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/common/base/CommonFinalParam.java index 9624160..3d2adc4 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/common/base/CommonFinalParam.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/common/base/CommonFinalParam.java @@ -8,7 +8,6 @@ import lombok.Data; import org.springframework.stereotype.Component; @Data -@Component public class CommonFinalParam { private final String DELETE = "0"; diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/feedBackTaskStatus/FeedBackTaskStatusRequest.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/feedBackTaskStatus/FeedBackTaskStatusRequest.java index 961bbc8..c1cd625 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/feedBackTaskStatus/FeedBackTaskStatusRequest.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/feedBackTaskStatus/FeedBackTaskStatusRequest.java @@ -1,11 +1,15 @@ package org.nl.acs.ext.wms.data.one.feedBackTaskStatus; +import lombok.Builder; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; import org.nl.acs.ext.wms.data.one.BaseRequest; @Data public class FeedBackTaskStatusRequest extends BaseRequest { + /** * 任务id */ diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java index c422828..a95bbde 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java @@ -131,10 +131,9 @@ public interface TaskService extends CommonService { /** * 查询所有数据不分页 * - * @param whereJson 条件参数 * @return List */ - List queryAll(String whereJson); + List queryAll(); /** * 根据状态查询 @@ -234,14 +233,6 @@ public interface TaskService extends CommonService { List queryTaskByNextAndIntStatus(String head_next_device_code); - /** - * 根据关联编号查询非立刻下发的关联任务 - * - * @param link_num - * @return TaskDto - */ - TaskDto queryTaskByLinkNum(String link_num); - /** * 创建 * @@ -297,14 +288,6 @@ public interface TaskService extends CommonService { void cancel(String ids) throws Exception; - /** - * 取消任务 - * - * @param ids - * @throws Exception - */ - void cancelNoSendWms(String ids) throws Exception; - /** * 手动创建指令 * @@ -314,24 +297,6 @@ public interface TaskService extends CommonService { */ Instruction createInst(String ids) throws Exception; - /** - * 手动创建指令 - * - * @param inst - * @return - * @throws Exception - */ - Instruction createInst(Instruction inst) throws Exception; - - - /** - * ' - * 创建指令 - * - * @param dto - * @return - */ - Instruction createTemporaryInst(TaskDto dto); /** * 导出数据 @@ -351,14 +316,6 @@ public interface TaskService extends CommonService { void createTaskByClick(JSONObject json); - /** - * 检查是否允许创建任务 - * - * @param code - * @return - */ - int checkAllowCreate(String code); - /** * 从缓存中删除任务 * @@ -367,6 +324,13 @@ public interface TaskService extends CommonService { */ boolean removeByCodeFromCache(String code); + /** + * 向缓存中添加就绪和执行中任务 + * + * @param taskDto + */ + void addTaskToCache(TaskDto taskDto); + /** * 根据容器编号查询任务 * @@ -392,21 +356,6 @@ public interface TaskService extends CommonService { */ TaskDto findByNextCode(String device_code); - /** - * 根据目的地设备编号查询当前是否有设备 - * - * @param device_code - * @return - */ - List findAllByNextCode(String device_code); - - /** - * 根据设备编号查询当前是否有设备 - * - * @param device_code - * @return - */ - Integer queryAllTaskMaterialQty(String device_code); /** * 根据起点设备编号查询当前是否有设备 @@ -467,13 +416,6 @@ public interface TaskService extends CommonService { */ String queryAssignedByDevice(String device_code, String task_nextdevice_code); - /** - * 查询相同任务类型的数量 - * - * @param taskType - * @return - */ - Integer querySameTaskByType(String taskType); /** * 查询相同起点任务的数量 @@ -492,17 +434,6 @@ public interface TaskService extends CommonService { Integer querySameDestinationTask(String code); - /** - * 查询相同起终任务的数量 - * - * @param start_device - * @param next_device - * @param status - * @return Integer - */ - Integer querySameDeviceReadyTask(String start_device, String next_device, String status); - - /** * 条件查询任务和指令 * diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index 3a4ab13..3692e5e 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -28,6 +28,7 @@ import org.nl.acs.device.service.dto.DeviceAssignedDto; import org.nl.acs.device.service.impl.DeviceServiceImpl; import org.nl.acs.device_driver.DeviceDriverDefination; import org.nl.acs.device_driver.RequestMethodEnum; +import org.nl.acs.ext.wms.data.one.BaseRequest; import org.nl.acs.ext.wms.data.one.feedBackTaskStatus.FeedBackTaskStatusRequest; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.instruction.domain.Instruction; @@ -41,8 +42,6 @@ import org.nl.acs.route.domain.RoutePlan; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.dto.RouteLineDto; import org.nl.acs.route.service.mapper.RoutePlanMapper; -import org.nl.acs.storage_cell.service.StorageCellService; -import org.nl.acs.task.TaskInstructionLock; import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.service.TaskFeedbackService; import org.nl.acs.task.service.dto.TaskFeedbackDto; @@ -88,32 +87,32 @@ import java.util.stream.Collectors; public class TaskServiceImpl extends CommonServiceImpl implements TaskService, ApplicationAutoInitial { @Autowired - TaskMapper taskMapper; + private TaskMapper taskMapper; @Autowired - RoutePlanMapper routePlanMapper; + private RoutePlanMapper routePlanMapper; + @Autowired + private DeviceAppService deviceAppService; + @Autowired + private AcsToWmsService acstowmsService; + @Autowired + private TaskFeedbackService taskFeedbackService; + @Autowired + private ISysParamService paramService; + @Autowired + private XianGongAgvService agvService; + @Autowired + private RouteLineService routeLineService; + @Autowired + private DeviceAssignedService deviceAssignedService; + @Autowired + private InstructionService instructionService; - List tasks = new CopyOnWriteArrayList<>(); + /** + * 缓存 + * 存储未完成的任务信息 + */ + private CopyOnWriteArrayList tasks = new CopyOnWriteArrayList<>(); - @Autowired - DeviceAppService deviceAppService; - @Autowired - RouteLineService routelineserver; - @Autowired - AcsToWmsService acstowmsService; - @Autowired - TaskFeedbackService taskFeedbackService; - @Autowired - ISysParamService paramService; - @Autowired - XianGongAgvService agvService; - @Autowired - RouteLineService routeLineService; - @Autowired - DeviceAssignedService deviceAssignedService; - @Autowired - InstructionService instructionService; - @Autowired - StorageCellService storageCellService; @Override public PageInfo queryAll(TaskQueryParam query, Pageable pageable) { @@ -140,23 +139,18 @@ public class TaskServiceImpl extends CommonServiceImpl impleme @Override @Transactional(rollbackFor = Exception.class) public int insert(TaskDto resources) { - Task entity = ConvertUtil.convert(resources, Task.class); - return taskMapper.insert(entity); + return taskMapper.insert(ConvertUtil.convert(resources, Task.class)); } @Override @Transactional(rollbackFor = Exception.class) public int updateById(TaskDto resources) { - Task entity = ConvertUtil.convert(resources, Task.class); - int ret = taskMapper.updateById(entity); - // delCaches(resources.id); - return ret; + return taskMapper.updateById(ConvertUtil.convert(resources, Task.class)); } @Override @Transactional(rollbackFor = Exception.class) public int removeByIds(Set ids) { - // delCaches(ids); return taskMapper.deleteBatchIds(ids); } @@ -170,27 +164,23 @@ public class TaskServiceImpl extends CommonServiceImpl impleme /** - * 获取未完成任务 + * 刷新内存信息 * * @throws Exception */ @Override public void autoInitial() throws Exception { - Class var1 = TaskInstructionLock.class; - synchronized (TaskInstructionLock.class) { - this.reload(); - } + this.reload(); } @Override public synchronized void reload() { - List list = this.queryAll("task_status <2 and is_delete =0 order by create_time"); - - tasks = new CopyOnWriteArrayList<>(list); + List list = this.queryAll(); + this.tasks = list == null ? new CopyOnWriteArrayList<>() : new CopyOnWriteArrayList<>(list); } @Override - public List queryAll(String whereJson) { + public List queryAll() { List taskList = new LambdaQueryChainWrapper<>(taskMapper) .lt(Task::getTask_status, TaskStatusEnum.FINISHED.getIndex()) .eq(Task::getIs_delete, "0") @@ -251,74 +241,65 @@ public class TaskServiceImpl extends CommonServiceImpl impleme @Override public Map queryAllByCache(Map whereJson, Pageable page) { - this.reload(); String task_code = (String) whereJson.get("task_code"); String vehicle_code = (String) whereJson.get("vehicle_code"); String material_type = (String) whereJson.get("material_type"); String status = (String) whereJson.get("status"); String point_code = (String) whereJson.get("point_code"); - String is_over = (String) whereJson.get("is_over"); String task_type = (String) whereJson.get("task_type"); - List taskList = new ArrayList(); - - synchronized (TaskServiceImpl.class) { - Iterator it = tasks.iterator(); - while (it.hasNext()) { - TaskDto task = it.next(); - if (CommonFinalParam.ONE.equals(is_over) && Integer.valueOf(task.getTask_status()) < 2) { - continue; - } - if (!CommonFinalParam.ONE.equals(is_over) && Integer.valueOf(task.getTask_status()) >= 2) { - continue; - } - if (!ObjectUtil.isEmpty(task_code) && !task.getTask_code().contains(task_code)) { - continue; - } - if (!ObjectUtil.isEmpty(status) && !task.getTask_status().equals(status)) { - continue; - } - if (!ObjectUtil.isEmpty(vehicle_code) && !task.getVehicle_code().contains(vehicle_code)) { - continue; - } - if (!ObjectUtil.isEmpty(material_type) && !task.getMaterial().equals(material_type)) { - continue; - } - if (!ObjectUtil.isEmpty(point_code)) { - if (!(task.getStart_point_code().contains(point_code) - || task.getNext_point_code().contains(point_code))) { - continue; - } - } - if (!ObjectUtil.isEmpty(task_type) && !task.getTask_type().equals(task_type)) { - continue; - } - taskList.add(task); - } - - // 按照创建时间排序 - taskList = - taskList.stream() - .sorted( - (task1, task2) -> - DateUtil.compare( - DateUtil.parseDate(task1.getCreate_time()), - DateUtil.parse(task2.getCreate_time()))) - .collect(Collectors.toList()); - - } - + String is_over = (String) whereJson.get("is_over"); Integer currentPageNumber = page.getPageNumber() + 1; Integer pageMaxSize = page.getPageSize(); - List taskDtoList = - taskList.stream() - .skip((currentPageNumber - 1) * pageMaxSize) - .limit(pageMaxSize) + List taskList = + Optional + .ofNullable(this.tasks) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(t -> { + if (StrUtil.isNotEmpty(task_code)) { + return t.getTask_code().contains(task_code); + } + return true; + }) + .filter(t -> { + if (StrUtil.isNotEmpty(vehicle_code)) { + return t.getVehicle_code().contains(vehicle_code); + } + return true; + }) + .filter(t -> { + if (StrUtil.isNotEmpty(material_type)) { + return t.getMaterial().contains(material_type); + } + return true; + }) + .filter(t -> { + if (StrUtil.isNotEmpty(status)) { + return t.getTask_status().contains(status); + } + return true; + }) + .filter(t -> { + if (StrUtil.isNotEmpty(point_code)) { + return t.getStart_point_code().contains(point_code) || t.getNext_point_code().equals(point_code) || t.getPut_point_code().equals(point_code); + } + return true; + }) + .filter(t -> { + if (StrUtil.isNotEmpty(task_type)) { + return t.getTask_type().contains(task_type); + } + return true; + }) + .sorted((task1, task2) -> DateUtil.compare(DateUtil.parseDate(task1.getCreate_time()), DateUtil.parse(task2.getCreate_time()))) .collect(Collectors.toList()); + List skipList = taskList.stream().skip((currentPageNumber - 1) * pageMaxSize) + .limit(pageMaxSize) + .collect(Collectors.toList()); JSONObject jo = new JSONObject(); - jo.put("content", taskDtoList); + jo.put("content", skipList); jo.put("totalElements", taskList.size()); return jo; - } @Override @@ -369,7 +350,6 @@ public class TaskServiceImpl extends CommonServiceImpl impleme @Override public List queryAll(Map whereJson) { - List taskList = new LambdaQueryChainWrapper<>(taskMapper) .list(); return ConvertUtil.convertList(taskList, TaskDto.class); @@ -394,117 +374,79 @@ public class TaskServiceImpl extends CommonServiceImpl impleme @Override public List queryTaskByDeviceCode(String device_code) { - List list = new ArrayList<>(); - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (task.getStart_device_code().equals(device_code) - && StrUtil.equals(task.getTask_status(), TaskStatusEnum.READY.getIndex())) { - list.add(task); - } - } - return list; + return Optional + .ofNullable(this.tasks) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(taskDto -> taskDto.getStart_device_code().equals(device_code) + && StrUtil.equals(taskDto.getTask_status(), TaskStatusEnum.READY.getIndex())) + .collect(Collectors.toList()); } @Override public List queryTaskByStartDeviceCode(String start_device_code) { - List list = new ArrayList<>(); - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (!StrUtil.equals(task.getTask_type(), "6")) { - continue; - } - if (StrUtil.equals(task.getTask_status(), TaskStatusEnum.READY.getIndex())) { - if ((task.getStart_device_code().equals(start_device_code) - || task.getStart_device_code2().equals(start_device_code))) { - list.add(task); - } - } - } - return list; + return Optional + .ofNullable(this.tasks) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(task -> StrUtil.equals(task.getTask_type(), "6") + && StrUtil.equals(task.getTask_status(), TaskStatusEnum.READY.getIndex()) + && (task.getStart_device_code().equals(start_device_code) + || task.getStart_device_code2().equals(start_device_code))) + .collect(Collectors.toList()); } @Override public List queryTaskByBackDeviceCode(String back_start_device_code) { - List list = new ArrayList<>(); - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (!StrUtil.equals(task.getTask_type(), "6")) { - continue; - } - if (task.getStart_device_code().equals(back_start_device_code) - && StrUtil.equals(task.getTask_status(), TaskStatusEnum.READY.getIndex())) { - list.add(task); - } - } - return list; + return Optional + .ofNullable(this.tasks) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(task -> StrUtil.equals(task.getTask_type(), "6") + && task.getStart_device_code().equals(back_start_device_code) + && StrUtil.equals(task.getTask_status(), TaskStatusEnum.READY.getIndex())) + .collect(Collectors.toList()); } @Override public List queryTaskByDeviceCodeAndStatus(String device_code) { - List list = new ArrayList<>(); - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (task.getStart_device_code().equals(device_code) - && StrUtil.equals(task.getTask_status(), TaskStatusEnum.BUSY.getIndex())) { - Instruction instruction = instructionService.findByTaskcodeAndStatus(task.getTask_code()); - if (ObjectUtil.isNotEmpty(instruction)) { - list.add(task); - } - } - } - return list; + return Optional + .ofNullable(this.tasks) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(task -> task.getStart_device_code().equals(device_code) + && StrUtil.equals(task.getTask_status(), TaskStatusEnum.BUSY.getIndex())) + .filter(task -> instructionService.findByTaskcodeAndStatus(task.getTask_code()) != null) + .collect(Collectors.toList()); } @Override public List queryTaskByStartAndIntStatus(String head_start_device_code) { - List list = new ArrayList<>(); - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (!StrUtil.equals(task.getTask_type(), "6")) { - continue; - } - if (StrUtil.equals(task.getTask_status(), TaskStatusEnum.BUSY.getIndex())) { - if ((task.getStart_device_code().equals(head_start_device_code) - || task.getStart_device_code2().equals(head_start_device_code))) { - Instruction instruction = instructionService.findByTaskcodeAndStatus(task.getTask_code()); - if (ObjectUtil.isNotEmpty(instruction)) { - list.add(task); - } - } - } - } - return list; + return Optional + .ofNullable(this.tasks) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(task -> StrUtil.equals(task.getTask_type(), "6") + && StrUtil.equals(task.getTask_status(), TaskStatusEnum.BUSY.getIndex()) + && (task.getStart_device_code().equals(head_start_device_code) + || task.getStart_device_code2().equals(head_start_device_code))) + .filter(task -> instructionService.findByTaskcodeAndStatus(task.getTask_code()) != null) + .collect(Collectors.toList()); } @Override public List queryTaskByNextAndIntStatus(String back_start_device_code) { - List list = new ArrayList<>(); - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (!StrUtil.equals(task.getTask_type(), "6")) { - continue; - } - if ((task.getStart_device_code().equals(back_start_device_code)) - && StrUtil.equals(task.getTask_status(), TaskStatusEnum.BUSY.getIndex())) { - Instruction instruction = instructionService.findByTaskcodeAndStatus(task.getTask_code()); - if (ObjectUtil.isNotEmpty(instruction)) { - list.add(task); - } - } - } - return list; + return Optional + .ofNullable(this.tasks) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(task -> StrUtil.equals(task.getTask_type(), "6") + && task.getStart_device_code().equals(back_start_device_code) + && StrUtil.equals(task.getTask_status(), TaskStatusEnum.BUSY.getIndex())) + .filter(task -> instructionService.findByTaskcodeAndStatus(task.getTask_code()) != null) + .collect(Collectors.toList()); } - @Override - public TaskDto queryTaskByLinkNum(String link_num) { - return null; - } @Override public List queryByStauts(String status) { @@ -558,7 +500,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme // 判断起点终点设备类型 String startDeviceType = deviceAppService.findDeviceTypeByCode(dto.getStart_device_code()); String nextDeviceType = deviceAppService.findDeviceTypeByCode(dto.getNext_device_code()); - if (routelineserver + if (routeLineService .getShortPathLines(dto.getStart_device_code(), dto.getNext_device_code(), plan_code) .size() == 0) { @@ -635,14 +577,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme } Task entity = ConvertUtil.convert(dto, Task.class); taskMapper.insert(entity); - synchronized (TaskServiceImpl.class) { - System.out.println("-------------------" + dto.getTask_code()); - System.out.println("-------------1" + tasks.size()); - - tasks.add(dto); - System.out.println("-------------2" + tasks.size()); - - } + tasks.add(dto); } /** @@ -674,7 +609,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme new LambdaQueryChainWrapper<>(routePlanMapper) .eq(RoutePlan::getPlan_code, dto.getRoute_plan_code()) .one().getPlan_uuid(); - JSONArray ja = routelineserver.queryNextLine(device_code, plan_uuid); + JSONArray ja = routeLineService.queryNextLine(device_code, plan_uuid); for (int j = 0; j < ja.size(); j++) { JSONObject jo = (JSONObject) ja.get(j); next_device_code = jo.get("next_device_code").toString(); @@ -764,7 +699,6 @@ public class TaskServiceImpl extends CommonServiceImpl impleme @Override @Transactional(rollbackFor = Exception.class) public void update(TaskDto dto) { - TaskDto entity = this.findById(dto.getTask_id()); if (entity == null) { throw new BadRequestException(LangProcess.msg("error_sysAuth")); @@ -778,42 +712,12 @@ public class TaskServiceImpl extends CommonServiceImpl impleme Task task = ConvertUtil.convert(dto, Task.class); taskMapper.updateById(task); - Iterator iterator = tasks.iterator(); -// while (iterator.hasNext()) { -// TaskDto task = iterator.next(); -// if (task.getTask_code().equals(dto.getTask_code())) { -// iterator.remove(); -// } -// } - - - removeByCodeFromCache(entity.getTask_code()); - - if (StrUtil.equals(dto.getTask_status(), TaskStatusEnum.READY.getIndex()) || StrUtil.equals(dto.getTask_status(), TaskStatusEnum.BUSY.getIndex())) { - tasks.add(dto); - } - // 判断是否为WMS下发的任务,如果是反馈任务状态给WMS - CommonFinalParam commonFinalParam = new CommonFinalParam(); - String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue(); - if (!StrUtil.startWith(dto.getTask_code(), commonFinalParam.getBARRE()) && StrUtil.equals(hasWms, CommonFinalParam.ONE)) { - TaskFeedbackDto feefbackdto = taskFeedbackService.findByCode(entity.getTask_code()); - FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); - request.setTask_code(entity.getTask_code()); - request.setTask_status(entity.getTask_status()); - request.setRequest_medthod_code(RequestMethodEnum.feedback_task_status.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.feedback_task_status.getName()); - boolean flag = false; - String resp = null; - try { - resp = acstowmsService.feedTaskStatus(request); - log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp); - } catch (Exception e) { - log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), e.getMessage()); - } finally { - - } - } - + //从缓存中移除任务信息 + this.removeByCodeFromCache(entity.getTask_code()); + //向缓存添加任务信息 + this.addTaskToCache(dto); + //反馈上位系统任务状态 + this.feedWmsTaskStatus(entity); } @Override @@ -827,16 +731,16 @@ public class TaskServiceImpl extends CommonServiceImpl impleme @Override @Transactional(rollbackFor = Exception.class) public void finish(String id) { - CommonFinalParam commonFinalParam = new CommonFinalParam(); TaskDto entity = this.findById(id); if (entity == null) { throw new BadRequestException(LangProcess.msg("error_sysAuth")); } - InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); - InstructionDto instdto = instructionservice.findByTaskid(id, "instruction_status <2 "); + + InstructionDto instdto = instructionService.findByTaskid(id, "instruction_status <2 "); if (instdto != null) { throw new BadRequestException(LangProcess.msg("task_insHas")); } + String currentUsername = SecurityUtils.getCurrentUsername(); String now = DateUtil.now(); entity.setUpdate_time(now); @@ -846,37 +750,12 @@ public class TaskServiceImpl extends CommonServiceImpl impleme Task task = ConvertUtil.convert(entity, Task.class); taskMapper.updateById(task); - removeByCodeFromCache(entity.getTask_code()); - // 判断是否为WMS下发的任务,如果是反馈任务状态给WMS - String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue(); - if (!StrUtil.startWith(entity.getTask_code(), commonFinalParam.getBARRE()) && StrUtil.equals(hasWms, CommonFinalParam.ONE)) { - FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); - request.setTask_id(entity.getExt_task_id()); - request.setTask_code(entity.getTask_code()); - request.setTask_status(entity.getTask_status()); - request.setRequest_medthod_code(RequestMethodEnum.feedback_task_status.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.feedback_task_status.getName()); - boolean flag = false; - String resp = null; - try { - resp = acstowmsService.feedTaskStatus(request); - log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp); - } catch (Exception e) { - log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), e.getMessage()); - flag = true; - e.printStackTrace(); - } finally { - - } - } - // 如果属于先知AGV,关闭运单序列 - if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "3")) { - try { - agvService.markComplete(entity.getTask_code()); - } catch (Exception e) { - e.printStackTrace(); - } - } + //移除任务缓存信息 + this.removeByCodeFromCache(entity.getTask_code()); + //反馈上位系统任务状态 + this.feedWmsTaskStatus(entity); + //关闭仙工运单序列 + this.markComplete(entity); } @Override @@ -886,11 +765,12 @@ public class TaskServiceImpl extends CommonServiceImpl impleme if (entity == null) { throw new BadRequestException(LangProcess.msg("error_sysAuth")); } - InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); - InstructionDto instdto = instructionservice.findByTaskid(id, "instruction_status <2 "); + + InstructionDto instdto = instructionService.findByTaskid(id, "instruction_status <2 "); if (instdto != null) { throw new BadRequestException(LangProcess.msg("task_insRun")); } + String currentUsername = SecurityUtils.getCurrentUsername(); String now = DateUtil.now(); entity.setUpdate_time(now); @@ -899,238 +779,14 @@ public class TaskServiceImpl extends CommonServiceImpl impleme Task task = ConvertUtil.convert(entity, Task.class); taskMapper.updateById(task); - - -// synchronized (TaskServiceImpl.class){ -// Iterator it = tasks.iterator(); -// // 清理缓存 -// while (it.hasNext()) { -// TaskDto taskDto = it.next(); -// if (taskDto.getTask_id().equals(id)) { -// tasks.remove(taskDto); -// } -// }} - - removeByCodeFromCache(entity.getTask_code()); - - // 判断是否为WMS下发的任务,如果是反馈任务状态给WMS - String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue(); - CommonFinalParam commonFinalParam = new CommonFinalParam(); - if (!StrUtil.startWith(entity.getTask_code(), commonFinalParam.getBARRE()) && StrUtil.equals(hasWms, CommonFinalParam.ONE)) { - FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); - request.setTask_id(entity.getExt_task_id()); - request.setTask_id(entity.getExt_task_id()); - request.setTask_code(entity.getTask_code()); - request.setTask_status(entity.getTask_status()); - request.setRequest_medthod_code(RequestMethodEnum.feedback_task_status.getCode()); - request.setRequest_medthod_name(RequestMethodEnum.feedback_task_status.getName()); - boolean flag = false; - String resp = null; - try { - resp = acstowmsService.feedTaskStatus(request); - log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp); - } catch (Exception e) { - log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), e.getMessage()); - } finally { - - } - } - List shortPathsList = - routeLineService.getShortPathLines( - entity.getStart_device_code(), - entity.getNext_device_code(), - entity.getRoute_plan_code()); - if (ObjectUtil.isNotEmpty(shortPathsList)) { - String type = shortPathsList.get(0).getType(); - // != 0 为agv任务 - if (!StrUtil.equals(type, "0")) { - if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "3")) { - agvService.markComplete(entity.getTask_code()); - } - } - } - + //移除任务缓存信息 + this.removeByCodeFromCache(entity.getTask_code()); + //反馈上位系统任务状态 + this.feedWmsTaskStatus(entity); + //关闭仙工运单序列 + this.markComplete(entity); } - @Override - @Transactional(rollbackFor = Exception.class) - public void cancelNoSendWms(String id) throws Exception { - TaskDto entity = this.findById(id); - if (entity == null) { - throw new BadRequestException(LangProcess.msg("error_sysAuth")); - } - InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); - InstructionDto instdto = instructionservice.findByTaskid(id, "instruction_status <2 "); - if (instdto != null) { - throw new BadRequestException(LangProcess.msg("task_insRun")); - } - String currentUsername = SecurityUtils.getCurrentUsername(); - String now = DateUtil.now(); - entity.setUpdate_time(now); - entity.setUpdate_by(currentUsername); - entity.setTask_status(TaskStatusEnum.CANCEL.getIndex()); -// WQLObject wo = WQLObject.getWQLObject("acs_task"); -// JSONObject json = (JSONObject) JSONObject.toJSON(entity); -// wo.update(json); - - Task task = ConvertUtil.convert(entity, Task.class); - taskMapper.updateById(task); - -// synchronized (TaskServiceImpl.class){ -// Iterator it = tasks.iterator(); -// // 清理缓存 -// while (it.hasNext()) { -// TaskDto taskDto = it.next(); -// if (taskDto.getTask_id().equals(id)) { -// tasks.remove(taskDto); -// } -// }} - - removeByCodeFromCache(entity.getTask_code()); - - List shortPathsList = - routeLineService.getShortPathLines( - entity.getStart_device_code(), - entity.getNext_device_code(), - entity.getRoute_plan_code()); - String type = shortPathsList.get(0).getType(); - // != 0 为agv任务 - if (!StrUtil.equals(type, "0")) { - if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "3")) { - agvService.markComplete(entity.getTask_code()); - } - } - } - - @Override - public Instruction createTemporaryInst(TaskDto acsTask) { - if (acsTask == null) { - throw new BadRequestException(LangProcess.msg("error_sysAuth")); - } - acsTask = foramte(acsTask); - ISysParamService paramService = SpringContextHolder.getBean(ISysParamService.class); - DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); - InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); - // InstructionDto inst = instructionservice.findByTaskid(acsTask, "instruction_status < 2 - // "); - // if (inst != null) { - // throw new BadRequestException("有指令未完成!"); - // } - - String taskid = acsTask.getTask_id(); - String taskcode = acsTask.getTask_code(); - String vehiclecode = acsTask.getVehicle_code(); - String priority = acsTask.getPriority(); - String start_point_code = acsTask.getStart_point_code(); - String start_device_code = acsTask.getStart_device_code(); - String route_plan_code = acsTask.getRoute_plan_code(); - String vehicleType = acsTask.getVehicle_type(); - // 是否复合任务 =0非复合任务 - String compound_task = acsTask.getCompound_task(); - String next_point_code = acsTask.getNext_point_code(); - String next_device_code = acsTask.getNext_device_code(); - String start_point_code2 = acsTask.getStart_point_code2(); - String next_point_code2 = acsTask.getNext_point_code2(); - String agv_system_type = acsTask.getAgv_system_type(); - String task_type = acsTask.getTask_type(); - String from_x = acsTask.getFrom_x(); - String from_y = acsTask.getFrom_y(); - String from_z = acsTask.getFrom_z(); - String to_x = acsTask.getTo_x(); - String to_y = acsTask.getTo_y(); - String to_z = acsTask.getTo_z(); - - /** 开始平均分解校验 */ - String this_device_code = - this.queryAssignedByDevice(acsTask.getStart_device_code(), acsTask.getNext_device_code()); - if (StrUtil.isEmpty(this_device_code)) { - List shortPathsList = - routeLineService.getShortPathLines( - start_device_code, acsTask.getNext_device_code(), route_plan_code); - RouteLineDto routeLineDto = shortPathsList.get(0); - String path = routeLineDto.getPath(); - String type = routeLineDto.getType(); - String[] str = path.split("->"); - List pathlist = Arrays.asList(str); - int index = 0; - for (int m = 0; m < pathlist.size(); m++) { - if (pathlist.get(m).equals(start_device_code)) { - index = m + 1; - break; - } - } - next_device_code = pathlist.get(index); - } else { - next_device_code = this_device_code; - } - CommonFinalParam commonFinalParam = new CommonFinalParam(); - if (StrUtil.equals(appService.findDeviceTypeByCode(next_device_code), "storage")) { - next_point_code = next_device_code + commonFinalParam.getBARRE() + acsTask.getTo_y() + commonFinalParam.getBARRE() + acsTask.getTo_z(); - } else { - next_point_code = next_device_code; - } - - Instruction instdto = new Instruction(); - if (StrUtil.isEmpty(instdto.getInstruction_code())) { - instdto.setInstruction_code(CodeUtil.getNewCode("INSTRUCT_NO")); - } - instdto.setInstruction_type(task_type); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setRemark(acsTask.getRemark()); - instdto.setMaterial(acsTask.getMaterial()); - instdto.setQuantity(acsTask.getQuantity()); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setVehicle_code(vehiclecode); - String now = DateUtil.now(); - instdto.setCreate_time(now); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setPriority(priority); - instdto.setInstruction_status(InstructionStatusEnum.READY.getIndex()); - instdto.setExecute_device_code(start_point_code); - instdto.setVehicle_type(vehicleType); - instdto.setStart_point_code2(start_point_code2); - instdto.setStart_device_code2(start_point_code2); - instdto.setNext_device_code2(next_point_code2); - instdto.setNext_point_code2(next_point_code2); - instdto.setAgv_system_type(agv_system_type); - instdto.setFrom_x(from_x); - instdto.setFrom_y(from_y); - instdto.setFrom_z(from_z); - instdto.setTo_x(to_x); - instdto.setTo_y(to_y); - instdto.setTo_z(to_z); - - // 判断agv系统 - // 1、1楼叉车系统 - // 2、2楼1区域AGV系统 - // 3、2楼2区域AGV系统 - if (!StrUtil.equals(agv_system_type, CommonFinalParam.ONE)) { - // task_type - // 1、生箔; Itype=1:取空,取满,放空,放满; - // 2、分切 Itype=3取满、取空、放满、放空; - // 3、普通任务 Itype=2:取货、放货; - // 4、叉车任务 - // 5、输送任务 - // 6、行架 - // 7、立库 - if (StrUtil.equals(task_type, CommonFinalParam.ONE)) { - instdto.setAgv_inst_type(CommonFinalParam.ONE); - } else if (StrUtil.equals(task_type, "3")) { - instdto.setAgv_inst_type("2"); - } else if (StrUtil.equals(task_type, "2")) { - instdto.setAgv_inst_type("3"); - } - } else { - instdto.setAgv_inst_type("4"); - } - return instdto; - } @Override public Instruction createInst(String ids) throws Exception { @@ -1225,15 +881,6 @@ public class TaskServiceImpl extends CommonServiceImpl impleme return instdto; } - @Override - public Instruction createInst(Instruction inst) throws Exception { - - DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); - InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); - - instructionservice.create2(inst); - return inst; - } @Override public void download(List all, HttpServletResponse response) throws IOException { @@ -1279,132 +926,81 @@ public class TaskServiceImpl extends CommonServiceImpl impleme public void createTaskByClick(JSONObject json) { } - @Override - public int checkAllowCreate(String devicecode) { - Map map = new HashMap(); - List taskList = this.queryAllUnfinished(map); - int num = 0; - for (int i = 0; i < taskList.size(); i++) { - TaskDto onetask = taskList.get(i); - String next_code = onetask.getNext_point_code(); - if (StrUtil.equals(devicecode, next_code)) { - num = num + 1; - } - } - return num; - } @Override public boolean removeByCodeFromCache(String code) { - CopyOnWriteArrayList taskDtos = (CopyOnWriteArrayList) this.tasks; - taskDtos.removeIf((task) -> { - return task.getTask_code().equals(code); - }); - return true; + return this.tasks.removeIf(task -> task.getTask_code().equals(code)); + } + + @Override + public void addTaskToCache(TaskDto taskDto) { + if (StrUtil.equals(taskDto.getTask_status(), TaskStatusEnum.READY.getIndex()) || StrUtil.equals(taskDto.getTask_status(), TaskStatusEnum.BUSY.getIndex())) { + tasks.add(taskDto); + } } @Override public List findAllTaskFromCache() { - return tasks; + return this.tasks; } @Override public TaskDto findByContainer(String container_code) { - Iterator var3 = tasks.iterator(); + Optional optionalTask = tasks.stream() + .filter(task -> StrUtil.equals(task.getVehicle_code(), container_code)) + .findFirst(); - while (var3.hasNext()) { - TaskDto task = (TaskDto) var3.next(); - if (StrUtil.equals(task.getVehicle_code(), container_code)) { - return task; - } - } - - return null; + return optionalTask.orElse(null); } @Override public TaskDto findByCodeFromCache(String task_code) { - Iterator var3 = tasks.iterator(); + Optional optionalTask = tasks.stream() + .filter(task -> StrUtil.equals(task.getTask_code(), task_code)) + .findFirst(); - while (var3.hasNext()) { - TaskDto task = (TaskDto) var3.next(); - if (StrUtil.equals(task.getTask_code(), task_code)) { - return task; - } - } - return null; + return optionalTask.orElse(null); } @Override public TaskDto findByNextCode(String device_code) { - Iterator var3 = tasks.iterator(); - - while (var3.hasNext()) { - TaskDto task = (TaskDto) var3.next(); - if (StrUtil.equals(task.getNext_device_code(), device_code)) { - return task; - } - } - return null; + Optional optionalTask = tasks.stream() + .filter(task -> StrUtil.equals(task.getNext_device_code(), device_code)) + .findFirst(); + return optionalTask.orElse(null); } - @Override - public List findAllByNextCode(String device_code) { - return null; - } - - @Override - public Integer queryAllTaskMaterialQty(String device_code) { - return null; - } @Override public TaskDto findByStartCodeAndReady(String device_code) { - Iterator var3 = tasks.iterator(); - - while (var3.hasNext()) { - TaskDto task = (TaskDto) var3.next(); - // if (!StrUtil.equals(task.getTask_type(), "5")) { - // continue; - // } - if (StrUtil.equals(task.getStart_device_code(), device_code) - && StrUtil.equals(task.getTask_status(), TaskStatusEnum.READY.getIndex())) { - return task; - } - } - return null; + Optional optionalTask = tasks.stream() + .filter(task -> StrUtil.equals(task.getStart_device_code(), device_code) + && StrUtil.equals(task.getTask_status(), TaskStatusEnum.READY.getIndex())) + .findFirst(); + return optionalTask.orElse(null); } @Override public TaskDto findByEndCodeAndReady(String device_code, String index) { - Iterator var3 = tasks.iterator(); - - while (var3.hasNext()) { - TaskDto task = (TaskDto) var3.next(); - // if (!StrUtil.equals(task.getTask_type(), "5")) { - // continue; - // } - if (StrUtil.equals(task.getNext_device_code(), device_code) - && StrUtil.equals(task.getTask_status(), TaskStatusEnum.READY.getIndex()) && StrUtil.equals(task.getTask_type(), index)) { - return task; - } - } - return null; + Optional optionalTask = tasks.stream() + .filter(task -> StrUtil.equals(task.getNext_device_code(), device_code) + && StrUtil.equals(task.getTask_status(), TaskStatusEnum.READY.getIndex()) + && StrUtil.equals(task.getTask_type(), index)) + .findFirst(); + return optionalTask.orElse(null); } @Override public TaskDto findByStartCode(String device_code) { - Iterator var3 = tasks.iterator(); - - while (var3.hasNext()) { - TaskDto task = (TaskDto) var3.next(); - if (StrUtil.equals(task.getStart_device_code(), device_code)) { - return task; - } - } - return null; + return Optional + .ofNullable(this.tasks) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(task -> StrUtil.equals(task.getStart_device_code(), device_code)) + .findFirst() + .orElse(null); } @Override @@ -1548,7 +1144,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme @Override public void updateByCodeFromCache(TaskDto dto) { removeByCodeFromCache(dto.getTask_code()); - tasks.add(dto); + this.tasks.add(dto); } @Override @@ -1592,21 +1188,6 @@ public class TaskServiceImpl extends CommonServiceImpl impleme return null; } - @Override - public Integer querySameDeviceReadyTask(String start_device, String next_device, String status) { - int num = 0; - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (StrUtil.equals(task.getStart_device_code(), start_device) - && StrUtil.equals(task.getNext_device_code(), next_device) - && StrUtil.equals(task.getTask_status(), status)) { - num++; - } - } - - return num; - } @Override public List getTaskAndInst(Map whereJson) { @@ -1734,87 +1315,60 @@ public class TaskServiceImpl extends CommonServiceImpl impleme public List getTaskList(Map whereJson) { LambdaQueryWrapper wrapper = getTaskLambdaQueryWrapper(whereJson); List taskList = taskMapper.selectList(wrapper); - List array = new ArrayList<>(); - if (CollUtil.isNotEmpty(taskList) && taskList.size() > 0) { - for (Task task : taskList) { - JSONObject ins = new JSONObject(); - ins.put("task_code", task.getTask_code()); - ins.put("vehicle_code", task.getVehicle_code()); - ins.put("task_status", task.getTask_status()); - ins.put("priority", task.getPriority()); - ins.put("start_point_code", task.getStart_point_code()); - ins.put("next_point_code", task.getNext_point_code()); - ins.put("matarial", task.getMaterial()); - ins.put("quantity", task.getQuantity()); - ins.put("remark", task.getRemark()); - ins.put("create_by", task.getCreate_by()); - ins.put("create_time", task.getCreate_time()); - array.add(ins); - } - } - return array; + return Optional + .ofNullable(taskList) + .orElse(new ArrayList<>()) + .stream() + .map(task -> { + JSONObject ins = new JSONObject(); + ins.put("task_code", task.getTask_code()); + ins.put("vehicle_code", task.getVehicle_code()); + ins.put("task_status", task.getTask_status()); + ins.put("priority", task.getPriority()); + ins.put("start_point_code", task.getStart_point_code()); + ins.put("next_point_code", task.getNext_point_code()); + ins.put("matarial", task.getMaterial()); + ins.put("quantity", task.getQuantity()); + ins.put("remark", task.getRemark()); + ins.put("create_by", task.getCreate_by()); + ins.put("create_time", task.getCreate_time()); + return ins; + }) + .collect(Collectors.toList()); } @Override public List findByStartCodeAndBusy(String deviceCode) { - Iterator var3 = tasks.iterator(); - ArrayList tasks = new ArrayList<>(); - while (var3.hasNext()) { - TaskDto task = (TaskDto) var3.next(); - // if (!StrUtil.equals(task.getTask_type(), "5")) { - // continue; - // } - if (StrUtil.equals(task.getStart_device_code(), deviceCode) - && StrUtil.equals(task.getTask_status(), TaskStatusEnum.BUSY.getIndex())) { - if (tasks.size() < 2) { - tasks.add(task); - } - } - } - return tasks; + return Optional + .ofNullable(this.tasks) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(task -> StrUtil.equals(task.getStart_device_code(), deviceCode) + && StrUtil.equals(task.getTask_status(), TaskStatusEnum.BUSY.getIndex())) + .limit(2) + .collect(Collectors.toList()); } - @Override - public Integer querySameTaskByType(String taskType) { - int num = 0; - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (task.getTask_type().equals(taskType) && task.getTask_status().equals(TaskStatusEnum.BUSY.getIndex())) { - num++; - } - } - - return num; - } - @Override public Integer querySameOriginTask(String code) { - int num = 0; - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (StrUtil.equals(task.getStart_device_code(), code)) { - num++; - } - } - - return num; + return (int) Optional + .ofNullable(this.tasks) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(task -> StrUtil.equals(task.getStart_device_code(), code)) + .count(); } @Override public Integer querySameDestinationTask(String code) { - int num = 0; - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (StrUtil.equals(task.getNext_device_code(), code)) { - num++; - } - } - - return num; + return Optional + .ofNullable(this.tasks) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(taskDto -> StrUtil.equals(taskDto.getNext_device_code(), code)) + .collect(Collectors.toList()) + .size(); } @Override @@ -1828,7 +1382,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme JSONObject param = JSON.parseObject(dto.getParam()); List pathList = this.getPathList(inst_nextDevice_code); for (int j = 0; j < pathList.size(); j++) { - String inst_next_device_code = pathList.get(i); + String inst_next_device_code = pathList.get(j); String limit = param.getString("limit"); Boolean inOut = param.getBoolean("inOut"); if (inOut) { @@ -1846,9 +1400,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme } } else { Integer sameInstNum = instructionService.querySameDestinationInst(inst_next_device_code); - if (sameInstNum >= Integer.parseInt(limit)) { - continue; - } else { + if (sameInstNum < Integer.parseInt(limit)) { return inst_next_device_code; } } @@ -1872,4 +1424,54 @@ public class TaskServiceImpl extends CommonServiceImpl impleme List pathList = Arrays.asList(str); return pathList; } + + + /** + * 统一抽取反馈上位系统任务状态信息 + * + * @param taskDto + */ + private void feedWmsTaskStatus(TaskDto taskDto) { + // 判断是否为WMS下发的任务,如果是反馈任务状态给WMS + String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue(); + if (!StrUtil.startWith(taskDto.getTask_code(), CommonFinalParam.HYPHEN_) && StrUtil.equals(hasWms, CommonFinalParam.ONE)) { + FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); + request.setTask_id(taskDto.getExt_task_id()); + request.setTask_code(taskDto.getTask_code()); + request.setTask_status(taskDto.getTask_status()); + request.setRequest_medthod_code(RequestMethodEnum.feedback_task_status.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.feedback_task_status.getName()); + //TODO 有需要根据上位系统反馈的信息再做进一步处理 + acstowmsService.feedTaskStatus(request); + } + } + + /** + * 关闭仙工运单序列 + * + * @param taskDto + */ + private void markComplete(TaskDto taskDto) { + // 如果属于先知AGV,关闭运单序列 + List shortPathsList = + routeLineService.getShortPathLines( + taskDto.getStart_device_code(), + taskDto.getNext_device_code(), + taskDto.getRoute_plan_code()); + if (ObjectUtil.isNotEmpty(shortPathsList)) { + String type = shortPathsList.get(0).getType(); + // != 0 为agv任务 + if (!StrUtil.equals(type, "0")) { + if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "3")) { + try { + agvService.markComplete(taskDto.getTask_code()); + } catch (Exception e) { + log.error("关闭运单异常,原因:{}", e.getMessage()); + } + } + } + } + } + + } From f2ad3bf346d397792f31fb3081e8a0be913c62cf Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 15 Jan 2024 17:17:02 +0800 Subject: [PATCH 2/8] =?UTF-8?q?add:=E8=BD=A6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lms/nladmin-system/doc/wms.xls | Bin 325632 -> 361984 bytes .../workshop/service/dao/MdBaseWorkshop.java | 13 +++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lms/nladmin-system/doc/wms.xls b/lms/nladmin-system/doc/wms.xls index 38c5808bbce2938acc1e434262add8962be825d9..192d01767f0dde2e8a304a65bf9342f7ae4f390d 100644 GIT binary patch delta 69204 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 Date: Mon, 15 Jan 2024 17:18:37 +0800 Subject: [PATCH 3/8] =?UTF-8?q?Revert=20"add:=E8=BD=A6=E9=97=B4"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit f2ad3bf346d397792f31fb3081e8a0be913c62cf. --- lms/nladmin-system/doc/wms.xls | Bin 361984 -> 325632 bytes .../workshop/service/dao/MdBaseWorkshop.java | 13 ++----------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/lms/nladmin-system/doc/wms.xls b/lms/nladmin-system/doc/wms.xls index 192d01767f0dde2e8a304a65bf9342f7ae4f390d..38c5808bbce2938acc1e434262add8962be825d9 100644 GIT binary patch delta 39888 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 Date: Mon, 15 Jan 2024 17:26:56 +0800 Subject: [PATCH 4/8] =?UTF-8?q?rev=EF=BC=9A=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../storage_manage/ios/service/iostorInv/dao/StIvtIostorinv.java | 1 + 1 file changed, 1 insertion(+) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinv.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinv.java index 89df5b1..d8a266c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinv.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinv.java @@ -21,6 +21,7 @@ import java.math.BigDecimal; @Builder @EqualsAndHashCode(callSuper = false) @TableName("st_ivt_iostorinv") + public class StIvtIostorinv implements Serializable { private static final long serialVersionUID = 1L; From 5b483c69369793a4f43718390585185f7144548f Mon Sep 17 00:00:00 2001 From: gengby <858962040@qq.com> Date: Mon, 15 Jan 2024 19:14:06 +0800 Subject: [PATCH 5/8] rev:task --- .../FeedBackTaskStatusRequest.java | 3 --- .../task/service/impl/TaskServiceImpl.java | 20 +++++++++++-------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/feedBackTaskStatus/FeedBackTaskStatusRequest.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/feedBackTaskStatus/FeedBackTaskStatusRequest.java index c1cd625..1d3593b 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/feedBackTaskStatus/FeedBackTaskStatusRequest.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/feedBackTaskStatus/FeedBackTaskStatusRequest.java @@ -1,9 +1,6 @@ package org.nl.acs.ext.wms.data.one.feedBackTaskStatus; -import lombok.Builder; import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.SuperBuilder; import org.nl.acs.ext.wms.data.one.BaseRequest; @Data diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index 3692e5e..af77d4a 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -457,9 +457,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme } @Override - @Transactional(rollbackFor = Exception.class) public void create(TaskDto dto) throws Exception { - CommonFinalParam commonFinalParam = new CommonFinalParam(); dto = foramte(dto); if (!StrUtil.isEmpty(dto.getVehicle_code())) { TaskDto vehicle_dto = this.findByContainer(dto.getVehicle_code()); @@ -476,7 +474,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme String task_code = dto.getTask_code(); if (StrUtil.isEmpty(task_code)) { task_code = CodeUtil.getNewCode("TASK_NO"); - task_code = commonFinalParam.getBARRE() + task_code; + task_code = CommonFinalParam.HYPHEN_ + task_code; } String start_point_code = dto.getStart_point_code(); String next_point_code = dto.getNext_point_code(); @@ -510,14 +508,22 @@ public class TaskServiceImpl extends CommonServiceImpl impleme DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class); DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); Device nextdevice = appService.findDeviceByCode(next_device_code); + if (nextdevice == null){ + //TODO 国际化处理 + throw new BadRequestException("终点设备未配置"); + } Device startdevice = appService.findDeviceByCode(start_device_code); + if (startdevice == null){ + //TODO 国际化处理 + throw new BadRequestException("起点设备未配置"); + } dto.setMaterial(startdevice.getMaterial_type()); if (StrUtil.equals(DeviceType.storage.toString(), startDeviceType)) { - start_point_code = start_device_code + commonFinalParam.getBARRE() + dto.getFrom_y() + commonFinalParam.getBARRE() + dto.getFrom_z(); + start_point_code = start_device_code + CommonFinalParam.HYPHEN_ + dto.getFrom_y() + CommonFinalParam.HYPHEN_ + dto.getFrom_z(); dto.setStart_point_code(start_point_code); } if (StrUtil.equals(DeviceType.storage.toString(), nextDeviceType)) { - next_point_code = next_device_code + commonFinalParam.getBARRE() + dto.getTo_y() + commonFinalParam.getBARRE() + dto.getTo_z(); + next_point_code = next_device_code + CommonFinalParam.HYPHEN_ + dto.getTo_y() + CommonFinalParam.HYPHEN_ + dto.getTo_z(); dto.setNext_point_code(next_point_code); } if (StrUtil.equals(createTaskCheck, CommonFinalParam.ONE)) { @@ -592,7 +598,6 @@ public class TaskServiceImpl extends CommonServiceImpl impleme if (array.size() == 0) { throw new BadRequestException(LangProcess.msg("starting_point_isNull")); - //throw new RuntimeException("请选择起点"); } for (int i = 0; i < array.size(); i++) { JSONObject arrjo = array.getJSONObject(i); @@ -840,9 +845,8 @@ public class TaskServiceImpl extends CommonServiceImpl impleme } else { next_device_code = this_device_code; } - CommonFinalParam commonFinalParam = new CommonFinalParam(); if (StrUtil.equals(appService.findDeviceTypeByCode(next_device_code), "storage")) { - next_point_code = next_device_code + commonFinalParam.getBARRE() + acsTask.getTo_y() + commonFinalParam.getBARRE() + acsTask.getTo_z(); + next_point_code = next_device_code + CommonFinalParam.HYPHEN_ + acsTask.getTo_y() + CommonFinalParam.HYPHEN_ + acsTask.getTo_z(); } else { next_point_code = next_device_code; } From 4742236a7c80b2ab0f06728e336d013c4ea1ce28 Mon Sep 17 00:00:00 2001 From: yanps Date: Mon, 15 Jan 2024 19:40:03 +0800 Subject: [PATCH 6/8] =?UTF-8?q?add:=20=E5=88=9B=E5=BB=BA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=A9=E5=B1=95=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StandardStackerDeviceDriver.java | 63 ++++++----- .../org/nl/acs/task/service/TaskService.java | 7 ++ .../task/service/impl/TaskServiceImpl.java | 14 +++ .../service/quartz/task/CreateDDJInst.java | 6 +- .../acs/history/deviceErrorInfo/index.vue | 1 + acs/nladmin-ui/src/views/acs/task/index.vue | 107 +++++++++++++++++- acs/nladmin-ui/src/views/system/dict/dict.js | 2 +- 7 files changed, 163 insertions(+), 37 deletions(-) diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/stacker/standard_stacker/StandardStackerDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/stacker/standard_stacker/StandardStackerDeviceDriver.java index 0f8581b..673ef69 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/stacker/standard_stacker/StandardStackerDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/stacker/standard_stacker/StandardStackerDeviceDriver.java @@ -66,7 +66,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme @Autowired DeviceErrorLogService errorLogServer = SpringContextHolder.getBean(DeviceErrorLogServiceImpl.class); - /** + /** * 心跳 */ Integer heartbeat = 0; @@ -76,17 +76,17 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme */ Integer item_deviceCode = 0; Integer last_item_deviceCode = 0; - /** + /** * 工作模式 */ Integer mode = 0; Integer last_mode = 0; /** - *作业状态 + * 作业状态 */ Integer command = 0; Integer last_command = 0; - /** + /** * 任务号 */ Integer task = 0; @@ -111,7 +111,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme */ Integer y = 0; Integer last_y = 0; - /** + /** * 行走开关信号 */ Float move = 0F; @@ -121,12 +121,12 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme */ Float cargoMove = 0F; Float last_cargoMove = 0F; - /** + /** * 行走动作信号 */ Float action = 0F; Float last_action = 0F; - /** + /** * 行走激光数值 */ Integer distancex = 0; @@ -137,41 +137,41 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme Integer distancey = 0; Integer last_distancey = 0; /** - *载货台超限信号 + * 载货台超限信号 */ Float cargoError = 0F; Float last_cargoError = 0F; /** - *货叉探货信号 + * 货叉探货信号 */ Float forkCargo = 0F; Float last_forkCargo = 0F; /** - *货叉位置信号 + * 货叉位置信号 */ Float forkLocation = 0F; Float last_forkLocation = 0F; /** - *货叉动作信号 + * 货叉动作信号 */ Float forkAction = 0F; Float last_forkAction = 0F; - /** + /** * 特殊开关量1 */ Float special1 = 0F; Float last_special1 = 0F; - /** + /** * 特殊开关量2 */ Float special2 = 0F; Float last_special2 = 0F; /** - *托盘条码 + * 托盘条码 */ int[] trayCode; int[] last_trayCode; - /** + /** * 水箱和消防缓存位有无货 */ Float storage_cache = 0F; @@ -181,58 +181,58 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme */ Integer stacker_rpm = 0; Integer last_stacker_rpm = 0; - /** + /** * 电流 */ Integer stacker_electricCurrent = 0; Integer last_stacker_electricCurrent = 0; - /** + /** * 轴运行次数 */ Integer stacker_runing_time = 0; Integer last_stacker_runing_time = 0; - /** + /** * 轴工作时间(小时) */ Integer stacker_workingHours = 0; Integer last_stacker_workingHours = 0; /** - *载货台速度(转/分钟) + * 载货台速度(转/分钟) */ Integer cargo_rpm = 0; Integer last_cargo_rpm = 0; /** - *载货台电流 + * 载货台电流 */ Integer cargo_electric_Current = 0; Integer last_cargo_electric_Current = 0; /** - *载货台轴工作小时数 + * 载货台轴工作小时数 */ Integer cargo_workingHour = 0; Integer last_cargo_workingHour = 0; /** - *载货台轴运行次数 + * 载货台轴运行次数 */ Integer cargo_runingTimes = 0; Integer last_cargo_runingTimes = 0; /** - *货叉速度(转/分钟 + * 货叉速度(转/分钟 */ Integer fork_rpm = 0; Integer last_fork_rpm = 0; /** - *货叉电流 + * 货叉电流 */ Integer fork_electric_Current = 0; Integer last_fork_electric_Current = 0; /** - *货叉轴工作时间(小时 + * 货叉轴工作时间(小时 */ Integer fork_workingHours = 0; Integer last_fork_workingHours = 0; /** - *货叉轴运行次数 + * 货叉轴运行次数 */ Integer fork_runingTimes = 0; Integer last_fork_runingTimes = 0; @@ -250,7 +250,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme List getDeviceCodeList = null; List putDeviceCodeList = null; - /** + /** * 请求成功标记 */ Boolean requireSucess = false; @@ -459,7 +459,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme //更改指令状态 if (task > 0) { Instruction inst = checkInst(); - if (inst != null) { + if (ObjectUtil.isNotEmpty(inst)) { if (StrUtil.equals(inst.getInstruction_status(), "0")) { inst.setInstruction_status(CommonFinalParam.ONE); inst.setExecute_device_code(this.device_code); @@ -730,7 +730,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme } map.put("to_x", inst.getFrom_y()); } - if(ObjectUtil.isNotEmpty(map)){ + if (ObjectUtil.isNotEmpty(map)) { list.add(map); this.writing(list); } @@ -828,7 +828,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme if (command == 8) { map.put("to_command", 8); } - if(ObjectUtil.isNotEmpty(map)){ + if (ObjectUtil.isNotEmpty(map)) { list.add(map); this.writing(list); } @@ -873,6 +873,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme } } + /** * 完成指令 * @@ -926,7 +927,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme } - /** + /** * 将扩展表中的字符串数据转换成集合 */ @Override diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java index a95bbde..fa78c94 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java @@ -176,6 +176,13 @@ public interface TaskService extends CommonService { */ List queryByStauts(String task_status); + /** + * 根绝状态查询缓存 + * @param task_status + * @return + */ + List findByTaskStatus(String task_status); + /** * 根据编码查询 * diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index af77d4a..6784b08 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -456,7 +456,21 @@ public class TaskServiceImpl extends CommonServiceImpl impleme return ConvertUtil.convertList(taskList, TaskDto.class); } + @Override + public List findByTaskStatus(String status) { + List taskDtoList = new ArrayList<>(); + Iterator iterator = tasks.iterator(); + if (iterator.hasNext()) { + TaskDto task = iterator.next(); + if(StrUtil.equals(task.getTask_status(), status)){ + taskDtoList.add(task); + } + } + return taskDtoList; + } + + public void create(TaskDto dto) throws Exception { dto = foramte(dto); if (!StrUtil.isEmpty(dto.getVehicle_code())) { diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/CreateDDJInst.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/CreateDDJInst.java index 6437c1f..2e1bf6b 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/CreateDDJInst.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/CreateDDJInst.java @@ -45,8 +45,7 @@ public class CreateDDJInst { InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class); RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineService.class); DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); - DeviceExtraService deviceExtra = SpringContextHolder.getBean(DeviceExtraServiceImpl.class); - List taskDtos = taskserver.queryByStauts("0"); + List taskDtos = taskserver.findByTaskStatus("0"); List taskDtoList = new ArrayList<>(); if (CollUtil.isEmpty(taskDtos) || taskDtos.size() < 1) { } else { @@ -69,7 +68,7 @@ public class CreateDDJInst { if (ObjectUtils.isEmpty(list)) { throw new BadRequestException("路由不通"); } - RouteLineDto routeLineDto = (RouteLineDto) list.get(0); + RouteLineDto routeLineDto = list.get(0); String[] path = routeLineDto.getPath().split("->"); List pathlist = Arrays.asList(path); String deviceType = appService.findDeviceByCode(pathlist.get(1)).getDevice_type(); @@ -137,7 +136,6 @@ public class CreateDDJInst { RouteLineDto routeLineDto1 = shortPathsList.get(0); String path1 = routeLineDto1.getPath(); - String type1 = routeLineDto1.getType(); String[] str = path1.split("->"); List pathlist1 = Arrays.asList(str); diff --git a/acs/nladmin-ui/src/views/acs/history/deviceErrorInfo/index.vue b/acs/nladmin-ui/src/views/acs/history/deviceErrorInfo/index.vue index 316bcaf..42a5a7d 100644 --- a/acs/nladmin-ui/src/views/acs/history/deviceErrorInfo/index.vue +++ b/acs/nladmin-ui/src/views/acs/history/deviceErrorInfo/index.vue @@ -32,6 +32,7 @@ + +
+ 请选择 +
+
@@ -348,6 +353,58 @@ {{ $t('task.select.Confirm') }} + + + + 添加新行 + + + + + + + + + + + + + + + + + +
+ 取消 + + 确认 +
+
+
@@ -459,7 +516,7 @@ import i18n from '@/i18n' export default { name: 'Task', components: { pagination, crudOperation }, - dicts: ['task_status', 'task_type', 'agv_system_type', 'storage_task_type'], + dicts: ['task_status', 'task_type', 'agv_system_type', 'storage_task_type', 'kezhuan'], mixins: [presenter(), header(), crud()], cruds() { return CRUD({ title: i18n.t('task.txt_box.Task'), url: 'api/task', idField: 'task_id', sort: 'task_id,desc', @@ -536,6 +593,7 @@ export default { edit: ['admin', 'task:edit'], del: ['admin', 'task:del'] }, + showAddRowButton: true, form: { task_id: null, vehicle_code: null, @@ -561,6 +619,11 @@ export default { to_z: null, agv_system_type: '1' }, + extension: [{ + name: '', + value: '' + }], + dialogVisible: false, rules: { start_point_code: [ { required: true, message: '起点不能为空', trigger: 'change' } @@ -595,12 +658,48 @@ export default { }) }, methods: { + addNewRow() { + this.extension.push({ + name: '', + value: '' + }) + }, + deleteField(index) { // 添加字段的时候删除一条数据 + if (this.extension.length > 1) { + this.extension.splice(index, 1) + } + }, + cancelForm() { + // 清空表单数据 + this.extension = [{ + name: '', + value: '' }] + this.dialogVisible = false + }, + saveForm() { + // 保存表单数据 + // 你可以在这里处理保存逻辑,并发送请求保存表单数据 + this.extension.reduce((form, item) => { + form[item.name] = item.value + return form + }, this.form) + this.dialogVisible = false + }, saveBtn() { crudTask.add(this.form).then(res => { this.crud.toQuery() this.formDia = false this.isDisabled = true }) + this.extension = [{ + name: '', + value: '' }] + }, + openDialog() { + this.dialogVisible = true + }, + closeDialog() { + this.dialogVisible = false }, // 钩子:在获取表格数据之前执行,false 则代表不获取数据 [CRUD.HOOK.beforeRefresh]() { @@ -766,4 +865,10 @@ export default { .el-icon-arrow-down { font-size: 12px; } + +.button-container { + display: flex; + justify-content: flex-end; + align-items: flex-end; +} diff --git a/acs/nladmin-ui/src/views/system/dict/dict.js b/acs/nladmin-ui/src/views/system/dict/dict.js index 99170f7..d109d49 100644 --- a/acs/nladmin-ui/src/views/system/dict/dict.js +++ b/acs/nladmin-ui/src/views/system/dict/dict.js @@ -31,4 +31,4 @@ export function edit(data) { }) } -export default { add, edit, del } +export default { getDicts, add, edit, del } From 9382c6ffe257b2cb50c989775179593893d38ae3 Mon Sep 17 00:00:00 2001 From: ludj Date: Mon, 15 Jan 2024 19:48:24 +0800 Subject: [PATCH 7/8] =?UTF-8?q?rev:LMS=E9=A1=B9=E7=9B=AE=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lms/nladmin-system/nlsso-server/pom.xml | 48 ++--- .../src/main/java/org/nl/AppRun.java | 12 +- .../java/org/nl/common/domain/vo/DeptVo.java | 18 +- .../java/org/nl/common/domain/vo/RoleVo.java | 14 +- .../nl/common/utils/YmlConfigFileUtil.java | 28 +++ .../java/org/nl/config/SwaggerConfig.java | 161 ---------------- .../nl/config/lucene/LogMessageConstant.java | 81 ++++++-- .../org/nl/config/lucene/LuceneAppender.java | 46 ++++- .../java/org/nl/config/lucene/Searcher.java | 60 +++--- .../coderule/SysCodeRuleController.java | 15 +- .../coderule/SysCodeRuleDetailController.java | 13 +- .../controller/dept/DeptController.java | 19 +- .../controller/dict/SysDictController.java | 22 +-- .../generator/CodeGenConfigController.java | 9 +- .../generator/CodeGeneratorController.java | 15 +- .../controller/logging/SysLogController.java | 15 +- .../controller/logicflow/StageController.java | 19 +- .../logicflow/StageImageController.java | 15 +- .../controller/lucence/LuceneController.java | 7 +- .../controller/menu/SysMenuController.java | 20 +- .../controller/monitor/MonitorController.java | 7 +- .../notice/SysNoticeController.java | 15 +- .../controller/param/SysParamController.java | 15 +- .../SysDataPermissionController.java | 23 ++- .../quartz/SysQuartzJobController.java | 19 +- .../controller/redis/RedisController.java | 13 +- .../controller/role/SysRoleController.java | 14 +- .../secutiry/AuthorizationController.java | 15 +- .../MobileAuthorizationController.java | 7 +- .../tools/ToolLocalStorageController.java | 15 +- .../controller/user/OnlineController.java | 11 +- .../controller/user/UserController.java | 21 +- .../generator/dao/CodeColumnConfig.java | 28 +-- .../service/generator/dto/ColumnInfo.java | 26 +-- .../system/service/notice/dao/SysNotice.java | 18 +- .../service/quartz/config/QuartzConfig.java | 10 + .../service/quartz/utils/ExecutionJob.java | 17 +- .../redis/vo/RedisKeyDefineRespVO.java | 17 +- .../service/redis/vo/RedisMonitorRespVO.java | 18 +- .../MdBaseClassstandardController.java | 19 +- .../service/dao/MdBaseClassstandard.java | 42 ++-- .../controller/MdBaseMaterialController.java | 15 +- .../material/service/dao/MdBaseMaterial.java | 56 +++--- .../controller/MdBaseVehicleController.java | 13 +- .../vehicle/service/dao/MdBaseVehicle.java | 38 ++-- .../controller/MdBaseWorkshopController.java | 15 +- .../workshop/service/dao/MdBaseWorkshop.java | 24 +-- .../acs/controller/AcsToWmsController.java | 6 +- .../mes/controller/MesToWmsController.java | 5 +- .../SysInteractRecordController.java | 13 +- .../record/service/dao/SysInteractRecord.java | 20 +- ...SchBaseVehiclematerialgroupController.java | 15 +- .../dao/SchBaseVehiclematerialgroup.java | 90 ++++----- .../dto/SchBaseVehiclematerialgroupDto.java | 2 +- ...BaseAcsandlmsinteractivelogController.java | 13 +- .../dao/SchBaseAcsandlmsinteractivelog.java | 34 ++-- .../controller/SchBasePointController.java | 19 +- .../sch/point/service/dao/SchBasePoint.java | 72 +++---- .../controller/SchBaseRegionController.java | 19 +- .../sch/region/service/dao/SchBaseRegion.java | 30 +-- .../controller/SchBaseTaskController.java | 17 +- .../SchBaseTaskconfigController.java | 13 +- .../wms/sch/task/service/dao/SchBaseTask.java | 66 +++---- .../task/service/dao/SchBaseTaskconfig.java | 82 ++++---- .../sch/task/service/dto/SchBaseTaskDto.java | 4 +- .../main/resources/config/application-dev.yml | 10 +- .../resources/config/application-dev3.yml | 179 ------------------ .../resources/config/application-prod.yml | 14 +- .../resources/config/application-test.yml | 155 --------------- .../src/main/resources/config/application.yml | 13 +- .../src/main/resources/logback-spring.xml | 52 +---- .../template/generator/admin/Controller.ftl | 14 +- .../template/generator/admin/Entity.ftl | 6 +- 73 files changed, 821 insertions(+), 1310 deletions(-) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/YmlConfigFileUtil.java delete mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/SwaggerConfig.java delete mode 100644 lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev3.yml delete mode 100644 lms/nladmin-system/nlsso-server/src/main/resources/config/application-test.yml diff --git a/lms/nladmin-system/nlsso-server/pom.xml b/lms/nladmin-system/nlsso-server/pom.xml index fcebf05..c086101 100644 --- a/lms/nladmin-system/nlsso-server/pom.xml +++ b/lms/nladmin-system/nlsso-server/pom.xml @@ -18,13 +18,12 @@ UTF-8 1.8 1.16 - 2.9.2 1.2.70 1.1.22 2.5.0 1.3.1.Final 1.31.0 - 5.7.14 + 5.8.22 0.11.1 5.9.0 @@ -33,12 +32,25 @@ + + org.dromara.dynamictp + dynamic-tp-spring-boot-starter-adapter-webserver + 1.1.6.1 + + com.yomahub tlog-all-spring-boot-starter 1.5.0 + + + + org.fusesource.jansi + jansi + 1.17.1 + com.microsoft.sqlserver @@ -178,38 +190,6 @@ ${log4jdbc.version} - - - io.springfox - springfox-swagger2 - ${swagger.version} - - - io.swagger - swagger-annotations - - - io.swagger - swagger-models - - - - - io.springfox - springfox-swagger-ui - ${swagger.version} - - - io.swagger - swagger-annotations - 1.5.21 - - - io.swagger - swagger-models - 1.5.21 - - mysql diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java index 5873cbe..485db79 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java @@ -3,12 +3,13 @@ package org.nl; import cn.dev33.satoken.annotation.SaIgnore; import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation; import com.alicp.jetcache.anno.config.EnableMethodCache; -import io.swagger.annotations.Api; + import org.mybatis.spring.annotation.MapperScan; import org.nl.common.annotation.Limit; import org.nl.config.SpringContextHolder; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.server.ServletWebServerFactory; @@ -28,8 +29,8 @@ import org.springframework.web.bind.annotation.RestController; */ @EnableAsync @RestController -@Api(hidden = true) @SpringBootApplication(exclude = { + QuartzAutoConfiguration.class, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class }) @ServletComponentScan @@ -48,13 +49,6 @@ public class AppRun { return new SpringContextHolder(); } - @Bean - public ServletWebServerFactory webServerFactory() { - TomcatServletWebServerFactory fa = new TomcatServletWebServerFactory(); - fa.addConnectorCustomizers(connector -> connector.setProperty("relaxedQueryChars", "[]{}")); - return fa; - } - /** * 访问首页提示 * diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/DeptVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/DeptVo.java index 0cd2ef5..a673dc3 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/DeptVo.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/DeptVo.java @@ -15,7 +15,7 @@ */ package org.nl.common.domain.vo; -import io.swagger.annotations.ApiModelProperty; + import lombok.Getter; import lombok.Setter; import org.nl.common.base.BaseDTO; @@ -41,29 +41,29 @@ public class DeptVo extends BaseDTO implements Serializable { private String ext_id; - @ApiModelProperty(value = "排序") + private Integer dept_sort; @NotBlank - @ApiModelProperty(value = "部门名称") + private String name; - @ApiModelProperty(value = "zh部门名称") + private String zh_name; - @ApiModelProperty(value = "en部门名称") + private String en_name; - @ApiModelProperty(value = "id部门名称") + private String in_name; @NotNull - @ApiModelProperty(value = "是否启用") + private Boolean is_used; - @ApiModelProperty(value = "上级部门") + private Long pid; - @ApiModelProperty(value = "子节点数目", hidden = true) + private Integer sub_count = 0; /** diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/RoleVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/RoleVo.java index 88cb9d1..40d3bb2 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/RoleVo.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/RoleVo.java @@ -15,7 +15,7 @@ */ package org.nl.common.domain.vo; -import io.swagger.annotations.ApiModelProperty; + import lombok.Getter; import lombok.Setter; @@ -31,24 +31,22 @@ import java.io.Serializable; @Setter public class RoleVo implements Serializable { - - @ApiModelProperty(value = "ID", hidden = true) private Long role_id; @NotBlank - @ApiModelProperty(value = "名称", hidden = true) + private String name; - @ApiModelProperty(value = "级别,数值越小,级别越大") + private Integer level = 3; - @ApiModelProperty(value = "描述") + private String remark; - @ApiModelProperty(value = "描述") + private String order_seq; - @ApiModelProperty(value = "描述") + private String is_used; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/YmlConfigFileUtil.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/YmlConfigFileUtil.java new file mode 100644 index 0000000..1c351b5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/YmlConfigFileUtil.java @@ -0,0 +1,28 @@ +package org.nl.common.utils; + +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; + +import java.util.Properties; + +/** + * @Author: lyd + * @Description: 配置文件获取方法 + * @Date: 2023/12/6 + */ +public class YmlConfigFileUtil { + public static Properties readConfig(String configFile) { + // 创建 Resource 对象 + Resource resource = new ClassPathResource(configFile); + + // 创建 YamlPropertiesFactoryBean + YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean(); + yamlPropertiesFactoryBean.setResources(resource); + + // 获取 Properties 对象 + Properties properties = yamlPropertiesFactoryBean.getObject(); + + return properties; + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/SwaggerConfig.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/SwaggerConfig.java deleted file mode 100644 index fa7ae74..0000000 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/SwaggerConfig.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * 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 org.nl.config; - -import com.fasterxml.classmate.TypeResolver; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.Ordered; -import org.springframework.data.domain.Pageable; -import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.schema.AlternateTypeRule; -import springfox.documentation.schema.AlternateTypeRuleConvention; -import springfox.documentation.service.*; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spi.service.contexts.SecurityContext; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -import java.util.ArrayList; -import java.util.List; - -import static com.google.common.collect.Lists.newArrayList; -import static springfox.documentation.schema.AlternateTypeRules.newRule; - -/** - * api页面 /doc.html - * @author Zheng Jie - * @date 2018-11-23 - */ -@Configuration -@EnableSwagger2 -public class SwaggerConfig { - - @Value("${sa-token.token-name}") - private String tokenHeader; - - @Value("${sa-token.token-prefix}") - private String tokenStartWith; - - @Value("${swagger.enabled}") - private Boolean enabled; - - @Bean - @SuppressWarnings("all") - public Docket createRestApi() { -// ParameterBuilder ticketPar = new ParameterBuilder(); -//// List pars = new ArrayList<>(); -//// ticketPar.name(tokenHeader).description("token") -//// .modelRef(new ModelRef("string")) -//// .parameterType("header") -//// .defaultValue(tokenStartWith + " ") -//// .required(true) -//// .build(); -// pars.add(ticketPar.build()); - return new Docket(DocumentationType.SWAGGER_2) - .enable(enabled) - .apiInfo(apiInfo()) - .select() -// .paths(Predicates.not(PathSelectors.regex("/error.*"))) - .paths(PathSelectors.any()) - .build() -// .globalOperationParameters(pars) - //添加登陆认证 - .securitySchemes(securitySchemes()) - .securityContexts(securityContexts()); - } - - private ApiInfo apiInfo() { - return new ApiInfoBuilder() - .description("一个简单且易上手的 Spring boot 后台管理框架") - .title("EL-ADMIN 接口文档") - .version("2.4") - .build(); - } - - private List securitySchemes() { - //设置请求头信息 - List securitySchemes = new ArrayList<>(); - ApiKey apiKey = new ApiKey(tokenHeader, tokenHeader, "header"); - securitySchemes.add(apiKey); - return securitySchemes; - } - - private List securityContexts() { - //设置需要登录认证的路径 - List securityContexts = new ArrayList<>(); - // ^(?!auth).*$ 表示所有包含auth的接口不需要使用securitySchemes即不需要带token - // ^标识开始 ()里是一子表达式 ?!/auth表示匹配不是/auth的位置,匹配上则添加请求头,注意路径已/开头 .表示任意字符 *表示前面的字符匹配多次 $标识结束 - securityContexts.add(getContextByPath("^(?!/auth).*$")); - return securityContexts; - } - - private SecurityContext getContextByPath(String pathRegex) { - return SecurityContext.builder() - .securityReferences(defaultAuth()) - .forPaths(PathSelectors.regex(pathRegex)) - .build(); - } - - private List defaultAuth() { - List securityReferences = new ArrayList<>(); - AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); - AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; - authorizationScopes[0] = authorizationScope; - securityReferences.add(new SecurityReference(tokenHeader, authorizationScopes)); - return securityReferences; - } -} - -/** - * 将Pageable转换展示在swagger中 - */ -@Configuration -class SwaggerDataConfig { - - @Bean - public AlternateTypeRuleConvention pageableConvention(final TypeResolver resolver) { - return new AlternateTypeRuleConvention() { - @Override - public int getOrder() { - return Ordered.HIGHEST_PRECEDENCE; - } - - @Override - public List rules() { - return newArrayList(newRule(resolver.resolve(Pageable.class), resolver.resolve(Page.class))); - } - }; - } - - @ApiModel - @Data - private static class Page { - @ApiModelProperty("页码 (0..N)") - private Integer page; - - @ApiModelProperty("每页显示的数目") - private Integer size; - - @ApiModelProperty("以下列格式排序标准:property[,asc | desc]。 默认排序顺序为升序。 支持多种排序条件:如:id,asc") - private List sort; - } -} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java index c2fc8e5..e720c1c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java @@ -6,41 +6,86 @@ package org.nl.config.lucene; * @Date: 2023/8/25 */ public class LogMessageConstant { - /** */ - public final static String SORT_NAME = "time"; - /** 级别 */ + /** + * 标签 + */ + public final static String FIELD_LABEL = "label"; + /** + * 时间 + */ + public final static String FIELD_SORT_NAME = "time"; + /** + * IP + */ + public final static String FIELD_IP = "ip"; + /** + * 级别 + */ public final static String FIELD_LEVEL = "level"; - /** 时间 */ + /** + * 时间 + */ public final static String FIELD_TIMESTAMP = "timestamp"; - /** 类的限定名 */ + /** + * 类的限定名 + */ public final static String FIELD_CLASS_NAME = "logger"; - /** 线程名 */ + /** + * 线程名 + */ public final static String FIELD_THREAD = "thread"; - /** 日志内容 */ + /** + * 日志内容 + */ public final static String FIELD_MESSAGE = "message"; + /** + * tlogTraceId + */ public final static String FIELD_TRACEID = "tlogTraceId"; // 定义颜色值 - /** 文本颜色:黑色 */ + /** + * 文本颜色:黑色 + */ public final static String COLOR_BLACK = "\u001B[30m"; - /** 文本颜色:红色 */ + /** + * 文本颜色:红色 + */ public final static String COLOR_RED = "\u001B[31m"; - /** 文本颜色:绿色 */ + /** + * 文本颜色:绿色 + */ public final static String COLOR_GREEN = "\u001B[32m"; - /** 文本颜色:黄色 */ + /** + * 文本颜色:黄色 + */ public final static String COLOR_YELLOW = "\u001B[33m"; - /** 文本颜色:蓝色 */ + /** + * 文本颜色:蓝色 + */ public final static String COLOR_BLUE = "\u001B[34m"; - /** 文本颜色:品红色 */ + /** + * 文本颜色:品红色 + */ public final static String COLOR_MAGENTA = "\u001B[35m"; - /** 文本颜色:青色 */ + /** + * 文本颜色:青色 + */ public final static String COLOR_CYAN = "\u001B[36m"; - /** 文本颜色:白色 */ + /** + * 文本颜色:白色 + */ public final static String COLOR_WHITE = "\u001B[37m"; - /** 文本颜色重置 */ + /** + * 文本颜色重置 + */ public final static String COLOR_RESET = "\u001B[0m"; - /** 背景颜色:黄色 */ + /** + * 背景颜色:黄色 + */ public final static String BACKGROUND_YELLOW = "\u001B[43m"; - /** 索引路径 */ + /** + * 索引路径 + */ public final static String INDEX_DIR = "D:\\lucene\\index"; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java index 0909ac0..d342c3a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java @@ -16,11 +16,17 @@ import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; +import org.nl.common.utils.YmlConfigFileUtil; import org.wltea.analyzer.lucene.IKAnalyzer; import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.nio.file.Paths; import java.util.Map; +import java.util.Properties; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class LuceneAppender extends AppenderBase { @@ -32,7 +38,12 @@ public class LuceneAppender extends AppenderBase { public void start() { super.start(); try { - index = FSDirectory.open(Paths.get(LogMessageConstant.INDEX_DIR)); + // 读取配置文件 + Properties properties = YmlConfigFileUtil.readConfig("config/application.yml"); + + // 获取配置值 + String luceneDir = properties.getProperty("lucene.index.path"); + index = FSDirectory.open(Paths.get(luceneDir)); } catch (IOException e) { e.printStackTrace(); } @@ -54,18 +65,43 @@ public class LuceneAppender extends AppenderBase { Map mdcPropertyMap = event.getMDCPropertyMap(); Document doc = new Document(); long timeStamp = event.getTimeStamp(); + // 获取本机的IP地址 + String ipAddress = "-"; + try { + ipAddress = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + throw new RuntimeException(e); + } String formattedDateTime = DateUtil.format(new java.util.Date(timeStamp), "yyyy-MM-dd HH:mm:ss.SSS"); - doc.add(new LongPoint(LogMessageConstant.SORT_NAME, timeStamp)); - doc.add(new NumericDocValuesField(LogMessageConstant.SORT_NAME, timeStamp)); + doc.add(new LongPoint(LogMessageConstant.FIELD_SORT_NAME, timeStamp)); + doc.add(new NumericDocValuesField(LogMessageConstant.FIELD_SORT_NAME, timeStamp)); doc.add(new StringField(LogMessageConstant.FIELD_LEVEL, event.getLevel().toString(), Field.Store.YES)); - doc.add(new StringField(LogMessageConstant.FIELD_TIMESTAMP, formattedDateTime,Field.Store.YES)); + doc.add(new StringField(LogMessageConstant.FIELD_TIMESTAMP, formattedDateTime, Field.Store.YES)); doc.add(new StoredField(LogMessageConstant.FIELD_CLASS_NAME, event.getLoggerName())); + doc.add(new StoredField(LogMessageConstant.FIELD_IP, ipAddress)); doc.add(new StoredField(LogMessageConstant.FIELD_THREAD, event.getThreadName())); if (ObjectUtil.isNotEmpty(mdcPropertyMap) && ObjectUtil.isNotEmpty(mdcPropertyMap.get(LogMessageConstant.FIELD_TRACEID))) { String traceId = mdcPropertyMap.get(LogMessageConstant.FIELD_TRACEID); doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, traceId, Field.Store.YES)); + doc.add(new StringField(LogMessageConstant.FIELD_LABEL, ObjectUtil.isNotEmpty(mdcPropertyMap.get("tag_name")) + ? mdcPropertyMap.get("tag_name") : "-", Field.Store.YES)); } else { - doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, "无生成链路ID", Field.Store.YES)); + // 定义正则表达式,匹配17位数字 + String regex = "\\d{17}"; + // 创建 Pattern 对象 + Pattern pattern = Pattern.compile(regex); + // 创建 Matcher 对象 + Matcher matcher = pattern.matcher(message); + String matchedNumber = null; + // 查找匹配的数字 + while (matcher.find()) { + matchedNumber = matcher.group(); + } + if (ObjectUtil.isNotEmpty(matchedNumber)) { + doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, matchedNumber, Field.Store.YES)); + } else { + doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, "无生成链路ID", Field.Store.YES)); + } } doc.add(new TextField(LogMessageConstant.FIELD_MESSAGE, message, Field.Store.YES)); try { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java index ea0bb97..2e51775 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java @@ -7,8 +7,9 @@ import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.document.Document; -import org.apache.lucene.document.LongPoint; -import org.apache.lucene.index.*; +import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.*; import org.apache.lucene.store.Directory; @@ -26,12 +27,7 @@ import java.time.temporal.ChronoUnit; import java.util.*; /** - *

* lucene查询器 - *

- * - * @author generator - * @since 2023-11-16 */ @Slf4j public class Searcher { @@ -45,9 +41,7 @@ public class Searcher { //标准分词器,会自动去掉空格啊,is a the等单词 Analyzer analyzer = new IKAnalyzer(true); - /* - * 记录索引开始时间 - */ + // 实际上Lucene本身不支持分页。因此我们需要自己进行逻辑分页。我们要准备分页参数: // 每页条数 int pageSize = Integer.parseInt(whereJson.get("size").toString()); // 当前页码 @@ -57,59 +51,65 @@ public class Searcher { // 当前页的结束条数(不能包含) int end = start + pageSize; // 创建排序对象,需要排序字段SortField,参数:字段的名称、字段的类型、是否反转如果是false,升序。true降序 - Sort sort = new Sort(new SortField(LogMessageConstant.SORT_NAME, SortField.Type.LONG,true)); + Sort sort = new Sort(new SortField(LogMessageConstant.FIELD_SORT_NAME, SortField.Type.LONG, true)); TopDocs docs = null; BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder(); //时间范围查询 String startDate = whereJson.getString("begin_time"); String endDate = whereJson.getString("end_time"); - Calendar calendar=Calendar.getInstance(); + Calendar calendar = Calendar.getInstance(); calendar.set(1970, 0, 1); - if (startDate == null){ - startDate = DateUtil.format(calendar.getTime(),"yyyy-MM-dd HH:mm:ss.SSS"); - }else{ + if (startDate == null) { + startDate = DateUtil.format(calendar.getTime(), "yyyy-MM-dd HH:mm:ss.SSS"); + } else { startDate = LuceneIndexWriter.getDate(startDate); } - if (endDate == null){ - endDate = DateUtil.format(new DateTime(),"yyyy-MM-dd HH:mm:ss.SSS"); + if (endDate == null) { + endDate = DateUtil.format(new DateTime(), "yyyy-MM-dd HH:mm:ss.SSS"); } else { endDate = LuceneIndexWriter.getDate(endDate); } // 字段之间的与或非关系,MUST表示and,MUST_NOT表示not,SHOULD表示or,有几个fields就必须有几个clauses TermRangeQuery termRangeQuery = new TermRangeQuery("timestamp", new BytesRef(startDate), new BytesRef(endDate), true, true); - booleanQueryBuilder.add(termRangeQuery,BooleanClause.Occur.MUST); - if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_MESSAGE))){ + booleanQueryBuilder.add(termRangeQuery, BooleanClause.Occur.MUST); + if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_MESSAGE))) { //查询解析器 QueryParser queryParser = new QueryParser("message", analyzer); - Query query = queryParser.parse(whereJson.getString("message")); + Query query = queryParser.parse("message:" + whereJson.getString("message") + "~"); booleanQueryBuilder.add(query, BooleanClause.Occur.MUST); } - if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_TRACEID))){ + if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_TRACEID))) { //查询解析器 TermQuery termQuery = new TermQuery(new Term(LogMessageConstant.FIELD_TRACEID, whereJson.getString(LogMessageConstant.FIELD_TRACEID).trim())); booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); } - if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_LEVEL))){ + if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_LABEL))) { + //查询解析器 + TermQuery termQuery = new TermQuery(new Term(LogMessageConstant.FIELD_LABEL, + whereJson.getString(LogMessageConstant.FIELD_LABEL).trim())); + booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); + } + if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_LEVEL))) { //查询解析器 TermQuery termQuery = new TermQuery(new Term(LogMessageConstant.FIELD_LEVEL, whereJson.get(LogMessageConstant.FIELD_LEVEL).toString())); booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); } - docs = searcher.search(booleanQueryBuilder.build(), end,sort); - //记录索引时间 List list = new ArrayList<>(); + TopFieldCollector collector = TopFieldCollector.create(sort, 20000, 0); + searcher.search(booleanQueryBuilder.build(), collector); + docs = collector.topDocs(pageNum*pageSize, pageSize); ScoreDoc[] scoreDocs = docs.scoreDocs; - if (end > docs.totalHits.value) end = (int) docs.totalHits.value; + int totalSize = collector.getTotalHits(); - for (int i = start; i < end; i++) { - ScoreDoc scoreDoc = scoreDocs[i]; + for (ScoreDoc scoreDoc : scoreDocs) { Document doc = reader.document(scoreDoc.doc); - String logInfo = LogMessageConstant.COLOR_YELLOW + doc.get(LogMessageConstant.FIELD_TRACEID) + + String logInfo = LogMessageConstant.COLOR_RED + doc.get(LogMessageConstant.FIELD_TIMESTAMP) + LogMessageConstant.COLOR_RESET + " - " + - LogMessageConstant.COLOR_RED + doc.get(LogMessageConstant.FIELD_TIMESTAMP) + + LogMessageConstant.COLOR_BLUE + doc.get(LogMessageConstant.FIELD_IP) + LogMessageConstant.COLOR_RESET + " - " + LogMessageConstant.COLOR_GREEN + "[" + doc.get(LogMessageConstant.FIELD_THREAD) + "]" + LogMessageConstant.COLOR_RESET + " - " + @@ -123,7 +123,7 @@ public class Searcher { reader.close(); JSONObject jo = new JSONObject(); jo.put("content", list); - jo.put("totalElements", docs.totalHits.value); + jo.put("totalElements", totalSize); return jo; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/coderule/SysCodeRuleController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/coderule/SysCodeRuleController.java index bdfe2db..3728f69 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/coderule/SysCodeRuleController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/coderule/SysCodeRuleController.java @@ -2,8 +2,8 @@ package org.nl.system.controller.coderule; import cn.dev33.satoken.annotation.SaCheckPermission; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.logging.annotation.Log; @@ -28,13 +28,12 @@ import java.util.Set; * @since 2022-12-19 */ @RestController -@Api(tags = "系统:编码生成") @RequestMapping("/api/genCode") public class SysCodeRuleController { @Autowired private ISysCodeRuleService codeRuleService; - @ApiOperation("查询编码") + @GetMapping @SaCheckPermission("genCode:list") public ResponseEntity queryAll(@RequestParam Map form, PageQuery pageable) { @@ -42,7 +41,7 @@ public class SysCodeRuleController { } @Log("新增编码") - @ApiOperation("新增编码") + @PostMapping @SaCheckPermission("genCode:add") public ResponseEntity create(@Validated @RequestBody SysCodeRule codeRule) { @@ -51,7 +50,7 @@ public class SysCodeRuleController { } @Log("删除编码") - @ApiOperation("删除编码") + @DeleteMapping @SaCheckPermission("genCode:del") public ResponseEntity delete(@RequestBody Set ids) { @@ -60,7 +59,7 @@ public class SysCodeRuleController { } @Log("修改编码") - @ApiOperation("修改编码") + @PutMapping @SaCheckPermission("genCode:edit") public ResponseEntity update(@RequestBody SysCodeRule codeRule) { @@ -68,7 +67,7 @@ public class SysCodeRuleController { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } - @ApiOperation("导出任务数据") + @GetMapping(value = "/codeDemo") @SaCheckPermission("genCode:list") public ResponseEntity CodeDemo(@RequestParam Map form) throws IOException { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/coderule/SysCodeRuleDetailController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/coderule/SysCodeRuleDetailController.java index c0268dc..e1f09b5 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/coderule/SysCodeRuleDetailController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/coderule/SysCodeRuleDetailController.java @@ -2,8 +2,8 @@ package org.nl.system.controller.coderule; import cn.dev33.satoken.annotation.SaCheckPermission; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.logging.annotation.Log; @@ -23,7 +23,6 @@ import org.springframework.web.bind.annotation.*; * @author generator * @since 2022-12-20 */ -@Api(tags = "系统:编码详情管理") @RestController @RequestMapping("/api/codeDetail") public class SysCodeRuleDetailController { @@ -31,7 +30,7 @@ public class SysCodeRuleDetailController { @Autowired private ISysCodeRuleDetailService codeDetailService; - @ApiOperation("查询编码明细") + @GetMapping @SaCheckPermission("genCode:list") public ResponseEntity queryAll(CodeRuleDetailQuery form, PageQuery pageable){ @@ -39,7 +38,7 @@ public class SysCodeRuleDetailController { } @Log("新增编码明细") - @ApiOperation("新增编码明细") + @PostMapping @SaCheckPermission("genCode:add") public ResponseEntity create(@RequestBody SysCodeRuleDetail codeRuleDetail){ @@ -48,7 +47,7 @@ public class SysCodeRuleDetailController { } @Log("删除编码明细") - @ApiOperation("删除编码明细") + @DeleteMapping(value = "/{id}") @SaCheckPermission("genCode:del") public ResponseEntity delete(@PathVariable String id){ @@ -57,7 +56,7 @@ public class SysCodeRuleDetailController { } @Log("修改编码明细") - @ApiOperation("修改编码明细") + @PutMapping @SaCheckPermission("genCode:edit") public ResponseEntity update(@RequestBody SysCodeRuleDetail json){ diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/dept/DeptController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/dept/DeptController.java index bf93202..b73c681 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/dept/DeptController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/dept/DeptController.java @@ -18,8 +18,8 @@ package org.nl.system.controller.dept; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; @@ -44,21 +44,20 @@ import java.util.Set; * @date 2019-03-25 */ @RestController -@Api(tags = "系统:部门管理") @RequestMapping("/api/dept") public class DeptController { @Autowired private ISysDeptService deptService; - @ApiOperation("查询部门") + @GetMapping public ResponseEntity query(DeptQuery query) throws Exception { List list = deptService.list(query.build()); return new ResponseEntity<>(PageUtil.toPage(list, list.size()),HttpStatus.OK); } - @ApiOperation("查询部门") + @GetMapping("/vo") public ResponseEntity queryvo(DeptQuery query, PageQuery pageQuery) throws Exception { Page deptPage = deptService.queryVo(query, pageQuery); @@ -66,13 +65,13 @@ public class DeptController { } - @ApiOperation("查询所有部门树") + @GetMapping("/allTree") public ResponseEntity allTree(DeptQuery query) { return new ResponseEntity<>(deptService.buildTree(query),HttpStatus.OK); } - @ApiOperation("查询部门:根据ID获取同级与上级数据") + @PostMapping("/superior") @SaCheckPermission(value = {"user:list", "dept:list"}, mode = SaMode.AND) public ResponseEntity getSuperior(@RequestBody List ids) { @@ -83,7 +82,7 @@ public class DeptController { } @Log("新增部门") - @ApiOperation("新增部门") + @PostMapping public ResponseEntity create(@Validated @RequestBody SysDept resources){ deptService.createDept(resources); @@ -91,7 +90,7 @@ public class DeptController { } @Log("修改部门") - @ApiOperation("修改部门") + @PutMapping public ResponseEntity update(@Validated @RequestBody SysDept dept){ if (dept.getPid() != null && dept.getDept_id().equals(dept.getPid())) { @@ -102,7 +101,7 @@ public class DeptController { } @Log("删除部门") - @ApiOperation("删除部门") + @DeleteMapping public ResponseEntity delete(@RequestBody Set deptIds){ if (CollectionUtils.isEmpty(deptIds)){ diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/dict/SysDictController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/dict/SysDictController.java index 819f9a9..e7f0ff6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/dict/SysDictController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/dict/SysDictController.java @@ -1,7 +1,7 @@ package org.nl.system.controller.dict; import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.ApiOperation; + import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.logging.annotation.Log; @@ -36,12 +36,12 @@ public class SysDictController { @Log("查询字典") @GetMapping - @ApiOperation("查询字典") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery pageable){ return new ResponseEntity<>(TableDataInfo.build(dictService.queryAll(whereJson,pageable)), HttpStatus.OK); } - @ApiOperation("查询所有字典信息") + @GetMapping(value = "/all") public ResponseEntity queryAll(){ return new ResponseEntity<>(dictService.queryAll(),HttpStatus.OK); @@ -49,7 +49,7 @@ public class SysDictController { @Log("新增字典") @PostMapping - @ApiOperation("新增字典") + public ResponseEntity create(@RequestBody Dict dict){ dictService.create(dict); return new ResponseEntity<>(HttpStatus.CREATED); @@ -57,14 +57,14 @@ public class SysDictController { @PutMapping @Log("修改字典") - @ApiOperation("修改字典") + public ResponseEntity updateDict(@Validated @RequestBody Dict dto){ dictService.updateDict(dto); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除字典") - @ApiOperation("删除字典") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids){ dictService.deleteBatchByIds(ids); @@ -72,13 +72,13 @@ public class SysDictController { } @GetMapping("/dictDetail") - @ApiOperation("查询字典详情") + public ResponseEntity queryDetails(@RequestParam Map criteria, PageQuery pageable){ DictQuery dictQuery = JSONObject.parseObject(JSONObject.toJSONString(criteria), DictQuery.class); return new ResponseEntity<>(TableDataInfo.build(dictService.queryAllDetail(dictQuery,pageable)),HttpStatus.OK); } - @ApiOperation("查询多个字典详情") + @GetMapping(value = "/dictDetail/map") public ResponseEntity getDictDetailMaps(@RequestParam String dictName){ String[] names = dictName.split("[,,]"); @@ -90,7 +90,7 @@ public class SysDictController { } @Log("新增字典详情") - @ApiOperation("新增字典详情") + @PostMapping("/dictDetail") public ResponseEntity createDetail(@RequestBody Dict resources){ dictService.createDetail(resources); @@ -98,7 +98,7 @@ public class SysDictController { } @Log("修改字典详情") - @ApiOperation("修改字典详情") + @PutMapping("/dictDetail") public ResponseEntity updateDetail(@RequestBody Dict resources){ dictService.updateDetail(resources); @@ -106,7 +106,7 @@ public class SysDictController { } @Log("删除字典详情") - @ApiOperation("删除字典详情") + @DeleteMapping(value = "/dictDetail/{id}") public ResponseEntity deleteDetail(@PathVariable String id){ dictService.deleteDetail(id); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/generator/CodeGenConfigController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/generator/CodeGenConfigController.java index 81d06da..d5c51ec 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/generator/CodeGenConfigController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/generator/CodeGenConfigController.java @@ -2,8 +2,8 @@ package org.nl.system.controller.generator; import cn.dev33.satoken.annotation.SaIgnore; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.RequiredArgsConstructor; import org.nl.system.service.generator.ICodeGenConfigService; import org.nl.system.service.generator.dao.CodeGenConfig; @@ -23,20 +23,19 @@ import org.springframework.web.bind.annotation.*; */ @SaIgnore @RestController -@Api(tags = "系统:代码生成管理") @RequestMapping("api/genConfig") public class CodeGenConfigController { @Autowired private ICodeGenConfigService genConfigService; - @ApiOperation("查询表数据") + @GetMapping(value = "/{tableName}") public ResponseEntity query(@PathVariable String tableName){ return new ResponseEntity<>(genConfigService.findByTableName(tableName), HttpStatus.OK); } - @ApiOperation("修改") + @PutMapping public ResponseEntity update(@Validated @RequestBody CodeGenConfig genConfig){ return new ResponseEntity<>(genConfigService.update(genConfig.getTable_name(), genConfig),HttpStatus.OK); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/generator/CodeGeneratorController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/generator/CodeGeneratorController.java index ed99d9a..7c6f838 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/generator/CodeGeneratorController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/generator/CodeGeneratorController.java @@ -1,8 +1,8 @@ package org.nl.system.controller.generator; import cn.dev33.satoken.annotation.SaIgnore; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; @@ -31,7 +31,6 @@ import java.util.List; @SaIgnore @RestController @RequestMapping("/api/generator") -@Api(tags = "系统:代码生成管理") public class CodeGeneratorController { @Autowired private ICodeGeneratorService generatorService; @@ -41,26 +40,26 @@ public class CodeGeneratorController { @Value("${generator.enabled}") private Boolean generatorEnabled; - @ApiOperation("查询数据库数据") + @GetMapping(value = "/tables") public ResponseEntity queryTables(@RequestParam(defaultValue = "") String name, PageQuery pageable){ return new ResponseEntity<>(TableDataInfo.build(generatorService.getTables(name, pageable)), HttpStatus.OK); } - @ApiOperation("查询字段数据") + @GetMapping(value = "/columns") public ResponseEntity queryColumns(@RequestParam String tableName){ return new ResponseEntity<>(TableDataInfo.build(generatorService.getColumns(tableName)), HttpStatus.OK); } - @ApiOperation("批量修改字段数据") + @PutMapping public ResponseEntity save(@RequestBody List columnInfos){ generatorService.updateBatchById(columnInfos); return new ResponseEntity<>(HttpStatus.OK); } - @ApiOperation("同步字段数据") + @PostMapping(value = "sync") public ResponseEntity sync(@RequestBody List tables){ for (String table : tables) { @@ -69,7 +68,7 @@ public class CodeGeneratorController { return new ResponseEntity<>(HttpStatus.OK); } - @ApiOperation("生成代码") + @PostMapping(value = "/{tableName}/{type}") public ResponseEntity generator(@PathVariable String tableName, @PathVariable Integer type, HttpServletRequest request, HttpServletResponse response){ if(!generatorEnabled && type == 0){ diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logging/SysLogController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logging/SysLogController.java index 5c51d5a..3835082 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logging/SysLogController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logging/SysLogController.java @@ -1,8 +1,8 @@ package org.nl.system.controller.logging; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.logging.annotation.Log; @@ -25,12 +25,11 @@ import java.util.Map; */ @RestController @RequestMapping("/api/logs") -@Api(tags = "系统:日志管理") public class SysLogController { @Autowired private ISysLogService logService; @GetMapping - @ApiOperation("日志查询") + public ResponseEntity query(@RequestParam Map criteria, PageQuery pageable){ criteria.put("log_type","INFO"); return new ResponseEntity<>(TableDataInfo.build(logService.queryAll(criteria,pageable)), HttpStatus.OK); @@ -44,21 +43,21 @@ public class SysLogController { } @GetMapping(value = "/error") - @ApiOperation("错误日志查询") + public ResponseEntity queryErrorLog(@RequestParam Map criteria, PageQuery pageable){ criteria.put("log_type","ERROR"); return new ResponseEntity<>(TableDataInfo.build(logService.queryAll(criteria,pageable)), HttpStatus.OK); } @GetMapping(value = "/error/{id}") - @ApiOperation("日志异常详情查询") + public ResponseEntity queryErrorLogs(@PathVariable String id){ return new ResponseEntity<>(logService.findByErrDetail(id), HttpStatus.OK); } @DeleteMapping(value = "/del/error") @Log("删除所有ERROR日志") - @ApiOperation("删除所有ERROR日志") + public ResponseEntity delAllErrorLog(){ logService.delAllByError(); return new ResponseEntity<>(HttpStatus.OK); @@ -66,7 +65,7 @@ public class SysLogController { @DeleteMapping(value = "/del/info") @Log("删除所有INFO日志") - @ApiOperation("删除所有INFO日志") + public ResponseEntity delAllInfoLog(){ logService.delAllByInfo(); return new ResponseEntity<>(HttpStatus.OK); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logicflow/StageController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logicflow/StageController.java index c46a0ea..c9ffad0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logicflow/StageController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logicflow/StageController.java @@ -1,8 +1,8 @@ package org.nl.system.controller.logicflow; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -28,7 +28,6 @@ import java.util.Set; */ @Slf4j @RestController -@Api(tags = "舞台管理") @RequestMapping("/api/stage") public class StageController { @@ -37,14 +36,14 @@ public class StageController { @GetMapping @Log("查询舞台") - @ApiOperation("查询舞台") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { return new ResponseEntity<>(TableDataInfo.build(stageService.queryAll(whereJson, page)), HttpStatus.OK); } @PostMapping @Log("新增舞台") - @ApiOperation("新增舞台") + public ResponseEntity create(@Validated @RequestBody Stage dto) { stageService.create(dto); return new ResponseEntity<>(HttpStatus.CREATED); @@ -52,14 +51,14 @@ public class StageController { @PutMapping @Log("修改舞台") - @ApiOperation("修改舞台") + public ResponseEntity update(@Validated @RequestBody Stage dto) { stageService.update(dto); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除舞台") - @ApiOperation("删除舞台") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { stageService.deleteAll(ids); @@ -68,14 +67,14 @@ public class StageController { @GetMapping("/selectList") @Log("下拉选舞台") - @ApiOperation("下拉选舞台") + public ResponseEntity selectList() { return new ResponseEntity<>(stageService.selectList(), HttpStatus.OK); } @PostMapping("/addNewStage") @Log("保存舞台数据") - @ApiOperation("保存舞台数据") + public ResponseEntity addNewStage(@Validated @RequestBody Stage dto) { log.info("dto{}",dto); stageService.addNewStage(dto); @@ -84,7 +83,7 @@ public class StageController { @PostMapping("/getNewStageDataByCode") @Log("根据stage_code获取舞台数据") - @ApiOperation("根据stage_code获取舞台数据") + public ResponseEntity getNewStageDataByCode(@RequestBody String code) { Stage one = stageService.getOne(new LambdaQueryWrapper().eq(Stage::getStage_code, code)); return new ResponseEntity<>(one, HttpStatus.CREATED); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logicflow/StageImageController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logicflow/StageImageController.java index dbebc40..e8aff88 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logicflow/StageImageController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logicflow/StageImageController.java @@ -1,8 +1,8 @@ package org.nl.system.controller.logicflow; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; @@ -27,7 +27,6 @@ import java.util.Set; */ @RestController @RequiredArgsConstructor -@Api(tags = "舞台管理") @RequestMapping("/api/stageImage") @Slf4j public class StageImageController { @@ -36,14 +35,14 @@ public class StageImageController { private IStageImageService stageImageService; @GetMapping @Log("查询舞台") - @ApiOperation("查询舞台") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { return new ResponseEntity<>(TableDataInfo.build(stageImageService.queryAll(whereJson, page)), HttpStatus.OK); } @PostMapping @Log("新增舞台图片") - @ApiOperation("新增舞台图片") + public ResponseEntity create(@Validated @RequestBody StageImage entity) { stageImageService.create(entity); return new ResponseEntity<>(HttpStatus.CREATED); @@ -51,14 +50,14 @@ public class StageImageController { @PutMapping @Log("修改舞台") - @ApiOperation("修改舞台") + public ResponseEntity update(@Validated @RequestBody StageImage entity) { stageImageService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除舞台") - @ApiOperation("删除舞台") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { stageImageService.deleteAll(ids); @@ -67,7 +66,7 @@ public class StageImageController { @GetMapping("/selectList") @Log("下拉选设备图标") - @ApiOperation("下拉选设备图标") + public ResponseEntity selectList() { return new ResponseEntity<>(stageImageService.selectList(), HttpStatus.OK); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/lucence/LuceneController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/lucence/LuceneController.java index 2806cc2..ea7b05c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/lucence/LuceneController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/lucence/LuceneController.java @@ -1,8 +1,8 @@ package org.nl.system.controller.lucence; import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.common.logging.annotation.Log; @@ -24,7 +24,6 @@ import java.util.Map; */ @RestController @RequiredArgsConstructor -@Api(tags = "日志检索") @RequestMapping("/api/lucene") @Slf4j public class LuceneController { @@ -33,7 +32,7 @@ public class LuceneController { @PostMapping("/getAll") @Log("日志检索") - @ApiOperation("日志检索") + public ResponseEntity get(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(luceneService.getAll(whereJson), HttpStatus.OK); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/menu/SysMenuController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/menu/SysMenuController.java index 71e5679..1a768ff 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/menu/SysMenuController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/menu/SysMenuController.java @@ -6,7 +6,7 @@ import cn.dev33.satoken.annotation.SaMode; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.ApiOperation; + import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.logging.annotation.Log; @@ -38,19 +38,19 @@ public class SysMenuController { private ISysMenuService iSysMenuService; @GetMapping(value = "/build") - @ApiOperation("根据用户获取菜单") + public ResponseEntity buildMenus(@Validated String systemType) { //校验系统表是否存在该系统类型 return new ResponseEntity(iSysMenuService.buildMenus(systemType),HttpStatus.OK); } - @ApiOperation("返回全部的菜单") + @GetMapping(value = "/lazy") @SaCheckPermission(value = {"menu:list", "roles:list"}, mode = SaMode.AND) public ResponseEntity query(@RequestParam String pid) { return new ResponseEntity<>(iSysMenuService.getMenus(pid), HttpStatus.OK); } - @ApiOperation("获取菜单列表") + @PostMapping(value = "/getMenusByRole") @SaCheckPermission(value = {"menu:list", "roles:list"}, mode = SaMode.AND) public ResponseEntity getMenusByRole(@RequestBody JSONObject json) { @@ -60,7 +60,7 @@ public class SysMenuController { return new ResponseEntity<>(iSysMenuService.getMenusByRole(role_id, system_type, category), HttpStatus.OK); } - @ApiOperation("根据菜单ID返回所有子节点ID,包含自身ID") + @GetMapping(value = "/child") @SaCheckPermission(value = {"menu:list", "roles:list"}, mode = SaMode.AND) public ResponseEntity child(@RequestParam String id) { @@ -73,14 +73,14 @@ public class SysMenuController { } @GetMapping - @ApiOperation("查询菜单") + @SaCheckPermission("menu:list") public ResponseEntity pageQuery(MenuQuery query, PageQuery page) throws Exception { List list = iSysMenuService.query(query, page); return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK); } - @ApiOperation("查询菜单:根据ID获取同级与上级数据") + @PostMapping("/superior") @SaCheckPermission("menu:list") public ResponseEntity getSuperior(@RequestBody JSONObject param) { @@ -94,7 +94,7 @@ public class SysMenuController { } @Log("新增菜单") - @ApiOperation("新增菜单") + @PostMapping @SaCheckPermission("menu:add") public ResponseEntity create(@RequestBody SysMenu form) { @@ -103,7 +103,7 @@ public class SysMenuController { } @Log("修改菜单") - @ApiOperation("修改菜单") + @PutMapping @SaCheckPermission("menu:edit") public ResponseEntity update( @RequestBody SysMenu form) { @@ -112,7 +112,7 @@ public class SysMenuController { } @Log("删除菜单") - @ApiOperation("删除菜单") + @DeleteMapping @SaCheckPermission("menu:del") public ResponseEntity delete(@RequestBody Set ids) { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/monitor/MonitorController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/monitor/MonitorController.java index 092e749..bf51e5f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/monitor/MonitorController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/monitor/MonitorController.java @@ -16,8 +16,8 @@ package org.nl.system.controller.monitor; import cn.dev33.satoken.annotation.SaCheckPermission; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.RequiredArgsConstructor; import org.nl.system.service.monitor.MonitorService; import org.springframework.http.HttpStatus; @@ -32,14 +32,13 @@ import org.springframework.web.bind.annotation.RestController; */ @RestController @RequiredArgsConstructor -@Api(tags = "系统-服务监控管理") @RequestMapping("/api/monitor") public class MonitorController { private final MonitorService serverService; @GetMapping - @ApiOperation("查询服务监控") + @SaCheckPermission("monitor:list") public ResponseEntity query() { return new ResponseEntity<>(serverService.getServers(),HttpStatus.OK); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/notice/SysNoticeController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/notice/SysNoticeController.java index 109f2e5..df506dd 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/notice/SysNoticeController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/notice/SysNoticeController.java @@ -1,8 +1,8 @@ package org.nl.system.controller.notice; import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -23,7 +23,6 @@ import java.util.Set; **/ @Slf4j @RestController -@Api(tags = "消息通知管理") @RequestMapping("/api/notice") public class SysNoticeController { @@ -32,14 +31,14 @@ public class SysNoticeController { @GetMapping @Log("查询消息通知") - @ApiOperation("查询消息通知") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(noticeService.queryAll(whereJson,page)),HttpStatus.OK); } @PostMapping @Log("新增消息通知") - @ApiOperation("新增消息通知") + public ResponseEntity create(@Validated @RequestBody SysNotice entity){ noticeService.create(entity); return new ResponseEntity<>(HttpStatus.CREATED); @@ -47,14 +46,14 @@ public class SysNoticeController { @PutMapping @Log("修改消息通知") - @ApiOperation("修改消息通知") + public ResponseEntity update(@Validated @RequestBody SysNotice entity){ noticeService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除消息通知") - @ApiOperation("删除消息通知") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { noticeService.deleteAll(ids); @@ -95,7 +94,7 @@ public class SysNoticeController { @Log("批量已读") @PostMapping("/changeRead") - @ApiOperation("批量已读") + public ResponseEntity changeRead(@RequestBody JSONObject jsonObject) { noticeService.changeRead(jsonObject); return new ResponseEntity<>(HttpStatus.NO_CONTENT); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/param/SysParamController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/param/SysParamController.java index b4405bb..cd2e5e3 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/param/SysParamController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/param/SysParamController.java @@ -1,8 +1,8 @@ package org.nl.system.controller.param; import cn.dev33.satoken.annotation.SaIgnore; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -27,7 +27,6 @@ import java.util.Map; * @author generator * @since 2022-12-14 */ -@Api(tags = "系统参数管理") @Slf4j @RestController @RequestMapping("/api/param") @@ -37,14 +36,14 @@ class SysParamController { private ISysParamService paramService; @GetMapping @Log("查询系统参数") - @ApiOperation("查询系统参数") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(paramService.queryPage(whereJson, page)), HttpStatus.OK); } @PostMapping @Log("新增系统参数") - @ApiOperation("新增系统参数") + public ResponseEntity create(@Validated @RequestBody Param param){ paramService.create(param); return new ResponseEntity<>(HttpStatus.CREATED); @@ -52,14 +51,14 @@ class SysParamController { @PutMapping @Log("修改系统参数") - @ApiOperation("修改系统参数") + public ResponseEntity update(@Validated @RequestBody Param param){ paramService.update(param); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除系统参数") - @ApiOperation("删除系统参数") + @DeleteMapping public ResponseEntity delete(@RequestBody String[] ids) { List Ids = Arrays.asList(ids); @@ -69,7 +68,7 @@ class SysParamController { @PostMapping("/getValueByCode/{code}") @Log("根据编码获取值") - @ApiOperation("根据编码获取值") + @SaIgnore public ResponseEntity getValueByCode(@PathVariable String code) { return new ResponseEntity<>(paramService.findByCode(code), HttpStatus.CREATED); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/permission/SysDataPermissionController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/permission/SysDataPermissionController.java index c092f8a..935bfb4 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/permission/SysDataPermissionController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/permission/SysDataPermissionController.java @@ -2,8 +2,8 @@ package org.nl.system.controller.permission; import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -29,7 +29,6 @@ import java.util.Set; */ @Slf4j @RestController -@Api(tags = "数据管理") @RequestMapping("/api/dataPermission") public class SysDataPermissionController { @@ -38,14 +37,14 @@ public class SysDataPermissionController { @GetMapping @Log("查询数据权限") - @ApiOperation("查询数据权限") + public ResponseEntity query(SysDataPermissionQuery dataPermissionQuery, PageQuery page) { return new ResponseEntity<>(TableDataInfo.build(dataPermissionService.queryAll(dataPermissionQuery, page)), HttpStatus.OK); } @PostMapping @Log("新增数据权限") - @ApiOperation("新增数据权限") + public ResponseEntity create(@Validated @RequestBody SysDataPermission permission) { dataPermissionService.create(permission); return new ResponseEntity<>(HttpStatus.CREATED); @@ -53,14 +52,14 @@ public class SysDataPermissionController { @PutMapping @Log("修改数据权限") - @ApiOperation("修改数据权限") + public ResponseEntity update(@Validated @RequestBody SysDataPermission permission) { dataPermissionService.update(permission); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除数据权限") - @ApiOperation("删除数据权限") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { dataPermissionService.deleteAll(ids); @@ -69,21 +68,21 @@ public class SysDataPermissionController { @GetMapping("/scopeType") @Log("获取数据权限范围") - @ApiOperation("获取数据权限范围") + public ResponseEntity getDataScopeType(){ return new ResponseEntity<>(dataPermissionService.getDataScopeType(),HttpStatus.OK); } @GetMapping("/dataPermissionOption") @Log("获取数据权限下拉框") - @ApiOperation("获取数据权限下拉框") + public ResponseEntity getDataPermissionOption(){ return new ResponseEntity<>(dataPermissionService.getDataPermissionOption(),HttpStatus.OK); } @PostMapping("/saveDataPermission") @Log("保存数据权限") - @ApiOperation("保存数据权限") + public ResponseEntity saveDataPermission(@RequestBody JSONObject datas){ dataPermissionService.savePermission(datas); return new ResponseEntity<>(HttpStatus.CREATED); @@ -91,14 +90,14 @@ public class SysDataPermissionController { @PostMapping("/dataShow") @Log("查看数据权限") - @ApiOperation("查看数据权限") + public ResponseEntity getDataShow(@RequestBody String id){ return new ResponseEntity<>(dataPermissionService.getDataShow(id),HttpStatus.OK); } @PostMapping("/dataDetail") @Log("查看数据明细") - @ApiOperation("查看数据明细") + public ResponseEntity getDataDetail(@RequestBody JSONObject data){ return new ResponseEntity<>(dataPermissionService.getDataDetail(data),HttpStatus.OK); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/quartz/SysQuartzJobController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/quartz/SysQuartzJobController.java index 1b6bdf2..201d193 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/quartz/SysQuartzJobController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/quartz/SysQuartzJobController.java @@ -2,8 +2,8 @@ package org.nl.system.controller.quartz; import cn.dev33.satoken.annotation.SaCheckPermission; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -31,21 +31,20 @@ import java.util.Set; @Slf4j @RestController @RequestMapping("/api/jobs") -@Api(tags = "系统:定时任务管理") public class SysQuartzJobController { private static final String ENTITY_NAME = "quartzJob"; @Autowired private ISysQuartzJobService quartzJobService; - @ApiOperation("查询定时任务") + @GetMapping @SaCheckPermission("timing:list") public ResponseEntity query(JobQuery criteria, PageQuery pageable) { return new ResponseEntity<>(TableDataInfo.build(quartzJobService.queryAll(criteria, pageable)), HttpStatus.OK); } - @ApiOperation("查询任务执行日志") + @GetMapping(value = "/logs") @SaCheckPermission("timing:list") public ResponseEntity queryJobLog(JobQuery criteria, PageQuery pageable) { @@ -53,7 +52,7 @@ public class SysQuartzJobController { } @Log("新增定时任务") - @ApiOperation("新增定时任务") + @PostMapping @SaCheckPermission("timing:add") public ResponseEntity create(@Validated @RequestBody SysQuartzJob resources) { @@ -65,7 +64,7 @@ public class SysQuartzJobController { } @Log("修改定时任务") - @ApiOperation("修改定时任务") + @PutMapping @SaCheckPermission("timing:edit") public ResponseEntity update(@Validated @RequestBody SysQuartzJob resources) { @@ -74,7 +73,7 @@ public class SysQuartzJobController { } @Log("更改定时任务状态") - @ApiOperation("更改定时任务状态") + @PutMapping(value = "/{id}") @SaCheckPermission("timing:edit") public ResponseEntity update(@PathVariable String id) { @@ -83,7 +82,7 @@ public class SysQuartzJobController { } @Log("执行定时任务") - @ApiOperation("执行定时任务") + @PutMapping(value = "/exec/{id}") @SaCheckPermission("timing:edit") public ResponseEntity execution(@PathVariable String id) { @@ -92,7 +91,7 @@ public class SysQuartzJobController { } @Log("删除定时任务") - @ApiOperation("删除定时任务") + @DeleteMapping @SaCheckPermission("timing:del") public ResponseEntity delete(@RequestBody Set ids) { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/redis/RedisController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/redis/RedisController.java index ec89c86..6f1a0dc 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/redis/RedisController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/redis/RedisController.java @@ -1,7 +1,7 @@ package org.nl.system.controller.redis; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.common.logging.annotation.Log; @@ -17,7 +17,6 @@ import org.springframework.web.bind.annotation.*; */ @RestController @RequiredArgsConstructor -@Api(tags = "系统表格管理") @RequestMapping("/api/redis") @Slf4j public class RedisController { @@ -26,27 +25,27 @@ public class RedisController { @GetMapping("/get-monitor-info") @Log("查询redis的信息") - @ApiOperation("查询redis的信息") + public ResponseEntity getRedisMonitorInfo() { return new ResponseEntity<>(redisService.getRedisMonitorInfo(),HttpStatus.OK); } @GetMapping("/get-key-define-list") @Log("获得 Redis Key 模板列表") - @ApiOperation("获得 Redis Key 模板列表") + public ResponseEntity getKeyDefineList() { return new ResponseEntity<>(redisService.getKeyDefineList(),HttpStatus.OK); } @GetMapping("/get-key-value-list") @Log("获得 Redis Key Value列表") - @ApiOperation("获得 Redis Key Value列表") + public ResponseEntity getKeyValueList() { return new ResponseEntity<>( redisService.getKeyValueList(),HttpStatus.OK); } @Log("根据key删除Redis数据") - @ApiOperation("根据key删除Redis数据") + @DeleteMapping public ResponseEntity deleteByKey(@RequestBody String[] ids) { redisService.deleteByKey(ids); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/role/SysRoleController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/role/SysRoleController.java index 2eacfa3..a284976 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/role/SysRoleController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/role/SysRoleController.java @@ -2,7 +2,7 @@ package org.nl.system.controller.role; import cn.dev33.satoken.annotation.SaCheckPermission; import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.ApiOperation; + import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.logging.annotation.Log; @@ -30,21 +30,21 @@ public class SysRoleController { @Autowired private ISysRoleService roleService; - @ApiOperation("分页查询角色") + @GetMapping @SaCheckPermission("roles:list") public ResponseEntity pageQuery(@RequestParam Map param, PageQuery page) { return new ResponseEntity<>(TableDataInfo.build(roleService.query(param, page)), HttpStatus.OK); } - @ApiOperation("查询所有角色") + @GetMapping("/all") public ResponseEntity queryAll() { return new ResponseEntity<>(roleService.list(), HttpStatus.OK); } @Log("新增角色") - @ApiOperation("新增角色") + @PostMapping @SaCheckPermission("roles:add") public ResponseEntity create(@RequestBody JSONObject param) { @@ -53,7 +53,7 @@ public class SysRoleController { } @Log("修改角色") - @ApiOperation("修改角色") + @PutMapping @SaCheckPermission("roles:edit") public ResponseEntity update(@RequestBody JSONObject param) { @@ -62,7 +62,7 @@ public class SysRoleController { } @Log("删除角色") - @ApiOperation("删除角色") + @DeleteMapping @SaCheckPermission("roles:del") public ResponseEntity delete(@RequestBody Set ids) { @@ -71,7 +71,7 @@ public class SysRoleController { } @Log("修改角色菜单") - @ApiOperation("修改角色菜单") + @PutMapping(value = "/menu") @SaCheckPermission("roles:edit") public ResponseEntity updateMenu(@RequestBody JSONObject form) { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/AuthorizationController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/AuthorizationController.java index 71289a5..896878f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/AuthorizationController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/AuthorizationController.java @@ -7,8 +7,8 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.wf.captcha.base.Captcha; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.utils.RedisUtils; import org.nl.common.utils.SecurityUtils; @@ -36,7 +36,6 @@ import java.util.concurrent.TimeUnit; @Slf4j @RestController @RequestMapping("/auth") -@Api(tags = "系统:系统授权接口") public class AuthorizationController { @Autowired private RedisUtils redisUtils; @@ -47,7 +46,7 @@ public class AuthorizationController { @Autowired private LoginProperties loginProperties; - @ApiOperation("登录授权") + @PostMapping(value = "/login") public ResponseEntity login(@RequestBody Map authMap, HttpServletRequest request) throws Exception { if (ObjectUtil.isEmpty(authMap)){ @@ -57,7 +56,7 @@ public class AuthorizationController { } - @ApiOperation("获取用户信息") + @GetMapping(value = "/info") public ResponseEntity getUserInfo() { CurrentUser currentUser = SecurityUtils.getCurrentUser(); @@ -67,7 +66,7 @@ public class AuthorizationController { return ResponseEntity.ok(jsonObject); } - @ApiOperation("获取指定用户信息") + @GetMapping(value = "/userInfo") public ResponseEntity getUserInfo(Long loginId) { if (loginId != null){ @@ -77,7 +76,7 @@ public class AuthorizationController { return ResponseEntity.noContent().build(); } - @ApiOperation("获取验证码") + @GetMapping(value = "/code") public ResponseEntity getCode() { // 获取运算的结果 @@ -100,7 +99,7 @@ public class AuthorizationController { return ResponseEntity.ok(imgResult); } - @ApiOperation("退出登录") + @DeleteMapping(value = "/logout") public ResponseEntity logout(HttpServletRequest request) { if (ObjectUtil.isNotEmpty(StpUtil.getTokenValue())) { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java index c88e7b8..98b9bc7 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java @@ -8,8 +8,8 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.RsaUtils; @@ -39,13 +39,12 @@ import java.util.List; @Slf4j @RestController @RequestMapping("/mobile/auth") -@Api(tags = "手持:系统授权接口") public class MobileAuthorizationController { @Autowired private ISysUserService userService; @Autowired private ISysRoleService roleService; - @ApiOperation("登录授权") + @PostMapping(value = "/login") @SaIgnore public ResponseEntity login(@Validated @RequestBody AuthUserDto authUser, HttpServletRequest request) throws Exception { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/tools/ToolLocalStorageController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/tools/ToolLocalStorageController.java index 019b69e..d2a0e76 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/tools/ToolLocalStorageController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/tools/ToolLocalStorageController.java @@ -3,8 +3,8 @@ package org.nl.system.controller.tools; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaIgnore; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; @@ -32,19 +32,18 @@ import java.util.Set; * @since 2022-12-20 */ @RestController -@Api(tags = "工具:本地存储管理") @RequestMapping("/api/localStorage") public class ToolLocalStorageController { @Autowired private IToolLocalStorageService localStorageService; - @ApiOperation("查询文件") + @GetMapping public ResponseEntity query(ToolLocalStorageQuery criteria, PageQuery pageable) { return new ResponseEntity<>(TableDataInfo.build(localStorageService.queryAll(criteria, pageable)), HttpStatus.OK); } - @ApiOperation("上传文件") + @PostMapping @SaIgnore public ResponseEntity create(@RequestParam String name, @RequestParam("file") MultipartFile file) { @@ -52,7 +51,7 @@ public class ToolLocalStorageController { } @PostMapping("/pictures") - @ApiOperation("上传图片") + public ResponseEntity upload(@RequestParam MultipartFile file) { // 判断文件是否为图片 String suffix = FileUtil.getExtensionName(file.getOriginalFilename()); @@ -63,7 +62,7 @@ public class ToolLocalStorageController { } @Log("修改文件") - @ApiOperation("修改文件") + @PutMapping @SaCheckPermission("storage:edit") public ResponseEntity update(@Validated @RequestBody ToolLocalStorage resources) { @@ -73,7 +72,7 @@ public class ToolLocalStorageController { @Log("删除文件") @DeleteMapping - @ApiOperation("多选删除") + public ResponseEntity delete(@RequestBody Set ids) { localStorageService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/OnlineController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/OnlineController.java index 4893924..abb37e2 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/OnlineController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/OnlineController.java @@ -16,8 +16,8 @@ package org.nl.system.controller.user; import com.alibaba.fastjson.JSONArray; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import org.nl.common.utils.EncryptUtils; import org.nl.system.service.secutiry.impl.OnlineUserService; import org.nl.system.service.user.dto.OnlineUserDto; @@ -37,25 +37,24 @@ import java.util.Set; */ @RestController @RequestMapping("/auth/online") -@Api(tags = "系统:在线用户管理") public class OnlineController { @Autowired private OnlineUserService onlineUserService; - @ApiOperation("查询在线用户") + @GetMapping public ResponseEntity query(String filter, Pageable pageable){ return new ResponseEntity<>(onlineUserService.getAll(filter, pageable),HttpStatus.OK); } - @ApiOperation("导出数据") + @GetMapping(value = "/download") public void download(HttpServletResponse response, String filter) throws IOException { onlineUserService.download(onlineUserService.getAll(filter), response); } - @ApiOperation("踢出用户") + @DeleteMapping public ResponseEntity delete(@RequestBody List keys) throws Exception { for (OnlineUserDto key : keys) { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java index 50a5989..364088b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java @@ -21,8 +21,8 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.RequiredArgsConstructor; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -48,7 +48,6 @@ import java.util.Set; * @author Zheng Jie * @date 2018-11-23 */ -@Api(tags = "系统:用户管理") @RestController @RequestMapping("/api/users") @RequiredArgsConstructor @@ -58,14 +57,14 @@ public class UserController { private ISysUserService userService; - @ApiOperation("查询用户") + @GetMapping public ResponseEntity query(UserQuery query, PageQuery page){ return new ResponseEntity(TableDataInfo.build(userService.getUserDetail(query, page)),HttpStatus.OK); } @Log("新增用户") - @ApiOperation("新增用户") + @PostMapping public ResponseEntity create(@RequestBody Map user){ userService.create(user); @@ -73,7 +72,7 @@ public class UserController { } @Log("修改用户") - @ApiOperation("修改用户") + @PutMapping public ResponseEntity update( @RequestBody Map resources) throws Exception { userService.update(resources); @@ -81,7 +80,7 @@ public class UserController { } @Log("修改用户:个人中心") - @ApiOperation("修改用户:个人中心") + public ResponseEntity center(@RequestBody SysUser resources){ if(!resources.getUser_id().equals(StpUtil.getLoginIdAsLong())){ throw new BadRequestException(LangProcess.msg("error_SystemAuthError")); @@ -91,14 +90,14 @@ public class UserController { } @Log("删除用户") - @ApiOperation("删除用户") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { userService.removeByIds(ids); return new ResponseEntity<>(HttpStatus.OK); } - @ApiOperation("修改密码") + @PostMapping(value = "/updatePass") public ResponseEntity updatePass(@RequestBody JSONObject passVo) throws Exception { // 解密,得到字符密码 @@ -116,14 +115,14 @@ public class UserController { return new ResponseEntity<>(HttpStatus.OK); } - @ApiOperation("修改头像") + @PostMapping(value = "/updateAvatar") public ResponseEntity updateAvatar(@RequestParam MultipartFile avatar){ return new ResponseEntity<>(userService.updateAvatar(avatar), HttpStatus.OK); } @Log("修改邮箱") - @ApiOperation("修改邮箱") + @PostMapping(value = "/updateEmail/{code}") public ResponseEntity updateEmail(@PathVariable String code,@RequestBody SysUser user) throws Exception { String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey,user.getPassword()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/dao/CodeColumnConfig.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/dao/CodeColumnConfig.java index b220616..908c312 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/dao/CodeColumnConfig.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/dao/CodeColumnConfig.java @@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; -import io.swagger.annotations.ApiModelProperty; + import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; @@ -34,43 +34,43 @@ public class CodeColumnConfig implements Serializable { @TableId(value = "column_id", type = IdType.ASSIGN_ID) private String column_id; - @ApiModelProperty(value = "表名") + private String table_name; - @ApiModelProperty(value = "数据库字段名称") + private String column_name; - @ApiModelProperty(value = "数据库字段类型") + private String column_type; - @ApiModelProperty(value = "数据库字段键类型") + private String key_type; - @ApiModelProperty(value = "字段额外的参数") + private String extra; - @ApiModelProperty(value = "数据库字段描述") + private String remark; - @ApiModelProperty(value = "是否必填") + private Boolean not_null; - @ApiModelProperty(value = "是否在列表显示") + private Boolean list_show; - @ApiModelProperty(value = "是否表单显示") + private Boolean form_show; - @ApiModelProperty(value = "表单类型") + private String form_type; - @ApiModelProperty(value = "查询 1:模糊 2:精确") + private String query_type; - @ApiModelProperty(value = "字典名称") + private String dict_name; - @ApiModelProperty(value = "日期注解") + private String date_annotation; /** diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/dto/ColumnInfo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/dto/ColumnInfo.java index 79e389f..9ed98b3 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/dto/ColumnInfo.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/dto/ColumnInfo.java @@ -1,6 +1,6 @@ package org.nl.system.service.generator.dto; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; /** @@ -10,39 +10,39 @@ import lombok.Data; */ @Data public class ColumnInfo { - @ApiModelProperty(value = "数据库字段名称") + private String column_name; - @ApiModelProperty(value = "数据库字段类型") + private String column_type; - @ApiModelProperty(value = "数据库字段键类型") + private String key_type; - @ApiModelProperty(value = "字段额外的参数") + private String extra; - @ApiModelProperty(value = "数据库字段描述") + private String remark; - @ApiModelProperty(value = "是否必填") + private Boolean not_null; - @ApiModelProperty(value = "是否在列表显示") + private Boolean list_show; - @ApiModelProperty(value = "是否表单显示") + private Boolean form_show; - @ApiModelProperty(value = "表单类型") + private String form_type; - @ApiModelProperty(value = "查询 1:模糊 2:精确") + private String query_type; - @ApiModelProperty(value = "字典名称") + private String dict_name; - @ApiModelProperty(value = "日期注解") + private String date_annotation; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/dao/SysNotice.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/dao/SysNotice.java index b5a8daa..5566baa 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/dao/SysNotice.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/dao/SysNotice.java @@ -3,7 +3,7 @@ package org.nl.system.service.notice.dao; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -26,28 +26,28 @@ public class SysNotice implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "notice_id", type = IdType.NONE) - @ApiModelProperty(value = "信息标识") + private String notice_id; - @ApiModelProperty(value = "信息标题") + private String notice_title; - @ApiModelProperty(value = "信息内容") + private String notice_content; - @ApiModelProperty(value = "信息类型") + private String notice_type; - @ApiModelProperty(value = "读取状态") + private String have_read; - @ApiModelProperty(value = "读取时间") + private String read_time; - @ApiModelProperty(value = "处理状态") + private String deal_status; - @ApiModelProperty(value = "创建时间") + private String create_time; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/config/QuartzConfig.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/config/QuartzConfig.java index c00c0f3..b3b88e5 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/config/QuartzConfig.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/config/QuartzConfig.java @@ -9,6 +9,8 @@ import org.springframework.scheduling.quartz.AdaptableJobFactory; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import org.springframework.stereotype.Component; +import java.util.Properties; + /** * 定时任务配置 * @author / @@ -48,6 +50,14 @@ public class QuartzConfig { @Bean(name = "scheduler") public Scheduler scheduler(QuartzJobFactory quartzJobFactory) throws Exception { SchedulerFactoryBean factoryBean=new SchedulerFactoryBean(); + + //https://blog.csdn.net/YuChenIT/article/details/133344898 + Properties prop = new Properties(); + prop.put("org.quartz.threadPool.threadCount", "9"); + factoryBean.setWaitForJobsToCompleteOnShutdown(true); + + factoryBean.setQuartzProperties(prop); + factoryBean.setJobFactory(quartzJobFactory); factoryBean.afterPropertiesSet(); Scheduler scheduler=factoryBean.getScheduler(); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java index e47816a..19ea970 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java @@ -2,11 +2,12 @@ package org.nl.system.service.quartz.utils; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; +import com.yomahub.tlog.task.quartz.TLogQuartzJobBean; import lombok.extern.slf4j.Slf4j; -import org.nl.config.thread.ThreadPoolExecutorUtil; import org.nl.common.utils.RedisUtils; import org.nl.common.utils.ThrowableUtil; import org.nl.config.SpringContextHolder; +import org.nl.config.thread.ThreadPoolExecutorUtil; import org.nl.system.service.quartz.ISysQuartzJobService; import org.nl.system.service.quartz.dao.SysQuartzJob; import org.nl.system.service.quartz.dao.SysQuartzLog; @@ -15,6 +16,8 @@ import org.nl.system.service.quartz.impl.SysQuartzJobServiceImpl; import org.quartz.DisallowConcurrentExecution; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.quartz.QuartzJobBean; @@ -30,14 +33,18 @@ import java.util.concurrent.ThreadPoolExecutor; @SuppressWarnings({"unchecked", "all"}) @Slf4j @DisallowConcurrentExecution -public class ExecutionJob extends QuartzJobBean { +public class ExecutionJob extends TLogQuartzJobBean { /** * 该处仅供参考 */ - private final static ThreadPoolExecutor EXECUTOR = ThreadPoolExecutorUtil.getPoll(); + @Autowired + @Qualifier("threadPoolExecutor") + private ThreadPoolExecutor EXECUTOR; + + @Override - protected void executeInternal(JobExecutionContext context) throws JobExecutionException { + public void executeTask(JobExecutionContext context) throws JobExecutionException { SysQuartzJob quartzJob = (SysQuartzJob) context.getMergedJobDataMap().get(SysQuartzJob.JOB_KEY); // 获取spring bean ISysQuartzJobService quartzJobService = SpringContextHolder.getBean(SysQuartzJobServiceImpl.class); @@ -47,7 +54,7 @@ public class ExecutionJob extends QuartzJobBean { String uuid = quartzJob.getUuid(); SysQuartzLog logDto = new SysQuartzLog(); - logDto.setLog_id(IdUtil.getSnowflake(1,1).nextIdStr()); + logDto.setLog_id(IdUtil.getSnowflake(1, 1).nextIdStr()); logDto.setJob_name(quartzJob.getJob_name()); logDto.setBean_name(quartzJob.getBean_name()); logDto.setMethod_name(quartzJob.getMethod_name()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/redis/vo/RedisKeyDefineRespVO.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/redis/vo/RedisKeyDefineRespVO.java index aee043f..6863b1c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/redis/vo/RedisKeyDefineRespVO.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/redis/vo/RedisKeyDefineRespVO.java @@ -1,7 +1,7 @@ package org.nl.system.service.redis.vo; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; + + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -14,26 +14,25 @@ import java.time.Duration; * @Description: 管理后台 - Redis Key 信息 Response VO * @Date: 2022-08-04 */ -@ApiModel("管理后台 - Redis Key 信息 Response VO") @Data @Builder @AllArgsConstructor public class RedisKeyDefineRespVO { - @ApiModelProperty(value = "Key 模板", required = true, example = "login_user:%s") + private String keyTemplate; - @ApiModelProperty(value = "Key 类型的枚举", required = true, example = "String") + private RedisKeyDefine.KeyTypeEnum keyType; - @ApiModelProperty(value = "Value 类型", required = true, example = "java.lang.String") + private Class valueType; - @ApiModelProperty(value = "超时类型", required = true, example = "1") + private RedisKeyDefine.TimeoutTypeEnum timeoutType; - @ApiModelProperty(value = "过期时间,单位:毫秒", required = true, example = "1024") + private Duration timeout; - @ApiModelProperty(value = "备注", required = true, example = "啦啦啦啦~") + private String memo; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/redis/vo/RedisMonitorRespVO.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/redis/vo/RedisMonitorRespVO.java index ce0794b..65de98a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/redis/vo/RedisMonitorRespVO.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/redis/vo/RedisMonitorRespVO.java @@ -1,7 +1,7 @@ package org.nl.system.service.redis.vo; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; + + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -14,33 +14,31 @@ import java.util.Properties; * @Description: 管理后台 - Redis 监控信息 Response VO * @Date: 2022-08-04 */ -@ApiModel("管理后台 - Redis 监控信息 Response VO") @Data @Builder @AllArgsConstructor public class RedisMonitorRespVO { - @ApiModelProperty(value = "Redis info 指令结果", required = true, notes = "具体字段,查看 Redis 文档") + private Properties info; - @ApiModelProperty(value = "Redis key 数量", required = true, example = "1024") + private Long dbSize; - @ApiModelProperty(value = "CommandStat 数组", required = true) + private List commandStats; - @ApiModel("Redis 命令统计结果") @Data @Builder @AllArgsConstructor public static class CommandStat { - @ApiModelProperty(value = "Redis 命令", required = true, example = "get") + private String command; - @ApiModelProperty(value = "调用次数", required = true, example = "1024") + private Integer calls; - @ApiModelProperty(value = "消耗 CPU 秒数", required = true, example = "666") + private Long usec; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/controller/MdBaseClassstandardController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/controller/MdBaseClassstandardController.java index aa98321..1b4513a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/controller/MdBaseClassstandardController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/controller/MdBaseClassstandardController.java @@ -1,7 +1,7 @@ package org.nl.wms.database.classification.controller; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -24,7 +24,6 @@ import java.util.Map; **/ @Slf4j @RestController -@Api(tags = "基础分类管理") @RequestMapping("/api/Classstandard") public class MdBaseClassstandardController { @@ -33,14 +32,14 @@ public class MdBaseClassstandardController { @GetMapping @Log("查询基础分类") - @ApiOperation("查询基础分类") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(mdBaseClassstandardService.queryAll(whereJson,page)),HttpStatus.OK); } @PostMapping @Log("新增基础分类") - @ApiOperation("新增基础分类") + public ResponseEntity create(@Validated @RequestBody MdBaseClassstandard entity){ mdBaseClassstandardService.create(entity); return new ResponseEntity<>(HttpStatus.CREATED); @@ -48,14 +47,14 @@ public class MdBaseClassstandardController { @PutMapping @Log("修改基础分类") - @ApiOperation("修改基础分类") + public ResponseEntity update(@Validated @RequestBody MdBaseClassstandard entity){ mdBaseClassstandardService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除基础分类") - @ApiOperation("删除基础分类") + @DeleteMapping public ResponseEntity delete(@RequestBody List ids) { mdBaseClassstandardService.deleteAll(ids); @@ -64,19 +63,19 @@ public class MdBaseClassstandardController { @GetMapping("/getClassName") @Log("获取分类名称下拉框") - @ApiOperation("获取分类名称下拉框") + public ResponseEntity getClassName() { return new ResponseEntity<>(mdBaseClassstandardService.getClassName(), HttpStatus.OK); } @GetMapping("/loadClass") @Log("查询基础类型") - @ApiOperation("查询基础类型") + public ResponseEntity query(@RequestParam Map whereJson) { return new ResponseEntity<>(mdBaseClassstandardService.loadClass(whereJson), HttpStatus.OK); } - @ApiOperation("查询类别:根据ID获取同级与上级数据") + @PostMapping("/superior") public ResponseEntity getSuperior(@RequestBody String id) { MdBaseClassstandard classstandard = mdBaseClassstandardService.getById(id); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.java index e244b8f..6cc3af0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.java @@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import lombok.EqualsAndHashCode; @@ -24,64 +24,64 @@ public class MdBaseClassstandard implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "class_id", type = IdType.NONE) - @ApiModelProperty(value = "分类标识") + private String class_id; - @ApiModelProperty(value = "分类编码") + private String class_code; - @ApiModelProperty(value = "分类名称") + private String class_name; - @ApiModelProperty(value = "分类简要描述") + private String class_desc; - @ApiModelProperty(value = "上级分类标识") + private String parent_class_id; - @ApiModelProperty(value = "子级数目") + private Integer sub_count; - @ApiModelProperty(value = "是否叶子") + private Boolean is_leaf; - @ApiModelProperty(value = "是否可修改") + private Boolean is_modify; - @ApiModelProperty(value = "是否删除") + private Boolean is_delete; - @ApiModelProperty(value = "级别") + private String class_level; - @ApiModelProperty(value = "外部标识") + private String ext_id; - @ApiModelProperty(value = "外部上级标识") + private String ext_parent_id; - @ApiModelProperty(value = "车间编码") + private String workshop_code; - @ApiModelProperty(value = "备注") + private String remark; - @ApiModelProperty(value = "创建人") + private String create_id; - @ApiModelProperty(value = "创建人") + private String create_name; - @ApiModelProperty(value = "创建时间") + private String create_time; - @ApiModelProperty(value = "修改人") + private String update_id; - @ApiModelProperty(value = "修改人") + private String update_name; - @ApiModelProperty(value = "修改时间") + private String update_time; @TableField(exist = false) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/controller/MdBaseMaterialController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/controller/MdBaseMaterialController.java index a0c7e42..f7e1055 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/controller/MdBaseMaterialController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/controller/MdBaseMaterialController.java @@ -1,7 +1,7 @@ package org.nl.wms.database.material.controller; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.annotation.Limit; import org.nl.common.base.TableDataInfo; @@ -24,7 +24,6 @@ import java.util.Set; **/ @Slf4j @RestController -@Api(tags = "物料基础信息管理") @RequestMapping("/api/mdBaseMaterial") public class MdBaseMaterialController { @@ -35,14 +34,14 @@ public class MdBaseMaterialController { @GetMapping @Log("查询物料基础信息") - @ApiOperation("查询物料基础信息") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(mdBaseMaterialService.queryAll(whereJson,page)),HttpStatus.OK); } @PostMapping @Log("新增物料基础信息") - @ApiOperation("新增物料基础信息") + public ResponseEntity create(@Validated @RequestBody MdBaseMaterial entity){ mdBaseMaterialService.create(entity); return new ResponseEntity<>(HttpStatus.CREATED); @@ -50,14 +49,14 @@ public class MdBaseMaterialController { @PutMapping @Log("修改物料基础信息") - @ApiOperation("修改物料基础信息") + public ResponseEntity update(@Validated @RequestBody MdBaseMaterial entity){ mdBaseMaterialService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除物料基础信息") - @ApiOperation("删除物料基础信息") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { mdBaseMaterialService.deleteAll(ids); @@ -66,7 +65,7 @@ public class MdBaseMaterialController { @PostMapping("/synchronize") @Log("物料同步") - @ApiOperation("物料同步") + @Limit(period = 1, count = 1) public ResponseEntity synchronize(@RequestBody Map whereJson) { return new ResponseEntity<>(HttpStatus.OK); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java index d093aec..3598cc4 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java @@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import lombok.EqualsAndHashCode; @@ -24,85 +24,85 @@ public class MdBaseMaterial implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "material_id", type = IdType.NONE) - @ApiModelProperty(value = "物料标识") + private String material_id; - @ApiModelProperty(value = "成品物料编码") + private String material_code; - @ApiModelProperty(value = "半成品物料编码") + private String half_material_code; - @ApiModelProperty(value = "原材料物料编码") + private String raw_material_code; - @ApiModelProperty(value = "物料名称 ") + private String material_name; - @ApiModelProperty(value = "物料规格") + private String material_spec; - @ApiModelProperty(value = "物料分类标识") + private String class_id; - @ApiModelProperty(value = "静置时间(分钟)") + private Integer standing_time; - @ApiModelProperty(value = "冷却时间(分钟)") + private Integer cooling_time; - @ApiModelProperty(value = "车间编码") + private String workshop_code; - @ApiModelProperty(value = "备注") + private String remark; - @ApiModelProperty(value = "是否启用") + private Boolean is_used; - @ApiModelProperty(value = "是否删除") + private Boolean is_delete; - @ApiModelProperty(value = "创建人") + private String create_id; - @ApiModelProperty(value = "创建人") + private String create_name; - @ApiModelProperty(value = "创建时间") + private String create_time; - @ApiModelProperty(value = "修改人") + private String update_id; - @ApiModelProperty(value = "修改人") + private String update_name; - @ApiModelProperty(value = "修改时间") + private String update_time; - @ApiModelProperty(value = "外部标识") + private String ext_id; - @ApiModelProperty(value = "外部时间") + private String ext_time; - @ApiModelProperty(value = "物料型号") + private String material_model; - @ApiModelProperty(value = "物料单重") + private String single_weight; - @ApiModelProperty(value = "A") + private String a_long_side; - @ApiModelProperty(value = "B") + private String b_short_side; - @ApiModelProperty(value = "H") + private String h_height; - @ApiModelProperty(value = "W") + private String w_thickness; private String matsize; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.java index 8198202..e80abe4 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.java @@ -1,7 +1,7 @@ package org.nl.wms.database.vehicle.controller; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -22,7 +22,6 @@ import java.util.Set; **/ @Slf4j @RestController -@Api(tags = "载具维护管理") @RequestMapping("/api/mdBaseVehicle") public class MdBaseVehicleController { @@ -31,14 +30,14 @@ public class MdBaseVehicleController { @GetMapping @Log("查询载具维护") - @ApiOperation("查询载具维护") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(mdBaseVehicleService.queryAll(whereJson,page)),HttpStatus.OK); } @PostMapping @Log("新增载具维护") - @ApiOperation("新增载具维护") + public ResponseEntity create(@Validated @RequestBody MdBaseVehicle entity){ mdBaseVehicleService.create(entity); return new ResponseEntity<>(HttpStatus.CREATED); @@ -46,14 +45,14 @@ public class MdBaseVehicleController { @PutMapping @Log("修改载具维护") - @ApiOperation("修改载具维护") + public ResponseEntity update(@Validated @RequestBody MdBaseVehicle entity){ mdBaseVehicleService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除载具维护") - @ApiOperation("删除载具维护") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { mdBaseVehicleService.deleteAll(ids); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.java index 65ef1b8..9a53988 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.java @@ -3,7 +3,7 @@ package org.nl.wms.database.vehicle.service.dao; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import lombok.EqualsAndHashCode; @@ -23,58 +23,58 @@ public class MdBaseVehicle implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "vehicle_code", type = IdType.NONE) - @ApiModelProperty(value = "载具编码") + private String vehicle_code; - @ApiModelProperty(value = "载具名称") + private String vehicle_name; - @ApiModelProperty(value = "载具类型") + private String vehicle_type; - @ApiModelProperty(value = "一维码") + private String one_code; - @ApiModelProperty(value = "二维码") + private String two_code; - @ApiModelProperty(value = "RFID编码") + private String rfid_code; - @ApiModelProperty(value = "载具宽度") + private BigDecimal vehicle_width; - @ApiModelProperty(value = "载具长度") + private BigDecimal vehicle_long; - @ApiModelProperty(value = "载具高度") + private BigDecimal vehicle_height; - @ApiModelProperty(value = "载具超仓位类型") + private String overstruct_type; - @ApiModelProperty(value = "占仓位数") + private BigDecimal occupystruct_qty; - @ApiModelProperty(value = "外部标识") + private String ext_id; - @ApiModelProperty(value = "创建人") + private String create_id; - @ApiModelProperty(value = "创建人") + private String create_name; - @ApiModelProperty(value = "创建时间") + private String create_time; - @ApiModelProperty(value = "修改人") + private String update_id; - @ApiModelProperty(value = "修改人") + private String update_name; - @ApiModelProperty(value = "修改时间") + private String update_time; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.java index d5e4eb2..27c33b5 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.java @@ -1,7 +1,7 @@ package org.nl.wms.database.workshop.controller; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -22,7 +22,6 @@ import java.util.Set; **/ @Slf4j @RestController -@Api(tags = "车间基础信息管理") @RequestMapping("/api/mdBaseWorkshop") public class MdBaseWorkshopController { @@ -31,14 +30,14 @@ public class MdBaseWorkshopController { @GetMapping @Log("查询车间基础信息") - @ApiOperation("查询车间基础信息") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(mdBaseWorkshopService.queryAll(whereJson,page)),HttpStatus.OK); } @PostMapping @Log("新增车间基础信息") - @ApiOperation("新增车间基础信息") + public ResponseEntity create(@Validated @RequestBody MdBaseWorkshop entity){ mdBaseWorkshopService.create(entity); return new ResponseEntity<>(HttpStatus.CREATED); @@ -46,14 +45,14 @@ public class MdBaseWorkshopController { @PutMapping @Log("修改车间基础信息") - @ApiOperation("修改车间基础信息") + public ResponseEntity update(@Validated @RequestBody MdBaseWorkshop entity){ mdBaseWorkshopService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除车间基础信息") - @ApiOperation("删除车间基础信息") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { mdBaseWorkshopService.deleteAll(ids); @@ -62,7 +61,7 @@ public class MdBaseWorkshopController { @GetMapping("/getWorkShopList") @Log("获取车间下拉框") - @ApiOperation("获取车间下拉框") + public ResponseEntity getWorkShopList(){ return new ResponseEntity<>(mdBaseWorkshopService.getWorkShopList(),HttpStatus.OK); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/service/dao/MdBaseWorkshop.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/service/dao/MdBaseWorkshop.java index 37a487a..db4b6f3 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/service/dao/MdBaseWorkshop.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/service/dao/MdBaseWorkshop.java @@ -3,7 +3,7 @@ package org.nl.wms.database.workshop.service.dao; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import lombok.EqualsAndHashCode; @@ -21,37 +21,37 @@ import java.io.Serializable; public class MdBaseWorkshop implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "workshop_code", type = IdType.NONE) - @ApiModelProperty(value = "车间编码") + private String workshop_code; - @ApiModelProperty(value = "车间名称 ") + private String workshop_name; - @ApiModelProperty(value = "备注") + private String remark; - @ApiModelProperty(value = "是否启用") + private Boolean is_used; - @ApiModelProperty(value = "是否删除") + private Boolean is_delete; - @ApiModelProperty(value = "创建人") + private String create_id; - @ApiModelProperty(value = "创建人") + private String create_name; - @ApiModelProperty(value = "创建时间") + private String create_time; - @ApiModelProperty(value = "修改人") + private String update_id; - @ApiModelProperty(value = "修改人") + private String update_name; - @ApiModelProperty(value = "修改时间") + private String update_time; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java index d66cf3a..bb9d0e3 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java @@ -2,8 +2,8 @@ package org.nl.wms.ext.acs.controller; import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.logging.annotation.Log; import org.nl.wms.ext.acs.service.AcsToWmsService; @@ -21,7 +21,6 @@ import org.springframework.web.bind.annotation.RestController; * @Date: 2023/6/16 */ @RestController -@Api(tags = "acs请求lms") @RequestMapping("/api/wms") @Slf4j public class AcsToWmsController { @@ -29,7 +28,6 @@ public class AcsToWmsController { private AcsToWmsService acsToWmsService; @PostMapping("/apply") - @ApiOperation("新增任务管理") @SaIgnore public ResponseEntity apply(@RequestBody JSONObject param) { return new ResponseEntity<>(acsToWmsService.acsApply(param), HttpStatus.OK); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/controller/MesToWmsController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/controller/MesToWmsController.java index 4bc13a9..abfce0c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/controller/MesToWmsController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/controller/MesToWmsController.java @@ -2,8 +2,8 @@ package org.nl.wms.ext.mes.controller; import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.logging.annotation.Log; import org.nl.wms.ext.mes.service.MesToWmsService; @@ -21,7 +21,6 @@ import org.springframework.web.bind.annotation.RestController; * @Date: 2023/8/30 */ @RestController -@Api(tags = "mes请求lms") @RequestMapping("/api/mes") @Slf4j @SaIgnore diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/controller/SysInteractRecordController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/controller/SysInteractRecordController.java index 39bf47c..e4f86b8 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/controller/SysInteractRecordController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/controller/SysInteractRecordController.java @@ -1,7 +1,7 @@ package org.nl.wms.ext.record.controller; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -22,7 +22,6 @@ import java.util.Set; **/ @Slf4j @RestController -@Api(tags = "外部系统接口记录管理") @RequestMapping("/api/sysInteractRecord") public class SysInteractRecordController { @@ -31,14 +30,14 @@ public class SysInteractRecordController { @GetMapping @Log("查询外部系统接口记录") - @ApiOperation("查询外部系统接口记录") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(sysInteractRecordService.queryAll(whereJson,page)),HttpStatus.OK); } @PostMapping @Log("新增外部系统接口记录") - @ApiOperation("新增外部系统接口记录") + public ResponseEntity create(@Validated @RequestBody SysInteractRecord entity){ sysInteractRecordService.create(entity); return new ResponseEntity<>(HttpStatus.CREATED); @@ -46,14 +45,14 @@ public class SysInteractRecordController { @PutMapping @Log("修改外部系统接口记录") - @ApiOperation("修改外部系统接口记录") + public ResponseEntity update(@Validated @RequestBody SysInteractRecord entity){ sysInteractRecordService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除外部系统接口记录") - @ApiOperation("删除外部系统接口记录") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { sysInteractRecordService.deleteAll(ids); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/SysInteractRecord.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/SysInteractRecord.java index f5ef9a9..bc84395 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/SysInteractRecord.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/SysInteractRecord.java @@ -3,7 +3,7 @@ package org.nl.wms.ext.record.service.dao; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import lombok.EqualsAndHashCode; @@ -22,31 +22,31 @@ public class SysInteractRecord implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "interact_id", type = IdType.NONE) - @ApiModelProperty(value = "对接标识") + private String interact_id; - @ApiModelProperty(value = "对接名称") + private String interact_name; - @ApiModelProperty(value = "响应编码") + private int code; - @ApiModelProperty(value = "响应信息") + private String message; - @ApiModelProperty(value = "请求报文") + private String request_param; - @ApiModelProperty(value = "响应结果") + private String response_param; - @ApiModelProperty(value = "记录时间") + private String record_time; - @ApiModelProperty(value = "方向") + private String direction; - @ApiModelProperty(value = "是否成功") + private Boolean is_success; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.java index 0d83fb5..e4fa7a7 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.java @@ -1,8 +1,8 @@ package org.nl.wms.sch.group.controller; import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -24,7 +24,6 @@ import java.util.Set; **/ @Slf4j @RestController -@Api(tags = "组盘信息管理管理") @RequestMapping("/api/schBaseVehiclematerialgroup") public class SchBaseVehiclematerialgroupController { @@ -33,7 +32,7 @@ public class SchBaseVehiclematerialgroupController { @GetMapping @Log("查询组盘信息管理") - @ApiOperation("查询组盘信息管理") + public ResponseEntity query(SchBaseVehiclematerialgroupQuery whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(schBaseVehiclematerialgroupService .queryAll(whereJson,page)),HttpStatus.OK); @@ -41,7 +40,7 @@ public class SchBaseVehiclematerialgroupController { @PostMapping @Log("新增组盘信息管理") - @ApiOperation("新增组盘信息管理") + public ResponseEntity create(@Validated @RequestBody SchBaseVehiclematerialgroup entity){ schBaseVehiclematerialgroupService.create(entity); return new ResponseEntity<>(HttpStatus.CREATED); @@ -49,14 +48,14 @@ public class SchBaseVehiclematerialgroupController { @PutMapping @Log("修改组盘信息管理") - @ApiOperation("修改组盘信息管理") + public ResponseEntity update(@Validated @RequestBody SchBaseVehiclematerialgroup entity){ schBaseVehiclematerialgroupService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除组盘信息管理") - @ApiOperation("删除组盘信息管理") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { schBaseVehiclematerialgroupService.deleteAll(ids); @@ -65,7 +64,7 @@ public class SchBaseVehiclematerialgroupController { @PostMapping("/getGroup") @Log("获取组盘信息管理") - @ApiOperation("获取组盘信息管理") + public ResponseEntity getGroup(@RequestBody JSONObject entity){ return new ResponseEntity<>(schBaseVehiclematerialgroupService.getGroup(entity), HttpStatus.OK); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java index 2439b79..7262da0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java @@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import lombok.EqualsAndHashCode; @@ -22,133 +22,133 @@ import java.math.BigDecimal; public class SchBaseVehiclematerialgroup implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "group_id", type = IdType.NONE) - @ApiModelProperty(value = "组盘标识") + private String group_id; - @ApiModelProperty(value = "载具编码") + private String vehicle_code; - @ApiModelProperty(value = "物料标识") + private String material_id; - @ApiModelProperty(value = "冗余-半成品/泥料") + private String redundance_material_code; - @ApiModelProperty(value = "载具类型") + private String vehicle_type; - @ApiModelProperty(value = "子载具编码") + private String child_vehicle_code; - @ApiModelProperty(value = "来源载具编码") + private String source_vehicle_code; - @ApiModelProperty(value = "点位编码") + private String point_code; - @ApiModelProperty(value = "点位名称") + private String point_name; - @ApiModelProperty(value = "是否满托") + private Boolean is_full; - @ApiModelProperty(value = "是否已烧制") + private Boolean is_firing; - @ApiModelProperty(value = "批次") + private String pcsn; - @ApiModelProperty(value = "碾次") + private String mix_times; - @ApiModelProperty(value = "入库时间") + private String instorage_time; - @ApiModelProperty(value = "静置时间(分钟)") + private Integer standing_time; - @ApiModelProperty(value = "物料数量") + private Integer material_qty; - @ApiModelProperty(value = "物料重量") + private BigDecimal material_weight; - @ApiModelProperty(value = "搬运工单编码") + private String workorder_code; - @ApiModelProperty(value = "组盘次数") + private Integer group_number; - @ApiModelProperty(value = "任务编码") + private String task_code; - @ApiModelProperty(value = "额外信息") + private String ext_data; - @ApiModelProperty(value = "车间编码") + private String workshop_code; - @ApiModelProperty(value = "组盘状态") + private String group_status; - @ApiModelProperty(value = "移动途径") + private String move_way; - @ApiModelProperty(value = "业务表表名") + private String table_name; - @ApiModelProperty(value = "业务表表名主键字段") + private String table_fk; - @ApiModelProperty(value = "业务表表名主键值") + private String table_fk_id; - @ApiModelProperty(value = "业务链路标识") + private String buss_move_id; - @ApiModelProperty(value = "是否首个流程任务") + private Boolean is_first_flow_task; - @ApiModelProperty(value = "流程编码") + private String flow_code; - @ApiModelProperty(value = "流程顺序") + private BigDecimal flow_num; - @ApiModelProperty(value = "上一任务编码") + private String before_task_code; - @ApiModelProperty(value = "下一任务编码") + private String next_task_code; - @ApiModelProperty(value = "备注") + private String remark; - @ApiModelProperty(value = "1:待绑定,2:已绑定,3:已解绑") + private String group_bind_material_status; - @ApiModelProperty(value = "是否删除") + private Boolean is_delete; - @ApiModelProperty(value = "创建人") + private String create_id; - @ApiModelProperty(value = "创建人") + private String create_name; - @ApiModelProperty(value = "创建时间") + private String create_time; - @ApiModelProperty(value = "修改人") + private String update_id; - @ApiModelProperty(value = "修改人") + private String update_name; - @ApiModelProperty(value = "修改时间") + private String update_time; - @ApiModelProperty(value = "出窑时间") + private String out_kiln_time; - @ApiModelProperty(value = "入窑时间") + private String into_kiln_time; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupDto.java index 0dc44a2..7122789 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupDto.java @@ -2,7 +2,7 @@ package org.nl.wms.sch.group.service.dto; import java.math.BigDecimal; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import java.io.Serializable; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/interactivelog/controller/SchBaseAcsandlmsinteractivelogController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/interactivelog/controller/SchBaseAcsandlmsinteractivelogController.java index 2bd2919..a45fa70 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/interactivelog/controller/SchBaseAcsandlmsinteractivelogController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/interactivelog/controller/SchBaseAcsandlmsinteractivelogController.java @@ -1,7 +1,7 @@ package org.nl.wms.sch.interactivelog.controller; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -22,7 +22,6 @@ import java.util.Set; **/ @Slf4j @RestController -@Api(tags = "ACS和LMS交互日志表管理") @RequestMapping("/api/schBaseAcsandlmsinteractivelog") public class SchBaseAcsandlmsinteractivelogController { @@ -31,14 +30,14 @@ public class SchBaseAcsandlmsinteractivelogController { @GetMapping @Log("查询ACS和LMS交互日志表") - @ApiOperation("查询ACS和LMS交互日志表") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(schBaseAcsandlmsinteractivelogService.queryAll(whereJson,page)),HttpStatus.OK); } @PostMapping @Log("新增ACS和LMS交互日志表") - @ApiOperation("新增ACS和LMS交互日志表") + public ResponseEntity create(@Validated @RequestBody SchBaseAcsandlmsinteractivelog entity){ schBaseAcsandlmsinteractivelogService.create(entity); return new ResponseEntity<>(HttpStatus.CREATED); @@ -46,14 +45,14 @@ public class SchBaseAcsandlmsinteractivelogController { @PutMapping @Log("修改ACS和LMS交互日志表") - @ApiOperation("修改ACS和LMS交互日志表") + public ResponseEntity update(@Validated @RequestBody SchBaseAcsandlmsinteractivelog entity){ schBaseAcsandlmsinteractivelogService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除ACS和LMS交互日志表") - @ApiOperation("删除ACS和LMS交互日志表") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { schBaseAcsandlmsinteractivelogService.deleteAll(ids); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/interactivelog/service/dao/SchBaseAcsandlmsinteractivelog.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/interactivelog/service/dao/SchBaseAcsandlmsinteractivelog.java index 40c0464..c4d8073 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/interactivelog/service/dao/SchBaseAcsandlmsinteractivelog.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/interactivelog/service/dao/SchBaseAcsandlmsinteractivelog.java @@ -3,7 +3,7 @@ package org.nl.wms.sch.interactivelog.service.dao; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import lombok.EqualsAndHashCode; @@ -22,52 +22,52 @@ public class SchBaseAcsandlmsinteractivelog implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "log_id", type = IdType.NONE) - @ApiModelProperty(value = "日志标识") + private String log_id; - @ApiModelProperty(value = "请求名字") + private String request_name; - @ApiModelProperty(value = "生成任务的请求参数") + private String request_param; - @ApiModelProperty(value = "下发任务的请求参数") + private String response_param; - @ApiModelProperty(value = "链路标识") + private String acs_trace_id; - @ApiModelProperty(value = "请求描述") + private String request_desc; - @ApiModelProperty(value = "请求类型") + private String request_type; - @ApiModelProperty(value = "备注") + private String remark; - @ApiModelProperty(value = "是否处理完成") + private Boolean is_finish; - @ApiModelProperty(value = "车间编码") + private String workshop_code; - @ApiModelProperty(value = "创建人") + private String create_id; - @ApiModelProperty(value = "创建人") + private String create_name; - @ApiModelProperty(value = "创建时间") + private String create_time; - @ApiModelProperty(value = "修改人") + private String update_id; - @ApiModelProperty(value = "修改人") + private String update_name; - @ApiModelProperty(value = "修改时间") + private String update_time; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/controller/SchBasePointController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/controller/SchBasePointController.java index 8df449b..ed437aa 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/controller/SchBasePointController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/controller/SchBasePointController.java @@ -2,8 +2,8 @@ package org.nl.wms.sch.point.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -25,7 +25,6 @@ import java.util.Set; **/ @Slf4j @RestController -@Api(tags = "点位管理管理") @RequestMapping("/api/schBasePoint") public class SchBasePointController { @@ -34,14 +33,14 @@ public class SchBasePointController { @GetMapping @Log("查询点位管理") - @ApiOperation("查询点位管理") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(schBasePointService.queryAll(whereJson,page)),HttpStatus.OK); } @PostMapping @Log("新增点位管理") - @ApiOperation("新增点位管理") + public ResponseEntity create(@Validated @RequestBody SchBasePoint entity){ schBasePointService.create(entity); return new ResponseEntity<>(HttpStatus.CREATED); @@ -49,14 +48,14 @@ public class SchBasePointController { @PutMapping @Log("修改点位管理") - @ApiOperation("修改点位管理") + public ResponseEntity update(@Validated @RequestBody SchBasePoint entity){ schBasePointService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除点位管理") - @ApiOperation("删除点位管理") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { schBasePointService.deleteAll(ids); @@ -65,7 +64,7 @@ public class SchBasePointController { @Log("启动与禁用") @PostMapping("/changeUsed") - @ApiOperation("启动与禁用") + public ResponseEntity changeUsedOn(@RequestBody JSONObject jsonObject) { schBasePointService.changeUsed(jsonObject); return new ResponseEntity<>(HttpStatus.NO_CONTENT); @@ -73,14 +72,14 @@ public class SchBasePointController { @PostMapping("/getPointList") @Log("获取区域下拉框") - @ApiOperation("获取区域下拉框") + public ResponseEntity getPointList(@RequestBody(required = false) SchBasePoint region){ return new ResponseEntity<>(schBasePointService.getPointList(region),HttpStatus.OK); } @Log("锁定与解锁") @PostMapping("/changeLock") - @ApiOperation("锁定与解锁") + public ResponseEntity changeLock(@RequestBody JSONObject points) { schBasePointService.changeLock(points); return new ResponseEntity<>(HttpStatus.NO_CONTENT); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java index 6f92559..197b58f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java @@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import lombok.EqualsAndHashCode; @@ -25,109 +25,109 @@ public class SchBasePoint implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "point_code", type = IdType.NONE) - @ApiModelProperty(value = "点位编码") + private String point_code; - @ApiModelProperty(value = "点位名称") + private String point_name; - @ApiModelProperty(value = "区域编码") + private String region_code; - @ApiModelProperty(value = "区域名称") + private String region_name; - @ApiModelProperty(value = "点位类型") + private String point_type; - @ApiModelProperty(value = "点位状态") + private String point_status; - @ApiModelProperty(value = "允许的物料类型") + private String can_material_type; - @ApiModelProperty(value = "允许的载具类型") + private String can_vehicle_type; - @ApiModelProperty(value = "载具允许最大数量") + private Integer vehicle_max_qty; - @ApiModelProperty(value = "载具类型") + private String vehicle_type; - @ApiModelProperty(value = "载具编码") + private String vehicle_code; - @ApiModelProperty(value = "载具数量") + private Integer vehicle_qty; - @ApiModelProperty(value = "块") + private Integer block_num; - @ApiModelProperty(value = "排") + private Integer row_num; - @ApiModelProperty(value = "列") + private Integer col_num; - @ApiModelProperty(value = "层") + private Integer layer_num; - @ApiModelProperty(value = "入库顺序") + private Integer in_order_seq; - @ApiModelProperty(value = "出库顺序") + private Integer out_order_seq; - @ApiModelProperty(value = "入空载具顺序") + private Integer in_empty_seq; - @ApiModelProperty(value = "出空载具顺序") + private Integer out_empty_seq; - @ApiModelProperty(value = "父点位编码") + private String parent_point_code; - @ApiModelProperty(value = "外部点位编码") + private String ext_point_code; - @ApiModelProperty(value = "在执行的任务标识") + private String ing_task_code; - @ApiModelProperty(value = "是否创建工单") + private Boolean is_has_workder; - @ApiModelProperty(value = "车间编码") + private String workshop_code; - @ApiModelProperty(value = "是否自动") + private Boolean is_auto; - @ApiModelProperty(value = "备注") + private String remark; - @ApiModelProperty(value = "是否启用") + private Boolean is_used; - @ApiModelProperty(value = "创建人") + private String create_id; - @ApiModelProperty(value = "创建人") + private String create_name; - @ApiModelProperty(value = "创建时间") + private String create_time; - @ApiModelProperty(value = "修改人") + private String update_id; - @ApiModelProperty(value = "修改人") + private String update_name; - @ApiModelProperty(value = "修改时间") + private String update_time; - @ApiModelProperty(value = "允许存放的载具数据") + @TableField(exist = false) private List can_vehicle_types; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/controller/SchBaseRegionController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/controller/SchBaseRegionController.java index 9ca3089..6723121 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/controller/SchBaseRegionController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/controller/SchBaseRegionController.java @@ -1,7 +1,7 @@ package org.nl.wms.sch.region.controller; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -22,7 +22,6 @@ import java.util.Set; **/ @Slf4j @RestController -@Api(tags = "区域管理管理") @RequestMapping("/api/schBaseRegion") public class SchBaseRegionController { @@ -31,14 +30,14 @@ public class SchBaseRegionController { @GetMapping @Log("查询区域管理") - @ApiOperation("查询区域管理") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(regionService.queryAll(whereJson,page)),HttpStatus.OK); } @PostMapping @Log("新增区域管理") - @ApiOperation("新增区域管理") + public ResponseEntity create(@Validated @RequestBody SchBaseRegion entity){ regionService.create(entity); return new ResponseEntity<>(HttpStatus.CREATED); @@ -46,14 +45,14 @@ public class SchBaseRegionController { @PutMapping @Log("修改区域管理") - @ApiOperation("修改区域管理") + public ResponseEntity update(@Validated @RequestBody SchBaseRegion entity){ regionService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除区域管理") - @ApiOperation("删除区域管理") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { regionService.deleteAll(ids); @@ -62,21 +61,21 @@ public class SchBaseRegionController { @PostMapping("/getRegionList") @Log("获取区域下拉框") - @ApiOperation("获取区域下拉框") + public ResponseEntity getRegionList(@RequestBody(required = false) SchBaseRegion region){ return new ResponseEntity<>(regionService.getRegionList(region),HttpStatus.OK); } @PostMapping("/getPointStatusSelectById") @Log("获取点位状态下拉框") - @ApiOperation("获取点位状态下拉框") + public ResponseEntity getPointStatusSelectById(@RequestBody String region_id) { return new ResponseEntity<>(regionService.getPointStatusSelectById(region_id), HttpStatus.OK); } @PostMapping("/getPointTypeSelectById") @Log("获取点位类型下拉框") - @ApiOperation("获取点位类型下拉框") + public ResponseEntity getPointTypeSelectById(@RequestBody String region_id) { return new ResponseEntity<>(regionService.getPointTypeSelectById(region_id), HttpStatus.OK); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/service/dao/SchBaseRegion.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/service/dao/SchBaseRegion.java index 0a6f49f..5d98118 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/service/dao/SchBaseRegion.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/service/dao/SchBaseRegion.java @@ -3,7 +3,7 @@ package org.nl.wms.sch.region.service.dao; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import lombok.EqualsAndHashCode; @@ -22,46 +22,46 @@ public class SchBaseRegion implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "region_code", type = IdType.NONE) - @ApiModelProperty(value = "区域编码") + private String region_code; - @ApiModelProperty(value = "区域名称") + private String region_name; - @ApiModelProperty(value = "点位类型说明") + private String point_type_explain; - @ApiModelProperty(value = "点位状态说明") + private String point_status_explain; - @ApiModelProperty(value = "是否创建工单") + private Boolean is_has_workder; - @ApiModelProperty(value = "车间编码") + private String workshop_code; - @ApiModelProperty(value = "备注") + private String remark; - @ApiModelProperty(value = "创建人") + private String create_id; - @ApiModelProperty(value = "创建人") + private String create_name; - @ApiModelProperty(value = "创建时间") + private String create_time; - @ApiModelProperty(value = "修改人") + private String update_id; - @ApiModelProperty(value = "修改人") + private String update_name; - @ApiModelProperty(value = "修改时间") + private String update_time; - @ApiModelProperty(value = "顺和号") + private Integer order_seq; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskController.java index f678ae7..0726c1d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskController.java @@ -3,8 +3,8 @@ package org.nl.wms.sch.task.controller; import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -26,7 +26,6 @@ import java.util.Set; **/ @Slf4j @RestController -@Api(tags = "任务管理管理") @RequestMapping("/api/schBaseTask") public class SchBaseTaskController { @@ -35,14 +34,14 @@ public class SchBaseTaskController { @GetMapping @Log("查询任务管理") - @ApiOperation("查询任务管理") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(schBaseTaskService.queryAll(whereJson,page)),HttpStatus.OK); } @PostMapping @Log("新增任务管理") - @ApiOperation("新增任务管理") + public ResponseEntity create(@Validated @RequestBody SchBaseTask entity){ schBaseTaskService.create(entity); return new ResponseEntity<>(HttpStatus.CREATED); @@ -50,14 +49,14 @@ public class SchBaseTaskController { @PutMapping @Log("修改任务管理") - @ApiOperation("修改任务管理") + public ResponseEntity update(@Validated @RequestBody SchBaseTask entity){ schBaseTaskService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除任务管理") - @ApiOperation("删除任务管理") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { schBaseTaskService.deleteAll(ids); @@ -66,7 +65,7 @@ public class SchBaseTaskController { @GetMapping("/taskStatusList") @Log("任务状态下拉框") - @ApiOperation("任务状态下拉框") + @SaIgnore public ResponseEntity getTaskStatusList(){ return new ResponseEntity<>(TableDataInfo.build(schBaseTaskService.getTaskStatusList()),HttpStatus.OK); @@ -74,7 +73,7 @@ public class SchBaseTaskController { @PutMapping("/operation") @Log("任务操作") - @ApiOperation("任务操作") + public ResponseEntity update(@RequestBody Map map) { schBaseTaskService.operation(map); return new ResponseEntity<>(HttpStatus.NO_CONTENT); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskconfigController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskconfigController.java index 2a3a319..e8956d6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskconfigController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskconfigController.java @@ -1,7 +1,7 @@ package org.nl.wms.sch.task.controller; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -22,7 +22,6 @@ import java.util.Set; **/ @Slf4j @RestController -@Api(tags = "任务配置管理") @RequestMapping("/api/schBaseTaskconfig") public class SchBaseTaskconfigController { @@ -31,14 +30,14 @@ public class SchBaseTaskconfigController { @GetMapping @Log("查询任务配置") - @ApiOperation("查询任务配置") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(schBaseTaskconfigService.queryAll(whereJson,page)),HttpStatus.OK); } @PostMapping @Log("新增任务配置") - @ApiOperation("新增任务配置") + public ResponseEntity create(@Validated @RequestBody SchBaseTaskconfig entity){ schBaseTaskconfigService.create(entity); return new ResponseEntity<>(HttpStatus.CREATED); @@ -46,14 +45,14 @@ public class SchBaseTaskconfigController { @PutMapping @Log("修改任务配置") - @ApiOperation("修改任务配置") + public ResponseEntity update(@Validated @RequestBody SchBaseTaskconfig entity){ schBaseTaskconfigService.update(entity); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除任务配置") - @ApiOperation("删除任务配置") + @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { schBaseTaskconfigService.deleteAll(ids); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java index 781a239..1d0ebb5 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java @@ -3,7 +3,7 @@ package org.nl.wms.sch.task.service.dao; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import lombok.EqualsAndHashCode; @@ -23,102 +23,102 @@ public class SchBaseTask implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "task_id", type = IdType.NONE) - @ApiModelProperty(value = "任务标识") + private String task_id; - @ApiModelProperty(value = "任务编码") + private String task_code; - @ApiModelProperty(value = "任务状态") + private String task_status; - @ApiModelProperty(value = "配置编码") + private String config_code; - @ApiModelProperty(value = "点位1") + private String point_code1; - @ApiModelProperty(value = "点位2") + private String point_code2; - @ApiModelProperty(value = "点位3") + private String point_code3; - @ApiModelProperty(value = "点位4") + private String point_code4; - @ApiModelProperty(value = "组盘标识") + private String group_id; - @ApiModelProperty(value = "载具类型") + private String vehicle_type; - @ApiModelProperty(value = "载具数量") + private Integer vehicle_qty; - @ApiModelProperty(value = "载具编码") + private String vehicle_code; - @ApiModelProperty(value = "载具编码2") + private String vehicle_code2; - @ApiModelProperty(value = "处理状态") + private String handle_status; - @ApiModelProperty(value = "车号") + private String car_no; - @ApiModelProperty(value = "任务组标识") + private Long task_group_id; - @ApiModelProperty(value = "任务组顺序号") + private BigDecimal task_group_seq; - @ApiModelProperty(value = "任务完成类型") + private String finished_type; - @ApiModelProperty(value = "生成方式") + private String create_mode; - @ApiModelProperty(value = "链路标识") + private String acs_trace_id; - @ApiModelProperty(value = "生成任务的请求参数") + private String request_param; - @ApiModelProperty(value = "下发任务的请求参数") + private String response_param; - @ApiModelProperty(value = "车间编码") + private String workshop_code; - @ApiModelProperty(value = "额外组盘信息") + private String ext_group_data; - @ApiModelProperty(value = "备注") + private String remark; - @ApiModelProperty(value = "是否删除") + private Boolean is_delete; - @ApiModelProperty(value = "创建人") + private String create_id; - @ApiModelProperty(value = "创建人") + private String create_name; - @ApiModelProperty(value = "创建时间") + private String create_time; - @ApiModelProperty(value = "修改人") + private String update_id; - @ApiModelProperty(value = "修改人") + private String update_name; - @ApiModelProperty(value = "修改时间") + private String update_time; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTaskconfig.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTaskconfig.java index e7423ca..b1ff7bf 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTaskconfig.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTaskconfig.java @@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import lombok.EqualsAndHashCode; @@ -25,124 +25,124 @@ public class SchBaseTaskconfig implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "config_id", type = IdType.NONE) - @ApiModelProperty(value = "配置标识") + private String config_id; - @ApiModelProperty(value = "配置编码") + private String config_code; - @ApiModelProperty(value = "配置名称") + private String config_name; - @ApiModelProperty(value = "路由编码") + private String route_plan_code; - @ApiModelProperty(value = "任务取放类型") + private String task_qf_type; - @ApiModelProperty(value = "acs任务类型") + private String acs_task_type; - @ApiModelProperty(value = "任务名字") + private String task_name; - @ApiModelProperty(value = "任务类型") + private String task_type; - @ApiModelProperty(value = "任务方向") + private String task_direction; - @ApiModelProperty(value = "优先级") + private String priority; - @ApiModelProperty(value = "允许最大任务生成数") + private Integer task_create_max_num; - @ApiModelProperty(value = "允许最大任务下发数") + private Integer task_issue_max_num; - @ApiModelProperty(value = "是否自动下发") + private Boolean is_auto_issue; - @ApiModelProperty(value = "起点区域配置") + private String start_region_str; - @ApiModelProperty(value = "终点区域配置") + private String next_region_str; - @ApiModelProperty(value = "起点点位前缀") + private String start_point_pre; - @ApiModelProperty(value = "终点点位前缀") + private String next_region_pre; - @ApiModelProperty(value = "是否校验工单") + private Boolean is_check_workorder; - @ApiModelProperty(value = "是否判断起点锁定") + private Boolean is_check_start_lock; - @ApiModelProperty(value = "是否立即创建") + private Boolean is_immediate_create; - @ApiModelProperty(value = "是否判断终点锁定") + private Boolean is_check_next_lock; - @ApiModelProperty(value = "是否起点自动") + private Boolean is_start_auto; - @ApiModelProperty(value = "是否终点自动") + private Boolean is_next_auto; - @ApiModelProperty(value = "是否锁定起点") + private Boolean is_lock_start; - @ApiModelProperty(value = "是否锁定终点") + private Boolean is_lock_next; - @ApiModelProperty(value = "生成任务的请求参数") + private String request_param; - @ApiModelProperty(value = "下发任务的请求参数") + private String response_param; - @ApiModelProperty(value = "是否按组控制下发顺序") + private Boolean is_group_congrol_issue_seq; - @ApiModelProperty(value = "任务未完成通知时间数") + private BigDecimal unfinish_notify_time; - @ApiModelProperty(value = "sql配置") + private String sql_param; - @ApiModelProperty(value = "车间编码") + private String workshop_code; - @ApiModelProperty(value = "备注") + private String remark; - @ApiModelProperty(value = "是否启用") + private Boolean is_used; - @ApiModelProperty(value = "是否删除") + private Boolean is_delete; - @ApiModelProperty(value = "创建人") + private String create_id; - @ApiModelProperty(value = "创建人") + private String create_name; - @ApiModelProperty(value = "创建时间") + private String create_time; - @ApiModelProperty(value = "修改人") + private String update_id; - @ApiModelProperty(value = "修改人") + private String update_name; - @ApiModelProperty(value = "修改时间") + private String update_time; @TableField(exist = false) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java index 8caae8d..0923f77 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java @@ -2,7 +2,7 @@ package org.nl.wms.sch.task.service.dto; import java.math.BigDecimal; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import java.io.Serializable; @@ -39,7 +39,7 @@ public class SchBaseTaskDto implements Serializable { /** 点位4 */ private String point_code4; - @ApiModelProperty(value = "组盘标识") + private String group_id; /** 载具类型 */ diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml index 164d825..0fab349 100644 --- a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml +++ b/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml @@ -13,9 +13,9 @@ spring: # url: jdbc:log4jdbc:mysql://${DB_HOST:10.93.41.198}:${DB_PORT:3306}/${DB_NAME:rl_mg_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true # username: ${DB_USER:root} # password: ${DB_PWD:123456} - url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:lanzhouhailiang_two}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:lzhl_two_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} - password: ${DB_PWD:12356} + password: ${DB_PWD:p@ssw0rd} type: com.alibaba.druid.pool.DruidDataSource oracle: driver-class-name: oracle.jdbc.OracleDriver @@ -46,7 +46,6 @@ spring: idleConnectionTimeout: 10000 timeout: 3000 - # 登录相关配置 login: # 登录缓存 @@ -73,11 +72,6 @@ login: #是否允许生成代码,生产环境设置为false generator: enabled: true - -#是否开启 swagger-ui -swagger: - enabled: true - # IP 本地解析 ip: local-parsing: true diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev3.yml b/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev3.yml deleted file mode 100644 index ea51d8a..0000000 --- a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev3.yml +++ /dev/null @@ -1,179 +0,0 @@ -server: - port: 8011 -#配置数据源 -spring: - messages: - basename: language/login/login,language/error/error,language/buss/buss - autoconfigure: - exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure - datasource: - dynamic: - primary: mysql - datasource: - mysql: - driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:lz_lms_two}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - username: ${DB_USER:root} - password: ${DB_PWD:942464Yy} -# url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:rtmg_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true -# username: ${DB_USER:root} -# password: ${DB_PWD:12356} - type: com.alibaba.druid.pool.DruidDataSource - oracle: - driver-class-name: oracle.jdbc.OracleDriver - url: jdbc:oracle:thin:@172.27.37.66:1521:RTMES - username: ${DB_USER:LMSTELCOM} - password: ${DB_PWD:LMSTELCOM_6463} - type: com.alibaba.druid.pool.DruidDataSource - sqlserver: - driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - url: jdbc:sqlserver://10.93.41.2\WINCC;DatabaseName=马钢_RH - username: ${DB_USER:sa} - password: ${DB_PWD:123} - type: com.alibaba.druid.pool.DruidDataSource - redis: - #数据库索引 - host: ${REDIS_HOST:127.0.0.1} - port: ${REDIS_PORT:6379} - password: ${REDIS_PWD:} - redisson: - config: | - threads: 4 - nettyThreads: 4 - singleServerConfig: - database: 15 - connectionMinimumIdleSize: 8 - connectionPoolSize: 8 - address: redis://127.0.0.1:6379 - idleConnectionTimeout: 10000 - timeout: 3000 -# 登录相关配置 -login: - # 登录缓存 - cache-enable: true - # 是否限制单用户登录 - single-login: false - # 验证码 - login-code: - # 验证码类型配置 查看 LoginProperties 类 - code-type: arithmetic - # 登录图形验证码有效时间/分钟 - expiration: 2 - # 验证码高度 - width: 111 - # 验证码宽度 - heigth: 36 - # 内容长度 - length: 2 - # 字体名称,为空则使用默认字体,如遇到线上乱码,设置其他字体即可 - font-name: - # 字体大小 - font-size: 25 - -#jwt -jwt: - header: Authorization - # 令牌前缀 - token-start-with: Bearer - # 必须使用最少88位的Base64对该令牌进行编码 - base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI= - # 令牌过期时间 此处单位/毫秒 ,默认2小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html - token-validity-in-seconds: 7200000 - # 在线用户key - online-key: online-token- - # 验证码 - code-key: code-key- - # token 续期检查时间范围(默认30分钟,单位默认毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期 - detect: 1800000 - # 续期时间范围,默认 1小时,这里单位毫秒 - renew: 3600000 - -# IP 本地解析 -ip: - local-parsing: true - -#是否允许生成代码,生产环境设置为false -generator: - enabled: false - -#如果生产环境要开启swagger,需要配置请求地址 -#springfox: -# documentation: -# swagger: -# v2: -# host: # 接口域名或外网ip - -#是否开启 swagger-ui -swagger: - enabled: false - -# 文件存储路径 -file: - mac: - path: ~/file/ - avatar: ~/avatar/ - linux: - path: /home/eladmin/file/ - avatar: /home/eladmin/avatar/ - windows: - path: C:\eladmin\file\ - avatar: C:\eladmin\avatar\ - # 文件大小 /M - maxSize: 100 - avatarMaxSize: -logging: - file: - path: /Users/mima0000/Desktop/app - config: classpath:logback-spring.xml - -# Sa-Token配置 -sa-token: - # token 名称 (同时也是cookie名称) - token-name: Authorization - # token 有效期,单位s 默认30天, -1代表永不过期 - timeout: 2592000 - # token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 - activity-timeout: -1 - # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) - is-concurrent: true - # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) - is-share: false - # token风格 - token-style: random-128 - # 是否输出操作日志 - is-log: false - jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq - # token 前缀 - token-prefix: Bearer - sso: - # Ticket有效期 (单位: 秒),默认五分钟 - ticket-timeout: 300 - # 所有允许的授权回调地址 - allow-url: "*" - # 是否打开单点注销功能 - is-slo: true - - # ------- SSO-模式三相关配置 (下面的配置在SSO模式三并且 is-slo=true 时打开) - # 是否打开模式三 - isHttp: true - # 接口调用秘钥(用于SSO模式三的单点注销功能) - secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor - # ---- 除了以上配置项,你还需要为 Sa-Token 配置http请求处理器(文档有步骤说明) - is-read-cookie: true - is-print: false - # 未登录 StpUtil.getTokenSession() 设置值,获取值 @SaIgnore 得忽略接口 - token-session-check-login: false - alone-redis: - # Redis数据库索引(默认为0) - database: 1 - # Redis服务器地址 - host: 127.0.0.1 - # Redis服务器连接端口 - port: 6379 - # Redis服务器连接密码(默认为空) - password: - # 连接超时时间 - timeout: 10s -lucene: - index: - path: /Users/mima0000/Desktop/lucene/index diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml b/lms/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml index 4db167d..bcea571 100644 --- a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml +++ b/lms/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml @@ -93,18 +93,6 @@ ip: #是否允许生成代码,生产环境设置为false generator: enabled: false - -#如果生产环境要开启swagger,需要配置请求地址 -#springfox: -# documentation: -# swagger: -# v2: -# host: # 接口域名或外网ip - -#是否开启 swagger-ui -swagger: - enabled: false - # 文件存储路径 file: mac: @@ -174,4 +162,4 @@ sa-token: timeout: 10s lucene: index: - path: E:\lucene\index + path: D:\lucene\index diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-test.yml b/lms/nladmin-system/nlsso-server/src/main/resources/config/application-test.yml deleted file mode 100644 index 4f2b0c0..0000000 --- a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,155 +0,0 @@ -server: - port: 8011 -#配置数据源 -spring: - autoconfigure: - exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure - datasource: - dynamic: - primary: mysql - datasource: - mysql: - driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - # url: jdbc:log4jdbc:mysql://${DB_HOST:10.93.41.198}:${DB_PORT:3306}/${DB_NAME:rl_mg_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - # username: ${DB_USER:root} - # password: ${DB_PWD:123456} - url: jdbc:log4jdbc:mysql://${DB_HOST:101.37.151.193}:${DB_PORT:53306}/${DB_NAME:rt_mg_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - username: ${DB_USER:root} - password: ${DB_PWD:P@ssW0rd123} - type: com.alibaba.druid.pool.DruidDataSource - oracle: - driver-class-name: oracle.jdbc.OracleDriver - url: jdbc:oracle:thin:@172.27.37.66:1521:RTMES - username: ${DB_USER:LMSTELCOM} - password: ${DB_PWD:LMSTELCOM_6463} - type: com.alibaba.druid.pool.DruidDataSource - sqlserver: - driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - url: jdbc:sqlserver://10.93.41.2\WINCC;DatabaseName=马钢_RH - username: ${DB_USER:sa} - password: ${DB_PWD:123} - type: com.alibaba.druid.pool.DruidDataSource - redis: - #数据库索引 - host: ${REDIS_HOST:127.0.0.1} - port: ${REDIS_PORT:6379} - password: ${REDIS_PWD:} - redisson: - config: | - threads: 4 - nettyThreads: 4 - singleServerConfig: - database: 3 - connectionMinimumIdleSize: 8 - connectionPoolSize: 8 - address: redis://127.0.0.1:6379 - idleConnectionTimeout: 10000 - timeout: 3000 - - -# 登录相关配置 -login: - # 登录缓存 - cache-enable: true - # 是否限制单用户登录 - single-login: false - # 验证码 - login-code: - # 验证码类型配置 查看 LoginProperties 类 - code-type: arithmetic - # 登录图形验证码有效时间/分钟 - expiration: 2 - # 验证码高度 - width: 111 - # 验证码宽度 - heigth: 36 - # 内容长度 - length: 2 - # 字体名称,为空则使用默认字体 - font-name: - # 字体大小 - font-size: 25 - -#是否允许生成代码,生产环境设置为false -generator: - enabled: true - -#是否开启 swagger-ui -swagger: - enabled: true - -# IP 本地解析 -ip: - local-parsing: true - -# 文件存储路径 -file: - mac: - path: ~/file/ - avatar: ~/avatar/ - linux: - path: /home/eladmin/file/ - avatar: /home/eladmin/avatar/ - windows: - path: C:\eladmin\file\ - avatar: C:\eladmin\avatar\ - # 文件大小 /M - maxSize: 100 - avatarMaxSize: 5 -logging: - file: - path: C:\log\wms - config: classpath:logback-spring.xml - -# Sa-Token配置 -sa-token: - # token 名称 (同时也是cookie名称) - token-name: Authorization - # token 有效期,单位s 默认30天, -1代表永不过期 - timeout: 2592000 - # token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 - activity-timeout: -1 - # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) - is-concurrent: true - # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) - is-share: false - # token风格 - token-style: random-128 - # 是否输出操作日志 - is-log: false - jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq - # token 前缀 - token-prefix: Bearer - sso: - # Ticket有效期 (单位: 秒),默认五分钟 - ticket-timeout: 300 - # 所有允许的授权回调地址 - allow-url: "*" - # 是否打开单点注销功能 - is-slo: true - - # ------- SSO-模式三相关配置 (下面的配置在SSO模式三并且 is-slo=true 时打开) - # 是否打开模式三 - isHttp: true - # 接口调用秘钥(用于SSO模式三的单点注销功能) - secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor - # ---- 除了以上配置项,你还需要为 Sa-Token 配置http请求处理器(文档有步骤说明) - is-read-cookie: true - is-print: false - # 未登录 StpUtil.getTokenSession() 设置值,获取值 @SaIgnore 得忽略接口 - token-session-check-login: false - alone-redis: - # Redis数据库索引(默认为0) - database: 1 - # Redis服务器地址 - host: 127.0.0.1 - # Redis服务器连接端口 - port: 6379 - # Redis服务器连接密码(默认为空) - password: - # 连接超时时间 - timeout: 10s - -lucene: - index: - path: D:\lucene\index diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml b/lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml index 5ccfab8..e705e86 100644 --- a/lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml +++ b/lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml @@ -1,3 +1,8 @@ +server: + tomcat: + relaxed-query-chars: [ '|','{','}','[',']' ] #字符问题:https://blog.csdn.net/CanYue_Yi/article/details/109182577 + relaxed-path-chars: [ '|','{','}','[',']' ] #字符问题: https://blog.csdn.net/weixin_41996632/article/details/90715118 + spring: datasource: druid: @@ -95,9 +100,6 @@ security: - /auth/code - /auth/logout - /sys-user-do/** - # swagger - - /swagger-ui.html - - /swagger-resources/** - /webjars/** - /file/** - /webSocket/** @@ -106,7 +108,6 @@ security: - /**/*.html - /**/*.css - /**/*.js - # swagger 文档配置 - /favicon.ico - /*/api-docs - /*/api-docs/** @@ -130,6 +131,7 @@ mybatis-plus: global-config: db-config: id-type: INPUT + banner: false jetcache: statIntervalMinutes: 15 areaInCacheName: false @@ -150,3 +152,6 @@ jetcache: maxTotal: 50 host: 127.0.0.1 port: 6379 +lucene: + index: + path: D:\lucene\index \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml b/lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml index 9669db5..1cc5d14 100644 --- a/lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml +++ b/lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml @@ -21,9 +21,11 @@ https://juejin.cn/post/6844903775631572999 - + + true + ${log.pattern} - + @@ -63,8 +65,8 @@ https://juejin.cn/post/6844903775631572999 - + @@ -104,50 +106,6 @@ https://juejin.cn/post/6844903775631572999 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/template/generator/admin/Controller.ftl b/lms/nladmin-system/nlsso-server/src/main/resources/template/generator/admin/Controller.ftl index 5962e5c..08223a6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/resources/template/generator/admin/Controller.ftl +++ b/lms/nladmin-system/nlsso-server/src/main/resources/template/generator/admin/Controller.ftl @@ -1,7 +1,7 @@ package ${package}.controller; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + + import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -22,7 +22,7 @@ import java.util.Set; **/ @Slf4j @RestController -@Api(tags = "${apiAlias}管理") + = "${apiAlias}管理") @RequestMapping("/api/${changeClassName}") public class ${className}Controller { @@ -31,7 +31,7 @@ public class ${className}Controller { @GetMapping @Log("查询${apiAlias}") - @ApiOperation("查询${apiAlias}") + //@SaCheckPermission("@el.check('${changeClassName}:list')") public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ return new ResponseEntity<>(TableDataInfo.build(${changeClassName}Service.queryAll(whereJson,page)),HttpStatus.OK); @@ -39,7 +39,7 @@ public class ${className}Controller { @PostMapping @Log("新增${apiAlias}") - @ApiOperation("新增${apiAlias}") + //@SaCheckPermission("@el.check('${changeClassName}:add')") public ResponseEntity create(@Validated @RequestBody ${className} entity){ ${changeClassName}Service.create(entity); @@ -48,7 +48,7 @@ public class ${className}Controller { @PutMapping @Log("修改${apiAlias}") - @ApiOperation("修改${apiAlias}") + //@SaCheckPermission("@el.check('${changeClassName}:edit')") public ResponseEntity update(@Validated @RequestBody ${className} entity){ ${changeClassName}Service.update(entity); @@ -56,7 +56,7 @@ public class ${className}Controller { } @Log("删除${apiAlias}") - @ApiOperation("删除${apiAlias}") + //@SaCheckPermission("@el.check('${changeClassName}:del')") @DeleteMapping public ResponseEntity delete(@RequestBody Set ids) { diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/template/generator/admin/Entity.ftl b/lms/nladmin-system/nlsso-server/src/main/resources/template/generator/admin/Entity.ftl index 93dfaa8..da1a90e 100644 --- a/lms/nladmin-system/nlsso-server/src/main/resources/template/generator/admin/Entity.ftl +++ b/lms/nladmin-system/nlsso-server/src/main/resources/template/generator/admin/Entity.ftl @@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; + import lombok.Data; import lombok.EqualsAndHashCode; @@ -35,9 +35,9 @@ public class ${className} implements Serializable { @TableId(value = "${column.columnName}", type = <#if auto>IdType.AUTO<#else>IdType.NONE) <#if column.remark != ''> - @ApiModelProperty(value = "${column.remark}") + <#else> - @ApiModelProperty(value = "${column.changeColumnName}") + private ${column.columnType} ${column.changeColumnName}; From 6204f3a465fa402f2080f7c863aa15fbbd2562f0 Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 15 Jan 2024 19:55:39 +0800 Subject: [PATCH 8/8] =?UTF-8?q?rev=EF=BC=9A=E5=87=BA=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E8=A1=A8=E7=BB=93=E6=9E=84=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iostorInv/IStIvtIostorinvdtlService.java | 2 +- .../service/iostorInv/dao/StIvtIostorinv.java | 34 +++++++-------- .../iostorInv/dao/StIvtIostorinvdis.java | 23 +++++------ .../iostorInv/dao/StIvtIostorinvdtl.java | 12 +++--- .../impl/StIvtIostorinvOutServiceImpl.java | 41 +++++++++---------- .../impl/StIvtIostorinvServiceImpl.java | 36 ++++++++-------- .../impl/StIvtIostorinvdisServiceImpl.java | 20 ++++----- .../impl/StIvtIostorinvdtlServiceImpl.java | 12 +++--- .../storage_manage/ios/inbill/AddDialog.vue | 4 +- .../storage_manage/ios/inbill/DivDialog.vue | 4 +- .../storage_manage/ios/inbill/TaskDialog.vue | 4 +- .../storage_manage/ios/inbill/ViewDialog.vue | 10 ++--- .../wms/storage_manage/ios/inbill/index.vue | 6 +-- .../storage_manage/ios/outbill/AddDialog.vue | 4 +- .../storage_manage/ios/outbill/DivDialog.vue | 6 +-- .../storage_manage/ios/outbill/TaskDialog.vue | 6 +-- .../storage_manage/ios/outbill/ViewDialog.vue | 10 ++--- .../wms/storage_manage/ios/outbill/index.vue | 6 +-- 18 files changed, 119 insertions(+), 121 deletions(-) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdtlService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdtlService.java index 28f52d8..720c0d1 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdtlService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdtlService.java @@ -25,7 +25,7 @@ public interface IStIvtIostorinvdtlService extends IService { * @param tableDataList 、 * @return 、 */ - ArrayList insertDtl(String iostorinv_id, List tableDataList); + ArrayList insertDtl(Long iostorinv_id, List tableDataList); /** * 获取单据明细 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinv.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinv.java index d8a266c..06dc2fb 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinv.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinv.java @@ -30,7 +30,7 @@ public class StIvtIostorinv implements Serializable { * 出入单标识 */ @TableId - private String iostorinv_id; + private Long iostorinv_id; /** * 单据编号 @@ -60,7 +60,7 @@ public class StIvtIostorinv implements Serializable { /** * 仓库标识 */ - private String stor_id; + private Long stor_id; /** * 仓库编码 @@ -75,7 +75,7 @@ public class StIvtIostorinv implements Serializable { /** * 来源方标识 */ - private String source_id; + private Long source_id; /** * 来源方名称 @@ -120,7 +120,7 @@ public class StIvtIostorinv implements Serializable { /** * 制单人 */ - private String input_optid; + private Long input_optid; /** * 制单人姓名 @@ -135,7 +135,7 @@ public class StIvtIostorinv implements Serializable { /** * 修改人 */ - private String update_optid; + private Long update_optid; /** * 修改人姓名 @@ -150,7 +150,7 @@ public class StIvtIostorinv implements Serializable { /** * 分配人 */ - private String dis_optid; + private Long dis_optid; /** * 分配人姓名 @@ -165,7 +165,7 @@ public class StIvtIostorinv implements Serializable { /** * 确认人 */ - private String confirm_optid; + private Long confirm_optid; /** * 确认人姓名 @@ -180,27 +180,27 @@ public class StIvtIostorinv implements Serializable { /** * 部门ID */ - private String sysdeptid; + private Long sysdeptid; /** * 公司ID */ - private String syscompanyid; + private Long syscompanyid; /** * 是否删除 */ - private Boolean is_delete; + private String is_delete; /** * 是否已上传 */ - private Boolean is_upload; + private String is_upload; /** * 回传人 */ - private String upload_optid; + private Long upload_optid; /** * 回传时间 @@ -210,12 +210,12 @@ public class StIvtIostorinv implements Serializable { /** * 是否冲销 */ - private Boolean is_writeoff; + private String is_writeoff; /** * 冲销人 */ - private String writeoff_optid; + private Long writeoff_optid; /** * 冲销时间 @@ -305,17 +305,17 @@ public class StIvtIostorinv implements Serializable { /** * 移入仓库标识 */ - private String out_stor_id; + private Long out_stor_id; /** * 回传MES */ - private Boolean upload_mes; + private String upload_mes; /** * 回传SAP */ - private Boolean upload_sap; + private String upload_sap; /** * 运转费 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java index e798133..3b2f2d1 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java @@ -29,17 +29,17 @@ public class StIvtIostorinvdis implements Serializable { * 出入单分配标识 */ @TableId - private String iostorinvdis_id; + private Long iostorinvdis_id; /** * 出入单标识 */ - private String iostorinv_id; + private Long iostorinv_id; /** * 出入单明细标识 */ - private String iostorinvdtl_id; + private Long iostorinvdtl_id; /** * 明细序号 @@ -49,7 +49,7 @@ public class StIvtIostorinvdis implements Serializable { /** * 库区标识 */ - private String sect_id; + private Long sect_id; /** * 库区编码 @@ -64,7 +64,7 @@ public class StIvtIostorinvdis implements Serializable { /** * 仓位标识 */ - private String struct_id; + private Long struct_id; /** * 仓位编码 @@ -79,7 +79,7 @@ public class StIvtIostorinvdis implements Serializable { /** * 物料标识 */ - private String material_id; + private Long material_id; /** * 批次 @@ -99,12 +99,12 @@ public class StIvtIostorinvdis implements Serializable { /** * 任务标识 */ - private String task_id; + private Long task_id; /** * 存储载具标识 */ - private String storagevehicle_id; + private Long storagevehicle_id; /** * 存储载具编码 @@ -114,12 +114,12 @@ public class StIvtIostorinvdis implements Serializable { /** * 是否已下发 */ - private Boolean is_issued; + private String is_issued; /** * 数量计量单位标识 */ - private String qty_unit_id; + private Long qty_unit_id; /** * 数量计量单位名称 @@ -139,12 +139,11 @@ public class StIvtIostorinvdis implements Serializable { /** * 出入点位标识 */ - private String point_id; + private Long point_id; /** * 箱号 */ private String box_no; - } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java index 9b6e179..904642d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java @@ -29,12 +29,12 @@ public class StIvtIostorinvdtl implements Serializable { * 出入单明细标识 */ @TableId - private String iostorinvdtl_id; + private Long iostorinvdtl_id; /** * 出入单标识 */ - private String iostorinv_id; + private Long iostorinv_id; /** * 明细序号 @@ -44,7 +44,7 @@ public class StIvtIostorinvdtl implements Serializable { /** * 物料标识 */ - private String material_id; + private Long material_id; /** * 批次 @@ -64,7 +64,7 @@ public class StIvtIostorinvdtl implements Serializable { /** * 数量计量单位标识 */ - private String qty_unit_id; + private Long qty_unit_id; /** * 数量计量单位名称 @@ -84,7 +84,7 @@ public class StIvtIostorinvdtl implements Serializable { /** * 来源单据明细标识 */ - private String source_billdtl_id; + private Long source_billdtl_id; /** * 来源单据类型 @@ -104,7 +104,7 @@ public class StIvtIostorinvdtl implements Serializable { /** * 基础单据明细标识 */ - private String base_billdtl_id; + private Long base_billdtl_id; /** * 基础单据类型 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java index 6ce873d..1cbd9ee 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java @@ -123,12 +123,12 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl row.getIostorinv_id().toString()) .collect(Collectors.joining("','")); List disDaoList = iStIvtIostorinvdisService.list( @@ -432,7 +432,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl { - row.setTask_id(""); row.setWork_status(IOSEnum.WORK_STATUS.code("生成")); }); iStIvtIostorinvdisService.updateBatchById(disDaoList); @@ -514,22 +513,22 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl paramList = new ArrayList<>(); @@ -347,7 +347,7 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl paramList = new ArrayList<>(); @@ -454,7 +454,7 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl insertDtl(String iostorinv_id, List tableDataList) { + public ArrayList insertDtl(Long iostorinv_id, List tableDataList) { // 查询所有对应物料集合 List materialList = iMdBaseMaterialService.list( @@ -87,21 +87,21 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl