From a4fce1c895e53b3cacb36194790f7ee7a6d99c5c Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Mon, 11 May 2026 20:08:32 +0800 Subject: [PATCH 01/11] =?UTF-8?q?feat:=E6=9B=B4=E6=96=B0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/constant/CacheConstants.java | 3 ++ .../service/impl/HardDoorFlowServiceImpl.java | 2 +- .../impl/order/HardOrderTotalServiceImpl.java | 8 +++-- .../admin/api/feign/RemoteUserService.java | 5 +++ .../admin/controller/SysUserController.java | 7 +++++ .../service/impl/SysUserServiceImpl.java | 31 +++++++++++++++++++ .../controller/WalletSettingController.java | 9 ++++++ .../impl/WalletSettingServiceImpl.java | 1 + 8 files changed, 62 insertions(+), 4 deletions(-) diff --git a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java index a4c483d4f..15086c6d4 100644 --- a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java +++ b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java @@ -141,6 +141,9 @@ public interface CacheConstants { String WALLET_RULE_PRICE_CONFIG_DETAIL = "wallet:detail:rule_price_config"; + // 用户消费机的额外价格 + String WALLET_USER_DISCOUNTS_LIST = "wallet:detail:user_discounts_list"; + /* ************************************* end 钱包相关 end ************************************* */ /* ************************************* start 第三方对接相关 start ************************************* */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java index d19a3954d..b01f5da88 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java @@ -461,7 +461,7 @@ public class HardDoorFlowServiceImpl extends ServiceImpl usrList = remoteUserService.getUserDeptByIds(List.of(detail.getUserId())).getData(); + List usrList = remoteUserService.getInnerUserDeptByIds(List.of(detail.getUserId())).getData(); if (ObjectUtil.isNotEmpty(usrList)) { DataUtil.convertUserDept(detail, usrList.get(0)); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java index caf10e3b3..bc316ef56 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java @@ -444,9 +444,11 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { } } // 商户 - MchManageVo mchDetail = remoteMchService.getById(totalList.getMerchantId()).getData(); - if (ObjectUtil.isNotEmpty(mchDetail)) { - WalletDataUtil.convertMch(totalList, mchDetail); + if (ObjectUtil.isNotEmpty(totalList.getMerchantId())) { + MchManageVo mchDetail = remoteMchService.getById(totalList.getMerchantId()).getData(); + if (ObjectUtil.isNotEmpty(mchDetail)) { + WalletDataUtil.convertMch(totalList, mchDetail); + } } return totalList; } 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 e3069f1b6..651949d25 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 @@ -90,6 +90,10 @@ public interface RemoteUserService { @PostMapping("/user/inner/list") R> getInnerUserById(@RequestBody List userIds); + @NoToken + @PostMapping("/user/inner/user-dept") + R> getInnerUserDeptByIds(@RequestBody List userIds); + @PostMapping("/user/user-dept") R> getUserDeptByIds(@RequestBody List userIds); @@ -197,6 +201,7 @@ public interface RemoteUserService { /** * 根据角色编码查询用户列表 + * * @param code * @return */ 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 91034a5af..5c355d1dc 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 @@ -469,6 +469,13 @@ public class SysUserController { return R.ok(userService.list(Wrappers.lambdaQuery().in(SysUser::getUserId, userIds))); } + @Inner + @PostMapping("/inner/user-dept") + public R> getInnerUserDeptByIds(@RequestBody List userIds) { + return R.ok(userService.getUserDeptByIds(userIds)); + } + + @PostMapping("/user-dept") public R> getUserDeptByIds(@RequestBody List userIds) { return R.ok(userService.getUserDeptByIds(userIds)); 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 344ca1614..7c5055ca0 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 @@ -75,10 +75,15 @@ import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.PictureData; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CacheEvict; import org.springframework.context.annotation.Lazy; +import org.springframework.data.redis.core.Cursor; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.ScanOptions; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.mock.web.MockMultipartFile; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; @@ -90,6 +95,7 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; +import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -116,6 +122,8 @@ public class SysUserServiceImpl extends ServiceImpl impl private final SysDeptService sysDeptService; + private StringRedisTemplate stringRedisTemplate; + @Lazy private final SysUserFaceService sysUserFaceService; private final SysUserFaceMapper sysUserFaceMapper; @@ -372,6 +380,7 @@ public class SysUserServiceImpl extends ServiceImpl impl sysUser.setNickname(userDto.getNickname()); sysUser.setName(userDto.getName()); sysUser.setEmail(userDto.getEmail()); + deleteDiscountsCacheByUserId(userDto.getUserId()); return R.ok(this.updateById(sysUser)); } @@ -425,6 +434,8 @@ public class SysUserServiceImpl extends ServiceImpl impl remoteWalletService.createWallet(userDto.getUserId()); remoteWalletService.userChange(userDto.getUserId(), Boolean.FALSE); }); + + deleteDiscountsCacheByUserId(userDto.getUserId()); return Boolean.TRUE; } @@ -993,6 +1004,7 @@ public class SysUserServiceImpl extends ServiceImpl impl if (isConsent) { // 创建用户默认钱包 remoteWalletService.createWallet(detail.getUserId()); + deleteDiscountsCacheByUserId(detail.getUserId()); } } catch (Exception e) { e.printStackTrace(); @@ -1056,4 +1068,23 @@ public class SysUserServiceImpl extends ServiceImpl impl } return count > 0; } + + public void deleteDiscountsCacheByUserId(Long userId) { + if (ObjectUtil.isEmpty(userId)) return; + String pattern = CacheConstants.WALLET_USER_DISCOUNTS_LIST + "::" + userId + ":*"; + Set keys = new HashSet<>(); + stringRedisTemplate.execute((RedisCallback) connection -> { + Cursor cursor = connection.scan( + ScanOptions.scanOptions().match(pattern).count(1000).build() + ); + while (cursor.hasNext()) { + keys.add(new String(cursor.next(), StandardCharsets.UTF_8)); + } + return null; + }); + if (!keys.isEmpty()) { + stringRedisTemplate.delete(keys); + } + } + } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletSettingController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletSettingController.java index dba38ef99..0cb940b31 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletSettingController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletSettingController.java @@ -1,5 +1,6 @@ package com.bsd.pjcloud.wallet.controller; +import com.bsd.pjcloud.common.core.constant.CacheConstants; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.common.security.annotation.Inner; @@ -8,6 +9,7 @@ import com.bsd.pjcloud.wallet.api.vo.WalletSettingVo; import com.bsd.pjcloud.wallet.api.vo.WalletXfjDiscounts; import com.bsd.pjcloud.wallet.service.WalletSettingService; import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import org.springframework.cache.annotation.Cacheable; import org.springframework.http.HttpHeaders; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; @@ -56,7 +58,14 @@ public class WalletSettingController { /* ************************************* end app end ************************************* */ /* ************************************* start android start ************************************* */ + @GetMapping("/ad/get-discounts-list") + @Cacheable( + value = CacheConstants.WALLET_USER_DISCOUNTS_LIST, + key = "#userId + ':' + #hardId", + condition = "#userId != null && #hardId != null", + unless = "#result == null || #result.data == null" + ) public R> androidGetDiscountsList(@RequestParam String hardId, @RequestParam Long userId) { return R.ok(walletSettingService.androidGetDiscountsList(hardId, userId)); } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletSettingServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletSettingServiceImpl.java index f2cddc2c0..78de60a5f 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletSettingServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletSettingServiceImpl.java @@ -86,6 +86,7 @@ public class WalletSettingServiceImpl extends ServiceImpl ObjectUtil.isNotEmpty(item.getEnable()) && ObjectUtil.equals(YesNoEnum.YES.getCode(), item.getEnable())).toList(); if (ObjectUtil.isNotEmpty(list)) { discountsList.addAll( list.stream().map(item -> { From 17dd0fc6e9656dae18f07aa96ace5392fb9c126e Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 12 May 2026 10:16:38 +0800 Subject: [PATCH 02/11] =?UTF-8?q?feat=EF=BC=9A=E5=88=A0=E9=99=A4=E7=BC=93?= =?UTF-8?q?=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bsd/pjcloud/admin/service/SysUserService.java | 2 ++ .../bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java | 4 +++- .../admin/service/impl/SysUserTransactionServiceImpl.java | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java index 87b208c90..c028f67fd 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java @@ -239,4 +239,6 @@ public interface SysUserService extends IService { * @return */ List listUserIdByDeptId(Long deptId, String name); + + void deleteDiscountsCacheByUserId(Long userId); } 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 7c5055ca0..c0c2c12b4 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 @@ -61,6 +61,7 @@ import com.bsd.pjcloud.common.core.util.MsgUtils; import com.bsd.pjcloud.common.core.util.R; 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.excel.vo.ErrorMessage; import com.bsd.pjcloud.common.security.service.PjcloudUser; import com.bsd.pjcloud.common.security.util.SecurityUtils; @@ -1069,9 +1070,10 @@ public class SysUserServiceImpl extends ServiceImpl impl return count > 0; } + @Override public void deleteDiscountsCacheByUserId(Long userId) { if (ObjectUtil.isEmpty(userId)) return; - String pattern = CacheConstants.WALLET_USER_DISCOUNTS_LIST + "::" + userId + ":*"; + String pattern = TenantContextHolder.getTenantId() + ":" + CacheConstants.WALLET_USER_DISCOUNTS_LIST + "::" + userId + ":*"; Set keys = new HashSet<>(); stringRedisTemplate.execute((RedisCallback) connection -> { Cursor cursor = connection.scan( 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 3fb9c2beb..f65aea0d6 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 @@ -230,6 +230,7 @@ public class SysUserTransactionServiceImpl extends ServiceImpl Date: Tue, 12 May 2026 15:07:38 +0800 Subject: [PATCH 03/11] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/constant/CacheConstants.java | 9 ++++++ .../hard/service/impl/HardApiServiceImpl.java | 4 +-- .../impl/order/HardOrderServiceImpl.java | 2 +- .../pjcloud/admin/service/SysUserService.java | 1 + .../service/impl/SysDeptServiceImpl.java | 14 +++++++-- .../service/impl/SysUserServiceImpl.java | 2 +- .../wallet/api/feign/RemoteMchService.java | 4 +++ .../controller/WalletManageController.java | 14 +++++++++ .../controller/WalletSettingController.java | 2 +- .../controller/mch/MchManageController.java | 11 +++++++ .../mapper/mch/view/MchDeptViewMapper.java | 2 +- .../wallet/service/MchManageService.java | 8 +++++ .../wallet/service/WalletManageService.java | 5 +++ .../service/impl/WalletManageServiceImpl.java | 19 ++++++++++++ .../impl/WalletSettingServiceImpl.java | 31 +++++++++++++++++-- .../impl/mch/MchManageServiceImpl.java | 29 +++++++++++++++++ .../mapper/mch/view/MchDeptViewMapper.xml | 8 ++++- 17 files changed, 153 insertions(+), 12 deletions(-) diff --git a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java index 15086c6d4..581ae65da 100644 --- a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java +++ b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java @@ -135,6 +135,12 @@ public interface CacheConstants { String WALLET_DETAIL = "wallet:detail:manage"; + // 根据钱包id查询钱包详情 + String WALLET_DETAIL_ID = "wallet:detail:id"; + + // 根据用户id钱包类型查询钱包详情 + String WALLET_DETAIL_USER_ID_WALLET_TYPE = "wallet:detail:user_id_wallet_type"; + String WALLET_TYPE_DETAIL = "wallet:detail:type"; String WALLET_SETTING_DETAIL = "wallet:detail:setting"; @@ -144,6 +150,9 @@ public interface CacheConstants { // 用户消费机的额外价格 String WALLET_USER_DISCOUNTS_LIST = "wallet:detail:user_discounts_list"; + // 用户的食堂商户(从视图里查询) + String WALLET_VIEWS_CANTEEN_MCH = "wallet:detail:view_canteen_mch"; + /* ************************************* end 钱包相关 end ************************************* */ /* ************************************* start 第三方对接相关 start ************************************* */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java index d8e8d2bd2..ff56e27e0 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardApiServiceImpl.java @@ -53,7 +53,7 @@ public class HardApiServiceImpl implements HardApiService { result.setWalletBalance(wallet.getBalance()); result.setWalletIsFreeze(wallet.getIsFreeze()); // 查询用户食堂信息 - MchManageVo mchDetail = remoteMchService.getFirstMchByDeptId(user.getSysUser().getDeptId(), List.of(MerchantTypeEnum.CANTEEN)).getData(); + MchManageVo mchDetail = remoteMchService.getViewsCanteenMchByDeptId(user.getSysUser().getDeptId()).getData(); if (ObjectUtil.isNotEmpty(mchDetail)) { result.setCanteenId(mchDetail.getId()); } @@ -86,7 +86,7 @@ public class HardApiServiceImpl implements HardApiService { result.setWalletBalance(wallet.getBalance()); result.setWalletIsFreeze(wallet.getIsFreeze()); // 查询用户食堂信息 - MchManageVo mchDetail = remoteMchService.getFirstMchByDeptId(user.getSysUser().getDeptId(), List.of(MerchantTypeEnum.CANTEEN)).getData(); + MchManageVo mchDetail = remoteMchService.getViewsCanteenMchByDeptId(user.getSysUser().getDeptId()).getData(); if (ObjectUtil.isNotEmpty(mchDetail)) { result.setCanteenId(mchDetail.getId()); } 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 4b8ff9105..a799d415f 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 @@ -1110,7 +1110,7 @@ public class HardOrderServiceImpl extends ServiceImpl list = mchRuleJoinService.innerMchRoleList(mch.getId()).getData(); if (ObjectUtil.isEmpty(list)) return extraPrice; // 查询用户食堂 - MchManageVo userMch = remoteMchService.getFirstMchByDeptId(sysUser.getDeptId(), List.of(MerchantTypeEnum.CANTEEN)).getData(); + MchManageVo userMch = remoteMchService.getViewsCanteenMchByDeptId(sysUser.getDeptId()).getData(); for (MchRuleJoinDtoVo v : list) { Long basePrice = v.getBasePrice(); Long multiple = v.getMultiple(); diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java index c028f67fd..6664304d8 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java @@ -241,4 +241,5 @@ public interface SysUserService extends IService { List listUserIdByDeptId(Long deptId, String name); void deleteDiscountsCacheByUserId(Long userId); + } diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysDeptServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysDeptServiceImpl.java index aa114d5d3..0342876a0 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysDeptServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysDeptServiceImpl.java @@ -38,6 +38,7 @@ import com.bsd.pjcloud.admin.api.vo.DeptExcelVO; import com.bsd.pjcloud.admin.api.vo.OrgTreeVO; import com.bsd.pjcloud.admin.mapper.*; import com.bsd.pjcloud.admin.service.SysDeptService; +import com.bsd.pjcloud.common.core.constant.CacheConstants; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.excel.vo.ErrorMessage; @@ -46,6 +47,7 @@ import com.bsd.pjcloud.common.security.util.SecurityUtils; import com.bsd.pjcloud.wallet.api.feign.RemoteWalletService; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; @@ -112,9 +114,15 @@ public class SysDeptServiceImpl extends ServiceImpl impl * 修改部门 */ @Override - public Boolean edit(SysDept sysDept) { - boolean isEdit = updateById(sysDept); - remoteWalletService.deptChange(sysDept.getDeptId(), Boolean.FALSE); + @CacheEvict( + value = CacheConstants.WALLET_VIEWS_CANTEEN_MCH, + key = "#dto.getDeptId()", + condition = "#dto.getDeptId() != null", + beforeInvocation = true + ) + public Boolean edit(SysDept dto) { + boolean isEdit = updateById(dto); + remoteWalletService.deptChange(dto.getDeptId(), Boolean.FALSE); return isEdit; } 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 c0c2c12b4..0c84fef92 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 @@ -123,7 +123,7 @@ public class SysUserServiceImpl extends ServiceImpl impl private final SysDeptService sysDeptService; - private StringRedisTemplate stringRedisTemplate; + private final StringRedisTemplate stringRedisTemplate; @Lazy private final SysUserFaceService sysUserFaceService; diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteMchService.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteMchService.java index a54bfdfcb..82aac4bcb 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteMchService.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteMchService.java @@ -52,4 +52,8 @@ public interface RemoteMchService { @NoToken @GetMapping("/mch-manage/get-first-mch-by-dept-id") R getFirstMchByDeptId(@RequestParam Long deptId, @RequestParam List mchType); + + @NoToken + @GetMapping("/mch-manage/get-views-canteen-mch-by-dept-id") + R getViewsCanteenMchByDeptId(@RequestParam Long deptId); } 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 51effbb2f..49d7012b8 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 @@ -5,6 +5,7 @@ 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.constant.CacheConstants; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.DataScopeFuncEnum; @@ -23,6 +24,7 @@ import com.bsd.pjcloud.wallet.mapper.WalletManageMapper; import com.bsd.pjcloud.wallet.service.WalletCodeUseService; import com.bsd.pjcloud.wallet.service.WalletManageService; import jakarta.servlet.http.HttpServletResponse; +import org.springframework.cache.annotation.Cacheable; import org.springframework.security.access.prepost.PreAuthorize; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import org.springdoc.core.annotations.ParameterObject; @@ -91,6 +93,12 @@ public class WalletManageController { @Inner @GetMapping("/get-wallet") +// @Cacheable( +// value = CacheConstants.WALLET_DETAIL_USER_ID_WALLET_TYPE + "#3600", +// key = "#userId + ':' + #walletTypeCode.getCode()", +// condition = "#userId != null && #walletTypeCode.getCode() != null", +// unless = "#result == null || #result.data == null" +// ) public R getWallet(@RequestParam Long userId, @RequestParam WalletTypeEnum walletTypeCode) { WalletManageEntity wallet = walletManageService.getWallet(userId, walletTypeCode); if (ObjectUtil.isEmpty(wallet)) return R.failed("用户钱包不存在"); @@ -99,6 +107,12 @@ public class WalletManageController { @Inner @GetMapping("/get-wallet-by-id") +// @Cacheable( +// value = CacheConstants.WALLET_DETAIL_ID + "#3600", +// key = "#walletId", +// condition = "#walletId != null", +// unless = "#result == null || #result.data != null" +// ) public R getWalletById(@RequestParam Long walletId) { WalletManageVo wallet = walletManageMapper.join(walletId); if (ObjectUtil.isEmpty(wallet)) return R.failed("用户钱包不存在"); diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletSettingController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletSettingController.java index 0cb940b31..98ef02cea 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletSettingController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletSettingController.java @@ -61,7 +61,7 @@ public class WalletSettingController { @GetMapping("/ad/get-discounts-list") @Cacheable( - value = CacheConstants.WALLET_USER_DISCOUNTS_LIST, + value = CacheConstants.WALLET_USER_DISCOUNTS_LIST + "#3600", key = "#userId + ':' + #hardId", condition = "#userId != null && #hardId != null", unless = "#result == null || #result.data == null" diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java index 6d5afbd78..3662c09f4 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java @@ -10,6 +10,7 @@ import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.entity.SysDept; import com.bsd.pjcloud.admin.api.feign.RemoteDeptService; import com.bsd.pjcloud.admin.api.feign.RemoteUserService; +import com.bsd.pjcloud.common.core.constant.CacheConstants; import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.core.util.R; @@ -23,6 +24,7 @@ import com.bsd.pjcloud.wallet.api.dto.MchManageDto; import com.bsd.pjcloud.wallet.api.entity.mch.MchManageEntity; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import com.bsd.pjcloud.wallet.service.MchManageService; +import org.springframework.cache.annotation.Cacheable; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -126,6 +128,15 @@ public class MchManageController { if (ObjectUtil.isEmpty(mchManage)) return R.failed("商户不存在"); return R.ok(mchManage); } + + @Inner + @GetMapping("/get-views-canteen-mch-by-dept-id") + public R getViewsCanteenMchByDeptId(@RequestParam Long deptId) { + MchManageVo mchManage = mchManageService.getViewsCanteenMchByDeptId(deptId); + if (ObjectUtil.isEmpty(mchManage)) return R.failed("商户不存在"); + return R.ok(mchManage); + } + /* ************************************* end 远程调用 end ************************************* */ /* ************************************* start app start ************************************* */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/mch/view/MchDeptViewMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/mch/view/MchDeptViewMapper.java index cda0073fc..d1d0ecee9 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/mch/view/MchDeptViewMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/mch/view/MchDeptViewMapper.java @@ -14,6 +14,6 @@ public interface MchDeptViewMapper { List selectList(@Param("dto") WalletMchDeptViewDto dto); - WalletMchDeptViewVo selectByUserId(@Param("userId") Long userId); + WalletMchDeptViewVo selectByDeptId(@Param("deptId") Long deptId); } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java index 1350069d0..6c9411f13 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java @@ -2,12 +2,15 @@ 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.common.core.constant.CacheConstants; import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.security.service.PjcloudUser; import com.bsd.pjcloud.wallet.api.dto.MchManageDto; import com.bsd.pjcloud.wallet.api.entity.mch.MchManageEntity; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import java.util.ArrayList; import java.util.List; @@ -41,6 +44,11 @@ public interface MchManageService extends IService { MchManageVo getFirstMchByDeptId(Long deptId, List mchTypeList); + /** + * 从视图里获取食堂商户信息 + */ + MchManageVo getViewsCanteenMchByDeptId(Long deptId); + /** * 刷新商户二维码 */ 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 1af969ced..45f93f985 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 @@ -121,4 +121,9 @@ public interface WalletManageService extends IService { * 是够能够使用智能柜 */ String isUseDoor(Long userId); + + /** + * 删除钱包缓存 + */ + void delWalletCache(WalletManageVo wallet); } \ No newline at end of file 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 f09f478cf..7eca58fbb 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 @@ -29,6 +29,7 @@ import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.common.core.util.R; 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.wallet.api.constant.WalletTypeEnum; import com.bsd.pjcloud.wallet.api.dto.WalletManageBalanceDto; import com.bsd.pjcloud.wallet.api.dto.WalletManageDto; @@ -79,6 +80,7 @@ public class WalletManageServiceImpl extends ServiceImpl list) { if (ObjectUtil.isNotEmpty(list)) { // 用户 diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletSettingServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletSettingServiceImpl.java index 78de60a5f..daea0cec3 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletSettingServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletSettingServiceImpl.java @@ -6,9 +6,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.admin.api.feign.RemoteUserService; -import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; +import com.bsd.pjcloud.common.core.constant.CacheConstants; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.core.util.BeanUtils; +import com.bsd.pjcloud.common.data.tenant.TenantContextHolder; import com.bsd.pjcloud.wallet.api.constant.WalletXfjDiscountsEnum; import com.bsd.pjcloud.wallet.api.dto.WalletSettingDto; import com.bsd.pjcloud.wallet.api.entity.WalletSettingEntity; @@ -23,12 +24,19 @@ import com.bsd.pjcloud.wallet.service.WalletSettingService; import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.Cursor; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.ScanOptions; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * 支付设置 @@ -40,6 +48,7 @@ import java.util.List; public class WalletSettingServiceImpl extends ServiceImpl implements WalletSettingService { private final MchManageService mchManageService; + private final StringRedisTemplate stringRedisTemplate; private final RemoteUserService remoteUserService; @@ -60,7 +69,7 @@ public class WalletSettingServiceImpl extends ServiceImpl list = new ArrayList<>(); @@ -125,6 +134,24 @@ public class WalletSettingServiceImpl extends ServiceImpl keys = new HashSet<>(); + stringRedisTemplate.execute((RedisCallback) connection -> { + Cursor cursor = connection.scan( + ScanOptions.scanOptions().match(pattern).count(1000).build() + ); + while (cursor.hasNext()) { + keys.add(new String(cursor.next(), StandardCharsets.UTF_8)); + } + return null; + }); + if (!keys.isEmpty()) { + stringRedisTemplate.delete(keys); + } } @Data diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchManageServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchManageServiceImpl.java index b72ad0153..6f12ef9d3 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchManageServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchManageServiceImpl.java @@ -36,12 +36,16 @@ import com.bsd.pjcloud.wallet.api.entity.WalletTypeEntity; import com.bsd.pjcloud.wallet.api.utils.WalletDataUtil; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import com.bsd.pjcloud.wallet.api.vo.code.MchCollectionCodeVo; +import com.bsd.pjcloud.wallet.api.vo.mch.WalletMchDeptViewVo; import com.bsd.pjcloud.wallet.mapper.MchManageMapper; import com.bsd.pjcloud.wallet.mapper.WalletTypeMapper; +import com.bsd.pjcloud.wallet.mapper.mch.view.MchDeptViewMapper; import com.bsd.pjcloud.wallet.service.MchManageService; import com.bsd.pjcloud.wallet.service.WalletThirdZyService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.context.annotation.Lazy; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.mock.web.MockMultipartFile; @@ -82,6 +86,7 @@ public class MchManageServiceImpl extends ServiceImpl - + + from v_mch_dept_tree a + + and a.deptId = #{deptId} + \ No newline at end of file From 2b131bdc0cb208f0ceb0dec365275b8b1a82c30b Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 12 May 2026 15:37:31 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=80=A7=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/bsd/pjcloud/admin/api/entity/SysUser.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/entity/SysUser.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/entity/SysUser.java index f51ef4d5a..f179726ab 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/entity/SysUser.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/entity/SysUser.java @@ -265,7 +265,7 @@ public class SysUser extends Model implements Serializable { @Schema(description = "编制类型") private String staffingType; - @Schema(description = "性别") - private Integer gender; +// @Schema(description = "性别") +// private Integer gender; } From 2f847923eff8886284e95b53327c1032e93e36c7 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 12 May 2026 16:26:15 +0800 Subject: [PATCH 05/11] =?UTF-8?q?feat:=E7=BC=93=E5=AD=98=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsd/pjcloud/wallet/controller/WalletSettingController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletSettingController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletSettingController.java index 98ef02cea..0cb940b31 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletSettingController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletSettingController.java @@ -61,7 +61,7 @@ public class WalletSettingController { @GetMapping("/ad/get-discounts-list") @Cacheable( - value = CacheConstants.WALLET_USER_DISCOUNTS_LIST + "#3600", + value = CacheConstants.WALLET_USER_DISCOUNTS_LIST, key = "#userId + ':' + #hardId", condition = "#userId != null && #hardId != null", unless = "#result == null || #result.data == null" From 96c058ca9ac51ea6451002b266c7b798dc2c1a1e Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 12 May 2026 20:25:03 +0800 Subject: [PATCH 06/11] =?UTF-8?q?feat:sql=E6=89=93=E5=8D=B0=E5=B8=A6?= =?UTF-8?q?=E5=A0=86=E6=A0=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/mybatis/DruidSqlLogFilter.java | 288 ++++++++++-------- 1 file changed, 154 insertions(+), 134 deletions(-) diff --git a/pjcloud-common/pjcloud-common-data/src/main/java/com/bsd/pjcloud/common/data/mybatis/DruidSqlLogFilter.java b/pjcloud-common/pjcloud-common-data/src/main/java/com/bsd/pjcloud/common/data/mybatis/DruidSqlLogFilter.java index 46b3e23ac..b0500a259 100644 --- a/pjcloud-common/pjcloud-common-data/src/main/java/com/bsd/pjcloud/common/data/mybatis/DruidSqlLogFilter.java +++ b/pjcloud-common/pjcloud-common-data/src/main/java/com/bsd/pjcloud/common/data/mybatis/DruidSqlLogFilter.java @@ -53,159 +53,179 @@ import java.util.Map; @RequiredArgsConstructor public class DruidSqlLogFilter extends FilterEventAdapter { - private static final SQLUtils.FormatOption FORMAT_OPTION = new SQLUtils.FormatOption(false, false); + private static final SQLUtils.FormatOption FORMAT_OPTION = new SQLUtils.FormatOption(false, false); - private final PjcloudMybatisProperties properties; + private final PjcloudMybatisProperties properties; - @Override - protected void statementExecuteBefore(StatementProxy statement, String sql) { - statement.setLastExecuteStartNano(); - } + @Override + protected void statementExecuteBefore(StatementProxy statement, String sql) { + statement.setLastExecuteStartNano(); + } - @Override - protected void statementExecuteBatchBefore(StatementProxy statement) { - statement.setLastExecuteStartNano(); - } + @Override + protected void statementExecuteBatchBefore(StatementProxy statement) { + statement.setLastExecuteStartNano(); + } - @Override - protected void statementExecuteUpdateBefore(StatementProxy statement, String sql) { - statement.setLastExecuteStartNano(); - } + @Override + protected void statementExecuteUpdateBefore(StatementProxy statement, String sql) { + statement.setLastExecuteStartNano(); + } - @Override - protected void statementExecuteQueryBefore(StatementProxy statement, String sql) { - statement.setLastExecuteStartNano(); - } + @Override + protected void statementExecuteQueryBefore(StatementProxy statement, String sql) { + statement.setLastExecuteStartNano(); + } - @Override - protected void statementExecuteAfter(StatementProxy statement, String sql, boolean firstResult) { - statement.setLastExecuteTimeNano(); - } + @Override + protected void statementExecuteAfter(StatementProxy statement, String sql, boolean firstResult) { + statement.setLastExecuteTimeNano(); + } - @Override - protected void statementExecuteBatchAfter(StatementProxy statement, int[] result) { - statement.setLastExecuteTimeNano(); - } + @Override + protected void statementExecuteBatchAfter(StatementProxy statement, int[] result) { + statement.setLastExecuteTimeNano(); + } - @Override - protected void statementExecuteQueryAfter(StatementProxy statement, String sql, ResultSetProxy resultSet) { - statement.setLastExecuteTimeNano(); - } + @Override + protected void statementExecuteQueryAfter(StatementProxy statement, String sql, ResultSetProxy resultSet) { + statement.setLastExecuteTimeNano(); + } - @Override - protected void statementExecuteUpdateAfter(StatementProxy statement, String sql, int updateCount) { - statement.setLastExecuteTimeNano(); - } + @Override + protected void statementExecuteUpdateAfter(StatementProxy statement, String sql, int updateCount) { + statement.setLastExecuteTimeNano(); + } - @Override - public void statement_close(FilterChain chain, StatementProxy statement) throws SQLException { - // 先调用父类关闭 statement - super.statement_close(chain, statement); - // 支持动态开启 - if (!properties.isShowSql()) { - return; - } + @Override + public void statement_close(FilterChain chain, StatementProxy statement) throws SQLException { + // 先调用父类关闭 statement + super.statement_close(chain, statement); + // 支持动态开启 + if (!properties.isShowSql()) { + return; + } - // 是否开启调试 - if (!log.isInfoEnabled()) { - return; - } + // 是否开启调试 + if (!log.isInfoEnabled()) { + return; + } - // 打印可执行的 sql - String sql = statement.getBatchSql(); - // sql 为空直接返回 - if (StringUtils.isEmpty(sql)) { - return; - } + // 打印可执行的 sql + String sql = statement.getBatchSql(); + // sql 为空直接返回 + if (StringUtils.isEmpty(sql)) { + return; + } - String dbType = statement.getConnectionProxy().getDirectDataSource().getDbType(); + String dbType = statement.getConnectionProxy().getDirectDataSource().getDbType(); - // 判断表名是配置了匹配过滤 - if (CollUtil.isNotEmpty(properties.getSkipTable())) { - List skipTableList = properties.getSkipTable(); + // 判断表名是配置了匹配过滤 + if (CollUtil.isNotEmpty(properties.getSkipTable())) { + List skipTableList = properties.getSkipTable(); - List tableNameList = getTablesBydruid(sql, dbType); - if (tableNameList.stream() - .anyMatch(tableName -> StrUtil.containsAnyIgnoreCase(tableName, - ArrayUtil.toArray(skipTableList, String.class)))) { - return; - } - } + List tableNameList = getTablesBydruid(sql, dbType); + if (tableNameList.stream() + .anyMatch(tableName -> StrUtil.containsAnyIgnoreCase(tableName, + ArrayUtil.toArray(skipTableList, String.class)))) { + return; + } + } - int parametersSize = statement.getParametersSize(); - List parameters = new ArrayList<>(parametersSize); - for (int i = 0; i < parametersSize; ++i) { - // 转换参数,处理 java8 时间 - parameters.add(getJdbcParameter(statement.getParameter(i))); - } - String formattedSql = SQLUtils.format(sql, DbType.of(dbType), parameters, FORMAT_OPTION); - printSql(formattedSql, statement); - } + int parametersSize = statement.getParametersSize(); + List parameters = new ArrayList<>(parametersSize); + for (int i = 0; i < parametersSize; ++i) { + // 转换参数,处理 java8 时间 + parameters.add(getJdbcParameter(statement.getParameter(i))); + } + String formattedSql = SQLUtils.format(sql, DbType.of(dbType), parameters, FORMAT_OPTION); + printSqlV2(formattedSql, statement); + } - private static Object getJdbcParameter(JdbcParameter jdbcParam) { - if (jdbcParam == null) { - return null; - } - Object value = jdbcParam.getValue(); - // 处理 java8 时间 - if (value instanceof TemporalAccessor) { - return value.toString(); - } - return value; - } + private static Object getJdbcParameter(JdbcParameter jdbcParam) { + if (jdbcParam == null) { + return null; + } + Object value = jdbcParam.getValue(); + // 处理 java8 时间 + if (value instanceof TemporalAccessor) { + return value.toString(); + } + return value; + } - private static void printSql(String sql, StatementProxy statement) { - // 打印 sql - String sqlLogger = "\n\n======= Sql Logger ======================" + "\n{}" - + "\n======= Sql Execute Time: {} =======\n"; - log.info(sqlLogger, sql.trim(), format(statement.getLastExecuteTimeNano())); - } + private static void printSql(String sql, StatementProxy statement) { + // 打印 sql + String sqlLogger = "\n\n======= Sql Logger ======================" + "\n{}" + + "\n======= Sql Execute Time: {} =======\n"; + log.info(sqlLogger, sql.trim(), format(statement.getLastExecuteTimeNano())); + } - /** - * 格式化执行时间,单位为 ms 和 s,保留三位小数 - * @param nanos 纳秒 - * @return 格式化后的时间 - */ - private static String format(long nanos) { - if (nanos < 1) { - return "0ms"; - } - double millis = (double) nanos / (1000 * 1000); - // 不够 1 ms,最小单位为 ms - if (millis > 1000) { - return String.format("%.3fs", millis / 1000); - } - else { - return String.format("%.3fms", millis); - } - } + private static void printSqlV2(String sql, StatementProxy statement) { + // 打印 sql 和调用堆栈 + StringBuilder sqlLogger = new StringBuilder(); + sqlLogger.append("\n\n======= Sql Logger V2 ======================\n"); + sqlLogger.append("{}\n"); // SQL语句占位符 + sqlLogger.append("======= Sql Execute Time: {} =======\n"); // 执行时间占位符 + sqlLogger.append("======= Call Stack ======================\n"); - /** - * 从SQL中提取表名(sql中出现的所有表) - * @param sql sql语句 - * @param dbType dbType - * @return List - */ - public static List getTablesBydruid(String sql, String dbType) { - List result = new ArrayList(); - List stmtList = SQLUtils.parseStatements(sql, dbType); - for (SQLStatement stmt : stmtList) { - // 也可以用更精确的解析器,如MySqlSchemaStatVisitor - SchemaStatVisitor visitor; - // SQL server 数据库特殊处理 - if (DbType.sqlserver.name().equalsIgnoreCase(dbType)) { - visitor = new SQLServerSchemaStatVisitor(); - } - else { - visitor = new SchemaStatVisitor(); - } - stmt.accept(visitor); - Map tables = visitor.getTables(); - for (TableStat.Name name : tables.keySet()) { - result.add(name.getName()); - } - } - return result; - } + // 获取调用堆栈信息 + StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); + for (int i = 3; i < stackTrace.length; i++) { // 跳过前几个内部调用 + if (stackTrace[i].getClassName().contains("com.bsd.pjcloud")) { // 只记录项目相关的调用 + sqlLogger.append(" at ").append(stackTrace[i].toString()).append("\n"); + } + } + sqlLogger.append("=========================================\n"); + + log.info(sqlLogger.toString(), sql.trim(), format(statement.getLastExecuteTimeNano())); + } + + /** + * 格式化执行时间,单位为 ms 和 s,保留三位小数 + * + * @param nanos 纳秒 + * @return 格式化后的时间 + */ + private static String format(long nanos) { + if (nanos < 1) { + return "0ms"; + } + double millis = (double) nanos / (1000 * 1000); + // 不够 1 ms,最小单位为 ms + if (millis > 1000) { + return String.format("%.3fs", millis / 1000); + } else { + return String.format("%.3fms", millis); + } + } + + /** + * 从SQL中提取表名(sql中出现的所有表) + * + * @param sql sql语句 + * @param dbType dbType + * @return List + */ + public static List getTablesBydruid(String sql, String dbType) { + List result = new ArrayList(); + List stmtList = SQLUtils.parseStatements(sql, dbType); + for (SQLStatement stmt : stmtList) { + // 也可以用更精确的解析器,如MySqlSchemaStatVisitor + SchemaStatVisitor visitor; + // SQL server 数据库特殊处理 + if (DbType.sqlserver.name().equalsIgnoreCase(dbType)) { + visitor = new SQLServerSchemaStatVisitor(); + } else { + visitor = new SchemaStatVisitor(); + } + stmt.accept(visitor); + Map tables = visitor.getTables(); + for (TableStat.Name name : tables.keySet()) { + result.add(name.getName()); + } + } + return result; + } } From 2fe4a4e52224011c2898946383a398dcb0e4cd18 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 12 May 2026 20:33:50 +0800 Subject: [PATCH 07/11] =?UTF-8?q?feat:=E5=88=A4=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pjcloud/hard/service/impl/order/HardOrderServiceImpl.java | 1 + 1 file changed, 1 insertion(+) 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 a799d415f..a340491ea 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 @@ -1762,6 +1762,7 @@ public class HardOrderServiceImpl extends ServiceImpl carList = hardCarService.getByParentCarId(v.getParentCarId()); List carVoList = BeanUtils.toBean(carList, HardCarVo.class); v.setCarList(carVoList); From ef6522fc743dd3c412e2727aba51d4557fb49886 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 12 May 2026 20:44:11 +0800 Subject: [PATCH 08/11] =?UTF-8?q?feat:=E6=AD=A3=E5=B8=B8=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bsd/pjcloud/common/data/mybatis/DruidSqlLogFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pjcloud-common/pjcloud-common-data/src/main/java/com/bsd/pjcloud/common/data/mybatis/DruidSqlLogFilter.java b/pjcloud-common/pjcloud-common-data/src/main/java/com/bsd/pjcloud/common/data/mybatis/DruidSqlLogFilter.java index b0500a259..3cd4c9332 100644 --- a/pjcloud-common/pjcloud-common-data/src/main/java/com/bsd/pjcloud/common/data/mybatis/DruidSqlLogFilter.java +++ b/pjcloud-common/pjcloud-common-data/src/main/java/com/bsd/pjcloud/common/data/mybatis/DruidSqlLogFilter.java @@ -139,7 +139,7 @@ public class DruidSqlLogFilter extends FilterEventAdapter { parameters.add(getJdbcParameter(statement.getParameter(i))); } String formattedSql = SQLUtils.format(sql, DbType.of(dbType), parameters, FORMAT_OPTION); - printSqlV2(formattedSql, statement); + printSql(formattedSql, statement); } private static Object getJdbcParameter(JdbcParameter jdbcParam) { From 1e2aa98c974807a02137236a1e0dbc06fe10b453 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 13 May 2026 09:31:25 +0800 Subject: [PATCH 09/11] =?UTF-8?q?feat:=E6=A0=B9=E6=8D=AE=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=95=86=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/mch/view/MchDeptViewMapper.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/view/MchDeptViewMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/view/MchDeptViewMapper.xml index df84e8b5d..95384c6d7 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/view/MchDeptViewMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/view/MchDeptViewMapper.xml @@ -59,5 +59,7 @@ and a.deptId = #{deptId} + order by a.level asc + limit 1 - \ No newline at end of file + From 00287ca3b7d8a0cfe1d48118034cfc472f7c72a2 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 13 May 2026 10:04:18 +0800 Subject: [PATCH 10/11] =?UTF-8?q?fix:=E5=88=A4=E7=A9=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pjcloud/wallet/service/impl/WalletManageServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7eca58fbb..eba556fb1 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 @@ -104,7 +104,7 @@ public class WalletManageServiceImpl extends ServiceImpl ObjectUtil.equals(v, autoWalletRoleCode)).findFirst().get(); + String role = Arrays.stream(user.getRoleCodes()).filter(v -> ObjectUtil.equals(v, autoWalletRoleCode)).findFirst().orElse(null); if (ObjectUtil.isEmpty(role)) { log.info("|{}|创建用户电子钱包失败,userId:{},没有{}权限", TAG, userId, "WALLET_AUTO_CREATE"); return; From c9f39910f94345a734270eeee5c9361805da310f Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 13 May 2026 10:38:16 +0800 Subject: [PATCH 11/11] =?UTF-8?q?feat:=E7=9B=96=E7=AB=A0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WalletRechargeInvoiceServiceImpl.java | 100 +++++++++++++----- .../java/com/bsd/pjcloud/InvoiceTest.java | 2 +- 2 files changed, 73 insertions(+), 29 deletions(-) diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeInvoiceServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeInvoiceServiceImpl.java index 250f56d1e..37f6bed0e 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeInvoiceServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeInvoiceServiceImpl.java @@ -67,12 +67,12 @@ import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URL; +import java.net.URLConnection; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; @@ -415,42 +415,86 @@ public class WalletRechargeInvoiceServiceImpl extends ServiceImpl upload = remoteFileService.innerUpload(multipartFile, null, null, null); + if (ObjectUtil.isEmpty(upload) || !upload.isOk() || ObjectUtil.isEmpty(upload.getData())) { + log.error("|{}|盖章失败,上传失败,upload:|{}|invoice:|{}|", TAG, JSON.toJSONString(upload), JSONUtil.toJsonStr(invoice)); + return null; + } + Object dataObj = upload.getData(); + if (!(dataObj instanceof Map data)) { + log.error("|{}|盖章失败,上传返回结构异常,data:|{}|invoice:|{}|", TAG, JSON.toJSONString(dataObj), JSONUtil.toJsonStr(invoice)); + return null; + } + Object urlObj = data.get("url"); + return ObjectUtil.isEmpty(urlObj) ? null : String.valueOf(urlObj); + } catch (Exception e) { + log.error("|{}|盖章失败,异常,invoice:|{}|", TAG, JSONUtil.toJsonStr(invoice), e); return null; } } @@ -582,4 +626,4 @@ public class WalletRechargeInvoiceServiceImpl extends ServiceImpl