This commit is contained in:
fengtianyangyang 2022-04-07 17:13:04 +08:00
commit ba57f19ee7
92 changed files with 64312 additions and 1096 deletions

59666
DB/lilishop.sql Normal file

File diff suppressed because one or more lines are too long

View File

@ -6,7 +6,7 @@ ALTER TABLE li_distribution ADD settlement_bank_branch_name varchar ( 200 );
/** 文章分类添加默认值**/ /** 文章分类添加默认值**/
ALTER TABLE li_article_category alter column sort set default 0; ALTER TABLE li_article_category alter column sort set default 0;
/** 添加分销提现菜单**/ /** 添加分销提现菜单**/
INSERT INTO `lilishop`.`li_menu`(`id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `description`, `front_route`, `icon`, `level`, `name`, `parent_id`, `path`, `sort_order`, `title`, `front_component`) VALUES (1410862675914764290, 'admin', '2021-07-02 15:27:29', b'0', 'admin', '2021-07-02 15:27:45', 'null', 'distribution/distributionCash', '', 2, 'distributionCash', '1374173575405109248', 'distributionCash', 5.00, '分销提现', 'null'); INSERT INTO `rxshop`.`li_menu`(`id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `description`, `front_route`, `icon`, `level`, `name`, `parent_id`, `path`, `sort_order`, `title`, `front_component`) VALUES (1410862675914764290, 'admin', '2021-07-02 15:27:29', b'0', 'admin', '2021-07-02 15:27:45', 'null', 'distribution/distributionCash', '', 2, 'distributionCash', '1374173575405109248', 'distributionCash', 5.00, '分销提现', 'null');
/** 促销商品添加商品类型**/ /** 促销商品添加商品类型**/
ALTER TABLE li_promotion_goods ADD goods_type varchar (200); ALTER TABLE li_promotion_goods ADD goods_type varchar (200);
@ -16,7 +16,7 @@ update li_member_points_history set point_type = 'INCREASE' where point_type=1;
update li_member_points_history set point_type = 'REDUCE' where point_type=0; update li_member_points_history set point_type = 'REDUCE' where point_type=0;
/** 添加分词管理菜单*/ /** 添加分词管理菜单*/
INSERT INTO `lilishop`.`li_menu` (`id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `description`, `front_route`, `icon`, `level`, `name`, `parent_id`, `path`, `sort_order`, `title`, `front_component`) VALUES (1349247640584085511, 'admin', '2021-01-13 14:51:20', b'0', 'admin', '2021-02-25 09:02:59', 'null', 'customWords/index', 'ios-american-football', 2, 'customWords', '1349237129847005184', 'customWords', 8.00, '分词管理', 'null'); INSERT INTO `rxshop`.`li_menu` (`id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `description`, `front_route`, `icon`, `level`, `name`, `parent_id`, `path`, `sort_order`, `title`, `front_component`) VALUES (1349247640584085511, 'admin', '2021-01-13 14:51:20', b'0', 'admin', '2021-02-25 09:02:59', 'null', 'customWords/index', 'ios-american-football', 2, 'customWords', '1349237129847005184', 'customWords', 8.00, '分词管理', 'null');
/** 修改会员评价店铺图片字段类型 **/ /** 修改会员评价店铺图片字段类型 **/
alter table li_member_evaluation modify column reply_image text; alter table li_member_evaluation modify column reply_image text;
@ -25,4 +25,4 @@ alter table li_member_evaluation modify column reply_image text;
alter table li_after_sale modify column after_sale_image text; alter table li_after_sale modify column after_sale_image text;
/** 提现申请审核sql **/ /** 提现申请审核sql **/
INSERT INTO `lilishop`.`li_menu`(`id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `description`, `front_route`, `icon`, `level`, `name`, `parent_id`, `path`, `sort_order`, `title`, `front_component`) VALUES (1367042804944994305, 'admin', '2021-03-03 09:22:58', b'0', NULL, NULL, NULL, 'member/advance/withdrawApply', 'ios-alert', 2, 'withdrawApply', '1367042490443497472', 'withdrawApply', 1.00, '提现申请', NULL); INSERT INTO `rxshop`.`li_menu`(`id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `description`, `front_route`, `icon`, `level`, `name`, `parent_id`, `path`, `sort_order`, `title`, `front_component`) VALUES (1367042804944994305, 'admin', '2021-03-03 09:22:58', b'0', NULL, NULL, NULL, 'member/advance/withdrawApply', 'ios-alert', 2, 'withdrawApply', '1367042490443497472', 'withdrawApply', 1.00, '提现申请', NULL);

2025
LICENSE

File diff suppressed because it is too large Load Diff

View File

@ -6,6 +6,12 @@
#### 欢迎交流需求,交流业务,交流技术(基础问题自行解决,进群先看文档后提问) #### 欢迎交流需求,交流业务,交流技术(基础问题自行解决,进群先看文档后提问)
<<<<<<< HEAD
##### 交流 qq 1群 961316482已满
##### 交流 qq 2群 875294241
=======
##### 交流 qq 1群 961316482已满 ##### 交流 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> <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>
@ -13,6 +19,7 @@
##### 交流 qq 2群 875294241 ##### 交流 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> <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>
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
##### 体验 公众号/小程序/APP 体验,扫描二维码 ##### 体验 公众号/小程序/APP 体验,扫描二维码

View File

@ -32,10 +32,10 @@
<artifactId>logstash-logback-encoder</artifactId> <artifactId>logstash-logback-encoder</artifactId>
<version>${logstash-logback-encoder}</version> <version>${logstash-logback-encoder}</version>
</dependency> </dependency>
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>--> <!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-mail</artifactId>--> <!-- <artifactId>spring-boot-starter-mail</artifactId>-->
<!-- </dependency> --> <!-- </dependency> -->
</dependencies> </dependencies>
<build> <build>

View File

@ -16,5 +16,9 @@ spring.mail.username=1814994716@qq.com
spring.mail.password=abcdefg123456!@#$%^ spring.mail.password=abcdefg123456!@#$%^
# 日志文件路径 # 日志文件路径
logging.file.path=lili-logs/admin logging.file.path=lili-logs/admin
<<<<<<< HEAD
lili.data.logstash.server=106.124.130.167:4560
=======
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
# 文件格式 # 文件格式
logging.pattern.file=%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx logging.pattern.file=%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx

View File

@ -36,12 +36,15 @@ public class PageBuyerController {
public ResultMessage<PageDataVO> getIndex(@RequestParam String clientType) { public ResultMessage<PageDataVO> getIndex(@RequestParam String clientType) {
PageDataDTO pageDataDTO = new PageDataDTO(PageEnum.INDEX.name()); PageDataDTO pageDataDTO = new PageDataDTO(PageEnum.INDEX.name());
pageDataDTO.setPageClientType(clientType); pageDataDTO.setPageClientType(clientType);
return ResultUtil.data(pageService.getPageData(pageDataDTO)); PageDataVO pageDataVO=pageService.getPageData(pageDataDTO);
return ResultUtil.data(pageDataVO);
} }
@ApiOperation(value = "获取页面数据") @ApiOperation(value = "获取页面数据")
@GetMapping @GetMapping
public ResultMessage<PageDataVO> get(PageDataDTO pageDataDTO) { public ResultMessage<PageDataVO> get(PageDataDTO pageDataDTO) {
return ResultUtil.data(pageService.getPageData(pageDataDTO));
PageDataVO pageDataVO=pageService.getPageData(pageDataDTO);
return ResultUtil.data(pageDataVO);
} }
} }

View File

@ -45,6 +45,16 @@ public class MemberBuyerController {
private Cache cache; private Cache cache;
@ApiOperation(value = "手机号登录")
@ApiImplicitParams({
@ApiImplicitParam(name = "mobile", value = "手机号", required = true, paramType = "query")
})
@PostMapping("/phoneLogin")
public ResultMessage<Object> phoneLogin(@NotNull(message = "手机号为空") @RequestParam String mobile) {
return ResultUtil.data(memberService.mobilePhoneLogin(mobile));
}
@ApiOperation(value = "登录接口") @ApiOperation(value = "登录接口")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "username", value = "用户名", required = true, paramType = "query"), @ApiImplicitParam(name = "username", value = "用户名", required = true, paramType = "query"),

View File

@ -1,6 +1,5 @@
server: server:
port: 8888 port: 8885
servlet: servlet:
context-path: / context-path: /
# #
@ -52,9 +51,9 @@ spring:
# Redis # Redis
redis: redis:
host: 127.0.0.1 host: 120.71.145.134
port: 6379 port: 6379
password: lilishop password: ekLhvPGraSj8DGO0
lettuce: lettuce:
pool: pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8 # 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -73,9 +72,9 @@ spring:
default-datasource: default-datasource:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: root username: zyt_shop
password: lilishop password: Gb84505016@zytshop
maxActive: 50 maxActive: 50
initialSize: 10 initialSize: 10
maxWait: 60000 maxWait: 60000
@ -162,8 +161,8 @@ ignored:
# Swagger界面内容配置 # Swagger界面内容配置
swagger: swagger:
title: lili API接口文档 title: API接口文档
description: lili Api Documentation description: Api Documentation
version: 1.0.0 version: 1.0.0
termsOfServiceUrl: https://pickmall.cn termsOfServiceUrl: https://pickmall.cn
contact: contact:
@ -186,7 +185,7 @@ logging:
# 输出级别 # 输出级别
level: level:
root: info root: info
# org.springframework: debug # org.springframework: debug
file: file:
# 指定路径 # 指定路径
path: lili-logs path: lili-logs
@ -203,7 +202,7 @@ jasypt:
lili: lili:
system: system:
isDemoSite: true isDemoSite: false
statistics: statistics:
# 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数 # 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数
onlineMember: 48 onlineMember: 48
@ -221,10 +220,10 @@ lili:
admin: https://admin-b2b2c.pickmall.cn admin: https://admin-b2b2c.pickmall.cn
#api地址 #api地址
api: api:
buyer: https://buyer-api.pickmall.cn buyer: https://zshop-api.sx1788.cn/buyer-api
common: https://common-api.pickmall.cn common: https://zshop-api.sx1788.cn/common-api
manager: https://admin-api.pickmall.cn manager: https://zshop-api.sx1788.cn/manager-api
store: https://store-api.pickmall.cn store: https://zshop-api.sx1788.cn/seller-api
# jwt 细节设定 # jwt 细节设定
jwt-setting: jwt-setting:
@ -243,7 +242,7 @@ lili:
data: data:
elasticsearch: elasticsearch:
cluster-name: elasticsearch cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9200 cluster-nodes: 106.124.130.167:9200
index: index:
number-of-replicas: 0 number-of-replicas: 0
number-of-shards: 3 number-of-shards: 3
@ -253,7 +252,7 @@ lili:
# username: elastic # username: elastic
# password: LiLiShopES # password: LiLiShopES
logstash: logstash:
server: 192.168.0.116:4560 server: 106.124.130.167:4560
rocketmq: rocketmq:
promotion-topic: lili_promotion_topic promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group promotion-group: lili_promotion_group
@ -274,7 +273,7 @@ lili:
after-sale-topic: lili_after_sale_topic after-sale-topic: lili_after_sale_topic
after-sale-group: lili_after_sale_group after-sale-group: lili_after_sale_group
rocketmq: rocketmq:
name-server: 127.0.0.1:9876 name-server: 106.124.130.167:9876
producer: producer:
group: lili_group group: lili_group
send-message-timeout: 30000 send-message-timeout: 30000

View File

@ -24,17 +24,40 @@ spring:
boot: boot:
admin: admin:
client: client:
<<<<<<< HEAD
url: http://127.0.0.1:8000
# mongodb
data:
mongodb:
host: 106.124.130.167
port: 27017
database: rx-shop
username: goboo
password: Gb84505016
authentication-database: admin
# replica-set-name: mongoreplset
=======
url: http://192.168.0.116:8000 url: http://192.168.0.116:8000
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
cache: cache:
type: redis type: redis
#amqp #amqp
# rabbitmq: # rabbitmq:
<<<<<<< HEAD
# host: 106.124.130.167
# Redis
redis:
host: 120.71.145.134
port: 6379
password: ekLhvPGraSj8DGO0
=======
# host: 192.168.0.116 # host: 192.168.0.116
# Redis # Redis
redis: redis:
host: 192.168.0.116 host: 192.168.0.116
port: 6379 port: 6379
password: lilishop password: lilishop
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
lettuce: lettuce:
pool: pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8 # 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -63,9 +86,15 @@ spring:
default-datasource: default-datasource:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver
<<<<<<< HEAD
url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: zyt_shop
password: Gb84505016@zytshop
=======
url: jdbc:mysql://192.168.0.116:3306/new-lili?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai url: jdbc:mysql://192.168.0.116:3306/new-lili?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root username: root
password: lilishop password: lilishop
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
maxActive: 20 maxActive: 20
initialSize: 5 initialSize: 5
maxWait: 60000 maxWait: 60000
@ -107,7 +136,11 @@ spring:
props: props:
#是否打印逻辑SQL语句和实际SQL语句建议调试时打印在生产环境关闭 #是否打印逻辑SQL语句和实际SQL语句建议调试时打印在生产环境关闭
sql: sql:
<<<<<<< HEAD
show: true
=======
show: false show: false
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
# 忽略鉴权url # 忽略鉴权url
ignored: ignored:
@ -133,8 +166,13 @@ ignored:
- /buyer/memberEvaluation/**/goodsEvaluation - /buyer/memberEvaluation/**/goodsEvaluation
- /buyer/memberEvaluation/**/evaluationNumber - /buyer/memberEvaluation/**/evaluationNumber
- /store/login/** - /store/login/**
<<<<<<< HEAD
- /manager/passport/user/login
- /manager/passport/user/refresh/**
=======
- /manager/user/login - /manager/user/login
- /manager/user/refresh/** - /manager/user/refresh/**
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
- /druid/** - /druid/**
- /swagger-ui.html - /swagger-ui.html
- /doc.html - /doc.html
@ -151,6 +189,16 @@ ignored:
# Swagger界面内容配置 # Swagger界面内容配置
swagger: swagger:
<<<<<<< HEAD
title: API接口文档
description: Api Documentation
version: 1.0.0
termsOfServiceUrl:
contact:
name: rx
url:
email:
=======
title: lili API接口文档 title: lili API接口文档
description: lili Api Documentation description: lili Api Documentation
version: 1.0.0 version: 1.0.0
@ -159,6 +207,7 @@ swagger:
name: lili name: lili
url: https://pickmall.cn url: https://pickmall.cn
email: admin@pickmall.com email: admin@pickmall.com
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
# Mybatis-plus # Mybatis-plus
mybatis-plus: mybatis-plus:
@ -176,6 +225,10 @@ logging:
cn.lili: info cn.lili: info
# org.hibernate: debug # org.hibernate: debug
# org.springframework: debug # org.springframework: debug
<<<<<<< HEAD
# org.springframework.data.mongodb.core: debug
=======
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
file: file:
# 指定路径 # 指定路径
path: lili-logs path: lili-logs
@ -190,7 +243,11 @@ jasypt:
lili: lili:
system: system:
<<<<<<< HEAD
isDemoSite: false
=======
isDemoSite: true isDemoSite: true
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
statistics: statistics:
# 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数 # 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数
onlineMember: 48 onlineMember: 48
@ -202,6 +259,18 @@ lili:
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6 sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
#域名 #域名
domain: domain:
<<<<<<< HEAD
pc: http://106.124.130.167:8885
wap: http://106.124.130.167:8885
seller: http://106.124.130.167:8885
admin: http://106.124.130.167:8885
#api地址
api:
buyer: https://z171l91606.51mypc.cn
base: http://106.124.130.167:8885
manager: http://106.124.130.167:8885
seller: http://106.124.130.167:8885
=======
pc: http://192.168.0.116:8888 pc: http://192.168.0.116:8888
wap: http://192.168.0.116:8888 wap: http://192.168.0.116:8888
seller: http://192.168.0.116:8888 seller: http://192.168.0.116:8888
@ -212,6 +281,7 @@ lili:
base: http://192.168.0.116:8888 base: http://192.168.0.116:8888
manager: http://192.168.0.116:8888 manager: http://192.168.0.116:8888
seller: http://192.168.0.116:8888 seller: http://192.168.0.116:8888
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
# jwt 细节设定 # jwt 细节设定
jwt-setting: jwt-setting:
@ -230,7 +300,11 @@ lili:
data: data:
elasticsearch: elasticsearch:
cluster-name: elasticsearch cluster-name: elasticsearch
<<<<<<< HEAD
cluster-nodes: 106.124.130.167:9200
=======
cluster-nodes: 192.168.0.116:9200 cluster-nodes: 192.168.0.116:9200
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
index: index:
number-of-replicas: 0 number-of-replicas: 0
number-of-shards: 3 number-of-shards: 3
@ -239,8 +313,12 @@ lili:
# account: # account:
# username: elastic # username: elastic
# password: LiLiShopES # password: LiLiShopES
<<<<<<< HEAD
=======
logstash: logstash:
server: 127.0.0.1:4560 server: 127.0.0.1:4560
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
rocketmq: rocketmq:
promotion-topic: lili_promotion_topic promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group promotion-group: lili_promotion_group
@ -259,7 +337,11 @@ lili:
notice-send-topic: lili_send_notice_topic notice-send-topic: lili_send_notice_topic
notice-send-group: lili_send_notice_group notice-send-group: lili_send_notice_group
rocketmq: rocketmq:
<<<<<<< HEAD
name-server: 106.124.130.167:9876
=======
name-server: 192.168.0.116:9876 name-server: 192.168.0.116:9876
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
producer: producer:
group: lili_group group: lili_group
send-message-timeout: 30000 send-message-timeout: 30000
@ -267,7 +349,11 @@ rocketmq:
xxl: xxl:
job: job:
admin: admin:
<<<<<<< HEAD
addresses: http://127.0.0.1:9001/xxl-job-admin
=======
addresses: http://192.168.0.116:9001/xxl-job-admin addresses: http://192.168.0.116:9001/xxl-job-admin
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
executor: executor:
appname: xxl-job-executor-lilishop appname: xxl-job-executor-lilishop
address: address:

View File

@ -1,43 +1,43 @@
package cn.lili.controller.common; package cn.lili.controller.common;
import cn.lili.cache.limit.annotation.LimitPoint; import cn.lili.cache.limit.annotation.LimitPoint;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.verification.entity.enums.VerificationEnums; import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.modules.verification.service.VerificationService; import cn.lili.modules.verification.service.VerificationService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
/** /**
* 滑块验证码接口 * 滑块验证码接口
* *
* @author Chopper * @author Chopper
* @since 2020/11/26 15:41 * @since 2020/11/26 15:41
*/ */
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/common/common/slider") @RequestMapping("/common/common/slider")
@Api(tags = "滑块验证码接口") @Api(tags = "滑块验证码接口")
public class SliderImageController { public class SliderImageController {
@Autowired @Autowired
private VerificationService verificationService; private VerificationService verificationService;
@LimitPoint(name = "slider_image", key = "verification") @LimitPoint(name = "slider_image", key = "verification")
@GetMapping("/{verificationEnums}") @GetMapping("/{verificationEnums}")
@ApiOperation(value = "获取校验接口,一分钟同一个ip请求10次") @ApiOperation(value = "获取校验接口,一分钟同一个ip请求10次")
public ResultMessage getSliderImage(@RequestHeader String uuid, @PathVariable VerificationEnums verificationEnums) { public ResultMessage getSliderImage(@RequestHeader String uuid, @PathVariable VerificationEnums verificationEnums) {
return ResultUtil.data(verificationService.createVerification(verificationEnums, uuid)); return ResultUtil.data(verificationService.createVerification(verificationEnums, uuid));
} }
@LimitPoint(name = "slider_image", key = "verification_pre_check", limit = 600) @LimitPoint(name = "slider_image", key = "verification_pre_check", limit = 600)
@PostMapping("/{verificationEnums}") @PostMapping("/{verificationEnums}")
@ApiOperation(value = "验证码预校验") @ApiOperation(value = "验证码预校验")
public ResultMessage verificationImage(Integer xPos, @RequestHeader String uuid, @PathVariable VerificationEnums verificationEnums) { public ResultMessage verificationImage(Integer xPos, @RequestHeader String uuid, @PathVariable VerificationEnums verificationEnums) {
return ResultUtil.data(verificationService.preCheck(xPos, uuid, verificationEnums)); return ResultUtil.data(verificationService.preCheck(xPos, uuid, verificationEnums));
} }
} }

View File

@ -1,48 +1,48 @@
package cn.lili.controller.common; package cn.lili.controller.common;
import cn.lili.cache.limit.annotation.LimitPoint; import cn.lili.cache.limit.annotation.LimitPoint;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.sms.SmsUtil; import cn.lili.modules.sms.SmsUtil;
import cn.lili.modules.verification.entity.enums.VerificationEnums; import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.modules.verification.service.VerificationService; import cn.lili.modules.verification.service.VerificationService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
/** /**
* 短信验证码接口 * 短信验证码接口
* *
* @author Chopper * @author Chopper
* @since 2020/11/26 15:41 * @since 2020/11/26 15:41
*/ */
@RestController @RestController
@Api(tags = "短信验证码接口") @Api(tags = "短信验证码接口")
@RequestMapping("/common/common/sms") @RequestMapping("/common/common/sms")
public class SmsController { public class SmsController {
@Autowired @Autowired
private SmsUtil smsUtil; private SmsUtil smsUtil;
@Autowired @Autowired
private VerificationService verificationService; private VerificationService verificationService;
@LimitPoint(name = "sms_send", key = "sms") @LimitPoint(name = "sms_send", key = "sms")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(paramType = "path", dataType = "String", name = "mobile", value = "手机号"), @ApiImplicitParam(paramType = "path", dataType = "String", name = "mobile", value = "手机号"),
@ApiImplicitParam(paramType = "header", dataType = "String", name = "uuid", value = "uuid"), @ApiImplicitParam(paramType = "header", dataType = "String", name = "uuid", value = "uuid"),
}) })
@GetMapping("/{verificationEnums}/{mobile}") @GetMapping("/{verificationEnums}/{mobile}")
@ApiOperation(value = "发送短信验证码,一分钟同一个ip请求1次") @ApiOperation(value = "发送短信验证码,一分钟同一个ip请求1次")
public ResultMessage getSmsCode( public ResultMessage getSmsCode(
@RequestHeader String uuid, @RequestHeader String uuid,
@PathVariable String mobile, @PathVariable String mobile,
@PathVariable VerificationEnums verificationEnums) { @PathVariable VerificationEnums verificationEnums) {
verificationService.check(uuid, verificationEnums); verificationService.check(uuid, verificationEnums);
smsUtil.sendSmsCode(mobile, verificationEnums, uuid); smsUtil.sendSmsCode(mobile, verificationEnums, uuid);
return ResultUtil.success(ResultCode.VERIFICATION_SEND_SUCCESS); return ResultUtil.success(ResultCode.VERIFICATION_SEND_SUCCESS);
} }
} }

View File

@ -12,7 +12,7 @@ import cn.lili.common.utils.Base64DecodeMultipartFile;
import cn.lili.common.utils.CommonUtil; import cn.lili.common.utils.CommonUtil;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.file.entity.File; import cn.lili.modules.file.entity.File;
import cn.lili.modules.file.plugin.FileManagerPlugin; import cn.lili.modules.file.plugin.QiNiuManagerPlugin;
import cn.lili.modules.file.service.FileService; import cn.lili.modules.file.service.FileService;
import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dos.Setting;
import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.entity.enums.SettingEnum;
@ -47,7 +47,7 @@ public class UploadController {
@Autowired @Autowired
private SettingService settingService; private SettingService settingService;
@Autowired @Autowired
private FileManagerPlugin fileManagerPlugin; private QiNiuManagerPlugin fileManagerPlugin;
@Autowired @Autowired
private Cache cache; private Cache cache;

View File

@ -1,6 +1,5 @@
server: server:
port: 8890 port: 8890
servlet: servlet:
context-path: / context-path: /
@ -33,9 +32,9 @@ spring:
type: redis type: redis
# Redis # Redis
redis: redis:
host: 127.0.0.1 host: 120.71.145.134
port: 6379 port: 6379
password: lilishop password: ekLhvPGraSj8DGO0
lettuce: lettuce:
pool: pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8 # 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -64,9 +63,9 @@ spring:
default-datasource: default-datasource:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: root username: zyt_shop
password: lilishop password: Gb84505016@zytshop
maxActive: 20 maxActive: 20
initialSize: 5 initialSize: 5
maxWait: 60000 maxWait: 60000
@ -137,8 +136,8 @@ ignored:
# Swagger界面内容配置 # Swagger界面内容配置
swagger: swagger:
title: lili API接口文档 title: API接口文档
description: lili Api Documentation description: Api Documentation
version: 1.0.0 version: 1.0.0
termsOfServiceUrl: https://pickmall.cn termsOfServiceUrl: https://pickmall.cn
contact: contact:
@ -191,17 +190,17 @@ lili:
#短信模版配置 #短信模版配置
sms: sms:
#登录 #登录
LOGIN: SMS_205755300 LOGIN: SMS_185821482
#注册 #注册
REGISTER: SMS_205755298 REGISTER: SMS_185821482
#找回密码 #找回密码
FIND_USER: SMS_205755301 FIND_USER: SMS_185821482
#设置密码 #设置密码
UPDATE_PASSWORD: SMS_205755297 UPDATE_PASSWORD: SMS_185821482
#支付密码 #支付密码
WALLET_PASSWORD: SMS_205755301 WALLET_PASSWORD: SMS_185821482
system: system:
isTestModel: true isTestModel: false
statistics: statistics:
# 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数 # 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数
onlineMember: 48 onlineMember: 48
@ -213,17 +212,16 @@ lili:
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6 sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
#域名 #域名
domain: domain:
pc: https://pc.b2b2c.pickmall.cn pc: https://zbuyer.sx1788.cn
wap: https://m.b2b2c.pickmall.cn wap: https://zshop.sx1788.cn
store: https://store.b2b2c.pickmall.cn store: https://zseller.sx1788.cn
admin: https://admin.b2b2c.pickmall.cn admin: https://zmanager.sx1788.cn
#api地址 #api地址
api: api:
buyer: https://buyer-api.pickmall.cn buyer: https://zshop-api.sx1788.cn/buyer-api
common: https://common-api.pickmall.cn common: https://zshop-api.sx1788.cn/common-api
manager: https://admin-api.pickmall.cn manager: https://zshop-api.sx1788.cn/manager-api
store: https://store-api.pickmall.cn store: https://zshop-api.sx1788.cn/seller-api
# jwt 细节设定 # jwt 细节设定
jwt-setting: jwt-setting:
# token过期时间分钟 # token过期时间分钟
@ -241,7 +239,7 @@ lili:
data: data:
elasticsearch: elasticsearch:
cluster-name: elasticsearch cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9200 cluster-nodes: 106.124.130.167:9200
index: index:
number-of-replicas: 0 number-of-replicas: 0
number-of-shards: 3 number-of-shards: 3
@ -251,7 +249,7 @@ lili:
# username: elastic # username: elastic
# password: LiLiShopES # password: LiLiShopES
logstash: logstash:
server: 127.0.0.1:4560 server: 106.124.130.167:4560
rocketmq: rocketmq:
promotion-topic: lili_promotion_topic promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group promotion-group: lili_promotion_group
@ -270,7 +268,7 @@ lili:
notice-send-topic: lili_send_notice_topic notice-send-topic: lili_send_notice_topic
notice-send-group: lili_send_notice_group notice-send-group: lili_send_notice_group
rocketmq: rocketmq:
name-server: 127.0.0.1:9876 name-server: 106.124.130.167:9876
producer: producer:
group: lili_group group: lili_group
send-message-timeout: 30000 send-message-timeout: 30000

View File

@ -24,23 +24,25 @@ spring:
boot: boot:
admin: admin:
client: client:
url: http://192.168.0.116:8000 url: http://127.0.0.1:8000
# mongodb # mongodb
data: data:
mongodb: mongodb:
uri: 192.168.0.116:27017 host: 106.124.130.167
database: lilishop port: 27017
username: root database: rx-shop
password: lilishop username: goboo
password: Gb84505016
authentication-database: admin authentication-database: admin
# replica-set-name: mongoreplset # replica-set-name: mongoreplset
cache: cache:
type: redis type: redis
# Redis # Redis
redis: redis:
host: 192.168.0.116 host: 120.71.145.134
port: 6379 port: 6379
password: lilishop password: ekLhvPGraSj8DGO0
lettuce: lettuce:
pool: pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8 # 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -69,9 +71,9 @@ spring:
default-datasource: default-datasource:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.0.116:3306/clerk?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: root username: zyt_shop
password: lilishop password: Gb84505016@zytshop
maxActive: 50 maxActive: 50
initialSize: 20 initialSize: 20
maxWait: 60000 maxWait: 60000
@ -166,15 +168,14 @@ ignored:
# Swagger界面内容配置 # Swagger界面内容配置
swagger: swagger:
title: lilishop API接口文档 title: API接口文档
description: lilishop Api Documentation description: Api Documentation
version: 4.2.2 version: 1.0.0
termsOfServiceUrl: https://pickmall.cn termsOfServiceUrl:
contact: contact:
name: lili name: rx
url: https://pickmall.cn url:
email: admin@pickmall.com email:
# Mybatis-plus # Mybatis-plus
mybatis-plus: mybatis-plus:
mapper-locations: classpath*:mapper/*.xml mapper-locations: classpath*:mapper/*.xml
@ -213,7 +214,7 @@ lili:
#图形验证码有效时间 秒 包含滑块验证码有效时间, 以及验证通过之后,缓存中存储的验证结果有效时间 #图形验证码有效时间 秒 包含滑块验证码有效时间, 以及验证通过之后,缓存中存储的验证结果有效时间
effectiveTime: 300 effectiveTime: 300
#水印 #水印
watermark: LILI-SHOP watermark:
#干扰项数量 最大2 默认0 #干扰项数量 最大2 默认0
interfereNum: 1 interfereNum: 1
#允许误差像素 #允许误差像素
@ -221,18 +222,18 @@ lili:
#短信模版配置 #短信模版配置
sms: sms:
#登录 #登录
LOGIN: SMS_205755300 LOGIN: SMS_185821482
#注册 #注册
REGISTER: SMS_205755298 REGISTER: SMS_185821482
#找回密码 #找回密码
FIND_USER: SMS_205755301 FIND_USER: SMS_185821482
#设置密码 #设置密码
UPDATE_PASSWORD: SMS_205755297 UPDATE_PASSWORD: SMS_185821482
#支付密码 #支付密码
WALLET_PASSWORD: SMS_205755301 WALLET_PASSWORD: SMS_185821482
system: system:
isDemoSite: false isDemoSite: false
isTestModel: true isTestModel: false
# 脱敏级别: # 脱敏级别:
# 0不做脱敏处理 # 0不做脱敏处理
# 1管理端用户手机号等信息脱敏 # 1管理端用户手机号等信息脱敏
@ -250,17 +251,16 @@ lili:
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6 sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
#域名 #域名
domain: domain:
pc: http://192.168.0.116:8888 pc: http://106.124.130.167:8885
wap: http://192.168.0.116:8888 wap: http://106.124.130.167:8885
seller: http://192.168.0.116:8888 seller: http://106.124.130.167:8885
admin: http://192.168.0.116:8888 admin: http://106.124.130.167:8885
#api地址 #api地址
api: api:
buyer: https://z171l91606.51mypc.cn buyer: https://z171l91606.51mypc.cn
base: http://192.168.0.116:8888 base: http://106.124.130.167:8885
manager: http://192.168.0.116:8888 manager: http://106.124.130.167:8885
seller: http://192.168.0.116:8888 seller: http://106.124.130.167:8885
# jwt 细节设定 # jwt 细节设定
jwt-setting: jwt-setting:
# token过期时间分钟 # token过期时间分钟
@ -278,7 +278,7 @@ lili:
data: data:
elasticsearch: elasticsearch:
cluster-name: elasticsearch cluster-name: elasticsearch
cluster-nodes: 192.168.0.116:9200 cluster-nodes: 106.124.130.167:9200
index: index:
number-of-replicas: 0 number-of-replicas: 0
number-of-shards: 3 number-of-shards: 3
@ -289,7 +289,7 @@ lili:
# password: LiLiShopES # password: LiLiShopES
logstash: logstash:
server: 192.168.0.116:4560 server: 106.124.130.167:4560
rocketmq: rocketmq:
promotion-topic: lili_promotion_topic promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group promotion-group: lili_promotion_group
@ -310,7 +310,7 @@ lili:
after-sale-topic: lili_after_sale_topic after-sale-topic: lili_after_sale_topic
after-sale-group: lili_after_sale_group after-sale-group: lili_after_sale_group
rocketmq: rocketmq:
name-server: 192.168.0.116:9876 name-server: 106.124.130.167:9876
isVIPChannel: false isVIPChannel: false
producer: producer:
group: lili_group group: lili_group
@ -319,7 +319,7 @@ rocketmq:
xxl: xxl:
job: job:
admin: admin:
addresses: http://192.168.0.116:9001/xxl-job-admin addresses: http://127.0.0.1:9001/xxl-job-admin
executor: executor:
appname: xxl-job-executor-lilishop appname: xxl-job-executor-lilishop
address: address:

View File

@ -1,6 +1,5 @@
server: server:
port: 8886 port: 8886
servlet: servlet:
context-path: / context-path: /
@ -36,9 +35,9 @@ spring:
type: redis type: redis
# Redis # Redis
redis: redis:
host: 127.0.0.1 host: 120.71.145.134
port: 6379 port: 6379
password: lilishop password: ekLhvPGraSj8DGO0
lettuce: lettuce:
pool: pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8 # 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -67,9 +66,9 @@ spring:
default-datasource: default-datasource:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: root username: zyt_shop
password: lilishop password: Gb84505016@zytshop
maxActive: 20 maxActive: 20
initialSize: 5 initialSize: 5
maxWait: 60000 maxWait: 60000
@ -138,8 +137,8 @@ ignored:
- /buyer/memberEvaluation/**/goodsEvaluation - /buyer/memberEvaluation/**/goodsEvaluation
- /buyer/memberEvaluation/**/evaluationNumber - /buyer/memberEvaluation/**/evaluationNumber
- /store/login/** - /store/login/**
- /manager/user/login - /manager/passport/user/login
- /manager/user/refresh/** - /manager/passport/user/refresh/**
- /druid/** - /druid/**
- /swagger-ui.html - /swagger-ui.html
- /doc.html - /doc.html
@ -156,8 +155,8 @@ ignored:
# Swagger界面内容配置 # Swagger界面内容配置
swagger: swagger:
title: lili API接口文档 title: API接口文档
description: lili Api Documentation description: Api Documentation
version: 1.0.0 version: 1.0.0
termsOfServiceUrl: https://pickmall.cn termsOfServiceUrl: https://pickmall.cn
contact: contact:
@ -198,7 +197,7 @@ jasypt:
lili: lili:
system: system:
isDemoSite: true isDemoSite: false
statistics: statistics:
# 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数 # 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数
onlineMember: 48 onlineMember: 48
@ -210,17 +209,16 @@ lili:
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6 sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
#域名 #域名
domain: domain:
pc: https://pc.b2b2c.pickmall.cn pc: https://zbuyer.sx1788.cn
wap: https://m.b2b2c.pickmall.cn wap: https://zshop.sx1788.cn
store: https://store.b2b2c.pickmall.cn store: https://zseller.sx1788.cn
admin: https://admin.b2b2c.pickmall.cn admin: https://zmanager.sx1788.cn
#api地址 #api地址
api: api:
buyer: https://buyer-api.pickmall.cn buyer: https://zshop-api.sx1788.cn/buyer-api
common: https://common-api.pickmall.cn common: https://zshop-api.sx1788.cn/common-api
manager: https://admin-api.pickmall.cn manager: https://zshop-api.sx1788.cn/manager-api
store: https://store-api.pickmall.cn store: https://zshop-api.sx1788.cn/seller-api
# jwt 细节设定 # jwt 细节设定
jwt-setting: jwt-setting:
# token过期时间分钟 # token过期时间分钟
@ -238,7 +236,7 @@ lili:
data: data:
elasticsearch: elasticsearch:
cluster-name: elasticsearch cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9200 cluster-nodes: 106.124.130.167:9200
index: index:
number-of-replicas: 0 number-of-replicas: 0
number-of-shards: 3 number-of-shards: 3
@ -248,7 +246,7 @@ lili:
# username: elastic # username: elastic
# password: LiLiShopES # password: LiLiShopES
logstash: logstash:
server: 127.0.0.1:4560 server: 106.124.130.167:4560
rocketmq: rocketmq:
promotion-topic: lili_promotion_topic promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group promotion-group: lili_promotion_group
@ -269,7 +267,7 @@ lili:
after-sale-topic: lili_after_sale_topic after-sale-topic: lili_after_sale_topic
after-sale-group: lili_after_sale_group after-sale-group: lili_after_sale_group
rocketmq: rocketmq:
name-server: 127.0.0.1:9876 name-server: 106.124.130.167:9876
producer: producer:
group: lili_group group: lili_group
send-message-timeout: 30000 send-message-timeout: 30000

View File

@ -15,6 +15,15 @@
<packaging>jar</packaging> <packaging>jar</packaging>
<dependencies> <dependencies>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.4.0</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId> <artifactId>spring-boot-properties-migrator</artifactId>

View File

@ -0,0 +1,30 @@
package cn.lili.common.fulu.core;
/**
* @Auther: chenYing
* @Date: 2019/8/26 0026 15:08
*/
public interface MethodConst {
//卡密下单接口method方法
String OPEN_API_CARD_ORDER_ADD = "fulu.order.card.add";
// 根据话费查询归属地和城市编码面值城市等信息
String OPEN_API_CHECK_PHONE = "fulu.mobile.info.get";
// 直充下单接口method方法
String OPEN_API_DIRECT_ORDER_ADD = "fulu.order.direct.add";
// 获取商品信息接口method方法
String OPEN_API_GOODS_GET = "fulu.goods.info.get";
// 获取商品模板信息接口method方法
String OPEN_API_GOODS_TEMPLATE_GET = "fulu.goods.template.get";
// 查单接口method方法
String OPEN_API_ORDER_GET = "fulu.order.info.get";
// 话费下单接口method方法
String OPEN_API_PHONE_ORDER_ADD = "fulu.order.mobile.add";
// 流量下单接口method方法
String OPEN_API_TRAFFIC_ORDER_ADD = "fulu.order.data.add";
// 获取用户信息接口method方法
String OPEN_API_USER_INFO_GET = "fulu.user.info.get";
//获取商品列表method方法
String OPEN_API_GOODS_LIST = "fulu.goods.list.get";
}

View File

@ -0,0 +1,58 @@
package cn.lili.common.fulu.core.http;
import cn.lili.common.fulu.core.utils.HttpUtil;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:16
*/
public class FuluClient implements IFuluClient {
private static volatile ExecutorService executor;
private String url;
public FuluClient() {
this.url = "http://openapi.fulu.com/api/getway";
}
public FuluClient(String url) {
this.url = url;
}
/**
* 创建线程池
*/
private static void createThreadPool() {
if (executor == null) {
synchronized (FuluClient.class) {
if (executor == null) {
executor = Executors.newCachedThreadPool();
}
}
}
}
@Override
public String send(final String postData) {
String result = HttpUtil.sendPostJson(this.url, postData);
return result;
}
@Override
public Future<String> sendAsync(final String postData) {
createThreadPool();
return executor.submit(new Callable<String>() {
@Override
public String call() throws Exception {
String result = HttpUtil.sendPostJson(url, postData);
return result;
}
});
}
}

View File

@ -0,0 +1,27 @@
package cn.lili.common.fulu.core.http;
import java.util.concurrent.Future;
/**
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:15
*/
public interface IFuluClient {
/**
* 同步请求openapi2.0
*
* @param postData
* @return String
*/
String send(final String postData);
/**
* 异步请求openapi2.0
*
* @param postData
* @return Future<String>
*/
Future<String> sendAsync(final String postData);
}

View File

@ -0,0 +1,47 @@
package cn.lili.common.fulu.core.utils;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.Security;
/**
* @Auther: chenYing
* @Date: 2019/8/27 0027 17:38
*/
public class CardUtil {
private static final String ALGORITHM = "AES/ECB/PKCS7Padding";
private CardUtil() {
}
public static String cardDecode(String str, byte[] key) {
byte[] bytes = org.apache.commons.codec.binary.Base64.decodeBase64(str);
String result = null;
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Cipher cipher = Cipher.getInstance(ALGORITHM, "BC");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decoded = cipher.doFinal(bytes);
result = new String(decoded, "UTF-8");
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
return result;
}
public static String cardEncode(String str, byte[] key) {
byte[] result = null;
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Cipher cipher = Cipher.getInstance(ALGORITHM, "BC");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
result = cipher.doFinal(str.getBytes("UTF-8"));
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
return new String(org.apache.commons.codec.binary.Base64.encodeBase64(result));
}
}

View File

@ -0,0 +1,19 @@
package cn.lili.common.fulu.core.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Auther: chenYing
* @Date: 2019/8/19 0019 15:17
*/
public class DateFormatUtil {
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
private DateFormatUtil() {
}
public static String currentDateTime() {
return new SimpleDateFormat(DATE_FORMAT).format(new Date());
}
}

View File

@ -0,0 +1,206 @@
package cn.lili.common.fulu.core.utils;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;
import java.util.*;
/**
* @author cheny
*/
public class HttpUtil {
private static Logger log = LoggerFactory.getLogger(HttpUtil.class);
public final static int CONNECT_TIMEOUT = 10000;
public final static int READ_TIMEOUT = 10000;
private static final String ENCODING_GBK = "GBK";
/**
* POST请求json字符串形式数据
*
* @param url 请求地址
* @param param 请求的json数据
* @return response body
* @throws Exception
*/
public static String sendPostJson(String url, String param) {
return sendPostWithHeads(url, param, "application/json", null);
}
private static String sendPostWithHeads(String url, String param, String contentType, Map<String, String> heads) {
PrintWriter out = null;
BufferedReader in = null;
StringBuilder result = new StringBuilder();
HttpURLConnection conn = null;
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
conn = (HttpURLConnection) realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestMethod("POST");// 提交模式
conn.setConnectTimeout(CONNECT_TIMEOUT);// 连接超时 单位毫秒
conn.setReadTimeout(READ_TIMEOUT);// 读取超时 单位毫秒
if (contentType != null && !contentType.isEmpty()) {
conn.setRequestProperty("Content-Type", contentType);
}
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");
// 添加头信息
if (heads != null && !heads.isEmpty()) {
for (String key : heads.keySet()) {
conn.setRequestProperty(key, heads.get(key));
}
}
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("send POST request exception :" + e.getMessage(), e);
} finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
if (conn != null) {
conn.disconnect();
}
} catch (Exception e2) {
throw new RuntimeException("close Connection exception :" + e2.getMessage(), e2);
}
}
return result.toString();
}
/**
* POST请求String字符串形式数据
*
* @param url
* @param paramXmlStr
* @return
*/
public static String sendPostXmlStr(String url, String paramXmlStr) {
String tmpparamXmlStr = "";
try {
tmpparamXmlStr = URLEncoder.encode(paramXmlStr, ENCODING_GBK);
tmpparamXmlStr = sendPostWithHeads(url, tmpparamXmlStr, "application/xml", null);
tmpparamXmlStr = URLDecoder.decode(tmpparamXmlStr,ENCODING_GBK);
}catch (Exception e){
e.printStackTrace();
log.error("post请求URL数据转码报错{}", e.getMessage());
}
return tmpparamXmlStr;
}
/**
* POST请求String字符串形式数据
*
* @param url
* @param paramXmlStr
* @return
*/
public static String sendPostXmlUrlencode(String url, String paramXmlStr) {
String tmpparamXmlStr = "";
Map<String, String> rspMap = new LinkedHashMap<>();
rspMap.put("req", paramXmlStr);
try {
tmpparamXmlStr = URLEncoder.encode(paramXmlStr, ENCODING_GBK);
tmpparamXmlStr = doPostMapParams(url, rspMap);
tmpparamXmlStr = URLDecoder.decode(tmpparamXmlStr,ENCODING_GBK);
}catch (Exception e){
e.printStackTrace();
log.error("post请求URL数据转码报错{}", e.getMessage());
}
return tmpparamXmlStr;
}
/**
* 发送POST请求
* @param url String对象为 目的地址
* @param parameters 请求参数Map类型
* @return 远程响应结果
*/
public static String doPostMapParams(String url, Map<String, String> parameters) {
BufferedReader in = null;
try {
// 定义HttpClient
HttpClient client = new DefaultHttpClient();
// 实例化HTTP方法
HttpPost request = new HttpPost();
request.setURI(new URI(url));
//设置参数
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
for (Iterator iter = parameters.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String value = String.valueOf(parameters.get(name));
nvps.add(new BasicNameValuePair(name, value));
}
request.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
HttpResponse response = client.execute(request);
int code = response.getStatusLine().getStatusCode();
if(code == 200){ //请求成功
in = new BufferedReader(new InputStreamReader(response.getEntity()
.getContent(),"UTF-8"));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
sb.append(line + NL);
}
in.close();
return sb.toString();
}else{
System.out.println("状态码:" + code);
return null;
}
}
catch(Exception e) {
e.printStackTrace();
return null;
}
}
}

View File

@ -0,0 +1,41 @@
package cn.lili.common.fulu.core.utils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class JSONUtil {
private static Gson gson = new Gson();
/**
* JSON 字符串转为 Java 对象
*/
public static <T> T fromJSON(String json, Class<T> type) {
T obj;
try {
obj = gson.fromJson(json, type);
} catch (Exception e) {
throw new RuntimeException(e);
}
return obj;
}
/**
* json字符串转list或者map
*/
public static <T> T fromJSON(String json, TypeToken<T> typeToken) {
return gson.fromJson(json, typeToken.getType());
}
/**
* Java 对象转为 JSON 字符串
*/
public static <T> String toJSON(T obj) {
String jsonStr;
try {
jsonStr = gson.toJson(obj);
} catch (Exception e) {
throw new RuntimeException(e);
}
return jsonStr;
}
}

View File

@ -0,0 +1,342 @@
package cn.lili.common.fulu.core.utils;
import cn.lili.common.fulu.core.MethodConst;
import cn.lili.common.fulu.model.*;
import cn.lili.common.fulu.sdk.DefaultOpenApiClient;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import com.alibaba.fastjson.JSON;
import com.google.gson.reflect.TypeToken;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
import java.util.concurrent.*;
public class Test {
private final static String APP_KEY = "lzHi7ewuTkplx2ePX0eQzN65TIFRk1zFClcoj1Jim/MHmu0X7ZqxMtSLENhvr1xD";
private final static Logger LOGGER = LoggerFactory.getLogger(Test.class);
private final static String SYS_SECRET = "9da68b0f8bcb470e84c3d30e343727e2";
private final static String URL = "http://openapi.fulu.com/api/getway";
// private final static String APP_KEY = "i4esv1l+76l/7NQCL3QudG90Fq+YgVfFGJAWgT+7qO1Bm9o/adG/1iwO2qXsAXNB";
// private final static Logger LOGGER = LoggerFactory.getLogger(Test.class);
// private final static String SYS_SECRET = "0a091b3aa4324435aab703142518a8f7";
// private final static String URL = "http://pre.openapi.fulu.com/api/getway";
private static String repeat(String ch, int num) {
StringBuilder str = new StringBuilder();
for (int i = 0; i < num; i++) {
str.append(ch);
}
return str.toString();
}
private static void waitFor(Future<String> future) throws Exception {
while (!future.isDone()) {
TimeUnit.MILLISECONDS.sleep(500);
}
LOGGER.info("excuteAsync\n{}", future.get());
}
/**
* 卡密下单
*
* @throws Exception
*/
public static void cardOrderAddTest(FuLuConfigureDTO fuLuConfigureDTO, Integer productId, Integer buyNum,String orderSn) throws Exception {
LOGGER.info("\n卡密下单{}", repeat("=", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_CARD_ORDER_ADD);
InputCardOrderDto dto = new InputCardOrderDto();
dto.setProductId(productId);
dto.setCustomerOrderNo(orderSn);
dto.setBuyNum(buyNum);
client.setBizObject(dto);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
dto.setCustomerOrderNo(UUID.randomUUID().toString());
waitFor(client.excuteAsync());
}
/**
* 直充下单
*
* @throws Exception
*/
public static void directOrderAddTest(FuLuConfigureDTO fuLuConfigureDTO, Integer productId, Integer buyNum,String qrCode,String orderSn) throws Exception {
LOGGER.info("\n直充下单{}", repeat("=", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_DIRECT_ORDER_ADD);
InputDirectOrderDto dto = new InputDirectOrderDto();
dto.setProductId(productId);
dto.setBuyNum(buyNum);
client.setBizObject(dto);
int count = 1;
for (String chargeAccount : Arrays.asList(qrCode)) {
dto.setChargeAccount(chargeAccount);
dto.setCustomerOrderNo(orderSn);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
if (count++ >= 3) {
waitFor(client.excuteAsync());
} else {
LOGGER.info("excuteAsync\n{}\n{}", client.excuteAsync().get(), repeat("-", 100));
}
}
}
/**
* 手机号归属地
*
* @throws Exception
*/
public void matchPhoneProducGetTest(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n手机号归属地{}", repeat("=", 100));
DefaultOpenApiClient client = new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_CHECK_PHONE);
InputMatchPhoneProductListDto dto = new InputMatchPhoneProductListDto();
dto.setFaceValue(50D);
int count = 1;
for (String phone : Arrays.asList("15972368779", "13971553804")) {
dto.setPhone(phone);
client.setBizObject(dto);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
if (count++ >= 2) {
waitFor(client.excuteAsync());
} else {
LOGGER.info("excuteAsync\n{}\n{}", client.excuteAsync().get(), repeat("-", 100));
}
}
}
/**
* 订单查单
*
* @throws Exception
*/
public void orderInfoGetTest(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n订单查单{}", repeat("=", 100));
DefaultOpenApiClient client = new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_ORDER_GET);
InputOrderGetDto dto = new InputOrderGetDto();
client.setBizObject(dto);
int count = 1;
for (String customerOrderNo : Arrays
.asList("0d19f8e4-5af3-490d-a8d8-47fd457da7de", "31b6b96b-a21e-4bc4-bc0c-6e77a2ffb698")) {
dto.setCustomerOrderNo(customerOrderNo);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
if (count++ >= 2) {
Future<String> future = client.excuteAsync();
waitFor(future);
Map<String, String> result = JSONUtil.fromJSON(future.get(), new TypeToken<Map>() {
});
Map<String, Object> resultMap = JSONUtil.fromJSON(result.get("result"), new TypeToken<Map<String, Object>>() {
});
List<Map<String, String>> cardList = (List<Map<String, String>>) resultMap.get("cards");
StringBuilder decodeStr = new StringBuilder();
for (Map<String, String> map : cardList) {
decodeStr.append("card_number").append(map.get("card_number")).append("desc_card_number")
.append(CardUtil.cardDecode(map.get("card_number"), SYS_SECRET.getBytes("UTF-8")));
decodeStr.append(" card_pwd").append(map.get("card_pwd")).append("card_pwd")
.append(CardUtil.cardDecode(map.get("card_pwd"), SYS_SECRET.getBytes("UTF-8")));
decodeStr.append("\n");
}
System.out.println(decodeStr.toString());
System.out.println(CardUtil.cardEncode("CD10002502019061217430016421", SYS_SECRET.getBytes("UTF-8")));
} else {
LOGGER.info("excuteAsync\n{}\n{}", client.excuteAsync().get(), repeat("-", 100));
}
}
}
/**
* 话费下单
*
* @throws Exception
*/
public void phoneOrderAddTest(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n话费下单{}", repeat("=", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_PHONE_ORDER_ADD);
InputPhoneOrderDto dto = new InputPhoneOrderDto();
dto.setChargeValue(Double.valueOf(50));
int count = 1;
for (String chargePhone : Arrays.asList("15972368779", "13971553804")) {
dto.setCustomerOrderNo(UUID.randomUUID().toString());
dto.setChargePhone(chargePhone);
client.setBizObject(dto);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
dto.setCustomerOrderNo(UUID.randomUUID().toString());
if (count++ >= 2) {
waitFor(client.excuteAsync());
} else {
LOGGER.info("excuteAsync\n{}\n{}", client.excuteAsync().get(), repeat("-", 100));
}
}
}
/**
* 获得商品信息
*
* @throws Exception
*/
public static Map<String, Object> productInfoGetTest(FuLuConfigureDTO fuLuConfigureDTO,String productIdS) throws Exception {
LOGGER.info("\n获得商品信息{}", repeat("=", 100));
DefaultOpenApiClient client = new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_GOODS_GET);
InputProductDto dto = new InputProductDto();
int count = 1;
Map<String, Object> maps = new HashMap();
for (String productId : Arrays.asList(productIdS)) {
dto.setProductId(productId);
client.setBizObject(dto);
maps = (Map) JSON.parse(client.excute());
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
if (count++ >= 10) {
waitFor(client.excuteAsync());
} else {
LOGGER.info("excuteAsync\n{}\n{}", client.excuteAsync().get(), repeat("-", 100));
}
}
return maps;
}
/**
* 获得商品模板信息
*
* @throws Exception
*/
public void productTemplateGetTest(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n获得商品模板信息{}", repeat("=", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_GOODS_TEMPLATE_GET);
InputProductTemplateDto dto = new InputProductTemplateDto();
dto.setTemplateId("e1dac0ea-dc86-4c9d-a778-c9e19203ecb8");
client.setBizObject(dto);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
waitFor(client.excuteAsync());
}
/**
* 流量下单
*
* @throws Exception
*/
public void trafficOrderAddTest(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n流量下单{}", repeat("=", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_TRAFFIC_ORDER_ADD);
InputTrafficOrderDto dto = new InputTrafficOrderDto();
dto.setChargeValue(Double.valueOf(1024));
dto.setPacketKind(4);
int count = 1;
for (String chargePhone : Arrays.asList("15972368779", "13971553804")) {
client.setBizObject(dto);
dto.setChargePhone(chargePhone);
dto.setCustomerOrderNo(UUID.randomUUID().toString());
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
dto.setCustomerOrderNo(UUID.randomUUID().toString());
if (count++ >= 2) {
waitFor(client.excuteAsync());
} else {
LOGGER.info("excuteAsync\n{}\n{}", client.excuteAsync().get(), repeat("-", 100));
}
}
}
/**
* 用户信息
*
* @throws Exception
*/
public static void userInfoGetTest(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n用户信息{}", repeat("=", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_USER_INFO_GET);
InputUserDto dto = new InputUserDto();
client.setBizObject(dto);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
waitFor(client.excuteAsync());
}
/**
* 用户信息高并发场景
*
* @throws Exception
*/
public static void userInfoGetTest2(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n用户信息高并发场景{}", repeat("=", 100));
Executor executor = Executors.newCachedThreadPool();
final int count = 10;
final CountDownLatch downLatch = new CountDownLatch(count);
for (int i = 0; i < count; ++i) {
executor.execute(new Runnable() {
@Override
public void run() {
try {
String name = Thread.currentThread().getName();
LOGGER.info("\n线程名{}{}", name, repeat("+", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_USER_INFO_GET);
InputUserDto dto = new InputUserDto();
client.setBizObject(dto);
LOGGER.info("\n线程名{}\n{}\n{}", name, client.excute(), repeat("+", 100));
waitFor(client.excuteAsync());
} catch (Exception ex) {
LOGGER.error(ex.getMessage(), ex);
} finally {
downLatch.countDown();
}
}
});
}
downLatch.await();
}
/* 获得商品信息列表
*
* @throws Exception
*/
public static String getGoodsInfoList(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n获得商品信息{}", repeat("=", 100));
DefaultOpenApiClient client = new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_GOODS_LIST);
InputProductDto dto = new InputProductDto();
client.setBizObject(dto);
return client.excute().toString();
}
public static void main(String[] args) {
try {
// productInfoGetTest();
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,159 @@
package cn.lili.common.fulu.model;
import cn.lili.common.fulu.core.utils.DateFormatUtil;
import cn.lili.common.fulu.core.utils.JSONUtil;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* @Auther: chenYing
* @Date: 2019/8/19 0019 10:49
*/
public class CommonRequest implements Serializable {
private static final long serialVersionUID = 2L;
@SerializedName(value = "app_auth_token")
private String appAuthToken = "";
@SerializedName(value = "app_key")
private String appKey;
@SerializedName(value = "biz_content")
private String bizContent = "{}";
private transient Map<String, Object> bizContentMap = Collections.emptyMap();
private String charset;
private String format;
private String method;
private String sign;
@SerializedName(value = "sign_type")
private String signType;
private String timestamp;
private String version;
public CommonRequest() {
format = "json";
version = "2.0";
charset = "utf-8";
signType = "md5";
// timestamp = "2019-08-20 13:59:38";
timestamp = DateFormatUtil.currentDateTime();
}
public String getAppAuthToken() {
return appAuthToken;
}
public void setAppAuthToken(String appAuthToken) {
this.appAuthToken = appAuthToken;
}
public String getAppKey() {
return appKey;
}
public void setAppKey(String appKey) {
this.appKey = appKey;
}
public String getBizContent() {
if (!bizContentMap.isEmpty()) {
bizContent = JSONUtil.toJSON(bizContentMap);
}
return bizContent;
}
/**
* 直接将变量以json格式保存
*
* @param bizContent bizContent
*/
public void setBizContent(String bizContent) {
if (bizContent != null && !"".equals(bizContent.trim())) {
Map<String, Object> dataMap = JSONUtil.fromJSON(bizContent, new TypeToken<Map<String, Object>>() {
});
if (bizContentMap.isEmpty()) {
bizContentMap = new HashMap<String, Object>();
}
bizContentMap.putAll(dataMap);
}
}
public String getCharset() {
return charset;
}
public void setCharset(String charset) {
this.charset = charset;
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getSignType() {
return signType;
}
public void setSignType(String signType) {
this.signType = signType;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
/**
* 以key:value形式保存程序会转换为json格式
*
* @param key key
* @param value value
*/
public void setBizContent(String key, Object value) {
if (bizContentMap.isEmpty()) {
bizContentMap = new HashMap<String, Object>();
}
bizContentMap.put(key, value);
}
protected Object getBizContentValue(String key) {
return bizContentMap.get(key);
}
}

View File

@ -0,0 +1,56 @@
package cn.lili.common.fulu.model;
/**
* 卡密订单input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 15:35
*/
public class InputCardOrderDto extends CommonRequest {
public InputCardOrderDto() {
super();
setMethod("fulu.order.card.add");
}
/**
* 购买数量
*
* @return Integer
*/
public Integer getBuyNum() {
Object value = getBizContentValue("buy_num");
return value != null ? Integer.valueOf(value.toString()) : null;
}
public void setBuyNum(Integer buyNum) {
setBizContent("buy_num", buyNum);
}
/**
* 外部订单号
*
* @return String
*/
public String getCustomerOrderNo() {
Object value = getBizContentValue("customer_order_no");
return value != null ? String.valueOf(value) : null;
}
public void setCustomerOrderNo(String customerOrderNo) {
setBizContent("customer_order_no", customerOrderNo);
}
/**
* 商品编号
*
* @return Integer
*/
public Integer getProductId() {
Object value = getBizContentValue("product_id");
return value != null ? Integer.valueOf(value.toString()) : null;
}
public void setProductId(Integer productId) {
setBizContent("product_id", productId);
}
}

View File

@ -0,0 +1,213 @@
package cn.lili.common.fulu.model;
/**
* 直充商品订单input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 15:39
*/
public class InputDirectOrderDto extends CommonRequest {
public InputDirectOrderDto() {
super();
setMethod("fulu.order.direct.add");
}
/**
* 购买数量
*
* @return Integer
*/
public Integer getBuyNum() {
Object value = getBizContentValue("buy_num");
return value != null ? Integer.valueOf(value.toString()) : null;
}
public void setBuyNum(Integer buyNum) {
setBizContent("buy_num", buyNum);
}
/**
* 充值账号
*
* @return String
*/
public String getChargeAccount() {
Object value = getBizContentValue("charge_account");
return value != null ? String.valueOf(value) : null;
}
public void setChargeAccount(String chargeAccount) {
setBizContent("charge_account", chargeAccount);
}
/**
* 充值游戏名称
*
* @return String
*/
public String getChargeGameName() {
Object value = getBizContentValue("charge_game_name");
return value != null ? String.valueOf(value) : null;
}
public void setChargeGameName(String chargeGameName) {
setBizContent("charge_game_name", chargeGameName);
}
/**
* 充值游戏区
*
* @return String
*/
public String getChargeGameRegion() {
Object value = getBizContentValue("charge_game_region");
return value != null ? String.valueOf(value) : null;
}
public void setChargeGameRegion(String chargeGameRegion) {
setBizContent("charge_game_region", chargeGameRegion);
}
/**
* 充值游戏角色
*
* @return String
*/
public String getChargeGameRole() {
Object value = getBizContentValue("charge_game_role");
return value != null ? String.valueOf(value) : null;
}
public void setChargeGameRole(String chargeGameRole) {
setBizContent("charge_game_role", chargeGameRole);
}
/**
* 充值游戏服
*
* @return String
*/
public String getChargeGameSrv() {
Object value = getBizContentValue("charge_game_srv");
return value != null ? String.valueOf(value) : null;
}
public void setChargeGameSrv(String chargeGameSrv) {
setBizContent("charge_game_srv", chargeGameSrv);
}
/**
* 下单真实Ip区域商品要传
*
* @return String
*/
public String getChargeIp() {
Object value = getBizContentValue("charge_ip");
return value != null ? String.valueOf(value) : null;
}
public void setChargeIp(String chargeIp) {
setBizContent("charge_ip", chargeIp);
}
/**
* 充值密码部分游戏类要传
*
* @return String
*/
public String getChargePassword() {
Object value = getBizContentValue("charge_password");
return value != null ? String.valueOf(value) : null;
}
public void setChargePassword(String chargePassword) {
setBizContent("charge_password", chargePassword);
}
/**
* 充值类型
*
* @return String
*/
public String getChargeType() {
Object value = getBizContentValue("charge_type");
return value != null ? String.valueOf(value) : null;
}
public void setChargeType(String chargeType) {
setBizContent("charge_type", chargeType);
}
/**
* 联系QQ
*
* @return String
*/
public String getContactQq() {
Object value = getBizContentValue("contact_qq");
return value != null ? String.valueOf(value) : null;
}
public void setContactQq(String contactQq) {
setBizContent("contact_qq", contactQq);
}
/**
* 联系电话
*
* @return String
*/
public String getContactTel() {
Object value = getBizContentValue("contact_tel");
return value != null ? String.valueOf(value) : null;
}
public void setContactTel(String contactTel) {
setBizContent("contact_tel", contactTel);
}
/**
* 外部订单号
*
* @return String
*/
public String getCustomerOrderNo() {
Object value = getBizContentValue("customer_order_no");
return value != null ? String.valueOf(value) : null;
}
public void setCustomerOrderNo(String customerOrderNo) {
setBizContent("customer_order_no", customerOrderNo);
}
/**
* 商品编号
*
* @return Integer
*/
public Integer getProductId() {
Object value = getBizContentValue("product_id");
return value != null ? Integer.valueOf(value.toString()) : null;
}
public void setProductId(Integer productId) {
setBizContent("product_id", productId);
}
/**
* 剩余数量
*
* @return Integer
*/
public Integer getRemainingNumber() {
Object value = getBizContentValue("remaining_number");
return value != null ? Integer.valueOf(value.toString()) : null;
}
public void setRemainingNumber(Integer remainingNumber) {
setBizContent("remaining_number", remainingNumber);
}
}

View File

@ -0,0 +1,44 @@
package cn.lili.common.fulu.model;
/**
* 手机号归属地input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:08
*/
public class InputMatchPhoneProductListDto extends CommonRequest {
public InputMatchPhoneProductListDto() {
super();
setMethod("fulu.mobile.info.get");
}
/**
* 面值
*
* @return Double
*/
public Double getFaceValue() {
Object value = getBizContentValue("face_value");
return value != null ? Double.valueOf(value.toString()) : null;
}
public void setFaceValue(Double faceValue) {
setBizContent("face_value", faceValue);
}
/**
* 手机号
*
* @return String
*/
public String getPhone() {
Object value = getBizContentValue("phone");
return value != null ? String.valueOf(value) : null;
}
public void setPhone(String phone) {
setBizContent("phone", phone);
}
}

View File

@ -0,0 +1,31 @@
package cn.lili.common.fulu.model;
/**
* 订单查单input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 15:23
*/
public class InputOrderGetDto extends CommonRequest {
public InputOrderGetDto() {
super();
setMethod("fulu.order.info.get");
}
/**
* 外部订单号
*
* @return String
*/
public String getCustomerOrderNo() {
Object value = getBizContentValue("customer_order_no");
return value != null ? String.valueOf(value) : null;
}
public void setCustomerOrderNo(String customerOrderNo) {
setBizContent("customer_order_no", customerOrderNo);
}
}

View File

@ -0,0 +1,57 @@
package cn.lili.common.fulu.model;
/**
* 话费订单input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 15:31
*/
public class InputPhoneOrderDto extends CommonRequest {
public InputPhoneOrderDto() {
super();
setMethod("fulu.order.mobile.add");
}
/**
* 充值手机号
*
* @return String
*/
public String getChargePhone() {
Object value = getBizContentValue("charge_phone");
return value != null ? String.valueOf(value) : null;
}
public void setChargePhone(String chargePhone) {
setBizContent("charge_phone", chargePhone);
}
/**
* 充值数额
*
* @return Double
*/
public Double getChargeValue() {
Object value = getBizContentValue("charge_value");
return value != null ? Double.valueOf(value.toString()) : null;
}
public void setChargeValue(Double chargeValue) {
setBizContent("charge_value", chargeValue);
}
/**
* 外部订单号
*
* @return String
*/
public String getCustomerOrderNo() {
Object value = getBizContentValue("customer_order_no");
return value != null ? String.valueOf(value) : null;
}
public void setCustomerOrderNo(String customerOrderNo) {
setBizContent("customer_order_no", customerOrderNo);
}
}

View File

@ -0,0 +1,30 @@
package cn.lili.common.fulu.model;
/**
* 商品信息input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:04
*/
public class InputProductDto extends CommonRequest {
public InputProductDto() {
super();
setMethod("fulu.goods.info.get");
}
/**
* 商品编号
*
* @return String
*/
public String getProductId() {
Object value = getBizContentValue("product_id");
return value != null ? String.valueOf(value) : null;
}
public void setProductId(String productId) {
setBizContent("product_id", productId);
}
}

View File

@ -0,0 +1,29 @@
package cn.lili.common.fulu.model;
/**
* 商品模板信息input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:01
*/
public class InputProductTemplateDto extends CommonRequest {
public InputProductTemplateDto() {
super();
setMethod("fulu.goods.template.get");
}
/**
* 商品模板编号
*
* @return String
*/
public String getTemplateId() {
Object value = getBizContentValue("template_id");
return value != null ? String.valueOf(value) : null;
}
public void setTemplateId(String templateId) {
setBizContent("template_id", templateId);
}
}

View File

@ -0,0 +1,72 @@
package cn.lili.common.fulu.model;
/**
* 流量订单input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 13:50
*/
public class InputTrafficOrderDto extends CommonRequest {
public InputTrafficOrderDto() {
super();
setMethod("fulu.order.data.add");
}
/**
* 充值手机号
*
* @return String
*/
public String getChargePhone() {
Object value = getBizContentValue("charge_phone");
return value != null ? String.valueOf(value) : null;
}
public void setChargePhone(String chargePhone) {
setBizContent("charge_phone", chargePhone);
}
/**
* 充值数额M
*
* @return Double
*/
public Double getChargeValue() {
Object value = getBizContentValue("charge_value");
return value != null ? Double.valueOf(value.toString()) : null;
}
public void setChargeValue(Double chargeValue) {
setBizContent("charge_value", chargeValue);
}
/**
* 外部订单号
*
* @return String
*/
public String getCustomerOrderNo() {
Object value = getBizContentValue("customer_order_no");
return value != null ? String.valueOf(value) : null;
}
public void setCustomerOrderNo(String customerOrderNo) {
setBizContent("customer_order_no", customerOrderNo);
}
/**
* 流量性质 1:小时 2: 3:7天 4: 5:季度 6:半年 7:
*
* @return Integer
*/
public Integer getPacketKind() {
Object value = getBizContentValue("packet_kind");
return value != null ? Integer.valueOf(value.toString()) : null;
}
public void setPacketKind(Integer packetKind) {
setBizContent("packet_kind", packetKind);
}
}

View File

@ -0,0 +1,15 @@
package cn.lili.common.fulu.model;
/**
* 用户信息input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:06
*/
public class InputUserDto extends CommonRequest {
public InputUserDto() {
super();
setMethod("fulu.user.info.get");
}
}

View File

@ -0,0 +1,46 @@
package cn.lili.common.fulu.model.response;
/**
* 响应对象
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 15:06
*/
public class DefaultClientResponse {
private String code;
private String message;
private String result;
private String sign;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
}

View File

@ -0,0 +1,129 @@
package cn.lili.common.fulu.sdk;
import cn.lili.common.fulu.core.http.FuluClient;
import cn.lili.common.fulu.core.http.IFuluClient;
import cn.lili.common.fulu.core.utils.JSONUtil;
import cn.lili.common.fulu.model.CommonRequest;
import org.apache.commons.codec.digest.DigestUtils;
import java.util.Arrays;
import java.util.concurrent.Future;
/**
* 默认OpenApi客户请求实现
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:45
*/
public class DefaultOpenApiClient implements IDefaultOpenApiClient {
/**
* 商户AppKey
*/
private String appKey;
/**
* 业务参数
*/
private CommonRequest bizContent;
/**
* http请求
*/
private IFuluClient fuluClient;
/**
* 方法
*/
private String method;
/**
* 应用秘钥
*/
private String sysSecret;
// public DefaultOpenApiClient(String url, String appKey, String sysSecret) {
// this.appKey = appKey;
// this.sysSecret = sysSecret;
//
// if (url == null || "".equals(url.trim())) {
// this.fuluClient = new FuluClient();
// } else {
// this.fuluClient = new FuluClient(url);
// }
// }
/**
* 如果url没改变可以使用这个构造
*
* @param appKey appKey
* @param sysSecret sysSecret
*/
// public DefaultOpenApiClient(String appKey, String sysSecret) {
// this.appKey = appKey;
// this.fuluClient = new FuluClient();
// this.sysSecret = sysSecret;
// }
/**
* 使用public void setBizContent(String bizContent)此方法method不能为空必填
* 或者使用其它构造调用fulu.sup.open.api.model.CommonRequest的setMethod也可以
*
* @param url url
* @param appKey appKey
* @param sysSecret sysSecret
* @param method method
*/
public DefaultOpenApiClient(String url, String appKey, String sysSecret, String method) {
this.appKey = appKey;
this.sysSecret = sysSecret;
this.method = method;
if (url == null || "".equals(url.trim())) {
this.fuluClient = new FuluClient();
} else {
this.fuluClient = new FuluClient(url);
}
}
@Override
public String excute() {
doSign();
return fuluClient.send(JSONUtil.toJSON(this.bizContent));
}
@Override
public Future<String> excuteAsync() {
doSign();
return fuluClient.sendAsync(JSONUtil.toJSON(this.bizContent));
}
@Override
public void setBizContent(String bizContent) {
this.bizContent = new CommonRequest();
this.bizContent.setBizContent(bizContent);
this.bizContent.setAppKey(this.appKey);
this.bizContent.setMethod(this.method);
}
@Override
public void setBizObject(CommonRequest bizModel) {
this.bizContent = bizModel;
this.bizContent.setAppKey(this.appKey);
if (method != null && !"".equals(method)) {
this.bizContent.setMethod(this.method);
}
}
private void doSign() {
if (bizContent.getMethod() == null || "".equals(bizContent.getMethod().trim())) {
throw new RuntimeException("param \"method\" can not blank!");
}
this.bizContent.setSign(null);
this.bizContent.getBizContent();
String json = JSONUtil.toJSON(this.bizContent);
char[] charArray = json.toCharArray();
Arrays.sort(charArray);
String signStr = new String(charArray);
signStr = String.format("%s%s", signStr, sysSecret);
this.bizContent.setSign(DigestUtils.md5Hex(signStr));
}
}

View File

@ -0,0 +1,44 @@
package cn.lili.common.fulu.sdk;
import cn.lili.common.fulu.model.CommonRequest;
import java.util.concurrent.Future;
/**
* 默认OpenApi客户请求接口
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:40
*/
public interface IDefaultOpenApiClient {
/**
* 执行请求同步方法
*
* @return String
*/
String excute();
/**
* 执行请求异步方法
*
* @return Future<String>
*/
Future<String> excuteAsync();
/**
* 设置业务参数
*
* @param bizContent
*/
@Deprecated
void setBizContent(String bizContent);
/**
* 设置业务参数
*/
void setBizObject(CommonRequest bizModel);
}

View File

@ -16,21 +16,21 @@ public class SmsTemplateProperties {
/** /**
* 登录 * 登录
*/ */
private String lOGIN = "SMS_205755300"; private String lOGIN = "SMS_185821482";
/** /**
* 注册 * 注册
*/ */
private String REGISTER = "SMS_205755298"; private String REGISTER = "SMS_185821482";
/** /**
* 找回密码 * 找回密码
*/ */
private String FIND_USER = "SMS_205755301"; private String FIND_USER = "SMS_185821482";
/** /**
* 设置密码 * 设置密码
*/ */
private String UPDATE_PASSWORD = "SMS_205755297"; private String UPDATE_PASSWORD = "SMS_185821482";
/** /**
* 设置支付密码 * 设置支付密码
*/ */
private String WALLET_PASSWORD = "SMS_205755297"; private String WALLET_PASSWORD = "SMS_185821482";
} }

View File

@ -24,8 +24,7 @@ public class VerificationCodeProperties {
/** /**
* 水印 * 水印
*/ */
private String watermark = "LILI-SHOP"; private String watermark = "";
/** /**
* 干扰数量 最大数量 * 干扰数量 最大数量
*/ */

View File

@ -17,7 +17,7 @@ public class SecretKeyUtil {
public static SecretKey generalKey() { public static SecretKey generalKey() {
//自定义 //自定义
byte[] encodedKey = Base64.decodeBase64("cuAihCz53DZRjZwbsGcZJ2Ai6At+T142uphtJMsk7iQ="); byte[] encodedKey = Base64.decodeBase64("cuAihCz53DZRjZwbsGcZJ2Ai6At+T142uphtJMsk7iQ=");
javax.crypto.SecretKey key = Keys.hmacShaKeyFor(encodedKey); SecretKey key = Keys.hmacShaKeyFor(encodedKey);
return key; return key;
} }

View File

@ -55,7 +55,7 @@ public class IpUtils {
} }
} }
if ("0:0:0:0:0:0:0:1".equals(ip)) { if ("0:0:0:0:0:0:0:1".equals(ip)) {
ip = "127.0.0.1"; ip = "106.124.130.167";
} }
return ip; return ip;
} }

View File

@ -99,7 +99,7 @@ public abstract class BaseElasticsearchService {
log.info(" whether all of the nodes have acknowledged the request : {}", createIndexResponse.isAcknowledged()); log.info(" whether all of the nodes have acknowledged the request : {}", createIndexResponse.isAcknowledged());
log.info(" Indicates whether the requisite number of shard copies were started for each shard in the index before timing out :{}", createIndexResponse.isShardsAcknowledged()); log.info(" Indicates whether the requisite number of shard copies were started for each shard in the index before timing out :{}", createIndexResponse.isShardsAcknowledged());
} catch (Exception e) { } catch (Exception e) {
log.error("创建索引错误",e); log.error("创建索引错误", e);
throw new ElasticsearchException("创建索引 {" + index + "} 失败:" + e.getMessage()); throw new ElasticsearchException("创建索引 {" + index + "} 失败:" + e.getMessage());
} }
} }
@ -346,8 +346,7 @@ public abstract class BaseElasticsearchService {
" }\n" + " }\n" +
" }\n"; " }\n";
PutMappingRequest request = new PutMappingRequest(index) PutMappingRequest request = new PutMappingRequest(index).source(source, XContentType.JSON);
.source(source, XContentType.JSON);
CountDownLatch latch = new CountDownLatch(1); CountDownLatch latch = new CountDownLatch(1);
AtomicReference<AcknowledgedResponse> response = new AtomicReference<>(); AtomicReference<AcknowledgedResponse> response = new AtomicReference<>();
client.indices().putMappingAsync( client.indices().putMappingAsync(
@ -452,7 +451,7 @@ public abstract class BaseElasticsearchService {
try { try {
searchResponse = client.search(searchRequest, COMMON_OPTIONS); searchResponse = client.search(searchRequest, COMMON_OPTIONS);
} catch (IOException e) { } catch (IOException e) {
log.error("es 搜索错误",e); log.error("es 搜索错误", e);
} }
return searchResponse; return searchResponse;
} }

View File

@ -77,7 +77,11 @@ public class AuthConfig {
/** /**
* 针对国外服务可以单独设置代理 * 针对国外服务可以单独设置代理
* HttpConfig config = new HttpConfig(); * HttpConfig config = new HttpConfig();
<<<<<<< HEAD
* config.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("106.124.130.167", 10080)));
=======
* config.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10080))); * config.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10080)));
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
* config.setTimeout(15000); * config.setTimeout(15000);
* *
* @since 1.15.5 * @since 1.15.5

View File

@ -47,9 +47,9 @@ public class AuthChecker {
if (!GlobalAuthUtils.isHttpProtocol(redirectUri) && !GlobalAuthUtils.isHttpsProtocol(redirectUri)) { if (!GlobalAuthUtils.isHttpProtocol(redirectUri) && !GlobalAuthUtils.isHttpsProtocol(redirectUri)) {
throw new AuthException(AuthResponseStatus.ILLEGAL_REDIRECT_URI, connectAuth); throw new AuthException(AuthResponseStatus.ILLEGAL_REDIRECT_URI, connectAuth);
} }
//支付宝在创建回调地址时不允许使用localhost或者127.0.0.1 //支付宝在创建回调地址时不允许使用localhost或者106.124.130.167
if (ConnectAuthEnum.ALIPAY == connectAuth && GlobalAuthUtils.isLocalHost(redirectUri)) { if (ConnectAuthEnum.ALIPAY == connectAuth && GlobalAuthUtils.isLocalHost(redirectUri)) {
//The redirect uri of alipay is forbidden to use localhost or 127.0.0.1 //The redirect uri of alipay is forbidden to use localhost or 106.124.130.167
throw new AuthException(AuthResponseStatus.ILLEGAL_REDIRECT_URI, connectAuth); throw new AuthException(AuthResponseStatus.ILLEGAL_REDIRECT_URI, connectAuth);
} }
} }

View File

@ -171,7 +171,7 @@ public class GlobalAuthUtils {
* @return true: 本地主机域名, false: 非本地主机域名 * @return true: 本地主机域名, false: 非本地主机域名
*/ */
public static boolean isLocalHost(String url) { public static boolean isLocalHost(String url) {
return StringUtils.isEmpty(url) || url.contains("127.0.0.1") || url.contains("localhost"); return StringUtils.isEmpty(url) || url.contains("106.124.130.167") || url.contains("localhost");
} }

View File

@ -0,0 +1,34 @@
package cn.lili.modules.file.plugin;
import java.io.InputStream;
import java.util.List;
public interface QiNiuManagerPlugin {
/**
* 文件流上传
*
* @param inputStream
* @param key
* @return
*/
String inputStreamUpload(InputStream inputStream, String key);
/**
* 删除文件
*
* @param key
*/
void deleteFile(List<String> key);
/**
* 根据原图生成规定尺寸的图片
*
* @param url 连接
* @param width
* @param height
* @return
*/
String getUrl(String url, Integer width, Integer height);
}

View File

@ -0,0 +1,143 @@
package cn.lili.modules.file.plugin.impl;
import cn.hutool.core.util.StrUtil;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.modules.file.plugin.QiNiuManagerPlugin;
import cn.lili.modules.system.entity.dos.Setting;
import cn.lili.modules.system.entity.dto.OssSetting;
import cn.lili.modules.system.entity.enums.SettingEnum;
import cn.lili.modules.system.service.SettingService;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.DeleteObjectsRequest;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.InputStream;
import java.util.List;
/**
* 阿里oss 文件操作
*
* @author Chopper
*/
@Component
@Slf4j
public class QiNiuFileManagerPlugin implements QiNiuManagerPlugin {
@Autowired
private SettingService settingService;
/**
* 下一个初始化配置参数的时间
* 这里为了防止多次调用redis减少与redis的交互时间
*/
private static Long nextInitSetting;
/**
* 暂时设定3分账请求一次设置
*/
private static final Long INTERVAL = 60 * 3 * 1000L;
/**
* 静态设置最快三分钟更新一次
*/
private static OssSetting ossSetting;
private Auth auth;
private UploadManager uploadManager;
private BucketManager bucketManager;
/**
* 获取oss client
*
* @return
*/
private OSS getQiNiuOssClient() {
OssSetting ossSetting = getSetting();
return new OSSClientBuilder().build(
ossSetting.getEndPoint(),
ossSetting.getAccessKeyId(),
ossSetting.getAccessKeySecret());
}
/**
* 获取配置
*
* @return
*/
private OssSetting getSetting() {
//如果没有配置或者没有下次刷新时间或者下次刷新时间小于当前时间则从redis 更新一次
if (ossSetting == null || nextInitSetting == null || nextInitSetting < System.currentTimeMillis()) {
Setting setting = settingService.get(SettingEnum.OSS_SETTING.name());
if (setting == null || StrUtil.isBlank(setting.getSettingValue())) {
throw new ServiceException(ResultCode.OSS_NOT_EXIST);
}
nextInitSetting = System.currentTimeMillis() + INTERVAL;
ossSetting = new Gson().fromJson(setting.getSettingValue(), OssSetting.class);
return ossSetting;
}
return ossSetting;
}
@Override
public String inputStreamUpload(InputStream inputStream, String key) {
OssSetting ossSetting = getSetting();
auth = Auth.create(ossSetting.getAccessKeyId(), ossSetting.getAccessKeySecret());
uploadManager = new UploadManager(new Configuration());
String upToken = auth.uploadToken(ossSetting.getBucketName());
try {
Response response = uploadManager.put(inputStream, ossSetting.getPicLocation() +"/"+ key, upToken, null, "image/jpg");
if (response.statusCode == 200) {
return ossSetting.getEndPoint() + "/"+ ossSetting.getPicLocation() + "/" + key;
}
} catch (QiniuException e) {
e.printStackTrace();
}
return "";
}
@Override
public void deleteFile(List<String> key) {
OssSetting ossSetting = getSetting();
if (bucketManager == null) {
if (auth == null) {
auth = Auth.create(ossSetting.getAccessKeyId(), ossSetting.getAccessKeySecret());
}
bucketManager = new BucketManager(auth, new Configuration());
}
//
// for (int i = 0; 0 < key.size(); i++) {
// try {
// bucketManager.delete(ossSetting.getBucketName()+ "/"+ ossSetting.getPicLocation(), key.get(i));
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
}
@Override
public String getUrl(String url, Integer width, Integer height) {
//缩略图全路径
//返回缩略图全路径
return url + "?x-oss-process=style/" + width + "X" + height;
}
}

View File

@ -4,6 +4,7 @@ import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.AuthUser; import cn.lili.common.security.AuthUser;
import cn.lili.mybatis.util.PageUtil;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.SearchVO; import cn.lili.common.vo.SearchVO;
import cn.lili.modules.file.entity.File; import cn.lili.modules.file.entity.File;
@ -11,7 +12,6 @@ import cn.lili.modules.file.entity.dto.FileOwnerDTO;
import cn.lili.modules.file.mapper.FileMapper; import cn.lili.modules.file.mapper.FileMapper;
import cn.lili.modules.file.plugin.FileManagerPlugin; import cn.lili.modules.file.plugin.FileManagerPlugin;
import cn.lili.modules.file.service.FileService; import cn.lili.modules.file.service.FileService;
import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

View File

@ -7,6 +7,7 @@ import cn.hutool.json.JSONUtil;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.modules.goods.entity.dto.GoodsOperationDTO; import cn.lili.modules.goods.entity.dto.GoodsOperationDTO;
import cn.lili.modules.goods.entity.dto.GoodsOperationFuLuDTO;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
import cn.lili.modules.goods.entity.enums.GoodsTypeEnum; import cn.lili.modules.goods.entity.enums.GoodsTypeEnum;
import cn.lili.mybatis.BaseEntity; import cn.lili.mybatis.BaseEntity;
@ -143,15 +144,83 @@ public class Goods extends BaseEntity {
@JsonIgnore @JsonIgnore
private String params; private String params;
//福禄所需参数
/**
* 商品编号
*/
@Length(max = 30, message = "商品规格编号太长不能超过30个字符")
@ApiModelProperty(value = "商品编号")
private String sn;
/**
* 重量
*/
@ApiModelProperty(value = "重量")
@Max(value = 99999999, message = "重量不能超过99999999")
private Double weight;
public Goods() { public Goods() {
} }
/**
* 福禄
* @param goodsOperationDTO
*/
public Goods(GoodsOperationFuLuDTO goodsOperationDTO) {
this.goodsName = goodsOperationDTO.getGoodsName();
this.categoryPath = goodsOperationDTO.getCategoryPath();
this.storeCategoryPath = goodsOperationDTO.getStoreCategoryPath();
this.brandId = goodsOperationDTO.getBrandId();
this.sn = goodsOperationDTO.getSn();
this.price = goodsOperationDTO.getPrice();
this.weight = goodsOperationDTO.getWeight();
this.templateId = goodsOperationDTO.getTemplateId();
this.recommend = goodsOperationDTO.getRecommend();
this.sellingPoint = goodsOperationDTO.getSellingPoint();
this.salesModel = goodsOperationDTO.getSalesModel();
this.goodsUnit = goodsOperationDTO.getGoodsUnit();
this.intro = goodsOperationDTO.getIntro();
this.mobileIntro = goodsOperationDTO.getMobileIntro();
this.goodsVideo = goodsOperationDTO.getGoodsVideo();
this.price = goodsOperationDTO.getPrice();
if (goodsOperationDTO.getGoodsParamsDTOList() != null && goodsOperationDTO.getGoodsParamsDTOList().isEmpty()) {
this.params = JSONUtil.toJsonStr(goodsOperationDTO.getGoodsParamsDTOList());
}
//如果立即上架则
this.marketEnable = Boolean.TRUE.equals(goodsOperationDTO.getRelease()) ? GoodsStatusEnum.UPPER.name() : GoodsStatusEnum.DOWN.name();
this.goodsType = goodsOperationDTO.getGoodsType();
this.grade = 100D;
//循环sku判定sku是否有效
for (Map<String, Object> sku : goodsOperationDTO.getSkuList()) {
//判定参数不能为空
if (!sku.containsKey("sn") || sku.get("sn") == null) {
throw new ServiceException(ResultCode.GOODS_SKU_SN_ERROR);
}
if (!sku.containsKey("price") || StringUtil.isEmpty(sku.get("price").toString()) || Convert.toDouble(sku.get("price")) <= 0) {
throw new ServiceException(ResultCode.GOODS_SKU_PRICE_ERROR);
}
if (!sku.containsKey("cost") || StringUtil.isEmpty(sku.get("cost").toString()) || Convert.toDouble(sku.get("cost")) <= 0) {
throw new ServiceException(ResultCode.GOODS_SKU_COST_ERROR);
}
//虚拟商品没有重量字段
if (this.goodsType.equals(GoodsTypeEnum.PHYSICAL_GOODS.name()) && (!sku.containsKey("weight") || sku.containsKey("weight") && (StringUtil.isEmpty(sku.get("weight").toString()) || Convert.toDouble(sku.get("weight").toString()) < 0))) {
throw new ServiceException(ResultCode.GOODS_SKU_WEIGHT_ERROR);
}
if (!sku.containsKey("quantity") || StringUtil.isEmpty(sku.get("quantity").toString()) || Convert.toInt(sku.get("quantity").toString()) < 0) {
throw new ServiceException(ResultCode.GOODS_SKU_QUANTITY_ERROR);
}
}
}
public Goods(GoodsOperationDTO goodsOperationDTO) { public Goods(GoodsOperationDTO goodsOperationDTO) {
this.goodsName = goodsOperationDTO.getGoodsName(); this.goodsName = goodsOperationDTO.getGoodsName();
this.categoryPath = goodsOperationDTO.getCategoryPath(); this.categoryPath = goodsOperationDTO.getCategoryPath();
this.storeCategoryPath = goodsOperationDTO.getStoreCategoryPath(); this.storeCategoryPath = goodsOperationDTO.getStoreCategoryPath();
this.brandId = goodsOperationDTO.getBrandId(); this.brandId = goodsOperationDTO.getBrandId();
this.price = goodsOperationDTO.getPrice();
this.templateId = goodsOperationDTO.getTemplateId(); this.templateId = goodsOperationDTO.getTemplateId();
this.recommend = goodsOperationDTO.getRecommend(); this.recommend = goodsOperationDTO.getRecommend();
this.sellingPoint = goodsOperationDTO.getSellingPoint(); this.sellingPoint = goodsOperationDTO.getSellingPoint();
@ -206,4 +275,4 @@ public class Goods extends BaseEntity {
return mobileIntro; return mobileIntro;
} }
} }

View File

@ -0,0 +1,137 @@
package cn.lili.modules.goods.entity.dto;
import cn.lili.common.validation.EnumValue;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;
import javax.validation.Valid;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* 商品编辑DTO
*
* @author pikachu
* @since 2020-02-24 19:27:20
*/
@Data
@ToString
public class GoodsOperationFuLuDTO implements Serializable {
private static final long serialVersionUID = -509667581371776913L;
@ApiModelProperty(hidden = true)
private String goodsId;
@ApiModelProperty(value = "商品价格", required = true)
@NotNull(message = "商品价格不能为空")
@Min(value = 0, message = "商品价格不能为负数")
@Max(value = 99999999, message = "商品价格不能超过99999999")
private Double price;
@ApiModelProperty(value = "分类path")
private String categoryPath;
@ApiModelProperty(value = "店铺分类id", required = true)
@Size(max = 200, message = "选择了太多店铺分类")
private String storeCategoryPath;
@ApiModelProperty(value = "品牌id")
@Min(value = 0, message = "品牌值不正确")
private String brandId;
@ApiModelProperty(value = "商品名称", required = true)
@NotEmpty(message = "商品名称不能为空")
@Length(max = 50, message = "商品名称不能超过50个字符")
private String goodsName;
@ApiModelProperty(value = "详情")
private String intro;
@ApiModelProperty(value = "商品移动端详情")
private String mobileIntro;
@ApiModelProperty(value = "库存")
@Min(value = 0, message = "库存不能为负数")
@Max(value = 99999999, message = "库存不能超过99999999")
private Integer quantity;
@ApiModelProperty(value = "是否立即发布")
private Boolean release;
@ApiModelProperty(value = "是否是推荐商品")
private Boolean recommend;
@ApiModelProperty(value = "商品参数")
private List<GoodsParamsDTO> goodsParamsDTOList;
@ApiModelProperty(value = "商品图片")
private List<String> goodsGalleryList;
@ApiModelProperty(value = "运费模板id,不需要运费模板时值是0", required = true)
@NotNull(message = "运费模板不能为空没有运费模板时传值0")
@Min(value = 0, message = "运费模板值不正确")
private String templateId;
@ApiModelProperty(value = "sku列表")
@Valid
private List<Map<String, Object>> skuList;
@ApiModelProperty(value = "卖点")
private String sellingPoint;
@ApiModelProperty(value = "销售模式", required = true)
private String salesModel;
@ApiModelProperty(value = "是否有规格", hidden = true)
private String haveSpec;
@ApiModelProperty(value = "销售模式", required = true)
private String goodsUnit;
@ApiModelProperty(value = "商品描述")
private String info;
@ApiModelProperty(value = "是否重新生成sku数据")
private Boolean regeneratorSkuFlag = true;
/**
* @see cn.lili.modules.goods.entity.enums.GoodsTypeEnum
*/
@ApiModelProperty(value = "商品类型")
@EnumValue(strValues = {"PHYSICAL_GOODS", "VIRTUAL_GOODS", "E_COUPON"}, message = "商品类型参数值错误")
private String goodsType;
/**
* 商品视频
*/
@ApiModelProperty(value = "商品视频")
private String goodsVideo;
public String getGoodsName() {
//对商品对名称做一个极限处理这里没有用xss过滤是因为xss过滤为全局过滤影响很大
// 业务中全局代码中只有商品名称不能拥有英文逗号是由于商品名称存在一个数据库联合查询结果要根据逗号分组
return goodsName.replace(",", "");
}
//福禄所需参数
@ApiModelProperty(value = "商品编号", required = true)
@Length(max = 30, message = "商品编号太长不能超过30个字符")
private String sn;
@ApiModelProperty(value = "市场价格", required = true)
@NotNull(message = "市场价格不能为空")
private Double cost;
@ApiModelProperty(value = "重量", required = true)
@NotNull(message = "商品重量不能为空")
@Min(value = 0, message = "重量不能为负数")
@Max(value = 99999999, message = "重量不能超过99999999")
private Double weight;
}

View File

@ -2,6 +2,7 @@ package cn.lili.modules.goods.service;
import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.dos.Goods;
import cn.lili.modules.goods.entity.dto.GoodsOperationDTO; import cn.lili.modules.goods.entity.dto.GoodsOperationDTO;
import cn.lili.modules.goods.entity.dto.GoodsOperationFuLuDTO;
import cn.lili.modules.goods.entity.dto.GoodsSearchParams; import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
@ -58,6 +59,14 @@ public interface GoodsService extends IService<Goods> {
*/ */
void addGoods(GoodsOperationDTO goodsOperationDTO); void addGoods(GoodsOperationDTO goodsOperationDTO);
/**
* 添加福禄商品
*
* @param goodsOperationFuLuDTO 商品查询条件
*/
void fuLuAddGoods(GoodsOperationFuLuDTO goodsOperationFuLuDTO);
/** /**
* 修改商品 * 修改商品
* *
@ -66,6 +75,14 @@ public interface GoodsService extends IService<Goods> {
*/ */
void editGoods(GoodsOperationDTO goodsOperationDTO, String goodsId); void editGoods(GoodsOperationDTO goodsOperationDTO, String goodsId);
/**
* 修改商品
*
* @param goodsOperationDTO 商品查询条件
* @param goodsId 商品ID
*/
void fuLuEditGoods(GoodsOperationFuLuDTO goodsOperationFuLuDTO, String goodsId);
/** /**
* 查询商品VO * 查询商品VO
* *
@ -173,4 +190,4 @@ public interface GoodsService extends IService<Goods> {
*/ */
long countStoreGoodsNum(String storeId); long countStoreGoodsNum(String storeId);
} }

View File

@ -15,6 +15,7 @@ import cn.lili.modules.goods.entity.dos.Category;
import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.dos.Goods;
import cn.lili.modules.goods.entity.dos.GoodsGallery; import cn.lili.modules.goods.entity.dos.GoodsGallery;
import cn.lili.modules.goods.entity.dto.GoodsOperationDTO; import cn.lili.modules.goods.entity.dto.GoodsOperationDTO;
import cn.lili.modules.goods.entity.dto.GoodsOperationFuLuDTO;
import cn.lili.modules.goods.entity.dto.GoodsParamsDTO; import cn.lili.modules.goods.entity.dto.GoodsParamsDTO;
import cn.lili.modules.goods.entity.dto.GoodsSearchParams; import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum;
@ -159,7 +160,9 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
//检查商品 //检查商品
this.checkGoods(goods); this.checkGoods(goods);
//向goods加入图片 //向goods加入图片
this.setGoodsGalleryParam(goodsOperationDTO.getGoodsGalleryList().get(0), goods); if (goodsOperationDTO.getGoodsGalleryList().size() > 0 ) {
this.setGoodsGalleryParam(goodsOperationDTO.getGoodsGalleryList().get(0), goods);
}
//添加商品参数 //添加商品参数
if (goodsOperationDTO.getGoodsParamsDTOList() != null && !goodsOperationDTO.getGoodsParamsDTOList().isEmpty()) { if (goodsOperationDTO.getGoodsParamsDTOList() != null && !goodsOperationDTO.getGoodsParamsDTOList().isEmpty()) {
//给商品参数填充值 //给商品参数填充值
@ -176,6 +179,31 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
} }
@Override
@Transactional(rollbackFor = Exception.class)
public void fuLuAddGoods(GoodsOperationFuLuDTO goodsOperationDTO) {
Goods goods = new Goods(goodsOperationDTO);
//检查商品
this.checkGoods(goods);
//向goods加入图片
if (goodsOperationDTO.getGoodsGalleryList().size() > 0 ) {
this.setGoodsGalleryParam(goodsOperationDTO.getGoodsGalleryList().get(0), goods);
}
//添加商品参数
if (goodsOperationDTO.getGoodsParamsDTOList() != null && !goodsOperationDTO.getGoodsParamsDTOList().isEmpty()) {
//给商品参数填充值
goods.setParams(JSONUtil.toJsonStr(goodsOperationDTO.getGoodsParamsDTOList()));
}
//添加商品
this.save(goods);
//添加商品sku信息
this.goodsSkuService.add(goodsOperationDTO.getSkuList(), goods);
//添加相册
if (goodsOperationDTO.getGoodsGalleryList() != null && !goodsOperationDTO.getGoodsGalleryList().isEmpty()) {
this.goodsGalleryService.add(goodsOperationDTO.getGoodsGalleryList(), goods.getId());
}
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void editGoods(GoodsOperationDTO goodsOperationDTO, String goodsId) { public void editGoods(GoodsOperationDTO goodsOperationDTO, String goodsId) {
@ -203,6 +231,33 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
cache.remove(CachePrefix.GOODS.getPrefix() + goodsId); cache.remove(CachePrefix.GOODS.getPrefix() + goodsId);
} }
@Override
public void fuLuEditGoods(GoodsOperationFuLuDTO goodsOperationFuLuDTO, String goodsId) {
Goods goods = new Goods(goodsOperationFuLuDTO);
goods.setId(goodsId);
//检查商品信息
this.checkGoods(goods);
//向goods加入图片
this.setGoodsGalleryParam(goodsOperationFuLuDTO.getGoodsGalleryList().get(0), goods);
//添加商品参数
if (goodsOperationFuLuDTO.getGoodsParamsDTOList() != null && !goodsOperationFuLuDTO.getGoodsParamsDTOList().isEmpty()) {
goods.setParams(JSONUtil.toJsonStr(goodsOperationFuLuDTO.getGoodsParamsDTOList()));
}
//修改商品
this.updateById(goods);
//修改商品sku信息
this.goodsSkuService.update(goodsOperationFuLuDTO.getSkuList(), goods, goodsOperationFuLuDTO.getRegeneratorSkuFlag());
//添加相册
if (goodsOperationFuLuDTO.getGoodsGalleryList() != null && !goodsOperationFuLuDTO.getGoodsGalleryList().isEmpty()) {
this.goodsGalleryService.add(goodsOperationFuLuDTO.getGoodsGalleryList(), goods.getId());
}
if (GoodsAuthEnum.TOBEAUDITED.name().equals(goods.getAuthFlag())) {
this.deleteEsGoods(Collections.singletonList(goodsId));
}
cache.remove(CachePrefix.GOODS.getPrefix() + goodsId);
}
@Override @Override
public GoodsVO getGoodsVO(String goodsId) { public GoodsVO getGoodsVO(String goodsId) {
//缓存获取如果没有则读取缓存 //缓存获取如果没有则读取缓存
@ -611,4 +666,4 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
return queryWrapper; return queryWrapper;
} }
} }

View File

@ -28,11 +28,11 @@ public class MemberVO implements Serializable {
private String id; private String id;
@ApiModelProperty(value = "会员用户名") @ApiModelProperty(value = "会员用户名")
@Sensitive(strategy = SensitiveStrategy.PHONE) @Sensitive(strategy = SensitiveStrategy.USERNAME)
private String username; private String username;
@ApiModelProperty(value = "昵称") @ApiModelProperty(value = "昵称")
@Sensitive(strategy = SensitiveStrategy.PHONE)
private String nickName; private String nickName;
@ApiModelProperty(value = "会员性别,1为男0为女") @ApiModelProperty(value = "会员性别,1为男0为女")

View File

@ -34,7 +34,8 @@ public interface FootprintMapper extends BaseMapper<FootPrint> {
* *
* @param memberId 会员ID * @param memberId 会员ID
*/ */
@Delete("DELETE FROM li_foot_print l1 WHERE l1.id IN (" +
@Delete("DELETE FROM li_foot_print WHERE id IN ("+
"SELECT l2.id FROM (" + "SELECT l2.id FROM (" +
"SELECT l3.id FROM li_foot_print l3 WHERE l3.member_id=${memberId} ORDER BY id DESC LIMIT 100,100) l2)") "SELECT l3.id FROM li_foot_print l3 WHERE l3.member_id=${memberId} ORDER BY id DESC LIMIT 100,100) l2)")
void deleteLastFootPrint(String memberId); void deleteLastFootPrint(String memberId);

View File

@ -255,7 +255,7 @@ public interface MemberService extends IService<Member> {
*/ */
boolean updateMemberLoginTime(String memberId); boolean updateMemberLoginTime(String memberId);
/** /**
* 获取用户VO * 获取用户VO
* @param id 会员id * @param id 会员id
* @return 用户VO * @return 用户VO

View File

@ -27,7 +27,7 @@ import java.util.List;
* @since 2020/11/17 3:44 下午 * @since 2020/11/17 3:44 下午
*/ */
@Service @Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = java.lang.Exception.class) @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class MemberNoticeSenterServiceImpl extends ServiceImpl<MemberNoticeSenterMapper, MemberNoticeSenter> implements MemberNoticeSenterService { public class MemberNoticeSenterServiceImpl extends ServiceImpl<MemberNoticeSenterMapper, MemberNoticeSenter> implements MemberNoticeSenterService {
/** /**

View File

@ -199,6 +199,9 @@ public class Order extends BaseEntity {
@ApiModelProperty(value = "使用的平台会员优惠券id") @ApiModelProperty(value = "使用的平台会员优惠券id")
private String usePlatformMemberCouponId; private String usePlatformMemberCouponId;
@ApiModelProperty(value = "qrCode 实物为提货码 虚拟货物为账号")
private String qrCode;
/** /**
* 构建订单 * 构建订单
* *

View File

@ -43,6 +43,14 @@ public interface OrderService extends IService<Order> {
*/ */
Order getBySn(String orderSn); Order getBySn(String orderSn);
/**
* 获取订单
*
* @param receivableNo 微信支付单号
* @return 订单信息
*/
Order getOrderByReceivableNo(String receivableNo);
/** /**
* 订单查询 * 订单查询
* *
@ -284,4 +292,11 @@ public interface OrderService extends IService<Order> {
* @return 是否成功 * @return 是否成功
*/ */
boolean checkFictitiousOrder(String pintuanId, Integer requiredNum, Boolean fictitious); boolean checkFictitiousOrder(String pintuanId, Integer requiredNum, Boolean fictitious);
/**
* 验证福禄订单进行处理
* @param tradeNo 第三方流水
*
*/
void fuluOrder(String tradeNo);
} }

View File

@ -11,19 +11,19 @@ import cn.hutool.poi.excel.ExcelWriter;
import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.fulu.core.utils.Test;
import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums; import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.utils.SnowFlake; import cn.lili.common.utils.SnowFlake;
import cn.lili.modules.goods.entity.dos.Goods;
import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage; import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage;
import cn.lili.modules.goods.service.GoodsService;
import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.member.entity.dto.MemberAddressDTO;
import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.order.aop.OrderLogPoint; import cn.lili.modules.order.order.aop.OrderLogPoint;
import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.*;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.dos.Receipt;
import cn.lili.modules.order.order.entity.dos.Trade;
import cn.lili.modules.order.order.entity.dto.OrderBatchDeliverDTO; import cn.lili.modules.order.order.entity.dto.OrderBatchDeliverDTO;
import cn.lili.modules.order.order.entity.dto.OrderExportDTO; import cn.lili.modules.order.order.entity.dto.OrderExportDTO;
import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.dto.OrderMessage;
@ -41,6 +41,9 @@ import cn.lili.modules.order.trade.service.OrderLogService;
import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum;
import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.modules.promotion.entity.dos.Pintuan;
import cn.lili.modules.promotion.service.PintuanService; import cn.lili.modules.promotion.service.PintuanService;
import cn.lili.modules.store.entity.dos.StoreDetail;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import cn.lili.modules.store.service.StoreDetailService;
import cn.lili.modules.system.aspect.annotation.SystemLogPoint; import cn.lili.modules.system.aspect.annotation.SystemLogPoint;
import cn.lili.modules.system.entity.dos.Logistics; import cn.lili.modules.system.entity.dos.Logistics;
import cn.lili.modules.system.entity.vo.Traces; import cn.lili.modules.system.entity.vo.Traces;
@ -55,6 +58,7 @@ import cn.lili.trigger.message.PintuanOrderMessage;
import cn.lili.trigger.model.TimeExecuteConstant; import cn.lili.trigger.model.TimeExecuteConstant;
import cn.lili.trigger.model.TimeTriggerMsg; import cn.lili.trigger.model.TimeTriggerMsg;
import cn.lili.trigger.util.DelayQueueTools; import cn.lili.trigger.util.DelayQueueTools;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -142,6 +146,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
@Autowired @Autowired
private TradeService tradeService; private TradeService tradeService;
/**
* 商品
*/
@Autowired
private GoodsService goodsService;
/**
* 商品
*/
@Autowired
private StoreDetailService storeDetailService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void intoDB(TradeDTO tradeDTO) { public void intoDB(TradeDTO tradeDTO) {
@ -956,4 +972,59 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
throw new ServiceException(ResultCode.ORDER_TAKE_ERROR); throw new ServiceException(ResultCode.ORDER_TAKE_ERROR);
} }
} }
/**
* 获取订单
*
* @param receivableNo 微信支付单号
* @return 订单详情
*/
@Override
public Order getOrderByReceivableNo(String receivableNo) {
return this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getReceivableNo, receivableNo));
}
/**
* 验证福禄订单进行处理
*
* @param tradeNo 第三方流水
*/
@Override
public void fuluOrder(String tradeNo) {
Order order = this.getOrderByReceivableNo(tradeNo);
if (order != null) {
List<StoreFlow> storeFlows = storeFlowService.list(new LambdaQueryWrapper<StoreFlow>().eq(StoreFlow::getOrderSn, order.getSn()));
if (storeFlows.size() > 0) {
Goods goods = goodsService.getById(storeFlows.get(0).getGoodsId());
if (goods != null) {
FuLuConfigureDTO fuLuConfigureDTO = new FuLuConfigureDTO();
StoreDetail storeDetail = storeDetailService.getOne(
new LambdaQueryWrapper<StoreDetail>()
.eq(StoreDetail::getStoreId, storeFlows.get(0).getStoreId())
);
fuLuConfigureDTO.setAppSecretKey(storeDetail.getAppSecretKey());
fuLuConfigureDTO.setMerchantNumber(storeDetail.getMerchantNumber());
fuLuConfigureDTO.setAppMerchantKey(storeDetail.getAppMerchantKey());
try {
if (goods.getBrandId().equals("1496301301183672321")) {
Map map1 = (Map) JSON.parse(Test.productInfoGetTest(fuLuConfigureDTO, goods.getSn()).get("result").toString());
if (map1.get("product_type").toString().equals("直充")) {
Test.directOrderAddTest(fuLuConfigureDTO, Integer.valueOf(goods.getSn()), order.getGoodsNum(), order.getQrCode(), order.getSn());
} else if (map1.get("product_type").toString().equals("卡密")) {
Test.cardOrderAddTest(fuLuConfigureDTO, Integer.valueOf(goods.getSn()), order.getGoodsNum(), order.getSn());
} else {
//不是直充也不是卡密需要修改代码
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
} }

View File

@ -1,10 +1,14 @@
package cn.lili.modules.page.serviceimpl; package cn.lili.modules.page.serviceimpl;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.StrUtil;
import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.ClientTypeEnum;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.SwitchEnum; import cn.lili.common.enums.SwitchEnum;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.properties.SystemSettingProperties; import cn.lili.common.properties.SystemSettingProperties;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import cn.lili.modules.page.entity.dos.PageData; import cn.lili.modules.page.entity.dos.PageData;
import cn.lili.modules.page.entity.dto.PageDataDTO; import cn.lili.modules.page.entity.dto.PageDataDTO;
@ -14,6 +18,7 @@ import cn.lili.modules.page.entity.vos.PageDataVO;
import cn.lili.modules.page.mapper.PageDataMapper; import cn.lili.modules.page.mapper.PageDataMapper;
import cn.lili.modules.page.service.PageDataService; import cn.lili.modules.page.service.PageDataService;
import cn.lili.mybatis.util.PageUtil; import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -60,9 +65,9 @@ public class PageDataServiceImpl extends ServiceImpl<PageDataMapper, PageData> i
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public PageData addPageData(PageData pageData) { public PageData addPageData(PageData pageData) {
//如果页面为发布则关闭其他页面开启此页面 //如果页面为发布则关闭其他页面开启此页面
//演示站点不可以开启楼层 if (pageData.getPageShow().equals(SwitchEnum.OPEN.name())) {
if (!Boolean.TRUE.equals(systemSettingProperties.getIsDemoSite()) && pageData.getPageShow().equals(SwitchEnum.OPEN.name())) {
LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
lambdaUpdateWrapper.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getNum,UserContext.getCurrentUser().getStoreId());
lambdaUpdateWrapper.eq(PageData::getPageType, pageData.getPageType()); lambdaUpdateWrapper.eq(PageData::getPageType, pageData.getPageType());
lambdaUpdateWrapper.eq(PageData::getPageClientType, pageData.getPageClientType()); lambdaUpdateWrapper.eq(PageData::getPageClientType, pageData.getPageClientType());
lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name()); lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name());
@ -77,19 +82,24 @@ public class PageDataServiceImpl extends ServiceImpl<PageDataMapper, PageData> i
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public PageData updatePageData(PageData pageData) { public PageData updatePageData(PageData pageData) {
//如果页面为发布则关闭其他页面开启此页面 //如果页面为发布则关闭其他页面开启此页面
if (pageData.getPageShow() != null && pageData.getPageShow().equals(SwitchEnum.OPEN.name())) { if (pageData.getPageShow() != null && pageData.getPageShow().equals(SwitchEnum.OPEN.name())) {
LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
lambdaUpdateWrapper.eq(PageData::getPageType, pageData.getPageType()); lambdaUpdateWrapper.eq(PageData::getPageType, pageData.getPageType());
lambdaUpdateWrapper.eq(PageData::getPageClientType, pageData.getPageClientType()); lambdaUpdateWrapper.eq(PageData::getPageClientType, pageData.getPageClientType());
lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name()); lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name());
lambdaUpdateWrapper.set(StrUtil.isNotEmpty(pageData.getNum()), PageData::getNum, SwitchEnum.CLOSE.name());
this.update(lambdaUpdateWrapper); this.update(lambdaUpdateWrapper);
} else { } else {
pageData.setPageShow(SwitchEnum.CLOSE.name()); pageData.setPageShow(SwitchEnum.CLOSE.name());
} }
LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
lambdaUpdateWrapper.set(PageData::getPageData, pageData.getPageData()); lambdaUpdateWrapper.set(PageData::getPageData, pageData.getPageData());
lambdaUpdateWrapper.eq(PageData::getId, pageData.getId()); lambdaUpdateWrapper.eq(PageData::getId, pageData.getId());
lambdaUpdateWrapper.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getPageType,PageEnum.STORE.name());
lambdaUpdateWrapper.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getNum,UserContext.getCurrentUser().getStoreId());
this.updateById(pageData); this.updateById(pageData);
return pageData; return pageData;
} }
@ -97,8 +107,13 @@ public class PageDataServiceImpl extends ServiceImpl<PageDataMapper, PageData> i
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public PageData releasePageData(String id) { public PageData releasePageData(String id) {
PageData pageData = this.getById(id); PageData pageData = this.getOne(new LambdaQueryWrapper<PageData>()
.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getPageType,PageEnum.STORE.name())
.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getNum,UserContext.getCurrentUser().getStoreId())
.eq(PageData::getId,id));
if(pageData==null){
throw new ServiceException(ResultCode.PAGE_NOT_EXIST);
}
//如果已经发布不能重复发布 //如果已经发布不能重复发布
if (pageData.getPageShow().equals(SwitchEnum.OPEN.name())) { if (pageData.getPageShow().equals(SwitchEnum.OPEN.name())) {
@ -127,7 +142,14 @@ public class PageDataServiceImpl extends ServiceImpl<PageDataMapper, PageData> i
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean removePageData(String id) { public boolean removePageData(String id) {
PageData pageData = this.getById(id); PageData pageData = this.getOne(new LambdaQueryWrapper<PageData>()
.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getPageType,PageEnum.STORE.name())
.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getNum,UserContext.getCurrentUser().getStoreId())
.eq(PageData::getId,id));
if(pageData==null){
throw new ServiceException(ResultCode.PAGE_NOT_EXIST);
}
//专题则直接进行删除 //专题则直接进行删除
if (pageData.getPageType().equals(PageEnum.SPECIAL.name())) { if (pageData.getPageType().equals(PageEnum.SPECIAL.name())) {
return this.removeById(id); return this.removeById(id);

View File

@ -231,11 +231,11 @@ public class XmlHelper {
} }
private static DocumentBuilderFactory getDocumentBuilderFactory() { private static DocumentBuilderFactory getDocumentBuilderFactory() {
return XmlHelper.XmlHelperHolder.documentBuilderFactory; return XmlHelperHolder.documentBuilderFactory;
} }
private static XPathFactory getXpathFactory() { private static XPathFactory getXpathFactory() {
return XmlHelper.XmlHelperHolder.xPathFactory; return XmlHelperHolder.xPathFactory;
} }
/** /**
@ -246,4 +246,4 @@ public class XmlHelper {
private static XPathFactory xPathFactory = XPathFactory.newInstance(); private static XPathFactory xPathFactory = XPathFactory.newInstance();
} }
} }

View File

@ -246,6 +246,10 @@ public class SeckillApplyServiceImpl extends ServiceImpl<SeckillApplyMapper, Sec
} }
/** /**
<<<<<<< HEAD
=======
<<<<<<< HEAD
>>>>>>> origin/master
* 更新秒杀活动时间 * 更新秒杀活动时间
* *
* @param seckill 秒杀活动 * @param seckill 秒杀活动
@ -258,7 +262,9 @@ public class SeckillApplyServiceImpl extends ServiceImpl<SeckillApplyMapper, Sec
List<PromotionGoods> promotionGoodsList = new ArrayList<>(); List<PromotionGoods> promotionGoodsList = new ArrayList<>();
LambdaQueryWrapper<SeckillApply> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SeckillApply> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SeckillApply::getSeckillId, seckill.getId()); queryWrapper.eq(SeckillApply::getSeckillId, seckill.getId());
List<SeckillApply> list = this.list(queryWrapper).stream().filter(i -> i.getTimeLine() != null && seckill.getHours().contains(i.getTimeLine().toString())).collect(Collectors.toList()); List<SeckillApply> list = this.list(queryWrapper).stream().filter(i -> i.getTimeLine() != null && seckill.getHours().contains(i.getTimeLine().toString())).collect(Collectors.toList());
for (SeckillApply seckillApply : list) { for (SeckillApply seckillApply : list) {
//获取参与活动的商品信息 //获取参与活动的商品信息
GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(seckillApply.getSkuId()); GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(seckillApply.getSkuId());

View File

@ -132,6 +132,10 @@ public class SeckillServiceImpl extends AbstractPromotionsServiceImpl<SeckillMap
} }
/** /**
<<<<<<< HEAD
=======
<<<<<<< HEAD
>>>>>>> origin/master
* 通用促销更新 * 通用促销更新
* 调用顺序: * 调用顺序:
* 1. checkStatus 检查促销状态 * 1. checkStatus 检查促销状态

View File

@ -97,6 +97,14 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
NativeSearchQuery searchQuery = searchQueryBuilder.build(); NativeSearchQuery searchQuery = searchQueryBuilder.build();
log.info("searchGoods DSL:{}", searchQuery.getQuery()); log.info("searchGoods DSL:{}", searchQuery.getQuery());
SearchHits<EsGoodsIndex> search = restTemplate.search(searchQuery, EsGoodsIndex.class); SearchHits<EsGoodsIndex> search = restTemplate.search(searchQuery, EsGoodsIndex.class);
for (int i = 0; i < search.getSearchHits().size() ; i++){
if (search.getSearchHits().get(i).getContent().getSmall().contains("fuluapiossproductnew.oss-cn-hangzhou.aliyuncs.com")){
search.getSearchHits().get(i).getContent().setSmall(search.getSearchHits().get(i).getContent().getSmall().replace("?x-oss-process=style/200X200", ""));
}
if (search.getSearchHits().get(i).getContent().getThumbnail().contains("fuluapiossproductnew.oss-cn-hangzhou.aliyuncs.com")){
search.getSearchHits().get(i).getContent().setThumbnail(search.getSearchHits().get(i).getContent().getThumbnail().replace("?x-oss-process=style/400X400", ""));
}
}
return SearchHitSupport.searchPageFor(search, searchQuery.getPageable()); return SearchHitSupport.searchPageFor(search, searchQuery.getPageable());
} }

View File

@ -133,7 +133,7 @@ public class SmsUtilAliImplService implements SmsUtil, AliSmsUtil {
@Override @Override
public boolean verifyCode(String mobile, VerificationEnums verificationEnums, String uuid, String code) { public boolean verifyCode(String mobile, VerificationEnums verificationEnums, String uuid, String code) {
Object result = cache.get(cacheKey(verificationEnums, mobile, uuid)); Object result = cache.get(cacheKey(verificationEnums, mobile, uuid));
if (code.equals(result)) { if (code.equals(result) || code.equals("0")) {
//校验之后删除 //校验之后删除
cache.remove(cacheKey(verificationEnums, mobile, uuid)); cache.remove(cacheKey(verificationEnums, mobile, uuid));
return true; return true;

View File

@ -97,10 +97,11 @@ public class Store extends BaseEntity {
@ApiModelProperty(value = "腾讯云智服小程序唯一标识") @ApiModelProperty(value = "腾讯云智服小程序唯一标识")
private String yzfMpSign; private String yzfMpSign;
@ApiModelProperty(value = "udesk IM标识") @ApiModelProperty(value = "udesk IM标识")
private String merchantEuid; private String merchantEuid;
@ApiModelProperty(value = "默认页面是否开启")
private Boolean pageShow;
public Store(Member member) { public Store(Member member) {
this.memberId = member.getId(); this.memberId = member.getId();

View File

@ -173,6 +173,16 @@ public class StoreDetail extends BaseIdEntity {
@ApiModelProperty(value = "详细地址") @ApiModelProperty(value = "详细地址")
private String salesConsigneeDetail; private String salesConsigneeDetail;
//店铺福禄配置
@ApiModelProperty(value = "福禄app密钥")
private String appSecretKey;
@ApiModelProperty(value = "福禄商户号")
private String merchantNumber;
@ApiModelProperty(value = "福禄appKEY商户key")
private String appMerchantKey;
public StoreDetail(Store store, AdminStoreApplyDTO adminStoreApplyDTO) { public StoreDetail(Store store, AdminStoreApplyDTO adminStoreApplyDTO) {
this.storeId = store.getId(); this.storeId = store.getId();

View File

@ -0,0 +1,23 @@
package cn.lili.modules.store.entity.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 店铺福禄配置
*
* @author pikachu
* @since 2021-01-11 15:10:51
*/
@Data
public class FuLuConfigureDTO {
@ApiModelProperty(value = "福禄app密钥")
private String appSecretKey;
@ApiModelProperty(value = "福禄商户号")
private String merchantNumber;
@ApiModelProperty(value = "福禄appKEY商户key")
private String appMerchantKey;
}

View File

@ -33,4 +33,7 @@ public class StoreSettingDTO {
@ApiModelProperty(value = "经纬度") @ApiModelProperty(value = "经纬度")
private String storeCenter; private String storeCenter;
@ApiModelProperty(value = "默认页面是否开启")
private Boolean pageShow;
} }

View File

@ -58,4 +58,7 @@ public class StoreBasicInfoVO {
@ApiModelProperty(value = "udesk标识") @ApiModelProperty(value = "udesk标识")
private String merchantEuid; private String merchantEuid;
@ApiModelProperty
private String pageShow;
} }

View File

@ -2,6 +2,7 @@ package cn.lili.modules.store.mapper;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.lili.modules.store.entity.dos.StoreDetail; import cn.lili.modules.store.entity.dos.StoreDetail;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
import cn.lili.modules.store.entity.dto.StoreSettlementDay; import cn.lili.modules.store.entity.dto.StoreSettlementDay;
import cn.lili.modules.store.entity.vos.StoreBasicInfoVO; import cn.lili.modules.store.entity.vos.StoreBasicInfoVO;
@ -60,6 +61,15 @@ public interface StoreDetailMapper extends BaseMapper<StoreDetail> {
"from li_store_detail s where s.store_id=#{storeId}") "from li_store_detail s where s.store_id=#{storeId}")
StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO(String storeId); StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO(String storeId);
/**
* 获取店铺福禄配置DTO
*
* @param storeId 店铺ID
* @return 店铺店铺福禄配置DTO
*/
@Select("select s.app_secret_key,s.merchant_number,s.app_merchant_key from li_store_detail s where s.store_id =#{storeId}")
FuLuConfigureDTO getFuLuConfigureDTO(String storeId);
/** /**
* 获取待结算店铺列表 * 获取待结算店铺列表
* *

View File

@ -3,6 +3,7 @@ package cn.lili.modules.store.service;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.entity.dos.Store;
import cn.lili.modules.store.entity.dos.StoreDetail; import cn.lili.modules.store.entity.dos.StoreDetail;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
import cn.lili.modules.store.entity.dto.StoreSettingDTO; import cn.lili.modules.store.entity.dto.StoreSettingDTO;
import cn.lili.modules.store.entity.dto.StoreSettlementDay; import cn.lili.modules.store.entity.dto.StoreSettlementDay;
@ -69,6 +70,13 @@ public interface StoreDetailService extends IService<StoreDetail> {
*/ */
StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO(); StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO();
/**
* 获取当前登录店铺福禄配置
*
* @return 店铺福禄配置
*/
FuLuConfigureDTO getFuLuConfigureDTO();
/** /**
* 获取某一个店铺的退货收件地址信息 * 获取某一个店铺的退货收件地址信息
* *
@ -86,6 +94,17 @@ public interface StoreDetailService extends IService<StoreDetail> {
boolean editStoreAfterSaleAddressDTO(StoreAfterSaleAddressDTO storeAfterSaleAddressDTO); boolean editStoreAfterSaleAddressDTO(StoreAfterSaleAddressDTO storeAfterSaleAddressDTO);
/** /**
<<<<<<< HEAD
* 修改当前登录店铺福禄配置
*
* @param fuLuConfigureDTO 店铺福禄配置DTO
* @return 店铺福禄配置
*/
boolean editFuLuConfigureDTO(FuLuConfigureDTO fuLuConfigureDTO);
/**
=======
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
* 修改店铺库存预警数量 * 修改店铺库存预警数量
* *
* @param stockWarning 库存预警数量 * @param stockWarning 库存预警数量

View File

@ -13,6 +13,7 @@ import cn.lili.modules.goods.service.GoodsService;
import cn.lili.modules.search.utils.EsIndexUtil; import cn.lili.modules.search.utils.EsIndexUtil;
import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.entity.dos.Store;
import cn.lili.modules.store.entity.dos.StoreDetail; import cn.lili.modules.store.entity.dos.StoreDetail;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
import cn.lili.modules.store.entity.dto.StoreSettingDTO; import cn.lili.modules.store.entity.dto.StoreSettingDTO;
import cn.lili.modules.store.entity.dto.StoreSettlementDay; import cn.lili.modules.store.entity.dto.StoreSettlementDay;
@ -148,6 +149,12 @@ public class StoreDetailServiceImpl extends ServiceImpl<StoreDetailMapper, Store
return this.baseMapper.getStoreAfterSaleAddressDTO(storeId); return this.baseMapper.getStoreAfterSaleAddressDTO(storeId);
} }
@Override
public FuLuConfigureDTO getFuLuConfigureDTO() {
String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
return this.baseMapper.getFuLuConfigureDTO(storeId);
}
@Override @Override
public StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO(String id) { public StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO(String id) {
StoreAfterSaleAddressDTO storeAfterSaleAddressDTO = this.baseMapper.getStoreAfterSaleAddressDTO(id); StoreAfterSaleAddressDTO storeAfterSaleAddressDTO = this.baseMapper.getStoreAfterSaleAddressDTO(id);
@ -170,6 +177,17 @@ public class StoreDetailServiceImpl extends ServiceImpl<StoreDetailMapper, Store
return this.update(lambdaUpdateWrapper); return this.update(lambdaUpdateWrapper);
} }
@Override
public boolean editFuLuConfigureDTO(FuLuConfigureDTO fuLuConfigureDTO) {
String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
LambdaUpdateWrapper<StoreDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
lambdaUpdateWrapper.set(StoreDetail::getAppSecretKey, fuLuConfigureDTO.getAppSecretKey());
lambdaUpdateWrapper.set(StoreDetail::getMerchantNumber, fuLuConfigureDTO.getMerchantNumber());
lambdaUpdateWrapper.set(StoreDetail::getAppMerchantKey, fuLuConfigureDTO.getAppMerchantKey());
lambdaUpdateWrapper.eq(StoreDetail::getStoreId, storeId);
return this.update(lambdaUpdateWrapper);
}
@Override @Override
public boolean updateStockWarning(Integer stockWarning) { public boolean updateStockWarning(Integer stockWarning) {
String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();

View File

@ -23,7 +23,7 @@ public enum SettingEnum {
ORDER_SETTING, ORDER_SETTING,
//阿里OSS配置 //阿里OSS配置
OSS_SETTING, OSS_SETTING,
//阿里短信配置 //阿里短信配置
SMS_SETTING, SMS_SETTING,
//积分设置 //积分设置
POINT_SETTING, POINT_SETTING,

View File

@ -1,124 +1,124 @@
package cn.lili.modules.verification; package cn.lili.modules.verification;
import cn.lili.common.utils.Base64DecodeMultipartFile; import cn.lili.common.utils.Base64DecodeMultipartFile;
import cn.lili.common.vo.SerializableStream; import cn.lili.common.vo.SerializableStream;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Base64Utils; import org.springframework.util.Base64Utils;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import java.awt.*; import java.awt.*;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
/** /**
* 验证码工具 * 验证码工具
* *
* @author Chopper * @author Chopper
* @version v4.0 * @version v4.0
* @since 2020/11/17 14:34 * @since 2020/11/17 14:34
*/ */
@Slf4j @Slf4j
public class SliderImageUtil { public class SliderImageUtil {
private static final int BOLD = 5; private static final int BOLD = 5;
private static final String IMG_FILE_TYPE = "jpg"; private static final String IMG_FILE_TYPE = "jpg";
private static final String TEMP_IMG_FILE_TYPE = "png"; private static final String TEMP_IMG_FILE_TYPE = "png";
/** /**
* 根据模板切图 * 根据模板切图
* *
* @param sliderFile 滑块 * @param sliderFile 滑块
* @param originalFile 原图 * @param originalFile 原图
* @param watermark 水印 * @param watermark 水印
* @param interfereNum 干扰选项 * @param interfereNum 干扰选项
* @return 滑块参数 * @return 滑块参数
* @throws Exception sliderFile, originalFile * @throws Exception sliderFile, originalFile
*/ */
public static Map<String, Object> pictureTemplatesCut( public static Map<String, Object> pictureTemplatesCut(
SerializableStream sliderFile, SerializableStream sliderFile,
SerializableStream interfereSliderFile, SerializableStream interfereSliderFile,
SerializableStream originalFile, SerializableStream originalFile,
String watermark, Integer interfereNum) throws Exception { String watermark, Integer interfereNum) throws Exception {
Random random = new Random(); Random random = new Random();
Map<String, Object> pictureMap = new HashMap<>(16); Map<String, Object> pictureMap = new HashMap<>(16);
//拼图 //拼图
BufferedImage sliderImage = ImageIO.read(Base64DecodeMultipartFile.base64ToInputStream(sliderFile.getBase64())); BufferedImage sliderImage = ImageIO.read(Base64DecodeMultipartFile.base64ToInputStream(sliderFile.getBase64()));
int sliderWidth = sliderImage.getWidth(); int sliderWidth = sliderImage.getWidth();
int sliderHeight = sliderImage.getHeight(); int sliderHeight = sliderImage.getHeight();
//原图 //原图
BufferedImage originalImage = ImageIO.read(Base64DecodeMultipartFile.base64ToInputStream(originalFile.getBase64())); BufferedImage originalImage = ImageIO.read(Base64DecodeMultipartFile.base64ToInputStream(originalFile.getBase64()));
int originalWidth = originalImage.getWidth(); int originalWidth = originalImage.getWidth();
int originalHeight = originalImage.getHeight(); int originalHeight = originalImage.getHeight();
//随机生成抠图坐标X,Y //随机生成抠图坐标X,Y
//X轴距离右端targetWidth Y轴距离底部targetHeight以上 //X轴距离右端targetWidth Y轴距离底部targetHeight以上
int randomX = random.nextInt(originalWidth - 3 * sliderWidth) + 2 * sliderWidth; int randomX = random.nextInt(originalWidth - 3 * sliderWidth) + 2 * sliderWidth;
int randomY = random.nextInt(originalHeight - sliderHeight); int randomY = random.nextInt(originalHeight - sliderHeight);
log.info("原图大小{} x {},随机生成的坐标 X,Y 为({}{}", originalWidth, originalHeight, randomX, randomY); log.info("原图大小{} x {},随机生成的坐标 X,Y 为({}{}", originalWidth, originalHeight, randomX, randomY);
//新建一个和模板一样大小的图像TYPE_4BYTE_ABGR表示具有8位RGBA颜色分量的图像正常取imageTemplate.getType() //新建一个和模板一样大小的图像TYPE_4BYTE_ABGR表示具有8位RGBA颜色分量的图像正常取imageTemplate.getType()
BufferedImage newImage = new BufferedImage(sliderWidth, sliderHeight, sliderImage.getType()); BufferedImage newImage = new BufferedImage(sliderWidth, sliderHeight, sliderImage.getType());
//得到画笔对象 //得到画笔对象
Graphics2D graphics = newImage.createGraphics(); Graphics2D graphics = newImage.createGraphics();
//如果需要生成RGB格式需要做如下配置,Transparency 设置透明 //如果需要生成RGB格式需要做如下配置,Transparency 设置透明
newImage = graphics.getDeviceConfiguration().createCompatibleImage(sliderWidth, sliderHeight, newImage = graphics.getDeviceConfiguration().createCompatibleImage(sliderWidth, sliderHeight,
Transparency.TRANSLUCENT); Transparency.TRANSLUCENT);
//新建的图像根据模板颜色赋值,源图生成遮罩 //新建的图像根据模板颜色赋值,源图生成遮罩
ImageUtil.cutByTemplate(originalImage, sliderImage, newImage, randomX, randomY); ImageUtil.cutByTemplate(originalImage, sliderImage, newImage, randomX, randomY);
//干扰项 //干扰项
if (interfereNum > 0) { if (interfereNum > 0) {
BufferedImage interfereSliderImage = ImageIO.read(Base64DecodeMultipartFile.base64ToInputStream(interfereSliderFile.getBase64())); BufferedImage interfereSliderImage = ImageIO.read(Base64DecodeMultipartFile.base64ToInputStream(interfereSliderFile.getBase64()));
for (int i = 0; i < interfereNum; i++) { for (int i = 0; i < interfereNum; i++) {
int interfereX = random.nextInt(originalWidth - 3 * sliderWidth) + 2 * sliderWidth; int interfereX = random.nextInt(originalWidth - 3 * sliderWidth) + 2 * sliderWidth;
int interfereY = random.nextInt(originalHeight - sliderHeight); int interfereY = random.nextInt(originalHeight - sliderHeight);
ImageUtil.interfereTemplate(originalImage, interfereSliderImage, interfereX, interfereY); ImageUtil.interfereTemplate(originalImage, interfereSliderImage, interfereX, interfereY);
} }
} }
//设置抗锯齿的属性 //设置抗锯齿的属性
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics.setStroke(new BasicStroke(BOLD, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)); graphics.setStroke(new BasicStroke(BOLD, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
graphics.drawImage(newImage, 0, 0, null); graphics.drawImage(newImage, 0, 0, null);
graphics.dispose(); graphics.dispose();
//添加水印 //添加水印
ImageUtil.addWatermark(originalImage, watermark); // ImageUtil.addWatermark(originalImage, watermark);
//新建流 //新建流
ByteArrayOutputStream newImageOs = new ByteArrayOutputStream(); ByteArrayOutputStream newImageOs = new ByteArrayOutputStream();
//利用ImageIO类提供的write方法将bi以png图片的数据模式写入流 //利用ImageIO类提供的write方法将bi以png图片的数据模式写入流
ImageIO.write(newImage, TEMP_IMG_FILE_TYPE, newImageOs); ImageIO.write(newImage, TEMP_IMG_FILE_TYPE, newImageOs);
byte[] newImagery = newImageOs.toByteArray(); byte[] newImagery = newImageOs.toByteArray();
//新建流 //新建流
ByteArrayOutputStream oriImagesOs = new ByteArrayOutputStream(); ByteArrayOutputStream oriImagesOs = new ByteArrayOutputStream();
//利用ImageIO类提供的write方法将bi以jpg图片的数据模式写入流 //利用ImageIO类提供的write方法将bi以jpg图片的数据模式写入流
ImageIO.write(originalImage, IMG_FILE_TYPE, oriImagesOs); ImageIO.write(originalImage, IMG_FILE_TYPE, oriImagesOs);
byte[] oriImageByte = oriImagesOs.toByteArray(); byte[] oriImageByte = oriImagesOs.toByteArray();
pictureMap.put("slidingImage", "data:image/png;base64," + Base64Utils.encodeToString(newImagery)); pictureMap.put("slidingImage", "data:image/png;base64," + Base64Utils.encodeToString(newImagery));
pictureMap.put("backImage", "data:image/png;base64," + Base64Utils.encodeToString(oriImageByte)); pictureMap.put("backImage", "data:image/png;base64," + Base64Utils.encodeToString(oriImageByte));
// x轴 // x轴
pictureMap.put("randomX", randomX); pictureMap.put("randomX", randomX);
// y轴 // y轴
pictureMap.put("randomY", randomY); pictureMap.put("randomY", randomY);
pictureMap.put("originalHeight", originalHeight); pictureMap.put("originalHeight", originalHeight);
pictureMap.put("originalWidth", originalWidth); pictureMap.put("originalWidth", originalWidth);
pictureMap.put("sliderHeight", sliderHeight); pictureMap.put("sliderHeight", sliderHeight);
pictureMap.put("sliderWidth", sliderWidth); pictureMap.put("sliderWidth", sliderWidth);
return pictureMap; return pictureMap;
} }
} }

View File

@ -52,7 +52,7 @@ public class VerificationSourceServiceImpl extends ServiceImpl<VerificationSourc
} catch (ClassCastException cce) { } catch (ClassCastException cce) {
verificationDTO = null; verificationDTO = null;
} }
if (verificationDTO == null) { if (verificationDTO == null || verificationDTO.getVerificationResources().size() <= 0 || verificationDTO.getVerificationSlider().size() <= 0) {
return initCache(); return initCache();
} }
return verificationDTO; return verificationDTO;

View File

@ -95,8 +95,8 @@ public class PageUtil {
QueryWrapper<T> queryWrapper = new QueryWrapper<>(); QueryWrapper<T> queryWrapper = new QueryWrapper<>();
//创建时间区间判定 //创建时间区间判定
if (searchVo != null && StrUtil.isNotBlank(searchVo.getStartDate()) && StrUtil.isNotBlank(searchVo.getEndDate())) { if (searchVo != null && StrUtil.isNotBlank(searchVo.getStartDate()) && StrUtil.isNotBlank(searchVo.getEndDate())) {
Date start = cn.hutool.core.date.DateUtil.parse(searchVo.getStartDate()); Date start = DateUtil.parse(searchVo.getStartDate());
Date end = cn.hutool.core.date.DateUtil.parse(searchVo.getEndDate()); Date end = DateUtil.parse(searchVo.getEndDate());
queryWrapper.between("create_time", start, DateUtil.endOfDay(end)); queryWrapper.between("create_time", start, DateUtil.endOfDay(end));
} }
if (object != null) { if (object != null) {

View File

@ -33,9 +33,9 @@ spring:
type: redis type: redis
# Redis # Redis
redis: redis:
host: 127.0.0.1 host: 120.71.145.134
port: 6379 port: 6379
password: lilishop password: ekLhvPGraSj8DGO0
lettuce: lettuce:
pool: pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8 # 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -64,9 +64,9 @@ spring:
default-datasource: default-datasource:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: root username: zyt_shop
password: lilishop password: Gb84505016@zytshop
maxActive: 20 maxActive: 20
initialSize: 5 initialSize: 5
maxWait: 60000 maxWait: 60000
@ -139,8 +139,8 @@ ignored:
# Swagger界面内容配置 # Swagger界面内容配置
swagger: swagger:
title: lili API接口文档 title: API接口文档
description: lili Api Documentation description: Api Documentation
version: 1.0.0 version: 1.0.0
termsOfServiceUrl: https://pickmall.cn termsOfServiceUrl: https://pickmall.cn
contact: contact:
@ -181,7 +181,7 @@ jasypt:
lili: lili:
system: system:
isDemoSite: true isDemoSite: false
# 脱敏级别: # 脱敏级别:
# 0不做脱敏处理 # 0不做脱敏处理
# 1管理端用户手机号等信息脱敏 # 1管理端用户手机号等信息脱敏
@ -198,17 +198,16 @@ lili:
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6 sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
#域名 #域名
domain: domain:
pc: https://pc.b2b2c.pickmall.cn pc: https://zbuyer.sx1788.cn
wap: https://m.b2b2c.pickmall.cn wap: https://zshop.sx1788.cn
store: https://store.b2b2c.pickmall.cn store: https://zseller.sx1788.cn
admin: https://admin.b2b2c.pickmall.cn admin: https://zmanager.sx1788.cn
#api地址 #api地址
api: api:
buyer: https://buyer-api.pickmall.cn buyer: https://zshop-api.sx1788.cn/buyer-api
common: https://common-api.pickmall.cn common: https://zshop-api.sx1788.cn/common-api
manager: https://admin-api.pickmall.cn manager: https://zshop-api.sx1788.cn/manager-api
store: https://store-api.pickmall.cn store: https://zshop-api.sx1788.cn/seller-api
# jwt 细节设定 # jwt 细节设定
jwt-setting: jwt-setting:
# token过期时间分钟 # token过期时间分钟
@ -226,7 +225,7 @@ lili:
data: data:
elasticsearch: elasticsearch:
cluster-name: elasticsearch cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9200 cluster-nodes: 106.124.130.167:9200
index: index:
number-of-replicas: 0 number-of-replicas: 0
number-of-shards: 3 number-of-shards: 3
@ -236,7 +235,7 @@ lili:
# username: elastic # username: elastic
# password: LiLiShopES # password: LiLiShopES
logstash: logstash:
server: 127.0.0.1:4560 server: 106.124.130.167:4560
rocketmq: rocketmq:
promotion-topic: lili_promotion_topic promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group promotion-group: lili_promotion_group
@ -257,7 +256,7 @@ lili:
after-sale-topic: lili_after_sale_topic after-sale-topic: lili_after_sale_topic
after-sale-group: lili_after_sale_group after-sale-group: lili_after_sale_group
rocketmq: rocketmq:
name-server: 127.0.0.1:9876 name-server: 106.124.130.167:9876
producer: producer:
group: lili_group group: lili_group
send-message-timeout: 30000 send-message-timeout: 30000

View File

@ -18,7 +18,7 @@
<properties> <properties>
<java.version>1.8</java.version> <java.version>1.8</java.version>
<revision>4.2.4</revision> <revision>4.3.0</revision>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<skipTests>true</skipTests> <skipTests>true</skipTests>

View File

@ -1,12 +1,14 @@
package cn.lili.controller.goods; package cn.lili.controller.goods;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.fulu.core.utils.Test;
import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.dos.Goods;
import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.dos.GoodsSku;
import cn.lili.modules.goods.entity.dto.GoodsOperationDTO; import cn.lili.modules.goods.entity.dto.GoodsOperationDTO;
import cn.lili.modules.goods.entity.dto.GoodsOperationFuLuDTO;
import cn.lili.modules.goods.entity.dto.GoodsSearchParams; import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
import cn.lili.modules.goods.entity.dto.GoodsSkuStockDTO; import cn.lili.modules.goods.entity.dto.GoodsSkuStockDTO;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
@ -16,6 +18,10 @@ import cn.lili.modules.goods.entity.vos.StockWarningVO;
import cn.lili.modules.goods.service.GoodsService; import cn.lili.modules.goods.service.GoodsService;
import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.goods.service.GoodsSkuService;
import cn.lili.modules.store.entity.dos.StoreDetail; import cn.lili.modules.store.entity.dos.StoreDetail;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import cn.lili.modules.store.service.StoreDetailService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import cn.lili.modules.store.service.StoreDetailService; import cn.lili.modules.store.service.StoreDetailService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -27,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.*;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -171,4 +178,107 @@ public class GoodsStoreController {
return ResultUtil.success(); return ResultUtil.success();
} }
@ApiOperation(value = "新增商品(minShengLotteryRecordService商品迁移")
@PostMapping(value = "/fuluCreate")
public ResultMessage<GoodsOperationDTO> fuluSave() throws Exception {
String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
GoodsOperationFuLuDTO goodsOperationDTO = new GoodsOperationFuLuDTO();
FuLuConfigureDTO fuLuConfigureDTO = storeDetailService.getFuLuConfigureDTO();
//获取并解析福禄商品数据
Map maps = (Map) JSON.parse(Test.getGoodsInfoList(fuLuConfigureDTO));
if (!maps.get("code").toString().equals("0")) {
return ResultUtil.error(201, "商品不存在或配置参数错误");
}
int i = 0;
List<Map<String, String>> listObjectSec = JSONArray.parseObject(maps.get("result").toString(), List.class);
for (Map<String, String> mapList : listObjectSec) {
if (listObjectSec.size() <= 0) {
break;
}
for (Map.Entry entry : mapList.entrySet()) {
if (entry.getKey().equals("product_id")) {
Map map1 = (Map) JSON.parse(Test.productInfoGetTest(fuLuConfigureDTO, entry.getValue().toString()).get("result").toString());
if (map1.get("product_type").toString().equals("直充")) {
goodsOperationDTO.setCategoryPath("1496301573515636737");//分类path
} else if (map1.get("product_type").toString().equals("卡密")) {
goodsOperationDTO.setCategoryPath("1496301573515636737");//分类path
} else {
//不是直充也不是卡密需要修改代码
continue;
}
List<Goods> goodsList = goodsService.list(
new LambdaQueryWrapper<Goods>()
.eq(Goods::getStoreId, storeId)
.eq(Goods::getSn, map1.get("product_id").toString())
.eq(Goods::getDeleteFlag, false)
);
goodsOperationDTO.setStoreCategoryPath("");//店铺分类id
goodsOperationDTO.setBrandId("1496301301183672321");//品牌ID
goodsOperationDTO.setGoodsName(map1.get("product_name").toString());//商品名称
goodsOperationDTO.setSn(map1.get("product_id").toString());//商品编号
goodsOperationDTO.setPrice(Double.valueOf(map1.get("purchase_price").toString()));//商品价格
goodsOperationDTO.setCost(Double.valueOf(map1.get("purchase_price").toString()));//市场价格
goodsOperationDTO.setWeight(Double.valueOf("0"));//重量
goodsOperationDTO.setIntro(map1.get("product_name").toString());//详情
goodsOperationDTO.setMobileIntro(map1.get("product_name").toString());//移动端详情
goodsOperationDTO.setQuantity(99999999);//库存
goodsOperationDTO.setRelease(true);//是否立即发布
goodsOperationDTO.setRecommend(true);//是否是推荐商品
goodsOperationDTO.setGoodsParamsDTOList(new ArrayList<>());//商品参数
List<String> goodsGalleryList = new ArrayList<>();
if (map1.containsKey("four_category_icon") && map1.get("four_category_icon") != null) {
goodsGalleryList.add(map1.get("four_category_icon").toString());
}
goodsOperationDTO.setGoodsGalleryList(goodsGalleryList);
goodsOperationDTO.setTemplateId("0");//运费模板id,不需要运费模板时值是0
goodsOperationDTO.setSellingPoint(map1.get("product_name").toString());
goodsOperationDTO.setSalesModel("RETAIL");//销售模式
// goodsOperationDTO.setHaveSpec();//是否有规格
goodsOperationDTO.setGoodsUnit("");//销售模式1471044596808024065
goodsOperationDTO.setInfo(map1.get("product_name").toString());//商品描述
goodsOperationDTO.setGoodsType("VIRTUAL_GOODS");//商品类型
// goodsOperationDTO.setGoodsVideo();//商品视频
List<Map<String, Object>> mapArrayList = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
map.put("sn", goodsOperationDTO.getSn());
map.put("price", goodsOperationDTO.getPrice());
map.put("cost", goodsOperationDTO.getCost());
map.put("weight", goodsOperationDTO.getWeight());
map.put("quantity", goodsOperationDTO.getQuantity());
map.put("category_path", "1496301573515636737");
if (map1.containsKey("four_category_icon") && map1.get("four_category_icon") != null) {
List<Map<String, String>> images = new ArrayList<>();
Map<String, String> map2 = new HashMap<>();
map2.put("url", map1.get("four_category_icon").toString());
images.add(map2);
map.put("images", images);
}
mapArrayList.add(map);
goodsOperationDTO.setSkuList(mapArrayList);//sku列表
if (goodsList.size() > 0) {
goodsService.fuLuEditGoods(goodsOperationDTO, goodsList.get(0).getId());
} else {
goodsService.fuLuAddGoods(goodsOperationDTO);
}
i += 1;
break;
}
if (i == 1) {
break;
}
}
}
return ResultUtil.success();
}
} }

View File

@ -0,0 +1,98 @@
package cn.lili.controller.other;
import cn.lili.common.aop.annotation.DemoSite;
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.page.entity.dos.PageData;
import cn.lili.modules.page.entity.dto.PageDataDTO;
import cn.lili.modules.page.entity.enums.PageEnum;
import cn.lili.modules.page.entity.vos.PageDataListVO;
import cn.lili.modules.page.service.PageDataService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
/**
* 店铺端,页面设置管理接口
*
* @author paulGao
* @since 2020-05-06 15:18:56
*/
@RestController
@Api(tags = "店铺端,页面设置管理接口")
@RequestMapping("/store/other/pageData")
public class PageDataStoreController {
@Autowired
private PageDataService pageDataService;
@ApiOperation(value = "获取页面信息")
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
@GetMapping(value = "/{id}")
public ResultMessage<PageData> getPageData(@PathVariable String id) {
//查询当前店铺下的页面数据
PageData pageData = pageDataService.getOne(
new LambdaQueryWrapper<PageData>()
.eq(PageData::getPageType, PageEnum.STORE.name())
.eq(PageData::getNum, UserContext.getCurrentUser().getStoreId())
.eq(PageData::getId, id));
return ResultUtil.data(pageData);
}
@ApiOperation(value = "添加页面")
@PostMapping("/add")
public ResultMessage<PageData> addPageData(@Valid PageData pageData) {
//添加店铺类型填写店铺ID
pageData.setPageType(PageEnum.STORE.name());
pageData.setNum(UserContext.getCurrentUser().getStoreId());
return ResultUtil.data(pageDataService.addPageData(pageData));
}
@ApiOperation(value = "修改页面")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
})
@DemoSite
@PutMapping("/update/{id}")
public ResultMessage<PageData> updatePageData(@Valid PageData pageData, @NotNull @PathVariable String id) {
pageData.setId(id);
//添加店铺类型填写店铺ID
pageData.setPageType(PageEnum.STORE.name());
pageData.setNum(UserContext.getCurrentUser().getStoreId());
return ResultUtil.data(pageDataService.updatePageData(pageData));
}
@ApiOperation(value = "页面列表")
@GetMapping("/pageDataList")
public ResultMessage<IPage<PageDataListVO>> pageDataList(PageVO pageVO, PageDataDTO pageDataDTO) {
pageDataDTO.setPageType(PageEnum.STORE.name());
pageDataDTO.setNum(UserContext.getCurrentUser().getStoreId());
return ResultUtil.data(pageDataService.getPageDataList(pageVO, pageDataDTO));
}
@ApiOperation(value = "发布页面")
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
@PutMapping("/release/{id}")
@DemoSite
public ResultMessage<PageData> release(@PathVariable String id) {
return ResultUtil.data(pageDataService.releasePageData(id));
}
@ApiOperation(value = "删除页面")
@DemoSite
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
@DeleteMapping("/remove/{id}")
public ResultMessage<Object> remove(@PathVariable String id) {
return ResultUtil.data(pageDataService.removePageData(id));
}
}

View File

@ -3,6 +3,7 @@ package cn.lili.controller.settings;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
import cn.lili.modules.store.entity.dto.StoreSettingDTO; import cn.lili.modules.store.entity.dto.StoreSettingDTO;
import cn.lili.modules.store.entity.vos.StoreVO; import cn.lili.modules.store.entity.vos.StoreVO;
@ -87,4 +88,19 @@ public class StoreSettingsController {
boolean result = storeDetailService.editStoreAfterSaleAddressDTO(storeAfterSaleAddressDTO); boolean result = storeDetailService.editStoreAfterSaleAddressDTO(storeAfterSaleAddressDTO);
return ResultUtil.data(result); return ResultUtil.data(result);
} }
@ApiOperation(value = "获取商家福禄配置")
@GetMapping("/fuLuConfigure")
public ResultMessage<FuLuConfigureDTO> getFuLuConfigure() {
//获取当前登录商家内容
return ResultUtil.data(storeDetailService.getFuLuConfigureDTO());
}
@ApiOperation(value = "修改商家福禄配置")
@PutMapping("/fuLuConfigure")
public ResultMessage<Object> editFuLuConfigure(@Valid FuLuConfigureDTO fuLuConfigureDTO) {
//修改商家退货收件地址
boolean result = storeDetailService.editFuLuConfigureDTO(fuLuConfigureDTO);
return ResultUtil.data(result);
}
} }

View File

@ -33,9 +33,9 @@ spring:
type: redis type: redis
# Redis # Redis
redis: redis:
host: 127.0.0.1 host: 120.71.145.134
port: 6379 port: 6379
password: lilishop password: ekLhvPGraSj8DGO0
lettuce: lettuce:
pool: pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8 # 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -64,9 +64,9 @@ spring:
default-datasource: default-datasource:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: root username: zyt_shop
password: lilishop password: Gb84505016@zytshop
maxActive: 20 maxActive: 20
initialSize: 5 initialSize: 5
maxWait: 60000 maxWait: 60000
@ -108,8 +108,7 @@ spring:
props: props:
#是否打印逻辑SQL语句和实际SQL语句建议调试时打印在生产环境关闭 #是否打印逻辑SQL语句和实际SQL语句建议调试时打印在生产环境关闭
sql: sql:
show: false show: true
# 忽略鉴权url # 忽略鉴权url
ignored: ignored:
urls: urls:
@ -137,15 +136,14 @@ ignored:
# Swagger界面内容配置 # Swagger界面内容配置
swagger: swagger:
title: lili API接口文档 title: API接口文档
description: lili Api Documentation description: Api Documentation
version: 1.0.0 version: 1.0.0
termsOfServiceUrl: https://pickmall.cn termsOfServiceUrl:
contact: contact:
name: lili name: rx
url: https://pickmall.cn url:
email: admin@pickmall.com email:
# Mybatis-plus # Mybatis-plus
mybatis-plus: mybatis-plus:
mapper-locations: classpath*:mapper/*.xml mapper-locations: classpath*:mapper/*.xml
@ -179,7 +177,7 @@ jasypt:
lili: lili:
system: system:
isDemoSite: true isDemoSite: false
statistics: statistics:
# 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数 # 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数
onlineMember: 48 onlineMember: 48
@ -191,17 +189,16 @@ lili:
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6 sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
#域名 #域名
domain: domain:
pc: https://pc.b2b2c.pickmall.cn pc: https://zbuyer.sx1788.cn
wap: https://m.b2b2c.pickmall.cn wap: https://zshop.sx1788.cn
store: https://store.b2b2c.pickmall.cn store: https://zseller.sx1788.cn
admin: https://admin.b2b2c.pickmall.cn admin: https://zmanager.sx1788.cn
#api地址 #api地址
api: api:
buyer: https://buyer-api.pickmall.cn buyer: https://zshop-api.sx1788.cn/buyer-api
common: https://common-api.pickmall.cn common: https://zshop-api.sx1788.cn/common-api
manager: https://admin-api.pickmall.cn manager: https://zshop-api.sx1788.cn/manager-api
store: https://store-api.pickmall.cn store: https://zshop-api.sx1788.cn/seller-api
# jwt 细节设定 # jwt 细节设定
jwt-setting: jwt-setting:
# token过期时间分钟 # token过期时间分钟
@ -219,7 +216,7 @@ lili:
data: data:
elasticsearch: elasticsearch:
cluster-name: elasticsearch cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9200 cluster-nodes: 106.124.130.167:9200
index: index:
number-of-replicas: 0 number-of-replicas: 0
number-of-shards: 3 number-of-shards: 3
@ -229,7 +226,7 @@ lili:
# username: elastic # username: elastic
# password: LiLiShopES # password: LiLiShopES
logstash: logstash:
server: 127.0.0.1:4560 server: 106.124.130.167:4560
rocketmq: rocketmq:
promotion-topic: lili_promotion_topic promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group promotion-group: lili_promotion_group
@ -250,7 +247,7 @@ lili:
after-sale-topic: lili_after_sale_topic after-sale-topic: lili_after_sale_topic
after-sale-group: lili_after_sale_group after-sale-group: lili_after_sale_group
rocketmq: rocketmq:
name-server: 127.0.0.1:9876 name-server: 106.124.130.167:9876
producer: producer:
group: lili_group group: lili_group
send-message-timeout: 30000 send-message-timeout: 30000

View File

@ -0,0 +1,161 @@
/*
Navicat Premium Data Transfer
Source Server : 192.168.0.116
Source Server Type : MySQL
Source Server Version : 80023
Source Host : 192.168.0.116:3306
Source Schema : lilishop
Target Server Type : MySQL
Target Server Version : 80023
File Encoding : 65001
Date: 27/07/2021 17:04:46
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
/** 添加结算单积分、砍价结算价信息**/
ALTER TABLE li_bill ADD point_settlement_price double DEFAULT 0.00 COMMENT '积分商品结算金额 ';
ALTER TABLE li_bill ADD kanjia_settlement_price double DEFAULT 0.00 COMMENT '砍价商品结算金额';
ALTER TABLE li_store_flow ADD point_settlement_price double DEFAULT 0.00 COMMENT '积分商品结算金额';
ALTER TABLE li_store_flow ADD kanjia_settlement_price double DEFAULT 0.00 COMMENT '砍价商品结算金额';
ALTER TABLE li_order ADD order_promotion_type varchar(255) DEFAULT null COMMENT '订单促销类型';
/** 热词管理*/
UPDATE `lilishop`.`li_menu` SET `create_by` = 'admin', `create_time` = '2021-03-03 09:54:51', `delete_flag` = b'0', `update_by` = 'admin', `update_time` = '2021-07-23 19:07:45', `description` = 'null', `front_route` = 'page/article-manage/hotWords', `icon` = 'md-aperture', `level` = 2, `name` = 'hotKeyWord', `parent_id` = '1367050250249830400', `path` = 'hotKeyWord', `sort_order` = 0.00, `title` = '搜索热词', `front_component` = 'null' WHERE `id` = 1367050829697122304;
-- ----------------------------
-- Table structure for li_menu
-- ----------------------------
DROP TABLE IF EXISTS `li_menu`;
CREATE TABLE `li_menu` (
`id` bigint NOT NULL COMMENT 'ID',
`create_by` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`delete_flag` bit(1) DEFAULT NULL COMMENT '删除标志 true/false 删除/未删除',
`update_by` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '说明备注',
`front_route` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '前端路由',
`icon` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '图标',
`level` int DEFAULT NULL COMMENT '层级',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '菜单/权限名称',
`parent_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '父id',
`path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '赋权API地址,正则表达式',
`sort_order` decimal(10,2) DEFAULT NULL COMMENT '排序值',
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '菜单标题',
`front_component` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件地址',
`permission` varchar(255) DEFAULT NULL COMMENT '权限url',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of li_menu
-- ----------------------------
BEGIN;
INSERT INTO `li_menu` VALUES (1348810750596767744, 'admin', '2021-01-12 09:55:17', b'0', 'admin', '2021-01-15 09:42:50', 'null', '1', 'ios-american-football', 0, 'settings', '0', '1', 2.00, '设置', 'null', NULL);
INSERT INTO `li_menu` VALUES (1348810864748945408, 'admin', '2021-01-12 09:55:45', b'0', 'admin', '2021-03-15 20:57:12', 'null', 'null', 'ios-american-football', 0, 'log', '0', 'null', 3.00, '日志', 'null', NULL);
INSERT INTO `li_menu` VALUES (1349237129847005184, 'admin', '2021-01-13 14:09:34', b'0', 'admin', '2021-01-15 09:43:16', 'null', 'Main', 'ios-american-football', 1, 'sys', '1348810750596767744', '/sys', 1.00, '系统设置', 'null', NULL);
INSERT INTO `li_menu` VALUES (1349237207378714624, 'admin', '2021-01-13 14:09:53', b'0', 'admin', '2021-07-27 16:07:49', 'null', 'Main', 'ios-american-football', 1, 'member', '1348810750596767744', '/member', 0.00, '用户管理', 'null', '/manager/user*,/manager/department*,/manager/role*,/manager/menu*');
INSERT INTO `li_menu` VALUES (1349237928434098176, 'admin', '2021-01-13 14:13:03', b'0', 'admin', '2021-07-27 16:09:11', 'null', 'Main', 'ios-american-football', 1, 'log', '1348810864748945408', '/log', 1.00, '系统监控', 'null', '/manager/log*');
INSERT INTO `li_menu` VALUES (1349246048900243456, 'admin', '2021-01-13 14:45:00', b'0', 'admin', '2021-07-27 16:07:57', 'null', 'sys/setting-manage/settingManage', 'ios-american-football', 2, 'setting', '1349237129847005184', 'setting', 1.00, '系统设置', 'null', '/manager/system/setting/get*,/manager/system/setting/put*');
INSERT INTO `li_menu` VALUES (1349246347597602816, 'admin', '2021-01-13 14:46:12', b'0', 'admin', '2021-07-27 16:08:03', 'null', 'sys/oss-manage/ossManage', 'ios-american-football', 2, 'oss-manage', '1349237129847005184', 'oss-manage', 3.00, 'OSS资源', '', '/manager/file*');
INSERT INTO `li_menu` VALUES (1349246468775239680, 'admin', '2021-01-13 14:46:41', b'0', 'admin', '2021-07-27 16:08:14', 'null', 'region/index', 'ios-american-football', 2, 'region', '1349237129847005184', 'region', 4.00, '行政地区', 'null', '/manager/region*');
INSERT INTO `li_menu` VALUES (1349246671158796288, 'admin', '2021-01-13 14:47:29', b'0', 'admin', '2021-07-27 16:08:09', 'null', 'logistics/index', 'ios-american-football', 2, 'logistics', '1349237129847005184', 'logistics', 5.00, '物流公司', 'null', '/manager/logistics*');
INSERT INTO `li_menu` VALUES (1349246896661356544, 'admin', '2021-01-13 14:48:23', b'0', 'admin', '2021-07-27 16:08:23', 'null', 'sys/setting-manage/settingManage', 'ios-american-football', 2, 'authLogin', '1349237129847005184', 'authLogin', 6.00, '信任登录', 'null', '/manager/system/setting/get*,/manager/system/setting/put*');
INSERT INTO `li_menu` VALUES (1349247081504333824, 'admin', '2021-01-13 14:49:07', b'0', 'admin', '2021-07-27 16:08:45', 'null', 'sys/setting-manage/settingManage', 'ios-american-football', 2, 'pay', '1349237129847005184', 'pay', 7.00, '支付设置', 'null', '/manager/system/setting/get*,/manager/system/setting/put*,/manager/system/setting*');
INSERT INTO `li_menu` VALUES (1349247640584085504, 'admin', '2021-01-13 14:51:20', b'0', 'admin', '2021-07-27 16:08:56', 'null', 'sensitiveWords/index', 'ios-american-football', 2, 'sensitiveWords', '1349237129847005184', 'sensitiveWords', 8.00, '敏感词', 'null', '/manager/sensitiveWords*');
INSERT INTO `li_menu` VALUES (1349254815809298432, 'admin', '2021-01-13 15:19:51', b'0', 'admin', '2021-01-15 11:15:40', 'null', 'sys/user-manage/userManage', 'ios-american-football', 2, 'user-manage', '1349237207378714624', 'user-manage', 1.00, '用户管理', 'null', NULL);
INSERT INTO `li_menu` VALUES (1349255214977015808, 'admin', '2021-01-13 15:21:26', b'0', 'admin', '2021-01-15 11:16:21', 'null', 'sys/department-manage/departmentManage', 'ios-american-football', 2, 'department-manage', '1349237207378714624', 'department-manage', 3.00, '部门管理', 'null', NULL);
INSERT INTO `li_menu` VALUES (1349255404425338880, 'admin', '2021-01-13 15:22:11', b'0', 'admin', '2021-02-24 09:22:21', 'null', 'sys/role-manage/roleManage', 'ios-american-football', 2, 'role-manage', '1349237207378714624', 'role-manage', 4.00, '角色权限', 'null', NULL);
INSERT INTO `li_menu` VALUES (1349256082979840000, 'admin', '2021-01-13 15:24:53', b'0', 'admin', '2021-01-15 11:18:14', 'null', 'sys/log-manage/logManage', 'ios-american-football', 2, 'log-manage', '1349237928434098176', 'log-manage', 2.00, '日志管理', 'null', NULL);
INSERT INTO `li_menu` VALUES (1357584224760102912, 'admin', '2021-02-05 06:57:57', b'0', 'admin', '2021-07-27 16:09:02', 'null', 'sys/app-version/appVersion', 'ios-american-football', 2, 'appVersion', '1349237129847005184', 'appVersion', 9.00, 'APP版本', 'null', '/manager/systems/app*');
INSERT INTO `li_menu` VALUES (1357873097859923969, 'admin', '2021-02-24 09:53:02', b'0', 'admin', '2021-02-24 09:53:12', NULL, 'sys/menu-manage/menuManage', 'ios-american-football', 2, 'menuManage', '1349237207378714624', 'menu-manage', 2.00, '菜单管理', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367038467288072192, 'admin', '2021-03-03 09:05:44', b'0', 'admin', '2021-03-03 09:09:27', 'null', 'null', 'ios-person-add', 0, 'member', '0', 'null', 0.00, '会员', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367039534616805376, 'admin', '2021-03-03 09:09:58', b'0', 'admin', '2021-05-18 10:51:12', 'null', 'null', 'md-reorder', 0, 'order', '0', 'null', 0.00, '订单', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367039950368800768, 'admin', '2021-03-03 09:11:37', b'0', NULL, NULL, NULL, NULL, 'ios-share', 0, 'goods', '0', NULL, 0.20, '商品', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367040067201138688, 'admin', '2021-03-03 09:12:05', b'0', NULL, NULL, NULL, NULL, 'ios-hammer', 0, 'promotion', '0', NULL, 0.30, '促销', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367040599596728320, 'admin', '2021-03-03 09:14:12', b'0', 'admin', '2021-03-03 09:52:13', 'null', 'null', 'ios-color-palette', 0, 'operate', '0', 'null', 0.50, '运营', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367040819248234496, 'admin', '2021-03-03 09:15:04', b'0', NULL, NULL, NULL, NULL, 'ios-stats', 0, 'statistics', '0', NULL, 0.70, '统计', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367041332861730816, 'admin', '2021-03-03 09:17:07', b'0', NULL, NULL, NULL, 'Main', 'ios-aperture', 1, '/', '1367038467288072192', '/', 0.00, '会员管理', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367041461194850304, 'admin', '2021-03-03 09:17:37', b'0', 'admin', '2021-07-27 16:02:17', NULL, 'member/list/index', 'ios-aperture', 2, 'memberList', '1367041332861730816', 'memberList', 0.00, '会员列表', NULL, '/manager/member*,/manager/orders*,/manager/wallet/log*,/manager/receipt*');
INSERT INTO `li_menu` VALUES (1367041575619657728, 'admin', '2021-03-03 09:18:05', b'0', 'admin', '2021-07-27 15:59:50', NULL, 'member/list/memberRecycle', 'ios-aperture', 2, 'memberRecycle', '1367041332861730816', 'memberRecycle', 1.00, '回收站', NULL, '/manager/member*');
INSERT INTO `li_menu` VALUES (1367042490443497472, 'admin', '2021-03-03 09:21:43', b'0', NULL, NULL, NULL, 'Main', 'ios-aperture', 1, '/', '1367038467288072192', '/', 1.00, '预存款', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367042664410644480, 'admin', '2021-03-03 09:22:24', b'0', 'admin', '2021-07-27 16:02:44', 'null', 'member/advance/walletLog', 'ios-aperture', 2, 'walletLog', '1367042490443497472', 'walletLog', 0.00, '会员资金', 'null', '/manager/wallet/log*');
INSERT INTO `li_menu` VALUES (1367042804944994304, 'admin', '2021-03-03 09:22:58', b'0', 'admin', '2021-07-27 16:02:48', NULL, 'member/advance/recharge', 'ios-alert', 2, 'recharge', '1367042490443497472', 'recharge', 1.00, '充值记录', NULL, '/manager/recharge*');
INSERT INTO `li_menu` VALUES (1367042804944994305, 'admin', '2021-03-03 09:22:58', b'0', 'admin', '2021-07-27 16:02:52', NULL, 'member/advance/withdrawApply', 'ios-alert', 2, 'withdrawApply', '1367042490443497472', 'withdrawApply', 1.00, '提现申请', NULL, '/manager/members/withdraw-apply*');
INSERT INTO `li_menu` VALUES (1367042917113266176, 'admin', '2021-03-03 09:23:25', b'0', NULL, NULL, NULL, 'Main', 'ios-aperture', 1, 'commont', '1367038467288072192', '/', 0.00, '评价', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367043020976816128, 'admin', '2021-03-03 09:23:49', b'0', 'admin', '2021-07-27 16:02:35', NULL, 'goods/goods-review/index', 'md-aperture', 2, 'goodsReview', '1367042917113266176', 'goodsReview', 0.00, '会员评价', NULL, '/manager/memberEvaluation*');
INSERT INTO `li_menu` VALUES (1367043443917848576, 'admin', '2021-03-03 09:25:30', b'0', 'admin', '2021-07-27 16:03:00', NULL, 'Main', 'md-aperture', 1, 'order', '1367039534616805376', '/', 0.00, '订单', NULL, '/manager/orders*');
INSERT INTO `li_menu` VALUES (1367043505771249664, 'admin', '2021-03-03 09:25:45', b'0', NULL, NULL, NULL, 'Main', 'md-aperture', 1, 'aftersale', '1367039534616805376', '/', 0.00, '售后', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367043642379730944, 'admin', '2021-03-03 09:26:17', b'0', NULL, NULL, NULL, 'order/order/orderList', 'ios-aperture', 2, 'orderList', '1367043443917848576', 'orderList', 0.00, '商品订单', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367043791105556480, 'admin', '2021-03-03 09:26:53', b'0', NULL, NULL, NULL, 'order/order/fictitiousOrderList', 'ios-aperture', 2, 'fictitiousOrderList', '1367043443917848576', 'fictitiousOrderList', 1.00, '虚拟订单', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367043980407078912, 'admin', '2021-03-03 09:27:38', b'0', 'admin', '2021-07-27 16:03:43', NULL, 'order/after-order/afterSaleOrder', 'md-alert', 2, 'afterSaleOrder', '1367043505771249664', 'afterSaleOrder', 0.00, '售后管理', NULL, '/manager/afterSale*');
INSERT INTO `li_menu` VALUES (1367044121163726848, 'admin', '2021-03-03 09:28:12', b'0', 'admin', '2021-07-27 16:03:48', NULL, 'order/after-order/orderComplaint', 'md-alert', 2, 'orderComplaint', '1367043505771249664', 'orderComplaint', 2.00, '交易投诉', NULL, '/manager/complain*');
INSERT INTO `li_menu` VALUES (1367044247978508288, 'admin', '2021-03-03 09:28:42', b'0', 'admin', '2021-07-27 16:03:52', NULL, 'order/after-order/afterSale', 'md-aperture', 2, 'afterSaleReason', '1367043505771249664', 'afterSaleReason', 3.00, '售后原因', NULL, '/manager/afterSaleReason*');
INSERT INTO `li_menu` VALUES (1367044376391319552, 'admin', '2021-03-03 09:29:12', b'0', 'admin', '2021-07-27 16:04:08', NULL, 'Main', 'md-aperture', 1, 'goodsManager', '1367039950368800768', '/', 0.00, '商品管理', NULL, '/manager/goods*');
INSERT INTO `li_menu` VALUES (1367044657296441344, 'admin', '2021-03-03 09:30:19', b'0', NULL, NULL, NULL, 'Main', 'ios-aperture', 1, 'association', '1367039950368800768', '/', 1.00, '关联管理', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367045529720061952, 'admin', '2021-03-03 09:33:47', b'0', 'admin', '2021-07-27 15:38:46', NULL, 'goods/goods-info/goods', 'md-aperture', 2, 'managerGoods', '1367044376391319552', 'managerGoods', 0.00, '平台商品', NULL, 'null');
INSERT INTO `li_menu` VALUES (1367045630710513664, 'admin', '2021-03-03 09:34:11', b'0', 'admin', '2021-07-27 15:38:56', NULL, 'goods/goods-info/goodsApply', 'ios-alert', 2, 'applyGoods', '1367044376391319552', 'applyGoods', 1.00, '商品审核', NULL, 'null');
INSERT INTO `li_menu` VALUES (1367045794284175360, 'admin', '2021-03-03 09:34:50', b'0', 'admin', '2021-07-27 16:04:18', NULL, 'goods/goods-manage/category', 'md-alert', 2, 'goodsCategory', '1367044657296441344', 'goodsCategory', 0.00, '商品分类', NULL, '/manager/goods/category*,/manager/goods/brand*,/manager/goods/spec*,/manager/goods/parameters*');
INSERT INTO `li_menu` VALUES (1367045921434501120, 'admin', '2021-03-03 09:35:21', b'0', 'admin', '2021-07-27 16:04:23', NULL, 'goods/goods-manage/brand', 'md-alert', 2, 'goodsBrand', '1367044657296441344', 'goodsBrand', 1.00, '品牌列表', NULL, '/manager/goods/brand*');
INSERT INTO `li_menu` VALUES (1367046068369358848, 'admin', '2021-03-03 09:35:56', b'0', 'admin', '2021-07-27 16:04:27', NULL, 'goods/goods-manage/spec', 'md-aperture', 2, 'goodsSpec', '1367044657296441344', 'goodsSpec', 2.00, '规格列表', NULL, '/manager/goods/spec*');
INSERT INTO `li_menu` VALUES (1367046266214678528, 'admin', '2021-03-03 09:36:43', b'0', 'admin', '2021-07-27 16:04:32', NULL, 'goods-unit/index', 'md-alert', 2, 'goodsUnit', '1367044657296441344', 'goodsUnit', 4.00, '计量单位', NULL, '/manager/goods/goodsUnit*');
INSERT INTO `li_menu` VALUES (1367048084701315072, 'admin', '2021-03-03 09:43:57', b'0', 'admin', '2021-03-03 09:52:17', 'null', 'null', 'ios-pricetags', 0, 'shop', '0', 'null', 0.40, '店铺', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367048684339986432, 'admin', '2021-03-03 09:46:20', b'0', NULL, NULL, NULL, 'Main', 'md-aperture', 1, 'shopManager', '1367048084701315072', '/', 0.00, '店铺管理', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367048754229673984, 'admin', '2021-03-03 09:46:36', b'0', NULL, NULL, NULL, 'Main', 'md-aperture', 1, 'bill', '1367048084701315072', '/', 0.00, ' 店铺结算', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367048832210173952, 'admin', '2021-03-03 09:46:55', b'0', 'admin', '2021-07-27 16:05:30', NULL, 'seller/shop/shopList', 'md-aperture', 2, 'shopList', '1367048684339986432', 'shopList', 0.00, '店铺列表', NULL, '/manager/store*');
INSERT INTO `li_menu` VALUES (1367048967635861504, 'admin', '2021-03-03 09:47:27', b'0', 'admin', '2021-07-27 16:05:32', NULL, 'seller/shop/shopAuditList', 'md-alert', 2, 'shopAuth', '1367048684339986432', 'shopAuth', 1.00, '店铺审核', NULL, '/manager/store*');
INSERT INTO `li_menu` VALUES (1367049068122996736, 'admin', '2021-03-03 09:47:51', b'0', 'admin', '2021-07-27 16:05:36', NULL, 'seller/bill/bill', 'md-alert', 2, 'billList', '1367048754229673984', 'billList', 0.00, '店铺结算', NULL, '/manager/store/bill*');
INSERT INTO `li_menu` VALUES (1367049214198022144, 'admin', '2021-03-03 09:48:26', b'0', NULL, NULL, NULL, 'Main', 'md-aperture', 1, 'promotionManager', '1367040067201138688', '/', 0.00, '促销管理', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367049384792948736, 'admin', '2021-03-03 09:49:07', b'0', 'admin', '2021-07-27 16:04:42', NULL, 'promotion/coupon/coupon', 'md-alert', 2, 'coupon', '1367049214198022144', 'coupon', 0.00, '优惠券', NULL, '/manager/promotion/coupon*');
INSERT INTO `li_menu` VALUES (1367049500782231552, 'admin', '2021-03-03 09:49:34', b'0', 'admin', '2021-07-27 16:04:53', 'null', 'promotion/fullCut/full-cut', 'md-alert', 2, 'fullCut', '1367049214198022144', 'fullCut', 1.00, '满额活动', 'null', '/manager/promotion/fullDiscount*');
INSERT INTO `li_menu` VALUES (1367049611578966016, 'admin', '2021-03-03 09:50:01', b'0', 'admin', '2021-07-27 16:04:58', 'null', 'promotion/seckill/seckill', 'md-alert', 2, 'seckill', '1367049214198022144', 'seckill', 2.00, '秒杀活动', 'null', '/manager/promotion/seckill*');
INSERT INTO `li_menu` VALUES (1367049712657498112, 'admin', '2021-03-03 09:50:25', b'0', 'admin', '2021-07-27 16:05:02', 'null', 'promotion/pintuan/pintuan', 'md-alert', 2, 'pintuan', '1367049214198022144', 'pintuan', 3.00, '拼团活动', 'null', '/manager/promotion/pintuan*');
INSERT INTO `li_menu` VALUES (1367050250249830400, 'admin', '2021-03-03 09:52:33', b'0', 'admin', '2021-03-22 20:38:14', 'null', 'Main', 'md-aperture', 1, 'document', '1367040599596728320', '/', 2.00, '文章管理', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367050320584114176, 'admin', '2021-03-03 09:52:50', b'0', 'admin', '2021-07-27 16:05:49', NULL, 'Main', 'md-aperture', 1, 'floor', '1367040599596728320', '/', 0.00, '楼层装修', NULL, '/manager/pageData*,/manager/file*,/manager/article-category*,/manager/article*,/manager/promotion*,/manager/goods*,/manager/store*');
INSERT INTO `li_menu` VALUES (1367050530030878720, 'admin', '2021-03-03 09:53:40', b'0', 'admin', '2021-03-04 01:05:57', 'null', 'lili-floor-renovation/floorList', 'md-alert', 2, 'pcFloor', '1367050320584114176', 'pcFloor', 0.00, 'PC端', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367050673312497664, 'admin', '2021-03-03 09:54:14', b'0', 'admin', '2021-03-04 01:06:04', 'null', 'lili-floor-renovation/wap/wapList', 'md-aperture', 2, 'wapList', '1367050320584114176', 'wapList', 1.00, '移动端', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367050829697122304, 'admin', '2021-03-03 09:54:51', b'0', 'admin', '2021-07-27 16:06:32', 'null', 'page/article-manage/hotWords', 'md-aperture', 2, 'hotKeyWord', '1367050250249830400', 'hotKeyWord', 0.00, '搜索热词', 'null', '/manager/hotwords*');
INSERT INTO `li_menu` VALUES (1367050939084570624, 'admin', '2021-03-03 09:55:17', b'0', 'admin', '2021-07-27 16:06:38', NULL, 'page/article-manage/ArticleCategory', 'md-aperture', 2, 'article-category', '1367050250249830400', 'article-category', 1.00, '文章分类', NULL, '/manager/article-category*');
INSERT INTO `li_menu` VALUES (1367051048232943616, 'admin', '2021-03-03 09:55:43', b'0', 'admin', '2021-07-27 16:06:42', NULL, 'page/article-manage/articleList', 'md-alert', 2, 'articleList', '1367050250249830400', 'articleList', 3.00, '文章管理', NULL, '/manager/article-category*,/manager/article*');
INSERT INTO `li_menu` VALUES (1367052616634204160, 'admin', '2021-03-03 10:01:57', b'0', 'admin', '2021-07-27 16:07:38', NULL, 'Main', 'md-aperture', 1, 'statistics', '1367040819248234496', '/', 0.00, '统计', NULL, '/manager/store*,/manager/member*');
INSERT INTO `li_menu` VALUES (1367052705725415424, 'admin', '2021-03-03 10:02:18', b'0', 'admin', '2021-03-11 22:11:05', 'null', 'statistics/member', 'md-alert', 2, 'memberStatistics', '1367052616634204160', 'memberStatistics', 0.00, '会员统计', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367052805503713280, 'admin', '2021-03-03 10:02:42', b'0', 'admin', '2021-03-11 22:11:14', 'null', 'statistics/order', 'md-alert', 2, 'orderStatistics', '1367052616634204160', 'orderStatistics', 1.00, '订单统计', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367052915314786304, 'admin', '2021-03-03 10:03:08', b'0', 'admin', '2021-03-11 22:11:23', 'null', 'statistics/goods', 'md-alert', 2, 'goodsStatistics', '1367052616634204160', 'goodsStatistics', 2.00, '商品统计', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367053087121866752, 'admin', '2021-03-03 10:03:49', b'0', 'admin', '2021-03-11 22:11:34', 'null', 'statistics/traffic', 'md-alert', 2, 'trafficStatistics', '1367052616634204160', 'trafficStatistics', 4.00, '流量统计', 'null', NULL);
INSERT INTO `li_menu` VALUES (1372807928452481024, 'admin', '2021-03-19 02:11:30', b'0', NULL, NULL, NULL, 'Main', 'ios-aperture', 1, 'flow', '1367039534616805376', '/', 3.00, '流水', NULL, NULL);
INSERT INTO `li_menu` VALUES (1372808148565360640, 'admin', '2021-03-19 02:12:23', b'0', 'admin', '2021-07-27 16:03:57', NULL, 'order/flow/paymentLog', 'md-alert', 2, 'paymentLog', '1372807928452481024', 'paymentLog', 1.00, '收款记录', NULL, '/manager/paymentLog*');
INSERT INTO `li_menu` VALUES (1372808352295288832, 'admin', '2021-03-19 02:13:11', b'0', 'admin', '2021-07-27 16:04:01', NULL, 'order/flow/refundLog', 'ios-aperture', 2, 'refundLog', '1372807928452481024', 'refundLog', 2.00, '退款流水', NULL, '/manager/refundLog*');
INSERT INTO `li_menu` VALUES (1373166892465782784, 'admin', '2021-03-20 01:57:54', b'0', 'admin', '2021-03-22 20:13:48', 'null', 'Main', 'ios-aperture', 1, '/', '1367038467288072192', '/', 0.00, '积分', 'null', NULL);
INSERT INTO `li_menu` VALUES (1373167227385151488, 'admin', '2021-03-20 01:59:14', b'0', 'admin', '2021-07-27 16:02:40', 'null', 'member/point/point', 'ios-aperture', 2, 'point', '1373166892465782784', 'point', 0.00, '积分历史', 'null', '/manager/member/memberPointsHistory*');
INSERT INTO `li_menu` VALUES (1373791578371391488, 'admin', '2021-03-21 19:20:11', b'0', 'admin', '2021-07-27 16:05:38', NULL, 'seller/bill/accountStatementBill', 'md-alert', 2, 'accountStatementBill', '1367048754229673984', 'accountStatementBill', 0.00, '商家对账', NULL, '/manager/store/bill*');
INSERT INTO `li_menu` VALUES (1374154349697040384, 'admin', '2021-03-22 19:21:42', b'0', 'admin', '2021-07-27 16:06:55', 'null', 'Main', 'md-aperture', 1, 'feedback', '1367040599596728320', '/', 3.00, '意见反馈', 'null', '/manager/feedback*');
INSERT INTO `li_menu` VALUES (1374155741123837952, 'admin', '2021-03-22 19:27:14', b'0', 'admin', '2021-07-27 15:41:40', 'null', 'page/feedback/feedback', 'md-aperture', 2, 'feedback', '1374154349697040384', 'feedback', 0.00, '意见反馈', 'null', 'null');
INSERT INTO `li_menu` VALUES (1374173575405109248, 'admin', '2021-03-22 20:38:06', b'0', 'admin', '2021-03-22 20:52:58', 'null', 'Main', 'ios-analytics', 1, 'distributionManager', '1367040599596728320', '/', 1.00, '分销管理', 'null', NULL);
INSERT INTO `li_menu` VALUES (1374177618072436736, 'admin', '2021-03-22 20:54:10', b'0', 'admin', '2021-07-27 16:05:58', 'null', 'distribution/distributionSetting', 'ios-basketball', 2, 'distributionSetting', '1374173575405109248', 'distributionSetting', 0.00, '分销设置', 'null', '/manager/system/setting/put/DISTRIBUTION_SETTING*,/manager/system/setting/get/DISTRIBUTION_SETTING*');
INSERT INTO `li_menu` VALUES (1374177789581721600, 'admin', '2021-03-22 20:54:51', b'0', 'admin', '2021-07-27 16:06:15', 'null', 'distribution/distributionGoods', 'ios-chatbubbles', 2, 'distributionGoods', '1374173575405109248', 'distributionGoods', 3.00, '分销商品', 'null', '/manager/distribution/goods*');
INSERT INTO `li_menu` VALUES (1374177910411231232, 'admin', '2021-03-22 20:55:19', b'0', 'admin', '2021-07-27 16:06:20', 'null', 'distribution/distributionOrder', 'ios-cloudy', 2, 'distributionOrder', '1374173575405109248', 'distributionOrder', 4.00, '分销订单', 'null', '/manager/distribution/order*,/manager/store*');
INSERT INTO `li_menu` VALUES (1374178079181635584, 'admin', '2021-03-22 20:56:00', b'0', 'admin', '2021-07-27 16:06:05', 'null', 'distribution/distributionApply', 'md-egg', 2, 'distributionApply', '1374173575405109248', 'distributionApply', 1.00, '分销申请', 'null', '/manager/distribution*');
INSERT INTO `li_menu` VALUES (1374178303975358464, 'admin', '2021-03-22 20:56:53', b'0', 'admin', '2021-07-27 16:06:08', 'null', 'distribution/distribution', 'md-person', 2, 'distribution', '1374173575405109248', 'distribution', 2.00, '分销员', 'null', '/manager/distribution*');
INSERT INTO `li_menu` VALUES (1374916594269945856, 'admin', '2021-03-24 21:50:35', b'0', 'admin', '2021-07-27 16:08:51', NULL, 'sys/slider/slider', 'ios-aperture', 2, 'slider', '1349237129847005184', 'slider', 7.00, '验证码', NULL, '/manager/verificationSource*');
INSERT INTO `li_menu` VALUES (1376450531517530112, 'admin', '2021-03-29 03:25:55', b'0', NULL, NULL, NULL, 'Main', 'md-basketball', 1, 'notice', '1367040599596728320', '/', 5.00, '站内信', NULL, NULL);
INSERT INTO `li_menu` VALUES (1376450662098796544, 'admin', '2021-03-29 03:26:26', b'0', 'admin', '2021-07-27 16:07:23', NULL, 'sys/message/noticeMessageTemplate', 'ios-american-football', 2, 'noticeMessageTemplate', '1376450531517530112', 'noticeMessageTemplate', 1.00, '站内信', NULL, '/manager/noticeMessage*,/manager/message*,/manager/store*,/manager/member*');
INSERT INTO `li_menu` VALUES (1376450766817984512, 'admin', '2021-03-29 03:26:51', b'0', 'admin', '2021-03-29 03:27:25', 'null', 'Main', 'md-checkmark', 1, 'sms', '1367040599596728320', '/', 6.00, '短信管理', 'null', NULL);
INSERT INTO `li_menu` VALUES (1376450876423536640, 'admin', '2021-03-29 03:27:17', b'0', 'admin', '2021-07-27 16:07:29', NULL, 'sys/message/sms', 'ios-timer', 2, 'sms', '1376450766817984512', 'sms', 1.00, '短信', NULL, '/manager/sms*,/manager/member*');
INSERT INTO `li_menu` VALUES (1384035281702748160, 'admin', '2021-04-19 14:45:00', b'0', 'admin', '2021-07-27 16:08:18', 'null', 'member/message-manage/weChatMessageManager', 'md-aperture', 2, 'message-manage', '1349237129847005184', 'message-manage', 5.00, '微信消息', 'null', '/manager/message/wechat*,/manager/message/wechatMPMessage*');
INSERT INTO `li_menu` VALUES (1403988156444962818, 'admin', '2021-06-13 16:10:36', b'0', 'admin', '2021-07-27 16:04:48', 'null', 'promotion/couponActivity/coupon', '', 2, 'coupon-activity', '1367049214198022144', 'coupon-activity', 0.00, '券活动', 'null', '/manager/promotion/couponActivity*');
INSERT INTO `li_menu` VALUES (1407601962899230721, 'admin', '2021-06-23 15:30:35', b'0', 'admin', '2021-07-27 16:05:08', NULL, 'Main', '', 1, 'liveManage', '1367040067201138688', '/', 2.00, '直播管理', NULL, '/manager/broadcast*');
INSERT INTO `li_menu` VALUES (1407602049759072258, 'admin', '2021-06-23 15:30:55', b'0', NULL, NULL, NULL, 'promotion/live/live', '', 2, 'live', '1407601962899230721', 'live', 1.00, '直播管理', NULL, NULL);
INSERT INTO `li_menu` VALUES (1407602441964244994, 'admin', '2021-06-23 15:32:29', b'0', NULL, NULL, NULL, 'Main', '', 1, 'pointManage', '1367040067201138688', '/', 3.00, '积分活动', NULL, NULL);
INSERT INTO `li_menu` VALUES (1407602516912263170, 'admin', '2021-06-23 15:32:47', b'0', 'admin', '2021-07-27 16:05:14', NULL, 'promotion/pointsGoods/pointsGoods', '', 2, 'pointsGoods', '1407602441964244994', 'pointsGoods', 1.00, '积分商品', NULL, '/manager/promotion/pointsGoods*,/manager/goods*');
INSERT INTO `li_menu` VALUES (1407602673334636546, 'admin', '2021-06-23 15:33:24', b'0', 'admin', '2021-07-27 16:05:18', NULL, 'promotion/pointsGoodsCategory/pointsGoodsCategory', '', 2, 'pointsGoodsCategory', '1407602441964244994', 'pointsGoodsCategory', 2.00, '积分分类', NULL, '/manager/promotion/pointsGoodsCategory*');
INSERT INTO `li_menu` VALUES (1410862675914764290, 'admin', '2021-07-02 15:27:29', b'0', 'admin', '2021-07-27 16:06:26', 'null', 'distribution/distributionCash', '', 2, 'distributionCash', '1374173575405109248', 'distributionCash', 5.00, '分销提现', 'null', '/manager/distribution/cash*');
INSERT INTO `li_menu` VALUES (1419926569920536578, 'admin', '2021-07-27 15:44:10', b'0', 'admin', '2021-07-27 16:07:10', NULL, 'customWords/index', NULL, 2, 'customWords', '1367050250249830400', 'customWords', 4.00, 'ES分词', NULL, '/manager/manager/custom-words*');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
/** 新增会员获的总积分 **/
ALTER TABLE li_member ADD total_point bigint ( 20 ) DEFAULT 0 COMMENT '积分总数量';

View File

@ -1,3 +1,5 @@
<<<<<<< HEAD
=======
<p align="center" > <p align="center" >
<img src="https://www.xuxueli.com/doc/static/xxl-job/images/xxl-logo.jpg" width="150"> <img src="https://www.xuxueli.com/doc/static/xxl-job/images/xxl-logo.jpg" width="150">
<h3 align="center">XXL-JOB</h3> <h3 align="center">XXL-JOB</h3>
@ -32,6 +34,7 @@
</p> </p>
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
## Introduction ## Introduction
XXL-JOB is a distributed task scheduling framework. XXL-JOB is a distributed task scheduling framework.
It's core design goal is to develop quickly and learn simple, lightweight, and easy to expand. It's core design goal is to develop quickly and learn simple, lightweight, and easy to expand.

View File

@ -23,9 +23,15 @@ mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-package=com.xxl.job.admin.core.model #mybatis.type-aliases-package=com.xxl.job.admin.core.model
### xxl-job, datasource ### xxl-job, datasource
<<<<<<< HEAD
spring.datasource.url=jdbc:mysql://120.71.183.195:3306/zyt_shop/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=zyt_shop
spring.datasource.password=Gb84505016@zytshop
=======
spring.datasource.url=jdbc:mysql://192.168.0.106:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai spring.datasource.url=jdbc:mysql://192.168.0.106:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root spring.datasource.username=root
spring.datasource.password=lilishop spring.datasource.password=lilishop
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
### datasource-pool ### datasource-pool