Merge branch 'master' of https://gitee.com/beijing_hongye_huicheng/lilishop
This commit is contained in:
commit
4737cc5ae8
@ -165,8 +165,8 @@ PS:手机验证码为 ‘111111’
|
|||||||
##### 交流 qq 1群 961316482(已满)
|
##### 交流 qq 1群 961316482(已满)
|
||||||
##### 交流 qq 2群 875294241(已满)
|
##### 交流 qq 2群 875294241(已满)
|
||||||
##### 交流 qq 3群 263785057(已满)
|
##### 交流 qq 3群 263785057(已满)
|
||||||
##### 交流 qq 4群 674617534
|
##### 交流 qq 4群 674617534(已满)
|
||||||
|
##### 交流 qq 5群 594675235
|
||||||
|
|
||||||
### 附录
|
### 附录
|
||||||
有人有自己的学习视频、学习记录文档、希望宣传关联开源项目等均可以私聊仓库所有者。
|
有人有自己的学习视频、学习记录文档、希望宣传关联开源项目等均可以私聊仓库所有者。
|
||||||
|
@ -24,13 +24,13 @@ spring:
|
|||||||
boot:
|
boot:
|
||||||
admin:
|
admin:
|
||||||
client:
|
client:
|
||||||
url: http://192.168.0.108:8000
|
url: http://127.0.0.1:8000
|
||||||
cache:
|
cache:
|
||||||
type: redis
|
type: redis
|
||||||
# Redis
|
# Redis
|
||||||
redis:
|
redis:
|
||||||
host: 192.168.0.108
|
host: 127.0.0.1
|
||||||
port: 30379
|
port: 6379
|
||||||
password: lilishop
|
password: lilishop
|
||||||
lettuce:
|
lettuce:
|
||||||
pool:
|
pool:
|
||||||
@ -60,7 +60,7 @@ 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.108:30306/kuaidi100?useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
|
url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
|
||||||
username: root
|
username: root
|
||||||
password: lilishop
|
password: lilishop
|
||||||
maxActive: 50
|
maxActive: 50
|
||||||
@ -241,16 +241,16 @@ lili:
|
|||||||
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
|
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
|
||||||
#域名
|
#域名
|
||||||
domain:
|
domain:
|
||||||
pc: http://192.168.0.108:8888
|
pc: http://127.0.0.1:8888
|
||||||
wap: http://192.168.0.108:8888
|
wap: http://127.0.0.1:8888
|
||||||
seller: http://192.168.0.108:8888
|
seller: http://127.0.0.1:8888
|
||||||
admin: http://192.168.0.108:8888
|
admin: http://127.0.0.1:8888
|
||||||
#api地址
|
#api地址
|
||||||
api:
|
api:
|
||||||
buyer: https://z171l91606.51mypc.cn
|
buyer: https://z171l91606.51mypc.cn
|
||||||
base: http://192.168.0.108:8888
|
base: http://127.0.0.1:8888
|
||||||
manager: http://192.168.0.108:8888
|
manager: http://127.0.0.1:8888
|
||||||
seller: http://192.168.0.108:8888
|
seller: http://127.0.0.1:8888
|
||||||
|
|
||||||
# jwt 细节设定
|
# jwt 细节设定
|
||||||
jwt-setting:
|
jwt-setting:
|
||||||
@ -269,7 +269,7 @@ lili:
|
|||||||
data:
|
data:
|
||||||
elasticsearch:
|
elasticsearch:
|
||||||
cluster-name: elasticsearch
|
cluster-name: elasticsearch
|
||||||
cluster-nodes: 192.168.0.108:30920
|
cluster-nodes: 127.0.0.1:9200
|
||||||
index:
|
index:
|
||||||
number-of-replicas: 0
|
number-of-replicas: 0
|
||||||
number-of-shards: 3
|
number-of-shards: 3
|
||||||
@ -301,7 +301,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.108:30876
|
name-server: 127.0.0.1:9876
|
||||||
isVIPChannel: false
|
isVIPChannel: false
|
||||||
producer:
|
producer:
|
||||||
group: lili_group
|
group: lili_group
|
||||||
@ -310,7 +310,7 @@ rocketmq:
|
|||||||
xxl:
|
xxl:
|
||||||
job:
|
job:
|
||||||
admin:
|
admin:
|
||||||
addresses: http://192.168.0.108: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:
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package cn.lili.event.impl;
|
package cn.lili.event.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateField;
|
||||||
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateTime;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.lili.event.AfterSaleStatusChangeEvent;
|
import cn.lili.event.AfterSaleStatusChangeEvent;
|
||||||
import cn.lili.event.OrderStatusChangeEvent;
|
import cn.lili.event.OrderStatusChangeEvent;
|
||||||
import cn.lili.modules.distribution.entity.dos.DistributionOrder;
|
import cn.lili.modules.distribution.entity.dos.DistributionOrder;
|
||||||
@ -10,6 +12,10 @@ import cn.lili.modules.distribution.service.DistributionOrderService;
|
|||||||
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
|
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
|
||||||
import cn.lili.modules.order.order.entity.dto.OrderMessage;
|
import cn.lili.modules.order.order.entity.dto.OrderMessage;
|
||||||
import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum;
|
import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum;
|
||||||
|
import cn.lili.modules.system.entity.dos.Setting;
|
||||||
|
import cn.lili.modules.system.entity.dto.DistributionSetting;
|
||||||
|
import cn.lili.modules.system.entity.enums.SettingEnum;
|
||||||
|
import cn.lili.modules.system.service.SettingService;
|
||||||
import cn.lili.timetask.handler.EveryDayExecute;
|
import cn.lili.timetask.handler.EveryDayExecute;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -39,6 +45,9 @@ public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDa
|
|||||||
@Resource
|
@Resource
|
||||||
private DistributionOrderMapper distributionOrderMapper;
|
private DistributionOrderMapper distributionOrderMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SettingService settingService;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void orderChange(OrderMessage orderMessage) {
|
public void orderChange(OrderMessage orderMessage) {
|
||||||
@ -65,14 +74,16 @@ public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDa
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
//计算分销提佣
|
log.info("分销订单定时开始执行");
|
||||||
distributionOrderMapper.rebate(DistributionOrderStatusEnum.WAIT_BILL.name(), new DateTime());
|
//设置结算天数(解冻日期)
|
||||||
|
Setting setting = settingService.get(SettingEnum.DISTRIBUTION_SETTING.name());
|
||||||
//修改分销订单状态
|
DistributionSetting distributionSetting = JSONUtil.toBean(setting.getSettingValue(), DistributionSetting.class);
|
||||||
distributionOrderService.update(new LambdaUpdateWrapper<DistributionOrder>()
|
//解冻时间
|
||||||
.eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_BILL.name())
|
DateTime dateTime = new DateTime();
|
||||||
.le(DistributionOrder::getSettleCycle, new DateTime())
|
//当前时间-结算天数=最终结算时间
|
||||||
.set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_CASH.name()));
|
dateTime = dateTime.offsetNew(DateField.DAY_OF_MONTH, -distributionSetting.getCashDay());
|
||||||
|
//分销人员订单结算
|
||||||
|
distributionOrderService.updateRebate(dateTime,DistributionOrderStatusEnum.WAIT_BILL.name());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,12 +1,21 @@
|
|||||||
package cn.lili.event.impl;
|
package cn.lili.event.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.lili.cache.Cache;
|
||||||
|
import cn.lili.cache.CachePrefix;
|
||||||
import cn.lili.event.GoodsCommentCompleteEvent;
|
import cn.lili.event.GoodsCommentCompleteEvent;
|
||||||
|
import cn.lili.event.StoreSettingChangeEvent;
|
||||||
|
import cn.lili.modules.goods.entity.dos.GoodsSku;
|
||||||
|
import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
|
||||||
import cn.lili.modules.goods.service.GoodsSkuService;
|
import cn.lili.modules.goods.service.GoodsSkuService;
|
||||||
import cn.lili.modules.member.entity.dos.MemberEvaluation;
|
import cn.lili.modules.member.entity.dos.MemberEvaluation;
|
||||||
|
import cn.lili.modules.store.entity.dos.Store;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品SKU变化
|
* 商品SKU变化
|
||||||
*
|
*
|
||||||
@ -14,7 +23,7 @@ import org.springframework.stereotype.Service;
|
|||||||
* @since 2020-07-03 11:20
|
* @since 2020-07-03 11:20
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class GoodsSkuExecute implements GoodsCommentCompleteEvent {
|
public class GoodsSkuExecute implements GoodsCommentCompleteEvent, StoreSettingChangeEvent {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品
|
* 商品
|
||||||
@ -22,9 +31,23 @@ public class GoodsSkuExecute implements GoodsCommentCompleteEvent {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private GoodsSkuService goodsSkuService;
|
private GoodsSkuService goodsSkuService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private Cache cache;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void goodsComment(MemberEvaluation memberEvaluation) {
|
public void goodsComment(MemberEvaluation memberEvaluation) {
|
||||||
goodsSkuService.updateGoodsSkuCommentNum(memberEvaluation.getSkuId());
|
goodsSkuService.updateGoodsSkuCommentNum(memberEvaluation.getSkuId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void storeSettingChange(Store store) {
|
||||||
|
//修改数据后,清除商品索引
|
||||||
|
GoodsSearchParams goodsSearchParams = new GoodsSearchParams();
|
||||||
|
goodsSearchParams.setStoreId(store.getId());
|
||||||
|
List<String> goodsSkuKeys = new ArrayList<>();
|
||||||
|
for (GoodsSku goodsSku : goodsSkuService.getGoodsSkuByList(goodsSearchParams)) {
|
||||||
|
goodsSkuKeys.add(CachePrefix.GOODS_SKU.getPrefix()+goodsSku.getId());
|
||||||
|
}
|
||||||
|
cache.multiDel(goodsSkuKeys);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,12 @@ package cn.lili.timetask.handler.impl.order;
|
|||||||
|
|
||||||
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateTime;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
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.distribution.service.DistributionOrderService;
|
||||||
import cn.lili.modules.member.entity.dto.MemberEvaluationDTO;
|
import cn.lili.modules.member.entity.dto.MemberEvaluationDTO;
|
||||||
import cn.lili.modules.member.entity.enums.EvaluationGradeEnum;
|
import cn.lili.modules.member.entity.enums.EvaluationGradeEnum;
|
||||||
import cn.lili.modules.member.service.MemberEvaluationService;
|
import cn.lili.modules.member.service.MemberEvaluationService;
|
||||||
@ -69,6 +72,9 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private AfterSaleService afterSaleService;
|
private AfterSaleService afterSaleService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DistributionOrderService distributionOrderService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行每日任务
|
* 执行每日任务
|
||||||
*/
|
*/
|
||||||
@ -179,6 +185,15 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute {
|
|||||||
.set(OrderItem::getAfterSaleStatus, OrderItemAfterSaleStatusEnum.EXPIRED.name())
|
.set(OrderItem::getAfterSaleStatus, OrderItemAfterSaleStatusEnum.EXPIRED.name())
|
||||||
.in(OrderItem::getId, orderItemIdList);
|
.in(OrderItem::getId, orderItemIdList);
|
||||||
orderItemService.update(lambdaUpdateWrapper);
|
orderItemService.update(lambdaUpdateWrapper);
|
||||||
|
//修改订售后状态
|
||||||
|
List<OrderItem> orderItemsList = orderItems.stream()
|
||||||
|
.map((orderItem)->{
|
||||||
|
orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.EXPIRED.name());
|
||||||
|
return orderItem;
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
//修改对应分销订单状态
|
||||||
|
distributionOrderService.updateDistributionOrderStatus(orderItemsList);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -51,10 +51,6 @@
|
|||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-websocket</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-web</artifactId>
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
@ -81,7 +81,7 @@ public class DistributionOrder extends BaseIdEntity {
|
|||||||
private Integer num;
|
private Integer num;
|
||||||
|
|
||||||
public DistributionOrder(StoreFlow storeFlow) {
|
public DistributionOrder(StoreFlow storeFlow) {
|
||||||
distributionOrderStatus = DistributionOrderStatusEnum.WAIT_BILL.name();
|
distributionOrderStatus = DistributionOrderStatusEnum.NO_COMPLETED.name();
|
||||||
memberId = storeFlow.getMemberId();
|
memberId = storeFlow.getMemberId();
|
||||||
memberName = storeFlow.getMemberName();
|
memberName = storeFlow.getMemberName();
|
||||||
rebate = storeFlow.getDistributionRebate();
|
rebate = storeFlow.getDistributionRebate();
|
||||||
|
@ -6,6 +6,8 @@ package cn.lili.modules.distribution.entity.enums;
|
|||||||
* @author pikachu
|
* @author pikachu
|
||||||
*/
|
*/
|
||||||
public enum DistributionOrderStatusEnum {
|
public enum DistributionOrderStatusEnum {
|
||||||
|
//未完成
|
||||||
|
NO_COMPLETED("未完成"),
|
||||||
//待结算(冻结)
|
//待结算(冻结)
|
||||||
WAIT_BILL("待结算"),
|
WAIT_BILL("待结算"),
|
||||||
//待提现
|
//待提现
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
package cn.lili.modules.distribution.service;
|
package cn.lili.modules.distribution.service;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateTime;
|
||||||
import cn.lili.modules.distribution.entity.dos.DistributionOrder;
|
import cn.lili.modules.distribution.entity.dos.DistributionOrder;
|
||||||
import cn.lili.modules.distribution.entity.vos.DistributionOrderSearchParams;
|
import cn.lili.modules.distribution.entity.vos.DistributionOrderSearchParams;
|
||||||
|
import cn.lili.modules.order.order.entity.dos.OrderItem;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分销订单业务层
|
* 分销订单业务层
|
||||||
@ -45,4 +49,17 @@ public interface DistributionOrderService extends IService<DistributionOrder> {
|
|||||||
*/
|
*/
|
||||||
void refundOrder(String afterSaleSn);
|
void refundOrder(String afterSaleSn);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分销订单状态修改
|
||||||
|
*
|
||||||
|
* @param orderItems
|
||||||
|
*/
|
||||||
|
void updateDistributionOrderStatus(List<OrderItem> orderItems);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分销订单结算
|
||||||
|
* @param dateTime
|
||||||
|
* @param distributionOrderStatus
|
||||||
|
*/
|
||||||
|
void updateRebate(DateTime dateTime, String distributionOrderStatus);
|
||||||
}
|
}
|
@ -1,19 +1,26 @@
|
|||||||
package cn.lili.modules.distribution.serviceimpl;
|
package cn.lili.modules.distribution.serviceimpl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.ListUtil;
|
||||||
import cn.hutool.core.date.DateField;
|
import cn.hutool.core.date.DateField;
|
||||||
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateTime;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.lili.common.utils.CurrencyUtil;
|
import cn.lili.common.utils.CurrencyUtil;
|
||||||
|
import cn.lili.common.utils.SpringContextUtil;
|
||||||
import cn.lili.modules.distribution.entity.dos.Distribution;
|
import cn.lili.modules.distribution.entity.dos.Distribution;
|
||||||
import cn.lili.modules.distribution.entity.dos.DistributionOrder;
|
import cn.lili.modules.distribution.entity.dos.DistributionOrder;
|
||||||
import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum;
|
import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum;
|
||||||
|
import cn.lili.modules.distribution.entity.enums.DistributionStatusEnum;
|
||||||
import cn.lili.modules.distribution.entity.vos.DistributionOrderSearchParams;
|
import cn.lili.modules.distribution.entity.vos.DistributionOrderSearchParams;
|
||||||
import cn.lili.modules.distribution.mapper.DistributionOrderMapper;
|
import cn.lili.modules.distribution.mapper.DistributionOrderMapper;
|
||||||
import cn.lili.modules.distribution.service.DistributionOrderService;
|
import cn.lili.modules.distribution.service.DistributionOrderService;
|
||||||
import cn.lili.modules.distribution.service.DistributionService;
|
import cn.lili.modules.distribution.service.DistributionService;
|
||||||
import cn.lili.modules.order.order.entity.dos.Order;
|
import cn.lili.modules.order.order.entity.dos.Order;
|
||||||
|
import cn.lili.modules.order.order.entity.dos.OrderItem;
|
||||||
import cn.lili.modules.order.order.entity.dos.StoreFlow;
|
import cn.lili.modules.order.order.entity.dos.StoreFlow;
|
||||||
import cn.lili.modules.order.order.entity.dto.StoreFlowQueryDTO;
|
import cn.lili.modules.order.order.entity.dto.StoreFlowQueryDTO;
|
||||||
|
import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
|
||||||
import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
|
import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
|
||||||
import cn.lili.modules.order.order.service.OrderService;
|
import cn.lili.modules.order.order.service.OrderService;
|
||||||
import cn.lili.modules.order.order.service.StoreFlowService;
|
import cn.lili.modules.order.order.service.StoreFlowService;
|
||||||
@ -31,7 +38,11 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -107,14 +118,7 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
|
|||||||
//设置结算天数(解冻日期)
|
//设置结算天数(解冻日期)
|
||||||
Setting setting = settingService.get(SettingEnum.DISTRIBUTION_SETTING.name());
|
Setting setting = settingService.get(SettingEnum.DISTRIBUTION_SETTING.name());
|
||||||
DistributionSetting distributionSetting = JSONUtil.toBean(setting.getSettingValue(), DistributionSetting.class);
|
DistributionSetting distributionSetting = JSONUtil.toBean(setting.getSettingValue(), DistributionSetting.class);
|
||||||
//默认解冻1天
|
|
||||||
if (distributionSetting.getCashDay().equals(0)) {
|
|
||||||
distributionOrder.setSettleCycle(new DateTime());
|
|
||||||
} else {
|
|
||||||
DateTime dateTime = new DateTime();
|
|
||||||
dateTime = dateTime.offsetNew(DateField.DAY_OF_MONTH, distributionSetting.getCashDay());
|
|
||||||
distributionOrder.setSettleCycle(dateTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
//添加分销订单
|
//添加分销订单
|
||||||
this.save(distributionOrder);
|
this.save(distributionOrder);
|
||||||
@ -126,15 +130,11 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
|
|||||||
//如果天数写0则立即进行结算
|
//如果天数写0则立即进行结算
|
||||||
if (distributionSetting.getCashDay().equals(0)) {
|
if (distributionSetting.getCashDay().equals(0)) {
|
||||||
DateTime dateTime = new DateTime();
|
DateTime dateTime = new DateTime();
|
||||||
dateTime = dateTime.offsetNew(DateField.MINUTE, 5);
|
dateTime = dateTime.offsetNew(DateField.DAY_OF_MONTH, -distributionSetting.getCashDay());
|
||||||
//计算分销提佣
|
//防止事务失效,采用上下文获取bean
|
||||||
this.baseMapper.rebate(DistributionOrderStatusEnum.WAIT_BILL.name(), dateTime);
|
DistributionOrderService bean = SpringContextUtil.getBean(DistributionOrderService.class);
|
||||||
|
//分销订单结算
|
||||||
//修改分销订单状态
|
bean.updateRebate(dateTime, DistributionOrderStatusEnum.WAIT_BILL.name());
|
||||||
this.update(new LambdaUpdateWrapper<DistributionOrder>()
|
|
||||||
.eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_BILL.name())
|
|
||||||
.le(DistributionOrder::getSettleCycle, dateTime)
|
|
||||||
.set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_CASH.name()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,4 +214,128 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateDistributionOrderStatus(List<OrderItem> orderItems) {
|
||||||
|
if (orderItems.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取未完成分销订单
|
||||||
|
List<DistributionOrder> distributionOrderList = this.list(new LambdaQueryWrapper<DistributionOrder>()
|
||||||
|
.eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.NO_COMPLETED.name()));
|
||||||
|
|
||||||
|
if (distributionOrderList.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<DistributionOrder> list = ListUtil.list(false);
|
||||||
|
|
||||||
|
orderItems.stream().forEach(orderItem -> {
|
||||||
|
//订单售后状态为已失效并且投诉状态为已失效
|
||||||
|
if (StrUtil.equals(OrderItemAfterSaleStatusEnum.EXPIRED.name(), orderItem.getAfterSaleStatus())) {
|
||||||
|
|
||||||
|
|
||||||
|
List<DistributionOrder> collect = distributionOrderList.stream()
|
||||||
|
.filter(distributionOrder -> StrUtil.equals(distributionOrder.getOrderItemSn(), orderItem.getSn()))
|
||||||
|
.map((distributionOrder) -> {
|
||||||
|
distributionOrder.setDistributionOrderStatus(DistributionOrderStatusEnum.WAIT_BILL.name());
|
||||||
|
distributionOrder.setSettleCycle(new Date());
|
||||||
|
return distributionOrder;
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
list.addAll(collect);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!list.isEmpty()) {
|
||||||
|
//批量修改分销订单结算状态
|
||||||
|
this.updateBatchById(list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateRebate(DateTime dateTime, String distributionOrderStatus) {
|
||||||
|
//结算时间延后五分钟
|
||||||
|
dateTime = dateTime.offsetNew(DateField.MINUTE, 5);
|
||||||
|
//获取待结算订单
|
||||||
|
List<DistributionOrder> distributionOrderList = this.list(new LambdaQueryWrapper<DistributionOrder>()
|
||||||
|
.eq(DistributionOrder::getDistributionOrderStatus, distributionOrderStatus)
|
||||||
|
.isNotNull(DistributionOrder::getSettleCycle)
|
||||||
|
.le(DistributionOrder::getSettleCycle, dateTime));
|
||||||
|
//校验待结算订单
|
||||||
|
if (ObjectUtil.isNotNull(distributionOrderList) && distributionOrderList.size() > 0) {
|
||||||
|
//结算分销人员信息列表
|
||||||
|
List<Distribution> distributionUpdateList = new ArrayList<>();
|
||||||
|
//获取分销员信息
|
||||||
|
List<Distribution> distributionList = distributionService.list(new LambdaQueryWrapper<Distribution>()
|
||||||
|
.eq(Distribution::getDistributionStatus, DistributionStatusEnum.PASS.name()));
|
||||||
|
//根据销人员获取对应分销订单
|
||||||
|
Map<String, List<DistributionOrder>> distributionOrderList1 = distributionOrderList.stream()
|
||||||
|
.collect(Collectors.groupingBy(DistributionOrder::getDistributionId));
|
||||||
|
|
||||||
|
//校验分销订单不为空
|
||||||
|
if (ObjectUtil.isNotNull(distributionOrderList1) && distributionOrderList1.size() > 0) {
|
||||||
|
//遍历分销订单map
|
||||||
|
distributionOrderList1.forEach((key, value) -> {
|
||||||
|
//计算分销结算金额
|
||||||
|
distributionUpdateList.add(checkDistribution(key, value, distributionList));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//校验分销信息列表不为空
|
||||||
|
if (ObjectUtil.isNotNull(distributionUpdateList) && !distributionUpdateList.isEmpty()) {
|
||||||
|
//修改分销员收益
|
||||||
|
distributionService.updateBatchById(distributionUpdateList);
|
||||||
|
distributionOrderList.stream().forEach(distributionOrder -> {
|
||||||
|
//修改分销订单状态为待提现
|
||||||
|
distributionOrder.setDistributionOrderStatus(DistributionOrderStatusEnum.WAIT_CASH.name());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//修改分销订单状态
|
||||||
|
this.updateBatchById(distributionOrderList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算分销结算金额
|
||||||
|
*
|
||||||
|
* @param distributionId 分销ID
|
||||||
|
* @param list 分销订单
|
||||||
|
* @param distributionList 分销列表
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Distribution checkDistribution(String distributionId, List<DistributionOrder> list, List<Distribution> distributionList) {
|
||||||
|
//获取所有待结算订单分销人员信息
|
||||||
|
Distribution distribution = distributionList.parallelStream().filter(a -> StrUtil.equals(a.getId(), distributionId)).collect(Collectors.toList()).get(0);
|
||||||
|
|
||||||
|
//获取分销订单总金额
|
||||||
|
double rebate = list.stream().mapToDouble(DistributionOrder::getRebate).sum();
|
||||||
|
|
||||||
|
//检验单分销人员冻结金额为负数时.扣除负数冻结金额后再结算
|
||||||
|
if (distribution.getCommissionFrozen() < 0) {
|
||||||
|
rebate = CurrencyUtil.add(distribution.getCommissionFrozen() == null ? 0.0 : distribution.getCommissionFrozen(), rebate);
|
||||||
|
}
|
||||||
|
//结算订单总金额+分销可提现金额
|
||||||
|
Double canRebate = CurrencyUtil.add(rebate, distribution.getCanRebate() == null ? 0.0 : distribution.getCanRebate());
|
||||||
|
//结算金额小于0
|
||||||
|
if (canRebate < 0) {
|
||||||
|
//结算订单总金额+分销可提现金额
|
||||||
|
distribution.setCanRebate(0.0);
|
||||||
|
//冻结金额
|
||||||
|
distribution.setCommissionFrozen(canRebate);
|
||||||
|
} else {
|
||||||
|
//结算订单总金额+分销可提现金额
|
||||||
|
distribution.setCanRebate(canRebate);
|
||||||
|
//冻结金额
|
||||||
|
distribution.setCommissionFrozen(0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return distribution;
|
||||||
|
}
|
||||||
}
|
}
|
@ -133,7 +133,7 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
|
|||||||
//获取商品ID列表
|
//获取商品ID列表
|
||||||
List<String> list = this.baseMapper.getGoodsIdByStoreId(storeId);
|
List<String> list = this.baseMapper.getGoodsIdByStoreId(storeId);
|
||||||
//下架店铺下的商品
|
//下架店铺下的商品
|
||||||
updateGoodsMarketAble(list, GoodsStatusEnum.DOWN, "店铺关闭");
|
this.updateGoodsMarketAbleByStoreId(storeId, GoodsStatusEnum.DOWN, "店铺关闭");
|
||||||
|
|
||||||
applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("下架商品",
|
applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("下架商品",
|
||||||
rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.DOWN.name(), JSONUtil.toJsonStr(list)));
|
rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.DOWN.name(), JSONUtil.toJsonStr(list)));
|
||||||
|
@ -312,9 +312,8 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
|
|||||||
map.put("data", goodsSkuDetail);
|
map.put("data", goodsSkuDetail);
|
||||||
|
|
||||||
//获取分类
|
//获取分类
|
||||||
String[] split = goodsSkuDetail.getCategoryPath().split(",");
|
map.put("wholesaleList", GoodsSalesModeEnum.WHOLESALE.name().equals(goodsVO.getSalesModel()) ? wholesaleService.findByGoodsId(goodsSkuDetail.getGoodsId()) : Collections.emptyList());
|
||||||
map.put("wholesaleList", wholesaleService.findByGoodsId(goodsSkuDetail.getGoodsId()));
|
map.put("categoryName", CharSequenceUtil.isNotEmpty(goodsIndex.getCategoryNamePath()) ? goodsIndex.getCategoryNamePath().split(",") : null);
|
||||||
map.put("categoryName", categoryService.getCategoryNameByIds(Arrays.asList(split)));
|
|
||||||
|
|
||||||
//获取规格信息
|
//获取规格信息
|
||||||
map.put("specs", this.groupBySkuAndSpec(goodsVO.getSkuList()));
|
map.put("specs", this.groupBySkuAndSpec(goodsVO.getSkuList()));
|
||||||
|
@ -21,6 +21,13 @@ public interface ImTalkService extends IService<ImTalk> {
|
|||||||
*/
|
*/
|
||||||
ImTalk getTalkByUser(String userId1);
|
ImTalk getTalkByUser(String userId1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取与某人的聊天
|
||||||
|
* @param userId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ImTalkVO getTalkByUserId(String userId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 置顶消息
|
* 置顶消息
|
||||||
*
|
*
|
||||||
|
@ -88,6 +88,50 @@ public class ImTalkServiceImpl extends ServiceImpl<ImTalkMapper, ImTalk> impleme
|
|||||||
return imTalk;
|
return imTalk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImTalkVO getTalkByUserId(String userId) {
|
||||||
|
LambdaQueryWrapper<ImTalk> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser());
|
||||||
|
//登录用户的Id
|
||||||
|
String selfId = "";
|
||||||
|
//查看当前用户角色对Id进行赋值
|
||||||
|
if(UserEnums.STORE.equals(currentUser.getRole())){
|
||||||
|
selfId = currentUser.getStoreId();
|
||||||
|
}else if(UserEnums.MEMBER.equals(currentUser.getRole())){
|
||||||
|
selfId = currentUser.getId();
|
||||||
|
}
|
||||||
|
//小数在前保证永远是同一个对话
|
||||||
|
String finalSelfId = selfId;
|
||||||
|
queryWrapper.and(wq-> wq.eq(ImTalk::getUserId2, userId).eq(ImTalk::getUserId1, finalSelfId).or().eq(ImTalk::getUserId2, finalSelfId).eq(ImTalk::getUserId1, userId));
|
||||||
|
ImTalk imTalk = this.getOne(queryWrapper);
|
||||||
|
//如果没有聊天,则创建聊天
|
||||||
|
if (imTalk == null) {
|
||||||
|
//当自己为店铺时
|
||||||
|
if(UserEnums.STORE.equals(currentUser.getRole())){
|
||||||
|
Store selfStore = storeService.getById(selfId);
|
||||||
|
//没有这个用户信息
|
||||||
|
Member other = memberService.getById(userId);
|
||||||
|
if(other == null){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//自己为店铺其他人必定为用户
|
||||||
|
imTalk = new ImTalk(other,selfStore);
|
||||||
|
}else if(UserEnums.MEMBER.equals(currentUser.getRole())){
|
||||||
|
//没有这个店铺信息
|
||||||
|
Member self = memberService.getById(selfId);
|
||||||
|
Member otherMember = memberService.getById(userId);
|
||||||
|
Store otherStore = storeService.getById(userId);
|
||||||
|
if(otherStore != null){
|
||||||
|
imTalk = new ImTalk(self, otherStore);
|
||||||
|
}else if (otherMember != null){
|
||||||
|
imTalk = new ImTalk(self, otherMember);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.save(imTalk);
|
||||||
|
}
|
||||||
|
return new ImTalkVO(imTalk,currentUser.getId());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发起聊天后,如果聊天不可见为true,则需要修正
|
* 发起聊天后,如果聊天不可见为true,则需要修正
|
||||||
*
|
*
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package cn.lili.modules.permission.serviceimpl;
|
package cn.lili.modules.permission.serviceimpl;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
|
||||||
import cn.hutool.core.text.CharSequenceUtil;
|
import cn.hutool.core.text.CharSequenceUtil;
|
||||||
import cn.lili.common.vo.PageVO;
|
import cn.lili.common.vo.PageVO;
|
||||||
import cn.lili.common.vo.SearchVO;
|
import cn.lili.common.vo.SearchVO;
|
||||||
@ -9,7 +8,9 @@ import cn.lili.modules.permission.repository.SystemLogRepository;
|
|||||||
import cn.lili.modules.permission.service.SystemLogService;
|
import cn.lili.modules.permission.service.SystemLogService;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import org.elasticsearch.common.unit.Fuzziness;
|
||||||
import org.elasticsearch.index.query.BoolQueryBuilder;
|
import org.elasticsearch.index.query.BoolQueryBuilder;
|
||||||
|
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
|
||||||
import org.elasticsearch.index.query.QueryBuilders;
|
import org.elasticsearch.index.query.QueryBuilders;
|
||||||
import org.elasticsearch.search.sort.SortBuilders;
|
import org.elasticsearch.search.sort.SortBuilders;
|
||||||
import org.elasticsearch.search.sort.SortOrder;
|
import org.elasticsearch.search.sort.SortOrder;
|
||||||
@ -82,25 +83,22 @@ public class SystemLogServiceImpl implements SystemLogService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (CharSequenceUtil.isNotEmpty(operatorName)) {
|
if (CharSequenceUtil.isNotEmpty(operatorName)) {
|
||||||
nativeSearchQueryBuilder.withFilter(QueryBuilders.wildcardQuery("username", "*" + operatorName + "*"));
|
nativeSearchQueryBuilder.withQuery(QueryBuilders.matchQuery("username", operatorName));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CharSequenceUtil.isNotEmpty(key)) {
|
if (CharSequenceUtil.isNotEmpty(key)) {
|
||||||
BoolQueryBuilder filterBuilder = new BoolQueryBuilder();
|
MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(key, "requestUrl", "requestParam", "responseBody", "name");
|
||||||
filterBuilder.should(QueryBuilders.wildcardQuery("requestUrl", "*" + key + "*"))
|
multiMatchQueryBuilder.fuzziness(Fuzziness.AUTO);
|
||||||
.should(QueryBuilders.wildcardQuery("requestParam", "*" + key + "*"))
|
nativeSearchQueryBuilder.withFilter(multiMatchQueryBuilder);
|
||||||
.should(QueryBuilders.wildcardQuery("responseBody", "*" + key + "*"))
|
|
||||||
.should(QueryBuilders.wildcardQuery("name", "*" + key + "*"));
|
|
||||||
nativeSearchQueryBuilder.withFilter(filterBuilder);
|
|
||||||
}
|
}
|
||||||
//时间有效性判定
|
//时间有效性判定
|
||||||
if (searchVo.getConvertStartDate() != null && searchVo.getConvertEndDate() != null) {
|
if (searchVo.getConvertStartDate() != null && searchVo.getConvertEndDate() != null) {
|
||||||
BoolQueryBuilder filterBuilder = new BoolQueryBuilder();
|
BoolQueryBuilder filterBuilder = new BoolQueryBuilder();
|
||||||
//大于方法
|
//大于方法
|
||||||
filterBuilder.must(
|
filterBuilder.filter(
|
||||||
QueryBuilders.rangeQuery("createTime")
|
QueryBuilders.rangeQuery("createTime")
|
||||||
.gte(DateUtil.format(searchVo.getConvertStartDate(), "dd/MM/yyyy"))
|
.gte(searchVo.getConvertStartDate().getTime())
|
||||||
.lte(DateUtil.format(searchVo.getConvertEndDate(), "dd/MM/yyyy")).format("dd/MM/yyyy||yyyy"));
|
.lte(searchVo.getConvertEndDate().getTime()));
|
||||||
|
|
||||||
nativeSearchQueryBuilder.withFilter(filterBuilder);
|
nativeSearchQueryBuilder.withFilter(filterBuilder);
|
||||||
}
|
}
|
||||||
|
@ -293,6 +293,7 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
|
|||||||
LambdaUpdateWrapper<MemberCoupon> updateWrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<MemberCoupon> updateWrapper = new LambdaUpdateWrapper<>();
|
||||||
updateWrapper.in(MemberCoupon::getId, memberCouponIds);
|
updateWrapper.in(MemberCoupon::getId, memberCouponIds);
|
||||||
updateWrapper.set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name());
|
updateWrapper.set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name());
|
||||||
|
updateWrapper.set(MemberCoupon::getConsumptionTime, null);
|
||||||
return this.update(updateWrapper);
|
return this.update(updateWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -455,7 +455,7 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
|||||||
public void deleteIndex(Map<String, Object> queryFields) {
|
public void deleteIndex(Map<String, Object> queryFields) {
|
||||||
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
|
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
|
||||||
for (Map.Entry<String, Object> entry : queryFields.entrySet()) {
|
for (Map.Entry<String, Object> entry : queryFields.entrySet()) {
|
||||||
boolQueryBuilder.filter(QueryBuilders.termsQuery(entry.getKey(), entry.getValue()));
|
boolQueryBuilder.filter(QueryBuilders.termsQuery(entry.getKey(), entry.getValue().toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest();
|
DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest();
|
||||||
|
@ -15,6 +15,7 @@ import cn.lili.modules.search.entity.dto.EsGoodsSearchDTO;
|
|||||||
import cn.lili.modules.search.entity.dto.ParamOptions;
|
import cn.lili.modules.search.entity.dto.ParamOptions;
|
||||||
import cn.lili.modules.search.entity.dto.SelectorOptions;
|
import cn.lili.modules.search.entity.dto.SelectorOptions;
|
||||||
import cn.lili.modules.search.service.EsGoodsSearchService;
|
import cn.lili.modules.search.service.EsGoodsSearchService;
|
||||||
|
import cn.lili.modules.search.utils.SqlFilter;
|
||||||
import com.alibaba.druid.util.StringUtils;
|
import com.alibaba.druid.util.StringUtils;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.lucene.search.join.ScoreMode;
|
import org.apache.lucene.search.join.ScoreMode;
|
||||||
@ -81,7 +82,10 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SearchPage<EsGoodsIndex> searchGoods(EsGoodsSearchDTO searchDTO, PageVO pageVo) {
|
public SearchPage<EsGoodsIndex> searchGoods(EsGoodsSearchDTO searchDTO, PageVO pageVo) {
|
||||||
if (CharSequenceUtil.isNotBlank(searchDTO.getKeyword())) {
|
|
||||||
|
//如果搜索词不为空,且明显不是sql注入,那么就将搜索词加入热搜词
|
||||||
|
//PS:线上环境运行很多客户反馈被sql攻击,写在了搜索热词里,这里控制命中关键字就不做热词统计,如果线上比较严格可以调用关键词替换,不过不建议这么做
|
||||||
|
if (CharSequenceUtil.isNotBlank(searchDTO.getKeyword()) && !SqlFilter.hit(searchDTO.getKeyword())) {
|
||||||
cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), searchDTO.getKeyword());
|
cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), searchDTO.getKeyword());
|
||||||
}
|
}
|
||||||
NativeSearchQueryBuilder searchQueryBuilder = createSearchQueryBuilder(searchDTO, pageVo);
|
NativeSearchQueryBuilder searchQueryBuilder = createSearchQueryBuilder(searchDTO, pageVo);
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
package cn.lili.modules.search.utils;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sql 关键字过滤
|
||||||
|
*
|
||||||
|
* @author liushuai(liushuai711 @ gmail.com)
|
||||||
|
* @version v4.0
|
||||||
|
* @Description:
|
||||||
|
* @since 2023/3/22 17:27
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class SqlFilter {
|
||||||
|
|
||||||
|
private static final Set<String> SQL_KEYWORDS = new HashSet<>(Arrays.asList(
|
||||||
|
"SELECT", "FROM", "WHERE", "AND", "OR", "NOT", "INSERT", "UPDATE", "DELETE", "CREATE",
|
||||||
|
"TABLE", "INDEX", "VIEW", "DROP", "ALTER", "COLUMN", "ADD", "SET", "GROUP", "BY",
|
||||||
|
"HAVING", "ORDER", "ASC", "DESC", "LIKE", "IN", "BETWEEN", "IS", "NULL", "TRUE", "FALSE",
|
||||||
|
"JOIN", "LEFT", "RIGHT", "INNER", "OUTER", "FULL", "ON", "AS", "DISTINCT", "COUNT",
|
||||||
|
"MAX", "MIN", "SUM", "AVG"
|
||||||
|
));
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关键字命中
|
||||||
|
*
|
||||||
|
* @param sql
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Boolean hit(String sql) {
|
||||||
|
String[] tokens = sql.split("\\s+");
|
||||||
|
for (String token : tokens) {
|
||||||
|
if (!SQL_KEYWORDS.contains(token.toUpperCase())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关键字替换
|
||||||
|
*
|
||||||
|
* @param sql
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String filterSql(String sql) {
|
||||||
|
String[] tokens = sql.split("\\s+");
|
||||||
|
StringBuilder filteredSql = new StringBuilder();
|
||||||
|
for (String token : tokens) {
|
||||||
|
if (!SQL_KEYWORDS.contains(token.toUpperCase())) {
|
||||||
|
filteredSql.append(token).append(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return filteredSql.toString().trim();
|
||||||
|
}
|
||||||
|
}
|
@ -82,7 +82,7 @@ public class Store extends BaseEntity {
|
|||||||
@ApiModelProperty(value = "服务评分")
|
@ApiModelProperty(value = "服务评分")
|
||||||
private Double serviceScore;
|
private Double serviceScore;
|
||||||
|
|
||||||
@ApiModelProperty(value = "物流描述")
|
@ApiModelProperty(value = "物流评分")
|
||||||
private Double deliveryScore;
|
private Double deliveryScore;
|
||||||
|
|
||||||
@ApiModelProperty(value = "商品数量")
|
@ApiModelProperty(value = "商品数量")
|
||||||
|
@ -189,7 +189,7 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改店铺详细细腻
|
* 修改店铺详细信息
|
||||||
*
|
*
|
||||||
* @param storeEditDTO 修改店铺信息
|
* @param storeEditDTO 修改店铺信息
|
||||||
*/
|
*/
|
||||||
@ -235,11 +235,16 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> implements
|
|||||||
public boolean disable(String id) {
|
public boolean disable(String id) {
|
||||||
Store store = this.getById(id);
|
Store store = this.getById(id);
|
||||||
if (store != null) {
|
if (store != null) {
|
||||||
store.setStoreDisable(StoreStatusEnum.CLOSED.value());
|
|
||||||
|
|
||||||
|
LambdaUpdateWrapper<Store> storeLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||||
|
storeLambdaUpdateWrapper.eq(Store::getId, id);
|
||||||
|
storeLambdaUpdateWrapper.set(Store::getStoreDisable, StoreStatusEnum.CLOSED.value());
|
||||||
|
boolean update = this.update(storeLambdaUpdateWrapper);
|
||||||
//下架所有此店铺商品
|
//下架所有此店铺商品
|
||||||
goodsService.underStoreGoods(id);
|
if (update) {
|
||||||
return this.updateById(store);
|
goodsService.underStoreGoods(id);
|
||||||
|
}
|
||||||
|
return update;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new ServiceException(ResultCode.STORE_NOT_EXIST);
|
throw new ServiceException(ResultCode.STORE_NOT_EXIST);
|
||||||
@ -299,7 +304,7 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> implements
|
|||||||
|
|
||||||
//获取当前操作的店铺
|
//获取当前操作的店铺
|
||||||
Store store = getStoreByMember();
|
Store store = getStoreByMember();
|
||||||
//校验迪纳普状态
|
//校验店铺状态
|
||||||
checkStoreStatus(store);
|
checkStoreStatus(store);
|
||||||
StoreDetail storeDetail = storeDetailService.getStoreDetail(store.getId());
|
StoreDetail storeDetail = storeDetailService.getStoreDetail(store.getId());
|
||||||
//设置店铺的银行信息
|
//设置店铺的银行信息
|
||||||
@ -312,10 +317,9 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> implements
|
|||||||
//获取当前操作的店铺
|
//获取当前操作的店铺
|
||||||
Store store = getStoreByMember();
|
Store store = getStoreByMember();
|
||||||
|
|
||||||
//校验迪纳普状态
|
//校验店铺状态
|
||||||
checkStoreStatus(store);
|
checkStoreStatus(store);
|
||||||
BeanUtil.copyProperties(storeOtherInfoDTO, store);
|
BeanUtil.copyProperties(storeOtherInfoDTO, store);
|
||||||
this.updateById(store);
|
|
||||||
|
|
||||||
StoreDetail storeDetail = storeDetailService.getStoreDetail(store.getId());
|
StoreDetail storeDetail = storeDetailService.getStoreDetail(store.getId());
|
||||||
//设置店铺的其他信息
|
//设置店铺的其他信息
|
||||||
@ -327,11 +331,7 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> implements
|
|||||||
//修改店铺详细信息
|
//修改店铺详细信息
|
||||||
storeDetailService.updateById(storeDetail);
|
storeDetailService.updateById(storeDetail);
|
||||||
//设置店铺名称,修改店铺信息
|
//设置店铺名称,修改店铺信息
|
||||||
store.setStoreName(storeOtherInfoDTO.getStoreName());
|
|
||||||
store.setStoreDisable(StoreStatusEnum.APPLYING.name());
|
store.setStoreDisable(StoreStatusEnum.APPLYING.name());
|
||||||
store.setStoreCenter(storeOtherInfoDTO.getStoreCenter());
|
|
||||||
store.setStoreDesc(storeOtherInfoDTO.getStoreDesc());
|
|
||||||
store.setStoreLogo(storeOtherInfoDTO.getStoreLogo());
|
|
||||||
return this.updateById(store);
|
return this.updateById(store);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -342,10 +342,11 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> implements
|
|||||||
*/
|
*/
|
||||||
private void checkStoreStatus(Store store) {
|
private void checkStoreStatus(Store store) {
|
||||||
|
|
||||||
//如果店铺状态为申请中或者已申请,则正常走流程,否则抛出异常
|
//如果店铺状态为已开启、已关闭、申请中,则抛出异常
|
||||||
if (store.getStoreDisable().equals(StoreStatusEnum.APPLY.name()) || store.getStoreDisable().equals(StoreStatusEnum.APPLYING.name())) {
|
if (store.getStoreDisable().equals(StoreStatusEnum.OPEN.name())
|
||||||
return;
|
|| store.getStoreDisable().equals(StoreStatusEnum.CLOSED.name())
|
||||||
} else {
|
|| store.getStoreDisable().equals(StoreStatusEnum.APPLYING.name())
|
||||||
|
) {
|
||||||
throw new ServiceException(ResultCode.STORE_STATUS_ERROR);
|
throw new ServiceException(ResultCode.STORE_STATUS_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -381,7 +382,7 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> implements
|
|||||||
AuthUser currentUser = UserContext.getCurrentUser();
|
AuthUser currentUser = UserContext.getCurrentUser();
|
||||||
List<String> skuIdList = new ArrayList<>();
|
List<String> skuIdList = new ArrayList<>();
|
||||||
for (FootPrint footPrint : footprintService.list(new LambdaUpdateWrapper<FootPrint>().eq(FootPrint::getStoreId, currentUser.getStoreId()).eq(FootPrint::getMemberId, memberId))) {
|
for (FootPrint footPrint : footprintService.list(new LambdaUpdateWrapper<FootPrint>().eq(FootPrint::getStoreId, currentUser.getStoreId()).eq(FootPrint::getMemberId, memberId))) {
|
||||||
if(footPrint.getSkuId() != null){
|
if (footPrint.getSkuId() != null) {
|
||||||
skuIdList.add(footPrint.getSkuId());
|
skuIdList.add(footPrint.getSkuId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,11 @@
|
|||||||
<artifactId>framework</artifactId>
|
<artifactId>framework</artifactId>
|
||||||
<version>${revision}</version>
|
<version>${revision}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-websocket</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@ -46,7 +46,7 @@ public class ImTalkController {
|
|||||||
@GetMapping(value = "/by/user/{userId}")
|
@GetMapping(value = "/by/user/{userId}")
|
||||||
@ApiOperation(value = "查看与某人聊天详情")
|
@ApiOperation(value = "查看与某人聊天详情")
|
||||||
public ResultMessage<ImTalkVO> getByUser(@PathVariable String userId) {
|
public ResultMessage<ImTalkVO> getByUser(@PathVariable String userId) {
|
||||||
return ResultUtil.data(new ImTalkVO(imTalkService.getTalkByUser(userId),userId));
|
return ResultUtil.data(imTalkService.getTalkByUserId(userId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping(value = "/top")
|
@GetMapping(value = "/top")
|
||||||
|
2
pom.xml
2
pom.xml
@ -26,7 +26,7 @@
|
|||||||
<images-version>1</images-version>
|
<images-version>1</images-version>
|
||||||
<alipay-sdk-version>4.22.32.ALL</alipay-sdk-version>
|
<alipay-sdk-version>4.22.32.ALL</alipay-sdk-version>
|
||||||
<mybatis-plus-version>3.5.1</mybatis-plus-version>
|
<mybatis-plus-version>3.5.1</mybatis-plus-version>
|
||||||
<Hutool-version>5.8.0</Hutool-version>
|
<Hutool-version>5.8.14</Hutool-version>
|
||||||
<TinyPinyin-verions>2.0.3.RELEASE</TinyPinyin-verions>
|
<TinyPinyin-verions>2.0.3.RELEASE</TinyPinyin-verions>
|
||||||
<jasypt-version>3.0.4</jasypt-version>
|
<jasypt-version>3.0.4</jasypt-version>
|
||||||
<neetl-version>2.9.10</neetl-version>
|
<neetl-version>2.9.10</neetl-version>
|
||||||
|
@ -82,7 +82,7 @@ public class LogisticsStoreController {
|
|||||||
@DeleteMapping(value = "/{id}")
|
@DeleteMapping(value = "/{id}")
|
||||||
public ResultMessage<Object> cancel(@PathVariable String id) {
|
public ResultMessage<Object> cancel(@PathVariable String id) {
|
||||||
String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
|
String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
|
||||||
boolean remove = storeLogisticsService.remove(new LambdaQueryWrapper<StoreLogistics>().eq(StoreLogistics::getId, id).eq(StoreLogistics::getStoreId, storeId));
|
boolean remove = storeLogisticsService.remove(new LambdaQueryWrapper<StoreLogistics>().eq(StoreLogistics::getLogisticsId, id).eq(StoreLogistics::getStoreId, storeId));
|
||||||
return ResultUtil.data(remove);
|
return ResultUtil.data(remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user