From e00e69ccbba6e5840dc9591df9e80b86d2b0377a Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 22 May 2026 16:46:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BC=98=E5=8C=96=E4=BA=91=E7=89=88?= =?UTF-8?q?=E6=B6=88=E8=B4=B9=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/constant/CacheConstants.java | 5 + .../controller/xfj/HardXfjController.java | 1 + .../controller/xfj/HardXfjLogController.java | 10 -- .../hard/service/impl/HardApiServiceImpl.java | 4 +- .../impl/order/HardOrderServiceImpl.java | 2 +- .../service/impl/xfj/HardXfjServiceImpl.java | 59 +++++++- .../initconfig/WechatConfiguration.java | 14 ++ .../service/ThirdAppPlusWechatFzService.java | 13 ++ .../impl/appplus/ThirdAppPlusServiceImpl.java | 2 +- .../ThirdAppPlusWechatServiceImpl.java | 3 +- .../fz/ThirdAppPlusWechatFzServiceImpl.java | 37 +++++ .../pjcloud/admin/service/SysDeptService.java | 2 +- .../service/impl/SysDeptServiceImpl.java | 12 +- .../src/main/resources/wallet_active.xlsx | Bin 0 -> 9580 bytes .../wallet/api/dto/WalletActiveDto.java | 5 + .../wallet/api/dto/WalletImportActiveDto.java | 43 ++++++ .../api/dto/WalletRemoteOpenCardListDto.java | 33 +++++ .../wallet/api/feign/RemoteMchService.java | 4 + .../wallet/api/feign/RemoteWalletService.java | 8 +- .../controller/WalletActiveController.java | 28 +++- .../controller/mch/MchManageController.java | 8 ++ .../WalletRechargeApplyController.java | 1 - .../mapper/mch/view/MchDeptViewMapper.java | 2 + .../wallet/service/MchManageService.java | 5 + .../wallet/service/WalletActiveService.java | 11 ++ .../service/impl/WalletActiveServiceImpl.java | 128 ++++++++++++++++-- .../impl/mch/MchManageServiceImpl.java | 34 ++++- .../resources/mapper/WalletActiveMapper.xml | 44 +++--- .../mapper/mch/view/MchDeptViewMapper.xml | 12 +- 29 files changed, 464 insertions(+), 66 deletions(-) create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdAppPlusWechatFzService.java create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/fz/ThirdAppPlusWechatFzServiceImpl.java create mode 100644 pjcloud-upms/pjcloud-upms-biz/src/main/resources/wallet_active.xlsx create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletImportActiveDto.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletRemoteOpenCardListDto.java 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..23937c2f9 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_VIEWS_CANTEEN_MCH = "wallet:detail:view_canteen_mch"; + /* ************************************* end 钱包相关 end ************************************* */ /* ************************************* start 第三方对接相关 start ************************************* */ @@ -157,6 +160,8 @@ public interface CacheConstants { String HARDER_ORDER_NON_PAY = "hard:order:non_pay"; + String HARD_XFJ_WHITE_LIST_LOCK = "hard:xfj:whitelist:lock"; + /* ************************************* end 订单相关 end ************************************* */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/xfj/HardXfjController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/xfj/HardXfjController.java index c44fef668..05731c66c 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/xfj/HardXfjController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/xfj/HardXfjController.java @@ -9,6 +9,7 @@ import com.bsd.pjcloud.hard.service.HardXfjService; 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.servlet.http.HttpServletRequest; import jakarta.websocket.server.PathParam; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpEntity; diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/xfj/HardXfjLogController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/xfj/HardXfjLogController.java index 8e300f90e..4b177c760 100755 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/xfj/HardXfjLogController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/xfj/HardXfjLogController.java @@ -1,17 +1,10 @@ package com.bsd.pjcloud.hard.controller.xfj; -import cn.hutool.core.util.ArrayUtil; -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.util.R; -import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.hard.api.dto.xfj.HardXfjLogDto; -import com.bsd.pjcloud.hard.api.entity.xfj.HardXfjLogEntity; import com.bsd.pjcloud.hard.service.HardXfjLogService; 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; @@ -20,9 +13,6 @@ import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.List; -import java.util.Objects; - /** * 消费机日志 */ 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 c2d999f15..ce60d986a 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 @@ -51,7 +51,7 @@ public class HardApiServiceImpl implements HardApiService { result.setWalletBalance(wallet.getBalance()); result.setWalletIsFreeze(wallet.getIsFreeze()); // 查询用户食堂信息 - MchManageVo mchDetail = remoteMchService.getFirstMchByDeptId(user.getSysUser().getDeptId(), MerchantTypeEnum.CANTEEN).getData(); + MchManageVo mchDetail = remoteMchService.getViewsCanteenMchByDeptId(user.getSysUser().getDeptId()).getData(); if (ObjectUtil.isNotEmpty(mchDetail)) { result.setCanteenId(mchDetail.getId()); } @@ -84,7 +84,7 @@ public class HardApiServiceImpl implements HardApiService { result.setWalletBalance(wallet.getBalance()); result.setWalletIsFreeze(wallet.getIsFreeze()); // 查询用户食堂信息 - MchManageVo mchDetail = remoteMchService.getFirstMchByDeptId(user.getSysUser().getDeptId(), 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 d08ec5f34..e40064de3 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 @@ -1380,7 +1380,7 @@ public class HardOrderServiceImpl extends ServiceImpl list = mchRuleJoinService.innerMchRoleList(mch.getId()).getData(); if (ObjectUtil.isEmpty(list)) return extraPrice; // 查询用户食堂 - MchManageVo userMch = remoteMchService.getFirstMchByDeptId(sysUser.getDeptId(), 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-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/xfj/HardXfjServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/xfj/HardXfjServiceImpl.java index 0e307323d..35e21a686 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/xfj/HardXfjServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/xfj/HardXfjServiceImpl.java @@ -8,6 +8,7 @@ import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.feign.RemoteUserService; +import com.bsd.pjcloud.common.core.constant.CacheConstants; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; import com.bsd.pjcloud.hard.api.constant.xfj.HardXfjTypeEnum; @@ -24,6 +25,7 @@ import com.bsd.pjcloud.hard.api.vo.xfj.*; import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; import com.bsd.pjcloud.hard.service.*; import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; +import com.bsd.pjcloud.wallet.api.dto.WalletRemoteOpenCardListDto; import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity; import com.bsd.pjcloud.wallet.api.entity.WalletCodeUseEntity; import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; @@ -32,6 +34,7 @@ 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.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -63,6 +66,8 @@ public class HardXfjServiceImpl implements HardXfjService { private final RemoteUserService remoteUserService; private final RemoteWalletService walletService; + private final StringRedisTemplate redisTemplate; + /** * 检查设备并返回配置 */ @@ -154,7 +159,7 @@ public class HardXfjServiceImpl implements HardXfjService { result.setMsg(e.getMessage()); return result; } finally { - saveLogger(logger); + // saveLogger(logger); } } @@ -689,8 +694,30 @@ public class HardXfjServiceImpl implements HardXfjService { public XfjWhiteListVo whiteList(String body, Map headers) { HardXfjLogEntity logger = initLogger(body, headers, "获取卡号白名单接口"); XfjWhiteListVo result = new XfjWhiteListVo(); + + Boolean hasLock = false; + + Map transitionHeader = new LinkedHashMap<>(); + for (Map.Entry entry : headers.entrySet()) { + transitionHeader.put(entry.getKey().toUpperCase(), entry.getValue()); + } + String uniqueCode = transitionHeader.get("DEVICE-ID"); + if (ObjectUtil.isEmpty(uniqueCode)) { + return null; + } + String lockKey = CacheConstants.HARD_XFJ_WHITE_LIST_LOCK + ":" + uniqueCode; + // 检查是否存在锁 + hasLock = redisTemplate.hasKey(lockKey); + if (ObjectUtil.isNotEmpty(hasLock) && hasLock) { + log.warn("|获取卡号白名单接口|设备uniqueCode:{}在30分钟内已查询过,拒绝重复查询", uniqueCode); + return null; + } + try { HardManagerEntity entity = checkSignAndReturnConfig(body, headers); + if (ObjectUtil.isEmpty(entity)) { + return null; + } logger.setUniqueCode(entity.getUniqueCode()); // 获取参数 XfjWhiteListDto dto = JSONUtil.toBean(body, XfjWhiteListDto.class); @@ -700,10 +727,25 @@ public class HardXfjServiceImpl implements HardXfjService { if (!ObjectUtil.isAllNotEmpty(dto.getPage(), dto.getPageNumber(), dto.getCommID())) { throw new RuntimeException("解析参数错误"); } - // 查询开卡数据 - Page walletActivePage = walletService.remoteOpenCardList(dto.getPage(), dto.getPageNumber()).getData(); + + // 查询开卡数据(只查询本部门及以下的) + WalletRemoteOpenCardListDto openCardListDto = new WalletRemoteOpenCardListDto(); + openCardListDto.setCurrent(dto.getPage()); + openCardListDto.setPageSize(dto.getPageNumber()); + openCardListDto.setMchId(entity.getMerchantId()); + openCardListDto.setCarNumberLength(10); + Page walletActivePage = walletService.remoteOpenCardList(openCardListDto).getData(); if (ObjectUtil.isEmpty(walletActivePage) || ObjectUtil.isEmpty(walletActivePage.getRecords())) { - throw new RuntimeException("查询开卡数据为空"); + // 查询完成,设置30分钟的锁 + redisTemplate.opsForValue().set(lockKey, "1", Duration.ofMinutes(30)); + log.info("|获取卡号白名单接口|设备 {} 查询完成,设置30分钟锁", entity.getUniqueCode()); + + result.setCommID(dto.getCommID()); + result.setPage(dto.getPage()); + result.setPageLen(0L); + result.setUptate("0"); + result.setWLData(""); + return result; } List walletActiveRecords = walletActivePage.getRecords(); List whiteCarList = new ArrayList<>(); @@ -711,6 +753,9 @@ public class HardXfjServiceImpl implements HardXfjService { boolean isSelectEnd = false; if (walletActiveRecords.size() < dto.getPageNumber()) { isSelectEnd = true; + // 查询完成,设置30分钟的锁 + redisTemplate.opsForValue().set(lockKey, "1", Duration.ofMinutes(30)); + log.info("|获取卡号白名单接口|设备 {} 查询完成,设置30分钟锁", entity.getUniqueCode()); } for (WalletActiveEntity item : walletActiveRecords) { String whiteCarNumber = generateWhiteCarNumber(String.valueOf(item.getCardSort()), item.getCardNumber(), ObjectUtil.equals(item.getDelFlag(), YesNoEnum.YES.getCode()) ? "0" : "1"); @@ -718,7 +763,7 @@ public class HardXfjServiceImpl implements HardXfjService { } result.setCommID(dto.getCommID()); result.setPage(dto.getPage()); - result.setPageLen(dto.getPageNumber()); + result.setPageLen((long) walletActiveRecords.size()); result.setUptate(isSelectEnd ? "0" : "1"); result.setWLData(whiteCarList.stream().collect(Collectors.joining(","))); return result; @@ -730,7 +775,9 @@ public class HardXfjServiceImpl implements HardXfjService { result.setMsg(e.getMessage()); return result; } finally { - saveLogger(logger); + if (ObjectUtil.isNotEmpty(hasLock) && !hasLock) { + saveLogger(logger); + } } } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/initconfig/WechatConfiguration.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/initconfig/WechatConfiguration.java index c341ca50b..451110c82 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/initconfig/WechatConfiguration.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/initconfig/WechatConfiguration.java @@ -15,6 +15,7 @@ import com.wechat.pay.java.service.partnerpayments.app.AppService; import com.wechat.pay.java.service.partnerpayments.app.AppServiceExtension; import com.wechat.pay.java.service.partnerpayments.jsapi.JsapiServiceExtension; import com.wechat.pay.java.service.partnerpayments.nativepay.NativePayService; +import com.wechat.pay.java.service.profitsharing.ProfitsharingService; import com.wechat.pay.java.service.refund.RefundService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -83,4 +84,17 @@ public class WechatConfiguration { return new RefundService.Builder().config(config).build(); } + // 分账服务 + @Bean + public ProfitsharingService profitsharingService() { + AppPlusPayConfig.WechatConfig wechatConfig = properties.getWechatConfig(); + Config config = new RSAAutoCertificateConfig.Builder() + .merchantId(wechatConfig.getMerchantId()) + .privateKeyFromPath(wechatConfig.getMchPrivatePath()) + .merchantSerialNumber(wechatConfig.getMerchantSerialNumber()) + .apiV3Key(wechatConfig.getApiV3Key()) + .build(); + return new ProfitsharingService.Builder().config(config).build(); + } + } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdAppPlusWechatFzService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdAppPlusWechatFzService.java new file mode 100644 index 000000000..e82ccf752 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdAppPlusWechatFzService.java @@ -0,0 +1,13 @@ +package com.bsd.pjcloud.thirdparty.service; + + +import com.bsd.pjcloud.thirdparty.entity.pay.ThirdPayOrderEntity; + +public interface ThirdAppPlusWechatFzService { + + /** + * 发起分账 + */ + void create(ThirdPayOrderEntity orderEntity); + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusServiceImpl.java index e33cd8fe6..22154286d 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusServiceImpl.java @@ -240,7 +240,7 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { if (ObjectUtil.isEmpty(userInfo)) { throw new RuntimeException("用户不存在"); } - MchManageVo mchManage = remoteMchService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId(), MerchantTypeEnum.CANTEEN).getData(); + MchManageVo mchManage = remoteMchService.getViewsCanteenMchByDeptId(userInfo.getSysUser().getDeptId()).getData(); if (ObjectUtil.isEmpty(mchManage)) { throw new RuntimeException("用户不属于任何食堂"); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusWechatServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusWechatServiceImpl.java index 7d5f1a7f4..002a2973a 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusWechatServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusWechatServiceImpl.java @@ -25,6 +25,7 @@ import com.wechat.pay.java.core.notification.RequestParam; import com.wechat.pay.java.service.partnerpayments.app.AppServiceExtension; import com.wechat.pay.java.service.partnerpayments.app.model.*; import com.wechat.pay.java.service.partnerpayments.app.model.Amount; +import com.wechat.pay.java.service.profitsharing.ProfitsharingService; import com.wechat.pay.java.service.refund.RefundService; import com.wechat.pay.java.service.refund.model.*; import lombok.RequiredArgsConstructor; @@ -61,7 +62,7 @@ public class ThirdAppPlusWechatServiceImpl implements ThirdAppPlusWechatService private final AppServiceExtension appServiceExtension; private final RefundService refundService; private final NotificationParser notificationParser; - + private final ProfitsharingService profitsharingService; /** * APP支付 diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/fz/ThirdAppPlusWechatFzServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/fz/ThirdAppPlusWechatFzServiceImpl.java new file mode 100644 index 000000000..434463a9d --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/fz/ThirdAppPlusWechatFzServiceImpl.java @@ -0,0 +1,37 @@ +package com.bsd.pjcloud.thirdparty.service.impl.appplus.fz; + +import com.bsd.pjcloud.thirdparty.entity.pay.ThirdPayOrderEntity; +import com.bsd.pjcloud.thirdparty.service.ThirdAppPlusWechatFzService; +import com.wechat.pay.java.service.profitsharing.ProfitsharingService; +import com.wechat.pay.java.service.profitsharing.model.CreateOrderRequest; +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 ThirdAppPlusWechatFzServiceImpl implements ThirdAppPlusWechatFzService { + + private final ProfitsharingService profitsharingService; + + /** + * 发起分账 + */ + @Override + public void create(ThirdPayOrderEntity orderEntity) { + String outOrderNo = "fz" + orderEntity.getPayNo(); + + // 请求参数 + CreateOrderRequest createDto = new CreateOrderRequest(); + createDto.setOutOrderNo(outOrderNo); + + profitsharingService.createOrder(createDto); + } + +} diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysDeptService.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysDeptService.java index bba5f096f..bcf4d500e 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysDeptService.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysDeptService.java @@ -52,7 +52,7 @@ public interface SysDeptService extends IService { */ List> selectTree(String deptName, Long parentId, PjcloudUser user); - List> selectTreeV2(String deptName, Long parentId, PjcloudUser user); + List> selectTreeV2(String deptName, Long parentId, PjcloudUser user); List> selectSimpleTree(String deptName, Long parentId); 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 59d33ce5b..5b845e1cb 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,6 +114,12 @@ public class SysDeptServiceImpl extends ServiceImpl impl * 修改部门 */ @Override + @CacheEvict( + value = CacheConstants.WALLET_VIEWS_CANTEEN_MCH, + key = "#dto.getDeptId()", + condition = "#dto.getDeptId() != null", + beforeInvocation = true + ) public Boolean edit(SysDept sysDept) { boolean isEdit = updateById(sysDept); remoteWalletService.deptChange(sysDept.getDeptId(), Boolean.FALSE); @@ -218,8 +226,8 @@ public class SysDeptServiceImpl extends ServiceImpl impl break; } } - List> currentDeptAllNodes = getSubTreeNodes(currentDeptTree); - return currentDeptAllNodes; + // List> currentDeptAllNodes = getSubTreeNodes(currentDeptTree); + return List.of(currentDeptTree); } public List> getSubTreeNodes(Tree node) { diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/wallet_active.xlsx b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/wallet_active.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2f7163a0f905c643f59e63beb4f66815032c2b40 GIT binary patch literal 9580 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 Uv^{vN+(8C|d4!W8eERqQ0Q#M#y8r+H literal 0 HcmV?d00001 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 c8bb8dddb..43fcc7713 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 @@ -34,4 +34,9 @@ public class WalletActiveDto extends WalletActiveEntity { * 是否硬件激活 */ private Boolean isMchActive; + + /** + * 卡号长度 + */ + private Integer carNumberLength; } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletImportActiveDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletImportActiveDto.java new file mode 100644 index 000000000..969426fd7 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletImportActiveDto.java @@ -0,0 +1,43 @@ +package com.bsd.pjcloud.wallet.api.dto; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.bsd.pjcloud.common.excel.annotation.ExcelLine; +import lombok.Data; + +@Data +public class WalletImportActiveDto { + + /** + * 导入时候回显行号 + */ + @ExcelLine + @ExcelIgnore + private Long lineNum; + + @ColumnWidth(100) + @ExcelProperty("用户姓名") + private String username; + + @ColumnWidth(100) + @ExcelProperty("用户手机号") + private String userMobile; + + @ColumnWidth(100) + @ExcelProperty("卡号") + private String cardNumber; + + // 开卡的id + private Long id; + + // 钱包id + private Long walletId; + + // 用户id + private Long userId; + + // 用户部门id + private Long userDeptId; + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletRemoteOpenCardListDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletRemoteOpenCardListDto.java new file mode 100644 index 000000000..437e798e8 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletRemoteOpenCardListDto.java @@ -0,0 +1,33 @@ +package com.bsd.pjcloud.wallet.api.dto; + +import lombok.Data; + +@Data +public class WalletRemoteOpenCardListDto { + + /** + * 当前页 + */ + private Long current; + + /** + * 分页 + */ + private Long pageSize; + + /** + * 父部门id + */ + private Long parentDeptId; + + /** + * 商户id + */ + private Long mchId; + + /** + * 卡号长度 + */ + private Integer carNumberLength; + +} 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 5392e47d3..8a5463123 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 MerchantTypeEnum mchType); + + @NoToken + @GetMapping("/mch-manage/get-views-canteen-mch-by-dept-id") + R getViewsCanteenMchByDeptId(@RequestParam Long deptId); } 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 89983ce2d..739708616 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 @@ -5,12 +5,14 @@ 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.wallet.api.constant.WalletTypeEnum; +import com.bsd.pjcloud.wallet.api.dto.WalletRemoteOpenCardListDto; import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity; import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; -import com.bsd.pjcloud.wallet.api.vo.WalletActiveVo; import com.bsd.pjcloud.wallet.api.vo.WalletManageVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -68,6 +70,6 @@ public interface RemoteWalletService { R innserIsUseDoor(@RequestParam Long userId); @NoToken - @GetMapping("/wallet-active/remote/open-card-list") - R> remoteOpenCardList(@RequestParam Long current, @RequestParam Long pageSize); + @PostMapping("/wallet-active/remote/open-card-list") + R> remoteOpenCardList(@RequestBody WalletRemoteOpenCardListDto body); } 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 46a24cbf2..394d99c0c 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 @@ -2,16 +2,20 @@ package com.bsd.pjcloud.wallet.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.core.validation.Group; +import com.bsd.pjcloud.common.excel.annotation.RequestExcel; 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.common.security.service.PjcloudUser; import com.bsd.pjcloud.common.security.util.SecurityUtils; +import com.bsd.pjcloud.wallet.api.dto.WalletImportActiveDto; +import com.bsd.pjcloud.wallet.api.dto.WalletRemoteOpenCardListDto; import com.bsd.pjcloud.wallet.api.dto.WalletActiveBindCardDto; import com.bsd.pjcloud.wallet.api.dto.WalletActiveDto; import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity; @@ -26,6 +30,7 @@ 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.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -51,13 +56,18 @@ public class WalletActiveController { /* ************************************* start 远程调用 start ************************************* */ @Inner() - @GetMapping("/remote/open-card-list") + @PostMapping("/remote/open-card-list") @Operation(summary = "远程调用开卡并且绑定用户的列表") - public R> remoteOpenCardList(@RequestParam Long current, @RequestParam Long pageSize) { + public R> remoteOpenCardList(@RequestBody WalletRemoteOpenCardListDto body) { + if (ObjectUtil.isEmpty(body.getCurrent()) || ObjectUtil.isEmpty(body.getPageSize())) { + return null; + } Page page = new Page(); - page.setCurrent(current); - page.setSize(pageSize); + page.setCurrent(body.getCurrent()); + page.setSize(body.getPageSize()); WalletActiveDto dto = new WalletActiveDto(); + dto.setMerchantId(body.getMchId()); + dto.setCarNumberLength(body.getCarNumberLength()); return R.ok(walletActiveService.openCardList(page, dto)); } @@ -185,4 +195,14 @@ public class WalletActiveController { public List export(WalletActiveEntity walletActive, Long[] ids) { return walletActiveService.list(Wrappers.lambdaQuery(walletActive).in(ArrayUtil.isNotEmpty(ids), WalletActiveEntity::getId, ids)); } + + /** + * 导入开卡信息,会直接覆盖 + */ + @PostMapping("/import") + @PreAuthorize("@pms.hasPermission('wallet_walletActive_import')") + public R importWalletActive(@RequestExcel List excelVOList, BindingResult bindingResult) { + return walletActiveService.importWalletActive(excelVOList, bindingResult); + } + } \ No newline at end of file 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 66d04a488..dfa2fc334 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 @@ -126,6 +126,14 @@ 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/controller/recharge/WalletRechargeApplyController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/recharge/WalletRechargeApplyController.java index 7042a1985..489c22ae0 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/recharge/WalletRechargeApplyController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/recharge/WalletRechargeApplyController.java @@ -161,7 +161,6 @@ public class WalletRechargeApplyController { } @PostMapping("/read-excel") - @Idempotent(expireTime = 3, info = "正在上传中,请勿重复操作") public R readExcel(@RequestExcel List excelVOList, BindingResult bindingResult, @RequestParam(required = false) String bizType) { return walletRechargeApplyService.readExcel(excelVOList, bindingResult, bizType); } 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 4184bd696..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,4 +14,6 @@ public interface MchDeptViewMapper { List selectList(@Param("dto") WalletMchDeptViewDto dto); + 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..6a9e2e943 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 @@ -41,6 +41,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/WalletActiveService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletActiveService.java index 811e5f68c..31ec5054d 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 @@ -2,12 +2,18 @@ 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.util.R; import com.bsd.pjcloud.wallet.api.dto.WalletActiveBindCardDto; import com.bsd.pjcloud.wallet.api.dto.WalletActiveDto; +import com.bsd.pjcloud.wallet.api.dto.WalletImportActiveDto; +import com.bsd.pjcloud.wallet.api.dto.recharge.excel.WalletRechargeExcelDto; import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity; import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; import com.bsd.pjcloud.wallet.api.vo.WalletActiveVo; import jakarta.validation.constraints.NotEmpty; +import org.springframework.validation.BindingResult; + +import java.util.List; public interface WalletActiveService extends IService { /** @@ -77,4 +83,9 @@ public interface WalletActiveService extends IService { * 更新 */ Long edit(WalletActiveEntity walletActive); + + /** + * 导入开卡信息,会直接覆盖 + */ + R importWalletActive(List excelVOList, BindingResult bindingResult); } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletActiveServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletActiveServiceImpl.java index f67962a95..01a120cb2 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletActiveServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletActiveServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.entity.SysDept; import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.admin.api.feign.RemoteDeptService; @@ -16,17 +17,14 @@ 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.CollectionUtils; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.excel.vo.ErrorMessage; import com.bsd.pjcloud.wallet.api.constant.WalleCardStatusEnum; import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; -import com.bsd.pjcloud.wallet.api.dto.MchManageDto; -import com.bsd.pjcloud.wallet.api.dto.WalletActiveBindCardDto; -import com.bsd.pjcloud.wallet.api.dto.WalletActiveDto; -import com.bsd.pjcloud.wallet.api.dto.WalletTypeDto; +import com.bsd.pjcloud.wallet.api.dto.*; import com.bsd.pjcloud.wallet.api.entity.mch.MchManageEntity; import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity; import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; import com.bsd.pjcloud.wallet.api.entity.WalletTypeEntity; -import com.bsd.pjcloud.wallet.api.entity.mch.MchRulePriceConfigEntity; import com.bsd.pjcloud.wallet.api.utils.WalletDataUtil; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import com.bsd.pjcloud.wallet.api.vo.WalletActiveVo; @@ -38,20 +36,17 @@ import com.bsd.pjcloud.wallet.service.WalletManageService; import com.bsd.pjcloud.wallet.service.WalletTypeService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.tuple.ImmutablePair; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 钱包开卡 - * - * @author dzc - * @date 2024-12-31 18:53:31 */ @Validated @Slf4j @@ -336,6 +331,117 @@ public class WalletActiveServiceImpl extends ServiceImpl excelVOList, BindingResult bindingResult) { + ImmutablePair, List> pair = validateExcelData(excelVOList, bindingResult, false); + List errorMessages = pair.getLeft(); + List list = pair.getRight(); + if (ObjectUtil.isNotEmpty(errorMessages)) return R.failed(errorMessages); + // 更改卡号 + List updateActiveList = new ArrayList<>(); + List updateWalletManageList = new ArrayList<>(); + for (WalletImportActiveDto v : list) { + if (ObjectUtil.isNotEmpty(v.getId())) { + WalletActiveEntity entity = new WalletActiveEntity(); + entity.setId(v.getId()); + entity.setCardNumber(v.getCardNumber()); + updateActiveList.add(entity); + } + if (ObjectUtil.isNotEmpty(v.getWalletId())) { + WalletManageEntity entity = new WalletManageEntity(); + entity.setId(v.getWalletId()); + entity.setCardNumber(v.getCardNumber()); + updateWalletManageList.add(entity); + } + } + // 更改钱包绑定的饭卡卡号 + baseMapper.updateById(updateActiveList); + // 更改钱包管理绑定的饭卡卡号 + walletManageService.updateBatchById(updateWalletManageList); + return R.ok(null, "导入成功"); + } + + public ImmutablePair, List> validateExcelData(List list, BindingResult bindingResult, boolean validatePrice) { + if (ObjectUtil.isEmpty(list)) { + throw new RuntimeException("读取excel数据错误"); + } + list = list.stream().filter(v -> !ObjectUtil.isAllEmpty(v.getUsername(), v.getUserMobile(), v.getCardNumber())).toList(); + if (ObjectUtil.isEmpty(list)) { + throw new RuntimeException("读取excel数据错误"); + } + List errorMessageList = (List) bindingResult.getTarget(); + List usernameList = list.stream().map(WalletImportActiveDto::getUsername).toList(); + List userPoneList = list.stream().map(WalletImportActiveDto::getUserMobile).toList(); + for (WalletImportActiveDto v : list) { + Set errors = new LinkedHashSet<>(); + if (ObjectUtil.isEmpty(v.getUsername())) { + errors.add("请输入用户姓名"); + } + if (ObjectUtil.isEmpty(v.getUserMobile())) { + errors.add("请输入用户手机号"); + } + if (ObjectUtil.isEmpty(v.getCardNumber())) { + errors.add("请输入卡号"); + } else { + if (!List.of(10, 12).contains(v.getCardNumber().length())) { + errors.add("卡号长度错误,卡号长度必须为10、12"); + } + } + if (ObjectUtil.isNotEmpty(v.getUsername()) && ObjectUtil.isNotEmpty(v.getUserMobile())) { + R user = userService.getUserByNameAndMobile(v.getUsername(), v.getUserMobile()); + Optional sysUser = Optional.of(user).map(R::getData).map(UserInfo::getSysUser); + if (sysUser.isEmpty()) { + errors.add("用户不存在"); + } else { + if (!ObjectUtil.equals(sysUser.get().getName(), v.getUsername())) { + errors.add("用户不存在"); + } else { + v.setUserId(sysUser.get().getUserId()); + v.setUserDeptId(sysUser.get().getDeptId()); + } + } + } + long userPhone = userPoneList.stream().filter(i -> ObjectUtil.equals(i, v.getUserMobile())).count(); + if (userPhone > 1) { + errors.add("用手机号 <" + v.getUserMobile() + "> 重复"); + } + if (ObjectUtil.isNotEmpty(errors)) { + errorMessageList.add(new ErrorMessage(v.getLineNum(), errors)); + } + } + // 查询用户有没有绑定过饭卡 + List userIdList = list.stream().map(WalletImportActiveDto::getUserId).distinct().filter(ObjectUtil::isNotEmpty).toList(); + if (ObjectUtil.isNotEmpty(userIdList)) { + List walletActiveList = baseMapper.selectList(new LambdaQueryWrapper().in(WalletActiveEntity::getUserId, userIdList)); + for (WalletImportActiveDto v : list) { + WalletActiveEntity targetWalletActive = walletActiveList.stream().filter(i -> ObjectUtil.equals(i.getUserId(), v.getUserId())).findFirst().orElse(null); + if (ObjectUtil.isEmpty(targetWalletActive)) { + Set errors = new LinkedHashSet<>(); + // 找到错误信息 + ErrorMessage errorMessage = errorMessageList.stream().filter(i -> ObjectUtil.equals(i.getLineNum(), v.getLineNum())).findFirst().orElse(null); + if (ObjectUtil.isNotEmpty(errorMessage)) { + errors = errorMessage.getErrors(); + } + errors.add("用户 <" + v.getUsername() + "> 没有绑定饭卡"); + if (ObjectUtil.isEmpty(errorMessage)) { + errorMessageList.add(new ErrorMessage(v.getLineNum(), errors)); + } + } else { + v.setId(targetWalletActive.getId()); + v.setWalletId(targetWalletActive.getWalletId()); + } + } + } + if (ObjectUtil.isNotEmpty(errorMessageList)) { + return ImmutablePair.of(errorMessageList, null); + } + return ImmutablePair.of(null, list); + } + private boolean existWalletCarNumber(String cardNumber, Long id) { Long count = baseMapper.selectCount(new LambdaQueryWrapper() .eq(ObjectUtil.isNotEmpty(cardNumber), WalletActiveEntity::getCardNumber, cardNumber) 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 bd456554c..2ca9a0137 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 @@ -39,13 +39,17 @@ 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.MchPaySettingVo; +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.MchPaySettingService; 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; @@ -65,9 +69,6 @@ import java.util.concurrent.CompletableFuture; /** * 商户管理 - * - * @author dzc - * @date 2025-01-02 11:09:26 */ @Validated @Slf4j @@ -88,6 +89,7 @@ public class MchManageServiceImpl extends ServiceImpl mchTypeList) { List parentDeptIdList = remoteDeptService.getParentDeptList(deptId).getData(); - log.error("getFirstMchByDeptId.parentDeptIdList:{}", JSONUtil.toJsonStr(parentDeptIdList)); if (ObjectUtil.isEmpty(parentDeptIdList)) { return null; } List deptIds = parentDeptIdList.stream().map(SysDept::getDeptId).toList(); MchManageVo targetMchVo = getFirstMch(deptIds, mchTypeList); - log.error("getFirstMchByDeptId.targetMchVo:{}", JSONUtil.toJsonStr(targetMchVo)); if (ObjectUtil.isNotEmpty(targetMchVo)) { MchPaySettingDto paySettingDto = new MchPaySettingDto(); paySettingDto.setMchId(targetMchVo.getId()); @@ -329,6 +335,24 @@ public class MchManageServiceImpl extends ServiceImpl - select a.id, - a.user_id, - a.wallet_id, - a.wallet_type_id, - a.dept_id, - a.merchant_id, - a.card_number, - a.card_sort, - a.is_active_hardware, - a.create_by, - a.create_time, - a.update_by, - a.update_time, - a.del_flag, - a.tenant_id + select + a.id, + a.user_id, + a.wallet_id, + a.wallet_type_id, + a.dept_id, + a.merchant_id, + a.card_number, + a.card_sort, + a.is_active_hardware, + a.create_by, + a.create_time, + a.update_by, + a.update_time, + a.del_flag, + a.tenant_id @@ -33,7 +34,8 @@ from wallet_active a - a.user_id is not null + a.del_flag = '0' + and a.user_id is not null and a.wallet_id is not null and a.act_id = #{dto.cardNumber} @@ -41,8 +43,16 @@ and a.is_active_hardware = #{dto.isActiveHardware} + + and a.dept_id = #{dto.deptId} + + + and a.merchant_id = #{dto.merchantId} + + + and length(a.card_number) = #{dto.carNumberLength} + order by a.card_sort asc, a.id asc - \ No newline at end of file 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 709f63c6e..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 @@ -52,4 +52,14 @@ order by a.mchDeptId, a.level - \ No newline at end of file + + +