Compare commits

...

984 Commits
master ... test

Author SHA1 Message Date
wangw 0de787b742 Merge branch 'dev' into prod 2025-11-07 14:58:38 +08:00
wangw 2708b28bdb 限时折扣商品问题 2025-11-07 14:57:55 +08:00
wangw 185d3ba433 traceId 问题 2025-11-07 14:50:06 +08:00
张松 2c787269be 私域引流分店报错修复 2025-11-07 14:03:44 +08:00
wangw e87f8f47b1 无序Uuid 2025-11-07 13:40:07 +08:00
wangw 4f5661bff3 判空 2025-11-07 13:25:26 +08:00
wangw 07b55f8508 traceID 2025-11-07 11:45:14 +08:00
wangw f96c92b260 traceID 2025-11-07 11:44:53 +08:00
wangw 03a0226fcb 满减活动
限时折扣
点单智能推荐
2025-11-07 11:04:09 +08:00
wangw c2260304e5 Merge branch 'dev' into test
# Conflicts:
#	cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java
2025-11-06 18:23:50 +08:00
wangw dcf5b53bd5 dubbo traceID 完成 2025-11-06 18:06:22 +08:00
张松 c0e115da80 用户信息空串不保存 2025-11-06 18:00:36 +08:00
wangw 318ab208be dubbo traceID 实验8 2025-11-06 17:55:52 +08:00
张松 92732dcd0b 分销员开通不流入运营账户 2025-11-06 17:29:23 +08:00
张松 07635d91d1 分销金额记录不显示开通类型 2025-11-06 17:23:28 +08:00
wangw 9055a4c4ff 单开market 2025-11-06 17:07:45 +08:00
wangw d64b4d0fa1 dubbo traceID 实验7 2025-11-06 17:07:06 +08:00
张松 f56c7f6426 分销充值 2025-11-06 17:05:28 +08:00
张松 de42363874 分销调整 2025-11-06 16:48:43 +08:00
wangw ddcdc4ccbc dubbo traceID 实验5 2025-11-06 16:42:08 +08:00
wangw 9ba5040702 dubbo traceID 实验4 2025-11-06 16:37:17 +08:00
wangw 29a0d5c511 dubbo traceID 实验3 2025-11-06 16:26:49 +08:00
wangw 01d57b8c68 dubbo traceID 实验2 2025-11-06 16:24:40 +08:00
张松 1ebd1a3950 分销提现手续费问题 分销次数限制 2025-11-06 16:21:03 +08:00
wangw 2d00348376 dubbo traceID 实验 2025-11-06 16:05:59 +08:00
张松 e4a0407016 分销记录多条修复 2025-11-06 15:50:43 +08:00
wangw 9a2d058b63 新添加的人 邀请人数 默认是0 2025-11-06 15:45:06 +08:00
wangw 874ca79ef8 邀请人分页列表 2025-11-06 15:41:04 +08:00
wangw e8e788cff4 联合主键 2025-11-06 15:22:15 +08:00
wangw 20874d4204 更新 操作 2025-11-06 15:13:55 +08:00
wangw ede52b1944 更新 2025-11-06 15:05:14 +08:00
wangw 558eb355b3 分销员 2025-11-06 15:02:12 +08:00
wangw 6c175343ee 上级 2025-11-06 14:35:37 +08:00
张松 01bfff0f25 分销修改 2025-11-06 14:23:34 +08:00
张松 3eb2311ea9 分销修改 2025-11-06 14:23:03 +08:00
wangw 51f0a2b71c tb_shop_user_invite 2025-11-06 14:05:18 +08:00
wangw 3e895b4a7d 别名 2025-11-06 13:55:28 +08:00
wangw 0320057bc9 sql错误 2025-11-06 13:44:21 +08:00
wangw 63574fda34 Merge branch 'dev' into prod 2025-11-06 11:05:48 +08:00
张松 9a568fe1e3 Merge remote-tracking branch 'origin/test' into test 2025-11-06 10:46:24 +08:00
张松 d96d692b61 分销修改 2025-11-06 10:46:15 +08:00
wangw ac904d0c19 邀请人列表 2025-11-06 10:19:07 +08:00
wangw 94f46b8894 部分修改 2025-11-06 10:13:00 +08:00
wangw ec27cec15e 定时任务 2025-11-06 09:57:18 +08:00
wangw e9157f9093 定时任务 2025-11-06 09:53:21 +08:00
wangw 6063121fac userId问题 2025-11-05 18:05:54 +08:00
wangw 62e46d9539 Merge remote-tracking branch 'origin/prod' into prod 2025-11-05 17:49:46 +08:00
wangw 033db28c0b seata 异常 日志 2025-11-05 17:49:31 +08:00
张松 1b501a998d 全局事务 2025-11-05 17:38:17 +08:00
wangw ae0e85fb04 事务回滚 2025-11-05 17:36:05 +08:00
wangw 80ed05718b Merge remote-tracking branch 'origin/test' into test 2025-11-05 17:25:40 +08:00
wangw 9ab868ac6b 默认状态 2025-11-05 17:25:32 +08:00
张松 8a99c54729 分销修改 2025-11-05 17:16:51 +08:00
张松 cdfba5d579 Merge branch 'test' into prod 2025-11-05 17:13:06 +08:00
张松 0a4a89edbb 分销修改 2025-11-05 17:12:54 +08:00
张松 13a00bcefd Merge remote-tracking branch 'origin/test' into test 2025-11-05 17:08:59 +08:00
张松 7279430489 分销默认配置 2025-11-05 17:08:52 +08:00
张松 61f7cf1058 分销默认配置 2025-11-05 17:08:51 +08:00
张松 bde0552cf8 配置缓存删除 2025-11-05 17:08:50 +08:00
张松 181064a38c 消费返现 2025-11-05 17:08:49 +08:00
张松 d9d92011e5 消费返现 2025-11-05 17:08:49 +08:00
张松 353b170975 霸王餐报错修复 2025-11-05 17:08:49 +08:00
wangw 5b520fa0ea Merge branch 'dev' into prod 2025-11-05 17:08:18 +08:00
wangw e574a6456d 未打开的不展示
打开的返回是否已开启
2025-11-05 17:07:30 +08:00
张松 44636808d9 Merge remote-tracking branch 'origin/prod' into prod 2025-11-05 17:06:51 +08:00
张松 d01d3615b1 分销默认配置 2025-11-05 17:06:43 +08:00
wangw 17e58f9158 Merge branch 'dev' into prod 2025-11-05 17:02:42 +08:00
wangw c1b15950ba 未打开的不展示
打开的返回是否已开启
2025-11-05 17:00:42 +08:00
张松 02cea05706 分销默认配置 2025-11-05 16:40:40 +08:00
张松 3ea25c831e 配置缓存删除 2025-11-05 16:04:53 +08:00
张松 fe0c9f26c7 消费返现 2025-11-05 15:22:50 +08:00
张松 6530f24f2a 消费返现 2025-11-05 15:18:39 +08:00
张松 608921b366 霸王餐报错修复 2025-11-05 14:19:47 +08:00
张松 3c05e97462 分销配置报错修复 2025-11-05 14:00:58 +08:00
张松 dafc70aea4 分销配置报错修复 2025-11-05 13:59:42 +08:00
张松 2d60b5823e Merge branch 'test' into prod 2025-11-05 10:36:53 +08:00
张松 90f4b0479d WXSERVICE ADD LOG FOR TEST 2025-11-05 10:35:45 +08:00
wangw f617343a01 参数不存在时 增加打印 2025-11-05 10:31:06 +08:00
张松 84cc064fd9 Merge remote-tracking branch 'origin/test' into test 2025-10-31 17:08:35 +08:00
张松 b4068fbd3b 缓存 2025-10-31 17:08:28 +08:00
wangw 2ef59654ef 标签 优先 在本店下单过 2025-10-31 16:41:35 +08:00
wangw 5bb1e28310 分店获取自己的商品 2025-10-31 16:30:29 +08:00
wangw 2123606bf5 Merge remote-tracking branch 'origin/test' into test 2025-10-31 16:18:41 +08:00
wangw bbc1eadd71 门店 id对应不上的问题 2025-10-31 16:18:11 +08:00
张松 2180aa9c6d 缓存 2025-10-31 16:07:48 +08:00
张松 ffbc0d0a30 shopCinfig会员价字段同步 2025-10-31 16:01:22 +08:00
wangw b64c2fa598 Merge remote-tracking branch 'origin/test' into test 2025-10-31 15:06:12 +08:00
wangw ad8c293579 同步时 清楚缓存 2025-10-31 15:05:17 +08:00
张松 cb1cb88347 shopCinfig会员价字段同步 2025-10-31 13:46:30 +08:00
张松 7996129a7c Merge remote-tracking branch 'origin/test' into test 2025-10-31 13:36:29 +08:00
张松 f40a6b9e8e 余额明细处理 2025-10-31 13:36:19 +08:00
wangw 35bc20c77e 倒叙 2025-10-31 10:34:34 +08:00
wangw 4d120c1621 重置分销组 2025-10-31 10:17:24 +08:00
张松 fdba1146e5 分销配置修改用户等级同步变动 2025-10-31 10:10:54 +08:00
张松 c75b6944a0 分销配置修改用户等级同步变动 2025-10-31 09:58:33 +08:00
wangw fbf2871e81 Merge remote-tracking branch 'origin/test' into test 2025-10-30 18:25:41 +08:00
wangw e99ccf8e13 手动添加的 状态为1 2025-10-30 18:25:02 +08:00
gong aa36ee79a1 修改 traceId 配置 2025-10-30 18:20:54 +08:00
wangw df4810d64a 存在即更新 不存在则新增 2025-10-30 18:17:31 +08:00
wangw 78abd6e9fa 邀请身份 是否有效 2025-10-30 18:08:03 +08:00
wangw 86e6714f97 邀请人列表 条件 添加邀请人 邀请身份 是否有效 2025-10-30 17:59:55 +08:00
张松 84d2420c59 分销记录倒叙 2025-10-30 17:44:47 +08:00
张松 84816c8a8c 分销关联id修改 2025-10-30 17:43:05 +08:00
wangw 052f2c24f6 分销员 指定等级的不自动升级 2025-10-30 17:04:04 +08:00
wangw 9b8f5d26da Merge remote-tracking branch 'origin/test' into test 2025-10-30 16:54:02 +08:00
wangw 2e10fbe7b9 分销员 不查询未达到开通条件的 2025-10-30 16:53:50 +08:00
张松 d7552d47b9 常量修改 2025-10-30 16:34:34 +08:00
张松 713016b6e9 延时入账 2025-10-30 16:31:37 +08:00
张松 dbf288160a 延时入账 2025-10-30 16:31:12 +08:00
张松 330200a11d Merge remote-tracking branch 'origin/test' into test 2025-10-30 16:30:57 +08:00
张松 f628b57673 延时入账 2025-10-30 16:30:51 +08:00
wangw 8c04903988 满减活动 日期问题 2025-10-30 16:13:51 +08:00
张松 10edfc836e 分销退款只允许一次 2025-10-30 16:01:35 +08:00
张松 6d5d9fda85 Merge remote-tracking branch 'origin/test' into test 2025-10-30 15:56:05 +08:00
张松 70e7fa6df1 退款分销 2025-10-30 15:55:58 +08:00
wangw 4699959fae Merge remote-tracking branch 'origin/test' into test 2025-10-30 15:55:49 +08:00
wangw 0b9f15939a 主键id 总金额 2025-10-30 15:54:49 +08:00
张松 60ac492f9a 定时任务开启 2025-10-30 15:39:29 +08:00
张松 f9a22f31f2 变动记录统计 2025-10-30 15:24:08 +08:00
张松 0018f86dfc 分账失败累加待入账金额 2025-10-30 15:20:52 +08:00
张松 ad530a01f0 运营余额扣除修改 2025-10-30 15:15:30 +08:00
张松 139dd18e45 运营余额扣除修改 2025-10-30 15:13:04 +08:00
张松 320e2871fd 运营余额扣除修改 2025-10-30 15:10:15 +08:00
张松 df7251553c 开通记录修改 2025-10-30 15:05:12 +08:00
张松 ea69c2714d 分销记录填充userId 2025-10-30 14:53:05 +08:00
张松 e345589956 分销订单退款 2025-10-30 14:51:24 +08:00
张松 d2eb98e8b7 分销订单退款 2025-10-30 14:48:01 +08:00
张松 74ae88c7fe 分销订单退款 2025-10-30 14:47:45 +08:00
wangw 05fbdb0826 Merge remote-tracking branch 'origin/test' into test 2025-10-30 14:14:24 +08:00
wangw 3c2d32bf92 倒叙排序 2025-10-30 14:14:15 +08:00
gong f40b7c498f 请求日志添加 traceId 2025-10-30 14:12:01 +08:00
gong 50730ce702 日志添加 traceId 2025-10-30 14:05:03 +08:00
张松 6fe5149412 Merge remote-tracking branch 'origin/test' into test 2025-10-30 13:52:49 +08:00
张松 b637195ae9 记录排序 2025-10-30 13:52:41 +08:00
wangw a4a0f7b2d9 Merge remote-tracking branch 'origin/test' into test
# Conflicts:
#	cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionUserServiceImpl.java
2025-10-30 13:46:09 +08:00
wangw e15c58fc32 开通 初始化等级 2025-10-30 13:43:14 +08:00
张松 d96e4f304d 小程序分销记录shopId可为空 2025-10-30 11:43:16 +08:00
张松 8bd9b29b7a 分销记录 2025-10-30 11:33:40 +08:00
张松 9ed1548487 分销记录 2025-10-30 11:31:21 +08:00
张松 92f0d5e5b5 分销bug修复 2025-10-30 11:29:20 +08:00
张松 82d675a2c5 分销员开通回调修改 2025-10-30 11:20:02 +08:00
张松 55360f22ef 分销员开通回调修改 2025-10-30 11:09:17 +08:00
张松 d125249994 运营端充值 分账修改 2025-10-30 11:00:24 +08:00
张松 27d1cff67c 运营端充值 分账修改 2025-10-30 10:56:13 +08:00
张松 cd9acb3678 运营端充值 分账修改 2025-10-30 10:43:23 +08:00
张松 96ecb86d42 运营端充值 分账修改 2025-10-30 10:23:19 +08:00
张松 cb5f006c22 运营端充值 2025-10-30 09:44:32 +08:00
wangw 26ef4f20e7 Merge remote-tracking branch 'origin/test' into test 2025-10-30 09:37:57 +08:00
wangw b85286b7f0 空值问题 2025-10-30 09:37:47 +08:00
张松 7a4a9a1db2 分销延时发放 2025-10-30 09:37:19 +08:00
张松 86c359315e 分销延时发放 2025-10-30 09:37:12 +08:00
张松 1765f1c782 分销金额 2025-10-29 20:24:57 +08:00
张松 f8cf41b9fc 分销金额 2025-10-29 19:55:02 +08:00
张松 4cae2309c6 分销金额 2025-10-29 19:49:26 +08:00
张松 dbeef93af8 分销金额 2025-10-29 19:39:44 +08:00
张松 3995b95148 分销金额 2025-10-29 19:29:41 +08:00
张松 d6708cf5d3 分销金额 2025-10-29 19:15:50 +08:00
张松 e1741d444b 分销金额 2025-10-29 19:10:24 +08:00
张松 12fdb6aefe 分销金额 2025-10-29 19:08:12 +08:00
张松 3820d86c8a 分销金额 2025-10-29 19:06:42 +08:00
张松 c027336989 分销日志 2025-10-29 18:58:33 +08:00
张松 2c17e5dcdf 分销日志 2025-10-29 18:50:26 +08:00
张松 759a393b7d 分账参数补全 2025-10-29 18:38:54 +08:00
wangw 656ef5165b Merge remote-tracking branch 'origin/test' into test 2025-10-29 18:25:02 +08:00
wangw 6709965e28 userID 2025-10-29 18:24:47 +08:00
张松 2f5053ebeb Merge remote-tracking branch 'origin/test' into test 2025-10-29 18:23:52 +08:00
张松 ac67323f0d 分销提现失败原因记录 2025-10-29 18:23:42 +08:00
wangw 554ac3bf6a 身份证校验 基本的 2025-10-29 18:22:32 +08:00
张松 5e99bd272c 分销修改 2025-10-29 18:20:01 +08:00
wangw 306e14b299 上级 Id 2025-10-29 18:17:37 +08:00
wangw e59b9036b0 Merge remote-tracking branch 'origin/test' into test 2025-10-29 18:14:04 +08:00
wangw 1f1bd65bb1 上级 可提现金额 2025-10-29 18:13:11 +08:00
张松 1bbe60f413 提现实名认证 2025-10-29 18:10:46 +08:00
张松 d0decccb22 提现金额修改 2025-10-29 18:06:59 +08:00
张松 3a9dc2be14 微信回调解密 2025-10-29 18:00:18 +08:00
张松 fc3b817824 微信回调解密 2025-10-29 17:59:24 +08:00
张松 dd64b83c37 转账到零钱参数完善 2025-10-29 17:46:12 +08:00
wangw 89a013ac92 二级分润 取消 2025-10-29 17:45:42 +08:00
wangw ab97f4aa3e 消费金额 2025-10-29 17:38:02 +08:00
wangw f078333d37 Merge remote-tracking branch 'origin/test' into test 2025-10-29 17:29:39 +08:00
wangw 242ccbf95e 空值处理 2025-10-29 17:29:16 +08:00
张松 54d7d73b25 转账到零钱参数完善 2025-10-29 17:26:18 +08:00
张松 da9681d9a0 Merge remote-tracking branch 'origin/test' into test 2025-10-29 17:21:23 +08:00
张松 8efad50d8d 转账到零钱参数完善 2025-10-29 17:21:15 +08:00
wangw f96f60e9cf Merge remote-tracking branch 'origin/test' into test 2025-10-29 17:20:37 +08:00
wangw 1e1474659e 空值处理 2025-10-29 17:19:53 +08:00
张松 2a23d080d0 Merge remote-tracking branch 'origin/test' into test 2025-10-29 17:03:08 +08:00
张松 e19457de26 转账到零钱参数完善 2025-10-29 17:03:00 +08:00
wangw ffde41dd97 Merge remote-tracking branch 'origin/test' into test 2025-10-29 16:51:06 +08:00
张松 0c3d5a0fcc 转账到零钱参数完善 2025-10-29 16:50:57 +08:00
wangw 182fb84d3c 上上级 更新 2025-10-29 16:50:53 +08:00
张松 abb579dfde 转账到零钱参数完善 2025-10-29 16:49:03 +08:00
wangw 9614b670d9 等级问题 2025-10-29 16:37:11 +08:00
wangw 911ca038ae 展示/绑定关系 2025-10-29 16:25:57 +08:00
wangw 9794dbaa05 未开通 已开通 2025-10-29 16:15:42 +08:00
wangw 848d23148f 未开通 2025-10-29 16:08:12 +08:00
wangw e7d407de1d Merge remote-tracking branch 'origin/test' into test 2025-10-29 15:58:21 +08:00
wangw 89fe82f491 事务回滚 2025-10-29 15:58:01 +08:00
张松 9e5a18b80b 分销员购买保存shopUserId 2025-10-29 15:54:44 +08:00
张松 a101862f34 分销记录修改 2025-10-29 15:47:35 +08:00
张松 118f0145be 分销记录修改 2025-10-29 15:47:23 +08:00
张松 4d81c79443 Merge remote-tracking branch 'origin/test' into test 2025-10-29 15:41:33 +08:00
张松 e788503426 分销记录字段补齐 2025-10-29 15:41:24 +08:00
wangw f662c9f458 dubbo报错 2025-10-29 15:39:05 +08:00
wangw 82aab9e28e 消费金额 2025-10-29 15:16:30 +08:00
wangw 29e15b5ad5 Merge remote-tracking branch 'origin/test' into test 2025-10-29 15:07:49 +08:00
wangw 98db120f1f 消费金额 2025-10-29 15:07:39 +08:00
张松 bd36913fdc 分销记录字段补齐 2025-10-29 15:04:21 +08:00
张松 5b1ce2f582 分销调整 2025-10-29 15:00:16 +08:00
wangw 4285cc7bbd Merge remote-tracking branch 'origin/test' into test 2025-10-29 14:29:09 +08:00
wangw 31a3ac76df shop_user shopId问题 2025-10-29 14:29:00 +08:00
张松 de28c59bd5 分销配置修改bug 2025-10-29 14:23:57 +08:00
张松 fdc0f6816f 分销配置修改bug 2025-10-29 14:11:27 +08:00
张松 acc65c35a1 分销配置修改bug 2025-10-29 13:58:59 +08:00
wangw a3ee3031ee 重置分销组 标识 2025-10-29 11:42:21 +08:00
wangw ddf97b138a 重置分销组 2025-10-29 11:38:58 +08:00
wangw dc96552896 重置分销组 2025-10-29 11:30:30 +08:00
wangw f8788a7786 重置分销组 2025-10-29 11:16:44 +08:00
wangw 464bb80755 提现金额校验 2025-10-29 09:26:45 +08:00
wangw fae7d9ed5d 额外字段 2025-10-28 18:13:50 +08:00
wangw 4a65b4a2c2 Merge remote-tracking branch 'origin/test' into test 2025-10-28 18:01:37 +08:00
wangw 3fbafafcf4 排序 2025-10-28 18:01:28 +08:00
张松 4675910f77 分销完善 2025-10-28 17:59:58 +08:00
wangw 922f1bce15 非必填 2025-10-28 17:54:10 +08:00
wangw 2212e1d14c Merge remote-tracking branch 'origin/test' into test 2025-10-28 17:49:38 +08:00
wangw faac76cc33 邀请人列表 2025-10-28 17:49:27 +08:00
张松 655b545bdb 分销完善 2025-10-28 17:44:19 +08:00
wangw 618286703e 邀请人列表 2025-10-28 17:40:35 +08:00
张松 c199711e4d 用户分账余额记录接口 2025-10-28 16:39:53 +08:00
张松 5f78e3e0c2 商家余额记录接口 2025-10-28 15:59:16 +08:00
wangw fc7ebf5922 集合返回4 2025-10-28 15:35:01 +08:00
wangw 95a9d30e78 集合返回3 2025-10-28 15:25:47 +08:00
wangw 1562554160 集合返回 2025-10-28 15:19:18 +08:00
wangw f616d520d0 序列化 2025-10-28 15:12:36 +08:00
wangw e3236d47a9 Merge remote-tracking branch 'origin/test' into test 2025-10-28 15:09:19 +08:00
wangw e99125725f 店铺Id 2025-10-28 15:09:12 +08:00
张松 30c513d71d 分销二维码接口 2025-10-28 15:03:58 +08:00
张松 b355cd0ba7 Merge remote-tracking branch 'origin/test' into test 2025-10-28 14:56:18 +08:00
张松 993b65caae 分销充值修改 2025-10-28 14:56:11 +08:00
wangw 9fe5a3d25a Merge remote-tracking branch 'origin/test' into test 2025-10-28 14:54:48 +08:00
wangw 6b726bbb35 邀请人列表 2025-10-28 14:54:38 +08:00
张松 9a99cc6e1d Merge remote-tracking branch 'origin/test' into test 2025-10-28 14:51:58 +08:00
张松 1166fca22f 分销修改 2025-10-28 14:51:52 +08:00
wangw e2103d4d0d 邀请人列表 2025-10-28 14:51:09 +08:00
张松 0ef7e2643e 分销修改 2025-10-28 14:43:55 +08:00
张松 ff32ec71c1 分销修改 2025-10-28 14:22:05 +08:00
wangw 5b518f674b id注解 2025-10-28 14:16:11 +08:00
wangw 1b47bdd8f3 Merge remote-tracking branch 'origin/test' into test 2025-10-28 14:12:36 +08:00
wangw 4c7cc285ea 绑定上级 2025-10-28 14:12:19 +08:00
张松 727beadca3 分销修改 2025-10-28 14:09:15 +08:00
张松 708f939917 分销修改 2025-10-28 14:05:34 +08:00
张松 70679110e2 Merge remote-tracking branch 'origin/test' into test 2025-10-28 14:04:18 +08:00
张松 1faf6cccbb 分销修改 2025-10-28 14:04:10 +08:00
wangw 16f357f78e Merge remote-tracking branch 'origin/test' into test 2025-10-28 14:03:54 +08:00
wangw 0bb5214696 绑定上级 2025-10-28 14:03:43 +08:00
张松 0b6a54b914 分销修改 2025-10-28 14:03:40 +08:00
张松 ea1c656034 Merge remote-tracking branch 'origin/test' into test 2025-10-28 13:42:32 +08:00
张松 4b8fc8a15c 分销修改 2025-10-28 13:42:24 +08:00
wangw 7762a5bc36 Merge remote-tracking branch 'origin/test' into test 2025-10-28 13:41:54 +08:00
wangw de02f98141 shopUser 增加 是否是分销员的标识
会员等级
2025-10-28 13:41:45 +08:00
张松 f83945f8f5 分销等级 2025-10-28 13:34:28 +08:00
张松 acd952a8a1 分销等级 2025-10-28 11:44:27 +08:00
张松 11c3b4f178 分销等级 2025-10-28 11:42:39 +08:00
wangw d5daa207ad shopUser 增加 是否是分销员的标识 2025-10-28 11:39:22 +08:00
wangw 9b4354ae70 分销员使用 shopUser主键ID 2025-10-28 11:27:27 +08:00
wangw 0d2a930ae8 限时折扣 与会员价 2025-10-28 11:16:19 +08:00
wangw da7ddb8128 分销员 2025-10-28 09:26:44 +08:00
wangw 94fd4fc34d 总收益 待入账 2025-10-27 21:36:58 +08:00
wangw 618374564e id 2025-10-27 21:26:24 +08:00
wangw 9881299f64 计算金额 类型问题3 2025-10-27 21:25:11 +08:00
wangw 316b618e24 计算金额 类型问题 2025-10-27 21:21:30 +08:00
wangw b4cba628d4 计算金额 2025-10-27 21:18:48 +08:00
wangw d6c7402b11 计算金额 2025-10-27 21:15:30 +08:00
张松 fb191b0539 分销员开通 2025-10-27 21:10:41 +08:00
张松 eb7f4824d2 分销员开通 2025-10-27 21:06:39 +08:00
张松 7944f63aed 分账提现接口 2025-10-27 20:58:05 +08:00
张松 0c991194af 分账提现接口 2025-10-27 20:55:43 +08:00
张松 292f799820 Merge remote-tracking branch 'origin/test' into test 2025-10-27 20:53:13 +08:00
张松 1f8b2cba50 分账提现接口 2025-10-27 20:53:06 +08:00
wangw abca38dd53 绑定邀请人 2025-10-27 20:52:22 +08:00
张松 d8171cfb75 分账提现接口 2025-10-27 20:38:06 +08:00
wangw 078b8d1c5d 分销员中心-实名认证
绑定邀请人
分销员:获取下级分销员分页列表
分销员:获取邀请人分页列表
2025-10-27 20:29:52 +08:00
张松 aed955c513 分账提现接口 2025-10-27 20:11:52 +08:00
张松 1560e5a36f 分账提现接口 2025-10-27 19:48:30 +08:00
wangw 3c2af59c4c Merge remote-tracking branch 'origin/test' into test 2025-10-27 19:37:29 +08:00
wangw 33e2a12618 分销员中心-配置信息 2025-10-27 19:37:23 +08:00
张松 cf492b32f1 订单分账处理 2025-10-27 19:22:10 +08:00
wangw 30f35128fd shopUser关联shopId 2025-10-27 19:03:47 +08:00
wangw 670446215a 空值校验 2025-10-27 18:57:25 +08:00
wangw a1c8f649ff 限时折扣 计算 2025-10-27 18:48:47 +08:00
wangw fed18330b5 限时折扣 2025-10-27 18:45:31 +08:00
wangw 4d6cac0e1f 判空 2025-10-27 18:40:32 +08:00
张松 58f9622656 分校明细 2025-10-27 18:16:38 +08:00
wangw 827cc937e1 满减金额 增加餐位费和打包费 2025-10-27 16:58:50 +08:00
wangw 49755e6354 配置中心 2025-10-27 16:51:20 +08:00
张松 e6ad8baeeb 回调分销实现 2025-10-27 16:33:13 +08:00
张松 b73ca2c6e7 回调分销实现 2025-10-27 16:28:14 +08:00
张松 bf083f698e 分销分钱具体逻辑 2025-10-27 16:00:58 +08:00
张松 39984116d0 shopInfo调整 2025-10-27 14:35:06 +08:00
张松 0adb5333ee shopInfo调整 2025-10-27 14:30:46 +08:00
wangw 122e084a04 Merge remote-tracking branch 'origin/test' into test
# Conflicts:
#	cash-api/order-server/src/main/java/com/czg/controller/NotifyController.java
2025-10-27 14:23:09 +08:00
wangw 5b9ddbe91c 重复依赖 2025-10-27 14:22:27 +08:00
张松 89dfeb8a20 Merge remote-tracking branch 'origin/test' into test 2025-10-27 14:17:57 +08:00
张松 f809c40a64 运营端充值 2025-10-27 14:17:50 +08:00
wangw 00cbb7bc4f Merge remote-tracking branch 'origin/test' into test 2025-10-27 14:17:45 +08:00
wangw 9ec1f7c175 重复依赖 2025-10-27 14:17:37 +08:00
张松 9929065487 Merge remote-tracking branch 'origin/test' into test 2025-10-27 14:14:25 +08:00
wangw db3b892616 奇怪的报错 2025-10-27 14:13:57 +08:00
张松 39b8ecb575 Merge remote-tracking branch 'origin/test' into test
# Conflicts:
#	cash-common/cash-common-service/src/main/java/com/czg/market/service/MkDistributionConfigService.java
#	cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkDistributionConfigServiceImpl.java
2025-10-27 14:13:47 +08:00
张松 249c6b4a6e 运营端充值 2025-10-27 14:12:49 +08:00
wangw 7c18e80c88 循环依赖 2025-10-27 14:09:31 +08:00
wangw 6118711919 分销员 2025-10-27 13:55:14 +08:00
张松 22ab03ea51 运营端充值 2025-10-27 13:54:09 +08:00
张松 bd529b2425 运营端充值 2025-10-27 13:48:19 +08:00
张松 7bb6198798 运营端充值 2025-10-27 13:43:26 +08:00
张松 423b6f303f 分销员开通接口 2025-10-27 11:38:08 +08:00
wangw 8ed14ed241 shop_user 邀请人id 2025-10-27 11:21:20 +08:00
wangw a4c77c2403 分销员表 2025-10-27 11:18:13 +08:00
wangw 3ee1e1efbf 分销员表 2025-10-27 11:17:48 +08:00
wangw 2d0d9ba573 Merge remote-tracking branch 'origin/test' into test 2025-10-27 10:59:34 +08:00
wangw 7fa139e6fb 整单金额 2025-10-27 10:59:16 +08:00
张松 de7236f624 分销后台相关接口 现金充值 记录明细 2025-10-27 10:47:22 +08:00
wangw c943a77a27 Merge remote-tracking branch 'origin/test' into test 2025-10-27 10:38:37 +08:00
wangw f77d8c216e shopUser 接口 2025-10-27 10:38:24 +08:00
张松 8fd22fb1d8 分销后台相关接口 现金充值 记录明细 2025-10-27 10:38:08 +08:00
张松 57ef7f91a1 Merge remote-tracking branch 'origin/test' into test 2025-10-27 10:31:19 +08:00
张松 ac002cb1dd 分销后台相关接口 现金充值 记录明细 2025-10-27 10:31:09 +08:00
wangw f1341b8c7f 限时折扣 优先级 2025-10-27 09:24:31 +08:00
wangw d685d437aa Merge remote-tracking branch 'origin/test' into test 2025-10-27 09:24:07 +08:00
wangw 4b08359ddd 会员价 判空 2025-10-27 09:09:28 +08:00
张松 6c3f5e22d7 分销后台相关接口 2025-10-25 15:05:04 +08:00
张松 4d53c5a015 分销后台相关接口 2025-10-25 15:02:10 +08:00
张松 7ce6667841 分销后台相关接口 2025-10-25 13:48:53 +08:00
张松 3fd64d4806 分销后台相关接口 2025-10-25 10:21:50 +08:00
张松 1d153a2c4d 店铺会员返回会员折扣信息 2025-10-24 18:21:02 +08:00
wangw fa868f6414 乱七八糟折扣计算 2025-10-24 15:59:20 +08:00
wangw 69c0de7651 Merge remote-tracking branch 'origin/test' into test 2025-10-24 15:41:01 +08:00
wangw 56dfdcd523 乱七八糟折扣计算 不包括会员整单折扣 2025-10-24 15:40:51 +08:00
张松 ee219f637c 店铺会员返回会员折扣信息 2025-10-24 14:59:53 +08:00
张松 826d91b64d 店铺会员返回会员折扣信息 2025-10-24 10:09:37 +08:00
张松 3b2a657ea4 dubbo无法序列化lambda修改 2025-10-24 10:03:26 +08:00
张松 d1acc9da71 余额开关根据模块影响 2025-10-24 09:54:57 +08:00
张松 bc14da11f5 缓存注解 2025-10-24 09:47:00 +08:00
张松 5853d2b333 所有跟余额相关模块开关同步开启关闭余额支付 2025-10-24 09:35:38 +08:00
张松 1f34a8c227 用户信息修改接口 2025-10-23 18:16:17 +08:00
张松 47bae409f9 用户信息修改接口 2025-10-23 18:08:53 +08:00
张松 96e3e9a68f 用户信息修改接口 2025-10-23 17:40:58 +08:00
张松 eef047d3ff 用户信息修改接口 2025-10-23 17:04:37 +08:00
wangw 7e6b791ac9 满减活动问题
分类Pid问题
2025-10-23 16:31:39 +08:00
wangw 0104323702 注释 2025-10-23 15:59:18 +08:00
wangw 500860109a 限时折扣 商品重填 2025-10-23 15:31:53 +08:00
wangw b93e6d72cd 限时折扣 商品重填 2025-10-23 15:26:57 +08:00
wangw 8985676d5b 限时折扣 商品重填 2025-10-23 15:17:33 +08:00
wangw 46820794d7 满减活动
优惠券 取消时间检验
2025-10-23 11:02:50 +08:00
wangw 5d7687830b 点单智能推荐 间隔时间 2025-10-23 10:39:30 +08:00
wangw fbd98b52a5 限时折扣 互斥 2025-10-22 18:26:53 +08:00
张松 a6a202ce46 兑换码生效时间判断修改 2025-10-22 18:17:50 +08:00
张松 dc79450b44 主店分店切换导致isMain丢失修复 2025-10-22 18:03:39 +08:00
张松 48c5f09687 Merge remote-tracking branch 'origin/test' into test 2025-10-22 17:38:24 +08:00
张松 23a0aeae48 兑换码列表搜索失效修复 2025-10-22 17:38:15 +08:00
wangw 0d8f030b77 推荐 2025-10-22 17:35:35 +08:00
张松 678ed7bf8a 兑换码列表搜索失效修复 2025-10-22 17:34:32 +08:00
张松 475e74dafe 兑换码列表搜索失效修复 2025-10-22 17:20:13 +08:00
wangw d23bcde03e 序列化 2025-10-22 16:41:19 +08:00
wangw 09b2fe2a74 判空 2025-10-22 15:48:20 +08:00
wangw 1746d6b664 or条件sql 示例 2025-10-22 15:44:58 +08:00
wangw c68faf5914 or条件sql 示例 2025-10-22 15:36:21 +08:00
wangw 4e198d8213 or条件sql 示例 2025-10-22 15:35:47 +08:00
张松 6ded7fb0de 兑换码提示语优化 2025-10-22 15:23:59 +08:00
wangw 6f9bcb7f2d 字段错误 2025-10-22 15:18:08 +08:00
wangw e239ecf6d7 字段错误 2025-10-22 15:17:18 +08:00
wangw 3792b20748 字段错误 2025-10-22 14:59:59 +08:00
wangw a22bf5040b Merge remote-tracking branch 'origin/test' into test 2025-10-22 14:43:04 +08:00
wangw 9cb7244eaa 限时折扣 名称 2025-10-22 14:42:56 +08:00
张松 08b7e66bac 兑换码优化 2025-10-22 11:32:51 +08:00
张松 598ed3c4de 兑换码优化 2025-10-22 11:22:23 +08:00
张松 4247e019e4 兑换码优化 2025-10-22 11:20:23 +08:00
张松 77b487a060 兑换码优化 2025-10-22 11:19:53 +08:00
张松 2f7d139769 兑换码优化 2025-10-22 11:14:04 +08:00
张松 586bc3461b 兑换码优化 2025-10-22 11:10:56 +08:00
张松 87da3e9bb2 兑换码优化 2025-10-22 11:09:02 +08:00
张松 328cd3bb66 Merge remote-tracking branch 'origin/test' into test 2025-10-22 11:07:58 +08:00
张松 ca68666a36 兑换码优化 2025-10-22 11:07:53 +08:00
wangw 9c3f4db39a 限时折扣商品 2025-10-22 10:48:45 +08:00
wangw 7e175d8c6d Merge remote-tracking branch 'origin/test' into test 2025-10-22 10:37:09 +08:00
wangw c89673d4ea 限时折扣商品 2025-10-22 10:37:01 +08:00
张松 f210284292 用户端兑换相关 2025-10-22 10:36:14 +08:00
张松 45fe70f28d 用户端兑换相关 2025-10-22 10:32:01 +08:00
张松 7ccdddef1e 券兑换码相关接口 2025-10-22 10:16:34 +08:00
张松 b84655a7c0 券兑换码相关接口 2025-10-22 09:51:06 +08:00
张松 60ca3e40fd Merge remote-tracking branch 'origin/test' into test 2025-10-22 09:41:34 +08:00
张松 f0c4ea2242 券兑换码相关接口 2025-10-22 09:41:25 +08:00
wangw 3658dce209 限时折扣 处理任务状态 定时任务
公众号 通知消息处理
2025-10-22 09:26:27 +08:00
wangw 022dafec0b Merge remote-tracking branch 'origin/test' into test 2025-10-21 18:09:00 +08:00
wangw 86282ee1ac 智慧推荐 2025-10-21 18:08:51 +08:00
张松 15d93a54cd Merge remote-tracking branch 'origin/test' into test 2025-10-21 17:36:25 +08:00
张松 1fc478dbc8 充值兑换码排序 2025-10-21 17:36:13 +08:00
wangw 10a3a27533 推送公众号次数校验 2025-10-21 17:27:27 +08:00
张松 da10f7a387 充值兑换码排序 2025-10-21 17:17:31 +08:00
张松 2542d664ca 充值兑换码相关接口 2025-10-21 17:09:38 +08:00
张松 0051c6e24e 充值兑换码相关接口 2025-10-21 16:35:17 +08:00
张松 4968f5ce6d Merge remote-tracking branch 'origin/test' into test 2025-10-21 16:33:28 +08:00
张松 e7e1fae4ce 充值兑换码相关接口 2025-10-21 16:33:21 +08:00
wangw d3d7371236 限时折扣 管理端接口 2025-10-21 16:27:51 +08:00
张松 3cc352755e 充值兑换码相关接口 2025-10-21 16:23:48 +08:00
张松 fd34cbcd0e Merge remote-tracking branch 'origin/test' into test 2025-10-21 16:04:23 +08:00
张松 08814a21a3 充值兑换码相关接口 2025-10-21 16:04:17 +08:00
wangw 447b38d68a Merge remote-tracking branch 'origin/test' into test 2025-10-21 15:55:15 +08:00
wangw d69161796e 限时折扣 用户端接口 2025-10-21 15:55:03 +08:00
张松 5b6c1a24cd Merge remote-tracking branch 'origin/test' into test 2025-10-21 15:46:37 +08:00
张松 f0af7d927f 单店无权限操作问题修复 2025-10-21 15:46:30 +08:00
wangw a07ee3f58b Merge remote-tracking branch 'origin/test' into test 2025-10-21 15:43:22 +08:00
wangw a2cd91bf75 限时折扣 用户端接口 2025-10-21 15:43:18 +08:00
张松 2503acef47 充值兑换码相关接口 2025-10-21 15:19:55 +08:00
张松 81ad6f433c 充值兑换码相关接口 2025-10-21 14:51:06 +08:00
张松 f7568202df 充值兑换码相关接口 2025-10-21 14:46:03 +08:00
张松 b56f27c753 充值兑换码相关接口 2025-10-21 14:09:16 +08:00
张松 80c5bc6fec 充值兑换码相关接口 2025-10-21 14:06:03 +08:00
wangw 02cbb27eac 交班权限 2025-10-21 14:05:24 +08:00
wangw 0f07ebf8e4 桌码校验 2025-10-21 11:31:18 +08:00
wangw d9ee6b21ec 公众号关注 2025-10-21 11:24:17 +08:00
wangw 2154ebae15 0元支付 支付成功 2025-10-21 11:22:38 +08:00
wangw b024f2b627 判空 2025-10-21 10:14:52 +08:00
wangw 2c00b8214f 处理消息 2025-10-20 18:28:44 +08:00
wangw 23e3cd0d76 json 3 2025-10-20 18:18:51 +08:00
wangw 370555aa66 json 2 2025-10-20 18:16:10 +08:00
wangw e491d77e65 token 2025-10-20 18:13:14 +08:00
wangw ae84ca9f15 token 2025-10-20 18:04:19 +08:00
wangw 0390cc4576 临时字符串 2025-10-20 17:53:35 +08:00
wangw 46a86a2c82 未关注过的 2025-10-20 17:51:32 +08:00
wangw 5bef4af600 二维码 2025-10-20 17:31:59 +08:00
wangw 0b710bd391 接收到微信验证请求 返回纯文本 2025-10-20 16:42:50 +08:00
wangw 166d550fe6 接收到微信验证请求 返回纯文本 2025-10-20 16:27:23 +08:00
wangw a826af831c 接收到微信验证请求 2025-10-20 16:23:18 +08:00
wangw dde3759772 实体类 2025-10-20 16:20:47 +08:00
wangw 9fa8d50073 微信验证请求 2025-10-20 15:46:50 +08:00
wangw b6f1709219 验证消息 2025-10-20 15:20:16 +08:00
wangw c361fe651d 获取失败问题 2025-10-20 15:02:53 +08:00
wangw e0fc346f26 公众号订阅 用户 2025-10-20 14:55:06 +08:00
张松 2b286e6a07 获取霸王餐配置修改 2025-10-20 14:21:05 +08:00
张松 bbec3575e7 获取霸王餐配置修改 2025-10-20 14:08:59 +08:00
张松 2e3885cfac 登录调整 2025-10-20 13:49:14 +08:00
wangw 9646b7458d 公众号推送 2025-10-20 11:39:33 +08:00
wangw 05a3be5ecb sms_push_event_user 复用 2025-10-20 10:51:18 +08:00
张松 78af79294d 生日有礼早上八点发放 2025-10-20 10:13:36 +08:00
张松 dc9feaa61b 霸王餐修改 2025-10-20 10:07:42 +08:00
张松 e7876a5776 霸王餐修改 2025-10-20 10:03:52 +08:00
张松 e71ae0e163 生日有礼发放修改 2025-10-20 09:59:57 +08:00
张松 a685819158 生日有礼发放修改 2025-10-20 09:34:47 +08:00
wangw 3a1c30398c 状态筛选 2025-10-17 19:23:41 +08:00
wangw 53ea3ca898 优惠券2 2025-10-17 19:15:22 +08:00
wangw cf6200ee19 优惠券 2025-10-17 19:03:49 +08:00
wangw e5b775a834 优惠券 2025-10-17 19:01:20 +08:00
wangw b825373174 user_id 2025-10-17 18:38:42 +08:00
wangw 14f1085262 回填ID 2025-10-17 18:34:57 +08:00
wangw 9a196e4d4a 短信发放 券发放 2025-10-17 18:25:32 +08:00
wangw a970d129e0 霸王餐 充值并支付
订单取消redis 删除
2025-10-17 18:12:08 +08:00
wangw c045b38f26 霸王餐 充值 订单状态问题 2025-10-17 17:48:49 +08:00
wangw ef8e3da576 字段问题 2025-10-17 17:42:43 +08:00
wangw d52ca37519 莫名其妙的校验问题 2025-10-17 17:27:01 +08:00
wangw af53aee3fc 莫名其妙的校验问题 2025-10-17 17:18:56 +08:00
wangw d430e8dacf 周几可用 以及 模板申请 2025-10-17 17:04:51 +08:00
wangw 9881e50176 消费返现 用户校验 2025-10-17 16:32:49 +08:00
wangw 8d41b4c2a9 未发送的 任务 要 删除
发送的任务 券 发送时间执行 发放
2025-10-17 16:09:19 +08:00
wangw fc6aaf8b35 消费返现 日期校验 2025-10-17 15:40:14 +08:00
wangw 15e826ddc1 霸王餐充值
满减活动记录 日期筛选
2025-10-17 15:27:49 +08:00
wangw 29e57fbfda 霸王餐 不进行余额扣减 2025-10-17 14:49:07 +08:00
wangw d8f36c57bf 霸王餐 余额充值 以及 霸王餐余额扣减 2025-10-17 14:43:43 +08:00
wangw ea744fc033 排序 2025-10-17 14:31:19 +08:00
wangw a1ef6dd6da 消费返现 如果小于等于0 则不反 2025-10-17 14:14:59 +08:00
wangw f9e7387c85 满减活动 2025-10-17 14:09:28 +08:00
wangw a095f7dc73 生日 2025-10-17 13:59:14 +08:00
wangw 237b1f3b88 消费返现 倒叙 2025-10-17 13:34:10 +08:00
wangw a1886bd26c 消费返现触发问题 2025-10-17 11:50:09 +08:00
wangw 0afcba22df 模板名称 异步发放优惠券 2025-10-17 11:28:24 +08:00
wangw 17d872e7c4 MQ 2025-10-17 10:57:30 +08:00
wangw b67969e032 生日提醒重置 2025-10-17 10:48:37 +08:00
wangw a86a2fbdac 生日有礼 弹窗 优惠券有效期
短信店铺配置 所有店铺
2025-10-17 10:33:00 +08:00
wangw ba78b3368f 余额明细 记录 2025-10-17 10:12:15 +08:00
wangw 95982b58f8 余额问题 2 2025-10-17 10:08:20 +08:00
wangw e96b01c57f 余额问题 2025-10-17 09:13:37 +08:00
wangw 9bdb09232c 商家申请记录 填充商家名称
消费返现
2025-10-16 18:21:58 +08:00
wangw 1e480dd2d9 类型不匹配 2025-10-16 18:07:13 +08:00
wangw fde003728b 字符串判空 2025-10-16 18:05:18 +08:00
wangw b16237467d Merge remote-tracking branch 'origin/test' into test 2025-10-16 18:03:41 +08:00
wangw c4cd9bc231 短信店铺配置 2025-10-16 18:03:22 +08:00
wangw 780afe8803 短信店铺配置 2025-10-16 18:02:11 +08:00
张松 2e116de9a8 生日有礼 2025-10-16 17:39:14 +08:00
wangw 6b9d5aa3a3 修改状态 2025-10-16 17:28:47 +08:00
wangw 3baab6ce6f 记录 2025-10-16 17:19:10 +08:00
wangw 41511d4f75 模板列表 1的 不管状态 2025-10-16 17:10:21 +08:00
wangw 8fc2ed90d5 模板列表 1的 不管状态 2025-10-16 17:03:04 +08:00
wangw f186426a15 Merge remote-tracking branch 'origin/test' into test 2025-10-16 16:56:09 +08:00
wangw 419678eb44 模板列表 1的 不管状态 2025-10-16 16:56:02 +08:00
张松 e0bda8f53d Merge remote-tracking branch 'origin/test' into test 2025-10-16 16:51:21 +08:00
张松 7cc7c1a9e3 生日有礼修改 2025-10-16 16:51:14 +08:00
wangw f6b7ea18b1 Merge remote-tracking branch 'origin/test' into test 2025-10-16 16:47:48 +08:00
wangw 8b6369ce8f 平台 模板列表 状态 2025-10-16 16:47:35 +08:00
张松 bd61e9d512 Merge remote-tracking branch 'origin/test' into test 2025-10-16 16:46:11 +08:00
张松 04a45099a9 生日有礼修改 2025-10-16 16:46:03 +08:00
wangw 2f727b65e6 平台 模板列表 状态 2025-10-16 16:45:49 +08:00
wangw a26357e47e 平台 模板状态/删除
平台 获取店铺短信余额明细
2025-10-16 16:42:16 +08:00
张松 b4f52dd555 生日有礼修改 2025-10-16 16:23:19 +08:00
张松 75ce21c95c 生日有礼修改 2025-10-16 16:16:58 +08:00
wangw e1e2061d4b 余额变动 2025-10-16 16:03:35 +08:00
张松 e09abbbb62 霸王餐修改 2025-10-16 15:57:45 +08:00
张松 8ed6fae67f 霸王餐修改 2025-10-16 15:54:58 +08:00
张松 0f45681f8a 霸王餐修改 2025-10-16 15:54:47 +08:00
张松 9cb9dda109 生日有礼相关 2025-10-16 15:44:30 +08:00
张松 13d3e70c84 霸王餐充值 2025-10-16 15:40:12 +08:00
张松 bb0aa1f5da Merge remote-tracking branch 'origin/test' into test 2025-10-16 15:33:03 +08:00
张松 473a648e55 霸王餐充值 2025-10-16 15:32:51 +08:00
wangw 701ca5066c Merge remote-tracking branch 'origin/test' into test 2025-10-16 15:31:20 +08:00
wangw e8fa579cc9 重新提交 2025-10-16 15:31:11 +08:00
张松 1d1f271388 生日有礼修改 2025-10-16 14:22:37 +08:00
张松 9000ee1a22 霸王餐修改 2025-10-16 14:20:28 +08:00
张松 be6ce13888 Merge remote-tracking branch 'origin/test' into test 2025-10-16 14:05:36 +08:00
张松 f98ffcae1a 分店切换修改 2025-10-16 14:05:29 +08:00
wangw f98e41f725 优化部分sql 2025-10-16 13:50:57 +08:00
wangw 2842d53ab2 短信 余额 短信 余额 明细 2025-10-16 11:49:00 +08:00
wangw 6e39b90840 短信 余额 短信 余额 明细 2025-10-16 11:17:34 +08:00
wangw 26cde08873 满减活动 时间初始化 2025-10-16 10:48:14 +08:00
wangw 28476cb343 满减活动定时任务 2025-10-16 10:40:06 +08:00
wangw d87e84c5bb 满减活动校验 以及 创建时 时间段初始化 2025-10-16 10:24:32 +08:00
wangw 2deac81268 查询所有 2025-10-16 09:39:11 +08:00
wangw 7e0be5f7db 表不存在问题 2025-10-16 09:32:51 +08:00
wangw 1510493305 参数问题 2025-10-16 09:29:19 +08:00
wangw 8bb97188ab 获取营销推送任务用户列表失败 问题2 2025-10-16 09:24:15 +08:00
wangw 5bd4fd8091 获取营销推送任务用户列表失败 问题 2025-10-16 09:18:35 +08:00
wangw c3bc743f71 获取营销推送任务用户列表失败 问题 2025-10-16 09:17:00 +08:00
wangw eb49945e0f 获取列表 2025-10-16 09:11:10 +08:00
wangw 5a18dcf8a0 测试推送结束 2025-10-15 18:06:29 +08:00
wangw 234a1cbda4 测试推送 2025-10-15 18:00:43 +08:00
张松 706b8e64d3 生日有礼概述修改 2025-10-15 17:35:23 +08:00
wangw d6ca529ca4 消息推送体 2025-10-15 17:06:29 +08:00
张松 66ecbeb7df Merge remote-tracking branch 'origin/test' into test 2025-10-15 16:29:47 +08:00
张松 8b8107bd49 生日有礼概述修改 2025-10-15 16:29:37 +08:00
wangw 3c354bbced 手机号不为空 2025-10-15 16:19:49 +08:00
wangw d226882eec 临时菜 2025-10-15 16:16:35 +08:00
wangw 57dd228b91 临时菜 2025-10-15 16:14:27 +08:00
wangw 59a16d15b7 商品券 不抵扣临时菜 2025-10-15 16:10:32 +08:00
wangw 95f3e11250 分页值 2025-10-15 15:48:38 +08:00
张松 7d28f42fba Merge remote-tracking branch 'origin/test' into test
# Conflicts:
#	cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopUser.java
2025-10-15 15:28:37 +08:00
张松 261ddda88a shopUser字段修改 2025-10-15 15:28:10 +08:00
wangw 819c6c1749 日期字段 2025-10-15 15:16:12 +08:00
张松 0549dce6b0 Merge remote-tracking branch 'origin/test' into test 2025-10-15 14:42:18 +08:00
张松 bfecca686d 生日有礼修改 2025-10-15 14:42:09 +08:00
wangw 4bdca32ea9 短信模板 2025-10-15 14:06:02 +08:00
张松 d342e736ab 引流配置修改 2025-10-15 13:36:23 +08:00
张松 47cea3310c 引流配置修改 2025-10-15 11:32:00 +08:00
张松 b2c287d368 Merge remote-tracking branch 'origin/test' into test 2025-10-15 11:09:51 +08:00
张松 86e96d48a4 生日有礼定时奖励 2025-10-15 11:09:43 +08:00
wangw 71a658e8a9 推送 用户 列表 2025-10-15 11:09:37 +08:00
张松 f22f32daf9 Merge remote-tracking branch 'origin/test' into test 2025-10-14 18:08:22 +08:00
张松 67f1db23ae 霸王餐修改 2025-10-14 18:08:14 +08:00
wangw 4062cdea57 短信推送任务 2025-10-14 17:57:32 +08:00
wangw 19b410aadd Merge remote-tracking branch 'origin/test' into test 2025-10-14 17:31:06 +08:00
wangw fa5e8893f5 分页数量 2025-10-14 17:30:48 +08:00
张松 7654096a32 霸王餐修改 2025-10-14 16:57:43 +08:00
张松 6d580ba7ef 霸王餐修改 2025-10-14 16:55:08 +08:00
张松 a8e8a62c5b 霸王餐修改 2025-10-14 16:53:49 +08:00
张松 2858463928 霸王餐修改 2025-10-14 16:44:42 +08:00
张松 f2f90221ed 私域引流接口 2025-10-14 16:36:52 +08:00
张松 120933024f 私域引流接口 2025-10-14 16:35:04 +08:00
张松 b5dd99fa62 生日有礼接口 2025-10-14 16:07:24 +08:00
张松 c40df0294d 消费返现修改 2025-10-14 15:38:04 +08:00
张松 46ef03d4bc Merge remote-tracking branch 'origin/test' into test 2025-10-14 14:59:24 +08:00
张松 66373edde6 消费返现修改 2025-10-14 14:59:16 +08:00
wangw a315472bb1 有效期 格式问题3 2025-10-14 14:59:08 +08:00
wangw 9d424108c5 有效期 格式问题2 2025-10-14 14:53:00 +08:00
wangw 85dfc14f6c 有效期 格式问题 2025-10-14 14:48:49 +08:00
wangw b10d65946c 有效期 格式问题 2025-10-14 14:43:30 +08:00
wangw da97bce83d 有效期 2025-10-14 14:36:15 +08:00
张松 9f18fa3ddb Merge remote-tracking branch 'origin/test' into test 2025-10-14 14:34:47 +08:00
张松 b857f1de0a 消费返现修改 2025-10-14 14:34:40 +08:00
wangw 64ec96ecf1 Merge remote-tracking branch 'origin/test' into test 2025-10-14 14:29:35 +08:00
wangw bcb2373c3d 日期 2025-10-14 14:29:24 +08:00
张松 2547a2b0d1 霸王餐相关 2025-10-14 13:48:41 +08:00
wangw 0adc5ad23c 序列化 2025-10-14 13:35:08 +08:00
wangw 0dbb0bf821 订单金额 打印优化 2025-10-14 11:32:57 +08:00
wangw 73b56e7513 商品券计算 排序问题 2025-10-14 11:13:55 +08:00
wangw 1637287974 商品券计算 2025-10-14 11:05:11 +08:00
wangw 004377cc7e 满减活动金额填充 2025-10-13 17:35:00 +08:00
wangw 82518adc0d 满减活动金额 2025-10-13 17:34:07 +08:00
wangw 3cf3669f37 满减活动 2025-10-13 17:31:55 +08:00
wangw 6ca8e1c9b8 满减活动金额字段 2025-10-13 17:18:54 +08:00
张松 0c34fd0959 消费返现相关 2025-10-13 16:54:34 +08:00
wangw 5de49a0912 用户端满减活动 2025-10-13 16:21:08 +08:00
wangw ccf791b53b 满减活动 2025-10-13 15:53:08 +08:00
张松 46faa2cf16 新客立减修改 2025-10-13 14:29:28 +08:00
张松 017cf6656b 新客立减修改 2025-10-13 14:17:48 +08:00
张松 8ac90f970f 新客立减修改 2025-10-13 14:11:38 +08:00
张松 7c88de3a07 新客立减返回修改 2025-10-11 17:34:12 +08:00
wangw 5290229609 订单 金额问题 2025-10-11 17:18:52 +08:00
wangw 47d4690f03 金额问题 2025-10-11 15:19:19 +08:00
wangw 1d36efdfe8 消费赠券领取详情 2025-10-11 11:50:21 +08:00
wangw b1e5427561 每日使用限量 2025-10-11 11:37:10 +08:00
wangw f01ccf65ce 定时任务 问题2 2025-10-11 10:32:54 +08:00
wangw 6f0c25c16c 定时任务 问题 2025-10-11 10:01:08 +08:00
张松 069c3c80bb 扫码支付报错修复 2025-10-10 17:22:49 +08:00
张松 d9669f7dfa Merge remote-tracking branch 'origin/prod' into prod 2025-10-10 14:42:45 +08:00
张松 51c6ade4e4 过期券发放报错修复 2025-10-10 14:42:29 +08:00
wangw 421e800f53 折扣券 门槛商品 2025-10-10 11:13:23 +08:00
wangw 043acf12a2 商品范围 2025-10-10 10:43:35 +08:00
wangw e469ffd30c 领取记录 来源等于 2025-10-10 09:56:57 +08:00
wangw ad14b7ec56 金额问题 2025-10-09 19:29:08 +08:00
wangw 5054534e01 门槛商品 可用商品 2025-10-09 17:08:29 +08:00
张松 9a9b72e038 返回会员等级信息 2025-10-09 16:42:19 +08:00
张松 c2e4ccc124 返回会员等级信息 2025-10-09 16:33:17 +08:00
张松 8223dc8d97 Merge remote-tracking branch 'origin/prod' into test 2025-10-09 14:46:57 +08:00
张松 0cbbc4a028 添加角色修改 2025-10-09 14:46:39 +08:00
张松 4d44fa9ef4 加入会员bug修复 2025-10-09 11:26:38 +08:00
张松 9ce881c6b8 加入会员bug修复 2025-10-09 11:25:27 +08:00
张松 aba764a187 会员添加报错修复 2025-10-09 10:33:14 +08:00
张松 28824c23ff 权限bug修复 2025-10-09 10:21:17 +08:00
张松 7346d542df 权限bug修复 2025-10-09 10:07:10 +08:00
wangw 612a2e6128 打印机 2025-09-30 18:47:56 +08:00
张松 1e5b4b3d5b 菜单重复添加修改 2025-09-30 18:13:51 +08:00
张松 7f488f9da1 菜单重复添加修改 2025-09-30 18:12:45 +08:00
张松 8b32b3966f 菜单重复添加修改 2025-09-30 18:05:08 +08:00
张松 713be9843d Merge remote-tracking branch 'origin/test' into test 2025-09-30 18:03:00 +08:00
张松 be5ea6498b 菜单重复添加修改 2025-09-30 18:02:53 +08:00
wangw 64e069f469 多余代码 2025-09-30 17:00:17 +08:00
wangw d1b7203d19 店铺用户余额 2025-09-30 16:40:36 +08:00
wangw 7a1bd3dc00 店铺用户余额 2025-09-30 16:07:50 +08:00
张松 970994b51a 充值修改 2025-09-30 15:34:37 +08:00
张松 cd481bd9e9 充值修改 2025-09-30 15:34:22 +08:00
wangw 22042eb66e 事务执行消息推送 2025-09-30 15:27:13 +08:00
wangw 0e53da8d18 餐位费 打包费 2 2025-09-30 15:15:10 +08:00
wangw ce6cd6b3da 餐位费 打包费 2025-09-30 15:10:13 +08:00
wangw 47e1fee03d 单价 优惠金额 2025-09-30 14:53:37 +08:00
wangw b1c6f85e46 异步线程 延迟打印 2025-09-30 14:43:49 +08:00
wangw 6f0601c165 飞蛾2 2025-09-30 14:27:42 +08:00
wangw 91bdf7508a 飞蛾 2025-09-30 14:21:34 +08:00
wangw 54e36ffb45 打印 餐位费 打包费 2025-09-30 14:17:32 +08:00
wangw 48c1c2b250 打印 餐位费 打包费 2025-09-30 14:09:21 +08:00
张松 76542a365a 测试 2025-09-30 13:57:22 +08:00
wangw 4a8417e2f1 报错 2025-09-30 13:51:57 +08:00
wangw 759be01d4f 空指针 跟 queryChain 2025-09-30 11:36:38 +08:00
张松 b6b107b8f6 充值消费增加经验值 2025-09-30 11:14:37 +08:00
张松 0f3e628c38 充值消费增加经验值 2025-09-30 11:07:13 +08:00
张松 037c9fb465 充值消费增加经验值 2025-09-30 11:06:25 +08:00
张松 9d4137840b 充值消费增加经验值 2025-09-30 11:02:20 +08:00
张松 87a9d8b976 Merge remote-tracking branch 'origin/test' into test 2025-09-30 10:57:11 +08:00
张松 7f072067f3 充值消费增加经验值 2025-09-30 10:57:01 +08:00
wangw af8c75157c 商品名称3 2025-09-30 10:35:50 +08:00
wangw df3eed844b 商品名称2 2025-09-30 10:32:16 +08:00
wangw 472bb4c700 商品名称 2025-09-30 10:23:45 +08:00
wangw 7f48aa15bc 优惠券商品列表 2025-09-30 10:14:39 +08:00
wangw 7fbc7a9b73 积分抵扣 设置为0时 未开启 2025-09-30 09:57:13 +08:00
wangw 4d37f79650 违规操作 2025-09-30 09:39:01 +08:00
张松 089c30982c 订单备注 2025-09-29 21:17:32 +08:00
张松 a4ebedec28 订单备注 2025-09-29 21:03:44 +08:00
张松 eaf761d9b4 订单备注 2025-09-29 21:01:41 +08:00
张松 6bf00106e4 订单备注 2025-09-29 20:57:47 +08:00
张松 138e6a88ea 余额支付密码开关校验支付密码可为空 2025-09-29 20:43:59 +08:00
张松 49b704409c 余额支付密码开关校验 2025-09-29 20:34:14 +08:00
张松 43ef068ab1 余额支付密码开关校验 2025-09-29 20:32:59 +08:00
张松 427cee9f6b 用户可以开关是否使用密码 2025-09-29 20:29:45 +08:00
张松 ca6039bb55 店铺信息报错修复 2025-09-29 20:13:06 +08:00
张松 1fa9d34e7d 店铺信息报错修复 2025-09-29 20:02:21 +08:00
张松 c58695ebcb 店铺信息报错修复 2025-09-29 19:56:40 +08:00
张松 7cce74dea8 店铺信息报错修复 2025-09-29 19:56:30 +08:00
张松 5ccb47a9fa 店铺信息报错修复 2025-09-29 19:52:57 +08:00
张松 1f9a220487 店铺信息报错修复 2025-09-29 19:43:25 +08:00
张松 6e3980cf8f 分点查看主店信息 2025-09-29 19:09:49 +08:00
张松 0ce330ef5d bug修复 2025-09-29 19:06:31 +08:00
张松 646f166cb0 bug修复 2025-09-29 19:02:39 +08:00
张松 0701690a12 bug修复 2025-09-29 18:54:20 +08:00
张松 d69b115aa0 bug修复 2025-09-29 18:45:19 +08:00
张松 6b15b624e3 bug修复 2025-09-29 18:40:26 +08:00
张松 8d788ff987 充值记录 2025-09-29 18:34:28 +08:00
张松 a5a308c1b0 充值记录 2025-09-29 18:31:18 +08:00
张松 f08f33b794 Merge remote-tracking branch 'origin/test' into test 2025-09-29 18:31:12 +08:00
张松 6808a19b70 充值记录 2025-09-29 18:31:04 +08:00
wangw 4899eeae89 其它券共享 2025-09-29 17:54:15 +08:00
wangw e6b5528248 商品包含问题 2025-09-29 17:35:03 +08:00
wangw d8796602c8 充值并支付 回调 2025-09-29 17:31:24 +08:00
wangw 8869de273a 充值并支付 回调 2025-09-29 17:22:32 +08:00
wangw 47b9bee58a mapper 2025-09-29 17:12:52 +08:00
wangw 96796fd381 第二件半价 2025-09-29 17:00:52 +08:00
wangw d3b4eaa4b9 回填ID 2025-09-29 16:49:23 +08:00
wangw 14aadbc0dc 其它共享 2025-09-29 16:36:09 +08:00
张松 2129ae5f8b 权限注入修改 2025-09-29 16:25:29 +08:00
wangw 3a802bc7ff Merge remote-tracking branch 'origin/test' into test 2025-09-29 16:21:05 +08:00
wangw 7487e028b0 未获取到支付记录 2025-09-29 16:20:58 +08:00
张松 99f42514cf 会员消费充值增成长值增加 2025-09-29 16:04:52 +08:00
wangw 4f0e0acacb 传参Id 2025-09-29 15:58:30 +08:00
wangw bdc7b208c0 第二件半价券 2025-09-29 15:51:49 +08:00
wangw 76d69a7c5c 第二件半价券 2025-09-29 15:48:43 +08:00
张松 080be5ac18 余额记录修改 2025-09-29 15:47:44 +08:00
张松 e5b0fe5102 条件会员自动开通修改 2025-09-29 15:43:22 +08:00
wangw 5bd31743e4 充值金额小于订单金额 2025-09-29 15:19:06 +08:00
wangw f2dee35c29 充值金额小于订单金额 2025-09-29 15:13:47 +08:00
wangw 524e3186ad 充值支付 2025-09-29 15:04:18 +08:00
张松 699c3684dd 条件会员自动开通 2025-09-29 11:44:44 +08:00
wangw f48d7a6f8c 消费赠券失败 不影响 2025-09-29 11:22:42 +08:00
wangw aebf4abae3 折扣券 除100 2025-09-29 10:40:15 +08:00
张松 4f327a4517 工具类
积分余额明细增加shopName
2025-09-29 10:11:33 +08:00
wangw 7153a7dfed 订单状态修改 2025-09-29 09:09:06 +08:00
张松 8609643524 dubblo报错修复 2025-09-28 20:29:31 +08:00
张松 228082bf44 dubblo报错修复 2025-09-28 19:53:47 +08:00
张松 36829066d3 dubblo报错修复 2025-09-28 19:39:44 +08:00
张松 79f287dbdd dubblo报错修复 2025-09-28 19:33:12 +08:00
张松 f7bc38994a dubblo报错修复 2025-09-28 19:30:29 +08:00
张松 0846ae21e7 dubblo报错修复 2025-09-28 19:26:34 +08:00
张松 06006aa431 会员修改 2025-09-28 19:15:38 +08:00
张松 1524d70ccf 会员修改 2025-09-28 19:11:44 +08:00
张松 2943b3d3da 保存会员名称 2025-09-28 19:00:03 +08:00
张松 79775c27b1 开通会员修改 2025-09-28 18:39:06 +08:00
张松 d586eb0cac 充值可用店铺列表 2025-09-28 18:09:50 +08:00
张松 a12b87d47e 充值可用店铺列表 2025-09-28 17:57:43 +08:00
wangw c34a1d1f88 新客立减 0的情况 2025-09-28 17:41:27 +08:00
张松 629cb43741 回调报错修复 2025-09-28 17:37:06 +08:00
张松 b7d28c29d9 回调报错修复 2025-09-28 17:26:01 +08:00
wangw ab1a2ed907 Merge remote-tracking branch 'origin/test' into test 2025-09-28 17:15:38 +08:00
wangw 0b46c55ce9 优惠券里外数量一致 2025-09-28 17:15:04 +08:00
张松 a4e8dd6254 回调报错修复 2025-09-28 17:05:39 +08:00
wangw ed35c0a6be 扣减后 为0的情况 处理 2025-09-28 17:01:33 +08:00
张松 25f3bea5fe 会员回调 2025-09-28 16:57:17 +08:00
张松 32f50f003b 会员回调 2025-09-28 16:48:03 +08:00
张松 94c96d124e 会员修改 2025-09-28 15:47:03 +08:00
张松 713944e201 会员修改 2025-09-28 15:33:14 +08:00
张松 e77ff15059 会员修改 2025-09-28 15:28:07 +08:00
张松 066a1cb205 Merge remote-tracking branch 'origin/test' into test 2025-09-28 15:24:36 +08:00
张松 b3e84d142c 优惠券结束时间 2025-09-28 15:24:28 +08:00
wangw d26f789b66 序列化 2025-09-28 15:22:18 +08:00
张松 cbef1e5fd4 余额列表仅展示充值过的 2025-09-28 14:46:18 +08:00
张松 1152ea91fe 菜单查询修改 2025-09-28 11:37:34 +08:00
wangw d9698b5e13 店铺列表 普通店铺使用
用户优惠券列表
2025-09-28 10:52:12 +08:00
wangw 34089ce86d 优惠券 2025-09-28 10:20:06 +08:00
wangw 56a9728f28 用户优惠券列表 2025-09-28 09:51:54 +08:00
张松 548f582d49 会员列表报错修复 2025-09-28 09:08:49 +08:00
张松 547143920b 订单支付修改 2025-09-27 21:06:55 +08:00
张松 9b04cca3d7 订单支付修改 2025-09-27 21:03:48 +08:00
张松 2fa2ea6ea3 订单支付修改 2025-09-27 21:01:25 +08:00
张松 7df089f070 订单支付修改 2025-09-27 19:56:45 +08:00
张松 8ec3fbd1f7 订单支付修改 2025-09-27 19:52:19 +08:00
张松 ab17010291 订单支付修改 2025-09-27 18:57:36 +08:00
张松 0ca1fc947d 订单支付修改 2025-09-27 18:56:34 +08:00
张松 b409268b49 订单支付修改 2025-09-27 18:53:11 +08:00
张松 9c877ea969 会员购买补充 2025-09-27 18:40:09 +08:00
wangw a59f76cd76 优惠券数量 2025-09-27 18:33:18 +08:00
wangw 83a929b063 Merge remote-tracking branch 'origin/test' into test
# Conflicts:
#	cash-service/order-service/src/main/java/com/czg/service/order/dto/OrderPayParamDTO.java
2025-09-27 18:31:21 +08:00
wangw ca7435c813 订单支付 2025-09-27 18:30:51 +08:00
张松 bb55084b30 会员购买补充 2025-09-27 17:57:22 +08:00
张松 51fde65ddb 霸王餐 2025-09-27 17:38:06 +08:00
张松 253a6cfbd2 店铺列表查询修改 2025-09-27 17:26:56 +08:00
张松 8a0bd59e9c Merge remote-tracking branch 'origin/test' into test 2025-09-27 17:19:13 +08:00
张松 f5936d627c 店铺列表查询修改 2025-09-27 17:18:31 +08:00
wangw 050b369aa5 优惠券使用记录 2025-09-27 15:32:27 +08:00
wangw d1c78ebfa0 数量统一 领取记录 统一2 2025-09-27 15:24:19 +08:00
wangw 9063aa5a84 数量统一 领取记录 统一 2025-09-27 15:20:42 +08:00
张松 670ef1f87b 店铺切换修改 2025-09-27 15:16:05 +08:00
张松 3227be2aa2 分店列表修改 2025-09-27 15:01:35 +08:00
张松 8fc90285fe 店铺会员查询修改 2025-09-27 14:41:38 +08:00
张松 ac8d11bea7 充值修改 2025-09-27 14:38:29 +08:00
张松 3c9e8b93a7 充值修改 2025-09-27 14:16:51 +08:00
张松 daa7ad95cd 优惠券数量修改 2025-09-27 14:10:25 +08:00
wangw 5bda429767 补充数据 2025-09-27 13:23:53 +08:00
wangw 2cbdf201a2 补充数据 2025-09-27 11:46:22 +08:00
wangw d15f0ec207 积分 2025-09-27 10:33:07 +08:00
wangw 9dbd002211 不可使用愿意 优惠券 列表 2025-09-27 09:57:09 +08:00
wangw a069d14657 子店铺去除 可用 2025-09-27 09:41:58 +08:00
wangw 2e99dd5745 优化 用户查询 2 2025-09-26 17:22:57 +08:00
wangw 1b826b2782 优化 用户查询 2025-09-26 17:22:40 +08:00
张松 006dbc8dde Merge remote-tracking branch 'origin/test' into test 2025-09-26 16:57:36 +08:00
张松 e9581d9cfd 积分列表接口 2025-09-26 16:57:22 +08:00
wangw 9313f0f5d5 Merge remote-tracking branch 'origin/test' into test 2025-09-26 16:54:13 +08:00
wangw 467c597134 优化 2025-09-26 16:53:34 +08:00
张松 00b79a40b4 积分列表接口 2025-09-26 16:49:58 +08:00
张松 3751056ce8 后台用户接口修改 2025-09-26 16:25:42 +08:00
张松 7ceb16478a Merge remote-tracking branch 'origin/test' into test 2025-09-26 16:23:18 +08:00
张松 b6ef494987 后台用户接口修改 2025-09-26 16:23:10 +08:00
wangw a4fa332a19 Merge remote-tracking branch 'origin/test' into test 2025-09-26 16:18:23 +08:00
wangw a2a2b78f91 发放数量查询 2025-09-26 16:15:34 +08:00
张松 a6b874c91d 充值修改 2025-09-26 16:08:11 +08:00
张松 6e1cb349ad Merge remote-tracking branch 'origin/test' into test 2025-09-26 16:06:46 +08:00
张松 fac4805780 充值修改 2025-09-26 16:06:35 +08:00
wangw 66a4f44d6d Merge remote-tracking branch 'origin/test' into test 2025-09-26 16:03:30 +08:00
wangw 8bb4568d0b 优惠券店铺信息 返回主店信息 2025-09-26 16:03:22 +08:00
张松 88541a6c5c 充值修改 2025-09-26 15:57:48 +08:00
张松 72f5d23db6 Merge remote-tracking branch 'origin/test' into test 2025-09-26 15:54:12 +08:00
张松 f79f26d155 充值积分列表修改 2025-09-26 15:54:05 +08:00
wangw 80cc0c2497 Merge remote-tracking branch 'origin/test' into test 2025-09-26 15:51:22 +08:00
wangw c5cce14825 店铺信息 返回主店信息 2025-09-26 15:50:03 +08:00
张松 3fa5d93755 充值积分列表修改 2025-09-26 15:49:35 +08:00
张松 ab95c69bc6 储值列表修复 2025-09-26 15:29:19 +08:00
张松 1de653a03e 储值列表修复 2025-09-26 15:28:48 +08:00
张松 86bff44e04 余额列表接口 2025-09-26 15:09:53 +08:00
张松 70b8a5e9cc 余额列表接口 2025-09-26 15:07:40 +08:00
wangw 9c44754b58 价格使用规则 2025-09-26 15:02:45 +08:00
wangw 59a779b5b8 时间精度问题 2025-09-26 14:32:38 +08:00
张松 25a7ac1f68 余额列表接口 2025-09-26 14:27:33 +08:00
张松 c5b3cfeb72 余额列表接口 2025-09-26 14:26:36 +08:00
wangw a4d36a470c 券 领取数量校验
图库
2025-09-26 13:58:53 +08:00
张松 f5b6f5829c 会员详情接口调整 2025-09-26 13:53:10 +08:00
wangw e18dbe51d6 券 失效定时任务 领取列表 头像 名称 2025-09-26 11:31:15 +08:00
张松 60bcef1e9b 修改会员信息,重置用户等级 2025-09-26 11:26:32 +08:00
wangw 31b22f9413 券 失效 2025-09-26 11:09:40 +08:00
wangw 339ac0ff8b 店铺名称 增加 主店铺名称 2025-09-26 11:02:59 +08:00
张松 c7f5acf2e1 会员定时任务 2025-09-26 10:17:12 +08:00
张松 ac7af967a1 Merge remote-tracking branch 'origin/test' into test 2025-09-26 10:04:47 +08:00
张松 11916b677c 会员支付修改 2025-09-26 10:04:39 +08:00
wangw 56a85c6a76 Merge remote-tracking branch 'origin/test' into test 2025-09-26 09:55:53 +08:00
wangw 25667f16e5 id问题3 排序问题 2025-09-26 09:55:43 +08:00
张松 080554f620 会员支付修改 2025-09-26 09:53:13 +08:00
张松 8d4a8aac15 Merge remote-tracking branch 'origin/test' into test
# Conflicts:
#	cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java
2025-09-26 09:46:31 +08:00
张松 d34c422425 会员支付修改 2025-09-26 09:46:12 +08:00
wangw 56ed87e3b5 id问题2 实体类序列化 2025-09-26 09:28:06 +08:00
wangw 8b6dfabd8e id问题 2025-09-26 09:19:53 +08:00
wangw c3d1524c40 新客立减 校验 和 使用 2025-09-25 18:10:21 +08:00
张松 23f3a197ad 新客立减 2025-09-25 18:06:37 +08:00
张松 ff56a9c5ac 新客立减 2025-09-25 18:06:11 +08:00
张松 03ff241236 Merge remote-tracking branch 'origin/test' into test 2025-09-25 18:05:06 +08:00
张松 e08b8faf16 新客立减 2025-09-25 18:05:00 +08:00
wangw 06de9a1c5e Merge remote-tracking branch 'origin/test' into test 2025-09-25 17:57:02 +08:00
wangw 6b08b9070c 就餐模式 2025-09-25 17:56:47 +08:00
张松 930ca57ddf 新客立减 2025-09-25 17:55:32 +08:00
张松 818751740d 新客立减 2025-09-25 17:50:38 +08:00
张松 dfb19c9ae6 新客立减 2025-09-25 17:44:31 +08:00
张松 d0e230a1b8 新客立减 2025-09-25 17:43:32 +08:00
张松 aafe9937a8 Merge remote-tracking branch 'origin/test' into test 2025-09-25 17:40:35 +08:00
张松 bb7ef94706 代码生成方法 2025-09-25 17:40:28 +08:00
wangw d4a8aa2685 Merge remote-tracking branch 'origin/test' into test 2025-09-25 17:24:17 +08:00
wangw cef8f16ac8 新客立减校验新用户 2025-09-25 17:24:06 +08:00
张松 2ce3deea3c 会员修改 2025-09-25 17:23:18 +08:00
wangw 49ab81c9b1 序列化 2025-09-25 17:17:28 +08:00
wangw 764edfe8df Merge remote-tracking branch 'origin/test' into test 2025-09-25 17:16:03 +08:00
wangw 5c41fb8d67 优惠券弹窗 2025-09-25 17:15:58 +08:00
张松 e7e48bfcca Merge remote-tracking branch 'origin/test' into test 2025-09-25 15:33:22 +08:00
张松 0d5cb268b0 充值改造 2025-09-25 15:33:13 +08:00
wangw 31005bd6c7 Ip 变动 2025-09-25 15:20:25 +08:00
张松 35e2f9abe5 Merge remote-tracking branch 'origin/test' into test 2025-09-25 14:41:16 +08:00
张松 0acab5ce5c 充值改造 2025-09-25 14:41:09 +08:00
wangw 1e39877bb0 优惠券店铺列表 2025-09-25 14:37:40 +08:00
张松 b5e6077321 充值改造 2025-09-25 14:35:48 +08:00
张松 c9c5e37783 Merge remote-tracking branch 'origin/test' into test 2025-09-25 14:32:28 +08:00
张松 657eef3b8a 充值改造 2025-09-25 14:32:17 +08:00
wangw f0fabd5d73 Merge remote-tracking branch 'origin/test' into test 2025-09-25 11:43:11 +08:00
wangw 76640b17a7 字段名称 问题 2025-09-25 11:42:54 +08:00
张松 6bcf58aafc 个人中心会员相关 2025-09-25 11:41:39 +08:00
张松 f4b6e68eff 个人中心会员相关 2025-09-25 11:28:51 +08:00
张松 d99f5121ed 会员购买完善 2025-09-25 11:00:12 +08:00
张松 d756d179ef 会员购买完善 2025-09-25 10:57:25 +08:00
wangw d3018a1536 优惠券 门槛金额校验问题 2025-09-25 10:29:37 +08:00
wangw 2aa5064d5f 优惠券 最大折扣金额 2025-09-25 09:39:26 +08:00
wangw 97f920b6c7 优惠券 补充 2025-09-25 09:15:59 +08:00
wangw bf35cd843f shopId 2025-09-24 18:03:02 +08:00
wangw 630899f901 用户优惠券列表4 2025-09-24 17:22:03 +08:00
wangw 5cd753cc1c 用户优惠券列表3 2025-09-24 17:14:08 +08:00
wangw 55f488db7f 用户优惠券列表 2025-09-24 15:16:51 +08:00
wangw c659a887e7 用户优惠券列表 2025-09-24 14:10:35 +08:00
wangw a2ead3d0d3 地址更换 2025-09-24 13:26:00 +08:00
wangw 46b86ca505 循环依赖 2025-09-24 11:31:02 +08:00
wangw 440e6fae1a 配置文件 2025-09-24 11:13:16 +08:00
wangw 8630a62c6d Merge remote-tracking branch 'origin/test' into test 2025-09-24 11:07:36 +08:00
wangw a31bdc2396 报错修改 2025-09-24 11:05:51 +08:00
张松 62b117865e 会员赠券流程完善 2025-09-24 11:02:13 +08:00
wangw 307ebac8fa 引入包名称 2025-09-23 16:51:21 +08:00
张松 887746e9d3 会员购买 2025-09-23 16:17:41 +08:00
张松 9f9b292919 会员调整 2025-09-23 14:38:03 +08:00
wangw fc2757ff17 会员 mainShopId 2025-09-23 13:43:27 +08:00
wangw eb31057b3e 可抵扣数量 2025-09-19 11:09:52 +08:00
wangw 2673440426 优惠券 填充 券 2025-09-18 18:11:23 +08:00
wangw 39b37ea8bc 用户获取优惠券 2025-09-18 17:43:53 +08:00
wangw ce2af8c5be Merge remote-tracking branch 'origin/test' into test 2025-09-18 16:55:34 +08:00
wangw 95d2c0d809 新客立减 2025-09-18 16:55:24 +08:00
张松 dcb68f5717 新客立减调整 2025-09-18 16:54:27 +08:00
张松 e4c6a7082e 新客立减获取减免金额方法 2025-09-18 16:52:31 +08:00
张松 4d9773226e 新客立减获取减免金额方法 2025-09-18 16:50:44 +08:00
张松 8e95d7f68d 新客立减获取减免金额方法 2025-09-18 16:41:06 +08:00
张松 64b1841782 Merge remote-tracking branch 'origin/test' into test 2025-09-18 16:36:34 +08:00
张松 d9b314df18 新客立减获取减免金额方法 2025-09-18 16:36:27 +08:00
wangw d23cb8b71b 参加消费赠券
新客立减 50%
2025-09-18 16:21:03 +08:00
张松 61f1a8de71 券发放修改 2025-09-18 16:13:47 +08:00
张松 409153fe76 会员修改 2025-09-18 15:34:51 +08:00
张松 4e82692582 会员修改 2025-09-18 15:28:37 +08:00
张松 2d9c1b4815 Merge remote-tracking branch 'origin/test' into test 2025-09-18 15:09:05 +08:00
张松 537aeb09a1 优惠券发放 2025-09-18 15:08:58 +08:00
wangw 84f0cb0a9b 校验 剩余数量 2025-09-18 15:06:05 +08:00
张松 6756f35db6 新客立减修改 2025-09-18 13:27:29 +08:00
wangw 0db2362077 消费赠券 关联内容 先删除 2025-09-18 09:22:26 +08:00
张松 4710fc4e71 Merge remote-tracking branch 'origin/test' into test 2025-09-17 17:59:53 +08:00
张松 e44ceece68 新客立减修改 2025-09-17 17:59:46 +08:00
wangw 61a8c31e31 Merge remote-tracking branch 'origin/test' into test 2025-09-17 17:35:02 +08:00
wangw 02fe159249 子店铺的 商品ID问题 2025-09-17 17:34:46 +08:00
张松 4aa63b5c92 新客立减修改 2025-09-17 17:34:34 +08:00
张松 78f3c5e0bc 新客立减修改 2025-09-17 17:28:30 +08:00
wangw 84acedfff6 修改为单店时 移除子店铺的券 2025-09-17 15:54:16 +08:00
wangw af6f23c6ca Merge remote-tracking branch 'origin/test' into test 2025-09-17 15:48:31 +08:00
wangw 25c606c856 修改为单店时 删除子店铺的 券 2025-09-17 15:48:22 +08:00
张松 f32aa4c7a0 Merge remote-tracking branch 'origin/test' into test 2025-09-17 15:43:27 +08:00
张松 c04eceb097 智慧充值字段统一 2025-09-17 15:43:21 +08:00
wangw 949eb9b158 优惠券对应商品的部分 子店铺使用子店铺的 2025-09-17 13:46:31 +08:00
张松 db3027a2ed Merge remote-tracking branch 'origin/test' into test 2025-09-17 11:32:28 +08:00
张松 31e11323c6 前端随机立减金额获取 2025-09-17 11:32:21 +08:00
wangw 08d87469ff Merge remote-tracking branch 'origin/test' into test 2025-09-17 11:22:24 +08:00
wangw 66369da7f1 新特性 2025-09-17 11:22:16 +08:00
张松 a0c5903aa6 Merge remote-tracking branch 'origin/test' into test 2025-09-17 11:21:35 +08:00
张松 42fbc8ba65 前端随机立减金额获取 2025-09-17 11:21:22 +08:00
wangw 74e3b6526b pom 2025-09-17 11:17:56 +08:00
wangw a962372583 Merge remote-tracking branch 'origin/test' into test 2025-09-17 11:16:22 +08:00
wangw 8e345b5737 预览模式问题 2025-09-17 11:15:42 +08:00
张松 ddf3bf7697 Merge remote-tracking branch 'origin/test' into test
# Conflicts:
#	cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShopCouponRecordServiceImpl.java
2025-09-17 11:12:17 +08:00
张松 154401fafb 前端随机立减金额获取 2025-09-17 11:11:52 +08:00
wangw 3e81ea93b6 循环依赖问题 2025-09-17 11:09:52 +08:00
wangw de08266971 订单 优惠券部分 重写 2025-09-17 10:54:47 +08:00
张松 b4fb2afd68 新客立减修改 2025-09-17 10:26:29 +08:00
张松 d620ccf564 忽略代码生成main文件 2025-09-16 14:35:06 +08:00
张松 caeee47520 充值记录 2025-09-16 14:34:45 +08:00
张松 696ffc49ae 超级会员相关 2025-09-16 14:05:30 +08:00
wangw ec1e94fdaf MkShopCouponRecordService.receiveCoupon 发放券 统一方法 2025-09-16 11:07:32 +08:00
wangw d006a2dce3 日期校验 2025-09-13 16:14:22 +08:00
wangw 5ef41403e0 领取时间 范围校验 2025-09-13 16:09:02 +08:00
wangw dca94cc848 原记录表作废 2025-09-13 15:57:51 +08:00
wangw 77ac277856 领取 2025-09-13 15:35:20 +08:00
wangw db50c78049 消费赠券 跳转 id 选中 2025-09-13 11:18:26 +08:00
wangw 212f27daa6 shop_id 2025-09-13 10:52:48 +08:00
wangw c110695843 关联关系 type 2025-09-13 09:59:58 +08:00
wangw 02e5684c0f 取消关联 2025-09-13 09:30:41 +08:00
wangw 0794ac7569 新增字段 已发放数量 giftNum
已发放数量 问题
2025-09-12 17:56:11 +08:00
wangw e6fe3e66c7 忽略 2025-09-12 17:22:51 +08:00
wangw cedcec2cac 消费赠券 没有title 2025-09-12 17:18:58 +08:00
wangw 7d405f9455 shopId填充 2025-09-12 17:15:15 +08:00
wangw 536560322c 新增 ID校验 2025-09-12 17:09:30 +08:00
wangw 97fc5a65f4 新增 ID校验 2025-09-12 17:05:50 +08:00
wangw 1b111262ad 优惠券新增 Id回填 2025-09-12 15:38:32 +08:00
wangw f2007bb881 循环依赖 2025-09-12 15:15:18 +08:00
wangw 3b53b460fd 消费赠券 优惠券 2025-09-12 15:10:43 +08:00
张松 2e69148249 超级会员相关 2025-09-12 15:07:30 +08:00
张松 55a36bc4da Merge remote-tracking branch 'origin/test' into test 2025-09-12 14:26:11 +08:00
张松 44d3a084c8 超级会员购买相关 2025-09-12 14:26:02 +08:00
wangw f703028fa1 Merge remote-tracking branch 'origin/test' into test 2025-09-12 14:14:59 +08:00
wangw d01f66d6a4 赠送券活动 关联表 2025-09-12 14:14:51 +08:00
张松 10817c01a0 超级会员购买相关 2025-09-12 13:46:40 +08:00
张松 6bf8ee2c0b 超级会员购买相关 2025-09-12 11:46:49 +08:00
张松 2d302f31a8 超级会员购买相关 2025-09-12 11:36:07 +08:00
张松 ccb76143cc 超级会员购买相关 2025-09-12 11:13:35 +08:00
wangw f9aa237f98 权限 暂时 关闭 2025-09-12 10:56:13 +08:00
张松 449db66e2c 超级会员购买相关 2025-09-12 10:52:55 +08:00
张松 484d39819c 超级会员购买相关 2025-09-12 10:42:24 +08:00
张松 bd47a96228 超级会员购买相关 2025-09-12 10:36:50 +08:00
张松 5dd5e09770 超级会员购买相关 2025-09-12 09:57:22 +08:00
张松 f2b3a96303 超级会员购买相关 2025-09-12 09:55:26 +08:00
张松 8a980114cf Merge remote-tracking branch 'origin/test' into test 2025-09-12 09:54:46 +08:00
张松 3dbc5e8f55 超级会员购买相关 2025-09-12 09:54:38 +08:00
wangw bb0ef6e778 修改表名为mk_shop_coupon 2025-09-12 09:51:09 +08:00
张松 a8c34e628a 超级会员购买相关 2025-09-12 09:42:36 +08:00
张松 31678fa6f1 超级会员相关 2025-09-12 09:21:18 +08:00
张松 2f88f54b0f 超级会员相关 2025-09-12 09:04:39 +08:00
张松 9c728249f7 超级会员相关 2025-09-11 18:15:39 +08:00
张松 8ad76d3844 超级会员相关 2025-09-11 18:09:43 +08:00
张松 daee376547 Merge remote-tracking branch 'origin/test' into test 2025-09-11 17:28:06 +08:00
张松 5776984a42 超级会员相关 2025-09-11 17:27:57 +08:00
wangw 6d5fd5a39a Merge remote-tracking branch 'origin/test' into test 2025-09-11 17:01:26 +08:00
wangw 855ee133fe only-仅本店 2025-09-11 17:01:09 +08:00
张松 f7da6eac1e 超级会员相关 2025-09-11 16:49:02 +08:00
wangw d7b41d61e3 dubbo 优惠券 2025-09-11 16:47:45 +08:00
gong 32f9746d30 Merge remote-tracking branch 'origin/test' into test 2025-09-11 16:39:49 +08:00
gong e6b88058b8 Merge branch 'prod' into test 2025-09-11 16:39:35 +08:00
张松 de5229051c 超级会员相关 2025-09-11 16:38:30 +08:00
张松 5a6a34d85b Merge remote-tracking branch 'origin/test' into test 2025-09-11 16:33:56 +08:00
张松 adae3380c3 超级会员相关 2025-09-11 16:33:48 +08:00
wangw 0f922d6978 test方法 移除 2025-09-11 16:28:15 +08:00
wangw 01bf1d6500 pom缺少 2025-09-11 16:23:57 +08:00
张松 cb00b99d00 Merge remote-tracking branch 'origin/dev' into test 2025-09-11 16:21:02 +08:00
wangw 35d257bc56 分享相关代码 注释掉
优惠券 管理端重写 使用的地方 注释
2025-09-11 16:10:38 +08:00
张松 37be357a4f 店铺会员相关 2025-09-11 15:55:32 +08:00
wangw 65ba0e18ce 原作废代码 删除 2025-09-11 13:44:28 +08:00
张松 3f252fa669 交班报错修复 2025-09-01 15:57:39 +08:00
张松 f1f4256fc9 测试 2025-09-01 15:45:30 +08:00
张松 328a59f6b4 测试 2025-09-01 14:49:56 +08:00
张松 6e5a0df70b Merge remote-tracking branch 'origin/master' into prod 2025-09-01 11:40:37 +08:00
wangw a5b791f007 Merge branch 'master' into prod 2025-07-01 10:39:27 +08:00
wangw 83cc406ec0 Merge branch 'master' into prod 2025-04-23 16:27:36 +08:00
wangw 956c5d2b2a Merge branch 'master' into prod 2025-04-21 14:45:27 +08:00
wangw 37e384b491 Merge branch 'master' into prod 2025-04-21 14:35:38 +08:00
wangw 240b54467d 表字段问题 2025-04-21 09:52:58 +08:00
wangw 25c6b49733 Merge branch 'master' into prod
# Conflicts:
#	cash-api/product-server/src/main/java/com/czg/controller/user/UProductController.java
#	cash-service/product-service/src/main/java/com/czg/service/product/service/impl/UProductServiceImpl.java
2025-04-21 09:32:09 +08:00
Tankaikai df11252cd0 刷新可售时间 2025-04-18 18:04:05 +08:00
Tankaikai bfbcb7301a 刷新可售时间 2025-04-18 17:57:47 +08:00
Tankaikai cde4185dea 刷新可售时间 2025-04-15 16:57:45 +08:00
Tankaikai b3f378f528 刷新可售时间 2025-04-15 16:47:39 +08:00
514 changed files with 28501 additions and 3074 deletions

1
.gitignore vendored
View File

@ -60,3 +60,4 @@ build/
/cash-api/order-server/src/main/resources/application-zs.yml
/cash-api/product-server/src/main/resources/application-zs.yml
/cash-api/system-server/src/main/resources/application-zs.yml
/cash-service/code-generator/src/main/java/com/czg/Main.java

View File

@ -0,0 +1,178 @@
package com.czg.controller;
import com.czg.account.entity.UserInfo;
import com.czg.account.service.UserInfoService;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* 公众号 通知
*
* @author ww
* @description
*/
@Slf4j
@RestController
@RequestMapping("/notify")
public class NotifyController {
private static final String SUCCESS = "SUCCESS";
@Resource
private UserInfoService userInfoService;
private static final String TOKEN = "DZjyHBq3nTujF0NM1dnXikU8ZCvy";
@RequestMapping(produces = MediaType.TEXT_PLAIN_VALUE)
public String notify(HttpServletRequest request,
@RequestParam(required = false) String signature,
@RequestParam(required = false) String timestamp,
@RequestParam(required = false) String nonce,
@RequestParam(required = false) String echostr) {
// 1. 处理 GET 请求微信开发者验证
if ("GET".equals(request.getMethod())) {
log.info("接收到微信验证请求 - signature: {}, timestamp: {}, nonce: {}, echostr: {}",
signature, timestamp, nonce, echostr);
return echostr;
}
// 2. 处理 POST 请求微信消息推送如关注消息等
else if ("POST".equals(request.getMethod())) {
log.info("接收到微信 POST 消息请求 - signature: {}, timestamp: {}, nonce: {}",
signature, timestamp, nonce);
// 1. 读取请求体中的 XML 数据
String xmlData = readPostXml(request);
if (xmlData.isEmpty()) {
log.error("微信 POST 消息体为空");
return "";
}
log.info("微信 POST 消息 XML 原始内容: {}", xmlData);
// 2. 解析 XML Map便于获取字段
Map<String, String> messageMap;
try {
messageMap = parseXmlToMap(xmlData);
} catch (DocumentException e) {
log.error("XML 解析失败,原始内容: {}", xmlData, e);
return "";
}
log.info("微信 POST 消息内容: {}", messageMap);
// 获取消息类型 event
String msgType = messageMap.get("MsgType");
// 获取事件类型 unsubscribe用户取消关注 subscribe用户关注
String event = messageMap.get("Event");
// 获取用户 OpenID
String openId = messageMap.get("FromUserName");
//携带参数
String eventKey = messageMap.get("EventKey");
Long userId = null;
log.info("解析结果 - 消息类型: {}, 事件类型: {}, 用户 OpenID: {} 携带参数: {}", msgType, event, openId, eventKey);
if (eventKey != null && eventKey.startsWith("qrscene_")) {
try {
// 截取 "qrscene_" 前缀后的字符串长度为 8并转为 Long
String numberStr = eventKey.substring("qrscene_".length());
userId = Long.parseLong(numberStr);
} catch (NumberFormatException e) {
log.error("EventKey 后缀不是有效数字eventKey: {}", eventKey, e);
}
}
updateUserInfoIsAc(event, openId, userId);
// 处理完成后微信要求返回 "SUCCESS" 或空字符串否则会重试推送
return SUCCESS;
}
return "";
}
//更新userInfo openId 以及 关注表示isAc
private void updateUserInfoIsAc(String event, String openId, Long userId) {
if ("subscribe".equals(event) && userId != null) {
// 关注事件更新用户关注状态为 1
UserInfo userInfo = new UserInfo();
userInfo.setIsAc(1);
userInfo.setWechatAcOpenId(openId);
userInfoService.update(userInfo, new QueryWrapper().eq(UserInfo::getId, userId));
} else if ("unsubscribe".equals(event)) {
// 取消关注事件更新用户关注状态为 0
UserInfo userInfo = new UserInfo();
userInfo.setIsAc(0);
userInfoService.update(userInfo, new QueryWrapper().eq(UserInfo::getWechatAcOpenId, openId));
}
}
/**
* 工具方法读取 POST 请求体中的 XML 数据
*/
private String readPostXml(HttpServletRequest request) {
StringBuilder xmlSb = new StringBuilder();
try (BufferedReader reader = request.getReader()) {
String line;
while ((line = reader.readLine()) != null) {
xmlSb.append(line);
}
} catch (IOException e) {
log.error("读取微信 POST 消息体失败", e);
}
return xmlSb.toString();
}
// XML 字符串解析为 Map<String, String>
private static Map<String, String> parseXmlToMap(String xmlData) throws DocumentException {
Map<String, String> resultMap = new HashMap<>(16);
Document document = DocumentHelper.parseText(xmlData);
Element rootElement = document.getRootElement();
// 遍历所有子节点将节点名和文本值存入 Map
Iterator<Element> elementIterator = rootElement.elementIterator();
while (elementIterator.hasNext()) {
Element childElement = elementIterator.next();
resultMap.put(childElement.getName(), childElement.getTextTrim());
}
return resultMap;
}
public static void main(String[] args) {
String str = "<xml><ToUserName><![CDATA[gh_11fc27b7ef34]]></ToUserName><FromUserName><![CDATA[owWHW7Tzeh2gx3WmFsFSxBq2JUTk]]></FromUserName><CreateTime>1761095747</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[subscribe]]></Event><EventKey><![CDATA[qrscene_275]]></EventKey><Ticket><![CDATA[gQGF8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyUTZDVHRTMXhmbUoxYUlYdk5GY2sAAgSsLvhoAwQAjScA]]></Ticket></xml>";
// 2. 解析 XML Map便于获取字段
Map<String, String> messageMap = new HashMap<>();
try {
messageMap = parseXmlToMap(str);
} catch (DocumentException e) {
log.error("XML 解析失败,", e);
}
log.info("微信 POST 消息内容: {}", messageMap);
//携带参数
String eventKey = messageMap.get("EventKey");
Long userId = null;
if (eventKey != null && eventKey.startsWith("qrscene_")) {
try {
// 截取 "qrscene_" 前缀后的字符串长度为 8并转为 Long
String numberStr = eventKey.substring("qrscene_".length());
userId = Long.parseLong(numberStr);
} catch (NumberFormatException e) {
log.error("EventKey 后缀不是有效数字eventKey: {}", eventKey, e);
}
}
System.out.println("userId: " + userId);
}
}

View File

@ -1,9 +1,10 @@
package com.czg.controller.admin;
import com.czg.account.dto.freeding.FreeDineConfigEditDTO;
import com.czg.account.entity.FreeDineConfig;
import com.czg.account.service.FreeDineConfigService;
import com.czg.account.vo.FreeDineConfigVO;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.annotation.SaCheckMainShop;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import jakarta.annotation.Resource;
@ -25,8 +26,8 @@ public class FreeDingController {
*/
@SaAdminCheckPermission(value = "freeDing:detail", name = "获取霸王餐配置信息")
@GetMapping
public CzgResult<FreeDineConfig> getConfig() {
return CzgResult.success(freeDineConfigService.getConfig(StpKit.USER.getShopId()));
public CzgResult<FreeDineConfigVO> getConfig() {
return CzgResult.success(freeDineConfigService.getConfig(StpKit.USER.getMainShopId()));
}
/**
@ -36,7 +37,8 @@ public class FreeDingController {
*/
@SaAdminCheckPermission(value = "freeDing:edit", name = "修改霸王餐配置信息")
@PutMapping
@SaCheckMainShop
public CzgResult<Boolean> edit(@RequestBody FreeDineConfigEditDTO freeDineConfigEditDTO) {
return CzgResult.success(freeDineConfigService.edit(StpKit.USER.getShopId(), freeDineConfigEditDTO));
return CzgResult.success(freeDineConfigService.edit(StpKit.USER.getMainShopId(), freeDineConfigEditDTO));
}
}

View File

@ -7,14 +7,11 @@ import com.czg.account.service.HandoverRecordService;
import com.czg.account.vo.HandoverProductListVo;
import com.czg.account.vo.HandoverTotalVo;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.annotation.SaStaffCheckPermission;
import com.czg.config.RabbitPublisher;
import com.czg.enums.YesNoEnum;
import com.czg.log.annotation.OperationLog;
import com.czg.resp.CzgResult;
import com.mybatisflex.core.paginate.Page;
import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
@ -32,8 +29,6 @@ import java.util.List;
@RequestMapping("/admin/handoverRecord")
public class HandoverRecordController {
private final HandoverRecordService handoverRecordService;
@Resource
private RabbitPublisher rabbitPublisher;
/**
* 交班记录-分页
@ -44,7 +39,7 @@ public class HandoverRecordController {
@GetMapping("page")
@OperationLog("交班记录-分页")
// @SaStaffCheckPermission("yun_xu_cha_kan_suo_you_jiao_ban_ji_lu")
@SaAdminCheckPermission("handoverRecord:page")
@SaAdminCheckPermission(value = "handoverRecord:page",name = "交班记录-分页")
public CzgResult<Page<HandoverRecordDTO>> page(@RequestParam(required = false) String beginDate, @RequestParam(required = false) String endDate) {
Page<HandoverRecordDTO> page = handoverRecordService.getHandoverRecordPage(beginDate, endDate);
return CzgResult.success(page);
@ -58,7 +53,7 @@ public class HandoverRecordController {
@GetMapping("{id}")
@OperationLog("交班记录-查看")
// @SaStaffCheckPermission("yun_xu_cha_kan_suo_you_jiao_ban_ji_lu")
@SaAdminCheckPermission("handoverRecord:info")
@SaAdminCheckPermission(value = "handoverRecord:info",name = "交班记录-查看")
public CzgResult<List<HandoverProductListVo>> info(@PathVariable Long id) {
List<HandoverProductListVo> data = handoverRecordService.getHandoverProductListById(id);
return CzgResult.success(data);
@ -73,7 +68,7 @@ public class HandoverRecordController {
@GetMapping("/export/{id}")
@OperationLog("交班记录-导出")
// @SaStaffCheckPermission("yun_xu_cha_kan_suo_you_jiao_ban_ji_lu")
@SaAdminCheckPermission("handoverRecord:export")
@SaAdminCheckPermission(value = "handoverRecord:export",name = "交班记录-导出")
public List<HandoverProductListVo> export(@PathVariable Long id) {
return handoverRecordService.getHandoverProductListById(id);
}
@ -84,7 +79,7 @@ public class HandoverRecordController {
@GetMapping("total")
@OperationLog("收银机-交班数据统计")
// @SaStaffCheckPermission("yun_xu_cha_kan_suo_you_jiao_ban_ji_lu")
@SaAdminCheckPermission("handoverRecord:total")
@SaAdminCheckPermission(value = "handoverRecord:total",name = "收银机-交班数据统计")
public CzgResult<HandoverTotalVo> total() {
HandoverTotalVo data = handoverRecordService.totalHandoverData();
return CzgResult.success(data);
@ -98,7 +93,7 @@ public class HandoverRecordController {
@PostMapping("handover")
@OperationLog("收银机-交班/关班")
// @SaStaffCheckPermission("yun_xu_jiao_ban")
@SaAdminCheckPermission("handoverRecord:handover")
@SaAdminCheckPermission(value = "handoverRecord:handover",name = "收银机-交班/关班")
public CzgResult<Long> handover(@RequestParam Integer isPrint) {
Long id = handoverRecordService.handover();
return CzgResult.success(id);
@ -112,7 +107,7 @@ public class HandoverRecordController {
@PostMapping("/network/print/{id}")
@OperationLog("收银机-交班/关班-网络打印机打印交班小票")
// @SaStaffCheckPermission("yun_xu_cha_kan_suo_you_jiao_ban_ji_lu")
@SaAdminCheckPermission("handoverRecord:networkPrint")
@SaAdminCheckPermission(value = "handoverRecord:networkPrint",name = "收银机-交班/关班-网络打印机打印交班小票")
public CzgResult<Void> handover(@PathVariable Long id) {
handoverRecordService.printHandoverReceipt(id, YesNoEnum.YES.value());
return CzgResult.success();
@ -127,6 +122,7 @@ public class HandoverRecordController {
@GetMapping("/detail/{id}")
@OperationLog("交班记录-详情")
//@SaAdminCheckPermission("handoverRecord:detail")
@SaAdminCheckPermission(value = "handoverRecord:detail",name = "交班记录-详情")
public CzgResult<HandoverRecordDTO> detail(@PathVariable Long id) {
HandoverRecord entity = handoverRecordService.getById(id);
HandoverRecordDTO data = BeanUtil.copyProperties(entity, HandoverRecordDTO.class);

View File

@ -55,7 +55,7 @@ public class MenuController {
@SaAdminCheckPermission(value = "menu:list", name = "菜单列表")
@GetMapping("/list")
public CzgResult<List<MenuVO>> all(String title, String startTime, String endTime) {
return CzgResult.success(menuService.getAll(title, startTime, endTime));
return CzgResult.success(menuService.getAll(title, startTime, endTime));
}
/**

View File

@ -1,86 +0,0 @@
package com.czg.controller.admin;
import com.czg.account.dto.ShopActivateDTO;
import com.czg.account.service.ShopActivateService;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.config.RedisCst;
import com.czg.exception.CzgException;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.service.RedisService;
import com.czg.service.account.util.WechatAuthUtil;
import jakarta.annotation.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* 店铺充值活动管理
*
* @author ww
* @description
*/
@RestController
@RequestMapping("/admin/activate")
public class ShopActivateController {
@Resource
private ShopActivateService shopActivateService;
@Resource
private RedisService redisService;
@Resource
private WechatAuthUtil wechatUtil;
/**
* 店铺充值活动列表
* 权限标识: activate:list
*/
@SaAdminCheckPermission(value = "activate:list", name = "店铺充值活动列表")
@GetMapping
public CzgResult<List<ShopActivateDTO>> detail(@RequestParam(required = false) Long shopId) {
return CzgResult.success(shopActivateService.getList(shopId));
}
/**
* 店铺充值活动新增
* 权限标识: activate:add
*/
@SaAdminCheckPermission(value = "activate:add", name = "店铺充值活动新增")
@PostMapping
public CzgResult<Boolean> add(@RequestBody @Validated ShopActivateDTO activateDTO) {
activateDTO.setShopId(StpKit.USER.getShopId());
return CzgResult.success(shopActivateService.add(activateDTO));
}
/**
* 店铺充值活动修改
* 权限标识: activate:edit
*/
@SaAdminCheckPermission(value = "activate:edit", name = "店铺充值活动修改")
@PutMapping
public CzgResult<Boolean> edit(@RequestBody @Validated ShopActivateDTO activateDTO) {
return CzgResult.success(shopActivateService.edit(activateDTO));
}
/**
* 获取会员码
* @param params shopId 必填
* env_version 存在即生成体验版
*/
@PostMapping("/getVipCode")
public CzgResult<Object> getVipCode(@RequestBody Map<String, Object> params) throws Exception {
if (CollectionUtils.isEmpty(params) || !params.containsKey("shopId")) {
throw new CzgException("参数错误");
}
String redisKey = RedisCst.SHOP_VIP_CODE + params.get("shopId");
if (redisService.hasKey(redisKey)) {
return CzgResult.success(redisService.get(redisKey));
}
return CzgResult.success(wechatUtil.getFetchQrCode(params));
}
}

View File

@ -1,86 +0,0 @@
package com.czg.controller.admin;
import com.czg.account.dto.QueryReceiveDto;
import com.czg.account.dto.ShopCouponDTO;
import com.czg.account.service.ShopCouponService;
import com.czg.account.vo.CouponReceiveVo;
import com.czg.account.vo.UserCouponVo;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 店铺优惠券
*
* @author ww
* @description
*/
@RestController
@RequestMapping("/admin/coupon")
public class ShopCouponController {
@Resource
private ShopCouponService couponService;
/**
* 店铺优惠券列表
* 权限标识: coupon:list
* 状态 0 未使用 1已使用 2已过期
*/
@SaAdminCheckPermission(value = "coupon:list", name = "优惠券列表")
@GetMapping
public CzgResult<List<ShopCouponDTO>> detail(@RequestParam(required = false) Integer type,
@RequestParam(required = false) Integer status) {
return CzgResult.success(couponService.getList(StpKit.USER.getShopId(), type, status));
}
/**
* 店铺优惠券新增
* 权限标识: coupon:add
*/
@SaAdminCheckPermission(value = "coupon:add", name = "优惠券添加")
@PostMapping
public CzgResult<Boolean> add(@RequestBody @Validated ShopCouponDTO couponDTO) {
couponDTO.setShopId(StpKit.USER.getShopId());
return CzgResult.success(couponService.add(couponDTO));
}
/**
* 店铺优惠券修改
* 权限标识: coupon:edit
*/
@SaAdminCheckPermission(value = "coupon:edit", name = "优惠券修改")
@PutMapping
public CzgResult<Boolean> edit(@RequestBody @Validated ShopCouponDTO couponDTO) {
couponDTO.setShopId(StpKit.USER.getShopId());
return CzgResult.success(couponService.edit(couponDTO));
}
/**
* 店铺优惠券获取记录
* 权限标识: coupon:delete
*/
@SaAdminCheckPermission(value = "coupon:queryReceive", name = "优惠券领取记录")
@GetMapping("/queryReceive")
public CzgResult<Page<CouponReceiveVo>> queryReceive(@Validated QueryReceiveDto param) {
return CzgResult.success(couponService.queryReceive(param));
}
/**
* 生成订单后使用
* 通过用户Id 查找优惠券
*
* @param shopUserId 店铺用户Id
*/
@GetMapping("/findCoupon")
public CzgResult<List<UserCouponVo>> findCoupon(@RequestParam Long shopUserId, @RequestParam(required = false) Integer type) {
return CzgResult.success(couponService.findCoupon(StpKit.USER.getShopId(), shopUserId, type));
}
}

View File

@ -30,14 +30,11 @@ import java.util.List;
@RestController
@RequestMapping("/admin/shopInfo")
public class ShopInfoController {
private final ShopInfoService shopInfoService;
@Resource
private ShopInfoService shopInfoService;
@Resource
private AuthorizationService authorizationService;
public ShopInfoController(ShopInfoService shopInfoService) {
this.shopInfoService = shopInfoService;
}
/**
* 店铺列表, 只允许管理员调用
* 权限标识: shopInfo:list
@ -49,6 +46,15 @@ public class ShopInfoController {
return CzgResult.success(shopInfoService.get(pageDTO, shopName, status, isHeadShop));
}
/**
* 店铺的 店铺列表
*
*/
@GetMapping("/otherShop")
public CzgResult<Page<ShopInfo>> getShopByMainId(PageDTO pageDTO, String shopName, Integer status) {
return CzgResult.success(shopInfoService.getShopByMainId(pageDTO, shopName, status));
}
/**
* 店铺详情
* 权限标识: shopInfo:detail
@ -99,19 +105,7 @@ public class ShopInfoController {
*/
@GetMapping("branchList")
public CzgResult<List<ShopBranchSelectDTO>> findShopBranch() {
Long shopId = StpKit.USER.getShopId(0L);
String tokenValue = StpKit.USER.getTokenInfo().getTokenValue();
Long headId = StpKit.USER.getHeadId();
List<TokenSign> tokenSignList = StpKit.USER.getSession().getTokenSignList();
if (headId != null && CollUtil.isEmpty(tokenSignList)) {
shopId = StpKit.USER.getHeadShopId();
} else {
long count = tokenSignList.stream().filter(obj -> tokenValue.equals(obj.getValue())).count();
if (headId != null && count == 0) {
shopId = StpKit.USER.getHeadShopId();
}
}
List<ShopBranchSelectDTO> data = shopInfoService.findShopBranch(shopId);
List<ShopBranchSelectDTO> data = shopInfoService.findShopBranch(StpKit.USER.getShopId());
return CzgResult.success(data);
}

View File

@ -1,54 +1,54 @@
package com.czg.controller.admin;
import com.czg.account.dto.ShopShareDTO;
import com.czg.account.service.ShopShareService;
import com.czg.account.vo.ShopShareRecordVO;
import com.czg.account.vo.ShopShareVO;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 小程序分享奖励管理
* @author Administrator
*/
@RestController
@RequestMapping("/admin/shopShare")
public class ShopShareController {
@Resource
private ShopShareService shopShareService;
/**
* 获取分享奖励配置
*/
@SaAdminCheckPermission(value = "shopShare:list", name = "分享好友信息")
@GetMapping
public CzgResult<ShopShareVO> get() {
return CzgResult.success(shopShareService.get(StpKit.USER.getShopId()));
}
/**
* 修改分享奖励配置
*/
@SaAdminCheckPermission(value = "shopShare:add", name = "分享好友信息添加")
@PostMapping
public CzgResult<Boolean> add(@RequestBody @Validated ShopShareDTO shopShareDTO) {
return CzgResult.success(shopShareService.add(StpKit.USER.getShopId(), shopShareDTO));
}
/**
* 分享奖励记录
* @param key 邀请人/被邀请人手机号或昵称
* @param status 0 非新用户 1 未领取 2 已领取 3 已使用 不传递为全部
* @return 分页数据
*/
@SaAdminCheckPermission(value = "shopShare:record", name = "分享邀请记录")
@GetMapping("/record")
public CzgResult<Page<ShopShareRecordVO>> record(String key, Integer status) {
return CzgResult.success(shopShareService.recordPage(StpKit.USER.getShopId(), key, status));
}
}
//package com.czg.controller.admin;
//
//import com.czg.account.dto.ShopShareDTO;
//import com.czg.account.service.ShopShareService;
//import com.czg.account.vo.ShopShareRecordVO;
//import com.czg.account.vo.ShopShareVO;
//import com.czg.annotation.SaAdminCheckPermission;
//import com.czg.resp.CzgResult;
//import com.czg.sa.StpKit;
//import com.mybatisflex.core.paginate.Page;
//import jakarta.annotation.Resource;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.*;
//
///**
// * 小程序分享奖励管理
// * @author Administrator
// */
//@RestController
//@RequestMapping("/admin/shopShare")
//public class ShopShareController {
// @Resource
// private ShopShareService shopShareService;
//
// /**
// * 获取分享奖励配置
// */
// @SaAdminCheckPermission(value = "shopShare:list", name = "分享好友信息")
// @GetMapping
// public CzgResult<ShopShareVO> get() {
// return CzgResult.success(shopShareService.get(StpKit.USER.getShopId()));
// }
//
// /**
// * 修改分享奖励配置
// */
// @SaAdminCheckPermission(value = "shopShare:add", name = "分享好友信息添加")
// @PostMapping
// public CzgResult<Boolean> add(@RequestBody @Validated ShopShareDTO shopShareDTO) {
// return CzgResult.success(shopShareService.add(StpKit.USER.getShopId(), shopShareDTO));
// }
//
// /**
// * 分享奖励记录
// * @param key 邀请人/被邀请人手机号或昵称
// * @param status 0 非新用户 1 未领取 2 已领取 3 已使用 不传递为全部
// * @return 分页数据
// */
// @SaAdminCheckPermission(value = "shopShare:record", name = "分享邀请记录")
// @GetMapping("/record")
// public CzgResult<Page<ShopShareRecordVO>> record(String key, Integer status) {
// return CzgResult.success(shopShareService.recordPage(StpKit.USER.getShopId(), key, status));
// }
//}

View File

@ -2,14 +2,15 @@ package com.czg.controller.admin;
import com.czg.account.dto.shopuser.*;
import com.czg.account.entity.ShopUser;
import com.czg.account.service.AShopUserService;
import com.czg.account.service.ShopUserFlowService;
import com.czg.account.service.ShopUserService;
import com.czg.account.vo.ShopUserFlowVO;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.annotation.SaStaffCheckPermission;
import com.czg.enums.ShopUserFlowBizEnum;
import com.czg.market.entity.SmsPushEventUser;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.utils.AssertUtil;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
@ -29,7 +30,7 @@ import java.math.BigDecimal;
public class ShopUserController {
@Resource
private ShopUserService shopUserService;
private AShopUserService shopUserService;
@Resource
private ShopUserFlowService shopUserFlowService;
@ -43,7 +44,7 @@ public class ShopUserController {
@GetMapping("/summary")
// @SaStaffCheckPermission("yun_xu_guan_li_hui_yuan_xin_xi")
public CzgResult<ShopUserSummaryDTO> summary(Integer isVip) {
return CzgResult.success(shopUserService.getSummary(StpKit.USER.getUsableShopId(), isVip));
return CzgResult.success(shopUserService.getSummary(StpKit.USER.getHeadShopIdBySession(), isVip));
}
/**
@ -67,7 +68,7 @@ public class ShopUserController {
@GetMapping("/flow")
// @SaStaffCheckPermission("yun_xu_guan_li_hui_yuan_xin_xi")
public CzgResult<Page<ShopUserFlowVO>> flow(Integer userId, String bizCode, String startTime, String endTime) {
return CzgResult.success(shopUserFlowService.pageInfo(StpKit.USER.getUsableShopId(), userId, bizCode, startTime, endTime));
return CzgResult.success(shopUserFlowService.pageInfo(StpKit.USER.getShopId(), userId, bizCode, startTime, endTime));
}
/**
@ -83,7 +84,7 @@ public class ShopUserController {
@GetMapping("/flow/download")
// @SaStaffCheckPermission("yun_xu_guan_li_hui_yuan_xin_xi")
public void flowDownload(Integer userId, String bizCode, String startTime, String endTime, HttpServletResponse response) throws IOException {
shopUserFlowService.flowDownload(StpKit.USER.getUsableShopId(), userId, bizCode, startTime, endTime, response);
shopUserFlowService.flowDownload(StpKit.USER.getHeadShopIdBySession(), userId, bizCode, startTime, endTime, response);
}
/**
@ -100,6 +101,11 @@ public class ShopUserController {
return CzgResult.success(shopUserService.getPage(key, isVip, amount));
}
@GetMapping("/getPage")
public CzgResult<Page<ShopUser>> getPage(@RequestParam(required = false)String key,@RequestParam(required = false) Integer isVip) {
return CzgResult.success(shopUserService.getPage(key, isVip));
}
/**
* 获取店铺用户详情
* @param id 会员用户id
@ -125,7 +131,7 @@ public class ShopUserController {
@SaAdminCheckPermission(value = "shopUser:add", name = "店铺用户添加")
@PostMapping
public CzgResult<Boolean> add(@RequestBody @Validated ShopUserAddDTO shopUserAddDTO) {
return CzgResult.success(shopUserService.add(StpKit.USER.getUsableShopId(), shopUserAddDTO));
return CzgResult.success(shopUserService.add(StpKit.USER.getHeadShopIdBySession(), shopUserAddDTO));
}
/**
@ -137,7 +143,7 @@ public class ShopUserController {
@SaAdminCheckPermission(value = "shopUser:edit", name = "店铺用户修改")
@PutMapping
public CzgResult<Boolean> edit(@RequestBody @Validated ShopUserEditDTO shopUserEditDTO) {
return CzgResult.success(shopUserService.updateInfo(StpKit.USER.getUsableShopId(), shopUserEditDTO));
return CzgResult.success(shopUserService.updateInfo(StpKit.USER.getHeadShopIdBySession(), shopUserEditDTO));
}
/**
@ -150,7 +156,29 @@ public class ShopUserController {
@PutMapping("/money")
public CzgResult<Boolean> editMoney(@RequestBody @Validated ShopUserMoneyEditDTO shopUserMoneyEditDTO) {
shopUserMoneyEditDTO.setBizEnum(ShopUserFlowBizEnum.ADMIN_IN);
return CzgResult.success(shopUserService.updateMoney(StpKit.USER.getUsableShopId(), shopUserMoneyEditDTO) > 0L);
return CzgResult.success(shopUserService.updateMoney(shopUserMoneyEditDTO) > 0L);
}
/**
* 获取营销推送任务用户列表
* @param smsPushEventUser 营销推送任务用户
* @return 用户列表
*/
@PostMapping("/getPushEventUser")
public CzgResult<Page<ShopUser>> getPushEventUser(@RequestBody @Validated SmsPushEventUser smsPushEventUser) {
AssertUtil.isNull(smsPushEventUser.getShopId(), "店铺id不能为空");
return CzgResult.success(shopUserService.getPushEventUser(smsPushEventUser));
}
/**
* 获取公众号推送任务用户列表
* @param pushEventUser 公众号推送任务用户
* @return 用户列表
*/
@PostMapping("/getAcPushEventUser")
public CzgResult<Page<ShopUser>> getAcPushEventUser(@RequestBody @Validated SmsPushEventUser pushEventUser) {
AssertUtil.isNull(pushEventUser.getShopId(), "店铺id不能为空");
return CzgResult.success(shopUserService.getAcPushEventUser(pushEventUser));
}
}

View File

@ -0,0 +1,55 @@
package com.czg.controller.admin;
import com.czg.account.entity.SysImageLibrary;
import com.czg.account.service.SysImageLibraryService;
import com.czg.resp.CzgResult;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
/**
* 自用图库接口
*
* @author ww
* @description
*/
@RestController
@RequestMapping("/admin/image")
public class SysImageLibraryController {
@Resource
private SysImageLibraryService sysImageLibraryService;
/**
* 获取系统图库分页列表
* @param name 文件名称 模糊匹配
* @return 系统图库分页列表
*/
@GetMapping("/get")
public CzgResult<Page<SysImageLibrary>> get(@RequestParam(required = false) String name) {
return CzgResult.success(sysImageLibraryService.getImagePage(name));
}
/**
* 保存系统图库
* @param sysImageLibrary 系统图库
* @return
*/
@PostMapping("/saveOrUpdate")
public CzgResult<Void> saveOrUpdate(@RequestBody SysImageLibrary sysImageLibrary) {
sysImageLibraryService.saveOrUpdate(sysImageLibrary);
return CzgResult.success();
}
/**
* 上传系统图库图片
* @param fileName 图片文件名 必填
* @param suffix 图片扩展名 必填
* @param file 图片文件 必填
* @return 图片地址
*/
@PostMapping("/upload")
public CzgResult<String> upload(@RequestParam String fileName, @RequestParam String suffix, @RequestParam MultipartFile file) throws Exception {
return CzgResult.success(sysImageLibraryService.upload(file.getBytes(), fileName, suffix));
}
}

View File

@ -3,23 +3,27 @@ package com.czg.controller.user;
import com.czg.account.dto.shopuser.ShopUserAddDTO;
import com.czg.account.dto.shopuser.ShopUserDetailDTO;
import com.czg.account.dto.shopuser.ShopUserVipCardDTO;
import com.czg.account.entity.MemberPointsLog;
import com.czg.account.entity.ShopUser;
import com.czg.account.entity.ShopUserFlow;
import com.czg.account.entity.*;
import com.czg.account.service.MemberPointsLogService;
import com.czg.account.service.PointsExchangeRecordService;
import com.czg.account.service.ShopUserFlowService;
import com.czg.account.service.ShopUserService;
import com.czg.account.service.UShopUserService;
import com.czg.account.vo.MemberPointsLogVO;
import com.czg.account.vo.PointsShopListVO;
import com.czg.account.vo.ShopUserFlowInfoVO;
import com.czg.annotation.Debounce;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.utils.MyQueryWrapper;
import com.czg.utils.PageUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryCondition;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 店铺会员相关
*
@ -29,12 +33,10 @@ import org.springframework.web.bind.annotation.*;
@RequestMapping("/user/shopUser")
public class UShopUserController {
@Resource
private ShopUserService shopUserService;
private UShopUserService shopUserService;
@Resource
private ShopUserFlowService shopUserFlowService;
@Resource
private PointsExchangeRecordService pointsExchangeRecordService;
@Resource
private MemberPointsLogService memberPointsLogService;
/**
@ -45,7 +47,7 @@ public class UShopUserController {
*/
@GetMapping
public CzgResult<ShopUserDetailDTO> get(Long shopId) {
return CzgResult.success(shopUserService.getInfo(shopId == null ? StpKit.USER.getUsableShopId() : shopId, StpKit.USER.getLoginIdAsLong()));
return CzgResult.success(shopUserService.getInfo(shopId == null ? StpKit.USER.getShopId() : shopId, StpKit.USER.getLoginIdAsLong()));
}
/**
@ -65,7 +67,7 @@ public class UShopUserController {
*/
@GetMapping("/code")
public CzgResult<String> code(Long shopId) {
return shopUserService.getCode(StpKit.USER.getLoginIdAsLong(), shopId == null ? StpKit.USER.getUsableShopId() : shopId);
return shopUserService.getCode(StpKit.USER.getLoginIdAsLong(), shopId == null ? StpKit.USER.getShopId() : shopId);
}
/**
@ -76,7 +78,7 @@ public class UShopUserController {
@PostMapping
@Debounce("#shopUserAddDTO.phone")
public CzgResult<Boolean> join(@RequestBody @Validated ShopUserAddDTO shopUserAddDTO) {
return CzgResult.success(shopUserService.join(StpKit.USER.getUsableShopId(), StpKit.USER.getLoginIdAsLong(), shopUserAddDTO));
return CzgResult.success(shopUserService.join(StpKit.USER.getShopId(), StpKit.USER.getLoginIdAsLong(), shopUserAddDTO));
}
@ -85,9 +87,12 @@ public class UShopUserController {
* @return 分页数据
*/
@GetMapping("/moneyRecord")
public CzgResult<Page<ShopUserFlow>> getMoneyRecord() {
return CzgResult.success(shopUserFlowService.page(PageUtil.buildPage(), new QueryWrapper().eq(ShopUserFlow::getShopId, StpKit.USER.getShopId())
.eq(ShopUserFlow::getUserId, StpKit.USER.getLoginIdAsLong()).orderBy(ShopUserFlow::getId, false)));
public CzgResult<Page<ShopUserFlowInfoVO>> getMoneyRecord(@RequestParam Long shopId) {
return CzgResult.success(shopUserFlowService.pageAs(PageUtil.buildPage(), new MyQueryWrapper().eq(ShopUserFlow::getShopId, shopId)
.selectAll(ShopUserFlow.class)
.eq(ShopUserFlow::getUserId, StpKit.USER.getLoginIdAsLong()).leftJoin(ShopInfo.class).on(ShopUserFlow::getShopId, ShopInfo::getId)
.select(ShopInfo::getShopName)
.orderBy(ShopUserFlow::getId, false), ShopUserFlowInfoVO.class));
}
/**
@ -96,20 +101,32 @@ public class UShopUserController {
* @return 明细数据
*/
@GetMapping("/moneyRecord/detail")
public CzgResult<ShopUserFlow> getMoneyRecordDetail(@RequestParam Long id) {
return CzgResult.success(shopUserFlowService.getOne(new QueryWrapper().eq(ShopUserFlow::getShopId, StpKit.USER.getShopId())
public CzgResult<ShopUserFlow> getMoneyRecordDetail(@RequestParam Long id, @RequestParam Long shopId) {
return CzgResult.success(shopUserFlowService.getOne(new QueryWrapper().eq(ShopUserFlow::getShopId, shopId)
.eq(ShopUserFlow::getUserId, StpKit.USER.getLoginIdAsLong()).eq(ShopUserFlow::getId, id)));
}
/**
* 获取用户所有门店下积分列表
*/
@GetMapping("/pointsShopList")
public CzgResult<List<PointsShopListVO>> getList(@RequestParam(required = false) String shopName) {
return CzgResult.success(memberPointsLogService.getList(StpKit.USER.getLoginIdAsLong(), shopName));
}
/**
* 获取积分明细
* @return 分页数据
*/
@GetMapping("/pointsRecord")
public CzgResult<Page<MemberPointsLog>> getPointsRecord() {
ShopUser shopUser = shopUserService.getOne(new QueryWrapper().eq(ShopUser::getShopId, StpKit.USER.getShopId()).eq(ShopUser::getUserId, StpKit.USER.getLoginIdAsLong()));
return CzgResult.success(memberPointsLogService.page(PageUtil.buildPage(), new QueryWrapper().eq(MemberPointsLog::getShopId, StpKit.USER.getShopId())
.eq(MemberPointsLog::getShopUserId, shopUser.getId()).orderBy(MemberPointsLog::getId, false)));
public CzgResult<Page<MemberPointsLogVO>> getPointsRecord(@RequestParam Long shopId) {
ShopUser shopUser = shopUserService.getShopUserInfo(shopId, StpKit.USER.getLoginIdAsLong());
return CzgResult.success(memberPointsLogService.pageAs(PageUtil.buildPage(), new MyQueryWrapper().eq(MemberPointsLog::getShopId, shopId)
.eq(MemberPointsLog::getShopUserId, shopUser.getId())
.selectAll(MemberPointsLog.class)
.select(ShopInfo::getShopName)
.leftJoin(ShopInfo.class).on(MemberPointsLog::getShopId, ShopInfo::getId)
.orderBy(MemberPointsLog::getId, false), MemberPointsLogVO.class));
}
/**
@ -118,14 +135,9 @@ public class UShopUserController {
* @return 明细数据
*/
@GetMapping("/pointsRecord/detail")
public CzgResult<MemberPointsLog> getPointsRecordDetail(@RequestParam Long id) {
ShopUser shopUser = shopUserService.getOne(new QueryWrapper().eq(ShopUser::getShopId, StpKit.USER.getShopId()).eq(ShopUser::getUserId, StpKit.USER.getLoginIdAsLong()));
return CzgResult.success(memberPointsLogService.getOne(new QueryWrapper().eq(MemberPointsLog::getShopId, StpKit.USER.getShopId())
public CzgResult<MemberPointsLog> getPointsRecordDetail(@RequestParam Long id,@RequestParam Long shopId) {
ShopUser shopUser = shopUserService.getShopUserInfo(shopId, StpKit.USER.getLoginIdAsLong());
return CzgResult.success(memberPointsLogService.getOne(new QueryWrapper().eq(MemberPointsLog::getShopId, shopId)
.eq(MemberPointsLog::getShopUserId, shopUser.getId()).eq(MemberPointsLog::getId, id)));
}
public static void main(String[] args) {
}
}

View File

@ -37,6 +37,11 @@ public class UserAuthorizationController {
return CzgResult.success(userAuthorizationService.login(userAuthorizationLoginDTO));
}
@PostMapping("/test")
public CzgResult<String> test() {
return CzgResult.success(StpKit.USER.getTokenValue());
}
/**
* 获取手机号
* @param getPhoneDTO 获取手机号信息
@ -69,14 +74,4 @@ public class UserAuthorizationController {
"shopName", shopInfo.getShopName()
));
}
/**
* 小程序登录
* @return 登录信息
*/
@PostMapping("/test")
public CzgResult<String> login(@RequestParam long id) {
StpKit.USER.login(id, "2342", null, "", MyStpLogic.LoginType.USER, false, "");
return CzgResult.success(StpKit.USER.getTokenValue());
}
}

View File

@ -1,5 +1,6 @@
package com.czg.controller.user;
import cn.hutool.core.util.StrUtil;
import com.czg.account.dto.user.userinfo.UserInfoDTO;
import com.czg.account.dto.user.userinfo.UserInfoEditDTO;
import com.czg.account.dto.user.userinfo.UserInfoPwdEditDTO;
@ -34,7 +35,7 @@ public class UserController {
*/
@PutMapping
public CzgResult<Boolean> update(@RequestBody UserInfoEditDTO userInfoEditDTO) {
return CzgResult.success(userInfoService.updateInfo(StpKit.USER.getUsableShopId(), StpKit.USER.getLoginIdAsLong(), userInfoEditDTO));
return CzgResult.success(userInfoService.updateInfo(StpKit.USER.getShopId(), StpKit.USER.getLoginIdAsLong(), userInfoEditDTO));
}
/**
@ -43,7 +44,7 @@ public class UserController {
*/
@PutMapping("/pwd")
public CzgResult<Boolean> updatePwd(@RequestBody UserInfoPwdEditDTO userInfoPwdEditDTO) {
if (!userInfoPwdEditDTO.getPayPwd().equals(userInfoPwdEditDTO.getCheckPayPwd())) {
if (StrUtil.isNotBlank(userInfoPwdEditDTO.getCheckPayPwd()) && !userInfoPwdEditDTO.getPayPwd().equals(userInfoPwdEditDTO.getCheckPayPwd())) {
return CzgResult.failure("两次密码不一致");
}
return CzgResult.success(userInfoService.updatePwd(StpKit.USER.getLoginIdAsLong(), userInfoPwdEditDTO));

View File

@ -1,33 +0,0 @@
package com.czg.controller.user;
import com.czg.account.dto.ShopActivateDTO;
import com.czg.account.service.ShopActivateService;
import com.czg.resp.CzgResult;
import jakarta.annotation.Resource;
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 java.util.List;
/**
* 用户店铺充值活动管理
*
* @author ww
*/
@RestController
@RequestMapping("/user/activate")
public class UserShopActivateController {
@Resource
private ShopActivateService shopActivateService;
/**
* 店铺充值活动列表
*/
@GetMapping
public CzgResult<List<ShopActivateDTO>> detail(@RequestParam(required = false) Long shopId) {
return CzgResult.success(shopActivateService.getList(shopId));
}
}

View File

@ -1,51 +0,0 @@
package com.czg.controller.user;
import com.czg.account.entity.ShopActivateCouponRecord;
import com.czg.account.service.ShopCouponService;
import com.czg.account.vo.UserCouponVo;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.utils.AssertUtil;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 店铺优惠券
*
* @author ww
* @description
*/
@RestController
@RequestMapping("/user/coupon")
public class UserShopCouponController {
@Resource
private ShopCouponService couponService;
/**
* 通过用户Id 查找优惠券
*
* @param status 0 未使用 1已使用 2已过期
*/
@GetMapping("/findByUserId")
public CzgResult<Page<ShopActivateCouponRecord>> findByUserId(
@RequestParam(required = false) Integer status,
@RequestParam(required = false) Long shopId) {
return CzgResult.success(couponService.find(StpKit.USER.getLoginIdAsLong(), shopId, status));
}
/**
* 生成订单后使用
* 通过用户Id 查找优惠券
*
* @param shopUserId 店铺用户Id
*/
@GetMapping("/findCoupon")
public CzgResult<List<UserCouponVo>> findCoupon(@RequestHeader String shopId, @RequestParam Long shopUserId, @RequestParam(required = false) Integer type) {
AssertUtil.isBlank(shopId, "店铺Id不能为空");
return CzgResult.success(couponService.findCoupon(Long.parseLong(shopId), shopUserId, type));
}
}

View File

@ -0,0 +1,2 @@
traceConsumerFilter=com.czg.config.TraceConsumerFilter
traceProviderFilter=com.czg.config.TraceProviderFilter

View File

@ -1,13 +1,13 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.31:3306/czg_cashier?useUnicode=true&characterEncoding=utf-8
url: jdbc:mysql://192.168.1.42:3306/czg_cashier?useUnicode=true&characterEncoding=utf-8
username: root
password: Chaozg123.
data:
redis:
host: 192.168.1.31
host: 192.168.1.42
port: 6379
password: Chaozg123.
timeout: 1000
@ -48,4 +48,3 @@ seata:
server-addr: 121.40.109.122:8848
namespace:
group: group_seata

View File

@ -51,3 +51,4 @@ seata:
namespace:
group: group_seata

View File

@ -51,3 +51,4 @@ seata:
namespace:
group: group_seata

View File

@ -3,11 +3,12 @@ server:
spring:
application:
name: account-server
name: account
profiles:
active: dev
include: tools
logging:
config: classpath:logback.xml
@ -44,5 +45,8 @@ pagehelper:
support-methods-arguments: true
dubbo:
provider:
filter: traceProviderFilter
consumer:
filter: traceConsumerFilter
check: false

View File

@ -2,9 +2,10 @@
<configuration scan="true" scanPeriod="30 seconds" debug="false">
<contextName>account-server</contextName>
<property name="log.charset" value="utf-8" />
<property name="log.pattern" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %msg%n" />
<property name="log.pattern"
value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) [traceId=%X{traceId:-}] - %msg%n" />
<!--写入文件格式-->
<property name="p_file" value="%d | [%thread] %-5level %c [%L] - %msg %n"/>
<property name="p_file" value="%d [traceId=%X{traceId:-}] | [%thread] %-5level %c [%L] - %msg %n "/>
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.czg</groupId>
<artifactId>cash-api</artifactId>
<version>1.0.0</version>
</parent>
<name>营销相关API</name>
<description>营销相关API</description>
<artifactId>market-server</artifactId>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.czg</groupId>
<artifactId>cash-common-log</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.czg</groupId>
<artifactId>market-service</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,29 @@
package com.czg;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.annotation.PostConstruct;
/**
* @author ww
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableTransactionManagement
@MapperScan("com.czg.service.market.mapper")
@EnableDubbo
@EnableScheduling
@Slf4j
public class MarketApplication {
public static void main(String[] args) {
SpringApplication.run(MarketApplication.class, args);
}
}

View File

@ -0,0 +1,75 @@
package com.czg.controller.admin;
import com.czg.market.dto.MkShopConsumerCouponDTO;
import com.czg.market.service.MkShopConsumerCouponService;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.validator.group.DefaultGroup;
import com.czg.validator.group.UpdateGroup;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import com.mybatisflex.core.paginate.Page;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 消费赠券
* @author ww
* @description
*/
@Slf4j
@RestController
@RequestMapping("/admin/consumerCoupon")
public class AConsumerCouponController {
@Resource
private MkShopConsumerCouponService mkShopConsumerCouponService;
/**
* 分页
*/
@GetMapping("/getConsumerCouponPage")
public CzgResult<Page<MkShopConsumerCouponDTO>> getConsumerCouponPage(MkShopConsumerCouponDTO param) {
Long shopId = StpKit.USER.getShopId(0L);
param.setShopId(shopId);
return CzgResult.success(mkShopConsumerCouponService.getConsumerCouponPage(param));
}
/**
* 详情
*/
@GetMapping("/getConsumerCouponById")
public CzgResult<MkShopConsumerCouponDTO> getConsumerCouponById(Long id) {
return CzgResult.success(mkShopConsumerCouponService.getConsumerCouponById(id));
}
/**
* 新增
*/
@PostMapping("/addConsumerCoupon")
public CzgResult<Void> addConsumerCoupon(@RequestBody MkShopConsumerCouponDTO param) {
Long shopId = StpKit.USER.getShopId(0L);
param.setShopId(shopId);
param.setLeftNum(param.getGiveNum());
mkShopConsumerCouponService.addConsumerCoupon(param);
return CzgResult.success();
}
/**
* 更新
*/
@PutMapping("/updateConsumerCouponById")
public CzgResult<Void> updateConsumerCouponById(@RequestBody @Validated({UpdateGroup.class, DefaultGroup.class}) MkShopConsumerCouponDTO param) {
mkShopConsumerCouponService.updateConsumerCouponById(param);
return CzgResult.success();
}
/**
* 删除
*/
@DeleteMapping("/deleteConsumerCoupon")
public CzgResult<Void> deleteConsumerCoupon(Long id) {
mkShopConsumerCouponService.deleteConsumerCoupon(id);
return CzgResult.success();
}
}

View File

@ -0,0 +1,217 @@
package com.czg.controller.admin;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.thread.ThreadUtil;
import com.czg.account.vo.UserCouponVo;
import com.czg.log.annotation.OperationLog;
import com.czg.market.dto.*;
import com.czg.market.service.MkCouponGiftService;
import com.czg.market.service.MkShopCouponRecordService;
import com.czg.market.service.ShopCouponService;
import com.czg.product.service.ShopSyncService;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.task.CouponTask;
import com.czg.utils.AssertUtil;
import com.czg.validator.group.DefaultGroup;
import com.czg.validator.group.InsertGroup;
import com.czg.validator.group.UpdateGroup;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.stream.Collectors;
/**
* 优惠券
*
* @author ww
*/
@Slf4j
@RestController
@RequestMapping("/admin/coupon")
public class ACouponController {
@Resource
private ShopCouponService shopCouponService;
@Resource
private MkCouponGiftService couponGiftService;
@Resource
private MkShopCouponRecordService couponRecordService;
@DubboReference
private ShopSyncService shopSyncService;
/**
* 分页
*/
@GetMapping("page")
// @OperationLog("优惠券列表-分页")
// @SaAdminCheckPermission("coupon:page")
public CzgResult<Page<ShopCouponDTO>> getCouponPage(ShopCouponDTO param) {
Long shopId = StpKit.USER.getShopId(0L);
param.setShopId(shopId);
Page<ShopCouponDTO> data = shopCouponService.getCouponPage(param);
return CzgResult.success(data);
}
/**
* 详情
*
* @param id 主键id
*/
@GetMapping("{id}")
// @OperationLog("优惠券-详情")
// @SaAdminCheckPermission("coupon:info")
public CzgResult<ShopCouponDTO> getCouponById(@PathVariable("id") Long id) {
AssertUtil.isNull(id, "{}不能为空", "id");
ShopCouponDTO data = shopCouponService.getCouponById(id);
return CzgResult.success(data);
}
/**
* 新增
*/
@PostMapping
@OperationLog("优惠券-新增")
// @SaAdminCheckPermission("coupon:add")
public CzgResult<Void> addCoupon(@RequestBody @Validated({InsertGroup.class, DefaultGroup.class}) ShopCouponDTO dto) {
Long shopId = StpKit.USER.getShopId(0L);
dto.setShopId(shopId);
dto.setLeftNum(dto.getGiveNum());
shopCouponService.addCoupon(dto);
asyncToBranchShop(dto.getId(), 1);
return CzgResult.success();
}
/**
* 修改
*/
@PutMapping
@OperationLog("优惠券-修改")
// @SaAdminCheckPermission("coupon:update")
public CzgResult<Void> updateCoupon(@RequestBody @Validated({UpdateGroup.class, DefaultGroup.class}) ShopCouponDTO dto) {
Long shopId = StpKit.USER.getShopId(0L);
dto.setShopId(shopId);
shopCouponService.updateCouponById(dto);
couponGiftService.upCouponName(dto.getId(), dto.getTitle());
asyncToBranchShop(dto.getId(), 2);
return CzgResult.success();
}
/**
* 删除
*/
@DeleteMapping
@OperationLog("优惠券-删除")
// @SaAdminCheckPermission("prodGroup:delete")
public CzgResult<String> deleteCoupon(@RequestParam Long id, @RequestParam Integer type) {
AssertUtil.isNull(id, "{}不能为空", "id");
if (type != 1) {
List<MkCouponGiftDTO> gifts = couponGiftService.getCouponGiftBySourceId(id, 3);
if (CollUtil.isNotEmpty(gifts)) {
String collect = gifts.stream()
.map(MkCouponGiftDTO::getSourceName)
.filter(name -> name != null && !name.isEmpty())
.collect(Collectors.joining(","));
return CzgResult.success(collect);
}
}
shopCouponService.deleteCoupon(id);
couponGiftService.deleteCoupon(id);
asyncToBranchShop(id, 3);
return CzgResult.success();
}
/**
* 获取该券关联的功能列表
*
* @param couponId 如果syncId有值 则为syncId 否则为id
*/
@GetMapping("/gifts")
public CzgResult<Page<MkCouponGiftDTO>> getCouponGiftPage(@RequestParam Long couponId, @RequestParam(required = false) Integer type) {
Page<MkCouponGiftDTO> data = couponGiftService.getCouponGiftPage(couponId, type);
return CzgResult.success(data);
}
/**
* 消费赠券已领取详情
*/
@GetMapping("/consumerRecord")
public CzgResult<Page<MkShopCouponRecordDTO>> getConsumerRecord(
@RequestParam(required = false) String startTime,
@RequestParam(required = false) String endTime,
MkShopCouponRecordDTO param) {
Page<MkShopCouponRecordDTO> data = couponRecordService.getConsumerRecord(param, startTime, endTime);
return CzgResult.success(data);
}
/**
* 优惠券列表/已领取详情
*/
@GetMapping("/record")
public CzgResult<Page<MkShopCouponRecordDTO>> getRecordByCoupon(
@RequestParam(required = false) String startTime,
@RequestParam(required = false) String endTime,
MkShopCouponRecordDTO param) {
Page<MkShopCouponRecordDTO> data = couponRecordService.getRecord(param, startTime, endTime);
return CzgResult.success(data);
}
/**
* 优惠券列表/已领取详情
*
* @param param 用户的优惠券列表 使用该对象的UserId
*/
@GetMapping("/getRecordByUser")
public CzgResult<Page<MkShopCouponRecordDTO>> getRecordByUser(
@RequestParam(required = false) String startTime,
@RequestParam(required = false) String endTime,
MkShopCouponRecordDTO param) {
Page<MkShopCouponRecordDTO> data = couponRecordService.getRecordByShopUser(param, startTime, endTime);
return CzgResult.success(data);
}
/**
* 删除用户优惠券 失效
*
* @param id 优惠券记录Id
*/
@DeleteMapping("/deleteRecord")
public CzgResult<Void> cancelRecord(Long id) {
couponRecordService.deleteRecord(id);
return CzgResult.success();
}
private void asyncToBranchShop(Long id, Integer type) {
long shopId = StpKit.USER.getShopId(0L);
log.info("优惠券同步,优惠券id:{},类型:{}", id, type);
ThreadUtil.execAsync(() -> {
shopSyncService.syncCouponBySourceShop(shopId, id, type);
});
}
/**
* 券发放
*
* @return 是否发放成功
*/
@PostMapping("/grant")
public CzgResult<Boolean> rewardCoupon(@Validated @RequestBody MkRewardCouponDTO rewardCouponDTO) {
return CzgResult.success(couponRecordService.grant(rewardCouponDTO.getShopId() != null ? rewardCouponDTO.getShopId() : StpKit.USER.getShopId(), rewardCouponDTO));
}
/**
* 生成订单后使用
* 通过用户Id 查找优惠券
*
* @param shopUserId 店铺用户Id
*/
@GetMapping("/findCoupon")
public CzgResult<List<UserCouponVo>> findCoupon(@RequestParam Long shopUserId, @RequestParam(required = false) Integer type, @RequestParam(required = false) Integer isFood) {
return CzgResult.success(shopCouponService.findCoupon(StpKit.USER.getShopId(), shopUserId, type, isFood));
}
}

View File

@ -0,0 +1,85 @@
package com.czg.controller.admin;
import com.czg.TimeQueryParam;
import com.czg.log.annotation.OperationLog;
import com.czg.market.dto.MkDiscountActivityDTO;
import com.czg.market.service.MkDiscountActivityService;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.utils.AssertUtil;
import com.czg.validator.group.DefaultGroup;
import com.czg.validator.group.InsertGroup;
import com.czg.validator.group.UpdateGroup;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 满减活动
*
* @author Administrator
*/
@RestController
@RequestMapping("/admin/discountActivity")
public class ADiscountActivityController {
@Resource
private MkDiscountActivityService discountActivityService;
/**
* 分页
*/
@GetMapping("page")
public CzgResult<Page<MkDiscountActivityDTO>> getActivityPage(TimeQueryParam param) {
Page<MkDiscountActivityDTO> data = discountActivityService.getActivityPage(param, StpKit.USER.getShopId());
return CzgResult.success(data);
}
/**
* 新增
*/
@PostMapping
@OperationLog("满减活动-新增")
public CzgResult<Void> addActivity(@RequestBody @Validated({InsertGroup.class, DefaultGroup.class}) MkDiscountActivityDTO dto) {
Long shopId = StpKit.USER.getShopId();
dto.setShopId(shopId);
discountActivityService.addActivity(dto);
return CzgResult.success();
}
/**
* 修改
*/
@PutMapping
@OperationLog("满减活动-修改")
public CzgResult<Void> updateCoupon(@RequestBody @Validated({UpdateGroup.class, DefaultGroup.class}) MkDiscountActivityDTO dto) {
Long shopId = StpKit.USER.getShopId();
dto.setShopId(shopId);
discountActivityService.updateActivityById(dto);
return CzgResult.success();
}
/**
* 删除
*/
@DeleteMapping
@OperationLog("满减活动--删除")
public CzgResult<String> deleteCoupon(@RequestParam Long id) {
AssertUtil.isNull(id, "{}不能为空", "id");
discountActivityService.deleteActivity(id);
return CzgResult.success();
}
/**
* 分页
*/
@GetMapping
public CzgResult<MkDiscountActivityDTO> getActivity(@RequestParam Long shopId) {
MkDiscountActivityDTO data = discountActivityService.getActivityByShopId(shopId);
return CzgResult.success(data);
}
}

View File

@ -0,0 +1,84 @@
package com.czg.controller.admin;
import com.czg.TimeQueryParam;
import com.czg.log.annotation.OperationLog;
import com.czg.market.dto.MkLimitTimeDiscountDTO;
import com.czg.market.entity.MkLimitTimeDiscount;
import com.czg.market.service.MkLimitTimeDiscountService;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.utils.AssertUtil;
import com.czg.validator.group.DefaultGroup;
import com.czg.validator.group.InsertGroup;
import com.czg.validator.group.UpdateGroup;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 限时折扣
*
* @author Administrator
*/
@RestController
@RequestMapping("/admin/limitTimeDiscount")
public class ALimitTimeDiscountController {
@Resource
private MkLimitTimeDiscountService limitTimeDiscountService;
/**
* 限时折扣-分页
*/
@GetMapping("page")
public CzgResult<Page<MkLimitTimeDiscountDTO>> getLimitTimeDiscountPage(TimeQueryParam param) {
Page<MkLimitTimeDiscountDTO> data = limitTimeDiscountService.getLimitTimeDiscountPage(param, StpKit.USER.getShopId());
return CzgResult.success(data);
}
/**
* 限时折扣-新增
*/
@PostMapping
@OperationLog("限时折扣-新增")
public CzgResult<Void> addLimitTimeDiscount(@RequestBody @Validated({InsertGroup.class, DefaultGroup.class}) MkLimitTimeDiscountDTO dto) {
Long shopId = StpKit.USER.getShopId();
dto.setShopId(shopId);
limitTimeDiscountService.addLimitTimeDiscount(dto);
return CzgResult.success();
}
/**
* 限时折扣-修改
*/
@PutMapping
@OperationLog("限时折扣-修改")
public CzgResult<Void> updateLimitTimeDiscount(@RequestBody @Validated({UpdateGroup.class, DefaultGroup.class}) MkLimitTimeDiscountDTO dto) {
Long shopId = StpKit.USER.getShopId();
dto.setShopId(shopId);
limitTimeDiscountService.updateLimitTimeDiscountById(dto);
return CzgResult.success();
}
/**
* 限时折扣-删除
*/
@DeleteMapping
@OperationLog("限时折扣-删除")
public CzgResult<String> deleteLimitTimeDiscount(@RequestParam Long id) {
AssertUtil.isNull(id, "{}不能为空", "id");
limitTimeDiscountService.deleteLimitTimeDiscount(id);
return CzgResult.success();
}
/**
* 获取限时折扣
*/
@GetMapping
public CzgResult<MkLimitTimeDiscount> getActivity(@RequestParam Long shopId) {
MkLimitTimeDiscount data = limitTimeDiscountService.getLimitTimeDiscountByShopId(shopId);
return CzgResult.success(data);
}
}

View File

@ -0,0 +1,86 @@
package com.czg.controller.admin;
import com.czg.BaseQueryParam;
import com.czg.log.annotation.OperationLog;
import com.czg.market.dto.MkProductSmartSuggestDTO;
import com.czg.market.service.MkProductSmartSuggestService;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.utils.AssertUtil;
import com.czg.validator.group.DefaultGroup;
import com.czg.validator.group.InsertGroup;
import com.czg.validator.group.UpdateGroup;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* 点单智能推荐
*
* @author Administrator
*/
@RestController
@RequestMapping("/admin/suggest")
public class AProductSmartSuggestController {
@Resource
private MkProductSmartSuggestService suggestService;
/**
* 点单智能推荐-分页
*/
@GetMapping("page")
public CzgResult<Page<MkProductSmartSuggestDTO>> getProductSmartSuggestPage(BaseQueryParam param) {
Page<MkProductSmartSuggestDTO> data = suggestService.getProductSmartSuggestPage(param, StpKit.USER.getShopId());
return CzgResult.success(data);
}
/**
* 点单智能推荐-新增
*/
@PostMapping
@OperationLog("点单智能推荐-新增")
public CzgResult<Void> addProductSmartSuggest(@RequestBody @Validated({InsertGroup.class, DefaultGroup.class}) MkProductSmartSuggestDTO dto) {
Long shopId = StpKit.USER.getShopId();
dto.setShopId(shopId);
suggestService.addProductSmartSuggest(dto);
return CzgResult.success();
}
/**
* 点单智能推荐-修改
*/
@PutMapping
@OperationLog("点单智能推荐-修改")
public CzgResult<Void> updateProductSmartSuggest(@RequestBody @Validated({UpdateGroup.class, DefaultGroup.class}) MkProductSmartSuggestDTO dto) {
Long shopId = StpKit.USER.getShopId();
dto.setShopId(shopId);
suggestService.updateProductSmartSuggestById(dto);
return CzgResult.success();
}
/**
* 点单智能推荐-删除
*/
@DeleteMapping
@OperationLog("点单智能推荐-删除")
public CzgResult<String> deleteMkProductSmartSuggest(@RequestParam Long id) {
AssertUtil.isNull(id, "{}不能为空", "id");
suggestService.deleteProductSmartSuggest(id);
return CzgResult.success();
}
/**
* 获取点单智能推荐
*/
@GetMapping
public CzgResult<Map<String, Object>> getActivity(@RequestParam Long shopId) {
Map<String, Object> map = suggestService.getProductSmartSuggestByShopId(shopId);
return CzgResult.success(map);
}
}

View File

@ -0,0 +1,68 @@
package com.czg.controller.admin;
import com.czg.market.dto.AcPushEventDTO;
import com.czg.market.service.AcPushEventService;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.validator.group.InsertGroup;
import com.czg.validator.group.UpdateGroup;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 公众号推送
*
* @author ww
* @description
*/
@Slf4j
@RestController
@RequestMapping("/admin/acPushEvent")
public class AcPushEventController {
@Resource
private AcPushEventService pushEventService;
/**
* 公众号推送:列表
*/
@GetMapping
public CzgResult<Page<AcPushEventDTO>> getPushEventPage(@RequestParam(required = false, defaultValue = "1") Integer page,
@RequestParam(required = false, defaultValue = "10") Integer size,
@RequestParam(required = false) Integer status,
@RequestParam(required = false) Long id) {
Page<AcPushEventDTO> data = pushEventService.getPushEventPage(page, size, StpKit.USER.getShopId(), status, id);
return CzgResult.success(data);
}
/**
* 公众号推送:新增
*/
@PostMapping
public CzgResult<Void> addPushEvent(@RequestBody @Validated(InsertGroup.class) AcPushEventDTO param) {
param.setShopId(StpKit.USER.getShopId());
pushEventService.addPushEvent(param);
return CzgResult.success();
}
/**
* 公众号推送:更新
*/
@PutMapping
public CzgResult<Void> upPushEvent(@RequestBody @Validated(UpdateGroup.class) AcPushEventDTO param) {
param.setShopId(StpKit.USER.getShopId());
pushEventService.upPushEvent(param);
return CzgResult.success();
}
/**
* 公众号推送:删除任务
*/
@DeleteMapping("/{id}")
public CzgResult<Void> deletePushEvent(@PathVariable Long id) {
pushEventService.deletePushEvent(id);
return CzgResult.success();
}
}

View File

@ -0,0 +1,80 @@
package com.czg.controller.admin;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.market.dto.MkBirthdayGiftDTO;
import com.czg.market.service.MkBirthdayGiftService;
import com.czg.market.vo.MkBirthdayGiftRecordSummaryVO;
import com.czg.market.vo.MkBirthdayGiftRecordVO;
import com.czg.market.vo.MkBirthdayGiftVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
/**
* 生日有礼配置
* @author Administrator
*/
@RestController
@RequestMapping("/admin/birthdayGift")
public class BirthdayGiftController {
@Resource
private MkBirthdayGiftService service;
@GetMapping("/test")
public CzgResult<String> test() {
service.deliver();
return CzgResult.success();
}
/**
* 配置信息获取
* 权限标识: activate:list
*/
@SaAdminCheckPermission(value = "birthdayGift:detail", name = "生日有礼详情")
@GetMapping
public CzgResult<MkBirthdayGiftVO> detail() {
return CzgResult.success(service.detail(StpKit.USER.getMainShopId()));
}
/**
* 配置信息修改
* @return 是否成功
*/
@SaAdminCheckPermission(value = "birthdayGift:edit", name = "生日有礼修改")
@PostMapping
public CzgResult<Boolean> edit(@Validated @RequestBody MkBirthdayGiftDTO giftDTO) {
return CzgResult.success(service.edit(StpKit.USER.getMainShopId(), giftDTO));
}
/**
* 记录获取
* @return 是否成功
*/
@SaAdminCheckPermission(value = "birthdayGift:record", name = "生日有礼记录")
@GetMapping("/record")
public CzgResult<Page<MkBirthdayGiftRecordVO>> record(@RequestParam(required = false) LocalDateTime dateTime, @RequestParam(required = false) String key) {
return CzgResult.success(service.getRecord(StpKit.USER.getMainShopId(), key, dateTime));
// return null;
}
/**
* 记录获取
* @return 是否成功
*/
@SaAdminCheckPermission(value = "birthdayGift:summary", name = "生日有礼概述")
@GetMapping("/summary")
public CzgResult<MkBirthdayGiftRecordSummaryVO> summary(@RequestParam(required = false) String dateTime, @RequestParam(required = false) String key) {
return CzgResult.success(service.summary(StpKit.USER.getMainShopId(), key, StrUtil.isNotBlank(dateTime) ? DateUtil.parseLocalDateTime(dateTime) : null));
// return null;
}
}

View File

@ -0,0 +1,66 @@
package com.czg.controller.admin;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.market.dto.MkConsumeCashbackDTO;
import com.czg.market.service.MkConsumeCashbackRecordService;
import com.czg.market.service.MkConsumeCashbackService;
import com.czg.market.vo.MkConsumeCashbackVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.Map;
/**
* 消费返现
* @author Administrator
*/
@RestController
@RequestMapping("/admin/consumeCashback")
public class ConsumeCashbackController {
@Resource
private MkConsumeCashbackService service;
@Resource
private MkConsumeCashbackRecordService consumeCashbackRecordService;
/**
* 配置信息获取
* 权限标识: activate:list
*/
@SaAdminCheckPermission(value = "consumeDiscount:detail", name = "消费返现详情")
@GetMapping
public CzgResult<MkConsumeCashbackVO> detail() {
return CzgResult.success(service.detail(StpKit.USER.getMainShopId()));
}
/**
* 配置信息修改
* @return 是否成功
*/
@SaAdminCheckPermission(value = "consumeDiscount:edit", name = "消费返现修改")
@PostMapping
public CzgResult<Boolean> edit(@Validated @RequestBody MkConsumeCashbackDTO consumeDiscountDTO) {
return CzgResult.success(service.edit(StpKit.USER.getShopId(), consumeDiscountDTO));
}
/**
* 记录获取
* @return 是否成功
*/
@SaAdminCheckPermission(value = "consumeDiscount:record", name = "消费返现记录")
@GetMapping("/record")
public CzgResult<Map<String, Object>> record(@RequestParam(required = false) Long shopId, @RequestParam(required = false) String key,
@RequestParam(required = false)String startTime, @RequestParam(required = false) String endTime) {
return CzgResult.success(consumeCashbackRecordService.getRecord(StpKit.USER.getMainShopId(), shopId, key,
StrUtil.isNotBlank(startTime) ? DateUtil.parseLocalDateTime(startTime) : null, StrUtil.isNotBlank(endTime) ? DateUtil.parseLocalDateTime(endTime) : null));
}
}

View File

@ -0,0 +1,46 @@
package com.czg.controller.admin;
import com.czg.market.dto.MkConsumeDiscountDTO;
import com.czg.market.service.MkConsumeDiscountService;
import com.czg.market.vo.MkConsumeDiscountVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* 新客立减
* @author Administrator
*/
@RestController
@RequestMapping("/admin/consumeDiscount")
public class ConsumeDiscountController {
@Resource
private MkConsumeDiscountService consumeDiscountService;
/**
* 配置信息获取
* 权限标识: activate:list
*/
// @SaAdminCheckPermission(value = "member:detail", name = "会员配置列表")
@GetMapping
public CzgResult<MkConsumeDiscountVO> detail() {
return CzgResult.success(consumeDiscountService.detail(StpKit.USER.getShopId()));
}
/**
* 配置信息修改
* @return 是否成功
*/
// @SaAdminCheckPermission(value = "member:edit", name = "会员配置列表")
@PostMapping
public CzgResult<Boolean> edit(@Validated @RequestBody MkConsumeDiscountDTO consumeDiscountDTO) {
return CzgResult.success(consumeDiscountService.edit(StpKit.USER.getShopId(), consumeDiscountDTO));
}
}

View File

@ -0,0 +1,115 @@
package com.czg.controller.admin;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.annotation.SaCheckMainShop;
import com.czg.constant.TableValueConstant;
import com.czg.market.dto.MkRedemptionConfigDTO;
import com.czg.market.dto.MkEnableConfigDTO;
import com.czg.market.service.MkRedemptionConfigService;
import com.czg.market.service.MkEnableConfigService;
import com.czg.market.vo.MkRedemptionCodeVO;
import com.czg.market.vo.MkRedemptionConfigVO;
import com.czg.market.vo.MkEnableConfigVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.validator.group.UpdateGroup;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.groups.Default;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
*
* 券兑换码相关
* @author Administrator
*/
@RestController
@RequestMapping("/admin/couponRedemption")
public class CouponRedemptionController {
@Resource
private MkRedemptionConfigService configService;
@Resource
private MkEnableConfigService enableConfigService;
/**
* 开关可用门店修改
*/
@SaAdminCheckPermission(value = "couponRedemption:enable", name = "券兑换码状态修改")
@PutMapping("/enable")
public CzgResult<Boolean> upEnable(@Validated @RequestBody MkEnableConfigDTO dto) {
return CzgResult.success(enableConfigService.upEnable(StpKit.USER.getMainShopId(),StpKit.USER.getLoginIdAsLong(), dto, TableValueConstant.EnableConfig.Type.COUPON_REDEMPTION));
}
/**
* 开关状态可用门店详情
*/
@GetMapping("/enable/status")
public CzgResult<MkEnableConfigVO> upEnable() {
return CzgResult.success(enableConfigService.detail(StpKit.USER.getMainShopId(), StpKit.USER.getLoginIdAsLong(), TableValueConstant.EnableConfig.Type.COUPON_REDEMPTION));
}
/**
* 配置信息详情
*/
@SaAdminCheckPermission(value = "couponRedemption:detail", name = "券兑换码列表")
@GetMapping
public CzgResult<MkRedemptionConfigVO> detail(@RequestParam Long id) {
return CzgResult.success(configService.detail(StpKit.USER.getMainShopId(), id));
}
/**
* 配置信息获取 列表
*/
@SaAdminCheckPermission(value = "couponRedemption:list", name = "券兑换码列表")
@GetMapping("/list")
public CzgResult<Page<MkRedemptionConfigVO>> list(@RequestParam(required = false, defaultValue = "-1") Integer status) {
return CzgResult.success(configService.pageInfo(StpKit.USER.getMainShopId(), status, false));
}
/**
* 配置信息添加
*/
@SaAdminCheckPermission(value = "couponRedemption:add", name = "券兑换码配置添加")
@PostMapping
@SaCheckMainShop
public CzgResult<Boolean> add(@Validated @RequestBody MkRedemptionConfigDTO dto) {
return CzgResult.success(configService.add(StpKit.USER.getMainShopId(), dto, false));
}
/**
* 配置信息修改
*
* @return 是否成功
*/
@SaAdminCheckPermission(value = "couponRedemption:edit", name = "券兑换码修改")
@SaCheckMainShop
@PutMapping
public CzgResult<Boolean> edit(@Validated({UpdateGroup.class, Default.class}) @RequestBody MkRedemptionConfigDTO dto) {
return CzgResult.success(configService.edit(StpKit.USER.getShopId(), dto, false));
}
/**
* 券兑换码码列表
*
* @return 是否成功
*/
@SaAdminCheckPermission(value = "couponRedemption:codeList", name = "券兑换码码列表")
@GetMapping("/code/list")
public CzgResult<Page<MkRedemptionCodeVO>> codeList(@RequestParam Long redemptionId, @RequestParam(required = false) String code, @RequestParam(required = false) Integer status) {
return CzgResult.success(configService.codeList(StpKit.USER.getMainShopId(), redemptionId, code, status, false));
}
/**
* 券兑换码码导出
*/
@SaAdminCheckPermission(value = "couponRedemption:codeExport", name = "券兑换码码列表导出")
@GetMapping("/code/export")
public void exportCodeList(@RequestParam Long redemptionId, @RequestParam(required = false) String code, @RequestParam(required = false) Integer status,
HttpServletResponse response, HttpServletRequest request) {
configService.exportCodeList(StpKit.USER.getMainShopId(), redemptionId, code, status, response, request, false);
}
}

View File

@ -0,0 +1,148 @@
package com.czg.controller.admin;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.annotation.SaCheckMainShop;
import com.czg.market.dto.MkDistributionConfigDTO;
import com.czg.market.service.*;
import com.czg.market.vo.*;
import com.czg.order.dto.MkDistributionPayDTO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.service.market.service.impl.AppWxServiceImpl;
import com.czg.utils.AssertUtil;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.Map;
/**
*
* 分销相关
* @author Administrator
*/
@RestController
@RequestMapping("/admin/distribution")
public class DistributionController {
@Resource
private MkDistributionConfigService configService;
@Resource
private MkDistributionUserService distributionUserService;
@Resource
private MkDistributionAmountFlowService distributionAmountFlowService;
@Resource
private MkDistributionFlowService distributionFlowService;
@Resource
private MkDistributionWithdrawFlowService withdrawFlowService;
@Resource
private AppWxServiceImpl appWxService;
/**
* 配置信息详情
*/
@SaAdminCheckPermission(value = "distribution:detail", name = "分销配置")
@GetMapping
public CzgResult<MkDistributionConfigVO> detail() {
return CzgResult.success(configService.detail(StpKit.USER.getShopId()));
}
/**
* 配置信息修改
*
* @return 是否成功
*/
@SaAdminCheckPermission(value = "distribution:edit", name = "分销修改")
@PutMapping
public CzgResult<Boolean> edit( @RequestBody MkDistributionConfigDTO dto) {
return CzgResult.success(configService.edit(StpKit.USER.getShopId(), dto));
}
/**
* 现金充值
* @param payParam 充值信息
* @return 是否成功
*/
@PostMapping("/cashPay")
public CzgResult<Boolean> cashPayOrder(@Validated @RequestBody MkDistributionPayDTO payParam) {
AssertUtil.isNull(payParam.getShopId(), "店铺id不能为空");
AssertUtil.isNull(payParam.getAmount(), "充值金额不能为空");
AssertUtil.isTrue(payParam.getAmount().compareTo(BigDecimal.ZERO) == 0, "金额不为0");
return CzgResult.success(distributionUserService.cashPayOrder(StpKit.USER.getLoginIdAsLong(), payParam));
}
/**
* 金额记录
* @param type manual_recharge充值 self_recharge自助充值 refund退款 manual_sub手动扣减 sub统扣减
* @param key 搜索
*/
@GetMapping("/flow")
public CzgResult<Map<String, Object>> flow(@RequestParam(required = false) Long shopId, @RequestParam(required = false) String type,
@RequestParam(required = false) String key,@RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime) {
return CzgResult.success(distributionAmountFlowService.pageInfo(StpKit.USER.isAdmin() ? shopId : StpKit.USER.getShopId(), type, key,
StrUtil.isBlank(startTime) ? null : DateUtil.parseLocalDateTime(startTime), StrUtil.isBlank(endTime) ? null : DateUtil.parseLocalDateTime(endTime)));
}
/**
* 开通记录
* @param startTime 开始时间
* @param endTime 结束时间
* @param key 用户id昵称
*/
@GetMapping("openFlow")
public CzgResult<Map<String, Object>> openFlow(@RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime, @RequestParam(required = false) String key) {
return CzgResult.success(distributionAmountFlowService.openPageInfo(StpKit.USER.getShopId(),
StrUtil.isNotBlank(startTime) ? DateUtil.parseLocalDateTime(startTime) : null, StrUtil.isNotBlank(endTime) ? DateUtil.parseLocalDateTime(endTime) : null, key));
}
/**
* 分销明细
* @param startTime 开始时间
* @param endTime 结束时间
* @param key 用户id昵称
* @param status pending待入账 success已入账
*/
@GetMapping("distributionFlow")
public CzgResult<Map<String, Object>> distributionFlow(@RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime,
@RequestParam(required = false) String key, @RequestParam(required = false) String status,
@RequestParam(required = false) Long id) {
return CzgResult.success(distributionFlowService.pageInfo(StpKit.USER.getShopId(),
StrUtil.isNotBlank(startTime) ? DateUtil.parseLocalDateTime(startTime) : null, StrUtil.isNotBlank(endTime) ? DateUtil.parseLocalDateTime(endTime) : null, key, status, id));
}
/**
* 用户提现列表
* @param userId 用户id
* @param key 搜索
* @param startTime 开始时间
* @param endTime 结束时间
*/
@GetMapping("/withdrawFlow")
public CzgResult<Map<String, Object>> withdrawPageInfo(@RequestParam(required = false) Long userId, @RequestParam(required = false) String key,
@RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime) {
return CzgResult.success(withdrawFlowService.withdrawPageInfo(userId, StrUtil.isBlank(startTime) ? null : DateUtil.parseLocalDateTime(startTime),
StrUtil.isBlank(endTime) ? null : DateUtil.parseLocalDateTime(endTime), key));
}
/**
* 充值二维码获取
* @param amount 金额
* @return base64
*/
@GetMapping("/rechargeQrCode")
public CzgResult<String> rechargeQrCode(@RequestParam BigDecimal amount) {
return CzgResult.success(configService.rechargeQrCode(StpKit.USER.getShopId(), amount));
}
}

View File

@ -0,0 +1,109 @@
package com.czg.controller.admin;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.log.annotation.OperationLog;
import com.czg.market.dto.MkDistributionUserDTO;
import com.czg.market.entity.MkDistributionUser;
import com.czg.market.service.MkDistributionUserService;
import com.czg.market.vo.InviteUserVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.utils.AssertUtil;
import com.czg.validator.group.DefaultGroup;
import com.czg.validator.group.UpdateGroup;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 分销员
*
* @author Administrator
*/
@RestController
@RequestMapping("/admin/distribution/user")
public class DistributionUserController {
@Resource
private MkDistributionUserService distributionUserService;
/**
* 分销员:获取分销员分页列表
*/
@GetMapping
public CzgResult<Page<MkDistributionUserDTO>> getDistributionUser(MkDistributionUserDTO param) {
Long shopId = StpKit.USER.getShopId();
param.setShopId(shopId);
return CzgResult.success(distributionUserService.getDistributionUser(param));
}
/**
* 分销员:获取邀请人分页列表
*/
@GetMapping("/inviteUser")
public CzgResult<Page<InviteUserVO>> getInviteUser(
@RequestParam Long id,
@RequestParam(required = false) Long shopUserId,
@RequestParam(required = false) Long distributionLevelId,
@RequestParam(required = false, defaultValue = "1") Integer page,
@RequestParam(required = false, defaultValue = "10") Integer size) {
AssertUtil.isNull(id, "邀请人ID");
Long shopId = StpKit.USER.getShopId();
return CzgResult.success(distributionUserService.getInviteUser(id,shopId, shopUserId, distributionLevelId, page, size));
}
/**
* 分销员:添加分销员
*
* @return 是否成功
*/
@PostMapping
@OperationLog("分销员-添加")
@SaAdminCheckPermission(value = "distribution:user:add", name = "分销员添加")
public CzgResult<Void> addDistributionUser(@RequestBody MkDistributionUser param) {
Long shopId = StpKit.USER.getShopId();
param.setShopId(shopId);
distributionUserService.addDistributionUser(param);
return CzgResult.success();
}
/**
* 分销员:修改
*/
@PutMapping
@OperationLog("分销员-修改")
@SaAdminCheckPermission(value = "distribution:user:update", name = "分销员修改")
public CzgResult<Void> updateDistributionUser(@RequestBody @Validated({UpdateGroup.class, DefaultGroup.class}) MkDistributionUserDTO dto) {
Long shopId = StpKit.USER.getShopId();
dto.setShopId(shopId);
distributionUserService.updateDistributionUserById(dto);
return CzgResult.success();
}
@PostMapping("/resetLevel")
@OperationLog("分销员-重置分销组")
@SaAdminCheckPermission(value = "distribution:user:update", name = "重置分销组")
public CzgResult<Void> resetDistributionUserLevel(@RequestBody MkDistributionUserDTO dto) {
Long shopId = StpKit.USER.getShopId();
dto.setShopId(shopId);
distributionUserService.resetDistributionUserLevel(dto);
return CzgResult.success();
}
/**
* 分销员:删除
*/
@DeleteMapping
@OperationLog("分销员-删除")
@SaAdminCheckPermission(value = "distribution:user:delete", name = "分销员删除")
public CzgResult<String> deleteDistributionUser(@RequestParam Long id) {
AssertUtil.isNull(id, "{}不能为空", "id");
Long shopId = StpKit.USER.getShopId();
distributionUserService.deleteDistributionUser(id,shopId);
return CzgResult.success();
}
}

View File

@ -0,0 +1,56 @@
package com.czg.controller.admin;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.market.dto.MkBirthdayGiftDTO;
import com.czg.market.dto.MkDrainageConfigDTO;
import com.czg.market.entity.MkDrainageConfig;
import com.czg.market.service.MkBirthdayGiftService;
import com.czg.market.service.MkDrainageConfigService;
import com.czg.market.vo.MkBirthdayGiftRecordSummaryVO;
import com.czg.market.vo.MkBirthdayGiftRecordVO;
import com.czg.market.vo.MkBirthdayGiftVO;
import com.czg.market.vo.MkDrainageConfigVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
/**
* 私域引流配置
* @author Administrator
*/
@RestController
@RequestMapping("/admin/drainageConfig")
public class DrainageConfigController {
@Resource
private MkDrainageConfigService service;
/**
* 配置信息获取
* 权限标识: activate:list
*/
@SaAdminCheckPermission(value = "drainageConfig:detail", name = "私域引流详情")
@GetMapping
public CzgResult<MkDrainageConfigVO> detail() {
return CzgResult.success(service.detail(StpKit.USER.getShopId()));
}
/**
* 配置信息修改
* @return 是否成功
*/
@SaAdminCheckPermission(value = "drainageConfig:edit", name = "私域引流修改")
@PostMapping
public CzgResult<Boolean> edit(@Validated @RequestBody MkDrainageConfigDTO config) {
return CzgResult.success(service.edit(StpKit.USER.getShopId(), config));
}
}

View File

@ -0,0 +1,113 @@
package com.czg.controller.admin;
import com.czg.exception.ApiNotPrintException;
import com.czg.market.dto.MemberConfigDTO;
import com.czg.market.dto.MemberLevelDTO;
import com.czg.market.entity.MemberLevelConfig;
import com.czg.market.service.MemberLevelConfigService;
import com.czg.market.service.TbMemberConfigService;
import com.czg.market.vo.MemberConfigVO;
import com.czg.market.vo.MemberLevelVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.utils.AssertUtil;
import com.czg.validator.group.UpdateGroup;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import jakarta.validation.groups.Default;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* 会员配置管理
*/
@RestController
@RequestMapping("/admin/member")
public class MemberController {
@Resource
private TbMemberConfigService memberConfigService;
@Resource
private MemberLevelConfigService memberLevelConfigService;
/**
* 配置信息获取
* 权限标识: activate:list
*/
// @SaAdminCheckPermission(value = "member:detail", name = "会员配置列表")
@GetMapping
public CzgResult<MemberConfigVO> detail() {
return CzgResult.success(memberConfigService.detail(StpKit.USER.getShopId()));
}
/**
* 配置信息修改
* @return 是否成功
*/
// @SaAdminCheckPermission(value = "member:edit", name = "会员配置列表")
@PostMapping
public CzgResult<Boolean> edit(@Validated @RequestBody MemberConfigDTO memberDTO) {
AssertUtil.isTrue(!StpKit.USER.isMainShop(), "无权限操作");
return CzgResult.success(memberConfigService.edit(StpKit.USER.getShopId(), memberDTO));
}
/**
* 会员等级添加
* @return 是否成功
*/
// @SaAdminCheckPermission(value = "member:edit", name = "会员配置列表")
@PostMapping("/level")
public CzgResult<Boolean> addLevel(@Validated @RequestBody MemberLevelDTO levelDTO) throws ApiNotPrintException {
AssertUtil.isTrue(!StpKit.USER.isMainShop(), "无权限操作");
return CzgResult.success(memberConfigService.addLevel(StpKit.USER.getShopId(), levelDTO));
}
/**
* 会员等级修改
* @return 是否成功
*/
// @SaAdminCheckPermission(value = "member:edit", name = "会员配置列表")
@PutMapping("/level")
public CzgResult<Boolean> editLevel(@Validated({UpdateGroup.class, Default.class}) @RequestBody MemberLevelDTO levelDTO) throws ApiNotPrintException {
AssertUtil.isTrue(!StpKit.USER.isMainShop(), "无权限操作");
return CzgResult.success(memberConfigService.editLevel(StpKit.USER.getShopId(), levelDTO));
}
/**
* 会员等级删除
* @return 是否成功
*/
// @SaAdminCheckPermission(value = "member:edit", name = "会员配置列表")
@DeleteMapping("/level/{id}")
public CzgResult<Boolean> deleteLevel(@PathVariable Long id) {
AssertUtil.isTrue(!StpKit.USER.isMainShop(), "无权限操作");
return CzgResult.success(memberLevelConfigService.remove(new QueryWrapper().eq(MemberLevelConfig::getId, id).eq(MemberLevelConfig::getShopId, StpKit.USER.getShopId())));
}
/**
* 会员等级列表
* @return 是否成功
*/
// @SaAdminCheckPermission(value = "member:edit", name = "会员配置列表")
@GetMapping("/level/list")
public CzgResult<ArrayList<MemberLevelVO>> levelList() {
return CzgResult.success(memberConfigService.listLevel(StpKit.USER.getShopId()));
}
/**
* 会员等级详情
* @return 是否成功
*/
// @SaAdminCheckPermission(value = "member:edit", name = "会员配置列表")
@PutMapping("/level/detail")
public CzgResult<ArrayList<MemberLevelVO>> levelList(@RequestParam Integer id) {
AssertUtil.isTrue(!StpKit.USER.isMainShop(), "无权限操作");
return CzgResult.success(memberConfigService.listLevel(StpKit.USER.getShopId()));
}
}

View File

@ -0,0 +1,115 @@
package com.czg.controller.admin;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.annotation.SaCheckMainShop;
import com.czg.constant.TableValueConstant;
import com.czg.market.dto.MkRedemptionConfigDTO;
import com.czg.market.dto.MkEnableConfigDTO;
import com.czg.market.service.MkRedemptionConfigService;
import com.czg.market.service.MkEnableConfigService;
import com.czg.market.vo.MkRedemptionCodeVO;
import com.czg.market.vo.MkRedemptionConfigVO;
import com.czg.market.vo.MkEnableConfigVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.validator.group.UpdateGroup;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.groups.Default;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
*
* 充值兑换相关
* @author Administrator
*/
@RestController
@RequestMapping("/admin/rechargeRedemption")
public class RechargeRedemptionController {
@Resource
private MkRedemptionConfigService configService;
@Resource
private MkEnableConfigService enableConfigService;
/**
* 开关可用门店修改
*/
@SaAdminCheckPermission(value = "rechargeRedemption:enable", name = "充值兑换状态修改")
@PutMapping("/enable")
public CzgResult<Boolean> upEnable(@Validated @RequestBody MkEnableConfigDTO dto) {
return CzgResult.success(enableConfigService.upEnable(StpKit.USER.getMainShopId(),StpKit.USER.getLoginIdAsLong(), dto, TableValueConstant.EnableConfig.Type.RECHARGE_REDEMPTION));
}
/**
* 开关状态可用门店详情
*/
@GetMapping("/enable/status")
public CzgResult<MkEnableConfigVO> upEnable() {
return CzgResult.success(enableConfigService.detail(StpKit.USER.getMainShopId(), StpKit.USER.getLoginIdAsLong(), TableValueConstant.EnableConfig.Type.RECHARGE_REDEMPTION));
}
/**
* 配置信息详情
*/
@SaAdminCheckPermission(value = "rechargeRedemption:detail", name = "充值兑换列表")
@GetMapping
public CzgResult<MkRedemptionConfigVO> detail(@RequestParam Long id) {
return CzgResult.success(configService.detail(StpKit.USER.getMainShopId(), id));
}
/**
* 配置信息获取 列表
*/
@SaAdminCheckPermission(value = "rechargeRedemption:list", name = "充值兑换列表")
@GetMapping("/list")
public CzgResult<Page<MkRedemptionConfigVO>> list(@RequestParam(required = false, defaultValue = "-1") Integer status) {
return CzgResult.success(configService.pageInfo(StpKit.USER.getMainShopId(), status, true));
}
/**
* 配置信息添加
*/
@SaAdminCheckPermission(value = "rechargeRedemption:add", name = "充值兑换配置添加")
@PostMapping
@SaCheckMainShop
public CzgResult<Boolean> add(@Validated @RequestBody MkRedemptionConfigDTO dto) {
return CzgResult.success(configService.add(StpKit.USER.getMainShopId(), dto, true));
}
/**
* 配置信息修改
*
* @return 是否成功
*/
@SaAdminCheckPermission(value = "rechargeRedemption:edit", name = "充值兑换修改")
@SaCheckMainShop
@PutMapping
public CzgResult<Boolean> edit(@Validated({UpdateGroup.class, Default.class}) @RequestBody MkRedemptionConfigDTO dto) {
return CzgResult.success(configService.edit(StpKit.USER.getShopId(), dto, true));
}
/**
* 充值兑换码列表
*
* @return 是否成功
*/
@SaAdminCheckPermission(value = "rechargeRedemption:codeList", name = "充值兑换码列表")
@GetMapping("/code/list")
public CzgResult<Page<MkRedemptionCodeVO>> codeList(@RequestParam Long redemptionId, @RequestParam(required = false) String code, @RequestParam(required = false) Integer status) {
return CzgResult.success(configService.codeList(StpKit.USER.getMainShopId(), redemptionId, code, status, true));
}
/**
* 充值兑换码导出
*/
@SaAdminCheckPermission(value = "rechargeRedemption:codeExport", name = "充值兑换码列表导出")
@GetMapping("/code/export")
public void exportCodeList(@RequestParam Long redemptionId, @RequestParam(required = false) String code, @RequestParam(required = false) Integer status,
HttpServletResponse response, HttpServletRequest request) {
configService.exportCodeList(StpKit.USER.getMainShopId(), redemptionId, code, status, response, request, true);
}
}

View File

@ -0,0 +1,77 @@
package com.czg.controller.admin;
import com.czg.market.dto.MkShopRechargeDTO;
import com.czg.market.entity.MkShopConsumeDiscountRecord;
import com.czg.market.entity.MkShopRechargeFlow;
import com.czg.market.service.MkRechargeFlowService;
import com.czg.market.service.MkShopConsumeDiscountRecordService;
import com.czg.market.service.MkShopRechargeService;
import com.czg.market.vo.MkShopRechargeVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 智慧充值
* @author Administrator
*/
@RestController
@RequestMapping("/admin/shopRecharge")
public class ShopRechargeController {
@Resource
private MkShopRechargeService shopRechargeService;
@Resource
private MkRechargeFlowService rechargeFlowService;
@Resource
private MkShopConsumeDiscountRecordService shopConsumeDiscountRecordService;
@GetMapping("/test")
public CzgResult<MkShopConsumeDiscountRecord> get(@RequestParam Long shopId) {
// return CzgResult.success(shopConsumeDiscountRecordService.get(shopId));
return null;
}
/**
* 配置信息获取
* 权限标识: activate:list
*/
// @SaAdminCheckPermission(value = "member:detail", name = "会员配置列表")
@GetMapping
public CzgResult<MkShopRechargeVO> detail() {
if (!StpKit.USER.isManager()) {
return CzgResult.failure("无权限操作");
}
return CzgResult.success(shopRechargeService.detail(StpKit.USER.getShopId()));
}
/**
* 配置信息修改
* @return 是否成功
*/
// @SaAdminCheckPermission(value = "member:edit", name = "会员配置列表")
@PostMapping
public CzgResult<Boolean> edit(@Validated @RequestBody MkShopRechargeDTO shopRechargeDTO) {
if (!StpKit.USER.isManager()) {
return CzgResult.failure("无权限操作");
}
return CzgResult.success(shopRechargeService.edit(StpKit.USER.getShopId(), shopRechargeDTO));
}
/**
* 获取充值记录列表
* @param startTime 开始时间 闭区间
* @param endTime 结束时间 闭区间
* @param type 类型
*/
@GetMapping("/record")
public Page<MkShopRechargeFlow> getRecord(@RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime, @RequestParam(required = false) String type) {
return rechargeFlowService.pageInfo(StpKit.USER.getShopId(), startTime, endTime, type);
}
}

View File

@ -0,0 +1,68 @@
package com.czg.controller.admin;
import com.czg.market.dto.SmsPushEventDTO;
import com.czg.market.service.SmsPushEventService;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.validator.group.InsertGroup;
import com.czg.validator.group.UpdateGroup;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 短信推送任务
*
* @author ww
* @description
*/
@Slf4j
@RestController
@RequestMapping("/admin/pushEvent")
public class SmsPushEventController {
@Resource
private SmsPushEventService pushEventService;
/**
* 列表
*/
@GetMapping
public CzgResult<Page<SmsPushEventDTO>> getPushEventPage(@RequestParam(required = false, defaultValue = "1") Integer page,
@RequestParam(required = false, defaultValue = "10") Integer size,
@RequestParam(required = false) Integer status,
@RequestParam(required = false) Long id) {
Page<SmsPushEventDTO> data = pushEventService.getPushEventPage(page, size, StpKit.USER.getShopId(), status, id);
return CzgResult.success(data);
}
/**
* 新增
*/
@PostMapping
public CzgResult<Void> addPushEvent(@RequestBody @Validated(InsertGroup.class) SmsPushEventDTO param) {
param.setShopId(StpKit.USER.getShopId());
pushEventService.addPushEvent(param);
return CzgResult.success();
}
/**
* 更新
*/
@PutMapping
public CzgResult<Void> upPushEvent(@RequestBody @Validated(UpdateGroup.class) SmsPushEventDTO param) {
param.setShopId(StpKit.USER.getShopId());
pushEventService.upPushEvent(param);
return CzgResult.success();
}
/**
* 删除任务
*/
@DeleteMapping("/{id}")
public CzgResult<Void> deletePushEvent(@PathVariable Long id) {
pushEventService.deletePushEvent(id);
return CzgResult.success();
}
}

View File

@ -0,0 +1,169 @@
package com.czg.controller.admin;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSONObject;
import com.czg.annotation.SaAdminCheckRole;
import com.czg.market.dto.SmsMoneyDetailDto;
import com.czg.market.dto.SmsShopMoneyDetailDTO;
import com.czg.market.dto.SmsShopTemplateDTO;
import com.czg.market.dto.SmsTemplateQueryDTO;
import com.czg.market.entity.SmsShopMoney;
import com.czg.market.entity.SmsShopMoneyDetail;
import com.czg.market.service.SmsShopMoneyDetailService;
import com.czg.market.service.SmsShopMoneyService;
import com.czg.market.service.SmsShopTemplateService;
import com.czg.market.vo.SmsShopMoneyVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.service.market.mapper.SmsShopMoneyMapper;
import com.czg.validator.group.InsertGroup;
import com.czg.validator.group.UpdateGroup;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.List;
/**
* 短信模板
*
* @author ww
* @description
*/
@Slf4j
@RestController
@RequestMapping("/admin")
public class SmsShopTemplateController {
@Resource
private SmsShopTemplateService templateService;
@Resource
private SmsShopMoneyDetailService smsMoneyDetailService;
@Resource
private SmsShopMoneyService shopMoneyService;
/**
* 列表
*/
@GetMapping("/smsTemplate")
public CzgResult<List<SmsShopTemplateDTO>> getTemplateList(@RequestParam(required = false) String title,
@RequestParam(required = false) Integer status) {
List<SmsShopTemplateDTO> data = templateService.getTemplateList(title, StpKit.USER.getShopId(), status);
return CzgResult.success(data);
}
/**
* 平台 商家申请记录
*/
@SaAdminCheckRole("管理员")
@PostMapping("/smsTemplate/query")
public CzgResult<Page<SmsShopTemplateDTO>> getTemplateList2(@RequestBody SmsTemplateQueryDTO param) {
Page<SmsShopTemplateDTO> data = templateService.getTemplateList2(param);
return CzgResult.success(data);
}
/**
* 平台 模板状态/删除
*/
@SaAdminCheckRole("管理员")
@PostMapping("/smsTemplate/shopUse")
public CzgResult<Void> shopUse(@RequestBody SmsShopTemplateDTO param) {
templateService.shopUse(param);
return CzgResult.success();
}
/**
* 平台 获取店铺短信余额明细
*/
@SaAdminCheckRole("管理员")
@PostMapping("/smsMoneyDetail/query")
public CzgResult<Page<SmsShopMoneyDetailDTO>> getSmsMoneyDetail2(@RequestBody SmsMoneyDetailDto param) {
Page<SmsShopMoneyDetailDTO> data = smsMoneyDetailService.getSmsMoneyDetail2(param);
return CzgResult.success(data);
}
/**
* 新增
*/
@PostMapping("/smsTemplate")
public CzgResult<Void> addTemplate(@RequestBody @Validated(InsertGroup.class) SmsShopTemplateDTO param) {
param.setShopId(StpKit.USER.getShopId());
templateService.addTemplate(param);
return CzgResult.success();
}
/**
* 重新提交
* 状态为 -1 失败的 可以修改模板重新提交
*/
@PostMapping("/smsTemplate/resubmit")
public CzgResult<Void> resubmit(@RequestBody @Validated(UpdateGroup.class) SmsShopTemplateDTO param) {
param.setShopId(StpKit.USER.getShopId());
templateService.resubmit(param);
return CzgResult.success();
}
/**
* 获取店铺短信余额
*/
@GetMapping("/smsMoney")
public CzgResult<SmsShopMoney> getShopSmsMoney() {
SmsShopMoney shopMoney = shopMoneyService.getShopMoney(StpKit.USER.getShopId());
return CzgResult.success(shopMoney);
}
/**
* 平台短信店铺配置
*/
@SaAdminCheckRole("管理员")
@GetMapping("/smsMoney/page")
public CzgResult<Page<SmsShopMoneyVO>> getShopSmsMoneyPage(@RequestParam(required = false) Integer page,
@RequestParam(required = false) Integer size,
@RequestParam(required = false) String name
) {
Page<SmsShopMoneyVO> data = shopMoneyService.getShopMoneyPage(page, size, name);
return CzgResult.success(data);
}
/**
* 变更店铺短信余额
*/
@PostMapping("/smsMoney/change")
public CzgResult<Void> change(@RequestBody SmsShopMoneyDetailDTO money) {
// Long shopId = StpKit.USER.getShopId();
SmsShopMoney shopMoney = shopMoneyService.getShopMoney(money.getShopId());
SmsShopMoneyDetail moneyDetail = BeanUtil.toBean(money, SmsShopMoneyDetail.class);
moneyDetail.setShopId(money.getShopId());
if (money.getType() == 1) {
shopMoney.setMoney(shopMoney.getMoney().add(money.getExpense()));
} else {
shopMoney.setMoney(shopMoney.getMoney().subtract(money.getExpense()));
}
moneyDetail.setBalance(shopMoney.getMoney());
moneyDetail.setSendRows(0L);
smsMoneyDetailService.save(moneyDetail);
shopMoneyService.updateById(shopMoney);
return CzgResult.success();
}
/**
* 获取店铺短信余额明细
*/
@GetMapping("/smsMoneyDetail")
public CzgResult<JSONObject> getSmsMoneyDetailPage(@RequestParam(required = false) Integer page,
@RequestParam(required = false) Integer size) {
Page<SmsShopMoneyDetailDTO> data = smsMoneyDetailService.getSmsMoneyDetailPage(StpKit.USER.getShopId());
JSONObject from = JSONObject.from(data);
from.put("sendTotal", smsMoneyDetailService.countSendTotal(StpKit.USER.getShopId()));
from.put("sendAmountTotal", smsMoneyDetailService.countSendAmountTotal(StpKit.USER.getShopId()));
return CzgResult.success(from);
}
}

View File

@ -0,0 +1,33 @@
package com.czg.controller.user;
import com.czg.market.service.MkBirthdayGiftService;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Map;
/**
* 生日有礼相关
* @author Administrator
*/
@RestController
@RequestMapping("/user/birthdayGift")
public class UBirthdayGiftController {
@Resource
private MkBirthdayGiftService service;
/**
* 获取生日有礼 不为空则代表今日发放生日有礼的奖励
*/
@GetMapping
public CzgResult<ArrayList<Map<String, Object>>> detail(@RequestParam Integer shopId) {
return CzgResult.success(service.getInfo(StpKit.USER.getLoginIdAsLong(), shopId));
}
}

View File

@ -0,0 +1,34 @@
package com.czg.controller.user;
import com.czg.market.dto.MkDiscountActivityDTO;
import com.czg.market.service.MkDiscountActivityService;
import com.czg.resp.CzgResult;
import jakarta.annotation.Resource;
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;
/**
* 满减活动
*
* @author Administrator
*/
@RestController
@RequestMapping("/user/discountActivity")
public class UDiscountActivityController {
@Resource
private MkDiscountActivityService discountActivityService;
/**
* 分页
*/
@GetMapping()
public CzgResult<MkDiscountActivityDTO> getActivity(@RequestParam Long shopId) {
MkDiscountActivityDTO data = discountActivityService.getActivityByShopId(shopId);
return CzgResult.success(data);
}
}

View File

@ -0,0 +1,172 @@
package com.czg.controller.user;
import com.czg.account.entity.UserInfo;
import com.czg.market.dto.MkDistributionUserDTO;
import com.czg.market.dto.MkDistributionWithdrawFlowDTO;
import com.czg.market.entity.MkDistributionWithdrawFlow;
import com.czg.market.service.MkDistributionConfigService;
import com.czg.market.service.MkDistributionFlowService;
import com.czg.market.service.MkDistributionUserService;
import com.czg.market.service.MkDistributionWithdrawFlowService;
import com.czg.market.vo.DistributionCenterShopVO;
import com.czg.market.vo.InviteUserVO;
import com.czg.market.vo.MkDistributionConfigVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.service.market.service.impl.AppWxServiceImpl;
import com.czg.utils.AssertUtil;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* 分销相关
*
* @author Administrator
*/
@RestController
@RequestMapping("/user/distribution")
public class UDistributionController {
@Resource
private MkDistributionConfigService distributionConfigService;
@Resource
private MkDistributionUserService distributionUserService;
@Resource
private AppWxServiceImpl appWxService;
@Resource
private MkDistributionWithdrawFlowService withdrawFlowService;
@Resource
private MkDistributionFlowService distributionFlowService;
/**
* 分销员中心-获取配置
*/
@GetMapping("/getConfig")
public CzgResult<MkDistributionConfigVO> getConfig(@RequestParam Long shopId) {
return CzgResult.success(distributionConfigService.detail(shopId));
}
/**
* 分销员中心-首页
*/
@PostMapping("/centerUser")
public CzgResult<Map<String, Object>> centerUser() {
return CzgResult.success(distributionUserService.centerUser(StpKit.USER.getLoginIdAsLong()));
}
/**
* 分销员中心-已开通的店铺
*/
@GetMapping("/centerUser/activates")
public CzgResult<Page<DistributionCenterShopVO>> activates(@RequestParam(required = false, defaultValue = "1") Integer page, @RequestParam(required = false, defaultValue = "10") Integer size) {
return CzgResult.success(distributionUserService.activates(StpKit.USER.getLoginIdAsLong(), page, size));
}
/**
* 分销员中心-未开通的店铺
*/
@GetMapping("/centerUser/unActivates")
public CzgResult<Page<DistributionCenterShopVO>> unActivates(@RequestParam(required = false, defaultValue = "1") Integer page, @RequestParam(required = false, defaultValue = "10") Integer size) {
return CzgResult.success(distributionUserService.unActivates(StpKit.USER.getLoginIdAsLong(), page, size));
}
/**
* 分销员中心-配置信息
*/
@GetMapping("/centerConfig")
public CzgResult<Map<String, Object>> centerConfig(@RequestParam Long shopId) {
return CzgResult.success(distributionUserService.centerConfig(StpKit.USER.getLoginIdAsLong(), shopId));
}
/**
* 分销员中心-获取邀请码
*/
@GetMapping("/getInviteCode")
public CzgResult<String> getInviteCode(@RequestParam Long shopId, @RequestParam Long shopUserId) {
return CzgResult.success(distributionUserService.getInviteCode(shopId, shopUserId));
}
/**
* 分销员中心-实名认证
*/
@PostMapping("/realNameAuth")
public CzgResult<Map<String, Object>> realNameAuth(@RequestBody UserInfo userInfo) {
AssertUtil.isNull(userInfo.getId(), "用户Id不能为空");
AssertUtil.isNull(userInfo.getRealName(), "用户实名不能为空");
AssertUtil.isNull(userInfo.getIdCard(), "用户身份信息不能为空");
distributionUserService.realNameAuth(userInfo);
return CzgResult.success();
}
/**
* 分销员中心-绑定邀请人
*/
@PostMapping("/bindInviteUser")
public CzgResult<Map<String, Object>> bindInviteUser(@RequestBody MkDistributionUserDTO param) {
AssertUtil.isNull(param.getId(), "店铺用户ID不能为空");
AssertUtil.isNull(param.getShopId(), "店铺ID不能为空");
AssertUtil.isNull(param.getInviteCode(), "邀请码不能为空");
distributionUserService.bindInviteUser(param);
return CzgResult.success();
}
/**
* 分销员:获取邀请人分页列表
*/
@GetMapping("/inviteUser")
public CzgResult<Page<InviteUserVO>> getInviteUser(
@RequestParam Long id,
@RequestParam Long shopId,
@RequestParam(required = false, defaultValue = "1") Integer page,
@RequestParam(required = false, defaultValue = "10") Integer size) {
AssertUtil.isNull(id, "邀请人ID");
return CzgResult.success(distributionUserService.getInviteUser(id, shopId, null, null, page, size));
}
/**
* 用户提现
*
* @param withdrawFlowDTO 提现信息
* @return 是否成功
*/
@PostMapping("/withdraw")
public CzgResult<Boolean> withdraw(@Validated @RequestBody MkDistributionWithdrawFlowDTO withdrawFlowDTO) {
return CzgResult.success(distributionUserService.withdraw(StpKit.USER.getLoginIdAsLong(), withdrawFlowDTO));
}
/**
* 提现详情
*/
@GetMapping("/withdraw/detail")
public CzgResult<Map<String, Object>> withdraw(@RequestParam Long id) {
return CzgResult.success(distributionUserService.withdrawDetail(StpKit.USER.getLoginIdAsLong(), id));
}
/**
* 提现记录
*/
@GetMapping("/withdraw/flow")
public CzgResult<Page<MkDistributionWithdrawFlow>> withArdwFlow() {
return CzgResult.success(withdrawFlowService.pageInfo(StpKit.USER.getLoginIdAsLong()));
}
/**
* 收益明细
*
* @param startTime
* @param endTime
* @param shopId
* @param status pending待入账 success已入账
*/
@GetMapping("/distributionFlow")
public CzgResult<Map<String, Object>> distributionFlow(@RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime,
@RequestParam(required = false) Long shopId, @RequestParam(required = false) String status) {
return CzgResult.success(distributionFlowService.distributionFlow(StpKit.USER.getLoginIdAsLong(), startTime, endTime, shopId, status));
}
}

View File

@ -0,0 +1,38 @@
package com.czg.controller.user;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.market.dto.MkDrainageConfigDTO;
import com.czg.market.service.MkDrainageConfigService;
import com.czg.market.vo.MkDrainageConfigVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 私域引流配置
* @author Administrator
*/
@RestController
@RequestMapping("/user/drainageConfig")
public class UDrainageConfigController {
@Resource
private MkDrainageConfigService service;
/**
* 配置信息获取
* 权限标识: activate:list
*/
@GetMapping
public CzgResult<MkDrainageConfigVO> detail(@RequestParam Long shopId) {
return CzgResult.success(service.detail(shopId));
}
}

View File

@ -0,0 +1,34 @@
package com.czg.controller.user;
import com.czg.market.entity.MkLimitTimeDiscount;
import com.czg.market.service.MkLimitTimeDiscountService;
import com.czg.resp.CzgResult;
import jakarta.annotation.Resource;
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;
/**
* 限时折扣
*
* @author ww
*/
@RestController
@RequestMapping("/user/limitTimeDiscount")
public class ULimitTimeDiscountController {
@Resource
private MkLimitTimeDiscountService limitTimeDiscountService;
/**
* 获取限时折扣
*/
@GetMapping
public CzgResult<MkLimitTimeDiscount> getActivity(@RequestParam Long shopId) {
MkLimitTimeDiscount data = limitTimeDiscountService.getLimitTimeDiscountByShopId(shopId);
return CzgResult.success(data);
}
}

View File

@ -0,0 +1,51 @@
package com.czg.controller.user;
import com.czg.market.service.TbMemberConfigService;
import com.czg.market.vo.MemberDetailVO;
import com.czg.market.vo.MemberListVO;
import com.czg.market.vo.UMemberConfigVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 会员相关
*
* @author Administrator
*/
@RestController
@RequestMapping("/user/member")
public class UMemberController {
@Resource
private TbMemberConfigService memberConfigService;
/**
* 获取当前店铺会员开通配置信息
* @param shopId 店铺id
*/
@GetMapping("/config")
public CzgResult<UMemberConfigVO> getConfig(@RequestParam Long shopId) {
return CzgResult.success(memberConfigService.detail(shopId, StpKit.USER.getLoginIdAsLong()));
}
/**
* 获取所有已开通的会员
* @return 列表
*/
@GetMapping("/list")
public CzgResult<List<MemberListVO>> getMemberList() {
return CzgResult.success(memberConfigService.getMemberList(StpKit.USER.getLoginIdAsLong()));
}
/**
* 获取会员信息详情
* @param shopId 店铺id
*/
@GetMapping("/detail")
public CzgResult<MemberDetailVO> getDetail(@RequestParam Long shopId) {
return CzgResult.success(memberConfigService.getUserDetail(StpKit.USER.getLoginIdAsLong(), shopId));
}
}

View File

@ -0,0 +1,35 @@
package com.czg.controller.user;
import com.czg.market.service.MkProductSmartSuggestService;
import com.czg.resp.CzgResult;
import jakarta.annotation.Resource;
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 java.util.Map;
/**
* 点单智能推荐
*
* @author ww
*/
@RestController
@RequestMapping("/user/suggest")
public class UProductSmartSuggestController {
@Resource
private MkProductSmartSuggestService suggestService;
/**
* 获取点单智能推荐
*/
@GetMapping
public CzgResult<Map<String, Object>> getActivity(@RequestParam Long shopId) {
Map<String, Object> map = suggestService.getProductSmartSuggestByShopId(shopId);
return CzgResult.success(map);
}
}

View File

@ -0,0 +1,54 @@
package com.czg.controller.user;
import com.czg.market.service.MkShopRechargeService;
import com.czg.market.vo.MkShopRechargeShopListVO;
import com.czg.market.vo.MkShopRechargeVO;
import com.czg.market.vo.RechargeListVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import jakarta.annotation.Resource;
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 java.util.List;
/**
* 充值相关
*
* @author Administrator
*/
@RestController
@RequestMapping("/user/recharge")
public class URechargeController {
@Resource
private MkShopRechargeService shopRechargeService;
/**
* 获取充值配置
* @param shopId 店铺id
*/
@GetMapping("/config")
public CzgResult<MkShopRechargeVO> getConfig(@RequestParam Long shopId) {
return CzgResult.success(shopRechargeService.detail(shopId));
}
/**
* 可用店铺列表
* @param shopId 店铺id
*/
@GetMapping("/config/shopList")
public CzgResult<List<MkShopRechargeShopListVO>> shopList(@RequestParam Long shopId, @RequestParam(required = false) String shopName) {
return CzgResult.success(shopRechargeService.shopList(shopId, shopName));
}
/**
* 充值列表
*/
@GetMapping("/list")
public CzgResult<List<RechargeListVO>> getList() {
return CzgResult.success(shopRechargeService.getList(StpKit.USER.getLoginIdAsLong()));
}
}

View File

@ -0,0 +1,42 @@
package com.czg.controller.user;
import com.czg.market.dto.MkRedemptionDTO;
import com.czg.market.service.MkRedemptionConfigService;
import com.czg.market.vo.URedemptionVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
*
* 兑换码相关
* @author Administrator
*/
@RestController
@RequestMapping("/user/redemption")
public class URedemptionController {
@Resource
private MkRedemptionConfigService redemptionConfigService;
/**
* 使用券码
*/
@PostMapping("/exchange")
public CzgResult<Boolean> exchange(@Validated @RequestBody MkRedemptionDTO dto) {
redemptionConfigService.exchange(StpKit.USER.getLoginIdAsLong(), dto);
return CzgResult.success();
}
/**
* 兑换码详细信息
* @param code 兑换码
*/
@GetMapping
public CzgResult<URedemptionVO> get(@RequestParam String code) {
return CzgResult.success(redemptionConfigService.getInfo(code));
}
}

View File

@ -0,0 +1,48 @@
package com.czg.controller.user;
import com.czg.account.dto.shopuser.ShopUserAddDTO;
import com.czg.account.dto.shopuser.ShopUserDetailDTO;
import com.czg.account.dto.shopuser.ShopUserVipCardDTO;
import com.czg.account.entity.MemberPointsLog;
import com.czg.account.entity.ShopUser;
import com.czg.account.entity.ShopUserFlow;
import com.czg.account.service.MemberPointsLogService;
import com.czg.account.service.PointsExchangeRecordService;
import com.czg.account.service.ShopUserFlowService;
import com.czg.account.service.ShopUserService;
import com.czg.annotation.Debounce;
import com.czg.market.entity.MkShopConsumeDiscountRecord;
import com.czg.market.service.MkShopConsumeDiscountRecordService;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.utils.PageUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 新客立减相关
*
* @author Administrator
*/
@RestController
@RequestMapping("/user/consumeDiscount")
public class UShopConsumeDiscountController {
@Resource
private MkShopConsumeDiscountRecordService shopConsumeDiscountRecordService;
/**
* 获取新客立减金额
* 返回新客立减当次减免金额
* @param shopId 店铺id
* @return 金额
*/
@GetMapping
public CzgResult<MkShopConsumeDiscountRecord> get(@RequestParam Long shopId, @RequestParam(required = false) Long orderId) {
// shopConsumeDiscountRecordService.useDiscount(null, null,null,null);
return CzgResult.success(shopConsumeDiscountRecordService.getDiscount(shopId, StpKit.USER.getLoginIdAsLong(), orderId));
}
}

View File

@ -0,0 +1,91 @@
package com.czg.controller.user;
import com.czg.account.vo.ShopInfoCouponVO;
import com.czg.account.vo.UserCouponVo;
import com.czg.market.entity.ShopCoupon;
import com.czg.market.service.ShopCouponService;
import com.czg.market.vo.ShopCouponPopUp;
import com.czg.market.vo.UserCouponVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.utils.AssertUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author ww
* @description
*/
@RestController
@RequestMapping("/user/coupon")
public class UShopCouponController {
@Resource
private ShopCouponService couponService;
/**
* 优惠券弹窗
*
* @param getMode 首页home/用餐eat/订单order
* @return
*/
@GetMapping("/popUp")
public CzgResult<List<ShopCouponPopUp>> getPopUp(String getMode) {
Long shopId = StpKit.USER.getShopId();
return CzgResult.success(couponService.getPopUp(shopId, StpKit.USER.getLoginIdAsLong(), getMode));
}
/**
* 优惠券弹窗领取
*
* @param getMode 首页home/用餐eat/订单order
*/
@GetMapping("/receivePopUp")
public CzgResult<Void> receivePopUp(String getMode) {
Long shopId = StpKit.USER.getShopId();
couponService.receivePopUp(shopId, StpKit.USER.getLoginIdAsLong(), getMode);
return CzgResult.success();
}
/**
* 获取当前店铺会员信息
* 请求头必须携带shopId, 不携带则会失败
*
* @return 店铺会员信息
*/
@GetMapping("/shops")
public CzgResult<List<ShopInfoCouponVO>> shops() {
Long shopId = StpKit.USER.getShopId(0L);
return CzgResult.success(couponService.getShopByCouponRecord(shopId == 0L ? null : shopId, StpKit.USER.getLoginIdAsLong()));
}
/**
* 通过用户Id 查找优惠券
*
* @param status 0 未使用 1已使用 2已过期
*/
@GetMapping("/findByUserId")
public CzgResult<Page<UserCouponVO>> findByUserId(
@RequestParam(required = false) Integer status,
@RequestParam(required = false) String name,
@RequestParam(required = false) Long shopId) {
return CzgResult.success(couponService.find(StpKit.USER.getLoginIdAsLong(), name, shopId, status));
}
/**
* 生成订单后使用
* 通过用户Id 查找优惠券
*
* @param shopUserId 店铺用户Id
*/
@GetMapping("/findCoupon")
public CzgResult<List<UserCouponVo>> findCoupon(@RequestHeader String shopId, @RequestParam Long shopUserId,
@RequestParam(required = false) Integer type, @RequestParam(required = false) Integer isFood) {
AssertUtil.isBlank(shopId, "店铺Id不能为空");
return CzgResult.success(couponService.findCoupon(Long.parseLong(shopId), shopUserId, type, isFood));
}
}

View File

@ -0,0 +1,78 @@
package com.czg.task;
import jakarta.annotation.Resource;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* market服务 任务总调度
* @author ww
* @description
*/
@Component
public class AAMarketTasks {
//生日有礼奖励发放
@Resource
private BirthdayGiftTask birthdayGiftTask;
@Resource
private DistributionTask distributionTask;
// 分销延时发放
@Scheduled(fixedRate = 30000)
public void distributionTask() {
distributionTask.deliver();
}
//每天0时0分0秒 执行
@Scheduled(cron = "0 0 8 * * ?")
public void birthdayGiftTask() {
birthdayGiftTask.deliver();
}
//会员生日弹窗提醒重置 每年1月1日
@Scheduled(cron = "0 0 0 1 1 ?")
public void birthdayGiftRemindTask() {
birthdayGiftTask.remind();
}
//优惠券 过期
@Resource
private CouponTask couponTask;
//每天每小时的30分 0秒 执行
@Scheduled(cron = "0 30 * * * ? ")
public void couponTask() {
couponTask.task();
}
//会员奖励发放
@Resource
private MemberTask memberTask;
//每天1点 0分 0秒 执行
@Scheduled(cron = "0 0 1 * * ? ")
public void memberTask() {
memberTask.task();
}
//满减活动/限时折扣 处理任务状态 定时任务
@Resource
private ActivityStatusTask activityStatusTask;
//每天0点 0分 1秒 执行
@Scheduled(cron = "1 0 0 * * ? ")
public void activityStatusTask() {
activityStatusTask.task();
}
//月累计 发送条数 累计金额
@Resource
private SmsShopMoneyTask smsShopMoneyTask;
//每月1号 0点 0分 1秒 执行
@Scheduled(cron = "1 0 0 1 * ?")
public void smsShopMoneyTask() {
smsShopMoneyTask.task();
}
}

View File

@ -0,0 +1,55 @@
package com.czg.task;
import com.czg.market.entity.MkDiscountActivity;
import com.czg.market.entity.MkLimitTimeDiscount;
import com.czg.market.service.MkDiscountActivityService;
import com.czg.market.service.MkLimitTimeDiscountService;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* 满减活动定时任务
*
* @author ww
* @description
*/
@Slf4j
@Component
public class ActivityStatusTask {
@Resource
private MkDiscountActivityService discountActivityService;
@Resource
private MkLimitTimeDiscountService limitTimeDiscountService;
/**
* 满减活动/限时折扣 任务状态更新任务
*/
public void task() {
//满减活动
discountActivityService.update(new MkDiscountActivity().setStatus(2),
new QueryWrapper()
.eq(MkDiscountActivity::getStatus, 1)
.le(MkDiscountActivity::getValidStartTime, LocalDateTime.now())
.gt(MkDiscountActivity::getValidEndTime, LocalDateTime.now())
);
discountActivityService.update(new MkDiscountActivity().setStatus(3),
new QueryWrapper().le(MkDiscountActivity::getValidEndTime, LocalDateTime.now())
);
//限时折扣
limitTimeDiscountService.update(new MkLimitTimeDiscount().setStatus(2),
new QueryWrapper()
.eq(MkLimitTimeDiscount::getStatus, 1)
.le(MkLimitTimeDiscount::getValidStartTime, LocalDateTime.now())
.gt(MkLimitTimeDiscount::getValidEndTime, LocalDateTime.now())
);
limitTimeDiscountService.update(new MkLimitTimeDiscount().setStatus(3),
new QueryWrapper().le(MkLimitTimeDiscount::getValidEndTime, LocalDateTime.now())
);
}
}

View File

@ -0,0 +1,46 @@
package com.czg.task;
import cn.hutool.core.date.DateUtil;
import com.czg.account.entity.ShopUser;
import com.czg.account.service.ShopUserService;
import com.czg.constant.TableValueConstant;
import com.czg.market.service.MkBirthdayGiftService;
import com.czg.market.service.TbMemberConfigService;
import com.czg.order.service.OrderInfoService;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 生日有礼奖励发放
*
* @author ww
* @description
*/
@Slf4j
@Component
public class BirthdayGiftTask {
@Resource
private MkBirthdayGiftService birthdayGiftService;
@DubboReference
private ShopUserService shopUserService;
/**
* 生日有礼奖励发放
* AAMarketTasks 统一调用位置
*/
// @Scheduled(cron = "0 0 0 * * ?")
public void deliver() {
birthdayGiftService.deliver();
}
public void remind() {
shopUserService.update(new ShopUser().setBirthDayRemind(0), new QueryWrapper()
.isNotNull(ShopUser::getBirthDay).eq(ShopUser::getBirthDayRemind, 1));
}
}

View File

@ -0,0 +1,61 @@
package com.czg.task;
import com.czg.config.RedisCst;
import com.czg.market.entity.MkShopCouponRecord;
import com.czg.market.service.MkShopCouponRecordService;
import com.czg.service.RedisService;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
/**
* 订单定时任务
*
* @author ww
* @description
*/
@Slf4j
@Component
public class CouponTask {
@Resource
private MkShopCouponRecordService mkShopCouponRecordService;
@Resource
private RedisService redisService;
/**
* 优惠券 过期
*/
// @Scheduled(cron = "0 30 * * * ? ")
public void task() {
try {
LocalDateTime now = LocalDateTime.now();
mkShopCouponRecordService.update(new MkShopCouponRecord().setStatus(2), new QueryWrapper()
.eq(MkShopCouponRecord::getStatus, 0)
.le(MkShopCouponRecord::getUseEndTime, now)
);
// 计算当前时间加一小时
LocalDateTime oneHourLater = now.plusHours(1);
List<MkShopCouponRecord> list = mkShopCouponRecordService.list(new QueryWrapper()
.eq(MkShopCouponRecord::getStatus, 0)
.le(MkShopCouponRecord::getUseEndTime, oneHourLater)
);
for (MkShopCouponRecord mkShopCouponRecord : list) {
LocalDateTime endTime = mkShopCouponRecord.getUseEndTime();
if (endTime != null) {
Duration duration = Duration.between(now, endTime);
long seconds = duration.getSeconds();
redisService.set(RedisCst.classKeyExpired.EXPIRED_COUPON + mkShopCouponRecord.getId(), mkShopCouponRecord.getId(), seconds);
}
}
} catch (Exception e) {
log.error("优惠券 过期 任务 异常", e);
}
}
}

View File

@ -0,0 +1,92 @@
package com.czg.task;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ArrayUtil;
import com.czg.account.entity.ShopInfo;
import com.czg.account.entity.ShopUser;
import com.czg.account.service.ShopInfoService;
import com.czg.account.service.ShopUserService;
import com.czg.constant.TableValueConstant;
import com.czg.market.entity.MkDistributionDeliver;
import com.czg.market.entity.MkDistributionFlow;
import com.czg.market.service.MkBirthdayGiftService;
import com.czg.market.service.MkDistributionDeliverService;
import com.czg.market.service.MkDistributionFlowService;
import com.czg.market.service.MkDistributionUserService;
import com.czg.order.entity.OrderInfo;
import com.czg.order.service.OrderInfoService;
import com.czg.service.market.enums.OrderStatusEnums;
import com.czg.utils.FunUtils;
import com.itextpdf.styledxmlparser.jsoup.helper.DataUtil;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 分销定时任务
*
* @author ww
* @description
*/
@Slf4j
@Component
public class DistributionTask {
@Resource
private MkDistributionDeliverService distributionDeliverService;
@Resource
private MkDistributionUserService distributionUserService;
@Resource
private MkDistributionFlowService distributionFlowService;
@DubboReference
private OrderInfoService orderInfoService;
@DubboReference
private ShopInfoService shopInfoService;
@DubboReference
private ShopUserService shopUserService;
/**
* 生日有礼奖励发放
* AAMarketTasks 统一调用位置
*/
// @Scheduled(cron = "0 0 0 * * ?")
@Scheduled(fixedRate = 30000)
public void deliver() {
LocalDateTime localDateTime = DateUtil.date().toLocalDateTime();
distributionFlowService.list(new QueryWrapper()
.eq(MkDistributionFlow::getStatus, TableValueConstant.DistributionFlow.Status.PENDING.getCode())).forEach(item -> {
if (item.getDeliverTime() != null && item.getDeliverTime().isAfter(localDateTime)) {
return;
}
FunUtils.safeRunVoid(() -> {
log.info("开始处理延时分账, id: {}, orderNo: {}, 类型: {}", item.getId(), item.getOrderNo(), item.getType());
OrderInfo orderInfo = orderInfoService.getOne(new QueryWrapper().eq(OrderInfo::getOrderNo, item.getOrderNo()));
if (orderInfo == null) {
log.warn("订单不存在, 订单号: {}", item.getOrderNo());
return;
}
if (CollUtil.newArrayList(OrderStatusEnums.REFUND.getCode(), OrderStatusEnums.REFUNDING.getCode(), OrderStatusEnums.PART_REFUND.getCode()).contains(orderInfo.getStatus())) {
log.warn("订单已退款, 订单号: {}", item.getOrderNo());
item.setStatus(TableValueConstant.DistributionFlow.Status.REFUND.getCode());
} else {
item.setStatus(TableValueConstant.DistributionFlow.Status.SUCCESS.getCode());
ShopUser shopUser = shopUserService.getById(item.getDistributionUserId());
distributionUserService.updateShopInfoAmount(orderInfo.getShopId(), item.getRewardAmount().negate(), orderInfo.getId(), TableValueConstant.DistributionAmountFlow.Type.SUB, "分销扣减");
distributionUserService.updateIncome(item.getRewardAmount().negate(), item.getRewardAmount(), BigDecimal.ZERO,
item.getDistributionUserId(), shopUser.getUserId(), item.getShopUserId(), item.getShopId(), item.getLevel());
}
distributionFlowService.updateById(item);
});
});
}
}

View File

@ -0,0 +1,55 @@
package com.czg.task;
import cn.hutool.core.date.DateUtil;
import com.czg.account.entity.ShopUser;
import com.czg.account.service.ShopUserService;
import com.czg.constant.TableValueConstant;
import com.czg.market.service.TbMemberConfigService;
import com.czg.order.entity.OrderInfo;
import com.czg.order.service.OrderInfoService;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 会员奖励发放
*
* @author ww
* @description
*/
@Slf4j
@Component
public class MemberTask {
@Resource
private OrderInfoService orderInfoService;
@DubboReference
private ShopUserService shopUserService;
@Resource
private TbMemberConfigService memberConfigService;
/**
* 奖励发放
*/
// @Scheduled(cron = "0 0 1 * * ? ")
public void task() {
shopUserService.list(new QueryWrapper().eq(ShopUser::getIsVip, 1).lt(ShopUser::getNextDeliverTime, DateUtil.date().toLocalDateTime())).forEach(item -> {
memberConfigService.deliver(item.getSourceShopId(), item.getUserId(), TableValueConstant.MemberExpFlow.Type.MEMBER_TASK, null, null, null);
});
}
public void check() {
List<ShopUser> shopUsers = shopUserService.list(new QueryWrapper().isNotNull(ShopUser::getEndTime).eq(ShopUser::getIsVip, 1).lt(ShopUser::getEndTime, DateUtil.date()));
shopUsers.forEach(item -> {
item.setIsVip(0);
});
shopUserService.updateBatch(shopUsers);
}
}

View File

@ -0,0 +1,29 @@
package com.czg.task;
import com.czg.market.entity.SmsShopMoney;
import com.czg.service.market.mapper.SmsShopMoneyMapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.HashMap;
/**
* @author ww
* @description
*/
@Slf4j
@Component
public class SmsShopMoneyTask {
@Resource
private SmsShopMoneyMapper shopMoneyMapper;
public void task() {
SmsShopMoney smsShopMoney = new SmsShopMoney();
smsShopMoney.setMonthAmountTotal(BigDecimal.ZERO);
smsShopMoney.setMonthSendTotal(0L);
shopMoneyMapper.updateByMap(smsShopMoney, true, new HashMap<>());
}
}

View File

@ -0,0 +1,2 @@
traceConsumerFilter=com.czg.config.TraceConsumerFilter
traceProviderFilter=com.czg.config.TraceProviderFilter

View File

@ -0,0 +1,57 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.42:3306/czg_cashier?useUnicode=true&characterEncoding=utf-8
username: root
password: Chaozg123.
data:
redis:
host: 192.168.1.42
port: 6379
password: Chaozg123.
timeout: 1000
database: 0
lettuce:
pool:
min-idle: 0
max-idle: 8
max-wait: -1ms
max-active: 16
cloud:
nacos:
discovery:
server-addr: 121.40.109.122:8848
namespace: 237e1905-0a66-4375-9bb6-a51c3c034aca
rabbitmq:
host: 121.40.109.122
port: 5672
username: chaozg
password: chaozg123
dubbo:
application:
name: product-server
qos-port: 22261
qos-enable: true
registry:
address: nacos://121.40.109.122:8848 # Nacos 服务地址
group: server-dev
protocol:
port: 10601
threads: 20
name: dubbo
serialization: hessian2
seata:
application-id: market-server
tx-service-group: group_seata
config:
type: nacos
nacos:
server-addr: 121.40.109.122:8848
namespace:
group: group_seata

View File

@ -0,0 +1,50 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://rm-bp1b572nblln4jho2.mysql.rds.aliyuncs.com:3306/czg_cashier?useUnicode=true&characterEncoding=utf-8
username: root
password: Czg666888
data:
redis:
host: 121.40.109.122
port: 6379
password: chaozg123
timeout: 1000
database: 3
cloud:
nacos:
discovery:
server-addr: 121.40.109.122:8848
namespace: 237e1905-0a66-4375-9bb6-a51c3c034aca
rabbitmq:
host: 121.40.109.122
port: 5672
username: chaozg
password: chaozg123
dubbo:
application:
name: product-server
qos-port: 22263
qos-enable: true
registry:
address: nacos://121.40.109.122:8848 # Nacos 服务地址
group: server-prod
protocol:
port: 10603
threads: 20
name: dubbo
serialization: hessian2
seata:
application-id: market-server
tx-service-group: group_seata
config:
type: nacos
nacos:
server-addr: 121.40.109.122:8848
namespace:
group: group_seata

View File

@ -0,0 +1,50 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://rm-bp1kn7h89nz62cno1ro.mysql.rds.aliyuncs.com:3306/czg_cashier?useUnicode=true&characterEncoding=utf-8
username: cashier
password: Cashier@1@
data:
redis:
host: 121.40.109.122
port: 6379
password: chaozg123
timeout: 1000
database: 2
cloud:
nacos:
discovery:
server-addr: 121.40.109.122:8848
namespace: 237e1905-0a66-4375-9bb6-a51c3c034aca
rabbitmq:
host: 121.40.109.122
port: 5672
username: chaozg
password: chaozg123
dubbo:
application:
name: product-server
qos-port: 22262
qos-enable: true
registry:
address: nacos://121.40.109.122:8848 # Nacos 服务地址
group: server-test
protocol:
port: 10602
threads: 20
name: dubbo
serialization: hessian2
seata:
application-id: market-server
tx-service-group: group_seata
config:
type: nacos
nacos:
server-addr: 121.40.109.122:8848
namespace:
group: group_seata

View File

@ -0,0 +1,38 @@
server:
port: 9500
spring:
application:
name: market
profiles:
active: dev
include: tools
wx:
ysk:
appId: wx212769170d2c6b2a
secrete: 8492a7e8d55bbb1b57f5c8276ea1add0
operationMsgTmpId: wFdoUG-dUT7bDRHq8bMJD9CF5TjyH9x_uJQgQByZqHg
warnMsgTmpId: C08OUr80x6wGmUN1zpFhSQ3Sv7VF5vksdZigiEx2pD0
logging:
config: classpath:logback.xml
# MyBatis-Flex
mybatis-flex:
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
jdbc-type-for-null: 'null'
pagehelper:
helper-dialect: mysql
support-methods-arguments: true
dubbo:
provider:
filter: traceProviderFilter
consumer:
filter: traceConsumerFilter
check: false

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds" debug="false">
<contextName>market-server</contextName>
<property name="log.charset" value="utf-8" />
<property name="log.pattern"
value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) [traceId=%X{traceId:-}] - %msg%n" />
<!--写入文件格式-->
<property name="p_file" value="%d [traceId=%X{traceId:-}] | [%thread] %-5level %c [%L] - %msg %n "/>
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
<charset>${log.charset}</charset>
</encoder>
</appender>
<!--按天生成日志-->
<appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/market/logback.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--生成日志文件名称-->
<fileNamePattern>logs/product/history/%d{yyyy-MM-dd}/logback.%i.log.gz</fileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
<maxFileSize>20MB</maxFileSize>
</rollingPolicy>
<!-- 日志输出格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${p_file}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--普通日志输出到控制台-->
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="logFile"/>
</root>
</configuration>

View File

@ -1,7 +1,12 @@
package com.czg.config;
import com.czg.account.service.ShopTableService;
import com.czg.market.entity.MkShopCouponRecord;
import com.czg.market.service.AcPushEventService;
import com.czg.market.service.MkShopCouponRecordService;
import com.czg.market.service.SmsPushEventService;
import com.czg.order.service.OrderInfoService;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
@ -26,9 +31,15 @@ public class RedisKeyExpirationListener implements MessageListener {
@Value("${spring.data.redis.database}")
private String database;
@Resource
private OrderInfoService tbOrderInfoService;
private OrderInfoService orderInfoService;
@DubboReference
private ShopTableService tableService;
@Resource
private MkShopCouponRecordService mkShopCouponRecordService;
@Resource
private SmsPushEventService smsPushEventService;
@Resource
private AcPushEventService acPushEventService;
//redis key失效监听
@ -49,11 +60,26 @@ public class RedisKeyExpirationListener implements MessageListener {
if (expiredKey.startsWith(RedisCst.classKeyExpired.EXPIRED_ORDER)) {
log.info("监听到订单过期,订单Id: {}", expiredKey);
String orderId = expiredKey.substring(RedisCst.classKeyExpired.EXPIRED_ORDER.length());
tbOrderInfoService.expired(Long.parseLong(orderId));
}else if (expiredKey.startsWith(RedisCst.classKeyExpired.EXPIRED_TABLE)) {
orderInfoService.expired(Long.parseLong(orderId));
} else if (expiredKey.startsWith(RedisCst.classKeyExpired.EXPIRED_TABLE)) {
log.info("监听到台桌清台过期,台桌Id: {}", expiredKey);
String tableId = expiredKey.substring(RedisCst.classKeyExpired.EXPIRED_TABLE.length());
tableService.expiredTable(Long.parseLong(tableId));
} else if (expiredKey.startsWith(RedisCst.classKeyExpired.EXPIRED_COUPON)) {
log.info("监听到优惠券过期,优惠券Id: {}", expiredKey);
String couponId = expiredKey.substring(RedisCst.classKeyExpired.EXPIRED_COUPON.length());
mkShopCouponRecordService.update(MkShopCouponRecord.builder().status(2).build(), new QueryWrapper()
.eq(MkShopCouponRecord::getStatus, 0)
.eq(MkShopCouponRecord::getId, Long.parseLong(couponId))
);
} else if (expiredKey.startsWith(RedisCst.classKeyExpired.EXPIRED_SMS)) {
log.info("监听到短信定时发放优惠券,sms_push_event任务Id: {}", expiredKey);
String eventId = expiredKey.substring(RedisCst.classKeyExpired.EXPIRED_SMS.length());
smsPushEventService.sendPushEventCoupon(eventId);
} else if (expiredKey.startsWith(RedisCst.classKeyExpired.EXPIRED_WECHAT)) {
log.info("监听到公众号推送优惠券,ac_push_event任务Id: {}", expiredKey);
String eventId = expiredKey.substring(RedisCst.classKeyExpired.EXPIRED_WECHAT.length());
acPushEventService.sendPushEventCoupon(eventId);
}
}
}

View File

@ -0,0 +1,85 @@
package com.czg.controller;
import com.czg.annotation.Debounce;
import com.czg.order.dto.MkDistributionPayDTO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.service.order.service.DistributionPayService;
import com.czg.system.service.SysParamsService;
import com.czg.utils.AssertUtil;
import com.czg.utils.ServletUtil;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* 分销员开通
*
* @author ww
* @description
*/
@RestController
@RequestMapping("/pay/distribution")
public class DistributionPayController {
@Resource
private DistributionPayService payService;
@DubboReference
private SysParamsService paramsService;
// @PostMapping("/cashPay")
// @Debounce(value = "#payParam.checkOrderPay.orderId")
// public CzgResult<Object> cashPayOrder(@RequestHeader Long shopId, @Validated @RequestBody MkDistributionPayDTO payParam) {
// payParam.setShopId(shopId);
// return payService.cashPayOrder(payParam);
// }
/**
* 小程序支付
* payType 必填 支付方式aliPay 支付宝wechatPay 微信
* openId 必填
*/
@PostMapping("/ltPayOrder")
@Debounce(value = "#payParam.userId")
public CzgResult<Map<String, Object>> ltPayOrder( HttpServletRequest request, @Validated @RequestBody MkDistributionPayDTO payParam) {
return payService.ltPayOrder(ServletUtil.getClientIP(request), payParam);
}
/**
* 运营端小程序余额充值
* payType 必填 支付方式aliPay 支付宝wechatPay 微信
*/
@PostMapping("/mchRecharge")
@Debounce(value = "#payParam.userId")
public CzgResult<Map<String, String>> mchRecharge(HttpServletRequest request, @Validated @RequestBody MkDistributionPayDTO payParam) {
AssertUtil.isBlank(payParam.getCode(), "微信code不为空");
return CzgResult.success(payService.mchRecharge(ServletUtil.getClientIP(request), payParam));
}
//
// /**
// * 正扫
// */
// @PostMapping("/scanPay")
// @Debounce(value = "#payParam.checkOrderPay.orderId")
// public CzgResult<Map<String, Object>> scanPayOrder(@RequestHeader Long shopId, HttpServletRequest request, @Validated @RequestBody MkDistributionPayDTO payParam) {
// payParam.setShopId(shopId);
// return payService.scanPayOrder(ServletUtil.getClientIP(request), payParam);
// }
//
// /**
// * 反扫
// * authCode 必填 扫描码
// */
// @PostMapping("/microPay")
// @Debounce(value = "#payParam.checkOrderPay.orderId")
// public CzgResult<Map<String, Object>> microPayOrder(@RequestHeader Long shopId, @Validated @RequestBody MkDistributionPayDTO payParam) {
// payParam.setShopId(shopId);
// return payService.microPayOrder(payParam);
// }
}

View File

@ -1,21 +1,33 @@
package com.czg.controller;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.thread.ThreadUtil;
import com.alibaba.fastjson2.JSONObject;
import com.czg.CzgPayUtils;
import com.czg.entity.CzgBaseRespParams;
import com.czg.market.service.MkDistributionUserService;
import com.czg.mq.PrintMqListener;
import com.czg.order.entity.OrderPayment;
import com.czg.order.service.OrderInfoService;
import com.czg.order.service.OrderPaymentService;
import com.czg.order.service.ShopTableOrderStatisticService;
import com.czg.service.market.service.impl.AppWxServiceImpl;
import com.czg.service.market.service.impl.WxServiceImpl;
import com.czg.task.StatisticTask;
import com.czg.utils.AssertUtil;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;
/**
* 回调
* @author ww
* @description
*/
@ -31,6 +43,24 @@ public class NotifyController {
@Resource
private StatisticTask statisticTask;
@Resource
private ShopTableOrderStatisticService shopTableOrderStatisticService;
@Resource
private AppWxServiceImpl wxService;
@Resource
private WxServiceImpl wxService2;
@Resource
private MkDistributionUserService distributionUserService;
@Resource
private OrderPaymentService paymentService;
@GetMapping("testOpen")
public JSONObject test1(String code) throws Exception {
return null;
}
@RequestMapping("/payCallBack")
public String notifyCallBack(@RequestBody CzgBaseRespParams respParams) {
@ -41,6 +71,62 @@ public class NotifyController {
return SUCCESS;
}
@RequestMapping("/native/wx/transfer")
public String nativeTransferNotify(HttpServletRequest request) throws IOException {
log.info("接收到微信转账回调");
JSONObject jsonObject = wxService.verifySignature(request);
log.info("参数信息: {}", jsonObject.toJSONString());
String outBillNo = jsonObject.getString("out_bill_no");
String state = jsonObject.getString("state");
String failReason = jsonObject.getString("fail_reason");
try {
distributionUserService.withdrawNotify(outBillNo, state, failReason);
}catch (Exception e) {
log.warn("转账回调失败", e);
}
return "SUCCESS";
}
@RequestMapping("/native/wx/pay/distributionRecharge")
public String nativeNotify(HttpServletRequest request) throws IOException {
String timestamp = request.getHeader("Wechatpay-Timestamp");
String nonce = request.getHeader("Wechatpay-Nonce");
String serialNo = request.getHeader("Wechatpay-Serial");
String signature = request.getHeader("Wechatpay-Signature");
String result = IoUtil.readUtf8(request.getInputStream());
JSONObject jsonObject = JSONObject.parseObject(result);
JSONObject resource = jsonObject.getJSONObject("resource");
String associatedData = resource.getString("associated_data");
String ciphertext = resource.getString("ciphertext");
String nonceStr = resource.getString("nonce");
String plainText = wxService.decryptToString(associatedData, nonceStr, ciphertext);
log.info("充值支付通知明文 {}", plainText);
JSONObject plainTextJson = JSONObject.parseObject(plainText);
String outTradeNo = plainTextJson.getString("out_trade_no");
String tradeState = plainTextJson.getString("trade_state");
String transactionId = plainTextJson.getString("transaction_id");
if ("SUCCESS".equals(tradeState)) {
try {
OrderPayment payment = paymentService.getOne(new QueryWrapper().eq(OrderPayment::getOrderNo, outTradeNo));
payment.setTradeNumber(transactionId);
payment.setPayTime(DateUtil.date().toLocalDateTime());
payment.setRespJson(plainTextJson.toJSONString());
paymentService.updateById(payment);
distributionUserService.rechargeCallBack(payment.getShopId(), payment.getAmount(), payment.getId());
}catch (Exception e) {
log.error("充值回调失败", e);
return "SUCCESS";
}
}
return "SUCCESS";
}
@RequestMapping("/refundCallBack")
public String refundCallBack(@RequestBody CzgBaseRespParams respParams) {
JSONObject czg = CzgPayUtils.getCzg(respParams);
@ -55,7 +141,7 @@ public class NotifyController {
@RequestMapping("/test")
public void test(@RequestParam String id) {
printMqListener.orderPrint(id);
shopTableOrderStatisticService.statistic(DateUtil.date());
}
@GetMapping("/anew/statistic/history/data")

View File

@ -15,6 +15,7 @@ import com.czg.utils.AssertUtil;
import com.czg.utils.ServletUtil;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.NonNull;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -35,7 +36,7 @@ public class OrderPayController {
@Resource
private PayService payService;
@Resource
private OrderInfoService orderService;
private OrderInfoService orderInfoService;
@DubboReference
private SysParamsService paramsService;
@ -53,6 +54,18 @@ public class OrderPayController {
return payService.cashPayOrder(payParam);
}
/**
* 充值并付款
* payType 必填 支付方式aliPay 支付宝wechatPay 微信
* openId 必填
*/
@PostMapping("/rechargePayOrder")
@Debounce(value = "#payParam.checkOrderPay.orderId")
public CzgResult<Map<String, Object>> rechargePayOrder(@RequestHeader Long shopId, HttpServletRequest request, @Validated @RequestBody OrderPayParamDTO payParam) {
payParam.setShopId(shopId);
return payService.rechargePayOrder(ServletUtil.getClientIP(request), payParam);
}
/**
* 会员支付
* payType 必填
@ -141,7 +154,7 @@ public class OrderPayController {
map.put("payAmount", checkOrderPay.getOrderAmount());
map.put("extend", StrUtil.isEmpty(extend) ? "" : extend);
if (checkOrderPay.getOrderId() != null) {
OrderInfo orderInfo = orderService.checkOrderPay(checkOrderPay);
OrderInfo orderInfo = orderInfoService.checkOrderPay(checkOrderPay);
map.put("payAmount", orderInfo.getOrderAmount());
}
String baseUrl = paramsService.getSysParamValue(SysParamCodeEnum.SHOP_ORDER_PAY_BASE_URL.getCode());
@ -168,7 +181,7 @@ public class OrderPayController {
@GetMapping("/queryOrderStatus")
public CzgResult<String> queryOrderStatus(Long orderId) {
CzgResult<String> result = CzgResult.success();
String status = orderService.queryChain().select(OrderInfo::getStatus).eq(OrderInfo::getId, orderId).oneAs(String.class);
String status = orderInfoService.queryChain().select(OrderInfo::getStatus).eq(OrderInfo::getId, orderId).oneAs(String.class);
result.setData(status);
switch (status) {
case "unpaid" -> result.setMsg("等待用户付款");

View File

@ -1,10 +1,9 @@
package com.czg.controller;
import com.czg.annotation.Debounce;
import com.czg.annotation.SaStaffCheckPermission;
import com.czg.entity.resp.CzgBaseResp;
import com.czg.order.entity.OrderInfo;
import com.czg.resp.CzgResult;
import com.czg.service.order.dto.VipMemberPayParamDTO;
import com.czg.service.order.dto.VipPayParamDTO;
import com.czg.service.order.dto.VipRefundDTO;
import com.czg.service.order.service.PayService;
@ -69,6 +68,37 @@ public class VipPayController {
return payService.ltPayVip(ServletUtil.getClientIP(request), payParam);
}
/**
* 智慧充值
* @param request
* @param rechargeDTO
* @return
*/
@PostMapping("/recharge")
@Debounce(value = "#rechargeDTO.shopUserId")
public CzgResult<Map<String, Object>> recharge(HttpServletRequest request, @Validated @RequestBody VipPayParamDTO rechargeDTO) {
if (rechargeDTO.getRechargeDetailId() == null && rechargeDTO.getAmount() == null) {
return CzgResult.failure("充值失败 未指定充值金额");
}
rechargeDTO.setPlatformType(ServletUtil.getHeaderIgnoreCase(ServletUtil.getRequest(), "platformType"));
return payService.recharge(ServletUtil.getClientIP(request), rechargeDTO, rechargeDTO.getShopUserId());
}
/**
* 会员购买支付
* @param request
* @param payParam
* @return
*/
@PostMapping("/ltPayMember")
@Debounce(value = "#payParam.shopUserId")
public CzgResult<Map<String, Object>> ltPayMember(HttpServletRequest request, @Validated @RequestBody VipMemberPayParamDTO payParam) {
AssertUtil.isNull(payParam.getShopUserId(), "购买失败 未指定店铺用户Id");
payParam.setPlatformType(ServletUtil.getHeaderIgnoreCase(ServletUtil.getRequest(), "platformType"));
return payService.ltPayMember(ServletUtil.getClientIP(request), payParam);
}
/**
* 正扫
*/

View File

@ -2,10 +2,13 @@ package com.czg.controller.user;
import com.czg.annotation.Debounce;
import com.czg.exception.CzgException;
import com.czg.market.dto.MemberOrderDTO;
import com.czg.order.dto.OrderCannelDTO;
import com.czg.order.dto.OrderInfoAddDTO;
import com.czg.order.dto.OrderInfoQueryDTO;
import com.czg.market.entity.MemberOrder;
import com.czg.order.entity.OrderInfo;
import com.czg.market.service.MemberOrderService;
import com.czg.order.service.OrderInfoService;
import com.czg.order.vo.HistoryOrderVo;
import com.czg.order.vo.OrderInfoVo;
@ -35,6 +38,8 @@ public class UserOrderController {
@Resource
private OrderInfoService orderInfoService;
@Resource
private MemberOrderService memberOrderService;
/**
* 订单列表
*/
@ -70,6 +75,20 @@ public class UserOrderController {
return CzgResult.success(orderInfoService.createOrder(addDto));
}
/**
* 会员购买
* @param orderDTO 充值信息
* @return
*/
@PostMapping("/joinMember")
public CzgResult<MemberOrder> joinMember(@Validated @RequestBody MemberOrderDTO orderDTO) {
orderDTO.setPlatformType(ServletUtil.getHeaderIgnoreCase(ServletUtil.getRequest(), "platformType"));
orderDTO.setUserId(StpKit.USER.getLoginIdAsLong());
orderDTO.setOrderType("miniapp");
return CzgResult.success(memberOrderService.createMemberOrder(orderDTO));
}
@PutMapping("/{id}")
public CzgResult<Void> upOrderIsDel(@PathVariable("id") Long id) {
//效验数据

View File

@ -19,10 +19,13 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
/**
@ -37,28 +40,33 @@ public class PrintMqListener {
private MqLogService mqLogService;
@Resource
private FunUtil funUtil;
// 注入自定义线程池建议单独配置避免使用默认线程池
@Resource
private ThreadPoolTaskExecutor asyncExecutor;
@Lazy
@Resource
private PrinterHandler printerHandler;
private <T> void invokeFun(String type, String plat, T data, Consumer<T> consumer) {
long startTime = DateUtil.date().getTime();
log.info("接收到{}打印消息:{}", type, data);
MqLog mqLog = new MqLog().setQueue(RabbitConstants.Queue.ORDER_MACHINE_PRINT_QUEUE).setMsg(data.toString())
.setType(type).setPlat(plat).setCreateTime(DateUtil.date().toLocalDateTime());
try {
consumer.accept(data);
} catch (Exception e) {
log.error("订单打印失败", e);
mqLog.setErrInfo(JSONObject.toJSONString(e));
mqLog.setDuration(DateUtil.date().getTime() - startTime);
mqLog.setFailTime(DateUtil.date().toLocalDateTime());
mqLogService.save(mqLog);
}
private <T> void invokeFun(String type, String plat, T data, Consumer<T> consumer) {
long startTime = DateUtil.date().getTime();
log.info("接收到{}打印消息:{}", type, data);
MqLog mqLog = new MqLog().setQueue(RabbitConstants.Queue.ORDER_MACHINE_PRINT_QUEUE).setMsg(data.toString())
.setType(type).setPlat(plat).setCreateTime(DateUtil.date().toLocalDateTime());
try {
consumer.accept(data);
} catch (Exception e) {
log.error("订单打印失败", e);
mqLog.setErrInfo(JSONObject.toJSONString(e));
mqLog.setDuration(DateUtil.date().getTime() - startTime);
mqLog.setFailTime(DateUtil.date().toLocalDateTime());
mqLogService.save(mqLog);
}
}
@RabbitListener(queues = {"${spring.profiles.active}-" + RabbitConstants.Queue.ORDER_MACHINE_PRINT_QUEUE})
public void orderPrint(String req) {
// 执行核心打印逻辑
invokeFun("orderPrint", "java.order", req, (data) -> {
JSONObject jsonObject = JSONObject.parseObject(data);
String orderId = jsonObject.getString("orderId");
@ -71,6 +79,33 @@ public class PrintMqListener {
return null;
}, RedisCst.getLockKey("orderPrint", orderId));
});
// // 使用异步线程池执行延迟任务不阻塞当前消费者线程
// CompletableFuture.runAsync(() -> {
// try {
// // 延迟3秒处理
// TimeUnit.SECONDS.sleep(3);
// // 执行核心打印逻辑
// invokeFun("orderPrint", "java.order", req, (data) -> {
// JSONObject jsonObject = JSONObject.parseObject(data);
// String orderId = jsonObject.getString("orderId");
// if (orderId == null) {
// throw new RuntimeException("订单打印失败未传递orderId");
// }
// Boolean printOrder = jsonObject.getBoolean("printOrder");
// funUtil.runFunAndCheckKey(() -> {
// printerHandler.handler(orderId, printOrder != null && !printOrder ? PrinterHandler.PrintTypeEnum.ONE : PrinterHandler.PrintTypeEnum.ONE_AND_ORDER);
// return null;
// }, RedisCst.getLockKey("orderPrint", orderId));
// });
// } catch (InterruptedException e) {
// Thread.currentThread().interrupt();
// // 记录中断日志
// log.warn("打印任务被中断req:{}", req, e);
// } catch (Exception e) {
// // 记录业务异常日志
// log.error("打印任务处理失败req:{}", req, e);
// }
// }, asyncExecutor);
}
/**

View File

@ -0,0 +1,2 @@
traceConsumerFilter=com.czg.config.TraceConsumerFilter
traceProviderFilter=com.czg.config.TraceProviderFilter

View File

@ -2,13 +2,13 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.31:3306/czg_cashier?useUnicode=true&characterEncoding=utf-8
url: jdbc:mysql://192.168.1.42:3306/czg_cashier?useUnicode=true&characterEncoding=utf-8
username: root
password: Chaozg123.
data:
redis:
host: 192.168.1.31
host: 192.168.1.42
port: 6379
password: Chaozg123.
timeout: 1000

View File

@ -53,4 +53,3 @@ seata:
server-addr: 121.40.109.122:8848
namespace:
group: group_seata

View File

@ -53,4 +53,3 @@ seata:
server-addr: 121.40.109.122:8848
namespace:
group: group_seata

View File

@ -3,11 +3,12 @@ server:
spring:
application:
name: order-server
name: order
profiles:
active: dev
include: tools
logging:
config: classpath:logback.xml
@ -24,7 +25,10 @@ pagehelper:
support-methods-arguments: true
dubbo:
provider:
filter: traceProviderFilter
consumer:
filter: traceConsumerFilter
check: false

View File

@ -2,9 +2,10 @@
<configuration scan="true" scanPeriod="30 seconds" debug="false">
<contextName>order-server</contextName>
<property name="log.charset" value="utf-8" />
<property name="log.pattern" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %msg%n" />
<property name="log.pattern"
value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) [traceId=%X{traceId:-}] - %msg%n" />
<!--写入文件格式-->
<property name="p_file" value="%d | [%thread] %-5level %c [%L] - %msg %n"/>
<property name="p_file" value="%d [traceId=%X{traceId:-}] | [%thread] %-5level %c [%L] - %msg %n "/>
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>

View File

@ -2,6 +2,8 @@ package com.czg.controller.admin;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.thread.ThreadUtil;
import com.czg.account.entity.ShopInfo;
import com.czg.account.service.ShopInfoService;
import com.czg.annotation.SaStaffCheckPermission;
import com.czg.config.RabbitPublisher;
import com.czg.exception.CzgException;
@ -49,6 +51,8 @@ public class ProductController {
private ShopSyncService shopSyncService;
@Resource
private UProductService uProductService;
@Resource
private ShopInfoService shopInfoService;
/**
* 商品-分页
@ -68,7 +72,7 @@ public class ProductController {
@OperationLog("商品-列表")
//@SaAdminCheckPermission("product:list")
public CzgResult<List<ProductDTO>> getProductList(ProductDTO param) {
Long shopId = StpKit.USER.getShopId(0L);
Long shopId = StpKit.USER.getShopId();
param.setShopId(shopId);
List<ProductDTO> productList = productService.getProductCacheList(param);
productService.refreshProductStock(param, productList);
@ -104,7 +108,7 @@ public class ProductController {
Long shopId = StpKit.USER.getShopId(0L);
dto.setShopId(shopId);
productService.addProduct(dto);
asyncToBranchShop(dto.getId());
asyncProductToShop(dto.getId());
ThreadUtil.execAsync(() -> {
rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId));
});
@ -133,7 +137,7 @@ public class ProductController {
Long shopId = StpKit.USER.getShopId(0L);
dto.setShopId(shopId);
productService.updateProduct(dto);
asyncToBranchShop(dto.getId());
asyncProductToShop(dto.getId());
ThreadUtil.execAsync(() -> {
rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId));
});
@ -168,7 +172,7 @@ public class ProductController {
AssertUtil.isNull(id, "{}不能为空", "id");
Long shopId = StpKit.USER.getShopId(0L);
productService.deleteProduct(shopId, id);
asyncToBranchShop(id);
asyncProductToShop(id);
ThreadUtil.execAsync(() -> {
rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId));
});
@ -217,7 +221,7 @@ public class ProductController {
//@SaAdminCheckPermission("product:bind")
public CzgResult<Void> bindCons(@RequestBody @Validated({DefaultGroup.class}) ProdConsBindDTO param) {
prodConsRelationService.saveProdConsRelation(param);
asyncToBranchShop2(param.getId());
asyncConsProToShop(param.getId());
return CzgResult.success();
}
@ -229,7 +233,7 @@ public class ProductController {
//@SaAdminCheckPermission("product:update")
public CzgResult<Void> refundToStock(@RequestBody @Validated({DefaultGroup.class}) ProdRefundToStockParam param) {
productService.refundToStock(param);
asyncToBranchShop(param.getId());
asyncProductToShop(param.getId());
return CzgResult.success();
}
@ -293,36 +297,34 @@ public class ProductController {
//@SaAdminCheckPermission("product:sync")
public CzgResult<Void> sync() {
long shopId = StpKit.USER.getShopId(0L);
long sysUserId = StpKit.USER.getLoginIdAsLong();
boolean isEnableSync = StpKit.USER.isEnableSync(shopId);
long headShopId = StpKit.USER.getHeadShopId();
if (!isEnableSync) {
throw new CzgException("主店未开启商品资料同步功能");
ShopInfo shopInfo = shopInfoService.getById(shopId);
if (shopInfo == null) {
throw new CzgException("店铺不存在");
}
if (shopId == headShopId) {
AssertUtil.isNotEqual(shopInfo.getIsEnableProdSync(), 1, "主店未开启商品资料同步功能");
if (shopInfo.getMainId() == null || shopId == shopInfo.getMainId()) {
throw new CzgException("不存在主子店铺关系,无需同步商品信息");
}
ThreadUtil.execAsync(() -> {
shopSyncService.sync(headShopId, shopId, sysUserId);
shopSyncService.sync(shopInfo.getMainId(), shopId, shopId);
});
CzgResult<Void> ret = CzgResult.success();
ret.setMsg("操作成功,数据正在后台同步中...");
return ret;
}
private void asyncToBranchShop(Long id) {
private void asyncProductToShop(Long id) {
long shopId = StpKit.USER.getShopId(0L);
long sysUserId = StpKit.USER.getLoginIdAsLong();
ThreadUtil.execAsync(() -> {
shopSyncService.syncProductBySourceShop(shopId, id, sysUserId);
shopSyncService.syncProductBySourceShop(shopId, id, shopId);
});
}
private void asyncToBranchShop2(Long id) {
private void asyncConsProToShop(Long id) {
long shopId = StpKit.USER.getShopId(0L);
long sysUserId = StpKit.USER.getLoginIdAsLong();
ThreadUtil.execAsync(() -> {
shopSyncService.syncConsProBySourceShop(shopId, id, sysUserId);
shopSyncService.syncConsProBySourceShop(shopId, id, shopId);
});
}
}

View File

@ -0,0 +1,2 @@
traceConsumerFilter=com.czg.config.TraceConsumerFilter
traceProviderFilter=com.czg.config.TraceProviderFilter

View File

@ -1,13 +1,13 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.31:3306/czg_cashier?useUnicode=true&characterEncoding=utf-8
url: jdbc:mysql://192.168.1.42:3306/czg_cashier?useUnicode=true&characterEncoding=utf-8
username: root
password: Chaozg123.
data:
redis:
host: 192.168.1.31
host: 192.168.1.42
port: 6379
password: Chaozg123.
timeout: 1000
@ -53,4 +53,4 @@ seata:
nacos:
server-addr: 121.40.109.122:8848
namespace:
group: group_seata
group: group_seata

View File

@ -3,7 +3,7 @@ server:
spring:
application:
name: product-server
name: product
profiles:
active: dev
include: tools
@ -13,6 +13,12 @@ wx:
secrete: 8492a7e8d55bbb1b57f5c8276ea1add0
operationMsgTmpId: wFdoUG-dUT7bDRHq8bMJD9CF5TjyH9x_uJQgQByZqHg
warnMsgTmpId: C08OUr80x6wGmUN1zpFhSQ3Sv7VF5vksdZigiEx2pD0
# 公众号
ac:
appId: wx1fb600d0f5ea6279
secrete: b4c0534c9b5e6c84a7fe5c2078dff876
logging:
@ -30,5 +36,8 @@ pagehelper:
support-methods-arguments: true
dubbo:
provider:
filter: traceProviderFilter
consumer:
filter: traceConsumerFilter
check: false

View File

@ -2,9 +2,10 @@
<configuration scan="true" scanPeriod="30 seconds" debug="false">
<contextName>product-server</contextName>
<property name="log.charset" value="utf-8" />
<property name="log.pattern" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %msg%n" />
<property name="log.pattern"
value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) [traceId=%X{traceId:-}] - %msg%n" />
<!--写入文件格式-->
<property name="p_file" value="%d | [%thread] %-5level %c [%L] - %msg %n"/>
<property name="p_file" value="%d [traceId=%X{traceId:-}] | [%thread] %-5level %c [%L] - %msg %n "/>
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>

View File

@ -0,0 +1,2 @@
traceConsumerFilter=com.czg.config.TraceConsumerFilter
traceProviderFilter=com.czg.config.TraceProviderFilter

View File

@ -2,13 +2,13 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.31:3306/czg_cashier?useUnicode=true&characterEncoding=utf-8
url: jdbc:mysql://192.168.1.42:3306/czg_cashier?useUnicode=true&characterEncoding=utf-8
username: root
password: Chaozg123.
data:
redis:
host: 192.168.1.31
host: 192.168.1.42
port: 6379
password: Chaozg123.
timeout: 1000

View File

@ -3,10 +3,11 @@ server:
spring:
application:
name: system-server
name: system
profiles:
active: dev
logging:
config: classpath:logback.xml
@ -19,3 +20,10 @@ alipay:
key: your-key
secret: your-secret
templateCode: c
dubbo:
provider:
filter: traceProviderFilter
consumer:
filter: traceConsumerFilter
check: false

View File

@ -2,9 +2,10 @@
<configuration scan="true" scanPeriod="30 seconds" debug="false">
<contextName>system-server</contextName>
<property name="log.charset" value="utf-8" />
<property name="log.pattern" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %msg%n" />
<property name="log.pattern"
value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) [traceId=%X{traceId:-}] - %msg%n" />
<!--写入文件格式-->
<property name="p_file" value="%d | [%thread] %-5level %c [%L] - %msg %n"/>
<property name="p_file" value="%d [traceId=%X{traceId:-}] | [%thread] %-5level %c [%L] - %msg %n "/>
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>

View File

@ -62,10 +62,16 @@
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
<artifactId>dubbo</artifactId>
<version>3.3.3</version>
<scope>compile</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.apache.dubbo</groupId>-->
<!-- <artifactId>dubbo-common</artifactId>-->
<!-- <version>3.3.3</version>-->
<!-- <scope>compile</scope>-->
<!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-serialization-hessian2 -->
<dependency>
<groupId>org.apache.dubbo</groupId>

View File

@ -11,10 +11,13 @@ import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.MDC;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.util.Map;
/**
* 方法调用统一切面处理
@ -51,6 +54,7 @@ public class ControllerAspect {
if(params.contains("jndi:rmi:")){
throw new RuntimeException("gun");
}
Map<String, String> contextMap = MDC.getCopyOfContextMap();
// 执行被拦截的方法
Object result = pjp.proceed();
long end = System.currentTimeMillis();
@ -59,7 +63,12 @@ public class ControllerAspect {
String requestUrl = request.getRequestURL().toString();
String requestIp = ServletUtil.getClientIP(request);
long useTime = end - start;
ThreadUtil.execAsync(() -> {
if (contextMap != null) {
MDC.setContextMap(contextMap);
}
//请求的参数
String resultJson = JSONObject.toJSONString(result);
if (StrUtil.isNotBlank(resultJson) && resultJson.length() > 200) {
@ -82,6 +91,8 @@ public class ControllerAspect {
}
} catch (Exception e) {
log.error("Request 为空" + e.getMessage());
} finally {
MDC.clear();
}
});
return result;

View File

@ -1,20 +1,35 @@
package com.czg.config;
import cn.hutool.core.util.IdUtil;
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* @author GYJoker
*/
@Configuration
public class CorsFilter implements Filter {
@Value("${spring.application.name:unknown-service}")
private String applicationName;
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
// traceId
Map<String, String> copyOfContextMap = MDC.getCopyOfContextMap();
if(copyOfContextMap == null){
copyOfContextMap = new HashMap<>();
}
copyOfContextMap.put("traceId",applicationName + IdUtil.fastSimpleUUID());
MDC.setContextMap(copyOfContextMap);
HttpServletResponse response = (HttpServletResponse) resp;
HttpServletRequest reqs = (HttpServletRequest) req;
String curOrigin = reqs.getHeader("Origin");
@ -23,6 +38,12 @@ public class CorsFilter implements Filter {
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "token,Origin, X-Requested-With, Content-Type, Accept,shopId");
response.setHeader("Access-Control-Allow-Credentials", "true");
chain.doFilter(req, resp);
try {
// 原有 MDC 设置逻辑...
chain.doFilter(req, resp);
} finally {
// 清理当前线程的 traceId
MDC.remove("traceId");
}
}
}

View File

@ -0,0 +1,25 @@
package com.czg.config;
import cn.hutool.core.util.StrUtil;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.*;
import org.slf4j.MDC;
/**
* @author ww
* @description
*/
@Activate(group = CommonConstants.CONSUMER)
public class TraceConsumerFilter implements Filter {
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
String traceId = MDC.get("traceId");
if (StrUtil.isBlank(traceId)) {
traceId = StrUtil.uuid();
}
invocation.setAttachment("traceId", traceId);
return invoker.invoke(invocation);
}
}

View File

@ -0,0 +1,27 @@
package com.czg.config;
import cn.hutool.core.util.StrUtil;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.*;
import org.slf4j.MDC;
/**
* @author ww
* @description
*/
@Activate(group = CommonConstants.PROVIDER)
public class TraceProviderFilter implements Filter {
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
String traceId = invocation.getAttachment("traceId");
if (StrUtil.isBlank(traceId)) {
traceId = StrUtil.uuid();
}
// 设置到 MDC
MDC.put("traceId", traceId);
return invoker.invoke(invocation);
}
}

View File

@ -34,6 +34,17 @@ public class CzgControllerAdvice {
@ExceptionHandler(value = Exception.class)
@ResponseStatus(HttpStatus.OK)
public CzgResult<Object> errorHandler(Exception ex) {
Throwable rootCause = ex;
while (rootCause.getCause() != null) {
rootCause = rootCause.getCause();
if (rootCause instanceof CzgException) {
break;
}
}
// 处理自定义异常
if (rootCause instanceof CzgException czgException) {
return CzgResult.failure(czgException.getCode(), czgException.getMessage());
}
setErrorLog(ex);
return CzgResult.failure(CzgRespCode.SYSTEM_ERROR.getCode(), ex.getMessage());
}
@ -108,7 +119,7 @@ public class CzgControllerAdvice {
*/
@ExceptionHandler(PaySuccessException.class)
public CzgResult<Object> handlePaySuccessException() {
return CzgResult.success();
return CzgResult.success("支付成功");
}
/**
@ -143,7 +154,7 @@ public class CzgControllerAdvice {
}
private void setErrorLog(Exception ex) {
log.error("错误",ex);
log.error(ex.getMessage());
log.error("错误",ex);
}
}

View File

@ -21,7 +21,13 @@ public class RabbitConfig {
@Value("${spring.profiles.active}")
private String activeProfile;
@Bean
@Primary
public DirectExchange directExchange() {
return new DirectExchange(activeProfile + "-" + RabbitConstants.Exchange.CASH_EXCHANGE);
}
//------------------------------------------------------订单打印队列
@Bean
public Queue orderPrintQueue() {
// 创建一个用于存储队列参数的 Map
@ -30,7 +36,13 @@ public class RabbitConfig {
args.put("x-message-ttl", 180000);
return new Queue(activeProfile + "-" + RabbitConstants.Queue.ORDER_PRINT_QUEUE, true, false, false, args);
}
@Bean
public Binding bindingOrderPrintExchange(Queue orderPrintQueue, DirectExchange exchange) {
return BindingBuilder.bind(orderPrintQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.ORDER_PRINT_QUEUE);
}
//------------------------------------------------------订单厨房票
@Bean
public Queue orderMachinePrintQueue() {
// 创建一个用于存储队列参数的 Map
@ -39,82 +51,96 @@ public class RabbitConfig {
// args.put("x-message-ttl", 180000);
return new Queue(activeProfile + "-" + RabbitConstants.Queue.ORDER_MACHINE_PRINT_QUEUE, true, false, false);
}
@Bean
public Queue handoverPrintQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.ORDER_HANDOVER_PRINT_QUEUE, true, false, false);
}
@Bean
public Queue callTablePrintQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.CALL_TABLE_PRINT_QUEUE, true, false, false);
}
@Bean
public Queue orderCancelQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.ORDER_CANCEL_QUEUE, true);
}
@Bean
public Queue orderStockQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.ORDER_STOCK_QUEUE, true);
}
@Bean
public Queue productInfoChangeQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.PRODUCT_INFO_CHANGE_QUEUE, true);
}
@Bean
public Queue orderRefundQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.ORDER_REFUND_QUEUE, true);
}
@Bean
@Primary
public DirectExchange directExchange() {
return new DirectExchange(activeProfile + "-" + RabbitConstants.Exchange.CASH_EXCHANGE);
}
@Bean
public Binding bindingOrderPrintExchange(Queue orderPrintQueue, DirectExchange exchange) {
return BindingBuilder.bind(orderPrintQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.ORDER_PRINT_QUEUE);
}
@Bean
public Binding bindingOrderCancelExchange(Queue orderPrintQueue, DirectExchange exchange) {
return BindingBuilder.bind(orderPrintQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.ORDER_CANCEL_QUEUE);
}
@Bean
public Binding bindingCallTablePrintExchange(Queue callTablePrintQueue, DirectExchange exchange) {
return BindingBuilder.bind(callTablePrintQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.CALL_TABLE_PRINT_QUEUE);
}
@Bean
public Binding bindingHandoverPrintExchange(Queue handoverPrintQueue, DirectExchange exchange) {
return BindingBuilder.bind(handoverPrintQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.ORDER_HANDOVER_PRINT_QUEUE);
}
@Bean
public Binding bindingOrderMachinePrintExchange(Queue orderMachinePrintQueue, DirectExchange exchange) {
return BindingBuilder.bind(orderMachinePrintQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.ORDER_MACHINE_PRINT_QUEUE);
}
//------------------------------------------------------交班打票
@Bean
public Queue handoverPrintQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.ORDER_HANDOVER_PRINT_QUEUE, true, false, false);
}
@Bean
public Binding bindingHandoverPrintExchange(Queue handoverPrintQueue, DirectExchange exchange) {
return BindingBuilder.bind(handoverPrintQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.ORDER_HANDOVER_PRINT_QUEUE);
}
//------------------------------------------------------叫号 打票
@Bean
public Queue callTablePrintQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.CALL_TABLE_PRINT_QUEUE, true, false, false);
}
@Bean
public Binding bindingCallTablePrintExchange(Queue callTablePrintQueue, DirectExchange exchange) {
return BindingBuilder.bind(callTablePrintQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.CALL_TABLE_PRINT_QUEUE);
}
//------------------------------------------------------订单取消
@Bean
public Queue orderCancelQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.ORDER_CANCEL_QUEUE, true);
}
@Bean
public Binding bindingOrderCancelExchange(Queue orderPrintQueue, DirectExchange exchange) {
return BindingBuilder.bind(orderPrintQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.ORDER_CANCEL_QUEUE);
}
//------------------------------------------------------ 订单库存更新
@Bean
public Queue orderStockQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.ORDER_STOCK_QUEUE, true);
}
@Bean
public Binding bindingOrderStockExchange(Queue orderStockQueue, DirectExchange exchange) {
return BindingBuilder.bind(orderStockQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.ORDER_STOCK_QUEUE);
}
//------------------------------------------------------ 商品信息更新
@Bean
public Queue productInfoChangeQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.PRODUCT_INFO_CHANGE_QUEUE, true);
}
@Bean
public Binding bindingProductInfoChange(Queue productInfoChangeQueue, DirectExchange exchange) {
return BindingBuilder.bind(productInfoChangeQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.PRODUCT_INFO_CHANGE_QUEUE);
}
//------------------------------------------------------ 订单退款
@Bean
public Queue orderRefundQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.ORDER_REFUND_QUEUE, true);
}
@Bean
public Binding bindingOrderRefundExchange(Queue orderRefundQueue, DirectExchange exchange) {
return BindingBuilder.bind(orderRefundQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.ORDER_REFUND_QUEUE);
}
//------------------------------------------------------ 申请短信模板队列
/**
* 1,2,applySmsTemp 模版审核
* 1,2,sendMarkSms 发送营销短信
* 1,2,sendWechatTemp 发送微信模版消息
*
*/
@Bean
public Queue applySmsTemplateQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.APPLY_SMS_TEMPLATE_QUEUE, true);
}
@Bean
public Binding bindingApplySmsTemplateExchange(Queue applySmsTemplateQueue, DirectExchange exchange) {
return BindingBuilder.bind(applySmsTemplateQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.APPLY_SMS_TEMPLATE_QUEUE);
}
//------------------------------------------------------ 生日礼品短信队列
@Bean
public Queue birthdayGiftSmsQueue() {
return new Queue(activeProfile + "-" + RabbitConstants.Queue.BIRTHDAY_GIFT_SMS_QUEUE, true);
}
@Bean
public Binding bindingBirthdayGiftSmsExchange(Queue birthdayGiftSmsQueue, DirectExchange exchange) {
return BindingBuilder.bind(birthdayGiftSmsQueue).to(exchange).with(activeProfile + "-" + RabbitConstants.Queue.BIRTHDAY_GIFT_SMS_QUEUE);
}
}

View File

@ -18,5 +18,17 @@ public interface RabbitConstants {
public static final String ORDER_HANDOVER_PRINT_QUEUE = "order.handover.print.queue";
public static final String CALL_TABLE_PRINT_QUEUE = "call.table.print.queue";
public static final String PRODUCT_INFO_CHANGE_QUEUE = "product.info.change.queue";
/**
* 1,2,applySmsTemp 模版审核
* 1,2,sendMarkSms 发送营销短信
* 1,2,sendWechatTemp 发送微信模版消息
*
*/
public static final String APPLY_SMS_TEMPLATE_QUEUE = "apply.sms.temp";
/**
* 生日礼品短信队列
*/
public static final String BIRTHDAY_GIFT_SMS_QUEUE = "birthday.gift.sms";
}
}

View File

@ -101,6 +101,25 @@ public class RabbitPublisher {
sendMsg(RabbitConstants.Queue.ORDER_HANDOVER_PRINT_QUEUE, id.toString());
}
/**
* 1,2,applySmsTemp 模版审核 shop_id,sms_shop_template.id,applySmsTemp
* 1,2,sendMarkSms 发送营销短信 shop_id,sms_push_event.id,sendMarkSms
* 1,2,sendWechatTemp 发送微信模版消息 ?
* @param param 店铺Id,主键Id
* @param type applySmsTemp,sendMarkSms,sendWechatTemp
*/
public void sendApplySmsMsg(String param, String type) {
sendMsg(RabbitConstants.Queue.APPLY_SMS_TEMPLATE_QUEUE, param + "," + type);
}
/**
* 发送生日礼品短信队列
*
* @param param
*/
public void sendBirthdayGiftSmsMsg(String param) {
sendMsg(RabbitConstants.Queue.BIRTHDAY_GIFT_SMS_QUEUE, param);
}
private void sendMsg(String queue, String msg) {
log.info("开始发送mq消息,exchange:{}, queue: {}, msg: {}", activeProfile + "-" + RabbitConstants.Exchange.CASH_EXCHANGE, activeProfile + "-" + queue, msg);

View File

@ -21,6 +21,12 @@ public interface RedisCst {
public static final String EXPIRED_ORDER = "expired:order:";
//台桌清台key过期
public static final String EXPIRED_TABLE = "expired:table:";
//优惠券过期
public static final String EXPIRED_COUPON = "expired:coupon:";
//短信定时发放 倒计时KEY
public static final String EXPIRED_SMS = "expired:sms:";
//公众号推送 倒计时KEY
public static final String EXPIRED_WECHAT = "expired:wechat:";
}

View File

@ -0,0 +1,25 @@
package com.czg.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 权限认证(User版)必须具有指定权限才能进入该方法
* <p> 可标注在函数类上效果等同于标注在此类的所有方法上
* @author click33
*
*/
//@SaCheckPermission(type = "user")
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.TYPE})
public @interface SaCheckMainShop {
/**
* 需要校验的权限码
* @return 需要校验的权限码
*/
String value() default "";
}

View File

@ -7,10 +7,13 @@ import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.strategy.SaAnnotationStrategy;
import com.czg.sa.MyStpLogic;
import com.czg.utils.ServletUtil;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@ -70,7 +73,14 @@ public class SaTokenConfigure implements WebMvcConfigurer {
.notMatch("/notify/**")
.notMatch("/admin/auth/**")
.notMatch("/admin/shopMsgPush/subscribe/**")
.check(r -> MyStpLogic.ADMIN_LOGIC.checkLogin());
.notMatch("/admin/coupon/grant")
.check(r -> {
ServletRequestAttributes attributes =
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes == null || !ServletUtil.getClientIP(attributes.getRequest()).contains("192.168")) {
MyStpLogic.ADMIN_LOGIC.checkLogin();
}
});
})).addPathPatterns("/**");

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