diff --git a/db/700pjcloudx_merchant.sql b/db/700pjcloudx_merchant.sql deleted file mode 100644 index 886084bbc..000000000 --- a/db/700pjcloudx_merchant.sql +++ /dev/null @@ -1,28 +0,0 @@ --- mch 商户管理 -create database `pjcloudx_mch` default character set utf8mb4 collate utf8mb4_general_ci; - -DROP TABLE IF EXISTS `mch_manage`; -CREATE TABLE mch_manage -( - id bigint NOT NULL COMMENT '主键', - dept_id bigint NOT NULL COMMENT '绑定的部门id', - name varchar(64) NOT NULL COMMENT '商户名', - types varchar(64) NOT NULL COMMENT '店铺类型,逗号分隔', - logo_pic varchar(256) NOT NULL COMMENT '商户logo图片', - collection_code varchar(256) DEFAULT '' COMMENT '商户收款码,自动生成', - swiper_pic text DEFAULT NULL COMMENT '商户轮播图,逗号分隔', - phone varchar(128) DEFAULT '' COMMENT '商户手机号', - job_start_time timestamp DEFAULT NULL COMMENT '商户开始营业时间', - job_end_time timestamp DEFAULT NULL COMMENT '商户结束营业时间', - address_des varchar(256) 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 '修改人', - update_time datetime DEFAULT NULL COMMENT '修改时间', - del_flag char(1) COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记', - tenant_id bigint DEFAULT NULL COMMENT '租户ID', - PRIMARY KEY (id) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_general_ci COMMENT ='商户管理'; -CREATE INDEX idx_dept_id ON mch_manage (dept_id); \ No newline at end of file diff --git a/db/800pjcloudx_wallet.sql b/db/800pjcloudx_wallet.sql index bad0e5c45..d22e44b61 100644 --- a/db/800pjcloudx_wallet.sql +++ b/db/800pjcloudx_wallet.sql @@ -15,8 +15,8 @@ CREATE TABLE mch_manage collection_code varchar(256) DEFAULT '' COMMENT '商户收款码,自动生成', swiper_pic text DEFAULT NULL COMMENT '商户轮播图,逗号分隔', phone varchar(128) DEFAULT '' COMMENT '商户手机号', - job_start_time timestamp DEFAULT NULL COMMENT '商户开始营业时间', - job_end_time timestamp DEFAULT NULL COMMENT '商户结束营业时间', + job_start_time time DEFAULT NULL COMMENT '商户开始营业时间', + job_end_time time DEFAULT NULL COMMENT '商户结束营业时间', address_des varchar(256) DEFAULT NULL COMMENT '商户地址', create_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', create_time datetime DEFAULT NULL COMMENT '创建时间', @@ -88,9 +88,9 @@ DROP TABLE IF EXISTS wallet_active; CREATE TABLE wallet_active ( id bigint NOT NULL COMMENT '主键', - user_id bigint NOT NULL COMMENT '用户id', - wallet_id bigint NOT NULL COMMENT '钱包id', - wallet_type_id bigint NOT NULL COMMENT '饭卡类型id', + user_id bigint DEFAULT NULL COMMENT '用户id', + wallet_id bigint DEFAULT NULL COMMENT '钱包id', + wallet_type_id bigint DEFAULT NULL COMMENT '饭卡类型id', dept_id bigint NOT NULL COMMENT '部门id', merchant_id bigint NOT NULL COMMENT '商户id', card_number varchar(128) NOT NULL COMMENT '用户卡号', @@ -106,7 +106,6 @@ CREATE TABLE wallet_active ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='钱包开卡'; CREATE INDEX idx_dept_id ON wallet_active (user_id); -CREATE INDEX idx_dept_id ON wallet_active (dept_id); -- ---------------------------- -- Table structure for wallet_freeze @@ -193,10 +192,11 @@ CREATE TABLE wallet_recharge_apply COLLATE = utf8mb4_general_ci COMMENT ='充值申请表'; CREATE INDEX idx_dept_id ON wallet_recharge_apply (user_id); +DROP TABLE IF EXISTS wallet_recharge_import; CREATE TABLE wallet_recharge_import ( id bigint NOT NULL COMMENT '编号', - user_id bigint NOT NULL COMMENT '用户id', + user_id bigint default NULL COMMENT '用户id', apply_id bigint NOT NULL COMMENT '申请id', before_price int DEFAULT NULL COMMENT '导入前的金额', price int NOT NULL COMMENT '交易金额, 单位分', diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/MchManageDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/MchManageDto.java index e8f477052..508ace06f 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/MchManageDto.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/MchManageDto.java @@ -16,4 +16,6 @@ public class MchManageDto extends MchManageEntity { private List deptIds; + private List ids; + } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletActiveDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletActiveDto.java index 3da2f5f95..d89563823 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletActiveDto.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletActiveDto.java @@ -7,6 +7,8 @@ import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; import lombok.Data; +import java.util.List; + @Data public class WalletActiveDto extends WalletActiveEntity { @@ -19,7 +21,7 @@ public class WalletActiveDto extends WalletActiveEntity { @NotNull(message = "商户id不能为空") private Long merchantId; - @NotNull(message = "钱包类型id不能为空") private Long walletTypeId; + private List userIds; } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/MchManageEntity.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/MchManageEntity.java index cb8cd549c..c6fb65b30 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/MchManageEntity.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/MchManageEntity.java @@ -1,12 +1,15 @@ package com.bsd.pjcloud.wallet.api.entity; +import cn.hutool.core.date.DatePattern; import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonFormat; 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; +import java.time.LocalTime; /** * 商户管理 @@ -75,13 +78,15 @@ public class MchManageEntity extends Model { * 商户开始营业时间 */ @Schema(description="商户开始营业时间") - private LocalDateTime jobStartTime; + @JsonFormat(pattern = DatePattern.NORM_TIME_PATTERN) + private LocalTime jobStartTime; /** * 商户结束营业时间 */ @Schema(description="商户结束营业时间") - private LocalDateTime jobEndTime; + @JsonFormat(pattern = DatePattern.NORM_TIME_PATTERN) + private LocalTime jobEndTime; /** * 商户地址 diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/utils/MchDataUtil.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/utils/MchDataUtil.java index 279c2ed01..20e7e642d 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/utils/MchDataUtil.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/utils/MchDataUtil.java @@ -15,12 +15,12 @@ import java.util.Map; public class MchDataUtil { public List convertMchList(List list, Map map) { - return CollectionUtils.convertList(list, v -> convertMch(v, map.get(v.getMchId()))); + return CollectionUtils.convertList(list, v -> convertMch(v, map.get(v.getMerchantId()))); } public T convertMch(T v, MchManageVo vo) { if (ObjectUtil.isEmpty(vo)) return v; - v.setMchName(vo.getName()); + v.setMerchantName(vo.getName()); return v; } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletActiveVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletActiveVo.java index 27f250d4e..bff468891 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletActiveVo.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletActiveVo.java @@ -1,8 +1,30 @@ package com.bsd.pjcloud.wallet.api.vo; +import com.bsd.pjcloud.admin.api.vo.base.BaseDeptInterface; +import com.bsd.pjcloud.admin.api.vo.base.BaseUserInterface; import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity; +import com.bsd.pjcloud.wallet.api.vo.base.BaseMchInterface; import lombok.Data; + @Data -public class WalletActiveVo extends WalletActiveEntity { +public class WalletActiveVo extends WalletActiveEntity implements BaseUserInterface, BaseDeptInterface, BaseMchInterface { + /** + * 用户相关 + */ + private String username; + + private String userMobile; + + private String userAvatar; + + /** + * 部门相关 + */ + private String deptName; + + /** + * 商户相关 + */ + private String merchantName; } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/base/BaseMchInterface.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/base/BaseMchInterface.java index a4ba9c7b2..afc7012a9 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/base/BaseMchInterface.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/base/BaseMchInterface.java @@ -5,15 +5,15 @@ public interface BaseMchInterface { /** * 商户id */ - Long getMchId(); + Long getMerchantId(); - void setMchId(Long dchId); + void setMerchantId(Long dchId); /** * 商户名 */ - String getMchName(); + String getMerchantName(); - void setMchName(String dchName); + void setMerchantName(String dchName); } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/MchManageController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/MchManageController.java index a9234a074..010a0ecb6 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/MchManageController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/MchManageController.java @@ -10,10 +10,8 @@ import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.common.security.annotation.Inner; -import com.bsd.pjcloud.wallet.api.constant.WalletTypeCodeEnum; import com.bsd.pjcloud.wallet.api.dto.MchManageDto; import com.bsd.pjcloud.wallet.api.entity.MchManageEntity; -import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import com.bsd.pjcloud.wallet.service.MchManageService; import org.springframework.security.access.prepost.PreAuthorize; @@ -42,7 +40,7 @@ import java.util.List; public class MchManageController { private final MchManageService mchManageService; - + /* ************************************* start 远程调用 start ************************************* */ @Inner diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletActiveController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletActiveController.java index 1a7fdc47f..d6d7f5b23 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletActiveController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletActiveController.java @@ -11,6 +11,7 @@ import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.wallet.api.dto.WalletActiveDto; import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity; import com.bsd.pjcloud.wallet.service.WalletActiveService; +import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -23,8 +24,6 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; -import java.util.Objects; -import java.util.concurrent.TimeUnit; /** * 钱包开卡 @@ -45,7 +44,7 @@ public class WalletActiveController { @PostMapping("/fast-create-card") @Operation(summary = "一键开卡") @Idempotent(info = "正在开卡中,请勿重复提交") - public R fastCreateCard(WalletActiveDto dto) { + public R fastCreateCard(@Valid @RequestBody WalletActiveDto dto) { walletActiveService.fastCreateCard(dto); return R.ok(true); } @@ -65,6 +64,20 @@ public class WalletActiveController { return R.ok(walletActiveService.page(page, wrapper)); } + /** + * 分页复杂查询 + * + * @param page 分页对象 + * @param walletActive 钱包开卡 + * @return + */ + @Operation(summary = "分页复杂查询", description = "分页复杂查询") + @GetMapping("/page-join") + @PreAuthorize("@pms.hasPermission('wallet_walletActive_view')") + public R getWalletActivePageJoin(@ParameterObject Page page, @ParameterObject WalletActiveDto dto) { + return R.ok(walletActiveService.pageJoin(page, dto)); + } + /** * 通过id查询钱包开卡 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 3edc018a8..6f163c994 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 @@ -27,7 +27,8 @@ public interface MchManageMapper extends PjcloudBaseMapper { MPJLambdaQueryWrapper wrapper = new MPJLambdaQueryWrapper() .selectAll(MchManageEntity.class) .likeIfExists(MchManageEntity::getName, dto.getName()) - .in(ObjectUtil.isNotEmpty(dto.getDeptIds()), MchManageEntity::getDeptId, dto.getDeptIds()); + .in(ObjectUtil.isNotEmpty(dto.getDeptIds()), MchManageEntity::getDeptId, dto.getDeptIds()) + .in(ObjectUtil.isNotEmpty(dto.getIds()), MchManageEntity::getId, dto.getIds()); return selectJoinList(MchManageVo.class, wrapper); } } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletActiveMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletActiveMapper.java index 667e1c529..4472ae6c9 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletActiveMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletActiveMapper.java @@ -1,11 +1,23 @@ package com.bsd.pjcloud.wallet.mapper; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.wallet.api.dto.WalletActiveDto; import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity; +import com.bsd.pjcloud.wallet.api.vo.WalletActiveVo; +import com.github.yulichang.query.MPJLambdaQueryWrapper; import org.apache.ibatis.annotations.Mapper; @Mapper public interface WalletActiveMapper extends PjcloudBaseMapper { - + default Page pageJoin(Page page, WalletActiveDto dto) { + MPJLambdaQueryWrapper wrapper = new MPJLambdaQueryWrapper() + .selectAll(WalletActiveEntity.class) + .likeIfExists(WalletActiveEntity::getCardNumber, dto.getCardNumber()) + .eqIfExists(WalletActiveEntity::getIsActiveHardware, dto.getIsActiveHardware()) + .in(ObjectUtil.isNotEmpty(dto.getUserIds()), WalletActiveEntity::getId, dto.getUserIds()); + return selectJoinPage(page, WalletActiveVo.class, wrapper); + } } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletActiveService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletActiveService.java index 85dcb627c..7fa47e0a2 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletActiveService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletActiveService.java @@ -1,8 +1,10 @@ package com.bsd.pjcloud.wallet.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.wallet.api.dto.WalletActiveDto; import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity; +import com.bsd.pjcloud.wallet.api.vo.WalletActiveVo; public interface WalletActiveService extends IService { /** @@ -11,4 +13,6 @@ public interface WalletActiveService extends IService { * @param dto */ void fastCreateCard(WalletActiveDto dto); + + Page pageJoin(Page page, WalletActiveDto dto); } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/MchManageServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/MchManageServiceImpl.java index 43ee9fd8d..5fea534a3 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/MchManageServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/MchManageServiceImpl.java @@ -69,7 +69,7 @@ public class MchManageServiceImpl extends ServiceImpl implements WalletActiveService { private final WalletTypeService walletTypeService; + private final MchManageService mchManageService; + + private final RemoteUserService userService; + private final RemoteDeptService deptService; @Override @Transactional(rollbackFor = Exception.class) public void fastCreateCard(WalletActiveDto dto) { Long count = dto.getCount(); // 查询饭卡钱包类型 - WalletTypeEntity walletType = walletTypeService.getById(dto.getWalletTypeId()); + WalletTypeEntity walletType = walletTypeService.getByUniqueCode(WalletTypeCodeEnum.CANTEEN); if (ObjectUtil.isEmpty(walletType)) throw new CheckedException("钱包类型不存在"); // 查询商户 - + MchManageEntity mchManage = mchManageService.getById(dto.getMerchantId()); + if (ObjectUtil.isEmpty(mchManage)) throw new CheckedException("商户不存在"); int startNum = 1; WalletActiveEntity last = getLast(); if (ObjectUtil.isNotEmpty(last)) startNum = last.getCardSort(); @@ -53,16 +74,43 @@ public class WalletActiveServiceImpl extends ServiceImpl pageJoin(Page page, WalletActiveDto dto) { + Page list = baseMapper.pageJoin(page, dto); + if (ObjectUtil.isNotEmpty(list.getRecords())) { + // 用户 + List userIds = list.getRecords().stream().map(WalletActiveVo::getUserId).distinct().toList(); + R> userList = userService.getUserById(new ArrayList<>(userIds)); + if (ObjectUtil.isNotEmpty(userList.getData())) { + DataUtil.convertUserList(page.getRecords(), CollectionUtils.convertMap(userList.getData(), SysUser::getUserId)); + } + // 部门 + List deptIds = list.getRecords().stream().map(WalletActiveVo::getDeptId).distinct().toList(); + R> deptList = deptService.getDeptByDeptIds(deptIds); + if (ObjectUtil.isNotEmpty(deptList.getData())) { + DataUtil.convertDeptList(page.getRecords(), deptList.getData()); + } + // 商户 + List mchIds = list.getRecords().stream().map(WalletActiveVo::getMerchantId).distinct().toList(); + List mchList = mchManageService.list(MchManageDto.builder().ids(mchIds).build()); + if (ObjectUtil.isNotEmpty(mchList)) { + MchDataUtil.convertMchList(page.getRecords(), CollectionUtils.convertMap(mchList, MchManageVo::getId)); + } + } + return list; + } + private WalletActiveEntity getLast() { LambdaQueryWrapper query = new LambdaQueryWrapper(); query.orderByDesc(WalletActiveEntity::getId).last("LIMIT 1");