366 Commits

Author SHA1 Message Date
Chopper
9616c27efa Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2022-02-16 17:54:46 +08:00
Chopper
0b5f830d7c 删除模版缓存注解问题处理 2022-02-16 17:54:40 +08:00
OceansDeep
d0f952bd68 !130 修复秒杀每日清除无效活动错误
Merge pull request !130 from OceansDeep/feature/pg
2022-02-16 09:49:38 +00:00
paulGao
2876a39ff5 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop into feature/pg 2022-02-16 17:48:46 +08:00
paulGao
6bcf6da165 修复秒杀每日清除无效活动错误 2022-02-16 17:48:29 +08:00
Chopper
9fe633d228 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2022-02-16 17:42:18 +08:00
Chopper
b32bf41443 消费者执行异常问题处理:包含系统自动评价问题,和自动新增秒杀活动问题 2022-02-16 17:42:12 +08:00
paulGao
e4e073b6f0 修复满优惠活动搜索名称问题 2022-02-15 16:51:40 +08:00
paulGao
e960ee2f40 Merge branch 'master' of github.com:lilishop/lilishop 2022-02-15 15:30:38 +08:00
paulGao
a689bb83ee Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2022-02-15 15:29:59 +08:00
paulGao
0940d9aec8 增加刷新token白名单 2022-02-15 15:29:32 +08:00
Chopper
c5da640432 昵称和用户名如果用手机号,也进行脱敏 2022-02-15 14:51:15 +08:00
Chopper
a5f924841a 会员用户名脱敏 2022-02-15 11:38:41 +08:00
Chopper
fda3b5b1cc 会员脱敏处理,之前有人恶意联系注册用户。
管理平台用户返回VO格式化一下
2022-02-15 11:24:52 +08:00
Hacker_Lei
10b8f83737 Merge pull request #38
feature/pg
2022-02-15 11:05:41 +08:00
OceansDeep
ea5da365c7 !129 更新配置文件
Merge pull request !129 from OceansDeep/feature/pg
2022-02-15 03:01:01 +00:00
paulGao
f6eb72332b 更新配置文件 2022-02-15 11:00:15 +08:00
OceansDeep
fcb401c89b !128 更新版本号
Merge pull request !128 from OceansDeep/feature/pg
2022-02-15 02:52:36 +00:00
Hacker_Lei
2b0dc1d0a3 Merge pull request #37
feature/pg
2022-02-15 10:41:05 +08:00
paulGao
a0139b84e1 更新版本号 2022-02-15 10:39:38 +08:00
Hacker_Lei
6cb511ba10 Merge pull request #36
feature/pg
2022-02-14 18:33:46 +08:00
OceansDeep
7483f19fc6 !127 适配修改的api
Merge pull request !127 from OceansDeep/feature/pg
2022-02-14 10:33:07 +00:00
paulGao
f8d2ab5e17 适配修改的api 2022-02-14 18:32:28 +08:00
chopper711
9cd591efe3 update README.md. 2022-02-14 10:09:37 +00:00
OceansDeep
e655fdf67f !126 适配优化的api地址,补充缺失的事务处理
Merge pull request !126 from OceansDeep/feature/pg
2022-02-14 06:19:45 +00:00
paulGao
9aa253b56f 补充缺失的事务处理 2022-02-14 14:17:19 +08:00
paulGao
1d5a2008e1 适配优化的api地址 2022-02-12 17:17:52 +08:00
paulGao
1f1b534b13 适配优化的api地址 2022-02-12 15:05:42 +08:00
paulGao
5c78711d8e merge conflict origin/master 2022-02-11 15:33:28 +08:00
OceansDeep
191709e983 !125 优化redisson配置
Merge pull request !125 from OceansDeep/feature/pg
2022-02-11 06:57:37 +00:00
paulGao
da6a17cd61 优化代码 2022-02-11 14:56:25 +08:00
paulGao
acb88a6b2a 优化redisson配置 2022-02-11 14:54:56 +08:00
OceansDeep
96b5b50ee0 !124 优化代码,增加redisson配置
Merge pull request !124 from OceansDeep/feature/pg
2022-02-10 03:28:39 +00:00
paulGao
6639ec8971 优化代码,增加redisson配置 2022-02-10 11:27:20 +08:00
paulGao
9aa7a6dcf3 优化代码,增加redisson配置 2022-02-10 11:26:10 +08:00
paulGao
4dc183cdf5 merge conflict origin/master 2022-02-09 16:52:28 +08:00
paulGao
bbe3399c90 升级项目依赖,解决安全问题 2022-02-09 16:50:37 +08:00
paulGao
29e43d299a 修复系统日志查询问题 2022-02-09 16:49:14 +08:00
zhenghao
a4ee4df71b 解决预存款事务问题 2022-02-09 12:56:38 +08:00
Chopper
64dbe6708a 短信模版演示站点操作限制 2022-02-08 16:11:27 +08:00
Chopper
f375a9f9db 库存扣减前,库存判定存在问题,进行处理 2022-01-28 16:13:56 +08:00
OceansDeep
15a8800b15 !123 修复微信支付配置报错
Merge pull request !123 from OceansDeep/feature/pg
2022-01-27 03:27:43 +00:00
paulGao
77e526c22f 修复微信支付配置报错 2022-01-27 11:26:17 +08:00
paulGao
f235f66c19 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop into feature/pg 2022-01-27 11:23:05 +08:00
paulGao
1b44bedf42 merge conflict origin/master 2022-01-27 11:22:59 +08:00
Chopper
40e16c4d1b 类名问题处理 2022-01-27 11:22:22 +08:00
paulGao
0c383ac7e9 优化自动生成限时抢购活动 2022-01-27 11:20:25 +08:00
Chopper
0ec2688f17 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2022-01-27 11:12:29 +08:00
Chopper
346550182f 位置支付配置相关还原,之前的修改会导致支付无法配置 2022-01-27 11:12:24 +08:00
paulGao
24568e0f00 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop into feature/pg 2022-01-26 17:54:15 +08:00
paulGao
64f2f4668b 优化代码 2022-01-26 17:54:09 +08:00
chopper711
f4e1d891a7 !122 api端防重复提交
Merge pull request !122 from chopper711/liushuai
2022-01-25 02:24:25 +00:00
Chopper
3972e0231c api端防重复提交 2022-01-25 10:22:45 +08:00
OceansDeep
039e85d5e5 update config/application.yml. 2022-01-24 11:30:35 +00:00
Chopper
936397c59f 自动好评存在一个全线判定问题处理 2022-01-24 18:11:10 +08:00
Chopper
23ddca6f82 签到存在事务问题处理。优化这块逻辑相关 2022-01-24 17:30:52 +08:00
Chopper
286214d9c3 微信APP支付提示签名问题的情况,提供一个解决方案,验证无误 2022-01-24 16:50:42 +08:00
Hacker_Lei
6d0dd09b5b Merge pull request #35
feature/pg
2022-01-21 19:05:22 +08:00
OceansDeep
38469d42ef !120 修复促销优惠券获取时,活动优惠券查询问题;修复手机登录后,手机号为脱敏后问题
Merge pull request !120 from OceansDeep/feature/pg
2022-01-21 11:05:03 +00:00
paulGao
696bfe0a2c 增加默认不脱敏 2022-01-21 19:03:43 +08:00
paulGao
3de2b9834d Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop into feature/pg 2022-01-21 19:01:10 +08:00
paulGao
d5fdc47936 修复促销优惠券获取时,活动优惠券查询问题 2022-01-21 19:01:02 +08:00
paulGao
27e82423f0 修复手机登录后,手机号为脱敏后问题 2022-01-21 19:00:20 +08:00
Chopper
576b5b213e 调整图片地址 2022-01-21 17:00:10 +08:00
Chopper
145406be32 对商品名称包含逗号可能导致的问题处理 2022-01-21 16:31:06 +08:00
Chopper
a65f0ad384 积分设置相关优化 2022-01-21 16:18:16 +08:00
Chopper
5051fc7b0b 赠品订单无法核销问题处理 2022-01-21 15:39:18 +08:00
Chopper
7164036d4c 修改订单价格时,订单update price字段问题处理 2022-01-21 14:34:05 +08:00
Chopper
cb0a9121e5 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2022-01-21 12:08:40 +08:00
Chopper
96e779eb28 对交易状态的判定问题处理 2022-01-21 12:07:16 +08:00
OceansDeep
27397f1602 !119 优化consumer延时任务执行器(修复一个高版本的redis可能导致redis连接不上问题)
Merge pull request !119 from OceansDeep/feature/pg
2022-01-20 08:22:33 +00:00
paulGao
2d1cfde76b 优化consumer延时任务执行器(修复一个高版本的redis可能导致redis连接不上问题) 2022-01-20 16:19:52 +08:00
Chopper
007d69a887 支付完成判定 2022-01-20 15:59:26 +08:00
Chopper
f3965cecd5 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2022-01-20 11:04:57 +08:00
Chopper
4fb170e5c7 支付宝支付结果校验 2022-01-20 11:01:24 +08:00
Chopper
8e1ade5423 支付参数判定重复代码处理 2022-01-20 09:27:07 +08:00
OceansDeep
0b081c2d85 !118 优化编辑商品时的生成索引和操作促销活动时更新索引促销信息,增加事务监听在事务提交后发
Merge pull request !118 from OceansDeep/feature/pg
2022-01-19 06:17:35 +00:00
paulGao
ab1e9f806f 优化编辑商品时的生成索引和操作促销活动时更新索引促销信息,增加事务监听在事务提交后发送mq信息 2022-01-19 14:16:02 +08:00
paulGao
e961711dcb Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop into feature/pg 2022-01-19 10:21:19 +08:00
paulGao
90185d8c32 优化编辑商品时的生成索引和操作促销活动时更新索引促销信息,增加事务监听在事务提交后发送mq信息 2022-01-19 10:18:33 +08:00
paulGao
68ef46195c 升级依赖包版本,解决安全问题 2022-01-19 10:16:15 +08:00
chopper711
0c234e78af !117 压测期间对代码进行性能优化,以及部分代码优化
Merge pull request !117 from chopper711/test
2022-01-19 02:03:47 +00:00
Chopper
ca1851570b 还原下单接口代码,这里存在规范问题日后与前端一起协调修改 2022-01-19 10:02:22 +08:00
Chopper
cf0d1378c8 压测相关还原 2022-01-18 11:03:15 +08:00
Chopper
b13a5d5f2a Merge branch 'master' into test 2022-01-18 09:51:09 +08:00
Chopper
575458afb3 1、去除非必要事务
2、对分布式多节点并发时可能存在生成相同的雪花算法id问题进行处理
3、其他问题优化
2022-01-18 09:50:26 +08:00
OceansDeep
b2d4b7bb23 !116 优化管理端登录和xss
Merge pull request !116 from OceansDeep/feature/pg
2022-01-17 10:01:58 +00:00
paulGao
def6247e9f 优化管理端登录和xss 2022-01-17 17:42:42 +08:00
fengtianyangyang
6409d0dc2d '更新' 2022-01-14 11:47:56 +08:00
OceansDeep
f253ae9c31 !115 修复店铺优惠券为部分商品分类。部分商品分类使用优惠券无效
Merge pull request !115 from OceansDeep/feature/pg
2022-01-13 09:39:10 +00:00
paulGao
b93d10eeea 修复店铺优惠券为部分商品分类。部分商品分类使用优惠券无效 2022-01-13 17:38:36 +08:00
OceansDeep
801f1cbd4c !114 修复店铺优惠券为部分商品。部分商品使用优惠券无效
Merge pull request !114 from OceansDeep/feature/pg
2022-01-13 09:12:00 +00:00
paulGao
f8260c3b29 修复店铺优惠券为部分商品。部分商品使用优惠券无效 2022-01-13 17:04:01 +08:00
paulGao
9e74c15413 代码优化 2022-01-12 19:46:07 +08:00
Chopper
65e7f9750a 增加获取uuid的方法,为压测环境的同一token购物车重复问题处理 2022-01-12 11:20:27 +08:00
Chopper
62804941c2 Merge remote-tracking branch 'origin/feature/pg' into test
# Conflicts:
#	framework/src/main/java/cn/lili/modules/order/order/serviceimpl/TradeServiceImpl.java
2022-01-11 17:39:46 +08:00
Chopper
05818baf7a 优化一些配置项,优化部分路基 2022-01-11 17:34:48 +08:00
paulGao
1c28e0bd5f 优化结算时获取用户优惠券信息(增加redis存储) 2022-01-11 17:34:00 +08:00
Chopper
0460e219f9 购物车创建时减少一次redis的读写 2022-01-11 16:34:18 +08:00
Chopper
eec3611218 优化sql 2022-01-11 15:16:02 +08:00
fengtianyangyang
87f637099c '合并master' 2022-01-11 14:50:06 +08:00
Chopper
5f0241768d 去除事务注解 2022-01-11 14:48:11 +08:00
fengtianyangyang
60b4ab5c5b '路径问题' 2022-01-11 14:32:01 +08:00
OceansDeep
bbed7afdcb !113 修复商品审核和编辑商品缺失对es操作问题
Merge pull request !113 from OceansDeep/feature/pg
2022-01-11 04:11:31 +00:00
paulGao
459a736ebc 修复商品审核和编辑商品缺失对es操作问题 2022-01-11 12:10:54 +08:00
OceansDeep
bdbc620515 !112 优化es商品索引的mapping的促销存储结构
Merge pull request !112 from OceansDeep/feature/pg
2022-01-11 03:39:13 +00:00
paulGao
3c905ffd8b 优化es商品索引的mapping的促销存储结构(解决促销过多时,mapping explosion问题) 2022-01-11 11:38:30 +08:00
OceansDeep
20d32b1f8f !111 优化es商品索引的mapping的促销存储结构,增加自定义xss过滤策略
Merge pull request !111 from OceansDeep/feature/pg
2022-01-11 03:27:44 +00:00
paulGao
f57a373d47 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop into feature/pg 2022-01-11 11:26:28 +08:00
paulGao
77a714e64c 优化es商品索引的mapping的促销存储结构(解决促销过多时,mapping explosion问题) 2022-01-11 11:25:56 +08:00
Chopper
4a3c978e07 用户校验问题处理 2022-01-11 11:23:38 +08:00
paulGao
a4d458bace 增加自定义xss过滤策略(可保存iframe) 2022-01-11 11:20:54 +08:00
Chopper
b0843aa744 token相关类使用泛型,优化代码 2022-01-11 11:16:17 +08:00
Chopper
eddcbc2ecb 增加会员登录事件,对token处理优化 2022-01-11 11:12:19 +08:00
OceansDeep
62fd1f3012 !110 优化编辑商品时的生成索引,修复店铺结算单结算金额对于积分商品和砍价商品重复计算问题
Merge pull request !110 from OceansDeep/feature/pg
2022-01-10 11:46:18 +00:00
paulGao
23264d5d9b merge conflict origin/master 2022-01-10 19:10:42 +08:00
Chopper
cc7d2c0c82 地址问题处理 2022-01-10 18:55:37 +08:00
Chopper
9bed8e57df 代码处理 2022-01-10 18:34:23 +08:00
paulGao
ad35168876 优化编辑商品时的生成索引,增加事务监听在提交后发送mq信息 2022-01-10 18:05:53 +08:00
paulGao
ec8d511e9e 修复店铺结算单结算金额对于积分商品和砍价商品重复计算问题 2022-01-10 18:04:38 +08:00
paulGao
d2cab9f4a1 修复店铺结算单结算金额对于积分商品和砍价商品重复计算问题 2022-01-10 18:04:21 +08:00
Chopper
c1ca4764f0 短信验证码验证暂时关闭 2022-01-10 17:15:53 +08:00
Chopper
366d1b8846 对限流暂时关闭 2022-01-10 17:10:19 +08:00
Chopper
7a8dd54e5c 给予测试环境默认收货地址 2022-01-10 17:01:28 +08:00
Chopper
37393bb7f8 修改api下单时的提交参数类型 2022-01-10 16:55:06 +08:00
Chopper
3904bfd91d 自动登录成功 2022-01-10 15:53:17 +08:00
Chopper
f720e00132 验证码验证默认通过 2022-01-10 15:42:32 +08:00
Chopper
f723c11a84 测试 2022-01-10 14:48:05 +08:00
Chopper
643e8c8157 连续加减方法运用 2022-01-10 09:48:44 +08:00
Chopper
11f9ddaeb6 更优雅的实现价格加减法运算 2022-01-10 09:41:07 +08:00
OceansDeep
5d96d434d6 !109 优化生成索引
Merge pull request !109 from OceansDeep/feature/pg
2022-01-07 10:24:02 +00:00
paulGao
ad1f086e4d 优化生成索引 2022-01-07 18:23:14 +08:00
OceansDeep
3fa3991cfa !108 优化xss过滤,使用owasp的预设规则过滤。优化代码
Merge pull request !108 from OceansDeep/feature/pg
2022-01-07 09:48:07 +00:00
paulGao
9a6102e887 优化xss过滤,使用owasp的预设规则过滤。优化代码 2022-01-07 17:46:42 +08:00
OceansDeep
e23d3a48cc !107 优化代码修复bug
Merge pull request !107 from OceansDeep/feature/pg
2022-01-04 11:56:40 +00:00
paulGao
ddd7c336cf 优化代码修复bug 2022-01-04 19:55:51 +08:00
OceansDeep
ee79b19d20 !106 修复部分查询,时间查询问题
Merge pull request !106 from OceansDeep/feature/pg
2022-01-04 01:13:18 +00:00
paulGao
383cbc0b53 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop into feature/pg 2022-01-04 09:06:32 +08:00
paulGao
e8d9556a4b 修复部分查询,时间查询问题 2022-01-04 09:06:23 +08:00
OceansDeep
5958f06986 !105 修复拼团商品使用优惠券无效问题,修复拼团活动延时任务无效问题
Merge pull request !105 from OceansDeep/feature/pg
2021-12-31 07:20:54 +00:00
paulGao
0c4aef307a 修复拼团商品使用优惠券无效问题,修复拼团活动延时任务无效问题 2021-12-31 15:19:17 +08:00
OceansDeep
20436653af !104 优化代码,修复bug
Merge pull request !104 from OceansDeep/feature/pg
2021-12-30 09:02:56 +00:00
paulGao
814533a2c2 修复分销商品佣金提现参数校验无效问题 2021-12-30 17:01:32 +08:00
paulGao
d4ca3d5817 修复秒杀库存前后端显示不一致问题 2021-12-30 17:00:32 +08:00
paulGao
194d0b6ac2 优化es索引更新,把单次更新优化为批量更新 2021-12-30 16:59:45 +08:00
Chopper
832b065a46 密码重置可以被多次调用问题处理 2021-12-30 16:49:55 +08:00
Chopper
fa443a091f 短信验证码验证结果未生效问题处理 2021-12-30 16:44:50 +08:00
OceansDeep
31c2f555fc !103 修复扣减商品库存问题
Merge pull request !103 from OceansDeep/feature/pg
2021-12-30 02:32:54 +00:00
paulGao
74e5e86eff 修复扣减商品库存问题 2021-12-30 10:31:56 +08:00
OceansDeep
a318eb82c7 !102 适配优化更新索引促销方式的结算
Merge pull request !102 from OceansDeep/feature/pg
2021-12-30 01:53:48 +00:00
paulGao
6465dc2b73 适配优化更新索引促销方式的结算。 2021-12-30 09:52:54 +08:00
OceansDeep
082d241c8f !101 适配优化更新索引促销方式的结算。
Merge pull request !101 from OceansDeep/feature/pg
2021-12-29 18:30:22 +00:00
paulGao
5a6012530e 适配优化更新索引促销方式的结算。 2021-12-30 02:28:27 +08:00
OceansDeep
35e4538160 !100 增加索引时间格式化格式
Merge pull request !100 from OceansDeep/feature/pg
2021-12-29 12:16:06 +00:00
paulGao
125bb372ed 增加索引时间格式化格式 2021-12-29 20:15:36 +08:00
OceansDeep
92e56d7153 !99 优化更新索引失败异常信息
Merge pull request !99 from OceansDeep/feature/pg
2021-12-29 12:07:16 +00:00
paulGao
c8272ec90d 优化更新索引失败异常信息 2021-12-29 20:06:20 +08:00
OceansDeep
b6d01cb850 !98 优化更新索引促销方式,以更新部分字段的方式更新。不在以刷新索引的方式更新。
Merge pull request !98 from OceansDeep/feature/pg
2021-12-29 11:48:56 +00:00
paulGao
5e1eb3e03b 优化更新索引促销方式,以更新部分字段的方式更新。不在以刷新索引的方式更新。 2021-12-29 19:48:09 +08:00
chopper711
f4c94bd8d6 !92 修复店铺列表永远查询到禁用店铺的bug Merge pull request !92 from ray/master
Merge pull request !92 from ray/master
2021-12-29 10:18:46 +00:00
OceansDeep
8484d3f810 !97 修改异步更新日志显示级别
Merge pull request !97 from OceansDeep/feature/pg
2021-12-29 10:16:22 +00:00
paulGao
07f5fbca47 修改异步更新日志显示级别 2021-12-29 18:11:28 +08:00
OceansDeep
68d03196af !96 优化更新索引促销方式,以更新部分字段的方式更新。不在以刷新索引的方式更新。
Merge pull request !96 from OceansDeep/feature/pg
2021-12-29 09:55:05 +00:00
paulGao
a9ef62dfb0 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop into feature/pg 2021-12-29 17:54:23 +08:00
paulGao
9f6d33f6e8 优化更新索引促销方式,以更新部分字段的方式更新。不在以刷新索引的方式更新。 2021-12-29 17:53:40 +08:00
Chopper
ff158fd0e4 token中增加头像 2021-12-29 17:45:31 +08:00
OceansDeep
4de5e616e5 !95 优化促销更新
Merge pull request !95 from OceansDeep/feature/pg
2021-12-29 04:22:43 +00:00
paulGao
b6db829b04 优化促销更新 2021-12-29 12:19:17 +08:00
OceansDeep
821aa74669 !94 优化代码结构
Merge pull request !94 from OceansDeep/feature/pg
2021-12-29 03:54:59 +00:00
paulGao
c3221a6fff 优化代码结构。优化促销更新。 2021-12-29 11:53:46 +08:00
OceansDeep
cbbfbae772 !93 fix bugs
Merge pull request !93 from OceansDeep/feature/pg
2021-12-28 12:02:05 +00:00
paulGao
c65fd99b15 优化更新商品索引促销信息时为异步执行。 2021-12-28 19:59:52 +08:00
paulGao
4d49d3c77a 修复订单收货时,更新订单完成时间。 2021-12-28 19:59:00 +08:00
paulGao
aad32a4a1f 修复满额活动赠品订单错误问题 2021-12-28 19:58:20 +08:00
zhanglei829
ec912efa01 fix bug 2021-12-28 15:18:13 +08:00
OceansDeep
bf2fdc2761 !91 修复下架商品没有删除商品索引问题。修复下单使用优惠券使金额变为0元时消费服务获取数据不正确。
Merge pull request !91 from OceansDeep/feature/pg
2021-12-27 10:03:12 +00:00
paulGao
168c630a13 修复下架商品没有删除商品索引问题。修复下单使用优惠券使金额变为0元时消费服务获取数据不正确导致没有及时更新订单状态问题。 2021-12-27 18:01:58 +08:00
paulGao
e7563203fe Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop into feature/pg 2021-12-27 14:39:19 +08:00
paulGao
9bf1dbe030 修复清除无效索引时的异常。某些情况下新建用户会创建两条member_wallet数据。优化代码。 2021-12-27 14:38:45 +08:00
OceansDeep
dbcee40b93 !90 修复优化促销
Merge pull request !90 from OceansDeep/feature/pg
2021-12-25 11:08:54 +00:00
paulGao
2af334d793 merge branch "master" 2021-12-25 19:08:18 +08:00
paulGao
f9a8675942 修复优化促销 2021-12-25 18:35:44 +08:00
fengtianyangyang
521a6174fe '修改路径' 2021-12-25 15:38:02 +08:00
Chopper
c85bc7b8ea Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-12-25 09:32:00 +08:00
OceansDeep
825e44b353 !89 修复首次发布商品不会生成商品索引问题
Merge pull request !89 from OceansDeep/feature/pg
2021-12-24 08:21:02 +00:00
paulGao
ed840a95a1 优化搜索热词管理,增加搜索热词删除 2021-12-24 16:11:53 +08:00
Chopper
ef31d6af83 砍价商品获取错误问题处理 2021-12-24 15:56:41 +08:00
Chopper
b1e70ebf12 促销金额大于商品金额的极端情况显示问题处理 2021-12-24 15:46:25 +08:00
Chopper
3af0031214 注册赠券功能bug修复 2021-12-24 15:45:48 +08:00
paulGao
b648aa94b3 修复首次发布商品不会生成商品索引问题;代码优化;修复bug; 2021-12-24 14:59:38 +08:00
Chopper
0e864043a6 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-12-24 11:13:42 +08:00
OceansDeep
eb25827937 !88 修复文章内容编辑无格式问题
Merge pull request !88 from OceansDeep/feature/pg
2021-12-23 11:23:18 +00:00
paulGao
f4a07b2911 修复文章内容编辑无格式问题 2021-12-23 19:22:00 +08:00
paulGao
cdfeb5dbdc 修复更新订单的售后商品数量时,传递goodsId改成goodsSkuId 2021-12-23 17:17:31 +08:00
Chopper
40bc890870 空品牌问题处理 2021-12-23 15:27:06 +08:00
paulGao
18874e3755 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop into feature/pg 2021-12-23 13:59:56 +08:00
Chopper
a3d2b84ecb Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-12-23 11:58:53 +08:00
Chopper
5f16a5c791 各个应用微信支付配置分开 2021-12-23 11:58:47 +08:00
paulGao
f086a58096 添加xss过滤sell关键字 2021-12-23 10:58:19 +08:00
paulGao
dfcf71aec7 移除mongo,将系统日志存储在es。修复拼团商品的正常购买价格为拼团价格问题 2021-12-23 10:55:43 +08:00
OceansDeep
f2e8d03f80 !87 修复管理员上下架商品报错问题
Merge pull request !87 from OceansDeep/feature/pg
2021-12-23 00:37:38 +00:00
paulGao
0736f1c550 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop into feature/pg 2021-12-23 08:17:50 +08:00
paulGao
bdd1195d20 修复管理员上下架商品报错问题 2021-12-23 08:17:45 +08:00
Chopper
e5511d5c09 订单联合查询将innerjoin 修改为 left join 2021-12-22 17:57:49 +08:00
Chopper
7634801f7c Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop
# Conflicts:
#	framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java
2021-12-22 17:04:12 +08:00
Chopper
1db86f2865 es中商品索引信息,以及虚拟商品会携带大量优惠券信息下单问题处理 2021-12-22 17:00:30 +08:00
OceansDeep
626e58b515 !86 修复结算时促销为空的问题
Merge pull request !86 from OceansDeep/feature/pg
2021-12-22 08:51:27 +00:00
paulGao
787617f504 修复结算时促销为空的问题 2021-12-22 16:50:50 +08:00
OceansDeep
3fb4e488bb !85 修复结算时无促销报错问题
Merge pull request !85 from OceansDeep/feature/pg
2021-12-22 07:40:24 +00:00
paulGao
c5187a63b9 修复结算时无促销报错问题 2021-12-22 15:34:20 +08:00
Chopper
e5f725cf16 索引初始化对商品删除与否增加判定 2021-12-22 12:51:33 +08:00
Chopper
3d56c9cc81 商品非空判定处理 2021-12-22 12:42:04 +08:00
Chopper
0ae1ae5df4 如果无法获取到消息,则不记录足迹,不再抛出异常 2021-12-22 12:27:46 +08:00
Chopper
c0c530adad 增加对商品为空的判定 2021-12-22 12:22:52 +08:00
Chopper
e962a594ba 商品信息获取逻辑调整 2021-12-22 12:13:43 +08:00
Chopper
0ac7900948 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-12-21 19:29:59 +08:00
Chopper
6748b2911a 去除一个无效的类 2021-12-21 19:29:54 +08:00
OceansDeep
3e4152fd9b !84 优化促销。移除结算时促销的依赖。规范部分isxxx字段命名
Merge pull request !84 from OceansDeep/feature/pg
2021-12-21 10:58:54 +00:00
paulGao
7dfffd60b8 merge master 2021-12-21 18:56:39 +08:00
paulGao
3ba4d24041 优化促销。移除结算时促销的依赖。规范部分isxxx字段命名 2021-12-21 18:54:11 +08:00
Chopper
e99d0f45fd 修改一个错误的非空判断 2021-12-21 16:59:57 +08:00
Chopper
351745d31f 促销类型错误的写入一个促销状态字段问题处理 2021-12-21 16:08:24 +08:00
Chopper
bfa960d803 管理端商品上下架问题处理 2021-12-21 14:47:39 +08:00
Chopper
7572e8d56f 解决如果商品sku参数为空等异常情况导致无法发布的问题 2021-12-21 11:33:55 +08:00
Chopper
82e773243f 增加readme描述 2021-12-21 10:38:02 +08:00
Chopper
795440850b 更名 2021-12-21 10:27:22 +08:00
Chopper
6adcb46f29 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-12-21 10:25:45 +08:00
Chopper
6cd31e630c 更新升级sql 2021-12-21 10:25:38 +08:00
fengtianyangyang
23b3e72579 '商品es初始化索引问题' 2021-12-20 14:56:17 +08:00
fengtianyangyang
bda7a12c2a '商品es索引初始化问题' 2021-12-20 14:38:41 +08:00
Chopper
e8f44ef6f2 短信验证码缓存key未包含uuid问题处理 2021-12-20 09:37:34 +08:00
paulGao
e4047fbd30 merge branch "master" 2021-12-16 15:02:54 +08:00
paulGao
7dcdb43acf 优化促销相关代码,修复bug 2021-12-16 15:02:06 +08:00
Chopper
9f75e1fae8 sql描述文字优化 2021-12-16 09:33:37 +08:00
Chopper
78c0de664c 优化数据库提示语 2021-12-16 09:30:26 +08:00
fengtianyangyang
efc4b37782 'RequestMapping请求路径统一处理' 2021-12-15 18:32:59 +08:00
OceansDeep
6253590326 !82 修复查询积分商品参数问题
Merge pull request !82 from OceansDeep/feature/pg
2021-12-15 09:59:54 +00:00
paulGao
f0b43ddd32 修复查询积分商品参数问题 2021-12-15 17:58:55 +08:00
OceansDeep
51e7b4f15d !81 修复查询积分商品sql语句错误问题
Merge pull request !81 from OceansDeep/feature/pg
2021-12-15 09:43:22 +00:00
paulGao
0ef244b373 移除mongo,将系统日志存储在es。修复拼团商品的正常购买价格为拼团价格问题 2021-12-15 17:42:03 +08:00
OceansDeep
97a1502eb2 !80 修复查询积分商品参数问题
Merge pull request !80 from OceansDeep/feature/pg
2021-12-15 09:32:39 +00:00
paulGao
2536e3b9f6 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop into feature/pg 2021-12-15 17:32:02 +08:00
paulGao
7aed7254a0 修复查询积分商品参数问题 2021-12-15 17:31:39 +08:00
OceansDeep
44e061f321 !79 修复商品审核关闭后,修改商品不生成索引问题。升级mybatis-plus和hutool版本
Merge pull request !79 from OceansDeep/feature/pg
2021-12-15 03:37:52 +00:00
paulGao
a9ddcfeb95 修复商品审核关闭后,修改商品不生成索引问题。升级mybatis-plus版本至 3.4.3.4 和hutool版本至 5.7.16。适配新版本mybatis-plus 2021-12-15 11:35:41 +08:00
OceansDeep
822e332aaa !78 移除mongo,将系统日志存储在es。修复拼团商品的正常购买价格为拼团价格问题
Merge pull request !78 from OceansDeep/feature/pg
2021-12-13 10:18:58 +00:00
paulGao
c3fbad7dbf 移除mongo,将系统日志存储在es。修复拼团商品的正常购买价格为拼团价格问题 2021-12-13 18:15:37 +08:00
Chopper
07348357d0 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-12-13 16:22:27 +08:00
Chopper
947fc457f2 修改im平台id字段类型为string 2021-12-13 16:21:59 +08:00
OceansDeep
b719e96838 !77 修复获取拼团订单时,搜索条件默认锁定了当前会员id问题
Merge pull request !77 from OceansDeep/feature/pg
2021-12-13 06:50:50 +00:00
paulGao
cafeb1f20f 修复获取拼团订单时,搜索条件默认锁定了当前会员id问题 2021-12-13 14:49:57 +08:00
OceansDeep
9ae798a11a !76 修复无登录用户时,查询报错
Merge pull request !76 from OceansDeep/feature/pg
2021-12-13 04:28:37 +00:00
paulGao
d188068b10 修复无登录用户时,查询报错 2021-12-13 12:27:13 +08:00
Chopper
abb4b8cb66 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-12-13 09:32:14 +08:00
Chopper
ef8615cfe5 支付时间为空问题处理 2021-12-13 09:32:10 +08:00
OceansDeep
ee0cb6d225 !75 修复秒杀统计根据状态查询bug
Merge pull request !75 from OceansDeep/feature/pg
2021-12-13 01:15:16 +00:00
paulGao
0da8f7f8f6 修复秒杀统计根据状态查询bug 2021-12-13 09:13:45 +08:00
chopper711
f8b44d9f9b !73 【轻量级 PR】:避免redis缓存二次读取
Merge pull request !73 from yk_ang/master
2021-12-13 01:08:48 +00:00
OceansDeep
b55f5ab6ae !74 重构优化促销模块。移除促销相关的mongo
Merge pull request !74 from OceansDeep/feature/pg
2021-12-12 17:09:36 +00:00
paulGao
90e550934d merge branch "master" 2021-12-11 17:45:25 +08:00
yangkang
ff757d2151 避免redis缓存二次读取。 2021-12-11 16:07:41 +08:00
yangkang
a3f838d8e6 Merge remote-tracking branch 'origin/master' 2021-12-11 15:58:36 +08:00
paulGao
d9d19f8cbd 重构优化促销模块。移除促销相关的mongo 2021-12-10 20:15:03 +08:00
Chopper
036ad6defb 店铺udesk设置支持 2021-12-09 19:52:40 +08:00
Chopper
520c09b801 当用户一个权限都没有时,会导致用户无法进入管理端页面,问题修复 2021-12-08 20:21:51 +08:00
Chopper
f850e4adaa 日志打印更完善 2021-12-08 19:53:29 +08:00
Chopper
450041bb02 权限非空判定问题处理 2021-12-08 19:35:18 +08:00
Chopper
2e99c26654 权限为空时问题处理 2021-12-08 19:26:37 +08:00
Chopper
2e5f383db4 店铺流水查询交互参数从querywrapper调整为DTO 2021-12-08 14:36:14 +08:00
Chopper
357b214192 店铺流水业务模块参数解耦 2021-12-08 11:39:09 +08:00
Chopper
c301c55905 去除无效引用 2021-12-08 10:42:15 +08:00
Chopper
1764e6956b 售后与子订单模块参数解耦 2021-12-08 10:40:45 +08:00
Chopper
a7509e1125 微信服务与端链接传递参数为querywrapper调整 2021-12-08 10:03:34 +08:00
Chopper
9ec3322574 商品模块与店铺模块交接处以query wrapper衔接存在问题,改用普通参数 2021-12-08 09:50:19 +08:00
yangkang
3658f027bb Merge remote-tracking branch 'origin/master' 2021-12-07 19:45:41 +08:00
Chopper
9a04bb2d71 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-12-07 18:15:25 +08:00
Chopper
343e5e332c 店铺首页统计bug代码修复 2021-12-07 18:15:18 +08:00
yangkang
28a6cf1cb1 Merge remote-tracking branch 'origin/master' 2021-12-07 17:43:42 +08:00
chopper711
e2777b2f0a !72 模块继续分离,包含一个错误读取两次库存的问题修改,会员消息模块/微信模块/消息模块独立,分销模块拆离
Merge pull request !72 from chopper711/liushuai
2021-12-07 08:37:22 +00:00
Chopper
d8da258898 分销模块拆离 2021-12-07 09:00:59 +08:00
Chopper
8616854e00 消息模块,会员模块,微信模块独立 2021-12-07 05:47:17 +08:00
Chopper
7b98d1d9d0 几个代码编译问题处理 2021-12-07 04:33:51 +08:00
Chopper
b8b14df39b message模块拆离优化 2021-12-07 04:12:51 +08:00
Chopper
8ddf622d0f Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-12-06 17:45:31 +08:00
Chopper
00ffd246a9 业务代码模块trade统一更名为order 2021-12-06 17:45:16 +08:00
yangkang
ac86715062 Merge remote-tracking branch 'origin/master' 2021-12-06 16:58:14 +08:00
yangkang
2c8df21671 Merge remote-tracking branch 'origin/master' 2021-12-06 16:55:48 +08:00
Chopper
d16cf44f4a 获取两次商品库存代码优化 2021-12-06 15:59:13 +08:00
chopper711
6d3fbd7cf0 !71 业务代码拆分优化
Merge pull request !71 from chopper711/liushuai
2021-12-06 07:40:54 +00:00
chopper711
f9f723c47a !70 修复store/promotion/pintuan这个接口中,获取拼团列表查询bug。
Merge pull request !70 from yk_ang/master
2021-12-06 07:40:19 +00:00
yangkang
3ac28ac218 修复store/promotion/pintuan这个接口中,获取拼团列表查询bug。 2021-12-06 15:18:39 +08:00
yangkang
ece66ba16a 修复store/promotion/pintuan这个接口中,获取拼团列表查询bug。 2021-12-06 15:18:03 +08:00
Chopper
f24019d306 订单流水与订单业务重叠代码优化 2021-12-06 15:07:28 +08:00
Chopper
ea80777ef6 优化代码结构 2021-12-06 14:57:29 +08:00
Chopper
f7ab6dc6ae 统计模块继续独立,拆分业务 2021-12-06 11:37:21 +08:00
Chopper
a8698fbd1a 迁移会员统计业务至统计模块 2021-12-06 11:12:00 +08:00
Chopper
62b5162c7e 去除无效引用 2021-12-06 11:02:42 +08:00
Chopper
aa9466b8d1 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-12-03 18:31:30 +08:00
Chopper
70b12dfd3e 统计模块隔离业务,重构统计模块 2021-12-03 18:31:14 +08:00
chopper711
0912872de2 !69 去除多余的对象和引用。
Merge pull request !69 from yk_ang/master
2021-12-03 06:12:41 +00:00
yangkang
9016090c67 去掉无用的对象和引用。 2021-12-03 12:40:37 +08:00
chopper711
79e4386d1e !68 去除无效类,优化无效引用
Merge pull request !68 from chopper711/liushuai
2021-12-03 02:34:25 +00:00
Chopper
5e4973fae5 去除无效的工具类 2021-12-03 10:25:08 +08:00
Chopper
4228ac4570 es无效引用 2021-12-02 19:49:26 +08:00
chopper711
152dbac29d !67 mq订阅标签规范代码 店铺流水调用售后模块直接船渡wrapper调整 去除无效的注解
Merge pull request !67 from chopper711/liushuai
2021-12-02 09:07:01 +00:00
Chopper
2241e90798 去除无效的注解 2021-12-02 17:05:58 +08:00
Chopper
613a808cec 店铺流水调用售后模块直接船渡wrapper调整 2021-12-02 14:42:46 +08:00
Chopper
af52a68abc mq订阅标签规范代码 2021-12-01 15:49:28 +08:00
chopper711
9c2738399e !66 店铺流水相关代码优化,流水与结算单业务隔离。联合登陆信息查询代码优化,更优雅的实现,优化规范余额相关模型传递问题
Merge pull request !66 from chopper711/liushuai
2021-12-01 07:22:55 +00:00
Chopper
385a4ae618 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-12-01 15:21:57 +08:00
Chopper
b0d39324ef 联合登陆信息查询代码优化,更优雅的实现 2021-12-01 15:21:43 +08:00
Chopper
c224ad568e 优化规范余额相关模型传递问题 2021-12-01 09:58:21 +08:00
Chopper
6184ba9b82 店铺流水相关代码优化,流水与结算单业务隔离。
相关方法进行优化,迁移。
2021-11-30 16:57:19 +08:00
Chopper
bea807c7b4 demosite相关补充提交 2021-11-30 16:55:58 +08:00
Chopper
323bc6b775 将限制项提高到框架common模块 2021-11-30 16:53:37 +08:00
fengtianyangyang
7c87d13ba2 '去除4.24订单处理功能' 2021-11-30 15:28:12 +08:00
fengtianyangyang
3e10c891ab '去除处理4.24版本之前订单功能' 2021-11-30 15:19:42 +08:00
fengtianyangyang
643d966740 Merge remote-tracking branch 'origin/master' 2021-11-30 15:07:14 +08:00
fengtianyangyang
94968799c3 '合并订单多售后功能' 2021-11-30 15:03:49 +08:00
Chopper
30d53fa41e 去除无效的引用 2021-11-30 15:03:17 +08:00
chopper711
00805d6a49 !65 规范代码,收藏功能完善优化
Merge pull request !65 from chopper711/liushuai
2021-11-30 07:02:31 +00:00
Chopper
0e7665f59d 店铺收藏/商品收藏问题处理优化 2021-11-30 15:00:30 +08:00
fengtianyangyang
96cc2bd37f '代码规范' 2021-11-30 14:54:05 +08:00
Chopper
71e51b3b6f 规范店铺模块调用商品模块方法 2021-11-30 10:00:46 +08:00
fengtianyangyang
5f90e422e6 '代码格式优化及去除orderItem多余字段' 2021-11-29 17:43:17 +08:00
chopper711
b65cdfc1fb !64 规范service调用,简化readme
Merge pull request !64 from chopper711/liushuai
2021-11-29 08:47:57 +00:00
Chopper
a3c597b3c5 简化readme 2021-11-29 16:47:22 +08:00
Chopper
db587fda30 规范service调用 2021-11-29 16:38:53 +08:00
chopper711
7170e3a16a !63 敏感词加载继续优化一下,初始化放在consumer中执行
Merge pull request !63 from chopper711/liushuai
2021-11-29 03:48:17 +00:00
Chopper
61aa3ca3d2 敏感词加载继续优化一下,初始化放在consumer中执行 2021-11-29 11:47:54 +08:00
chopper711
96f57b7df8 !62 功能模块优化,敏感词模块优化
Merge pull request !62 from chopper711/liushuai
2021-11-29 03:47:20 +00:00
Chopper
d16df738d3 Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-11-29 11:17:20 +08:00
lifenlong
9ae0921f69 同步在阿里云修改的短信签名 2021-11-26 08:39:01 +08:00
lifenlong
5dd1c95294 短信签名缺失ID 2021-11-25 11:09:55 +08:00
Chopper
404fecd83c Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-11-25 09:50:22 +08:00
Chopper
a4fb3db3cd 结算业务代码优化调整 2021-11-24 16:23:27 +08:00
Chopper
92d64db0b7 去除创建店铺自动创建店铺楼层装修 2021-11-24 15:44:21 +08:00
chopper711
033ec0fd61 !61 CurrencyUtil 修正 来自@BigBender 同学的pr
Merge pull request !61 from BigBender/master
2021-11-24 06:48:34 +00:00
yc_l_zZ_admin
dc36274212 替换 BigDecimal.ROUND_HALF_UP 为 RoundingMode.HALF_UP, 减少冗余代码 2021-11-24 14:08:38 +08:00
Chopper
817587522b 去除一个无效控制器 2021-11-24 10:30:34 +08:00
Chopper
58648c3ece 模块隔离优化 2021-11-24 10:30:21 +08:00
Chopper
16f314bd80 敏感词更新策略问题调整,敏感词迁移至公共工具类 2021-11-23 16:56:03 +08:00
Chopper
f8408030a9 敏感词更新策略问题调整,敏感词迁移至公共工具类 2021-11-23 16:53:53 +08:00
Chopper
c276b1595c 微信参数小写处理 2021-11-22 18:30:11 +08:00
Chopper
71cc57959b Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-11-22 18:20:41 +08:00
Chopper
dbd35c18b5 微信支付签名被xss过滤问题处理忽略 2021-11-22 18:20:06 +08:00
OceansDeep
1e868c2335 修复未登录用户,浏览积分商品报错 2021-11-22 10:18:39 +00:00
Chopper
59461175d9 修复支付宝配置私钥后无法支付问题 2021-11-22 16:45:54 +08:00
fengtianyangyang
aee5d4be2e '修改DBsql错误版本文件名称' 2021-11-22 15:35:40 +08:00
fengtianyangyang
e9c18935c5 '修改DBsql文件错误字段' 2021-11-22 15:29:27 +08:00
fengtianyangyang
b80aa48735 '项目启动处理4.24版本之前订单问题' 2021-11-22 15:24:23 +08:00
Chopper
c32999aa03 缩略图相关方法调整 2021-11-22 14:55:16 +08:00
Chopper
56d486e010 将http工具类整合在一起 2021-11-22 10:53:27 +08:00
fengtianyangyang
d83f82a340 '增加项目启动时对4.2.4之前版本orderItem订单处理' 2021-11-19 18:42:47 +08:00
chopper711
2f49292672 update README.md. 2021-11-19 04:05:17 +00:00
chopper711
c09b6061fc update README.md. 2021-11-19 04:03:23 +00:00
fengtianyangyang
1d14a0adb5 '修改注释规范' 2021-11-19 11:41:31 +08:00
fengtianyangyang
840a2eabdb '买家端取消售后及管理端终止售后,买家端重新发起售后问题' 2021-11-19 11:24:50 +08:00
fengtianyangyang
f2be8e6abd 'DB-新增字段' 2021-11-19 09:26:14 +08:00
fengtianyangyang
71fb4b2b2b '多数量商品售后功能' 2021-11-18 19:26:47 +08:00
Chopper
3cabf0a32c Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop 2021-11-18 17:23:52 +08:00
Chopper
8416fd49ae 优化代码结构,分包更清晰。
去除无效逻辑。
2021-11-18 17:23:18 +08:00
chopper711
3a15c2eaa7 !59 优惠券过期处理bug修复
Merge pull request !59 from CodeNose/fixbug_20211117_couponRemoveBug
2021-11-18 03:36:45 +00:00
OceansDeep
e0eb76e120 !60 升级版本号
Merge pull request !60 from OceansDeep/feature/pg
2021-11-17 10:31:56 +00:00
paulGao
8a29ce048d 升级版本号 2021-11-17 18:30:08 +08:00
hhf
d43b679f8d 优惠券过期删除bug修复 2021-11-17 17:48:45 +08:00
664 changed files with 10822 additions and 9402 deletions

1
.gitignore vendored
View File

@@ -10,6 +10,7 @@ target
.factorypath
log/
logs/
*.factorypath
lili-shop/src/main/java/cn/lili/generator/CodeGenerator.java
lili-logs

View File

@@ -1,3 +1,6 @@
## PS:数据库位置
点击跳转 https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql 这里有与tag版本一致的sql根据tag获取sql如果使用master代码则需要在lilishop项目根目录的update-sql目录中获取对应的升级sql。
使用master分支代码时可能会无法运行执行完初始化sql之后需要执行当前目录下'versiontXXXXtoMASTER.sql'。

View File

@@ -0,0 +1,2 @@
/** 新增已退货数量 **/
ALTER TABLE li_order_item ADD return_goods_number int DEFAULT 0 COMMENT '退货数量 ';

View File

@@ -0,0 +1,64 @@
/** 新增已退货数量 **/
ALTER TABLE li_order_item ADD return_goods_number int DEFAULT 0 COMMENT '退货数量 ';
-- 促销重构sql
ALTER TABLE li_coupon DROP COLUMN promotion_status;
ALTER TABLE li_coupon_activity DROP COLUMN promotion_status;
ALTER TABLE li_coupon_activity ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '范围关联的ID';
ALTER TABLE li_coupon_activity ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型';
ALTER TABLE li_full_discount DROP COLUMN promotion_status;
ALTER TABLE li_full_discount ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID';
ALTER TABLE li_full_discount ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型';
ALTER TABLE li_kanjia_activity_goods DROP COLUMN promotion_status;
ALTER TABLE li_kanjia_activity_goods ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID';
ALTER TABLE li_kanjia_activity_goods ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型';
ALTER TABLE li_kanjia_activity_goods ADD `goods_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE li_pintuan DROP COLUMN promotion_status;
ALTER TABLE li_pintuan ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID';
ALTER TABLE li_pintuan ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型';
ALTER TABLE li_points_goods DROP COLUMN promotion_status;
ALTER TABLE li_points_goods ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID';
ALTER TABLE li_points_goods ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型';
ALTER TABLE li_points_goods ADD `original_price` double(10,2) DEFAULT NULL COMMENT '原价';
ALTER TABLE li_points_goods ADD `thumbnail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '缩略图';
ALTER TABLE li_points_goods ADD `goods_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '商品编号';
ALTER TABLE li_points_goods ADD `goods_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '货品名称';
ALTER TABLE li_promotion_goods DROP COLUMN promotion_status;
ALTER TABLE li_promotion_goods ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID';
ALTER TABLE li_promotion_goods ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型';
ALTER TABLE li_promotion_goods ADD `original_price` double(10,2) DEFAULT NULL COMMENT '原价';
ALTER TABLE li_promotion_goods ADD `points` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '兑换积分';
ALTER TABLE li_promotion_goods ADD `goods_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '商品编号';
ALTER TABLE li_seckill DROP COLUMN promotion_status;
ALTER TABLE li_seckill ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID';
ALTER TABLE li_seckill ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型';
ALTER TABLE li_full_discount RENAME COLUMN is_coupon TO coupon_flag;
ALTER TABLE li_full_discount RENAME COLUMN is_free_freight TO free_freight_flag;
ALTER TABLE li_full_discount RENAME COLUMN is_full_minus TO full_minus_flag;
ALTER TABLE li_full_discount RENAME COLUMN is_full_rate TO full_rate_flag;
ALTER TABLE li_full_discount RENAME COLUMN is_gift TO gift_flag;
ALTER TABLE li_full_discount RENAME COLUMN is_point TO point_flag;
ALTER TABLE li_member_coupon RENAME COLUMN is_platform TO platform_flag;
ALTER TABLE li_goods RENAME COLUMN is_auth TO auth_flag;
ALTER TABLE li_goods_sku RENAME COLUMN is_promotion TO promotion_flag;
ALTER TABLE li_goods_sku RENAME COLUMN is_auth TO auth_flag;
-- 增加会员表索引
ALTER TABLE li_member ADD INDEX query_mobile (`mobile`) COMMENT 'query_member';
-- 会员签到唯一索引 惠券查询索引
ALTER TABLE li_member_sign ADD INDEX query_create_time (`create_time`) COMMENT 'query_create_time';
ALTER TABLE li_member_sign ADD INDEX query_member_id (`member_id`) COMMENT 'query_member_id';
ALTER TABLE li_member_sign add unique uk_member_day (member_id, create_time) COMMENT 'uk_member_day';

119
README.md
View File

@@ -1,15 +1,18 @@
## 🔥 Lilishop B2B2C商城系统
## Lilishop B2B2C商城系统
##### 🌹 开源不易如有帮助请点Star
##### 开源不易如有帮助请点Star
#### 欢迎交流需求,交流业务,交流技术(基础问题自行解决,进群先看文档后提问)
##### 交流 qq 1群 961316482已满
<a target="_blank" href="https://qm.qq.com/cgi-bin/qm/qr?k=BAhURE3DG2YWhQk6kRxVapbLykqMoPS8&jump_from=webapi"><img border="0" src="https://pub.idqqimg.com/wpa/images/group.png" alt="Lilishop交流群" title="Lilishop交流群">点击快捷加群</a>
##### 交流 qq 2群 875294241
<a target="_blank" href="https://qm.qq.com/cgi-bin/qm/qr?k=_lrekOvr5k2p5uTn5GRidI-chKEmpCX3&jump_from=webapi"><img border="0" src="https://pub.idqqimg.com/wpa/images/group.png" alt="Lilishop交流群2群" title="Lilishop交流群2群">点击快捷加群</a>
##### 体验 公众号/小程序/APP 体验,扫描二维码
@@ -20,51 +23,33 @@
&nbsp;&nbsp;![github](https://img.shields.io/github/stars/hongyehuicheng/lilishop.svg?style=social&logo=#181717)
### 🔥 商城介绍
### 商城介绍
**官网**https://pickmall.cn
Lilishop商城系统支持商家入驻后端基于SpringBoot 研发,前端使用 Vue、uniapp开发 **系统全端全部代码开源**
商城前后端分离支持分布式部署各个API独立并且有独立的消费者。
商城包含 会员模块、**第三方登录模块**、**第三方支付模块**、**楼层装修模块**、订单模块、商品模块、促销模块、分销模块、文章模块、系统设置模块、流量分析模块和平台运营模块
商城包含各种中间件、搜索引擎、多级缓存、分布式事务、分布式任务调度等支持Docker支持k8s。是一款高性能、支持分布式、支持扩展的商城系统。
商城前后端分离,支持分布式部署,支持Docker各个API独立并且有独立的消费者。
### 商城 API/消费者 聚合版
api不需要单独部署只需启动一个jar包就可以正常运转 如有需要,可以点击跳转
https://gitee.com/beijing_hongye_huicheng/lilishop-simplify
### ☃️ 商城 开发/使用/常见问题 帮助文档
### 商城 开发/使用/常见问题 帮助文档
https://docs.pickmall.cn
### 💧 开源商城项目地址(gitee)
### 项目地址
**API商城所有API**https://gitee.com/beijing_hongye_huicheng/lilishop.git
gitee : https://gitee.com/beijing_hongye_huicheng
**UI平台管理端/商家端/买家PC端** https://gitee.com/beijing_hongye_huicheng/lilishop-ui.git
github 镜像: https://github.com/lilishop?tab=repositories
**uniapp商城移动端支持小程序/APP/H5**https://gitee.com/beijing_hongye_huicheng/lilishop-uniapp.git
**docker一键部署商城部署脚本**https://gitee.com/beijing_hongye_huicheng/docker.git
### 💧 开源商城项目地址(github)
**API商城所有API**https://github.com/hongyehuicheng/lilishop.git
**UI平台管理端/商家端/买家PC端** https://github.com/hongyehuicheng/lilishop-ui.git
**uniapp商城移动端支持小程序/APP/H5**https://github.com/hongyehuicheng/lilishop-uniapp.git
**docker一键部署商城部署脚本**https://github.com/hongyehuicheng/docker.git
商城UI 项目下3个文件夹
buyer买家PC端seller商家端manager后台管理端
☃️ UI 项目下3个文件夹 buyer买家PC端seller商家端manager后台管理端
### 💧 演示地址(手机验证码为 111111)
### 演示地址
PS手机验证码为 111111
**平台管理端**https://admin-b2b2c.pickmall.cn 账号admin/123456
@@ -72,88 +57,54 @@ https://docs.pickmall.cn
**商城PC页面**https://pc-b2b2c.pickmall.cn
**商城移动端(请使浏览器手机模式,或者用手机浏览器打开)**https://m-b2b2c.pickmall.cn
**商城 小程序/公众号/APP支持ios、android**:扫描二维码
**商城 小程序/公众号/APP**:扫描二维码
![image-20210511171611793](https://pickmall.cn/assets/imgs/h5-qrcode.png)
### 🚙 3行命令搭建本地商城只能本机访问前端镜像固定访问 127.0.0.1,如果是非本机体验,请自行下载源码操作镜像)
### 快速部署本地商城
温馨提示由于服务中间件较多如果笔记本环境启动内存没有32g可能无法启动成功macbookpro 2020 16g内存启动无法成功台式机在16g内存、AMD 3700x 的ubuntu系统成功运行。
[点击跳转](https://docs.pickmall.cn/deploy/%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87.html)
##### docker环境安装 [点击跳转](https://docs.pickmall.cn/deploy/%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87.html)
**商城数据库**
使用docker-compose部署数据库自动初始化数据库不需要手动下载等操作
##### 下载docker-compose脚本
`git clone https://gitee.com/beijing_hongye_huicheng/docker.git `
##### 部署商城所需中间件
`docker-compose up -d`
##### 部署商城应用
`docker-compose -f docker-compose-application.yml up -d`
PS:商城数据库非docker部署
https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql
这里有与tag版本一致的sql根据tag获取sql如果使用master代码
##### 商城 API/UI 地址
| API | 地址 |
| -------------- | --------------- |
| 买家API | http://127.0.0.1:8888 |
| 商家API | http://127.0.0.1:8889 |
| 管理端API | http://127.0.0.1:8887 |
| 通用API | http://127.0.0.1:8890 |
| 前端演示 | 地址 |
| -------------- | --------------- |
| 商城PC端 | http://127.0.0.1:10000 |
| 商城H5端 | http://127.0.0.1:10001 |
| 卖家端 | http://127.0.0.1:10002 |
| 平台管理端 | http://127.0.0.1:10003 |
其他小程序/app等需自行打包。
如果手动部署才需要获取sql [点击跳转](https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql) PS这里有与tag版本一致的sql如果是历史版本则docker项目也切换至历史版本获取sql即可历史版本升级则根据java相聚的根目录DB目录下的升级sql按需执行
### ⚾️ 功能列表
### 功能列表
#### 🥎 平台管理端功能
#### 平台管理端功能
![平台管理端功能](https://pickmall.cn/assets/imgs/other/managerList.jpg)
![平台管理端功能](https://pickmall.cn/assets/imgs/other/managerList1.jpg)
#### 🥎 卖家功能
#### 卖家功能
![商家端功能](https://pickmall.cn/assets/imgs/other/storeList.jpg)
### 商城前端功能展示
### 🧩 商城前端功能展示
#### ⚽️ 商城移动端
#### 商城移动端
<img src="https://pickmall.cn/assets/imgs/other/app.gif" alt="移动端功能展示" style="zoom:50%;" />
#### ⚽️ 平台管理端
#### 平台管理端
![管理端功能展示](https://pickmall.cn/assets/imgs/other/manager.gif)
### 技术选型
#### 🥅 架构图
#### 架构图
![技术选型](https://lili-system.oss-cn-beijing.aliyuncs.com/docs/%E6%9E%B6%E6%9E%84.png)
##### 🕹 后台技术选型
##### 后台技术选型
| 说明 | 框架 | 说明 | |
| -------------- | --------------- | -------------- | ------------- |
@@ -167,7 +118,7 @@ https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql
| 短信 | 阿里云短信 | 认证 | JWT |
| 日志处理 | Log4j | 接口规范 | RESTful |
##### 🖥 前端-运营后台、店铺后台
##### 前端-运营后台、店铺后台
| 说明 | 框架 | 说明 | 框架 |
| ---------- | ---------- | ---------- | ------- |
@@ -177,14 +128,14 @@ https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql
| 基础UI库 | iView | UI界面基于 | iView |
| 网络请求 | axios | | |
##### 📱前端-移动端
##### 前端-移动端
| 说明 | 架构 | 说明 | 架构 |
| --------- | ------- | -------- | ------- |
| 基础UI库 | uViewui | 基础框架 | uni-app |
| CSS预处理 | scss | 地图引擎 | amap |
### 🌟 版本升级
### 版本升级
```
商城后续会持续版本升级修复bug完善功能覆盖更多业务场景 o2o/b2b/s2b2b2c/跨境电商
@@ -193,7 +144,7 @@ https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql
```
### ⚠️ 开源须知
### 开源须知
1.仅允许用于个人学习研究使用.
2.禁止将本开源的代码和资源进行任何形式任何名义的出售.
@@ -203,7 +154,7 @@ https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql
4.限制商用如果需要商业使用请联系我们。QQ3409056806.
### 🐧 交流群
### 交流群
##### 官方qq 1群 961316482已满
##### 官方qq 2群 875294241

View File

@@ -1,4 +1,4 @@
package cn.lili.controller.other.distribution;
package cn.lili.controller.distribution;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage;
@@ -24,7 +24,7 @@ import org.springframework.web.bind.annotation.*;
*/
@RestController
@Api(tags = "买家端,分销员接口")
@RequestMapping("/buyer/distribution")
@RequestMapping("/buyer/distribution/distribution")
public class DistributionBuyerController {
/**

View File

@@ -1,5 +1,6 @@
package cn.lili.controller.other.distribution;
package cn.lili.controller.distribution;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException;
@@ -13,6 +14,7 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -33,6 +35,7 @@ import javax.validation.constraints.NotNull;
@RestController
@Api(tags = "买家端,分销商品佣金提现接口")
@RequestMapping("/buyer/distribution/cash")
@Validated
public class DistributionCashBuyerController {
/**
@@ -47,15 +50,16 @@ public class DistributionCashBuyerController {
private DistributionCashService distributorCashService;
@PreventDuplicateSubmissions
@ApiOperation(value = "分销员提现")
@ApiImplicitParams({
@ApiImplicitParam(name = "price", value = "申请金额", required = true, paramType = "query", dataType = "double")
})
@PostMapping
public ResultMessage<Object> cash(@Max(value = 1000, message = "提现金额单次最多允许提现1000")
public ResultMessage<Object> cash(@Validated @Max(value = 9999, message = "提现金额单次最多允许提现9999")
@Min(value = 1, message = "提现金额单次最少提现金额为1元")
@NotNull @ApiIgnore Double price) {
if (distributionCashService.cash(price)) {
if (Boolean.TRUE.equals(distributionCashService.cash(price))) {
return ResultUtil.success();
}
throw new ServiceException(ResultCode.ERROR);

View File

@@ -1,5 +1,6 @@
package cn.lili.controller.other.distribution;
package cn.lili.controller.distribution;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException;
@@ -29,7 +30,7 @@ import javax.validation.constraints.NotNull;
*/
@RestController
@Api(tags = "买家端,分销商品接口")
@RequestMapping("/buyer/distributionGoods")
@RequestMapping("/buyer/distribution/goods")
public class DistributionGoodsBuyerController {
/**
@@ -50,6 +51,7 @@ public class DistributionGoodsBuyerController {
return ResultUtil.data(distributionGoodsService.goodsPage(distributionGoodsSearchParams));
}
@PreventDuplicateSubmissions
@ApiOperation(value = "选择分销商品")
@ApiImplicitParams({
@ApiImplicitParam(name = "distributionGoodsId", value = "分销ID", required = true, dataType = "String", paramType = "path"),

View File

@@ -1,4 +1,4 @@
package cn.lili.controller.other.distribution;
package cn.lili.controller.distribution;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage;

View File

@@ -25,7 +25,7 @@ import java.util.List;
*/
@RestController
@Api(tags = "买家端,商品分类接口")
@RequestMapping("/buyer/category")
@RequestMapping("/buyer/goods/category")
public class CategoryBuyerController {
/**
* 商品分类

View File

@@ -43,7 +43,7 @@ import java.util.Map;
@Slf4j
@Api(tags = "买家端,商品接口")
@RestController
@RequestMapping("/buyer/goods")
@RequestMapping("/buyer/goods/goods")
public class GoodsBuyerController {
/**

View File

@@ -23,7 +23,7 @@ import java.util.List;
*/
@RestController
@Api(tags = "买家端,浏览历史接口")
@RequestMapping("/buyer/footprint")
@RequestMapping("/buyer/member/footprint")
public class FootprintController {
/**

View File

@@ -1,12 +1,12 @@
package cn.lili.controller.member;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.entity.dos.MemberAddress;
import cn.lili.modules.member.service.MemberAddressService;
import cn.lili.modules.system.utils.OperationalJudgment;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -26,7 +26,7 @@ import java.util.Objects;
*/
@RestController
@Api(tags = "买家端,会员地址接口")
@RequestMapping("/buyer/memberAddress")
@RequestMapping("/buyer/member/address")
public class MemberAddressBuyerController {
/**

View File

@@ -1,5 +1,6 @@
package cn.lili.controller.member;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.enums.SwitchEnum;
import cn.lili.common.security.context.UserContext;
@@ -28,7 +29,7 @@ import javax.validation.constraints.NotNull;
*/
@RestController
@Api(tags = "买家端,会员商品评价接口")
@RequestMapping("/buyer/memberEvaluation")
@RequestMapping("/buyer/member/evaluation")
public class MemberEvaluationBuyerController {
/**
@@ -37,10 +38,11 @@ public class MemberEvaluationBuyerController {
@Autowired
private MemberEvaluationService memberEvaluationService;
@PreventDuplicateSubmissions
@ApiOperation(value = "添加会员评价")
@PostMapping
public ResultMessage<MemberEvaluationDTO> save(@Valid MemberEvaluationDTO memberEvaluationDTO) {
return ResultUtil.data(memberEvaluationService.addMemberEvaluation(memberEvaluationDTO));
return ResultUtil.data(memberEvaluationService.addMemberEvaluation(memberEvaluationDTO, true));
}
@ApiOperation(value = "查看会员评价详情")

View File

@@ -1,5 +1,6 @@
package cn.lili.controller.member;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.entity.dos.MemberSign;
@@ -27,6 +28,8 @@ public class MemberSignBuyerController {
@Autowired
private MemberSignService memberSignService;
@PreventDuplicateSubmissions
@PostMapping
@ApiOperation(value = "会员签到")
public ResultMessage<Boolean> memberSign() {

View File

@@ -1,57 +0,0 @@
package cn.lili.controller.member;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.system.entity.dos.ServiceNotice;
import cn.lili.modules.system.service.ServiceNoticeService;
import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 买家端,会员站服务消息接口
*
* @author Chopper
* @since 2020/11/17 2:31 下午
*/
@RestController
@RequestMapping("/service/notice")
@Api(tags = "买家端,会员站服务消息接口")
public class ServiceNoticeBuyerController {
/**
* 服务消息
*/
@Autowired
private ServiceNoticeService serviceNoticeService;
@ApiOperation(value = "获取消息详情")
@ApiImplicitParam(name = "id", value = "商品ID", required = true, dataType = "Long", paramType = "path")
@GetMapping(value = "/{id}")
public ResultMessage<ServiceNotice> get(@PathVariable String id) {
ServiceNotice serviceNotice = serviceNoticeService.getById(id);
return ResultUtil.data(serviceNotice);
}
@ApiOperation(value = "分页获取服务消息")
@GetMapping
@ApiImplicitParam(name = "storeId", value = "商家id默认为-1代表平台消息如果查询某商家发布的消息传递商家id即可", dataType = "int", paramType = "query")
public ResultMessage<IPage<ServiceNotice>> getByPage(PageVO page, String storeId) {
ServiceNotice serviceNotice = new ServiceNotice();
if (storeId == null) {
storeId = "-1";
}
serviceNotice.setStoreId(storeId);
IPage<ServiceNotice> data = serviceNoticeService.page(PageUtil.initPage(page));
return ResultUtil.data(data);
}
}

View File

@@ -1,4 +1,4 @@
package cn.lili.controller.member;
package cn.lili.controller.message;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext;
@@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.*;
*/
@RestController
@Api(tags = "买家端,会员站内消息接口")
@RequestMapping("/buyer/member/message")
@RequestMapping("/buyer/message/member")
public class MemberMessageBuyerController {
/**

View File

@@ -1,19 +1,20 @@
package cn.lili.controller.trade;
package cn.lili.controller.order;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dos.AfterSaleReason;
import cn.lili.modules.order.order.entity.dto.AfterSaleDTO;
import cn.lili.modules.order.order.entity.vo.AfterSaleApplyVO;
import cn.lili.modules.order.order.entity.vo.AfterSaleSearchParams;
import cn.lili.modules.order.order.entity.vo.AfterSaleVO;
import cn.lili.modules.order.order.service.AfterSaleLogService;
import cn.lili.modules.order.order.service.AfterSaleReasonService;
import cn.lili.modules.order.order.service.AfterSaleService;
import cn.lili.modules.order.trade.entity.dos.AfterSaleLog;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog;
import cn.lili.modules.order.aftersale.entity.dos.AfterSaleReason;
import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleApplyVO;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO;
import cn.lili.modules.order.aftersale.service.AfterSaleLogService;
import cn.lili.modules.order.aftersale.service.AfterSaleReasonService;
import cn.lili.modules.order.aftersale.service.AfterSaleService;
import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
import cn.lili.modules.system.utils.OperationalJudgment;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -35,7 +36,7 @@ import java.util.List;
*/
@RestController
@Api(tags = "买家端,售后管理接口")
@RequestMapping("/buyer/afterSale")
@RequestMapping("/buyer/order/afterSale")
public class AfterSaleBuyerController {
/**
@@ -77,6 +78,7 @@ public class AfterSaleBuyerController {
return ResultUtil.data(afterSaleService.getAfterSaleVO(sn));
}
@PreventDuplicateSubmissions
@PostMapping(value = "/save/{orderItemSn}")
@ApiImplicitParam(name = "orderItemSn", value = "订单货物编号", required = true, paramType = "query")
@ApiOperation(value = "申请售后")
@@ -101,6 +103,7 @@ public class AfterSaleBuyerController {
return ResultUtil.data(afterSaleService.buyerDelivery(afterSaleSn, logisticsNo, logisticsId, mDeliverTime));
}
@PreventDuplicateSubmissions
@ApiOperation(value = "售后,取消售后")
@ApiImplicitParams({
@ApiImplicitParam(name = "afterSaleSn", value = "售后sn", required = true, dataType = "String", paramType = "path")

View File

@@ -1,8 +1,9 @@
package cn.lili.controller.trade;
package cn.lili.controller.order;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.cart.entity.enums.CartTypeEnum;
@@ -235,6 +236,7 @@ public class CartController {
}
@PreventDuplicateSubmissions
@ApiOperation(value = "创建交易")
@PostMapping(value = "/create/trade", consumes = "application/json", produces = "application/json")
public ResultMessage<Object> crateTrade(@RequestBody TradeParams tradeParams) {
@@ -246,7 +248,7 @@ public class CartController {
throw se;
} catch (Exception e) {
log.error(ResultCode.ORDER_ERROR.message(), e);
throw new ServiceException(ResultCode.ORDER_ERROR);
throw e;
}
}
}

View File

@@ -1,9 +1,11 @@
package cn.lili.controller.trade;
package cn.lili.controller.order;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.AuthUser;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.order.order.entity.dos.Order;
@@ -12,7 +14,6 @@ import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.order.order.entity.vo.OrderDetailVO;
import cn.lili.modules.order.order.entity.vo.OrderSimpleVO;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.system.utils.OperationalJudgment;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -34,7 +35,7 @@ import java.util.Objects;
*/
@RestController
@Api(tags = "买家端,订单接口")
@RequestMapping("/buyer/orders")
@RequestMapping("/buyer/order/order")
public class OrderBuyerController {
/**
@@ -62,6 +63,7 @@ public class OrderBuyerController {
return ResultUtil.data(orderDetailVO);
}
@PreventDuplicateSubmissions
@ApiOperation(value = "确认收货")
@ApiImplicitParams({
@ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, paramType = "path")
@@ -80,6 +82,7 @@ public class OrderBuyerController {
return ResultUtil.success();
}
@PreventDuplicateSubmissions
@ApiOperation(value = "取消订单")
@ApiImplicitParams({
@ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path"),
@@ -91,6 +94,7 @@ public class OrderBuyerController {
return ResultUtil.success();
}
@PreventDuplicateSubmissions
@ApiOperation(value = "删除订单")
@ApiImplicitParams({
@ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path")
@@ -113,6 +117,7 @@ public class OrderBuyerController {
}
@PreventDuplicateSubmissions
@ApiOperation(value = "开票")
@ApiImplicitParams({
@ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path")

View File

@@ -1,7 +1,9 @@
package cn.lili.controller.trade;
package cn.lili.controller.order;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.AuthUser;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
@@ -13,7 +15,6 @@ import cn.lili.modules.order.order.entity.vo.OrderComplaintSearchParams;
import cn.lili.modules.order.order.entity.vo.OrderComplaintVO;
import cn.lili.modules.order.order.service.OrderComplaintCommunicationService;
import cn.lili.modules.order.order.service.OrderComplaintService;
import cn.lili.modules.system.utils.OperationalJudgment;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -33,7 +34,7 @@ import java.util.Objects;
**/
@RestController
@Api(tags = "买家端,交易投诉接口")
@RequestMapping("/buyer/complain")
@RequestMapping("/buyer/order/complain")
public class OrderComplaintBuyerController {
/**
@@ -66,6 +67,7 @@ public class OrderComplaintBuyerController {
}
@PreventDuplicateSubmissions
@ApiOperation(value = "添加交易投诉")
@PostMapping
public ResultMessage<OrderComplaint> add(@Valid OrderComplaintDTO orderComplaintDTO) {
@@ -85,6 +87,7 @@ public class OrderComplaintBuyerController {
return ResultUtil.data(communicationVO);
}
@PreventDuplicateSubmissions
@ApiOperation(value = "取消售后")
@ApiImplicitParam(name = "id", value = "投诉单ID", required = true, paramType = "path")
@PutMapping(value = "/status/{id}")

View File

@@ -1,5 +1,6 @@
package cn.lili.controller.trade;
package cn.lili.controller.order;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
@@ -41,6 +42,7 @@ public class ReceiptBuyerController {
return ResultUtil.data(this.receiptService.getReceiptData(searchParams, pageVO));
}
@PreventDuplicateSubmissions
@ApiOperation(value = "保存发票信息")
@PostMapping
public ResultMessage<Receipt> save(@Valid Receipt receipt) {

View File

@@ -1,15 +1,15 @@
package cn.lili.controller.trade;
package cn.lili.controller.order;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.order.trade.entity.dos.Recharge;
import cn.lili.modules.order.trade.service.RechargeService;
import cn.lili.modules.wallet.entity.dos.Recharge;
import cn.lili.modules.wallet.service.RechargeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -26,12 +26,12 @@ import javax.validation.constraints.Min;
@RestController
@Api(tags = "买家端,预存款充值记录接口")
@RequestMapping("/buyer/trade/recharge")
@Transactional(rollbackFor = Exception.class)
public class RechargeTradeBuyerController {
@Autowired
private RechargeService rechargeService;
@PreventDuplicateSubmissions
@PostMapping
@ApiOperation(value = "创建余额充值订单")
@ApiImplicitParams({

View File

@@ -25,7 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@Api(tags = "买家端,APP版本")
@RequestMapping("/buyer/appVersion")
@RequestMapping("/buyer/other/appVersion")
public class AppVersionBuyerController {
@Autowired

View File

@@ -29,7 +29,7 @@ import java.util.List;
*/
@RestController
@Api(tags = "买家端,文章接口")
@RequestMapping("/buyer/article")
@RequestMapping("/buyer/other/article")
public class ArticleBuyerController {
/**

View File

@@ -1,5 +1,6 @@
package cn.lili.controller.other;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.ResultMessage;
@@ -22,7 +23,7 @@ import javax.validation.Valid;
*/
@RestController
@Api(tags = "买家端,意见反馈接口")
@RequestMapping("/buyer/feedback")
@RequestMapping("/buyer/other/feedback")
public class FeedbackBuyerController {
/**
@@ -31,6 +32,7 @@ public class FeedbackBuyerController {
@Autowired
private FeedbackService feedbackService;
@PreventDuplicateSubmissions
@ApiOperation(value = "添加意见反馈")
@PostMapping()
public ResultMessage<Object> save(@Valid Feedback feedback) {

View File

@@ -21,7 +21,7 @@ import java.util.List;
*/
@RestController
@Api(tags = "买家端,物流公司接口")
@RequestMapping("/buyer/logistics")
@RequestMapping("/buyer/other/logistics")
public class LogisticsBuyerController {
@Autowired

View File

@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@Api(tags = "买家端,页面接口")
@RequestMapping("/buyer/pageData")
@RequestMapping("/buyer/other/pageData")
public class PageBuyerController {
/**

View File

@@ -1,5 +1,6 @@
package cn.lili.controller.other.purchase;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext;
@@ -29,7 +30,7 @@ import javax.validation.constraints.NotNull;
*/
@Api(tags = "买家端,采购接口")
@RestController
@RequestMapping("/buyer/purchase")
@RequestMapping("/buyer/other/purchase/purchase")
public class PurchaseBuyerController {
/**
@@ -48,6 +49,8 @@ public class PurchaseBuyerController {
return ResultUtil.data(goodsUnitService.page(PageUtil.initPage(pageVO)));
}
@PreventDuplicateSubmissions
@ApiOperation(value = "添加采购单")
@PostMapping
public ResultMessage<PurchaseOrderVO> addPurchaseOrderVO(@RequestBody PurchaseOrderVO purchaseOrderVO) {
@@ -74,6 +77,7 @@ public class PurchaseBuyerController {
return ResultUtil.data(purchaseOrderService.page(purchaseOrderSearchParams));
}
@PreventDuplicateSubmissions
@ApiOperation(value = "关闭采购单")
@ApiImplicitParam(name = "id", value = "采购单ID", required = true, dataType = "Long", paramType = "path")
@PutMapping("/{id}")

View File

@@ -27,7 +27,7 @@ import java.util.List;
*/
@Api(tags = "买家端,采购报价接口")
@RestController
@RequestMapping("/buyer/purchaseQuoted")
@RequestMapping("/buyer/other/purchase/purchaseQuoted")
public class PurchaseQuotedController {
/**

View File

@@ -1,13 +1,15 @@
package cn.lili.controller.passport;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dto.MemberEditDTO;
import cn.lili.modules.member.service.MemberService;
import cn.lili.modules.system.sms.SmsUtil;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.sms.SmsUtil;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.modules.verification.service.VerificationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -26,7 +28,7 @@ import javax.validation.constraints.NotNull;
*/
@RestController
@Api(tags = "买家端,会员接口")
@RequestMapping("/buyer/members")
@RequestMapping("/buyer/passport/member")
public class MemberBuyerController {
@Autowired
@@ -66,8 +68,11 @@ public class MemberBuyerController {
public ResultMessage<Object> smsLogin(@NotNull(message = "手机号为空") @RequestParam String mobile,
@NotNull(message = "验证码为空") @RequestParam String code,
@RequestHeader String uuid) {
smsUtil.verifyCode(mobile, VerificationEnums.LOGIN, uuid, code);
return ResultUtil.data(memberService.mobilePhoneLogin(mobile));
if (smsUtil.verifyCode(mobile, VerificationEnums.LOGIN, uuid, code)) {
return ResultUtil.data(memberService.mobilePhoneLogin(mobile));
} else {
throw new ServiceException(ResultCode.VERIFICATION_SMS_CHECKED_ERROR);
}
}
@ApiOperation(value = "注册用户")
@@ -84,8 +89,11 @@ public class MemberBuyerController {
@RequestHeader String uuid,
@NotNull(message = "验证码不能为空") @RequestParam String code) {
smsUtil.verifyCode(mobilePhone, VerificationEnums.REGISTER, uuid, code);
return ResultUtil.data(memberService.register(username, password, mobilePhone));
if (smsUtil.verifyCode(mobilePhone, VerificationEnums.REGISTER, uuid, code)) {
return ResultUtil.data(memberService.register(username, password, mobilePhone));
} else {
throw new ServiceException(ResultCode.VERIFICATION_SMS_CHECKED_ERROR);
}
}
@@ -106,11 +114,13 @@ public class MemberBuyerController {
@NotNull(message = "验证码为空") @RequestParam String code,
@RequestHeader String uuid) {
//校验短信验证码是否正确
smsUtil.verifyCode(mobile, VerificationEnums.FIND_USER, uuid, code);
//校验是否通过手机号可获取会员,存在则将会员信息存入缓存有效时间3分钟
memberService.findByMobile(uuid, mobile);
return ResultUtil.success();
if (smsUtil.verifyCode(mobile, VerificationEnums.FIND_USER, uuid, code)) {
//校验是否通过手机号可获取会员,存在则将会员信息存入缓存有效时间3分钟
memberService.findByMobile(uuid, mobile);
return ResultUtil.success();
} else {
throw new ServiceException(ResultCode.VERIFICATION_SMS_CHECKED_ERROR);
}
}
@ApiOperation(value = "修改密码")

View File

@@ -21,7 +21,7 @@ import java.util.List;
*/
@RestController
@Api(tags = "买家端,app/小程序 联合登录")
@RequestMapping("/buyer/connect/bind")
@RequestMapping("/buyer/passport/connect/bind")
public class ConnectBuyerBindController {
@Autowired

View File

@@ -2,16 +2,16 @@ package cn.lili.controller.passport.connect;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.token.Token;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.utils.UuidUtils;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.connect.entity.dto.AuthCallback;
import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
import cn.lili.modules.connect.request.AuthRequest;
import cn.lili.modules.connect.service.ConnectService;
import cn.lili.modules.connect.util.ConnectUtil;
import cn.lili.modules.connect.util.UuidUtils;
import cn.lili.modules.member.service.MemberService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -33,7 +33,7 @@ import java.io.IOException;
@Slf4j
@RestController
@Api(tags = "买家端,web联合登录")
@RequestMapping("/buyer/connect")
@RequestMapping("/buyer/passport/connect/connect")
public class ConnectBuyerWebController {
@Autowired

View File

@@ -1,14 +1,14 @@
package cn.lili.controller.passport.connect;
import cn.lili.common.security.token.Token;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.token.Token;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.connect.entity.dto.WechatMPLoginParams;
import cn.lili.modules.connect.service.ConnectService;
import cn.lili.modules.message.entity.dos.WechatMPMessage;
import cn.lili.modules.message.service.ShortLinkService;
import cn.lili.modules.message.service.WechatMPMessageService;
import cn.lili.modules.message.util.WechatMpCodeUtil;
import cn.lili.modules.wechat.entity.dos.WechatMPMessage;
import cn.lili.modules.wechat.service.WechatMPMessageService;
import cn.lili.modules.wechat.util.WechatMpCodeUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -26,7 +26,7 @@ import java.util.List;
* @since 2021/2/19 09:28
*/
@RestController
@RequestMapping("/buyer/mini-program")
@RequestMapping("/buyer/passport/connect/miniProgram")
@Api(tags = "买家端,小程序登录接口")
public class MiniProgramBuyerController {

View File

@@ -30,7 +30,7 @@ import javax.servlet.http.HttpServletResponse;
@Slf4j
@RestController
@Api(tags = "买家端,收银台接口")
@RequestMapping("/buyer/cashier")
@RequestMapping("/buyer/payment/cashier")
public class CashierController {
@Autowired

View File

@@ -20,7 +20,7 @@ import javax.servlet.http.HttpServletRequest;
*/
@Api(tags = "买家端,退款回调")
@RestController
@RequestMapping("/buyer/cashier/refund")
@RequestMapping("/buyer/payment/cashierRefund")
public class CashierRefundController {
@Autowired

View File

@@ -1,16 +1,19 @@
package cn.lili.controller.member;
package cn.lili.controller.promotion;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.AuthUser;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
import cn.lili.modules.promotion.entity.vos.CouponSearchParams;
import cn.lili.modules.promotion.entity.dto.search.CouponSearchParams;
import cn.lili.modules.promotion.entity.dto.search.MemberCouponSearchParams;
import cn.lili.modules.promotion.entity.enums.CouponGetEnum;
import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum;
import cn.lili.modules.promotion.entity.vos.CouponVO;
import cn.lili.modules.promotion.service.CouponService;
import cn.lili.modules.promotion.service.MemberCouponService;
import cn.lili.modules.system.utils.OperationalJudgment;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -51,13 +54,15 @@ public class CouponBuyerController {
@GetMapping
@ApiOperation(value = "获取可领取优惠券列表")
public ResultMessage<IPage<CouponVO>> getCouponList(CouponSearchParams queryParam, PageVO page) {
IPage<CouponVO> canUseCoupons = couponService.getCanReceiveCoupons(queryParam, page);
queryParam.setPromotionStatus(PromotionsStatusEnum.START.name());
queryParam.setGetType(CouponGetEnum.FREE.name());
IPage<CouponVO> canUseCoupons = couponService.pageVOFindAll(queryParam, page);
return ResultUtil.data(canUseCoupons);
}
@ApiOperation(value = "获取当前会员的优惠券列表")
@GetMapping("/getCoupons")
public ResultMessage<IPage<MemberCoupon>> getCoupons(CouponSearchParams param, PageVO pageVo) {
public ResultMessage<IPage<MemberCoupon>> getCoupons(MemberCouponSearchParams param, PageVO pageVo) {
AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser());
param.setMemberId(currentUser.getId());
return ResultUtil.data(memberCouponService.getMemberCoupons(param, pageVo));
@@ -65,7 +70,7 @@ public class CouponBuyerController {
@ApiOperation(value = "获取当前会员的对于当前商品可使用的优惠券列表")
@GetMapping("/canUse")
public ResultMessage<IPage<MemberCoupon>> getCouponsByCanUse(CouponSearchParams param, Double totalPrice, PageVO pageVo) {
public ResultMessage<IPage<MemberCoupon>> getCouponsByCanUse(MemberCouponSearchParams param, Double totalPrice, PageVO pageVo) {
AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser());
param.setMemberId(currentUser.getId());
return ResultUtil.data(memberCouponService.getMemberCouponsByCanUse(param, totalPrice, pageVo));
@@ -84,8 +89,7 @@ public class CouponBuyerController {
@GetMapping("/receive/{couponId}")
public ResultMessage<Object> receiveCoupon(@NotNull(message = "优惠券ID不能为空") @PathVariable("couponId") String couponId) {
AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser());
memberCouponService.checkCouponLimit(couponId, currentUser.getId());
memberCouponService.receiveCoupon(couponId, currentUser.getId(), currentUser.getNickName());
memberCouponService.receiveBuyerCoupon(couponId, currentUser.getId(), currentUser.getNickName());
return ResultUtil.success();
}

View File

@@ -1,16 +1,20 @@
package cn.lili.controller.promotion;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.promotion.entity.dos.KanjiaActivity;
import cn.lili.modules.promotion.entity.dos.KanjiaActivityLog;
import cn.lili.modules.promotion.entity.dto.KanJiaActivityLogQuery;
import cn.lili.modules.promotion.entity.dto.KanjiaActivityQuery;
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
import cn.lili.modules.promotion.entity.vos.kanjia.*;
import cn.lili.modules.promotion.entity.dto.search.KanJiaActivityLogQuery;
import cn.lili.modules.promotion.entity.dto.search.KanjiaActivityGoodsParams;
import cn.lili.modules.promotion.entity.dto.search.KanjiaActivityQuery;
import cn.lili.modules.promotion.entity.dto.search.KanjiaActivitySearchParams;
import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum;
import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsListVO;
import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsVO;
import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityVO;
import cn.lili.modules.promotion.service.KanjiaActivityGoodsService;
import cn.lili.modules.promotion.service.KanjiaActivityLogService;
import cn.lili.modules.promotion.service.KanjiaActivityService;
@@ -52,9 +56,9 @@ public class KanjiaGoodsActivityBuyerController {
@ApiOperation(value = "分页获取砍价商品")
public ResultMessage<IPage<KanjiaActivityGoodsListVO>> kanjiaActivityGoodsPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO page) {
// 会员端查询到的肯定是已经开始的活动商品
kanjiaActivityGoodsParams.setPromotionStatus(PromotionStatusEnum.START.name());
kanjiaActivityGoodsParams.setStartTime(System.currentTimeMillis());
kanjiaActivityGoodsParams.setEndTime(System.currentTimeMillis());
kanjiaActivityGoodsParams.setPromotionStatus(PromotionsStatusEnum.START.name());
// kanjiaActivityGoodsParams.setStartTime(System.currentTimeMillis());
// kanjiaActivityGoodsParams.setEndTime(System.currentTimeMillis());
return ResultUtil.data(kanJiaActivityGoodsService.kanjiaGoodsVOPage(kanjiaActivityGoodsParams, page));
}
@@ -75,7 +79,7 @@ public class KanjiaGoodsActivityBuyerController {
@ApiOperation(value = "获取砍价活动")
public ResultMessage<KanjiaActivityVO> getKanJiaActivity(KanjiaActivitySearchParams kanjiaActivitySearchParams) {
//如果是非被邀请关系则填写会员ID
if (StrUtil.isEmpty(kanjiaActivitySearchParams.getKanjiaActivityId())) {
if (CharSequenceUtil.isEmpty(kanjiaActivitySearchParams.getKanjiaActivityId())) {
kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId());
}
return ResultUtil.data(kanJiaActivityService.getKanjiaActivityVO(kanjiaActivitySearchParams));

View File

@@ -1,15 +1,14 @@
package cn.lili.controller.promotion;
import cn.hutool.core.date.DateUtil;
import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.promotion.entity.dto.PromotionGoodsDTO;
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams;
import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum;
import cn.lili.modules.promotion.entity.vos.PintuanMemberVO;
import cn.lili.modules.promotion.entity.vos.PintuanShareVO;
import cn.lili.modules.promotion.entity.vos.PromotionGoodsSearchParams;
import cn.lili.modules.promotion.service.PintuanService;
import cn.lili.modules.promotion.service.PromotionGoodsService;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -40,14 +39,13 @@ public class PintuanBuyerController {
@ApiOperation(value = "获取拼团商品")
@GetMapping
public ResultMessage<IPage<PromotionGoodsDTO>> getPintuanCategory(String goodsName, String categoryPath, PageVO pageVo) {
public ResultMessage<IPage<PromotionGoods>> getPintuanCategory(String goodsName, String categoryPath, PageVO pageVo) {
PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams();
searchParams.setGoodsName(goodsName);
searchParams.setPromotionType(PromotionTypeEnum.PINTUAN.name());
searchParams.setPromotionStatus(PromotionStatusEnum.START.name());
searchParams.setPromotionStatus(PromotionsStatusEnum.START.name());
searchParams.setCategoryPath(categoryPath);
searchParams.setEndTime(DateUtil.date().getTime());
return ResultUtil.data(promotionGoodsService.getPromotionGoods(searchParams, pageVo));
return ResultUtil.data(promotionGoodsService.pageFindAll(searchParams, pageVo));
}

View File

@@ -3,8 +3,10 @@ package cn.lili.controller.promotion;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.promotion.entity.dos.PointsGoods;
import cn.lili.modules.promotion.entity.dos.PointsGoodsCategory;
import cn.lili.modules.promotion.entity.vos.PointsGoodsSearchParams;
import cn.lili.modules.promotion.entity.dto.search.PointsGoodsSearchParams;
import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum;
import cn.lili.modules.promotion.entity.vos.PointsGoodsVO;
import cn.lili.modules.promotion.service.PointsGoodsCategoryService;
import cn.lili.modules.promotion.service.PointsGoodsService;
@@ -35,8 +37,9 @@ public class PointsGoodsBuyerController {
@GetMapping
@ApiOperation(value = "分页获取积分商品")
public ResultMessage<IPage<PointsGoodsVO>> getPointsGoodsPage(PointsGoodsSearchParams searchParams, PageVO page) {
IPage<PointsGoodsVO> pointsGoodsByPage = pointsGoodsService.getPointsGoodsByPage(searchParams, page);
public ResultMessage<IPage<PointsGoods>> getPointsGoodsPage(PointsGoodsSearchParams searchParams, PageVO page) {
searchParams.setPromotionStatus(PromotionsStatusEnum.START.name());
IPage<PointsGoods> pointsGoodsByPage = pointsGoodsService.pageFindAll(searchParams, page);
return ResultUtil.data(pointsGoodsByPage);
}

View File

@@ -4,12 +4,13 @@ import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.goods.entity.vos.StoreGoodsLabelVO;
import cn.lili.modules.goods.service.StoreGoodsLabelService;
import cn.lili.modules.store.entity.dto.StoreBankDTO;
import cn.lili.modules.store.entity.dto.StoreCompanyDTO;
import cn.lili.modules.store.entity.dto.StoreOtherInfoDTO;
import cn.lili.modules.store.entity.vos.*;
import cn.lili.modules.store.service.StoreDetailService;
import cn.lili.modules.store.service.StoreGoodsLabelService;
import cn.lili.modules.store.service.StoreService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
@@ -30,7 +31,7 @@ import java.util.List;
* @since 2020/11/17 2:32 下午
*/
@RestController
@RequestMapping("/buyer/store")
@RequestMapping("/buyer/store/store")
@Api(tags = "买家端,店铺接口")
public class StoreBuyerController {

View File

@@ -1,6 +1,7 @@
package cn.lili.controller.member;
package cn.lili.controller.wallet;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO;
@@ -23,7 +24,7 @@ import org.springframework.web.bind.annotation.*;
*/
@RestController
@Api(tags = "买家端,会员发票接口")
@RequestMapping("/buyer/member/receipt")
@RequestMapping("/buyer/wallet/receipt")
public class MemberReceiptController {
@Autowired
@@ -35,6 +36,7 @@ public class MemberReceiptController {
return ResultUtil.data(memberReceiptService.getPage(memberReceiptVO, page));
}
@PreventDuplicateSubmissions
@ApiOperation(value = "新增会员发票")
@PostMapping
public ResultMessage<Object> add(MemberReceiptAddVO memberReceiptAddVO) {

View File

@@ -1,5 +1,6 @@
package cn.lili.controller.member;
package cn.lili.controller.wallet;
import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException;
@@ -7,12 +8,12 @@ import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dos.MemberWallet;
import cn.lili.modules.member.entity.vo.MemberWalletVO;
import cn.lili.modules.member.service.MemberService;
import cn.lili.modules.member.service.MemberWalletService;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.modules.verification.service.VerificationService;
import cn.lili.modules.wallet.entity.dos.MemberWallet;
import cn.lili.modules.wallet.entity.vo.MemberWalletVO;
import cn.lili.modules.wallet.service.MemberWalletService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -34,7 +35,7 @@ import javax.validation.constraints.Pattern;
*/
@RestController
@Api(tags = "买家端,会员余额接口")
@RequestMapping("/buyer/members/wallet")
@RequestMapping("/buyer/wallet/wallet")
public class MemberWalletBuyerController {
/**
@@ -120,12 +121,13 @@ public class MemberWalletBuyerController {
}
@PreventDuplicateSubmissions
@PostMapping(value = "/withdrawal")
@ApiOperation(value = "会员中心余额提现")
@ApiImplicitParams({
@ApiImplicitParam(name = "price", value = "提现金额", required = true, dataType = "double", paramType = "query")
})
public ResultMessage<Boolean> withdrawal(@Max(value = 1000, message = "充值金额单次最多允许提现1000") @Min(value = 1, message = "充值金额单次最少提现金额为1元") Double price) {
public ResultMessage<Boolean> withdrawal(@Max(value = 9999, message = "充值金额单次最多允许提现9999") @Min(value = 1, message = "充值金额单次最少提现金额为1元") Double price) {
return ResultUtil.data(memberWalletService.applyWithdrawal(price));
}

View File

@@ -1,18 +1,17 @@
package cn.lili.controller.member;
package cn.lili.controller.wallet;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.entity.dos.MemberWithdrawApply;
import cn.lili.modules.member.entity.vo.MemberWithdrawApplyQueryVO;
import cn.lili.modules.member.service.MemberWithdrawApplyService;
import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply;
import cn.lili.modules.wallet.entity.vo.MemberWithdrawApplyQueryVO;
import cn.lili.modules.wallet.service.MemberWithdrawApplyService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -27,7 +26,6 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@Api(tags = "买家端,余额提现记录接口")
@RequestMapping("/buyer/member/withdrawApply")
@Transactional(rollbackFor = Exception.class)
public class MemberWithdrawApplyBuyerController {
@Autowired
private MemberWithdrawApplyService memberWithdrawApplyService;

View File

@@ -1,17 +1,16 @@
package cn.lili.controller.member;
package cn.lili.controller.wallet;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.order.trade.entity.dos.Recharge;
import cn.lili.modules.order.trade.entity.vo.RechargeQueryVO;
import cn.lili.modules.order.trade.service.RechargeService;
import cn.lili.modules.wallet.entity.dos.Recharge;
import cn.lili.modules.wallet.service.RechargeService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -24,8 +23,7 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@Api(tags = "买家端,预存款充值记录接口")
@RequestMapping("/buyer/member/recharge")
@Transactional(rollbackFor = Exception.class)
@RequestMapping("/buyer/wallet/recharge")
public class RechargeBuyerController {
@Autowired

View File

@@ -1,12 +1,12 @@
package cn.lili.controller.trade;
package cn.lili.controller.wallet;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.order.trade.entity.dos.WalletLog;
import cn.lili.modules.order.trade.service.WalletLogService;
import cn.lili.modules.wallet.entity.dos.WalletLog;
import cn.lili.modules.wallet.service.WalletLogService;
import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;

View File

@@ -3,12 +3,19 @@ server:
servlet:
context-path: /
tomcat:
uri-encoding: UTF-8
threads:
min-spare: 50
max: 1000
#
# tomcat:
# #最大链接数默认不设置默认是10000
# max-connections: 6500
# #最大等待队列长度允许HTTP请求缓存到请求队列的最大个数默认不限制
# accept-count: 1000
# threads:
# #最少闲置
# min-spare: 50
# #最大线程数 默认是200
# max: 800
netty:
connection-timeout:
# 与Spring Boot 2一样默认情况下大多数端点都不通过http公开我们公开了所有端点。对于生产您应该仔细选择要公开的端点。
management:
@@ -43,16 +50,6 @@ spring:
#关闭jackson 对json做解析
fail-on-empty-beans: false
# mongodb
data:
mongodb:
uri: 127.0.0.1:27017
database: lilishop
username: root
password: lilishop
authentication-database: admin
# replica-set-name: mongoreplset
# Redis
redis:
host: 127.0.0.1
@@ -79,10 +76,10 @@ spring:
url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: lilishop
maxActive: 20
initialSize: 5
maxActive: 50
initialSize: 10
maxWait: 60000
minIdle: 5
minIdle: 10
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
@@ -120,7 +117,7 @@ spring:
props:
#是否打印逻辑SQL语句和实际SQL语句建议调试时打印在生产环境关闭
sql:
show: true
show: false
# 忽略TOKEN 鉴权 的url
ignored:
@@ -131,21 +128,23 @@ ignored:
- /MP_verify_qSyvBPhDsPdxvOhC.txt
- /weixin/**
- /source/**
- /buyer/mini-program/**
- /buyer/cashier/**
- /buyer/pageData/**
- /buyer/article/**
- /buyer/payment/cashier/**
- /buyer/payment/cashierRefund/**
- /buyer/other/pageData/**
- /buyer/other/article/**
- /buyer/goods/**
- /buyer/category/**
- /buyer/store/**
- /buyer/connect/**
- /buyer/passport/connect/**
- /buyer/members/**
- /buyer/passport/member/**
- /buyer/passport/member/refresh/**
- /buyer/promotion/pintuan/**
- /buyer/promotion/seckill/**
- /buyer/promotion/pointsGoods/**
- /buyer/memberEvaluation/**/goodsEvaluation
- /buyer/memberEvaluation/**/evaluationNumber
- /buyer/appVersion/**
- /buyer/promotion/coupon
- /buyer/member/evaluation/**/goodsEvaluation
- /buyer/member/evaluation/**/evaluationNumber
- /buyer/other/appVersion/**
- /buyer/broadcast/studio/**
- /druid/**
- /swagger-ui.html
@@ -186,10 +185,8 @@ logging:
config: classpath:logback-spring.xml
# 输出级别
level:
cn.lili: debug
org.hibernate: debug
root: info
# org.springframework: debug
# org.springframework.data.mongodb.core: debug
file:
# 指定路径
path: lili-logs

View File

@@ -25,16 +25,6 @@ spring:
admin:
client:
url: http://192.168.0.116:8000
# mongodb
data:
mongodb:
host: 192.168.0.116
port: 27017
database: lilishop
username: root
password: lilishop
authentication-database: admin
# replica-set-name: mongoreplset
cache:
type: redis
#amqp
@@ -186,7 +176,6 @@ logging:
cn.lili: info
# org.hibernate: debug
# org.springframework: debug
# org.springframework.data.mongodb.core: debug
file:
# 指定路径
path: lili-logs

View File

@@ -2,11 +2,11 @@ package cn.lili.controller.common;
import cn.lili.cache.Cache;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.common.vo.SearchVO;
@@ -30,8 +30,8 @@ import java.util.List;
* @since 2020/11/26 15:41
*/
@RestController
@Api(tags = "文件管理管理接口")
@RequestMapping("/common/file")
@Api(tags = "文件管理接口")
@RequestMapping("/common/common/file")
public class FileController {
@Autowired
@@ -78,9 +78,7 @@ public class FileController {
}
throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
case MANAGER:
if (file.getUserEnums().equals(authUser.getRole().name())) {
break;
}
break;
default:
throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
}

View File

@@ -25,7 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
* 2021-09-16 15:32
*/
@RestController
@RequestMapping("/common/IM")
@RequestMapping("/common/common/IM")
@Api(tags = "IM 中心")
public class IMController {

View File

@@ -1,4 +1,4 @@
package cn.lili.controller.member;
package cn.lili.controller.common;
import cn.lili.common.utils.IpHelper;
import cn.lili.common.enums.ResultUtil;
@@ -19,8 +19,8 @@ import javax.servlet.http.HttpServletRequest;
* @since 2020-02-25 14:10:16
*/
@RestController
@Api(tags = "管理端,IP接口")
@RequestMapping("/manager/common/ip")
@Api(tags = "获取IP信息以及天气")
@RequestMapping("/common/common/ip")
public class IpInfoManagerController {
@Autowired
private IpHelper ipHelper;

View File

@@ -19,8 +19,8 @@ import org.springframework.web.bind.annotation.RestController;
* @since 2020/11/26 15:41
*/
@RestController
@Api(tags = "文件管理管理接口")
@RequestMapping("/common/logo")
@Api(tags = "文件管理接口")
@RequestMapping("/common/common/logo")
public class LogoController {
@Autowired

View File

@@ -22,7 +22,7 @@ import java.util.List;
*/
@RestController
@Api(tags = "地址信息接口")
@RequestMapping("/common/region")
@RequestMapping("/common/common/region")
public class RegionController {
@Autowired

View File

@@ -3,7 +3,7 @@ package cn.lili.controller.common;
import cn.lili.cache.limit.annotation.LimitPoint;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.modules.verification.service.VerificationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.*;
*/
@Slf4j
@RestController
@RequestMapping("/common/slider")
@RequestMapping("/common/common/slider")
@Api(tags = "滑块验证码接口")
public class SliderImageController {

View File

@@ -4,8 +4,8 @@ import cn.lili.cache.limit.annotation.LimitPoint;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.system.sms.SmsUtil;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.sms.SmsUtil;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.modules.verification.service.VerificationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.*;
*/
@RestController
@Api(tags = "短信验证码接口")
@RequestMapping("/common/sms")
@RequestMapping("/common/common/sms")
public class SmsController {
@Autowired

View File

@@ -5,7 +5,6 @@ import cn.lili.cache.Cache;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.properties.SystemSettingProperties;
import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums;
@@ -40,7 +39,7 @@ import java.util.Objects;
@Slf4j
@RestController
@Api(tags = "文件上传接口")
@RequestMapping("/common/upload")
@RequestMapping("/common/common/upload")
public class UploadController {
@Autowired
@@ -52,9 +51,6 @@ public class UploadController {
@Autowired
private Cache cache;
@Autowired
private SystemSettingProperties systemSettingProperties;
@ApiOperation(value = "文件上传")
@PostMapping(value = "/file")
public ResultMessage<Object> upload(MultipartFile file,

View File

@@ -29,15 +29,6 @@ spring:
admin:
client:
url: http://127.0.0.1:8000
# mongodb
data:
mongodb:
uri: 127.0.0.1:27017
database: lilishop
username: root
password: lilishop
authentication-database: admin
# replica-set-name: mongoreplset
cache:
type: redis
# Redis
@@ -117,7 +108,7 @@ spring:
props:
#是否打印逻辑SQL语句和实际SQL语句建议调试时打印在生产环境关闭
sql:
show: true
show: false
# 忽略鉴权url
ignored:
@@ -128,24 +119,8 @@ ignored:
- /MP_verify_qSyvBPhDsPdxvOhC.txt
- /weixin/**
- /source/**
- /buyer/mini-program/**
- /buyer/cashier/**
- /buyer/pageData/**
- /buyer/article/**
- /buyer/goods/**
- /buyer/category/**
- /buyer/shop/**
- /buyer/connect/**
- /buyer/members/smsLogin
- /buyer/members/refresh/*
- /buyer/members/refresh**
- /buyer/promotion/pintuan
- /buyer/promotion/seckill
- /buyer/memberEvaluation/**/goodsEvaluation
- /buyer/memberEvaluation/**/evaluationNumber
- /store/login/**
- /manager/user/login
- /manager/user/refresh/**
- /common/common/slider/**
- /common/common/sms/**
- /druid/**
- /swagger-ui.html
- /doc.html
@@ -185,10 +160,9 @@ logging:
config: classpath:logback-spring.xml
# 输出级别
level:
cn.lili: info
root: info
# org.hibernate: debug
# org.springframework: debug
# org.springframework.data.mongodb.core: debug
file:
# 指定路径
path: lili-logs

View File

@@ -72,8 +72,8 @@ spring:
url: jdbc:mysql://192.168.0.116:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: lilishop
maxActive: 20
initialSize: 5
maxActive: 50
initialSize: 20
maxWait: 60000
minIdle: 5
timeBetweenEvictionRunsMillis: 60000
@@ -124,26 +124,31 @@ ignored:
- /MP_verify_qSyvBPhDsPdxvOhC.txt
- /weixin/**
- /source/**
- /buyer/mini-program/**
- /buyer/cashier/**
- /buyer/pageData/**
- /buyer/article/**
- /store/passport/login/**
- /store/passport/login/refresh/**
- /common/common/slider/**
- /common/common/sms/**
- /buyer/payment/cashier/**
- /buyer/other/pageData/**
- /buyer/other/article/**
- /buyer/goods/**
- /buyer/category/**
- /buyer/store/**
- /buyer/connect/**
- /buyer/passport/connect/**
- /buyer/members/**
- /buyer/passport/member/**
- /buyer/passport/member/refresh/**
- /buyer/promotion/pintuan/**
- /buyer/promotion/seckill/**
- /buyer/promotion/pointsGoods/**
- /buyer/promotion/coupon
- /buyer/memberEvaluation/**/goodsEvaluation
- /buyer/memberEvaluation/**/evaluationNumber
- /buyer/appVersion/**
- /buyer/member/evaluation/**/goodsEvaluation
- /buyer/member/evaluation/**/evaluationNumber
- /buyer/other/appVersion/**
- /buyer/broadcast/studio/**
- /store/login/**
- /manager/user/login
- /manager/user/refresh/**
- /manager/passport/user/login
- /manager/passport/user/refresh/**
- /manager/other/elasticsearch
- /manager/other/customWords
- /druid/**
- /swagger-ui.html
- /doc.html
@@ -232,7 +237,7 @@ lili:
# 0不做脱敏处理
# 1管理端用户手机号等信息脱敏
# 2商家端信息脱敏为2时表示管理端商家端同时脱敏
# sensitiveLevel: 2
sensitiveLevel: 1
statistics:
# 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数
@@ -304,7 +309,6 @@ lili:
notice-send-group: lili_send_notice_group
rocketmq:
name-server: 192.168.0.116:9876
namesrvAddr: 192.168.0.116:9876
isVIPChannel: false
producer:
group: lili_group

View File

@@ -1,7 +1,7 @@
package cn.lili.event;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
/**
* 售后单改变状态

View File

@@ -0,0 +1,19 @@
package cn.lili.event;
import cn.lili.modules.member.entity.dos.Member;
/**
* 会员登录消息
*
* @author Chopper
* @since 2020/11/17 7:13 下午
*/
public interface MemberLoginEvent {
/**
* 会员登录
*
* @param member 会员
*/
void memberLogin(Member member);
}

View File

@@ -11,7 +11,7 @@ import cn.lili.modules.member.entity.dos.Member;
public interface MemberRegisterEvent {
/**
* 会员登录
* 会员注册
*
* @param member 会员
*/

View File

@@ -1,6 +1,6 @@
package cn.lili.event;
import cn.lili.modules.member.entity.dto.MemberWithdrawalMessage;
import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage;
/**
* 会员提现消息

View File

@@ -7,7 +7,7 @@ import cn.lili.modules.distribution.entity.dos.DistributionOrder;
import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum;
import cn.lili.modules.distribution.mapper.DistributionOrderMapper;
import cn.lili.modules.distribution.service.DistributionOrderService;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dto.OrderMessage;
import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum;
import cn.lili.timetask.handler.EveryDayExecute;

View File

@@ -10,6 +10,7 @@ import cn.lili.common.utils.SnowFlake;
import cn.lili.event.OrderStatusChangeEvent;
import cn.lili.event.TradeEvent;
import cn.lili.modules.goods.entity.dos.GoodsSku;
import cn.lili.modules.goods.entity.enums.GoodsTypeEnum;
import cn.lili.modules.goods.service.GoodsSkuService;
import cn.lili.modules.member.entity.enums.PointTypeEnum;
import cn.lili.modules.member.service.MemberService;
@@ -26,7 +27,7 @@ import cn.lili.modules.order.trade.entity.dos.OrderLog;
import cn.lili.modules.order.trade.service.OrderLogService;
import cn.lili.modules.promotion.service.MemberCouponService;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import cn.lili.rocketmq.tags.MqOrderTagsEnum;
import cn.lili.rocketmq.tags.OrderTagsEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
@@ -34,6 +35,7 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 订单状态处理类
@@ -82,7 +84,7 @@ public class FullDiscountExecute implements TradeEvent, OrderStatusChangeEvent {
if ((cartVO.getGiftList() != null && !cartVO.getGiftList().isEmpty())
|| (cartVO.getGiftPoint() != null && cartVO.getGiftPoint() > 0)
|| (cartVO.getGiftCouponList() != null && !cartVO.getGiftCouponList().isEmpty())) {
cache.put(CachePrefix.ORDER.getPrefix() + cartVO.getSn(), cartVO);
cache.put(CachePrefix.ORDER.getPrefix() + cartVO.getSn(), JSONUtil.toJsonStr(cartVO));
}
}
);
@@ -90,9 +92,10 @@ public class FullDiscountExecute implements TradeEvent, OrderStatusChangeEvent {
@Override
public void orderChange(OrderMessage orderMessage) {
//如果订单已支付
if (orderMessage.getNewStatus().equals(OrderStatusEnum.PAID)) {
log.debug("满减活动,订单状态操作 {}", CachePrefix.ORDER.getPrefix() + orderMessage.getOrderSn());
renderGift((CartVO) cache.get(CachePrefix.ORDER.getPrefix() + orderMessage.getOrderSn()), orderMessage);
renderGift(JSONUtil.toBean(cache.getString(CachePrefix.ORDER.getPrefix() + orderMessage.getOrderSn()), CartVO.class), orderMessage);
}
}
@@ -142,58 +145,96 @@ public class FullDiscountExecute implements TradeEvent, OrderStatusChangeEvent {
* @param originOrder 赠品原订单信息
*/
private void generatorGiftOrder(List<String> skuIds, Order originOrder) {
//获取赠品列表
List<GoodsSku> goodsSkus = goodsSkuService.getGoodsSkuByIdFromCache(skuIds);
//赠品判定
if (goodsSkus == null || goodsSkus.isEmpty()) {
log.error("赠品不存在:{}", skuIds);
return;
}
//赠品分类,分为实体商品/虚拟商品/电子卡券
List<GoodsSku> physicalSkus = goodsSkus.stream().filter(goodsSku -> goodsSku.getGoodsType().equals(GoodsTypeEnum.PHYSICAL_GOODS.name())).collect(Collectors.toList());
List<GoodsSku> virtualSkus = goodsSkus.stream().filter(goodsSku -> goodsSku.getGoodsType().equals(GoodsTypeEnum.VIRTUAL_GOODS.name())).collect(Collectors.toList());
List<GoodsSku> eCouponSkus = goodsSkus.stream().filter(goodsSku -> goodsSku.getGoodsType().equals(GoodsTypeEnum.E_COUPON.name())).collect(Collectors.toList());
//如果赠品不为空,则生成对应的赠品订单
if (!physicalSkus.isEmpty()) {
giftOrderHandler(physicalSkus, originOrder, OrderTypeEnum.NORMAL);
}
if (!virtualSkus.isEmpty()) {
giftOrderHandler(virtualSkus, originOrder, OrderTypeEnum.VIRTUAL);
}
if (!eCouponSkus.isEmpty()) {
giftOrderHandler(eCouponSkus, originOrder, OrderTypeEnum.E_COUPON);
}
}
/**
* 赠品订单处理
*
* @param skuList 赠品列表
* @param originOrder 原始订单
* @param orderTypeEnum 订单类型
*/
private void giftOrderHandler(List<GoodsSku> skuList, Order originOrder, OrderTypeEnum orderTypeEnum) {
//初始化订单对象/订单日志/自订单
Order order = new Order();
List<OrderItem> orderItems = new ArrayList<>();
List<OrderLog> orderLogs = new ArrayList<>();
Order order = new Order();
//初始化价格详情
PriceDetailDTO priceDetailDTO = new PriceDetailDTO();
//复制通用属性
BeanUtil.copyProperties(originOrder, order, "id");
BeanUtil.copyProperties(priceDetailDTO, order, "id");
//生成订单参数
order.setSn(SnowFlake.createStr("G"));
order.setOrderType(OrderPromotionTypeEnum.GIFT.name());
order.setOrderPromotionType(OrderPromotionTypeEnum.GIFT.name());
order.setOrderStatus(OrderStatusEnum.UNPAID.name());
order.setPayStatus(PayStatusEnum.PAID.name());
order.setDeliverStatus(DeliverStatusEnum.UNDELIVERED.name());
order.setOrderType(orderTypeEnum.name());
order.setNeedReceipt(false);
order.setPriceDetailDTO(priceDetailDTO);
order.setClientType(originOrder.getClientType());
//订单日志
String message = "赠品订单[" + order.getSn() + "]创建";
orderLogs.add(new OrderLog(order.getSn(), originOrder.getMemberId(), UserEnums.MEMBER.name(), originOrder.getMemberName(), message));
for (String skuId : skuIds) {
GoodsSku goodsSkuByIdFromCache = goodsSkuService.getGoodsSkuByIdFromCache(skuId);
//生成子订单
for (GoodsSku goodsSku : skuList) {
OrderItem orderItem = new OrderItem();
BeanUtil.copyProperties(goodsSkuByIdFromCache, orderItem, "id");
BeanUtil.copyProperties(goodsSku, orderItem, "id");
BeanUtil.copyProperties(priceDetailDTO, orderItem, "id");
orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.NEW.name());
orderItem.setCommentStatus(CommentStatusEnum.NEW.name());
orderItem.setComplainStatus(OrderComplaintStatusEnum.NEW.name());
orderItem.setNum(1);
orderItem.setOrderSn(order.getSn());
orderItem.setImage(goodsSkuByIdFromCache.getThumbnail());
orderItem.setGoodsName(goodsSkuByIdFromCache.getGoodsName());
orderItem.setSkuId(goodsSkuByIdFromCache.getId());
orderItem.setCategoryId(goodsSkuByIdFromCache.getCategoryPath().substring(
goodsSkuByIdFromCache.getCategoryPath().lastIndexOf(",") + 1
orderItem.setImage(goodsSku.getThumbnail());
orderItem.setGoodsName(goodsSku.getGoodsName());
orderItem.setSkuId(goodsSku.getId());
orderItem.setCategoryId(goodsSku.getCategoryPath().substring(
goodsSku.getCategoryPath().lastIndexOf(",") + 1
));
orderItem.setGoodsPrice(goodsSkuByIdFromCache.getPrice());
orderItem.setGoodsPrice(goodsSku.getPrice());
orderItem.setPriceDetailDTO(priceDetailDTO);
orderItems.add(orderItem);
}
//保存订单
orderService.save(order);
orderItemService.saveBatch(orderItems);
orderLogService.saveBatch(orderLogs);
//发送订单已付款消息
//发送订单已付款消息PS:不在这里处理逻辑是因为期望加交给消费者统一处理库存等等问题)
OrderMessage orderMessage = new OrderMessage();
orderMessage.setOrderSn(order.getSn());
orderMessage.setPaymentMethod(order.getPaymentMethod());
orderMessage.setNewStatus(OrderStatusEnum.PAID);
String destination = rocketmqCustomProperties.getOrderTopic() + ":" + MqOrderTagsEnum.STATUS_CHANGE.name();
String destination = rocketmqCustomProperties.getOrderTopic() + ":" + OrderTagsEnum.STATUS_CHANGE.name();
//发送订单变更mq消息
rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(orderMessage), RocketmqSendCallbackBuilder.commonCallback());
}
}

View File

@@ -0,0 +1,25 @@
package cn.lili.event.impl;
import cn.lili.event.MemberLoginEvent;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 会员自身业务
*
* @author Chopper
* @version v1.0
* 2022-01-11 11:08
*/
@Service
public class MemberExecute implements MemberLoginEvent {
@Autowired
private MemberService memberService;
@Override
public void memberLogin(Member member) {
memberService.updateMemberLoginTime(member.getId());
}
}

View File

@@ -1,7 +1,6 @@
package cn.lili.event.impl;
import cn.hutool.core.convert.Convert;
import cn.lili.common.utils.CurrencyUtil;
import cn.lili.common.utils.StringUtils;
import cn.lili.event.AfterSaleStatusChangeEvent;
@@ -12,11 +11,10 @@ import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dos.MemberEvaluation;
import cn.lili.modules.member.entity.enums.PointTypeEnum;
import cn.lili.modules.member.service.MemberService;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dto.OrderMessage;
import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum;
import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum;
@@ -105,14 +103,18 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp
}
case COMPLETED: {
Order order = orderService.getBySn(orderMessage.getOrderSn());
//根据订单编号获取订单数据,如果订单促销类型不为空,并且订单促销类型为积分订单 则直接返回
if (StringUtils.isNotEmpty(order.getOrderPromotionType()) && order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINTS.name())) {
//如果是积分订单 则直接返回
if (StringUtils.isNotEmpty(order.getOrderPromotionType())
&& order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINTS.name())) {
return;
}
//获取积分设置
PointSetting pointSetting = getPointSetting();
if (pointSetting.getConsumer() == 0) {
return;
}
//计算赠送积分数量
Double point = CurrencyUtil.mul(pointSetting.getMoney(), order.getFlowPrice(), 0);
Double point = CurrencyUtil.mul(pointSetting.getConsumer(), order.getFlowPrice(), 0);
//赠送会员积分
memberService.updateMemberPoint(point.longValue(), PointTypeEnum.INCREASE.name(), order.getMemberId(), "会员下单,赠送积分" + point + "");
break;

View File

@@ -3,8 +3,7 @@ package cn.lili.event.impl;
import cn.lili.event.MemberRegisterEvent;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.service.MemberWalletService;
import lombok.RequiredArgsConstructor;
import cn.lili.modules.wallet.service.MemberWalletService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -22,6 +21,7 @@ public class MemberWalletExecute implements MemberRegisterEvent {
@Override
public void memberRegister(Member member) {
memberWalletService.save(member.getId(),member.getUsername());
// 有些情况下会同时创建一个member_id的两条数据
// memberWalletService.save(member.getId(),member.getUsername());
}
}

View File

@@ -2,22 +2,22 @@ package cn.lili.event.impl;
import cn.lili.event.*;
import cn.lili.modules.member.entity.dto.MemberPointMessage;
import cn.lili.modules.member.entity.dto.MemberWithdrawalMessage;
import cn.lili.modules.member.entity.enums.MemberWithdrawalDestinationEnum;
import cn.lili.modules.member.entity.enums.PointTypeEnum;
import cn.lili.modules.member.entity.enums.WithdrawStatusEnum;
import cn.lili.modules.message.entity.dto.NoticeMessageDTO;
import cn.lili.modules.message.entity.enums.NoticeMessageNodeEnum;
import cn.lili.modules.message.entity.enums.NoticeMessageParameterEnum;
import cn.lili.modules.message.service.NoticeMessageService;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dto.OrderMessage;
import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum;
import cn.lili.modules.order.order.entity.vo.OrderDetailVO;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum;
import cn.lili.modules.order.trade.entity.enums.AfterSaleTypeEnum;
import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage;
import cn.lili.modules.wallet.entity.enums.MemberWithdrawalDestinationEnum;
import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

View File

@@ -8,7 +8,6 @@ import cn.lili.modules.order.order.entity.dos.Receipt;
import cn.lili.modules.order.order.entity.vo.OrderVO;
import cn.lili.modules.order.order.entity.vo.ReceiptVO;
import cn.lili.modules.order.order.service.ReceiptService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -34,25 +33,23 @@ public class OrderCreateReceiptExecute implements TradeEvent {
//获取发票信息
ReceiptVO receiptVO = tradeDTO.getReceiptVO();
//如果需要获取发票则保存发票信息
if (tradeDTO.getNeedReceipt()) {
if (orderList.size() > 0) {
List<Receipt> receipts = new ArrayList<>();
for (OrderVO orderVO : orderList) {
Receipt receipt = new Receipt();
BeanUtil.copyProperties(receiptVO, receipt);
receipt.setMemberId(orderVO.getMemberId());
receipt.setMemberName(orderVO.getMemberName());
receipt.setStoreId(orderVO.getStoreId());
receipt.setStoreName(orderVO.getStoreName());
receipt.setOrderSn(orderVO.getSn());
receipt.setReceiptDetail(JSONUtil.toJsonStr(orderVO.getOrderItems()));
receipt.setReceiptPrice(orderVO.getFlowPrice());
receipt.setReceiptStatus(0);
receipts.add(receipt);
}
//保存发票
receiptService.saveBatch(receipts);
if (Boolean.TRUE.equals(tradeDTO.getNeedReceipt()) && !orderList.isEmpty()) {
List<Receipt> receipts = new ArrayList<>();
for (OrderVO orderVO : orderList) {
Receipt receipt = new Receipt();
BeanUtil.copyProperties(receiptVO, receipt);
receipt.setMemberId(orderVO.getMemberId());
receipt.setMemberName(orderVO.getMemberName());
receipt.setStoreId(orderVO.getStoreId());
receipt.setStoreName(orderVO.getStoreName());
receipt.setOrderSn(orderVO.getSn());
receipt.setReceiptDetail(JSONUtil.toJsonStr(orderVO.getOrderItems()));
receipt.setReceiptPrice(orderVO.getFlowPrice());
receipt.setReceiptStatus(0);
receipts.add(receipt);
}
//保存发票
receiptService.saveBatch(receipts);
}
}
}

View File

@@ -4,9 +4,10 @@ import cn.lili.event.MemberRegisterEvent;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.promotion.entity.dos.CouponActivity;
import cn.lili.modules.promotion.entity.enums.CouponActivityTypeEnum;
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum;
import cn.lili.modules.promotion.service.CouponActivityService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import cn.lili.modules.promotion.tools.PromotionTools;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -32,10 +33,9 @@ public class RegisteredCouponActivityExecute implements MemberRegisterEvent {
*/
@Override
public void memberRegister(Member member) {
List<CouponActivity> couponActivities = couponActivityService.list(new LambdaQueryWrapper<CouponActivity>()
.eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.REGISTERED.name())
.eq(CouponActivity::getPromotionStatus, PromotionStatusEnum.START.name()));
List<CouponActivity> couponActivities = couponActivityService.list(new QueryWrapper<CouponActivity>()
.eq("coupon_activity_type", CouponActivityTypeEnum.REGISTERED.name())
.and(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.START)));
couponActivityService.registered(couponActivities, member);
}
}

View File

@@ -14,14 +14,18 @@ import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.promotion.entity.dos.KanjiaActivity;
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO;
import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams;
import cn.lili.modules.promotion.entity.vos.PointsGoodsVO;
import cn.lili.modules.promotion.service.*;
import cn.lili.modules.promotion.service.KanjiaActivityGoodsService;
import cn.lili.modules.promotion.service.KanjiaActivityService;
import cn.lili.modules.promotion.service.PointsGoodsService;
import cn.lili.modules.promotion.service.PromotionGoodsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@@ -62,11 +66,6 @@ public class StockUpdateExecute implements OrderStatusChangeEvent {
*/
@Autowired
private PromotionGoodsService promotionGoodsService;
/**
* 促销商品
*/
@Autowired
private SeckillApplyService seckillApplyService;
/**
* 缓存
*/
@@ -79,10 +78,9 @@ public class StockUpdateExecute implements OrderStatusChangeEvent {
private KanjiaActivityGoodsService kanjiaActivityGoodsService;
@Autowired
private PointsGoodsService pointsGoodsService;
@Autowired
private MongoTemplate mongoTemplate;
@Override
@Transactional(rollbackFor = Exception.class)
public void orderChange(OrderMessage orderMessage) {
switch (orderMessage.getNewStatus()) {
@@ -158,14 +156,11 @@ public class StockUpdateExecute implements OrderStatusChangeEvent {
* @param stocks
*/
private void checkStocks(List<Integer> stocks, OrderDetailVO order) {
for (int i = 0; i < stocks.size(); i++) {
if (null == stocks.get(i)) {
initSkuCache(order.getOrderItems());
initPromotionCache(order.getOrderItems());
return;
}
if (order.getOrderItems().size() == stocks.size()) {
return;
}
initSkuCache(order.getOrderItems());
initPromotionCache(order.getOrderItems());
}
/**
@@ -202,10 +197,10 @@ public class StockUpdateExecute implements OrderStatusChangeEvent {
switch (promotionTypeEnum) {
case KANJIA:
cache.put(cacheKey, kanjiaActivityGoodsService.getKanJiaGoodsBySku(orderItem.getSkuId()).getStock().intValue());
cache.put(cacheKey, kanjiaActivityGoodsService.getKanjiaGoodsBySkuId(orderItem.getSkuId()).getStock());
return;
case POINTS_GOODS:
cache.put(cacheKey, pointsGoodsService.getPointsGoodsVOByMongo(orderItem.getSkuId()).getActiveStock().intValue());
cache.put(cacheKey, pointsGoodsService.getPointsGoodsDetailBySkuId(orderItem.getSkuId()).getActiveStock());
return;
case SECKILL:
case PINTUAN:
@@ -294,23 +289,27 @@ public class StockUpdateExecute implements OrderStatusChangeEvent {
kanjiaActivityGoodsDTO.setStock(stock);
kanjiaActivityGoodsService.updateById(kanjiaActivityGoodsDTO);
this.mongoTemplate.save(kanjiaActivityGoodsDTO);
//修改积分商品库存
} else if (promotionTypeEnum.equals(PromotionTypeEnum.POINTS_GOODS)) {
PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsDetail(orderItem.getPromotionId());
Integer stock = Integer.parseInt(cache.get(PromotionGoodsService.getPromotionGoodsStockCacheKey(promotionTypeEnum, orderItem.getPromotionId(), orderItem.getSkuId())).toString());
pointsGoodsVO.setActiveStock(stock);
pointsGoodsService.updateById(pointsGoodsVO);
this.mongoTemplate.save(pointsGoodsVO);
} else {
PromotionGoods pGoods = promotionGoodsService.getPromotionGoods(promotionTypeEnum, orderItem.getPromotionId(), orderItem.getSkuId());
PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams();
searchParams.setPromotionType(promotionTypeEnum.name());
searchParams.setPromotionId(orderItem.getPromotionId());
searchParams.setSkuId(orderItem.getSkuId());
PromotionGoods pGoods = promotionGoodsService.getPromotionsGoods(searchParams);
//记录需要更新的促销库存信息
promotionKey.add(
PromotionGoodsService.getPromotionGoodsStockCacheKey(
promotionTypeEnum,
orderItem.getPromotionId(), orderItem.getSkuId())
);
promotionGoods.add(pGoods);
if (pGoods != null) {
promotionGoods.add(pGoods);
}
}
}
goodsSkus.add(goodsSku);

View File

@@ -2,10 +2,10 @@ package cn.lili.event.impl;
import cn.lili.event.OrderStatusChangeEvent;
import cn.lili.event.TradeEvent;
import cn.lili.modules.message.util.WechatMessageUtil;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.order.entity.dto.OrderMessage;
import cn.lili.modules.order.order.entity.vo.OrderVO;
import cn.lili.modules.wechat.util.WechatMessageUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

View File

@@ -0,0 +1,34 @@
package cn.lili.init;
import cn.lili.modules.system.service.SensitiveWordsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
/**
* SensitiveWordsInit
*
* @author Chopper
* @version v1.0
* 2021-11-29 11:38
*/
@Slf4j
@Component
public class SensitiveWordsInit implements ApplicationRunner {
@Autowired
private SensitiveWordsService sensitiveWordsService;
/**
* consumer 启动时,实时更新一下过滤词
*
* @param args 启动参数
*/
@Override
public void run(ApplicationArguments args) {
sensitiveWordsService.resetCache();
}
}

View File

@@ -1,9 +1,9 @@
package cn.lili.listener;
import cn.hutool.json.JSONUtil;
import cn.lili.rocketmq.tags.AfterSaleTagsEnum;
import cn.lili.event.AfterSaleStatusChangeEvent;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.rocketmq.tags.AfterSaleTagsEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
@@ -17,7 +17,6 @@ import java.util.List;
* 售后通知
*
* @author paulG
* @since 2020/12/9
*/
@Slf4j
@Component

View File

@@ -3,52 +3,44 @@ package cn.lili.listener;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ClassLoaderUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.event.GoodsCommentCompleteEvent;
import cn.lili.modules.distribution.entity.dos.DistributionGoods;
import cn.lili.modules.distribution.entity.dos.DistributionSelectedGoods;
import cn.lili.modules.distribution.entity.dto.DistributionGoodsSearchParams;
import cn.lili.modules.distribution.service.DistributionGoodsService;
import cn.lili.modules.distribution.service.DistributionSelectedGoodsService;
import cn.lili.modules.goods.entity.dos.Brand;
import cn.lili.modules.goods.entity.dos.Category;
import cn.lili.modules.goods.entity.dos.Goods;
import cn.lili.modules.goods.entity.dos.GoodsSku;
import cn.lili.modules.goods.entity.dos.*;
import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage;
import cn.lili.modules.goods.entity.dto.GoodsParamsDTO;
import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
import cn.lili.modules.goods.entity.enums.GoodsAuthEnum;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
import cn.lili.modules.goods.service.BrandService;
import cn.lili.modules.goods.service.CategoryService;
import cn.lili.modules.goods.service.GoodsService;
import cn.lili.modules.goods.service.GoodsSkuService;
import cn.lili.modules.goods.service.*;
import cn.lili.modules.member.entity.dos.FootPrint;
import cn.lili.modules.member.entity.dos.MemberEvaluation;
import cn.lili.modules.member.service.FootprintService;
import cn.lili.modules.member.service.GoodsCollectionService;
import cn.lili.modules.promotion.entity.dos.BasePromotions;
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams;
import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum;
import cn.lili.modules.promotion.service.PromotionGoodsService;
import cn.lili.modules.promotion.service.PromotionService;
import cn.lili.modules.search.entity.dos.EsGoodsIndex;
import cn.lili.modules.search.service.EsGoodsIndexService;
import cn.lili.modules.search.utils.EsIndexUtil;
import cn.lili.modules.store.entity.dos.StoreGoodsLabel;
import cn.lili.modules.store.service.StoreGoodsLabelService;
import cn.lili.modules.store.service.StoreService;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import cn.lili.rocketmq.tags.GoodsTagsEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
* 商品消息
@@ -122,16 +114,11 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
@Autowired
private StoreGoodsLabelService storeGoodsLabelService;
/**
* rocketMq
*/
@Autowired
private RocketMQTemplate rocketMQTemplate;
/**
* rocketMq配置
*/
private PromotionService promotionService;
@Autowired
private RocketmqCustomProperties rocketmqCustomProperties;
private PromotionGoodsService promotionGoodsService;
@Override
public void onMessage(MessageExt messageExt) {
@@ -145,17 +132,31 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
//生成索引
case GENERATOR_GOODS_INDEX:
try {
String goodsJsonStr = new String(messageExt.getBody());
Goods goods = JSONUtil.toBean(goodsJsonStr, Goods.class);
String goodsId = new String(messageExt.getBody());
log.info("生成索引: {}", goodsId);
Goods goods = this.goodsService.getById(goodsId);
updateGoodsIndex(goods);
} catch (Exception e) {
log.error("生成商品索引事件执行异常,商品信息 {}", new String(messageExt.getBody()));
}
break;
case UPDATE_GOODS_INDEX_PROMOTIONS:
this.updateGoodsIndexPromotions(new String(messageExt.getBody()));
break;
case DELETE_GOODS_INDEX_PROMOTIONS:
BasePromotions promotions = JSONUtil.toBean(new String(messageExt.getBody()), BasePromotions.class);
if (CharSequenceUtil.isNotEmpty(promotions.getScopeId())) {
this.goodsIndexService.deleteEsGoodsPromotionByPromotionId(Arrays.asList(promotions.getScopeId().split(",")), promotions.getId());
} else {
this.goodsIndexService.deleteEsGoodsPromotionByPromotionId(null, promotions.getId());
}
break;
case UPDATE_GOODS_INDEX:
try {
String goodsIdsJsonStr = new String(messageExt.getBody());
List<Goods> goodsList = goodsService.list(new LambdaQueryWrapper<Goods>().in(Goods::getId, JSONUtil.toList(goodsIdsJsonStr, String.class)));
GoodsSearchParams searchParams = new GoodsSearchParams();
searchParams.setId(ArrayUtil.join(JSONUtil.toList(goodsIdsJsonStr, String.class).toArray(), ","));
List<Goods> goodsList = goodsService.queryListByParams(searchParams);
this.updateGoodsIndex(goodsList);
} catch (Exception e) {
log.error("更新商品索引事件执行异常,商品信息 {}", new String(messageExt.getBody()));
@@ -185,12 +186,29 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
break;
//审核商品
case GOODS_AUDIT:
updateGoodsNum(messageExt);
Goods goods = JSONUtil.toBean(new String(messageExt.getBody()), Goods.class);
updateGoodsNum(goods);
updateGoodsIndex(goods);
break;
//删除商品
case GOODS_DELETE:
deleteGoods(messageExt);
updateGoodsNum(messageExt);
try {
String goodsIdsJsonStr = new String(messageExt.getBody());
for (String goodsId : JSONUtil.toList(goodsIdsJsonStr, String.class)) {
Goods goodsById = this.goodsService.getById(goodsId);
if (goodsById != null) {
this.deleteGoods(goodsById);
this.updateGoodsNum(goodsById);
List<String> skuIdsByGoodsId = this.goodsSkuService.getSkuIdsByGoodsId(goodsId);
if (skuIdsByGoodsId != null && !skuIdsByGoodsId.isEmpty()) {
this.goodsIndexService.deleteIndexByIds(skuIdsByGoodsId);
}
}
}
} catch (Exception e) {
log.error("删除商品索引事件执行异常,商品信息 {}", new String(messageExt.getBody()));
}
break;
//规格删除
case SKU_DELETE:
@@ -198,10 +216,6 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
List<String> skuIds = JSONUtil.toList(message, String.class);
goodsCollectionService.deleteSkuCollection(skuIds);
break;
//收藏商品
case GOODS_COLLECTION:
storeService.updateStoreCollectionNum(new String(messageExt.getBody()));
break;
//商品评价
case GOODS_COMMENT_COMPLETE:
MemberEvaluation memberEvaluation = JSONUtil.toBean(new String(messageExt.getBody()), MemberEvaluation.class);
@@ -226,6 +240,35 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
}
}
private void updateGoodsIndexPromotions(String promotionsJsonStr) {
try {
log.info("更新商品索引促销信息: {}", promotionsJsonStr);
JSONObject jsonObject = JSONUtil.parseObj(promotionsJsonStr);
BasePromotions promotions = (BasePromotions) jsonObject.get("promotions",
ClassLoaderUtil.loadClass(jsonObject.get("promotionsType").toString()));
String esPromotionKey = jsonObject.get("esPromotionKey").toString();
if (PromotionsScopeTypeEnum.PORTION_GOODS.name().equals(promotions.getScopeType())) {
PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams();
searchParams.setPromotionId(promotions.getId());
List<PromotionGoods> promotionGoodsList = this.promotionGoodsService.listFindAll(searchParams);
List<String> skuIds = promotionGoodsList.stream().map(PromotionGoods::getSkuId).collect(Collectors.toList());
this.goodsIndexService.deleteEsGoodsPromotionByPromotionId(skuIds, promotions.getId());
this.goodsIndexService.updateEsGoodsIndexByList(promotionGoodsList, promotions, esPromotionKey);
} else if (PromotionsScopeTypeEnum.PORTION_GOODS_CATEGORY.name().equals(promotions.getScopeType())) {
GoodsSearchParams searchParams = new GoodsSearchParams();
searchParams.setCategoryPath(promotions.getScopeId());
List<GoodsSku> goodsSkuByList = this.goodsSkuService.getGoodsSkuByList(searchParams);
List<String> skuIds = goodsSkuByList.stream().map(GoodsSku::getId).collect(Collectors.toList());
this.goodsIndexService.deleteEsGoodsPromotionByPromotionId(skuIds, promotions.getId());
this.goodsIndexService.updateEsGoodsIndexPromotions(skuIds, promotions, esPromotionKey);
} else if (PromotionsScopeTypeEnum.ALL.name().equals(promotions.getScopeType())) {
this.goodsIndexService.updateEsGoodsIndexAllByList(promotions, esPromotionKey);
}
} catch (Exception e) {
log.error("生成商品索引促销信息执行异常", e);
}
}
/**
* 更新商品索引
*
@@ -235,8 +278,11 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
List<EsGoodsIndex> goodsIndices = new ArrayList<>();
for (Goods goods : goodsList) {
//如果商品通过审核&&并且已上架
List<GoodsSku> goodsSkuList = this.goodsSkuService.list(new LambdaQueryWrapper<GoodsSku>().eq(GoodsSku::getGoodsId, goods.getId()).gt(GoodsSku::getQuantity, 0));
if (goods.getIsAuth().equals(GoodsAuthEnum.PASS.name())
GoodsSearchParams searchParams = new GoodsSearchParams();
searchParams.setGoodsId(goods.getId());
searchParams.setGeQuantity(0);
List<GoodsSku> goodsSkuList = this.goodsSkuService.getGoodsSkuByList(searchParams);
if (goods.getAuthFlag().equals(GoodsAuthEnum.PASS.name())
&& goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name())
&& Boolean.FALSE.equals(goods.getDeleteFlag())) {
goodsSkuList.forEach(goodsSku -> {
@@ -264,8 +310,12 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
*/
private void updateGoodsIndex(Goods goods) {
//如果商品通过审核&&并且已上架
List<GoodsSku> goodsSkuList = this.goodsSkuService.list(new LambdaQueryWrapper<GoodsSku>().eq(GoodsSku::getGoodsId, goods.getId()));
if (goods.getIsAuth().equals(GoodsAuthEnum.PASS.name())
GoodsSearchParams searchParams = new GoodsSearchParams();
searchParams.setGoodsId(goods.getId());
List<GoodsSku> goodsSkuList = this.goodsSkuService.getGoodsSkuByList(searchParams);
log.info("goods{}", goods);
log.info("goodsSkuList{}", goodsSkuList);
if (goods.getAuthFlag().equals(GoodsAuthEnum.PASS.name())
&& goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name())
&& Boolean.FALSE.equals(goods.getDeleteFlag())) {
this.generatorGoodsIndex(goods, goodsSkuList);
@@ -293,6 +343,8 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
EsGoodsIndex esGoodsOld = goodsIndexService.findById(goodsSku.getId());
EsGoodsIndex goodsIndex = this.settingUpGoodsIndexData(goods, goodsSku);
goodsIndex.setSkuSource(skuSource--);
log.info("goodsSku{}", goodsSku);
log.info("esGoodsOld{}", esGoodsOld);
//如果商品库存不为0并且es中有数据
if (goodsSku.getQuantity() > 0 && esGoodsOld == null) {
log.info("生成商品索引 {}", goodsIndex);
@@ -309,7 +361,7 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
List<GoodsParamsDTO> goodsParamDTOS = JSONUtil.toList(goods.getParams(), GoodsParamsDTO.class);
goodsIndex = new EsGoodsIndex(goodsSku, goodsParamDTOS);
}
goodsIndex.setIsAuth(goods.getIsAuth());
goodsIndex.setAuthFlag(goods.getAuthFlag());
goodsIndex.setMarketEnable(goods.getMarketEnable());
this.settingUpGoodsIndexOtherParam(goodsIndex);
return goodsIndex;
@@ -336,6 +388,11 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
goodsIndex.setStoreCategoryNamePath(ArrayUtil.join(storeGoodsLabels.stream().map(StoreGoodsLabel::getLabelName).toArray(), ","));
}
}
if (goodsIndex.getPromotionMap() == null || goodsIndex.getPromotionMap().isEmpty()) {
Map<String, Object> goodsCurrentPromotionMap = promotionService.getGoodsSkuPromotionMap(goodsIndex.getStoreId(), goodsIndex.getId());
goodsIndex.setPromotionMapJson(JSONUtil.toJsonStr(goodsCurrentPromotionMap));
}
}
@@ -345,38 +402,37 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
* 2.删除分销员-分销商品绑定关系
* 3.删除分销商品
*
* @param messageExt 消息
* @param goods 消息
*/
private void deleteGoods(MessageExt messageExt) {
Goods goods = JSONUtil.toBean(new String(messageExt.getBody()), Goods.class);
private void deleteGoods(Goods goods) {
DistributionGoodsSearchParams searchParams = new DistributionGoodsSearchParams();
searchParams.setGoodsId(goods.getId());
//删除获取分销商品
DistributionGoods distributionGoods = distributionGoodsService.getOne(new LambdaQueryWrapper<DistributionGoods>()
.eq(DistributionGoods::getGoodsId, goods.getId()));
DistributionGoods distributionGoods = distributionGoodsService.getDistributionGoods(searchParams);
//删除分销商品绑定关系
distributionSelectedGoodsService.remove(new LambdaQueryWrapper<DistributionSelectedGoods>()
.eq(DistributionSelectedGoods::getDistributionGoodsId, distributionGoods.getId()));
if (distributionGoods != null) {
//删除分销商品
distributionGoodsService.removeById(distributionGoods.getId());
//删除分销商品绑定关系
distributionSelectedGoodsService.deleteByDistributionGoodsId(distributionGoods.getId());
//删除分销商品
distributionGoodsService.removeById(distributionGoods.getId());
}
}
/**
* 修改商品数量
*
* @param messageExt 信息体
* @param goods 信息体
*/
private void updateGoodsNum(MessageExt messageExt) {
Goods goods;
private void updateGoodsNum(Goods goods) {
try {
goods = JSONUtil.toBean(new String(messageExt.getBody()), Goods.class);
//更新店铺商品数量
assert goods != null;
storeService.updateStoreGoodsNum(goods.getStoreId());
} catch (Exception e) {
log.error("商品MQ信息错误{}", messageExt.toString());
log.error("修改商品数量错误");
}
}
@@ -399,9 +455,7 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
goods.setBuyCount(0);
}
int buyCount = goods.getBuyCount() + goodsCompleteMessage.getBuyNum();
goodsService.update(new LambdaUpdateWrapper<Goods>()
.eq(Goods::getId, goodsCompleteMessage.getGoodsId())
.set(Goods::getBuyCount, buyCount));
this.goodsService.updateGoodsBuyCount(goodsCompleteMessage.getGoodsId(), buyCount);
} else {
log.error("商品Id为[" + goodsCompleteMessage.getGoodsId() + "的商品不存在,更新商品失败!");
}
@@ -415,13 +469,10 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
goodsSku.setBuyCount(buyCount);
goodsSkuService.update(goodsSku);
//修改规格索引,发送mq消息
Map<String, Object> updateIndexFieldsMap = EsIndexUtil.getUpdateIndexFieldsMap(
MapUtil.builder().put("id", goodsCompleteMessage.getSkuId()).build(),
MapUtil.builder().put("buyCount", buyCount).build());
String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.UPDATE_GOODS_INDEX_FIELD.name();
rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(updateIndexFieldsMap), RocketmqSendCallbackBuilder.commonCallback());
goodsIndexService.updateIndex(goodsCompleteMessage.getSkuId(), new EsGoodsIndex().setBuyCount(buyCount));
this.goodsIndexService.updateIndex(
MapUtil.builder(new HashMap<String, Object>()).put("id", goodsCompleteMessage.getSkuId()).build(),
MapUtil.builder(new HashMap<String, Object>()).put("buyCount", buyCount).build());
} else {
log.error("商品SkuId为[" + goodsCompleteMessage.getGoodsId() + "的商品不存在,更新商品失败!");
}

View File

@@ -1,15 +1,16 @@
package cn.lili.listener;
import cn.hutool.json.JSONUtil;
import cn.lili.rocketmq.tags.MemberTagsEnum;
import cn.lili.event.MemberLoginEvent;
import cn.lili.event.MemberPointChangeEvent;
import cn.lili.event.MemberRegisterEvent;
import cn.lili.event.MemberWithdrawalEvent;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dos.MemberSign;
import cn.lili.modules.member.entity.dto.MemberPointMessage;
import cn.lili.modules.member.entity.dto.MemberWithdrawalMessage;
import cn.lili.modules.member.service.MemberSignService;
import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage;
import cn.lili.rocketmq.tags.MemberTagsEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
@@ -51,6 +52,12 @@ public class MemberMessageListener implements RocketMQListener<MessageExt> {
@Autowired
private List<MemberRegisterEvent> memberSignEvents;
/**
* 会员注册
*/
@Autowired
private List<MemberLoginEvent> memberLoginEvents;
@Override
public void onMessage(MessageExt messageExt) {
@@ -69,6 +76,21 @@ public class MemberMessageListener implements RocketMQListener<MessageExt> {
}
}
break;
case MEMBER_LOGIN:
for (MemberLoginEvent memberLoginEvent : memberLoginEvents) {
try {
Member member = JSONUtil.toBean(new String(messageExt.getBody()), Member.class);
memberLoginEvent.memberLogin(member);
} catch (Exception e) {
log.error("会员{},在{}业务中,状态修改事件执行异常",
new String(messageExt.getBody()),
memberLoginEvent.getClass().getName(),
e);
}
}
break;
//会员签到
case MEMBER_SING:
MemberSign memberSign = JSONUtil.toBean(new String(messageExt.getBody()), MemberSign.class);

View File

@@ -5,20 +5,19 @@ import cn.lili.common.enums.SwitchEnum;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.member.entity.vo.MemberSearchVO;
import cn.lili.modules.member.entity.vo.MemberVO;
import cn.lili.modules.member.mapper.MemberMapper;
import cn.lili.modules.member.service.MemberService;
import cn.lili.modules.message.entity.dos.MemberMessage;
import cn.lili.modules.message.entity.dos.Message;
import cn.lili.modules.message.entity.dos.StoreMessage;
import cn.lili.modules.message.entity.dto.SmsReachDTO;
import cn.lili.modules.message.entity.enums.MessageSendClient;
import cn.lili.modules.message.entity.enums.MessageStatusEnum;
import cn.lili.modules.message.entity.enums.RangeEnum;
import cn.lili.modules.message.service.MemberMessageService;
import cn.lili.modules.message.service.StoreMessageService;
import cn.lili.modules.sms.SmsUtil;
import cn.lili.modules.sms.entity.dto.SmsReachDTO;
import cn.lili.modules.store.entity.dos.Store;
import cn.lili.modules.store.service.StoreService;
import cn.lili.modules.system.sms.SmsUtil;
import cn.lili.rocketmq.tags.OtherTagsEnum;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -28,7 +27,6 @@ import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@@ -42,11 +40,6 @@ import java.util.List;
@RocketMQMessageListener(topic = "${lili.data.rocketmq.notice-send-topic}", consumerGroup = "${lili.data.rocketmq.notice-send-group}")
public class NoticeSendMessageListener implements RocketMQListener<MessageExt> {
/**
* 会员
*/
@Resource
private MemberMapper memberMapper;
/**
* 短信
*/
@@ -82,7 +75,7 @@ public class NoticeSendMessageListener implements RocketMQListener<MessageExt> {
//发送全部会员
if (smsReachDTO.getSmsRange().equals(RangeEnum.ALL.name())) {
//获取所有会员的手机号
List<String> list = memberMapper.getAllMemberMobile();
List<String> list = memberService.getAllMemberMobile();
smsUtil.sendBatchSms(smsReachDTO.getSignName(), list, smsReachDTO.getMessageCode());
//判断为发送部分用户
} else {
@@ -158,12 +151,12 @@ public class NoticeSendMessageListener implements RocketMQListener<MessageExt> {
//查询所有会员总数,因为会员总数比较大 如果一次性查出来会占用数据库资源,所以要分页查询
MemberSearchVO memberSearchVO = new MemberSearchVO();
memberSearchVO.setDisabled(SwitchEnum.OPEN.name());
Integer memberNum = memberService.getMemberNum(memberSearchVO);
long memberNum = memberService.getMemberNum(memberSearchVO);
//构建分页查询参数
//100条查一次
Integer pageSize = 100;
Integer pageCount = 0;
pageCount = memberNum / pageSize;
int pageSize = 100;
int pageCount;
pageCount = (int) (memberNum / pageSize);
pageCount = memberNum % pageSize > 0 ? pageCount + 1 : pageCount;
for (int i = 1; i <= pageCount; i++) {
PageVO pageVO = new PageVO();

View File

@@ -2,11 +2,11 @@ package cn.lili.listener;
import cn.hutool.json.JSONUtil;
import cn.lili.cache.Cache;
import cn.lili.rocketmq.tags.MqOrderTagsEnum;
import cn.lili.event.OrderStatusChangeEvent;
import cn.lili.event.TradeEvent;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.order.entity.dto.OrderMessage;
import cn.lili.rocketmq.tags.OrderTagsEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
@@ -58,11 +58,11 @@ public class OrderMessageListener implements RocketMQListener<MessageExt> {
*/
public void orderStatusEvent(MessageExt messageExt) {
switch (MqOrderTagsEnum.valueOf(messageExt.getTags())) {
switch (OrderTagsEnum.valueOf(messageExt.getTags())) {
//订单创建
case ORDER_CREATE:
String key = new String(messageExt.getBody());
TradeDTO tradeDTO = (TradeDTO) cache.get(key);
TradeDTO tradeDTO = JSONUtil.toBean(cache.getString(key), TradeDTO.class);
boolean result = true;
for (TradeEvent event : tradeEvent) {
try {

View File

@@ -1,22 +0,0 @@
package cn.lili.service;
import cn.lili.event.OrderStatusChangeEvent;
import cn.lili.modules.order.order.entity.dto.OrderMessage;
import org.springframework.stereotype.Component;
/**
* 消息发送
*
* @author paulG
* @since 2020/12/9
*/
@Component
public class NoticeSendMessageConsumer implements OrderStatusChangeEvent {
@Override
public void orderChange(OrderMessage orderMessage) {
}
}

View File

@@ -3,13 +3,12 @@ package cn.lili.timetask.handler.impl.bill;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.lili.modules.store.entity.dto.StoreSettlementDay;
import cn.lili.modules.store.mapper.StoreDetailMapper;
import cn.lili.modules.store.service.BillService;
import cn.lili.modules.store.service.StoreDetailService;
import cn.lili.timetask.handler.EveryDayExecute;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
@@ -29,8 +28,8 @@ public class BillExecute implements EveryDayExecute {
/**
* 店铺详情
*/
@Resource
private StoreDetailMapper storeDetailMapper;
@Autowired
private StoreDetailService storeDetailService;
/**
* 1.查询今日待结算的商家
@@ -44,18 +43,18 @@ public class BillExecute implements EveryDayExecute {
int day = DateUtil.date().dayOfMonth();
//获取待结算商家列表
List<StoreSettlementDay> storeList = storeDetailMapper.getSettlementStore(day);
List<StoreSettlementDay> storeList = storeDetailService.getSettlementStore(day);
//获取当前时间
DateTime endTime =DateUtil.date();
DateTime endTime = DateUtil.date();
//批量商家结算
for (StoreSettlementDay storeSettlementDay : storeList) {
//生成结算单
billService.createBill(storeSettlementDay.getStoreId(), storeSettlementDay.getSettlementDay(),endTime);
billService.createBill(storeSettlementDay.getStoreId(), storeSettlementDay.getSettlementDay(), endTime);
//修改店铺结算时间
storeDetailMapper.updateSettlementDay(storeSettlementDay.getStoreId(), endTime);
storeDetailService.updateSettlementDay(storeSettlementDay.getStoreId(), endTime);
}
}
}

View File

@@ -1,6 +1,5 @@
package cn.lili.timetask.handler.impl.coupon;
import cn.lili.common.utils.DateUtil;
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum;
import cn.lili.modules.promotion.service.MemberCouponService;
@@ -43,7 +42,7 @@ public class CouponExecute implements EveryDayExecute {
this.memberCouponService.update(updateWrapper);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + EXPIRATION_DAY);
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - EXPIRATION_DAY);
Date removeTime = calendar.getTime();
//删除过期/已使用的优惠券
LambdaUpdateWrapper<MemberCoupon> deleteWrapper = new LambdaUpdateWrapper<MemberCoupon>()

View File

@@ -8,6 +8,7 @@ import cn.lili.common.exception.ServiceException;
import cn.lili.modules.member.entity.dto.MemberEvaluationDTO;
import cn.lili.modules.member.entity.enums.EvaluationGradeEnum;
import cn.lili.modules.member.service.MemberEvaluationService;
import cn.lili.modules.order.aftersale.service.AfterSaleService;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.enums.CommentStatusEnum;
@@ -15,7 +16,6 @@ import cn.lili.modules.order.order.entity.enums.OrderComplaintStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.order.order.mapper.OrderItemMapper;
import cn.lili.modules.order.order.service.AfterSaleService;
import cn.lili.modules.order.order.service.OrderItemService;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.system.entity.dos.Setting;
@@ -146,7 +146,7 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute {
memberEvaluationDTO.setDescriptionScore(5);
memberEvaluationDTO.setServiceScore(5);
memberEvaluationService.addMemberEvaluation(memberEvaluationDTO);
memberEvaluationService.addMemberEvaluation(memberEvaluationDTO, false);
}
}
}

View File

@@ -4,12 +4,12 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
import cn.lili.modules.order.trade.entity.dos.Recharge;
import cn.lili.modules.order.trade.service.RechargeService;
import cn.lili.modules.system.entity.dos.Setting;
import cn.lili.modules.system.entity.dto.OrderSetting;
import cn.lili.modules.system.entity.enums.SettingEnum;
import cn.lili.modules.system.service.SettingService;
import cn.lili.modules.wallet.entity.dos.Recharge;
import cn.lili.modules.wallet.service.RechargeService;
import cn.lili.timetask.handler.EveryMinuteExecute;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;

View File

@@ -1,34 +1,18 @@
package cn.lili.timetask.handler.impl.promotion;
import cn.lili.modules.order.cart.entity.vo.FullDiscountVO;
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
import cn.lili.modules.promotion.entity.dos.Seckill;
import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum;
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
import cn.lili.modules.promotion.entity.vos.CouponVO;
import cn.lili.modules.promotion.entity.vos.PintuanVO;
import cn.lili.modules.promotion.service.*;
import cn.lili.modules.promotion.service.SeckillService;
import cn.lili.modules.search.service.EsGoodsIndexService;
import cn.lili.modules.system.entity.dos.Setting;
import cn.lili.modules.system.entity.dto.SeckillSetting;
import cn.lili.modules.system.entity.enums.SettingEnum;
import cn.lili.modules.system.service.SettingService;
import cn.lili.timetask.handler.EveryDayExecute;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 促销活动每日定时器
*
@@ -39,41 +23,11 @@ import java.util.List;
@Component
public class PromotionEverydayExecute implements EveryDayExecute {
/**
* Mongo
*/
@Autowired
private MongoTemplate mongoTemplate;
/**
* ES商品索引
*/
@Autowired
private EsGoodsIndexService esGoodsIndexService;
/**
* 满额活动
*/
@Autowired
private FullDiscountService fullDiscountService;
/**
* 拼团
*/
@Autowired
private PintuanService pintuanService;
/**
* 优惠券
*/
@Autowired
private CouponService couponService;
/**
* 会员优惠券
*/
@Autowired
private MemberCouponService memberCouponService;
/**
* 促销商品
*/
@Autowired
private PromotionGoodsService promotionGoodsService;
/**
* 系统设置
*/
@@ -90,123 +44,19 @@ public class PromotionEverydayExecute implements EveryDayExecute {
*/
@Override
public void execute() {
//mongo查询条件
Query query = new Query();
//结束条件 活动未关闭/活动未结束
query.addCriteria(Criteria.where("promotionStatus").ne(PromotionStatusEnum.END.name())
.orOperator(Criteria.where("promotionStatus").ne(PromotionStatusEnum.CLOSE.name())));
//结束条件 活动结束时间大于当前时间
query.addCriteria(Criteria.where("endTime").lte(new Date()));
//结束满减活动
endFullDiscount(query);
//关闭拼团活动
endPintuan(query);
//结束优惠券
endCoupon(query);
//定时创建活动
addSeckill();
}
/**
* 结束优惠券活动
*
* @param query
*/
private void endCoupon(Query query) {
try {
//关闭优惠券活动
List<CouponVO> couponVOS = mongoTemplate.find(query, CouponVO.class);
if (!couponVOS.isEmpty()) {
List<String> ids = new ArrayList<>();
// //关闭的优惠券活动
for (CouponVO vo : couponVOS) {
vo.setPromotionStatus(PromotionStatusEnum.END.name());
if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) {
for (PromotionGoods promotionGoods : vo.getPromotionGoodsList()) {
promotionGoods.setPromotionStatus(PromotionStatusEnum.END.name());
esGoodsIndexService.deleteEsGoodsPromotionByPromotionId(promotionGoods.getSkuId(), vo.getId());
}
}
mongoTemplate.save(vo);
ids.add(vo.getId());
}
couponService.update(this.getUpdatePromotionWrapper(ids));
LambdaUpdateWrapper<MemberCoupon> memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper<MemberCoupon>().in(MemberCoupon::getCouponId, ids).set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name());
memberCouponService.update(memberCouponLambdaUpdateWrapper);
//将活动商品对照表进行结束处理
promotionGoodsService.update(this.getUpdatePromotionGoodsWrapper(ids));
}
//清除所有商品索引的无效促销活动
this.esGoodsIndexService.cleanInvalidPromotion();
} catch (Exception e) {
log.error("优惠券活动关闭错误", e);
log.error("清楚商品索引中无效促销异常", e);
}
}
/**
* 结束拼团活动
*
* @param query
*/
private void endPintuan(Query query) {
try {
//关闭拼团活动
List<PintuanVO> pintuanVOS = mongoTemplate.find(query, PintuanVO.class);
if (!pintuanVOS.isEmpty()) {
//准备修改活动的id
List<String> ids = new ArrayList<>();
for (PintuanVO vo : pintuanVOS) {
vo.setPromotionStatus(PromotionStatusEnum.END.name());
if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) {
for (PromotionGoods promotionGoods : vo.getPromotionGoodsList()) {
promotionGoods.setPromotionStatus(PromotionStatusEnum.END.name());
esGoodsIndexService.deleteEsGoodsPromotionByPromotionId(promotionGoods.getSkuId(), vo.getId());
}
}
mongoTemplate.save(vo);
ids.add(vo.getId());
}
pintuanService.update(this.getUpdatePromotionWrapper(ids));
//将活动商品对照表进行结束处理
promotionGoodsService.update(this.getUpdatePromotionGoodsWrapper(ids));
}
//定时创建活动
addSeckill();
} catch (Exception e) {
log.error("拼团活动关闭错误", e);
log.error("秒杀活动添加异常", e);
}
}
/**
* 结束满减活动
*
* @param query
*/
private void endFullDiscount(Query query) {
try {
//关闭满减活动
List<FullDiscountVO> fullDiscountVOS = mongoTemplate.find(query, FullDiscountVO.class);
if (!fullDiscountVOS.isEmpty()) {
List<String> ids = new ArrayList<>();
//循环活动 关闭活动
for (FullDiscountVO vo : fullDiscountVOS) {
vo.setPromotionStatus(PromotionStatusEnum.END.name());
if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) {
for (PromotionGoods promotionGoods : vo.getPromotionGoodsList()) {
promotionGoods.setPromotionStatus(PromotionStatusEnum.END.name());
esGoodsIndexService.deleteEsGoodsPromotionByPromotionId(promotionGoods.getSkuId(), vo.getId());
}
}
mongoTemplate.save(vo);
ids.add(vo.getId());
}
fullDiscountService.update(this.getUpdatePromotionWrapper(ids));
}
} catch (Exception e) {
log.error("满减活动关闭错误", e);
}
}
/**
@@ -217,33 +67,9 @@ public class PromotionEverydayExecute implements EveryDayExecute {
private void addSeckill() {
Setting setting = settingService.get(SettingEnum.SECKILL_SETTING.name());
SeckillSetting seckillSetting = new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class);
Seckill seckill = new Seckill(SeckillService.PRE_CREATION, seckillSetting.getHours(), seckillSetting.getSeckillRule());
seckillService.saveSeckill(seckill);
}
/**
* 获取促销修改查询条件 修改活动状态
*
* @param ids 促销活动ID
* @return 促销活动商品查询Wrapper
*/
private UpdateWrapper getUpdatePromotionWrapper(List<String> ids) {
UpdateWrapper updateWrapper = new UpdateWrapper<>();
updateWrapper.in("id", ids);
updateWrapper.set("promotion_status", PromotionStatusEnum.END.name());
return updateWrapper;
}
/**
* 获取商品的促销修改查询条件 修改商品状态
*
* @param ids 促销活动ID
* @return 促销活动商品修改Wrapper
*/
private UpdateWrapper getUpdatePromotionGoodsWrapper(List<String> ids) {
UpdateWrapper updateWrapper = new UpdateWrapper<>();
updateWrapper.in("promotion_id", ids);
updateWrapper.set("promotion_status", PromotionStatusEnum.END.name());
return updateWrapper;
for (int i = 1; i <= SeckillService.PRE_CREATION; i++) {
Seckill seckill = new Seckill(i, seckillSetting.getHours(), seckillSetting.getSeckillRule());
seckillService.savePromotions(seckill);
}
}
}

View File

@@ -1,7 +1,7 @@
package cn.lili.timetask.handler.impl.statistics;
import cn.lili.modules.statistics.entity.dos.MemberStatisticsData;
import cn.lili.modules.statistics.service.MemberStatisticsDataService;
import cn.lili.modules.statistics.service.MemberStatisticsService;
import cn.lili.timetask.handler.EveryDayExecute;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,7 +24,7 @@ public class MemberStatisticsExecute implements EveryDayExecute {
* 会员统计
*/
@Autowired
private MemberStatisticsDataService memberStatisticsDataService;
private MemberStatisticsService memberStatisticsService;
@Override
public void execute() {
@@ -43,30 +43,13 @@ public class MemberStatisticsExecute implements EveryDayExecute {
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - 1);
startTime = calendar.getTime();
MemberStatisticsData memberStatisticsData = new MemberStatisticsData();
memberStatisticsData.setMemberCount(memberStatisticsDataService.memberCount(endTime));
memberStatisticsData.setMemberCount(memberStatisticsService.memberCount(endTime));
memberStatisticsData.setCreateDate(startTime);
memberStatisticsData.setActiveQuantity(memberStatisticsDataService.activeQuantity(startTime));
memberStatisticsData.setNewlyAdded(memberStatisticsDataService.newlyAdded(startTime, endTime));
memberStatisticsDataService.save(memberStatisticsData);
memberStatisticsData.setActiveQuantity(memberStatisticsService.activeQuantity(startTime));
memberStatisticsData.setNewlyAdded(memberStatisticsService.newlyAdded(startTime, endTime));
memberStatisticsService.save(memberStatisticsData);
} catch (Exception e) {
log.error("每日会员统计功能异常:", e);
}
}
public static void main(String[] args) {
//统计的时间(开始。结束时间)
Date startTime, endTime;
//初始值
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
endTime = calendar.getTime();
//-1天即为开始时间
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - 1);
startTime = calendar.getTime();
System.out.println(startTime);
}
}

View File

@@ -5,7 +5,7 @@ import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix;
import cn.lili.common.utils.BeanUtil;
import cn.lili.modules.statistics.entity.dos.PlatformViewData;
import cn.lili.modules.statistics.service.PlatformViewDataService;
import cn.lili.modules.statistics.service.PlatformViewService;
import cn.lili.timetask.handler.EveryDayExecute;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@@ -37,7 +37,7 @@ public class PageViewStatisticsExecute implements EveryDayExecute {
* 平台PV统计
*/
@Autowired
private PlatformViewDataService platformViewDataService;
private PlatformViewService platformViewService;
@Override
public void execute() {
@@ -123,7 +123,7 @@ public class PageViewStatisticsExecute implements EveryDayExecute {
@Transactional(rollbackFor = Exception.class)
void batchSave(List<String> pvKeys, List<String> uvKeys, List<PlatformViewData> platformViewData) {
log.debug("批量保存流量数据,共计【{}】条", platformViewData.size());
platformViewDataService.saveBatch(platformViewData);
platformViewService.saveBatch(platformViewData);
//批量删除缓存key
cache.multiDel(pvKeys);
cache.multiDel(uvKeys);

View File

@@ -5,10 +5,10 @@ import cn.lili.cache.Cache;
import cn.lili.common.utils.ThreadPoolUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationRunner;
import org.springframework.data.redis.core.DefaultTypedTuple;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@@ -19,7 +19,7 @@ import java.util.concurrent.TimeUnit;
* @since 2020/11/7
**/
@Slf4j
public abstract class AbstractDelayQueueListen {
public abstract class AbstractDelayQueueListen implements ApplicationRunner {
@Autowired
private Cache cache;
@@ -87,7 +87,6 @@ public abstract class AbstractDelayQueueListen {
/**
* 监听队列
*/
@PostConstruct
public void init() {
ThreadPoolUtil.getPool().execute(this::startDelayQueueMachine);
}

View File

@@ -1,16 +1,11 @@
package cn.lili.trigger.executor;
import cn.hutool.json.JSONUtil;
import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
import cn.lili.modules.promotion.service.PromotionService;
import cn.lili.modules.promotion.entity.dos.Pintuan;
import cn.lili.trigger.TimeTriggerExecutor;
import cn.lili.trigger.interfaces.TimeTrigger;
import cn.lili.trigger.message.PintuanOrderMessage;
import cn.lili.trigger.message.PromotionMessage;
import cn.lili.trigger.model.TimeExecuteConstant;
import cn.lili.trigger.model.TimeTriggerMsg;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -25,21 +20,6 @@ import org.springframework.stereotype.Component;
@Slf4j
@Component(TimeExecuteConstant.PROMOTION_EXECUTOR)
public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor {
/**
* 促销
*/
@Autowired
private PromotionService promotionService;
/**
* RocketMQ
*/
@Autowired
private RocketmqCustomProperties rocketmqCustomProperties;
/**
* 延时任务
*/
@Autowired
private TimeTrigger timeTrigger;
/**
* 订单
*/
@@ -49,32 +29,6 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor {
@Override
public void execute(Object object) {
PromotionMessage promotionMessage = JSONUtil.toBean(JSONUtil.parseObj(object), PromotionMessage.class);
//促销延时信息
if (promotionMessage != null && promotionMessage.getPromotionId() != null) {
log.info("促销活动信息消费:{}", promotionMessage);
//如果为促销活动开始,则需要发布促销活动结束的定时任务
if (PromotionStatusEnum.START.name().equals(promotionMessage.getPromotionStatus())) {
if (!promotionService.updatePromotionStatus(promotionMessage)) {
log.error("开始促销活动失败: {}", promotionMessage);
return;
}
//促销活动开始后,设置促销活动结束的定时任务
promotionMessage.setPromotionStatus(PromotionStatusEnum.END.name());
String uniqueKey = "{TIME_TRIGGER_" + promotionMessage.getPromotionType() + "}_" + promotionMessage.getPromotionId();
if (promotionMessage.getEndTime() != null) {
//结束时间(延时一分钟)
long closeTime = promotionMessage.getEndTime().getTime() + 60000;
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, closeTime, promotionMessage, uniqueKey, rocketmqCustomProperties.getPromotionTopic());
//添加延时任务
timeTrigger.addDelay(timeTriggerMsg);
}
} else {
//不是开始,则修改活动状态
promotionService.updatePromotionStatus(promotionMessage);
}
return;
}
//拼团订单消息
PintuanOrderMessage pintuanOrderMessage = JSONUtil.toBean(JSONUtil.parseObj(object), PintuanOrderMessage.class);
if (pintuanOrderMessage != null && pintuanOrderMessage.getPintuanId() != null) {
@@ -82,6 +36,10 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor {
//拼团订单自动处理
orderService.agglomeratePintuanOrder(pintuanOrderMessage.getPintuanId(), pintuanOrderMessage.getOrderSn());
}
Pintuan pintuan = JSONUtil.toBean(JSONUtil.parseObj(object), Pintuan.class);
if (pintuan != null && pintuan.getId() != null) {
this.orderService.checkFictitiousOrder(pintuan.getId(), pintuan.getRequiredNum(), pintuan.getFictitious());
}
}

View File

@@ -1,11 +1,12 @@
package cn.lili.trigger.listen;
import cn.hutool.json.JSONUtil;
import cn.lili.trigger.AbstractDelayQueueListen;
import cn.lili.trigger.enums.DelayQueueEnums;
import cn.lili.trigger.interfaces.TimeTrigger;
import cn.lili.trigger.model.TimeTriggerMsg;
import cn.lili.trigger.AbstractDelayQueueListen;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.stereotype.Component;
/**
@@ -31,4 +32,9 @@ public class PromotionDelayQueueListen extends AbstractDelayQueueListen {
public String setDelayQueueName() {
return DelayQueueEnums.PROMOTION.name();
}
@Override
public void run(ApplicationArguments args) throws Exception {
this.init();
}
}

View File

@@ -32,15 +32,6 @@ spring:
admin:
client:
url: http://127.0.0.1:8000
# mongodb
data:
mongodb:
uri: 127.0.0.1:27017
database: lilishop
username: root
password: lilishop
authentication-database: admin
# replica-set-name: mongoreplset
cache:
type: redis
# Redis
@@ -120,7 +111,7 @@ spring:
props:
#是否打印逻辑SQL语句和实际SQL语句建议调试时打印在生产环境关闭
sql:
show: true
show: false
# 忽略鉴权url
ignored:
@@ -188,10 +179,9 @@ logging:
config: classpath:logback-spring.xml
# 输出级别
level:
cn.lili: info
root: info
# org.hibernate: debug
# org.springframework: debug
# org.springframework.data.mongodb.core: debug
file:
# 指定路径
path: lili-logs

View File

@@ -0,0 +1,61 @@
package cn.lili.buyer.test.bill;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.lili.modules.store.entity.dto.StoreSettlementDay;
import cn.lili.modules.store.service.BillService;
import cn.lili.modules.store.service.StoreDetailService;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.util.List;
/**
* @author paulG
* @since 2022/1/10
**/
@ExtendWith(SpringExtension.class)
@SpringBootTest
public class BillTest {
/**
* 结算单
*/
@Autowired
private BillService billService;
/**
* 店铺详情
*/
@Autowired
private StoreDetailService storeDetailService;
@Test
void createBillTest() {
//获取当前天数
int day = DateUtil.date().dayOfMonth();
//获取待结算商家列表
List<StoreSettlementDay> storeList = storeDetailService.getSettlementStore(day);
//获取当前时间
DateTime endTime = DateUtil.date();
//批量商家结算
for (StoreSettlementDay storeSettlementDay : storeList) {
//生成结算单
billService.createBill(storeSettlementDay.getStoreId(), storeSettlementDay.getSettlementDay(), endTime);
//修改店铺结算时间
storeDetailService.updateSettlementDay(storeSettlementDay.getStoreId(), endTime);
}
Assertions.assertTrue(true);
}
}

View File

@@ -15,6 +15,11 @@
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
@@ -26,9 +31,27 @@
</exclusion>
</exclusions>
</dependency>
<!--定时任务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>log4j-to-slf4j</artifactId>
<groupId>org.apache.logging.log4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
@@ -55,6 +78,10 @@
<artifactId>HdrHistogram</artifactId>
<groupId>org.hdrhistogram</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
@@ -64,49 +91,61 @@
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-redis</artifactId>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!--mongodb依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!-- &lt;!&ndash; Websocket &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-websocket</artifactId>-->
<!-- </dependency>-->
<!-- &lt;!&ndash; Websocket &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-websocket</artifactId>-->
<!-- </dependency>-->
<!-- MybatisPlus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus-version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>1.3.2</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- Mysql Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-version}</version>
</dependency>
<!-- Redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Swagger API文档 -->
<!-- https://mvnrepository.com/artifact/org.redisson/redisson-spring-boot-starter -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>${redisson}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- Hutool工具包 -->
<dependency>
@@ -136,6 +175,12 @@
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>${aliyun-version}</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 阿里云OSS -->
<dependency>
@@ -154,6 +199,16 @@
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>${aliyun-sdk-dysms-version}</version>
<exclusions>
<exclusion>
<artifactId>org.jacoco.agent</artifactId>
<groupId>org.jacoco</groupId>
</exclusion>
<exclusion>
<artifactId>bcprov-jdk15on</artifactId>
<groupId>org.bouncycastle</groupId>
</exclusion>
</exclusions>
</dependency>
<!--脚本编程-->
<dependency>
@@ -165,6 +220,16 @@
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>${rocketmq-version}</version>
<exclusions>
<exclusion>
<artifactId>fastjson</artifactId>
<groupId>com.alibaba</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- token加密 -->
<dependency>
@@ -188,6 +253,12 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 解决版本提示问题 -->
@@ -213,6 +284,18 @@
<artifactId>groovy</artifactId>
<groupId>org.codehaus.groovy</groupId>
</exclusion>
<exclusion>
<artifactId>commons-collections4</artifactId>
<groupId>org.apache.commons</groupId>
</exclusion>
<exclusion>
<artifactId>antlr4-runtime</artifactId>
<groupId>org.antlr</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
@@ -220,6 +303,12 @@
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-namespace</artifactId>
<version>${sharding-jdbc-version}</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!--druid-->
<dependency>
@@ -241,6 +330,20 @@
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>${alipay-sdk-version}</version>
<exclusions>
<exclusion>
<artifactId>bcprov-jdk15on</artifactId>
<groupId>org.bouncycastle</groupId>
</exclusion>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
<exclusion>
<artifactId>xml-apis</artifactId>
<groupId>xml-apis</groupId>
</exclusion>
</exclusions>
</dependency>
<!--用户端类型处理-->
@@ -265,11 +368,6 @@
<artifactId>logstash-logback-encoder</artifactId>
<version>${logstash-logback-encoder}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>javax.interceptor</groupId>-->
<!-- <artifactId>javax.interceptor-api</artifactId>-->
<!-- <version>${interceptor-api}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
@@ -307,6 +405,12 @@
<groupId>com.googlecode.owasp-java-html-sanitizer</groupId>
<artifactId>owasp-java-html-sanitizer</artifactId>
<version>${owasp-java-html-sanitizer}</version>
<exclusions>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

View File

@@ -211,6 +211,14 @@ public interface Cache<T> {
* @return 计数器结果
*/
Long incr(String key, long liveTime);
/**
* redis 计数器 累加
* 注到达liveTime之后该次增加取消即自动-1而不是redis值为空
*
* @param key 为累计的key同一key每次调用则值 +1
* @return 计数器结果
*/
Long incr(String key);
//-----------------------------------------------redis计数---------------------------------------------
/**

View File

@@ -480,7 +480,11 @@ public enum CachePrefix {
/**
* 订单暂时缓存
*/
ORDER;
ORDER,
/**
* 敏感词
*/
SENSITIVE;
public static String removePrefix(String str) {

View File

@@ -1,55 +0,0 @@
package cn.lili.cache.config.mongo;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import java.util.ArrayList;
import java.util.List;
/**
* @author paulG
* @since 2020/10/22
**/
@Configuration
@EnableMongoRepositories
public class MongoConfig extends AbstractMongoClientConfiguration {
@Value("${spring.data.mongodb.database}")
private String databaseName;
@Value("${spring.data.mongodb.uri}")
private List<String> uri = new ArrayList<>();
@Value("${spring.data.mongodb.username}")
private String username;
@Value("${spring.data.mongodb.password}")
private String password;
@Value("${spring.data.mongodb.authentication-database}")
private String authenticationDatabase;
@Override
protected String getDatabaseName() {
return databaseName;
}
@Override
protected void configureClientSettings(MongoClientSettings.Builder builder) {
builder.credential(MongoCredential.createCredential(username, authenticationDatabase, password.toCharArray()))
.applyToClusterSettings(settings -> {
List<ServerAddress> serverAddresses = new ArrayList<>();
for (String s : uri) {
String[] node = s.split(":");
serverAddresses.add(new ServerAddress(node[0], Integer.parseInt(node[1])));
}
settings.hosts(serverAddresses);
});
}
}

View File

@@ -1,9 +1,17 @@
package cn.lili.cache.config.redis;
import cn.hutool.core.text.CharSequenceUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.ParserConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.ClusterServersConfig;
import org.redisson.config.Config;
import org.redisson.config.SentinelServersConfig;
import org.redisson.config.SingleServerConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -28,7 +36,9 @@ import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -49,6 +59,9 @@ public class RedisConfig extends CachingConfigurerSupport {
@Value("${lili.cache.timeout:7200}")
private Integer timeout;
@Autowired
private RedisProperties redisProperties;
/**
* 当有多个管理器的时候,必须使用该注解在一个管理器上注释:表示该管理器为默认的管理器
@@ -78,6 +91,7 @@ public class RedisConfig extends CachingConfigurerSupport {
可参考 https://blog.csdn.net/u012240455/article/details/80538540
*/
ParserConfig.getGlobalInstance().addAccept("cn.lili.");
ParserConfig.getGlobalInstance().addAccept("cn.hutool.json.");
return cacheManager;
}
@@ -98,6 +112,44 @@ public class RedisConfig extends CachingConfigurerSupport {
return template;
}
@Bean(destroyMethod = "shutdown")
public RedissonClient redisson() {
Config config = new Config();
if (redisProperties.getSentinel() != null && !redisProperties.getSentinel().getNodes().isEmpty()) {
// 哨兵模式
SentinelServersConfig sentinelServersConfig = config.useSentinelServers();
sentinelServersConfig.setMasterName(redisProperties.getSentinel().getMaster());
List<String> sentinelAddress = new ArrayList<>();
for (String node : redisProperties.getCluster().getNodes()) {
sentinelAddress.add("redis://" + node);
}
sentinelServersConfig.setSentinelAddresses(sentinelAddress);
if (CharSequenceUtil.isNotEmpty(redisProperties.getSentinel().getPassword())) {
sentinelServersConfig.setSentinelPassword(redisProperties.getSentinel().getPassword());
}
} else if (redisProperties.getCluster() != null && !redisProperties.getCluster().getNodes().isEmpty()) {
// 集群模式
ClusterServersConfig clusterServersConfig = config.useClusterServers();
List<String> clusterNodes = new ArrayList<>();
for (String node : redisProperties.getCluster().getNodes()) {
clusterNodes.add("redis://" + node);
}
clusterServersConfig.setNodeAddresses(clusterNodes);
if (CharSequenceUtil.isNotEmpty(redisProperties.getPassword())) {
clusterServersConfig.setPassword(redisProperties.getPassword());
}
} else {
SingleServerConfig singleServerConfig = config.useSingleServer();
singleServerConfig.setAddress("redis://" + redisProperties.getHost() + ":" + redisProperties.getPort());
if (CharSequenceUtil.isNotEmpty(redisProperties.getPassword())) {
singleServerConfig.setPassword(redisProperties.getPassword());
}
}
return Redisson.create(config);
}
/**
* 自定义缓存key生成策略默认将使用该策略
*/

View File

@@ -80,7 +80,7 @@ public class RedisCache implements Cache {
@Override
public Boolean remove(Object key) {
return redisTemplate.delete(key);
return redisTemplate.delete(key);
}
/**
@@ -207,13 +207,19 @@ public class RedisCache implements Cache {
RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
Long increment = entityIdCounter.getAndIncrement();
//初始设置过期时间
if ((null == increment || increment == 0) && liveTime > 0) {
if (increment == 0 && liveTime > 0) {
entityIdCounter.expire(liveTime, TimeUnit.SECONDS);
}
return increment;
}
@Override
public Long incr(String key) {
RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
return entityIdCounter.getAndIncrement();
}
/**
* 使用Sorted Set记录keyword
* zincrby命令对于一个Sorted Set存在的就把分数加x(x可自行设定)不存在就创建一个分数为1的成员

View File

@@ -1,9 +1,10 @@
package cn.lili.cache.limit.interceptor;
import cn.lili.cache.limit.enums.LimitTypeEnums;
import cn.lili.cache.limit.annotation.LimitPoint;
import cn.lili.cache.limit.enums.LimitTypeEnums;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.utils.IpUtils;
import com.google.common.collect.ImmutableList;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -16,7 +17,6 @@ import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
/**
@@ -54,7 +54,8 @@ public class LimitInterceptor {
key = limitPointAnnotation.key();
break;
default:
key = limitPointAnnotation.key() + getIpAddress();
key = limitPointAnnotation.key() + IpUtils
.getIpAddress(((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());
}
ImmutableList<String> keys = ImmutableList.of(StringUtils.join(limitPointAnnotation.prefix(), key));
try {
@@ -71,32 +72,8 @@ public class LimitInterceptor {
} catch (ServiceException e) {
throw e;
} catch (Exception e) {
throw new RuntimeException("服务器异常,请稍后再试");
throw new ServiceException(ResultCode.ERROR);
}
}
/**
* 默认unknown常量值
*/
private static final String UNKNOWN = "unknown";
/**
* 获取ip
* @return ip
*/
public String getIpAddress() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}

View File

@@ -1,250 +0,0 @@
package cn.lili.cache.util;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.DefaultTypedTuple;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* Redis封装工具类
*
* @author paulG
* @since 2020/11/7
**/
@Slf4j
@Component
public class RedisUtil {
@Autowired
private RedisTemplate redisTemplate;
//=============================common============================
/**
* 指定缓存失效时间
*
* @param key 键
* @param time 时间(秒)
* @return 操作结果
*/
public boolean expire(String key, long time) {
try {
if (time > 0) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
log.error("指定缓存失效时间错误",e);
return false;
}
}
//============================String=============================
/**
* 普通缓存获取
*
* @param key 键
* @return 值
*/
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}
/**
* 普通缓存获取
*
* @param key 键
* @return 值
*/
public <T> T get(String key, Class<T> clazz) {
Object o = key == null ? null : redisTemplate.opsForValue().get(key);
return (T) o;
}
/**
* 普通缓存放入
*
* @param key 键
* @param value 值
* @return true成功 false失败
*/
public boolean set(String key, Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
log.error("缓存放入错误",e);
return false;
}
}
/**
* 普通缓存放入并设置时间
*
* @param key 键
* @param value 值
* @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
* @return true成功 false 失败
*/
public boolean set(String key, Object value, long time) {
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
} else {
set(key, value);
}
return true;
} catch (Exception e) {
log.error("普通缓存放入并设置时间错误",e);
return false;
}
}
//================================Map=================================
/**
* 将数据放入set缓存
*
* @param key 键
* @param values 值 可以是多个
* @return 成功个数
*/
public long sSet(String key, Object... values) {
try {
return redisTemplate.opsForSet().add(key, values);
} catch (Exception e) {
log.error("将数据放入set缓存错误",e);
return 0;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @return 操作结果
*/
public boolean lSet(String key, Object value) {
try {
redisTemplate.opsForList().rightPush(key, value);
return true;
} catch (Exception e) {
log.error("将list放入缓存错误",e);
return false;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @param time 时间(秒)
* @return 操作结果
*/
public boolean lSet(String key, Object value, long time) {
try {
redisTemplate.opsForList().rightPush(key, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
log.error("将list放入缓存错误",e);
return false;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @return 操作结果
*/
public boolean lSet(String key, List<Object> value) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
return true;
} catch (Exception e) {
log.error("将list放入缓存错误",e);
return false;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @param time 时间(秒)
* @return 操作结果
*/
public boolean lSet(String key, List<Object> value, long time) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
log.error("将list放入缓存错误",e);
return false;
}
}
//===============================ZSet=================================
/**
* 向Zset里添加成员
*
* @param key 键
* @param score 分数
* @param value 值
* @return 操作结果
*/
public boolean zadd(String key, long score, String value) {
return redisTemplate.opsForZSet().add(key, value, score);
}
/**
* 获取 某key 下 某一分值区间的队列
*
* @param key 键
* @param from 起始位置
* @param to 结束为止
* @return 符合条件的结果集
*/
public Set<DefaultTypedTuple> zrangeByScoreWithScores(String key, int from, long to) {
Set<DefaultTypedTuple> set = redisTemplate.opsForZSet().rangeByScoreWithScores(key, from, to);
return set;
}
/**
* 移除 Zset队列值
*
* @param key 键
* @param value 值集合
* @return 移除数量
*/
public Long zremove(String key, String... value) {
return redisTemplate.opsForZSet().remove(key, value);
}
}

View File

@@ -1,9 +1,11 @@
package cn.lili.modules.system.aspect.annotation;
package cn.lili.common.aop.annotation;
import java.lang.annotation.*;
/**
* 演示站点注解
* <p>
* PS 此注解需要用户登录之后才可以使用
*
* @author Bulbasaur
* @since 2021/7/9 1:40 上午

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