From c2863a1d8167e83d030b9a9488edeb43931087f5 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 24 Apr 2025 22:12:32 +0800 Subject: [PATCH 01/27] =?UTF-8?q?=E5=91=98=E5=B7=A5=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E8=B0=83=E5=B2=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/800pjcloudx_wallet.sql | 2 + .../api/constant/UserTransactionEnum.java | 29 +++ .../api/entity/SysUserTransactionEntity.java | 165 ++++++++++-------- .../admin/api/vo/SysUserTransactionVo.java | 2 + .../SysUserTransactionController.java | 24 ++- .../mapper/SysUserTransactionMapper.java | 1 + .../service/SysUserTransactionService.java | 26 +++ .../impl/SysUserTransactionServiceImpl.java | 149 ++++++++++++++++ .../flow/dto/UserTransactionFlowDto.java | 8 + .../mapper/SysUserTransactionMapper.xml | 18 +- 10 files changed, 341 insertions(+), 83 deletions(-) create mode 100644 pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/constant/UserTransactionEnum.java create mode 100644 pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/utils/flow/dto/UserTransactionFlowDto.java diff --git a/db/800pjcloudx_wallet.sql b/db/800pjcloudx_wallet.sql index 292582a18..b9b3ab31d 100644 --- a/db/800pjcloudx_wallet.sql +++ b/db/800pjcloudx_wallet.sql @@ -7,6 +7,7 @@ DROP TABLE IF EXISTS sys_user_transaction; CREATE TABLE `sys_user_transaction` ( id bigint NOT NULL COMMENT '编号', + apply_user_id bigint NOT NULL COMMENT '申请用户id', user_id bigint NOT NULL COMMENT '用户id', biz_id bigint DEFAULT NULL COMMENT '业务id', biz_type varchar(32) NOT NULL COMMENT '业务类型', @@ -20,6 +21,7 @@ CREATE TABLE `sys_user_transaction` process_id varchar(256) DEFAULT NULL COMMENT '流程id', process_status varchar(10) DEFAULT NULL COMMENT '审核状体', process_time datetime DEFAULT NULL COMMENT '审核时间', + remark varchar(1024) DEFAULT 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 '修改人', diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/constant/UserTransactionEnum.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/constant/UserTransactionEnum.java new file mode 100644 index 000000000..a5041e9af --- /dev/null +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/constant/UserTransactionEnum.java @@ -0,0 +1,29 @@ +package com.bsd.pjcloud.admin.api.constant; + + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 用户调岗类型 + */ +@AllArgsConstructor +@Getter +public enum UserTransactionEnum { + + LEAVE("10", "离职"), + TRANSFER("20", "调岗(外地)"), + INNER_TRANSFER("30", "调岗(内部)"), + ; + private final String type; + private final String description; + + public static UserTransactionEnum valueOfByType(String type) { + if (ObjectUtil.isEmpty(type)) return null; + return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); + } + +} diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/entity/SysUserTransactionEntity.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/entity/SysUserTransactionEntity.java index 79cc2908b..62b9a6c99 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/entity/SysUserTransactionEntity.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/entity/SysUserTransactionEntity.java @@ -3,14 +3,17 @@ package com.bsd.pjcloud.admin.api.entity; import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.extension.activerecord.Model; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; +import lombok.*; import com.bsd.pjcloud.common.core.util.TenantTable; + import java.time.LocalDateTime; /** * 人员调动表 */ +@Builder +@AllArgsConstructor +@NoArgsConstructor @Data @TenantTable @TableName("sys_user_transaction") @@ -19,112 +22,124 @@ import java.time.LocalDateTime; public class SysUserTransactionEntity extends Model { - /** - * 编号 - */ + /** + * 编号 + */ @TableId(type = IdType.ASSIGN_ID) - @Schema(description="编号") + @Schema(description = "编号") private Long id; - /** - * 用户id - */ - @Schema(description="用户id") + /** + * 申请部门用户id + */ + @Schema(description = "申请部门用户id") + private Long applyUserId; + + /** + * 用户id + */ + @Schema(description = "用户id") private Long userId; - /** - * 业务id - */ - @Schema(description="业务id") + /** + * 业务id + */ + @Schema(description = "业务id") private Long bizId; - /** - * 业务类型 - */ - @Schema(description="业务类型") + /** + * 业务类型 + */ + @Schema(description = "业务类型") private String bizType; - /** - * 源部门id - */ - @Schema(description="源部门id") + /** + * 源部门id + */ + @Schema(description = "源部门id") private Long sourceDeptId; - /** - * 目标部门id - */ - @Schema(description="目标部门id") + /** + * 目标部门id + */ + @Schema(description = "目标部门id") private Long targetDeptId; - /** - * 是否离职自动转账 - */ - @Schema(description="是否离职自动转账") + /** + * 是否离职自动转账 + */ + @Schema(description = "是否离职自动转账") private String isWalletTransaction; - /** - * 离职自动转账时间 - */ - @Schema(description="离职自动转账时间") + /** + * 离职自动转账时间 + */ + @Schema(description = "离职自动转账时间") private LocalDateTime walletTransactionTime; - /** - * 流程id - */ - @Schema(description="流程id") + /** + * 流程id + */ + @Schema(description = "流程id") private String processId; - /** - * 审核状体 - */ - @Schema(description="审核状体") + /** + * 审核状体 + */ + @Schema(description = "审核状体") private String processStatus; - /** - * 审核时间 - */ - @Schema(description="审核时间") + /** + * 审核时间 + */ + @Schema(description = "审核时间") private LocalDateTime processTime; - /** - * 创建人 - */ - @TableField(fill = FieldFill.INSERT) - @Schema(description="创建人") + /** + * 备注 + */ + @Schema(description = "备注") + private String remark; + + /** + * 创建人 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description = "创建人") private String createBy; - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - @Schema(description="创建时间") + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description = "创建时间") private LocalDateTime createTime; - /** - * 修改人 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - @Schema(description="修改人") + /** + * 修改人 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description = "修改人") private String updateBy; - /** - * 修改时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - @Schema(description="修改时间") + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description = "修改时间") private LocalDateTime updateTime; - /** - * 删除标记 - */ + /** + * 删除标记 + */ @TableLogic - @TableField(fill = FieldFill.INSERT) - @Schema(description="删除标记") + @TableField(fill = FieldFill.INSERT) + @Schema(description = "删除标记") private String delFlag; - /** - * 租户ID - */ - @Schema(description="租户ID") + /** + * 租户ID + */ + @Schema(description = "租户ID") private Long tenantId; } \ No newline at end of file diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/SysUserTransactionVo.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/SysUserTransactionVo.java index ae8c9385e..1cc8c7d0d 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/SysUserTransactionVo.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/SysUserTransactionVo.java @@ -26,4 +26,6 @@ public class SysUserTransactionVo extends SysUserTransactionEntity implements Ba private String userAvatar; + private String applyUsername; + } diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserTransactionController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserTransactionController.java index 1a8a9b1a2..01c7d3f03 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserTransactionController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserTransactionController.java @@ -11,6 +11,9 @@ import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.admin.service.SysUserTransactionService; +import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.common.security.util.SecurityUtils; +import com.bsd.pjcloud.flow.task.dto.ProcessNodeRecordAssignUserParamDto; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -36,6 +39,14 @@ public class SysUserTransactionController { private final SysUserTransactionService sysUserTransactionService; + /* ************************************* start callback start ************************************* */ + + public void applyCallback(@RequestBody ProcessNodeRecordAssignUserParamDto dto, @RequestParam(required = false) Long tenantId) { + sysUserTransactionService.applyCallback(dto, tenantId); + } + + /* ************************************* end callback end ************************************* */ + @Operation(summary = "分页查询", description = "分页查询") @GetMapping("/page") @PreAuthorize("@pms.hasPermission('admin_sysUserTransaction_view')") @@ -63,16 +74,18 @@ public class SysUserTransactionController { @SysLog("新增人员调动表") @PostMapping @PreAuthorize("@pms.hasPermission('admin_sysUserTransaction_add')") - public R save(@RequestBody SysUserTransactionEntity sysUserTransaction) { - return R.ok(sysUserTransactionService.save(sysUserTransaction)); + public R save(@RequestBody SysUserTransactionDto dto) { + PjcloudUser user = SecurityUtils.getUser(); + return R.ok(sysUserTransactionService.create(dto, user)); } @Operation(summary = "修改人员调动表", description = "修改人员调动表") @SysLog("修改人员调动表") @PutMapping @PreAuthorize("@pms.hasPermission('admin_sysUserTransaction_edit')") - public R updateById(@RequestBody SysUserTransactionEntity sysUserTransaction) { - return R.ok(sysUserTransactionService.updateById(sysUserTransaction)); + public R updateById(@RequestBody SysUserTransactionDto dto) { + PjcloudUser user = SecurityUtils.getUser(); + return R.ok(sysUserTransactionService.edit(dto, user)); } @Operation(summary = "通过id删除人员调动表", description = "通过id删除人员调动表") @@ -80,7 +93,8 @@ public class SysUserTransactionController { @DeleteMapping @PreAuthorize("@pms.hasPermission('admin_sysUserTransaction_del')") public R removeById(@RequestBody Long[] ids) { - return R.ok(sysUserTransactionService.removeBatchByIds(CollUtil.toList(ids))); + sysUserTransactionService.delByIds(CollUtil.toList(ids)); + return R.ok(); } @ResponseExcel diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/mapper/SysUserTransactionMapper.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/mapper/SysUserTransactionMapper.java index f2b291c52..7bd00e337 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/mapper/SysUserTransactionMapper.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/mapper/SysUserTransactionMapper.java @@ -14,4 +14,5 @@ public interface SysUserTransactionMapper extends PjcloudBaseMapper scopePageJoin(Page page, @Param("dto") SysUserTransactionDto dto, DataScope dataScope); + SysUserTransactionVo join(@Param("id") Long userTransactionId); } \ No newline at end of file diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTransactionService.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTransactionService.java index 7d04cd4f4..8c46f5dc7 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTransactionService.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTransactionService.java @@ -6,8 +6,34 @@ import com.bsd.pjcloud.admin.api.dto.SysUserTransactionDto; import com.bsd.pjcloud.admin.api.entity.SysUserTransactionEntity; import com.bsd.pjcloud.admin.api.vo.SysUserTransactionVo; import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.flow.task.dto.ProcessNodeRecordAssignUserParamDto; + +import java.util.ArrayList; public interface SysUserTransactionService extends IService { Page scopePageJoin(Page page, SysUserTransactionDto dto, DataScope dataScope); + + SysUserTransactionVo join(Long userTransactionId); + + /** + * 新增人员调动 + */ + Long create(SysUserTransactionDto dto, PjcloudUser applyUser); + + /** + * 新增人员调动 + */ + Long edit(SysUserTransactionDto dto, PjcloudUser applyUser); + + /** + * 删除人员调动 + */ + void delByIds(ArrayList list); + + /** + * 回调 + */ + void applyCallback(ProcessNodeRecordAssignUserParamDto dto, Long tenantId); } \ No newline at end of file diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java index d396d1af8..aa0176d01 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java @@ -1,16 +1,39 @@ package com.bsd.pjcloud.admin.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +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.constant.UserTransactionEnum; import com.bsd.pjcloud.admin.api.dto.SysUserTransactionDto; +import com.bsd.pjcloud.admin.api.entity.SysDept; +import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.admin.api.entity.SysUserTransactionEntity; import com.bsd.pjcloud.admin.api.vo.SysUserTransactionVo; import com.bsd.pjcloud.admin.mapper.SysUserTransactionMapper; +import com.bsd.pjcloud.admin.service.SysDeptService; +import com.bsd.pjcloud.admin.service.SysUserService; import com.bsd.pjcloud.admin.service.SysUserTransactionService; +import com.bsd.pjcloud.admin.utils.flow.FlowUtil; +import com.bsd.pjcloud.admin.utils.flow.dto.UserTransactionFlowDto; +import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.common.data.resolver.ParamResolver; +import com.bsd.pjcloud.common.data.tenant.TenantContextHolder; +import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum; +import com.bsd.pjcloud.flow.task.dto.ProcessNodeRecordAssignUserParamDto; +import com.bsd.pjcloud.wallet.api.entity.recharge.WalletRechargeApplyEntity; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; /** * 人员调动表 @@ -20,8 +43,134 @@ import org.springframework.stereotype.Service; @AllArgsConstructor public class SysUserTransactionServiceImpl extends ServiceImpl implements SysUserTransactionService { + private static final String TAG = "员工申请调岗"; + + private final SysUserService sysUserService; + private final SysDeptService sysDeptService; + + private final FlowUtil flowUtil; + @Override public Page scopePageJoin(Page page, SysUserTransactionDto dto, DataScope dataScope) { return baseMapper.scopePageJoin(page, dto, dataScope); } + + @Override + public SysUserTransactionVo join(Long userTransactionId) { + return baseMapper.join(userTransactionId); + } + + /** + * 新增人员调动 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Long create(SysUserTransactionDto dto, PjcloudUser applyUser) { + dto.setApplyUserId(applyUser.getId()); + if (ObjectUtil.notEqual(dto.getBizType(), UserTransactionEnum.INNER_TRANSFER.getType())) { + dto.setIsWalletTransaction(YesNoEnum.YES.getCode()); + } + // 如果是离职或者调岗(外地)自动移动到指定部门 + if (ObjectUtil.equals(dto.getBizType(), UserTransactionEnum.LEAVE.getType())) { + try { + String deptId = ParamResolver.getStr("USER_TRANSACTION_LEAVE"); + dto.setTargetDeptId(Long.valueOf(deptId)); + } catch (Exception e) { + throw new RuntimeException("请配置离职部门参数"); + } + } + if (ObjectUtil.equals(dto.getBizType(), UserTransactionEnum.TRANSFER.getType())) { + try { + String deptId = ParamResolver.getStr("USER_TRANSACTION_TRANSFER"); + dto.setTargetDeptId(Long.valueOf(deptId)); + } catch (Exception e) { + throw new RuntimeException("请配置调岗(外地)部门参数"); + } + } + // 查询发起用户 + SysUser applySysUser = sysUserService.getById(applyUser.getId()); + SysDept applySysDept = sysDeptService.getById(applyUser.getDeptId()); + baseMapper.insert(dto); + // 发起审批 + UserTransactionFlowDto flowDto = new UserTransactionFlowDto(); + flowDto.setApplyDeptName(applySysDept.getName()); + String processId = flowUtil.startFlow("USER_TRANSATION_APPLY", applySysUser, dto.getId(), flowDto); + // 更新审批信息 + SysUserTransactionEntity updateObj = new SysUserTransactionEntity(); + updateObj.setId(dto.getId()); + updateObj.setProcessId(processId); + updateObj.setProcessStatus(TaskCheckStatusEnum.PADDING.getCode()); + baseMapper.updateById(updateObj); + return dto.getId(); + } + + /** + * 新增人员调动 + */ + @Override + public Long edit(SysUserTransactionDto dto, PjcloudUser applyUser) { + SysUserTransactionEntity updateObj = BeanUtil.toBean(dto, SysUserTransactionEntity.class); + if (ObjectUtil.notEqual(TaskCheckStatusEnum.PADDING.getCode(), dto.getProcessStatus())) { + throw new RuntimeException("审批中状态才可以修改"); + } + baseMapper.updateById(updateObj); + return dto.getId(); + } + + /** + * 删除人员调动 + */ + @Override + public void delByIds(ArrayList list) { + if (ObjectUtil.isEmpty(list)) return; + List userList = baseMapper.selectList(new LambdaQueryWrapper() + .in(SysUserTransactionEntity::getId, list) + ); + for (SysUserTransactionEntity v : userList) { + if (ObjectUtil.notEqual(TaskCheckStatusEnum.PADDING.getCode(), v.getProcessStatus())) { + SysUserTransactionVo detail = join(v.getId()); + throw new RuntimeException("调动人<" + detail.getUsername() + ">手机号<" + detail.getUserMobile() + ">,审批中状态才可以修改"); + } + } + baseMapper.deleteBatchIds(list); + } + + /** + * 回调 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void applyCallback(ProcessNodeRecordAssignUserParamDto dto, Long tenantId) { + if (!flowUtil.checkCallback(dto)) { + return; + } + if (ObjectUtil.isNotEmpty(tenantId) && ObjectUtil.notEqual(tenantId, 1L)) { + TenantContextHolder.setTenantId(tenantId); + } + String processId = dto.getProcessInstanceId(); + SysUserTransactionEntity detail = baseMapper.selectOne(new LambdaQueryWrapper().eq(SysUserTransactionEntity::getProcessId, processId)); + if (ObjectUtil.isEmpty(detail)) { + return; + } + if (!ObjectUtil.equals(detail.getProcessStatus(), TaskCheckStatusEnum.PADDING.getCode())) { + log.error("|{}|重复的回调,dto:|{}|", TAG, JSON.toJSONString(dto)); + return; + } + try { + Boolean isConsent = flowUtil.isConsent(dto); + String processStatus = isConsent ? TaskCheckStatusEnum.RESULT.getCode() : TaskCheckStatusEnum.REJECT.getCode(); + baseMapper.updateById(SysUserTransactionEntity.builder().id(detail.getId()).processTime(LocalDateTime.now()).processStatus(processStatus).build()); + if (isConsent) { + // 修改部门 + SysUser userUpdateObj = new SysUser(); + userUpdateObj.setUserId(detail.getUserId()); + userUpdateObj.setDeptId(detail.getTargetDeptId()); + sysUserService.updateById(userUpdateObj); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("|{}|审批回调意外的错误,dto:|{}|error:|{}|", TAG, JSON.toJSONString(dto), e.getMessage()); + throw new RuntimeException(e); + } + } } \ No newline at end of file diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/utils/flow/dto/UserTransactionFlowDto.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/utils/flow/dto/UserTransactionFlowDto.java new file mode 100644 index 000000000..57da10eab --- /dev/null +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/utils/flow/dto/UserTransactionFlowDto.java @@ -0,0 +1,8 @@ +package com.bsd.pjcloud.admin.utils.flow.dto; + +import com.bsd.pjcloud.flow.task.dto.base.FlowBaseDto; +import lombok.Data; + +@Data +public class UserTransactionFlowDto extends FlowBaseDto { +} diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml index 82d53427f..b297c4572 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml @@ -24,6 +24,7 @@ select a.id, + a.apply_user_id, a.user_id, a.biz_id, a.biz_type, @@ -79,19 +80,30 @@ - + + + \ No newline at end of file From b914931b376ea65ea2fe6edf9a416de857b959c7 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 25 Apr 2025 11:04:12 +0800 Subject: [PATCH 02/27] =?UTF-8?q?feat:=E4=BA=BA=E5=91=98=E8=B0=83=E5=8A=A8?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/constant/UserTransactionEnum.java | 2 +- .../SysUserTransactionController.java | 4 ++ .../service/SysUserTransactionService.java | 2 + .../service/impl/SysUserServiceImpl.java | 3 +- .../impl/SysUserTransactionServiceImpl.java | 51 ++++++++++++++++--- .../pjcloud/admin/utils/flow/FlowUtil.java | 4 +- .../mapper/SysUserTransactionMapper.xml | 1 + .../api/feign/RemoteWalletThirdZyService.java | 17 +++++++ ...mework.cloud.openfeign.FeignClient.imports | 1 + .../third/WalletThirdZyController.java | 17 +++++-- 10 files changed, 88 insertions(+), 14 deletions(-) create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteWalletThirdZyService.java diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/constant/UserTransactionEnum.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/constant/UserTransactionEnum.java index a5041e9af..bb8e31c4a 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/constant/UserTransactionEnum.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/constant/UserTransactionEnum.java @@ -15,7 +15,7 @@ import java.util.Arrays; public enum UserTransactionEnum { LEAVE("10", "离职"), - TRANSFER("20", "调岗(外地)"), + RETIRE("20", "退休"), INNER_TRANSFER("30", "调岗(内部)"), ; private final String type; diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserTransactionController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserTransactionController.java index 01c7d3f03..bb16ccae2 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserTransactionController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserTransactionController.java @@ -11,6 +11,7 @@ import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.admin.service.SysUserTransactionService; +import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.common.security.service.PjcloudUser; import com.bsd.pjcloud.common.security.util.SecurityUtils; import com.bsd.pjcloud.flow.task.dto.ProcessNodeRecordAssignUserParamDto; @@ -41,6 +42,9 @@ public class SysUserTransactionController { /* ************************************* start callback start ************************************* */ + @Inner(value = false) + @Operation(summary = "申请调岗审批回调", description = "申请调岗审批回调") + @PostMapping("/apply-callback") public void applyCallback(@RequestBody ProcessNodeRecordAssignUserParamDto dto, @RequestParam(required = false) Long tenantId) { sysUserTransactionService.applyCallback(dto, tenantId); } diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTransactionService.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTransactionService.java index 8c46f5dc7..28988cb2d 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTransactionService.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTransactionService.java @@ -3,6 +3,8 @@ package com.bsd.pjcloud.admin.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.admin.api.dto.SysUserTransactionDto; +import com.bsd.pjcloud.admin.api.dto.UserDTO; +import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.admin.api.entity.SysUserTransactionEntity; import com.bsd.pjcloud.admin.api.vo.SysUserTransactionVo; import com.bsd.pjcloud.common.data.datascope.DataScope; diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java index fe8e18795..ad58ee990 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java @@ -915,11 +915,10 @@ public class SysUserServiceImpl extends ServiceImpl impl } - public List listUserIdByDeptId(Long deptId, String name) { List sysUsers = baseMapper.selectList(Wrappers.lambdaQuery() .eq(SysUser::getDeptId, deptId) - .like(StrUtil.isNotBlank(name),SysUser::getName, name)); + .like(StrUtil.isNotBlank(name), SysUser::getName, name)); return com.bsd.pjcloud.common.core.util.BeanUtils.toBean(sysUsers, SimpleUserListVO.class); } diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java index aa0176d01..8702614dd 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.admin.api.constant.UserTransactionEnum; import com.bsd.pjcloud.admin.api.dto.SysUserTransactionDto; +import com.bsd.pjcloud.admin.api.dto.UserDTO; import com.bsd.pjcloud.admin.api.entity.SysDept; import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.admin.api.entity.SysUserTransactionEntity; @@ -23,11 +24,16 @@ import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.resolver.ParamResolver; import com.bsd.pjcloud.common.data.tenant.TenantContextHolder; import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.common.security.util.SecurityUtils; +import com.bsd.pjcloud.flow.task.api.feign.RemoteFlowEngineService; import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum; import com.bsd.pjcloud.flow.task.dto.ProcessNodeRecordAssignUserParamDto; -import com.bsd.pjcloud.wallet.api.entity.recharge.WalletRechargeApplyEntity; +import com.bsd.pjcloud.flow.task.dto.TaskParamDto; +import com.bsd.pjcloud.wallet.api.feign.RemoteWalletService; +import com.bsd.pjcloud.wallet.api.feign.RemoteWalletThirdZyService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -48,6 +54,9 @@ public class SysUserTransactionServiceImpl extends ServiceImpl手机号<" + detail.getUserMobile() + ">,审批中状态才可以修改"); } } + // 取消审批 + TaskParamDto dto = new TaskParamDto(); + dto.setProcessInstanceIdList(userList.stream().map(SysUserTransactionEntity::getProcessId).filter(ObjectUtil::isNotEmpty).distinct().toList()); + remoteFlowEngineService.stopProcessInstance(dto).getData(); baseMapper.deleteBatchIds(list); } + /** * 回调 */ @@ -166,6 +200,11 @@ public class SysUserTransactionServiceImpl extends ServiceImpl detail = flowApiFlowService.getDetail(defaultRole); + R detail = flowApiFlowService.getProcessByBusinessKey(defaultRole); if (Optional.of(detail.getData()).map(Process::getId).isEmpty()) { log.error("|{}|未查询到该审批流程;userId:|{}|businessId:|{}|", TAG, user.getUserId(), businessId); throw new RuntimeException("未查询到该审批流程"); } - ProcessVO processVo = detail.getData(); + Process processVo = detail.getData(); ProcessInstanceParamDto processDto = new ProcessInstanceParamDto(); if (ObjectUtil.isNotEmpty(dto)) { if (ObjectUtil.isNotEmpty(user.getUserId())) { diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml index b297c4572..f25601757 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml @@ -100,6 +100,7 @@ + order by a.create_time desc,a.id desc + + where a.del_flag = 0 + and a.id not in (SELECT DISTINCT (sub.wallet_id) + FROM wallet_transaction sub + LEFT JOIN wallet_manage wallet on wallet.id = sub.wallet_id + WHERE sub.user_id = a.user_id + + AND sub.user_id = #{dto.userId} + + + + + and sub.dept_id IN + + + and sub.dept_id NOT IN + + + and sub.dept_id IN + + + + #{v} + + + AND DATE_FORMAT(sub.create_time, '%Y-%m-%d') <= #{unactiveDayNumberStr}) + + AND a.user_id = #{dto.userId} + + + + + and a.dept_id IN + + + and a.dept_id NOT IN + + + and a.dept_id IN + + + + #{v} + + + \ No newline at end of file From eda4868b58a375e1f9244f6ef1ac08783a8366e1 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 25 Apr 2025 12:23:46 +0800 Subject: [PATCH 05/27] =?UTF-8?q?feat:=E4=B8=8D=E6=B4=BB=E8=B7=83=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=BB=9F=E8=AE=A1list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WalletManageController.java | 9 +++++++- .../wallet/mapper/WalletManageMapper.java | 2 ++ .../wallet/service/WalletManageService.java | 5 +++++ .../service/impl/WalletManageServiceImpl.java | 14 +++++++++++++ .../resources/mapper/WalletManageMapper.xml | 21 +++++++++++++------ 5 files changed, 44 insertions(+), 7 deletions(-) diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java index 08a9f8848..4e8425e79 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java @@ -201,13 +201,20 @@ public class WalletManageController { return R.ok(walletManageService.scopeQbPage(page, dto, dataScope)); } - @Operation(summary = "不活跃用户钱包", description = "不活跃用户钱包") + @Operation(summary = "不活跃用户统计", description = "不活跃用户统计") @PostMapping("/page-join-active") public R> pageJoinActive(@ParameterObject Page page, @RequestBody WalletTopupActionDto dto) { DataScope dataScope = new DataScope(); return R.ok(walletManageService.pageJoinActive(page, dto, dataScope)); } + @Operation(summary = "不活跃用户统计list", description = "不活跃用户统计list") + @PostMapping("/list-list-active") + public R> listActive(@RequestBody WalletTopupActionDto dto) { + DataScope dataScope = new DataScope(); + return R.ok(walletManageService.pageListActive(dto, dataScope)); + } + @Operation(summary = "通过id查询", description = "通过id查询") @GetMapping("/{id}") @PreAuthorize("@pms.hasPermission('wallet_walletManage_view')") diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletManageMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletManageMapper.java index 2ee615a43..7675c5c2d 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletManageMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletManageMapper.java @@ -162,4 +162,6 @@ public interface WalletManageMapper extends PjcloudBaseMapper selectBalance(@Param("dto") WalletManageBalanceDto walletDto); Page activeBalancePage(Page page, @Param("dto") WalletTopupActionDto dto, @Param("unactiveDayNumberStr") String unactiveDayNumberStr); + + List activeBalanceList(@Param("dto") WalletTopupActionDto dto, @Param("unactiveDayNumberStr") String unactiveDayNumberStr); } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java index 3dd3d8fd8..64b29d7da 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java @@ -68,6 +68,11 @@ public interface WalletManageService extends IService { */ Page pageJoinActive(Page page, WalletTopupActionDto dto, DataScope dataScope); + /** + * 不活跃用户钱包 + */ + List pageListActive(WalletTopupActionDto dto, DataScope dataScope); + List scopeQbList(WalletManageBalanceDto dto, DataScope dataScope); WalletManageVo join(Long walletId); 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 71967b394..4c7c26962 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 @@ -298,6 +298,20 @@ public class WalletManageServiceImpl extends ServiceImpl pageListActive(WalletTopupActionDto dto, DataScope dataScope) { + if (ObjectUtil.isNotEmpty(dto.getUnactiveMonthsNumber())) { + dto.setUnactiveMonthsNumber(3L); + } + String unactiveDayNumberStr = LocalDateTimeUtil.format(LocalDateTimeUtil.now().minusMonths(dto.getUnactiveMonthsNumber()), DatePattern.NORM_DATE_PATTERN); + List list = baseMapper.activeBalanceList(dto, unactiveDayNumberStr); + disposeList(list); + return list; + } + @Override public List scopeQbList(WalletManageBalanceDto dto, DataScope dataScope) { WalletManageDto walletDto = BeanUtils.toBean(dto, WalletManageDto.class); diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletManageMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletManageMapper.xml index e6b6e29f8..bc74a132c 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletManageMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletManageMapper.xml @@ -34,7 +34,7 @@ a.freeze_price, a.is_freeze, a.active_bind_time, - a.active_bind_status, + a.status, a.create_by, a.create_time, a.update_by, @@ -44,7 +44,6 @@ - - + - + - + + + + \ No newline at end of file From 9160668c11401736e8ae4fd7f0a840e89c18cb7a Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 25 Apr 2025 14:32:23 +0800 Subject: [PATCH 06/27] fix:bug --- .../service/impl/WalletManageServiceImpl.java | 4 ++-- .../resources/mapper/WalletManageMapper.xml | 22 ++++++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) 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 4c7c26962..0785c8c36 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 @@ -289,7 +289,7 @@ public class WalletManageServiceImpl extends ServiceImpl pageJoinActive(Page page, WalletTopupActionDto dto, DataScope dataScope) { - if (ObjectUtil.isNotEmpty(dto.getUnactiveMonthsNumber())) { + if (ObjectUtil.isEmpty(dto.getUnactiveMonthsNumber())) { dto.setUnactiveMonthsNumber(3L); } String unactiveDayNumberStr = LocalDateTimeUtil.format(LocalDateTimeUtil.now().minusMonths(dto.getUnactiveMonthsNumber()), DatePattern.NORM_DATE_PATTERN); @@ -303,7 +303,7 @@ public class WalletManageServiceImpl extends ServiceImpl pageListActive(WalletTopupActionDto dto, DataScope dataScope) { - if (ObjectUtil.isNotEmpty(dto.getUnactiveMonthsNumber())) { + if (ObjectUtil.isEmpty(dto.getUnactiveMonthsNumber())) { dto.setUnactiveMonthsNumber(3L); } String unactiveDayNumberStr = LocalDateTimeUtil.format(LocalDateTimeUtil.now().minusMonths(dto.getUnactiveMonthsNumber()), DatePattern.NORM_DATE_PATTERN); diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletManageMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletManageMapper.xml index bc74a132c..ec06c85d2 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletManageMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletManageMapper.xml @@ -125,7 +125,7 @@ - + - + group by a.user_id \ No newline at end of file From f3ebae2ef4b3848ba5de560829bd7e34c63e22c5 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 25 Apr 2025 14:50:24 +0800 Subject: [PATCH 07/27] =?UTF-8?q?fix:=E9=83=A8=E9=97=A8=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98=E6=9F=A5=E8=AF=A2bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pjcloud/admin/controller/SysUserTransactionController.java | 1 + .../src/main/resources/mapper/SysUserTransactionMapper.xml | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserTransactionController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserTransactionController.java index bb16ccae2..01c2f5085 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserTransactionController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserTransactionController.java @@ -64,6 +64,7 @@ public class SysUserTransactionController { @PreAuthorize("@pms.hasPermission('admin_sysUserTransaction_view')") public R pageJoin(@ParameterObject Page page, @ParameterObject SysUserTransactionDto dto) { DataScope dataScope = new DataScope(); + dataScope.setScopeDeptName("applyUserDeptId"); return R.ok(sysUserTransactionService.scopePageJoin(page, dto, dataScope)); } diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml index f25601757..568235e56 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml @@ -87,7 +87,8 @@ u.name as username, u.phone as userMobile, u.avatar as userAvatar, - applyU.name as applyUsername + applyU.name as applyUsername, + applyU.dept_id as applyUserDeptId from sys_user_transaction a left join sys_dept soureD on soureD.dept_id = a.source_dept_id left join sys_dept targetD on targetD.dept_id = a.target_dept_id From fc292a9904381235e9be1950607f50998b68a602 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 25 Apr 2025 15:20:21 +0800 Subject: [PATCH 08/27] =?UTF-8?q?feat:=E4=BA=BA=E8=84=B8=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SysUserFaceController.java | 5 +++- .../service/impl/SysUserFaceServiceImpl.java | 27 ++++++++++++++++++- .../impl/SysUserTransactionServiceImpl.java | 2 ++ .../resources/mapper/SysUserFaceMapper.xml | 3 ++- 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserFaceController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserFaceController.java index bf00424f4..0bad98b75 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserFaceController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserFaceController.java @@ -11,6 +11,7 @@ import com.bsd.pjcloud.admin.api.entity.SysUserFaceEntity; import com.bsd.pjcloud.admin.api.vo.SysUserFaceVo; import com.bsd.pjcloud.admin.service.SysUserFaceService; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.idempotent.annotation.Idempotent; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.common.security.annotation.Inner; @@ -140,7 +141,9 @@ public class SysUserFaceController { @PostMapping("/page-check-join") public R> appPageCheckJoin(@ParameterObject Page page, @RequestBody SysUserFaceDto dto) { dto.setIsFindCheckUser(true); - return R.ok(sysUserFaceService.pageJoin(page, dto)); + DataScope dataScope = new DataScope(); + dataScope.setScopeDeptName("userDeptId"); + return R.ok(sysUserFaceService.scopePageList(page, dto, dataScope)); } @Operation(summary = "通过id查询", description = "通过id查询") diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserFaceServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserFaceServiceImpl.java index c5d9cb264..871d79ade 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserFaceServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserFaceServiceImpl.java @@ -147,7 +147,32 @@ public class SysUserFaceServiceImpl extends ServiceImpl scopePageList(Page page, SysUserFaceDto dto, DataScope dataScope) { - return baseMapper.scopePageList(page, dto, DataScope.of()); + if (ObjectUtil.isNotEmpty(dto.getMerchantDeptIdOrGlobal())) { + List deptList = sysDeptService.listDescendant(dto.getMerchantDeptIdOrGlobal()); + if (ObjectUtil.isNotEmpty(deptList)) { + List deptIds = deptList.stream().map(SysDept::getDeptId).toList(); + dto.setDeptIds(deptIds); + } + } + Page list = baseMapper.scopePageList(page, dto, dataScope); + // 审批流程 + if (dto.getIsFindCheckUser()) { + List processInstanceIds = list.getRecords().stream().map(SysUserFaceVo::getProcessId).filter(ObjectUtil::isNotEmpty).distinct().toList(); + if (ObjectUtil.isNotEmpty(processInstanceIds)) { + List taskList = flowUtil.queryProcessInstanceList(SecurityUtils.getUser().getId().toString(), processInstanceIds); + if (ObjectUtil.isNotEmpty(taskList)) { + Map taskMap = CollectionUtils.convertMap(taskList, TaskDto::getProcessInstanceId); + CollectionUtils.convertList(list.getRecords(), v -> { + TaskDto task = taskMap.get(v.getProcessId()); + if (ObjectUtil.isNotEmpty(task)) { + v.setIsCheckUser(true); + } + return v; + }); + } + } + } + return list; } @Override diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java index 8702614dd..6e35d0b11 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java @@ -78,6 +78,8 @@ public class SysUserTransactionServiceImpl extends ServiceImpl u.name as username, u.avatar as userAvatar, - u.phone as userMobile + u.phone as userMobile, + u.dept_id as userDeptId from sys_user_face a left join sys_user u on u.user_id = a.user_id From c084903129e1280b8151521a3e66ce3d2268d335 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 25 Apr 2025 18:07:15 +0800 Subject: [PATCH 09/27] =?UTF-8?q?feat:=E6=97=B7=E4=B8=96=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E3=80=81=E6=9F=A5=E8=AF=A2=E8=87=AA=E5=B7=B1=E7=9A=84=E5=95=86?= =?UTF-8?q?=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pjcloud/hard/api/dto/spu/HardSpuDto.java | 5 + .../hard/api/entity/spu/HardSpuEntity.java | 8 ++ .../api/feign/RemoteHardSpuController.java | 19 ++++ ...mework.cloud.openfeign.FeignClient.imports | 3 +- .../controller/spu/HardSpuController.java | 22 +++- .../pjcloud/hard/service/HardSpuService.java | 12 ++ .../service/impl/spu/HardSpuServiceImpl.java | 105 ++++++++++++++++-- .../resources/mapper/spu/HardSpuMapper.xml | 5 + .../dto/ks/KsSkuSubmitCallbackDto.java | 2 +- .../thirdparty/dto/ks/KsSkuSubmitDto.java | 7 +- .../thirdparty/vo/ks/KsSkuDeleteVo.java | 2 +- .../thirdparty/vo/ks/KsSkuResultVo.java | 15 ++- .../impl/ks/ThirdKsApiServiceImpl.java | 62 +++++++++-- .../thirdparty/utils/ks/api/KsApi.java | 18 ++- 14 files changed, 248 insertions(+), 37 deletions(-) create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardSpuController.java diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuDto.java index d5940b6d3..0e8fdfaa8 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/spu/HardSpuDto.java @@ -13,4 +13,9 @@ public class HardSpuDto extends HardSpuEntity { private LocalDateTime[] createTimeList; + /** + * 分类不能为空 + */ + private Boolean spuCategoryIdIsNotNull = false; + } diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuEntity.java index b13f3518d..a662ed16d 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/spu/HardSpuEntity.java @@ -155,12 +155,20 @@ public class HardSpuEntity extends Model { /** * 旷世审核状态 + * 0:待审核 + * 1:审核中 + * 2:审核通过 + * 3:审核不通过 */ @Schema(description = "旷世审核状态") private String ksStatus; /** * 旷世审核状态标题 + * 0:待审核 + * 1:审核中 + * 2:审核通过 + * 3:审核不通过 */ @Schema(description = "旷世审核状态标题") private String ksStatusTitle; diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardSpuController.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardSpuController.java new file mode 100644 index 000000000..a72e31d37 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardSpuController.java @@ -0,0 +1,19 @@ +package com.bsd.pjcloud.hard.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.ks.KsSkuSubmitCallbackDto; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +@FeignClient(contextId = "remoteHardSpuController", value = ServiceNameConstants.HARDWARE_SERVICE) +public interface RemoteHardSpuController { + + @NoToken + @PostMapping("/sku-check-callback") + R skuCheckCallback(@RequestBody KsSkuSubmitCallbackDto dto); + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports b/pjcloud-hardware/pjcloud-hardware-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports index 910612a76..c5c83c74f 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports @@ -1,3 +1,4 @@ com.bsd.pjcloud.hard.api.feign.RemoteHardDoorService com.bsd.pjcloud.hard.api.feign.RemoteHardOrderService -com.bsd.pjcloud.hard.api.feign.RemoteHardThirdSelfZyService \ No newline at end of file +com.bsd.pjcloud.hard.api.feign.RemoteHardSpuController +com.bsd.pjcloud.hard.api.feign.RemoteHardThirdSelfZyService diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/spu/HardSpuController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/spu/HardSpuController.java index 36fd5dda5..cb53ab33b 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/spu/HardSpuController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/spu/HardSpuController.java @@ -9,11 +9,13 @@ import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.idempotent.annotation.Idempotent; import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.hard.api.dto.spu.HardPutawayDto; import com.bsd.pjcloud.hard.api.dto.spu.HardSpuDto; import com.bsd.pjcloud.hard.api.entity.spu.HardSpuEntity; import com.bsd.pjcloud.hard.api.vo.spu.HardSpuJoinVo; import com.bsd.pjcloud.hard.service.HardSpuService; +import com.bsd.pjcloud.thirdparty.dto.ks.KsSkuSubmitCallbackDto; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; @@ -42,6 +44,18 @@ public class HardSpuController { private final HardSpuService hardSpuService; + /* ************************************* start callback start ************************************* */ + + @Inner + @Operation(summary = "商品审核回调", description = "商品审核回调") + @PostMapping("/sku-check-callback") + public R skuCheckCallback(@RequestBody KsSkuSubmitCallbackDto dto) { + hardSpuService.skuCheckCallback(dto); + return R.ok(); + } + + /* ************************************* end callback end ************************************* */ + /* ************************************* start APP start ************************************* */ @Operation(summary = "app上架", description = "上架") @@ -88,6 +102,13 @@ public class HardSpuController { return R.ok(); } + @Operation(summary = "更新旷世商品审核进度", description = "更新旷世商品审核进度") + @GetMapping("/progress") + public R progress(@RequestParam Long id) { + hardSpuService.progress(id); + return R.ok(); + } + @Operation(summary = "根据设备id智能柜编号查询商品", description = "根据设备id智能柜编号查询商品") @GetMapping("/get-by-cabinet-no") public R>>> getByCabinetNo(@RequestParam Long hardId, @RequestParam String cabinetNo) { @@ -108,7 +129,6 @@ public class HardSpuController { return R.ok(); } - @Operation(summary = "下拉查询", description = "下拉查询") @GetMapping("/select") public R select(@ParameterObject Page page, @ParameterObject HardSpuDto dto) { diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuService.java index e4d8cfc9c..6bf246745 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuService.java @@ -10,6 +10,7 @@ import com.bsd.pjcloud.hard.api.entity.HardDoorFlowEntity; import com.bsd.pjcloud.hard.api.entity.spu.HardSpuEntity; import com.bsd.pjcloud.hard.api.vo.spu.HardSpuJoinVo; import com.bsd.pjcloud.hard.api.vo.spu.HardSpuVo; +import com.bsd.pjcloud.thirdparty.dto.ks.KsSkuSubmitCallbackDto; import java.util.ArrayList; import java.util.List; @@ -31,6 +32,16 @@ public interface HardSpuService extends IService { */ Long create(HardSpuEntity entity); + /** + * 更新旷世商品审核进度 + */ + void progress(Long id); + + /** + * 商品审核回调 + */ + void skuCheckCallback(KsSkuSubmitCallbackDto dto); + /** * 编辑 */ @@ -75,4 +86,5 @@ public interface HardSpuService extends IService { * 扣减库存 */ Boolean deductionSpuStock(HardDoorFlowEntity hardDoorFlow, List list); + } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java index 3ecc61e85..415839bcf 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java @@ -27,9 +27,8 @@ import com.bsd.pjcloud.hard.service.HardManagerService; import com.bsd.pjcloud.hard.service.HardSpuJoinService; import com.bsd.pjcloud.hard.service.HardSpuService; import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdKsService; -import com.bsd.pjcloud.thirdparty.dto.ks.KsBarcodeLikeDto; -import com.bsd.pjcloud.thirdparty.vo.ks.KsBarcodeLikeVo; -import com.bsd.pjcloud.thirdparty.vo.ks.KsSpuVo; +import com.bsd.pjcloud.thirdparty.dto.ks.*; +import com.bsd.pjcloud.thirdparty.vo.ks.*; import com.bsd.pjcloud.wallet.api.feign.RemoteMchService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -82,25 +81,97 @@ public class HardSpuServiceImpl extends ServiceImpl picList = Arrays.asList(pic.split(",")); entity.setSkuType(HardKsSkuTypeEnum.SELF.getType()); baseMapper.insert(entity); - // 发起审核 - + if (ObjectUtil.equals(entity.getIsDefault(), YesNoEnum.NO.getCode())) { + return entity.getId(); + } + // 发起旷世审核 + KsSkuSubmitDto dto = new KsSkuSubmitDto(); + dto.setSku_id(String.valueOf(entity.getId())); + dto.setSku_name(entity.getName()); + dto.setImg_urls(picList); + Map specs = new HashMap<>(); + specs.put("taste", entity.getSpecsTaste()); + specs.put("capacity", entity.getSpecsCapacity()); + specs.put("weight", entity.getSpecsWeight()); + dto.setSpecs(specs); + KsSkuSubmitVo data = remoterThirdKsService.skuSubmit(dto).getData(); + if (ObjectUtil.isEmpty(data) || !data.isSuccess()) throw new RuntimeException(data.getMessage()); + HardSpuEntity update = new HardSpuEntity(); + update.setId(entity.getId()); + update.setKsSkuId(data.getKs_sku_id()); + update.setKsStatus("0"); + update.setKsStatusTitle("待审核"); + update.setKsComments("提交审核"); + baseMapper.updateById(update); return entity.getId(); } + /** + * 更新旷世商品审核进度 + */ + @Override + public void progress(Long id) { + HardSpuEntity detail = baseMapper.selectById(id); + if (ObjectUtil.isEmpty(detail)) { + throw new RuntimeException("商品不存在"); + } + KsSkuResultDto dto = new KsSkuResultDto(); + dto.setKs_sku_id(detail.getKsSkuId()); + KsSkuResultVo vo = remoterThirdKsService.skuResult(dto).getData(); + if (ObjectUtil.isEmpty(vo) || !vo.isSuccess()) throw new RuntimeException(vo.getMessage()); + KsSkuResultVo.Result result = vo.getResult(); + String comments = ""; + if (ObjectUtil.isEmpty(vo.getComments())) { + comments = vo.getComments(); + } + if (ObjectUtil.isNotEmpty(result)) { + HardSpuEntity update = new HardSpuEntity(); + update.setId(detail.getId()); + update.setKsStatus(result.getCode()); + update.setKsStatusTitle(result.getDesc()); + update.setKsComments(comments); + baseMapper.updateById(update); + } + } + + /** + * 商品审核回调 + */ + @Override + public void skuCheckCallback(KsSkuSubmitCallbackDto dto) { + if (ObjectUtil.isEmpty(dto) || ObjectUtil.isEmpty(dto.getKs_sku_id())) return; + HardSpuEntity detail = baseMapper.selectOne(new LambdaQueryWrapper().eq(HardSpuEntity::getKsSkuId, dto.getKs_sku_id())); + if (ObjectUtil.isEmpty(detail)) return; + KsSkuSubmitCallbackDto.Result result = dto.getResult(); + String comments = ""; + if (ObjectUtil.isEmpty(dto.getComments())) { + comments = dto.getComments(); + } + if (ObjectUtil.isNotEmpty(result)) { + HardSpuEntity update = new HardSpuEntity(); + update.setId(detail.getId()); + update.setKsStatus(result.getCode()); + update.setKsStatusTitle(result.getDesc()); + update.setKsComments(comments); + baseMapper.updateById(update); + } + } + /** * 编辑 */ @Override public Long edit(HardSpuEntity entity) { - // if (existName(entity)) { - // throw new RuntimeException("商品名不能重复"); - // } baseMapper.updateById(entity); return entity.getId(); } @@ -111,6 +182,18 @@ public class HardSpuServiceImpl extends ServiceImpl list) { if (ObjectUtil.isEmpty(list)) return; + List spuList = baseMapper.selectList(new LambdaQueryWrapper() + .in(HardSpuEntity::getId, list) + ); + for (HardSpuEntity v : spuList) { + if (ObjectUtil.notEqual(v.getSkuType(), HardKsSkuTypeEnum.SELF.getType())) continue; + if (ObjectUtil.isNotEmpty(v.getKsSkuId())) { + KsSkuDeleteDto dto = new KsSkuDeleteDto(); + dto.setKs_sku_id(v.getKsSkuId()); + KsSkuDeleteVo data = remoterThirdKsService.skuDelete(dto).getData(); + if (ObjectUtil.isEmpty(data) || !data.isSuccess()) throw new RuntimeException(data.getMessage()); + } + } baseMapper.deleteByIds(list); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuMapper.xml index 71329ef84..274957e3c 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/spu/HardSpuMapper.xml @@ -80,6 +80,11 @@ and a.spu_category_id = #{dto.spuCategoryId} + + + and a.spu_category_id is not null + + and a.status = #{dto.status} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitCallbackDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitCallbackDto.java index 840194c15..600c2f8cc 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitCallbackDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitCallbackDto.java @@ -32,7 +32,7 @@ public class KsSkuSubmitCallbackDto { * 2:审核通过 * 3:审核不通过 */ - private Integer code; + private String code; private String desc; diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitDto.java index 84ff297fa..4d7f630b9 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuSubmitDto.java @@ -2,6 +2,9 @@ package com.bsd.pjcloud.thirdparty.dto.ks; import lombok.Data; +import java.util.List; +import java.util.Map; + @Data public class KsSkuSubmitDto { /** @@ -22,7 +25,7 @@ public class KsSkuSubmitDto { /** * 该字段为SKU不同方位视图,所需拍摄的图片数量及角度请参考商品建模文档,参数具体值为图片资源地址,如资源为使用方所属,请确保外部可以访问,请注意图片尺寸及质量,综合质量不佳可能会导致审核不通过。图片尺寸不小于1920*1080,压缩质量不低于70%,长宽比介于16:9同1:1之间。 */ - private String img_urls; + private List img_urls; /** * 审核结果回调地址 @@ -32,6 +35,6 @@ public class KsSkuSubmitDto { /** * 该字段为SKU所对应的规格,包含口味、容量、重量,taste表示口味,capacity表示容量,单位:ml,weight表示重量,单位:g */ - private String specs; + private Map specs; } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuDeleteVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuDeleteVo.java index 9547e56f9..d49569d9e 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuDeleteVo.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuDeleteVo.java @@ -3,7 +3,7 @@ package com.bsd.pjcloud.thirdparty.vo.ks; import lombok.Data; @Data -public class KsSkuDeleteVo { +public class KsSkuDeleteVo extends KsBaseInnerVo { /** * 该sku_id为使用方sku_id diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuResultVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuResultVo.java index 6f417657f..1ae1db3cb 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuResultVo.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuResultVo.java @@ -3,24 +3,27 @@ package com.bsd.pjcloud.thirdparty.vo.ks; import lombok.Data; @Data -public class KsSkuResultVo { +public class KsSkuResultVo extends KsBaseInnerVo { /** * 该字段返回结果为字典值,不同code代表不同结果 - *

* 0:待审核 - *

* 1:审核中 - *

* 2:审核通过 - *

* 3:审核不通过 */ - private String result; + private Result result; /** * 审核不通过时该字段才有值 */ private String comments; + @Data + public static class Result { + private String code; + private String desc; + } + + } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java index 4490dde4f..296201c03 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.bsd.pjcloud.hard.api.feign.RemoteHardDoorService; +import com.bsd.pjcloud.hard.api.feign.RemoteHardSpuController; import com.bsd.pjcloud.thirdparty.config.KsDiscernConfig; import com.bsd.pjcloud.thirdparty.dto.ks.*; import com.bsd.pjcloud.thirdparty.entity.door.ThirdDoorLogEntity; @@ -14,7 +15,6 @@ import com.bsd.pjcloud.thirdparty.utils.ks.tool.KsRetailSignUtils; import com.bsd.pjcloud.thirdparty.vo.ks.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpPost; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -35,19 +35,37 @@ public class ThirdKsApiServiceImpl implements ThirdKsApiService { private final ThirdDoorLogService doorLogService; private final RemoteHardDoorService remoteHardDoorService; + private final RemoteHardSpuController remoteHardSpuController; /** * 常规SKU提交审核 */ @Override public KsSkuSubmitVo skuSubmit(KsSkuSubmitDto dto) { + dto.setNotify_url(ksDiscernConfig.getCallbackBaseUrl() + ksDiscernConfig.getCallbackSkuUrl()); long startTime = System.currentTimeMillis(); KsBaseVo ksBaseVo = new KsBaseVo(); - KsApi.Api api = KsApi.SKU_SUBMIT.setBaseUrl(ksDiscernConfig.getBaseUrl()).setParams(BeanUtil.beanToMap(dto)); + KsApi.Api api = KsApi.SKU_SUBMIT.setBaseUrl(ksDiscernConfig.getBaseUrl()) + .setParams(BeanUtil.beanToMap(dto)) + .setAccessKey(ksDiscernConfig.getAccessKey()) + .setSecretKey(ksDiscernConfig.getSecretKey()) + .setHost(ksDiscernConfig.getHost()); ThirdDoorLogEntity logEntity = api.getInitLogEntity(); logEntity.setReq(JSONUtil.toJsonStr(dto)); try { - + String body = JSONUtil.toJsonStr(dto); + api.setBody(body); + String res = api.getHttpRequest().execute().body(); + if (ObjectUtil.isEmpty(res)) throw new RuntimeException("response响应为空"); + logEntity.setRes(res); + ksBaseVo = JSONUtil.toBean(res, KsBaseVo.class); + if (!ksBaseVo.isSuccess()) { + String errorLog = String.format("请求错误res|%s|url|%s|body|%s|", res, api, body); + log.error(errorLog); + KsSkuSubmitVo errorVo = new KsSkuSubmitVo(); + errorVo.setMessage(ksBaseVo.getMsg()); + return errorVo; + } } catch (Exception e) { String error = String.format("|%s||skuSubmit|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); log.error(error); @@ -89,11 +107,25 @@ public class ThirdKsApiServiceImpl implements ThirdKsApiService { public KsSkuResultVo skuResult(KsSkuResultDto dto) { long startTime = System.currentTimeMillis(); KsBaseVo ksBaseVo = new KsBaseVo(); - KsApi.Api api = KsApi.SKU_RESULT.setBaseUrl(ksDiscernConfig.getBaseUrl()).setParams(BeanUtil.beanToMap(dto)); + KsApi.Api api = KsApi.SKU_RESULT.setBaseUrl(ksDiscernConfig.getBaseUrl()) + .setpath(dto.getKs_sku_id()) + .setAccessKey(ksDiscernConfig.getAccessKey()) + .setSecretKey(ksDiscernConfig.getSecretKey()) + .setHost(ksDiscernConfig.getHost()); ThirdDoorLogEntity logEntity = api.getInitLogEntity(); logEntity.setReq(JSONUtil.toJsonStr(dto)); try { - + String res = api.getHttpRequest().execute().body(); + if (ObjectUtil.isEmpty(res)) throw new RuntimeException("response响应为空"); + logEntity.setRes(res); + ksBaseVo = JSONUtil.toBean(res, KsBaseVo.class); + if (!ksBaseVo.isSuccess()) { + String errorLog = String.format("请求错误res|%s|url|%s|", res, api); + log.error(errorLog); + KsSkuResultVo errorVo = new KsSkuResultVo(); + errorVo.setMessage(ksBaseVo.getMsg()); + return errorVo; + } } catch (Exception e) { String error = String.format("|%s||skuResult|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); log.error(error); @@ -135,11 +167,25 @@ public class ThirdKsApiServiceImpl implements ThirdKsApiService { public KsSkuDeleteVo skuDelete(KsSkuDeleteDto dto) { long startTime = System.currentTimeMillis(); KsBaseVo ksBaseVo = new KsBaseVo(); - KsApi.Api api = KsApi.SKU_DELETE.setBaseUrl(ksDiscernConfig.getBaseUrl()).setParams(BeanUtil.beanToMap(dto)); + KsApi.Api api = KsApi.SKU_DELETE.setBaseUrl(ksDiscernConfig.getBaseUrl()) + .setpath(dto.getKs_sku_id()) + .setAccessKey(ksDiscernConfig.getAccessKey()) + .setSecretKey(ksDiscernConfig.getSecretKey()) + .setHost(ksDiscernConfig.getHost()); ThirdDoorLogEntity logEntity = api.getInitLogEntity(); logEntity.setReq(JSONUtil.toJsonStr(dto)); try { - + String res = api.getHttpRequest().execute().body(); + if (ObjectUtil.isEmpty(res)) throw new RuntimeException("response响应为空"); + logEntity.setRes(res); + ksBaseVo = JSONUtil.toBean(res, KsBaseVo.class); + if (!ksBaseVo.isSuccess()) { + String errorLog = String.format("请求错误res|%s|url|%s|", res, api); + log.error(errorLog); + KsSkuDeleteVo errorVo = new KsSkuDeleteVo(); + errorVo.setMessage(ksBaseVo.getMsg()); + return errorVo; + } } catch (Exception e) { String error = String.format("|%s||skuDelete|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); log.error(error); @@ -318,7 +364,7 @@ public class ThirdKsApiServiceImpl implements ThirdKsApiService { ThirdDoorLogEntity logEntity = api.getInitLogEntity(); logEntity.setReq(json); try { - + remoteHardSpuController.skuCheckCallback(dto); } catch (Exception e) { String error = String.format("|%s||callbackSKu|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); log.error(error); diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/ks/api/KsApi.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/ks/api/KsApi.java index c53b2192f..404a86d44 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/ks/api/KsApi.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/ks/api/KsApi.java @@ -1,6 +1,7 @@ package com.bsd.pjcloud.thirdparty.utils.ks.api; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.http.HttpRequest; @@ -35,7 +36,7 @@ public class KsApi { public static final KsApi.Api SKU_SUBMIT_COLLECTION = KsApi.Api.builder().url("/openapi/sc/v1/sku/collection").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpPost.METHOD_NAME).contentType("application/json").build(); // SKU审核结果主动获取 - public static final KsApi.Api SKU_RESULT = KsApi.Api.builder().url("/openapi/sc/v1/sku/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpPost.METHOD_NAME).contentType("application/json").build(); + public static final KsApi.Api SKU_RESULT = KsApi.Api.builder().url("/openapi/sc/v1/sku/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpGet.METHOD_NAME).contentType("application/json").build(); // SKU识别结果回调通知 public static final KsApi.Api SKU_EDIT = KsApi.Api.builder().url("/callback").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpPatch.METHOD_NAME).contentType("application/json").build(); @@ -75,6 +76,8 @@ public class KsApi { private Map params = new TreeMap<>(); + private List path; + private String body; private String method; @@ -91,7 +94,6 @@ public class KsApi { private String host = ""; - private String requestId; public KsApi.Api setBaseUrl(String baseUrl) { @@ -119,14 +121,17 @@ public class KsApi { return this; } + public Api setpath(Object... path) { + this.url = String.format(this.url, path); + this.path = ListUtil.of(path); + return this; + } + public KsApi.Api setBody(String body) { this.body = body; return this; } - /** - * 获取当前时间戳 - */ public Long getXRequestDate() { return System.currentTimeMillis(); } @@ -153,6 +158,7 @@ public class KsApi { // 计算签名 Long currentTime = getXRequestDate(); String queryString = getQueryString(); + if (ObjectUtil.isEmpty(queryString)) queryString = ""; String auth = KsRetailSignUtils.getSignAuth(getHost(), getUrl(), contentType, getMethod(), currentTime, getAccessKey(), getSecretKey(), getBody(), queryString); String requestId = getXRequestDate() + RandomUtil.randomString(19); setRequestId(requestId); @@ -181,7 +187,7 @@ public class KsApi { } else if (ObjectUtil.equals(method, HttpPatch.METHOD_NAME)) { return HttpRequest.patch(fullPatch).header(getHeader()).body(getBody()); } else if (ObjectUtil.equals(method, HttpDelete.METHOD_NAME)) { - return HttpRequest.delete(fullPatch).header(getHeader()).body(getBody()); + return HttpRequest.delete(fullPatch).header(getHeader()); } else { return null; } From 1518428aa354fe2692a74b1280a4f18ed5fb89f7 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 25 Apr 2025 21:07:19 +0800 Subject: [PATCH 10/27] 1 --- .../pjcloud/hard/controller/HardDoorFlowController.java | 2 ++ .../hard/service/impl/spu/HardSpuServiceImpl.java | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardDoorFlowController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardDoorFlowController.java index 3a39303cf..8ef15f99d 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardDoorFlowController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardDoorFlowController.java @@ -126,6 +126,8 @@ public class HardDoorFlowController { /* ************************************* end app end ************************************* */ + + @Operation(summary = "检修开门", description = "检修开门") @PostMapping("/open-access") @Idempotent(expireTime = 5, info = "正在开门中,请勿重复操作") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java index 415839bcf..65fc5fc73 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.common.data.resolver.ParamResolver; import com.bsd.pjcloud.hard.api.constant.spu.HardKsCheckStatusEnum; import com.bsd.pjcloud.hard.api.constant.spu.HardKsSkuTypeEnum; import com.bsd.pjcloud.hard.api.dto.spu.DeductionSpuStockDto; @@ -84,11 +85,11 @@ public class HardSpuServiceImpl extends ServiceImpl picList = Arrays.asList(pic.split(",")); + picList = picList.stream().map(v -> String.format("%s%s", imageBaseUrl, v)).toList(); entity.setSkuType(HardKsSkuTypeEnum.SELF.getType()); baseMapper.insert(entity); if (ObjectUtil.equals(entity.getIsDefault(), YesNoEnum.NO.getCode())) { From becdfc8d0dd852c90a3ca869ae3c3f08425300a7 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Sun, 27 Apr 2025 11:41:04 +0800 Subject: [PATCH 11/27] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=B7=E4=B8=96sku?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pjcloud/hard/service/HardSpuService.java | 10 +- .../service/impl/spu/HardSpuServiceImpl.java | 147 +++++++++++++----- .../api/feign/RemoterThirdKsService.java | 7 + .../thirdparty/dto/ks/KsSkuEditDto.java | 12 +- .../pjcloud/thirdparty/vo/ks/KsSkuEditVo.java | 2 +- .../controller/ks/ThirdKsApiController.java | 6 +- .../thirdparty/service/ThirdKsApiService.java | 2 +- .../impl/ks/ThirdKsApiServiceImpl.java | 24 ++- 8 files changed, 155 insertions(+), 55 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuService.java index 6bf246745..9d394fc15 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardSpuService.java @@ -32,6 +32,11 @@ public interface HardSpuService extends IService { */ Long create(HardSpuEntity entity); + /** + * 编辑 + */ + Long edit(HardSpuEntity entity); + /** * 更新旷世商品审核进度 */ @@ -42,11 +47,6 @@ public interface HardSpuService extends IService { */ void skuCheckCallback(KsSkuSubmitCallbackDto dto); - /** - * 编辑 - */ - Long edit(HardSpuEntity entity); - /** * 删除 */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java index 65fc5fc73..1621aa9e4 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java @@ -1,7 +1,10 @@ package com.bsd.pjcloud.hard.service.impl.spu; +import cn.hutool.Hutool; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.spring.SpringUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -38,6 +41,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.util.*; +import java.util.regex.Pattern; /** * 硬件商品 @@ -86,37 +90,38 @@ public class HardSpuServiceImpl extends ServiceImpl picList = Arrays.asList(pic.split(",")); - picList = picList.stream().map(v -> String.format("%s%s", imageBaseUrl, v)).toList(); entity.setSkuType(HardKsSkuTypeEnum.SELF.getType()); baseMapper.insert(entity); if (ObjectUtil.equals(entity.getIsDefault(), YesNoEnum.NO.getCode())) { return entity.getId(); } - // 发起旷世审核 - KsSkuSubmitDto dto = new KsSkuSubmitDto(); - dto.setSku_id(String.valueOf(entity.getId())); - dto.setSku_name(entity.getName()); - dto.setImg_urls(picList); - Map specs = new HashMap<>(); - specs.put("taste", entity.getSpecsTaste()); - specs.put("capacity", entity.getSpecsCapacity()); - specs.put("weight", entity.getSpecsWeight()); - dto.setSpecs(specs); - KsSkuSubmitVo data = remoterThirdKsService.skuSubmit(dto).getData(); - if (ObjectUtil.isEmpty(data) || !data.isSuccess()) throw new RuntimeException(data.getMessage()); - HardSpuEntity update = new HardSpuEntity(); - update.setId(entity.getId()); - update.setKsSkuId(data.getKs_sku_id()); - update.setKsStatus("0"); - update.setKsStatusTitle("待审核"); - update.setKsComments("提交审核"); - baseMapper.updateById(update); + submitKsSpu(entity); return entity.getId(); } + + /** + * 编辑 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Long edit(HardSpuEntity entity) { + HardSpuEntity spuDetail = baseMapper.selectById(entity.getId()); + if (ObjectUtil.isEmpty(spuDetail)) throw new RuntimeException("商品不存在"); + baseMapper.updateById(entity); + // 修改sku审批 + if (ObjectUtil.equals(entity.getIsDefault(), YesNoEnum.NO.getCode())) { + return entity.getId(); + } + if (ObjectUtil.isEmpty(entity.getKsSkuId())) { + getSelf().submitKsSpu(spuDetail); + } else { + getSelf().editKsSpu(spuDetail); + } + return entity.getId(); + } + + /** * 更新旷世商品审核进度 */ @@ -168,24 +173,13 @@ public class HardSpuServiceImpl extends ServiceImpl list) { if (ObjectUtil.isEmpty(list)) return; - List spuList = baseMapper.selectList(new LambdaQueryWrapper() - .in(HardSpuEntity::getId, list) - ); + List spuList = baseMapper.selectList(new LambdaQueryWrapper().in(HardSpuEntity::getId, list)); for (HardSpuEntity v : spuList) { if (ObjectUtil.notEqual(v.getSkuType(), HardKsSkuTypeEnum.SELF.getType())) continue; if (ObjectUtil.isNotEmpty(v.getKsSkuId())) { @@ -472,6 +466,76 @@ public class HardSpuServiceImpl extends ServiceImpl picList = Arrays.asList(pic.split(",")); + String imageBaseUrl = ParamResolver.getStr("IMAGE_BASE_URL"); + if (ObjectUtil.isEmpty(imageBaseUrl)) throw new RuntimeException("请配置图片基础路径"); + picList = picList.stream().map(v -> { + boolean isUrl = isValidUrl(v); + if (isUrl) return v; + return String.format("%s%s", imageBaseUrl, v); + }).toList(); + // 发起旷世审核 + KsSkuSubmitDto dto = new KsSkuSubmitDto(); + dto.setSku_id(String.valueOf(entity.getId())); + dto.setSku_name(entity.getName()); + dto.setImg_urls(picList); + Map specs = new HashMap<>(); + specs.put("taste", entity.getSpecsTaste()); + specs.put("capacity", entity.getSpecsCapacity()); + specs.put("weight", entity.getSpecsWeight()); + dto.setSpecs(specs); + KsSkuSubmitVo data = remoterThirdKsService.skuSubmit(dto).getData(); + if (ObjectUtil.isEmpty(data) || !data.isSuccess()) throw new RuntimeException(data.getMessage()); + HardSpuEntity update = new HardSpuEntity(); + update.setId(entity.getId()); + update.setKsSkuId(data.getKs_sku_id()); + update.setKsStatus("0"); + update.setKsStatusTitle("待审核"); + update.setKsComments("提交审核"); + baseMapper.updateById(update); + } + + /** + * 修改旷世sku审核 + */ + @Transactional(rollbackFor = Exception.class) + public void editKsSpu(HardSpuEntity entity) { + String pic = entity.getPic(); + pic = "https://nasa-voyager.oss-cn-beijing.aliyuncs.com/release/merchant_sku_img/watermark/202412021517-173bee3f2637499cb6b46e9b23d286c5.jpg"; + List picList = Arrays.asList(pic.split(",")); + String imageBaseUrl = ParamResolver.getStr("IMAGE_BASE_URL"); + if (ObjectUtil.isEmpty(imageBaseUrl)) throw new RuntimeException("请配置图片基础路径"); + picList = picList.stream().map(v -> { + boolean isUrl = isValidUrl(v); + if (isUrl) return v; + return String.format("%s%s", imageBaseUrl, v); + }).toList(); + // 修改旷世sku + KsSkuEditDto updateObj = new KsSkuEditDto(); + updateObj.setSku_name(entity.getName()); + updateObj.setImg_urls(picList); + Map specs = new HashMap<>(); + specs.put("taste", entity.getSpecsTaste()); + specs.put("capacity", entity.getSpecsCapacity()); + specs.put("weight", entity.getSpecsWeight()); + updateObj.setSpecs(specs); + KsSkuEditVo vo = remoterThirdKsService.skuEdit(updateObj, entity.getKsSkuId()).getData(); + if (ObjectUtil.isEmpty(vo) || !vo.isSuccess()) throw new RuntimeException(vo.getMessage()); + HardSpuEntity update = new HardSpuEntity(); + update.setId(entity.getId()); + update.setKsStatus("0"); + update.setKsStatusTitle("待审核"); + update.setKsComments("提交审核"); + baseMapper.updateById(update); + } + /** * 商品是否重复 */ @@ -486,8 +550,21 @@ public class HardSpuServiceImpl extends ServiceImpl 0; } + public boolean isValidUrl(String url) { + if (StrUtil.isBlank(url)) { + return false; + } + String URL_REGEX = "^(https?|ftp)://[\\w.-]+(?:\\/[\\w.-]*)*"; + Pattern URL_PATTERN = Pattern.compile(URL_REGEX); + return URL_PATTERN.matcher(url).matches(); + } + private void disposeList(List list, HardSpuDto dto) { if (ObjectUtil.isEmpty(list)) return; } + private HardSpuServiceImpl getSelf() { + return SpringUtil.getBean(getClass()); + } + } \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdKsService.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdKsService.java index b1feb03d2..0c65679f4 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdKsService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdKsService.java @@ -20,6 +20,13 @@ public interface RemoterThirdKsService { @PostMapping("/third-ks/sku-submit") R skuSubmit(@RequestBody KsSkuSubmitDto dto); + /** + * 常规SKU修改 + */ + @NoToken + @PostMapping("/third-ks/sku-edit") + R skuEdit(@RequestBody KsSkuEditDto dto, @RequestParam String ks_sku_id); + /** * 集合SKU提交审核(未公开) */ diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuEditDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuEditDto.java index 875007a74..fe9d20618 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuEditDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/ks/KsSkuEditDto.java @@ -2,14 +2,12 @@ package com.bsd.pjcloud.thirdparty.dto.ks; import lombok.Data; +import java.util.List; +import java.util.Map; + @Data public class KsSkuEditDto { - /** - * 该字段为超级收银员平台的sku_id,提交SKU审核后由系统返回,作为资源ID传递,是请求地址中的一部分,不需要提交到form表单 - */ - private String ks_sku_id; - /** * 该字段为使用方系统sku_name,建议使用品牌名+商品名,如统一冰红茶 */ @@ -23,7 +21,7 @@ public class KsSkuEditDto { /** * SKU图片仅在SKU因图片原因审核不通过的情况下支持修改,一旦SKU被审核通过,SKU图片将不再允许修改,如有相关需求,请重新申请SKU */ - private String img_urls; + private List img_urls; /** * 审核结果回调地址 @@ -33,5 +31,5 @@ public class KsSkuEditDto { /** * 该字段为SKU所对应的规格,包含口味、容量、重量,taste表示口味,capacity表示容量,单位:ml,weight表示重量,单位:g */ - private String specs; + private Map specs; } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuEditVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuEditVo.java index 131ea763f..54c2263bc 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuEditVo.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/ks/KsSkuEditVo.java @@ -3,7 +3,7 @@ package com.bsd.pjcloud.thirdparty.vo.ks; import lombok.Data; @Data -public class KsSkuEditVo { +public class KsSkuEditVo extends KsBaseInnerVo { /** * 该sku_id为使用方sku_id diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ks/ThirdKsApiController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ks/ThirdKsApiController.java index 031156c6f..8defd1ba1 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ks/ThirdKsApiController.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ks/ThirdKsApiController.java @@ -49,10 +49,10 @@ public class ThirdKsApiController { } @Inner - @Operation(summary = "SKU审核结果主动获取") + @Operation(summary = "常规SKU修改") @PostMapping("/sku-edit") - public R skuEdit(@RequestBody KsSkuEditDto dto) { - return R.ok(thirdKsApiService.skuEdit(dto)); + public R skuEdit(@RequestBody KsSkuEditDto dto, String ks_sku_id) { + return R.ok(thirdKsApiService.skuEdit(dto, ks_sku_id)); } @Inner diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKsApiService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKsApiService.java index f118b2f62..6037c5717 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKsApiService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKsApiService.java @@ -28,7 +28,7 @@ public interface ThirdKsApiService { /** * SKU审核结果主动获取 */ - KsSkuEditVo skuEdit(KsSkuEditDto dto); + KsSkuEditVo skuEdit(KsSkuEditDto dto, String ks_sku_id); /** * SKU删除 diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java index 296201c03..da4a7a2bc 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java @@ -141,14 +141,32 @@ public class ThirdKsApiServiceImpl implements ThirdKsApiService { * SKU审核结果主动获取 */ @Override - public KsSkuEditVo skuEdit(KsSkuEditDto dto) { + public KsSkuEditVo skuEdit(KsSkuEditDto dto, String ks_sku_id) { + dto.setNotify_url(ksDiscernConfig.getCallbackBaseUrl() + ksDiscernConfig.getCallbackSkuUrl()); + String body = JSONUtil.toJsonStr(dto); long startTime = System.currentTimeMillis(); KsBaseVo ksBaseVo = new KsBaseVo(); - KsApi.Api api = KsApi.SKU_EDIT.setBaseUrl(ksDiscernConfig.getBaseUrl()).setParams(BeanUtil.beanToMap(dto)); + KsApi.Api api = KsApi.SKU_EDIT.setBaseUrl(ksDiscernConfig.getBaseUrl()) + .setpath(ks_sku_id) + .setBody(body) + .setAccessKey(ksDiscernConfig.getAccessKey()) + .setSecretKey(ksDiscernConfig.getSecretKey()) + .setHost(ksDiscernConfig.getHost()); ThirdDoorLogEntity logEntity = api.getInitLogEntity(); logEntity.setReq(JSONUtil.toJsonStr(dto)); try { - + api.setBody(body); + String res = api.getHttpRequest().execute().body(); + if (ObjectUtil.isEmpty(res)) throw new RuntimeException("response响应为空"); + logEntity.setRes(res); + ksBaseVo = JSONUtil.toBean(res, KsBaseVo.class); + if (!ksBaseVo.isSuccess()) { + String errorLog = String.format("请求错误res|%s|url|%s|", res, api); + log.error(errorLog); + KsSkuEditVo errorVo = new KsSkuEditVo(); + errorVo.setMessage(ksBaseVo.getMsg()); + return errorVo; + } } catch (Exception e) { String error = String.format("|%s||skuEdit|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); log.error(error); From 934a70e0a01de8255791d67e22e6af4959f861cf Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Sun, 27 Apr 2025 12:15:49 +0800 Subject: [PATCH 12/27] =?UTF-8?q?fix:=E5=B8=B8=E8=A7=84SKU=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thirdparty/controller/ks/ThirdKsApiController.java | 2 +- .../bsd/pjcloud/thirdparty/service/ThirdKsApiService.java | 2 +- .../thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java | 2 +- .../java/com/bsd/pjcloud/thirdparty/utils/ks/api/KsApi.java | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ks/ThirdKsApiController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ks/ThirdKsApiController.java index 8defd1ba1..c34239c37 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ks/ThirdKsApiController.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ks/ThirdKsApiController.java @@ -51,7 +51,7 @@ public class ThirdKsApiController { @Inner @Operation(summary = "常规SKU修改") @PostMapping("/sku-edit") - public R skuEdit(@RequestBody KsSkuEditDto dto, String ks_sku_id) { + public R skuEdit(@RequestBody KsSkuEditDto dto, @RequestParam String ks_sku_id) { return R.ok(thirdKsApiService.skuEdit(dto, ks_sku_id)); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKsApiService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKsApiService.java index 6037c5717..28bd065f4 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKsApiService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKsApiService.java @@ -26,7 +26,7 @@ public interface ThirdKsApiService { KsSkuResultVo skuResult(KsSkuResultDto dto); /** - * SKU审核结果主动获取 + * 常规SKU修改 */ KsSkuEditVo skuEdit(KsSkuEditDto dto, String ks_sku_id); diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java index da4a7a2bc..0f62732fb 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ks/ThirdKsApiServiceImpl.java @@ -138,7 +138,7 @@ public class ThirdKsApiServiceImpl implements ThirdKsApiService { } /** - * SKU审核结果主动获取 + * 常规SKU修改 */ @Override public KsSkuEditVo skuEdit(KsSkuEditDto dto, String ks_sku_id) { diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/ks/api/KsApi.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/ks/api/KsApi.java index 404a86d44..73febe7b9 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/ks/api/KsApi.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/ks/api/KsApi.java @@ -38,11 +38,11 @@ public class KsApi { // SKU审核结果主动获取 public static final KsApi.Api SKU_RESULT = KsApi.Api.builder().url("/openapi/sc/v1/sku/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpGet.METHOD_NAME).contentType("application/json").build(); - // SKU识别结果回调通知 - public static final KsApi.Api SKU_EDIT = KsApi.Api.builder().url("/callback").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpPatch.METHOD_NAME).contentType("application/json").build(); + // 常规SKU修改 + public static final KsApi.Api SKU_EDIT = KsApi.Api.builder().url("/openapi/sc/v1/sku/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpPatch.METHOD_NAME).contentType("application/json").build(); // SKU审核结果回调通知 - public static final KsApi.Api SKU_SUBMIT_CALLBACK = KsApi.Api.builder().url("/openapi/sc/v1/sku/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT_CALLBACK).method(HttpPatch.METHOD_NAME).contentType("application/json").build(); + public static final KsApi.Api SKU_SUBMIT_CALLBACK = KsApi.Api.builder().url("/callback").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT_CALLBACK).method(HttpPatch.METHOD_NAME).contentType("application/json").build(); // SKU删除 public static final KsApi.Api SKU_DELETE = KsApi.Api.builder().url("/openapi/sc/v1/sku/%s").bizType(ThirdDoorKsApiTypeEnum.SKU_SUBMIT).method(HttpDelete.METHOD_NAME).contentType("application/json").build(); From 8a8c69975753059b92fedc92c67aaf646ebcef32 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Sun, 27 Apr 2025 17:17:17 +0800 Subject: [PATCH 13/27] =?UTF-8?q?fix:=E5=88=9B=E5=BB=BA=E9=92=B1=E5=8C=85b?= =?UTF-8?q?ug=20create:=E6=99=9A=E4=B8=8A=E8=AE=A2=E9=A4=90=E3=80=81?= =?UTF-8?q?=E5=B9=BF=E6=92=AD=E3=80=81=E5=8F=96=E9=A4=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pjcloud/hard/api/vo/HardBroadcastVo.java | 9 +++++++ .../controller/HardBroadcastController.java | 17 +++++++++++++ .../hard/service/HardBroadcastService.java | 2 +- .../hard/service/HardOrderService.java | 2 +- .../impl/HardBroadcastServiceImpl.java | 24 +++++++++++++++---- .../impl/order/HardOrderServiceImpl.java | 12 ++++++++-- .../resources/mapper/HardBroadcastMapper.xml | 5 +++- .../resources/mapper/spu/HardSpuMapper.xml | 1 + .../dto/hard/HardTakeFoodBroadcastMsg.java | 5 ++++ .../service/impl/SysRoleServiceImpl.java | 3 +++ .../service/impl/SysUserServiceImpl.java | 21 ++++++++++++---- .../wallet/api/feign/RemoteWalletService.java | 1 + .../controller/WalletManageController.java | 1 + .../service/impl/WalletManageServiceImpl.java | 2 ++ 14 files changed, 91 insertions(+), 14 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/HardBroadcastVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/HardBroadcastVo.java index 78572391e..6fd8326a4 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/HardBroadcastVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/HardBroadcastVo.java @@ -32,5 +32,14 @@ public class HardBroadcastVo extends HardBroadcastEntity implements BaseHardInte private String userDeptName; + /** + * 订单相关 + */ + private Long orderId; + + private String productDesc; + + private String payPrice; + } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardBroadcastController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardBroadcastController.java index debdb64a5..0bd1f02a0 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardBroadcastController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardBroadcastController.java @@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.log.annotation.SysLog; @@ -22,6 +23,7 @@ import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import java.time.LocalDate; import java.util.List; import java.util.Objects; @@ -37,6 +39,21 @@ public class HardBroadcastController { private final HardBroadcastService hardBroadcastService; + /* ************************************* start android start ************************************* */ + + @Operation(summary = "android查询今日的广播", description = "android查询今日的广播") + @GetMapping("/ad/today") + public R> androidToday(@ParameterObject Page page) { + HardBroadcastDto dto = new HardBroadcastDto(); + DataScope dataScope = null; + LocalDate today = LocalDate.now(); + dto.setIsDone(YesNoEnum.YES.getCode()); + dto.setCreateTimeList(new LocalDate[]{today, today.plusDays(1)}); + return R.ok(hardBroadcastService.scopePageJoin(page, dto, dataScope)); + } + + /* ************************************* start android start ************************************* */ + @Operation(summary = "分页查询", description = "分页查询") @GetMapping("/page-join") @PreAuthorize("@pms.hasPermission('hard_hardBroadcast_view')") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardBroadcastService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardBroadcastService.java index 240de46e7..30c12479c 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardBroadcastService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardBroadcastService.java @@ -21,5 +21,5 @@ public interface HardBroadcastService extends IService { /** * 完成硬件广播 */ - void doneBroadcast(HardOrderEntity orderdetail); + void doneBroadcast(HardOrderEntity orderdetail, UserInfo userInfo); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java index d1ef932a7..6a4a89bb6 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java @@ -73,7 +73,7 @@ public interface HardOrderService extends IService { /** * 核销二维码 */ - void cancelCode(HardOrderEntity order); + void cancelCode(HardOrderEntity order, UserInfo userInfo); /** * 生成二维码 diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardBroadcastServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardBroadcastServiceImpl.java index 6c5eb19ab..d289fabb0 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardBroadcastServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardBroadcastServiceImpl.java @@ -133,6 +133,7 @@ public class HardBroadcastServiceImpl extends ServiceImpl() - .eq(HardBroadcastEntity::getBizId, orderdetail.getId()) - ); + HardBroadcastEntity broadcastDetail = baseMapper.selectOne(new LambdaQueryWrapper().eq(HardBroadcastEntity::getBizId, orderdetail.getId())); if (ObjectUtil.isEmpty(broadcastDetail)) { log.error("|{}|doneBroadcast发送mq消息失败,广播不存在|{}|", TAG, orderdetail.getId()); return; @@ -168,6 +167,23 @@ public class HardBroadcastServiceImpl extends ServiceImpl list, HardBroadcastDto dto) { diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java index 869c1be6f..341d98bde 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java @@ -592,12 +592,15 @@ public class HardOrderServiceImpl extends ServiceImpl 0; } @@ -605,7 +608,7 @@ public class HardOrderServiceImpl extends ServiceImpl { + // 核销二维码 R result = remoteCodeUseService.cancelCode(id); if (ObjectUtil.isEmpty(result) || result.getCode() != 0 || !result.getData()) { throw new RuntimeException("核销二维码错误"); } + // 发送mq + if (ObjectUtil.equals(orderTypeEnum, HardOrderTypeEnum.RESERVE)) { + hardBroadcastService.doneBroadcast(order, userInfo); + } break; } } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardBroadcastMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardBroadcastMapper.xml index ff348dcc2..acae8298c 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardBroadcastMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardBroadcastMapper.xml @@ -76,8 +76,11 @@ \ No newline at end of file diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/dto/SysUserFaceDto.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/dto/SysUserFaceDto.java index c4d9eddc9..96b976f53 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/dto/SysUserFaceDto.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/dto/SysUserFaceDto.java @@ -29,4 +29,11 @@ public class SysUserFaceDto extends SysUserFaceEntity implements BaseIsIncludeTr private Boolean isInclude; private Boolean isFindCheckUser = false; + + /** + * 用户相关 + */ + private String username; + + private String phone; } diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserFaceMapper.xml b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserFaceMapper.xml index 52cdbec25..01080759f 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserFaceMapper.xml +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserFaceMapper.xml @@ -15,13 +15,19 @@ - select a.user_id, + select a.id, + a.auto_code, + a.user_id, + a.process_id, + a.process_status, a.face_img, a.create_by, a.create_time, + a.update_by, a.update_time, a.del_flag, a.tenant_id, + a.process_time, @@ -29,7 +35,8 @@ and a.user_id = #{pa.userId} - + + and a.process_status = #{pa.processStatus} @@ -43,6 +50,12 @@ left join sys_user u on u.user_id = a.user_id + + and u.name LIKE CONCAT('%', #{pa.username}, '%') + + + and u.phone LIKE CONCAT('%', #{pa.phone}, '%') + From 1ebd4f9bc8e98cd6e237db763f82e3dd54f3387d Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Mon, 28 Apr 2025 17:32:38 +0800 Subject: [PATCH 16/27] =?UTF-8?q?feat:=E8=AE=A2=E9=A4=90=E9=A2=84=E7=BA=A6?= =?UTF-8?q?=E6=92=AD=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/constant/order/HardOrderTypeEnum.java | 2 +- .../api/constant/order/HardPayTypeEnum.java | 2 +- .../pjcloud/hard/api/vo/HardBroadcastVo.java | 2 ++ .../impl/HardBroadcastServiceImpl.java | 12 ++++++---- .../resources/mapper/HardBroadcastMapper.xml | 1 + .../impl/WalletCodeUseServiceImpl.java | 22 ++++++++++++++----- 6 files changed, 30 insertions(+), 11 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java index a9f0a6d98..0f04101c9 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java @@ -14,7 +14,7 @@ import java.util.List; @Getter public enum HardOrderTypeEnum { BELOW("1", "线下购买"), - RESERVE("2", "线上订餐"), + RESERVE("2", "线上预定"), FOREIGN_TICKET("3", "外来人员"), STRIDE_DEPT("4", "跨单位"), ZY("5", "正元公务餐"), diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardPayTypeEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardPayTypeEnum.java index e051ec26a..eb5e16c03 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardPayTypeEnum.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardPayTypeEnum.java @@ -21,7 +21,7 @@ public enum HardPayTypeEnum { FACE("4", "人脸识别支付"), STRIDE_DEPT_QR_CODE("5", "跨单位二维码支付"), FOREIGN_TICKET_QR_CODE("6", "外来人员二维码支付"), - RESERVE_QR_CODE("7", "线上订餐二维码支付"), + RESERVE_QR_CODE("7", "线上二维码支付"), CASH("8", "现金支付"), HARD_DOOR_FREE_PAY("9", "智能柜免密支付"), ; diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/HardBroadcastVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/HardBroadcastVo.java index a6b7ea75f..229679387 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/HardBroadcastVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/HardBroadcastVo.java @@ -41,5 +41,7 @@ public class HardBroadcastVo extends HardBroadcastEntity implements BaseHardInte private Integer payPrice; + private String hourType; + } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardBroadcastServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardBroadcastServiceImpl.java index d6be3f06a..c28dda934 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardBroadcastServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardBroadcastServiceImpl.java @@ -195,10 +195,14 @@ public class HardBroadcastServiceImpl extends ServiceImpl() - .setSql(" broadcast_count = broadcast_count + " + dto.getCount()) - .in(HardBroadcastEntity::getId, dto.getIds()) - ); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper(); + if (ObjectUtil.equals(dto.getCount(), -1)) { + updateWrapper.setSql(" broadcast_count = 0 "); + } else { + updateWrapper.setSql(" broadcast_count = broadcast_count + " + dto.getCount()); + } + updateWrapper.in(HardBroadcastEntity::getId, dto.getIds()); + baseMapper.update(updateWrapper); } private void disposeList(List list, HardBroadcastDto dto) { diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardBroadcastMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardBroadcastMapper.xml index 35d7a595a..80964a436 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardBroadcastMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardBroadcastMapper.xml @@ -77,6 +77,7 @@ + + c.name as catgoryName + from mch_manage a + left join mch_catgory c on c.id = a.catgory_id + + + + order by a.sort desc , a.dept_id desc , a.create_time desc + + + \ No newline at end of file From 7847d799f905071eab211724797c6870ea09ea0c Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 29 Apr 2025 17:00:51 +0800 Subject: [PATCH 21/27] =?UTF-8?q?feat:=E5=AE=81=E6=B3=A2=E9=93=B6=E8=A1=8C?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thirdparty/dto/lb/LbH5LoginDto.java | 13 ++++ .../pjcloud/thirdparty/vo/lb/LbH5LoginVo.java | 18 +++++ .../pjcloud-thirdparty-biz/pom.xml | 6 ++ .../pjcloud/thirdparty/config/LbConfig.java | 26 +++++++ .../controller/lb/ThirdLbApiController.java | 28 ++++++++ .../thirdparty/service/ThirdLbApiService.java | 16 +++++ .../impl/lb/ThirdLbApiServiceImpl.java | 69 +++++++++++++++++++ .../thirdparty/utils/lb/api/LbApi.java | 34 +++++++++ .../src/main/resources/application.yml | 6 +- .../controller/mch/MchCatgoryController.java | 16 +++++ .../resources/mapper/mch/MchManageMapper.xml | 2 +- 11 files changed, 232 insertions(+), 2 deletions(-) create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/lb/LbH5LoginDto.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/lb/LbH5LoginVo.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/LbConfig.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/lb/ThirdLbApiController.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdLbApiService.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/lb/ThirdLbApiServiceImpl.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/lb/api/LbApi.java diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/lb/LbH5LoginDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/lb/LbH5LoginDto.java new file mode 100644 index 000000000..762768a91 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/lb/LbH5LoginDto.java @@ -0,0 +1,13 @@ +package com.bsd.pjcloud.thirdparty.dto.lb; + +import lombok.Data; + +@Data +public class LbH5LoginDto { + + /** + * 用户手机号 + */ + private String phone; + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/lb/LbH5LoginVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/lb/LbH5LoginVo.java new file mode 100644 index 000000000..6beb1955a --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/lb/LbH5LoginVo.java @@ -0,0 +1,18 @@ +package com.bsd.pjcloud.thirdparty.vo.lb; + +import lombok.Data; + +@Data +public class LbH5LoginVo { + + private Integer code; + + private String msg; + + private String h5Url; + + public boolean isSuccess() { + return code == 200; + } + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/pom.xml b/pjcloud-thirdparty/pjcloud-thirdparty-biz/pom.xml index 34dfa75ed..bfa98f443 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/pom.xml +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/pom.xml @@ -115,6 +115,12 @@ jjwt 0.9.1 + + + org.bouncycastle + bcprov-jdk15to18 + 1.66 + javax.xml.bind jaxb-api diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/LbConfig.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/LbConfig.java new file mode 100644 index 000000000..c29fad84f --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/LbConfig.java @@ -0,0 +1,26 @@ +package com.bsd.pjcloud.thirdparty.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties(prefix = "lb") +@Data +public class LbConfig { + + /** + * 请求基础路径 + */ + private String baseUrl; + + private String appId; + + private String appSecret; + + /** + * 企业编号 + */ + private String companyNumber; + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/lb/ThirdLbApiController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/lb/ThirdLbApiController.java new file mode 100644 index 000000000..5d20678dd --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/lb/ThirdLbApiController.java @@ -0,0 +1,28 @@ +package com.bsd.pjcloud.thirdparty.controller.lb; + +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.thirdparty.dto.lb.LbH5LoginDto; +import com.bsd.pjcloud.thirdparty.service.ThirdLbApiService; +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.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/third-lb") +@Tag(description = "third-lb", name = "宁波银行对接") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +public class ThirdLbApiController { + + private final ThirdLbApiService thirdLbApiService; + + @Operation(summary = "美好生活登录", description = "美好生活登录") + @PostMapping("/h5-login") + public R H5Login(@RequestBody LbH5LoginDto dto) { + return R.ok(thirdLbApiService.h5Login(dto)); + } + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdLbApiService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdLbApiService.java new file mode 100644 index 000000000..0543042bb --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdLbApiService.java @@ -0,0 +1,16 @@ +package com.bsd.pjcloud.thirdparty.service; + +import com.bsd.pjcloud.thirdparty.dto.lb.LbH5LoginDto; +import com.bsd.pjcloud.thirdparty.vo.lb.LbH5LoginVo; + +/** + * @author liusiyang_dxm + * @since 2025/4/29 + */ +public interface ThirdLbApiService { + + /** + * 美好生活登录 + */ + LbH5LoginVo h5Login(LbH5LoginDto dto); +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/lb/ThirdLbApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/lb/ThirdLbApiServiceImpl.java new file mode 100644 index 000000000..52b7a3e93 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/lb/ThirdLbApiServiceImpl.java @@ -0,0 +1,69 @@ +package com.bsd.pjcloud.thirdparty.service.impl.lb; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSONUtil; +import com.bsd.pjcloud.thirdparty.config.LbConfig; +import com.bsd.pjcloud.thirdparty.dto.lb.LbH5LoginDto; +import com.bsd.pjcloud.thirdparty.service.ThirdLbApiService; +import com.bsd.pjcloud.thirdparty.utils.door.api.DoorApi; +import com.bsd.pjcloud.thirdparty.utils.lb.api.LbApi; +import com.bsd.pjcloud.thirdparty.vo.ks.KsBaseVo; +import com.bsd.pjcloud.thirdparty.vo.lb.LbH5LoginVo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.digest.DigestUtils; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + + +@Service +@Validated +@Slf4j +@RequiredArgsConstructor +public class ThirdLbApiServiceImpl implements ThirdLbApiService { + + private static final String TAG = "宁波银行api"; + + private final LbConfig lbConfig; + + @Override + public LbH5LoginVo h5Login(LbH5LoginDto dto) { + LbH5LoginVo ksBaseVo = new LbH5LoginVo(); + String phone = dto.getPhone(); + String signPhone = phone; + long timeMillis = System.currentTimeMillis(); + String signature = apiCountersign(dto.getPhone(), timeMillis); + Map queryMap = new HashMap<>(); + queryMap.put("companyNumber", lbConfig.getCompanyNumber()); + queryMap.put("appId", lbConfig.getAppId()); + queryMap.put("phone", signPhone); + queryMap.put("timestamp", String.valueOf(timeMillis)); + queryMap.put("signature", signature); + // 发送请求 + DoorApi.Api h5Login = LbApi.H5_LOGIN; + try { + String res = HttpRequest.post(lbConfig.getBaseUrl() + h5Login.getUrl()).contentType(h5Login.getContentType()).body(JSONUtil.toJsonStr(queryMap)).execute().body(); + if (ObjectUtil.isEmpty(res)) throw new RuntimeException("response响应为空"); + ksBaseVo = JSONUtil.toBean(res, LbH5LoginVo.class); + } catch (Exception e) { + String error = String.format("|%s||skuSubmit|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); + log.error(error); + } + return ksBaseVo; + } + + + // 加签 + public String apiCountersign(String phone, Long timestamp) { + String str = String.format("companyNumber=%s&appId=%s&phone=%s×tamp=%s&secret=%s"); + str = String.format(str, lbConfig.getCompanyNumber(), lbConfig.getAppId(), phone, timestamp, lbConfig.getAppSecret()); + // 使用 SHA-256 进行哈希计算,并返回十六进制字符串。 + String sha256 = DigestUtils.sha256Hex(str); + return sha256; + } +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/lb/api/LbApi.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/lb/api/LbApi.java new file mode 100644 index 000000000..6f006dd08 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/lb/api/LbApi.java @@ -0,0 +1,34 @@ +package com.bsd.pjcloud.thirdparty.utils.lb.api; + +import com.bsd.pjcloud.thirdparty.constant.door.ThirdDoorApiTypeEnum; +import com.bsd.pjcloud.thirdparty.utils.door.api.DoorApi; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.UtilityClass; +import org.apache.http.client.methods.HttpPost; + + +@UtilityClass +public class LbApi { + + // 美好生活登录(直连模式) + public static final DoorApi.Api H5_LOGIN = DoorApi.Api.builder().url("/mall/xhr/authLogin/thirdApp").bizType(ThirdDoorApiTypeEnum.REGISTER).method(HttpPost.METHOD_NAME).contentType("application/json").build(); + + // 美好生活登录(分行中转模式) + public static final DoorApi.Api H5_LOGIN_OPEN = DoorApi.Api.builder().url("/mall/xhr/authLogin/thirdAppOpen").bizType(ThirdDoorApiTypeEnum.REGISTER).method(HttpPost.METHOD_NAME).contentType("application/json").build(); + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class Api { + private String url; + + private String method; + + private String contentType; + + } +} 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 5d9cd0739..b512bd024 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml @@ -88,7 +88,11 @@ zy: # callback-base-url: http://h1yzkslmyx.ny.takin.cc # callback-recognition-url: /third/third-ks/callback/recognition # callback-sku-url: /third/third-ks/callback/sku - +lb: + base-url: https://elss-sit.nbcb.com.cn + app-id: c4b0a38e9ba5419eab9b651dd23db462 + app-secret: iW9H6BT2AMXg2XnN2Eq+r6ISossJNNh97nyLwrrOrDY= + company-number: p6VQYhHZ sms: diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchCatgoryController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchCatgoryController.java index f448f0f44..6f00156cb 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchCatgoryController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchCatgoryController.java @@ -35,6 +35,22 @@ public class MchCatgoryController { private final MchCatgoryService mchCatgoryService; + /* ************************************* start 移动端 start ************************************* */ + + @Operation(summary = "app下拉查询", description = "app下拉查询") + @GetMapping("/app/select") + public R appSelect(@ParameterObject Page page, @ParameterObject MchCatgoryEntity mchCatgory) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(mchCatgory.getBizType()), MchCatgoryEntity::getBizType, mchCatgory.getBizType()) + .like(ObjectUtil.isNotEmpty(mchCatgory.getName()), MchCatgoryEntity::getName, mchCatgory.getName()) + .orderByDesc(MchCatgoryEntity::getSort) + .orderByDesc(MchCatgoryEntity::getCreateTime) + .orderByDesc(MchCatgoryEntity::getId); + return R.ok(mchCatgoryService.list(page, wrapper)); + } + + /* ************************************* end 移动端 end ************************************* */ + @Operation(summary = "下拉查询(没有权限)", description = "下拉查询(没有权限)") @GetMapping("/select") public R select(@ParameterObject Page page, @ParameterObject MchCatgoryEntity mchCatgory) { diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchManageMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchManageMapper.xml index 370543bfa..62469d3be 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchManageMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchManageMapper.xml @@ -78,7 +78,7 @@ and a.parent_id = #{dto.parentId} - + and a.parent_id = -1 From 2feefc9659491ee2bbb51fbbcd50b46dba548cf8 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 29 Apr 2025 17:03:13 +0800 Subject: [PATCH 22/27] 11 --- .../main/java/com/bsd/pjcloud/wallet/mapper/MchManageMapper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/MchManageMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/MchManageMapper.java index ebb40497c..a4afa46e0 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/MchManageMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/MchManageMapper.java @@ -26,6 +26,7 @@ public interface MchManageMapper extends PjcloudBaseMapper { .selectAll(MchManageEntity.class) .eqIfExists(MchManageEntity::getVisibleMobile, dto.getVisibleMobile()) .eqIfExists(MchManageEntity::getParentId, dto.getParentId()) + .eqIfExists(MchManageEntity::getCatgoryId, dto.getCatgoryId()) .eq(dto.getParentIsNull(), MchManageEntity::getParentId, -1L) .likeIfExists(MchManageEntity::getName, dto.getName()) .in(ObjectUtil.isNotEmpty(dto.getDeptIds()), MchManageEntity::getDeptId, dto.getDeptIds()) From 4f3a8c1883ad061e801164b7bfd0baafc26eb75d Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 30 Apr 2025 10:02:41 +0800 Subject: [PATCH 23/27] =?UTF-8?q?feat:=E5=AE=81=E6=B3=A2=E9=93=B6=E8=A1=8C?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=8A=A0=E8=A7=A3=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thirdparty/dto/lb/LbH5LoginDto.java | 2 + .../pjcloud/thirdparty/config/LbConfig.java | 5 ++ .../controller/lb/ThirdLbApiController.java | 5 +- .../impl/lb/ThirdLbApiServiceImpl.java | 8 +-- .../utils/lb/tool/LbRetailSignUtils.java | 56 +++++++++++++++++++ .../src/main/resources/application.yml | 4 +- 6 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/lb/tool/LbRetailSignUtils.java diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/lb/LbH5LoginDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/lb/LbH5LoginDto.java index 762768a91..0aeb82cb9 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/lb/LbH5LoginDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/lb/LbH5LoginDto.java @@ -1,5 +1,6 @@ package com.bsd.pjcloud.thirdparty.dto.lb; +import jakarta.validation.constraints.NotEmpty; import lombok.Data; @Data @@ -8,6 +9,7 @@ public class LbH5LoginDto { /** * 用户手机号 */ + @NotEmpty(message = "手机号不能为空") private String phone; } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/LbConfig.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/LbConfig.java index c29fad84f..7e445b4fc 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/LbConfig.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/LbConfig.java @@ -23,4 +23,9 @@ public class LbConfig { */ private String companyNumber; + /** + * 国密sm4密钥 + */ + private String sm4Key; + } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/lb/ThirdLbApiController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/lb/ThirdLbApiController.java index 5d20678dd..5ce18cd33 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/lb/ThirdLbApiController.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/lb/ThirdLbApiController.java @@ -1,11 +1,13 @@ package com.bsd.pjcloud.thirdparty.controller.lb; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.thirdparty.dto.lb.LbH5LoginDto; import com.bsd.pjcloud.thirdparty.service.ThirdLbApiService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpHeaders; import org.springframework.web.bind.annotation.*; @@ -19,9 +21,10 @@ public class ThirdLbApiController { private final ThirdLbApiService thirdLbApiService; + @Inner(value = false) @Operation(summary = "美好生活登录", description = "美好生活登录") @PostMapping("/h5-login") - public R H5Login(@RequestBody LbH5LoginDto dto) { + public R H5Login(@Valid @RequestBody LbH5LoginDto dto) { return R.ok(thirdLbApiService.h5Login(dto)); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/lb/ThirdLbApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/lb/ThirdLbApiServiceImpl.java index 52b7a3e93..fa36fec6d 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/lb/ThirdLbApiServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/lb/ThirdLbApiServiceImpl.java @@ -8,7 +8,7 @@ import com.bsd.pjcloud.thirdparty.dto.lb.LbH5LoginDto; import com.bsd.pjcloud.thirdparty.service.ThirdLbApiService; import com.bsd.pjcloud.thirdparty.utils.door.api.DoorApi; import com.bsd.pjcloud.thirdparty.utils.lb.api.LbApi; -import com.bsd.pjcloud.thirdparty.vo.ks.KsBaseVo; +import com.bsd.pjcloud.thirdparty.utils.lb.tool.LbRetailSignUtils; import com.bsd.pjcloud.thirdparty.vo.lb.LbH5LoginVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -35,7 +35,7 @@ public class ThirdLbApiServiceImpl implements ThirdLbApiService { public LbH5LoginVo h5Login(LbH5LoginDto dto) { LbH5LoginVo ksBaseVo = new LbH5LoginVo(); String phone = dto.getPhone(); - String signPhone = phone; + String signPhone = LbRetailSignUtils.sm4Encrypt(phone, lbConfig.getSm4Key()); long timeMillis = System.currentTimeMillis(); String signature = apiCountersign(dto.getPhone(), timeMillis); Map queryMap = new HashMap<>(); @@ -51,7 +51,7 @@ public class ThirdLbApiServiceImpl implements ThirdLbApiService { if (ObjectUtil.isEmpty(res)) throw new RuntimeException("response响应为空"); ksBaseVo = JSONUtil.toBean(res, LbH5LoginVo.class); } catch (Exception e) { - String error = String.format("|%s||skuSubmit|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); + String error = String.format("|%s||h5Login|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); log.error(error); } return ksBaseVo; @@ -60,7 +60,7 @@ public class ThirdLbApiServiceImpl implements ThirdLbApiService { // 加签 public String apiCountersign(String phone, Long timestamp) { - String str = String.format("companyNumber=%s&appId=%s&phone=%s×tamp=%s&secret=%s"); + String str = "companyNumber=%s&appId=%s&phone=%s×tamp=%s&secret=%s"; str = String.format(str, lbConfig.getCompanyNumber(), lbConfig.getAppId(), phone, timestamp, lbConfig.getAppSecret()); // 使用 SHA-256 进行哈希计算,并返回十六进制字符串。 String sha256 = DigestUtils.sha256Hex(str); diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/lb/tool/LbRetailSignUtils.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/lb/tool/LbRetailSignUtils.java new file mode 100644 index 000000000..2a3b65e13 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/lb/tool/LbRetailSignUtils.java @@ -0,0 +1,56 @@ +package com.bsd.pjcloud.thirdparty.utils.lb.tool; + +import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; +import org.bouncycastle.jce.provider.BouncyCastleProvider; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.Security; +import java.util.Base64; + +@Slf4j +@UtilityClass +public class LbRetailSignUtils { + + static { + // 添加安全提供者(SM2,SM3,SM4等加密算法,CBC、CFB等加密模式,PKCS7Padding等填充方式,不在Java标准库中,由BouncyCastleProvider实现) + Security.addProvider(new BouncyCastleProvider()); + } + + public static String sm4Encrypt(String plainString, String key) { + String cipherString = null; + try { + String algorithm = "SM4"; + SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), algorithm); + Cipher cipher = Cipher.getInstance(algorithm + "/ECB/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); + byte[] cipherBytes = cipher.doFinal(plainString.getBytes(StandardCharsets.UTF_8)); + cipherString = Base64.getEncoder().encodeToString(cipherBytes); + } catch (Exception e) { + e.printStackTrace(); + } + return cipherString; + } + + + /** + * SM4,商业密码(Shang Mi4)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布,相关标准为“GM/T 0002-2012《SM4分组密码算法》”。 + */ + public static String sm4Decrypt(String cipherString, String key) { + String plainString = null; + try { + String algorithm = "SM4"; + SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), algorithm); + Cipher cipher = Cipher.getInstance(algorithm + "/ECB/PKCS5Padding"); + cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); + byte[] cipherBytes = cipher.doFinal(Base64.getDecoder().decode(cipherString)); + plainString = new String(cipherBytes); + } catch (Exception e) { + e.printStackTrace(); + } + return plainString; + } + +} 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 b512bd024..63f26e0fa 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml @@ -89,10 +89,12 @@ zy: # callback-recognition-url: /third/third-ks/callback/recognition # callback-sku-url: /third/third-ks/callback/sku lb: - base-url: https://elss-sit.nbcb.com.cn + # base-url: https://elss-sit.nbcb.com.cn + base-url: https://elss-uat.nbcb.com.cn app-id: c4b0a38e9ba5419eab9b651dd23db462 app-secret: iW9H6BT2AMXg2XnN2Eq+r6ISossJNNh97nyLwrrOrDY= company-number: p6VQYhHZ + sm4-key: 1234567812345678 sms: From 3c20ebf10a0c552afb89006afd24b60ca16e0d56 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 30 Apr 2025 11:13:41 +0800 Subject: [PATCH 24/27] =?UTF-8?q?feat:=E7=AC=AC=E4=B8=89=E6=96=B9=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/1000pjcloudx_thirdparty.sql | 27 ++++ .../constant/pay/ThirdPayBizTypeEnum.java | 28 +++++ .../constant/pay/ThirdPayVoStatusEnum.java | 31 +++++ .../pjcloud/thirdparty/dto/pay/PayDto.java | 29 +++++ .../pjcloud/thirdparty/dto/pay/RefundDto.java | 18 +++ .../thirdparty/dto/pay/ThirdPayLogDto.java | 13 ++ .../entity/api/ThirdPayLogEntity.java | 118 ++++++++++++++++++ .../bsd/pjcloud/thirdparty/vo/pay/PayVo.java | 25 ++++ .../pjcloud/thirdparty/vo/pay/RefundVo.java | 30 +++++ .../controller/pay/ThirdPayLogController.java | 89 +++++++++++++ .../mapper/pay/ThirdPayLogMapper.java | 11 ++ .../service/ThirdPayApiService.java | 21 ++++ .../service/ThirdPayLogService.java | 8 ++ .../impl/pay/ThirdPayApiServiceImpl.java | 55 ++++++++ .../impl/pay/ThirdPayLogServiceImpl.java | 21 ++++ .../resources/mapper/ThirdPayLogMapper.xml | 23 ++++ 16 files changed, 547 insertions(+) create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayBizTypeEnum.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/PayDto.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/RefundDto.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/ThirdPayLogDto.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/api/ThirdPayLogEntity.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayVo.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/RefundVo.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayLogController.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/mapper/pay/ThirdPayLogMapper.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayLogService.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayLogServiceImpl.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/mapper/ThirdPayLogMapper.xml diff --git a/db/1000pjcloudx_thirdparty.sql b/db/1000pjcloudx_thirdparty.sql index 896b8a121..38063ba7d 100644 --- a/db/1000pjcloudx_thirdparty.sql +++ b/db/1000pjcloudx_thirdparty.sql @@ -58,6 +58,33 @@ CREATE TABLE `third_door_log` COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT ='智能柜日志'; +-- ---------------------------- +-- Table structure for third_pay_log +-- ---------------------------- +DROP TABLE IF EXISTS `third_pay_log`; +CREATE TABLE `third_pay_log` +( + `id` bigint NOT NULL COMMENT '主键', + `pay_source_type` varchar(32) NOT NULL COMMENT '支付发起方类型id', + `biz_type` varchar(32) NOT NULL COMMENT '支付类型', + `biz_id` varchar(2048) DEFAULT NULL COMMENT '支付类型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 '调用错误', + `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-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayBizTypeEnum.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayBizTypeEnum.java new file mode 100644 index 000000000..66aa05084 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayBizTypeEnum.java @@ -0,0 +1,28 @@ +package com.bsd.pjcloud.thirdparty.constant.pay; + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 第三方统一支付类型 + */ +@AllArgsConstructor +@Getter +public enum ThirdPayBizTypeEnum { + + LB_PAY("10", "宁波银行支付"), + ; + + private final String type; + private final String description; + + public static ThirdPayBizTypeEnum valueOfByType(String type) { + if (ObjectUtil.isEmpty(type)) return null; + return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); + } + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java new file mode 100644 index 000000000..2b66394c0 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java @@ -0,0 +1,31 @@ +package com.bsd.pjcloud.thirdparty.constant.pay; + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 支付状态返回枚举 + */ +@AllArgsConstructor +@Getter +public enum ThirdPayVoStatusEnum { + + SUCCESS(200, "成功"), + SIGN_ERROR(400, "签名验证失败"), + USER_EXIST(501, "用户不存在"), + ORDER_EXIST(502, "订单不存在"), + BALANCE_NOT_ENOUGH(505, "用户余额不足"), + ; + + private final int type; + private final String description; + + public static ThirdPayVoStatusEnum valueOfByType(String type) { + if (ObjectUtil.isEmpty(type)) return null; + return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); + } + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/PayDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/PayDto.java new file mode 100644 index 000000000..63a2e8e74 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/PayDto.java @@ -0,0 +1,29 @@ +package com.bsd.pjcloud.thirdparty.dto.pay; + +import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayBizTypeEnum; +import lombok.Data; + +@Data +public class PayDto { + + /** + * 用户id + */ + private Long userId; + + /** + * 第三方唯一id + */ + private String thirdOrderId; + + /** + * 第三方统一支付类型 + */ + private ThirdPayBizTypeEnum bizType; + + /** + * 扣款金额(分) + */ + private Integer money; + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/RefundDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/RefundDto.java new file mode 100644 index 000000000..f0e03b7d7 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/RefundDto.java @@ -0,0 +1,18 @@ +package com.bsd.pjcloud.thirdparty.dto.pay; + +import lombok.Data; + +@Data +public class RefundDto { + + /** + * 用户id + */ + private Long userId; + + /** + * 平台唯一订单号 + */ + private String platformOrderId; + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/ThirdPayLogDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/ThirdPayLogDto.java new file mode 100644 index 000000000..ea1982343 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/ThirdPayLogDto.java @@ -0,0 +1,13 @@ +package com.bsd.pjcloud.thirdparty.dto.pay; + +import com.bsd.pjcloud.thirdparty.entity.api.ThirdPayLogEntity; +import lombok.Data; + +import java.time.LocalDate; + +@Data +public class ThirdPayLogDto extends ThirdPayLogEntity { + + private LocalDate[] createTimeList; + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/api/ThirdPayLogEntity.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/api/ThirdPayLogEntity.java new file mode 100644 index 000000000..abc6e7d01 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/api/ThirdPayLogEntity.java @@ -0,0 +1,118 @@ +package com.bsd.pjcloud.thirdparty.entity.api; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.bsd.pjcloud.common.core.util.TenantTable; +import java.time.LocalDateTime; + +/** + * 第三方支付日志 + */ +@Data +@TenantTable +@TableName("third_pay_log") +@EqualsAndHashCode(callSuper = true) +@Schema(description = "第三方支付日志") +public class ThirdPayLogEntity extends Model { + + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + @Schema(description="主键") + private Long id; + + /** + * 支付发起方类型id + */ + @Schema(description="支付发起方类型id") + private String paySourceType; + + /** + * 支付类型 + */ + @Schema(description="支付类型") + private String bizType; + + /** + * 支付类型id + */ + @Schema(description="支付类型id") + private String bizId; + + /** + * api-url + */ + @Schema(description="api-url") + private String apiUrl; + + /** + * res + */ + @Schema(description="res") + private String res; + + /** + * req + */ + @Schema(description="req") + private String req; + + /** + * 调用错误 + */ + @Schema(description="调用错误") + private String error; + + /** + * 耗时(毫秒) + */ + @Schema(description="耗时(毫秒)") + private String timeConsuming; + + /** + * 创建人 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description="创建人") + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description="创建时间") + private LocalDateTime createTime; + + /** + * 更新人 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description="更新人") + private String updateBy; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description="更新时间") + private LocalDateTime updateTime; + + /** + * 删除时间 + */ + @TableLogic + @TableField(fill = FieldFill.INSERT) + @Schema(description="删除时间") + private String delFlag; + + /** + * tenantId + */ + @Schema(description="tenantId") + private Long tenantId; +} \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayVo.java new file mode 100644 index 000000000..285bd327d --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayVo.java @@ -0,0 +1,25 @@ +package com.bsd.pjcloud.thirdparty.vo.pay; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class PayVo { + + /** + * 平台唯一订单号 + */ + private String platformOrderId; + + /** + * 第三方唯一订单号 + */ + private String thirdOrderId; + + /** + * 平台支付时间 + */ + private LocalDateTime payTime; + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/RefundVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/RefundVo.java new file mode 100644 index 000000000..df4074534 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/RefundVo.java @@ -0,0 +1,30 @@ +package com.bsd.pjcloud.thirdparty.vo.pay; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class RefundVo { + + /** + * 平台唯一订单号 + */ + private String platformOrderId; + + /** + * 平台唯一退款单号 + */ + private String platformRefundId; + + /** + * 第三方唯一订单号 + */ + private String thirdOrderId; + + /** + * 退款时间 + */ + private LocalDateTime refundTime; + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayLogController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayLogController.java new file mode 100644 index 000000000..82b5487f7 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayLogController.java @@ -0,0 +1,89 @@ +package com.bsd.pjcloud.thirdparty.controller.pay; + +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; +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.thirdparty.dto.pay.ThirdPayLogDto; +import com.bsd.pjcloud.thirdparty.entity.api.ThirdPayLogEntity; +import com.bsd.pjcloud.thirdparty.service.ThirdPayLogService; +import org.springframework.security.access.prepost.PreAuthorize; +import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.http.HttpHeaders; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + * 第三方支付日志 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/thirdPayLog") +@Tag(description = "thirdPayLog", name = "第三方支付日志管理") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +public class ThirdPayLogController { + + private final ThirdPayLogService thirdPayLogService; + + @Operation(summary = "分页查询", description = "分页查询") + @GetMapping("/page") + @PreAuthorize("@pms.hasPermission('third_thirdPayLog_view')") + public R getThirdPayLogPage(@ParameterObject Page page, @ParameterObject ThirdPayLogDto dto) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(dto.getPaySourceType()), ThirdPayLogEntity::getPaySourceType, dto.getPaySourceType()) + .eq(ObjectUtil.isNotEmpty(dto.getBizType()), ThirdPayLogEntity::getBizType, dto.getBizType()) + .between(ObjectUtil.isNotEmpty(dto.getCreateTimeList()), ThirdPayLogEntity::getCreateTime, dto.getCreateTimeList()[0], dto.getCreateTimeList()[1]) + .orderByDesc(ThirdPayLogEntity::getCreateTime) + .orderByDesc(ThirdPayLogEntity::getId); + return R.ok(thirdPayLogService.page(page, wrapper)); + } + + @Operation(summary = "通过id查询", description = "通过id查询") + @GetMapping("/{id}") + @PreAuthorize("@pms.hasPermission('third_thirdPayLog_view')") + public R getById(@PathVariable("id") Long id) { + return R.ok(thirdPayLogService.getById(id)); + } + + @Operation(summary = "新增第三方支付日志", description = "新增第三方支付日志") + @SysLog("新增第三方支付日志") + @PostMapping + @PreAuthorize("@pms.hasPermission('third_thirdPayLog_add')") + public R save(@RequestBody ThirdPayLogEntity thirdPayLog) { + return R.ok(thirdPayLogService.save(thirdPayLog)); + } + + @Operation(summary = "修改第三方支付日志", description = "修改第三方支付日志") + @SysLog("修改第三方支付日志") + @PutMapping + @PreAuthorize("@pms.hasPermission('third_thirdPayLog_edit')") + public R updateById(@RequestBody ThirdPayLogEntity thirdPayLog) { + return R.ok(thirdPayLogService.updateById(thirdPayLog)); + } + + @Operation(summary = "通过id删除第三方支付日志", description = "通过id删除第三方支付日志") + @SysLog("通过id删除第三方支付日志") + @DeleteMapping + @PreAuthorize("@pms.hasPermission('third_thirdPayLog_del')") + public R removeById(@RequestBody Long[] ids) { + return R.ok(thirdPayLogService.removeBatchByIds(CollUtil.toList(ids))); + } + + @ResponseExcel + @GetMapping("/export") + @PreAuthorize("@pms.hasPermission('third_thirdPayLog_export')") + public List export(ThirdPayLogEntity thirdPayLog, Long[] ids) { + return thirdPayLogService.list(Wrappers.lambdaQuery(thirdPayLog).in(ArrayUtil.isNotEmpty(ids), ThirdPayLogEntity::getId, ids)); + } +} \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/mapper/pay/ThirdPayLogMapper.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/mapper/pay/ThirdPayLogMapper.java new file mode 100644 index 000000000..24e85e41d --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/mapper/pay/ThirdPayLogMapper.java @@ -0,0 +1,11 @@ +package com.bsd.pjcloud.thirdparty.mapper.pay; + +import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.thirdparty.entity.api.ThirdPayLogEntity; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ThirdPayLogMapper extends PjcloudBaseMapper { + + +} \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java new file mode 100644 index 000000000..fc995e35c --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java @@ -0,0 +1,21 @@ +package com.bsd.pjcloud.thirdparty.service; + + +import com.bsd.pjcloud.thirdparty.dto.pay.PayDto; +import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto; +import com.bsd.pjcloud.thirdparty.vo.pay.PayVo; +import com.bsd.pjcloud.thirdparty.vo.pay.RefundVo; + +public interface ThirdPayApiService { + + /** + * 扣款 + */ + PayVo pay(PayDto dto); + + /** + * 退款 + */ + RefundVo refund(RefundDto dto); + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayLogService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayLogService.java new file mode 100644 index 000000000..80ea9286e --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayLogService.java @@ -0,0 +1,8 @@ +package com.bsd.pjcloud.thirdparty.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.bsd.pjcloud.thirdparty.entity.api.ThirdPayLogEntity; + +public interface ThirdPayLogService extends IService { + +} \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java new file mode 100644 index 000000000..ffe01dc3d --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java @@ -0,0 +1,55 @@ +package com.bsd.pjcloud.thirdparty.service.impl.pay; + +import com.bsd.pjcloud.thirdparty.dto.pay.PayDto; +import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto; +import com.bsd.pjcloud.thirdparty.service.ThirdPayApiService; +import com.bsd.pjcloud.thirdparty.vo.pay.PayVo; +import com.bsd.pjcloud.thirdparty.vo.pay.RefundVo; +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 ThirdPayApiServiceImpl implements ThirdPayApiService { + + private final String TAG = "第三方支付"; + + /** + * 扣款 + */ + @Override + public PayVo pay(PayDto dto) { + PayVo vo = new PayVo(); + try { + + } catch (Exception e) { + + } finally { + + } + return vo; + } + + /** + * 退款 + */ + @Override + public RefundVo refund(RefundDto dto) { + RefundVo vo = new RefundVo(); + try { + + } catch (Exception e) { + + } finally { + + } + return vo; + } +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayLogServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayLogServiceImpl.java new file mode 100644 index 000000000..30ad6a876 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayLogServiceImpl.java @@ -0,0 +1,21 @@ +package com.bsd.pjcloud.thirdparty.service.impl.pay; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.thirdparty.entity.api.ThirdPayLogEntity; +import com.bsd.pjcloud.thirdparty.mapper.pay.ThirdPayLogMapper; +import com.bsd.pjcloud.thirdparty.service.ThirdPayLogService; +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 ThirdPayLogServiceImpl extends ServiceImpl implements ThirdPayLogService { + +} \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/mapper/ThirdPayLogMapper.xml b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/mapper/ThirdPayLogMapper.xml new file mode 100644 index 000000000..f9c546a03 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/mapper/ThirdPayLogMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 970bae2ddb1155781b63db50889a99850e0e9898 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 30 Apr 2025 15:43:21 +0800 Subject: [PATCH 25/27] =?UTF-8?q?feat:=E7=AC=AC=E4=B8=89=E6=96=B9=E5=AF=86?= =?UTF-8?q?=E9=92=A5=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/1000pjcloudx_thirdparty.sql | 26 ++++ .../thirdparty/constant/ThirdKeyTypeEnum.java | 28 +++++ .../constant/pay/ThirdPayApiBizTypeEnum.java | 28 +++++ ...num.java => ThirdPaySoureBizTypeEnum.java} | 9 +- .../pjcloud/thirdparty/dto/pay/PayDto.java | 4 +- .../entity/ThirdKeyManageEntity.java | 115 ++++++++++++++++++ .../entity/api/ThirdPayLogEntity.java | 6 +- .../thirdparty/vo/pay/PayGetWalletInfoVo.java | 10 ++ .../controller/ThirdKeyManageController.java | 80 ++++++++++++ .../controller/pay/ThirdPayApiController.java | 34 ++++++ .../controller/pay/ThirdPayLogController.java | 12 +- .../mapper/ThirdKeyManageMapper.java | 11 ++ .../service/ThirdKeyManageService.java | 23 ++++ .../service/ThirdPayApiService.java | 5 + .../impl/ThirdKeyManageServiceImpl.java | 84 +++++++++++++ .../impl/lb/ThirdLbApiServiceImpl.java | 10 +- .../impl/pay/ThirdPayApiServiceImpl.java | 40 +++++- .../src/main/resources/application.yml | 56 ++++----- .../resources/mapper/ThirdKeyManageMapper.xml | 22 ++++ 19 files changed, 554 insertions(+), 49 deletions(-) create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/ThirdKeyTypeEnum.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayApiBizTypeEnum.java rename pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/{ThirdPayBizTypeEnum.java => ThirdPaySoureBizTypeEnum.java} (70%) create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/ThirdKeyManageEntity.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayGetWalletInfoVo.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ThirdKeyManageController.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayApiController.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/mapper/ThirdKeyManageMapper.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKeyManageService.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ThirdKeyManageServiceImpl.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/mapper/ThirdKeyManageMapper.xml diff --git a/db/1000pjcloudx_thirdparty.sql b/db/1000pjcloudx_thirdparty.sql index 38063ba7d..caa10d65f 100644 --- a/db/1000pjcloudx_thirdparty.sql +++ b/db/1000pjcloudx_thirdparty.sql @@ -85,6 +85,32 @@ CREATE TABLE `third_pay_log` COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT ='第三方支付日志'; +-- ---------------------------- +-- Table structure for third_key_manage +-- ---------------------------- +DROP TABLE IF EXISTS `third_key_manage`; +CREATE TABLE `third_key_manage` +( + `id` bigint NOT NULL COMMENT '主键', + `name` varchar(32) NOT NULL COMMENT '第三方名字', + `biz_type` varchar(32) NOT NULL COMMENT '第三方类型id(常量)', + `app_key` varchar(256) DEFAULT NULL COMMENT 'appKey', + `app_secret` varchar(256) DEFAULT NULL COMMENT 'appSecret', + `field_key` varchar(256) DEFAULT NULL COMMENT '字段加密key', + `status` varchar(32) DEFAULT '1' COMMENT '状态', + `remark` varchar(1024) 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-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/ThirdKeyTypeEnum.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/ThirdKeyTypeEnum.java new file mode 100644 index 000000000..a58fbcbc6 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/ThirdKeyTypeEnum.java @@ -0,0 +1,28 @@ +package com.bsd.pjcloud.thirdparty.constant; + +import cn.hutool.core.util.ObjectUtil; +import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayApiBizTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 第三方key类型 + */ +@AllArgsConstructor +@Getter +public enum ThirdKeyTypeEnum { + + LB("10", "宁波银行"), + ; + + private final String type; + private final String description; + + public static ThirdKeyTypeEnum valueOfByType(String type) { + if (ObjectUtil.isEmpty(type)) return null; + return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); + } + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayApiBizTypeEnum.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayApiBizTypeEnum.java new file mode 100644 index 000000000..d7b2aa7bf --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayApiBizTypeEnum.java @@ -0,0 +1,28 @@ +package com.bsd.pjcloud.thirdparty.constant.pay; + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 第三方统一支付api类型 + */ +@AllArgsConstructor +@Getter +public enum ThirdPayApiBizTypeEnum { + + PAY("10", "支付"), + REFUND("20", "退款"), + ; + + private final String type; + private final String description; + + public static ThirdPayApiBizTypeEnum valueOfByType(String type) { + if (ObjectUtil.isEmpty(type)) return null; + return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); + } + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayBizTypeEnum.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPaySoureBizTypeEnum.java similarity index 70% rename from pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayBizTypeEnum.java rename to pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPaySoureBizTypeEnum.java index 66aa05084..e01daa92c 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayBizTypeEnum.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPaySoureBizTypeEnum.java @@ -2,25 +2,24 @@ package com.bsd.pjcloud.thirdparty.constant.pay; import cn.hutool.core.util.ObjectUtil; import lombok.AllArgsConstructor; -import lombok.Data; import lombok.Getter; import java.util.Arrays; /** - * 第三方统一支付类型 + * 第三方统一支付来源类型 */ @AllArgsConstructor @Getter -public enum ThirdPayBizTypeEnum { +public enum ThirdPaySoureBizTypeEnum { - LB_PAY("10", "宁波银行支付"), + LB("10", "宁波银行"), ; private final String type; private final String description; - public static ThirdPayBizTypeEnum valueOfByType(String type) { + public static ThirdPaySoureBizTypeEnum valueOfByType(String type) { if (ObjectUtil.isEmpty(type)) return null; return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/PayDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/PayDto.java index 63a2e8e74..ce233bd56 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/PayDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/PayDto.java @@ -1,6 +1,6 @@ package com.bsd.pjcloud.thirdparty.dto.pay; -import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayBizTypeEnum; +import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPaySoureBizTypeEnum; import lombok.Data; @Data @@ -19,7 +19,7 @@ public class PayDto { /** * 第三方统一支付类型 */ - private ThirdPayBizTypeEnum bizType; + private ThirdPaySoureBizTypeEnum bizType; /** * 扣款金额(分) diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/ThirdKeyManageEntity.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/ThirdKeyManageEntity.java new file mode 100644 index 000000000..8f4c87890 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/ThirdKeyManageEntity.java @@ -0,0 +1,115 @@ +package com.bsd.pjcloud.thirdparty.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.bsd.pjcloud.common.core.util.TenantTable; +import java.time.LocalDateTime; + +/** + * 第三方密钥管理 + * + * @author dzc + * @date 2025-04-30 15:18:13 + */ +@Data +@TenantTable +@TableName("third_key_manage") +@EqualsAndHashCode(callSuper = true) +@Schema(description = "第三方密钥管理") +public class ThirdKeyManageEntity extends Model { + + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + @Schema(description="主键") + private Long id; + + /** + * 第三方名字 + */ + @Schema(description="第三方名字") + private String name; + + /** + * 第三方类型id(常量) + */ + @Schema(description="第三方类型id(常量)") + private String bizType; + + /** + * appKey + */ + @Schema(description="appKey") + private String appKey; + + /** + * appSecret + */ + @Schema(description="appSecret") + private String appSecret; + + /** + * 字段加密key + */ + @Schema(description="字段加密key") + private String fieldKey; + + /** + * 状态 + */ + @Schema(description="状态") + private String status; + + /** + * 备注 + */ + @Schema(description="备注") + private String remark; + + /** + * 创建人 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description="创建人") + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description="创建时间") + private LocalDateTime createTime; + + /** + * 更新人 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description="更新人") + private String updateBy; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description="更新时间") + private LocalDateTime updateTime; + + /** + * 删除时间 + */ + @TableLogic + @TableField(fill = FieldFill.INSERT) + @Schema(description="删除时间") + private String delFlag; + + /** + * tenantId + */ + @Schema(description="tenantId") + private Long tenantId; +} \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/api/ThirdPayLogEntity.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/api/ThirdPayLogEntity.java index abc6e7d01..b9f0635d5 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/api/ThirdPayLogEntity.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/api/ThirdPayLogEntity.java @@ -3,14 +3,16 @@ package com.bsd.pjcloud.thirdparty.entity.api; import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.extension.activerecord.Model; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; +import lombok.*; import com.bsd.pjcloud.common.core.util.TenantTable; import java.time.LocalDateTime; /** * 第三方支付日志 */ +@Builder +@AllArgsConstructor +@NoArgsConstructor @Data @TenantTable @TableName("third_pay_log") diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayGetWalletInfoVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayGetWalletInfoVo.java new file mode 100644 index 000000000..237fb61d9 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayGetWalletInfoVo.java @@ -0,0 +1,10 @@ +package com.bsd.pjcloud.thirdparty.vo.pay; + +import lombok.Data; + +@Data +public class PayGetWalletInfoVo { + + + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ThirdKeyManageController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ThirdKeyManageController.java new file mode 100644 index 000000000..c12a39071 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/ThirdKeyManageController.java @@ -0,0 +1,80 @@ +package com.bsd.pjcloud.thirdparty.controller; + +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; +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.thirdparty.entity.ThirdKeyManageEntity; +import com.bsd.pjcloud.thirdparty.service.ThirdKeyManageService; +import org.springframework.security.access.prepost.PreAuthorize; +import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.http.HttpHeaders; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + * 第三方密钥管理 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/third-key-manage") +@Tag(description = "third-key-manage", name = "第三方密钥管理管理") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +public class ThirdKeyManageController { + + private final ThirdKeyManageService thirdKeyManageService; + + @Operation(summary = "分页查询", description = "分页查询") + @GetMapping("/page") + @PreAuthorize("@pms.hasPermission('third_thirdKeyManage_view')") + public R getThirdKeyManagePage(@ParameterObject Page page, @ParameterObject ThirdKeyManageEntity dto) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .like(ObjectUtil.isNotEmpty(dto.getName()), ThirdKeyManageEntity::getName, dto.getName()) + .orderByDesc(ThirdKeyManageEntity::getCreateTime) + .orderByDesc(ThirdKeyManageEntity::getId); + return R.ok(thirdKeyManageService.page(page, wrapper)); + } + + @Operation(summary = "通过id查询", description = "通过id查询") + @GetMapping("/{id}") + @PreAuthorize("@pms.hasPermission('third_thirdKeyManage_view')") + public R getById(@PathVariable("id") Long id) { + return R.ok(thirdKeyManageService.getById(id)); + } + + @Operation(summary = "新增第三方密钥管理", description = "新增第三方密钥管理") + @SysLog("新增第三方密钥管理") + @PostMapping + @PreAuthorize("@pms.hasPermission('third_thirdKeyManage_add')") + public R save(@RequestBody ThirdKeyManageEntity dto) { + return R.ok(thirdKeyManageService.create(dto)); + } + + @Operation(summary = "修改第三方密钥管理", description = "修改第三方密钥管理") + @SysLog("修改第三方密钥管理") + @PutMapping + @PreAuthorize("@pms.hasPermission('third_thirdKeyManage_edit')") + public R updateById(@RequestBody ThirdKeyManageEntity dto) { + return R.ok(thirdKeyManageService.edit(dto)); + } + + @Operation(summary = "通过id删除第三方密钥管理", description = "通过id删除第三方密钥管理") + @SysLog("通过id删除第三方密钥管理") + @DeleteMapping + @PreAuthorize("@pms.hasPermission('third_thirdKeyManage_del')") + public R removeById(@RequestBody Long[] ids) { + return R.ok(thirdKeyManageService.removeBatchByIds(CollUtil.toList(ids))); + } + +} \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayApiController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayApiController.java new file mode 100644 index 000000000..48310118b --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayApiController.java @@ -0,0 +1,34 @@ +package com.bsd.pjcloud.thirdparty.controller.pay; + + +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.thirdparty.service.ThirdPayApiService; +import com.bsd.pjcloud.thirdparty.service.ThirdPayLogService; +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.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +/** + * 第三方支付日志 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/third-pay-api") +@Tag(description = "third-pay-api", name = "地上方支付") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +public class ThirdPayApiController { + + private final ThirdPayApiService thirdPayApiService; + + @Operation(summary = "通过手机号查询用户钱包信息", description = "通过手机号查询用户钱包信息") + @GetMapping("/{signPhone}") + public R getWalletInfo(@PathVariable("signPhone") String signPhone) { + return R.ok(thirdPayApiService.getWalletInfo(signPhone)); + } + + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayLogController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayLogController.java index 82b5487f7..74c38aa30 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayLogController.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayLogController.java @@ -11,6 +11,7 @@ import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.thirdparty.dto.pay.ThirdPayLogDto; import com.bsd.pjcloud.thirdparty.entity.api.ThirdPayLogEntity; import com.bsd.pjcloud.thirdparty.service.ThirdPayLogService; +import com.bsd.pjcloud.wallet.api.entity.recharge.WalletRechargeApplyEntity; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -29,8 +30,8 @@ import java.util.Objects; */ @RestController @RequiredArgsConstructor -@RequestMapping("/thirdPayLog") -@Tag(description = "thirdPayLog", name = "第三方支付日志管理") +@RequestMapping("/third-pay-log") +@Tag(description = "third-pay-log", name = "第三方支付日志管理") @SecurityRequirement(name = HttpHeaders.AUTHORIZATION) public class ThirdPayLogController { @@ -43,7 +44,12 @@ public class ThirdPayLogController { LambdaQueryWrapper wrapper = new LambdaQueryWrapper() .eq(ObjectUtil.isNotEmpty(dto.getPaySourceType()), ThirdPayLogEntity::getPaySourceType, dto.getPaySourceType()) .eq(ObjectUtil.isNotEmpty(dto.getBizType()), ThirdPayLogEntity::getBizType, dto.getBizType()) - .between(ObjectUtil.isNotEmpty(dto.getCreateTimeList()), ThirdPayLogEntity::getCreateTime, dto.getCreateTimeList()[0], dto.getCreateTimeList()[1]) + .between( + ObjectUtil.isNotEmpty(dto.getCreateTimeList()), + ThirdPayLogEntity::getCreateTime, + ObjectUtil.isNotEmpty(dto.getCreateTimeList()) ? dto.getCreateTimeList()[0] : null, + ObjectUtil.isNotEmpty(dto.getCreateTimeList()) ? dto.getCreateTimeList()[1] : null + ) .orderByDesc(ThirdPayLogEntity::getCreateTime) .orderByDesc(ThirdPayLogEntity::getId); return R.ok(thirdPayLogService.page(page, wrapper)); diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/mapper/ThirdKeyManageMapper.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/mapper/ThirdKeyManageMapper.java new file mode 100644 index 000000000..7727499e3 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/mapper/ThirdKeyManageMapper.java @@ -0,0 +1,11 @@ +package com.bsd.pjcloud.thirdparty.mapper; + +import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.thirdparty.entity.ThirdKeyManageEntity; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ThirdKeyManageMapper extends PjcloudBaseMapper { + + +} \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKeyManageService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKeyManageService.java new file mode 100644 index 000000000..eab9de9ca --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKeyManageService.java @@ -0,0 +1,23 @@ +package com.bsd.pjcloud.thirdparty.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.bsd.pjcloud.thirdparty.constant.ThirdKeyTypeEnum; +import com.bsd.pjcloud.thirdparty.entity.ThirdKeyManageEntity; + +public interface ThirdKeyManageService extends IService { + + /** + * 新增 + */ + Long create(ThirdKeyManageEntity dto); + + /** + * 修改 + */ + Long edit(ThirdKeyManageEntity dto); + + /** + * 获取第三方key配置 + */ + ThirdKeyManageEntity get(ThirdKeyTypeEnum type); +} \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java index fc995e35c..449ab9e39 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java @@ -3,6 +3,7 @@ package com.bsd.pjcloud.thirdparty.service; import com.bsd.pjcloud.thirdparty.dto.pay.PayDto; import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto; +import com.bsd.pjcloud.thirdparty.vo.pay.PayGetWalletInfoVo; import com.bsd.pjcloud.thirdparty.vo.pay.PayVo; import com.bsd.pjcloud.thirdparty.vo.pay.RefundVo; @@ -18,4 +19,8 @@ public interface ThirdPayApiService { */ RefundVo refund(RefundDto dto); + /** + * 根据加密的手机号查询用户钱包信息 + */ + PayGetWalletInfoVo getWalletInfo(String phone); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ThirdKeyManageServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ThirdKeyManageServiceImpl.java new file mode 100644 index 000000000..e11d72253 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ThirdKeyManageServiceImpl.java @@ -0,0 +1,84 @@ +package com.bsd.pjcloud.thirdparty.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.thirdparty.constant.ThirdKeyTypeEnum; +import com.bsd.pjcloud.thirdparty.entity.ThirdKeyManageEntity; +import com.bsd.pjcloud.thirdparty.mapper.ThirdKeyManageMapper; +import com.bsd.pjcloud.thirdparty.service.ThirdKeyManageService; +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 ThirdKeyManageServiceImpl extends ServiceImpl implements ThirdKeyManageService { + + /** + * 新增 + */ + @Override + public Long create(ThirdKeyManageEntity dto) { + if (existBizType(dto)) throw new RuntimeException("第三方key类型不能重复"); + if (existName(dto)) throw new RuntimeException("第三方key名称不能重复"); + baseMapper.insert(dto); + return dto.getId(); + } + + /** + * 修改 + */ + @Override + public Long edit(ThirdKeyManageEntity dto) { + if (existBizType(dto)) throw new RuntimeException("第三方key类型不能重复"); + if (existName(dto)) throw new RuntimeException("第三方key名称不能重复"); + baseMapper.updateById(dto); + return dto.getId(); + } + + /** + * 获取第三方key配置 + */ + @Override + public ThirdKeyManageEntity get(ThirdKeyTypeEnum type) { + return baseMapper.selectOne(new LambdaQueryWrapper().eq(ThirdKeyManageEntity::getBizType, type.getType())); + } + + /** + * 第三方类型不能重复 + */ + private boolean existBizType(ThirdKeyManageEntity dto) { + Long count = baseMapper.selectCount(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(dto.getBizType()), ThirdKeyManageEntity::getBizType, dto.getBizType()) + .ne(ObjectUtil.isNotEmpty(dto.getId()), ThirdKeyManageEntity::getId, dto.getId()) + ); + if (ObjectUtil.isNotEmpty(dto.getId())) { + return count >= 1; + } + return count > 0; + } + + /** + * 名字不能重复 + */ + private boolean existName(ThirdKeyManageEntity dto) { + Long count = baseMapper.selectCount(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(dto.getName()), ThirdKeyManageEntity::getName, dto.getName()) + .eq(ObjectUtil.isNotEmpty(dto.getBizType()), ThirdKeyManageEntity::getBizType, dto.getBizType()) + .ne(ObjectUtil.isNotEmpty(dto.getId()), ThirdKeyManageEntity::getId, dto.getId()) + ); + if (ObjectUtil.isNotEmpty(dto.getId())) { + return count >= 1; + } + return count > 0; + } + +} \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/lb/ThirdLbApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/lb/ThirdLbApiServiceImpl.java index fa36fec6d..a1342ee4b 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/lb/ThirdLbApiServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/lb/ThirdLbApiServiceImpl.java @@ -36,10 +36,10 @@ public class ThirdLbApiServiceImpl implements ThirdLbApiService { LbH5LoginVo ksBaseVo = new LbH5LoginVo(); String phone = dto.getPhone(); String signPhone = LbRetailSignUtils.sm4Encrypt(phone, lbConfig.getSm4Key()); - long timeMillis = System.currentTimeMillis(); + long timeMillis = System.currentTimeMillis() / 1000; String signature = apiCountersign(dto.getPhone(), timeMillis); Map queryMap = new HashMap<>(); - queryMap.put("companyNumber", lbConfig.getCompanyNumber()); + // queryMap.put("companyNumber", lbConfig.getCompanyNumber()); queryMap.put("appId", lbConfig.getAppId()); queryMap.put("phone", signPhone); queryMap.put("timestamp", String.valueOf(timeMillis)); @@ -60,8 +60,10 @@ public class ThirdLbApiServiceImpl implements ThirdLbApiService { // 加签 public String apiCountersign(String phone, Long timestamp) { - String str = "companyNumber=%s&appId=%s&phone=%s×tamp=%s&secret=%s"; - str = String.format(str, lbConfig.getCompanyNumber(), lbConfig.getAppId(), phone, timestamp, lbConfig.getAppSecret()); + // String str = "companyNumber=%s&appId=%s&phone=%s×tamp=%s&secret=%s"; + // str = String.format(str, lbConfig.getCompanyNumber(), lbConfig.getAppId(), phone, timestamp, lbConfig.getAppSecret()); + String str = "phone=%s&appKey=%s×tamp=%s&secret=%s"; + str = String.format(str, phone, lbConfig.getAppId(), timestamp, lbConfig.getAppSecret()); // 使用 SHA-256 进行哈希计算,并返回十六进制字符串。 String sha256 = DigestUtils.sha256Hex(str); return sha256; diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java index ffe01dc3d..b5f2cc3b9 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java @@ -1,8 +1,14 @@ package com.bsd.pjcloud.thirdparty.service.impl.pay; +import cn.hutool.json.JSONUtil; +import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayApiBizTypeEnum; import com.bsd.pjcloud.thirdparty.dto.pay.PayDto; import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto; +import com.bsd.pjcloud.thirdparty.entity.api.ThirdPayLogEntity; import com.bsd.pjcloud.thirdparty.service.ThirdPayApiService; +import com.bsd.pjcloud.thirdparty.service.ThirdPayLogService; +import com.bsd.pjcloud.thirdparty.utils.lb.tool.LbRetailSignUtils; +import com.bsd.pjcloud.thirdparty.vo.pay.PayGetWalletInfoVo; import com.bsd.pjcloud.thirdparty.vo.pay.PayVo; import com.bsd.pjcloud.thirdparty.vo.pay.RefundVo; import lombok.RequiredArgsConstructor; @@ -10,6 +16,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.Arrays; + /** * 第三方支付 */ @@ -19,20 +27,27 @@ import org.springframework.validation.annotation.Validated; @RequiredArgsConstructor public class ThirdPayApiServiceImpl implements ThirdPayApiService { - private final String TAG = "第三方支付"; + private final String TAG = "第三方支付"; + + private final ThirdPayLogService thirdPayLogService; /** * 扣款 */ @Override public PayVo pay(PayDto dto) { + long startTime = System.currentTimeMillis(); + ThirdPayLogEntity logObj = ThirdPayLogEntity.builder().apiUrl("/pay").bizType(ThirdPayApiBizTypeEnum.PAY.getType()).req(JSONUtil.toJsonStr(dto)).build(); PayVo vo = new PayVo(); try { } catch (Exception e) { - + String error = String.format("|%s||pay|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); + log.error(error); + logObj.setError(error); } finally { - + logObj.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime)); + thirdPayLogService.save(logObj); } return vo; } @@ -42,14 +57,29 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService { */ @Override public RefundVo refund(RefundDto dto) { + long startTime = System.currentTimeMillis(); + ThirdPayLogEntity logObj = ThirdPayLogEntity.builder().apiUrl("/refund").bizType(ThirdPayApiBizTypeEnum.REFUND.getType()).req(JSONUtil.toJsonStr(dto)).build(); RefundVo vo = new RefundVo(); try { } catch (Exception e) { - + String error = String.format("|%s||refund|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); + log.error(error); + logObj.setError(error); } finally { - + logObj.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime)); + thirdPayLogService.save(logObj); } return vo; } + + /** + * 根据加密的手机号查询用户钱包信息 + */ + @Override + public PayGetWalletInfoVo getWalletInfo(String signPhone) { + // 手机号解密 + String phone = LbRetailSignUtils.sm4Decrypt(signPhone, ""); + 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 63f26e0fa..28a2f1346 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml @@ -44,31 +44,31 @@ oauth2: # 正元智慧 # https://gwyc.zj.gov.cn/API/%E7%9C%81%E5%B9%B3%E5%8F%B0API%E5%AF%B9%E6%8E%A5%E6%8E%A5%E5%8F%A3.html zy: - # 测试1 - # base-url: http://60.191.37.212:18079 - # app-id: 689C8D6F5059A6F85B8BE45A49001ACB - # app-secret: BD21DA0DEB8F0FC43246B0BD2FCAE6FF +# 测试1 +# base-url: http://60.191.37.212:18079 +# app-id: 689C8D6F5059A6F85B8BE45A49001ACB +# app-secret: BD21DA0DEB8F0FC43246B0BD2FCAE6FF - # 测试2 - # base-url: http://60.191.37.212:18079 - # app-id: FC455B0A788E334AC08FB3E1D8385C75 - # app-secret: E9131D0BCC9054808675DA1E2E199023 +# 测试2 +# base-url: http://60.191.37.212:18079 +# app-id: FC455B0A788E334AC08FB3E1D8385C75 +# app-secret: E9131D0BCC9054808675DA1E2E199023 - # 正式 - # base-url: https://gwycport.zj.gov.cn - # app-id: 0BBF0D9A7F1B4BD5280E59197E259AC6 - # app-secret: 434752786ACBB37214F6617CC37AD0E9 +# 正式 +# base-url: https://gwycport.zj.gov.cn +# app-id: 0BBF0D9A7F1B4BD5280E59197E259AC6 +# app-secret: 434752786ACBB37214F6617CC37AD0E9 - # self-base-url: http://60.191.37.212:18079 - # self-app-id: xA5jF2vX4zO5mQ8tR9yE7rC7iI0fK0kI - # self-app-secret: kE3hH5gF7zN0nH1yI5yX3vP0oP1hU0jE - # 失效时间单位秒 - # self-expires-in: 7200 - # token key - # self_token_key: zy_token - # token - # self_token_secret: eV3dT0oD7iX8rK4eC3jS6fU8cU5cS6mJ +# self-base-url: http://60.191.37.212:18079 +# self-app-id: xA5jF2vX4zO5mQ8tR9yE7rC7iI0fK0kI +# self-app-secret: kE3hH5gF7zN0nH1yI5yX3vP0oP1hU0jE +# 失效时间单位秒 +# self-expires-in: 7200 +# token key +# self_token_key: zy_token +# token +# self_token_secret: eV3dT0oD7iX8rK4eC3jS6fU8cU5cS6mJ # 智能柜 # door: @@ -90,11 +90,11 @@ zy: # callback-sku-url: /third/third-ks/callback/sku lb: # base-url: https://elss-sit.nbcb.com.cn - base-url: https://elss-uat.nbcb.com.cn - app-id: c4b0a38e9ba5419eab9b651dd23db462 - app-secret: iW9H6BT2AMXg2XnN2Eq+r6ISossJNNh97nyLwrrOrDY= - company-number: p6VQYhHZ - sm4-key: 1234567812345678 + base-url: https://elss-sit.nbcb.com.cn/h5/thirdApp + app-id: 7da62b1a9ade473c917f573c5748081e + app-secret: 8ffl6b+OKTmdVAt9Qo+2F/HQQMdt/d8GFia0zUOt9l= + company-number: 202504673472 + sm4-key: 567157e8aQs2tF5X sms: @@ -109,10 +109,10 @@ sms: templates: 20657: # 验证码模板 content: "您好,您的验证码是{code},有效时间{date}分钟,请勿转发!" - params: ["code", "date"] + params: [ "code", "date" ] 20658: content: "您的访客预约申请已通过,请通过地址{url}查看详情!" - params: ["url"] + params: [ "url" ] settings: default-ext-code: "123" timeout-seconds: 300 diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/mapper/ThirdKeyManageMapper.xml b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/mapper/ThirdKeyManageMapper.xml new file mode 100644 index 000000000..2b4769a5c --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/mapper/ThirdKeyManageMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 26de11e567b9d138e94fcfe808ccef5231ba70ad Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 30 Apr 2025 17:31:51 +0800 Subject: [PATCH 26/27] =?UTF-8?q?feat:=E7=AC=AC=E4=B8=89=E6=96=B9=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/pay/PayGetWalletInfoDto.java | 13 ++++++ .../thirdparty/vo/pay/PayGetWalletInfoVo.java | 14 ++++++ .../controller/pay/ThirdPayApiController.java | 11 +++-- .../service/ThirdKeyManageService.java | 8 ++++ .../service/ThirdPayApiService.java | 5 +- .../impl/ThirdKeyManageServiceImpl.java | 43 ++++++++++++++++++ .../impl/pay/ThirdPayApiServiceImpl.java | 24 ++++++++-- .../src/main/resources/doc/第三方支付文档.wps | Bin 0 -> 39936 bytes 8 files changed, 109 insertions(+), 9 deletions(-) create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/PayGetWalletInfoDto.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/doc/第三方支付文档.wps diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/PayGetWalletInfoDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/PayGetWalletInfoDto.java new file mode 100644 index 000000000..477a35e24 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/pay/PayGetWalletInfoDto.java @@ -0,0 +1,13 @@ +package com.bsd.pjcloud.thirdparty.dto.pay; + +import lombok.Data; + +@Data +public class PayGetWalletInfoDto { + + /** + * sm4加密后的手机号 + */ + private String signPhone; + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayGetWalletInfoVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayGetWalletInfoVo.java index 237fb61d9..1b8126cc6 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayGetWalletInfoVo.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayGetWalletInfoVo.java @@ -5,6 +5,20 @@ import lombok.Data; @Data public class PayGetWalletInfoVo { + /** + * sm4加密后的手机号 + */ + private String signPhone; + + /** + * 用户真实姓名 + */ + private String username; + + /** + * 用户余额(分) + */ + private int balance; } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayApiController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayApiController.java index 48310118b..4970873c3 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayApiController.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayApiController.java @@ -2,16 +2,20 @@ package com.bsd.pjcloud.thirdparty.controller.pay; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.thirdparty.dto.pay.PayGetWalletInfoDto; import com.bsd.pjcloud.thirdparty.service.ThirdPayApiService; import com.bsd.pjcloud.thirdparty.service.ThirdPayLogService; 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.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import java.util.Map; + /** * 第三方支付日志 */ @@ -25,9 +29,10 @@ public class ThirdPayApiController { private final ThirdPayApiService thirdPayApiService; @Operation(summary = "通过手机号查询用户钱包信息", description = "通过手机号查询用户钱包信息") - @GetMapping("/{signPhone}") - public R getWalletInfo(@PathVariable("signPhone") String signPhone) { - return R.ok(thirdPayApiService.getWalletInfo(signPhone)); + @GetMapping("/user-wallet") + public R getWalletInfo(HttpEntity httpEntity, @RequestHeader Map headers) { + String body = httpEntity.getBody(); + return R.ok(thirdPayApiService.getWalletInfo(body, headers)); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKeyManageService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKeyManageService.java index eab9de9ca..25b9ea4df 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKeyManageService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdKeyManageService.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.thirdparty.constant.ThirdKeyTypeEnum; import com.bsd.pjcloud.thirdparty.entity.ThirdKeyManageEntity; +import java.util.Map; + public interface ThirdKeyManageService extends IService { /** @@ -20,4 +22,10 @@ public interface ThirdKeyManageService extends IService { * 获取第三方key配置 */ ThirdKeyManageEntity get(ThirdKeyTypeEnum type); + + /** + * 验签并且返回配置 + */ + ThirdKeyManageEntity checkSignAndReturnConfig(String json, Map headers); + } \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java index 449ab9e39..0054b89eb 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java @@ -2,11 +2,14 @@ package com.bsd.pjcloud.thirdparty.service; import com.bsd.pjcloud.thirdparty.dto.pay.PayDto; +import com.bsd.pjcloud.thirdparty.dto.pay.PayGetWalletInfoDto; import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto; import com.bsd.pjcloud.thirdparty.vo.pay.PayGetWalletInfoVo; import com.bsd.pjcloud.thirdparty.vo.pay.PayVo; import com.bsd.pjcloud.thirdparty.vo.pay.RefundVo; +import java.util.Map; + public interface ThirdPayApiService { /** @@ -22,5 +25,5 @@ public interface ThirdPayApiService { /** * 根据加密的手机号查询用户钱包信息 */ - PayGetWalletInfoVo getWalletInfo(String phone); + PayGetWalletInfoVo getWalletInfo(String json, Map headers); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ThirdKeyManageServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ThirdKeyManageServiceImpl.java index e11d72253..a018dd209 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ThirdKeyManageServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ThirdKeyManageServiceImpl.java @@ -9,9 +9,13 @@ import com.bsd.pjcloud.thirdparty.mapper.ThirdKeyManageMapper; import com.bsd.pjcloud.thirdparty.service.ThirdKeyManageService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.digest.DigestUtils; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.LinkedHashMap; +import java.util.Map; + /** * 第三方密钥管理 */ @@ -52,6 +56,45 @@ public class ThirdKeyManageServiceImpl extends ServiceImpl().eq(ThirdKeyManageEntity::getBizType, type.getType())); } + /** + * 验签并且返回配置 + */ + @Override + public ThirdKeyManageEntity checkSignAndReturnConfig(String json, Map headers) { + Map transitionHeader = new LinkedHashMap<>(); + for (Map.Entry entry : headers.entrySet()) { + transitionHeader.put(entry.getKey().toUpperCase(), entry.getValue()); + } + // 验签 + String appKey = transitionHeader.get("APP-KEY"); + String bizType = transitionHeader.get("BIZ-TYPE"); + String timestamp = transitionHeader.get("TIMESTAMP"); + String sign = transitionHeader.get("SIGN"); + if (!ObjectUtil.isAllNotEmpty(appKey, bizType, timestamp, sign)) { + return null; + } + // 判断bizType + ThirdKeyTypeEnum keyType = ThirdKeyTypeEnum.valueOfByType(bizType); + if (ObjectUtil.isEmpty(keyType)) { + return null; + } + // 查询配置 + ThirdKeyManageEntity keyManage = get(keyType); + if (ObjectUtil.isEmpty(keyManage)) { + return null; + } + if (ObjectUtil.notEqual(appKey, keyManage.getAppKey())) { + return null; + } + // 计算签名 + String signStr = String.format("%s%s%s%s%s", keyManage.getAppKey(), keyManage.getAppSecret(), keyManage.getBizType(), timestamp, json); + String successSignMd5 = DigestUtils.md5Hex(signStr); + if (ObjectUtil.notEqual(successSignMd5.toLowerCase(), sign.toLowerCase())) { + return null; + } + return keyManage; + } + /** * 第三方类型不能重复 */ diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java index b5f2cc3b9..0832e2299 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java @@ -1,10 +1,14 @@ package com.bsd.pjcloud.thirdparty.service.impl.pay; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayApiBizTypeEnum; import com.bsd.pjcloud.thirdparty.dto.pay.PayDto; +import com.bsd.pjcloud.thirdparty.dto.pay.PayGetWalletInfoDto; import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto; +import com.bsd.pjcloud.thirdparty.entity.ThirdKeyManageEntity; import com.bsd.pjcloud.thirdparty.entity.api.ThirdPayLogEntity; +import com.bsd.pjcloud.thirdparty.service.ThirdKeyManageService; import com.bsd.pjcloud.thirdparty.service.ThirdPayApiService; import com.bsd.pjcloud.thirdparty.service.ThirdPayLogService; import com.bsd.pjcloud.thirdparty.utils.lb.tool.LbRetailSignUtils; @@ -17,6 +21,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.Arrays; +import java.util.Map; /** * 第三方支付 @@ -29,7 +34,8 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService { private final String TAG = "第三方支付"; - private final ThirdPayLogService thirdPayLogService; + private final ThirdKeyManageService keyManageService; + private final ThirdPayLogService payLogService; /** * 扣款 @@ -47,7 +53,7 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService { logObj.setError(error); } finally { logObj.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime)); - thirdPayLogService.save(logObj); + payLogService.save(logObj); } return vo; } @@ -68,7 +74,7 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService { logObj.setError(error); } finally { logObj.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime)); - thirdPayLogService.save(logObj); + payLogService.save(logObj); } return vo; } @@ -77,9 +83,17 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService { * 根据加密的手机号查询用户钱包信息 */ @Override - public PayGetWalletInfoVo getWalletInfo(String signPhone) { + public PayGetWalletInfoVo getWalletInfo(String json, Map headers) { + ThirdKeyManageEntity keySetting = keyManageService.checkSignAndReturnConfig(json, headers); + if (ObjectUtil.isEmpty(keySetting)) { + + return null; + } + PayGetWalletInfoDto dto = JSONUtil.toBean(json, PayGetWalletInfoDto.class); // 手机号解密 - String phone = LbRetailSignUtils.sm4Decrypt(signPhone, ""); + String phone = LbRetailSignUtils.sm4Decrypt(dto.getSignPhone(), keySetting.getFieldKey()); + return null; } + } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/doc/第三方支付文档.wps b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/doc/第三方支付文档.wps new file mode 100644 index 0000000000000000000000000000000000000000..07d533bc13a8bd9d86135a7dca9fa41a4d45e313 GIT binary patch literal 39936 zcmeHQ3v?7!n*OW0lkNa{@Du`SgE1gNXr2P1gojK3O+vyu$Ri;kNPq|dM|l{Ttjih} znUPV}br5FJ<*3JD$M=p$z?sFzjw`-$L}xWR>be|PvyP)9i`0H!Rad&Y)6W#00F&G2 z>$>;Weg6M{|68}}{#D0c@7lQkUot;RPEm#Ki2g6rt`&!z(NZMY2#YHME-#IAACnM$(QKr zPKvcn*C$QH7*nwo)C=v;Lej@OiBuxvW*kQ#d;;z18CwwvO|=H?do-anB(CsFP;@cS zJ8@OST=FWU3^kf!E})GQjtAd8ZCqzZbsrJ~oWz8z;KN1hsyp~ysv2M zrr-TtpQ2QG>8FD>c%)DYpfP9T>~rPmOTMe0T%~$bB~Qv_nJmZuI-D7r|9`9Z6}?zo zU7l3@MQNs%DpO>wtdSa==l@XTzg4Oc%G8$OSS?kuQp!+54USAXOm4#bPG73bD|u>_ zOaGrx=#p>h(<)rz!r7Iw0_W-9x+!&b7cF(g{-Wo~`&aI`pK&Z{HELK7-!k~B5jR}M z;OE6}gj@yRa2bWzImI^=WNL5T%3MZkhRQ1BycOX*nT*s`_*KHc8f_ene3N9JjKld` zSmp+!-s5HeSa4!1>G51SODaYEx1pyszMisnFXA)v_ZMy2Tt6>mg+CwDSE5EM1?x6? ze0}iuz$0CJ^fFu6MGLN{ZsUZ)R9`=eQDzx9QjU_`TBw$$fH!P2Ybyo4m!q{F&^mk5 zi2PL9Uw_}G=gQxy%G8n_L6OwgqON4bF{6 z%4obZb68u;e6zse75L2uPe!BGRiH~AcwGTmSOvK$1w}{6&FJ+lx|Ej59GsaaMOgQg z<9w=*_hxTdCV8Lg!#^Il9x}KZ{K}V^GFKMr zwdbQ9Y<&$lxj^UVLY$d})LT$Ws`M!`Xj-??;PJKvo%1s_o{2`SY}<6n)~UdM_Lp@A zjzr3j{a&VGY#W;E{*vjC;SrL98a?vqijV6DZMdp*LBTKf7&8CW-`6c+-?LC}DP(y) zxHkv9tpcrvfr6D7!RtUrtA8lCunaUGs>}XLoZF!1TZfoi5JyeH(Uz*~sZ6b9tsFhn zh^azf>TH)#8@OaxMfU7}Te51tOI|N)x|k9NVREx}Vz~TJqn|9`VzyosHBj1*H(cZrMgSmZv{#E@)1#6eGyyYl~ z8rp^0OEI3PvCO)ewr*o}`I@rtOP1}hrarsWBjwVd+5D6sFJ+tTbwIwroM=D+ye@~)OGdnW1O+_Nn z%89>a_9Q=Ad+e1Se{Up(ygdy#Q$&)1Y+w*D0mua!k3MwE;)%oJWw|f?xz^u>lLw1F zvuF_nXpCEOw~KIssQ_+%6-rt7fCC6tpqz28cFT>R;F!=wnmVf0^Oaset8?orD{O9Y zk;jEV5il2+4^#owKpoI{^x)mqvsyFi{UQ@A)gdnh!nQFucktCfBIy%mM43DdaqSW& zM}(OpvHgoo9dVJzdw{*b!@xn{S>So#1)%ZhFMqQ9x@hbSOY}v z%sWOc8H$$4BzuuIB2CUm)Y^vAa3&a1>i;CW8f3uTi`FiDWLJ_JyN@D zas;h!|5UU-v^R}K5_#Pit@n{fd2sIdG>o{&e2AfpTPz*Mgtpw~{jsw>FW8f>;E@q|%y(Wps992i-V+e#)}OdSwhbMOd=EW^RMgDILweuTOc z9wx4NoSB!Tq0&X`i#7x5%x;pJQ^+ zv#pS$29<^DI4YI1sQ){WuiV*L4g46m4cH2719k%+9^O~GY*POSlRo4i;?p`^0wc&l z`^wR|U3;QwCob~%Uf`F&0pMZaAaDfu9q{4d2X9|8@zOB-KMTB%C_B+~$c0{i4E&Es zzi9czMIIjq-UQwS-UB`W8iCJ&ll04xeYH!&DS_Y-6jGx_82`cZK*;>z)S=j|y}k3> z>%H9>Pu%41m%!J+Dd04q!g9e0Bm<2{_TOPo|F`!Tjy49O>5ypcw|DhtSN?3ukBdBZ z13iG=KtCWG7zB(0KIG8P^@P#?!trNI1D)&nqj5i4`=jNzEj_lVFD~+U3@{cL4=e{N zfofnKfcZbX>er>>+@?VL(mz`5!L$oG_eGdHgYyTkccSS&agoPcfm&c2PzU@BxEI(9 z@cM6QZlvq~#7b~93bt?U!Sruy{sq?`KmW<&eZa%OLEtgqao}m-S)lPK=Ksk9!s>sX zKq~@P^6^r^-W+DP_V&(iulM%kUtHwz^S}|{P2g>y5%?JRg#Ng%|KjC-unY(1kEX*C zoj+a;6x@D2f5O%;_M}H#~Dc}r{1{3WJpdWAv5byP0aPQljdv@!O#{Fp07cGDA z_zk9CROt!0{tM0>t@q+0k3GNuAO{!$5S68;SK-+MyaUU_JH zh1-056$Nd-a)5k*wqCRcqAk#OtjBckn;ss0Z;COZ{>ge~mo>1(8aU_t-9(mUi6cvT zWhv7u6tu5*T~Ak^y4`7gvzKP zDw1A@r>elbsV_^{x&z8mK-xH;TQ!;~GD&ZjB$Lm3fv3(n_FQlcnw}m)II@kJsoJBgZP{5$pMPy&V^s18w}=3>npsEQ*3xM(G~aQDu0XW{ev#Ne#W77?`2Z zy}?V8@l>ow*X|-mk8d3{{msE$K1xX)vny?PPgnZx-D&QIY2w(e-I}tao4bFlUTolB ztZ~Y{yS2;)Zk+L14T;t_FxW3JcyVAbg_Pm1TLWKQr2W@tpBW8l;j508Kzj!Sa>(e0 zBvBlnrr@Zkj_y3F4#(y+QOS4Oc)kG84)6=3CgcAtYhb7~5QG2W4wi#T%@Poq<!k6@|<>`CxLGOpQIW5ea*_|JFS5W(?2a;tQxJIb#weYk3WZlJf{sP zZ9i%ExxmWVTx(#UH4x4pe+%NyagOMfk>|x!5>2l-$n$Ff+JVvrG+_L<0slL=8E~D@ z*0Y3zJg3d?8h|#x7u@`RVT{wbwWP6bbvUvdk>`K%oHn4e{iNL|?fz&JMmsRt1kpa^ zk5+B}k~Q$CHE_Q*aJMzE)f!lB4J@(-;_~AywJp~m^QMY_ZGARUfC?>Z;Tv*W#s<{g z#_Rf4-$!thzqI|Ky$@}DX!Aik0NMa>|3CMIb3eGb7o7WrzqB&yKdph^TLZtb1`b&R zQ2KrsaQkSFKVIbL*1%oXz;0GCvyDPlw z6FPki5)@s=&PIwZGr!8 zubkHF;e=vcA~lbj_rt9AoA2u+;&#qeYR@qW?&$0o;BHtX&fVJ1q|==TcJ&OX_4lLM zXD80Mqk{qGU(eIux1mK;zm`!Kw~R_@a2t1cc#mfgiwb{_$A7ju_N4lCzteZ$=Twq$ z-)Bv-ao^`kh8<4F_Zgy+@7(v#J^wEP+z%e34hXd%e56AR^gBMWi9w89iahe{oE0be z&AtEJ_umL`KX?=H4aBb5ecJ4Ur@n*l5F= z97E*NL)&sZhmK9^f5`2+Y}dY|0XSyic=;ibiw+e#dLL?Zj3`uP_^z>}LWjGcD4s zvnzHdDzNHF7bngcvAQK9tq}#g&U9c^BB6ljggVyQmX3Xn$HkkTWiwB3zA?#o>;uH( zObIaan#Xv`I9Jk|Z9n3`D-eN3pb4N*W&j?*3*-WYz*3+Zs0DTb;qsZ~nnw@Pwx*oF z_IwLL`v28beAt%TB@L%a*{Z)S7r{#mKjJGg5L&6*@?2FB7+21pDlo8|t-!!?0lYm9%z$yP zl9Z+7X0s(zW(<+h?mK4Y4Z-qBRK48Ac#>|knBruVJ3=p4MY+FFEaf`=*H1rXq7!<@O1cc%Urf=XQ?Cz*E&ZX%sO;7Nc)p z3&_~)lJ!yt$*kK?+;#j;Rs`P{y?sJu{XD_vnQ3C$3L8&~YC%_LS(ol+qGW=*3H_h|oIovGIk7#fsHD9LB7pix{rV4JX<;!)s!HS!z zk}<9DWqW+kx)Y@4!($iFJC|vf}*)v(rJU@1ljeO5T|uph5Fmy1=C@UgY z0E2-m0djvRkOK?@yZ}ceM-L@@6u@ODA4OjUj0MI4d^CAAzHi ze&pN*p;gr+N0Kus#o^RCN#m3s`z86XBDr|?!H2W)ePrV+$Q}qfzXI;T@LP*Ge)|`d zpqx96vJndJ>h(c0z3OCsMSgwBj{KSUcDKl!EVRO{rYEVY>U5}>A`FM7>Fzv&99H8IMU%VPd~n~m#TwQ7@GgaUV{djMj^I3RXj^lW*h(3 zc+>AeX^MM0Wc+~g-#=99H0t-w+bfCyrZK5!q&F^BoWiSBzca3C&6Hhzl;<>)je&6m z1TY7}bhS*x*G{&`L3u`AQeRPfdU|>KcrNy2d&UeE5p1p5BYR zil%BVEk*01rD>U3U+q%u8ZB2_q}`}3)*88*Z&No&O7Ok&XQa2Mp9dfL@^Q$^)X@(T(FY@$Sg!A0mi%AscW-la{VX7W@YzBxTCX zf;0LXN~l@_ol>jF9Eb=(N0~AG=8@7x;eo!CPXW`h)Thf&{fc3q?%7N~7eLT~O&$g$ zxrvGzpLxcVW`I=@y40qN+H@NN8RF(wc=bpHwWW)riIm1H*hI~#NJ>)%j=>I=D0)7& zFbOA_o*K5BFP>#_N*O7gn>Yv$W8ilcF3{XE(ZTL&xrmPLSa>u?mCpJ?xigT#WMknN zaGI28{F?{A{=T3xm8x5}AhMb%-B3UI$7rzk*PqMUwmmp3Oy_GH;|Ji5to!8!ZAg6D} zJ@q>yUt^s%%r4LPTp$>l5 zNgkUtHjm6tN17WVVU)=@GfguckiZ-hUSE3F#j;r!(;o!jYAJVmKXGLKnc!prTD}g_ zvs^Y{cCP`KHh`;D2+zd~zYeL4GSEz!4qjjZ)7);hk9``U^NsuqEeA-V_azI*aY#)b zPeD!7z}abfn8&e@f~!!{NJz|N_=lsku{b+imjokp9b}DiW3=Cn9I#CtuI(v6d8Q0f zE-6!#U5*>-Q;sR>(Y9EMT!wlmkCy}4z}Z?FoWZP1SeFLZqWpIdyX9YVbkYyY`i=iEq_ggK8~ z=c<~rHyzxs&}D)#T;s0QSKCJFmj8o%{in`~wSL|zc$tlcOKKr`@wI0x`p Date: Tue, 6 May 2025 10:35:41 +0800 Subject: [PATCH 27/27] =?UTF-8?q?feat:=E5=AE=81=E6=B3=A2=E9=93=B6=E8=A1=8C?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/HardOrderTotalController.java | 12 +++--- .../constant/pay/ThirdPayVoStatusEnum.java | 1 + .../pjcloud/thirdparty/vo/pay/PayBaseVo.java | 20 +++++++++ .../thirdparty/vo/pay/PayGetWalletInfoVo.java | 2 +- .../thirdparty/vo/pay/PayWalletInfoVo.java | 23 ++++++++++ .../controller/pay/ThirdPayApiController.java | 13 ++++-- .../service/ThirdPayApiService.java | 6 +-- .../impl/pay/ThirdPayApiServiceImpl.java | 42 +++++++++++++++---- .../admin/api/feign/RemoteUserService.java | 7 ++++ .../admin/controller/SysUserController.java | 17 ++++++-- .../wallet/api/feign/RemoteWalletService.java | 4 ++ .../controller/WalletManageController.java | 8 +++- .../WalletTransactionController.java | 1 + .../wallet/service/WalletManageService.java | 5 +++ .../service/impl/WalletManageServiceImpl.java | 21 +++++++++- 15 files changed, 155 insertions(+), 27 deletions(-) create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayBaseVo.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayWalletInfoVo.java diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java index b98c69b17..b38aac8da 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java @@ -149,10 +149,10 @@ public class HardOrderTotalController { } @Operation(summary = "设备交易记录导出", description = "设备交易记录导出") - @GetMapping("/export-sb") + @PostMapping("/export-sb") @SysLog("设备交易记录导出") @PreAuthorize("@pms.hasPermission('hard_hardTotal_export_sb')") - public void exportSb(HttpServletResponse response, HardOrderDto dto) throws IOException { + public void exportSb(HttpServletResponse response, @RequestBody HardOrderDto dto) throws IOException { dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); List list = hardOrderTotalService.listSb(dto); try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream("file/设备交易金额汇总.xlsx")).build()) { @@ -223,10 +223,10 @@ public class HardOrderTotalController { @Operation(summary = "商户交易记录导出", description = "商户交易记录导出") - @GetMapping("/export-cs") + @PostMapping("/export-cs") @SysLog("商户交易记录导出") @PreAuthorize("@pms.hasPermission('hard_hardTotal_export_cs')") - public void exportTk(HttpServletResponse response, HardOrderDto dto) throws IOException { + public void exportTk(HttpServletResponse response, @RequestBody HardOrderDto dto) throws IOException { dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); // 查询商户和下面的子商户 List mchDtoIds = new ArrayList<>(); @@ -308,10 +308,10 @@ public class HardOrderTotalController { } @Operation(summary = "支付方式交易记录", description = "支付方式交易记录") - @GetMapping("/export-payType") + @PostMapping("/export-payType") @SysLog("支付方式交易记录") @PreAuthorize("@pms.hasPermission('hard_hardTotal_export_payType')") - public void exportPayType(HttpServletResponse response, HardOrderDto dto) throws IOException { + public void exportPayType(HttpServletResponse response, @RequestBody HardOrderDto dto) throws IOException { List list = hardOrderTotalService.listPayType(dto); try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream("file/支付方式交易汇总.xlsx")).build()) { WriteSheet writeSheet = EasyExcel.writerSheet().build(); diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java index 2b66394c0..ea1440ecf 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/pay/ThirdPayVoStatusEnum.java @@ -15,6 +15,7 @@ public enum ThirdPayVoStatusEnum { SUCCESS(200, "成功"), SIGN_ERROR(400, "签名验证失败"), + PARAMS_ERROR(500, "参数错误"), USER_EXIST(501, "用户不存在"), ORDER_EXIST(502, "订单不存在"), BALANCE_NOT_ENOUGH(505, "用户余额不足"), diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayBaseVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayBaseVo.java new file mode 100644 index 000000000..22ba74d29 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayBaseVo.java @@ -0,0 +1,20 @@ +package com.bsd.pjcloud.thirdparty.vo.pay; + +import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayVoStatusEnum; +import lombok.Data; + +@Data +public class PayBaseVo { + + private Integer code; + + private String message; + + private T data; + + public void set(ThirdPayVoStatusEnum type) { + code = type.getType(); + message = type.getDescription(); + } + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayGetWalletInfoVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayGetWalletInfoVo.java index 1b8126cc6..07e8d1bd6 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayGetWalletInfoVo.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayGetWalletInfoVo.java @@ -13,7 +13,7 @@ public class PayGetWalletInfoVo { /** * 用户真实姓名 */ - private String username; + private String name; /** * 用户余额(分) diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayWalletInfoVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayWalletInfoVo.java new file mode 100644 index 000000000..6cad81f66 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/pay/PayWalletInfoVo.java @@ -0,0 +1,23 @@ +package com.bsd.pjcloud.thirdparty.vo.pay; + +import lombok.Data; + +@Data +public class PayWalletInfoVo { + + /** + * sm4加密后的手机号 + */ + private String signPhone; + + /** + * 用户真实姓名 + */ + private String name; + + /** + * 用户余额(分) + */ + private Integer balance; + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayApiController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayApiController.java index 4970873c3..70d4a1902 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayApiController.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/pay/ThirdPayApiController.java @@ -2,9 +2,12 @@ package com.bsd.pjcloud.thirdparty.controller.pay; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.thirdparty.dto.pay.PayGetWalletInfoDto; import com.bsd.pjcloud.thirdparty.service.ThirdPayApiService; import com.bsd.pjcloud.thirdparty.service.ThirdPayLogService; +import com.bsd.pjcloud.thirdparty.vo.pay.PayBaseVo; +import com.bsd.pjcloud.thirdparty.vo.pay.PayWalletInfoVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; @@ -28,12 +31,16 @@ public class ThirdPayApiController { private final ThirdPayApiService thirdPayApiService; + @Inner(value = false) @Operation(summary = "通过手机号查询用户钱包信息", description = "通过手机号查询用户钱包信息") - @GetMapping("/user-wallet") - public R getWalletInfo(HttpEntity httpEntity, @RequestHeader Map headers) { + @PostMapping("/user-wallet") + public PayBaseVo getWalletInfo(HttpEntity httpEntity, @RequestHeader Map headers) { String body = httpEntity.getBody(); - return R.ok(thirdPayApiService.getWalletInfo(body, headers)); + return thirdPayApiService.getWalletInfo(body, headers); } + + + } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java index 0054b89eb..66e027031 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdPayApiService.java @@ -4,9 +4,7 @@ package com.bsd.pjcloud.thirdparty.service; import com.bsd.pjcloud.thirdparty.dto.pay.PayDto; import com.bsd.pjcloud.thirdparty.dto.pay.PayGetWalletInfoDto; import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto; -import com.bsd.pjcloud.thirdparty.vo.pay.PayGetWalletInfoVo; -import com.bsd.pjcloud.thirdparty.vo.pay.PayVo; -import com.bsd.pjcloud.thirdparty.vo.pay.RefundVo; +import com.bsd.pjcloud.thirdparty.vo.pay.*; import java.util.Map; @@ -25,5 +23,5 @@ public interface ThirdPayApiService { /** * 根据加密的手机号查询用户钱包信息 */ - PayGetWalletInfoVo getWalletInfo(String json, Map headers); + PayBaseVo getWalletInfo(String json, Map headers); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java index 0832e2299..9839c3d6f 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/pay/ThirdPayApiServiceImpl.java @@ -2,7 +2,9 @@ package com.bsd.pjcloud.thirdparty.service.impl.pay; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; +import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayApiBizTypeEnum; +import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayVoStatusEnum; import com.bsd.pjcloud.thirdparty.dto.pay.PayDto; import com.bsd.pjcloud.thirdparty.dto.pay.PayGetWalletInfoDto; import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto; @@ -12,9 +14,10 @@ import com.bsd.pjcloud.thirdparty.service.ThirdKeyManageService; import com.bsd.pjcloud.thirdparty.service.ThirdPayApiService; import com.bsd.pjcloud.thirdparty.service.ThirdPayLogService; import com.bsd.pjcloud.thirdparty.utils.lb.tool.LbRetailSignUtils; -import com.bsd.pjcloud.thirdparty.vo.pay.PayGetWalletInfoVo; -import com.bsd.pjcloud.thirdparty.vo.pay.PayVo; -import com.bsd.pjcloud.thirdparty.vo.pay.RefundVo; +import com.bsd.pjcloud.thirdparty.vo.pay.*; +import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; +import com.bsd.pjcloud.wallet.api.feign.RemoteWalletService; +import com.bsd.pjcloud.wallet.api.vo.WalletManageVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -37,6 +40,8 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService { private final ThirdKeyManageService keyManageService; private final ThirdPayLogService payLogService; + private final RemoteWalletService remoteWalletService; + /** * 扣款 */ @@ -83,17 +88,38 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService { * 根据加密的手机号查询用户钱包信息 */ @Override - public PayGetWalletInfoVo getWalletInfo(String json, Map headers) { + public PayBaseVo getWalletInfo(String json, Map headers) { + PayBaseVo baseVo = new PayBaseVo(); ThirdKeyManageEntity keySetting = keyManageService.checkSignAndReturnConfig(json, headers); if (ObjectUtil.isEmpty(keySetting)) { - - return null; + baseVo.set(ThirdPayVoStatusEnum.SIGN_ERROR); + return baseVo; } PayGetWalletInfoDto dto = JSONUtil.toBean(json, PayGetWalletInfoDto.class); + if (ObjectUtil.isEmpty(dto)) { + baseVo.set(ThirdPayVoStatusEnum.PARAMS_ERROR); + return baseVo; + } // 手机号解密 String phone = LbRetailSignUtils.sm4Decrypt(dto.getSignPhone(), keySetting.getFieldKey()); - - return null; + if (ObjectUtil.isEmpty(phone)) { + baseVo.set(ThirdPayVoStatusEnum.PARAMS_ERROR); + baseVo.setMessage("手机号解迷失败"); + return baseVo; + } + WalletManageVo userWallet = remoteWalletService.getWalletByUserPhone(phone, WalletTypeEnum.EAT).getData(); + if (ObjectUtil.isEmpty(userWallet)) { + baseVo.set(ThirdPayVoStatusEnum.USER_EXIST); + return baseVo; + } + PayGetWalletInfoVo result = new PayGetWalletInfoVo(); + result.setSignPhone(dto.getSignPhone()); + result.setBalance(userWallet.getBalance()); + result.setName(userWallet.getUsername()); + // 返回成功的参数 + baseVo.set(ThirdPayVoStatusEnum.SUCCESS); + baseVo.setData(result); + return baseVo; } } diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java index 083605aa2..1c3e0ba04 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java @@ -54,6 +54,13 @@ public interface RemoteUserService { @GetMapping("/user/info/{username}") R info(@PathVariable("username") String username); + /** + * 根据手机号查询用户 + */ + @NoToken + @GetMapping("/user/inner/phone") + R getInnerByPhone(@RequestParam String phone); + /** * 通过用户id查询用户、角色信息 */ diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java index 188b16c79..852f2a37d 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java @@ -121,6 +121,16 @@ public class SysUserController { return R.ok(userService.findUserInfo(user)); } + /** + * 根据手机号查询用户 + */ + @GetMapping("/user/inner/phone") + R getInnerByPhone(@RequestParam String phone) { + SysUser user = userService.getOne(Wrappers.query().lambda().eq(SysUser::getPhone, phone)); + if (user == null) return R.failed(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERINFO_EMPTY, phone)); + return R.ok(userService.findUserInfo(user)); + } + @GetMapping("/get-by-user-id") public R getByUserId(@RequestParam Long userId) { SysUser user = userService.getOne(Wrappers.query().lambda().eq(SysUser::getUserId, userId)); @@ -361,14 +371,15 @@ public class SysUserController { /** * 根据部门id查询用户列表 + * * @param deptId * @return */ // @Inner @GetMapping("/getUserIdListByDeptId") - public R> getUserIdListByDeptId(@RequestParam("deptId")Long deptId, - @RequestParam(value = "name",required = false) String name) { - return R.ok(userService.listUserIdByDeptId(deptId,name)); + public R> getUserIdListByDeptId(@RequestParam("deptId") Long deptId, + @RequestParam(value = "name", required = false) String name) { + return R.ok(userService.listUserIdByDeptId(deptId, name)); } /** diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteWalletService.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteWalletService.java index 7a1510fbb..e99f9c11e 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteWalletService.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteWalletService.java @@ -32,6 +32,10 @@ public interface RemoteWalletService { @GetMapping("/wallet-manage/get-wallet-by-id") R getWalletById(@RequestParam Long walletId); + @NoToken + @GetMapping("/wallet-manage/get-wallet-by-phone") + R getWalletByUserPhone(@RequestParam String phone, @RequestParam WalletTypeEnum walletTypeCode); + @NoToken @GetMapping("/wallet-manage/get-wallet-by-card-number") R getWalletByCardNumber(@RequestParam String cardNumber); diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java index 07637f83a..551e5035f 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java @@ -89,12 +89,18 @@ public class WalletManageController { @Inner @GetMapping("/get-wallet-by-id") - public R getWalletById(@RequestParam Long walletId) { + public R getWalletById(@RequestParam Long walletId) { WalletManageVo wallet = walletManageMapper.join(walletId); if (ObjectUtil.isEmpty(wallet)) return R.failed("用户钱包不存在"); return R.ok(wallet); } + @Inner + @GetMapping("/get-wallet-by-phone") + public R getWalletByUserPhone(@RequestParam String phone, @RequestParam WalletTypeEnum walletTypeCode) { + return R.ok(walletManageService.getWalletByPhone(phone, walletTypeCode)); + } + @Inner @GetMapping("/get-wallet-by-card-number") public R getWalletByCardNumber(@RequestParam String cardNumber) { diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletTransactionController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletTransactionController.java index 418c53ba6..c3bed9151 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletTransactionController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletTransactionController.java @@ -173,6 +173,7 @@ public class WalletTransactionController { @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") public void exportCz(HttpServletResponse response, @RequestBody WalletTransactionDto dto) { dto.setBizTypes(WalletBizEnum.getTopUpCodes()); + dto.setType(WalletTransactionDto.TYPE_INCOME); List list = walletTransactionService.scopeList(dto, DataScope.of()); walletTransactionService.exportByTemplate(response, dto, "file/个人充值明细.xlsx", list); } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java index 64b29d7da..11a6bbfec 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java @@ -52,6 +52,11 @@ public interface WalletManageService extends IService { */ WalletManageEntity getWallet(@NotNull Long walletId); + /** + * 根据手机号获取钱包 + */ + WalletManageVo getWalletByPhone(String phone, WalletTypeEnum walletTypeCode); + /** * 根据用户id删除用户钱包 */ 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 0693f610e..f34ff94f0 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 @@ -1,5 +1,6 @@ package com.bsd.pjcloud.wallet.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.io.resource.ResourceUtil; @@ -56,7 +57,6 @@ import org.springframework.validation.annotation.Validated; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; -import java.time.LocalDate; import java.util.*; /** @@ -181,6 +181,25 @@ public class WalletManageServiceImpl extends ServiceImpl userIds) { if (ObjectUtil.isEmpty(userIds)) return false;