From 62454c77c16509c135290c234e22bb9215719ad2 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Fri, 24 Jul 2026 16:23:19 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9APC=20=E4=B8=8B=E5=8F=91=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/common/util/http/AcsUtil.java | 2 +- .../api/classstandard/ClassStandardApi.java | 34 ++ .../base/api/ClassStandardApiController.java | 46 +++ .../vo/ClassStandardSimpleRespVO.java | 3 + .../nl/module/task/api/TransportTaskApi.java | 4 + .../module/task/enums/ErrorCodeConstants.java | 1 + .../task/enums/TaskCreateModelEnum.java | 22 ++ nl-module-task/nl-module-task-server/pom.xml | 7 +- .../module/task/api/TransportTaskApiImpl.java | 6 + .../TransportTaskController.java | 233 +++++++------ .../vo/TransportTaskPageReqVO.java | 5 +- .../transporttask/vo/TransportTaskRespVO.java | 324 +++++++++--------- .../transporttask/TransportTaskMapper.java | 2 +- .../transporttask/TransportTaskService.java | 7 + .../TransportTaskServiceImpl.java | 28 ++ .../src/api/task/transporttask/index.ts | 4 + .../src/views/base/materialbase/data.ts | 200 ++++++++--- .../src/views/task/transporttask/data.ts | 44 ++- .../src/views/task/transporttask/index.vue | 43 ++- .../packages/constants/src/dict-enum.ts | 2 + 20 files changed, 687 insertions(+), 330 deletions(-) create mode 100644 nl-module-base/nl-module-base-api/src/main/java/cn/code/nl/module/base/api/classstandard/ClassStandardApi.java create mode 100644 nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/api/ClassStandardApiController.java create mode 100644 nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/TaskCreateModelEnum.java diff --git a/nl-framework/nl-common/src/main/java/cn/code/nl/framework/common/util/http/AcsUtil.java b/nl-framework/nl-common/src/main/java/cn/code/nl/framework/common/util/http/AcsUtil.java index 2125eba0..0ada5947 100644 --- a/nl-framework/nl-common/src/main/java/cn/code/nl/framework/common/util/http/AcsUtil.java +++ b/nl-framework/nl-common/src/main/java/cn/code/nl/framework/common/util/http/AcsUtil.java @@ -34,7 +34,7 @@ public class AcsUtil { response = HttpUtils.post(url, headers(), JsonUtils.toJsonString(request)); } catch (RuntimeException ex) { if (isNetworkException(ex)) { - throw new ServerException(500, "ACS服务网络不通"); + throw new ServiceException(500, "ACS服务网络不通"); } throw ex; } diff --git a/nl-module-base/nl-module-base-api/src/main/java/cn/code/nl/module/base/api/classstandard/ClassStandardApi.java b/nl-module-base/nl-module-base-api/src/main/java/cn/code/nl/module/base/api/classstandard/ClassStandardApi.java new file mode 100644 index 00000000..503e325a --- /dev/null +++ b/nl-module-base/nl-module-base-api/src/main/java/cn/code/nl/module/base/api/classstandard/ClassStandardApi.java @@ -0,0 +1,34 @@ +package cn.code.nl.module.base.api.classstandard; + +import cn.code.nl.framework.common.pojo.CommonResult; +import cn.code.nl.module.base.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * RPC 服务 - 基础数据分类标准 + * + * @author zhouz + */ +@FeignClient(name = ApiConstants.NAME) +@Tag(name = "RPC 服务 - 基础数据分类标准") +public interface ClassStandardApi { + + String PREFIX = ApiConstants.PREFIX + "/class-standard"; + + /** + * 根据分类编码获取该分类及所有子分类编码 + * + * @param classCode 分类编码 + * @return 分类编码列表 + */ + @GetMapping(PREFIX + "/code-list-by-code") + @Operation(summary = "根据分类编码获取该分类及所有子分类编码") + CommonResult> getClassStandardCodeListByCode(@RequestParam("classCode") String classCode); + +} diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/api/ClassStandardApiController.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/api/ClassStandardApiController.java new file mode 100644 index 00000000..78f90bbe --- /dev/null +++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/api/ClassStandardApiController.java @@ -0,0 +1,46 @@ +package cn.code.nl.module.base.api; + +import cn.code.nl.framework.common.pojo.CommonResult; +import cn.code.nl.module.base.api.classstandard.ClassStandardApi; +import cn.code.nl.module.base.dal.dataobject.classstandard.ClassStandardDO; +import cn.code.nl.module.base.service.classstandard.ClassStandardService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +import static cn.code.nl.framework.common.pojo.CommonResult.success; +import static cn.code.nl.framework.common.util.collection.CollectionUtils.convertList; + +/** + * RPC API - 基础数据分类标准(供其它模块 Feign 调用) + * + * @author zhouz + */ +@Tag(name = "RPC API - 基础数据分类标准") +@RestController +@RequestMapping("/rpc-api/base/class-standard") +@Validated +public class ClassStandardApiController implements ClassStandardApi { + + @Resource + private ClassStandardService classStandardService; + + /** + * 根据分类编码获取该分类及所有子分类编码 + */ + @GetMapping("/code-list-by-code") + @Operation(summary = "根据分类编码获取该分类及所有子分类编码") + @Override + public CommonResult> getClassStandardCodeListByCode(@RequestParam("classCode") String classCode) { + List list = classStandardService.getClassStandardListByCode(classCode); + return success(convertList(list, ClassStandardDO::getClassCode)); + } + +} diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/controller/admin/classstandard/vo/ClassStandardSimpleRespVO.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/controller/admin/classstandard/vo/ClassStandardSimpleRespVO.java index a4de7532..12ba7fe9 100644 --- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/controller/admin/classstandard/vo/ClassStandardSimpleRespVO.java +++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/controller/admin/classstandard/vo/ClassStandardSimpleRespVO.java @@ -15,6 +15,9 @@ public class ClassStandardSimpleRespVO { @Schema(description = "分类标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Long classId; + @Schema(description = "分类编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "原材料") + private String classCode; + @Schema(description = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "原材料") private String className; diff --git a/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/api/TransportTaskApi.java b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/api/TransportTaskApi.java index 05928de0..bae20f63 100644 --- a/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/api/TransportTaskApi.java +++ b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/api/TransportTaskApi.java @@ -34,6 +34,10 @@ public interface TransportTaskApi { @Operation(summary = "接收 LMS/WMS 业务处理结果") CommonResult receiveCallbackResult(@Valid @RequestBody TaskCallbackResultReqDTO reqDTO); + @PostMapping(PREFIX + "/issue") + @Operation(summary = "根据 taskId 下发搬运任务") + CommonResult issueTransportTask(@RequestParam("taskId") Long taskId); + @GetMapping(PREFIX + "/getTaskById") @Operation(summary = "根据 taskId 查询任务") CommonResult getTaskById(@RequestParam("taskId") Long taskId); diff --git a/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/ErrorCodeConstants.java b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/ErrorCodeConstants.java index 41e2a96a..6d7f5290 100644 --- a/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/ErrorCodeConstants.java +++ b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/ErrorCodeConstants.java @@ -16,5 +16,6 @@ public interface ErrorCodeConstants { ErrorCode TRANSPORT_TASK_RUNNING_ALREADY_EXIST = new ErrorCode(5005, "已存在运行中的任务"); ErrorCode TRANSPORT_TASK_OPERATION_NOT_SUPPORTED = new ErrorCode(5006, "不支持的任务操作类型"); ErrorCode TRANSPORT_TASK_ALREADY_FINAL = new ErrorCode(5007, "任务已处于终态,不允许操作"); + ErrorCode TRANSPORT_TASK_AUTO_ISSUE_NOT_ALLOW_MANUAL = new ErrorCode(5008, "自动任务不允许手动下发"); } diff --git a/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/TaskCreateModelEnum.java b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/TaskCreateModelEnum.java new file mode 100644 index 00000000..6c919a64 --- /dev/null +++ b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/TaskCreateModelEnum.java @@ -0,0 +1,22 @@ +package cn.code.nl.module.task.enums; + +import lombok.Getter; + +/** + * + * @Author: liyongde + * @Date: 2026/7/24 16:13 + */ +@Getter +public enum TaskCreateModelEnum { + AUTO("1", "自动创建"), + MANUAL("0", "创建人工"); + + private final String code; + private final String name; + + TaskCreateModelEnum(String code, String name) { + this.code = code; + this.name = name; + } +} diff --git a/nl-module-task/nl-module-task-server/pom.xml b/nl-module-task/nl-module-task-server/pom.xml index 31c04b18..0941178c 100644 --- a/nl-module-task/nl-module-task-server/pom.xml +++ b/nl-module-task/nl-module-task-server/pom.xml @@ -42,6 +42,11 @@ nl-module-task-api ${revision} + + cn.nl.cloud + nl-module-base-api + ${revision} + @@ -164,4 +169,4 @@ - \ No newline at end of file + diff --git a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/api/TransportTaskApiImpl.java b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/api/TransportTaskApiImpl.java index c397dcac..e84a7c0a 100644 --- a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/api/TransportTaskApiImpl.java +++ b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/api/TransportTaskApiImpl.java @@ -36,6 +36,12 @@ public class TransportTaskApiImpl implements TransportTaskApi { return success(true); } + @Override + public CommonResult issueTransportTask(Long taskId) { + transportTaskService.issueTransportTask(taskId); + return success(true); + } + @Override public CommonResult getTaskById(Long taskId) { return success(transportTaskService.getTaskInfoById(taskId)); diff --git a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/controller/admin/transporttask/TransportTaskController.java b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/controller/admin/transporttask/TransportTaskController.java index dc056006..3bc88d3a 100644 --- a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/controller/admin/transporttask/TransportTaskController.java +++ b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/controller/admin/transporttask/TransportTaskController.java @@ -1,112 +1,121 @@ -package cn.code.nl.module.task.controller.admin.transporttask; - -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import jakarta.validation.constraints.*; -import jakarta.validation.*; -import jakarta.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.code.nl.framework.common.pojo.PageParam; -import cn.code.nl.framework.common.pojo.PageResult; -import cn.code.nl.framework.common.pojo.CommonResult; -import cn.code.nl.framework.common.util.object.BeanUtils; -import static cn.code.nl.framework.common.pojo.CommonResult.success; - -import cn.code.nl.framework.excel.core.util.ExcelUtils; - -import cn.code.nl.framework.apilog.core.annotation.ApiAccessLog; -import static cn.code.nl.framework.apilog.core.enums.OperateTypeEnum.*; - -import cn.code.nl.module.task.controller.admin.transporttask.vo.*; -import cn.code.nl.module.task.dal.dataobject.transporttask.TransportTaskDO; -import cn.code.nl.module.task.service.transporttask.TransportTaskService; - -@Tag(name = "管理后台 - 搬运任务") -@RestController -@RequestMapping("/task/transport-task") -@Validated -public class TransportTaskController { - - @Resource - private TransportTaskService transportTaskService; - - @PostMapping("/create") - @Operation(summary = "创建搬运任务") - @PreAuthorize("@ss.hasPermission('task:transport-task:create')") - public CommonResult createTransportTask(@Valid @RequestBody TransportTaskSaveReqVO createReqVO) { - return success(transportTaskService.createTransportTask(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新搬运任务") - @PreAuthorize("@ss.hasPermission('task:transport-task:update')") - public CommonResult updateTransportTask(@Valid @RequestBody TransportTaskSaveReqVO updateReqVO) { - transportTaskService.updateTransportTask(updateReqVO); - return success(true); - } - - @PostMapping("/operate") - @Operation(summary = "PC 端操作搬运任务(完成/取消/强制完成)") - @PreAuthorize("@ss.hasPermission('task:transport-task:operate')") - public CommonResult operateTransportTask(@Valid @RequestBody TransportTaskOperateReqVO reqVO) { - transportTaskService.operateTransportTask(reqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除搬运任务") - @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('task:transport-task:delete')") - public CommonResult deleteTransportTask(@RequestParam("id") Long id) { - transportTaskService.deleteTransportTask(id); - return success(true); - } - - @DeleteMapping("/delete-list") - @Parameter(name = "ids", description = "编号", required = true) - @Operation(summary = "批量删除搬运任务") - @PreAuthorize("@ss.hasPermission('task:transport-task:delete')") - public CommonResult deleteTransportTaskList(@RequestParam("ids") List ids) { - transportTaskService.deleteTransportTaskListByIds(ids); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得搬运任务") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('task:transport-task:query')") - public CommonResult getTransportTask(@RequestParam("id") Long id) { - TransportTaskDO transportTask = transportTaskService.getTransportTask(id); - return success(BeanUtils.toBean(transportTask, TransportTaskRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得搬运任务分页") - @PreAuthorize("@ss.hasPermission('task:transport-task:query')") - public CommonResult> getTransportTaskPage(@Valid TransportTaskPageReqVO pageReqVO) { - PageResult pageResult = transportTaskService.getTransportTaskPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, TransportTaskRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出搬运任务 Excel") - @PreAuthorize("@ss.hasPermission('task:transport-task:export')") - @ApiAccessLog(operateType = EXPORT) - public void exportTransportTaskExcel(@Valid TransportTaskPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = transportTaskService.getTransportTaskPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "搬运任务.xls", "数据", TransportTaskRespVO.class, - BeanUtils.toBean(list, TransportTaskRespVO.class)); - } - -} \ No newline at end of file +package cn.code.nl.module.task.controller.admin.transporttask; + +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import jakarta.validation.constraints.*; +import jakarta.validation.*; +import jakarta.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.code.nl.framework.common.pojo.PageParam; +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.common.pojo.CommonResult; +import cn.code.nl.framework.common.util.object.BeanUtils; +import static cn.code.nl.framework.common.pojo.CommonResult.success; + +import cn.code.nl.framework.excel.core.util.ExcelUtils; + +import cn.code.nl.framework.apilog.core.annotation.ApiAccessLog; +import static cn.code.nl.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.code.nl.module.task.controller.admin.transporttask.vo.*; +import cn.code.nl.module.task.dal.dataobject.transporttask.TransportTaskDO; +import cn.code.nl.module.task.service.transporttask.TransportTaskService; + +@Tag(name = "管理后台 - 搬运任务") +@RestController +@RequestMapping("/task/transport-task") +@Validated +public class TransportTaskController { + + @Resource + private TransportTaskService transportTaskService; + + @PostMapping("/create") + @Operation(summary = "创建搬运任务") + @PreAuthorize("@ss.hasPermission('task:transport-task:create')") + public CommonResult createTransportTask(@Valid @RequestBody TransportTaskSaveReqVO createReqVO) { + return success(transportTaskService.createTransportTask(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新搬运任务") + @PreAuthorize("@ss.hasPermission('task:transport-task:update')") + public CommonResult updateTransportTask(@Valid @RequestBody TransportTaskSaveReqVO updateReqVO) { + transportTaskService.updateTransportTask(updateReqVO); + return success(true); + } + + @PostMapping("/operate") + @Operation(summary = "PC 端操作搬运任务(完成/取消/强制完成)") + @PreAuthorize("@ss.hasPermission('task:transport-task:operate')") + public CommonResult operateTransportTask(@Valid @RequestBody TransportTaskOperateReqVO reqVO) { + transportTaskService.operateTransportTask(reqVO); + return success(true); + } + + @PostMapping("/issue") + @Operation(summary = "PC 端下发搬运任务到 ACS") + @Parameter(name = "taskId", description = "任务ID", required = true) + @PreAuthorize("@ss.hasPermission('task:transport-task:issue')") + public CommonResult issueTransportTask(@RequestParam("taskId") Long taskId) { + transportTaskService.issueTransportTask(taskId); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除搬运任务") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('task:transport-task:delete')") + public CommonResult deleteTransportTask(@RequestParam("id") Long id) { + transportTaskService.deleteTransportTask(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除搬运任务") + @PreAuthorize("@ss.hasPermission('task:transport-task:delete')") + public CommonResult deleteTransportTaskList(@RequestParam("ids") List ids) { + transportTaskService.deleteTransportTaskListByIds(ids); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得搬运任务") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('task:transport-task:query')") + public CommonResult getTransportTask(@RequestParam("id") Long id) { + TransportTaskDO transportTask = transportTaskService.getTransportTask(id); + return success(BeanUtils.toBean(transportTask, TransportTaskRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得搬运任务分页") + @PreAuthorize("@ss.hasPermission('task:transport-task:query')") + public CommonResult> getTransportTaskPage(@Valid TransportTaskPageReqVO pageReqVO) { + PageResult pageResult = transportTaskService.getTransportTaskPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, TransportTaskRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出搬运任务 Excel") + @PreAuthorize("@ss.hasPermission('task:transport-task:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportTransportTaskExcel(@Valid TransportTaskPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = transportTaskService.getTransportTaskPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "搬运任务.xls", "数据", TransportTaskRespVO.class, + BeanUtils.toBean(list, TransportTaskRespVO.class)); + } + +} diff --git a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/controller/admin/transporttask/vo/TransportTaskPageReqVO.java b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/controller/admin/transporttask/vo/TransportTaskPageReqVO.java index 1576581b..ddb17613 100644 --- a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/controller/admin/transporttask/vo/TransportTaskPageReqVO.java +++ b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/controller/admin/transporttask/vo/TransportTaskPageReqVO.java @@ -34,6 +34,9 @@ public class TransportTaskPageReqVO extends PageParam { @Schema(description = "任务类型", example = "2") private String taskType; + @Schema(description = "任务类型及子类型编码列表", hidden = true) + private List taskTypeList; + @Schema(description = "任务状态(支持多选)", example = "[\"10\", \"50\"]") private List taskStatus; @@ -119,4 +122,4 @@ public class TransportTaskPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; -} \ No newline at end of file +} diff --git a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/controller/admin/transporttask/vo/TransportTaskRespVO.java b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/controller/admin/transporttask/vo/TransportTaskRespVO.java index 387e8aa4..80e71307 100644 --- a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/controller/admin/transporttask/vo/TransportTaskRespVO.java +++ b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/controller/admin/transporttask/vo/TransportTaskRespVO.java @@ -1,162 +1,162 @@ -package cn.code.nl.module.task.controller.admin.transporttask.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import cn.idev.excel.annotation.*; -import cn.code.nl.framework.excel.core.annotations.DictFormat; -import cn.code.nl.framework.excel.core.convert.DictConvert; - -@Schema(description = "管理后台 - 搬运任务 Response VO") -@Data -@ExcelIgnoreUnannotated -public class TransportTaskRespVO { - - @Schema(description = "任务标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "11528") - @ExcelProperty("任务标识") - private Long taskId; - - @Schema(description = "任务编码", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("任务编码") - private String taskCode; - - @Schema(description = "任务名称", example = "张三") - @ExcelProperty("任务名称") - private String taskName; - - @Schema(description = "业务归属服务:LMS/WMS,用于完成取消事件一级路由", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("业务归属服务:LMS/WMS,用于完成取消事件一级路由") - private String ownerService; - - @Schema(description = "业务类型", example = "2") - @ExcelProperty("业务类型") - private String bizType; - - @Schema(description = "业务侧标识", example = "31008") - @ExcelProperty("业务侧标识") - private String bizId; - - @Schema(description = "业务回调处理器编码") - @ExcelProperty("业务回调处理器编码") - private String handleCode; - - @Schema(description = "任务类型", example = "2") - @ExcelProperty("任务类型") - private String taskType; - - @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - @ExcelProperty("任务状态") - private String taskStatus; - - @Schema(description = "ACS任务类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty("ACS任务类型") - private String acsTaskType; - - @Schema(description = "AGV系统类型", example = "1") - @ExcelProperty("AGV系统类型") - private String agvSystemType; - - @Schema(description = "ACS外部任务号") - @ExcelProperty("ACS外部任务号") - private String externalTaskNo; - - @Schema(description = "取货点1") - @ExcelProperty("取货点1") - private String pointCode1; - - @Schema(description = "放货点1") - @ExcelProperty("放货点1") - private String pointCode2; - - @Schema(description = "取货点2") - @ExcelProperty("取货点2") - private String pointCode3; - - @Schema(description = "放货点2") - @ExcelProperty("放货点2") - private String pointCode4; - - @Schema(description = "载具类型", example = "2") - @ExcelProperty("载具类型") - private String vehicleType; - - @Schema(description = "载具数量", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("载具数量") - private Long vehicleQty; - - @Schema(description = "载具编码") - @ExcelProperty("载具编码") - private String vehicleCode; - - @Schema(description = "载具编码2") - @ExcelProperty("载具编码2") - private String vehicleCode2; - - @Schema(description = "车号") - @ExcelProperty("车号") - private String carNo; - - @Schema(description = "优先级", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("优先级") - private String priority; - - @Schema(description = "生产区域") - @ExcelProperty("生产区域") - private String productArea; - - @Schema(description = "是否自动下发", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("是否自动下发") - private String isAutoIssue; - - @Schema(description = "任务组标识", example = "21169") - @ExcelProperty("任务组标识") - private Long taskGroupId; - - @Schema(description = "任务组顺序号", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("任务组顺序号") - private Long sortSeq; - - @Schema(description = "任务完成类型", example = "1") - @ExcelProperty("任务完成类型") - private String finishedType; - - @Schema(description = "业务回调状态:PENDING/SUCCESS/FAILED", example = "2") - @ExcelProperty("业务回调状态:PENDING/SUCCESS/FAILED") - private String callbackStatus; - - @Schema(description = "业务回调重试次数", requiredMode = Schema.RequiredMode.REQUIRED, example = "2146") - @ExcelProperty("业务回调重试次数") - private Integer callbackRetryCount; - - @Schema(description = "业务回调失败原因") - @ExcelProperty("业务回调失败原因") - private String callbackErrorMsg; - - @Schema(description = "生成方式", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty(value = "生成方式", converter = DictConvert.class) - @DictFormat("user_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 - private String createMode; - - @Schema(description = "创建任务请求参数") - @ExcelProperty("创建任务请求参数") - private String requestParam; - - @Schema(description = "下发ACS的AcsTaskDto扩展报文") - @ExcelProperty("下发ACS的AcsTaskDto扩展报文") - private String dispatchParam; - - @Schema(description = "ACS反馈参数") - @ExcelProperty("ACS反馈参数") - private String resultParam; - - @Schema(description = "备注", example = "你说的对") - @ExcelProperty("备注") - private String remark; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("创建时间") - private LocalDateTime createTime; - -} \ No newline at end of file +package cn.code.nl.module.task.controller.admin.transporttask.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import cn.idev.excel.annotation.*; +import cn.code.nl.framework.excel.core.annotations.DictFormat; +import cn.code.nl.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 搬运任务 Response VO") +@Data +@ExcelIgnoreUnannotated +public class TransportTaskRespVO { + + @Schema(description = "任务标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "11528") + @ExcelProperty("任务标识") + private Long taskId; + + @Schema(description = "任务编码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("任务编码") + private String taskCode; + + @Schema(description = "任务名称", example = "张三") + @ExcelProperty("任务名称") + private String taskName; + + @Schema(description = "业务归属服务:LMS/WMS,用于完成取消事件一级路由", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("业务归属服务:LMS/WMS,用于完成取消事件一级路由") + private String ownerService; + + @Schema(description = "业务类型", example = "2") + @ExcelProperty("业务类型") + private String bizType; + + @Schema(description = "业务侧标识", example = "31008") + @ExcelProperty("业务侧标识") + private String bizId; + + @Schema(description = "业务回调处理器编码") + @ExcelProperty("业务回调处理器编码") + private String handleCode; + + @Schema(description = "任务类型", example = "2") + @ExcelProperty("任务类型") + private String taskType; + + @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("任务状态") + private String taskStatus; + + @Schema(description = "ACS任务类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("ACS任务类型") + private String acsTaskType; + + @Schema(description = "AGV系统类型", example = "1") + @ExcelProperty("AGV系统类型") + private String agvSystemType; + + @Schema(description = "ACS外部任务号") + @ExcelProperty("ACS外部任务号") + private String externalTaskNo; + + @Schema(description = "取货点1") + @ExcelProperty("取货点1") + private String pointCode1; + + @Schema(description = "放货点1") + @ExcelProperty("放货点1") + private String pointCode2; + + @Schema(description = "取货点2") + @ExcelProperty("取货点2") + private String pointCode3; + + @Schema(description = "放货点2") + @ExcelProperty("放货点2") + private String pointCode4; + + @Schema(description = "载具类型", example = "2") + @ExcelProperty("载具类型") + private String vehicleType; + + @Schema(description = "载具数量", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("载具数量") + private Long vehicleQty; + + @Schema(description = "载具编码") + @ExcelProperty("载具编码") + private String vehicleCode; + + @Schema(description = "载具编码2") + @ExcelProperty("载具编码2") + private String vehicleCode2; + + @Schema(description = "车号") + @ExcelProperty("车号") + private String carNo; + + @Schema(description = "优先级", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("优先级") + private String priority; + + @Schema(description = "生产区域") + @ExcelProperty("生产区域") + private String productArea; + + @Schema(description = "是否自动下发", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否自动下发") + private String isAutoIssue; + + @Schema(description = "任务组标识", example = "21169") + @ExcelProperty("任务组标识") + private Long taskGroupId; + + @Schema(description = "任务组顺序号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("任务组顺序号") + private Long sortSeq; + + @Schema(description = "任务完成类型", example = "1") + @ExcelProperty("任务完成类型") + private String finishedType; + + @Schema(description = "业务回调状态:PENDING/SUCCESS/FAILED", example = "2") + @ExcelProperty("业务回调状态:PENDING/SUCCESS/FAILED") + private String callbackStatus; + + @Schema(description = "业务回调重试次数", requiredMode = Schema.RequiredMode.REQUIRED, example = "2146") + @ExcelProperty("业务回调重试次数") + private Integer callbackRetryCount; + + @Schema(description = "业务回调失败原因") + @ExcelProperty("业务回调失败原因") + private String callbackErrorMsg; + + @Schema(description = "生成方式", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty(value = "生成方式", converter = DictConvert.class) + @DictFormat("task_create_mode") + private String createMode; + + @Schema(description = "创建任务请求参数") + @ExcelProperty("创建任务请求参数") + private String requestParam; + + @Schema(description = "下发ACS的AcsTaskDto扩展报文") + @ExcelProperty("下发ACS的AcsTaskDto扩展报文") + private String dispatchParam; + + @Schema(description = "ACS反馈参数") + @ExcelProperty("ACS反馈参数") + private String resultParam; + + @Schema(description = "备注", example = "你说的对") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java index 5e52125a..ee41978a 100644 --- a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java +++ b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java @@ -27,7 +27,7 @@ public interface TransportTaskMapper extends BaseMapperX { .eqIfPresent(TransportTaskDO::getBizType, reqVO.getBizType()) .eqIfPresent(TransportTaskDO::getBizId, reqVO.getBizId()) .eqIfPresent(TransportTaskDO::getHandleCode, reqVO.getHandleCode()) - .eqIfPresent(TransportTaskDO::getTaskType, reqVO.getTaskType()) + .inIfPresent(TransportTaskDO::getTaskType, reqVO.getTaskTypeList()) .inIfPresent(TransportTaskDO::getTaskStatus, reqVO.getTaskStatus()) .eqIfPresent(TransportTaskDO::getAcsTaskType, reqVO.getAcsTaskType()) .eqIfPresent(TransportTaskDO::getAgvSystemType, reqVO.getAgvSystemType()) diff --git a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskService.java b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskService.java index 5e46ec7d..f7f4c717 100644 --- a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskService.java +++ b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskService.java @@ -76,6 +76,13 @@ public interface TransportTaskService { */ void operateTransportTask(@Valid TransportTaskOperateReqVO reqVO); + /** + * 根据任务ID下发搬运任务到 ACS + * + * @param taskId 任务ID + */ + void issueTransportTask(Long taskId); + /** * 根据 taskId 查询任务全量信息(RPC 用,自动过滤逻辑删除,查不到返回 null) * diff --git a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskServiceImpl.java b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskServiceImpl.java index 3b687f7d..678f4710 100644 --- a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskServiceImpl.java +++ b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskServiceImpl.java @@ -2,6 +2,7 @@ package cn.code.nl.module.task.service.transporttask; import cn.code.nl.framework.common.pojo.PageResult; import cn.code.nl.framework.common.util.object.BeanUtils; +import cn.code.nl.module.base.api.classstandard.ClassStandardApi; import cn.code.nl.module.task.controller.admin.transporttask.vo.TransportTaskOperateReqVO; import cn.code.nl.module.task.controller.admin.transporttask.vo.TransportTaskPageReqVO; import cn.code.nl.module.task.controller.admin.transporttask.vo.TransportTaskSaveReqVO; @@ -19,6 +20,7 @@ import cn.code.nl.module.task.manage.TransportTaskIssueManager; import cn.code.nl.module.task.manage.TransportTaskOperateCheckManager; import cn.code.nl.module.task.manage.TransportTaskOperationManager; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -29,8 +31,10 @@ import java.util.List; import static cn.code.nl.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_ALREADY_FINAL; +import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_AUTO_ISSUE_NOT_ALLOW_MANUAL; import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_NOT_EXISTS; import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_OPERATION_NOT_SUPPORTED; +import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_STATUS_NOT_ALLOW; /** * 搬运任务 Service 实现类 @@ -54,6 +58,9 @@ public class TransportTaskServiceImpl implements TransportTaskService { @Resource private TransportTaskOperateCheckManager transportTaskOperateCheckManager; + @Resource + private ClassStandardApi classStandardApi; + @Override public Long createTransportTask(TransportTaskSaveReqVO createReqVO) { TransportTaskDO transportTask = BeanUtils.toBean(createReqVO, TransportTaskDO.class); @@ -111,6 +118,10 @@ public class TransportTaskServiceImpl implements TransportTaskService { @Override public PageResult getTransportTaskPage(TransportTaskPageReqVO pageReqVO) { + if (StrUtil.isNotBlank(pageReqVO.getTaskType())) { + List taskTypeList = classStandardApi.getClassStandardCodeListByCode(pageReqVO.getTaskType()).getCheckedData(); + pageReqVO.setTaskTypeList(CollUtil.isNotEmpty(taskTypeList) ? taskTypeList : List.of(pageReqVO.getTaskType())); + } return transportTaskMapper.selectPage(pageReqVO); } @@ -148,6 +159,23 @@ public class TransportTaskServiceImpl implements TransportTaskService { transportTaskOperationManager.dispatchOperation(task, type, reqDTO); } + /** + * 根据任务ID手动下发任务到 ACS,复用自动下发的数组接口逻辑 + * + * @param taskId 任务ID + */ + @Override + public void issueTransportTask(Long taskId) { + TransportTaskDO task = transportTaskMapper.selectById(taskId); + if (task == null) { + throw exception(TRANSPORT_TASK_NOT_EXISTS); + } + if ("1".equals(task.getIsAutoIssue())) { + throw exception(TRANSPORT_TASK_AUTO_ISSUE_NOT_ALLOW_MANUAL); + } + transportTaskIssueManager.issueTasks(List.of(task)); + } + @Override public TaskInfoDTO getTaskInfoById(Long taskId) { TransportTaskDO task = transportTaskMapper.selectById(taskId); diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/task/transporttask/index.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/task/transporttask/index.ts index 324cda8b..3edc4346 100644 --- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/task/transporttask/index.ts +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/task/transporttask/index.ts @@ -93,4 +93,8 @@ export function operateTransportTask(data: { return requestClient.post('/task/transport-task/operate', data); } +/** PC 端下发搬运任务到 ACS */ +export function issueTransportTask(taskId: number | string) { + return requestClient.post(`/task/transport-task/issue?taskId=${taskId}`); +} diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/materialbase/data.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/materialbase/data.ts index 0937d1bd..79a612ff 100644 --- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/materialbase/data.ts +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/materialbase/data.ts @@ -1,12 +1,12 @@ -import type { VbenFormSchema } from '#/adapter/form'; -import type { VxeTableGridOptions } from '#/adapter/vxe-table'; -import type { BaseMaterialBaseApi } from '#/api/base/materialbase'; +import type {VbenFormSchema} from '#/adapter/form'; +import type {VxeTableGridOptions} from '#/adapter/vxe-table'; +import type {BaseMaterialBaseApi} from '#/api/base/materialbase'; -import { handleTree } from '@vben/utils'; +import {handleTree} from '@vben/utils'; -import { getClassStandardList, getClassStandardListByCode } from '#/api/base/classstandard'; -import { getSimpleMeasureUnitList } from '#/api/base/measureunit'; -import { getRangePickerDefaultProps } from '#/utils'; +import {getClassStandardList, getClassStandardListByCode} from '#/api/base/classstandard'; +import {getSimpleMeasureUnitList} from '#/api/base/measureunit'; +import {getRangePickerDefaultProps} from '#/utils'; // ========== 分类映射:classId → className ========== const classNameMap: Record = {}; @@ -46,102 +46,218 @@ async function loadMeasureUnitList() { // ========== 新增/修改的表单 ========== export function useFormSchema(): VbenFormSchema[] { return [ - { fieldName: 'materialId', component: 'Input', dependencies: { triggerFields: [''], show: () => false } }, - { fieldName: 'materialCode', label: '物料编码', rules: 'required', component: 'Input', componentProps: { placeholder: '请输入物料编码' } }, - { fieldName: 'materialName', label: '物料名称', rules: 'required', component: 'Input', componentProps: { placeholder: '请输入物料名称' } }, - { fieldName: 'materialSpec', label: '规格', component: 'Input', componentProps: { placeholder: '请输入规格' } }, - { fieldName: 'materialModel', label: '型号', component: 'Input', componentProps: { placeholder: '请输入型号' } }, - { fieldName: 'englishName', label: '外文名称', component: 'Input', componentProps: { placeholder: '请输入外文名称' } }, + { + fieldName: 'materialId', + component: 'Input', + dependencies: {triggerFields: [''], show: () => false} + }, + { + fieldName: 'materialCode', + label: '物料编码', + rules: 'required', + component: 'Input', + componentProps: {placeholder: '请输入物料编码'} + }, + { + fieldName: 'materialName', + label: '物料名称', + rules: 'required', + component: 'Input', + componentProps: {placeholder: '请输入物料名称'} + }, + { + fieldName: 'materialSpec', + label: '规格', + component: 'Input', + componentProps: {placeholder: '请输入规格'} + }, + { + fieldName: 'materialModel', + label: '型号', + component: 'Input', + componentProps: {placeholder: '请输入型号'} + }, + { + fieldName: 'englishName', + label: '外文名称', + component: 'Input', + componentProps: {placeholder: '请输入外文名称'} + }, { fieldName: 'materialTypeId', label: '物料分类', component: 'ApiTreeSelect', - componentProps: { api: loadMaterialTypeTree, labelField: 'className', valueField: 'classId', childrenField: 'children', placeholder: '请选择物料分类', allowClear: true, treeDefaultExpandAll: true }, + componentProps: { + api: loadMaterialTypeTree, + labelField: 'className', + valueField: 'classId', + childrenField: 'children', + placeholder: '请选择物料分类', + allowClear: true, + treeDefaultExpandAll: true + }, }, { fieldName: 'baseUnitId', label: '基本计量单位', rules: 'required', component: 'ApiSelect', - componentProps: { api: loadMeasureUnitList, labelField: 'unitCode', valueField: 'measureUnitId', placeholder: '请选择基本计量单位', allowClear: true }, + componentProps: { + api: loadMeasureUnitList, + labelField: 'unitCode', + valueField: 'measureUnitId', + placeholder: '请选择基本计量单位', + allowClear: true + }, }, { fieldName: 'assUnitId', label: '辅助计量单位', component: 'ApiSelect', - componentProps: { api: loadMeasureUnitList, labelField: 'unitCode', valueField: 'measureUnitId', placeholder: '请选择辅助计量单位', allowClear: true }, + componentProps: { + api: loadMeasureUnitList, + labelField: 'unitCode', + valueField: 'measureUnitId', + placeholder: '请选择辅助计量单位', + allowClear: true + }, }, { fieldName: 'lenUnitId', label: '长度单位', component: 'ApiSelect', - componentProps: { api: loadMeasureUnitList, labelField: 'unitCode', valueField: 'measureUnitId', placeholder: '请选择长度单位', allowClear: true }, + componentProps: { + api: loadMeasureUnitList, + labelField: 'unitCode', + valueField: 'measureUnitId', + placeholder: '请选择长度单位', + allowClear: true + }, }, { fieldName: 'weightUnitId', label: '重量单位', component: 'ApiSelect', - componentProps: { api: loadMeasureUnitList, labelField: 'unitCode', valueField: 'measureUnitId', placeholder: '请选择重量单位', allowClear: true }, + componentProps: { + api: loadMeasureUnitList, + labelField: 'unitCode', + valueField: 'measureUnitId', + placeholder: '请选择重量单位', + allowClear: true + }, }, { fieldName: 'cubageUnitId', label: '体积单位', component: 'ApiSelect', - componentProps: { api: loadMeasureUnitList, labelField: 'unitCode', valueField: 'measureUnitId', placeholder: '请选择体积单位', allowClear: true }, + componentProps: { + api: loadMeasureUnitList, + labelField: 'unitCode', + valueField: 'measureUnitId', + placeholder: '请选择体积单位', + allowClear: true + }, }, { fieldName: 'isUsed', label: '是否启用', rules: 'required', component: 'RadioGroup', - componentProps: { options: [{ label: '是', value: '1' }, { label: '否', value: '0' }], buttonStyle: 'solid', optionType: 'button' }, + componentProps: { + options: [{label: '是', value: '1'}, {label: '否', value: '0'}], + buttonStyle: 'solid', + optionType: 'button' + }, + }, + { + fieldName: 'extId', + label: '外部标识', + component: 'Input', + componentProps: {placeholder: '请输入外部标识'} }, - { fieldName: 'extId', label: '外部标识', component: 'Input', componentProps: { placeholder: '请输入外部标识' } }, ]; } // ========== 列表的搜索表单 ========== export function useGridFormSchema(): VbenFormSchema[] { return [ - { fieldName: 'materialCode', label: '物料编码', component: 'Input', componentProps: { allowClear: true, placeholder: '请输入物料编码' } }, - { fieldName: 'materialName', label: '物料名称', component: 'Input', componentProps: { allowClear: true, placeholder: '请输入物料名称' } }, + { + fieldName: 'materialCode', + label: '物料编码', + component: 'Input', + componentProps: {allowClear: true, placeholder: '请输入物料编码'} + }, + { + fieldName: 'materialName', + label: '物料名称', + component: 'Input', + componentProps: {allowClear: true, placeholder: '请输入物料名称'} + }, { fieldName: 'materialTypeId', label: '物料分类', component: 'ApiTreeSelect', - componentProps: { api: loadMaterialTypeTree, labelField: 'className', valueField: 'classId', childrenField: 'children', placeholder: '请选择物料分类', allowClear: true }, + componentProps: { + api: loadMaterialTypeTree, + labelField: 'className', + valueField: 'classId', + childrenField: 'children', + placeholder: '请选择物料分类', + allowClear: true + }, + }, + { + fieldName: 'createTime', + label: '创建时间', + component: 'RangePicker', + componentProps: {...getRangePickerDefaultProps(), allowClear: true} + }, + { + fieldName: 'isUsed', + label: '是否启用', + component: 'Select', + componentProps: { + allowClear: true, + placeholder: '请选择', + options: [{label: '是', value: '1'}, {label: '否', value: '0'}] + } }, - { fieldName: 'createTime', label: '创建时间', component: 'RangePicker', componentProps: { ...getRangePickerDefaultProps(), allowClear: true } }, - { fieldName: 'isUsed', label: '是否启用', component: 'Select', componentProps: { allowClear: true, placeholder: '请选择', options: [{ label: '是', value: '1' }, { label: '否', value: '0' }] } }, ]; } // ========== 列表的字段 ========== export function useGridColumns(): VxeTableGridOptions['columns'] { return [ - { type: 'checkbox', width: 40 }, - { field: 'materialCode', title: '物料编码', minWidth: 120 }, - { field: 'materialName', title: '物料名称', minWidth: 200 }, - { field: 'materialSpec', title: '规格', minWidth: 120 }, - { field: 'materialModel', title: '型号', minWidth: 120 }, - { field: 'englishName', title: '外文名称', minWidth: 120 }, + {type: 'checkbox', width: 40}, + {field: 'materialCode', title: '物料编码', minWidth: 120}, + {field: 'materialName', title: '物料名称', minWidth: 200}, + {field: 'materialSpec', title: '规格', minWidth: 120}, + {field: 'materialModel', title: '型号', minWidth: 120}, + {field: 'englishName', title: '外文名称', minWidth: 120}, { field: 'materialTypeId', title: '物料分类', minWidth: 150, - formatter: ({ cellValue }: { cellValue: number }) => classNameMap[cellValue] || cellValue || '-', + formatter: ({cellValue}: { + cellValue: number + }) => classNameMap[cellValue] || cellValue || '-', }, { field: 'baseUnitId', title: '基本计量单位', minWidth: 120, - formatter: ({ cellValue }: { cellValue: number }) => unitCodeMap[cellValue] || cellValue || '-', + formatter: ({cellValue}: { cellValue: number }) => unitCodeMap[cellValue] || cellValue || '-', }, { field: 'assUnitId', title: '辅助计量单位', minWidth: 120, - formatter: ({ cellValue }: { cellValue: number }) => unitCodeMap[cellValue] || cellValue || '-', + formatter: ({cellValue}: { cellValue: number }) => unitCodeMap[cellValue] || cellValue || '-', }, { field: 'lenUnitId', title: '长度单位', minWidth: 120, - formatter: ({ cellValue }: { cellValue: number }) => unitCodeMap[cellValue] || cellValue || '-', + formatter: ({cellValue}: { cellValue: number }) => unitCodeMap[cellValue] || cellValue || '-', }, { field: 'weightUnitId', title: '重量单位', minWidth: 120, - formatter: ({ cellValue }: { cellValue: number }) => unitCodeMap[cellValue] || cellValue || '-', + formatter: ({cellValue}: { cellValue: number }) => unitCodeMap[cellValue] || cellValue || '-', }, { field: 'cubageUnitId', title: '体积单位', minWidth: 120, - formatter: ({ cellValue }: { cellValue: number }) => unitCodeMap[cellValue] || cellValue || '-', + formatter: ({cellValue}: { cellValue: number }) => unitCodeMap[cellValue] || cellValue || '-', }, - { field: 'createTime', title: '创建时间', minWidth: 180, formatter: 'formatDateTime' }, - { field: 'isUsed', title: '是否启用', minWidth: 100, formatter: ({ cellValue }: { cellValue: string }) => (cellValue === '1' ? '是' : '否') }, - { field: 'extId', title: '外部标识', minWidth: 120 }, - { title: '操作', width: 200, fixed: 'right', slots: { default: 'actions' } }, + {field: 'createTime', title: '创建时间', minWidth: 180, formatter: 'formatDateTime'}, + { + field: 'isUsed', + title: '是否启用', + minWidth: 100, + formatter: ({cellValue}: { cellValue: string }) => (cellValue === '1' ? '是' : '否') + }, + {field: 'extId', title: '外部标识', minWidth: 120}, + {title: '操作', width: 200, fixed: 'right', slots: {default: 'actions'}}, ]; } diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/task/transporttask/data.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/task/transporttask/data.ts index da5443dd..8032b1bb 100644 --- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/task/transporttask/data.ts +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/task/transporttask/data.ts @@ -4,12 +4,31 @@ import type { TaskTransportTaskApi } from '#/api/task/transporttask'; import { DICT_TYPE } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; +import { handleTree } from '@vben/utils'; import dayjs from 'dayjs'; +import { getClassStandardListByCode } from '#/api/base/classstandard'; import { getRangePickerDefaultProps } from '#/utils'; +const taskTypeNameMap: Record = {}; + +async function loadTaskTypeTree() { + const data = await getClassStandardListByCode('0002'); + if (!data || data.length === 0) return []; + return handleTree(data, 'classId', 'parentClassId'); +} + /** 新增/修改的表单 */ +export async function loadAllLookupData() { + const taskTypeData = await getClassStandardListByCode('0002'); + taskTypeData?.forEach((item) => { + if (item.classCode) { + taskTypeNameMap[item.classCode] = item.className; + } + }); +} + export function useFormSchema(): VbenFormSchema[] { return [ { @@ -369,11 +388,15 @@ export function useGridFormSchema(): VbenFormSchema[] { { fieldName: 'taskType', label: '任务类型', - component: 'Select', + component: 'ApiTreeSelect', componentProps: { allowClear: true, - options: [], + api: loadTaskTypeTree, + childrenField: 'children', + labelField: 'className', placeholder: '请选择任务类型', + treeDefaultExpandAll: true, + valueField: 'classCode', }, }, { @@ -588,6 +611,8 @@ export function useGridColumns(): VxeTableGridOptions + taskTypeNameMap[cellValue] || cellValue || '-', }, { field: 'acsTaskType', @@ -608,6 +633,10 @@ export function useGridColumns(): VxeTableGridOptions { + await loadAllLookupData(); + ready.value = true; +}); + const [FormModal, formModalApi] = useVbenModal({ connectedComponent: Form, destroyOnClose: true, @@ -57,6 +64,22 @@ async function handleOperate( } } +/** PC 端下发搬运任务到 ACS */ +async function handleIssue(row: TaskTransportTaskApi.TransportTask) { + await confirm(`确认要下发【${row.taskCode}】到 ACS 吗?`); + const hideLoading = message.loading({ + content: '正在下发...', + duration: 0, + }); + try { + await issueTransportTask(row.taskId!); + message.success('下发成功'); + handleRefresh(); + } finally { + hideLoading(); + } +} + /** 删除搬运任务 */ async function handleDelete(row: TaskTransportTaskApi.TransportTask) { const hideLoading = message.loading({ @@ -141,7 +164,7 @@ const [Grid, gridApi] = useVbenVxeGrid({