diff --git a/db/800pjcloudx_wallet.sql b/db/800pjcloudx_wallet.sql index 90511ebe5..b8bcbc595 100644 --- a/db/800pjcloudx_wallet.sql +++ b/db/800pjcloudx_wallet.sql @@ -259,6 +259,7 @@ DROP TABLE IF EXISTS wallet_rule_transaction; CREATE TABLE wallet_rule_transaction ( id BIGINT(19) not null comment '主键', + biz_type VARCHAR(32) default null comment '转账类型', source_wallet_id BIGINT(19) not null comment '源钱包id', target_wallet_id BIGINT(19) not null comment '目标钱包id', source_wallet_balance int not null comment '源钱包余额', diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java index f2a7e616b..ac7c979e2 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java @@ -143,7 +143,7 @@ public class HardOrderController { // 判断是否为合作超市管理员工 if (!hardManagerService.isSuperMarketAdmin(user)) return R.ok(new Page()); // 查询用户属于的商户 - MchManageVo mch = mchService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId(), MerchantTypeEnum.CANTEEN).getData(); + MchManageVo mch = mchService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId(), MerchantTypeEnum.SUPERMARKET).getData(); if (ObjectUtil.isEmpty(mch)) throw new RuntimeException("该用户下不存在商户"); // 查询商户和下面的子商户 List mchDtoIds = new java.util.ArrayList<>(List.of(mch.getId())); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java index 7d55dd36b..a94a150da 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java @@ -75,7 +75,7 @@ public class HardOrderTotalController { // 判断是否为合作超市管理员工 if (!hardManagerService.isSuperMarketAdmin(user)) return R.ok(new Page()); // 查询用户属于的商户 - MchManageVo mch = mchService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId(), MerchantTypeEnum.CANTEEN).getData(); + MchManageVo mch = mchService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId(), MerchantTypeEnum.SUPERMARKET).getData(); if (ObjectUtil.isEmpty(mch)) throw new RuntimeException("该用户下不存在商户"); List mchDtoIds = new ArrayList<>(List.of(mch.getId())); // 查询商户和下面的子商户 @@ -97,7 +97,7 @@ public class HardOrderTotalController { // 判断是否为合作超市管理员工 if (!hardManagerService.isSuperMarketAdmin(user)) return R.ok(new Page()); // 查询用户属于的商户 - MchManageVo mch = mchService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId(), MerchantTypeEnum.CANTEEN).getData(); + MchManageVo mch = mchService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId(), MerchantTypeEnum.SUPERMARKET).getData(); if (ObjectUtil.isEmpty(mch)) throw new RuntimeException("该用户下不存在商户"); List mchDtoIds = new ArrayList<>(List.of(mch.getId())); // 查询商户和下面的子商户 diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java index 1621aa9e4..d1bb409bf 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java @@ -115,7 +115,8 @@ public class HardSpuServiceImpl extends ServiceImpl { Page scopePageJoin(Page page, @Param("dto") SysUserTransactionDto dto, DataScope dataScope); SysUserTransactionVo join(@Param("id") Long userTransactionId); + + List lastTransationList(@Param("dateStr") String dateStr); } \ No newline at end of file diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTransactionService.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTransactionService.java index 28988cb2d..e9d2c0bb6 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTransactionService.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserTransactionService.java @@ -38,4 +38,9 @@ public interface SysUserTransactionService extends IService list = baseMapper.lastTransationList(dateStr); + if (ObjectUtil.isEmpty(list)) { + log.info("|{}|离职退休自动转到消费钱包,没有需要处理的数据", TAG); + return; + } + // 用户转账逻辑,把饭卡钱包的钱自动转入到消费钱包 + + // 离职人员部门id + List leaveDeptIds = List.of(ParamResolver.getStr("USER_TRANSACTION_LEAVE"), ParamResolver.getStr("USER_TRANSACTION_TRANSFER")); + List updateList = new ArrayList<>(); + for (SysUserTransactionEntity v : list) { + try { + // 判断用户是否有"自动创建钱包权限" + SysUser user = sysUserService.getOne(Wrappers.query().lambda().eq(SysUser::getUserId, v.getUserId())); + if (ObjectUtil.isEmpty(user)) { + log.error("|{}|离职退休自动转到消费钱包,用户<{}>不存在", TAG, v.getUserId()); + continue; + } + UserInfo userInfo = sysUserService.findUserInfo(user); + String[] roleCodes = userInfo.getRoleCodes(); + if (!ArrayUtil.contains(roleCodes, CommonRoleConstant.AUTO_CREATE_WALLET)) { + log.error("|{}|离职退休自动转到消费钱包,用户<{}>没有自动创建钱包权限", TAG, v.getUserId()); + continue; + } + // 判断用户现在是否在退休或者离职部门 + if (!ArrayUtil.contains(leaveDeptIds.toArray(), String.valueOf(user.getDeptId()))) { + log.error("|{}|离职退休自动转到消费钱包,用户<{}>不是离职或者退休部门", TAG, v.getUserId()); + continue; + } + // 执行转账逻辑 + Boolean success = walletRuleTransactionService.userAutoWalletTransation(v.getUserId()).getData(); + if (success) { + SysUserTransactionEntity updateObj = new SysUserTransactionEntity(); + updateObj.setId(v.getId()); + updateObj.setWalletTransactionTime(LocalDateTime.now()); + updateList.add(updateObj); + } + } catch (Exception e) { + log.error("|{}|离职退休自动转到消费钱包,用户<{}>自动转账失败,error:{}", TAG, v.getUserId(), e.getMessage()); + e.printStackTrace(); + } + } + if (ObjectUtil.isNotEmpty(updateList)) { + baseMapper.updateById(updateList); + } + } } \ No newline at end of file diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml index 568235e56..9e22075e8 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserTransactionMapper.xml @@ -73,7 +73,8 @@ and a.create_time between #{dto.createTimeList[0]} and #{dto.createTimeList[1]} - and a.wallet_transaction_time between #{dto.walletTransactionTimeList[0]} and #{dto.walletTransactionTimeList[1]} + and a.wallet_transaction_time between #{dto.walletTransactionTimeList[0]} and + #{dto.walletTransactionTimeList[1]} and a.create_time between #{dto.processTimeList[0]} and #{dto.processTimeList[1]} @@ -97,7 +98,7 @@ + + \ No newline at end of file diff --git a/pjcloud-visual/pjcloud-daemon-quartz/src/main/java/com/bsd/pjcloud/daemon/quartz/task/UmpsTask.java b/pjcloud-visual/pjcloud-daemon-quartz/src/main/java/com/bsd/pjcloud/daemon/quartz/task/UmpsTask.java new file mode 100644 index 000000000..22cc4a5ef --- /dev/null +++ b/pjcloud-visual/pjcloud-daemon-quartz/src/main/java/com/bsd/pjcloud/daemon/quartz/task/UmpsTask.java @@ -0,0 +1,35 @@ +package com.bsd.pjcloud.daemon.quartz.task; + + +import com.bsd.pjcloud.admin.api.feign.RemoteUserTransaction; +import com.bsd.pjcloud.daemon.quartz.constants.PjcloudQuartzEnum; +import lombok.AllArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +@Slf4j +@Component("umps") +@AllArgsConstructor +public class UmpsTask { + + private final RemoteUserTransaction remoteUserTransaction; + + /** + * 离职退休自动转到消费钱包 + */ + @SneakyThrows + public String userWalletTransaction(String para) { + log.info("离职退休自动转到消费钱包:{},输入参数{}", LocalDateTime.now(), para); + try { + remoteUserTransaction.walletTransationCallback(para); + log.info("离职退休自动转到消费钱包成功:{}", LocalDateTime.now()); + } catch (Exception e) { + log.error("离职退休自动转到消费钱包错误error:{},时间:{}", e.getMessage(), LocalDateTime.now(), e); + } + return PjcloudQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType(); + } + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/rule/WalletRuleTransationTypeEnum.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/rule/WalletRuleTransationTypeEnum.java new file mode 100644 index 000000000..3501b0a3a --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/rule/WalletRuleTransationTypeEnum.java @@ -0,0 +1,35 @@ +package com.bsd.pjcloud.wallet.api.constant.rule; + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 用户转账类型 + */ +@Getter +@AllArgsConstructor +public enum WalletRuleTransationTypeEnum { + + USER_CHANGE("10", "用户手动转账"), + LEAVE_AUTO("20", "离职退休自动转账"), + ; + + private final String code; + private final String desc; + + public static WalletRuleTransationTypeEnum valueOfByType(String code) { + return Arrays.stream(WalletRuleTransationTypeEnum.values()) + .filter(v -> ObjectUtil.equal(v.getCode(), code)) + .findFirst().get(); + } + + public static WalletRuleTransationTypeEnum descOf(String description) { + return Arrays.stream(WalletRuleTransationTypeEnum.values()) + .filter(v -> ObjectUtil.equal(v.getDesc(), description)) + .findFirst().get(); + } + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/rule/WalletRuleTransactionEntity.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/rule/WalletRuleTransactionEntity.java index 3f4f83dbf..2e0e899bb 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/rule/WalletRuleTransactionEntity.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/rule/WalletRuleTransactionEntity.java @@ -27,6 +27,12 @@ public class WalletRuleTransactionEntity extends Model userAutoWalletTransation(@RequestParam Long userId); + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports b/pjcloud-wallet/pjcloud-wallet-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports index c093ca935..340953b8b 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports @@ -2,6 +2,7 @@ com.bsd.pjcloud.wallet.api.feign.RemoteWalletService com.bsd.pjcloud.wallet.api.feign.RemoteMchRuleJoinService com.bsd.pjcloud.wallet.api.feign.RemoteCodeUseService com.bsd.pjcloud.wallet.api.feign.RemoteWalletRechargeService +com.bsd.pjcloud.wallet.api.feign.RemoteWalletRuleTransactionService com.bsd.pjcloud.wallet.api.feign.RemoteMchService com.bsd.pjcloud.wallet.api.feign.RemoteWalletSettingService com.bsd.pjcloud.wallet.api.feign.RemoteWalletThirdZyService 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 757b02e1b..ec4fc31d3 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 @@ -160,8 +160,7 @@ public class WalletManageController { PjcloudUser user = SecurityUtils.getUser(); WalletManageDto dto = new WalletManageDto(); dto.setUserId(user.getId()); - DataScope dataScope = new DataScope(); - dataScope.func(DataScopeFuncEnum.ALL); + DataScope dataScope = null; return R.ok(walletManageService.scopePageList(page, dto, dataScope)); } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletTransactionController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletTransactionController.java index 59ba83ba3..f07c6b76d 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletTransactionController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletTransactionController.java @@ -79,8 +79,7 @@ public class WalletTransactionController { public R appGetAll(@ParameterObject Page page, @ParameterObject WalletTransactionDto dto) { PjcloudUser user = SecurityUtils.getUser(); dto.setUserId(user.getId()); - DataScope dataScope = new DataScope(); - dataScope.func(DataScopeFuncEnum.ALL); + DataScope dataScope = null; return R.ok(walletTransactionService.scopePageList(page, dto, dataScope)); } /* ************************************* end app end ************************************* */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/rule/WalletRuleTransactionController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/rule/WalletRuleTransactionController.java index 16dcb7f0d..0ab63623c 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/rule/WalletRuleTransactionController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/rule/WalletRuleTransactionController.java @@ -13,6 +13,7 @@ import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.DataScopeFuncEnum; 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.constant.WalletTypeEnum; @@ -50,6 +51,17 @@ public class WalletRuleTransactionController { private final WalletRuleTransactionService walletRuleTransactionService; private final WalletTypeService walletTypeService; + /* ************************************* start 远程调用 start ************************************* */ + + @Inner + @Operation(summary = "离职退休自动转到消费钱包", description = "离职退休自动转到消费钱包") + @PostMapping("/inner/auto-transation") + public R userAutoWalletTransation(@RequestParam Long userId) { + return R.ok(walletRuleTransactionService.userAutoWalletTransation(userId)); + } + + /* ************************************* end 远程调用 end ************************************* */ + /* ************************************* start app start ************************************* */ @Operation(summary = "app转账", description = "app转账") diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletRuleTransactionService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletRuleTransactionService.java index 354858a87..dc5298f9f 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletRuleTransactionService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletRuleTransactionService.java @@ -16,6 +16,11 @@ public interface WalletRuleTransactionService extends IService scopePageList(Page page, WalletRuleTransactionDto dto, DataScope dataScope); + /** + * 离职退休自动转到消费钱包 + */ + Boolean userAutoWalletTransation(Long userId); + /** * 转账 */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/rule/WalletRuleTransactionServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/rule/WalletRuleTransactionServiceImpl.java index 82f250e76..0d22c7d67 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/rule/WalletRuleTransactionServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/rule/WalletRuleTransactionServiceImpl.java @@ -11,8 +11,10 @@ import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.wallet.api.constant.WalletBizEnum; import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; +import com.bsd.pjcloud.wallet.api.constant.rule.WalletRuleTransationTypeEnum; import com.bsd.pjcloud.wallet.api.dto.rule.WalletRuleTransactionDto; import com.bsd.pjcloud.wallet.api.dto.rule.WalletRuleTransferAccountsDto; +import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; import com.bsd.pjcloud.wallet.api.entity.rule.WalletRuleTransactionEntity; import com.bsd.pjcloud.wallet.api.vo.WalletManageVo; import com.bsd.pjcloud.wallet.api.vo.rule.WalletRuleJoinUserConfigVo; @@ -41,6 +43,8 @@ import java.util.List; @Service public class WalletRuleTransactionServiceImpl extends ServiceImpl implements WalletRuleTransactionService { + static private final String TAG = "钱包转账记录"; + private final WalletRuleJoinService walletRuleJoinService; private final WalletManageService walletManageService; private final WalletTransactionService walletTransactionService; @@ -57,6 +61,54 @@ public class WalletRuleTransactionServiceImpl extends ServiceImpl userConfig.getMaxTransferBalance()) { throw new RuntimeException("已经超过最大转账金额限制"); } + entity.setBizType(WalletRuleTransationTypeEnum.USER_CHANGE.getCode()); entity.setSourceWalletId(userConfig.getSourceWalletId()); entity.setTargetWalletId(userConfig.getTargetWalletId()); entity.setSourceWalletBalance(userConfig.getSourceWalletBalance()); diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/rule/WalletRuleTransactionMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/rule/WalletRuleTransactionMapper.xml index c09fe7df2..b4749d032 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/rule/WalletRuleTransactionMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/rule/WalletRuleTransactionMapper.xml @@ -23,6 +23,7 @@ select a.id, + a.biz_type, a.source_wallet_id, a.target_wallet_id, a.source_wallet_balance, @@ -42,6 +43,9 @@ a.del_flag = 0 + + and a.biz_type = #{dto.bizType} + and a.source_wallet_id = #{dto.sourceWalletId} @@ -68,7 +72,7 @@ targetWalletType.name as targetWalletTypeName, targetWalletType.unique_code as targetWalletTypeCode from wallet_rule_transaction a - left join wallet_transaction t on t.biz_id = a.id and biz_type = '6' + left join wallet_transaction t on t.biz_id = a.id and t.biz_type = '6' left join wallet_manage sourceWallet on sourceWallet.id = a.source_wallet_id left join wallet_type sourceWalletType on sourceWalletType.id = sourceWallet.wallet_type_id left join wallet_manage targetWallet on targetWallet.id = a.target_wallet_id