From b36618e138164e2af7271e6109edec56b8e2552b Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Mon, 7 Apr 2025 18:33:43 +0800 Subject: [PATCH 01/18] =?UTF-8?q?feat:=E6=89=8B=E5=8A=A8=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=99=BA=E8=83=BD=E6=9F=9C=E5=BA=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/800pjcloudx_hardware.sql | 25 ++++++++++--------- .../entity/spu/HardSpuRepertoryEntity.java | 8 +++++- .../impl/spu/HardSpuRepertoryServiceImpl.java | 14 +++++++++++ .../mapper/spu/HardSpuRepertoryMapper.xml | 4 ++- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/db/800pjcloudx_hardware.sql b/db/800pjcloudx_hardware.sql index 19c13bfa2..30d10655a 100644 --- a/db/800pjcloudx_hardware.sql +++ b/db/800pjcloudx_hardware.sql @@ -329,17 +329,18 @@ CREATE TABLE hard_spu_category DROP TABLE IF EXISTS hard_spu_repertory; CREATE TABLE hard_spu_repertory ( - id bigint NOT NULL AUTO_INCREMENT COMMENT '编号', - user_id bigint NOT NULL COMMENT '用户id', - hard_id bigint NOT NULL COMMENT '设备id', - spu_id bigint NOT NULL COMMENT '商品id', - count bigint DEFAULT 0 COMMENT '更新库存数量', - biz_type tinytext NOT NULL COMMENT '上架类型', - create_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', - create_time datetime DEFAULT NULL COMMENT '创建时间', - update_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人', - update_time datetime DEFAULT NULL COMMENT '修改时间', - del_flag char(1) COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记', - tenant_id bigint DEFAULT NULL COMMENT '租户ID', + id bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + user_id bigint NOT NULL COMMENT '用户id', + hard_id bigint NOT NULL COMMENT '设备id', + spu_id bigint NOT NULL COMMENT '商品id', + before_count int NOT NULL COMMENT '更新前的库存数量', + count int DEFAULT 0 COMMENT '更新库存数量', + biz_type tinytext NOT NULL COMMENT '上架类型', + create_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', + create_time datetime DEFAULT NULL COMMENT '创建时间', + update_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人', + update_time datetime DEFAULT NULL COMMENT '修改时间', + del_flag char(1) COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记', + tenant_id bigint DEFAULT NULL COMMENT '租户ID', PRIMARY KEY (id) ) ENGINE = InnoDB COMMENT ='硬件商品库存更新记录'; \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuRepertoryEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuRepertoryEntity.java index ae8b854bb..96512745f 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuRepertoryEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuRepertoryEntity.java @@ -48,6 +48,12 @@ public class HardSpuRepertoryEntity extends Model { @Schema(description = "商品id") private Long spuId; + /** + * 更新前的库存数量 + */ + @Schema(description = "更新前的库存数量") + private Integer beforeCount; + /** * 更新库存数量 */ @@ -55,7 +61,7 @@ public class HardSpuRepertoryEntity extends Model { @Min(value = 1, message = "更新库存数量不能小于1") @Max(value = 100, message = "更新库存数量不能大于100") @Schema(description = "更新库存数量") - private Long count; + private Integer count; /** * 上架类型 diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuRepertoryServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuRepertoryServiceImpl.java index 7412cc58d..51627ddb2 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuRepertoryServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuRepertoryServiceImpl.java @@ -1,6 +1,7 @@ package com.bsd.pjcloud.hard.service.impl.spu; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.admin.api.entity.SysUser; @@ -28,6 +29,7 @@ import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.util.ArrayList; @@ -60,16 +62,27 @@ public class HardSpuRepertoryServiceImpl extends ServiceImpl mchIds = list.stream().map(HardSpuRepertoryVo::getSpuMchId).filter(ObjectUtil::isNotEmpty).distinct().toList(); + list.forEach(v -> v.setMerchantId(v.getSpuMchId())); if (ObjectUtil.isNotEmpty(mchIds)) { List mchList = remoteMchService.getByIds(mchIds).getData(); if (ObjectUtil.isNotEmpty(mchList)) { diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuRepertoryMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuRepertoryMapper.xml index d9ad45aee..32c7395ec 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuRepertoryMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuRepertoryMapper.xml @@ -7,6 +7,7 @@ + @@ -22,6 +23,7 @@ a.user_id, a.hard_id, a.spu_id, + a.before_count, a.count, a.biz_type, a.create_by, @@ -55,7 +57,7 @@ select - a.dept_id, + a.dept_id as deptId, sum(a.pay_price) as sum, count(0) as count from hard_order a From b28f934faa07fb425c5e9af3f29f68082885c39d Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 8 Apr 2025 12:43:56 +0800 Subject: [PATCH 11/18] =?UTF-8?q?feat:=E6=89=B9=E9=87=8F=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flow/task/dto/BatchCompleteTaskDto.java | 28 + .../flow/task/controller/TaskController.java | 5 +- .../flow/task/service/ITaskService.java | 110 ++-- .../task/service/impl/TaskServiceImpl.java | 604 ++++++++++-------- .../thirdparty/vo/door/DoorBaseVo.java | 19 + .../pjcloud/thirdparty/config/DoorConfig.java | 17 + .../door/ThirdDoorApiController.java | 37 ++ .../service/ThirdDoorApiService.java | 15 + .../impl/door/ThirdDoorApiServiceImpl.java | 36 ++ .../thirdparty/utils/door/api/DoorApi.java | 12 + .../src/main/resources/application.yml | 11 +- 11 files changed, 564 insertions(+), 330 deletions(-) create mode 100644 pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-api/src/main/java/com/bsd/pjcloud/flow/task/dto/BatchCompleteTaskDto.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorBaseVo.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/DoorConfig.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java diff --git a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-api/src/main/java/com/bsd/pjcloud/flow/task/dto/BatchCompleteTaskDto.java b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-api/src/main/java/com/bsd/pjcloud/flow/task/dto/BatchCompleteTaskDto.java new file mode 100644 index 000000000..7f983dbdb --- /dev/null +++ b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-api/src/main/java/com/bsd/pjcloud/flow/task/dto/BatchCompleteTaskDto.java @@ -0,0 +1,28 @@ +package com.bsd.pjcloud.flow.task.dto; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + + +@Data +public class BatchCompleteTaskDto { + + /** + * 任务id + */ + private List processInstances; + + /** + * 任务本地变量 + */ + private Map taskLocalParamMap; + + + /** + * 是否成功 1是 0否 + */ + private String isSuccess; + +} diff --git a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/TaskController.java b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/TaskController.java index 8853e6bce..9fb201efe 100644 --- a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/TaskController.java +++ b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/controller/TaskController.java @@ -1,6 +1,7 @@ package com.bsd.pjcloud.flow.task.controller; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.flow.task.dto.BatchCompleteTaskDto; import com.bsd.pjcloud.flow.task.dto.TaskParamDto; import com.bsd.pjcloud.flow.task.service.ITaskService; import lombok.RequiredArgsConstructor; @@ -63,8 +64,8 @@ public class TaskController { */ @SneakyThrows @PostMapping("batchCompleteTask") - public R batchCompleteTask(@RequestBody TaskParamDto completeParamDto) { - return taskService.completeTask(completeParamDto); + public R batchCompleteTask(@RequestBody BatchCompleteTaskDto dto) { + return R.ok(taskService.batchCompleteTask(dto)); } /** diff --git a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/ITaskService.java b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/ITaskService.java index 8779c5894..be40dd881 100644 --- a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/ITaskService.java +++ b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/ITaskService.java @@ -1,6 +1,7 @@ package com.bsd.pjcloud.flow.task.service; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.flow.task.dto.BatchCompleteTaskDto; import com.bsd.pjcloud.flow.task.dto.TaskParamDto; /** @@ -8,60 +9,73 @@ import com.bsd.pjcloud.flow.task.dto.TaskParamDto; */ public interface ITaskService { - /** - * 查询任务 - * @param taskId - * @param view - * @return - */ - R queryTask(String taskId, boolean view); + /** + * 查询任务 + * + * @param taskId + * @param view + * @return + */ + R queryTask(String taskId, boolean view); - /** - * 完成任务 - * @param taskParamDto - * @return - */ - R completeTask(TaskParamDto taskParamDto); + /** + * 完成任务 + * + * @param taskParamDto + * @return + */ + R completeTask(TaskParamDto taskParamDto); - /** - * 前加签 - * @param taskParamDto - * @return - */ - R delegateTask(TaskParamDto taskParamDto); + /** + * 批量完成任务 + */ + R batchCompleteTask(BatchCompleteTaskDto dto); - /** - * 加签完成任务 - * @param taskParamDto - * @return - */ - R resolveTask(TaskParamDto taskParamDto); + /** + * 前加签 + * + * @param taskParamDto + * @return + */ + R delegateTask(TaskParamDto taskParamDto); - /** - * 设置执行人 - * @param taskParamDto - * @return - */ - R setAssignee(TaskParamDto taskParamDto); + /** + * 加签完成任务 + * + * @param taskParamDto + * @return + */ + R resolveTask(TaskParamDto taskParamDto); - /** - * 结束流程 - * @param taskParamDto - * @return - */ - R stopProcessInstance(TaskParamDto taskParamDto); + /** + * 设置执行人 + * + * @param taskParamDto + * @return + */ + R setAssignee(TaskParamDto taskParamDto); - /** - * 退回 - * @param taskParamDto - * @return - */ - R back(TaskParamDto taskParamDto); + /** + * 结束流程 + * + * @param taskParamDto + * @return + */ + R stopProcessInstance(TaskParamDto taskParamDto); - /** - * 查询首页数据看板 - * @return - */ - R queryTaskData(); + /** + * 退回 + * + * @param taskParamDto + * @return + */ + R back(TaskParamDto taskParamDto); + + /** + * 查询首页数据看板 + * + * @return + */ + R queryTaskData(); } diff --git a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/impl/TaskServiceImpl.java b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/impl/TaskServiceImpl.java index b0e03f9f3..86f021d66 100644 --- a/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/impl/TaskServiceImpl.java +++ b/pjcloud-flow/pjcloud-flow-task/pjcloud-flow-task-biz/src/main/java/com/bsd/pjcloud/flow/task/service/impl/TaskServiceImpl.java @@ -4,8 +4,13 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Dict; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; +import com.bsd.pjcloud.common.core.util.BeanUtils; +import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.flow.task.dto.*; import com.bsd.pjcloud.flow.task.entity.Process; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; @@ -15,10 +20,6 @@ import com.bsd.pjcloud.flow.task.api.feign.RemoteFlowEngineService; import com.bsd.pjcloud.flow.task.constant.FormTypeEnum; import com.bsd.pjcloud.flow.task.constant.NodeStatusEnum; import com.bsd.pjcloud.flow.task.constant.ProcessInstanceConstant; -import com.bsd.pjcloud.flow.task.dto.IndexPageStatistics; -import com.bsd.pjcloud.flow.task.dto.Node; -import com.bsd.pjcloud.flow.task.dto.TaskParamDto; -import com.bsd.pjcloud.flow.task.dto.TaskResultDto; import com.bsd.pjcloud.flow.task.entity.ProcessCopy; import com.bsd.pjcloud.flow.task.entity.ProcessInstanceRecord; import com.bsd.pjcloud.flow.task.entity.ProcessNodeRecordAssignUser; @@ -31,6 +32,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -40,299 +42,343 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class TaskServiceImpl implements ITaskService { - private final RemoteFlowEngineService flowEngineService; + private final RemoteFlowEngineService flowEngineService; - private final IProcessService processService; + private final IProcessService processService; - private final IProcessCopyService processCopyService; + private final IProcessCopyService processCopyService; - private final IProcessNodeDataService nodeDataService; + private final IProcessNodeDataService nodeDataService; - private final IProcessNodeRecordAssignUserService processNodeRecordAssignUserService; + private final IProcessNodeRecordAssignUserService processNodeRecordAssignUserService; - private final IProcessInstanceRecordService processInstanceRecordService; + private final IProcessInstanceRecordService processInstanceRecordService; - private final ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - /** - * 查询首页数据看板 - * @return - */ - @Override - public R queryTaskData() { - R indexPageStatisticsR = flowEngineService - .querySimpleData(SecurityUtils.getUser().getId()); + /** + * 查询首页数据看板 + * + * @return + */ + @Override + public R queryTaskData() { + R indexPageStatisticsR = flowEngineService + .querySimpleData(SecurityUtils.getUser().getId()); - // 获取抄送任务 - Long copyCount = processCopyService.lambdaQuery() - .eq(ProcessCopy::getUserId, SecurityUtils.getUser().getId()) - .count(); - indexPageStatisticsR.getData().setCopyNum(copyCount); - return indexPageStatisticsR; - } + // 获取抄送任务 + Long copyCount = processCopyService.lambdaQuery() + .eq(ProcessCopy::getUserId, SecurityUtils.getUser().getId()) + .count(); + indexPageStatisticsR.getData().setCopyNum(copyCount); + return indexPageStatisticsR; + } + + /** + * 查询任务 + * + * @param taskId + * @param view + * @return + */ + @SneakyThrows + @Override + public R queryTask(String taskId, boolean view) { - /** - * 查询任务 - * @param taskId - * @param view - * @return - */ - @SneakyThrows - @Override - public R queryTask(String taskId, boolean view) { + long userId = SecurityUtils.getUser().getId(); - long userId = SecurityUtils.getUser().getId(); + R r = flowEngineService.queryTask(taskId, userId); - R r = flowEngineService.queryTask(taskId, userId); + if (!r.isOk()) { + return R.failed(r.getMsg()); + } - if (!r.isOk()) { - return R.failed(r.getMsg()); - } + TaskResultDto taskResultDto = r.getData(); - TaskResultDto taskResultDto = r.getData(); + // 变量 + Map paramMap = taskResultDto.getVariableAll(); + // 是否是当前活动任务 + Boolean currentTask = taskResultDto.getCurrentTask(); + if (!currentTask) { + ProcessNodeRecordAssignUser processNodeRecordAssignUser = processNodeRecordAssignUserService.lambdaQuery() + .eq(ProcessNodeRecordAssignUser::getTaskId, taskId) + .eq(ProcessNodeRecordAssignUser::getUserId, userId) + .eq(ProcessNodeRecordAssignUser::getStatus, NodeStatusEnum.YJS.getCode()) + .last("limit 1") + .orderByDesc(ProcessNodeRecordAssignUser::getEndTime) + .one(); - // 变量 - Map paramMap = taskResultDto.getVariableAll(); - // 是否是当前活动任务 - Boolean currentTask = taskResultDto.getCurrentTask(); - if (!currentTask) { - ProcessNodeRecordAssignUser processNodeRecordAssignUser = processNodeRecordAssignUserService.lambdaQuery() - .eq(ProcessNodeRecordAssignUser::getTaskId, taskId) - .eq(ProcessNodeRecordAssignUser::getUserId, userId) - .eq(ProcessNodeRecordAssignUser::getStatus, NodeStatusEnum.YJS.getCode()) - .last("limit 1") - .orderByDesc(ProcessNodeRecordAssignUser::getEndTime) - .one(); + if (processNodeRecordAssignUser != null) { + String data = processNodeRecordAssignUser.getData(); + if (StrUtil.isNotBlank(data)) { + Map collect = objectMapper.readValue(data, new TypeReference<>() { + }); + paramMap.putAll(collect); - if (processNodeRecordAssignUser != null) { - String data = processNodeRecordAssignUser.getData(); - if (StrUtil.isNotBlank(data)) { - Map collect = objectMapper.readValue(data, new TypeReference<>() { - }); - paramMap.putAll(collect); + } + } + + } - } - } + // 当前节点数据 + Node node = nodeDataService.getNodeData(taskResultDto.getFlowId(), taskResultDto.getNodeId()).getData(); + Map formPerms = node.getFormPerms(); - } - - // 当前节点数据 - Node node = nodeDataService.getNodeData(taskResultDto.getFlowId(), taskResultDto.getNodeId()).getData(); - Map formPerms = node.getFormPerms(); - - Process oaForms = processService.getByFlowId(taskResultDto.getFlowId()); - if (oaForms == null) { - return R.failed("流程不存在"); - } + Process oaForms = processService.getByFlowId(taskResultDto.getFlowId()); + if (oaForms == null) { + return R.failed("流程不存在"); + } - List formItemVOList = JSONUtil.toList(oaForms.getFormItems(), FormItemVO.class); - for (FormItemVO formItemVO : formItemVOList) { + List formItemVOList = JSONUtil.toList(oaForms.getFormItems(), FormItemVO.class); + for (FormItemVO formItemVO : formItemVOList) { - String id = formItemVO.getId(); - - String perm = formPerms.get(id); - - if (StrUtil.isNotBlank(perm)) { - - formItemVO.setPerm(view ? (ProcessInstanceConstant.FormPermClass.EDIT.equals(perm) - ? ProcessInstanceConstant.FormPermClass.READ : perm) : perm); - - } - else { - formItemVO.setPerm(ProcessInstanceConstant.FormPermClass.HIDE); - } - - if (formItemVO.getType().equals(FormTypeEnum.LAYOUT.getType())) { - // 明细 - - List> subParamList = MapUtil.get(paramMap, id, - new cn.hutool.core.lang.TypeReference<>() { - }); - - Object value = formItemVO.getProps().getValue(); - - List> l = new ArrayList<>(); - for (Map map : subParamList) { - List subItemList = Convert.toList(FormItemVO.class, value); - for (FormItemVO itemVO : subItemList) { - itemVO.getProps().setValue(map.get(itemVO.getId())); - - String permSub = formPerms.get(itemVO.getId()); - if (StrUtil.isNotBlank(permSub)) { - itemVO.setPerm(view ? (ProcessInstanceConstant.FormPermClass.EDIT.equals(permSub) - ? ProcessInstanceConstant.FormPermClass.READ : permSub) : permSub); - - } - else { - itemVO.setPerm(ProcessInstanceConstant.FormPermClass.HIDE); - } - - } - l.add(subItemList); - } - formItemVO.getProps().setValue(l); - { - List subItemList = Convert.toList(FormItemVO.class, value); - for (FormItemVO itemVO : subItemList) { - - String permSub = formPerms.get(itemVO.getId()); - if (StrUtil.isNotBlank(permSub)) { - - itemVO.setPerm(permSub); - - } - else { - itemVO.setPerm(ProcessInstanceConstant.FormPermClass.HIDE); - } - - } - formItemVO.getProps().setOriForm(subItemList); - - } - - } - else { - formItemVO.getProps().setValue(paramMap.get(id)); - - } - - } - Dict set = Dict.create() - .set("processInstanceId", taskResultDto.getProcessInstanceId()) - .set("node", taskResultDto.getTaskNode()) - .set("process", oaForms.getProcess()) - .set("delegateAgain", taskResultDto.getDelegate()) - .set("delegationTask", StrUtil.equals(taskResultDto.getDelegationState(), "PENDING")) - - .set("formItems", formItemVOList); - - return R.ok(set); - } - - /** - * 完成任务 - * @param taskParamDto - * @return - */ - @Override - public R completeTask(TaskParamDto taskParamDto) { - long userId = SecurityUtils.getUser().getId(); - taskParamDto.setUserId(String.valueOf(userId)); - - R r = flowEngineService.completeTask(taskParamDto); - - if (!r.isOk()) { - return R.failed(r.getMsg()); - } - - return R.ok(); - } - - /** - * 前加签 - * @param taskParamDto - * @return - */ - @Transactional - @Override - public R delegateTask(TaskParamDto taskParamDto) { - - taskParamDto.setUserId(SecurityUtils.getUser().getId().toString()); - - R r = flowEngineService.delegateTask(taskParamDto); - if (!r.isOk()) { - return R.failed(r.getMsg()); - } - - return R.ok(); - } - - /** - * 加签完成任务 - * @param taskParamDto - * @return - */ - @Override - public R resolveTask(TaskParamDto taskParamDto) { - R r = flowEngineService.resolveTask(taskParamDto); - if (!r.isOk()) { - return R.failed(r.getMsg()); - } - - return R.ok(); - } - - /** - * 设置执行人 - * @param taskParamDto - * @return - */ - @Override - public R setAssignee(TaskParamDto taskParamDto) { - R r = flowEngineService.transferTask(taskParamDto); - if (!r.isOk()) { - return R.failed(r.getMsg()); - } - - return R.ok(); - } - - /** - * 结束流程 - * @param taskParamDto - * @return - */ - @Override - public R stopProcessInstance(TaskParamDto taskParamDto) { - - String processInstanceId = taskParamDto.getProcessInstanceId(); - - List allStopProcessInstanceIdList = getAllStopProcessInstanceIdList(processInstanceId); - CollUtil.reverse(allStopProcessInstanceIdList); - allStopProcessInstanceIdList.add(processInstanceId); - - taskParamDto.setProcessInstanceIdList(allStopProcessInstanceIdList); - taskParamDto.setUserId(SecurityUtils.getUser().getId().toString()); - R r = flowEngineService.stopProcessInstance(taskParamDto); - - if (!r.isOk()) { - return R.failed(r.getMsg()); - } - - return R.ok(); - } - - /** - * 退回 - * @param taskParamDto - * @return - */ - @Override - public R back(TaskParamDto taskParamDto) { - taskParamDto.setUserId(SecurityUtils.getUser().getId().toString()); - R r = flowEngineService.back(taskParamDto); - if (!r.isOk()) { - return R.failed(r.getMsg()); - } - - return R.ok(); - } - - private List getAllStopProcessInstanceIdList(String processInstanceId) { - List list = processInstanceRecordService.lambdaQuery() - .eq(ProcessInstanceRecord::getParentProcessInstanceId, processInstanceId) - .list(); - - List collect = list.stream().map(w -> w.getProcessInstanceId()).collect(Collectors.toList()); - - for (ProcessInstanceRecord processInstanceRecord : list) { - List allStopProcessInstanceIdList = getAllStopProcessInstanceIdList( - processInstanceRecord.getProcessInstanceId()); - - collect.addAll(allStopProcessInstanceIdList); - - } - return collect; - } + String id = formItemVO.getId(); + + String perm = formPerms.get(id); + + if (StrUtil.isNotBlank(perm)) { + + formItemVO.setPerm(view ? (ProcessInstanceConstant.FormPermClass.EDIT.equals(perm) + ? ProcessInstanceConstant.FormPermClass.READ : perm) : perm); + + } else { + formItemVO.setPerm(ProcessInstanceConstant.FormPermClass.HIDE); + } + + if (formItemVO.getType().equals(FormTypeEnum.LAYOUT.getType())) { + // 明细 + + List> subParamList = MapUtil.get(paramMap, id, + new cn.hutool.core.lang.TypeReference<>() { + }); + + Object value = formItemVO.getProps().getValue(); + + List> l = new ArrayList<>(); + for (Map map : subParamList) { + List subItemList = Convert.toList(FormItemVO.class, value); + for (FormItemVO itemVO : subItemList) { + itemVO.getProps().setValue(map.get(itemVO.getId())); + + String permSub = formPerms.get(itemVO.getId()); + if (StrUtil.isNotBlank(permSub)) { + itemVO.setPerm(view ? (ProcessInstanceConstant.FormPermClass.EDIT.equals(permSub) + ? ProcessInstanceConstant.FormPermClass.READ : permSub) : permSub); + + } else { + itemVO.setPerm(ProcessInstanceConstant.FormPermClass.HIDE); + } + + } + l.add(subItemList); + } + formItemVO.getProps().setValue(l); + { + List subItemList = Convert.toList(FormItemVO.class, value); + for (FormItemVO itemVO : subItemList) { + + String permSub = formPerms.get(itemVO.getId()); + if (StrUtil.isNotBlank(permSub)) { + + itemVO.setPerm(permSub); + + } else { + itemVO.setPerm(ProcessInstanceConstant.FormPermClass.HIDE); + } + + } + formItemVO.getProps().setOriForm(subItemList); + + } + + } else { + formItemVO.getProps().setValue(paramMap.get(id)); + + } + + } + Dict set = Dict.create() + .set("processInstanceId", taskResultDto.getProcessInstanceId()) + .set("node", taskResultDto.getTaskNode()) + .set("process", oaForms.getProcess()) + .set("delegateAgain", taskResultDto.getDelegate()) + .set("delegationTask", StrUtil.equals(taskResultDto.getDelegationState(), "PENDING")) + + .set("formItems", formItemVOList); + + return R.ok(set); + } + + /** + * 完成任务 + * + * @param taskParamDto + * @return + */ + @Override + public R completeTask(TaskParamDto taskParamDto) { + long userId = SecurityUtils.getUser().getId(); + taskParamDto.setUserId(String.valueOf(userId)); + + R r = flowEngineService.completeTask(taskParamDto); + + if (!r.isOk()) { + return R.failed(r.getMsg()); + } + + return R.ok(); + } + + @Override + public R batchCompleteTask(BatchCompleteTaskDto dto) { + if (ObjectUtil.isEmpty(dto.getProcessInstances())) return R.failed(); + PjcloudUser user = SecurityUtils.getUser(); + TaskParamDto taskParamDto = new TaskParamDto(); + taskParamDto.setUserId(String.valueOf(user.getId())); + for (String v : dto.getProcessInstances()) { + TaskDto taskDto = flowEngineService.queryAssignTaskOne(v).getData(); + if (ObjectUtil.isEmpty(taskDto)) continue; + TaskParamDto currentTaskDto = BeanUtils.toBean(taskParamDto, TaskParamDto.class); + currentTaskDto.setTaskId(taskDto.getTaskId()); + currentTaskDto.setTaskLocalParamMap(dto.getTaskLocalParamMap()); + if (ObjectUtil.equals(dto.getIsSuccess(), YesNoEnum.YES.getCode())) { + Map taskMap = (Map) queryTask(taskDto.getTaskId(), false).getData(); + List formItems = (List) taskMap.get("formItems"); + Map paramsMap = new HashMap<>(); + for (FormItemVO i : formItems) { + if (ObjectUtil.isNotEmpty(i.getProps()) && ObjectUtil.isNotEmpty(i.getProps().getValue())) { + paramsMap.put(i.getId(), i.getProps().getValue()); + } + } + paramsMap.put(taskDto.getNodeId() + "_approve_condition", true); + currentTaskDto.setParamMap(paramsMap); + } else if (ObjectUtil.equals(dto.getIsSuccess(), YesNoEnum.NO.getCode())) { + Map errorParamsMap = new HashMap<>(); + errorParamsMap.put(taskDto.getNodeId() + "_approve_condition", false); + currentTaskDto.setParamMap(errorParamsMap); + } else { + continue; + } + try { + String data = flowEngineService.completeTask(currentTaskDto).getData(); + log.info("批量审批结果:{}", data); + } catch (Exception e) { + log.error("批量审批错误", e); + } + } + return null; + } + + /** + * 前加签 + * + * @param taskParamDto + * @return + */ + @Transactional + @Override + public R delegateTask(TaskParamDto taskParamDto) { + + taskParamDto.setUserId(SecurityUtils.getUser().getId().toString()); + + R r = flowEngineService.delegateTask(taskParamDto); + if (!r.isOk()) { + return R.failed(r.getMsg()); + } + + return R.ok(); + } + + /** + * 加签完成任务 + * + * @param taskParamDto + * @return + */ + @Override + public R resolveTask(TaskParamDto taskParamDto) { + R r = flowEngineService.resolveTask(taskParamDto); + if (!r.isOk()) { + return R.failed(r.getMsg()); + } + + return R.ok(); + } + + /** + * 设置执行人 + * + * @param taskParamDto + * @return + */ + @Override + public R setAssignee(TaskParamDto taskParamDto) { + R r = flowEngineService.transferTask(taskParamDto); + if (!r.isOk()) { + return R.failed(r.getMsg()); + } + + return R.ok(); + } + + /** + * 结束流程 + * + * @param taskParamDto + * @return + */ + @Override + public R stopProcessInstance(TaskParamDto taskParamDto) { + + String processInstanceId = taskParamDto.getProcessInstanceId(); + + List allStopProcessInstanceIdList = getAllStopProcessInstanceIdList(processInstanceId); + CollUtil.reverse(allStopProcessInstanceIdList); + allStopProcessInstanceIdList.add(processInstanceId); + + taskParamDto.setProcessInstanceIdList(allStopProcessInstanceIdList); + taskParamDto.setUserId(SecurityUtils.getUser().getId().toString()); + R r = flowEngineService.stopProcessInstance(taskParamDto); + + if (!r.isOk()) { + return R.failed(r.getMsg()); + } + + return R.ok(); + } + + /** + * 退回 + * + * @param taskParamDto + * @return + */ + @Override + public R back(TaskParamDto taskParamDto) { + taskParamDto.setUserId(SecurityUtils.getUser().getId().toString()); + R r = flowEngineService.back(taskParamDto); + if (!r.isOk()) { + return R.failed(r.getMsg()); + } + + return R.ok(); + } + + private List getAllStopProcessInstanceIdList(String processInstanceId) { + List list = processInstanceRecordService.lambdaQuery() + .eq(ProcessInstanceRecord::getParentProcessInstanceId, processInstanceId) + .list(); + + List collect = list.stream().map(w -> w.getProcessInstanceId()).collect(Collectors.toList()); + + for (ProcessInstanceRecord processInstanceRecord : list) { + List allStopProcessInstanceIdList = getAllStopProcessInstanceIdList( + processInstanceRecord.getProcessInstanceId()); + + collect.addAll(allStopProcessInstanceIdList); + + } + return collect; + } } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorBaseVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorBaseVo.java new file mode 100644 index 000000000..e50f3ba3d --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorBaseVo.java @@ -0,0 +1,19 @@ +package com.bsd.pjcloud.thirdparty.vo.door; + +import cn.hutool.core.util.ObjectUtil; +import lombok.Data; + +@Data +public class DoorBaseVo { + + static private Integer successCode = 20000; + + private Integer code; + + private String message; + + public boolean isSuccess() { + return ObjectUtil.equal(code, DoorBaseVo.successCode); + } + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/DoorConfig.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/DoorConfig.java new file mode 100644 index 000000000..b95b68892 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/DoorConfig.java @@ -0,0 +1,17 @@ +package com.bsd.pjcloud.thirdparty.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties(prefix = "door") +@Data +public class DoorConfig { + + private String baseUrl; + + private String appId; + + private String selfBaseUrl; +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java new file mode 100644 index 000000000..ada67b7fe --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java @@ -0,0 +1,37 @@ +package com.bsd.pjcloud.thirdparty.controller.door; + + +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.security.annotation.Inner; +import com.bsd.pjcloud.thirdparty.dto.door.DoorRegisterDto; +import com.bsd.pjcloud.thirdparty.service.ThirdDoorApiService; +import com.bsd.pjcloud.thirdparty.vo.door.DoorRegisterVo; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpHeaders; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/third-door") +@Tag(description = "third-door", name = "智能柜") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +public class ThirdDoorApiController { + + private final ThirdDoorApiService thirdDoorApiService; + + /* ************************************* start 原创调用 start ************************************* */ + @Inner + @Operation(summary = "本地一卡通交易数据同步") + @PostMapping("/register") + public R register(@RequestBody DoorRegisterDto dto) { + return R.ok(thirdDoorApiService.register(dto)); + } + /* ************************************* end 原创调用 end ************************************* */ + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java new file mode 100644 index 000000000..abd396d85 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java @@ -0,0 +1,15 @@ +package com.bsd.pjcloud.thirdparty.service; + + +import com.bsd.pjcloud.thirdparty.dto.door.DoorRegisterDto; +import com.bsd.pjcloud.thirdparty.vo.door.DoorRegisterVo; + +public interface ThirdDoorApiService { + + /** + * 设备注册 + */ + DoorRegisterVo register(DoorRegisterDto dto); + + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java new file mode 100644 index 000000000..629b153d1 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java @@ -0,0 +1,36 @@ +package com.bsd.pjcloud.thirdparty.service.impl.door; + +import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSONUtil; +import com.bsd.pjcloud.thirdparty.dto.door.DoorRegisterDto; +import com.bsd.pjcloud.thirdparty.service.ThirdDoorApiService; +import com.bsd.pjcloud.thirdparty.utils.door.api.DoorApi; +import com.bsd.pjcloud.thirdparty.vo.door.DoorRegisterVo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +@Service +@Validated +@Slf4j +@RequiredArgsConstructor +public class ThirdDoorApiServiceImpl implements ThirdDoorApiService { + + /** + * 设备注册 + */ + @Override + public DoorRegisterVo register(DoorRegisterDto dto) { + long startTime = System.currentTimeMillis(); + DoorApi.Api registerApi = DoorApi.REGISTER; + try { + String res = registerApi.getHttpRequest().body(JSONUtil.toJsonStr(dto)).execute().body(); + } catch (Exception e) { + + } finally { + + } + return null; + } +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/door/api/DoorApi.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/door/api/DoorApi.java index 1ca75242f..c39af463c 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/door/api/DoorApi.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/door/api/DoorApi.java @@ -1,6 +1,8 @@ package com.bsd.pjcloud.thirdparty.utils.door.api; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpRequest; import com.bsd.pjcloud.thirdparty.constant.ThordDoorApiTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; @@ -55,5 +57,15 @@ public class DoorApi { private String contentType; private ThordDoorApiTypeEnum type; + + public HttpRequest getHttpRequest() { + if (ObjectUtil.equals(method, "post")) { + return HttpRequest.post(url).contentType(contentType); + } else if (ObjectUtil.equals(method, "get")) { + return HttpRequest.get(url).contentType(contentType); + } else { + return null; + } + } } } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml index 87ce99714..5824833b5 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml @@ -68,4 +68,13 @@ zy: # token key # self_token_key: zy_token # token - # self_token_secret: eV3dT0oD7iX8rK4eC3jS6fU8cU5cS6mJ \ No newline at end of file + # self_token_secret: eV3dT0oD7iX8rK4eC3jS6fU8cU5cS6mJ + +# 智能柜 +door: + base-url: https://www.365e-life.net:8443/bkopenapi + app-id: + self-base-url: + +# 旷世识别 + From 638e051816139e103a916a1debdfe5d924dd6ce8 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 8 Apr 2025 14:18:04 +0800 Subject: [PATCH 12/18] 11 --- db/1000pjcloudx_thirdparty.sql | 29 +++++++++++++++++++ .../mapper/order/HardOrderMapper.xml | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/db/1000pjcloudx_thirdparty.sql b/db/1000pjcloudx_thirdparty.sql index 93fbde67b..db9757c0c 100644 --- a/db/1000pjcloudx_thirdparty.sql +++ b/db/1000pjcloudx_thirdparty.sql @@ -30,6 +30,35 @@ CREATE TABLE `third_zy_log` ROW_FORMAT = DYNAMIC COMMENT ='正元日志表'; +-- ---------------------------- +-- Table structure for third_door_log +-- ---------------------------- +DROP TABLE IF EXISTS `third_door_log`; +CREATE TABLE `third_door_log` +( + `id` bigint NOT NULL COMMENT '主键', + `api_type` tinytext NOT NULL COMMENT '请求类型', + `biz_type` tinytext NOT NULL COMMENT 'api类型', + `biz_id` varchar(2048) DEFAULT NULL COMMENT 'api类型id', + `api_url` text DEFAULT NULL COMMENT 'api url', + `res` text DEFAULT NULL COMMENT '原始res', + `req` text DEFAULT NULL COMMENT '原始req', + `error` text DEFAULT NULL COMMENT '调用错误', + `version` char(64) DEFAULT NULL COMMENT '同步版本格式化为14位字符串,如果是数字不足14位的,前面补0', + `time_consuming` char(64) DEFAULT NULL COMMENT '耗时', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `create_by` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', + `update_by` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人', + `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '删除时间', + `tenant_id` bigint(20) DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_general_ci + ROW_FORMAT = DYNAMIC COMMENT ='柜子日志'; + + -- ---------------------------- -- Table structure for third_zy_id_dict -- ---------------------------- diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml index 12084a0c7..34afa65fa 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml @@ -269,7 +269,7 @@ + + m.name as hardName, + m.type as hardType + from hard_door_manager a + left join hard_manager m on m.id = a.hard_id + + + + order by a.create_time desc , a.id desc + + \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardManagerMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardManagerMapper.xml similarity index 92% rename from pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardManagerMapper.xml rename to pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardManagerMapper.xml index 7a5c2ba1d..5f34ed120 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardManagerMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardManagerMapper.xml @@ -1,8 +1,8 @@ - - + + From cf8510c34e5b41a39065efba0140dc767eccf446 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 9 Apr 2025 09:28:58 +0800 Subject: [PATCH 16/18] =?UTF-8?q?feat:=E9=92=B1=E5=8C=85=E4=BD=99=E9=A2=9D?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/mapper/manager/HardDoorManagerMapper.xml | 8 ++++---- .../wallet/service/impl/WalletManageServiceImpl.java | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorManagerMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorManagerMapper.xml index 9013c5b5d..ac0532487 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorManagerMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorManagerMapper.xml @@ -50,19 +50,19 @@ a.del_flag = '0' - + and a.hard_id = #{dto.hardId} and a.imei like concat('%', #{dto.imei}, '%') - + and a.power_status = #{dto.powerStatus} - + and a.net_status = #{dto.netStatus} - + and a.sale_status = #{dto.saleStatus} diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java index 6b7586a53..570e5da2c 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java @@ -344,11 +344,11 @@ public class WalletManageServiceImpl extends ServiceImpl itemList = baseMapper.selectBalance(dto); if (ObjectUtil.isEmpty(itemList)) continue; for (WalletManageBalanceVo j : itemList) { - j.setWalletTypeName(i.getName()); - walletList.stream().filter(v -> ObjectUtil.equals(v.getUserId(), j.getUserId())).findFirst().ifPresent(v -> { + walletList.stream().filter(v -> ObjectUtil.equals(i.getId(), v.getWalletTypeId()) && ObjectUtil.equals(v.getUserId(), j.getUserId())).findFirst().ifPresent(v -> { if (ObjectUtil.isNotEmpty(j.getBalance())) { v.setBalance(j.getBalance()); v.setLastTopUpTime(j.getCreateTime()); + v.setWalletTypeName(i.getName()); } }); } From 9d168f802d88a7b4a3cdcf9c7cf0b445cee3ac23 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 9 Apr 2025 09:38:25 +0800 Subject: [PATCH 17/18] =?UTF-8?q?fix:=E5=AF=BC=E5=87=BAbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/vo/order/excel/HardOrderExcelVo.java | 6 +++--- .../controller/order/HardOrderController.java | 6 +++--- .../pjcloud/wallet/api/vo/WalletManageVo.java | 9 +++++++++ .../service/impl/WalletManageServiceImpl.java | 8 ++++---- .../main/resources/file/个人钱包记录明细.xlsx | Bin 9986 -> 10002 bytes .../src/main/resources/file/账户余额.xlsx | Bin 10049 -> 10032 bytes 6 files changed, 19 insertions(+), 10 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/excel/HardOrderExcelVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/excel/HardOrderExcelVo.java index 8d3fe7cdf..2e5513aa5 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/excel/HardOrderExcelVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/excel/HardOrderExcelVo.java @@ -31,13 +31,13 @@ public class HardOrderExcelVo { private String hourType; @ExcelProperty("商品总价") - private Integer totalPrice; + private Double totalPrice; @ExcelProperty("额外支付") - private Integer extraPrice; + private Double extraPrice; @ExcelProperty("实际支付") - private Integer payPrice; + private Double payPrice; @ExcelProperty("订单支付时间") private LocalDateTime payTime; diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java index 6f5f2fa88..5892f7bf7 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java @@ -277,15 +277,15 @@ public class HardOrderController { lineNumber++; if (ObjectUtil.isNotEmpty(v.getTotalPrice())) { totalPriceSum = totalPriceSum.add(BigDecimal.valueOf(v.getTotalPrice())); - v.setTotalPrice(BigDecimal.valueOf(v.getTotalPrice()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).intValue()); + v.setTotalPrice(BigDecimal.valueOf(v.getTotalPrice()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).doubleValue()); } if (ObjectUtil.isNotEmpty(v.getExtraPrice())) { extraPriceSum = extraPriceSum.add(BigDecimal.valueOf(v.getExtraPrice())); - v.setExtraPrice(BigDecimal.valueOf(v.getExtraPrice()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).intValue()); + v.setExtraPrice(BigDecimal.valueOf(v.getExtraPrice()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).doubleValue()); } if (ObjectUtil.isNotEmpty(v.getPayPrice())) { payPriceSum = payPriceSum.add(BigDecimal.valueOf(v.getPayPrice())); - v.setPayPrice(BigDecimal.valueOf(v.getPayPrice()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).intValue()); + v.setPayPrice(BigDecimal.valueOf(v.getPayPrice()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).doubleValue()); } if (ObjectUtil.isNotEmpty(v.getHourType())) { HardHourTypeEnum hardHourTypeEnum = HardHourTypeEnum.valueOfByType(v.getHourType()); diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletManageVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletManageVo.java index 4ea23cc72..26c9536f2 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletManageVo.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletManageVo.java @@ -50,4 +50,13 @@ public class WalletManageVo extends WalletManageEntity implements BaseUserInterf */ private LocalDateTime lastTopUpTime; + /** + * 导出相关 + */ + private String balanceStr; + + private String totalExpenseStr; + + private String totalRechargeStr; + } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java index 570e5da2c..0e905f96f 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java @@ -380,15 +380,15 @@ public class WalletManageServiceImpl extends ServiceImplXtu5U$gE;3REG1rkfo zd-Khkk)!Fl$elM(IxA(2e2*XpBrioKmoa)sXYLttv|&=Pyp(?sqYY>@O^%NuUQu2u zn5(h^Wirr?B}q+r6{D3g6~$Qd6%&_? z>)NZsHipgb%WbisTzmO9KQH006TA1FZoGl%+xA{Q>|0>XWww zJ%1JvNmNPNO8&k>GLp6UkX{IB`1Iz@s^#NLo;eo~lJO!Wf$I|oiipRoIECcb&;8v4 zaipR}Ofz0UNM1pb$JNIV%ZiI#TN@&VXU>D zmc*^SY50Q4Kwr)x!6i?W8}Zz;(uPsay?H0jJQ@()NLEh8^SQi3;u3>9vW%%$6K*XC z)Rm{IDz_@78x?OVS_ukf9;nS(DxPntqGYu+6?hWfY8f-kqAtB7APLE*U~!lbw0|4K zZw8fYJv)jXe?SJ2f*4zcIJyOnoIh*e7c}{r+W<5pjTF1U2C^(9`!ROWU*iKG(Sg@^ zXg}B9_NHl`gcCzT&zair><^1o8j?AwZQptI8Q3XRC}rwmm-4g9SOH(*0vTS01bwz` zND`8%b{_EzJ>lu(OgBAoa{3aI8GlA(y^MW#IvQM<6GfY*a(Vq~mEyTfZBw8;kf9YK?E72QbT_dz|{mG_p z*!B&(zG2@t99jksg*WO)|EC_|s2I=M5r6kx#D0jF zb`b}Qz{E7M%o;=|N7z`p!lV25Rap1F>Bfflq2V`(wO<2xzn4ykM|}sb!V?@LyNjs$Bl*Dn>p6g zu??ilpg6a90;vA7Gjso4{lyW+q-J1wkrGy%a^F zpn`4`7os34t-ehsHg931D3Yej^MC(;F2m@>O_yrx;0uSd0-DU_kp|4FOxCbmDtK4^qOiI6sh35mY zgbg5Fil_4VY3ve*AY&kkd{Uoh(fQF=XMb16($MiwtRGc-p*nsWQ14Dv>oBcG`_1UGoneo6?&I)2 zZSN2NdhV#}W}0+Q6n<}>XU^dlL`1pe9lz?003c=AtX=&0|S$D zBtH#Y1ONbdY%fqt0Rj{Nlh6km3jhEB0000G0000IljI~e0XdT!B`q8XM6pC|0RRAz z0ssIM000000000103ZMW01pn6WFy3J2-+HSQ&!N=Tl^2<4wWXqjs zy-(1l>12+=fFKVf>v$up96gsS{}Oq|QpsuCNyyP23|bcFXBmG}DeE*m>P~^S4H(an zq)C~|QEjbCF*d9QK~3Ns(utc+3u@g_S6ET@PAk9>Aqyeo`IUB{vy)(^Z+-|qQHXdTQ{2_i_ z-#-mi{YLh?Vt{{&jI)$!ptjS+m1|pr_xNy^;n}!fVM~o&yKQe8;Me*rCP92JX3B>Dc0^yu>%RGNLWXhx9^7!>2cIR?Qz@irhPckc^ixiTsdwP$oQOWcesHd-BiQtlF%1?L^SZVzzr@^!pXOZ-XZX~Oq;`vnFA#sJl?OD#$ zs|mLe1nR<5*R@|)(of1a6;}z0CIP6`Nh)5fsiI^tHx+mi!D5~=%%U#6Cm@T-r)aht z5r4EB#BT<*yn6N&-T#0b5(O!?3h{Ic>^Xndz%OVDHMaq1Mw%#gh85(wCdMxM>wHAo zN8p@XKQ|7yrf;5vmqJEQxmxl34@=cCCR5VbzVrGsu)|TInz4_K%15P=D6TF!aaM!7!ZI6E6~z!Z#5%0?T6J(5YR_ z1+P79JEYU1hB!?2D<>1vP*FWC(QJa*N;KLe$9#m}NVJ|8;XF8FR+2ZwQm0QNv~vB) zs%uzx4V$iE+coU23;_yv>IeU)9^t4BPp3ZWsP7{NZN#dN7`74XK4R2HZ2E}%Hh*H< zM~vHuokd_`Tr3lZXyphSOILVs|Go+%9CL)H<9%?vrl3oU7+oQzZN#dNh&pYuz5(gf zVsiu1DaQ5&q*INZh2ZJpi7w@6B?==l^EvUyH+vuNO=gP{V37IN>VVcj)s ztievYo|mmP;CT_;t-XZ|&1y2^U|koK9qat%hK8SU7YqZumF zE6-iv@~P+nzEN>trSx*hkTUdf%?P{D%(LQ^v0|6)xxxkBydCjB3K&=DV+}ISRr7*Q z?A_KFwNLk>Ui<@)9<%xfBL;t^6mqp~0RRAw0ssIM0001ZY%gYvo!GpEk%~x~F7Nryxp(ex_2Q;WwRP}?!&w1M=JH4bW^#YaVbua!DKAXS zB27rbEJ8Vh0@?zBipJ=OE`-#QEE5G}OXC_$Stns=ZJhzYVB&r>b?BR-^r9blJ|Z$2<3Nc%QcS zhkreH)O9n>x}O*E?bVoS?2M;Tbh)isN2<|K+aFQ*8iy}wM=eJk28)4P0lz*70|7oG zE(}2>UU6s^w7`>#*}4AzmbW|@VyF;Gn3>g;5+TdnTk*0os$5Ba;bgk=(&d0RRAKlQASv0{Q}z9|IMW zm?SC}pKTcI$#XRIiz14_IeE zV`&*$MAa-fM@OVdF8PP9OGPVsr#WX*AXT%B(<-w$N*Tyx<`Kl!3)>SabM;&dvidi8+B8i3&R~^6PfGZ zt$8J7N3^PcS-S634Yn*s!?zK>Og zLCWz0Q?Zx|i@NGgoHH$WWldFFcXR)xv5W^OBw=OfA#% zgU{`KAgRnJ!OE>8HrulyK_RPh^AW&qZ#W^<)|2tZikTl^p(G=8IZbe+td5b};FQ60-Qrh}we0yh~e( zM$1~f6}<=v?oT~DUN%*uuVYO0>s>Wq7&Ly%w6YF8r65kkZPs}%QegfcTGqrs7aIex?+P32RQHfL(0Ncc0|G(CXA#{d)Ys2d&8O=DD$ z_K0yN`*N!o=+~k*|4yC*Hh6Gpxojg)uAl%91x?#PK>o3rI$TCDYAFidLh7ew`96fa ztiGhs>GZp&N+P-w)w=Pd*T3o}eU+}3E&PT5`PhQa_dRayV$bE^*@2G!x7?yExttz&9|~Rx!ua zEKOWChc1xAyEjoR5gLz^hwa6){nDK&;_&E?9-G}gU4CjRLAT(*=+0QGvlrZp{x1nI za`?{o!O1@?^wiSV$0_hM^!pa!O@zqg#+>1n#g&FJHf*T?&=cgBe-JT%vR4WJ}Rqs-qW`XzN z!|t1+2R`%Xm%F=-QifCO4bUZp2V4O$?=lj}_O(_Mm=&*To|JN`Xz1sRX?WrvfOXFv z2i>|)5T0LY$2i!Lds3pGZgH_F!8ykb29>bpn<$`@2J}WuvCbUB=5Ij_Wxc?BUAdYz zZI2>CUZ;;WE&`q$vu%JirASUdIZ+q_t5R8UgjEodMzSeot>sJ>?s-S)DZgD@)ly`# znfjU+H5C?}A}w|h3tOA;-;v}RiSNa8%GTKlS17Uk`7YkH+j}Gw+mFANHg{cMCrR_B z?KF?1ygufXF+=@yx3p+I9SvZJFdstvgARLp9pB2Rjb|`zNS(~@-SeFE*Epqm$3b-P zW7@2{ZtF*>@@Bzg$AKGPQaM#>T0z-qySh8X^1>zieVKp089@9MHG$sy@-)tqsZY)4Px4s3RIqp_Q#4f8J36TYOw=Q^a z+w4Iu%ioU{EgwU4CdUr87TmAlt>@CIEVm3i!cyY?V(vK!tyV|$|NW0H4B%Q!5)dfK z9yvqCfzgS)AyWn_QKde<+2?Y%YjQu3gM6yCnhkIXk+B?C7+u;HWnVh+cCMu4bn%Nz zgyD{1K}N|FL<9UuLTP`caEbZM&0!kEVYd=)E+*G5j^``-#4G*45K7;dllf z?5wq%m9mrIOD+2tuXbi!_-KWgEU`4xyu9AUb|KpUKN?6pU?D7A}j6i;tSeS)=qD=a;aP zF(W{<9#{}BUS&2%(~E!97^Lnxe2aQPFaop&XfYWJr<5BPr3m)LYiWq0GykfVYL2EF6_hhX%XP9L`JLXYPb+cr!X2VA_U2QrZ zDArsRV_!CLB0Cm(u}g2P2bZ^6;`~?qI@s%*BCwF5AjVptjnj;J+sP*h!Km7RC#tdD z?&Uvik){oi>Fdq1MSjn_I9w&Qk-7Jo#~x+83zflp@l)KySF=8NXm(J|oAknrQo95N zWTy5p`WkH3;`k|8QCDl!3g@@6aOiEtgit$Ky!Yis@PwCAH`#NUB!2lIX5ysx=P}*I z0KoAmUr_RoX^eNyn%8K>mLXT7m%VJRraWBV#rd6|yS1&>p9hlU)8E0|df~G=4&|Y_ zZ?hxg@;hG5F;i^QiVHJfB(I zZobftJ$)usQpuFz=qx8Uq0!@de+#lpFiGQET}+j_`ceDM(;ykUl?QgmLB$PhCRMmV zNlNV)^v+MX?71{wPxNBi`51D$07irK(Uv;xzC5a5@oYGzloW3+ekBzbFQ_yEb34Tv z)s;c#50lFwjm~DcVw-`AV$Q(*PJh!<_mbRx4fZ{X<-TVr8KoMP*7mE^0mU=3QRf5-aeN`29p>Ii=AKbMs%{M?%5cRF75#i3T3S{!}5LBBW-4SMQ>Ts=W0R>%6{woY>w^}qG+SX8qN7NtB`|0!pDxGwdYv_Hv zrxiaI=Y*ClCG@2ni&OlG`bt<~oLz#RRlu&tF0FwTHhoPk$JpSDPtr2O+Z^5Cnu=Vw z!gF#Zw9XVCuFux!SF;xU5#GWHd+j8r3l#GerD`ED*7YY9G>5+ywAir^B|7yRpx}m@ zWofz(9-5dxC-HHrT{Yc)>eQ#wRPzuVJ#Yw-;TIT~I}tL?>#n*wCszhYYWO|oP%2GL zZr~Dl;2aazvkvtn-?qOY1pUh`*!baHdBxYiMUFFny;76OVqNqEIgm531ceZJ1Uqk! zN}GIknB0(BH_b~+Qd#Vf$1*w=Nz05P=K02C3+wC2IOzY$kaS1-jZxlyb>Ca@5xf|*DM`(3OusvO+R*I3<3 z^;w41|J+rNA~w6rx5X7?darWj{!0!(wDJM!Van5M*e^xel=a8 z)>-V%>*evCxp_!rKT{W)2sMP1-(WqXlaI~qbZG5(qa=gC1&+~0qA!wppnvv)9l&zW zZZ<0g@s5jlNxorot|Gd)ncwHU@H*L8{S~~IjrgtSkv97CC#iMD0C4kb`=+r)e*B;S zTgZVwX6pBtoM7nn?xFu_+TQKNCq)YdM3Ol@*{IKX`*k%K*wbG=cSI;{+>CKEhd&>X zdJ^CikeWVP2fRFEK^J^*lh;)KlGO1zP)Px*;v&wUBIL@XmrTAQfvL)okfn;PtWM&w zf5y_Ik7|E>eYJwN3`@cVgVW(;%0z0r0G-+j8HPR++iRp;vveRu@_sst5#~!uvrr$0 z^PZk~yjF|(#>T7V>af%v9CJ0!d#WtVxm`#V(cY>GKu7S_3kY17YmtzSL?z=3*9Kfk z^ZZbRQbBDF`qXuER3rJ7P&4n|w*;JsvaD3H5LH&3ZI6w$F5x5y=Ey$2+`k@s_Cm`# zUiCIXyF-J2s+A4)Q3)b#Xl1|=^YZl&q6bWDhV450+ciK->|p3fs1SP%`}pZvIF3bV zI8&u1Krp@B&gv`hjsL+H)h|XoS-RewofdZieSpntZGGY%9>a*vNLAScN$892ps1=9 z;W-K$$RytzlJ_H-(A9rZDJA$Rd~F)ZCRx(c0xGHmdfuf;dJL;L<-U6XB=0X zX7UOQ@d{(Tmos|HlraQO9>efg#M1x;tG#U{bY?#t_A)*3m=KP&VqZ(fCjR$?vuHTG zQdt`xNcaa|TO6FF)AjGYn5rM%L7ML%y>0|4^jnnu2vzs^Y%Ic22A`d1)gycbtidO3 z@#8Lt4*zp(Rho#Ossz+Yb`SWQtUn`s&Ff831#K!6zCG&=R&tS;Wf4Ynb| z`w;J=Ny?&h5at#yIu=YFL|xhzfE}7_W$WJIgl4WEZ(i^-+J%|L6&t+0Zob~sX-Ha{Wu{8b8jKBC2(GC!8t8Mk=ar|a}K&3t|R7WOkhC?N(UwI0r;(LRuW599(Y{` z>0)JHT~Pf1yBQrg<)_9gEr+!eR~K0Xv+sUQyW$@SOwCtsdVUsvJv0V=_FnM)UPRX0 zrWmF~muC=@;8V)WxCIw1J77r`Vx%_`rG0|MS1;w=h|Z2bu}=;?I)kq|CJ zOZa<~JxTY`9=l+NM}}^}a(d5sGCqYqT0KFcqbStMvCx{Nd@}@dj!8Dka5rey1#- zj{HuQPDE=3rh+}NBu2ost_)&t{#?^&SdZ&!6LxuwRb(=|2nIf~lO0L$ufB$~ z;?TvwLRNCf<5^(eNjtCj`R?Y0CMK{$C;DP7b=$hyF1P5X;@l zfXw6M=KjAS3Iw{FrT(%1-LJos@9tQ=eF9zK-bib9mVdZ^Bbm7%826BdTwK`y4ANm- jR2YNEG%jh3P~Zb!O7LSX1d2`NG1 z;`^<8@4EN-vDaDW>~o$UXPqB=*XZ=<)Fc6+Ef~)yEr9@lBL)CK4gdh`JZ$y6Jv@B` zY(2c~`2$|NMW>-PP=YiuS@r3(yO3?I_b z6B5=dewUsk+1^O*s_-}8$tURs&ED~P*v|sQQ7H-}ir^m-Om`k$ZRC6;c(<6 zKTJBHb}-zl{eHoV9oDST$z&zRlq+X-xU!PVdSfp34WXQXj)U@iHHZHzc5tvgU2DK}e!(*RPC7o{b{kt$%xkR`QCk-765EnZMA3d;bXH(vi84 zNq1FvG05=UPL&e6^rv{0p$^v-)-k}n1S?sx%yG6}PAB|iVQm}kewWH5cY5i)R+JO)x#+SxC!_;*?8OA8TfiT zyF2>)y@t>?qhE<#LJ#*A(T#hLE%Ey-#4#aQ2#iLHN@T04!1invD!E$^5uhI%Tp)#F9mds3mQ) z$x3=8!1nWRdEMU^HJp5Sq})&^j!z_6xi)QaU&l@od=DsmL5(YrDo+CvjrLvL>=w|K zW$wekk?r-io}5DD)T^gEh4)WSc7|%<9lH%i(#n%iYK@kev5IPcgETW0&D{$9)9<=_F{>8#6BiS>%ZR!DiEX%je9 zWs3MON)X68-o;!F(qwCDH@lovmj!5E_=Nku$cgXL)t|$|HmO;$9i+0HJP${}+mBgE z&E$}yLffx|W2H05@(W%1#CYgw^|hcJSL@c2t}Vf5VFgjBcvGMkdX^G6p9uw#|YA`zX^ zi-CNj>XR`QzKtv=Ie--PLZWA2N1YV^73NBUX!|njvcDY%y3HSvYa0*!GZHe;HnKMe z0+rZbbLl$<&qSUaZyV@1xJKBY(shVC+e^!C$?jSsWVgu5h2#bwXD_eaq(w#4s|hX8gb*3 z|Mkbx(oA!p&|Sou$N$}$D&IX)^osp|R<4~2pe()=~dxyJI_$XKn zWZr7uYA{UeVYE4X9&eZYXRMo!+0CdkRH^z6&(t^JK1|e`zHQ^JdAM{wgKOIl2@)*}+H?Ur1|-%p znT5_}Nh%!))gUEM1v6r{bVHTduFG{P{-1{~wgW_`)RqnRrRr;&jPy|^6j$4$!1i=7 z#naXUBKf48skvfJt1jR2FoPgW8EDr~*!BKLOW%i@vZSW8Cm9ei!2I=Kj zljvmzNn1L*5}>}SN26G&hk6qcJu)tl^_#z2f5xYiZfPNwLq-OOtzDYXDa@)f;EwEr zln8W*+mKRmL2pv(rTR@8i10~*H&j^xea)`gy`pC4IFLOLJ>ntT%!cTJ$~yL`oD*$@BiH zv*)J%uVN|YuX|iK)7W>gD||w+8hZ)Zm$9QsI(fB^u zN+33m7px@AT2*vaK-L)72MphMT5uh!s9NyydiL89gbEEeqN>F0xPCbVQ^sKD?j=M0 ze!uvY=fR+xUn&$sPK5M^C}){ncSDlxv3Jr#unhVeah@ea@~;RRdR|sO4n=>F>7grf zx11?VyK$g|aHIL_JZbA%Ews(kcvaqYZ4E3q7e3&A<)lgaoX?QfyciaoN<`?Hxh1tXh;^o&K z3)>Ts;l-|u424h`$B3AWOua11ic@z9rjRuNYva7TvwQjrf!li_VAK4J%J0o^kzhO-hA&rrW2v35JkwTSb z4Jg;QydU3B6tthsRH$fQ9xPpFWqOU5;YD*HN^PuiUtlNRHF7& zRX|}4m9vX32F~PpI~k1gJq=NvO}pNv%Va`SSBe8i*x!OTWzQs&f>xjSv4hxQ)0IS#YLfsJEk+d1Kc~%-far$VouC! z#zeJk8qwg)D#!Clhg8`R5sM`~W@3<=QTxZ3W0m)>I@6wJ&G$%fnTo@(_}W%X$>Myf45`N9iwM^c20Kpe3}OcQk#V31R8Ep%m8 zpCDm_16`2_iwk}CrE~MvLd+{KD46pcqEXB`WX&po!8Ekq%SPSP)?)Nhku<@%#xC70 zv|5p%=rxbEsLEEvt(qTtis@}8Z%N4B`IFp(Wajz8Qu;($w1O~0hs%p2s4f;ICYp*hgsw255I^>rG<8}} zS$oFMSV@}unxgAVnFuY&OPhwxApDZ4v|jcP`I;5%A8IvA*y&HE9GFNxY-!8z@(+3cGM#{3CW*LoVQPXw$&^01KMpgS8~he?ySv@)F9$>;cy6+FRaD*6BZl z%I$yA1%Dj6HJ*}`v6D;JCZhXjKMQhw$~UR0rUYGM8fQ<1_+2p!ujw&IKpYU+${_GR zs@t^#pXkVJwKL1jEk7#tH!Mdq2swZiLVUt~7a<&CBcS;w@{QJC-_UJNJT@GxKB|(- zYQVV7LVj(~I1V$qEJt^ug+4a6M5la6Z zWswd|E9;-gucgR{dGFfmbQgN`V{IqFN`_=JKb5eA#bi`@N$`GiV;Uwf#`Lj0-mhYK+)4Sm{mORom*49w=3D6{%g`+E?q)_W z?Xbo_XwvggwS9DPNHEX#Fla56ux$q0jiQ614k%V*svlih)D0%1O!I(FWMmV~8?rc1 z);ZOrF6Np;139bMBsiV;_d9!#a#c4N@N@;-9dG~St6QN77d=zG_Cw3R|Gp+j z&Do_Micxci!5ay3Bz6}_lXn$}TZj$Bj#*EIN_Ugg*A!BZQ%r^$_*)1FkGzmJ=vifj zOuL9_|2qh@q#3c{`YGhVOZrwy!K^+W!75zx`?rUuB9}LSn}}3I2NI&nB@KgH=_g*V z4jIg+rh6xuvi>6<=D7$gh3&>vXFA-nIpUJY;|^nxdY0l#m_=+j4n}Y6jHL||kXW%l zCP}uO931u?MZMq>|87~Nb)2Q^>%hn~WLY0kLv8|XkGTpLI1RssurS~hrfhr0$*Of=ZH zfC9S0J~{sd^{q65nfu3TJLOF~ClpA?#L>k>HP0$+Y7H)#Sc3F!3AhdHk z+w%k(y0NXp%oq`)0Jpl%_8UGCtavDKlw{P1fT!}*bZul5q)*6o?j`AI-gl47x{dIP z*WYd+8k-jPxzH{KGvAP{T}@VK=NYM)ppJ^4V&|<@+(}I~yb4K6O>1w0#Rq<_RoHqk zOE$)pM3US6j#hiGzD2s`&#!f9KK8RloC#XbL4C~`L zQ#8OSSJ|4r_E*5m3_~VDfL~Q`738TBZ2(@1hEjTbN@^9P#J1x{KZF*G0%5xm&#~cb zondV5>eu?wMRV>F>C!ZbJoIhzHdjc7EeOg+WhBHDajrrfC0{e5?w=_7|u@ zJZGSgM+m4Yiu;b&X3nvrIk|i?H#^i(nrzBmjiJD9R>?BTDzV^M&r{uBEaY5>uP_?* zD9VlQZ+z2CFCjq)8RFixa+p@(5zPfrSO-Vh(|`qpYWc+KQ@7syjz~0>NvR-f474Q6 zRRL7jwK#im;a9Rye)I&fX@#X0XkedqL+UBC{VmDfg@q$ZPo7IwuXE|DtX Date: Wed, 9 Apr 2025 12:40:04 +0800 Subject: [PATCH 18/18] =?UTF-8?q?feat:=E5=85=85=E5=80=BC=E5=AE=A1=E6=A0=B8?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manager/HardDoorManagerController.java | 30 +++-- .../mapper/manager/HardDoorManagerMapper.java | 1 + .../hard/service/HardDoorManagerService.java | 9 ++ .../manager/HardDoorManagerServiceImpl.java | 20 +++ .../impl/manager/HardManagerServiceImpl.java | 6 +- .../mapper/manager/HardDoorManagerMapper.xml | 13 +- .../api/feign/RemoterThirdDoorApiService.java | 65 +++++++++ .../thirdparty/vo/door/DoorBaseVo.java | 2 + .../vo/door/DoorVideoCallbackVo.java | 7 + ...mework.cloud.openfeign.FeignClient.imports | 1 + .../door/ThirdDoorApiController.java | 81 ++++++++++- .../service/ThirdDoorApiService.java | 47 ++++++- .../impl/door/ThirdDoorApiServiceImpl.java | 127 +++++++++++++++++- .../impl/door/ThirdDoorLogServiceImpl.java | 3 - .../recharge/WalletRechargeApplyMapper.java | 13 +- 15 files changed, 390 insertions(+), 35 deletions(-) create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdDoorApiService.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorVideoCallbackVo.java diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/manager/HardDoorManagerController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/manager/HardDoorManagerController.java index 0d5fbafdf..4dda3afe9 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/manager/HardDoorManagerController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/manager/HardDoorManagerController.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.controller.manager; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -10,6 +11,7 @@ import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.hard.api.dto.manager.HardDoorManagerDto; import com.bsd.pjcloud.hard.api.entity.manager.HardDoorManagerEntity; +import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo; import com.bsd.pjcloud.hard.service.HardDoorManagerService; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; @@ -35,6 +37,15 @@ public class HardDoorManagerController { private final HardDoorManagerService hardDoorManagerService; + @Operation(summary = "绑定设备", description = "绑定设备") + @PostMapping("/bind") + @PreAuthorize("@pms.hasPermission('hard_hardDoorManager_add')") + public R bind(@RequestBody HardDoorManagerEntity dto) { + if (ObjectUtil.isEmpty(dto.getImei())) throw new RuntimeException("设备IMEI卡号不能为空"); + hardDoorManagerService.bind(dto); + return R.ok(); + } + @Operation(summary = "分页查询", description = "分页查询") @GetMapping("/page") @PreAuthorize("@pms.hasPermission('hard_hardDoorManager_view')") @@ -58,20 +69,11 @@ public class HardDoorManagerController { return R.ok(hardDoorManagerService.getById(id)); } - @Operation(summary = "新增智能柜设置", description = "新增智能柜设置") - @SysLog("新增智能柜设置") - @PostMapping - @PreAuthorize("@pms.hasPermission('hard_hardDoorManager_add')") - public R save(@RequestBody HardDoorManagerEntity hardDoorManager) { - return R.ok(hardDoorManagerService.save(hardDoorManager)); - } - - @Operation(summary = "修改智能柜设置", description = "修改智能柜设置") - @SysLog("修改智能柜设置") - @PutMapping - @PreAuthorize("@pms.hasPermission('hard_hardDoorManager_edit')") - public R updateById(@RequestBody HardDoorManagerEntity hardDoorManager) { - return R.ok(hardDoorManagerService.updateById(hardDoorManager)); + @Operation(summary = "根据硬件id查询详情", description = "根据硬件id查询详情") + @GetMapping("/get-by-hard-id") + @PreAuthorize("@pms.hasPermission('hard_hardDoorManager_view')") + public R getByHardId(@RequestParam Long hardId) { + return R.ok(hardDoorManagerService.getByHardId(hardId)); } @Operation(summary = "通过id删除智能柜设置", description = "通过id删除智能柜设置") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/manager/HardDoorManagerMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/manager/HardDoorManagerMapper.java index 414dde5a9..7623514eb 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/manager/HardDoorManagerMapper.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/manager/HardDoorManagerMapper.java @@ -14,4 +14,5 @@ public interface HardDoorManagerMapper extends PjcloudBaseMapper scopePageJoin(Page page, @Param("dto") HardDoorManagerDto dto, DataScope dataScope); + HardDoorManagerVo pageJoin(@Param("hardId") Long hardId); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorManagerService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorManagerService.java index 1b67ef4e5..d8ed09d6e 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorManagerService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorManagerService.java @@ -11,4 +11,13 @@ public interface HardDoorManagerService extends IService Page scopePageJoin(Page page, HardDoorManagerDto dto, DataScope dataScope); + /** + * 根据硬件id查询详情 + */ + HardDoorManagerVo getByHardId(Long hardId); + + /** + * 绑定设备 + */ + void bind(HardDoorManagerEntity dto); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorManagerServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorManagerServiceImpl.java index a5af20b7b..f4bfdeed2 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorManagerServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorManagerServiceImpl.java @@ -20,4 +20,24 @@ public class HardDoorManagerServiceImpl extends ServiceImpl scopePageJoin(Page page, HardDoorManagerDto dto, DataScope dataScope) { return baseMapper.scopePageJoin(page, dto, dataScope); } + + /** + * 根据硬件id查询详情 + */ + @Override + public HardDoorManagerVo getByHardId(Long hardId) { + return baseMapper.pageJoin(hardId); + } + + /** + * 绑定设备 + */ + @Override + public void bind(HardDoorManagerEntity dto) { + HardDoorManagerEntity saveOrUpdate = new HardDoorManagerEntity(); + saveOrUpdate.setId(dto.getId()); + saveOrUpdate.setHardId(dto.getHardId()); + saveOrUpdate.setImei(dto.getImei()); + baseMapper.insertOrUpdate(saveOrUpdate); + } } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardManagerServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardManagerServiceImpl.java index 6bb037a60..70b993a36 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardManagerServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardManagerServiceImpl.java @@ -16,16 +16,19 @@ import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; import com.bsd.pjcloud.hard.api.dto.HardGroupDto; import com.bsd.pjcloud.hard.api.dto.manager.HardManagerDto; import com.bsd.pjcloud.hard.api.dto.hard.CurrentUserHardTypeInfoDto; import com.bsd.pjcloud.hard.api.dto.hard.HardBindDto; import com.bsd.pjcloud.hard.api.entity.HardGroupEntity; +import com.bsd.pjcloud.hard.api.entity.manager.HardDoorManagerEntity; import com.bsd.pjcloud.hard.api.entity.manager.HardManagerEntity; import com.bsd.pjcloud.hard.api.utils.HardUtil; import com.bsd.pjcloud.hard.api.vo.manager.HardManagerVo; import com.bsd.pjcloud.hard.mapper.HardGroupMapper; import com.bsd.pjcloud.hard.mapper.manager.HardManagerMapper; +import com.bsd.pjcloud.hard.service.HardDoorManagerService; import com.bsd.pjcloud.hard.service.HardManagerService; import com.bsd.pjcloud.hard.mqtt.config.MqttConfig; import com.bsd.pjcloud.hard.utils.MqTopicUtil; @@ -54,6 +57,8 @@ public class HardManagerServiceImpl extends ServiceImpl 0; } - private String createMqConfigByAction(Long groupId, Long deptId, Long hardId, Integer action) { MqTopicUtil eventDto = MqTopicUtil.builder().groupId(groupId).deptId(deptId).hardId(hardId).build(); if (ObjectUtil.equals(action, 1)) { diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorManagerMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorManagerMapper.xml index ac0532487..3aa38cc91 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorManagerMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorManagerMapper.xml @@ -67,15 +67,26 @@ - + order by a.create_time desc , a.id desc + + \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdDoorApiService.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdDoorApiService.java new file mode 100644 index 000000000..c8b825ead --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdDoorApiService.java @@ -0,0 +1,65 @@ +package com.bsd.pjcloud.thirdparty.api.feign; + + +import com.bsd.pjcloud.common.core.constant.ServiceNameConstants; +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.feign.annotation.NoToken; +import com.bsd.pjcloud.thirdparty.dto.door.*; +import com.bsd.pjcloud.thirdparty.vo.door.*; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +@FeignClient(contextId = "remoterThirdDoorApiService", value = ServiceNameConstants.THIRDPARTY_SERVICE) +public interface RemoterThirdDoorApiService { + + /** + * 设备注册 + */ + @NoToken + @PostMapping("/third-door/register") + R register(@RequestBody DoorRegisterDto dto); + + /** + * 设备信息绑定 + */ + @NoToken + @PostMapping("/third-door/bind") + R bind(@RequestBody DoorBindDto dto); + + /** + * 查询设备状态 + */ + @NoToken + @PostMapping("/third-door/status") + R status(@RequestBody DoorStatusDto dto); + + /** + * 设备重启 + */ + @NoToken + @PostMapping("/third-door/restart") + R restart(@RequestBody DoorRestartDto dto); + + /** + * 音量设置 + */ + @NoToken + @PostMapping("/third-door/volume") + R volume(@RequestBody DoorVolumeDto dto); + + /** + * 音量设置 + */ + @NoToken + @PostMapping("/third-door/open") + R open(@RequestBody DoorOpenDto dto); + + /** + * 音量设置 + */ + @NoToken + @PostMapping("/third-door/video") + R video(@RequestBody DoorVideoDto dto); + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorBaseVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorBaseVo.java index e50f3ba3d..105c6f8ec 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorBaseVo.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorBaseVo.java @@ -12,6 +12,8 @@ public class DoorBaseVo { private String message; + private Object data; + public boolean isSuccess() { return ObjectUtil.equal(code, DoorBaseVo.successCode); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorVideoCallbackVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorVideoCallbackVo.java new file mode 100644 index 000000000..d51a92f2f --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorVideoCallbackVo.java @@ -0,0 +1,7 @@ +package com.bsd.pjcloud.thirdparty.vo.door; + +import lombok.Data; + +@Data +public class DoorVideoCallbackVo { +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports index e45bfabeb..77223a1d0 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports @@ -1,2 +1,3 @@ +com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdDoorApiService com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdPartyAuthService com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdZyService diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java index ada67b7fe..cd159e6b5 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java @@ -3,9 +3,9 @@ package com.bsd.pjcloud.thirdparty.controller.door; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.security.annotation.Inner; -import com.bsd.pjcloud.thirdparty.dto.door.DoorRegisterDto; +import com.bsd.pjcloud.thirdparty.dto.door.*; import com.bsd.pjcloud.thirdparty.service.ThirdDoorApiService; -import com.bsd.pjcloud.thirdparty.vo.door.DoorRegisterVo; +import com.bsd.pjcloud.thirdparty.vo.door.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; @@ -25,13 +25,84 @@ public class ThirdDoorApiController { private final ThirdDoorApiService thirdDoorApiService; - /* ************************************* start 原创调用 start ************************************* */ + /* ************************************* start 远程调用 start ************************************* */ @Inner - @Operation(summary = "本地一卡通交易数据同步") + @Operation(summary = "设备注册") @PostMapping("/register") public R register(@RequestBody DoorRegisterDto dto) { return R.ok(thirdDoorApiService.register(dto)); } - /* ************************************* end 原创调用 end ************************************* */ + + @Inner + @Operation(summary = "设备信息绑定") + @PostMapping("/bind") + public R bind(@RequestBody DoorBindDto dto) { + return R.ok(thirdDoorApiService.bind(dto)); + } + + @Inner + @Operation(summary = "查询设备状态") + @PostMapping("/status") + public R status(@RequestBody DoorStatusDto dto) { + return R.ok(thirdDoorApiService.status(dto)); + } + + @Inner + @Operation(summary = "设备重启") + @PostMapping("/restart") + public R restart(@RequestBody DoorRestartDto dto) { + return R.ok(thirdDoorApiService.restart(dto)); + } + + @Inner + @Operation(summary = "音量设置") + @PostMapping("/volume") + public R volume(@RequestBody DoorVolumeDto dto) { + return R.ok(thirdDoorApiService.volume(dto)); + } + + @Inner + @Operation(summary = "请求开锁") + @PostMapping("/open") + public R open(@RequestBody DoorOpenDto dto) { + return R.ok(thirdDoorApiService.open(dto)); + } + + @Inner + @Operation(summary = "调取另一个摄像头视频") + @PostMapping("/video") + public R video(@RequestBody DoorVideoDto dto) { + return R.ok(thirdDoorApiService.video(dto)); + } + + + /* ************************************* end 远程调用 end ************************************* */ + + + /* ************************************* start 回调 start ************************************* */ + + @Inner(value = false) + @Operation(summary = "门锁开关通知回调") + @PostMapping("/callback/open") + public R callbackOpen(@RequestBody DoorOpenCallbackDto dto) { + return R.ok(thirdDoorApiService.callbackOpen(dto)); + } + + @Inner(value = false) + @Operation(summary = "视频地址通知回调") + @PostMapping("/callback/open") + public R callbackVideo(@RequestBody DoorVideoCallbackDto dto) { + return R.ok(thirdDoorApiService.callbackVideo(dto)); + } + + @Inner(value = false) + @Operation(summary = "设备状态通知回调") + @PostMapping("/callback/open") + public R callbackStatus(@RequestBody DoorStatusDto dto) { + return R.ok(thirdDoorApiService.callbackStatus(dto)); + } + + + /* ************************************* start 回调 start ************************************* */ } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java index abd396d85..f68b4d062 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java @@ -1,8 +1,8 @@ package com.bsd.pjcloud.thirdparty.service; -import com.bsd.pjcloud.thirdparty.dto.door.DoorRegisterDto; -import com.bsd.pjcloud.thirdparty.vo.door.DoorRegisterVo; +import com.bsd.pjcloud.thirdparty.dto.door.*; +import com.bsd.pjcloud.thirdparty.vo.door.*; public interface ThirdDoorApiService { @@ -11,5 +11,48 @@ public interface ThirdDoorApiService { */ DoorRegisterVo register(DoorRegisterDto dto); + /** + * 设备信息绑定 + */ + DoorBindVo bind(DoorBindDto dto); + /** + * 查询设备状态 + */ + DoorStatusVo status(DoorStatusDto dto); + + /** + * 设备重启 + */ + DoorRestartVo restart(DoorRestartDto dto); + + /** + * 音量设置 + */ + DoorVolumeVo volume(DoorVolumeDto dto); + + /** + * 请求开锁 + */ + DoorOpenVo open(DoorOpenDto dto); + + /** + * 调取另一个摄像头视频 + */ + DoorVideoVo video(DoorVideoDto dto); + + /** + * 门锁开关通知回调 + */ + DoorOpenCallbackVo callbackOpen(DoorOpenCallbackDto dto); + + /** + * 视频地址通知回调 + */ + DoorVideoCallbackVo callbackVideo(DoorVideoCallbackDto dto); + + /** + * 设备状态通知回调 + */ + DoorStatusVo callbackStatus(DoorStatusDto dto); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java index 629b153d1..11800e381 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java @@ -1,22 +1,30 @@ package com.bsd.pjcloud.thirdparty.service.impl.door; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; -import com.bsd.pjcloud.thirdparty.dto.door.DoorRegisterDto; +import com.bsd.pjcloud.thirdparty.dto.door.*; +import com.bsd.pjcloud.thirdparty.entity.door.ThirdDoorLogEntity; import com.bsd.pjcloud.thirdparty.service.ThirdDoorApiService; +import com.bsd.pjcloud.thirdparty.service.ThirdDoorLogService; import com.bsd.pjcloud.thirdparty.utils.door.api.DoorApi; -import com.bsd.pjcloud.thirdparty.vo.door.DoorRegisterVo; +import com.bsd.pjcloud.thirdparty.vo.door.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.Arrays; + @Service @Validated @Slf4j @RequiredArgsConstructor public class ThirdDoorApiServiceImpl implements ThirdDoorApiService { + private final String TAG = "智能柜api"; + + private final ThirdDoorLogService doorLogService; + /** * 设备注册 */ @@ -24,13 +32,120 @@ public class ThirdDoorApiServiceImpl implements ThirdDoorApiService { public DoorRegisterVo register(DoorRegisterDto dto) { long startTime = System.currentTimeMillis(); DoorApi.Api registerApi = DoorApi.REGISTER; + ThirdDoorLogEntity logEntity = registerApi.getInitLogEntity(); + logEntity.setReq(JSONUtil.toJsonStr(dto)); try { - String res = registerApi.getHttpRequest().body(JSONUtil.toJsonStr(dto)).execute().body(); + String body = JSONUtil.toJsonStr(dto); + String res = registerApi.getHttpRequest().body(body).execute().body(); + if (ObjectUtil.isEmpty(res)) throw new RuntimeException("response响应为空"); + logEntity.setRes(res); + DoorBaseVo doorBaseVo = JSONUtil.toBean(res, DoorBaseVo.class); + if (!doorBaseVo.isSuccess()) { + throw new RuntimeException(String.format("请求错误res|%s|url|%s|body|%s|", res, registerApi, body)); + } + return JSONUtil.toBean(res, DoorRegisterVo.class); } catch (Exception e) { - + String error = String.format("|%s||register|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); + log.error(error); + logEntity.setError(error); } finally { - + logEntity.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime)); + doorLogService.save(logEntity); } return null; } + + /** + * 设备信息绑定 + */ + @Override + public DoorBindVo bind(DoorBindDto dto) { + long startTime = System.currentTimeMillis(); + DoorApi.Api registerApi = DoorApi.REGISTER; + ThirdDoorLogEntity logEntity = registerApi.getInitLogEntity(); + logEntity.setReq(JSONUtil.toJsonStr(dto)); + try { + String body = JSONUtil.toJsonStr(dto); + String res = registerApi.getHttpRequest().body(body).execute().body(); + if (ObjectUtil.isEmpty(res)) throw new RuntimeException("response响应为空"); + logEntity.setRes(res); + DoorBaseVo doorBaseVo = JSONUtil.toBean(res, DoorBaseVo.class); + if (!doorBaseVo.isSuccess()) { + throw new RuntimeException(String.format("请求错误res|%s|url|%s|body|%s|", res, registerApi, body)); + } + return JSONUtil.toBean(res, DoorBindVo.class); + } catch (Exception e) { + String error = String.format("|%s||bind|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); + log.error(error); + logEntity.setError(error); + } finally { + logEntity.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime)); + doorLogService.save(logEntity); + } + return null; + } + + /** + * 查询设备状态 + */ + @Override + public DoorStatusVo status(DoorStatusDto dto) { + return null; + } + + /** + * 设备重启 + */ + @Override + public DoorRestartVo restart(DoorRestartDto dto) { + return null; + } + + /** + * 音量设置 + */ + @Override + public DoorVolumeVo volume(DoorVolumeDto dto) { + return null; + } + + /** + * 请求开锁 + */ + @Override + public DoorOpenVo open(DoorOpenDto dto) { + return null; + } + + /** + * 调取另一个摄像头视频 + */ + @Override + public DoorVideoVo video(DoorVideoDto dto) { + return null; + } + + /** + * 门锁开关通知回调 + */ + @Override + public DoorOpenCallbackVo callbackOpen(DoorOpenCallbackDto dto) { + return null; + } + + /** + * 视频地址通知回调 + */ + @Override + public DoorVideoCallbackVo callbackVideo(DoorVideoCallbackDto dto) { + return null; + } + + /** + * 设备状态通知回调 + */ + @Override + public DoorStatusVo callbackStatus(DoorStatusDto dto) { + return null; + } } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorLogServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorLogServiceImpl.java index 94d88e4e0..2b9279fef 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorLogServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorLogServiceImpl.java @@ -12,9 +12,6 @@ import org.springframework.stereotype.Service; /** * 智能柜日志 - * - * @author dzc - * @date 2025-04-08 14:26:47 */ @Service public class ThirdDoorLogServiceImpl extends ServiceImpl implements ThirdDoorLogService { diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/recharge/WalletRechargeApplyMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/recharge/WalletRechargeApplyMapper.java index fe828b73c..667bf45bf 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/recharge/WalletRechargeApplyMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/recharge/WalletRechargeApplyMapper.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum; import com.bsd.pjcloud.wallet.api.dto.recharge.WalletRechargeApplyDto; import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; import com.bsd.pjcloud.wallet.api.entity.recharge.WalletRechargeApplyEntity; @@ -65,9 +66,15 @@ public interface WalletRechargeApplyMapper extends PjcloudBaseMapper