301 Commits

Author SHA1 Message Date
a3928548a5 RedisKey 2025-10-20 14:56:49 +08:00
407b9f1a65 过滤器替换域名1 2025-10-20 14:56:49 +08:00
404c8ce9f7 过滤器替换域名 2025-10-20 14:56:49 +08:00
91c15878b4 域名替换fixed_最终版本 2025-10-20 14:56:49 +08:00
084733d8b9 替换moliparty固定名称 2025-10-20 14:56:49 +08:00
dca5c8dad1 初始生成账号nick 2025-10-20 14:56:48 +08:00
ec30b83224 初始化表情bug 2025-10-20 14:56:48 +08:00
f7f2d4a1de moliparty-nacos 2025-10-20 14:56:48 +08:00
55b6370920 AppEnum-moliparty 2025-10-20 14:56:48 +08:00
4eb1d55b1b 公会列表bug 2025-10-20 14:56:09 +08:00
a4768691bb cdn链接 2025-10-20 10:59:25 +08:00
230f81fd98 独联体发放的钻石奖励加上对应发放的额外钻石数量 2025-10-17 15:31:37 +08:00
4564cfbbf2 boom后台分区支持 2025-10-14 19:36:03 +08:00
3ebfa34e88 h5_LOGIN 2025-10-14 18:50:43 +08:00
bccd82f021 h5-recharge-login 2025-10-14 16:30:55 +08:00
b4a3e3f37a h5登录返回分区id 2025-10-14 16:30:55 +08:00
7819a92f27 h5登录取消限制 2025-10-14 16:30:55 +08:00
4184e3210c 用户等级生效fixed 2025-10-14 16:24:15 +08:00
89bea63b86 用户等级生效 2025-10-14 16:24:15 +08:00
d4c256c522 独联体boom 2025-10-14 16:24:14 +08:00
37fc0a79c3 独联体公会列表 2025-10-14 16:24:14 +08:00
a788956f90 角标配置入口-财富等级限制生效范围 2025-10-14 16:24:14 +08:00
c19589c674 独联体开启财富魅力公会榜 2025-10-14 16:24:14 +08:00
c22cb3e2a5 公会-提现-账户-独联体usdt 2025-10-14 16:09:55 +08:00
5b03031cdb 支付密码-错误提示-多语言 2025-10-12 00:20:49 +08:00
bb8d6a75a6 Authorization-在最终调用userPurseService操作钱包的入口都加上认证注解 2025-10-12 00:12:46 +08:00
532b9ede0c 周期时间2 2025-10-11 18:31:51 +08:00
d49b215522 周期时间 2025-10-11 18:29:15 +08:00
fd98d87aa4 公会任务bug 2025-10-11 18:17:22 +08:00
1de27e6cd0 公会长移除主播限制 2025-10-11 16:29:57 +08:00
8db6d82c4a 公会任务主播上麦明细 2025-10-11 16:29:57 +08:00
cb5040c1fc dtp-nacos-cloud 2025-10-11 12:22:00 +08:00
334635fb4a 土耳其薪资结算数据 2025-10-11 10:40:47 +08:00
9cf6b05473 dtp-traceId-重命名以适配告警推送 2025-10-11 09:57:37 +08:00
109e8a1148 prometheus-registry-在core层抽取公共configure 2025-10-10 17:42:43 +08:00
ec51e1f36d 房间日流水bugfixed 2025-10-09 11:05:48 +08:00
25f6c3311e 房间日流水bug 2025-10-09 11:04:17 +08:00
89d5c46407 turGuildsalary-bug 2025-10-01 13:46:23 +08:00
a152f3b03f turGuildsalary 2025-10-01 13:37:33 +08:00
5c53180fbd log 2025-10-01 13:21:43 +08:00
d2e2654ecf BDadmin 2025-09-29 15:51:36 +08:00
c8961081d3 公会任务等级1周一锁 2025-09-29 14:50:36 +08:00
68ea614405 独联体-BD中心数据 2025-09-29 14:03:17 +08:00
e66803cdaf x用户-注册校验x身份 2025-09-29 12:33:01 +08:00
0563963c64 x用户-定时任务bug 2025-09-28 18:58:25 +08:00
305b77fa25 x用户-bug 2025-09-28 18:35:56 +08:00
3d2e6d9cfd x用户-fixedAll 2025-09-28 16:52:35 +08:00
1226992c78 x用户-fixed 2025-09-28 16:13:35 +08:00
5042b17c79 x用户-fixed1 2025-09-28 16:00:51 +08:00
e3862d4a82 x用户-后台fixed1 2025-09-28 14:47:16 +08:00
37a4ded3c8 x用户-后台fixed 2025-09-28 14:45:13 +08:00
b3f84a4402 x用户 2025-09-28 12:00:03 +08:00
56bf486adf 幸运24-后台-关注用户个人数据-后台关注用户 2025-09-27 23:24:28 +08:00
dc1f9ade6d 幸运24-后台-关注用户个人数据 2025-09-27 21:13:57 +08:00
481b034b3b 幸运24-后台-个人数据-导出 2025-09-27 21:13:34 +08:00
14b1c2d28e 定时上麦记录bug 2025-09-27 13:45:35 +08:00
72a5829b58 公会-提现-成员也限制提现时间每月1 2号 2025-09-26 21:05:27 +08:00
103b463078 后台更新礼物bug 2025-09-26 11:00:29 +08:00
bc30048c64 后台更新礼物log 2025-09-26 10:43:56 +08:00
b208651ed3 独联体-开启月充值 2025-09-25 19:07:06 +08:00
d5baf49fe3 独联体-提现取消限制时间1 2025-09-25 19:02:33 +08:00
ff0ecfce6e 独联体-提现取消限制时间 2025-09-25 18:59:37 +08:00
ec53df66c6 dtp-nacos-正式环境yaml 2025-09-25 17:01:15 +08:00
b24fa952cf dtp-traceId 2025-09-25 17:00:19 +08:00
5dc7fe6bf0 dtp-I18nMessageSourceUtil-使用beanName获取 2025-09-25 17:00:18 +08:00
d8a5f54f03 dtp-引入dtp代替hippop4j 2025-09-25 17:00:17 +08:00
99922e8630 dtp-移除hippop4j依赖 2025-09-25 17:00:15 +08:00
75d3bca541 日常任务时长优化 2025-09-25 16:03:15 +08:00
ff07d21e02 账单-雪花主键-mq-组织do和insertIgnore拆分 2025-09-25 11:53:10 +08:00
4f3ddab6f7 幸运24-雪花主键-mq-组织do和insertIgnore拆分 2025-09-25 11:53:10 +08:00
5118107ead 幸运25-雪花主键-mq-无锁化唯一主键插入 2025-09-25 11:53:10 +08:00
e4e60e999f 独联体-公会定时任务bug 2025-09-25 11:51:24 +08:00
c8315fcfa7 独联体-添加公会信息 2025-09-25 10:44:34 +08:00
23836f8dc3 独联体-兑换金币比例 2025-09-25 10:44:34 +08:00
878576d5fe 独联体-定时任务发前一天数据 2025-09-25 10:44:34 +08:00
d63fcbc9b1 独联体-房间送礼人,系统消息 2025-09-25 10:44:34 +08:00
683d040eb8 独联体-返回房间国家 2025-09-25 10:44:33 +08:00
19df12bf2a 独联体-后台返回code 2025-09-25 10:44:33 +08:00
2aaa87dd9d 独联体-后台公会长发放状态 2025-09-25 10:44:33 +08:00
ae30f4fc01 独联体-个人中心fixed 2025-09-25 10:44:33 +08:00
8a70f0fc74 独联体-fixed 2025-09-25 10:44:33 +08:00
43e71cffb0 独联体-公会长奖励改为次日发 2025-09-25 10:44:33 +08:00
db5c90ea63 独联体-个人中心菜单分区 2025-09-25 10:44:33 +08:00
87dc61ae91 独联体-公会成员列表 2025-09-25 10:44:33 +08:00
49a6a58ab7 独联体-主播退出标识 2025-09-25 10:44:33 +08:00
82fe4f4c1c 独联体-送礼小秘书消息 2025-09-25 10:44:33 +08:00
c98ffef5ae 独联体-定时任务log 2025-09-25 10:44:33 +08:00
309d6132e6 独联体-房间额外奖励bug 2025-09-25 10:44:33 +08:00
58aeb8485d CIS房间钻石 2025-09-25 10:44:33 +08:00
14ef00e5d9 CIS公会钻石 2025-09-25 10:44:32 +08:00
9573275843 独联体-guildsovietfixed 2025-09-25 10:44:32 +08:00
c7f1b164e0 独联体-guildsoviet 2025-09-25 10:44:32 +08:00
20bbbc6334 独联体-退出公会标识 2025-09-25 10:44:32 +08:00
8b2fbc1b96 独联体-地区政策V2fixed 2025-09-25 10:44:32 +08:00
5c7035591c 独联体-地区政策V2 2025-09-25 10:44:32 +08:00
963dc072d1 独联体-官方提现账户 2025-09-25 10:44:32 +08:00
70ce45adac 独联体-房间流水添加周期 2025-09-25 10:44:31 +08:00
2c0c809871 独联体-提现账户11 2025-09-25 10:44:31 +08:00
8cbad22cdf 独联体-提现账户 2025-09-25 10:44:31 +08:00
8de692ce1c 独联体-房间奖励 2025-09-25 10:44:31 +08:00
154fb35ea3 独联体-薪资操作fixed 2025-09-25 10:44:31 +08:00
5d2608bdfe 独联体-钻石流水bug 2025-09-25 10:44:31 +08:00
6030c9b2e0 独联体-薪资操作限制 2025-09-25 10:44:31 +08:00
1b8fd5809f 独联体-单独政策fixed 2025-09-25 10:44:31 +08:00
4610632a4d 独联体-单独政策 2025-09-25 10:44:30 +08:00
1b9e5a6e97 独联体-房间每周一发额外奖励 2025-09-25 10:44:30 +08:00
e57ecad216 独联体-有效主播奖励 2025-09-25 10:44:30 +08:00
32c3616052 独联体-公会长奖励,房主奖励 2025-09-25 10:44:30 +08:00
9c2aed50e0 独联体2 2025-09-25 10:44:30 +08:00
36708c0a4b 独联体1 2025-09-25 10:44:26 +08:00
711c4fccc5 首充没配置奖励或者没有配置档位不显示弹窗 2025-09-25 10:43:36 +08:00
e65236de28 独联体 2025-09-25 10:43:36 +08:00
0e989dbb22 送礼记录-雪花主键-合并topic 2025-09-24 16:49:38 +08:00
1ece3f668f 送礼记录-雪花主键-无锁化唯一主键插入 2025-09-24 16:25:36 +08:00
abb0b2e9f3 后台-赠送钻石水晶-使用CurrencyType枚举代替WalletCurrencyType 2025-09-22 15:31:22 +08:00
e010b2e824 日常任务-加入公会时间重置为0点 2025-09-19 21:15:04 +08:00
fe5120740b 游戏角标-过滤规则-版本号 2025-09-19 14:54:59 +08:00
c8442b06d4 域名-放开moliparty百顺 2025-09-19 14:53:52 +08:00
1d77171763 谷歌登录-根据openid是否是邮箱区分新旧版本 2025-09-19 14:51:28 +08:00
643103531e 房间麦位cp-cp关系-组成cp消息体中补充uid 2025-09-19 14:39:26 +08:00
53f93c04a0 rocketmq-AbstractMessageListener去掉通用分布式锁 2025-09-19 14:39:26 +08:00
faa924328b 房间麦位cp-svga图片资源 2025-09-19 14:39:25 +08:00
e7f9939dd8 房间麦位cp-根据房间获取麦位上cp关系-组装uidList 2025-09-19 14:39:24 +08:00
8efd6bbdae 动态头像-mp4-退款 2025-09-19 14:39:23 +08:00
1fc9390014 动态头像-mp4-记录po 2025-09-19 14:39:23 +08:00
ff3893a029 动态头像-mp4-回调 2025-09-19 14:39:22 +08:00
bddcb51404 动态头像-mp4-提交转码异步任务 2025-09-19 14:39:21 +08:00
723b1c57d8 动态头像-mp4-将YidunCheck审核内聚到uploadAvatarService中 2025-09-19 14:39:20 +08:00
ec423e930a 房间麦位cp-根据房间获取麦位上cp关系 2025-09-19 14:39:20 +08:00
2fb4f445cc vip-特权-头饰不自动佩戴 2025-09-19 14:38:58 +08:00
d359a33319 后台-sud小游戏时长统计-明细-兼容首页入口渠道 2025-09-19 14:38:14 +08:00
9411ace176 多语言-增加西班牙语、俄语和乌兹别克语 2025-09-19 14:38:12 +08:00
ac45026e88 后台-sud小游戏时长统计-明细-sql 2025-09-19 14:38:09 +08:00
79ffb83481 后台-sud小游戏时长统计-gameId 2025-09-19 14:38:08 +08:00
7a47adbbc3 后台-sud小游戏时长统计-导出 2025-09-19 14:38:08 +08:00
handsome
f36b17ee46 后台-sud小游戏时长统计-sql 2025-09-19 14:38:07 +08:00
e433b4dfde 后台-sud小游戏时长统计 2025-09-19 14:38:06 +08:00
8873022807 公聊房-改造sendSysMsgService里发送全服房间消息的公共方法 2025-09-19 14:37:51 +08:00
6d93e929fb 公聊房-后台-myApi-创建公聊房 2025-09-19 14:37:51 +08:00
3c141b03bd 公会任务领取bugfixed 2025-09-18 14:02:54 +08:00
4fe4c7f809 公会任务领取bug 2025-09-18 11:50:06 +08:00
d9a738ecdc 公会开业任务定时任务优化 2025-09-18 11:19:03 +08:00
b6f39a5fbb 公会薪资代充列表 2025-09-16 16:03:41 +08:00
4d8d6ef945 用户国家为空的充值代理列表展示所有充值代理 2025-09-16 16:03:41 +08:00
c28a93e0c3 薪资转赠统一国家代理 2025-09-16 16:03:41 +08:00
187059a3ce 金币转赠统一国家代理 2025-09-16 16:03:41 +08:00
3d304e0d73 代理添加全球国家代理 2025-09-16 16:03:36 +08:00
64eb667638 公会-薪资-转增-小秘书-因为molistar主域名被举报了,暂时改成youmi hf 2025-09-16 11:06:46 +08:00
fec55f903f LUDO-配置vo-ruleUrl加上域名转换 2025-09-15 18:59:27 +08:00
7d0a978c40 游戏角标-百顺-替换域名-youmi 2025-09-15 15:30:09 +08:00
db41be407d 后台-赠送钻石水晶-提取公共方法并实现对应的机器人推送 2025-09-12 13:40:22 +08:00
158c9786e4 幸运24-雪花主键-mq-取消根据insertRow跳出机制,依赖mq消费重试保证简单事务最终一致性 2025-09-12 13:35:34 +08:00
e027c783e6 幸运24-雪花主键-mq-合并topic 2025-09-12 12:46:05 +08:00
f43ab72757 幸运24-雪花主键-mq-根据insertRow跳出 2025-09-12 11:53:29 +08:00
2b2c615b28 幸运24-雪花主键-mq-无锁化唯一主键插入 2025-09-12 11:53:28 +08:00
5562bbafc6 上下麦位时间达标显示达标值 2025-09-11 15:48:42 +08:00
26467ee2df 日任务房间日流水优化代码 2025-09-11 15:48:42 +08:00
ee7fd3ae29 日任务房间日流水改版 2025-09-11 15:48:42 +08:00
b9cee71c31 日任务房间日流水返回今天结构 2025-09-11 15:48:42 +08:00
c947bb1256 日任务房间日流水返回两个今天结构 2025-09-11 15:48:42 +08:00
e520926097 账单-雪花主键-mq-合并topic 2025-09-11 14:28:18 +08:00
27e72bf8ec 账单-雪花主键-定时任务-补偿 2025-09-11 11:54:40 +08:00
d2f00bb7f8 账单-雪花主键-无锁化唯一主键插入 2025-09-11 11:54:40 +08:00
7f54afc166 账单-雪花主键-mq批量消费-sql 2025-09-11 11:54:39 +08:00
fffe747456 账单-雪花主键-发mq前预生产分布式序列id 2025-09-11 11:54:38 +08:00
93a4a6bb97 账单-雪花主键-workerId-通过docker环境变量注入 2025-09-11 11:54:37 +08:00
15b0134c0a 账单-雪花主键-workerId-处理npe 2025-09-11 11:54:37 +08:00
khalil
95b93c7d08 账单-雪花主键-workerId兼容docker网络环境 2025-09-11 11:54:36 +08:00
khalil
36a1bed313 账单-雪花主键 2025-09-11 11:54:35 +08:00
a15559c89a 幸运24-统计-平台统计-手写sql合并计算 2025-09-10 20:59:15 +08:00
54f2fe4f7d 金豆操作添加事务 2025-09-10 10:29:43 +08:00
57ad350ca7 土耳其开启月充值 2025-09-10 10:29:43 +08:00
8f4b511813 主播周任务上麦时间显示问题fixed1 2025-09-09 17:51:44 +08:00
3bfd4d4694 主播周任务上麦时间显示问题fixed 2025-09-09 17:39:33 +08:00
8103dd0fbb 公会-提现-账户-增加SWIFT_CODE 2025-09-09 17:15:23 +08:00
e70fe58beb 主播周任务上麦时间显示问题 2025-09-09 17:01:10 +08:00
07f7ff281e 周星榜bug 2025-09-09 15:11:11 +08:00
efc5789557 周星榜bug 2025-09-09 14:28:32 +08:00
3843d5f443 商城兑换金币账单类型 2025-09-09 11:12:24 +08:00
0f612c1fee 定时任务公会任务task 2025-09-08 19:03:29 +08:00
c055ce34f3 金豆商城bug 2025-09-08 16:35:08 +08:00
22cc5bcd78 主播周奖励后台bug 2025-09-08 16:08:00 +08:00
ff9ac36cb5 图片链接 2025-09-08 12:17:17 +08:00
0cd1c010c5 英语2区公会周奖励隐藏上周奖励 2025-09-08 12:08:46 +08:00
0e67b34133 日常任务-优化代码 2025-09-08 10:03:28 +08:00
c018c64d6a 日常任务-送bravo礼物bug 2025-09-08 10:03:28 +08:00
ddaa15e7f5 优化定时刷新上麦时间逻辑fixed 2025-09-08 10:03:28 +08:00
6aec5657e6 优化定时刷新上麦时间逻辑 2025-09-08 10:03:28 +08:00
d53a574fba 日常任务-主播周奖励bug 2025-09-08 10:03:28 +08:00
e8313d0e1e 日常任务-送礼任务类型bug 2025-09-08 10:03:28 +08:00
937429eed0 日常任务-优化刷新定时任务 2025-09-08 10:03:28 +08:00
e16a6ad65a 日常任务-新主播任务支持配置国家 2025-09-08 10:03:28 +08:00
efd6503229 日常任务-公会页面主播周奖励过滤R档 2025-09-08 10:03:28 +08:00
0a3b7ae1e0 日常任务-公会开业任务刷新逻辑fixed 2025-09-08 10:03:28 +08:00
fdfee7a543 日常任务-公会开业任务刷新逻辑 2025-09-08 10:03:28 +08:00
6d905178d3 日常任务-公会开业有了值每一个等级也要显示当前的值 2025-09-08 10:03:28 +08:00
46563a758a 日常任务-达标返回标准值 2025-09-08 10:03:28 +08:00
1c6062cd6d 日常任务-房间每日流水后台 2025-09-08 10:03:27 +08:00
7dd8568110 日常任务-过期排序 2025-09-08 10:03:27 +08:00
ac4096bf61 日常任务-主播周奖励后台 2025-09-08 10:03:27 +08:00
0686d61029 日常任务-任务返回主播周奖励 2025-09-08 10:03:27 +08:00
19fed0ff2a 日常任务-异步线程池获取 2025-09-08 10:03:27 +08:00
58e0d121bb 日常任务-主播周奖励总进度条 2025-09-08 10:03:27 +08:00
543a7b8ad6 日常任务-钻石账单 2025-09-08 10:03:27 +08:00
02f183d8ba 日常任务-钻石账单 2025-09-08 10:03:27 +08:00
800b0cf1dd 日常任务-fixed 2025-09-08 10:03:27 +08:00
d3677bb8c4 日常任务-公会开业bug 2025-09-08 10:03:27 +08:00
2ecc60a88d 日常任务-日任务优化代码 2025-09-08 10:03:27 +08:00
4364974176 日常任务-主播周奖励记录剔除分区ID 2025-09-08 10:03:26 +08:00
43716719f3 日常任务-主播周奖励添加过滤 2025-09-08 10:03:26 +08:00
83be77b688 日常任务-公会首页过滤R档位 2025-09-08 10:03:26 +08:00
a2515ad7a9 日常任务-bugfixed 2025-09-08 10:03:26 +08:00
9057a22bdc 日常任务-主播上麦设备ip限制 2025-09-08 10:03:26 +08:00
4c4d720404 日常任务-主播周奖励英语2区 2025-09-08 10:03:26 +08:00
0aa971bb9d 日常任务-主播周奖励金豆重复发fixed 2025-09-08 10:03:26 +08:00
272111e246 日常任务-主播周奖励金豆重复发 2025-09-08 10:03:26 +08:00
eae1a021af 日常任务-公会活动设备倒计时 2025-09-08 10:03:26 +08:00
3400ee2e41 日常任务-公会活动设备ip限制 2025-09-08 10:03:26 +08:00
e92feb8728 日常任务-公会活动奖励领取fixed 2025-09-08 10:03:25 +08:00
1205ba59a3 日常任务-公会活动奖励领取 2025-09-08 10:03:25 +08:00
c9c35639e7 日常任务-公会活动进度定时任务fixed 2025-09-08 10:03:25 +08:00
0e3615b252 日常任务-公会活动 2025-09-08 10:03:25 +08:00
0fa01562cb 日常任务-公会开业活动 2025-09-08 10:03:25 +08:00
45a8199a64 日常任务-新主播上麦奖励fixed1 2025-09-08 10:03:25 +08:00
0f778f78fa 日常任务-新主播上麦奖励 2025-09-08 10:03:25 +08:00
3c0fbae36e 日常任务-单个送礼达到20000任务 2025-09-08 10:03:25 +08:00
aa1b93cb8b 日常任务-上麦时长bug 2025-09-08 10:03:25 +08:00
88dd96c605 日常任务-添加送礼任务 2025-09-08 10:03:24 +08:00
124b3e47c1 日常任务-优化上麦定时任务 2025-09-08 10:03:24 +08:00
c0fef64f12 日常任务-新增任务 2025-09-08 10:03:24 +08:00
14d61bd46e 日常任务-后台接口返回code 2025-09-08 10:03:24 +08:00
cf5ccb33e1 日常任务-改版并且添加房间送礼任务 2025-09-08 10:03:24 +08:00
254e876d50 日常任务-房间日流水奖励双重校验发放 2025-09-08 10:03:24 +08:00
1e402cdbed 日常任务-代理限制bug 2025-09-08 10:03:24 +08:00
b7e2e2c590 日常任务-超管封禁添加语言 2025-09-08 10:03:24 +08:00
f2d56a7e48 日常任务-日任务奖励增加钻石账单 2025-09-08 10:03:24 +08:00
1a12722bdf 日常任务-日任务奖励领取详情-明细 2025-09-08 10:03:24 +08:00
79b957f3fb 日常任务-日任务奖励领取详情 2025-09-08 10:03:24 +08:00
0165dd10ee 日常任务-优化代码 2025-09-08 10:03:23 +08:00
8bab25c084 日常任务-奖励fixed 2025-09-08 10:03:23 +08:00
0180e27f53 日常任务-上麦奖励fixed+英语2区统计上麦 2025-09-08 10:03:23 +08:00
8f572701ab 日常任务-上麦奖励 2025-09-08 10:03:23 +08:00
2831797f51 日常任务-上麦2 2025-09-08 10:03:23 +08:00
fc5105c0cb 日常任务-上麦1 2025-09-08 10:03:23 +08:00
a869b3846d 日常任务-上麦 2025-09-08 10:03:23 +08:00
5b4f0efe2e 日常任务-公会周奖励数据 2025-09-08 10:03:23 +08:00
3eb4c280b0 日常任务-公会周奖励数据 2025-09-08 10:03:23 +08:00
ac980ac0f8 日常任务-房间流水奖励 2025-09-08 10:03:23 +08:00
abbeab333b 日常任务改版tab 2025-09-08 10:03:22 +08:00
fd62c2a88d 日常任务改版1 2025-09-08 10:03:22 +08:00
a565d0803d 日常任务改版 2025-09-08 10:03:22 +08:00
4c274489d4 主播周奖励-英语区-修改startMonday 2025-09-07 21:39:37 +08:00
3fb754a359 后台-myApi-diamondStat拆分两个时区 2025-09-07 11:06:37 +08:00
b74b467cf7 客服自动回复-删除 2025-09-07 10:33:21 +08:00
392c25119b 装扮商城-购买-拦截续费我的装扮中并且在装扮商城中不能能购买的装扮 2025-09-05 11:29:48 +08:00
87497109ff 反馈-vo-接受参数-转换type枚举 2025-09-02 14:11:43 +08:00
324711f35a h5充值-地区-vo-多语言 2025-09-01 19:43:52 +08:00
ad241e3f83 紫晶操作字段返回 2025-09-01 15:02:04 +08:00
72a0752cf6 退款-机器人-查询刷礼总额-改写sql 2025-09-01 14:13:39 +08:00
bbc1b911e1 公会-申请退出公会-定时任务-处理查询公会角色npe 2025-09-01 14:00:37 +08:00
113dd31983 公会政策2周期列表 2025-09-01 11:02:14 +08:00
fc0806233b 查询bug 2025-08-27 15:12:13 +08:00
ec02c04451 月充值爬榜bug 2025-08-27 15:12:13 +08:00
f5fc0de086 公会统计添加负责人fixed 2025-08-27 15:12:13 +08:00
98ffd02b94 充值明细添加查询条件 2025-08-27 15:12:13 +08:00
b43380bbf7 公会周统计添加负责人null 2025-08-27 15:12:13 +08:00
8da2b3a91e 公会周统计添加负责人 2025-08-27 15:12:13 +08:00
3c78ec1efd 充值明细fixed 2025-08-27 15:12:13 +08:00
70887963fa 充值国家明细 2025-08-27 15:12:13 +08:00
440a2cc46b 房间角标添加游戏类型 2025-08-27 15:12:13 +08:00
f6e42005fc 房间游戏面板添加类型 2025-08-27 15:12:13 +08:00
40a49976f5 ios内购-验单-加判参数非空 2025-08-27 13:57:28 +08:00
2ab0cab74d 公会-后台-公会信息-查询-邀请人id 2025-08-25 19:40:53 +08:00
b0393b40d7 公会-体现-账户-增加Bkash 2025-08-25 16:45:44 +08:00
b1490d32e1 用户信息bug 2025-08-22 17:18:36 +08:00
f921859138 用户等级编辑,赠送vip添加分区限制 2025-08-22 16:17:25 +08:00
d509e2a589 vip赠送限制 2025-08-22 16:17:25 +08:00
acc7bf1402 后台添加接口返回用户信息 2025-08-22 16:17:25 +08:00
ac2c8050df 后台添加接口返回用户信息 2025-08-22 16:17:25 +08:00
02bea7d9c5 公会信息接受格式 2025-08-22 14:06:12 +08:00
b6b7ce920c 公会-土耳其-公会水晶结算-后台记录-vo 2025-08-22 10:49:55 +08:00
2e24686939 公会-土耳其-公会水晶-账单-uid 2025-08-22 10:49:54 +08:00
13cab0f9d6 公会-土耳其-公会水晶结算-后台-赠送 2025-08-22 10:49:53 +08:00
457f6a750f 公会-土耳其-公会水晶结算-后台记录 2025-08-22 10:49:52 +08:00
b258e18ef7 公会-土耳其-公会水晶结算-兼容已退出的公会成员 2025-08-22 10:49:51 +08:00
e6582b0e57 公会-土耳其-公会成员收礼增加水晶-判断公会模式 2025-08-22 10:49:50 +08:00
37838aa909 公会-土耳其-公会水晶-兑换-记录 2025-08-22 10:49:49 +08:00
f37f652aa5 公会-土耳其-公会水晶-账单 2025-08-22 10:49:48 +08:00
d26cd0996c 公会-土耳其-公会水晶-兑换 2025-08-22 10:49:47 +08:00
0bb8700959 公会-土耳其-公会主页-增加公会水晶余额 2025-08-22 10:49:46 +08:00
e79b44a5ca 公会-土耳其-公会水晶结算-myApi 2025-08-22 10:49:45 +08:00
c161422b32 公会-土耳其-公会水晶结算 2025-08-22 10:47:45 +08:00
b81d267f14 公会-土耳其-公会成员收礼增加水晶 2025-08-22 10:47:44 +08:00
e832871488 公会-土耳其-钱包-增加紫晶类型 2025-08-22 10:47:44 +08:00
cae4550e96 公会bug 2025-08-22 10:19:02 +08:00
69b3a5f465 公会单独绑定国家fixed 2025-08-21 18:06:29 +08:00
cf7304f2cb 公会单独绑定国家,薪资账户屏蔽usd小于最低档位 2025-08-21 15:12:22 +08:00
1f6795b049 游戏添加win飘屏 2025-08-19 16:42:02 +08:00
f63c16d680 谷歌支付-退款-修改退款渠道和原因的数据类型 2025-08-18 18:58:06 +08:00
46888c5579 灵仙域名白名单 2025-08-18 18:29:20 +08:00
cc2f3a89ff 游戏角标-百顺-替换域名 2025-08-18 17:27:12 +08:00
513 changed files with 14346 additions and 2896 deletions

View File

@@ -71,6 +71,10 @@ public class ChargeRecordAdminVo {
@FieldComment("创建时间")
public String createTime; // 创建时间
@ExcelProperty("更新时间")
@FieldComment("更新时间")
public String updateTime; // 创建时间
}

View File

@@ -0,0 +1,16 @@
package com.accompany.admin.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ChargeRecordPartitionRegionVo {
private String channel;
public String regionName;
public BigDecimal usd = BigDecimal.ZERO;
}

View File

@@ -2,38 +2,64 @@ package com.accompany.admin.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel("家族成员周等级奖励统计")
public class FamilyMemberWeekLevelRewardStatAdminVo {
@ExcelProperty("周期")
@ApiModelProperty("周期")
private String cycleDate;
@ExcelIgnore
@ApiModelProperty("家族成员ID")
private Long familyMemberId;
@ExcelProperty("公会id")
@ApiModelProperty("公会ID")
private Integer familyId;
@ExcelProperty("公会名")
@ApiModelProperty("公会名称")
private String familyName;
@ExcelProperty("会长id")
@ApiModelProperty("会长ID")
private Long familyOwnerId;
@ExcelProperty("会长昵称")
@ApiModelProperty("会长昵称")
private String familyOwnerNick;
@ExcelIgnore
@ApiModelProperty("用户UID")
private Long uid;
@ExcelProperty("主播id")
@ApiModelProperty("主播ID")
private Long erbanNo;
@ExcelProperty("主播昵称")
@ApiModelProperty("主播昵称")
private String nick;
@ExcelProperty("周奖励等级")
private Integer level;
@ExcelProperty("周奖励等级")
private String levelName;
@ExcelProperty("钻石流水")
@ApiModelProperty("钻石流水")
private BigDecimal processNum;
@ExcelProperty("已获得金币")
@ExcelProperty("钻石奖励")
@ApiModelProperty("钻石奖励")
private BigDecimal rewardNum;
@ExcelProperty("在麦有效天数")
@ApiModelProperty("在麦有效天数")
private Integer micValidDay;
@ExcelProperty("时长奖励")
@ApiModelProperty("时长奖励")
private BigDecimal bonusRewardNum;
@ExcelProperty("目标领取金币")
@ApiModelProperty("目标领取金币")
private BigDecimal totalRewardNum;
@ExcelProperty("已领取金币")
@ApiModelProperty("已领取金币")
private BigDecimal receivedNum;
}
}

View File

@@ -31,6 +31,9 @@ public class Lucky24ConfigAdminVo {
@ApiModelProperty("白名单用户id对比值N对应表")
private Map<Long, BigDecimal> whiteErbanNoProductionRatioMap;
@ApiModelProperty("后台关注用户id列表")
private List<Long> adminFollowErbanNoList;
@ApiModelProperty("")
private Long preJudgeValue_H;
@ApiModelProperty("")

View File

@@ -14,6 +14,9 @@ public class UserPurseVo {
private Double golds;
private Double guildUsd;
private Double guildCrystal;
private Boolean firstCharge;
private Date updateTime;

View File

@@ -13,4 +13,5 @@ public class UsersVo extends Users {
private double diamondsNum;
private double guildUsdNum;
private double guildCrystalNum;
}

View File

@@ -19,9 +19,16 @@ public class GuildAdminVo {
@ApiModelProperty("公会长昵称")
@ExcelProperty("公会长昵称")
private String ownerNick;
@ExcelIgnore
private Integer partitionId;
@ApiModelProperty("公会长分区")
@ExcelProperty("公会长分区")
private String ownerPartitionName;
@ExcelIgnore
private Integer regionId;
@ApiModelProperty("公会地区")
@ExcelProperty("公会地区")
private String regionName;
@ApiModelProperty("公会长地区")
@ExcelProperty("公会长地区")
private String ownerRegionName;

View File

@@ -0,0 +1,18 @@
package com.accompany.admin.vo.guild;
import lombok.Data;
@Data
public class GuildCreateAdminVo {
private Long erbanNo;
private Integer id;
private String name;
private String avatar;
private String backgroundUrl;
private Integer memberNumLimit;
private String guildContactType;
private String guildContact;
private Long inviteErbanNo;
private Integer operatorId;
private Integer regionId;
}

View File

@@ -47,6 +47,9 @@ public class GuildMemberAdminVo {
@ExcelProperty("加入时间")
@ApiModelProperty("加入时间")
private Date createTime;
@ExcelProperty("操作/退出时间")
@ApiModelProperty("操作/退出时间")
private Date updateTime;
@ExcelProperty("是否有效状态")
@ApiModelProperty("是否有效状态")
private Boolean enable;

View File

@@ -0,0 +1,48 @@
package com.accompany.admin.vo.miniGame;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("休闲游戏时长明细VO")
public class MiniGameForSudAdminDetailVo {
@ApiModelProperty("日期")
private String date;
/**
* 游戏ID
*/
@ApiModelProperty("游戏ID")
private Long gameId;
/**
* 游戏名称
*/
@ApiModelProperty("游戏名称")
private String gameName;
/**
* 房间ID
*/
@ApiModelProperty("房间ID")
private Long roomUid;
@ApiModelProperty("房间编号")
private Long erbanNo;
/**
* 分区ID
*/
@ApiModelProperty("分区ID")
private Long partitionId;
@ApiModelProperty("分区描述")
private String partitionDesc;
/**
* 游戏时长(秒)
*/
@ApiModelProperty("游戏时长(秒)")
private Integer duration;
}

View File

@@ -0,0 +1,63 @@
package com.accompany.admin.vo.miniGame;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("休闲游戏时长统计VO")
public class MiniGameForSudAdminStatsVo {
/**
* 游戏ID
*/
@ApiModelProperty("游戏ID")
private String gameId;
/**
* 游戏名称
*/
@ApiModelProperty("游戏名称")
private String gameName;
/**
* 统计月份
*/
@ApiModelProperty("统计月份")
private String statMonth;
/**
* 总时长(秒)
*/
@ApiModelProperty("总时长(秒)")
private Long totalDuration;
/**
* 英文区时长(秒)
*/
@ApiModelProperty("英文区时长(秒)")
private Long enDuration;
/**
* 阿拉伯语区时长(秒)
*/
@ApiModelProperty("阿拉伯语区时长(秒)")
private Long arDuration;
/**
* 中文区时长(秒)
*/
@ApiModelProperty("中文区时长(秒)")
private Long zhDuration;
/**
* 土耳其语区时长(秒)
*/
@ApiModelProperty("土耳其语区时长(秒)")
private Long trDuration;
/**
* 英文2区时长(秒)
*/
@ApiModelProperty("英文2区时长(秒)")
private Long en2Duration;
}

View File

@@ -48,4 +48,19 @@ public class I18nMessageAdminVo {
*/
@ApiModelProperty("葡萄牙语")
private String pt;
/**
* 英语
*/
@ApiModelProperty("西班牙语")
private String es;
/**
* 英语
*/
@ApiModelProperty("俄罗斯语")
private String ru;
/**
* 英语
*/
@ApiModelProperty("乌兹别克语")
private String uz;
}

View File

@@ -2,6 +2,7 @@ package com.accompany.admin.mapper;
import com.accompany.admin.vo.ChargeRecordAdminVo;
import com.accompany.admin.vo.ChargeRecordCountryVo;
import com.accompany.admin.vo.ChargeRecordPartitionRegionVo;
import com.accompany.admin.vo.ChargeRecordPartitionVo;
import com.accompany.payment.model.ChargeRecord;
import com.accompany.payment.vo.ChargeRecordRefundVo;
@@ -16,10 +17,14 @@ public interface ChargeRecordAdminMapper extends BaseMapper<ChargeRecord> {
Page<ChargeRecordAdminVo> page(Page<ChargeRecordAdminVo> p, @Param("erbanNo") Long erbanNo, @Param("channel") String channel,
@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("status") Integer status,
@Param("newUser") Boolean newUser, @Param("appChannel") String appChannel, @Param("regionId") Integer regionId);
@Param("newUser") Boolean newUser, @Param("appChannel") String appChannel, @Param("regionId") Integer regionId,
@Param("chargeRecordId") String chargeRecordId,
@Param("pingxxChargeId") String pingxxChargeId);
List<ChargeRecordAdminVo> pageTotal(@Param("erbanNo") Long erbanNo, @Param("channel") String channel, @Param("startTime") Date startTime,
@Param("endTime") Date endTime, @Param("status") Integer status, @Param("newUser") Boolean newUser,
@Param("appChannel") String appChannel, @Param("regionId") Integer regionId);
@Param("appChannel") String appChannel, @Param("regionId") Integer regionId,
@Param("chargeRecordId") String chargeRecordId,
@Param("pingxxChargeId") String pingxxChargeId);
List<ChargeRecord> listFisrChargeRecordByUids(@Param("uids") List<Long> uids);
@@ -27,6 +32,9 @@ public interface ChargeRecordAdminMapper extends BaseMapper<ChargeRecord> {
List<ChargeRecordPartitionVo> getPartitionGoldDetail(@Param("partitionId") Integer partitionId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
List<ChargeRecordPartitionRegionVo> getPartitionRegionGoldDetail(@Param("partitionId") Integer partitionId, @Param("startTime") Date startTime,
@Param("endTime") Date endTime, @Param("channel") String channel);
/**
* 充值统计
* @param uidList

View File

@@ -1,31 +0,0 @@
package com.accompany.admin.mapper;
import com.accompany.admin.model.TestPurse;
import com.accompany.admin.model.TestPurseExample;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface TestPurseMapper {
int countByExample(TestPurseExample example);
int deleteByExample(TestPurseExample example);
int deleteByPrimaryKey(Integer id);
int insert(TestPurse record);
int insertSelective(TestPurse record);
List<TestPurse> selectByExample(TestPurseExample example);
TestPurse selectByPrimaryKey(Integer id);
int updateByExampleSelective(@Param("record") TestPurse record, @Param("example") TestPurseExample example);
int updateByExample(@Param("record") TestPurse record, @Param("example") TestPurseExample example);
int updateByPrimaryKeySelective(TestPurse record);
int updateByPrimaryKey(TestPurse record);
}

View File

@@ -0,0 +1,40 @@
package com.accompany.admin.mapper.miniGame;
import com.accompany.admin.vo.miniGame.MiniGameForSudAdminDetailVo;
import com.accompany.admin.vo.miniGame.MiniGameForSudAdminStatsVo;
import com.accompany.business.model.miniGame.MiniGameRound;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface MiniGameForSudAdminMapper extends BaseMapper<MiniGameRound> {
/**
* 按月份统计游戏总时长
*
* @param gameId 游戏ID
* @param startTime 开始时间戳
* @param endTime 结束时间戳
* @return 统计结果
*/
List<MiniGameForSudAdminStatsVo> statGameDurationByMonth(@Param("gameId") String gameId,
@Param("startTime") Long startTime,
@Param("endTime") Long endTime);
/**
* 按月份统计游戏总时长
*
* @param gameId 游戏ID
* @param startTime 开始时间戳
* @param endTime 结束时间戳
* @return 统计结果
*/
Page<MiniGameForSudAdminDetailVo> pageGameRoundDetail(Page<MiniGameForSudAdminDetailVo> page,
@Param("gameId") String gameId,
@Param("startTime") Long startTime,
@Param("endTime") Long endTime);
}

View File

@@ -61,7 +61,7 @@ public class FamilyMemberWeekLevelRewardRecordAdminService {
PartitionInfo partitionInfo = partitionInfoService.getById(partitionId);
if (null == partitionInfo
|| (!Constant.ClanMode.FAMILY.equals(partitionInfo.getClanMode()) && !Constant.ClanMode.GUILD.equals(partitionInfo.getClanMode())
&& !Constant.ClanMode.GUILD_POLICY2.equals(partitionInfo.getClanMode()))){
&& !Constant.ClanMode.GUILD_POLICY2.equals(partitionInfo.getClanMode()))) {
throw new AdminServiceException(BusiStatus.PARAMERROR);
} else if (!StringUtils.hasText(cycleDate)) {
throw new AdminServiceException(BusiStatus.PARAMERROR);
@@ -70,42 +70,42 @@ public class FamilyMemberWeekLevelRewardRecordAdminService {
Page<FamilyMemberWeekLevelRewardStatAdminVo> voPage = new Page<>(pageNo, pageSize);
Long uid = null;
if (null != erbanNo){
if (null != erbanNo) {
Users u = usersService.getUserByErbanNo(erbanNo);
if (null == u){
if (null == u) {
return voPage;
}
uid = u.getUid();
}
if (Constant.ClanMode.FAMILY.equals(partitionInfo.getClanMode())){
if (Constant.ClanMode.FAMILY.equals(partitionInfo.getClanMode())) {
Page<FamilyMember> poPage = new Page<>(pageNo, pageSize);
LambdaQueryWrapper<FamilyMember> queryWrapper = Wrappers.<FamilyMember>lambdaQuery()
.eq(null != uid, FamilyMember::getUid, uid);
.eq(null != uid, FamilyMember::getUid, uid);
familyMemberMapper.selectPage(poPage, queryWrapper);
if (CollectionUtils.isEmpty(poPage.getRecords())){
if (CollectionUtils.isEmpty(poPage.getRecords())) {
return voPage;
}
Set<Long> uidSet = poPage.getRecords().stream().map(FamilyMember::getUid).collect(Collectors.toSet());
List<Long> familyMemberIdList = poPage.getRecords().stream().map(FamilyMember::getId).collect(Collectors.toList());
Map<Long, FamilyMember> familyMemberMap = poPage.getRecords().stream().collect(Collectors.toMap(FamilyMember::getId, f->f));
Map<Long, FamilyMember> familyMemberMap = poPage.getRecords().stream().collect(Collectors.toMap(FamilyMember::getId, f -> f));
List<Integer> familyIdList = familyMemberMap.values().stream().map(FamilyMember::getFamilyId).distinct().collect(Collectors.toList());
Map<Integer, Family> familyMap = familyMapper.selectByIds(familyIdList).stream().collect(Collectors.toMap(Family::getId, f->f));
Map<Integer, Family> familyMap = familyMapper.selectByIds(familyIdList).stream().collect(Collectors.toMap(Family::getId, f -> f));
List<Long> familyOwnerUid = familyMap.values().stream().map(Family::getOwnerUid).distinct().collect(Collectors.toList());
List<FamilyMemberWeekLevelReward> weekLevelRewardList = familyMemberWeekLevelRewardService.lambdaQuery()
.orderByAsc(FamilyMemberWeekLevelReward::getLevel)
.list();
Set<String> mapKeySet = familyMemberIdList.stream().map(familyMemberId->{
Set<String> mapKeySet = familyMemberIdList.stream().map(familyMemberId -> {
List<String> keyList = new ArrayList<>();
for (FamilyMemberWeekLevelReward levelReward: weekLevelRewardList){
keyList.add(String.join("_", familyMemberId.toString(), levelReward.getLevel().toString()));
for (FamilyMemberWeekLevelReward levelReward : weekLevelRewardList) {
keyList.add(String.join("_" , familyMemberId.toString(), levelReward.getLevel().toString()));
}
keyList.add(String.join("_", familyMemberId.toString(), "process"));
keyList.add(String.join("_" , familyMemberId.toString(), "process"));
return keyList;
}).flatMap(List::stream).collect(Collectors.toSet());
}).flatMap(List::stream).collect(Collectors.toSet());
Map<String, Number> weekMap = familyMemberWeekLevelRewardService.getWeekMap(cycleDate, partitionId).getAll(mapKeySet);
uidSet.addAll(familyOwnerUid);
@@ -117,16 +117,16 @@ public class FamilyMemberWeekLevelRewardRecordAdminService {
vo.setCycleDate(cycleDate);
vo.setFamilyMemberId(po.getId());
String processKey = String.join("_", po.getId().toString(), "process");
String processKey = String.join("_" , po.getId().toString(), "process");
vo.setProcessNum(BigDecimal.valueOf(weekMap.getOrDefault(processKey, 0d).doubleValue()));
int level = 0;
BigDecimal rewardNum = BigDecimal.ZERO;
BigDecimal receiverdNum = BigDecimal.ZERO;
for (FamilyMemberWeekLevelReward rewardItem: weekLevelRewardList){
String key = String.join("_", po.getId().toString(), rewardItem.getLevel().toString());
for (FamilyMemberWeekLevelReward rewardItem : weekLevelRewardList) {
String key = String.join("_" , po.getId().toString(), rewardItem.getLevel().toString());
Byte status = weekMap.getOrDefault(key, Constant.status.delete).byteValue();
if (Constant.status.valid.equals(status)){
if (Constant.status.valid.equals(status)) {
level = rewardItem.getLevel();
rewardNum = rewardNum.add(rewardItem.getRewardNum());
} else if (Constant.status.invalid.equals(status)) {
@@ -143,21 +143,21 @@ public class FamilyMemberWeekLevelRewardRecordAdminService {
vo.setUid(po.getUid());
Users u = usersMap.get(po.getUid());
if (null != u){
if (null != u) {
vo.setErbanNo(u.getErbanNo());
vo.setNick(u.getNick());
}
FamilyMember familyMember = familyMemberMap.get(po.getId());
if (null != familyMember){
if (null != familyMember) {
vo.setFamilyId(familyMember.getFamilyId());
Family family = familyMap.get(familyMember.getFamilyId());
if (null != family){
if (null != family) {
vo.setFamilyName(family.getName());
Users owner = usersMap.get(family.getOwnerUid());
if (null != owner){
if (null != owner) {
vo.setFamilyOwnerId(owner.getErbanNo());
vo.setFamilyOwnerNick(owner.getNick());
}
@@ -176,26 +176,27 @@ public class FamilyMemberWeekLevelRewardRecordAdminService {
.eq(null != uid, GuildMember::getUid, uid);
guildMemberMapper.selectPage(poPage, queryWrapper);
if (CollectionUtils.isEmpty(poPage.getRecords())){
if (CollectionUtils.isEmpty(poPage.getRecords())) {
return voPage;
}
Set<Long> uidSet = poPage.getRecords().stream().map(GuildMember::getUid).collect(Collectors.toSet());
List<Long> guildMemberIdList = poPage.getRecords().stream().map(GuildMember::getId).collect(Collectors.toList());
Map<Long, GuildMember> guildMemberMap = poPage.getRecords().stream().collect(Collectors.toMap(GuildMember::getId, f->f));
Map<Long, GuildMember> guildMemberMap = poPage.getRecords().stream().collect(Collectors.toMap(GuildMember::getId, f -> f));
List<Integer> guildIdList = guildMemberMap.values().stream().map(GuildMember::getGuildId).distinct().collect(Collectors.toList());
Map<Integer, Guild> guildMap = guildMapper.selectByIds(guildIdList).stream().collect(Collectors.toMap(Guild::getId, f->f));
Map<Integer, Guild> guildMap = guildMapper.selectByIds(guildIdList).stream().collect(Collectors.toMap(Guild::getId, f -> f));
List<Long> guildOwnerUid = guildMap.values().stream().map(Guild::getOwnerUid).distinct().collect(Collectors.toList());
List<GuildMemberWeekLevelReward> weekLevelRewardList = guildMemberWeekLevelRewardService.lambdaQuery()
.eq(GuildMemberWeekLevelReward::getPartitionId, partitionId)
.orderByAsc(GuildMemberWeekLevelReward::getLevel)
.list();
Set<String> mapKeySet = guildMemberIdList.stream().map(guildMemberId->{
Set<String> mapKeySet = guildMemberIdList.stream().map(guildMemberId -> {
List<String> keyList = new ArrayList<>();
for (GuildMemberWeekLevelReward levelReward: weekLevelRewardList){
keyList.add(String.join("_", guildMemberId.toString(), levelReward.getLevel().toString()));
for (GuildMemberWeekLevelReward levelReward : weekLevelRewardList) {
keyList.add(String.join("_" , guildMemberId.toString(), levelReward.getLevel().toString()));
}
keyList.add(String.join("_", guildMemberId.toString(), "process"));
keyList.add(String.join("_" , guildMemberId.toString(), "process"));
return keyList;
}).flatMap(List::stream).collect(Collectors.toSet());
Map<String, Number> weekMap = guildMemberWeekLevelRewardService.getWeekMap(cycleDate, partitionId).getAll(mapKeySet);
@@ -209,16 +210,16 @@ public class FamilyMemberWeekLevelRewardRecordAdminService {
vo.setCycleDate(cycleDate);
vo.setFamilyMemberId(po.getId());
String processKey = String.join("_", po.getId().toString(), "process");
String processKey = String.join("_" , po.getId().toString(), "process");
vo.setProcessNum(BigDecimal.valueOf(weekMap.getOrDefault(processKey, 0d).doubleValue()));
int level = 0;
BigDecimal rewardNum = BigDecimal.ZERO;
BigDecimal receiverdNum = BigDecimal.ZERO;
for (GuildMemberWeekLevelReward rewardItem: weekLevelRewardList){
String key = String.join("_", po.getId().toString(), rewardItem.getLevel().toString());
for (GuildMemberWeekLevelReward rewardItem : weekLevelRewardList) {
String key = String.join("_" , po.getId().toString(), rewardItem.getLevel().toString());
Byte status = weekMap.getOrDefault(key, Constant.status.delete).byteValue();
if (Constant.status.valid.equals(status)){
if (Constant.status.valid.equals(status)) {
level = rewardItem.getLevel();
rewardNum = rewardNum.add(rewardItem.getRewardNum());
} else if (Constant.status.invalid.equals(status)) {
@@ -235,21 +236,21 @@ public class FamilyMemberWeekLevelRewardRecordAdminService {
vo.setUid(po.getUid());
Users u = usersMap.get(po.getUid());
if (null != u){
if (null != u) {
vo.setErbanNo(u.getErbanNo());
vo.setNick(u.getNick());
}
GuildMember guildMember = guildMemberMap.get(po.getId());
if (null != guildMember){
if (null != guildMember) {
vo.setFamilyId(guildMember.getGuildId());
Guild guild = guildMap.get(guildMember.getGuildId());
if (null != guild){
if (null != guild) {
vo.setFamilyName(guild.getName());
Users owner = usersMap.get(guild.getOwnerUid());
if (null != owner){
if (null != owner) {
vo.setFamilyOwnerId(owner.getErbanNo());
vo.setFamilyOwnerNick(owner.getNick());
}

View File

@@ -0,0 +1,217 @@
package com.accompany.admin.service;
import com.accompany.admin.vo.FamilyMemberWeekLevelRewardStatAdminVo;
import com.accompany.business.model.guild.Guild;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.model.guild.GuildMemberWeekLevelReward;
import com.accompany.business.mybatismapper.guild.GuildMapper;
import com.accompany.business.mybatismapper.guild.GuildMemberMapper;
import com.accompany.business.service.guild.GuildMemberWeekLevelRewardService;
import com.accompany.business.service.guild.GuildService;
import com.accompany.business.service.user.UsersService;
import com.accompany.common.constant.Constant;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.model.PartitionInfo;
import com.accompany.core.model.Users;
import com.accompany.core.service.partition.PartitionInfoService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@Service
public class GuildMemberWeekLevelRewardRecordAdminService {
@Autowired
private UsersService usersService;
@Autowired
private GuildMemberWeekLevelRewardService guildMemberWeekLevelRewardService;
@Autowired
private GuildMemberMapper guildMemberMapper;
@Autowired
private GuildMapper guildMapper;
@Autowired
private GuildService guildService;
@Autowired
private PartitionInfoService partitionInfoService;
public Page<FamilyMemberWeekLevelRewardStatAdminVo> page(int partitionId,
String cycleDate,
Integer guildId,
Long guildOwnerErbanNo,
Long erbanNo,
int pageNo, int pageSize) {
PartitionInfo partitionInfo = partitionInfoService.getById(partitionId);
if (null == partitionInfo
|| (!Constant.ClanMode.GUILD.equals(partitionInfo.getClanMode())
&& !Constant.ClanMode.GUILD_POLICY2.equals(partitionInfo.getClanMode())
&& !Constant.ClanMode.SOVIET.equals(partitionInfo.getClanMode()))){
throw new AdminServiceException(BusiStatus.PARAMERROR);
} else if (!StringUtils.hasText(cycleDate)) {
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
Page<FamilyMemberWeekLevelRewardStatAdminVo> voPage = new Page<>(pageNo, pageSize);
if (null != guildOwnerErbanNo){
Users owner = usersService.getUserByErbanNo(guildOwnerErbanNo);
if (null == owner){
return voPage;
}
Guild g = guildService.getVaildGuildByOwnerUid(owner.getUid());
if (null == g){
return voPage;
}
guildId = g.getId();
}
Long uid = null;
if (null != erbanNo){
Users u = usersService.getUserByErbanNo(erbanNo);
if (null == u){
return voPage;
}
uid = u.getUid();
}
Page<GuildMember> poPage = new Page<>(pageNo, pageSize);
LambdaQueryWrapper<GuildMember> queryWrapper = Wrappers.<GuildMember>lambdaQuery()
.eq(null != guildId, GuildMember::getGuildId, guildId)
.eq(null != uid, GuildMember::getUid, uid);
guildMemberMapper.selectPage(poPage, queryWrapper);
if (CollectionUtils.isEmpty(poPage.getRecords())){
return voPage;
}
Set<Long> uidSet = poPage.getRecords().stream().map(GuildMember::getUid).collect(Collectors.toSet());
List<Long> guildMemberIdList = poPage.getRecords().stream().map(GuildMember::getId).toList();
Map<Long, GuildMember> guildMemberMap = poPage.getRecords().stream().collect(Collectors.toMap(GuildMember::getId, f->f));
List<Integer> guildIdList = guildMemberMap.values().stream().map(GuildMember::getGuildId).distinct().collect(Collectors.toList());
Map<Integer, Guild> guildMap = guildMapper.selectByIds(guildIdList).stream().collect(Collectors.toMap(Guild::getId, f->f));
List<Long> guildOwnerUid = guildMap.values().stream().map(Guild::getOwnerUid).distinct().toList();
List<GuildMemberWeekLevelReward> weekLevelRewardList = guildMemberWeekLevelRewardService.lambdaQuery()
.orderByAsc(GuildMemberWeekLevelReward::getLevel)
.list();
Set<String> mapKeySet = guildMemberIdList.stream().map(guildMemberId->{
List<String> keyList = new ArrayList<>();
for (GuildMemberWeekLevelReward levelReward: weekLevelRewardList){
String levelId = levelReward.getLevel().toString();
keyList.add(String.join("_", guildMemberId.toString(), levelId));
keyList.add(String.join("_", guildMemberId.toString(), levelId, "bonus"));
}
keyList.add(String.join("_", guildMemberId.toString(), "process"));
keyList.add(String.join("_", guildMemberId.toString(), "bonus", "process"));
return keyList;
}).flatMap(List::stream).collect(Collectors.toSet());
Map<String, Number> weekMap = guildMemberWeekLevelRewardService.getWeekMap(cycleDate, partitionId).getAll(mapKeySet);
uidSet.addAll(guildOwnerUid);
Map<Long, Users> usersMap = usersService.getUsersMapByUids(new ArrayList<>(uidSet));
List<FamilyMemberWeekLevelRewardStatAdminVo> voList = poPage.getRecords().stream().map(po -> {
FamilyMemberWeekLevelRewardStatAdminVo vo = new FamilyMemberWeekLevelRewardStatAdminVo();
vo.setCycleDate(cycleDate);
vo.setFamilyMemberId(po.getId());
String processKey = String.join("_", po.getId().toString(), "process");
BigDecimal processNum = BigDecimal.valueOf(weekMap.getOrDefault(processKey, 0d).doubleValue());
vo.setProcessNum(processNum);
String bonusProcessKey = String.join("_", po.getId().toString(), "bonus", "process");
Integer bonusProcessNum = weekMap.getOrDefault(bonusProcessKey, 0).intValue();
vo.setMicValidDay(bonusProcessNum);
Integer level = null;
String levelName = "-";
BigDecimal rewardNum = BigDecimal.ZERO;
BigDecimal bonusRewardNum = BigDecimal.ZERO;
BigDecimal receiverdNum = BigDecimal.ZERO;
BigDecimal preMaxNum = BigDecimal.ZERO;
for (GuildMemberWeekLevelReward rewardItem: weekLevelRewardList){
String key = String.join("_", po.getId().toString(), rewardItem.getLevel().toString());
Byte status = weekMap.getOrDefault(key, Constant.status.delete).byteValue();
BigDecimal thisMaxNum = preMaxNum.add(rewardItem.getProcessNum());
if (Constant.status.invalid.equals(status)) {
level = rewardItem.getLevel();
levelName = rewardItem.getLevelName();
rewardNum = rewardNum.add(rewardItem.getRewardNum());
receiverdNum = receiverdNum.add(rewardItem.getRewardNum());
} else if (processNum.compareTo(thisMaxNum) >= 0) {
level = rewardItem.getLevel();
levelName = rewardItem.getLevelName();
rewardNum = rewardNum.add(rewardItem.getRewardNum());
} else {
continue;
}
String bonusKey = String.join("_", po.getId().toString(), rewardItem.getLevel().toString(), "bonus");
Byte bonusStatus = weekMap.getOrDefault(bonusKey, Constant.status.delete).byteValue();
if (Constant.status.invalid.equals(bonusStatus)) {
bonusRewardNum = rewardNum.add(rewardItem.getBonusNum());
receiverdNum = receiverdNum.add(rewardItem.getBonusNum());
} else if (bonusProcessNum.compareTo(rewardItem.getMicValidDay()) >= 0) {
bonusRewardNum = rewardNum.add(rewardItem.getBonusNum());
}
preMaxNum = thisMaxNum;
}
vo.setLevel(level);
vo.setLevelName(levelName);
vo.setRewardNum(rewardNum);
vo.setBonusRewardNum(bonusRewardNum);
vo.setTotalRewardNum(rewardNum.add(bonusRewardNum));
vo.setReceivedNum(receiverdNum);
vo.setUid(po.getUid());
Users u = usersMap.get(po.getUid());
if (null != u){
vo.setErbanNo(u.getErbanNo());
vo.setNick(u.getNick());
}
GuildMember guildMember = guildMemberMap.get(po.getId());
if (null != guildMember){
vo.setFamilyId(guildMember.getGuildId());
Guild guild = guildMap.get(guildMember.getGuildId());
if (null != guild){
vo.setFamilyName(guild.getName());
Users owner = usersMap.get(guild.getOwnerUid());
if (null != owner){
vo.setFamilyOwnerId(owner.getErbanNo());
vo.setFamilyOwnerNick(owner.getNick());
}
}
}
return vo;
}).collect(Collectors.toList());
voPage.setRecords(voList);
voPage.setTotal(poPage.getTotal());
return voPage;
}
}

View File

@@ -286,6 +286,8 @@ public class UserCheckAdminService {
throw new AdminServiceException("用户钻石余额不为0不能改变分区");
} else if (userPurse.getGuildUsd() > 0d){
throw new AdminServiceException("用户金币公会薪资不为0不能改变分区");
} else if (userPurse.getGuildCrystal() > 0d) {
throw new AdminServiceException("用户金币公会紫晶不为0不能改变分区");
}
FamilyClanDecorateVo clanVo = familyClanService.getFamilyClanDecorateVo(users.getUid(), users.getUid());
@@ -368,7 +370,6 @@ public class UserCheckAdminService {
busiResult.setData(account);
return busiResult;
}
private void delUserCache(Users users) {
if (users == null) {
return;
@@ -459,4 +460,12 @@ public class UserCheckAdminService {
}
return BusiResult.success(result);
}
public UserVo getUser(Long erbanNo) {
Users user = usersService.getUserByErbanNo(erbanNo);
if (user == null) {
throw new AdminServiceException(BusiStatus.USERNOTEXISTS);
}
return usersService.getUserVoByUid(user.getUid());
}
}

View File

@@ -8,30 +8,33 @@ import com.accompany.admin.service.UserLevelExperienceExportService;
import com.accompany.business.constant.guild.GuildConstant;
import com.accompany.business.dto.WeekActiveGuildStat;
import com.accompany.business.model.*;
import com.accompany.business.model.guild.Guild;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.model.relation.RelationUser;
import com.accompany.business.mybatismapper.*;
import com.accompany.business.service.*;
import com.accompany.business.service.activity.WeekStarService;
import com.accompany.business.service.apple.IOSRefundV2Service;
import com.accompany.business.service.guild.*;
import com.accompany.business.service.game.ChargeUserXService;
import com.accompany.business.service.guild.GuildDressUpService;
import com.accompany.business.service.guild.GuildMemberService;
import com.accompany.business.service.guild.GuildOperatorService;
import com.accompany.business.service.guild.GuildService;
import com.accompany.business.service.guildpolicy2.GuildCrystalSettlementService;
import com.accompany.business.service.level.LevelService;
import com.accompany.business.service.lucky.BravoRecordService;
import com.accompany.business.service.lucky.Lucky24RecordService;
import com.accompany.business.service.relation.impl.RelationUserServiceImpl;
import com.accompany.business.service.room.RoomManageService;
import com.accompany.business.service.room.RoomReciveRankingService;
import com.accompany.business.service.room.RoomSendRankingService;
import com.accompany.business.service.room.RoomService;
import com.accompany.business.service.room.*;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.RoomVo;
import com.accompany.common.netease.ErBanNetEaseService;
import com.accompany.common.config.SystemConfig;
import com.accompany.common.constant.Constant;
import com.accompany.common.netease.neteaseacc.result.RoomMemberRet;
import com.accompany.common.netease.neteaseacc.result.RoomRet;
import com.accompany.common.redis.RedisKey;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.CommonUtil;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.common.utils.StringUtils;
import com.accompany.common.utils.*;
import com.accompany.core.base.SpringContextHolder;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.AdminServiceException;
@@ -58,7 +61,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -90,7 +92,7 @@ public class MyApiService {
private RoomReciveRankingService roomReciveRankingService;
@Autowired
private RoomSendRankingService roomSendRankingService;
@Resource(name = "bizExecutor")
@Resource(name = "biz-executor")
private ThreadPoolExecutor bizExecutor;
@Autowired
private UsersService usersService;
@@ -152,6 +154,12 @@ public class MyApiService {
private WeekGuildPartitionStatService weekGuildPartitionStatService;
@Autowired
private WeekRechargeAgentPartitionStatService weekRechargeAgentPartitionStatService;
@Autowired
private GuildOperatorService guildOperatorService;
@Autowired
private GuildService guildService;
@Autowired
private ChargeUserXService chargeUserXService;
public void refreshRoomMoneyRankList() {
List<Long> roomUidList = myApiAdminMapper.getExceptionRoomUid();
@@ -612,12 +620,18 @@ public class MyApiService {
});
}
public void diamondStat(String date) {
public void diamondStatAr(String date) {
List<Integer> partitionIds = List.of(PartitionEnum.ARAB.getId(), PartitionEnum.TURKEY.getId());
Date now = DateTimeUtil.convertStrToDate(date, DateTimeUtil.DEFAULT_DATE_PATTERN);
diamondStatService.stat(partitionIds, now);
}
public void diamondStatEn(String date) {
List<Integer> partitionIds = List.of(PartitionEnum.ENGLISH.getId(), PartitionEnum.CHINESE.getId(), PartitionEnum.ENGLISH2.getId());
Date now = DateTimeUtil.convertStrToDate(date, DateTimeUtil.DEFAULT_DATE_PATTERN);
diamondStatService.stat(partitionIds, now);
}
public void dauStat(String date) {
Date now = DateTimeUtil.convertStrToDate(date, DateTimeUtil.DEFAULT_DATE_PATTERN);
String yesterday = DateTimeUtil.convertDate(DateTimeUtil.addDays(now, -1), DateTimeUtil.DEFAULT_DATE_PATTERN);
@@ -689,7 +703,19 @@ public class MyApiService {
stat.setEnActiveCountDetail(JSON.toJSONString(enActiveGuildStatList));
List<WeekActiveGuildStat> arActiveGuildStatList = JSON.parseArray(stat.getArActiveCountDetail(), WeekActiveGuildStat.class);
Map<Integer, String> operatorNameMap = guildOperatorService.operatorNameMap(PartitionEnum.ARAB.getId());
Map<Integer, Guild> guildMap = new HashMap<>();
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(arActiveGuildStatList)) {
List<Integer> guildIds = arActiveGuildStatList.stream().map(WeekActiveGuildStat::getGuildId).collect(Collectors.toList());
List<Guild> guildList = guildService.listByIds(guildIds);
guildMap = guildList.stream().collect(Collectors.toMap(Guild::getId, guild->guild));
}
for (WeekActiveGuildStat activeGuildStat : arActiveGuildStatList){
Guild guild = guildMap.get(activeGuildStat.getGuildId());
if (guild != null && guild.getOperatorId() != null) {
activeGuildStat.setOperatorId(guild.getOperatorId());
activeGuildStat.setOperatorName(operatorNameMap.get(guild.getOperatorId()));
}
String lastWeek = DateTimeUtil.convertDate(DateTimeUtil.addDays(DateTimeUtil.convertStrToDate(activeGuildStat.getDate(), DateTimeUtil.DEFAULT_DATE_PATTERN), -7));
String lastWeekGroupByKey = String.join("_", lastWeek, activeGuildStat.getPartitionId().toString(), activeGuildStat.getGuildId().toString());
WeekActiveGuildStat lastWeekStat = lastWeekActiveGuildStatMap.get(lastWeekGroupByKey);
@@ -735,7 +761,19 @@ public class MyApiService {
stat.setZhActiveCountDetail(JSON.toJSONString(zhActiveGuildStatList));
List<WeekActiveGuildStat> trActiveGuildStatList = JSON.parseArray(stat.getTrActiveCountDetail(), WeekActiveGuildStat.class);
operatorNameMap = guildOperatorService.operatorNameMap(PartitionEnum.TURKEY.getId());
guildMap = new HashMap<>();
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(trActiveGuildStatList)) {
List<Integer> guildIds = trActiveGuildStatList.stream().map(WeekActiveGuildStat::getGuildId).collect(Collectors.toList());
List<Guild> guildList = guildService.listByIds(guildIds);
guildMap = guildList.stream().collect(Collectors.toMap(Guild::getId, guild->guild));
}
for (WeekActiveGuildStat activeGuildStat : trActiveGuildStatList){
Guild guild = guildMap.get(activeGuildStat.getGuildId());
if (guild != null && guild.getOperatorId() != null) {
activeGuildStat.setOperatorId(guild.getOperatorId());
activeGuildStat.setOperatorName(operatorNameMap.get(guild.getOperatorId()));
}
String lastWeek = DateTimeUtil.convertDate(DateTimeUtil.addDays(DateTimeUtil.convertStrToDate(activeGuildStat.getDate(), DateTimeUtil.DEFAULT_DATE_PATTERN), -7));
String lastWeekGroupByKey = String.join("_", lastWeek, activeGuildStat.getPartitionId().toString(), activeGuildStat.getGuildId().toString());
WeekActiveGuildStat lastWeekStat = lastWeekActiveGuildStatMap.get(lastWeekGroupByKey);
@@ -756,6 +794,93 @@ public class MyApiService {
log.info("[refreshWeekGuildStat] today {} last {}", JSON.toJSONString(stat), JSON.toJSONString(lastWeekStat));
}
stat.setTrActiveCountDetail(JSON.toJSONString(trActiveGuildStatList));
List<WeekActiveGuildStat> en2ActiveGuildStatList = JSON.parseArray(stat.getEn2ActiveCountDetail(), WeekActiveGuildStat.class);
operatorNameMap = guildOperatorService.operatorNameMap(PartitionEnum.ENGLISH2.getId());
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(en2ActiveGuildStatList)) {
guildMap = new HashMap<>();
List<Integer> guildIds = en2ActiveGuildStatList.stream().map(WeekActiveGuildStat::getGuildId).collect(Collectors.toList());
List<Guild> guildList = guildService.listByIds(guildIds);
guildMap = guildList.stream().collect(Collectors.toMap(Guild::getId, guild->guild));
for (WeekActiveGuildStat activeGuildStat : en2ActiveGuildStatList){
Guild guild = guildMap.get(activeGuildStat.getGuildId());
if (guild != null && guild.getOperatorId() != null) {
activeGuildStat.setOperatorId(guild.getOperatorId());
activeGuildStat.setOperatorName(operatorNameMap.get(guild.getOperatorId()));
}
String lastWeek = DateTimeUtil.convertDate(DateTimeUtil.addDays(DateTimeUtil.convertStrToDate(activeGuildStat.getDate(), DateTimeUtil.DEFAULT_DATE_PATTERN), -7));
String lastWeekGroupByKey = String.join("_", lastWeek, activeGuildStat.getPartitionId().toString(), activeGuildStat.getGuildId().toString());
WeekActiveGuildStat lastWeekStat = lastWeekActiveGuildStatMap.get(lastWeekGroupByKey);
if (null == lastWeekStat){
continue;
}
activeGuildStat.setLastGuildDiamondFlow(lastWeekStat.getGuildDiamondFlow());
activeGuildStat.setLastGuildGoldFlow(lastWeekStat.getGuildGoldFlow());
BigDecimal guildDiamondFlowWow = lastWeekStat.getGuildDiamondFlow().compareTo(BigDecimal.ZERO) > 0 ?
(activeGuildStat.getGuildDiamondFlow().subtract(lastWeekStat.getGuildDiamondFlow())).divide(lastWeekStat.getGuildDiamondFlow(), 2, RoundingMode.HALF_UP): BigDecimal.ONE;
activeGuildStat.setGuildDiamondFlowWow(guildDiamondFlowWow);
BigDecimal guildGoldFlowWow = lastWeekStat.getGuildGoldFlow().compareTo(BigDecimal.ZERO) > 0 ?
(activeGuildStat.getGuildGoldFlow().subtract(lastWeekStat.getGuildGoldFlow())).divide(lastWeekStat.getGuildGoldFlow(), 2, RoundingMode.HALF_UP): BigDecimal.ONE;
activeGuildStat.setGuildGoldFlowWow(guildGoldFlowWow);
log.info("[refreshWeekGuildStat] today {} last {}", JSON.toJSONString(stat), JSON.toJSONString(lastWeekStat));
}
}
stat.setEn2ActiveCountDetail(JSON.toJSONString(en2ActiveGuildStatList));
}
Map<Integer, String> operatorNameMap;
Map<Integer, Guild> guildMap;
for (WeekGuildStat stat : lastWeekGuildStatList) {
List<WeekActiveGuildStat> arNewCountDetail = JSON.parseArray(stat.getArNewCountDetail(), WeekActiveGuildStat.class);
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(arNewCountDetail)) {
operatorNameMap = guildOperatorService.operatorNameMap(PartitionEnum.ARAB.getId());
List<Integer> guildIds = arNewCountDetail.stream().map(WeekActiveGuildStat::getGuildId).collect(Collectors.toList());
List<Guild> guildList = guildService.listByIds(guildIds);
guildMap = guildList.stream().collect(Collectors.toMap(Guild::getId, guild->guild));
for (WeekActiveGuildStat newCountstat : arNewCountDetail){
Guild guild = guildMap.get(newCountstat.getGuildId());
if (guild != null && guild.getOperatorId() != null) {
newCountstat.setOperatorId(guild.getOperatorId());
newCountstat.setOperatorName(operatorNameMap.get(guild.getOperatorId()));
}
}
}
stat.setArNewCountDetail(JSON.toJSONString(arNewCountDetail));
List<WeekActiveGuildStat> trNewGuildStatList = JSON.parseArray(stat.getTrNewCountDetail(), WeekActiveGuildStat.class);
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(trNewGuildStatList)) {
operatorNameMap = guildOperatorService.operatorNameMap(PartitionEnum.TURKEY.getId());
List<Integer> guildIds = trNewGuildStatList.stream().map(WeekActiveGuildStat::getGuildId).collect(Collectors.toList());
List<Guild> guildList = guildService.listByIds(guildIds);
guildMap = guildList.stream().collect(Collectors.toMap(Guild::getId, guild->guild));
for (WeekActiveGuildStat activeGuildStat : trNewGuildStatList){
Guild guild = guildMap.get(activeGuildStat.getGuildId());
if (guild != null && guild.getOperatorId() != null) {
activeGuildStat.setOperatorId(guild.getOperatorId());
activeGuildStat.setOperatorName(operatorNameMap.get(guild.getOperatorId()));
}
}
}
stat.setTrNewCountDetail(JSON.toJSONString(trNewGuildStatList));
List<WeekActiveGuildStat> en2NewGuildStatList = JSON.parseArray(stat.getEn2NewCountDetail(), WeekActiveGuildStat.class);
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(en2NewGuildStatList)) {
operatorNameMap = guildOperatorService.operatorNameMap(PartitionEnum.ENGLISH2.getId());
List<Integer> guildIds = en2NewGuildStatList.stream().map(WeekActiveGuildStat::getGuildId).collect(Collectors.toList());
List<Guild> guildList = guildService.listByIds(guildIds);
guildMap = guildList.stream().collect(Collectors.toMap(Guild::getId, guild->guild));
for (WeekActiveGuildStat activeGuildStat : en2NewGuildStatList){
Guild guild = guildMap.get(activeGuildStat.getGuildId());
if (guild != null && guild.getOperatorId() != null) {
activeGuildStat.setOperatorId(guild.getOperatorId());
activeGuildStat.setOperatorName(operatorNameMap.get(guild.getOperatorId()));
}
}
}
stat.setEn2NewCountDetail(JSON.toJSONString(en2NewGuildStatList));
}
weekGuildStatMapper.delete(null);
weekGuildStatMapper.insert(lastWeekGuildStatList);
@@ -805,4 +930,57 @@ public class MyApiService {
}
}
@SneakyThrows
public void createPublicRoom(Integer partitionId) {
Long uid = Long.parseLong(SystemConfig.secretaryUid);
Users u = usersService.getNotNullUsersByUid(uid);
Room room = new Room();
room.setUid(uid);
room.setTitle("public chat");
room.setPartitionId(partitionId);
Date now = new Date();
room.setValid(true);
room.setIsPermitRoom(Constant.PermitType.NO_PERMIT_ROOM); // 非牌照房
room.setMeetingName(UUIDUtil.get());
room.setOperatorStatus(Constant.RoomOptStatus.in);
room.setOpenTime(now);
room.setOnlineNum(0);
room.setCreateTime(now);
room.setUpdateTime(now);
room.setIsExceptionClose(false);
room.setAvatar(u.getAvatar());
room.setHasAnimationEffect(true);
room.setAudioQuality((byte) Constant.Yes1No0.YES);
room.setIsCloseScreen(false);
//默认开启魔力值
room.setShowGiftValue(true);
Byte roomType = room.getType();
if (roomType != null) {
RoomServiceFactory.getServiceByType(roomType).wrapRoom(room);
}
// 通知云信服务器创建聊天室
log.info("创建房间 : {}", GsonUtil.getDefGson().toJson(room));
RoomRet roomRet = roomService.createNetEaseRoomInfo(room);
if (!roomRet.isSuccess()) {
throw new Exception("createRoom error, code=" + roomRet.getCode() + "&uid=" + room.getUid() + "json=" + JSON.toJSONString(roomRet));
}
}
@Autowired
private GuildCrystalSettlementService guildCrystalSettlementService;
public void guildCrystalSettlement(String cycleDate, Integer waitSecond) {
Date cycleDateTime = StringUtils.isNotBlank(cycleDate) ? DateTimeUtil.convertStrToDate(cycleDate, DateTimeUtil.DEFAULT_DATE_PATTERN): null;
guildCrystalSettlementService.settlement(PartitionEnum.TURKEY.getId(), cycleDateTime, waitSecond);
}
public void mp4TransferGif(String url) {
SpringContextHolder.getBean(UploadAvatarService.class).reviewAvatar(null, url, null, null, null, null);
}
public void updateX() {
chargeUserXService.updateUserX(new Date());
}
}

View File

@@ -37,7 +37,9 @@ public class ChargeRegionAdminServiceImpl implements ChargeRegionAdminService {
@Override
public List<ChargeRegion> list() {
return chargeRegionService.list();
return chargeRegionService.lambdaQuery()
.orderByAsc(ChargeRegion::getSeq)
.list();
}
@Override

View File

@@ -0,0 +1,121 @@
package com.accompany.admin.service.dailytask;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.constant.dailytask.DailyTaskTypeEnum;
import com.accompany.business.model.dailytask.DailyTaskRecvCoinStat;
import com.accompany.business.model.dailytask.DailyTaskRewardRecord;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.service.dailytask.DailyTaskRecvCoinStatService;
import com.accompany.business.service.dailytask.DailyTaskRewardRecordService;
import com.accompany.business.service.dailytask.DailyTaskStatService;
import com.accompany.business.service.guild.GuildMemberService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.dailytask.DailyCoinRecvRecordVo;
import com.accompany.business.vo.dailytask.DailyCoinRecvVo;
import com.accompany.common.result.PageResult;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.model.Users;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class DailyTaskAdminService {
@Autowired
private DailyTaskRecvCoinStatService dailyTaskRecvCoinStatService;
@Autowired
private DailyTaskStatService dailyTaskStatService;
@Autowired
private DailyTaskRewardRecordService dailyTaskRewardRecordService;
@Autowired
private UsersService usersService;
@Autowired
private GuildMemberService guildMemberService;
public PageResult<DailyCoinRecvVo> list(Integer pageNo, Integer pageSize, Integer partitionId, String startDate, String endDate) {
IPage<DailyTaskRecvCoinStat> dailyTaskRecvCoinStatIPage = dailyTaskRecvCoinStatService.selectDailyCoinRecvStat(partitionId, startDate, endDate, pageNo, pageSize);
PageResult<DailyCoinRecvVo> pageResult = new PageResult<>();
List<DailyCoinRecvVo> recvVoList = new ArrayList<>();
pageResult.setRows(recvVoList);
pageResult.setTotal((int) dailyTaskRecvCoinStatIPage.getTotal());
List<DailyTaskRecvCoinStat> records = dailyTaskRecvCoinStatIPage.getRecords();
if (pageNo == 1) {
if (CollectionUtils.isEmpty(records)) {
records = new ArrayList<>();
}
String todayDate = DateTimeUtil.convertWithZoneId(new Date(),
PartitionEnum.getByPartitionId(partitionId).getZoneId()).format(DateTimeUtil.dateFormatter);
if (StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)) {
if (startDate.compareTo(todayDate) <= 0 && endDate.compareTo(todayDate) >= 0) {
records.add(dailyTaskStatService.statDailyCoinRecvStat(partitionId, todayDate, false));
}
} else {
records.add(dailyTaskStatService.statDailyCoinRecvStat(partitionId, todayDate, false));
}
}
if (CollectionUtils.isEmpty(records)) {
return pageResult;
}
for (DailyTaskRecvCoinStat record : records) {
DailyCoinRecvVo dailyCoinRecvVo = new DailyCoinRecvVo();
BeanUtils.copyProperties(record, dailyCoinRecvVo);
recvVoList.add(dailyCoinRecvVo);
}
return pageResult;
}
public PageResult<DailyCoinRecvRecordVo> listRecord(Long erbanNo, Integer partitionId, String statDate,
String deviceId, String ip, Integer pageNo, Integer pageSize) {
Long uid = null;
if (erbanNo != null) {
Users user = usersService.getUserByErbanNo(erbanNo);
if (user == null) {
throw new AdminServiceException("ID:" + erbanNo + ",不存在");
}
uid = user.getUid();
}
IPage<DailyTaskRewardRecord> dailyTaskRewardRecordIPage = dailyTaskRewardRecordService
.listDetail(uid, partitionId, statDate, DailyTaskTypeEnum.UP_MIC_COIN.name(), deviceId, ip, pageNo, pageSize);
PageResult<DailyCoinRecvRecordVo> pageResult = new PageResult<>();
List<DailyCoinRecvRecordVo> recordVoList = new ArrayList<>();
pageResult.setRows(recordVoList);
pageResult.setTotal((int) dailyTaskRewardRecordIPage.getTotal());
List<DailyTaskRewardRecord> records = dailyTaskRewardRecordIPage.getRecords();
if (CollectionUtils.isEmpty(records)) {
return pageResult;
}
List<Long> uids = records.stream().map(DailyTaskRewardRecord::getUid).collect(Collectors.toList());
List<Long> guildMemberIds = records.stream().filter(record -> record.getGuildMemberId() != null)
.map(DailyTaskRewardRecord::getGuildMemberId).distinct().collect(Collectors.toList());
Map<Long, Users> usersMap = usersService.getUsersMapByUids(uids);
Map<Long, GuildMember> guildMemberMap = guildMemberService.mapByIds(guildMemberIds);
for (DailyTaskRewardRecord record : records) {
DailyCoinRecvRecordVo recordVo = new DailyCoinRecvRecordVo();
recordVo.setGuildId(record.getGuildId());
recordVo.setUid(record.getUid());
Users users = usersMap.get(record.getUid());
if (users != null) {
recordVo.setErbanNo(users.getErbanNo());
}
recordVo.setDeviceId(record.getDeviceId());
recordVo.setIp(record.getLoginIp());
GuildMember guildMember = guildMemberMap.get(record.getGuildMemberId());
recordVo.setStatusStr((guildMember == null || !guildMember.getEnable()) ? "无效" : "有效");
recordVo.setReceiveTime(DateUtil.formatDateTime(record.getCreateTime()));
recordVoList.add(recordVo);
}
return pageResult;
}
}

View File

@@ -245,7 +245,7 @@ public class GiftAdminService extends AbstractCoreService<Gift, GiftExample> {
@SneakyThrows
@Override
public int save(Gift entity, boolean isEdit, boolean isSelective) {
log.info("更新礼物: entity:{}, isEdit:{},isSelective:{}", gson.toJson(entity), isEdit, isSelective);
// 新增福袋时默认下线
if (entity.getGiftId() == null && entity.getGiftType().equals(Constant.GiftType.LUCKY_BAG)) {
entity.setGiftStatus(Constant.status.invalid);
@@ -305,12 +305,15 @@ public class GiftAdminService extends AbstractCoreService<Gift, GiftExample> {
}
int result = super.save(entity, isEdit, isSelective);
log.info("更新礼物-刷新缓存前: entity:{}", gson.toJson(entity));
if (Constant.status.valid.equals(entity.getGiftStatus())) {
Object id = getId(entity);
if (isEdit) {
entity = super.get(id);
}
jedisService.hwrite(RedisKey.gift.getKey(), id.toString(), gson.toJson(entity));
String json = gson.toJson(entity);
log.info("更新礼物缓存: id:{},entity:{}", id, json);
jedisService.hwrite(RedisKey.gift.getKey(), id.toString(), json);
}
return result;
}

View File

@@ -13,6 +13,7 @@ import com.accompany.business.service.family.FamilyGiftRecordService;
import com.accompany.business.service.guild.BdGuildService;
import com.accompany.business.service.guild.BdInfoService;
import com.accompany.business.service.guild.GuildDiamondStatisticsDayService;
import com.accompany.business.service.guildsoviet.GuildExtraDiamondDayService;
import com.accompany.business.service.invite.UserInviteFissionRecordService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.guild.GuildInfoVo;
@@ -56,6 +57,8 @@ public class BdInfoAdminService {
private GuildDiamondStatisticsDayService guildDiamondStatisticsDayService;
@Autowired
private FamilyGiftRecordService familyGiftRecordService;
@Autowired
private GuildExtraDiamondDayService guildExtraDiamondDayService;
public final int BOUND_EXPIRE_LIMIT_DAY = 7;
@@ -134,6 +137,8 @@ public class BdInfoAdminService {
Map<Integer, Double> guildDiamondOrGoldMap;
if (PartitionEnum.ENGLISH.getId() == partitionId) {
guildDiamondOrGoldMap = familyGiftRecordService.mapByFamilyId(DateUtil.formatDateTime(beginTime), DateUtil.formatDateTime(endTime), guildIdList);
} else if (PartitionEnum.SOVIET.getId() == partitionId) {
guildDiamondOrGoldMap = guildExtraDiamondDayService.mapByStatDate(DateUtil.formatDate(beginTime), DateUtil.formatDate(endTime), partitionId, guildIdList);
} else {
guildDiamondOrGoldMap = guildDiamondStatisticsDayService.mapByStatDate(DateUtil.formatDate(beginTime), DateUtil.formatDate(endTime), partitionId, guildIdList);
}
@@ -355,6 +360,16 @@ public class BdInfoAdminService {
record.setGoldNum(BigDecimal.valueOf(guildDiamondMap.getOrDefault(record.getGuildId(), 0D)));
}
}
} else if (PartitionEnum.SOVIET.getId() == users.getPartitionId()) {
guilds = bdGuildService.guildsByBdId(bdId, pageNo, pageSize);
List<GuildInfoVo> records = guilds.getRecords();
if (records != null) {
List<Integer> guildIds = records.stream().map(x -> x.getGuildId().intValue()).collect(Collectors.toList());
Map<Integer, Double> guildDiamondMap = guildExtraDiamondDayService.mapByStatDate(DateUtil.formatDate(beginTime), DateUtil.formatDate(endTime), partitionId, guildIds);
for (GuildInfoVo record : records) {
record.setDiamondNum(BigDecimal.valueOf(guildDiamondMap.getOrDefault(record.getGuildId(), 0D)));
}
}
} else {
guilds = bdGuildService.guildsByBdId(bdId, pageNo, pageSize);
List<GuildInfoVo> records = guilds.getRecords();

View File

@@ -226,7 +226,7 @@ public class GuildApplyAdminService {
applyServiceById.setAdminId(admindId);
boolean b = guildApplyService.updateById(applyServiceById);
if (b) {
Integer guildId = guildManageAdminService.addGuildInfo(users, applyServiceById.getApplyTime(), admindId, null, null, applyServiceById.getInviteUid(), applyServiceById, null);
Integer guildId = guildManageAdminService.addGuildInfo(users, applyServiceById.getApplyTime(), admindId, null, null, applyServiceById.getInviteUid(), applyServiceById, null, null);
applyServiceById.setGuildId(guildId);
guildApplyService.updateById(applyServiceById);
String rejectSys = I18NMessageSourceUtil.getMessage(I18nAlertEnum.GUILD_APPLY_PASS, users.getPartitionId());

View File

@@ -74,7 +74,7 @@ public class GuildDiamondStatisticsDayAdminService {
Page<GuildDiamondStatisticsDayVo> guildDiamondStatisticsDayPage;
if (GUILD_POLICY2.equals(partitionEnum.getClanMode())) {
guildDiamondStatisticsDayPage =
guildDiamondStatisticsPolicy2Service.listByStatDate4OldPolicy(startDate, endDate, partitionId, regionId, guildId, pageNo, pageSize, inviteUid);
guildDiamondStatisticsPolicy2Service.listByStatDate4Policy2(startDate, endDate, partitionId, regionId, guildId, pageNo, pageSize, inviteUid);
} else {
guildDiamondStatisticsDayPage =
guildDiamondStatisticsDayService.listByStatDate(startDate, endDate, partitionId, regionId, guildId, pageNo, pageSize, inviteUid);

View File

@@ -87,15 +87,15 @@ public class GuildManageAdminService {
@Transactional(rollbackFor = Exception.class)
public void createGuild(Long erbanNo, Integer adminId, String guildContactType, String guildContact,
Long inviteErbanNo,
Integer operatorId) {
Long inviteErbanNo, Integer operatorId, Integer regionId) {
Users u = usersService.getUserByErbanNo(erbanNo);
if (null == u){
throw new AdminServiceException(BusiStatus.USERNOTEXISTS);
}
PartitionInfo partitionInfo = partitionInfoService.getById(u.getPartitionId());
if (null == partitionInfo || (!Constant.ClanMode.GUILD.equals(partitionInfo.getClanMode())
&& !Constant.ClanMode.GUILD_POLICY2.equals(partitionInfo.getClanMode()))){
&& !Constant.ClanMode.GUILD_POLICY2.equals(partitionInfo.getClanMode())
&& !Constant.ClanMode.SOVIET.equals(partitionInfo.getClanMode()))){
throw new AdminServiceException(BusiStatus.PARTITION_ERROR);
}
@@ -124,7 +124,7 @@ public class GuildManageAdminService {
}
Date now = new Date();
int guildId = addGuildInfo(u, now, adminId, guildContactType, guildContact, inviteUid,null, operatorId);
int guildId = addGuildInfo(u, now, adminId, guildContactType, guildContact, inviteUid,null, operatorId, regionId);
guildOperatorHistoryAdminService.addGuildRef(guildId, u.getPartitionId(), operatorId, adminId);
}
@@ -140,9 +140,8 @@ public class GuildManageAdminService {
* @param operatorId
* @return
*/
public Integer addGuildInfo(Users u, Date now, Integer adminId,
String guildContactType, String guildContact,
Long inviteUid, GuildApply guildApply, Integer operatorId) {
public Integer addGuildInfo(Users u, Date now, Integer adminId, String guildContactType, String guildContact,
Long inviteUid, GuildApply guildApply, Integer operatorId, Integer regionId) {
Guild guild = new Guild();
guild.setPartitionId(u.getPartitionId());
guild.setOwnerUid(u.getUid());
@@ -169,7 +168,7 @@ public class GuildManageAdminService {
guild.setAvatar(u.getAvatar());
}
guild.setOperatorId(operatorId);
guild.setRegionId(regionId == null ? u.getRegionId() : regionId);
guildService.save(guild);
applicationContext.publishEvent(new NewGuildEvent(new NewGuildMessage(u.getPartitionId(), guild.getId(), u.getUid(), now)));
@@ -197,7 +196,7 @@ public class GuildManageAdminService {
public void updateGuild(Integer id, String name,
String avatar, String backgroundUrl, Integer memberNumLimit,
String guildContactType, String guildContact, Long inviteErbanNo,
int adminId, Integer operatorId){
int adminId, Integer operatorId, Integer regionId){
if (null != memberNumLimit && 1 >= memberNumLimit){
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
@@ -225,6 +224,7 @@ public class GuildManageAdminService {
.set(StringUtils.isNotBlank(guildContactType), Guild::getGuildContactType, guildContactType)
.set(StringUtils.isNotBlank(guildContact), Guild::getGuildContact, guildContact)
.set(inviteUid != null, Guild::getInviteUid, inviteUid)
.set(regionId != null, Guild::getRegionId, regionId)
.set(null != memberNumLimit, Guild::getMemberNumLimit, memberNumLimit)
.set(Guild::getOperatorId, operatorId)
.update();
@@ -301,11 +301,6 @@ public class GuildManageAdminService {
regionGuildIdSet.add(guildId);
}
LambdaQueryWrapper<Guild> queryWrapper = Wrappers.<Guild>lambdaQuery()
.in(!CollectionUtils.isEmpty(regionGuildIdSet), Guild::getId, regionGuildIdSet)
.eq(Guild::getPartitionId, partitionId)
.orderByDesc(Guild::getEnable, Guild::getId);
Long ownerUid = null;
if (null != erbanNo){
Users u = usersService.getUserByErbanNo(erbanNo);
@@ -396,6 +391,11 @@ public class GuildManageAdminService {
vo.setOwnerPartitionName(partitionNameMap.get(u.getPartitionId()));
vo.setOwnerRegionName(regionNameMap.get(u.getRegionId()));
}
vo.setPartitionId(guild.getPartitionId());
vo.setRegionId(guild.getRegionId());
if (guild.getRegionId() != null) {
vo.setRegionName(regionNameMap.get(guild.getRegionId()));
}
vo.setMemberNum(memberNumMap.getOrDefault(guild.getId(), 0L));
@@ -522,6 +522,7 @@ public class GuildManageAdminService {
vo.setPartitionName(partitionNameMap.get(u.getPartitionId()));
vo.setRoleType(guildMember.getRoleType());
vo.setCreateTime(guildMember.getCreateTime());
vo.setUpdateTime(guildMember.getUpdateTime());
vo.setEnable(guildMember.getEnable());
if (guildMember.getAdminId() != null) {
vo.setAdminName(adminUserMap.get(guildMember.getAdminId()));

View File

@@ -124,7 +124,7 @@ public class GuildSuperAdminService {
if (!partitionCheck) {
throw new AdminServiceException("会长ID Part Error");
}
vipSendAdminService.send(uid, vipLevel, adminId, days);
vipSendAdminService.send(uid, vipLevel, adminId, days, Boolean.FALSE);
}

View File

@@ -3,7 +3,6 @@ package com.accompany.admin.service.guild;
import com.accompany.business.constant.CountryEnum;
import com.accompany.business.constant.guild.GuildConstant;
import com.accompany.business.constant.guild.GuildWithdrawAccountTypeEnum;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.model.guild.GuildUsdWithdrawRecord;
import com.accompany.business.param.BasePageParams;
import com.accompany.business.service.SendSysMsgService;
@@ -12,7 +11,9 @@ import com.accompany.business.service.guild.GuildUsdOperateService;
import com.accompany.business.service.guild.GuildUsdWithdrawRecordService;
import com.accompany.business.vo.guild.AgencyWithdrawExamineVo;
import com.accompany.common.constant.Constant;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.I18nAlertEnum;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.model.AccountBlock;
import com.accompany.core.model.PartitionInfo;
import com.accompany.core.service.partition.PartitionInfoService;
@@ -23,6 +24,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.time.DayOfWeek;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -129,6 +132,10 @@ public class GuildUsdWithdrawRecordAdminService {
sendSysMsgService.sendPersonTextMsg(record.getUid(), content);
guildUsdOperateService.withdrawReject(record.getGuildId(), record.getUid(), record.getGuildUsdNum());
Date createTime = record.getCreateTime();
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(createTime, PartitionEnum.getByPartitionId(record.getPartitionId()).getZoneId());
String cycleDate = zonedDateTime.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
guildUsdOperateService.withdrawNum(cycleDate, record.getPartitionId()).addAndGet(record.getUid(), -1);
}
}
}

View File

@@ -0,0 +1,113 @@
package com.accompany.admin.service.guildpolicy2;
import com.accompany.business.model.guild.Guild;
import com.accompany.business.model.guildpolicy2.GuildMemberCrystalSettlementRecord;
import com.accompany.business.service.guild.GuildService;
import com.accompany.business.service.guildpolicy2.GuildDiamondClearPolicy2Service;
import com.accompany.business.service.guildpolicy2.GuildMemberCrystalSettlementRecordService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.guildpolicy.GuildDiamondClearAdminVo;
import com.accompany.business.vo.guildpolicy.GuildMemberCrystalSettlementRecordAdminVo;
import com.accompany.common.result.PageResult;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.model.Users;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestParam;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class GuildCrystalSettlementRecordAdminService {
@Autowired
private UsersService usersService;
@Autowired
private GuildService guildService;
@Autowired
private GuildMemberCrystalSettlementRecordService recordService;
public Page<GuildMemberCrystalSettlementRecordAdminVo> page(Integer pageNo, Integer pageSize,
Integer guildId,
Long ownerErbanNo,
Long erbanNo,
Integer partitionId,
String cycleDate){
Long uid = null;
if (erbanNo != null) {
Users user = usersService.getUserByErbanNo(erbanNo);
if (user == null) {
throw new AdminServiceException("主播ID:" + erbanNo + ",不存在");
}
uid = user.getUid();
}
if (guildId == null && ownerErbanNo != null) {
Users user = usersService.getUserByErbanNo(ownerErbanNo);
if (user == null) {
throw new AdminServiceException("公会长ID:" + ownerErbanNo + ",不存在");
}
Guild vaildGuildByOwnerUid = guildService.getVaildGuildByOwnerUid(user.getUid());
if (vaildGuildByOwnerUid == null) {
throw new AdminServiceException("公会长ID:" + ownerErbanNo + ",不存在公会");
}
guildId = vaildGuildByOwnerUid.getId();
}
Page<GuildMemberCrystalSettlementRecordAdminVo> voPage = new Page<>(pageNo, pageSize);
Page<GuildMemberCrystalSettlementRecord> poPage = new Page<>(pageNo, pageSize);
LambdaQueryWrapper<GuildMemberCrystalSettlementRecord> queryWrapper = Wrappers.<GuildMemberCrystalSettlementRecord>lambdaQuery()
.eq(StringUtils.hasText(cycleDate), GuildMemberCrystalSettlementRecord::getCycleDate, cycleDate)
.eq(null != uid, GuildMemberCrystalSettlementRecord::getUid, uid)
.eq(null != guildId, GuildMemberCrystalSettlementRecord::getGuildId, guildId)
.eq(null != partitionId, GuildMemberCrystalSettlementRecord::getPartitionId, partitionId)
.orderByDesc(GuildMemberCrystalSettlementRecord::getId);
recordService.page(poPage, queryWrapper);
if (CollectionUtils.isEmpty(poPage.getRecords())){
return voPage;
}
List<Integer> guildIdList = poPage.getRecords().stream().map(GuildMemberCrystalSettlementRecord::getGuildId).distinct().toList();
Map<Integer, String> guildNameMap = guildService.listByIds(guildIdList).stream().collect(Collectors.toMap(Guild::getId, Guild::getName));
List<Long> uidList = poPage.getRecords().stream().map(GuildMemberCrystalSettlementRecord::getUid).distinct().toList();
Map<Long, Users> usersMap = usersService.getUsersMapByUids(uidList);
List<GuildMemberCrystalSettlementRecordAdminVo> voList = poPage.getRecords().stream().map(po -> {
GuildMemberCrystalSettlementRecordAdminVo vo = new GuildMemberCrystalSettlementRecordAdminVo();
vo.setCycleDate(po.getCycleDate());
vo.setGuildId(po.getGuildId());
vo.setGuildName(guildNameMap.get(po.getGuildId()));
vo.setUid(po.getUid());
Users u = usersMap.get(po.getUid());
if (null != u){
vo.setErbanNo(u.getErbanNo());
vo.setNick(u.getNick());
}
vo.setGuildCrystalNum(BigDecimal.valueOf(po.getCrystalNum()));
vo.setCreateTime(DateTimeUtil.convertDateTime(po.getCreateTime()));
return vo;
}).toList();
voPage.setRecords(voList);
voPage.setTotal(poPage.getTotal());
return voPage;
}
}

View File

@@ -3,16 +3,16 @@ package com.accompany.admin.service.guildpolicy2;
import com.accompany.business.model.guild.Guild;
import com.accompany.business.model.guildpolicy2.GuildDiamondWagePolicy2;
import com.accompany.business.service.guild.GuildService;
import com.accompany.business.service.guildpolicy2.GuildDiamondStatisticsPolicy2Service;
import com.accompany.business.service.guildpolicy2.GuildDiamondWagePolicy2Service;
import com.accompany.business.service.guildpolicy2.GuildMicStatisticsPolicy2Service;
import com.accompany.business.service.guildpolicy2.GuildPolicy2Service;
import com.accompany.business.service.guildpolicy2.*;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.util.FullMonthCycleTimeUtil;
import com.accompany.business.vo.guild.CycleDateVo;
import com.accompany.business.vo.guildpolicy.GuildMemberMicDayVo;
import com.accompany.business.vo.guildpolicy.GuildPolicy2MemberAdminVo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.result.PageResult;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.model.Users;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -22,6 +22,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.List;
import java.util.TreeMap;
@@ -40,6 +42,8 @@ public class GuildPolicy2AdminService {
private GuildService guildService;
@Autowired
private GuildMicStatisticsPolicy2Service guildMicStatisticsPolicy2Service;
@Autowired
private GuildDiamondStatisticsPolicy2SettleService guildDiamondStatisticsPolicy2SettleService;
public PageResult<GuildPolicy2MemberAdminVo> queryMemberPage(Long ownerErbanNo, Integer guildId, Long erbanNo,
Integer partitionId, String startDate, String endDate, Integer pageNo, Integer pageSize) {
@@ -65,22 +69,31 @@ public class GuildPolicy2AdminService {
}
guildId = vaildGuildByOwnerUid.getId();
}
Page<GuildPolicy2MemberAdminVo> voPage = guildDiamondStatisticsPolicy2Service.listByStatDate(startDate, endDate, partitionId, guildId, uid, pageNo, pageSize);
List<GuildPolicy2MemberAdminVo> records = voPage.getRecords();
PageResult<GuildPolicy2MemberAdminVo> pageResult = new PageResult<>(voPage);
if (CollectionUtils.isEmpty(records)) {
return pageResult;
}
TreeMap<BigDecimal, GuildDiamondWagePolicy2> diamondWageMap = guildDiamondWagePolicy2Service.getDiamondWageMap(partitionId);
for (GuildPolicy2MemberAdminVo record : records) {
GuildDiamondWagePolicy2 diamondWagePolicy2 = guildDiamondWagePolicy2Service.calDiamondWageVo(diamondWageMap, record.getDiamondNum(), record.getMicDay());
if (diamondWagePolicy2 == null) {
continue;
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(new Date(), PartitionEnum.TURKEY.getZoneId());
String nowDate = FullMonthCycleTimeUtil.getCycleDate(zonedDateTime);
PageResult<GuildPolicy2MemberAdminVo> pageResult;
if (nowDate.equals(startDate) || startDate.compareTo("2025-09-01") <= 0) {
Page<GuildPolicy2MemberAdminVo> voPage = guildDiamondStatisticsPolicy2Service.listByStatDate(startDate, endDate, partitionId, guildId, uid, pageNo, pageSize);
List<GuildPolicy2MemberAdminVo> records = voPage.getRecords();
pageResult = new PageResult<>(voPage);
if (CollectionUtils.isEmpty(records)) {
return pageResult;
}
record.setAnchorDiamondSalary(diamondWagePolicy2.getAnchorDiamondSalary());
record.setOwnerSalary(diamondWagePolicy2.getOwnerSalary());
record.setAnchorMicSalary(diamondWagePolicy2.getAnchorMicSalary());
TreeMap<BigDecimal, GuildDiamondWagePolicy2> diamondWageMap = guildDiamondWagePolicy2Service.getDiamondWageMap(partitionId);
for (GuildPolicy2MemberAdminVo record : records) {
GuildDiamondWagePolicy2 diamondWagePolicy2 = guildDiamondWagePolicy2Service.calDiamondWageVo(diamondWageMap, record.getDiamondNum(), record.getMicDay());
if (diamondWagePolicy2 == null) {
continue;
}
record.setAnchorDiamondSalary(diamondWagePolicy2.getAnchorDiamondSalary());
record.setOwnerSalary(diamondWagePolicy2.getOwnerSalary());
record.setAnchorMicSalary(diamondWagePolicy2.getAnchorMicSalary());
}
} else {
Page<GuildPolicy2MemberAdminVo> voPage = guildDiamondStatisticsPolicy2SettleService.listByStatDate(startDate, partitionId, guildId, uid, pageNo, pageSize);
pageResult = new PageResult<>(voPage);
}
return pageResult;
}

View File

@@ -0,0 +1,102 @@
package com.accompany.admin.service.guildsoviet;
import com.accompany.business.model.guild.Guild;
import com.accompany.business.service.guild.GuildService;
import com.accompany.business.service.guildsoviet.GuildExtraDiamondDayService;
import com.accompany.business.service.guildsoviet.RoomExtraDiamondDayService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.guildsoviet.GuildMemberSovietAdminVo;
import com.accompany.business.vo.guildsoviet.GuildSovietAdminVo;
import com.accompany.business.vo.guildsoviet.RoomSovietAdminVo;
import com.accompany.common.result.PageResult;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.model.Users;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Service
public class GuildSovietAdminService {
@Autowired
private GuildExtraDiamondDayService guildExtraDiamondDayService;
@Autowired
private RoomExtraDiamondDayService roomExtraDiamondDayService;
@Autowired
private UsersService usersService;
@Autowired
private GuildService guildService;
public PageResult<GuildSovietAdminVo> listGuildSovietAdminVo(Integer partitionId, Integer guildId, Long erbanNo,
Integer regionId, String startDate, String endDate,
Integer pageNo, Integer pageSize) {
Long uid = null;
if (erbanNo != null) {
Users user = usersService.getUserByErbanNo(erbanNo);
if (user == null) {
throw new AdminServiceException("公会长ID不存在");
}
uid = user.getUid();
}
Page<GuildSovietAdminVo> guildSovietAdminVoPage =
guildExtraDiamondDayService.pageGuildSovietAdminVo(new Page<>(pageNo, pageSize), partitionId, guildId, uid, regionId, startDate, endDate);
return new PageResult<>(guildSovietAdminVoPage);
}
public PageResult<GuildMemberSovietAdminVo> listGuildMemberSovietAdminVo(Integer partitionId, Byte ebable,
Long ownerErbanNo, Integer guildId,
Long erbanNo, Integer regionId,
String startDate, String endDate,
Integer pageNo, Integer pageSize) {
Long uid = null;
if (erbanNo != null) {
Users user = usersService.getUserByErbanNo(erbanNo);
if (user == null) {
throw new AdminServiceException("公会长ID不存在");
}
uid = user.getUid();
}
Set<Integer> guildIdSet = new HashSet<>();
if (guildId != null) {
guildIdSet.add(guildId);
}
if (ownerErbanNo != null) {
Users ownUser = usersService.getUserByErbanNo(ownerErbanNo);
if (ownUser == null) {
throw new AdminServiceException("公会长ID不存在");
}
List<Guild> guildByOwnerUid = guildService.getGuildByOwnerUid(ownUser.getUid());
if (CollectionUtils.isEmpty(guildByOwnerUid)) {
throw new AdminServiceException("公会长ID不存在公会");
}
List<Integer> guilIds = guildByOwnerUid.stream().map(Guild::getId).collect(Collectors.toList());
if (guildId != null && !guilIds.contains(guildId)) {
throw new AdminServiceException("公会ID与公会ID所在公会不一致");
}
guildIdSet.addAll(guilIds);
}
Page<GuildMemberSovietAdminVo> guildSovietAdminVoPage =
guildExtraDiamondDayService.pageGuildMemberSovietAdminVo(new Page<>(pageNo, pageSize), guildIdSet, partitionId, uid, regionId, ebable, startDate, endDate);
return new PageResult<>(guildSovietAdminVoPage);
}
public PageResult<RoomSovietAdminVo> listRoomSovietAdminVo(Integer partitionId, Long erbanNo,Integer regionId, String cycleDate,
Integer pageNo, Integer pageSize) {
Long uid = null;
if (erbanNo != null) {
Users user = usersService.getUserByErbanNo(erbanNo);
if (user == null) {}
uid = user.getUid();
}
Page<RoomSovietAdminVo> guildSovietAdminVoPage =
roomExtraDiamondDayService.pageRoomSovietAdminVo(new Page<>(pageNo, pageSize), partitionId, uid, regionId, cycleDate);
return new PageResult<>(guildSovietAdminVoPage);
}
}

View File

@@ -1,6 +1,5 @@
package com.accompany.admin.service.lucky;
import cn.hippo4j.common.toolkit.CollectionUtil;
import com.accompany.admin.service.system.SysConfAdminService;
import com.accompany.admin.vo.BravoConfigAdminVo;
import com.accompany.admin.vo.luckybag.BravoPersonalStatVo;
@@ -69,7 +68,7 @@ public class BravoPoolAdminService {
@Autowired
private BravoUserMetaService userMetaService;
@Resource(name = "bizExecutor")
@Resource(name = "biz-executor")
private ThreadPoolExecutor bizExecutor;
private String minStartDate = "2025-03-20";
@@ -83,7 +82,7 @@ public class BravoPoolAdminService {
Date now = new Date();
List<BravoPool> poList = listPoolByType(type);
Map<Integer, BravoPool> poMap = !CollectionUtil.isEmpty(poList)?
Map<Integer, BravoPool> poMap = !CollectionUtils.isEmpty(poList)?
poList.stream().collect(Collectors.toMap(BravoPool::getId, po->po)):
new HashMap<>();

View File

@@ -1,6 +1,5 @@
package com.accompany.admin.service.lucky;
import cn.hippo4j.common.toolkit.CollectionUtil;
import com.accompany.admin.service.system.SysConfAdminService;
import com.accompany.admin.vo.Lucky24ConfigAdminVo;
import com.accompany.business.dto.lucky.Lucky24GiftConfig;
@@ -57,7 +56,7 @@ public class Lucky24PoolAdminService {
Date now = new Date();
List<Lucky24Pool> poList = listPoolByType(type);
Map<Integer, Lucky24Pool> poMap = !CollectionUtil.isEmpty(poList)?
Map<Integer, Lucky24Pool> poMap = !CollectionUtils.isEmpty(poList)?
poList.stream().collect(Collectors.toMap(Lucky24Pool::getId, po->po)):
new HashMap<>();
@@ -119,6 +118,9 @@ public class Lucky24PoolAdminService {
Map<Long, Users> blackUserMap = usersService.getUsersMapByUids(config.getBlackUidList());
vo.setBlackErbanNoList(blackUserMap.values().stream().map(Users::getErbanNo).collect(Collectors.toList()));
Map<Long, Users> adminFollowUserMap = usersService.getUsersMapByUids(config.getAdminFollowUidList());
vo.setAdminFollowErbanNoList(adminFollowUserMap.values().stream().map(Users::getErbanNo).collect(Collectors.toList()));
Map<Long, BigDecimal> erbanNoProductionRatioMap = new HashMap<>();
Map<Long, Users> whiteUserMap = usersService.getUsersMapByUids(new ArrayList<>(config.getWhiteUidProductionRatioMap().keySet()));
for (Long uid: whiteUserMap.keySet()){
@@ -177,6 +179,20 @@ public class Lucky24PoolAdminService {
config.setBlackUidList(uidList);
}
}
if (null != vo.getAdminFollowErbanNoList()){
if (CollectionUtils.isEmpty(vo.getAdminFollowErbanNoList())){
config.setAdminFollowUidList(Collections.emptyList());
} else {
List<Long> uidList = vo.getAdminFollowErbanNoList().stream().map(erbanNo->{
Users u = usersService.getUserByErbanNo(erbanNo);
if (null != u){
return u.getUid();
}
return null;
}).filter(Objects::nonNull).distinct().collect(Collectors.toList());
config.setAdminFollowUidList(uidList);
}
}
if (null != vo.getWhiteErbanNoProductionRatioMap()){
if (CollectionUtils.isEmpty(vo.getWhiteErbanNoProductionRatioMap())){
config.setWhiteUidProductionRatioMap(Collections.emptyMap());

View File

@@ -6,11 +6,13 @@ import com.accompany.admin.vo.luckybag.Lucky24PersonalStatVo;
import com.accompany.admin.vo.luckybag.Lucky24PlatformStatVo;
import com.accompany.admin.vo.luckybag.Lucky24RecordAdminVo;
import com.accompany.business.constant.Lucky24PoolTypeEnum;
import com.accompany.business.dto.lucky.Lucky24GiftConfig;
import com.accompany.business.model.Gift;
import com.accompany.business.model.lucky.Lucky24Pool;
import com.accompany.business.mybatismapper.lucky.Lucky24PoolMapper;
import com.accompany.business.mybatismapper.lucky.Lucky24StatMapper;
import com.accompany.business.service.gift.GiftService;
import com.accompany.business.service.gift.Lucky24GiftSendService;
import com.accompany.business.service.user.UsersService;
import com.accompany.common.result.PageResult;
import com.accompany.common.status.BusiStatus;
@@ -62,7 +64,7 @@ public class Lucky24RecordAdminService {
@Autowired
private Lucky24RecordMapper recordMapper;
@Resource(name = "bizExecutor")
@Resource(name = "biz-executor")
private ThreadPoolExecutor bizExecutor;
private String minStartDate = "2024-09-20";
@@ -70,6 +72,8 @@ public class Lucky24RecordAdminService {
private Lucky24PoolMapper poolMapper;
@Autowired
private GiftService giftService;
@Autowired
private Lucky24GiftSendService lucky24GiftSendService;
private final Map<String, Function<Lucky24PersonalStat, Object>> fieldExtractors = Map.of(
"totalInput", Lucky24PersonalStat::getTotalInput,
@@ -108,13 +112,19 @@ public class Lucky24RecordAdminService {
Date startTime = DateTimeUtil.getBeginTimeOfDay(DateTimeUtil.convertStrToDate(endDate, DateTimeUtil.DEFAULT_DATE_PATTERN));
ZonedDateTime zonedStartTime = startTime.toInstant().atZone(ZoneId.systemDefault());
Date systemStartTime = Date.from(zonedStartTime.withZoneSameLocal(ZoneId.of(partitionInfo.getZoneId())).toInstant());
String zoneDateTableName = DateTimeUtil.convertDate(systemStartTime, DateTimeUtil.DEFAULT_DATE_PATTERN_);
Date endTime = DateTimeUtil.getEndTimeOfDay(DateTimeUtil.convertStrToDate(endDate, DateTimeUtil.DEFAULT_DATE_PATTERN));
ZonedDateTime zonedEndTime = endTime.toInstant().atZone(ZoneId.systemDefault());
Date systemEndTime = Date.from(zonedEndTime.withZoneSameLocal(ZoneId.of(partitionInfo.getZoneId())).toInstant());
String systemDateTableName = DateTimeUtil.convertDate(systemEndTime, DateTimeUtil.DEFAULT_DATE_PATTERN_);
if (zoneDateTableName.equals(systemDateTableName)){
systemDateTableName = null;
}
List<Lucky24PlatformStat> list = null == poolType?
recordMapper.listPlatform(endDate, partitionId, poolTypeList, systemStartTime, systemEndTime):
recordMapper.listPlatformByPoolType(endDate, partitionId, poolTypeList, systemStartTime, systemEndTime);
recordMapper.listPlatformManual(endDate, partitionId, poolTypeList, systemStartTime, systemEndTime, zoneDateTableName, systemDateTableName):
recordMapper.listPlatformByPoolTypeManual(endDate, partitionId, poolTypeList, systemStartTime, systemEndTime, zoneDateTableName, systemDateTableName);
for (Lucky24PlatformStat stat: list) {
statMap.put(stat.getDate(), stat);
}
@@ -159,25 +169,39 @@ public class Lucky24RecordAdminService {
}
@SneakyThrows
public Lucky24PersonalStatVo getPersonal(Integer partitionId, Long erbanNo, String date, String userRechargeLevel, Integer poolType,
public Lucky24PersonalStatVo getPersonal(Integer partitionId, List<Long> followUidList, Long erbanNo, String date, String userRechargeLevel, Integer poolType,
String sortCol, String sortOrder,
int pageNo, int pageSize) {
Page<Lucky24PersonalStat> page = new Page<>(pageNo, pageSize);
Long uid = null;
if (null != erbanNo){
List<Long> uidList = new ArrayList<>();
if (!CollectionUtils.isEmpty(followUidList)){
List<Users> followUsers = usersService.listUsersFromDbInUids(followUidList);
List<Long> partitionFollowUidList = followUsers.stream().filter(u->u.getPartitionId().equals(partitionId)).map(Users::getUid).toList();
if (CollectionUtils.isEmpty(partitionFollowUidList)){
return new Lucky24PersonalStatVo(new PageResult<>(page));
}
uidList.addAll(followUsers.stream().filter(u->u.getPartitionId().equals(partitionId)).map(Users::getUid).toList());
} else if (null != erbanNo){
Users u = usersService.getUserByErbanNo(erbanNo);
if (null == u || !u.getPartitionId().equals(partitionId)){
return new Lucky24PersonalStatVo(new PageResult<>(page));
}
uid = u.getUid();
uidList.add(u.getUid());
}
PartitionInfo partitionInfo = partitionInfoService.getById(partitionId);
String zonedDateStr = DateTimeUtil.getZonedTodayStr(partitionInfo.getZoneId());
if (StringUtils.hasText(date)){
List<Lucky24PersonalStat> list = zonedDateStr.equals(date)? listPersonal(partitionId, partitionInfo.getZoneId(), uid, date, userRechargeLevel, poolType):
statMapper.listPersonalStat(partitionId, uid, userRechargeLevel, poolType, date, date);
List<Lucky24PersonalStat> list = zonedDateStr.equals(date)? listPersonal(partitionId, partitionInfo.getZoneId(), uidList, date, userRechargeLevel, poolType):
statMapper.listPersonalStat(partitionId, uidList, userRechargeLevel, poolType, date, date);
if (CollectionUtils.isEmpty(list)) {
return new Lucky24PersonalStatVo(new PageResult<>(page));
@@ -212,7 +236,9 @@ public class Lucky24RecordAdminService {
}
// 如果列表为空或起始索引超出范围,则创建空的子列表
List<Lucky24PersonalStat> subList = (list.isEmpty() || startIndex >= list.size())
List<Lucky24PersonalStat> subList = pageNo <= 0 || pageSize <= 0?
list:
(list.isEmpty() || startIndex >= list.size())
? Collections.emptyList()
: list.subList(startIndex, endIndex);
@@ -220,7 +246,8 @@ public class Lucky24RecordAdminService {
return new Lucky24PersonalStatVo(totalInput, totalOutput, totalProductionRatio, new PageResult<>(page));
}
List<Long> uidList = subList.stream().map(Lucky24PersonalStat::getUid).collect(Collectors.toList());
uidList = subList.stream().map(Lucky24PersonalStat::getUid).collect(Collectors.toList());
Map<Long, Users> usersMap = usersService.getUsersMapByUids(uidList);
Map<Long, String> userRechargeLevelMap = userRechargeLevelService.mapLevelByUid(uidList);
for (Lucky24PersonalStat stat: subList) {
@@ -257,10 +284,10 @@ public class Lucky24RecordAdminService {
CountDownLatch cdl = new CountDownLatch(2);
Long finalUid = uid;
List<Long> finalUidList = uidList;
bizExecutor.execute(()->{
try {
List<Lucky24PersonalStat> list = listPersonal(partitionId, partitionInfo.getZoneId(), finalUid, zonedDateStr, userRechargeLevel, poolType);
List<Lucky24PersonalStat> list = listPersonal(partitionId, partitionInfo.getZoneId(), finalUidList, zonedDateStr, userRechargeLevel, poolType);
for (Lucky24PersonalStat stat: list) {
statMap.put(stat.getDate(), stat);
@@ -282,7 +309,7 @@ public class Lucky24RecordAdminService {
try {
String historyStartDate = dateStrList.get(0);
String historyEndDate = dateStrList.get(dateStrList.size() - 1);
List<Lucky24PersonalStat> statList = statMapper.listPersonalStat(partitionId, finalUid, userRechargeLevel, poolType, historyStartDate, historyEndDate);
List<Lucky24PersonalStat> statList = statMapper.listPersonalStat(partitionId, finalUidList, userRechargeLevel, poolType, historyStartDate, historyEndDate);
if (!CollectionUtils.isEmpty(statList)) {
for (Lucky24PersonalStat stat: statList) {
statMap.put(stat.getDate(), stat);
@@ -312,10 +339,11 @@ public class Lucky24RecordAdminService {
dateStrList.sort(Comparator.reverseOrder());
// 按大到小排序
int startIndex = (pageNo -1) * pageSize;
int endIndex = Math.min(startIndex + pageSize, dateStrList.size());
int startIndex = pageNo <= 0 || pageSize <= 0? 0: (pageNo -1) * pageSize;
int endIndex = pageNo <= 0 || pageSize <= 0? dateStrList.size(): Math.min(startIndex + pageSize, dateStrList.size());
page.setTotal(dateStrList.size());
Long finalUid = uid;
List<String> subDateStrList = dateStrList.subList(startIndex, endIndex);
page.setRecords(subDateStrList.parallelStream().map(dateStr->{
Lucky24PersonalStat stat = statMap.get(dateStr);
@@ -331,7 +359,22 @@ public class Lucky24RecordAdminService {
return new Lucky24PersonalStatVo(totalInput, totalOutput, totalProductionRatio, new PageResult<>(page));
}
private List<Lucky24PersonalStat> listPersonal(int partitionId, String zonedId, Long uid, String date, String userRechargeLevel, Integer poolType) {
@SneakyThrows
public Lucky24PersonalStatVo getFollowUserPersonal(Integer partitionId, String date, String userRechargeLevel, Integer poolType,
String sortCol, String sortOrder,
int pageNo, int pageSize) {
Lucky24GiftConfig config = lucky24GiftSendService.getConfig();
List<Long> followUidList = config.getAdminFollowUidList();
if (CollectionUtils.isEmpty(followUidList)){
return new Lucky24PersonalStatVo(new PageResult<>(new Page<>(pageNo, pageSize)));
}
List<Long> uidList = followUidList.stream().sorted().toList();
return getPersonal(partitionId, uidList, null, date, userRechargeLevel, poolType, sortCol, sortOrder, pageNo, pageSize);
}
private List<Lucky24PersonalStat> listPersonal(int partitionId, String zonedId, List<Long> uidList, String date, String userRechargeLevel, Integer poolType) {
List<Integer> poolTypeList = null == poolType ?
Arrays.stream(Lucky24PoolTypeEnum.values()).map(Lucky24PoolTypeEnum::getType).sorted().toList(): Collections.singletonList(poolType);
@@ -343,9 +386,10 @@ public class Lucky24RecordAdminService {
Date endTime = DateTimeUtil.getEndTimeOfDay(DateTimeUtil.convertStrToDate(date, DateTimeUtil.DEFAULT_DATE_PATTERN));
ZonedDateTime zonedEndTime = endTime.toInstant().atZone(ZoneId.systemDefault());
Date systemEndTime = Date.from(zonedEndTime.withZoneSameLocal(zoneId).toInstant());
return null == poolType?
recordMapper.listPersonal(date, partitionId, poolTypeList, systemStartTime, systemEndTime, uid, userRechargeLevel):
recordMapper.listPersonalByPoolType(date, partitionId, poolTypeList, systemStartTime, systemEndTime, uid, userRechargeLevel);
recordMapper.listPersonal(date, partitionId, poolTypeList, systemStartTime, systemEndTime, uidList, userRechargeLevel):
recordMapper.listPersonalByPoolType(date, partitionId, poolTypeList, systemStartTime, systemEndTime, uidList, userRechargeLevel);
}
public Page<Lucky24RecordAdminVo> pageRecord(Long uid, String date, Integer poolType, int pageNo, int pageSize) {
@@ -457,11 +501,13 @@ public class Lucky24RecordAdminService {
Long uid = u.getUid();
String userRechargeLevel = userRechargeLevelService.getLevelByUid(uid);
List<Long> uidList = Collections.singletonList(uid);
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(u.getPartitionId());
String zonedDateStr = DateTimeUtil.getZonedTodayStr(partitionEnum.getZoneId());
if (startDate.equals(endDate)){
List<Lucky24PersonalStat> list = zonedDateStr.equals(endDate)? listPersonal(partitionEnum.getId(), partitionEnum.getZoneId(), uid, zonedDateStr, null, null):
statMapper.listPersonalStat(partitionEnum.getId(), uid, null, null, startDate, endDate);
List<Lucky24PersonalStat> list = zonedDateStr.equals(endDate)? listPersonal(partitionEnum.getId(), partitionEnum.getZoneId(), uidList, zonedDateStr, null, null):
statMapper.listPersonalStat(partitionEnum.getId(), uidList, null, null, startDate, endDate);
if (CollectionUtils.isEmpty(list)) {
return Collections.emptyList();
@@ -478,19 +524,11 @@ public class Lucky24RecordAdminService {
}
if (!endDate.equals(zonedDateStr)){
List<Lucky24PersonalStat> statList = statMapper.listPersonalStat(partitionEnum.getId(), uid, null, null, startDate, endDate);
List<Lucky24PersonalStat> statList = statMapper.listPersonalStat(partitionEnum.getId(), uidList, null, null, startDate, endDate);
if (CollectionUtils.isEmpty(statList)){
return Collections.emptyList();
}
// List<Lucky24OperatorPersonalStatVo> voList = new ArrayList<>(statList.stream().map(stat -> {
// BigDecimal receiverReward = BigDecimal.valueOf(stat.getTotalInput()).multiply(receiverRewardRatio);
// BigDecimal production = BigDecimal.valueOf(stat.getTotalInput()).multiply(inputRatio).subtract(BigDecimal.valueOf(stat.getTotalInput()));
// BigDecimal productionRatio = stat.getTotalOutput() > 0L ?(receiverReward.add(BigDecimal.valueOf(stat.getTotalInput())))
// .divide(BigDecimal.valueOf(stat.getTotalOutput()), 4, RoundingMode.HALF_UP): BigDecimal.ZERO;
// return new Lucky24OperatorPersonalStatVo(stat.getDate(), partitionEnum.getId(), uid, erbanNo, userRechargeLevel, stat.getTotalInput(), stat.getTotalOutput(), receiverReward.longValue(), production, productionRatio);
// }).sorted(Comparator.comparing(Lucky24OperatorPersonalStatVo::getDate).reversed()).toList());
long totalInput = statList.stream().mapToLong(Lucky24PersonalStat::getTotalInput).sum();
long totalOutput = statList.stream().mapToLong(Lucky24PersonalStat::getTotalOutput).sum();
BigDecimal receiverReward = BigDecimal.valueOf(totalInput).multiply(receiverRewardRatio);
@@ -510,7 +548,7 @@ public class Lucky24RecordAdminService {
bizExecutor.execute(()->{
try {
List<Lucky24PersonalStat> list = listPersonal(partitionEnum.getId(), partitionEnum.getZoneId(), uid, zonedDateStr, null, null);
List<Lucky24PersonalStat> list = listPersonal(partitionEnum.getId(), partitionEnum.getZoneId(), uidList, zonedDateStr, null, null);
for (Lucky24PersonalStat stat: list) {
statMap.put(stat.getDate(), stat);
}
@@ -525,7 +563,7 @@ public class Lucky24RecordAdminService {
try {
String historyStartDate = dateStrList.get(0);
String historyEndDate = dateStrList.get(dateStrList.size() - 1);
List<Lucky24PersonalStat> statList = statMapper.listPersonalStat(partitionEnum.getId(), uid, null, null, historyStartDate, historyEndDate);
List<Lucky24PersonalStat> statList = statMapper.listPersonalStat(partitionEnum.getId(), uidList, null, null, historyStartDate, historyEndDate);
if (CollectionUtils.isEmpty(statList)){
return;
}
@@ -543,20 +581,6 @@ public class Lucky24RecordAdminService {
dateStrList.add(endDate);
// List<Lucky24OperatorPersonalStatVo> voList = new ArrayList<>(dateStrList.stream().map(dateStr -> {
// Lucky24PersonalStat stat = statMap.get(dateStr);
// if (null == stat){
// return new Lucky24OperatorPersonalStatVo(dateStr, partitionEnum.getId(), uid, erbanNo, userRechargeLevel,
// BigDecimal.ZERO.longValue(), BigDecimal.ZERO.longValue(), BigDecimal.ZERO.longValue(), BigDecimal.ZERO, BigDecimal.ZERO);
// }
//
// BigDecimal receiverReward = BigDecimal.valueOf(stat.getTotalInput()).multiply(receiverRewardRatio);
// BigDecimal production = BigDecimal.valueOf(stat.getTotalInput()).multiply(inputRatio).subtract(BigDecimal.valueOf(stat.getTotalInput()));
// BigDecimal productionRatio = stat.getTotalOutput() > 0L?
// (receiverReward.add(BigDecimal.valueOf(stat.getTotalInput()))).divide(BigDecimal.valueOf(stat.getTotalOutput()), 4, RoundingMode.HALF_UP): BigDecimal.ZERO;
// return new Lucky24OperatorPersonalStatVo(stat.getDate(), partitionEnum.getId(), uid, erbanNo, userRechargeLevel, stat.getTotalInput(), stat.getTotalOutput(), receiverReward.longValue(), production, productionRatio);
// }).sorted(Comparator.comparing(Lucky24OperatorPersonalStatVo::getDate).reversed()).toList());
long totalInput = dateStrList.stream().filter(statMap::containsKey).map(statMap::get).mapToLong(Lucky24PersonalStat::getTotalInput).sum();
long totalOutput = dateStrList.stream().filter(statMap::containsKey).map(statMap::get).mapToLong(Lucky24PersonalStat::getTotalOutput).sum();
BigDecimal receiverReward = BigDecimal.valueOf(totalInput).multiply(receiverRewardRatio);

View File

@@ -1,6 +1,6 @@
package com.accompany.admin.service.lucky;
import cn.hippo4j.common.toolkit.CollectionUtil;
import org.springframework.util.CollectionUtils;
import com.accompany.admin.service.system.SysConfAdminService;
import com.accompany.admin.vo.Lucky25ConfigAdminVo;
import com.accompany.business.dto.lucky.Lucky25GiftConfig;
@@ -58,7 +58,7 @@ public class Lucky25PoolAdminService {
Date now = new Date();
List<Lucky25Pool> poList = listPoolByType(type);
Map<Integer, Lucky25Pool> poMap = !CollectionUtil.isEmpty(poList)?
Map<Integer, Lucky25Pool> poMap = !CollectionUtils.isEmpty(poList)?
poList.stream().collect(Collectors.toMap(Lucky25Pool::getId, po->po)):
new HashMap<>();

View File

@@ -53,7 +53,7 @@ public class Lucky25RecordAdminService {
@Autowired
private Lucky25RecordMapper recordMapper;
@Resource(name = "bizExecutor")
@Resource(name = "biz-executor")
private ThreadPoolExecutor bizExecutor;
private String minStartDate = "2025-05-04";

View File

@@ -0,0 +1,107 @@
package com.accompany.admin.service.miniGame;
import com.accompany.admin.vo.miniGame.MiniGameForSudAdminDetailVo;
import com.accompany.admin.vo.miniGame.MiniGameForSudAdminStatsVo;
import com.accompany.business.model.miniGame.MiniGame;
import com.accompany.business.model.miniGame.MiniGameRound;
import com.accompany.admin.mapper.miniGame.MiniGameForSudAdminMapper;
import com.accompany.business.service.miniGame.MiniGameService;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.util.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service
public class MiniGameForSudAdminService extends ServiceImpl<MiniGameForSudAdminMapper, MiniGameRound> {
@Autowired
private MiniGameForSudAdminMapper miniGameForSudAdminMapper;
@Autowired
private MiniGameService miniGameService;
/**
* 获取游戏时长统计列表
* @param gameId 游戏ID
* @param month 月份 (格式: yyyy-MM)
* @return 统计列表
*/
public List<MiniGameForSudAdminStatsVo> listStat(String gameId, String month) {
// 获取所有游戏信息
List<MiniGame> miniGameList = miniGameService.miniGameAllList(null);
if (CollectionUtils.isEmpty(miniGameList)){
return Collections.emptyList();
}
if (!StringUtils.isBlank(gameId)){
miniGameList = miniGameList.stream().filter(game -> game.getMgIdStr().equals(gameId)).toList();
}
if (CollectionUtils.isEmpty(miniGameList)){
return Collections.emptyList();
}
// 计算查询时间范围
Date monthDateTime = DateTimeUtil.convertStrToDate(month, DateTimeUtil.DEFAULT_DATE_PATTERN_YEAR_MONTH);
long startTime = DateTimeUtil.getBeginTimeOfMonth(monthDateTime).getTime() / 1000;
long endTime = DateTimeUtil.getEndTimeOfMonth(monthDateTime).getTime() / 1000;
// 查询统计数据
List<MiniGameForSudAdminStatsVo> statList = miniGameForSudAdminMapper.statGameDurationByMonth(gameId, startTime, endTime);
if (CollectionUtils.isEmpty(statList)){
return Collections.emptyList();
}
Map<String, MiniGameForSudAdminStatsVo> statMap = statList.stream().collect(Collectors.toMap(MiniGameForSudAdminStatsVo::getGameId, vo -> vo));
return miniGameList.stream().map(game -> {
MiniGameForSudAdminStatsVo vo = statMap.get(game.getMgIdStr());
if (vo == null){
vo = new MiniGameForSudAdminStatsVo();
vo.setGameId(game.getMgIdStr());
vo.setGameName(game.getName());
vo.setTotalDuration(0L);
vo.setEnDuration(0L);
vo.setArDuration(0L);
vo.setZhDuration(0L);
vo.setTrDuration(0L);
vo.setEn2Duration(0L);
}
vo.setGameName(game.getName());
vo.setStatMonth(month);
return vo;
}).toList();
}
/**
* 获取游戏时长明细列表
* @param gameId 游戏ID
* @param month 月份 (格式: yyyy-MM)
* @param page 页码
* @param size 每页大小
* @return 明细列表
*/
public Page<MiniGameForSudAdminDetailVo> pageDetail(String gameId, String month, Integer page, Integer size) {
Page<MiniGameForSudAdminDetailVo> voPage = new Page<>(page, size);
// 计算查询时间范围
Date monthDateTime = DateTimeUtil.convertStrToDate(month, DateTimeUtil.DEFAULT_DATE_PATTERN_YEAR_MONTH);
long startTime = DateTimeUtil.getBeginTimeOfMonth(monthDateTime).getTime() / 1000;
long endTime = DateTimeUtil.getEndTimeOfMonth(monthDateTime).getTime() / 1000;
return miniGameForSudAdminMapper.pageGameRoundDetail(voPage, gameId, startTime, endTime);
}
}

View File

@@ -109,7 +109,7 @@ public class PackInfoAdminService {
private PackAwardVo coverAwardVo(ActivityH5LevelAward award, Map<Long, PackItem> awardItemMap) {
PackAwardVo awardVo = new PackAwardVo();
awardVo.setAwardId(award.getId());
RewardVo rewardVo = activityH5LevelAwardService.coverRewardByType(award.getAwardType(), award.getAwardId().intValue());
RewardVo rewardVo = activityH5LevelAwardService.coverAdminRewardByType(award.getAwardType(), award.getAwardId().intValue());
if (rewardVo != null) {
awardVo.setAwardName(rewardVo.getName());
awardVo.setAwardPic(rewardVo.getPic());

View File

@@ -19,12 +19,15 @@ public class PersonalCenterAdminService {
@Autowired
private PersonalCenterMapper personalCenterMapper;
public IPage getList(Integer pageNum, Integer pageSize, Integer centerId){
public IPage getList(Integer pageNum, Integer pageSize, Integer centerId, Integer partitionId){
Page page = new Page<>(pageNum, pageSize);
QueryWrapper<PersonalCenter> wrapper = new QueryWrapper<>();
if(centerId != null){
wrapper.lambda().eq(PersonalCenter :: getCenterId, centerId);
}
if (partitionId != null && partitionId != 0) {
wrapper.lambda().eq(PersonalCenter :: getPartitionId, partitionId);
}
// 我的房间不可更改
wrapper.lambda().ne(PersonalCenter::getCenterId,1).orderByAsc(PersonalCenter :: getCenterSeq);
return personalCenterMapper.selectPage(page,wrapper);

View File

@@ -1,52 +0,0 @@
package com.accompany.admin.service.push;
import com.accompany.admin.model.AdminUser;
import com.accompany.admin.service.system.AdminUserService;
import com.accompany.common.config.WebSecurityConfig;
import com.accompany.common.constant.AppEnum;
import com.accompany.common.push.MarkdownMessage;
import com.accompany.common.utils.EnvComponent;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.model.Users;
import com.accompany.core.service.message.MessageRobotPushService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class EnterpriseWeChatPushAdminService extends MessageRobotPushService {
@Autowired
private AdminUserService adminUserService;
@Autowired
private WebSecurityConfig webSecurityConfig;
@Autowired
private EnvComponent envComponent;
public void pushMessage(Map<Long, Users> usersMap, Integer partitionId, String title, int adminId, BigDecimal amount, String remark) {
if (envComponent.getDevOrNativeEnv()) {
return;
}
String userDescList = usersMap.values().stream().map(u-> String.format("%s(%d)", u.getNick(), u.getErbanNo())).collect(Collectors.joining(","));
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
AdminUser adminUser = adminUserService.getAdminUserById(adminId);
MarkdownMessage msg = new MarkdownMessage();
msg.addTitle(MarkdownMessage.getHeaderText(3, adminUser.getUsername() + title));
msg.add(MarkdownMessage.getReferenceText(title));
msg.add(MarkdownMessage.getReferenceText("APP应用 ") + AppEnum.getCurApp().getValue());
msg.add(MarkdownMessage.getReferenceText("赠送数量: " + amount.toPlainString()));
msg.add(MarkdownMessage.getReferenceText("赠送分区: " + partitionEnum.getDesc()));
msg.add(MarkdownMessage.getReferenceText("赠送人数: " + usersMap.size()));
msg.add(MarkdownMessage.getReferenceText("赠送用户: " + userDescList));
msg.add(MarkdownMessage.getReferenceText("操作者: " + adminUser.getUsername()));
msg.add(MarkdownMessage.getReferenceText("备注: " + remark));
// 发送消息
this.pushMessageByKey(webSecurityConfig.getOfficialDingPushKey(), msg, false);
}
}

View File

@@ -42,7 +42,7 @@ public class RechargeRiskUserAdminService {
private AccountBlockService accountBlockService;
@Autowired
private RechargeRiskUserAdminMapper rechargeRiskUserAdminMapper;
@Resource(name = "bizExecutor")
@Resource(name = "biz-executor")
private ThreadPoolExecutor bizExecutor;
public Page<RechargeRiskUserAdminVo> page(Long erbanNo, PageReq req) {

View File

@@ -239,36 +239,40 @@ public class RechargeUserAdminServiceImpl implements RechargeUserAdminService {
}
private long saveRechargeUserRegion(List<RechargeUserRegionAdminDto> userRegions, long type, Long uid, Date now) {
if (CollectionUtil.isNotEmpty(userRegions)) {
log.info("userRegions : {}", JSONObject.toJSON(userRegions));
for (RechargeUserRegionAdminDto userRegion : userRegions) {
String name = userRegion.getName();
Long userRegionType = userRegion.getType();
Boolean isCheck = userRegion.getIsCheck();
Integer seq = userRegion.getSeq();
if (isCheck) {
type |= userRegionType;
RechargeUserRegion rechargeUserRegion = null;
List<RechargeUserRegion> rechargeUserRegions = rechargeUserRegionService.list(Wrappers.<RechargeUserRegion>lambdaQuery()
.eq(RechargeUserRegion::getUid, uid)
.eq(RechargeUserRegion::getType, userRegionType));
if (CollectionUtil.isNotEmpty(rechargeUserRegions)) {
rechargeUserRegion = rechargeUserRegions.get(0);
} else {
rechargeUserRegion = new RechargeUserRegion();
rechargeUserRegion.setUid(uid);
rechargeUserRegion.setType(userRegionType);
rechargeUserRegion.setCreateTime(now);
}
rechargeUserRegion.setName(name);
rechargeUserRegion.setSeq(seq);
rechargeUserRegion.setUpdateTime(now);
rechargeUserRegionService.saveOrUpdate(rechargeUserRegion);
if (CollectionUtil.isEmpty(userRegions)) {
return type;
}
log.info("userRegions : {}", JSONObject.toJSON(userRegions));
for (RechargeUserRegionAdminDto userRegion : userRegions) {
String name = userRegion.getName();
Long userRegionType = userRegion.getType();
Boolean isCheck = userRegion.getIsCheck();
Integer seq = userRegion.getSeq();
if (isCheck && userRegionType != null && userRegionType == 0) {
continue;
}
if (isCheck) {
type |= userRegionType;
RechargeUserRegion rechargeUserRegion = null;
List<RechargeUserRegion> rechargeUserRegions = rechargeUserRegionService.list(Wrappers.<RechargeUserRegion>lambdaQuery()
.eq(RechargeUserRegion::getUid, uid)
.eq(RechargeUserRegion::getType, userRegionType));
if (CollectionUtil.isNotEmpty(rechargeUserRegions)) {
rechargeUserRegion = rechargeUserRegions.get(0);
} else {
rechargeUserRegionService.remove(Wrappers.<RechargeUserRegion>lambdaQuery()
.eq(RechargeUserRegion::getUid, uid)
.eq(RechargeUserRegion::getType, userRegionType));
rechargeUserRegion = new RechargeUserRegion();
rechargeUserRegion.setUid(uid);
rechargeUserRegion.setType(userRegionType);
rechargeUserRegion.setCreateTime(now);
}
rechargeUserRegion.setName(name);
rechargeUserRegion.setSeq(seq);
rechargeUserRegion.setUpdateTime(now);
rechargeUserRegionService.saveOrUpdate(rechargeUserRegion);
} else {
rechargeUserRegionService.remove(Wrappers.<RechargeUserRegion>lambdaQuery()
.eq(RechargeUserRegion::getUid, uid)
.eq(RechargeUserRegion::getType, userRegionType));
}
}
return type;

View File

@@ -1,12 +1,10 @@
package com.accompany.admin.service.record;
import cn.hutool.core.util.StrUtil;
import com.accompany.admin.common.AdminConstants;
import com.accompany.admin.mapper.OfficialGoldRecordMapper;
import com.accompany.admin.mapper.OfficialGoldRecordMapperExpand;
import com.accompany.admin.model.AdminUser;
import com.accompany.admin.model.OfficialGoldRecord;
import com.accompany.admin.service.push.EnterpriseWeChatPushAdminService;
import com.accompany.admin.model.AdminUser;
import com.accompany.admin.service.system.AdminUserService;
import com.accompany.admin.vo.OfficialGoldAllRecordVo;
import com.accompany.admin.vo.OfficialGoldRecordVo;
@@ -15,30 +13,34 @@ import com.accompany.business.constant.guild.GuildUsdOperateTypeEnum;
import com.accompany.business.model.OfficialGoldBusType;
import com.accompany.business.model.UserPurse;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.service.WebConfigService;
import com.accompany.business.service.guild.GuildMemberService;
import com.accompany.business.service.guild.GuildUsdBillRecordService;
import com.accompany.business.service.purse.UserPurseService;
import com.accompany.business.service.record.BillRecordService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.charge.CommonRecharge4ActVo;
import com.accompany.common.config.WebSecurityConfig;
import com.accompany.common.constant.AppEnum;
import com.accompany.common.constant.Constant;
import com.accompany.common.push.MarkdownMessage;
import com.accompany.common.redis.RedisKey;
import com.accompany.common.result.BusiResult;
import com.accompany.common.result.PageResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.BlankUtil;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.common.utils.EnvComponent;
import com.accompany.common.utils.StringUtils;
import com.accompany.common.utils.UUIDUtil;
import com.accompany.core.enumeration.BillObjTypeEnum;
import com.accompany.core.enumeration.CurrencyEnum;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.Users;
import com.accompany.core.service.base.BaseService;
import com.accompany.core.service.common.JedisService;
import com.accompany.core.service.message.MessageRobotPushService;
import com.accompany.core.service.user.UsersBaseService;
import com.accompany.payment.constant.CurrencyTypeEnum;
import com.accompany.payment.event.ChargeSuccessEvent;
import com.accompany.payment.event.CommonRecharge4ActEvent;
import com.accompany.payment.mapper.ChargeRecordMapper;
@@ -53,14 +55,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
import static com.accompany.common.status.BusiStatus.NOT_ENOUGH_GUILD_USD;
@Service
public class OfficialGoldRecordService extends BaseService {
@@ -79,16 +79,8 @@ public class OfficialGoldRecordService extends BaseService {
@Autowired
private OfficialGoldRecordMapperExpand officialGoldRecordMapperExpand;
@Autowired
private WebConfigService webConfigService;
@Autowired
private AdminUserService adminUserService;
@Autowired
private JedisService jedisService;
@Autowired
private OfficialGoldBusTypeAdminService officialGoldBusTypeAdminService;
@Autowired
private EnterpriseWeChatPushAdminService enterpriseWeChatPushAdminService;
@Autowired
private ApplicationContext applicationContext;
@Autowired
private OfficialGoldRoleLimitService officialGoldRoleLimitService;
@@ -96,6 +88,14 @@ public class OfficialGoldRecordService extends BaseService {
private GuildMemberService guildMemberService;
@Autowired
private GuildUsdBillRecordService guildUsdBillRecordService;
@Autowired
private AdminUserService adminUserService;
@Autowired
private WebSecurityConfig webSecurityConfig;
@Autowired
private EnvComponent envComponent;
@Autowired
private MessageRobotPushService messageRobotPushService;
public List<Map<String, Object>> listType(int adminId){
boolean hasLimit = officialGoldRoleLimitService.hasLimit(adminId);
@@ -117,54 +117,179 @@ public class OfficialGoldRecordService extends BaseService {
* 后台赠送金币、萝卜
*
* @param ernos
* @param type
* @param typeEnum
* @param num
* @param adminId
* @param actualAmount
* @param remark
* @return
* @throws Exception
*/
@Transactional(rollbackFor = Exception.class)
public void handle(String ernos, OfficalSendTypeEnum type, BigDecimal num, int adminId,
BigDecimal actualAmount, String remark, Integer busType) throws Exception {
if (type == null) {
public void handle(String ernos, OfficalSendTypeEnum typeEnum, BigDecimal num, int adminId,
String remark, Integer busType) {
if (typeEnum == null) {
throw new AdminServiceException(BusiStatus.REQUEST_PARAM_ERROR);
}
if (!OfficalSendTypeEnum.OFFICAL_DIAMOND.equals(type) && officialGoldRoleLimitService.hasLimit(adminId)) {
if (!OfficalSendTypeEnum.OFFICAL_DIAMOND.equals(typeEnum) && officialGoldRoleLimitService.hasLimit(adminId)) {
throw new AdminServiceException(BusiStatus.PARAMETERILLEGAL);
}
switch (type){
case OFFICAL_GOLD:
giveGold(ernos, type.getValue(), num, adminId, remark, busType);
break;
case OFFICAL_DIAMOND:
case COMPANY_ACCOUNT_DIAMOND:
giveDiamond(ernos, type.getValue(), num, adminId, actualAmount, remark, busType);
break;
//case OFFICAL_RADISH:
// giveCrystal(ernos, type.getValue(), num, adminId, remark, busType);
// return BusiResult.success();
case OFFICAL_REDUCE_DIAMONDS:
reduceDiamondNum(ernos, type.getValue(), num, adminId, remark, busType);
break;
case OFFICAL_MINUS_GUILD_USD:
adjustUsd(ernos, type.getValue(), num, adminId, remark, busType, Boolean.FALSE);
break;
case OFFICAL_PLUS_GUILD_USD:
adjustUsd(ernos, type.getValue(), num, adminId, remark, busType, Boolean.TRUE);
break;
default:
throw new AdminServiceException(BusiStatus.REQUEST_PARAM_ERROR);
if (OfficalSendTypeEnum.OFFICAL_DIAMOND.equals(typeEnum)
&& officialGoldRoleLimitService.overLimit(adminId, num)){
throw new AdminServiceException("本月的金币打款已经封顶");
}
// 提取用户查询和分区检查逻辑到统一位置
List<String> erbanNos = Arrays.asList(ernos.trim().split("\n"));
Map<Long, Users> usersMap = erbanNos.parallelStream().map(Long::parseLong).distinct()
.map(erbanNo->{
Users u = usersService.getUserByErbanNo(erbanNo);
if (u == null) {
throw new AdminServiceException(BusiStatus.USERNOTEXISTS);
}
return u;
})
.collect(Collectors.toMap(Users::getErbanNo, u->u));
List<Integer> partitionIds = usersMap.values().stream().map(Users::getPartitionId).distinct().toList();
if (partitionIds.size() > 1){
throw new ServiceException(BusiStatus.PARTITION_ERROR, "分区不一致");
}
Integer partitionId = partitionIds.get(0);
BigDecimal actualAmount = num.divide(typeEnum.getCurrencyType().getExchangeRate(), 2 , RoundingMode.HALF_UP);
// 统一获取锁
String lockval = null;
try {
lockval = this.jedisLockService.lock(RedisKey.lock_official_gold_send.getKey(), 3000);
if (StringUtils.isEmpty(lockval)) {
throw new AdminServiceException(BusiStatus.SERVERBUSY);
}
// 统一发送微信提示消息
pushEnterpriseWeChatMessage(usersMap, partitionId, typeEnum.getDesc(), adminId, num, remark);
switch (typeEnum){
case OFFICAL_GOLD:
giveGold(usersMap, typeEnum, num, adminId, remark, busType, actualAmount);
break;
case OFFICAL_DIAMOND:
case COMPANY_ACCOUNT_DIAMOND:
giveDiamond(usersMap, typeEnum, num, adminId, remark, busType, actualAmount);
break;
case OFFICAL_REDUCE_DIAMONDS:
reduceDiamondNum(usersMap, typeEnum, num, adminId, remark, busType, actualAmount);
break;
case OFFICAL_MINUS_GUILD_USD:
adjustUsd(usersMap, typeEnum, num, adminId, remark, busType, Boolean.FALSE, actualAmount);
break;
case OFFICAL_PLUS_GUILD_USD:
adjustUsd(usersMap, typeEnum, num, adminId, remark, busType, Boolean.TRUE, actualAmount);
break;
case OFFICAL_PLUS_GUILD_CRYSTAL:
adjustGuildCrystal(usersMap, typeEnum, num, adminId, remark, busType, Boolean.TRUE, actualAmount);
break;
case OFFICAL_MINUS_GUILD_CRYSTAL:
adjustGuildCrystal(usersMap, typeEnum, num, adminId, remark, busType, Boolean.FALSE, actualAmount);
break;
case CLEAR_USER_GOLD:
clearUserGold(usersMap, num, adminId, actualAmount);
break;
default:
throw new AdminServiceException(BusiStatus.REQUEST_PARAM_ERROR);
}
} finally {
// 统一释放锁
if (StringUtils.isNotEmpty(lockval)) {
this.jedisLockService.unlock(RedisKey.lock_official_gold_send.getKey(), lockval);
}
}
}
/**
* 赠送钻石
*
* @param usersMap 用户映射
* @param type 赠送类型
* @param num 赠送数量
* @return
*/
public void giveDiamond(Map<Long, Users> usersMap, OfficalSendTypeEnum type, BigDecimal num, int adminId, String remark, Integer busType,
BigDecimal actualAmount) {
// AdminDict adminDict = adminDictService.getOneAdminDict("official_gold_limit_" + type, "limit_time");
// AdminDict adminDict2 = adminDictService.getOneAdminDict("official_gold_limit_" + type, "limit_count");
// int limitTime = Integer.valueOf(adminDict.getDictval());
// int limitCount = Integer.valueOf(adminDict2.getDictval());
// 分隔耳伴号,多个耳伴号用换行分隔
for (Users users : usersMap.values()) {
// if (!isCanGiveGold(users, type, num, limitTime, limitCount)) {
// busiResult.setCode(-1);
// busiResult.setMessage("兔兔号为" + erNo + "的用户被赠送的次数大于" + limitTime + "或者金币余额大于" + limitCount);
// return busiResult;
// }
// 增加官方赠送活动记录
long recordId = DefaultIdentifierGenerator.getInstance().nextId(null);
String recordIdStr = String.valueOf(recordId);
addGoldRecord(recordId, users, type.getValue(), Constant.WalletCurrencyType.diamonds, num, adminId, remark, busType, actualAmount);
BillObjTypeEnum billObjTypeEnum = Constant.OfficialType.chargeByCompanyAccount.byteValue() == type.getValue()? BillObjTypeEnum.CHARGE_BY_COMPANY_ACCOUNT: BillObjTypeEnum.OFFICIAL_GOLD_ADD;
UserPurse after = userPurseService.addDiamond(users.getUid(), num.doubleValue(), billObjTypeEnum,
(userPurse)-> billRecordService.insertGeneralBillRecord(users.getUid(), recordIdStr, billObjTypeEnum, num.doubleValue(), userPurse));
// 增加充值记录
if (Constant.OfficialType.chargeByCompanyAccount.byteValue() == type.getValue()) {
BigDecimal amount = actualAmount.multiply(Constant.HUNDRED);
String chargeRecordId = UUIDUtil.get();
addChargeRecord(chargeRecordId, users.getUid(), num.longValue(), amount.longValue());
this.applicationContext.publishEvent(new CommonRecharge4ActEvent(
CommonRecharge4ActVo.builder()
.uid(users.getUid())
.channel(Constant.ChargeChannel.company)
.chargeStatus(Constant.ChargeRecordStatus.finish)
.totalGoldNum(num.longValue())
.createTime(new Date()).build()));
}
try {
userPurseService.sendSysMsgByModifyGold(after);
} catch (Exception e) {
logger.error("sendSysMsgByModifyGold error, uid:" + users.getUid(), e);
}
logger.info("giveGold success, erpan_no: {}, type: {}, num: {}, recordId: {}", users.getErbanNo(), type.getValue(), num, recordId);
}
}
/**
* 赠送金币
*
* @param usersMap 用户映射
* @param num 赠送数量
* @return
*/
@Transactional(rollbackFor = Exception.class)
public void giveGold(Map<Long, Users> usersMap, OfficalSendTypeEnum typeEnum, BigDecimal num, int optId, String remark, Integer busType,
BigDecimal actualAmount) {
// 分隔耳伴号,多个耳伴号用换行分隔
for (Users users : usersMap.values()) {
Long recordId = DefaultIdentifierGenerator.getInstance().nextId(null);
// 增加官方赠送活动记录
addGoldRecord(recordId, users, typeEnum.getValue(), Constant.WalletCurrencyType.gold, num, optId, remark, busType, actualAmount);
// 更新账户钻石数量
userPurseService.addGold(users.getUid(), num.doubleValue(), BillObjTypeEnum.INTER_SEND_DIAMOND);
logger.info("giveGold success, erpan_no: {}, type: {}, num: {}, recordId: {}", users.getErbanNo(), typeEnum.getValue(), num, recordId);
}
}
/**
* 官方消钻
*
* @param ernos
* @param usersMap 用户映射
* @param type
* @param num
* @param optId
@@ -174,166 +299,19 @@ public class OfficialGoldRecordService extends BaseService {
* @throws Exception
*/
@Transactional(rollbackFor = Exception.class)
public void reduceDiamondNum(String ernos, byte type, BigDecimal num, int optId, String remark, Integer busType) {
Users user = usersBaseService.getUsersByErBanNo(Long.valueOf(ernos.trim()));
if (user == null) {
throw new AdminServiceException(BusiStatus.USERNOTEXISTS);
public void reduceDiamondNum(Map<Long, Users> usersMap, OfficalSendTypeEnum type, BigDecimal num, int optId, String remark, Integer busType, BigDecimal actualAmount) {
for (Users user : usersMap.values()) {
Long recordId = DefaultIdentifierGenerator.getInstance().nextId(null);
String recordIdStr = String.valueOf(recordId);
userPurseService.subDiamond(user.getUid(), num.doubleValue(), BillObjTypeEnum.OFFICIAL_GOLD_REDUCE,
(userPurse)-> billRecordService.insertGeneralBillRecord(user.getUid(), recordIdStr, BillObjTypeEnum.OFFICIAL_GOLD_REDUCE, num.doubleValue(), userPurse));
addGoldRecord(recordId, user, type.getValue(), Constant.WalletCurrencyType.diamonds, num, optId, remark, busType, actualAmount);
}
Long recordId = DefaultIdentifierGenerator.getInstance().nextId(null);
String recordIdStr = String.valueOf(recordId);
userPurseService.subDiamond(user.getUid(), num.doubleValue(), BillObjTypeEnum.OFFICIAL_GOLD_REDUCE,
(userPurse)-> billRecordService.insertGeneralBillRecord(user.getUid(), recordIdStr, BillObjTypeEnum.OFFICIAL_GOLD_REDUCE, num.doubleValue(), userPurse));
addGoldRecord(recordId, user, type, Constant.WalletCurrencyType.diamonds, num, optId, remark, busType, null);
}
/**
* 赠送钻石
*
* @param ernos 耳伴号,多个耳伴号用换行符分隔
* @param type 赠送类型
* @param num 赠送数量
* @return
*/
public void giveDiamond(String ernos, byte type, BigDecimal num, int adminId, BigDecimal actualAmount, String remark, Integer busType) {
String lockval = null;
try {
lockval = this.jedisLockService.lock(RedisKey.lock_official_gold_send.getKey(), 3000);
if (StringUtils.isEmpty(lockval)) {
throw new AdminServiceException(BusiStatus.SERVERBUSY);
}
OfficalSendTypeEnum typeEnum = OfficalSendTypeEnum.get(type);
if (OfficalSendTypeEnum.OFFICAL_DIAMOND.equals(typeEnum)
&& officialGoldRoleLimitService.overLimit(adminId, num)){
throw new AdminServiceException("本月的金币打款已经封顶");
}
// 根据配置,发送微信提示消息
List<String> erbanNos = Arrays.asList(ernos.trim().split("\n"));
Map<Long, Users> usersMap = erbanNos.parallelStream().map(Long::parseLong).distinct()
.map(erbanNo->{
Users u = usersService.getUserByErbanNo(erbanNo);
if (u == null) {
throw new AdminServiceException(BusiStatus.USERNOTEXISTS);
}
return u;
})
.collect(Collectors.toMap(Users::getErbanNo, u->u));
List<Integer> partitionIds = usersMap.values().stream().map(Users::getPartitionId).distinct().toList();
if (partitionIds.size() > 1){
throw new ServiceException(BusiStatus.PARTITION_ERROR, "分区不一致");
}
Integer partitionId = partitionIds.get(0);
enterpriseWeChatPushAdminService.pushMessage(usersMap, partitionId, typeEnum.getDesc(), adminId, num, remark);
// officialGoldSendMsg(ernos,num,optId,remark);
// AdminDict adminDict = adminDictService.getOneAdminDict("official_gold_limit_" + type, "limit_time");
// AdminDict adminDict2 = adminDictService.getOneAdminDict("official_gold_limit_" + type, "limit_count");
// int limitTime = Integer.valueOf(adminDict.getDictval());
// int limitCount = Integer.valueOf(adminDict2.getDictval());
// 分隔耳伴号,多个耳伴号用换行分隔
for (Users users : usersMap.values()) {
// if (!isCanGiveGold(users, type, num, limitTime, limitCount)) {
// busiResult.setCode(-1);
// busiResult.setMessage("兔兔号为" + erNo + "的用户被赠送的次数大于" + limitTime + "或者金币余额大于" + limitCount);
// return busiResult;
// }
// 增加官方赠送活动记录
long recordId = DefaultIdentifierGenerator.getInstance().nextId(null);
String recordIdStr = String.valueOf(recordId);
addGoldRecord(recordId, users, type, Constant.WalletCurrencyType.diamonds, num, adminId, remark, busType, actualAmount);
BillObjTypeEnum billObjTypeEnum = Constant.OfficialType.chargeByCompanyAccount.byteValue() == type? BillObjTypeEnum.CHARGE_BY_COMPANY_ACCOUNT: BillObjTypeEnum.OFFICIAL_GOLD_ADD;
UserPurse after = userPurseService.addDiamond(users.getUid(), num.doubleValue(), billObjTypeEnum,
(userPurse)-> billRecordService.insertGeneralBillRecord(users.getUid(), recordIdStr, billObjTypeEnum, num.doubleValue(), userPurse));
// 增加充值记录
if (Constant.OfficialType.chargeByCompanyAccount.byteValue() == type) {
BigDecimal amount = actualAmount.multiply(Constant.HUNDRED);
String chargeRecordId = UUIDUtil.get();
addChargeRecord(chargeRecordId, users.getUid(), num.longValue(), amount.longValue());
this.applicationContext.publishEvent(new CommonRecharge4ActEvent(
CommonRecharge4ActVo.builder()
.uid(users.getUid())
.channel(Constant.ChargeChannel.company)
.chargeStatus(Constant.ChargeRecordStatus.finish)
.totalGoldNum(num.longValue())
.createTime(new Date()).build()));
}
try {
userPurseService.sendSysMsgByModifyGold(after);
} catch (Exception e) {
logger.error("sendSysMsgByModifyGold error, uid:" + users.getUid(), e);
}
logger.info("giveGold success, erpan_no: {}, type: {}, num: {}, recordId: {}", users.getErbanNo(), type, num, recordId);
}
} finally {
this.jedisLockService.unlock(RedisKey.lock_official_gold_send.getKey(), lockval);
}
}
/**
* 赠送钻石
*
* @param ernos 耳伴号,多个耳伴号用换行符分隔
* @param type 赠送类型
* @param num 赠送数量
* @return
*/
@Transactional(rollbackFor = Exception.class)
public void giveGold(String ernos, byte type, BigDecimal num, int optId, String remark, Integer busType) {
String lockval = null;
try {
lockval = this.jedisLockService.lock(RedisKey.lock_official_gold_send.getKey(), 3000);
if (StringUtils.isEmpty(lockval)) {
throw new AdminServiceException(BusiStatus.SERVERBUSY);
}
// 根据配置,发送微信提示消息
List<String> erbanNos = Arrays.asList(ernos.trim().split("\n"));
Map<Long, Users> usersMap = erbanNos.parallelStream().map(Long::parseLong).distinct()
.map(erbanNo->{
Users u = usersService.getUserByErbanNo(erbanNo);
if (u == null) {
throw new AdminServiceException(BusiStatus.USERNOTEXISTS);
}
return u;
})
.collect(Collectors.toMap(Users::getErbanNo, u->u));
List<Integer> partitionIds = usersMap.values().stream().map(Users::getPartitionId).distinct().collect(Collectors.toList());
if (partitionIds.size() > 1){
throw new ServiceException(BusiStatus.PARTITION_ERROR, "分区不一致");
}
Integer partitionId = partitionIds.get(0);
enterpriseWeChatPushAdminService.pushMessage(usersMap, partitionId, "后台赠送金币", optId, num, remark);
// officialGoldSendMsg(ernos,num,optId,remark);
// 分隔耳伴号,多个耳伴号用换行分隔
for (Users users : usersMap.values()) {
Long recordId = DefaultIdentifierGenerator.getInstance().nextId(null);
// 增加官方赠送活动记录
addGoldRecord(recordId, users, type, Constant.WalletCurrencyType.gold, num, optId, remark, busType, null);
// 更新账户钻石数量
userPurseService.addGold(users.getUid(), num.doubleValue(), BillObjTypeEnum.INTER_SEND_DIAMOND);
logger.info("giveGold success, erpan_no: {}, type: {}, num: {}, recordId: {}", users.getErbanNo(), type, num, recordId);
}
} finally {
this.jedisLockService.unlock(RedisKey.lock_official_gold_send.getKey(), lockval);
}
}
/**
* 官方调整薪资(增加或减少)
* @param ernos 用户耳伴号列表,多个用换行分隔
* @param usersMap 用户映射
* @param type 操作类型
* @param num 调整数量
* @param optId 操作人ID
@@ -343,64 +321,96 @@ public class OfficialGoldRecordService extends BaseService {
* @throws Exception
*/
@Transactional(rollbackFor = Exception.class)
public void adjustUsd(String ernos, byte type, BigDecimal num, int optId, String remark, Integer busType, boolean isPlus) {
String lockval = null;
try {
lockval = this.jedisLockService.lock(RedisKey.lock_official_gold_send.getKey(), 3000);
if (StringUtils.isEmpty(lockval)) {
throw new AdminServiceException(BusiStatus.SERVERBUSY);
public void adjustUsd(Map<Long, Users> usersMap, OfficalSendTypeEnum type, BigDecimal num, int optId, String remark, Integer busType, boolean isPlus, BigDecimal actualAmount) {
Map<Long, GuildMember> guildMemberMap = new HashMap<>();
for (Users u : usersMap.values()) {
Long uid = u.getUid();
GuildMember guildMemberByUid = guildMemberService.getVaildGuildMemberByUid(uid);
if (guildMemberByUid == null) {
throw new AdminServiceException("ID:" + u.getErbanNo() + " but not in guild, not allow operate");
}
guildMemberMap.put(uid, guildMemberByUid);
}
List<String> erbanNos = Arrays.asList(ernos.trim().split("\n"));
Map<Long, GuildMember> guildMemberMap = new HashMap<>();
Map<Long, Users> usersMap = new HashMap<>();
for (String erbanNoStr : erbanNos) {
Long erbanNo = Long.parseLong(erbanNoStr.trim());
if (usersMap.containsKey(erbanNo)) {
continue;
}
Users u = usersService.getUserByErbanNo(erbanNo);
if (u == null) {
throw new AdminServiceException(BusiStatus.USERNOTEXISTS);
}
Long uid = u.getUid();
GuildMember guildMemberByUid = guildMemberService.getVaildGuildMemberByUid(uid);
if (guildMemberByUid == null) {
throw new AdminServiceException("ID:" + erbanNoStr + " but not in guild, not allow operate");
}
guildMemberMap.put(uid, guildMemberByUid);
usersMap.put(uid, u);
// 分隔耳伴号,多个耳伴号用换行分隔
for (Users users : usersMap.values()) {
Long recordId = DefaultIdentifierGenerator.getInstance().nextId(null);
Long uid = users.getUid();
GuildMember guildMember = guildMemberMap.get(uid);
// 增加官方赠送活动记录
addGoldRecord(recordId, users, type.getValue(), Constant.WalletCurrencyType.guildUsd, num, optId, remark, busType, actualAmount);
if (isPlus) {
// 增加账户usd数量
UserPurse userPurse = userPurseService.addGuildUsd(uid, num.doubleValue(), BillObjTypeEnum.PLUS_GUILD_USD,
(up) -> billRecordService.insertGeneralBillRecord(uid, uid, BillObjTypeEnum.PLUS_GUILD_USD, num.doubleValue(), up));
guildUsdBillRecordService.insert(UUIDUtil.get(), guildMember.getPartitionId(), guildMember.getId(), guildMember.getGuildId(), uid,
guildMember.getId(), uid, GuildUsdOperateTypeEnum.SYSTEM_PLUS_USD, null, userPurse, num, null, recordId, remark);
logger.info("plusUsd success, erpan_no: {}, type: {}, num: {}, recordId: {}", users.getErbanNo(), type.getValue(), num, recordId);
} else {
// 减少账户usd数量
UserPurse userPurse = userPurseService.subGuildUsd(uid, num, BillObjTypeEnum.MIUNS_GUILD_USD, BusiStatus.NOT_ENOUGH_GUILD_USD,
(up)-> billRecordService.insertGeneralBillRecord(uid, uid, BillObjTypeEnum.MIUNS_GUILD_USD, num.doubleValue(), up));
guildUsdBillRecordService.insert(UUIDUtil.get(), guildMember.getPartitionId(), guildMember.getId(), guildMember.getGuildId(), uid,
guildMember.getId(), uid, GuildUsdOperateTypeEnum.SYSTEM_MIUNS_USD, userPurse, null, num, null, recordId, remark);
logger.info("minusUsd success, erpan_no: {}, type: {}, num: {}, recordId: {}", users.getErbanNo(), type.getValue(), num, recordId);
}
}
}
// 分隔耳伴号,多个耳伴号用换行分隔
for (Users users : usersMap.values()) {
Long recordId = DefaultIdentifierGenerator.getInstance().nextId(null);
Long uid = users.getUid();
GuildMember guildMember = guildMemberMap.get(uid);
/**
* 官方调整水晶(增加或减少)
* @param usersMap 用户映射
* @param type 操作类型
* @param num 调整数量
* @param optId 操作人ID
* @param remark 备注
* @param busType 业务类型
* @param isPlus 是否为增加操作 true:增加 false:减少
* @throws Exception
*/
@Transactional(rollbackFor = Exception.class)
public void adjustGuildCrystal(Map<Long, Users> usersMap, OfficalSendTypeEnum type, BigDecimal num, int optId, String remark, Integer busType, boolean isPlus, BigDecimal actualAmount) {
// 分隔耳伴号,多个耳伴号用换行分隔
for (Users users : usersMap.values()) {
Long recordId = DefaultIdentifierGenerator.getInstance().nextId(null);
Long uid = users.getUid();
// 增加官方赠送活动记录
addGoldRecord(recordId, users, type, Constant.WalletCurrencyType.usd, num, optId, remark, busType, null);
if (isPlus) {
// 增加账户usd数量
UserPurse userPurse = userPurseService.addGuildUsd(uid, num.doubleValue(), BillObjTypeEnum.PLUS_GUILD_USD,
(up) -> billRecordService.insertGeneralBillRecord(uid, uid, BillObjTypeEnum.PLUS_GUILD_USD, num.doubleValue(), up));
guildUsdBillRecordService.insert(UUIDUtil.get(), guildMember.getPartitionId(), guildMember.getId(), guildMember.getGuildId(), uid,
guildMember.getId(), uid, GuildUsdOperateTypeEnum.SYSTEM_PLUS_USD, null, userPurse, num, null, recordId, remark);
logger.info("plusUsd success, erpan_no: {}, type: {}, num: {}, recordId: {}", users.getErbanNo(), type, num, recordId);
} else {
// 减少账户usd数量
UserPurse userPurse = userPurseService.subGuildUsd(uid, num, BillObjTypeEnum.MIUNS_GUILD_USD, NOT_ENOUGH_GUILD_USD,
(up)-> billRecordService.insertGeneralBillRecord(uid, uid, BillObjTypeEnum.MIUNS_GUILD_USD, num.doubleValue(), up));
guildUsdBillRecordService.insert(UUIDUtil.get(), guildMember.getPartitionId(), guildMember.getId(), guildMember.getGuildId(), uid,
guildMember.getId(), uid, GuildUsdOperateTypeEnum.SYSTEM_MIUNS_USD, userPurse, null, num, null, recordId, remark);
logger.info("minusUsd success, erpan_no: {}, type: {}, num: {}, recordId: {}", users.getErbanNo(), type, num, recordId);
}
// 增加官方赠送活动记录
addGoldRecord(recordId, users, type.getValue(), Constant.WalletCurrencyType.guildCrystal, num, optId, remark, busType, actualAmount);
if (isPlus) {
// 增加账户usd数量
userPurseService.addGuildCrystal(uid, num.doubleValue(), BillObjTypeEnum.OFFICIAL_PLUS_GUILD_CRYSTAL);
logger.info("plusUsd success, erpan_no: {}, type: {}, num: {}, recordId: {}", users.getErbanNo(), type.getValue(), num, recordId);
} else {
// 减少账户usd数量
userPurseService.subGuildCrystal(uid, num.doubleValue(), BillObjTypeEnum.OFFICIAL_MIUNS_GUILD_CRYSTAL);
logger.info("minusUsd success, erpan_no: {}, type: {}, num: {}, recordId: {}", users.getErbanNo(), type.getValue(), num, recordId);
}
} finally {
this.jedisLockService.unlock(RedisKey.lock_official_gold_send.getKey(), lockval);
}
}
@Transactional(rollbackFor = Exception.class)
public void clearUserGold(Map<Long, Users> usersMap, BigDecimal num, Integer adminId, BigDecimal actualAmount) {
for (Users users: usersMap.values()) {
Long uid = users.getUid();
UserPurse userPurse = userPurseService.queryUserPurse(uid);
BigDecimal golds = BigDecimal.valueOf(userPurse.getGolds());
if (golds.compareTo(num) < 0) {
throw new AdminServiceException("[" + users.getErbanNo() + "]的用户金币金额低于" + num);
}
long recordId = DefaultIdentifierGenerator.getInstance().nextId(null);
String recordIdStr = String.valueOf(recordId);
//扣减金币
userPurse = userPurseService.subGold(uid, num.doubleValue(), BillObjTypeEnum.CLEAR_USER_GOLD,
(up)-> billRecordService.insertGeneralBillRecord(uid, recordIdStr, BillObjTypeEnum.CLEAR_USER_GOLD, num.doubleValue(), up));
//获取更新后的金额
BigDecimal currentGoldNum = BigDecimal.valueOf(userPurse.getGolds());
//增加官方操作记录
addOfficialGoldRecord(recordId, uid, null, num, currentGoldNum, OfficalSendTypeEnum.CLEAR_USER_GOLD.getValue(),
Constant.WalletCurrencyType.gold, BillObjTypeEnum.CLEAR_USER_GOLD.getValue(), adminId, BillObjTypeEnum.CLEAR_USER_GOLD.getDesc(), actualAmount);
}
}
@@ -409,10 +419,12 @@ public class OfficialGoldRecordService extends BaseService {
BigDecimal diamondNum = null;
BigDecimal goldNum = null;
BigDecimal currentGoldNum = null;
if (Constant.OfficialType.interSendGold.byteValue() == type
|| Constant.OfficialType.clearUserGold.byteValue() == type
if (Constant.OfficialType.interSendGold == type
|| Constant.OfficialType.clearUserGold == type
|| Constant.OfficialType.plusGuildUsd == type
|| Constant.OfficialType.miunsGuildUsd == type) {
|| Constant.OfficialType.miunsGuildUsd == type
|| Constant.OfficialType.plusGuildCrystal == type
|| Constant.OfficialType.miunsGuildCrystal == type) {
diamondNum = num;
} else {
goldNum = num;
@@ -424,8 +436,10 @@ public class OfficialGoldRecordService extends BaseService {
currentGoldNum = BigDecimal.valueOf(userPurse.getCrystals()).add(num);
} else if (currencyType == Constant.WalletCurrencyType.diamonds){
currentGoldNum = BigDecimal.valueOf(userPurse.getDiamonds()).add(num);
} else if (currencyType == Constant.WalletCurrencyType.usd){
} else if (currencyType == Constant.WalletCurrencyType.guildUsd){
currentGoldNum = BigDecimal.valueOf(userPurse.getGuildUsd()).add(num);
} else if (currencyType == Constant.WalletCurrencyType.guildCrystal){
currentGoldNum = BigDecimal.valueOf(userPurse.getGuildCrystal()).add(num);
}
}
return addOfficialGoldRecord(recordId, uid, diamondNum, goldNum, currentGoldNum, type, currencyType, busType, optId, remark, actualAmount);
@@ -580,110 +594,6 @@ public class OfficialGoldRecordService extends BaseService {
return data;
}
/**
* 后台金币充值根据配置,发送微信消息
*
* @param ernos
* @param num
* @param optId
* @param remark
*/
public void officialGoldSendMsg(String ernos, long num, int optId, String remark) {
boolean flag = true;//true为金额提示消息,false为笔数提示消息
String cusDate = DateTimeUtil.getTodayStr();
Integer limitTime = Integer.valueOf(webConfigService.getSingleConf(AdminConstants.OFFICIAL_GOLD_LIMIT_TIME));
Integer limitGold = Integer.valueOf(webConfigService.getSingleConf(AdminConstants.OFFICIAL_GOLD_LIMIT_GOLD));
String openIds = webConfigService.getSingleConf(AdminConstants.OFFICIAL_GOLD_NOTIFY_MEMBER);
Assert.notNull(openIds, "通知的openIds不能为空");
List<String> openIdList = Arrays.asList(openIds.split(","));
//获取操作人名字
AdminUser user = adminUserService.getAdminUserById(optId);
Assert.notNull(user, "该操作人不存在!");
//当日累计一次
Double rechargeTime = jedisService.zincrby(RedisKey.official_gold_limit_time.getKey(), 1.0, cusDate);
//判断后台充值金额是否需要发送消息
if (rechargeTime >= limitTime) {
flag = false;
}
//根据openId发送微信消息
boolean finalFlag = flag;
if (rechargeTime >= limitTime || num >= limitGold) {
openIdList.forEach((openID) -> {
sendMsg(ernos, num, user.getUsername(), remark, rechargeTime.intValue(), finalFlag, openID);
});
}
}
/**
* 发送微信消息
*
* @param ernos
* @param num
* @param optName
* @param remark
* @param countTime
* @param flag
* @param openId
*/
public void sendMsg(String ernos, long num, String optName, String remark, int countTime, boolean flag, String openId) {
String first = "耳伴管理系统";
String keyword1 = "后台管理系统金币充值提醒";
String keyword2 = "充值人:" + optName + ",充值:" + num + "元,被充值人:" + ernos + ",原因:" + remark + ",当日累计笔数:" + countTime;
String keyword3 = "提醒类型:";
if (flag) {
keyword3 += "金额";
} else {
keyword3 += "笔数";
}
String keyword4 = "充值时间:" + DateTimeUtil.convertDate(new Date(), "yyyy-MM-dd hh:mm");
//wxPubService.sendAlertMsg(openId,first,keyword1,keyword2,keyword3,keyword4,"");
}
@Transactional(rollbackFor = Exception.class)
public void clearUserGold(String erBanNos, BigDecimal num, Integer adminId) {
if (StrUtil.isEmpty(erBanNos)) {
throw new AdminServiceException("ID不能为空");
}
// 根据配置,发送微信提示消息
List<String> erbanNos = Arrays.asList(erBanNos.trim().split("\n"));
Map<Long, Users> usersMap = erbanNos.parallelStream().map(Long::parseLong).distinct()
.map(erbanNo->{
Users u = usersService.getUserByErbanNo(erbanNo);
if (u == null) {
throw new AdminServiceException(BusiStatus.USERNOTEXISTS);
}
return u;
})
.collect(Collectors.toMap(Users::getErbanNo, u->u));
List<Integer> partitionIds = usersMap.values().stream().map(Users::getPartitionId).distinct().collect(Collectors.toList());
if (partitionIds.size() > 1){
throw new ServiceException(BusiStatus.PARTITION_ERROR, "分区不一致");
}
for (Users users: usersMap.values()) {
Long uid = users.getUid();
UserPurse userPurse = userPurseService.queryUserPurse(uid);
BigDecimal golds = BigDecimal.valueOf(userPurse.getGolds());
if (golds.compareTo(num) < 0) {
throw new AdminServiceException("[" + users.getErbanNo() + "]的用户金币金额低于" + num);
}
long recordId = DefaultIdentifierGenerator.getInstance().nextId(null);
String recordIdStr = String.valueOf(recordId);
//扣减金币
userPurse = userPurseService.subGold(uid, num.doubleValue(), BillObjTypeEnum.CLEAR_USER_GOLD,
(up)-> billRecordService.insertGeneralBillRecord(uid, recordIdStr, BillObjTypeEnum.CLEAR_USER_GOLD, num.doubleValue(), up));
//获取更新后的金额
BigDecimal currentGoldNum = BigDecimal.valueOf(userPurse.getGolds());
//增加官方操作记录
addOfficialGoldRecord(recordId, uid, null, num, currentGoldNum, OfficalSendTypeEnum.CLEAR_USER_GOLD.getValue(),
Constant.WalletCurrencyType.gold, BillObjTypeEnum.CLEAR_USER_GOLD.getValue(), adminId, BillObjTypeEnum.CLEAR_USER_GOLD.getDesc(), null);
}
}
public BusiResult<PageResult<OfficialGoldAllRecordVo>> allRecord(Integer partitionId, Long erbanNo, OfficalSendTypeEnum type,
Date beginDate, Date endDate, Integer pageNo, Integer pageSize) {
Page<OfficialGoldRecordVo> p = new Page<>(pageNo, pageSize);
@@ -725,15 +635,17 @@ public class OfficialGoldRecordService extends BaseService {
if (record.getBusType() != null) {
vo.setCurrencyTypeDesc(busTypeNameMap.get(record.getBusType()));
}
if (Constant.WalletCurrencyType.gold.equals(officalSendTypeEnum.getCurrencyType())) {
if (CurrencyEnum.GOLD.equals(officalSendTypeEnum.getCurrencyType())) {
if (record.getDiamondNum() == null) {
vo.setOperationNum(BigDecimal.valueOf(record.getGoldNum()));
} else {
vo.setOperationNum(BigDecimal.valueOf(record.getDiamondNum()));
}
} else if (Constant.WalletCurrencyType.diamonds.equals(officalSendTypeEnum.getCurrencyType())) {
} else if (CurrencyEnum.DIAMOND.equals(officalSendTypeEnum.getCurrencyType())) {
vo.setOperationNum(BigDecimal.valueOf(record.getGoldNum()));
} else if (Constant.WalletCurrencyType.usd.equals(officalSendTypeEnum.getCurrencyType())) {
} else if (CurrencyEnum.GUILD_USD.equals(officalSendTypeEnum.getCurrencyType())) {
vo.setOperationNum(BigDecimal.valueOf(record.getDiamondNum()));
} else if (CurrencyEnum.GUILD_CRYSTAL.equals(officalSendTypeEnum.getCurrencyType())) {
vo.setOperationNum(BigDecimal.valueOf(record.getDiamondNum()));
} else {
vo.setOperationNum(BigDecimal.valueOf(record.getGoldNum()));
@@ -746,4 +658,36 @@ public class OfficialGoldRecordService extends BaseService {
return BusiResult.success(pageResult);
}
}
/**
* 推送企业微信消息
* @param usersMap 用户映射
* @param partitionId 分区ID
* @param title 标题
* @param adminId 管理员ID
* @param amount 数量
* @param remark 备注
*/
private void pushEnterpriseWeChatMessage(Map<Long, Users> usersMap, Integer partitionId, String title, int adminId, BigDecimal amount, String remark) {
if (envComponent.getDevOrNativeEnv()) {
return;
}
String userDescList = usersMap.values().stream().map(u-> String.format("%s(%d)", u.getNick(), u.getErbanNo())).collect(Collectors.joining(","));
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
AdminUser adminUser = adminUserService.getAdminUserById(adminId);
MarkdownMessage msg = new MarkdownMessage();
msg.addTitle(MarkdownMessage.getHeaderText(3, adminUser.getUsername() + title));
msg.add(MarkdownMessage.getReferenceText(title));
msg.add(MarkdownMessage.getReferenceText("APP应用 ") + AppEnum.getCurApp().getValue());
msg.add(MarkdownMessage.getReferenceText("赠送数量: " + amount.toPlainString()));
msg.add(MarkdownMessage.getReferenceText("赠送分区: " + partitionEnum.getDesc()));
msg.add(MarkdownMessage.getReferenceText("赠送人数: " + usersMap.size()));
msg.add(MarkdownMessage.getReferenceText("赠送用户: " + userDescList));
msg.add(MarkdownMessage.getReferenceText("操作者: " + adminUser.getUsername()));
msg.add(MarkdownMessage.getReferenceText("备注: " + remark));
// 发送消息
messageRobotPushService.pushMessageByKey(webSecurityConfig.getOfficialDingPushKey(), msg, false);
}
}

View File

@@ -19,7 +19,7 @@ public interface AdminResourceService {
* @param pageSize
* @return
*/
IPage<Resource> page(Integer type, Integer partitionId, Integer pageNo, Integer pageSize);
IPage<Resource> page(Integer type, Integer panelType, String code, Integer partitionId, Integer pageNo, Integer pageSize);
/**
* 保存

View File

@@ -4,6 +4,7 @@ import com.accompany.admin.service.resource.AdminResourceService;
import com.accompany.business.model.resource.Resource;
import com.accompany.business.service.resource.ResourceService;
import com.accompany.common.constant.Constant;
import com.accompany.common.utils.StringUtils;
import com.accompany.core.util.I18NMessageSourceUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -28,10 +29,12 @@ public class AdminResourceServiceImpl implements AdminResourceService {
private ResourceService resourceService;
@Override
public IPage<Resource> page(Integer type, Integer partitionId, Integer pageNo, Integer pageSize) {
public IPage<Resource> page(Integer type, Integer panelType, String code, Integer partitionId, Integer pageNo, Integer pageSize) {
return resourceService.page(new Page<>(pageNo, pageSize), Wrappers.<Resource>lambdaQuery()
.eq(Resource::getType, type)
.eq(partitionId != null, Resource::getPartitionId, partitionId)
.eq(panelType!= null, Resource::getPanelType, panelType)
.eq(StringUtils.isNotEmpty(code), Resource::getCode, code)
.orderByAsc(Resource::getSkipType)
.orderByAsc(Resource::getCreateTime));
}

View File

@@ -402,6 +402,11 @@ public class AdminUserService extends BaseService {
return adminUserMapper.selectByExample(example);
}
/**
* 特殊方法,不能当通用后台用
* @param adminId
* @return
*/
public AdminUserVo getByAdminId(Integer adminId) {
AdminUser adminUserById = this.getAdminUserById(adminId);
List<AdminRefUserRoleKey> roleByAdminId = adminRoleService.getRoleByAdminId(adminId);

View File

@@ -30,6 +30,9 @@ public class I18nMessageAdminService {
Properties arProperties = messageI18nNacosService.getProperties(WebLocaleConfig.Arabic);
Properties trProperties = messageI18nNacosService.getProperties(WebLocaleConfig.Turkey);
Properties prProperties = messageI18nNacosService.getProperties(WebLocaleConfig.Portuguese);
Properties esProperties = messageI18nNacosService.getProperties(WebLocaleConfig.Spanish);
Properties ruProperties = messageI18nNacosService.getProperties(WebLocaleConfig.Russian);
Properties uzProperties = messageI18nNacosService.getProperties(WebLocaleConfig.Uzbek);
for (Object obj : zhProperties.keySet()) {
String key = obj.toString();
I18nMessageAdminVo admin = new I18nMessageAdminVo();
@@ -39,16 +42,22 @@ public class I18nMessageAdminService {
admin.setAr(arProperties.getProperty(key));
admin.setTr(trProperties.getProperty(key));
admin.setPt(prProperties.getProperty(key));
admin.setEs(esProperties.getProperty(key));
admin.setRu(ruProperties.getProperty(key));
admin.setUz(uzProperties.getProperty(key));
admins.add(admin);
}
return admins;
}
public void save(String key, String zh, String en, String ar, String tr, String pt) {
public void save(String key, String zh, String en, String ar, String tr, String pt, String es, String ru, String uz) {
messageI18nNacosService.saveOrUpdateProperties(WebLocaleConfig.Chinese, key, zh);
messageI18nNacosService.saveOrUpdateProperties(WebLocaleConfig.English, key, en);
messageI18nNacosService.saveOrUpdateProperties(WebLocaleConfig.Arabic, key, ar);
messageI18nNacosService.saveOrUpdateProperties(WebLocaleConfig.Turkey, key, tr);
messageI18nNacosService.saveOrUpdateProperties(WebLocaleConfig.Portuguese, key, pt);
messageI18nNacosService.saveOrUpdateProperties(WebLocaleConfig.Spanish, key, es);
messageI18nNacosService.saveOrUpdateProperties(WebLocaleConfig.Russian, key, ru);
messageI18nNacosService.saveOrUpdateProperties(WebLocaleConfig.Uzbek, key, uz);
}
}

View File

@@ -2,10 +2,7 @@ package com.accompany.admin.service.user;
import com.accompany.admin.mapper.ChargeRecordAdminMapper;
import com.accompany.admin.service.base.BaseService;
import com.accompany.admin.vo.ChargeRecordAdminVo;
import com.accompany.admin.vo.ChargeRecordCountryVo;
import com.accompany.admin.vo.ChargeRecordPartitionVo;
import com.accompany.admin.vo.ChargeRecordPersonAdminVo;
import com.accompany.admin.vo.*;
import com.accompany.business.constant.ChargeChannelEnum;
import com.accompany.business.constant.GenderEnum;
import com.accompany.common.constant.Constant;
@@ -309,9 +306,11 @@ public class ChargeRecordAdminService extends BaseService {
}
public PageResult<ChargeRecordAdminVo> chargeRecordList(Integer pageNumber, Integer pageSize, Long erbanNo, String channel, Date startTime,
Date endTime, Integer status, Boolean newUser, String appChannel, Boolean totalStat, Integer regionId) {
Date endTime, Integer status, Boolean newUser, String appChannel, Boolean totalStat, Integer regionId,
String chargeRecordId,
String pingxxChargeId) {
Page<ChargeRecordAdminVo> p = new Page<>(pageNumber, pageSize);
chargeRecordAdminMapper.page(p, erbanNo, channel, startTime, endTime, status, newUser, appChannel, regionId);
chargeRecordAdminMapper.page(p, erbanNo, channel, startTime, endTime, status, newUser, appChannel, regionId, chargeRecordId, pingxxChargeId);
PageResult<ChargeRecordAdminVo> pageResult = new PageResult<>(p);
List<ChargeRecordAdminVo> rows = pageResult.getRows();
if (CollectionUtils.isEmpty(rows)) {
@@ -325,7 +324,8 @@ public class ChargeRecordAdminService extends BaseService {
row.setRegionName(regionName.get(row.getRegionId()));
}
if (totalStat) {
List<ChargeRecordAdminVo> chargeRecordAdminVo = chargeRecordAdminMapper.pageTotal(erbanNo, channel, startTime, endTime, status, newUser, appChannel, regionId);
List<ChargeRecordAdminVo> chargeRecordAdminVo = chargeRecordAdminMapper
.pageTotal(erbanNo, channel, startTime, endTime, status, newUser, appChannel, regionId, chargeRecordId, pingxxChargeId);
if (CollectionUtils.isEmpty(chargeRecordAdminVo)) {
return pageResult;
}
@@ -347,8 +347,10 @@ public class ChargeRecordAdminService extends BaseService {
}
public void exportChargeRecordList(OutputStream outputStream, Long erbanNo, String channel, Date startTime, Date endTime, Integer status, Boolean newUser, String appChannel, Integer regionId) {
PageResult<ChargeRecordAdminVo> page = chargeRecordList(-1, -1, erbanNo, channel, startTime, endTime, status, newUser, appChannel, false, regionId);
public void exportChargeRecordList(OutputStream outputStream, Long erbanNo, String channel, Date startTime, Date endTime, Integer status, Boolean newUser,
String appChannel, Integer regionId, String chargeRecordId, String pingxxChargeId) {
PageResult<ChargeRecordAdminVo> page = chargeRecordList(-1, -1, erbanNo, channel, startTime, endTime,
status, newUser, appChannel, false, regionId, chargeRecordId, pingxxChargeId);
EasyExcel.write(outputStream, ChargeRecordAdminVo.class).sheet("充值明细").doWrite(page.getRows());
}
@@ -394,6 +396,21 @@ public class ChargeRecordAdminService extends BaseService {
}).collect(Collectors.toList());
}
public List<ChargeRecordPartitionRegionVo> partitionRegionGoldDetail(Integer partitionId, String startDate, String channel) {
if (!StringUtils.hasText(startDate)) {
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
PartitionInfo partitionInfo = partitionInfoService.getById(partitionId);
if (null == partitionInfo){
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
Date startTime = DateTimeUtil.getBeginTimeOfDay(DateTimeUtil.convertStrToDate(startDate, DateTimeUtil.DEFAULT_DATE_PATTERN));
Date endTime = DateTimeUtil.getEndTimeOfDay(DateTimeUtil.convertStrToDate(startDate, DateTimeUtil.DEFAULT_DATE_PATTERN));
return chargeRecordAdminMapper.getPartitionRegionGoldDetail(partitionId, startTime, endTime, channel);
}
public void exportPartitionDetail(ServletOutputStream outputStream, Integer partitionId, String startTime, String endTime) {
PartitionInfo partitionInfo = partitionInfoService.getById(partitionId);
if (null == partitionInfo){

View File

@@ -131,7 +131,8 @@ public class UserCancelAdminService extends BaseService {
familyManageAdminService.removeMember(vaildFamilyMemberByUid.getId(), 0);
}
} else if (Constant.ClanMode.GUILD.equals(partitionEnum.getClanMode())
|| Constant.ClanMode.GUILD_POLICY2.equals(partitionEnum.getClanMode())) {
|| Constant.ClanMode.GUILD_POLICY2.equals(partitionEnum.getClanMode())
|| Constant.ClanMode.SOVIET.equals(partitionEnum.getClanMode())) {
GuildMember vaildGuildMemberByUid = guildMemberService.getVaildGuildMemberByUid(users.getUid());
if (vaildGuildMemberByUid != null && GuildConstant.RoleType.OWNER.equals(vaildGuildMemberByUid.getRoleType())) {
Guild validOwnUid = guildManageAdminService.getValidByOwnUid(users.getUid());

View File

@@ -1,11 +1,8 @@
package com.accompany.admin.service.user;
import com.accompany.admin.mapper.TestPurseMapper;
import com.accompany.admin.mapper.UserPurseAdminMapperExpand;
import com.accompany.admin.service.base.BaseService;
import com.accompany.admin.vo.UserPurseVo;
import com.accompany.business.mybatismapper.UserPurseMapper;
import com.accompany.core.service.common.JedisService;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -18,15 +15,8 @@ import java.util.List;
@Service
public class UserPurseAdminService extends BaseService {
@Autowired
private TestPurseMapper testPurseMapper;
@Autowired
private UserPurseMapper userPurseMapper;
@Autowired
UserPurseAdminMapperExpand userPurseAdminMapperExpand;
@Autowired
JedisService jedisService;
public List<UserPurseVo> getUserPurseList(String erbanNoList){
List<String> oldList = Arrays.asList(erbanNoList.split(","));

View File

@@ -1,6 +1,7 @@
package com.accompany.admin.service.vip;
import com.accompany.admin.model.AdminUser;
import com.accompany.admin.service.system.AdminPartitionService;
import com.accompany.admin.service.system.AdminUserService;
import com.accompany.admin.vo.vip.VipSendRecordVo;
import com.accompany.business.model.vip.VipSendRecord;
@@ -8,17 +9,16 @@ import com.accompany.business.mybatismapper.vip.VipSendRecordMapper;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.service.vip.VipSendService;
import com.accompany.common.constant.Constant;
import com.accompany.common.result.BusiResult;
import com.accompany.common.result.PageResult;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.model.Users;
import com.accompany.core.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
@@ -35,6 +35,8 @@ public class VipSendAdminService {
private AdminUserService adminUserService;
@Autowired
private VipSendService vipSendService;
@Autowired
private AdminPartitionService adminPartitionService;
public Page<VipSendRecordVo> pageRecord(Long erbanNo, Integer current, Integer pageSize, Integer adminId) {
Page<VipSendRecordVo> voPage = new Page<>(current, pageSize);
@@ -95,7 +97,14 @@ public class VipSendAdminService {
return voPage;
}
public void send(long uid, int vipLevel, int adminId, Integer days) {
public void send(long uid, int vipLevel, int adminId, Integer days, boolean checkPartitionId) {
if (checkPartitionId) {
Users users = usersService.getUsersByUid(uid);
List<Integer> partitionIds = adminPartitionService.getAllPartitionId(adminId);
if (CollectionUtils.isNotEmpty(partitionIds) && !partitionIds.contains(users.getPartitionId())) {
throw new AdminServiceException("PARTITION ERROR");
}
}
vipSendService.send(uid, vipLevel, days, adminId, Constant.OpenVipSource.ADMIN_SEND, Constant.UserVipRecordType.ADMIN_SEND);
}
}

View File

@@ -77,7 +77,7 @@ public class DynamicDataAdminService extends BaseService {
@Autowired
private IWorldService iWorldService;
@Resource(name = "bizExecutor")
@Resource(name = "biz-executor")
private ThreadPoolExecutor bizExecutor;
public HSSFWorkbook buildPushRecordExcel(List<Dynamic> dynamics) {

View File

@@ -3,6 +3,7 @@
<mapper namespace="com.accompany.admin.mapper.ChargeRecordAdminMapper">
<resultMap id="BaseResultMap" type="com.accompany.admin.vo.ChargeRecordAdminVo">
<id column="chargeRecordId" property="chargeRecordId" jdbcType="VARCHAR"/>
<id column="pingxxChargeId" property="pingxxChargeId" jdbcType="VARCHAR"/>
</resultMap>
<select id="page" resultMap="BaseResultMap">
@@ -12,6 +13,7 @@
app_channel,a.uid,a.channel,p.`desc` `partitionName`,
round(a.amount/100,2) amount, local_currency_code localCurrencyCode, round(a.local_amount/100,2) localAmount,
a.charge_status status,DATE_FORMAT(a.create_time, '%Y-%m-%d %H:%i:%s') createTime,
DATE_FORMAT(a.update_time, '%Y-%m-%d %H:%i:%s') updateTime,
if(date(a.create_time)=date(b.create_time), 1, 0) as new_user from charge_record
as a
join users as b on a.uid=b.uid
@@ -35,6 +37,12 @@
<if test="regionId != null and regionId != 0">
and b.region_id = #{regionId}
</if>
<if test="chargeRecordId != null and chargeRecordId != ''">
and a.charge_record_id = #{chargeRecordId}
</if>
<if test="pingxxChargeId != null and pingxxChargeId != ''">
and a.pingxx_charge_id = #{pingxxChargeId}
</if>
order by a.create_time desc
) as tmp_list
where 1=1
@@ -82,6 +90,12 @@
<if test="regionId != null and regionId != 0">
and b.region_id = #{regionId}
</if>
<if test="chargeRecordId != null and chargeRecordId != ''">
and a.charge_record_id = #{chargeRecordId}
</if>
<if test="pingxxChargeId != null and pingxxChargeId != ''">
and a.pingxx_charge_id = #{pingxxChargeId}
</if>
order by a.create_time desc
) as tmp_list
where 1=1
@@ -142,6 +156,32 @@
group by `date`
</select>
<select id="getPartitionRegionGoldDetail" resultType="com.accompany.admin.vo.ChargeRecordPartitionRegionVo">
/* SHARDINGSPHERE_HINT: WRITE_ROUTE_ONLY=true */
select cr.channel as channel,
r.`name` as regionName,
ifnull(sum(amount)/100,0) `usd`
from charge_record cr
inner join users u on cr.uid = u.uid
left join region_info r on u.region_id = r.id
where cr.create_time &gt;= #{startTime}
and cr.create_time &lt;= #{endTime}
and cr.charge_status in (2,6)
<if test="channel != null and channel != ''">
<choose>
<when test="channel == 'company'">
and cr.charge_prod_id = 'company'
</when>
<otherwise>
and cr.channel = #{channel}
</otherwise>
</choose>
</if>
and u.partition_id = #{partitionId}
GROUP BY r.id
order by `usd` desc
</select>
<select id="getChargeCount" resultType="com.accompany.payment.model.ChargeRecord">
/* SHARDINGSPHERE_HINT: WRITE_ROUTE_ONLY=true */
select

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.accompany.admin.mapper.miniGame.MiniGameForSudAdminMapper">
<select id="statGameDurationByMonth"
resultType="com.accompany.admin.vo.miniGame.MiniGameForSudAdminStatsVo">
SELECT
mgr.mg_id as gameId,
SUM(battle_duration) as totalDuration,
SUM(CASE WHEN u.partition_id = 1 THEN battle_duration ELSE 0 END) AS enDuration,
SUM(CASE WHEN u.partition_id = 2 THEN battle_duration ELSE 0 END) AS arDuration,
SUM(CASE WHEN u.partition_id = 4 THEN battle_duration ELSE 0 END) AS zhDuration,
SUM(CASE WHEN u.partition_id = 8 THEN battle_duration ELSE 0 END) AS trDuration,
SUM(CASE WHEN u.partition_id = 16 THEN battle_duration ELSE 0 END) AS en2Duration
FROM mini_game_round mgr
JOIN users u ON mgr.leader_uid = u.uid
WHERE
battle_start_at between #{startTime} and #{endTime}
<if test="gameId != null and gameId != ''">
AND mgr.mg_id = #{gameId}
</if>
and mgr.state = 2
GROUP BY mgr.mg_id
</select>
<select id="pageGameRoundDetail" resultType="com.accompany.admin.vo.miniGame.MiniGameForSudAdminDetailVo">
select date(mgr.create_time) `date`, mgr.mg_id as gameId, mg.name as gameName, mgr.room_uid roomUid,
u.erban_no as erbanNo,
u.partition_id as partitionId,
pi.`desc` as partitionDesc,
mgr.battle_duration as duration
from mini_game_round mgr
inner join mini_game mg on mgr.mg_id = mg.mg_id
left join users u on mgr.leader_uid = u.uid
left join partition_info pi on u.partition_id = pi.id
where
battle_start_at between #{startTime} and #{endTime}
<if test="gameId != null and gameId != ''">
and mgr.mg_id = #{gameId}
</if>
and mgr.state = 2
order by mgr.update_time desc
</select>
</mapper>

View File

@@ -1,354 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.accompany.admin.mapper.TestPurseMapper" >
<resultMap id="BaseResultMap" type="com.accompany.admin.model.TestPurse" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="uid" property="uid" jdbcType="BIGINT" />
<result column="erban_no" property="erbanNo" jdbcType="BIGINT" />
<result column="nick" property="nick" jdbcType="VARCHAR" />
<result column="mysql_gold" property="mysqlGold" jdbcType="BIGINT" />
<result column="cache_gold" property="cacheGold" jdbcType="BIGINT" />
<result column="mysql_charge_gold" property="mysqlChargeGold" jdbcType="BIGINT" />
<result column="cache_charge_gold" property="cacheChargeGold" jdbcType="BIGINT" />
<result column="mysql_noble_gold" property="mysqlNobleGold" jdbcType="BIGINT" />
<result column="cache_noble_gold" property="cacheNobleGold" jdbcType="BIGINT" />
<result column="mysql_diamond" property="mysqlDiamond" jdbcType="DOUBLE" />
<result column="cache_diamond" property="cacheDiamond" jdbcType="DOUBLE" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="version" property="version" jdbcType="BIGINT" />
</resultMap>
<sql id="Example_Where_Clause" >
<where >
<foreach collection="oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
<trim prefix="(" suffix=")" prefixOverrides="and" >
<foreach collection="criteria.criteria" item="criterion" >
<choose >
<when test="criterion.noValue" >
and ${criterion.condition}
</when>
<when test="criterion.singleValue" >
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue" >
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue" >
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Update_By_Example_Where_Clause" >
<where >
<foreach collection="example.oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
<trim prefix="(" suffix=")" prefixOverrides="and" >
<foreach collection="criteria.criteria" item="criterion" >
<choose >
<when test="criterion.noValue" >
and ${criterion.condition}
</when>
<when test="criterion.singleValue" >
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue" >
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue" >
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Base_Column_List" >
id, uid, erban_no, nick, mysql_gold, cache_gold, mysql_charge_gold, cache_charge_gold,
mysql_noble_gold, cache_noble_gold, mysql_diamond, cache_diamond, create_time, version
</sql>
<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.accompany.admin.model.TestPurseExample" >
select
<if test="distinct" >
distinct
</if>
'true' as QUERYID,
<include refid="Base_Column_List" />
from test_purse
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null" >
order by ${orderByClause}
</if>
</select>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from test_purse
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
delete from test_purse
where id = #{id,jdbcType=INTEGER}
</delete>
<delete id="deleteByExample" parameterType="com.accompany.admin.model.TestPurseExample" >
delete from test_purse
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
</delete>
<insert id="insert" parameterType="com.accompany.admin.model.TestPurse" >
insert into test_purse (id, uid, erban_no,
nick, mysql_gold, cache_gold,
mysql_charge_gold, cache_charge_gold, mysql_noble_gold,
cache_noble_gold, mysql_diamond, cache_diamond,
create_time, version)
values (#{id,jdbcType=INTEGER}, #{uid,jdbcType=BIGINT}, #{erbanNo,jdbcType=BIGINT},
#{nick,jdbcType=VARCHAR}, #{mysqlGold,jdbcType=BIGINT}, #{cacheGold,jdbcType=BIGINT},
#{mysqlChargeGold,jdbcType=BIGINT}, #{cacheChargeGold,jdbcType=BIGINT}, #{mysqlNobleGold,jdbcType=BIGINT},
#{cacheNobleGold,jdbcType=BIGINT}, #{mysqlDiamond,jdbcType=DOUBLE}, #{cacheDiamond,jdbcType=DOUBLE},
#{createTime,jdbcType=TIMESTAMP}, #{version,jdbcType=BIGINT})
</insert>
<insert id="insertSelective" parameterType="com.accompany.admin.model.TestPurse" >
insert into test_purse
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
id,
</if>
<if test="uid != null" >
uid,
</if>
<if test="erbanNo != null" >
erban_no,
</if>
<if test="nick != null" >
nick,
</if>
<if test="mysqlGold != null" >
mysql_gold,
</if>
<if test="cacheGold != null" >
cache_gold,
</if>
<if test="mysqlChargeGold != null" >
mysql_charge_gold,
</if>
<if test="cacheChargeGold != null" >
cache_charge_gold,
</if>
<if test="mysqlNobleGold != null" >
mysql_noble_gold,
</if>
<if test="cacheNobleGold != null" >
cache_noble_gold,
</if>
<if test="mysqlDiamond != null" >
mysql_diamond,
</if>
<if test="cacheDiamond != null" >
cache_diamond,
</if>
<if test="createTime != null" >
create_time,
</if>
<if test="version != null" >
version,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="id != null" >
#{id,jdbcType=INTEGER},
</if>
<if test="uid != null" >
#{uid,jdbcType=BIGINT},
</if>
<if test="erbanNo != null" >
#{erbanNo,jdbcType=BIGINT},
</if>
<if test="nick != null" >
#{nick,jdbcType=VARCHAR},
</if>
<if test="mysqlGold != null" >
#{mysqlGold,jdbcType=BIGINT},
</if>
<if test="cacheGold != null" >
#{cacheGold,jdbcType=BIGINT},
</if>
<if test="mysqlChargeGold != null" >
#{mysqlChargeGold,jdbcType=BIGINT},
</if>
<if test="cacheChargeGold != null" >
#{cacheChargeGold,jdbcType=BIGINT},
</if>
<if test="mysqlNobleGold != null" >
#{mysqlNobleGold,jdbcType=BIGINT},
</if>
<if test="cacheNobleGold != null" >
#{cacheNobleGold,jdbcType=BIGINT},
</if>
<if test="mysqlDiamond != null" >
#{mysqlDiamond,jdbcType=DOUBLE},
</if>
<if test="cacheDiamond != null" >
#{cacheDiamond,jdbcType=DOUBLE},
</if>
<if test="createTime != null" >
#{createTime,jdbcType=TIMESTAMP},
</if>
<if test="version != null" >
#{version,jdbcType=BIGINT},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="com.accompany.admin.model.TestPurseExample" resultType="java.lang.Integer" >
select count(*) from test_purse
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
</select>
<update id="updateByExampleSelective" parameterType="map" >
update test_purse
<set >
<if test="record.id != null" >
id = #{record.id,jdbcType=INTEGER},
</if>
<if test="record.uid != null" >
uid = #{record.uid,jdbcType=BIGINT},
</if>
<if test="record.erbanNo != null" >
erban_no = #{record.erbanNo,jdbcType=BIGINT},
</if>
<if test="record.nick != null" >
nick = #{record.nick,jdbcType=VARCHAR},
</if>
<if test="record.mysqlGold != null" >
mysql_gold = #{record.mysqlGold,jdbcType=BIGINT},
</if>
<if test="record.cacheGold != null" >
cache_gold = #{record.cacheGold,jdbcType=BIGINT},
</if>
<if test="record.mysqlChargeGold != null" >
mysql_charge_gold = #{record.mysqlChargeGold,jdbcType=BIGINT},
</if>
<if test="record.cacheChargeGold != null" >
cache_charge_gold = #{record.cacheChargeGold,jdbcType=BIGINT},
</if>
<if test="record.mysqlNobleGold != null" >
mysql_noble_gold = #{record.mysqlNobleGold,jdbcType=BIGINT},
</if>
<if test="record.cacheNobleGold != null" >
cache_noble_gold = #{record.cacheNobleGold,jdbcType=BIGINT},
</if>
<if test="record.mysqlDiamond != null" >
mysql_diamond = #{record.mysqlDiamond,jdbcType=DOUBLE},
</if>
<if test="record.cacheDiamond != null" >
cache_diamond = #{record.cacheDiamond,jdbcType=DOUBLE},
</if>
<if test="record.createTime != null" >
create_time = #{record.createTime,jdbcType=TIMESTAMP},
</if>
<if test="record.version != null" >
version = #{record.version,jdbcType=BIGINT},
</if>
</set>
<if test="_parameter != null" >
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExample" parameterType="map" >
update test_purse
set id = #{record.id,jdbcType=INTEGER},
uid = #{record.uid,jdbcType=BIGINT},
erban_no = #{record.erbanNo,jdbcType=BIGINT},
nick = #{record.nick,jdbcType=VARCHAR},
mysql_gold = #{record.mysqlGold,jdbcType=BIGINT},
cache_gold = #{record.cacheGold,jdbcType=BIGINT},
mysql_charge_gold = #{record.mysqlChargeGold,jdbcType=BIGINT},
cache_charge_gold = #{record.cacheChargeGold,jdbcType=BIGINT},
mysql_noble_gold = #{record.mysqlNobleGold,jdbcType=BIGINT},
cache_noble_gold = #{record.cacheNobleGold,jdbcType=BIGINT},
mysql_diamond = #{record.mysqlDiamond,jdbcType=DOUBLE},
cache_diamond = #{record.cacheDiamond,jdbcType=DOUBLE},
create_time = #{record.createTime,jdbcType=TIMESTAMP},
version = #{record.version,jdbcType=BIGINT}
<if test="_parameter != null" >
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByPrimaryKeySelective" parameterType="com.accompany.admin.model.TestPurse" >
update test_purse
<set >
<if test="uid != null" >
uid = #{uid,jdbcType=BIGINT},
</if>
<if test="erbanNo != null" >
erban_no = #{erbanNo,jdbcType=BIGINT},
</if>
<if test="nick != null" >
nick = #{nick,jdbcType=VARCHAR},
</if>
<if test="mysqlGold != null" >
mysql_gold = #{mysqlGold,jdbcType=BIGINT},
</if>
<if test="cacheGold != null" >
cache_gold = #{cacheGold,jdbcType=BIGINT},
</if>
<if test="mysqlChargeGold != null" >
mysql_charge_gold = #{mysqlChargeGold,jdbcType=BIGINT},
</if>
<if test="cacheChargeGold != null" >
cache_charge_gold = #{cacheChargeGold,jdbcType=BIGINT},
</if>
<if test="mysqlNobleGold != null" >
mysql_noble_gold = #{mysqlNobleGold,jdbcType=BIGINT},
</if>
<if test="cacheNobleGold != null" >
cache_noble_gold = #{cacheNobleGold,jdbcType=BIGINT},
</if>
<if test="mysqlDiamond != null" >
mysql_diamond = #{mysqlDiamond,jdbcType=DOUBLE},
</if>
<if test="cacheDiamond != null" >
cache_diamond = #{cacheDiamond,jdbcType=DOUBLE},
</if>
<if test="createTime != null" >
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
<if test="version != null" >
version = #{version,jdbcType=BIGINT},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.accompany.admin.model.TestPurse" >
update test_purse
set uid = #{uid,jdbcType=BIGINT},
erban_no = #{erbanNo,jdbcType=BIGINT},
nick = #{nick,jdbcType=VARCHAR},
mysql_gold = #{mysqlGold,jdbcType=BIGINT},
cache_gold = #{cacheGold,jdbcType=BIGINT},
mysql_charge_gold = #{mysqlChargeGold,jdbcType=BIGINT},
cache_charge_gold = #{cacheChargeGold,jdbcType=BIGINT},
mysql_noble_gold = #{mysqlNobleGold,jdbcType=BIGINT},
cache_noble_gold = #{cacheNobleGold,jdbcType=BIGINT},
mysql_diamond = #{mysqlDiamond,jdbcType=DOUBLE},
cache_diamond = #{cacheDiamond,jdbcType=DOUBLE},
create_time = #{createTime,jdbcType=TIMESTAMP},
version = #{version,jdbcType=BIGINT}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>

View File

@@ -6,7 +6,9 @@
<result column="nick" property="nick" jdbcType="VARCHAR" />
</resultMap>
<select id="selectUserPurseVoList" resultMap="BaseResultMap">
select * , (select nick from users t2 where t1.uid=t2.uid) as nick, (select erban_no from users t2 where t1.uid=t2.uid) as erban_no from user_purse t1 where uid in (select uid from users where erban_no in
select * , (select nick from users t2 where t1.uid=t2.uid) as nick, (select erban_no from users t2 where t1.uid=t2.uid) as erban_no
from user_purse t1
where uid in (select uid from users where erban_no in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>)

View File

@@ -42,11 +42,12 @@
<result column="radish_num" property="radishNum" jdbcType="BIGINT"/>
<result column="diamonds_num" property="diamondsNum" jdbcType="DOUBLE"/>
<result column="guild_usd" property="guildUsdNum" jdbcType="DOUBLE"/>
<result column="guild_crystal" property="guildCrystalNum" jdbcType="DOUBLE"/>
</resultMap>
<select id="selectUserWithGold" parameterType="java.util.Map" resultMap="BaseResultMap">
/* SHARDINGSPHERE_HINT: WRITE_ROUTE_ONLY=true */
select b.erban_no,b.nick,b.avatar,golds as gold_num, diamonds as diamonds_num, crystals as radish_num, guild_usd from
select b.erban_no,b.nick,b.avatar,golds as gold_num, diamonds as diamonds_num, crystals as radish_num, guild_usd, guild_crystal from
user_purse as a
join users as b on a.uid=b.uid
where b.erban_no in

View File

@@ -1,14 +1,13 @@
package com.accompany.admin;
import cn.hippo4j.core.enable.EnableDynamicThreadPool;
import io.micrometer.core.instrument.MeterRegistry;
import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
@@ -17,7 +16,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
* admin
*
*/
@EnableDynamicThreadPool
@EnableDynamicTp
@SpringBootApplication
@ComponentScan({"com.accompany","com.xuanyin"})
@EnableScheduling
@@ -27,14 +26,8 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootConfiguration
public class AdminApplication {
@Bean
MeterRegistryCustomizer<MeterRegistry> configurer() {
return (registry) -> registry.config().commonTags("application", "pk_admin");
}
public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}
}
}

View File

@@ -0,0 +1,107 @@
package com.accompany.admin.controller;
import com.accompany.admin.service.GuildMemberWeekLevelRewardRecordAdminService;
import com.accompany.admin.vo.FamilyMemberWeekLevelRewardStatAdminVo;
import com.accompany.business.vo.guild.GuildDateCycleVo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.result.PageResult;
import com.accompany.common.utils.DateTimeUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Api(tags = "主播周奖励", value = "主播周奖励")
@RequestMapping("/admin/guildMemberWeekLevelReward")
@RestController
public class GuildMemberWeekLevelRewardAdminController {
@Autowired
private GuildMemberWeekLevelRewardRecordAdminService service;
@ApiOperation("获取周期")
@GetMapping("/listCycleDate")
public BusiResult<List<GuildDateCycleVo>> listDateCycle(){
List<GuildDateCycleVo> voList = new ArrayList<>();
Date now = new Date();
for (int i = 0; i < 4; i++) {
Date date = DateTimeUtil.addDays(now, i * -7);
Date monday = DateTimeUtil.getMonday(date, 0, 0, 0);
Date sunday = DateTimeUtil.getSunday(date, 23, 59, 59);
String mondayStr = DateTimeUtil.convertDate(monday);
GuildDateCycleVo vo = new GuildDateCycleVo();
vo.setDateCycle(mondayStr);
vo.setStartDate(monday);
vo.setStartDateStr(mondayStr);
vo.setEndDate(sunday);
vo.setEndDateStr(DateTimeUtil.convertDate(sunday));
vo.setCurrentCycle(i==0);
voList.add(vo);
}
return BusiResult.success(voList);
}
@ApiOperation("查询")
@ApiImplicitParams({
@ApiImplicitParam(name = "partitionId", value = "分区id", required = true),
@ApiImplicitParam(name = "cycleDate", value = "周期", required = true),
@ApiImplicitParam(name = "guildId", value = "公会id"),
@ApiImplicitParam(name = "guildOwnerErbanNo", value = "公会长id"),
@ApiImplicitParam(name = "erbanNo", value = "id"),
@ApiImplicitParam(name = "pageNo", value = "页码"),
@ApiImplicitParam(name = "pageSize", value = "页长"),
})
@GetMapping("/page")
public BusiResult<PageResult<FamilyMemberWeekLevelRewardStatAdminVo>> page(int partitionId,
String cycleDate,
Integer guildId,
Long guildOwnerErbanNo,
Long erbanNo,
int pageNo, int pageSize){
Page<FamilyMemberWeekLevelRewardStatAdminVo> page = service.page(partitionId, cycleDate, guildId, guildOwnerErbanNo, erbanNo, pageNo, pageSize);
return BusiResult.success(new PageResult<>(page));
}
@SneakyThrows
@ApiOperation("导出")
@ApiImplicitParams({
@ApiImplicitParam(name = "partitionId", value = "分区id", required = true),
@ApiImplicitParam(name = "cycleDate", value = "周期"),
@ApiImplicitParam(name = "guildId", value = "公会id"),
@ApiImplicitParam(name = "guildOwnerErbanNo", value = "公会长id"),
@ApiImplicitParam(name = "erbanNo", value = "id"),
})
@GetMapping("/export")
public void export(HttpServletResponse response,
int partitionId,
String cycleDate,
Integer guildId,
Long guildOwnerErbanNo,
Long erbanNo){
Page<FamilyMemberWeekLevelRewardStatAdminVo> page = service.page(partitionId, cycleDate, guildId, guildOwnerErbanNo, erbanNo, -1, -1);
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码
String excelName = URLEncoder.encode("主播周奖励记录", StandardCharsets.UTF_8);
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
EasyExcel.write(response.getOutputStream(), FamilyMemberWeekLevelRewardStatAdminVo.class).sheet("主播周奖励记录").doWrite(page.getRecords());
}
}

View File

@@ -1,7 +1,6 @@
package com.accompany.admin.controller.activity;
import com.accompany.business.common.vo.RewardVo;
import com.accompany.business.constant.activity.ActivityType;
import com.accompany.business.model.activity.h5.ActivityH5LevelAward;
import com.accompany.business.param.ActivityH5Param;
import com.accompany.business.service.activity.h5.ActivityH5LevelAwardService;
@@ -10,16 +9,13 @@ import com.accompany.common.result.BusiResult;
import com.accompany.core.exception.AdminServiceException;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* <p>
@@ -45,7 +41,7 @@ public class ActivityH5LevelAwardController {
@ApiOperation(value = "保存",httpMethod = "POST")
@PostMapping("/save")
public BusiResult<Void> save(ActivityH5LevelAward activityH5LevelAward) {
RewardVo rewardVo = activityH5LevelAwardService.coverRewardByType(activityH5LevelAward.getAwardType(), activityH5LevelAward.getAwardId().intValue());
RewardVo rewardVo = activityH5LevelAwardService.coverAdminRewardByType(activityH5LevelAward.getAwardType(), activityH5LevelAward.getAwardId().intValue());
if (rewardVo == null) {
throw new AdminServiceException("奖励不存在");
}

View File

@@ -220,12 +220,21 @@ public class MyApiController {
return BusiResult.success();
}
@GetMapping("/diamondStat")
public BusiResult<Void> diamondStat(Long roomId, String date) {
@GetMapping("/diamondStatAr")
public BusiResult<Void> diamondStatAr(Long roomId, String date) {
if (null == roomId || !roomId.equals(603L)) {
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
myApiService.diamondStat(date);
myApiService.diamondStatAr(date);
return BusiResult.success();
}
@GetMapping("/diamondStatEn")
public BusiResult<Void> diamondStatEn(Long roomId, String date) {
if (null == roomId || !roomId.equals(603L)) {
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
myApiService.diamondStatEn(date);
return BusiResult.success();
}
@@ -334,6 +343,15 @@ public class MyApiController {
return BusiResult.success();
}
@RequestMapping("/createPublicRoom")
@ResponseBody
public BusiResult<Void> createPublicRoom(Long roomId, Integer partitionId) {
if (null == roomId || !roomId.equals(603L) || null == partitionId) {
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
myApiService.createPublicRoom(partitionId);
return BusiResult.success();
}
@Autowired
private GoogleTokenVerifier googleTokenVerifier;
@@ -358,4 +376,32 @@ public class MyApiController {
miniGameWeekJackpotRankService.settlement(partitionId, DateUtil.parseDateTime(monday), true);
return BusiResult.success();
}
@GetMapping("/guildCrystalSettlement")
public BusiResult<Void> guildCrystalSettlement(Long roomId, String cycleDate, Integer waitSecond) {
if (null == roomId || !roomId.equals(603L)) {
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
myApiService.guildCrystalSettlement(cycleDate, waitSecond);
return BusiResult.success();
}
@GetMapping("/mp4TransferGif")
public BusiResult<Void> mp4TransferGif(Long roomId) {
if (null == roomId || !roomId.equals(603L)) {
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
String url = "https://image.molistar.xyz/64854f73-ea1b-426f-8230-34de49571b8a.mp4";
myApiService.mp4TransferGif(url);
return BusiResult.success();
}
@GetMapping("/updateX")
public BusiResult<Void> updateX(Long roomId) {
if (null == roomId || !roomId.equals(603L)) {
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
myApiService.updateX();
return BusiResult.success();
}
}

View File

@@ -73,34 +73,33 @@ public class RoomBoomAwardRecordAdminController extends BaseController {
//1 创建IPage分页对象,设置分页参数
IPage<RoomBoomSign> page=new Page<>(params.getPageNo(),params.getPageSize());
LambdaQueryWrapper<RoomBoomSign> wrapper = new LambdaQueryWrapper<>();
Long uid = null;
Long roomUid = null;
if (params.getRoomErbanNo() != null){
Users erbanNo = usersService.getUserByErbanNo(params.getRoomErbanNo());
if (erbanNo == null) {
throw new AdminServiceException(BusiStatus.SERVERERROR, "房间id不存在");
}
wrapper.eq(RoomBoomSign::getRoomUid,erbanNo.getUid());
roomUid = erbanNo.getUid();
}
if (params.getErbanNo() != null){
Users erbanNo = usersService.getUserByErbanNo(params.getErbanNo());
if (erbanNo == null) {
throw new AdminServiceException(BusiStatus.SERVERERROR, "触发者id不存在");
}
wrapper.eq(RoomBoomSign::getUid,erbanNo.getUid());
uid = erbanNo.getUid();
}
if (params.getLevel() != null){
wrapper.eq(RoomBoomSign::getLevel,params.getLevel());
Date startTime = null, endTime = null;
if (StringUtils.isNotEmpty(params.getStartTime())) {
startTime = DateUtil.parseDateTime(params.getStartTime());
}
if (StringUtils.isNotEmpty(params.getStartTime())){
wrapper.ge(RoomBoomSign::getCreateTime, (Date)DateUtil.parseDateTime(params.getStartTime()));
if (StringUtils.isNotEmpty(params.getEndTime())) {
endTime = DateUtil.parseDateTime(params.getEndTime());
}
if (StringUtils.isNotEmpty(params.getEndTime())){
wrapper.le(RoomBoomSign::getCreateTime, (Date)DateUtil.parseDateTime(params.getEndTime()));
}
wrapper.eq(RoomBoomSign::getStatus,2);
wrapper.orderByDesc(RoomBoomSign::getId);
//2 执行分页查询
IPage<RoomBoomSign> boomSignIPage = roomBoomSignService.page(page, wrapper);
IPage<RoomBoomSign> boomSignIPage = roomBoomSignService.list(page, uid, roomUid, params.getLevel(),
startTime, endTime, params.getPartitionId());
Page<RoomBoomSignVO> resultVo = new Page<>();
resultVo.setTotal(boomSignIPage.getTotal());
List<RoomBoomSignVO> roomBoomSignVOS = new ArrayList<>();

View File

@@ -116,7 +116,7 @@ public class RoomBoomLevelAwardAdminController {
if (ObjectUtil.equal(RewardTypeEnum.DIAMOND.getType(), awardType)){
awardName = "coin";
awardPic = "https://image.molistar.xyz/Molistarcoins.png";
awardPic = "https://cdn.moliparty.com/EPartycoins.png";
}
if (ObjectUtil.equal(RewardTypeEnum.GIFT.getType(), awardType)){
Gift gift = giftService.getEachGiftById(awardId.intValue());

View File

@@ -0,0 +1,84 @@
package com.accompany.admin.controller.dailytask;
import com.accompany.admin.service.dailytask.DailyTaskAdminService;
import com.accompany.business.vo.dailytask.DailyCoinRecvRecordVo;
import com.accompany.business.vo.dailytask.DailyCoinRecvVo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.result.PageResult;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@Api(tags = "每日任务相关", value = "每日任务相关")
@RestController
@RequestMapping("/admin/dailyTask")
public class DailyTaskAdminController {
@Autowired
private DailyTaskAdminService dailyTaskAdminService;
@GetMapping("/coinRecvNums")
@ApiImplicitParams( {
@ApiImplicitParam(name = "partitionId", value = "分区id", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "startDate", value = "开始时间", required = true, dataType = "String"),
@ApiImplicitParam(name = "endDate", value = "结束时间", required = true, dataType = "String"),
@ApiImplicitParam(name = "pageNo", value = "页码", dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "Integer")
})
@ApiOperation(value = "日任务奖励领取详情", httpMethod = "GET")
public BusiResult<PageResult<DailyCoinRecvVo>> list(Integer pageNo, Integer pageSize, @RequestParam(defaultValue = "16") Integer partitionId,
String startDate, String endDate) {
PageResult<DailyCoinRecvVo> list = dailyTaskAdminService.list(pageNo, pageSize, partitionId, startDate, endDate);
return BusiResult.success(list);
}
@GetMapping("/coinRecvDetail")
@ApiImplicitParams( {
@ApiImplicitParam(name = "partitionId", value = "分区id-列表有带", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "statDate", value = "时间-列表有带", required = true, dataType = "String"),
@ApiImplicitParam(name = "erbanNo", value = "主播id", required = true, dataType = "Long"),
@ApiImplicitParam(name = "deviceId", value = "设备id", dataType = "String"),
@ApiImplicitParam(name = "ip", value = "ip", dataType = "String"),
@ApiImplicitParam(name = "pageNo", value = "页码", dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "Integer")
})
@ApiOperation(value = "日任务奖励领取详情-明细", httpMethod = "GET")
public BusiResult<PageResult<DailyCoinRecvRecordVo>> listRecord(Long erbanNo, Integer partitionId, String statDate,
String deviceId, String ip, Integer pageNo, Integer pageSize) {
PageResult<DailyCoinRecvRecordVo> pageResult = dailyTaskAdminService.listRecord(erbanNo, partitionId, statDate, deviceId, ip, pageNo, pageSize);
return BusiResult.success(pageResult);
}
@GetMapping("/coinRecvDetailExport")
@ApiImplicitParams( {
@ApiImplicitParam(name = "partitionId", value = "分区id-列表有带", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "statDate", value = "时间-列表有带", required = true, dataType = "String"),
@ApiImplicitParam(name = "erbanNo", value = "主播id", required = true, dataType = "Long"),
@ApiImplicitParam(name = "deviceId", value = "设备id", dataType = "String"),
@ApiImplicitParam(name = "ip", value = "ip", dataType = "String"),
})
@ApiOperation(value = "日任务奖励领取详情-明细-导出", httpMethod = "GET")
public void coinRecvDetailExport(HttpServletResponse response, Long erbanNo, Integer partitionId, String statDate,
String deviceId, String ip) throws IOException {
PageResult<DailyCoinRecvRecordVo> pageResult = dailyTaskAdminService.listRecord(erbanNo, partitionId, statDate, deviceId, ip, -1, -1);
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码
String excelName = URLEncoder.encode("日任务奖励领取明细", StandardCharsets.UTF_8);
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
EasyExcel.write(response.getOutputStream(), DailyCoinRecvRecordVo.class).sheet("日任务奖励领取明细").doWrite(pageResult.getRows());
}
}

View File

@@ -0,0 +1,104 @@
package com.accompany.admin.controller.game;
import com.accompany.admin.controller.BaseController;
import com.accompany.admin.model.AdminUser;
import com.accompany.admin.service.system.AdminPartitionService;
import com.accompany.admin.service.system.AdminUserService;
import com.accompany.business.service.game.ChargeUserXDetailService;
import com.accompany.business.vo.game.ChargeUserXDetailVo;
import com.accompany.common.result.BusiResult;
import com.accompany.core.exception.AdminServiceException;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* <p>
* 用户充值等级 前端控制器
* </p>
*
* @author wxf
* @since 2025-06-30
*/
@RestController
@RequestMapping("/chargeUserXDetail")
public class ChargeUserXDetailAdminController extends BaseController {
@Autowired
private AdminUserService adminUserService;
@Autowired
private AdminPartitionService adminPartitionService;
@Autowired
private ChargeUserXDetailService chargeUserXDetailService;
@GetMapping(value = "/list")
public BusiResult<IPage<ChargeUserXDetailVo>> listPage(Long erbanNo, String ip,
String device, Integer identity, Integer pageNo, Integer pageSize, Integer partitionId) {
List<Integer> allPartitionId = adminPartitionService.getAllPartitionId(getAdminId());
if (!allPartitionId.contains(partitionId)) {
throw new AdminServiceException(5001, "无权查看该区数据权限");
}
IPage<ChargeUserXDetailVo> ipage = chargeUserXDetailService.listPage(Arrays.asList(partitionId), erbanNo, ip, device, identity, pageNo, pageSize);
return BusiResult.success(ipage);
}
@ApiImplicitParam(paramType = "query", name = "erbanNos", value = "逗号隔开ID", required = false)
@ApiOperation(value = "新增", httpMethod = "POST")
@PostMapping(value = "/save")
public BusiResult<Void> save(String erbanNos, String addReason) {
if (erbanNos == null) {
throw new AdminServiceException(5001, "请填写用户id");
}
AdminUser adminUserVo = adminUserService.getAdminUserById(getAdminId());
String[] split = erbanNos.split(",");
List<Long> erbanNoList = new ArrayList<>();
for (String erbanNo : split) {
erbanNoList.add(Long.parseLong(erbanNo.trim()));
}
chargeUserXDetailService.saveDetail(erbanNoList, addReason, adminUserVo.getId(), adminUserVo.getUsername());
return BusiResult.success();
}
@ApiOperation(value = "删除", httpMethod = "POST")
@PostMapping(value = "/delete")
public BusiResult<Void> delete(Long uid, String removeReason) {
AdminUser adminUser = adminUserService.getAdminUserById(getAdminId());
// if (StringUtils.isEmpty(removeReason)) {
// throw new AdminServiceException(5001, "请填写删除原因");
// }
chargeUserXDetailService.delete(uid, removeReason, adminUser.getId(), adminUser.getUsername());
return BusiResult.success();
}
@ApiOperation(value = "导出", httpMethod = "POST")
@PostMapping("/export")
public void export(Long erbanNo, String ip, String device, Integer identity, Integer partitionId, HttpServletResponse response) throws IOException {
List<Integer> allPartitionId = adminPartitionService.getAllPartitionId(getAdminId());
if (!allPartitionId.contains(partitionId)) {
throw new AdminServiceException(5001, "无权查看该区数据权限");
}
IPage<ChargeUserXDetailVo> ipage = chargeUserXDetailService.listPage(Arrays.asList(partitionId), erbanNo, ip, device, identity, -1, -1);
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码
String excelName = URLEncoder.encode("嫌疑人x用户", StandardCharsets.UTF_8);
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
EasyExcel.write(response.getOutputStream(), ChargeUserXDetailVo.class).sheet("嫌疑人x用户").doWrite(ipage.getRecords());
}
}

View File

@@ -6,8 +6,8 @@ import com.accompany.admin.common.Combobox;
import com.accompany.admin.controller.BaseController;
import com.accompany.admin.params.RoomFreeGiftConfigParams;
import com.accompany.admin.service.gift.GiftAdminService;
import com.accompany.admin.service.push.EnterpriseWeChatPushAdminService;
import com.accompany.admin.service.system.AdminLogService;
import com.accompany.admin.service.system.AdminUserService;
import com.accompany.business.dto.room.RoomFreeGiftConfigDto;
import com.accompany.business.model.Gift;
import com.accompany.business.service.gift.GiftSendRecordService;
@@ -15,16 +15,22 @@ import com.accompany.business.service.gift.GiftService;
import com.accompany.business.service.gift.RoomExclusiveGiftService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.room.RoomExclusiveGiftVo;
import com.accompany.common.config.WebSecurityConfig;
import com.accompany.common.constant.AppEnum;
import com.accompany.common.constant.Constant;
import com.accompany.common.push.MarkdownMessage;
import com.accompany.common.result.BusiResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.tencent.cos.TencentCosUploadService;
import com.accompany.common.utils.BlankUtil;
import com.accompany.common.utils.EnvComponent;
import com.accompany.common.utils.PinYin4JUtil;
import com.accompany.common.utils.StringUtils;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.Users;
import com.accompany.core.service.message.MessageRobotPushService;
import com.accompany.sharding.vo.GiftSendRecordStatistics;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@@ -65,11 +71,17 @@ public class GiftAdminController extends BaseController {
@Autowired
private AdminLogService adminLogService;
@Autowired
private EnterpriseWeChatPushAdminService enterpriseWeChatPushAdminService;
@Autowired
private GiftService giftService;
@Autowired
private RoomExclusiveGiftService roomExclusiveGiftService;
@Autowired
private AdminUserService adminUserService;
@Autowired
private WebSecurityConfig webSecurityConfig;
@Autowired
private EnvComponent envComponent;
@Autowired
private MessageRobotPushService messageRobotPushService;
@GetMapping("/listLuckyBagGift")
public BusiResult<List<Gift>> listLuckyBagLinearGift() {
@@ -344,7 +356,7 @@ public class GiftAdminController extends BaseController {
Integer partitionId = partitionIds.get(0);
String title = "后台赠送礼物(" + gift.getGiftName() + ") x " + giftNum + "";
enterpriseWeChatPushAdminService.pushMessage(usersMap, partitionId, title, getAdminId(), totalGoldNum, null);
pushEnterpriseWeChatMessage(usersMap, partitionId, title, getAdminId(), totalGoldNum, null);
//赠送失败的平台号
List<Long> failErban = new ArrayList<>();
@@ -460,6 +472,36 @@ public class GiftAdminController extends BaseController {
}
return result;
}
}
/**
* 推送企业微信消息
* @param usersMap 用户映射
* @param partitionId 分区ID
* @param title 标题
* @param adminId 管理员ID
* @param amount 数量
* @param remark 备注
*/
private void pushEnterpriseWeChatMessage(Map<Long, Users> usersMap, Integer partitionId, String title, int adminId, BigDecimal amount, String remark) {
if (envComponent.getDevOrNativeEnv()) {
return;
}
String userDescList = usersMap.values().stream().map(u-> String.format("%s(%d)", u.getNick(), u.getErbanNo())).collect(Collectors.joining(","));
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
com.accompany.admin.model.AdminUser adminUser = adminUserService.getAdminUserById(adminId);
MarkdownMessage msg = new MarkdownMessage();
msg.addTitle(MarkdownMessage.getHeaderText(3, adminUser.getUsername() + title));
msg.add(MarkdownMessage.getReferenceText(title));
msg.add(MarkdownMessage.getReferenceText("APP应用 ") + AppEnum.getCurApp().getValue());
msg.add(MarkdownMessage.getReferenceText("赠送数量: " + amount.toPlainString()));
msg.add(MarkdownMessage.getReferenceText("赠送分区: " + partitionEnum.getDesc()));
msg.add(MarkdownMessage.getReferenceText("赠送人数: " + usersMap.size()));
msg.add(MarkdownMessage.getReferenceText("赠送用户: " + userDescList));
msg.add(MarkdownMessage.getReferenceText("操作者: " + adminUser.getUsername()));
msg.add(MarkdownMessage.getReferenceText("备注: " + remark));
// 发送消息
messageRobotPushService.pushMessageByKey(webSecurityConfig.getOfficialDingPushKey(), msg, false);
}
}

View File

@@ -4,6 +4,7 @@ import com.accompany.admin.controller.BaseController;
import com.accompany.admin.service.guild.GuildManageAdminService;
import com.accompany.admin.service.system.AdminLogService;
import com.accompany.admin.vo.guild.GuildAdminVo;
import com.accompany.admin.vo.guild.GuildCreateAdminVo;
import com.accompany.admin.vo.guild.GuildMemberAdminVo;
import com.accompany.business.constant.guild.GuildConstant;
import com.accompany.business.vo.guild.GuildOperateRecordAdminVo;
@@ -46,16 +47,18 @@ public class GuildManageAdminController extends BaseController {
@ApiImplicitParam(name = "operatorId", value = "公会运营负责人id")
})
@PostMapping("/create")
public BusiResult<Void> createGuild(Long erbanNo,
String guildContactType,
String guildContact,
Long inviteErbanNo,
Integer operatorId){
public BusiResult<Void> createGuild(@RequestBody GuildCreateAdminVo guildCreateAdminVo){
Long erbanNo = guildCreateAdminVo.getErbanNo();
String guildContactType = guildCreateAdminVo.getGuildContactType();
String guildContact = guildCreateAdminVo.getGuildContact();
Long inviteErbanNo = guildCreateAdminVo.getInviteErbanNo();
Integer operatorId = guildCreateAdminVo.getOperatorId();
Integer regionId = guildCreateAdminVo.getRegionId();
if (null == erbanNo){
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
Integer adminId = getAdminId();
service.createGuild(erbanNo, adminId, guildContactType, guildContact, inviteErbanNo, operatorId);
service.createGuild(erbanNo, adminId, guildContactType, guildContact, inviteErbanNo, operatorId, regionId);
adminLogService.insertLog(adminId,getClass().getCanonicalName(),
"create guild","params===>>erbanNo:"+erbanNo);
return BusiResult.success();
@@ -72,15 +75,22 @@ public class GuildManageAdminController extends BaseController {
@ApiImplicitParam(name = "operatorId", value = "公会运营负责人id")
})
@PostMapping("/update")
public BusiResult<Void> updateGuild(Integer id, String name,
String avatar, String backgroundUrl, Integer memberNumLimit,
String guildContactType, String guildContact, Long inviteErbanNo,
Integer operatorId){
public BusiResult<Void> updateGuild(@RequestBody GuildCreateAdminVo guildCreateAdminVo){
String name = guildCreateAdminVo.getName();
Integer id = guildCreateAdminVo.getId();
String backgroundUrl = guildCreateAdminVo.getBackgroundUrl();
Integer memberNumLimit = guildCreateAdminVo.getMemberNumLimit();
String avatar = guildCreateAdminVo.getAvatar();
String guildContactType = guildCreateAdminVo.getGuildContactType();
String guildContact = guildCreateAdminVo.getGuildContact();
Long inviteErbanNo = guildCreateAdminVo.getInviteErbanNo();
Integer operatorId = guildCreateAdminVo.getOperatorId();
Integer regionId = guildCreateAdminVo.getRegionId();
if (null == id || null == memberNumLimit){
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
Integer adminId = getAdminId();
service.updateGuild(id, name, avatar, backgroundUrl, memberNumLimit, guildContactType, guildContact, inviteErbanNo, adminId, operatorId);
service.updateGuild(id, name, avatar, backgroundUrl, memberNumLimit, guildContactType, guildContact, inviteErbanNo, adminId, operatorId, regionId);
adminLogService.insertLog(adminId,getClass().getCanonicalName(),
"update guild","params===>>id:"+id+",name:"+name+",backgroundUrl:"+backgroundUrl+",memberNumLimit:"+memberNumLimit);
return BusiResult.success();

View File

@@ -0,0 +1,73 @@
package com.accompany.admin.controller.guildpolicy;
import com.accompany.admin.service.guildpolicy2.GuildCrystalSettlementRecordAdminService;
import com.accompany.business.vo.guildpolicy.GuildMemberCrystalSettlementRecordAdminVo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.result.PageResult;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@Api(tags = "公会紫晶结算清除记录", value = "公会紫晶结算清除记录")
@RestController
@RequestMapping("/admin/guild/guildCrystal")
public class GuildCrystalSettlementRecordAdminController {
@Autowired
private GuildCrystalSettlementRecordAdminService service;
@ApiImplicitParams({
@ApiImplicitParam(name = "ownerErbanNo", value = "公会长ID", required = true, dataType = "Long"),
@ApiImplicitParam(name = "guildId", value = "公会ID", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "erbanNo", value = "成员号", required = true, dataType = "Long"),
@ApiImplicitParam(name = "partitionId", value = "分区ID(预留)", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "cycleDate", value = "周期传cycle_date", required = true, dataType = "String"),
@ApiImplicitParam(name = "pageNo", value = "页码", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页数量", required = true, dataType = "Integer")
})
@ApiOperation(value = "分页")
@GetMapping("/page")
public BusiResult<PageResult<GuildMemberCrystalSettlementRecordAdminVo>> list(Integer pageNo, Integer pageSize,
Long ownerErbanNo, Integer guildId, Long erbanNo,
@RequestParam(defaultValue = "8") Integer partitionId,
String cycleDate) {
return BusiResult.success(new PageResult<>(service.page(pageNo, pageSize, guildId, ownerErbanNo, erbanNo, partitionId, cycleDate)));
}
@SneakyThrows
@ApiImplicitParams({
@ApiImplicitParam(name = "ownerErbanNo", value = "公会长ID", required = true, dataType = "Long"),
@ApiImplicitParam(name = "guildId", value = "公会ID", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "erbanNo", value = "成员号", required = true, dataType = "Long"),
@ApiImplicitParam(name = "partitionId", value = "分区ID(预留)", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "cycleDate", value = "周期传cycle_date", required = true, dataType = "String"),
})
@ApiOperation(value = "导出")
@GetMapping("/export")
public void export(HttpServletResponse response, Long ownerErbanNo, Integer guildId, Long erbanNo,
@RequestParam(defaultValue = "8") Integer partitionId,
String cycleDate) {
Page<GuildMemberCrystalSettlementRecordAdminVo> data = service.page(1, -1, guildId, ownerErbanNo, erbanNo, partitionId, cycleDate);
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码
String excelName = URLEncoder.encode("公会紫晶结算清除记录", StandardCharsets.UTF_8);
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
EasyExcel.write(response.getOutputStream(), GuildMemberCrystalSettlementRecordAdminVo.class).sheet("公会紫晶结算清除记录").doWrite(data.getRecords());
}
}

View File

@@ -0,0 +1,166 @@
package com.accompany.admin.controller.guildsoviet;
import cn.hutool.core.date.DateUtil;
import com.accompany.admin.service.guildsoviet.GuildSovietAdminService;
import com.accompany.business.vo.guild.CycleDateVo;
import com.accompany.business.vo.guildsoviet.GuildMemberSovietAdminVo;
import com.accompany.business.vo.guildsoviet.GuildSovietAdminVo;
import com.accompany.business.vo.guildsoviet.RoomSovietAdminVo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.result.PageResult;
import com.accompany.common.utils.DateTimeUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Api(tags = "CIS公会/主播", value = "CIS公会/主播")
@RestController
@RequestMapping(value = "/admin/soviet")
public class GuildSovietAdminController {
@Autowired
private GuildSovietAdminService guildSovietAdminService;
@ApiOperation(value = "CIS公会钻石", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "guildId", value = "公会id", required = true, dataType = "Byte"),
@ApiImplicitParam(name = "erbanNo", value = "公会长ID", required = true, dataType = "Long"),
@ApiImplicitParam(name = "regionId", value = "公会国家", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "startDate", value = "开始时间", required = true, dataType = "String"),
@ApiImplicitParam(name = "endDate", value = "结束时间", required = true, dataType = "String"),
@ApiImplicitParam(name = "pageNo", value = "页码", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页条数", required = true, dataType = "Integer")
})
@GetMapping("/list")
public BusiResult<PageResult<GuildSovietAdminVo>> listGuildSovietAdminVo(@RequestParam(defaultValue = "32") Integer partitionId, Integer guildId, Long erbanNo, Integer regionId,
String startDate, String endDate, Integer pageNo, Integer pageSize) {
return BusiResult.success(guildSovietAdminService.listGuildSovietAdminVo(partitionId, guildId, erbanNo, regionId, startDate, endDate, pageNo, pageSize));
}
@ApiOperation(value = "CIS公会钻石-导出", httpMethod = "POST")
@PostMapping("/export")
public void exportGuildSovietAdminVo(HttpServletResponse response, @RequestParam(defaultValue = "32") Integer partitionId,
Integer guildId, Long erbanNo, Integer regionId, String startDate, String endDate) throws IOException {
Integer pageNo = -1;
Integer pageSize = -1;
PageResult<GuildSovietAdminVo> pageResult = guildSovietAdminService.listGuildSovietAdminVo(partitionId, guildId, erbanNo, regionId, startDate, endDate, pageNo, pageSize);
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码
String excelName = URLEncoder.encode("CIS公会钻石", StandardCharsets.UTF_8);
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
EasyExcel.write(response.getOutputStream(), GuildSovietAdminVo.class).sheet("CIS公会钻石").doWrite(pageResult.getRows());
}
@ApiOperation(value = "CIS公会成员钻石", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "erbanNo", value = "用户ID", required = true, dataType = "Long"),
@ApiImplicitParam(name = "regionId", value = "用户国家", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "guildId", value = "公会ID", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "ownerErbanNo", value = "公会长ID", required = true, dataType = "Long"),
@ApiImplicitParam(name = "startDate", value = "开始时间", required = true, dataType = "String"),
@ApiImplicitParam(name = "endDate", value = "结束时间", required = true, dataType = "String"),
@ApiImplicitParam(name = "enable", value = "0-无效1-有效", required = true, dataType = "Byte"),
@ApiImplicitParam(name = "pageNo", value = "页码", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页条数", required = true, dataType = "Integer")
})
@GetMapping("/memberList")
public BusiResult<PageResult<GuildMemberSovietAdminVo>> listGuildMemberSovietAdminVo(@RequestParam(defaultValue = "32") Integer partitionId,
Integer guildId, Long ownerErbanNo, Byte enable, Long erbanNo, Integer regionId,
String startDate, String endDate, Integer pageNo, Integer pageSize) {
return BusiResult.success(guildSovietAdminService.listGuildMemberSovietAdminVo(partitionId, enable, ownerErbanNo, guildId, erbanNo, regionId, startDate, endDate, pageNo, pageSize));
}
@ApiOperation(value = "CIS公会钻石-导出", httpMethod = "POST")
@PostMapping("/memberExport")
public void exportGuildMemberSovietAdminVo(HttpServletResponse response, @RequestParam(defaultValue = "32") Integer partitionId,
Integer guildId, Long ownerErbanNo, Byte enable,
Long erbanNo, Integer regionId, String startDate, String endDate) throws IOException {
Integer pageNo = -1;
Integer pageSize = -1;
PageResult<GuildMemberSovietAdminVo> pageResult = guildSovietAdminService.listGuildMemberSovietAdminVo(partitionId, enable, ownerErbanNo, guildId, erbanNo, regionId, startDate, endDate, pageNo, pageSize);
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码
String excelName = URLEncoder.encode("CIS公会成员钻石", StandardCharsets.UTF_8);
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
EasyExcel.write(response.getOutputStream(), GuildMemberSovietAdminVo.class).sheet("CIS公会成员钻石").doWrite(pageResult.getRows());
}
@ApiOperation(value = "CIS房主钻石-周期", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "erbanNo", value = "用户ID", required = true, dataType = "Long"),
@ApiImplicitParam(name = "regionId", value = "用户国家", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "cycleDate", value = "周期", required = true, dataType = "String"),
@ApiImplicitParam(name = "pageNo", value = "页码", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页条数", required = true, dataType = "Integer")
})
@GetMapping("/roomCycleDateList")
public List<CycleDateVo> roomCycleDateList() {
List<CycleDateVo> cycleDateVoList = new ArrayList<>();
Date now = new Date();
Date beginOfWeek = DateUtil.beginOfWeek(now);
Date endOfWeek = DateUtil.endOfWeek(now);
Date offectWeek = DateUtil.parseDateTime("2025-09-01 00:00:00");
while (offectWeek.before(beginOfWeek)) {
CycleDateVo cycleDateVo = new CycleDateVo();
cycleDateVo.setCycleDate(DateUtil.format(beginOfWeek, DateTimeUtil.dateFormatter));
cycleDateVo.setIntervalFormatter(DateUtil.format(beginOfWeek, DateTimeUtil.dateFormatter)
+ "~" + DateUtil.format(endOfWeek, DateTimeUtil.dateFormatter));
cycleDateVo.setStartDate(cycleDateVo.getCycleDate());
cycleDateVo.setEndDate(DateUtil.format(endOfWeek, DateTimeUtil.dateFormatter));
beginOfWeek = DateUtil.offsetWeek(beginOfWeek, -1);
endOfWeek = DateUtil.offsetWeek(endOfWeek, -1);
cycleDateVoList.add(cycleDateVo);
}
return cycleDateVoList;
}
@ApiOperation(value = "CIS房主钻石", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "erbanNo", value = "用户ID", required = true, dataType = "Long"),
@ApiImplicitParam(name = "regionId", value = "用户国家", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "cycleDate", value = "周期", required = true, dataType = "String"),
@ApiImplicitParam(name = "pageNo", value = "页码", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页条数", required = true, dataType = "Integer")
})
@GetMapping("/roomList")
public BusiResult<PageResult<RoomSovietAdminVo>> listRoomSovietAdminVo(@RequestParam(defaultValue = "32") Integer partitionId, Long erbanNo, Integer regionId,
String cycleDate, Integer pageNo, Integer pageSize) {
return BusiResult.success(guildSovietAdminService.listRoomSovietAdminVo(partitionId, erbanNo, regionId, cycleDate, pageNo, pageSize));
}
@ApiOperation(value = "CIS房主钻石-导出", httpMethod = "POST")
@PostMapping("/roomExport")
public void exportRoomSovietAdminVo(HttpServletResponse response, @RequestParam(defaultValue = "32") Integer partitionId,
Long erbanNo, Integer regionId, String cycleDate) throws IOException {
Integer pageNo = -1;
Integer pageSize = -1;
PageResult<RoomSovietAdminVo> pageResult = guildSovietAdminService.listRoomSovietAdminVo(partitionId, erbanNo, regionId, cycleDate, pageNo, pageSize);
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码
String excelName = URLEncoder.encode("CIS房主钻石", StandardCharsets.UTF_8);
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
EasyExcel.write(response.getOutputStream(), RoomSovietAdminVo.class).sheet("CIS房主钻石").doWrite(pageResult.getRows());
}
}

View File

@@ -0,0 +1,11 @@
package com.accompany.admin.controller.guildsoviet;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "CIS房间", value = "CIS房间")
@RestController
@RequestMapping(value = "/admin/roomSoviet")
public class RoomSovietAdminController {
}

View File

@@ -0,0 +1,86 @@
package com.accompany.admin.controller.lucky;
import com.accompany.admin.controller.BaseController;
import com.accompany.admin.service.lucky.Lucky24RecordAdminService;
import com.accompany.admin.vo.luckybag.Lucky24PersonalStatVo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.exception.ServiceException;
import com.accompany.sharding.vo.Lucky24PersonalStat;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@Api(tags = "幸运24")
@RestController
@RequestMapping("/admin/lucky24/followUserRecord")
public class Lucky24FollowUserRecordAdminController extends BaseController {
@Autowired
private Lucky24RecordAdminService service;
@ApiOperation("个人数据")
@ApiImplicitParams({
@ApiImplicitParam(value = "partitionId", name = "分区ID", required = true),
@ApiImplicitParam(value = "erbanNo", name = "用户ID"),
@ApiImplicitParam(value = "date", name = "开始日期", required = true),
@ApiImplicitParam(value = "userRechargeLevel", name = "用户充值等级", required = false),
@ApiImplicitParam(value = "poolType", name = "数组类型", required = true),
@ApiImplicitParam(value = "sortCol", name = "排序列", required = true),
@ApiImplicitParam(value = "sortOrder", name = "排序方式", required = true),
@ApiImplicitParam(value = "pageNo", name = "页号", required = true),
@ApiImplicitParam(value = "pageSize", name = "页长", required = true),
})
@GetMapping("/personal")
public BusiResult<Lucky24PersonalStatVo> personal(Integer partitionId, String date, Integer poolType,
String sortCol, String sortOrder,
int pageNo, int pageSize) {
if (null == partitionId || !StringUtils.hasText(date)) {
throw new ServiceException(BusiStatus.PARAMERROR);
}
Lucky24PersonalStatVo vo = service.getFollowUserPersonal(partitionId, date, null, poolType, sortCol, sortOrder, pageNo, pageSize);
return BusiResult.success(vo);
}
@SneakyThrows
@ApiOperation("导出个人数据")
@ApiImplicitParams({
@ApiImplicitParam(value = "partitionId", name = "分区ID", required = true),
@ApiImplicitParam(value = "erbanNo", name = "用户ID"),
@ApiImplicitParam(value = "date", name = "开始日期", required = true),
@ApiImplicitParam(value = "userRechargeLevel", name = "用户充值等级", required = false),
@ApiImplicitParam(value = "poolType", name = "数组类型", required = true),
@ApiImplicitParam(value = "sortCol", name = "排序列", required = true),
@ApiImplicitParam(value = "sortOrder", name = "排序方式", required = true)
})
@GetMapping("/personal/export")
public void exportPersonal(HttpServletResponse response,
Integer partitionId, String date, Integer poolType,
String sortCol, String sortOrder) {
if (null == partitionId || !StringUtils.hasText(date)) {
throw new ServiceException(BusiStatus.PARAMERROR);
}
Lucky24PersonalStatVo vo = service.getFollowUserPersonal(partitionId, date, null, poolType, sortCol, sortOrder, 1, -1);
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码
String excelName = URLEncoder.encode("幸运24关注用户个人数据", StandardCharsets.UTF_8);
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
EasyExcel.write(response.getOutputStream(), Lucky24PersonalStat.class).sheet("幸运24关注用户个人数据").doWrite(vo.getDataPage().getRows());
}
}

View File

@@ -10,6 +10,7 @@ import com.accompany.common.result.BusiResult;
import com.accompany.common.result.PageResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.exception.ServiceException;
import com.accompany.sharding.vo.Lucky24PersonalStat;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -17,6 +18,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
@@ -70,10 +72,38 @@ public class Lucky24RecordAdminController extends BaseController {
if (null == partitionId || (null == erbanNo && !StringUtils.hasText(date))) {
throw new ServiceException(BusiStatus.PARAMERROR);
}
Lucky24PersonalStatVo vo = service.getPersonal(partitionId, erbanNo, date, userRechargeLevel, poolType, sortCol, sortOrder, pageNo, pageSize);
Lucky24PersonalStatVo vo = service.getPersonal(partitionId, null, erbanNo, date, userRechargeLevel, poolType, sortCol, sortOrder, pageNo, pageSize);
return BusiResult.success(vo);
}
@SneakyThrows
@ApiOperation("导出个人数据")
@ApiImplicitParams({
@ApiImplicitParam(value = "partitionId", name = "分区ID", required = true),
@ApiImplicitParam(value = "erbanNo", name = "用户ID"),
@ApiImplicitParam(value = "date", name = "开始日期", required = true),
@ApiImplicitParam(value = "userRechargeLevel", name = "用户充值等级", required = false),
@ApiImplicitParam(value = "poolType", name = "数组类型", required = true),
@ApiImplicitParam(value = "sortCol", name = "排序列", required = true),
@ApiImplicitParam(value = "sortOrder", name = "排序方式", required = true)
})
@GetMapping("/personal/export")
public void exportPersonal(HttpServletResponse response,
Integer partitionId, Long erbanNo, String date, String userRechargeLevel, Integer poolType,
String sortCol, String sortOrder) {
if (null == partitionId || (null == erbanNo && !StringUtils.hasText(date))) {
throw new ServiceException(BusiStatus.PARAMERROR);
}
Lucky24PersonalStatVo vo = service.getPersonal(partitionId, null, erbanNo, date, userRechargeLevel, poolType, sortCol, sortOrder, 1, -1);
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码
String excelName = URLEncoder.encode("幸运24个人数据", StandardCharsets.UTF_8);
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
EasyExcel.write(response.getOutputStream(), Lucky24PersonalStat.class).sheet("幸运24个人数据").doWrite(vo.getDataPage().getRows());
}
@ApiOperation("运营数据")
@ApiImplicitParams({
@ApiImplicitParam(value = "erbanNo", name = "用户ID", required = true),

View File

@@ -0,0 +1,112 @@
package com.accompany.admin.controller.miniGame;
import com.accompany.admin.service.miniGame.MiniGameForSudAdminService;
import com.accompany.admin.vo.miniGame.MiniGameForSudAdminDetailVo;
import com.accompany.admin.vo.miniGame.MiniGameForSudAdminStatsVo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.exception.AdminServiceException;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.List;
@Slf4j
@Api(tags = "休闲游戏时长统计")
@RestController
@RequestMapping("/admin/minigame/sud/stat")
public class MiniGameForSudAdminController {
@Autowired
private MiniGameForSudAdminService miniGameForSudAdminService;
@ApiOperation("获取休闲游戏时长统计列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "gameId", value = "游戏ID", required = false, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "month", value = "月份(格式: yyyy-MM)", required = true, dataType = "String", paramType = "query")
})
@GetMapping("/listStat")
public BusiResult<List<MiniGameForSudAdminStatsVo>> listStat(
String gameId,
String month) {
if (!StringUtils.hasText(month)){
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
List<MiniGameForSudAdminStatsVo> result = miniGameForSudAdminService.listStat(gameId, month);
return BusiResult.success(result);
}
@SneakyThrows
@ApiOperation("导出休闲游戏时长统计")
@ApiImplicitParams({
@ApiImplicitParam(name = "gameId", value = "游戏ID", required = false, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "month", value = "月份(格式: yyyy-MM)", required = true, dataType = "String", paramType = "query")
})
@GetMapping("/exportStat")
public void exportStat(
String gameId,
String month,
HttpServletResponse response) {
if (!StringUtils.hasText(month)){
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
List<MiniGameForSudAdminStatsVo> dataList = miniGameForSudAdminService.listStat(gameId, month);
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("休闲游戏时长统计", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), MiniGameForSudAdminStatsVo.class).sheet("休闲游戏时长统计").doWrite(dataList);
}
@ApiOperation("获取休闲游戏时长明细列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "gameId", value = "游戏ID", required = true, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "month", value = "月份(格式: yyyy-MM)", required = true, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "page", value = "页码", required = true, dataType = "Integer", paramType = "query"),
@ApiImplicitParam(name = "size", value = "每页大小", required = true, dataType = "Integer", paramType = "query")
})
@GetMapping("/pageDetail")
public BusiResult<Page<MiniGameForSudAdminDetailVo>> pageDetail(
String gameId,
String month,
@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer size) {
Page<MiniGameForSudAdminDetailVo> result = miniGameForSudAdminService.pageDetail(gameId, month, page, size);
return BusiResult.success(result);
}
@SneakyThrows
@ApiOperation("导出休闲游戏时长明细")
@ApiImplicitParams({
@ApiImplicitParam(name = "gameId", value = "游戏ID", required = true, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "month", value = "月份(格式: yyyy-MM)", required = true, dataType = "String", paramType = "query")
})
@GetMapping("/exportDetail")
public void exportDetail(
String gameId,
String month,
HttpServletResponse response) {
if (null == gameId || !StringUtils.hasText(month)) {
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
Page<MiniGameForSudAdminDetailVo> page = miniGameForSudAdminService.pageDetail(gameId, month, 1, -1);
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("休闲游戏时长明细", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), MiniGameForSudAdminDetailVo.class).sheet("休闲游戏时长明细").doWrite(page.getRecords());
}
}

View File

@@ -23,9 +23,9 @@ public class PersonalCenterAdminController extends BaseController {
@ApiOperation("个人中心功能列表")
@GetMapping(value = "/list")
@ResponseBody
public BusiResult getList(Integer pageNum, Integer pageSize, Integer centerId){
public BusiResult getList(Integer pageNum, Integer pageSize, Integer centerId, Integer partitionId){
JSONObject jsonObject = new JSONObject();
IPage pageInfo = personalCenterAdminService.getList(pageNum, pageSize, centerId);
IPage pageInfo = personalCenterAdminService.getList(pageNum, pageSize, centerId, partitionId);
jsonObject.put("total",pageInfo.getTotal());
jsonObject.put("rows", pageInfo.getRecords());
return new BusiResult(jsonObject);

View File

@@ -8,13 +8,11 @@ import com.accompany.admin.vo.OfficialGoldAllRecordVo;
import com.accompany.admin.vo.OfficialGoldRecordVo;
import com.accompany.admin.vo.UsersVo;
import com.accompany.business.constant.OfficalSendTypeEnum;
import com.accompany.business.service.purse.UserPurseService;
import com.accompany.common.result.BusiResult;
import com.accompany.common.result.PageResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.BlankUtil;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.BillObjTypeEnum;
import com.accompany.core.exception.ServiceException;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
@@ -51,8 +49,6 @@ public class GoldCoinController extends BaseController {
private OfficialGoldRecordService officialGoldRecordService;
@Autowired
private AdminLogService adminLogService;
@Autowired
private UserPurseService userPurseService;
@RequestMapping("/listType")
@ResponseBody
@@ -70,17 +66,16 @@ public class GoldCoinController extends BaseController {
* @param num 赠送数量
* @return
*/
@RequestMapping("/give")
@RequestMapping("/operate")
@ResponseBody
public BusiResult<Void> giveGoldCoin(String ernos, OfficalSendTypeEnum type, BigDecimal num, BigDecimal actualAmount, String remark, Integer busType) throws Exception {
public BusiResult<Void> operate(String ernos, OfficalSendTypeEnum type, Integer busType, BigDecimal num, String remark) {
if (BlankUtil.isBlank(ernos) || num.compareTo(BigDecimal.ZERO) <= 0) {
throw new ServiceException(BusiStatus.PARAMETERILLEGAL);
}
int adminId = getAdminId();
officialGoldRecordService.handle(ernos, type, num, adminId, actualAmount, remark, busType);
adminLogService.insertLog(adminId, getClass().getCanonicalName(), "giveGoldCoin"
, "params===>>ernos:" + ernos + ", type:" + type + ", num:" + num + ", actualAmount:" + actualAmount
+ ", remark:" + remark);
officialGoldRecordService.handle(ernos, type, num, adminId, remark, busType);
adminLogService.insertLog(adminId, getClass().getCanonicalName(), "operateGoldCoin"
, "params===>>ernos:" + ernos + ", type:" + type + ", num:" + num + ", remark:" + remark);
return BusiResult.success();
}
@@ -176,48 +171,6 @@ public class GoldCoinController extends BaseController {
return workbook;
}
@RequestMapping(value = "/return", method = RequestMethod.POST)
@ResponseBody
public BusiResult returnGoldNum(String uids, String golds, String diamonds) {
try {
String[] uid = uids.trim().split(",");
String[] gold = golds.trim().split(",");
String[] diamond = diamonds.trim().split(",");
String errorUids = "";
if (uid.length != gold.length || uid.length != diamond.length || gold.length != diamond.length) {
return new BusiResult(BusiStatus.PARAMETERILLEGAL);
}
for (int i = 0; i < uid.length; i++) {
try {
userPurseService.addDiamond(Long.parseLong(uid[i]), Double.parseDouble(gold[i]), BillObjTypeEnum.OFFICIAL_GOLD_ADD);
} catch (Exception e) {
errorUids = errorUids + ",";
}
}
return new BusiResult(BusiStatus.SUCCESS, errorUids);
} catch (Exception e) {
logger.error("赠送失败");
return new BusiResult(BusiStatus.BUSIERROR);
}
}
/**
* 用户金币清除
*
* @param erBanNos
* @param num
* @return
*/
@ApiOperation("用户金币清除")
@PostMapping("clearUserGold")
@ResponseBody
public BusiResult<Void> clearUserGold(String erBanNos, BigDecimal num) {
int adminId = getAdminId();
officialGoldRecordService.clearUserGold(erBanNos, num, adminId);
adminLogService.insertLog(adminId, getClass().getCanonicalName(), "clearUserGold", "params===>>erBanNos:" + erBanNos + ",num:" + num);
return BusiResult.success();
}
@ApiOperation(value = "转赠记录-全平台", httpMethod = "GET")
@RequestMapping("/recordAll")

View File

@@ -33,10 +33,10 @@ public class AdminResourceController {
@ApiImplicitParam(name = "type", value = "资源类型", required = true)
@ApiOperation("分页列表")
@GetMapping("page")
public BusiResult<IPage<Resource>> page(@RequestParam("type") Integer type,
public BusiResult<IPage<Resource>> page(@RequestParam("type") Integer type, Integer panelType, String code,
@RequestParam(value = "partitionId", required = false) Integer partitionId,
PageReq req) {
return BusiResult.success(adminResourceService.page(type, partitionId, req.getPage(), req.getPageSize()));
return BusiResult.success(adminResourceService.page(type, panelType, code, partitionId, req.getPage(), req.getPageSize()));
}
/**

View File

@@ -24,7 +24,7 @@ import java.nio.charset.StandardCharsets;
@RestController
@RequestMapping("/admin/roomDayDiamond")
public class RoomDayDiamondRewardController extends BaseController {
public class RoomDayDiamondRewardAdminController extends BaseController {
@Autowired
private RoomDayDiamondRewardRecordService roomDayDiamondRewardRecordService;
@@ -35,7 +35,7 @@ public class RoomDayDiamondRewardController extends BaseController {
@ApiImplicitParam(name = "erbanNo", value = "用户id", required = false, dataType = "long"),
@ApiImplicitParam(name = "ownerErbanNo", value = "公会长ID", required = false, dataType = "long"),
@ApiImplicitParam(name = "guildId", value = "用户id", required = false, dataType = "int"),
@ApiImplicitParam(name = "status", value = "发放状态:-1:全部,0:未发放1已经发放", required = false, dataType = "long"),
@ApiImplicitParam(name = "status", value = "发放状态:-1:全部,0:未发放1已经发放2当天不可操作", required = false, dataType = "long"),
})
@GetMapping("/list")
public BusiResult<PageResult<RoomDayDiamondRewardRecordVo>> list(Integer regionId, Long erbanNo, Long ownerErbanNo, Integer guildId, Integer status, BasePageParams pageParams) {
@@ -51,7 +51,7 @@ public class RoomDayDiamondRewardController extends BaseController {
@ApiImplicitParam(name = "erbanNo", value = "用户id", required = false, dataType = "long"),
@ApiImplicitParam(name = "ownerErbanNo", value = "ownerErbanNo", required = false, dataType = "long"),
@ApiImplicitParam(name = "guildId", value = "用户id", required = false, dataType = "int"),
@ApiImplicitParam(name = "status", value = "发放状态:-1:全部,0:未发放1已经发放", required = false, dataType = "long"),
@ApiImplicitParam(name = "status", value = "发放状态:-1:全部,0:未发放1已经发放2当天不可操作", required = false, dataType = "long"),
})
@GetMapping("/export")
public void list(HttpServletResponse response, Integer regionId, Long erbanNo, Long ownerErbanNo, Integer guildId, Integer status, BasePageParams pageParams) throws IOException {
@@ -69,7 +69,7 @@ public class RoomDayDiamondRewardController extends BaseController {
@ApiOperation(value = "每日钻石流水列表-发放", httpMethod = "POST")
@PostMapping("/send")
public BusiResult send(Long id) {
public BusiResult send(Long id) throws InterruptedException {
return roomDayDiamondRewardRecordService.send(id, getAdminId());
}
}

View File

@@ -49,7 +49,7 @@ public class AppVersionAdminController extends BaseController {
private AppVersionAdminService appVersionAdminService;
@Autowired
private TencentCosUploadService uploadService;
@Resource(name = "bizExecutor")
@Resource(name = "biz-executor")
private ThreadPoolExecutor bizExecutor;
@Autowired
private AdminUserService adminUserService;

View File

@@ -46,7 +46,7 @@ public class I18nMessageAdminController {
@ApiOperation("保存")
@PostMapping("save")
public BusiResult<Void> save(I18nMessageAdminVo param) {
i18nMessageAdminService.save(param.getKey(), param.getZh(), param.getEn(), param.getAr(), param.getTr(), param.getPt());
i18nMessageAdminService.save(param.getKey(), param.getZh(), param.getEn(), param.getAr(), param.getTr(), param.getPt(), param.getEs(), param.getRu(), param.getUz());
return BusiResult.success();
}
}

View File

@@ -4,6 +4,7 @@ import com.accompany.admin.controller.BaseController;
import com.accompany.admin.service.user.ChargeRecordAdminService;
import com.accompany.admin.vo.ChargeRecordAdminVo;
import com.accompany.admin.vo.ChargeRecordCountryVo;
import com.accompany.admin.vo.ChargeRecordPartitionRegionVo;
import com.accompany.admin.vo.ChargeRecordPartitionVo;
import com.accompany.business.service.user.UsersService;
import com.accompany.common.constant.Constant;
@@ -295,9 +296,11 @@ public class ChargeRecordAdminController extends BaseController {
*/
@RequestMapping(value = "/list")
public BusiResult<PageResult<ChargeRecordAdminVo>> chargeRecordList(Integer pageNumber, Integer pageSize, Long erbanNo, String channel, Date startTime,
Date endTime, Integer status, Boolean newUser, String appChannel, Integer regionId) {
Date endTime, Integer status, Boolean newUser, String appChannel, Integer regionId,
String chargeRecordId,
String pingxxChargeId) {
PageResult<ChargeRecordAdminVo> pageInfo = chargeRecordAdminService.chargeRecordList(pageNumber, pageSize, erbanNo, channel, startTime,
endTime, status, newUser, appChannel, true, regionId);
endTime, status, newUser, appChannel, true, regionId, chargeRecordId, pingxxChargeId);
return BusiResult.success(pageInfo);
}
@@ -307,13 +310,16 @@ public class ChargeRecordAdminController extends BaseController {
*/
@RequestMapping(value = "/exportChargeDetail", method = RequestMethod.POST)
public void exportChargeDetail(HttpServletResponse response, Long erbanNo, String channel,
Date startTime, Date endTime, Integer status, Boolean newUser, String appChannel, Integer regionId) throws IOException {
Date startTime, Date endTime, Integer status, Boolean newUser, String appChannel, Integer regionId,
String chargeRecordId,
String pingxxChargeId) throws IOException {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码
String excelName = URLEncoder.encode("充值明细", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
chargeRecordAdminService.exportChargeRecordList(response.getOutputStream(), erbanNo, channel, startTime, endTime, status, newUser, appChannel, regionId);
chargeRecordAdminService.exportChargeRecordList(response.getOutputStream(), erbanNo, channel, startTime,
endTime, status, newUser, appChannel, regionId, chargeRecordId, pingxxChargeId);
}
@RequestMapping(value = "/countryDetail")
@@ -336,6 +342,12 @@ public class ChargeRecordAdminController extends BaseController {
return chargeRecordAdminService.getPartitionGoldDetail(partitionId, beginDate, endDate);
}
@RequestMapping(value = "/partitionRegionDetail")
public BusiResult<List<ChargeRecordPartitionRegionVo>> partitionRegionDetail(Integer partitionId, String beginDate, String channel) {
List<ChargeRecordPartitionRegionVo> chargeRecordPartitionRegionVos = chargeRecordAdminService.partitionRegionGoldDetail(partitionId, beginDate, channel);
return BusiResult.success(chargeRecordPartitionRegionVos);
}
@RequestMapping(value = "/exportPartitionDetail")
public void exportPartitionDetail(HttpServletResponse response, Integer partitionId, String beginDate, String endDate) throws IOException {
response.setContentType("application/vnd.ms-excel");

View File

@@ -3,6 +3,7 @@ package com.accompany.admin.controller.user;
import cn.hutool.core.util.StrUtil;
import com.accompany.admin.controller.BaseController;
import com.accompany.admin.service.UserCheckAdminService;
import com.accompany.admin.service.system.AdminPartitionService;
import com.accompany.admin.vo.UsersAdminVo;
import com.accompany.business.model.PrivatePhoto;
import com.accompany.business.service.user.PrivatePhotoService;
@@ -10,6 +11,7 @@ import com.accompany.common.constant.Constant;
import com.accompany.common.result.BusiResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.tencent.cos.TencentCosUploadService;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.model.RegionInfo;
import com.accompany.core.model.Users;
import com.accompany.core.model.phone.AreaInfo;
@@ -19,7 +21,6 @@ import com.accompany.core.service.phone.AreaInfoService;
import com.accompany.core.service.region.RegionInfoService;
import com.accompany.core.vo.UserVo;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -27,7 +28,6 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/admin/userCheckAdmin")
@@ -48,6 +48,8 @@ public class UserCheckAdminController extends BaseController {
private RegionInfoService regionInfoService;
@Autowired
private AreaInfoService areaInfoService;
@Autowired
private AdminPartitionService adminPartitionService;
@GetMapping("/list")
public BusiResult<List<UsersAdminVo>> getList(String erbanNoList, Integer type) {
@@ -82,6 +84,17 @@ public class UserCheckAdminController extends BaseController {
return BusiResult.success(usersAdminVo);
}
@RequestMapping("/getUser")
@ResponseBody
public BusiResult<UserVo> getUser(Long erbanNo) {
UserVo userVo = userCheckAdminService.getUser(erbanNo);
List<Integer> partitionIds = adminPartitionService.getAllPartitionId(getAdminId());
if (CollectionUtils.isNotEmpty(partitionIds) && !partitionIds.contains(userVo.getPartitionId())) {
throw new AdminServiceException("PARTITION ERROR");
}
return BusiResult.success(userVo);
}
@RequestMapping("/saveUser")
@ResponseBody
public BusiResult<Users> saveUser(String nick, Integer gender, String avatar, Long uid, String phoneAreaCode, String phone, String email,

View File

@@ -2,17 +2,22 @@ package com.accompany.admin.controller.vip;
import com.accompany.admin.controller.BaseController;
import com.accompany.admin.service.system.AdminLogService;
import com.accompany.admin.service.system.AdminPartitionService;
import com.accompany.admin.service.vip.VipSendAdminService;
import com.accompany.admin.vo.vip.VipSendRecordVo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.result.PageResult;
import com.accompany.core.exception.AdminServiceException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "赠送vip")
@RequestMapping("/vipSend")
@@ -23,6 +28,8 @@ public class VipSendAdminController extends BaseController {
private VipSendAdminService vipSendService;
@Autowired
private AdminLogService adminLogService;
@Autowired
private AdminPartitionService adminPartitionService;
@ApiOperation("分页获取赠送记录")
@ApiImplicitParams({
@@ -32,8 +39,12 @@ public class VipSendAdminController extends BaseController {
})
@GetMapping("/pageRecord")
public BusiResult<PageResult<VipSendRecordVo>> pageRecord(Long erbanNo,
int current, int size) {
Page<VipSendRecordVo> pageInfo = vipSendService.pageRecord(erbanNo, current, size, null);
int current, int size, Integer ads) {
Integer adminId = null;
if (ads != null && ads == 1) {
adminId = getAdminId();
}
Page<VipSendRecordVo> pageInfo = vipSendService.pageRecord(erbanNo, current, size, adminId);
return BusiResult.success(new PageResult<>(pageInfo));
}
@@ -47,7 +58,24 @@ public class VipSendAdminController extends BaseController {
public BusiResult<Void> pageRecord(long uid, int vipLevel, Integer days) {
int adminId = getAdminId();
adminLogService.insertLog(adminId, getClass().getCanonicalName(),"send vip","params===>>uid:"+uid+",===>>vipLevel:"+vipLevel+",===>>days:"+days );
vipSendService.send(uid, vipLevel, adminId, days);
vipSendService.send(uid, vipLevel, adminId, days, Boolean.FALSE);
return BusiResult.success();
}
@ApiOperation("赠送-客服")
@ApiImplicitParams({
@ApiImplicitParam(name = "uid", value = "uid", required = true),
@ApiImplicitParam(name = "vipLevel", value = "vip等级", required = true),
@ApiImplicitParam(name = "days", value = "days", required = true)
})
@PostMapping("/customerSend")
public BusiResult<Void> customerSend(long uid, int vipLevel, Integer days) {
if (vipLevel > 5) {
throw new AdminServiceException("赠送vip等级不能大于5");
}
int adminId = getAdminId();
adminLogService.insertLog(adminId, getClass().getCanonicalName(),"customerSend vip","params===>>uid:"+uid+",===>>vipLevel:"+vipLevel+",===>>days:"+days );
vipSendService.send(uid, vipLevel, adminId, days, Boolean.TRUE);
return BusiResult.success();
}

View File

@@ -19,7 +19,7 @@ spring:
nacos:
config:
server-addr: 124.156.164.187:8848
namespace: 5edc3246-3e69-4be5-a32a-273f0a09ddf6
namespace: aeb633ac-d6eb-4d3e-b40d-80b5458064b0
file-extension: yml
shared-configs:
- data-id: application.yml
@@ -30,7 +30,7 @@ spring:
refresh: true
- data-id: sysconf.yml
refresh: true
- data-id: threadpool.yml
- data-id: dtp.yml
refresh: true
---
@@ -42,7 +42,7 @@ spring:
nacos:
config:
server-addr: 124.156.164.187:8848
namespace: 5edc3246-3e69-4be5-a32a-273f0a09ddf6
namespace: aeb633ac-d6eb-4d3e-b40d-80b5458064b0
file-extension: yml
shared-configs:
- data-id: application.yml
@@ -53,7 +53,7 @@ spring:
refresh: true
- data-id: sysconf.yml
refresh: true
- data-id: threadpool.yml
- data-id: dtp.yml
refresh: true
- data-id: database.yml
refresh: true
@@ -67,7 +67,7 @@ spring:
nacos:
config:
server-addr: 172.19.16.15:8848
namespace: 0c9bf047-19ca-4969-bf5d-bbc1f86b501a
namespace: aeb633ac-d6eb-4d3e-b40d-80b5458064b0
file-extension: yml
shared-configs:
- data-id: application.yml
@@ -78,7 +78,7 @@ spring:
refresh: true
- data-id: sysconf.yml
refresh: true
- data-id: threadpool.yml
- data-id: dtp.yml
refresh: true
- data-id: database.yml
refresh: true

View File

@@ -7,7 +7,7 @@
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="/data/java/weblog/accompany-admin"/>
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%X{trace_uuid}] %-5level %logger{36} %line - %msg%n" />
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%X{traceId}] %-5level %logger{36} %line - %msg%n" />
<!--写入日志到控制台的appender,用默认的,但是要去掉charset,否则windows下tomcat下乱码-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

View File

@@ -1,6 +1,6 @@
package com.accompany.flowteam.admin;
import cn.hippo4j.core.enable.EnableDynamicThreadPool;
import org.dromara.dynamictp.spring.annotation.EnableDynamicTp;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
@@ -14,7 +14,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
* admin
*
*/
@EnableDynamicThreadPool
@EnableDynamicTp
@SpringBootApplication
@ComponentScan({"com.accompany","com.xuanyin"})
@EnableScheduling

View File

@@ -19,7 +19,7 @@ spring:
nacos:
config:
server-addr: 124.156.164.187:8848
namespace: 5edc3246-3e69-4be5-a32a-273f0a09ddf6
namespace: aeb633ac-d6eb-4d3e-b40d-80b5458064b0
file-extension: yml
shared-configs:
- data-id: application.yml
@@ -30,7 +30,7 @@ spring:
refresh: true
- data-id: sysconf.yml
refresh: true
- data-id: threadpool.yml
- data-id: dtp.yml
refresh: true
---
@@ -42,7 +42,7 @@ spring:
nacos:
config:
server-addr: 124.156.164.187:8848
namespace: 5edc3246-3e69-4be5-a32a-273f0a09ddf6
namespace: aeb633ac-d6eb-4d3e-b40d-80b5458064b0
file-extension: yml
shared-configs:
- data-id: application.yml
@@ -53,7 +53,7 @@ spring:
refresh: true
- data-id: sysconf.yml
refresh: true
- data-id: threadpool.yml
- data-id: dtp.yml
refresh: true
- data-id: database.yml
refresh: true
@@ -66,7 +66,7 @@ spring:
nacos:
config:
server-addr: 172.19.16.15:8848
namespace: 0c9bf047-19ca-4969-bf5d-bbc1f86b501a
namespace: aeb633ac-d6eb-4d3e-b40d-80b5458064b0
file-extension: yml
shared-configs:
- data-id: application.yml
@@ -77,7 +77,7 @@ spring:
refresh: true
- data-id: sysconf.yml
refresh: true
- data-id: threadpool.yml
- data-id: dtp.yml
refresh: true
- data-id: database.yml
refresh: true

View File

@@ -76,4 +76,6 @@ public interface UsersMapper {
List<Users> listUid(@Param("start") Integer start, @Param("len") Integer len);
Integer recharegeCount(@Param("uid") Long uid);
}

View File

@@ -22,7 +22,6 @@ import com.google.gson.reflect.TypeToken;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
@@ -523,4 +522,9 @@ public class UsersBaseService extends BaseService {
deleteUserRelateCache(uid.toString());
}
public Integer rechargeUserCount(Long uid) {
return usersMapper.recharegeCount(uid);
}
}

View File

@@ -140,7 +140,7 @@ public class I18NMessageSourceUtil {
@SneakyThrows
public static void deserialization(Object obj, List<String> fieldNames) {
MessageI18nNacosService messageI18nNacosService = SpringContextHolder.getBean(MessageI18nNacosService.class);
ThreadPoolExecutor bizExecutor = SpringContextHolder.getBean(ThreadPoolExecutor.class);
ThreadPoolExecutor bizExecutor = SpringContextHolder.getBean("biz-executor");
Class<?> clazz = obj.getClass();
Set<Locale> refreshLocalSet = new HashSet<>();
for (Field field : clazz.getDeclaredFields()) {

View File

@@ -1082,4 +1082,8 @@
/* SHARDINGSPHERE_HINT: WRITE_ROUTE_ONLY=true */
select uid, partition_id partitionId from users order by uid asc limit #{start},#{len}
</select>
<select id="recharegeCount" resultType="java.lang.Integer">
select ifnull(count(1),0) from recharge_user where uid = #{uid}
</select>
</mapper>

View File

@@ -15,9 +15,20 @@ public class Attach {
private String message;
private Object data;
//用于携带给客户端用于区分同一组first和second的消息是单房间消息还是轮询全服房间遍历发送的单房间消息
//已使用公聊房机制解决轮询全服房间发送消息的云信im限频问题
private Integer allRoomMsg;
public Attach(int first, int second, Object data) {
this.first = first;
this.second = second;
this.data = data;
}
public Attach(int first, int second, Object data, int allRoomMsg) {
this.first = first;
this.second = second;
this.data = data;
this.allRoomMsg = allRoomMsg;
}
}

View File

@@ -978,6 +978,19 @@ public enum BusiStatus {
GUILD_H5_INVITE_EMAIL_ALREADY_BOUND(33001, "该邮箱地址不是新的"),
GUILD_H5_INVITE_JOIN_GUILD_NOT_EXIST(33002, "邀请人公会不存在"),
DAILY_TASK_LIMIT(500, "ACCESS DENIED"),
ROOM_DAY_DIAMOND_REWARD_RECV_RECORD_EXIST(500, "RECEIVED"),
ROOM_DAY_DIAMOND_REWARD_SEND(500, "SEND"),
DAILY_TASK_RECEIVE_END(500, "RECEIVED EXPIRE"),
SUPER_BLOCK_NOAUTHORITY(500, "NOAUTHORITY OPERATE"),
SUPER_BLOCK_MUST_BLOCK_REASON(500, "MUST SIGN BLOCK REASON"),
DAILY_TASK_REWARD_ERROR(500, "DAILY TASK REWARD ERROR"),
RECHARGE_REGION_GIVE_LIMIT(500,"你暂时还未开启该区域业务"),
RECHARGE_REGION_SALARY_LIMIT(500,"该代理暂不代理该区域业务"),
ROOM_DAY_DIAMOND_REWARD_DATE_CHECK(500, "TODAY NOT ALLOW RECEIVE"),
GUILD_USD_OPT_LIMIT(500, "该交易类型已达到本周交易次数上限"),
GUILD_MEMBER_REMOVE_LIMIT(500, "仅在每个月1号、2号、3号才可以移除主播"),
H5_RECHARGE_USER_NOT_OPEN(1404, "Your account has not enabled this function yet, so it cannot be used."),
;
private final int value;

View File

@@ -7,7 +7,7 @@ import java.util.Set;
public class ImageFileUtils {
// 定义一个包含常见静态图片扩展名的数组
private static final Set<String> imageFileExtensionSet = Set.of("jpg", "jpeg", "png", "gif", "svga");
private static final Set<String> imageFileExtensionSet = Set.of("jpg", "jpeg", "png", "gif", "svga", "mp4");
public static boolean isImageFile(String url) {
String extension = StringUtils.substringAfterLast(url, ".");
@@ -19,4 +19,9 @@ public class ImageFileUtils {
return "gif".equals(extension);
}
public static boolean isMp4(String url){
String extension = StringUtils.substringAfterLast(url, ".");
return "mp4".equals(extension);
}
}

View File

@@ -84,24 +84,30 @@
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>cn.hippo4j</groupId>
<artifactId>hippo4j-config-spring-boot-starter</artifactId>
<version>${hippo4j-config-spring-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>cn.hippo4j</groupId>
<artifactId>hippo4j-spring-boot-starter-monitor-micrometer</artifactId>
<version>${hippo4j-config-spring-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>${rocketmq-spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.dromara.dynamictp</groupId>
<artifactId>dynamic-tp-spring-cloud-starter-nacos</artifactId>
<version>${dynamic-tp.version}</version>
</dependency>
<dependency>
<groupId>org.dromara.dynamictp</groupId>
<artifactId>dynamic-tp-spring-boot-starter-adapter-webserver</artifactId>
<version>${dynamic-tp.version}</version>
</dependency>
<dependency>
<groupId>org.dromara.dynamictp</groupId>
<artifactId>dynamic-tp-spring-boot-starter-adapter-rocketmq</artifactId>
<version>${dynamic-tp.version}</version>
</dependency>
</dependencies>

View File

@@ -29,7 +29,7 @@ import java.util.stream.Collectors;
@Component
public class ApiRequestLogAspect {
public static final String TRACE_UUID = "trace_uuid";
public static final String TRACE_ID = "traceId";
@Autowired
private ObjectMapper objectMapper;
@@ -56,7 +56,8 @@ public class ApiRequestLogAspect {
return joinPoint.proceed();
}
MDC.put(TRACE_UUID, UUID.randomUUID().toString());
String requestUuid = UUID.randomUUID().toString();
MDC.put(TRACE_ID, requestUuid);
requestInfo(joinPoint, request, requestURI);
@@ -79,7 +80,7 @@ public class ApiRequestLogAspect {
log.info("====== Api called end ====== [URL] {} [CostTime] {} ms! [RESULT] {}", requestURI, (end - start), resultStr);
MDC.remove(TRACE_UUID);
MDC.remove(TRACE_ID);
}
}

View File

@@ -0,0 +1,28 @@
package com.accompany.common.config;
import com.accompany.core.base.SpringContextHolder;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import java.util.concurrent.Executor;
@Slf4j
@EnableAsync
@Configuration
public class ExecutorConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
return SpringContextHolder.getBean("async-executor");
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return (ex,method,params)->log.error("@Async 执行异步方法{} 错误,参数{}", method, JSON.toJSONString(params), ex);
}
}

View File

@@ -32,4 +32,6 @@ public class TencentCosConfig {
private Boolean accelerate = false;
private String gifJobTemplateId;
}

View File

@@ -1,6 +1,11 @@
package com.accompany.common.constant;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
/**
* @Author: chucheng
* @Date: 2019/7/25 14:41
@@ -8,12 +13,17 @@ package com.accompany.common.constant;
*/
public enum AppEnum {
youmi("youmi", "molistar ios马甲包", "api.hfighting.com", "image.molistar.xyz", "api.hfighting.com", "molistar"),
molistar("molistar", "molistar google马甲包", "api.molistar.xyz", "image.molistar.xyz", "api.molistar.xyz", "molistar"),
other("other", "other", "api.pekolive.com", "image.pekolive.com", "api.pekolive.com", "pekolive", Map.of()),
youmi("youmi", "molistar ios马甲包", "api.hfighting.com", "image.molistar.xyz", "api.hfighting.com", "molistar",
Map.of(Pattern.compile("baishun.minigame.*"), "baishun.minigame.moliparty.com")),
molistar("molistar", "molistar google马甲包", "api.molistar.xyz", "image.molistar.xyz", "api.molistar.xyz", "molistar",
Map.of(Pattern.compile("baishun.minigame.*"), "baishun.minigame.molistar.xyz")),
moliparty("MoliParty", "moliparty google马甲包", "api.moliparty.com", "cdn.moliparty.com", "api.moliparty.com", "moliparty",
Map.of(Pattern.compile("baishun.minigame.*"), "baishun.minigame.moliparty.com")),
;
public static AppEnum getCurApp(){
return AppEnum.molistar;
return AppEnum.moliparty;
}
private String value;
@@ -24,17 +34,20 @@ public enum AppEnum {
private String resourceDomain;
private String h5Domain;
private String h5RootDir;
private Map<Pattern, String> patternMap;
AppEnum(String value, String desc,
String apiDomain,
String resourceDomain,
String h5Domain, String h5RootDir) {
String h5Domain, String h5RootDir,
Map<Pattern, String> patternMap) {
this.value = value;
this.desc = desc;
this.apiDomain = apiDomain;
this.resourceDomain = resourceDomain;
this.h5Domain = h5Domain;
this.h5RootDir = h5RootDir;
this.patternMap = patternMap;
}
public String getValue() {
@@ -60,4 +73,20 @@ public enum AppEnum {
public String getH5RootDir() {
return h5RootDir;
}
public Map<Pattern, String> getPatternMap() {
return patternMap;
}
public static List<AppEnum> getOtherAppEnums(AppEnum currentApp) {
List<AppEnum> otherApps = new ArrayList<>();
// 遍历所有枚举,排除传入的 app 对应的枚举
for (AppEnum app : AppEnum.values()) {
if (!app.equals(currentApp)) {
otherApps.add(app);
}
}
return otherApps;
}
}

View File

@@ -39,13 +39,14 @@ public class Constant {
*/
public static class OfficialType {
public static Byte interSendDiamond = 12; // 官方直接送钻石
public static Byte actReward = 17; // 活动奖励
public static Byte chargeByCompanyAccount = 20; // 打款至公账充值金币
public static Byte officalDiamondReduce = 51; // 官方钻石支出
public static Byte clearUserGold = 61; //用户金币清除
public static Byte interSendGold = 62; // 官方直接送钻石
public static Byte miunsGuildUsd = 63; // 官方直接消除薪资
public static Byte plusGuildUsd = 64; // 官方直接赠送薪资
public static Byte miunsGuildCrystal = 65; // 官方直接消除薪资
public static Byte plusGuildCrystal = 66; // 官方直接赠送薪资
}
public static class AppVersion {
@@ -1385,6 +1386,20 @@ public class Constant {
public static final String USER_SET_LIMIT_CONFIG = "user_set_limit_config";
public static final String OFFICIAL_GOLD_ROLE_LIMIT_CONFIG = "official_gold_role_limit_config";
public static final String GUILD_USD_PROD_TAB_SHOW_CONFIG = "guild_usd_prod_tab_show_config";
public static final String GUILD_WEEK_LEVEL_R_FILTER = "guild_week_level_R_filter";
public static final String GUILD_MEMBER_NEW_UP_ACCEPT_REGION = "guild_member_new_up_accept_region";
public static final String EXTRA_DIAMOND_RATE_CONFIG = "extra_diamond_rate_config";
public static final String CP_MIC_SVGA_URL = "cp_mic_svga_url";
public static final String CHARGE_USER_X_GOLD = "charge_user_x_gold";
public static final String GUILD_OPERATE_CONFIG = "guild_operate_config";
}
public static class WithDrawStatus {
@@ -1879,9 +1894,9 @@ public class Constant {
public static final Byte invalid = 0; //无效
}
public static String DEFAULT_DOMAIN = "https://img.molistar.xyz";
public static String DEFAULT_DOMAIN = "https://cdn.moliparty.com";
public static String DEFAULT_NICK = "Platform New User";
public static String DEFAULT_AVATAR = DEFAULT_DOMAIN + "/default_avatar_molistar.png";
public static String DEFAULT_AVATAR = DEFAULT_DOMAIN + "/useavater_MP.png";
public static String DEFAULT_CAR = DEFAULT_DOMAIN + "/default_car.png";
/**
@@ -2531,7 +2546,8 @@ public class Constant {
public static final Byte gold = 0; // 金币 现为钻石
public static final Byte radish = 1; // 水晶
public static final Byte diamonds = 2; //钻石 现为金币
public static final Byte usd = 4;
public static final Byte guildUsd = 4;
public static final Byte guildCrystal = 6;
}
public static class PrizePoolType {
@@ -4071,6 +4087,7 @@ public class Constant {
public static final String FAMILY = "family";
public static final String GUILD = "guild";
public static final String GUILD_POLICY2 = "guild_policy2";
public static final String SOVIET = "soviet";
}
/**
@@ -4083,5 +4100,6 @@ public class Constant {
public static final int ADD = 2;
}
public static final String GLOBAL_CODE = "Global";
}

View File

@@ -58,6 +58,7 @@ public enum RedisKey {
lock_user_diamond, // 钻石分布式锁
lock_user_crystal, // 水晶分布式锁
lock_user_guild_usd, // 公会usd分布式锁
lock_user_guild_crystal, // 公会usd分布式锁
lock_gift_message, // 消费送礼物消息锁
mq_gift_status, // 礼物消息的状态
mq_prize_status, // 中奖消息的状态
@@ -1327,6 +1328,7 @@ public enum RedisKey {
guild_member_room_mic_record_vo,
guild_week_rank,
guild_month_rank,
guild_crystal_settlement,
//幸运24
lucky_24_stock,
@@ -1335,8 +1337,7 @@ public enum RedisKey {
lucky_24_user_history,
lucky_24_user_lock,
lucky_24_robot_push_msg,
lucky_24_status, // 礼物消息的状态
lock_lucky_24_message, // 消费送礼物消息锁
lucky_24_record_message, // 礼物消息的状态
lucky_24_user_10w_stat, // 消费送礼物消息锁
lucky_24_extra_stock,
@@ -1360,6 +1361,8 @@ public enum RedisKey {
family_member_week_level_reward,
guild_member_week_level_reward,
guild_member_room_mic_day_duration,
partition_info,
app_ui_setting,//app UI设置
@@ -1386,7 +1389,6 @@ public enum RedisKey {
charge_floating_count, //充值飘屏计数器
bill_record_message,
lock_bill_record_message,
//小游戏重复订单
@@ -1465,11 +1467,11 @@ public enum RedisKey {
lock_user_pack, //礼包锁
v5pay_lock, //v5pay支付锁
;
public String getKey() {
return ("molistar_" + name()).toLowerCase();
}
guild_usd_withdraw_num, //公会薪资提现次数
guild_usd_to_recharge_num,//公会薪资转代理次数
charge_user_x_detail,//嫌疑用户
;
public String getKey(String suffix) {
if (StringUtils.isEmpty(suffix)) {
@@ -1498,6 +1500,10 @@ public enum RedisKey {
}
}
public String getKey() {
return ("molistar_" + name()).toLowerCase();
}
public static String getCacheSign() {
return "molistar_";
}

Some files were not shown because too many files have changed in this diff Show More