diff --git a/files/WCS系统开发手册.md b/files/WCS系统开发手册.md index 64fc60c..a3982b5 100644 --- a/files/WCS系统开发手册.md +++ b/files/WCS系统开发手册.md @@ -21,4 +21,18 @@ 电子标签状态:立即点亮的直接定时任务点亮,未激活的要扫码触发 -电子标签区域标签状态:正在捡选(橙色) ----> 这片区域捡选完成(蓝色) ----> 所有任务完成(绿色) \ No newline at end of file +电子标签区域标签状态:正在捡选(橙色) ----> 这片区域捡选完成(蓝色) ----> 所有任务完成(绿色) + + + + + +**网络请求** + +上报仓库任务状态地址配置:系统名称_STOCK_TASK_STATUS_CALLBACK + +输送线上报任务状态地址配置:系统名称_CONVEY_TASK_STATUS_CALLBACK + +电子标签上报任务状态地址配置:系统名称_ETAG_TASK_STATUS_CALLBACK + +申请仓库任务状态地址配置:系统名称_STOCK_LOGIN_REQ \ No newline at end of file diff --git a/wcs/db/wcs.sql b/wcs/db/wcs.sql index 2a70f76..b3a6d25 100644 --- a/wcs/db/wcs.sql +++ b/wcs/db/wcs.sql @@ -11,7 +11,7 @@ Target Server Version : 80404 (8.4.4) File Encoding : 65001 - Date: 28/01/2026 14:14:07 + Date: 28/01/2026 14:49:06 */ SET NAMES utf8mb4; @@ -1083,13 +1083,14 @@ CREATE TABLE `t_app_etag_task_bak` ( `goods_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '物料编号', `goods_name` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '物料名称', `light_num` decimal(10,2) NOT NULL COMMENT '点亮数量', + `confirm_num` decimal(10,2) DEFAULT NULL COMMENT '确认数量', `task_status` int NOT NULL COMMENT '任务状态', - `task_source` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '任务来源', + `light_model` int NOT NULL DEFAULT '1' COMMENT '点亮模式:\n1 - 立即点亮;\n2 - 暂存待触发;', + `task_source` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '任务来源', `create_person` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建人', `create_time` datetime NOT NULL COMMENT '创建时间', `light_time` datetime DEFAULT NULL COMMENT '点亮时间', `confirm_time` datetime DEFAULT NULL COMMENT '确认时间', - `confirm_num` decimal(10,2) DEFAULT NULL COMMENT '确认数量', `confirm_person` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '确认人', `completed_time` datetime DEFAULT NULL COMMENT '完成时间', `remark` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注', @@ -1100,6 +1101,11 @@ CREATE TABLE `t_app_etag_task_bak` ( -- Records of t_app_etag_task_bak -- ---------------------------- BEGIN; +INSERT INTO `t_app_etag_task_bak` (`task_id`, `task_group`, `task_type`, `vehicle_no`, `order_id`, `location`, `goods_id`, `goods_name`, `light_num`, `confirm_num`, `task_status`, `light_model`, `task_source`, `create_person`, `create_time`, `light_time`, `confirm_time`, `confirm_person`, `completed_time`, `remark`) VALUES ('00000014656', '78412W24122300002', 1, 'SF1649488540362', '78412S230314000006', 'GZ-J2-01-04-03', '3110246', '消毒液1.8L', 6.00, NULL, 1, 1, 'WMS_API', 'WMS', '2024-12-24 14:32:43', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `t_app_etag_task_bak` (`task_id`, `task_group`, `task_type`, `vehicle_no`, `order_id`, `location`, `goods_id`, `goods_name`, `light_num`, `confirm_num`, `task_status`, `light_model`, `task_source`, `create_person`, `create_time`, `light_time`, `confirm_time`, `confirm_person`, `completed_time`, `remark`) VALUES ('00000014666', '78412W24122300002', 1, 'SF1613717093943', '78412S230314000009', 'GZ-J2-01-04-03', '3110246', '消毒液1.8L', 1.00, NULL, 9, 1, 'WMS_API', 'WMS', '2024-12-24 14:32:43', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `t_app_etag_task_bak` (`task_id`, `task_group`, `task_type`, `vehicle_no`, `order_id`, `location`, `goods_id`, `goods_name`, `light_num`, `confirm_num`, `task_status`, `light_model`, `task_source`, `create_person`, `create_time`, `light_time`, `confirm_time`, `confirm_person`, `completed_time`, `remark`) VALUES ('00000gdfgd789', '78412W24122300002', 1, 'SF1613717093943', '78412S230314000009', 'GZ-J2-01-04-03', '3110246', '消毒液1.8L', 1.00, NULL, 9, 1, 'WMS_API', 'WMS', '2024-12-24 14:32:43', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `t_app_etag_task_bak` (`task_id`, `task_group`, `task_type`, `vehicle_no`, `order_id`, `location`, `goods_id`, `goods_name`, `light_num`, `confirm_num`, `task_status`, `light_model`, `task_source`, `create_person`, `create_time`, `light_time`, `confirm_time`, `confirm_person`, `completed_time`, `remark`) VALUES ('17666465187009010000', '1766646518792010000', 1, 'V0001', '7878', 'L-0101', '555', 'yyy', 1.00, NULL, 1, 1, '', 'dev', '2025-12-25 15:08:39', NULL, NULL, NULL, NULL, '1111'); +INSERT INTO `t_app_etag_task_bak` (`task_id`, `task_group`, `task_type`, `vehicle_no`, `order_id`, `location`, `goods_id`, `goods_name`, `light_num`, `confirm_num`, `task_status`, `light_model`, `task_source`, `create_person`, `create_time`, `light_time`, `confirm_time`, `confirm_person`, `completed_time`, `remark`) VALUES ('17688745645710000', '1768876802098010000', 1, 'Z0001', NULL, 'A01-00-21', NULL, NULL, 1.00, NULL, 1, 1, '', 'dev', '2026-01-20 10:40:02', NULL, NULL, NULL, NULL, NULL); COMMIT; -- ---------------------------- diff --git a/wcs/src/main/java/org/wcs/mapper/impl/AppEtagTaskBakDao.java b/wcs/src/main/java/org/wcs/mapper/impl/AppEtagTaskBakDao.java index e974562..660ac6c 100644 --- a/wcs/src/main/java/org/wcs/mapper/impl/AppEtagTaskBakDao.java +++ b/wcs/src/main/java/org/wcs/mapper/impl/AppEtagTaskBakDao.java @@ -46,4 +46,21 @@ public class AppEtagTaskBakDao extends ServiceImpl queryByTaskId(String taskId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AppEtagTaskBak::getTaskId, taskId); + queryWrapper.orderByAsc(AppEtagTaskBak::getCreateTime); + try { + return baseMapper.selectList(queryWrapper); + } catch (Exception e) { + return null; + } + } } diff --git a/wcs/src/main/java/org/wcs/mapper/intf/AppEtagTaskBakService.java b/wcs/src/main/java/org/wcs/mapper/intf/AppEtagTaskBakService.java index cf72afa..6756e47 100644 --- a/wcs/src/main/java/org/wcs/mapper/intf/AppEtagTaskBakService.java +++ b/wcs/src/main/java/org/wcs/mapper/intf/AppEtagTaskBakService.java @@ -10,4 +10,5 @@ import java.util.List; public interface AppEtagTaskBakService extends IService { Tuple2> queryEtagTask(EtagTaskQueryReq request, Integer pageIndex, Integer pageSize); + List queryByTaskId(String taskId); // 根据任务ID查询 } diff --git a/wcs/src/main/java/org/wcs/serve/controller/app/EtagTaskController.java b/wcs/src/main/java/org/wcs/serve/controller/app/EtagTaskController.java index eca2293..d684440 100644 --- a/wcs/src/main/java/org/wcs/serve/controller/app/EtagTaskController.java +++ b/wcs/src/main/java/org/wcs/serve/controller/app/EtagTaskController.java @@ -1,5 +1,7 @@ package org.wcs.serve.controller.app; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -59,9 +61,6 @@ public class EtagTaskController { return etagTaskService.updateEtagTask(request); } - - - /** * 查询电子标签任务 ---- 备份表 * @param request 查询参数 @@ -75,6 +74,17 @@ public class EtagTaskController { } + /** + * 确认标签任务 + * @param taskId 任务ID + * @param confirmNum 确认数量 + * @return 响应 + */ + @PutMapping("/uploadTaskConfirmNum") + public AppServeResponse uploadTaskConfirmNum(@RequestParam("taskId") @NotBlank(message = "任务ID不允许未为空") String taskId, @RequestParam("confirmNum") @NotNull(message = "确认数不能为空") @Min(value = 0, message = "确认数不能小于0") Integer confirmNum) { + return etagTaskService.uploadTaskConfirmNum(taskId, confirmNum); + } + } diff --git a/wcs/src/main/java/org/wcs/serve/service/impl/EtagTaskService.java b/wcs/src/main/java/org/wcs/serve/service/impl/EtagTaskService.java index c5315fc..57d83fe 100644 --- a/wcs/src/main/java/org/wcs/serve/service/impl/EtagTaskService.java +++ b/wcs/src/main/java/org/wcs/serve/service/impl/EtagTaskService.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.stp.StpUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.wcs.business.pub.ReportStandard; import org.wcs.constant.ConstantData; import org.wcs.constant.enums.database.EtagTaskLightModelEnum; import org.wcs.constant.enums.database.EtagTaskStatusEnum; @@ -152,4 +153,49 @@ public class EtagTaskService implements IEtagTaskService { pageDataResponse.setData(AppBeanUtils.copyListProperties(queryEtagTaskTuple.item2, EtagTaskBakVo::new)); return AppServeResponseFactory.success("查询成功", pageDataResponse); } + + /** + * 上传任务确认数 + * + * @param taskId 任务ID + * @param confirmNum 确认数 + * @return 响应 + */ + @Override + public AppServeResponse uploadTaskConfirmNum(String taskId, Integer confirmNum) { + Object userIdObj = StpUtil.getLoginId(); + if(userIdObj == null) { + return AppServeResponseFactory.unauthorized("用户未登录"); + } + String operationUserId = userIdObj.toString(); + // 真正进行的表 + List etagTasks = etagTaskService.queryByTaskId(taskId); + if(etagTasks == null) { + return AppServeResponseFactory.fail("数据服务异常"); + } + if(!etagTasks.isEmpty()) { + AppEtagTask etagTask = etagTasks.getFirst(); + Tuple2 report = ReportStandard.etagTaskReport(etagTask, confirmNum, operationUserId + "手动上报"); + if(AppStringUtils.isEmpty(report.item1)) { + return AppServeResponseFactory.success("已经执行上报动作"); + } + return AppServeResponseFactory.fail(report.item1); + } + // 备份表 + List etagBakTasks = etagTaskBakService.queryByTaskId(taskId); + if(etagBakTasks == null) { + return AppServeResponseFactory.fail("数据服务异常"); + } + if(!etagBakTasks.isEmpty()) { + AppEtagTaskBak etagBakTask = etagBakTasks.getFirst(); + AppEtagTask etagTask = new AppEtagTask(); + AppBeanUtils.copyProperties(etagBakTask, etagTask); + Tuple2 report = ReportStandard.etagTaskReport(etagTask, confirmNum, operationUserId + "手动上报"); + if(AppStringUtils.isEmpty(report.item1)) { + return AppServeResponseFactory.success("已经执行上报动作"); + } + return AppServeResponseFactory.fail(report.item1); + } + return AppServeResponseFactory.fail("任务不存在"); + } } diff --git a/wcs/src/main/java/org/wcs/serve/service/intf/IEtagTaskService.java b/wcs/src/main/java/org/wcs/serve/service/intf/IEtagTaskService.java index eb6c3fe..2820177 100644 --- a/wcs/src/main/java/org/wcs/serve/service/intf/IEtagTaskService.java +++ b/wcs/src/main/java/org/wcs/serve/service/intf/IEtagTaskService.java @@ -17,4 +17,5 @@ public interface IEtagTaskService { AppServeResponse addEtagTask(AddEtagTaskReq request); // 新增电子标签任务 AppServeResponse updateEtagTask(UpdateEtagTaskReq request); // 更新电子标签任务数据 AppServeDataResponse> queryEtagTaskBak(EtagTaskQueryReq request, Integer pageIndex, Integer pageSize); // 查询电子标签任务 + AppServeResponse uploadTaskConfirmNum(String taskId, Integer confirmNum); // 上传确认信息 } diff --git a/wcs_web/src/api/etagTask.ts b/wcs_web/src/api/etagTask.ts index 98de4ed..d8b921d 100644 --- a/wcs_web/src/api/etagTask.ts +++ b/wcs_web/src/api/etagTask.ts @@ -35,4 +35,14 @@ export default class EtagTaskApi { } }) }; + + // 上传任务确认 + static uploadTaskConfirm(taskId: string, confirmNum: number) { + return axiosInstance.put('/app/etagTask/uploadTaskConfirmNum', null, { + params: { + taskId: taskId, + confirmNum: confirmNum + } + }) + } } \ No newline at end of file diff --git a/wcs_web/src/components/page/etagTask/EditEtagTask.vue b/wcs_web/src/components/page/etagTask/EditEtagTask.vue index 66e3be1..ee0f383 100644 --- a/wcs_web/src/components/page/etagTask/EditEtagTask.vue +++ b/wcs_web/src/components/page/etagTask/EditEtagTask.vue @@ -55,7 +55,22 @@ const save = () => { // 手动上报捡货数量 const confirm = () => { - + MessageUtils.confirmMessageBox('确定手动上报?', '操作确认').then(() => { + const loadingInstance = MessageUtils.loading(); + EtagTaskApi.uploadTaskConfirm(formData.value.taskId ?? '', confirmNum.value).then((res) => { + const responseString = JSON.stringify(res.data); + const response = JSON.parse(responseString) as AppServeResponse; + if (response && response.code == AppServeResponseCodeEnum.SUCCESS) { + MessageUtils.successMessage('操作成功'); + emit('reLoadingTableData'); + close(); + return; + } + MessageUtils.warningMessageBox(response.msg, '警告'); + }).catch(() => {}).finally(() => { + loadingInstance.close(); + }); + }).catch(() => {}); } diff --git a/wcs_web/src/components/page/etagTask/EditEtagTaskBak.vue b/wcs_web/src/components/page/etagTask/EditEtagTaskBak.vue new file mode 100644 index 0000000..cc14336 --- /dev/null +++ b/wcs_web/src/components/page/etagTask/EditEtagTaskBak.vue @@ -0,0 +1,133 @@ + + + + + \ No newline at end of file diff --git a/wcs_web/src/views/tabs/EtagTaskBak.vue b/wcs_web/src/views/tabs/EtagTaskBak.vue index af17fda..aae3d9a 100644 --- a/wcs_web/src/views/tabs/EtagTaskBak.vue +++ b/wcs_web/src/views/tabs/EtagTaskBak.vue @@ -12,8 +12,7 @@ import type {PageDataResponse} from "@/interface/api/PageDataResponse.ts"; import type {AppServeDataResponse} from "@/interface/api/AppServeDataResponse.ts"; import {AppServeResponseCodeEnum} from "@/constant/enums/AppServeResponseCodeEnum.ts"; import {FormatterUtils} from "@/utils/FormatterUtils.ts"; -import AddEtagTask from "@/components/page/etagTask/AddEtagTask.vue"; -import EditEtagTask from "@/components/page/etagTask/EditEtagTask.vue"; +import EditEtagTaskBak from "@/components/page/etagTask/EditEtagTaskBak.vue"; const { t } = useI18n(); const pageSize = ref(100); // 分页单页数据 @@ -189,7 +188,7 @@ const edit = (row: IAppEtagTask) => { - +