Merge branch 'master' into Bulbasaur
This commit is contained in:
commit
abaf32f3dc
@ -1,6 +1,8 @@
|
|||||||
package cn.lili.controller.goods;
|
package cn.lili.controller.goods;
|
||||||
|
|
||||||
|
import cn.lili.common.enums.ResultCode;
|
||||||
import cn.lili.common.enums.ResultUtil;
|
import cn.lili.common.enums.ResultUtil;
|
||||||
|
import cn.lili.common.exception.ServiceException;
|
||||||
import cn.lili.common.vo.PageVO;
|
import cn.lili.common.vo.PageVO;
|
||||||
import cn.lili.common.vo.ResultMessage;
|
import cn.lili.common.vo.ResultMessage;
|
||||||
import cn.lili.modules.distribution.service.DistributionService;
|
import cn.lili.modules.distribution.service.DistributionService;
|
||||||
@ -20,6 +22,7 @@ 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 lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@ -37,6 +40,7 @@ import java.util.Map;
|
|||||||
* @author Chopper
|
* @author Chopper
|
||||||
* @date 2020/11/16 10:06 下午
|
* @date 2020/11/16 10:06 下午
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Api(tags = "买家端,商品接口")
|
@Api(tags = "买家端,商品接口")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/buyer/goods")
|
@RequestMapping("/buyer/goods")
|
||||||
@ -80,9 +84,18 @@ public class GoodsBuyerController {
|
|||||||
@PageViewPoint(type = PageViewEnum.SKU, id = "#id")
|
@PageViewPoint(type = PageViewEnum.SKU, id = "#id")
|
||||||
public ResultMessage<Map<String, Object>> getSku(@NotNull(message = "商品ID不能为空") @PathVariable("goodsId") String goodsId,
|
public ResultMessage<Map<String, Object>> getSku(@NotNull(message = "商品ID不能为空") @PathVariable("goodsId") String goodsId,
|
||||||
@NotNull(message = "SKU ID不能为空") @PathVariable("skuId") String skuId) {
|
@NotNull(message = "SKU ID不能为空") @PathVariable("skuId") String skuId) {
|
||||||
|
try {
|
||||||
|
// 读取选中的列表
|
||||||
Map<String, Object> map = goodsSkuService.getGoodsSkuDetail(goodsId, skuId);
|
Map<String, Object> map = goodsSkuService.getGoodsSkuDetail(goodsId, skuId);
|
||||||
return ResultUtil.data(map);
|
return ResultUtil.data(map);
|
||||||
|
} catch (ServiceException se) {
|
||||||
|
log.error(se.getMsg(), se);
|
||||||
|
return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(ResultCode.GOODS_ERROR.message(), e);
|
||||||
|
return ResultUtil.error(ResultCode.GOODS_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "获取商品分页列表")
|
@ApiOperation(value = "获取商品分页列表")
|
||||||
|
@ -4,9 +4,9 @@ import cn.lili.common.enums.ResultUtil;
|
|||||||
import cn.lili.common.vo.PageVO;
|
import cn.lili.common.vo.PageVO;
|
||||||
import cn.lili.common.vo.ResultMessage;
|
import cn.lili.common.vo.ResultMessage;
|
||||||
import cn.lili.modules.message.entity.enums.MessageStatusEnum;
|
import cn.lili.modules.message.entity.enums.MessageStatusEnum;
|
||||||
import cn.lili.modules.member.entity.dos.MemberMessage;
|
import cn.lili.modules.message.entity.dos.MemberMessage;
|
||||||
import cn.lili.modules.member.entity.vo.MemberMessageQueryVO;
|
import cn.lili.modules.message.entity.vos.MemberMessageQueryVO;
|
||||||
import cn.lili.modules.member.service.MemberMessageService;
|
import cn.lili.modules.message.service.MemberMessageService;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
|
@ -242,7 +242,7 @@ public class CartController {
|
|||||||
//读取选中的列表
|
//读取选中的列表
|
||||||
return ResultUtil.data(this.cartService.createTrade(tradeParams));
|
return ResultUtil.data(this.cartService.createTrade(tradeParams));
|
||||||
} catch (ServiceException se) {
|
} catch (ServiceException se) {
|
||||||
log.error(se.getMsg(), se);
|
log.info(se.getMsg(), se);
|
||||||
return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message());
|
return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(ResultCode.ORDER_ERROR.message(), e);
|
log.error(ResultCode.ORDER_ERROR.message(), e);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cn.lili.controller.common;
|
package cn.lili.controller.common;
|
||||||
|
|
||||||
import cn.lili.common.aop.limiter.annotation.LimitPoint;
|
import cn.lili.common.aop.limiter.annotation.LimitPoint;
|
||||||
|
import cn.lili.common.enums.ResultCode;
|
||||||
import cn.lili.common.exception.ServiceException;
|
import cn.lili.common.exception.ServiceException;
|
||||||
import cn.lili.common.enums.ResultUtil;
|
import cn.lili.common.enums.ResultUtil;
|
||||||
import cn.lili.common.verification.enums.VerificationEnums;
|
import cn.lili.common.verification.enums.VerificationEnums;
|
||||||
@ -37,8 +38,8 @@ public class SliderImageController {
|
|||||||
} catch (ServiceException e) {
|
} catch (ServiceException e) {
|
||||||
throw e;
|
throw e;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("获取校验接口错误",e);
|
log.error("获取校验接口错误", e);
|
||||||
return null;
|
throw new ServiceException(ResultCode.VERIFICATION_EXIST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,18 +1,27 @@
|
|||||||
package cn.lili.listener;
|
package cn.lili.listener;
|
||||||
|
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import cn.lili.common.enums.SwitchEnum;
|
||||||
import cn.lili.common.rocketmq.tags.OtherTagsEnum;
|
import cn.lili.common.rocketmq.tags.OtherTagsEnum;
|
||||||
import cn.lili.common.sms.SmsUtil;
|
import cn.lili.common.sms.SmsUtil;
|
||||||
|
import cn.lili.common.vo.PageVO;
|
||||||
|
import cn.lili.modules.member.entity.dos.Member;
|
||||||
|
import cn.lili.modules.member.entity.vo.MemberSearchVO;
|
||||||
import cn.lili.modules.member.mapper.MemberMapper;
|
import cn.lili.modules.member.mapper.MemberMapper;
|
||||||
|
import cn.lili.modules.member.service.MemberService;
|
||||||
|
import cn.lili.modules.message.entity.dos.MemberMessage;
|
||||||
import cn.lili.modules.message.entity.dos.Message;
|
import cn.lili.modules.message.entity.dos.Message;
|
||||||
import cn.lili.modules.message.entity.dos.StoreMessage;
|
import cn.lili.modules.message.entity.dos.StoreMessage;
|
||||||
import cn.lili.modules.message.entity.dto.SmsReachDTO;
|
import cn.lili.modules.message.entity.dto.SmsReachDTO;
|
||||||
|
import cn.lili.modules.message.entity.enums.MessageSendClient;
|
||||||
import cn.lili.modules.message.entity.enums.MessageStatusEnum;
|
import cn.lili.modules.message.entity.enums.MessageStatusEnum;
|
||||||
import cn.lili.modules.message.entity.enums.RangeEnum;
|
import cn.lili.modules.message.entity.enums.RangeEnum;
|
||||||
|
import cn.lili.modules.message.service.MemberMessageService;
|
||||||
import cn.lili.modules.message.service.StoreMessageService;
|
import cn.lili.modules.message.service.StoreMessageService;
|
||||||
import cn.lili.modules.store.entity.dos.Store;
|
import cn.lili.modules.store.entity.dos.Store;
|
||||||
import cn.lili.modules.store.service.StoreService;
|
import cn.lili.modules.store.service.StoreService;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
||||||
import org.apache.rocketmq.spring.core.RocketMQListener;
|
import org.apache.rocketmq.spring.core.RocketMQListener;
|
||||||
@ -41,9 +50,15 @@ public class NoticeSendMessageListener implements RocketMQListener<MessageExt> {
|
|||||||
//店铺消息
|
//店铺消息
|
||||||
@Autowired
|
@Autowired
|
||||||
private StoreMessageService storeMessageService;
|
private StoreMessageService storeMessageService;
|
||||||
|
//会员消息
|
||||||
|
@Autowired
|
||||||
|
private MemberMessageService memberMessageService;
|
||||||
//店铺
|
//店铺
|
||||||
@Autowired
|
@Autowired
|
||||||
private StoreService storeService;
|
private StoreService storeService;
|
||||||
|
//会员
|
||||||
|
@Autowired
|
||||||
|
private MemberService memberService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMessage(MessageExt messageExt) {
|
public void onMessage(MessageExt messageExt) {
|
||||||
@ -51,7 +66,6 @@ public class NoticeSendMessageListener implements RocketMQListener<MessageExt> {
|
|||||||
case SMS:
|
case SMS:
|
||||||
String smsJsonStr = new String(messageExt.getBody());
|
String smsJsonStr = new String(messageExt.getBody());
|
||||||
SmsReachDTO smsReachDTO = JSONUtil.toBean(smsJsonStr, SmsReachDTO.class);
|
SmsReachDTO smsReachDTO = JSONUtil.toBean(smsJsonStr, SmsReachDTO.class);
|
||||||
|
|
||||||
//发送全部会员
|
//发送全部会员
|
||||||
if (smsReachDTO.getSmsRange().equals(RangeEnum.ALL.name())) {
|
if (smsReachDTO.getSmsRange().equals(RangeEnum.ALL.name())) {
|
||||||
//获取所有会员的手机号
|
//获取所有会员的手机号
|
||||||
@ -65,8 +79,27 @@ public class NoticeSendMessageListener implements RocketMQListener<MessageExt> {
|
|||||||
//管理员发送站内信
|
//管理员发送站内信
|
||||||
case MESSAGE:
|
case MESSAGE:
|
||||||
Message message = JSONUtil.toBean(new String(messageExt.getBody()), Message.class);
|
Message message = JSONUtil.toBean(new String(messageExt.getBody()), Message.class);
|
||||||
|
// 管理端发送给商家的站内信
|
||||||
|
if (message.getMessageClient().equals(MessageSendClient.STORE.name().toLowerCase())) {
|
||||||
|
saveStoreMessage(message);
|
||||||
|
} else {
|
||||||
|
//管理员发送给会员的站内信
|
||||||
|
saveMemberMessage(message);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存店铺消息
|
||||||
|
*
|
||||||
|
* @param message 消息
|
||||||
|
*/
|
||||||
|
private void saveStoreMessage(Message message) {
|
||||||
List<StoreMessage> list = new ArrayList<>();
|
List<StoreMessage> list = new ArrayList<>();
|
||||||
//保存商家记录
|
//发送全部商家情况
|
||||||
if (message.getMessageRange().equals("ALL")) {
|
if (message.getMessageRange().equals("ALL")) {
|
||||||
List<Store> storeList = storeService.list(new QueryWrapper<Store>().eq("store_disable", "OPEN"));
|
List<Store> storeList = storeService.list(new QueryWrapper<Store>().eq("store_disable", "OPEN"));
|
||||||
storeList.forEach(item -> {
|
storeList.forEach(item -> {
|
||||||
@ -80,6 +113,7 @@ public class NoticeSendMessageListener implements RocketMQListener<MessageExt> {
|
|||||||
list.add(storeMessage);
|
list.add(storeMessage);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
//发送给指定商家情况
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (String str : message.getUserIds()) {
|
for (String str : message.getUserIds()) {
|
||||||
StoreMessage storeMessage = new StoreMessage();
|
StoreMessage storeMessage = new StoreMessage();
|
||||||
@ -93,10 +127,70 @@ public class NoticeSendMessageListener implements RocketMQListener<MessageExt> {
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (list.size() > 0) {
|
||||||
|
//执行保存
|
||||||
storeMessageService.save(list);
|
storeMessageService.save(list);
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存会员消息
|
||||||
|
*
|
||||||
|
* @param message 消息
|
||||||
|
*/
|
||||||
|
private void saveMemberMessage(Message message) {
|
||||||
|
List<MemberMessage> list = new ArrayList<>();
|
||||||
|
//如果是给所有会员发送消息
|
||||||
|
if (message.getMessageRange().equals("ALL")) {
|
||||||
|
//查询所有会员总数,因为会员总数比较大 如果一次性查出来会占用数据库资源,所以要分页查询
|
||||||
|
MemberSearchVO memberSearchVO = new MemberSearchVO();
|
||||||
|
memberSearchVO.setDisabled(SwitchEnum.OPEN.name());
|
||||||
|
Integer memberNum = memberService.getMemberNum(memberSearchVO);
|
||||||
|
//构建分页查询参数
|
||||||
|
//100条查一次
|
||||||
|
Integer pageSize = 200;
|
||||||
|
Integer pageCount = 0;
|
||||||
|
pageCount = memberNum / pageSize;
|
||||||
|
pageCount = memberNum % pageSize > 0 ? pageCount + 1 : pageCount;
|
||||||
|
for (int i = 1; i <= pageCount; i++) {
|
||||||
|
PageVO pageVO = new PageVO();
|
||||||
|
pageVO.setPageSize(pageSize);
|
||||||
|
pageVO.setPageNumber(i);
|
||||||
|
IPage<Member> page = memberService.getMemberPage(memberSearchVO, pageVO);
|
||||||
|
//循环要保存的信息
|
||||||
|
page.getRecords().forEach(item -> {
|
||||||
|
MemberMessage memberMessage = new MemberMessage();
|
||||||
|
memberMessage.setContent(message.getContent());
|
||||||
|
memberMessage.setTitle(message.getTitle());
|
||||||
|
memberMessage.setMessageId(message.getId());
|
||||||
|
memberMessage.setMemberId(item.getId());
|
||||||
|
memberMessage.setMemberName(item.getUsername());
|
||||||
|
memberMessage.setStatus(MessageStatusEnum.UN_READY.name());
|
||||||
|
list.add(memberMessage);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//如果是给指定会员发送消息
|
||||||
|
int i = 0;
|
||||||
|
for (String str : message.getUserIds()) {
|
||||||
|
MemberMessage memberMessage = new MemberMessage();
|
||||||
|
memberMessage.setMessageId(message.getId());
|
||||||
|
memberMessage.setMemberId(str);
|
||||||
|
memberMessage.setMemberName(message.getUserNames()[i]);
|
||||||
|
memberMessage.setStatus(MessageStatusEnum.UN_READY.name());
|
||||||
|
memberMessage.setTitle(message.getTitle());
|
||||||
|
memberMessage.setContent(message.getContent());
|
||||||
|
list.add(memberMessage);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (list.size() > 0) {
|
||||||
|
//执行保存
|
||||||
|
memberMessageService.save(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,9 @@ server:
|
|||||||
servlet:
|
servlet:
|
||||||
context-path: /
|
context-path: /
|
||||||
|
|
||||||
|
# 正式部署时候,解开此处配置,防止文件夹被清除导致的文件上传失败问题
|
||||||
|
# multipart:
|
||||||
|
# location: /Users/lifenlong/Desktop/ceshi
|
||||||
tomcat:
|
tomcat:
|
||||||
uri-encoding: UTF-8
|
uri-encoding: UTF-8
|
||||||
threads:
|
threads:
|
||||||
@ -46,7 +49,7 @@ spring:
|
|||||||
open-in-view: false
|
open-in-view: false
|
||||||
# Redis
|
# Redis
|
||||||
redis:
|
redis:
|
||||||
host: 192.168.0.116
|
host: 127.0.0.1
|
||||||
port: 6379
|
port: 6379
|
||||||
password: lilishop
|
password: lilishop
|
||||||
lettuce:
|
lettuce:
|
||||||
@ -77,7 +80,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://127.0.0.1:3306/Bulbasaur?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
|
url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
|
||||||
username: root
|
username: root
|
||||||
password: lilishop
|
password: lilishop
|
||||||
maxActive: 20
|
maxActive: 20
|
||||||
@ -279,8 +282,6 @@ lili:
|
|||||||
notice-send-group: lili_send_notice_group
|
notice-send-group: lili_send_notice_group
|
||||||
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
|
||||||
broadcast-topic: lili_broadcast_topic
|
|
||||||
broadcast-group: lili_broadcast_group
|
|
||||||
rocketmq:
|
rocketmq:
|
||||||
name-server: 127.0.0.1:9876
|
name-server: 127.0.0.1:9876
|
||||||
producer:
|
producer:
|
||||||
|
@ -5,10 +5,8 @@ import cn.lili.common.exception.ServiceException;
|
|||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.aspectj.lang.ProceedingJoinPoint;
|
|
||||||
import org.aspectj.lang.annotation.Around;
|
|
||||||
import org.aspectj.lang.annotation.Aspect;
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
import org.aspectj.lang.reflect.MethodSignature;
|
import org.aspectj.lang.annotation.Before;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
@ -18,7 +16,6 @@ import org.springframework.web.context.request.ServletRequestAttributes;
|
|||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流量拦截
|
* 流量拦截
|
||||||
@ -43,40 +40,34 @@ public class LimitInterceptor {
|
|||||||
this.limitScript = limitScript;
|
this.limitScript = limitScript;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Around("execution(public * *(..)) && @annotation(cn.lili.common.aop.limiter.annotation.LimitPoint)")
|
@Before("@annotation(limitPointAnnotation)")
|
||||||
public Object interceptor(ProceedingJoinPoint pjp) throws Throwable {
|
public void interceptor(LimitPoint limitPointAnnotation) {
|
||||||
MethodSignature signature = (MethodSignature) pjp.getSignature();
|
|
||||||
Method method = signature.getMethod();
|
|
||||||
LimitPoint limitPointAnnotation = method.getAnnotation(LimitPoint.class);
|
|
||||||
LimitType limitType = limitPointAnnotation.limitType();
|
LimitType limitType = limitPointAnnotation.limitType();
|
||||||
String name = limitPointAnnotation.name();
|
String name = limitPointAnnotation.name();
|
||||||
String key;
|
String key;
|
||||||
int limitPeriod = limitPointAnnotation.period();
|
int limitPeriod = limitPointAnnotation.period();
|
||||||
int limitCount = limitPointAnnotation.limit();
|
int limitCount = limitPointAnnotation.limit();
|
||||||
switch (limitType) {
|
switch (limitType) {
|
||||||
case IP:
|
|
||||||
key = limitPointAnnotation.key() + getIpAddress();
|
|
||||||
break;
|
|
||||||
case CUSTOMER:
|
case CUSTOMER:
|
||||||
key = limitPointAnnotation.key();
|
key = limitPointAnnotation.key();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
key = StringUtils.upperCase(method.getName());
|
key = limitPointAnnotation.key() + getIpAddress();
|
||||||
}
|
}
|
||||||
ImmutableList<String> keys = ImmutableList.of(StringUtils.join(limitPointAnnotation.prefix(), key));
|
ImmutableList<String> keys = ImmutableList.of(StringUtils.join(limitPointAnnotation.prefix(), key));
|
||||||
try {
|
try {
|
||||||
Number count = redisTemplate.execute(limitScript, keys, limitCount, limitPeriod);
|
Number count = redisTemplate.execute(limitScript, keys, limitCount, limitPeriod);
|
||||||
log.info("Access try count is {} for name={} and key = {}", count, name, key);
|
log.info("限制请求{}, 当前请求{},缓存key{}", limitCount, count.intValue(), key);
|
||||||
//如果缓存里没有值,或者他的值小于限制频率
|
//如果缓存里没有值,或者他的值小于限制频率
|
||||||
if (count.intValue() <= limitCount) {
|
if (count.intValue() >= limitCount) {
|
||||||
return pjp.proceed();
|
|
||||||
} else {
|
|
||||||
throw new ServiceException("访问过于频繁,请稍后再试");
|
throw new ServiceException("访问过于频繁,请稍后再试");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//如果从redis中执行都值判定为空,则这里跳过
|
//如果从redis中执行都值判定为空,则这里跳过
|
||||||
catch (NullPointerException e) {
|
catch (NullPointerException e) {
|
||||||
return pjp.proceed();
|
return;
|
||||||
|
} catch (ServiceException e) {
|
||||||
|
throw e;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException("服务器异常,请稍后再试");
|
throw new RuntimeException("服务器异常,请稍后再试");
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ public enum ResultCode {
|
|||||||
/**
|
/**
|
||||||
* 失败返回码
|
* 失败返回码
|
||||||
*/
|
*/
|
||||||
ERROR(400, "失败"),
|
ERROR(400, "服务器繁忙,请稍后重试"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 失败返回码
|
* 失败返回码
|
||||||
@ -34,6 +34,7 @@ public enum ResultCode {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
WECHAT_CONNECT_NOT_EXIST(1001, "微信联合登录未配置"),
|
WECHAT_CONNECT_NOT_EXIST(1001, "微信联合登录未配置"),
|
||||||
|
VERIFICATION_EXIST(1002, "验证码服务异常"),
|
||||||
/**
|
/**
|
||||||
* 分类
|
* 分类
|
||||||
*/
|
*/
|
||||||
@ -50,83 +51,126 @@ public enum ResultCode {
|
|||||||
/**
|
/**
|
||||||
* 商品
|
* 商品
|
||||||
*/
|
*/
|
||||||
|
GOODS_ERROR(11010, "读取商品异常"),
|
||||||
GOODS_NOT_EXIST(11001, "商品已下架"),
|
GOODS_NOT_EXIST(11001, "商品已下架"),
|
||||||
GOODS_NAME_ERROR(11002, "商品名称不正确,名称应为2-50字符"),
|
GOODS_NAME_ERROR(11002, "商品名称不正确,名称应为2-50字符"),
|
||||||
GOODS_UNDER_ERROR(11003, "商品下架失败"),
|
GOODS_UNDER_ERROR(11003, "商品下架失败"),
|
||||||
GOODS_UPPER_ERROR(11004, "商品上架失败"),
|
GOODS_UPPER_ERROR(11004, "商品上架失败"),
|
||||||
GOODS_AUTH_ERROR(11005, "商品审核失败"),
|
GOODS_AUTH_ERROR(11005, "商品审核失败"),
|
||||||
POINT_GOODS_ERROR(11006, "积分商品业务异常,请稍后重试"),
|
POINT_GOODS_ERROR(11006, "积分商品业务异常,请稍后重试"),
|
||||||
|
GOODS_SKU_SN_ERROR(11007, "商品SKU编号不能为空"),
|
||||||
|
GOODS_SKU_PRICE_ERROR(11008, "商品SKU价格不能小于等于0"),
|
||||||
|
GOODS_SKU_COST_ERROR(11009, "商品SKU成本价不能小于等于0"),
|
||||||
|
GOODS_SKU_WEIGHT_ERROR(11010, "商品重量不能为负数"),
|
||||||
|
GOODS_SKU_QUANTITY_ERROR(11011, "商品库存数量不能为负数"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 参数
|
* 参数
|
||||||
*/
|
*/
|
||||||
PARAMETER_SAVE_ERROR(12001, "参数添加失败"),
|
PARAMETER_SAVE_ERROR(12001, "参数添加失败"),
|
||||||
|
|
||||||
PARAMETER_UPDATE_ERROR(12002, "参数编辑失败"),
|
PARAMETER_UPDATE_ERROR(12002, "参数编辑失败"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 规格
|
* 规格
|
||||||
*/
|
*/
|
||||||
SPEC_SAVE_ERROR(13001, "规格修改失败"),
|
SPEC_SAVE_ERROR(13001, "规格修改失败"),
|
||||||
|
|
||||||
SPEC_UPDATE_ERROR(13002, "规格修改失败"),
|
SPEC_UPDATE_ERROR(13002, "规格修改失败"),
|
||||||
|
|
||||||
SPEC_DELETE_ERROR(13003, "此规格已绑定分类不允许删除"),
|
SPEC_DELETE_ERROR(13003, "此规格已绑定分类不允许删除"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 品牌
|
* 品牌
|
||||||
*/
|
*/
|
||||||
BRAND_SAVE_ERROR(14001, "品牌添加失败"),
|
BRAND_SAVE_ERROR(14001, "品牌添加失败"),
|
||||||
|
|
||||||
BRAND_UPDATE_ERROR(14002, "品牌修改失败"),
|
BRAND_UPDATE_ERROR(14002, "品牌修改失败"),
|
||||||
|
|
||||||
BRAND_DISABLE_ERROR(14003, "品牌禁用失败"),
|
BRAND_DISABLE_ERROR(14003, "品牌禁用失败"),
|
||||||
|
|
||||||
BRAND_DELETE_ERROR(14004, "品牌删除失败"),
|
BRAND_DELETE_ERROR(14004, "品牌删除失败"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户
|
* 用户
|
||||||
*/
|
*/
|
||||||
USER_EDIT_SUCCESS(20001, "用户修改成功"),
|
USER_EDIT_SUCCESS(20001, "用户修改成功"),
|
||||||
|
|
||||||
USER_NOT_EXIST(20002, "用户不存在"),
|
USER_NOT_EXIST(20002, "用户不存在"),
|
||||||
|
|
||||||
USER_NOT_LOGIN(20003, "用户未登录"),
|
USER_NOT_LOGIN(20003, "用户未登录"),
|
||||||
|
|
||||||
USER_AUTH_EXPIRED(20004, "用户已退出,请重新登录"),
|
USER_AUTH_EXPIRED(20004, "用户已退出,请重新登录"),
|
||||||
|
|
||||||
USER_AUTHORITY_ERROR(20005, "权限不足"),
|
USER_AUTHORITY_ERROR(20005, "权限不足"),
|
||||||
|
|
||||||
USER_CONNECT_LOGIN_ERROR(20006, "未找到登录信息"),
|
USER_CONNECT_LOGIN_ERROR(20006, "未找到登录信息"),
|
||||||
|
|
||||||
USER_NAME_EXIST(20007, "该用户名已被注册"),
|
USER_NAME_EXIST(20007, "该用户名已被注册"),
|
||||||
|
|
||||||
USER_PHONE_EXIST(20008, "该手机号已被注册"),
|
USER_PHONE_EXIST(20008, "该手机号已被注册"),
|
||||||
|
|
||||||
USER_PHONE_NOT_EXIST(20009, "手机号不存在"),
|
USER_PHONE_NOT_EXIST(20009, "手机号不存在"),
|
||||||
|
|
||||||
USER_PASSWORD_ERROR(20010, "密码不正确"),
|
USER_PASSWORD_ERROR(20010, "密码不正确"),
|
||||||
|
|
||||||
USER_NOT_PHONE(20011, "非当前用户的手机号"),
|
USER_NOT_PHONE(20011, "非当前用户的手机号"),
|
||||||
|
|
||||||
USER_CONNECT_ERROR(20012, "联合第三方登录,授权信息错误"),
|
USER_CONNECT_ERROR(20012, "联合第三方登录,授权信息错误"),
|
||||||
|
|
||||||
USER_RECEIPT_REPEAT_ERROR(20013, "会员发票信息重复"),
|
USER_RECEIPT_REPEAT_ERROR(20013, "会员发票信息重复"),
|
||||||
|
|
||||||
USER_RECEIPT_NOT_EXIST(20014, "会员发票信息不存在"),
|
USER_RECEIPT_NOT_EXIST(20014, "会员发票信息不存在"),
|
||||||
|
|
||||||
USER_EDIT_ERROR(20015, "用户修改失败"),
|
USER_EDIT_ERROR(20015, "用户修改失败"),
|
||||||
|
|
||||||
USER_OLD_PASSWORD_ERROR(20016, "旧密码不正确"),
|
USER_OLD_PASSWORD_ERROR(20016, "旧密码不正确"),
|
||||||
|
|
||||||
USER_COLLECTION_EXIST(20017, "无法重复收藏"),
|
USER_COLLECTION_EXIST(20017, "无法重复收藏"),
|
||||||
|
|
||||||
USER_GRADE_IS_DEFAULT(20018, "会员等级为默认会员等级"),
|
USER_GRADE_IS_DEFAULT(20018, "会员等级为默认会员等级"),
|
||||||
|
|
||||||
DELETE_EXIST(2001, "无法重复收藏"),
|
DELETE_EXIST(2001, "无法重复收藏"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 权限
|
* 权限
|
||||||
*/
|
*/
|
||||||
PERMISSION_DEPARTMENT_ROLE_ERROR(21001, "角色已绑定部门,请逐个删除"),
|
PERMISSION_DEPARTMENT_ROLE_ERROR(21001, "角色已绑定部门,请逐个删除"),
|
||||||
|
|
||||||
PERMISSION_USER_ROLE_ERROR(21002, "角色已绑定管理员,请逐个删除"),
|
PERMISSION_USER_ROLE_ERROR(21002, "角色已绑定管理员,请逐个删除"),
|
||||||
|
|
||||||
PERMISSION_MENU_ROLE_ERROR(21003, "菜单已绑定角色,请先删除或编辑角色"),
|
PERMISSION_MENU_ROLE_ERROR(21003, "菜单已绑定角色,请先删除或编辑角色"),
|
||||||
|
|
||||||
PERMISSION_DEPARTMENT_DELETE_ERROR(21004, "部门已经绑定管理员,请先删除或编辑管理员"),
|
PERMISSION_DEPARTMENT_DELETE_ERROR(21004, "部门已经绑定管理员,请先删除或编辑管理员"),
|
||||||
|
|
||||||
PERMISSION_BEYOND_TEN(21005, "最多可以设置10个角色"),
|
PERMISSION_BEYOND_TEN(21005, "最多可以设置10个角色"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分销
|
* 分销
|
||||||
*/
|
*/
|
||||||
DISTRIBUTION_CLOSE(22000, "分销功能关闭"),
|
DISTRIBUTION_CLOSE(22000, "分销功能关闭"),
|
||||||
|
|
||||||
DISTRIBUTION_NOT_EXIST(22001, "分销员不存在"),
|
DISTRIBUTION_NOT_EXIST(22001, "分销员不存在"),
|
||||||
|
|
||||||
DISTRIBUTION_IS_APPLY(22002, "分销员已申请,无需重复提交"),
|
DISTRIBUTION_IS_APPLY(22002, "分销员已申请,无需重复提交"),
|
||||||
|
|
||||||
DISTRIBUTION_AUDIT_ERROR(22003, "审核分销员失败"),
|
DISTRIBUTION_AUDIT_ERROR(22003, "审核分销员失败"),
|
||||||
|
|
||||||
DISTRIBUTION_RETREAT_ERROR(22004, "分销员清退失败"),
|
DISTRIBUTION_RETREAT_ERROR(22004, "分销员清退失败"),
|
||||||
|
|
||||||
DISTRIBUTION_CASH_NOT_EXIST(22005, "分销员提现记录不存在"),
|
DISTRIBUTION_CASH_NOT_EXIST(22005, "分销员提现记录不存在"),
|
||||||
|
|
||||||
DISTRIBUTION_GOODS_DOUBLE(22006, "不能重复添加分销商品"),
|
DISTRIBUTION_GOODS_DOUBLE(22006, "不能重复添加分销商品"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 购物车
|
* 购物车
|
||||||
*/
|
*/
|
||||||
CART_ERROR(30001, "读取结算页的购物车异常"),
|
CART_ERROR(30001, "读取结算页的购物车异常"),
|
||||||
|
|
||||||
CART_PINTUAN_NOT_EXIST_ERROR(30002, "拼团活动不存在错误"),
|
CART_PINTUAN_NOT_EXIST_ERROR(30002, "拼团活动不存在错误"),
|
||||||
|
|
||||||
CART_PINTUAN_LIMIT_ERROR(30003, "购买数量超过拼团活动限制数量"),
|
CART_PINTUAN_LIMIT_ERROR(30003, "购买数量超过拼团活动限制数量"),
|
||||||
|
|
||||||
SHIPPING_NOT_APPLY(30005, "购物商品不支持当前收货地址配送"),
|
SHIPPING_NOT_APPLY(30005, "购物商品不支持当前收货地址配送"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -87,6 +87,9 @@ public class DateUtil {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static Date endOfDate(Date date) {
|
public static Date endOfDate(Date date) {
|
||||||
|
if (date == null) {
|
||||||
|
date = new Date();
|
||||||
|
}
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = Calendar.getInstance();
|
||||||
calendar.setTime(date);
|
calendar.setTime(date);
|
||||||
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
||||||
@ -198,8 +201,9 @@ public class DateUtil {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static String toString(Date date) {
|
public static String toString(Date date) {
|
||||||
return toString(date,STANDARD_FORMAT);
|
return toString(date, STANDARD_FORMAT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 把日期转换成字符串型
|
* 把日期转换成字符串型
|
||||||
*
|
*
|
||||||
@ -207,8 +211,9 @@ public class DateUtil {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static String toString(Long date) {
|
public static String toString(Long date) {
|
||||||
return toString(date,STANDARD_FORMAT);
|
return toString(date, STANDARD_FORMAT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 把日期转换成字符串型
|
* 把日期转换成字符串型
|
||||||
*
|
*
|
||||||
|
@ -2,11 +2,14 @@ package cn.lili.modules.goods.entity.dos;
|
|||||||
|
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.lili.base.BaseEntity;
|
import cn.lili.base.BaseEntity;
|
||||||
|
import cn.lili.common.enums.ResultCode;
|
||||||
|
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.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;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import com.xkcoding.http.util.StringUtil;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@ -16,6 +19,7 @@ import javax.persistence.Column;
|
|||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
import javax.validation.constraints.Max;
|
import javax.validation.constraints.Max;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品
|
* 商品
|
||||||
@ -222,6 +226,30 @@ public class Goods extends BaseEntity {
|
|||||||
}
|
}
|
||||||
//如果立即上架则
|
//如果立即上架则
|
||||||
this.marketEnable = goodsOperationDTO.isRelease() ? GoodsStatusEnum.UPPER.name() : GoodsStatusEnum.DOWN.name();
|
this.marketEnable = goodsOperationDTO.isRelease() ? GoodsStatusEnum.UPPER.name() : GoodsStatusEnum.DOWN.name();
|
||||||
this.goodsType=goodsOperationDTO.getGoodsType();
|
this.goodsType = goodsOperationDTO.getGoodsType();
|
||||||
|
|
||||||
|
//循环sku,判定sku是否有效
|
||||||
|
for (Map<String, Object> sku : goodsOperationDTO.getSkuList()) {
|
||||||
|
//判定参数不能为空
|
||||||
|
if (sku.get("sn") == null) {
|
||||||
|
throw new ServiceException(ResultCode.GOODS_SKU_SN_ERROR);
|
||||||
|
}
|
||||||
|
if (StringUtil.isEmpty(sku.get("price").toString()) || Integer.parseInt( sku.get("price").toString()) <= 0) {
|
||||||
|
throw new ServiceException(ResultCode.GOODS_SKU_PRICE_ERROR);
|
||||||
|
}
|
||||||
|
if (StringUtil.isEmpty(sku.get("cost").toString()) || Integer.parseInt( sku.get("cost").toString()) <= 0) {
|
||||||
|
throw new ServiceException(ResultCode.GOODS_SKU_COST_ERROR);
|
||||||
|
}
|
||||||
|
//虚拟商品没有重量字段
|
||||||
|
if(sku.containsKey("weight")) {
|
||||||
|
if (StringUtil.isEmpty(sku.get("weight").toString()) || Integer.parseInt(sku.get("weight").toString()) < 0) {
|
||||||
|
throw new ServiceException(ResultCode.GOODS_SKU_WEIGHT_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (StringUtil.isEmpty(sku.get("quantity").toString()) || Integer.parseInt( sku.get("quantity").toString()) < 0) {
|
||||||
|
throw new ServiceException(ResultCode.GOODS_SKU_QUANTITY_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,10 +6,14 @@ import com.baomidou.mybatisplus.annotation.TableName;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
import org.hibernate.validator.constraints.Length;
|
import org.hibernate.validator.constraints.Length;
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
|
import javax.validation.constraints.Max;
|
||||||
|
import javax.validation.constraints.Min;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品关联参数
|
* 商品关联参数
|
||||||
@ -17,6 +21,7 @@ import javax.persistence.Table;
|
|||||||
* @author pikachu
|
* @author pikachu
|
||||||
* @date 2020-02-23 9:14:33
|
* @date 2020-02-23 9:14:33
|
||||||
*/
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "li_goods_params")
|
@Table(name = "li_goods_params")
|
||||||
@ -52,4 +57,11 @@ public class GoodsParams extends BaseEntity {
|
|||||||
@Length(max = 100, message = "参数值字符不能大于120")
|
@Length(max = 100, message = "参数值字符不能大于120")
|
||||||
private String paramValue;
|
private String paramValue;
|
||||||
|
|
||||||
|
@TableField(value = "is_index")
|
||||||
|
@ApiModelProperty(value = "是否可索引,0 不显示 1 显示", required = true)
|
||||||
|
@NotNull(message = "是否可索引必选")
|
||||||
|
@Min(value = 0, message = "是否可索引传值不正确")
|
||||||
|
@Max(value = 1, message = "是否可索引传值不正确")
|
||||||
|
private Integer isIndex = 0;
|
||||||
|
|
||||||
}
|
}
|
@ -164,6 +164,13 @@ public class GoodsSku extends BaseEntity {
|
|||||||
@ApiModelProperty(value = "商品类型", required = true)
|
@ApiModelProperty(value = "商品类型", required = true)
|
||||||
private String goodsType;
|
private String goodsType;
|
||||||
|
|
||||||
|
public Double getWeight() {
|
||||||
|
if (weight == null) {
|
||||||
|
return 0d;
|
||||||
|
}
|
||||||
|
return weight;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Date getUpdateTime() {
|
public Date getUpdateTime() {
|
||||||
if (super.getUpdateTime() == null) {
|
if (super.getUpdateTime() == null) {
|
||||||
|
@ -15,8 +15,8 @@ import lombok.Data;
|
|||||||
public class SpecificationSearchParams {
|
public class SpecificationSearchParams {
|
||||||
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "规格名")
|
@ApiModelProperty(value = "规格id")
|
||||||
private String specName;
|
private String specId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "绑定分类")
|
@ApiModelProperty(value = "绑定分类")
|
||||||
private String categoryPath;
|
private String categoryPath;
|
||||||
@ -26,7 +26,7 @@ public class SpecificationSearchParams {
|
|||||||
|
|
||||||
public <T> QueryWrapper<T> queryWrapper() {
|
public <T> QueryWrapper<T> queryWrapper() {
|
||||||
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.like(StringUtils.isNotEmpty(specName), "spec_name", specName);
|
queryWrapper.eq(StringUtils.isNotEmpty(specId), "spec_id", specId);
|
||||||
queryWrapper.eq(deleteFlag != null, "delete_flag", deleteFlag);
|
queryWrapper.eq(deleteFlag != null, "delete_flag", deleteFlag);
|
||||||
return queryWrapper;
|
return queryWrapper;
|
||||||
}
|
}
|
||||||
|
@ -94,6 +94,14 @@ public interface GoodsSkuService extends IService<GoodsSku> {
|
|||||||
*/
|
*/
|
||||||
List<GoodsSkuVO> getGoodsListByGoodsId(String goodsId);
|
List<GoodsSkuVO> getGoodsListByGoodsId(String goodsId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取goodsId下所有的goodsSku
|
||||||
|
*
|
||||||
|
* @param goodsId 商品id
|
||||||
|
* @return goodsSku列表
|
||||||
|
*/
|
||||||
|
List<GoodsSku> getGoodsSkuListByGoodsId(String goodsId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据goodsSku组装goodsSkuVO
|
* 根据goodsSku组装goodsSkuVO
|
||||||
*
|
*
|
||||||
|
@ -2,11 +2,13 @@ package cn.lili.modules.goods.serviceimpl;
|
|||||||
|
|
||||||
import cn.lili.modules.goods.entity.dos.CategoryParameterGroup;
|
import cn.lili.modules.goods.entity.dos.CategoryParameterGroup;
|
||||||
import cn.lili.modules.goods.entity.dos.GoodsParams;
|
import cn.lili.modules.goods.entity.dos.GoodsParams;
|
||||||
|
import cn.lili.modules.goods.entity.dos.Parameters;
|
||||||
import cn.lili.modules.goods.entity.vos.GoodsParamsGroupVO;
|
import cn.lili.modules.goods.entity.vos.GoodsParamsGroupVO;
|
||||||
import cn.lili.modules.goods.entity.vos.GoodsParamsVO;
|
import cn.lili.modules.goods.entity.vos.GoodsParamsVO;
|
||||||
import cn.lili.modules.goods.mapper.GoodsParamsMapper;
|
import cn.lili.modules.goods.mapper.GoodsParamsMapper;
|
||||||
import cn.lili.modules.goods.service.CategoryParameterGroupService;
|
import cn.lili.modules.goods.service.CategoryParameterGroupService;
|
||||||
import cn.lili.modules.goods.service.GoodsParamsService;
|
import cn.lili.modules.goods.service.GoodsParamsService;
|
||||||
|
import cn.lili.modules.goods.service.ParametersService;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@ -36,6 +38,9 @@ public class GoodsParamsServiceImpl extends ServiceImpl<GoodsParamsMapper, Goods
|
|||||||
@Autowired
|
@Autowired
|
||||||
private CategoryParameterGroupService categoryParameterGroupService;
|
private CategoryParameterGroupService categoryParameterGroupService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ParametersService parametersService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addParams(List<GoodsParams> paramList, String goodsId) {
|
public void addParams(List<GoodsParams> paramList, String goodsId) {
|
||||||
//先删除现有商品参数
|
//先删除现有商品参数
|
||||||
@ -43,10 +48,12 @@ public class GoodsParamsServiceImpl extends ServiceImpl<GoodsParamsMapper, Goods
|
|||||||
//循环添加参数
|
//循环添加参数
|
||||||
if (paramList != null) {
|
if (paramList != null) {
|
||||||
for (GoodsParams param : paramList) {
|
for (GoodsParams param : paramList) {
|
||||||
|
Parameters parameters = parametersService.getById(param.getParamId());
|
||||||
GoodsParams goodsParams = new GoodsParams();
|
GoodsParams goodsParams = new GoodsParams();
|
||||||
goodsParams.setGoodsId(goodsId);
|
goodsParams.setGoodsId(goodsId);
|
||||||
goodsParams.setParamName(param.getParamName());
|
goodsParams.setParamName(param.getParamName());
|
||||||
goodsParams.setParamValue(param.getParamValue());
|
goodsParams.setParamValue(param.getParamValue());
|
||||||
|
goodsParams.setIsIndex(parameters.getIsIndex());
|
||||||
goodsParams.setParamId(param.getId());
|
goodsParams.setParamId(param.getId());
|
||||||
this.save(goodsParams);
|
this.save(goodsParams);
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import cn.hutool.core.util.NumberUtil;
|
|||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.lili.common.cache.Cache;
|
import cn.lili.common.cache.Cache;
|
||||||
|
import cn.lili.common.enums.ResultCode;
|
||||||
import cn.lili.common.exception.ServiceException;
|
import cn.lili.common.exception.ServiceException;
|
||||||
import cn.lili.common.rocketmq.RocketmqSendCallbackBuilder;
|
import cn.lili.common.rocketmq.RocketmqSendCallbackBuilder;
|
||||||
import cn.lili.common.rocketmq.tags.GoodsTagsEnum;
|
import cn.lili.common.rocketmq.tags.GoodsTagsEnum;
|
||||||
@ -88,13 +89,12 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(List<Map<String, Object>> skuList, Goods goods) {
|
public void add(List<Map<String, Object>> skuList, Goods goods) {
|
||||||
//检查是否需要生成索引
|
// 检查是否需要生成索引
|
||||||
boolean needIndex = checkNeedIndex(goods);
|
|
||||||
List<GoodsSku> newSkuList;
|
List<GoodsSku> newSkuList;
|
||||||
//如果有规格
|
//如果有规格
|
||||||
if (skuList != null && !skuList.isEmpty()) {
|
if (skuList != null && !skuList.isEmpty()) {
|
||||||
//添加商品sku
|
// 添加商品sku
|
||||||
newSkuList = this.addGoodsSku(skuList, goods, needIndex);
|
newSkuList = this.addGoodsSku(skuList, goods);
|
||||||
} else {
|
} else {
|
||||||
throw new ServiceException("规格必须要有一个!");
|
throw new ServiceException("规格必须要有一个!");
|
||||||
}
|
}
|
||||||
@ -103,24 +103,9 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
|
|||||||
generateEsCheck(goods);
|
generateEsCheck(goods);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean checkNeedIndex(Goods goods) {
|
|
||||||
if (goods.getParams() != null && !goods.getParams().isEmpty()) {
|
|
||||||
List<GoodsParams> goodsParams = JSONUtil.toList(goods.getParams(), GoodsParams.class);
|
|
||||||
for (GoodsParams goodsParam : goodsParams) {
|
|
||||||
Parameters parameters = parametersService.getById(goodsParam.getParamId());
|
|
||||||
if (parameters.getIsIndex() == 1) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(List<Map<String, Object>> skuList, Goods goods, Boolean regeneratorSkuFlag) {
|
public void update(List<Map<String, Object>> skuList, Goods goods, Boolean regeneratorSkuFlag) {
|
||||||
//检查是否需要生成索引
|
// 是否存在规格
|
||||||
boolean needIndex = checkNeedIndex(goods);
|
|
||||||
//是否存在规格
|
|
||||||
if (skuList == null || skuList.isEmpty()) {
|
if (skuList == null || skuList.isEmpty()) {
|
||||||
throw new ServiceException("规格必须要有一个!");
|
throw new ServiceException("规格必须要有一个!");
|
||||||
}
|
}
|
||||||
@ -138,8 +123,8 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
|
|||||||
this.removeByIds(oldSkuIds);
|
this.removeByIds(oldSkuIds);
|
||||||
//删除sku相册
|
//删除sku相册
|
||||||
goodsGalleryService.removeByIds(oldSkuIds);
|
goodsGalleryService.removeByIds(oldSkuIds);
|
||||||
//添加商品sku
|
// 添加商品sku
|
||||||
newSkuList = this.addGoodsSku(skuList, goods, needIndex);
|
newSkuList = this.addGoodsSku(skuList, goods);
|
||||||
|
|
||||||
//发送mq消息
|
//发送mq消息
|
||||||
String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.SKU_DELETE.name();
|
String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.SKU_DELETE.name();
|
||||||
@ -161,10 +146,8 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
|
|||||||
this.updateBatchById(newSkuList);
|
this.updateBatchById(newSkuList);
|
||||||
}
|
}
|
||||||
this.updateStock(newSkuList);
|
this.updateStock(newSkuList);
|
||||||
if (Boolean.TRUE.equals(needIndex)) {
|
|
||||||
generateEsCheck(goods);
|
generateEsCheck(goods);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新商品sku
|
* 更新商品sku
|
||||||
@ -206,21 +189,22 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
|
|||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
GoodsSku goodsSku = this.getGoodsSkuByIdFromCache(skuId);
|
GoodsSku goodsSku = this.getGoodsSkuByIdFromCache(skuId);
|
||||||
|
|
||||||
|
GoodsVO goodsVO = goodsService.getGoodsVO(goodsId);
|
||||||
//如果规格为空则使用商品ID进行查询
|
//如果规格为空则使用商品ID进行查询
|
||||||
if (goodsSku == null) {
|
if (goodsSku == null) {
|
||||||
GoodsVO goodsVO = goodsService.getGoodsVO(goodsId);
|
|
||||||
skuId = goodsVO.getSkuList().get(0).getId();
|
skuId = goodsVO.getSkuList().get(0).getId();
|
||||||
goodsSku = this.getGoodsSkuByIdFromCache(skuId);
|
goodsSku = this.getGoodsSkuByIdFromCache(skuId);
|
||||||
//如果使用商品ID无法查询SKU则返回错误
|
//如果使用商品ID无法查询SKU则返回错误
|
||||||
if (goodsSku == null) {
|
if (goodsSku == null) {
|
||||||
throw new ServiceException("商品已下架");
|
throw new ServiceException(ResultCode.GOODS_NOT_EXIST);
|
||||||
}
|
}
|
||||||
|
} else if (!goodsSku.getMarketEnable().equals(GoodsStatusEnum.UPPER.name()) || !goodsVO.getIsAuth().equals(GoodsAuthEnum.PASS.name()) || Boolean.TRUE.equals(goodsSku.getDeleteFlag())) {
|
||||||
|
throw new ServiceException(ResultCode.GOODS_NOT_EXIST);
|
||||||
}
|
}
|
||||||
//获取当前商品的索引信息
|
//获取当前商品的索引信息
|
||||||
EsGoodsIndex goodsIndex = goodsIndexService.findById(skuId);
|
EsGoodsIndex goodsIndex = goodsIndexService.findById(skuId);
|
||||||
if (goodsIndex == null) {
|
if (goodsIndex == null) {
|
||||||
goodsIndex = new EsGoodsIndex(goodsSku);
|
goodsIndex = goodsIndexService.resetEsGoodsIndex(goodsSku, goodsVO.getGoodsParamsList());
|
||||||
goodsIndex.setPromotionMap(promotionService.getGoodsCurrentPromotionMap(goodsIndex));
|
|
||||||
}
|
}
|
||||||
//商品规格
|
//商品规格
|
||||||
GoodsSkuVO goodsSkuDetail = this.getGoodsSkuVO(goodsSku);
|
GoodsSkuVO goodsSkuDetail = this.getGoodsSkuVO(goodsSku);
|
||||||
@ -273,9 +257,17 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
|
|||||||
updateWrapper.eq(GoodsSku::getGoodsId, goods.getId());
|
updateWrapper.eq(GoodsSku::getGoodsId, goods.getId());
|
||||||
updateWrapper.set(GoodsSku::getMarketEnable, goods.getMarketEnable());
|
updateWrapper.set(GoodsSku::getMarketEnable, goods.getMarketEnable());
|
||||||
updateWrapper.set(GoodsSku::getIsAuth, goods.getIsAuth());
|
updateWrapper.set(GoodsSku::getIsAuth, goods.getIsAuth());
|
||||||
this.update(updateWrapper);
|
updateWrapper.set(GoodsSku::getDeleteFlag, goods.getDeleteFlag());
|
||||||
|
boolean update = this.update(updateWrapper);
|
||||||
|
if (Boolean.TRUE.equals(update)) {
|
||||||
|
List<GoodsSku> goodsSkus = this.getGoodsSkuListByGoodsId(goods.getId());
|
||||||
|
for (GoodsSku sku : goodsSkus) {
|
||||||
|
cache.remove(GoodsSkuService.getCacheKeys(sku.getId()));
|
||||||
|
cache.put(GoodsSkuService.getCacheKeys(sku.getId()), sku);
|
||||||
|
}
|
||||||
generateEsCheck(goods);
|
generateEsCheck(goods);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<GoodsSku> getGoodsSkuByIdFromCache(List<String> ids) {
|
public List<GoodsSku> getGoodsSkuByIdFromCache(List<String> ids) {
|
||||||
@ -301,6 +293,17 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
|
|||||||
return this.getGoodsSkuVOList(list);
|
return this.getGoodsSkuVOList(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取goodsId下所有的goodsSku
|
||||||
|
*
|
||||||
|
* @param goodsId 商品id
|
||||||
|
* @return goodsSku列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<GoodsSku> getGoodsSkuListByGoodsId(String goodsId) {
|
||||||
|
return this.list(new LambdaQueryWrapper<GoodsSku>().eq(GoodsSku::getGoodsId, goodsId));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<GoodsSkuVO> getGoodsSkuVOList(List<GoodsSku> list) {
|
public List<GoodsSkuVO> getGoodsSkuVOList(List<GoodsSku> list) {
|
||||||
List<GoodsSkuVO> goodsSkuVOS = new ArrayList<>();
|
List<GoodsSkuVO> goodsSkuVOS = new ArrayList<>();
|
||||||
@ -451,24 +454,31 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
|
|||||||
*/
|
*/
|
||||||
private void generateEsCheck(Goods goods) {
|
private void generateEsCheck(Goods goods) {
|
||||||
//如果商品通过审核&&并且已上架
|
//如果商品通过审核&&并且已上架
|
||||||
if (goods.getIsAuth().equals(GoodsAuthEnum.PASS.name()) && goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name())) {
|
|
||||||
List<GoodsSku> goodsSkuList = this.list(new LambdaQueryWrapper<GoodsSku>().eq(GoodsSku::getGoodsId, goods.getId()));
|
List<GoodsSku> goodsSkuList = this.list(new LambdaQueryWrapper<GoodsSku>().eq(GoodsSku::getGoodsId, goods.getId()));
|
||||||
|
if (goods.getIsAuth().equals(GoodsAuthEnum.PASS.name()) && goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name()) && Boolean.FALSE.equals(goods.getDeleteFlag())) {
|
||||||
|
List<EsGoodsIndex> goodsIndices = new ArrayList<>();
|
||||||
for (GoodsSku goodsSku : goodsSkuList) {
|
for (GoodsSku goodsSku : goodsSkuList) {
|
||||||
EsGoodsIndex esGoodsOld = goodsIndexService.findById(goodsSku.getId());
|
EsGoodsIndex esGoodsOld = goodsIndexService.findById(goodsSku.getId());
|
||||||
EsGoodsIndex goodsIndex = new EsGoodsIndex(goodsSku);
|
EsGoodsIndex goodsIndex = new EsGoodsIndex(goodsSku);
|
||||||
|
if (goods.getParams() != null && !goods.getParams().isEmpty()) {
|
||||||
|
List<GoodsParams> goodsParams = JSONUtil.toList(goods.getParams(), GoodsParams.class);
|
||||||
|
goodsIndex = new EsGoodsIndex(goodsSku, goodsParams);
|
||||||
|
}
|
||||||
//如果商品库存不为0,并且es中有数据
|
//如果商品库存不为0,并且es中有数据
|
||||||
if (goodsSku.getQuantity() > 0 && esGoodsOld == null) {
|
if (goodsSku.getQuantity() > 0 && esGoodsOld == null) {
|
||||||
goodsIndexService.addIndex(goodsIndex);
|
goodsIndices.add(goodsIndex);
|
||||||
} else if (goodsSku.getQuantity() > 0 && esGoodsOld != null) {
|
} else if (goodsSku.getQuantity() > 0 && esGoodsOld != null) {
|
||||||
goodsIndexService.updateIndex(goodsIndex);
|
goodsIndexService.updateIndex(goodsIndex);
|
||||||
}
|
}
|
||||||
//删除sku缓存
|
}
|
||||||
cache.remove(GoodsSkuService.getCacheKeys(goodsSku.getId()));
|
if (!goodsIndices.isEmpty()) {
|
||||||
|
String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GENERATOR_GOODS_INDEX.name();
|
||||||
|
//发送mq消息
|
||||||
|
rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(goodsIndices), RocketmqSendCallbackBuilder.commonCallback());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//如果商品状态值不支持es搜索,那么将商品信息做下架处理
|
//如果商品状态值不支持es搜索,那么将商品信息做下架处理
|
||||||
else {
|
else {
|
||||||
List<GoodsSku> goodsSkuList = this.list(new LambdaQueryWrapper<GoodsSku>().eq(GoodsSku::getGoodsId, goods.getId()));
|
|
||||||
for (GoodsSku goodsSku : goodsSkuList) {
|
for (GoodsSku goodsSku : goodsSkuList) {
|
||||||
EsGoodsIndex esGoodsOld = goodsIndexService.findById(goodsSku.getId());
|
EsGoodsIndex esGoodsOld = goodsIndexService.findById(goodsSku.getId());
|
||||||
if (esGoodsOld != null) {
|
if (esGoodsOld != null) {
|
||||||
@ -501,9 +511,8 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
|
|||||||
* @param skuList sku列表
|
* @param skuList sku列表
|
||||||
* @param goods 商品信息
|
* @param goods 商品信息
|
||||||
*/
|
*/
|
||||||
private List<GoodsSku> addGoodsSku(List<Map<String, Object>> skuList, Goods goods, Boolean needIndex) {
|
private List<GoodsSku> addGoodsSku(List<Map<String, Object>> skuList, Goods goods) {
|
||||||
List<GoodsSku> skus = new ArrayList<>();
|
List<GoodsSku> skus = new ArrayList<>();
|
||||||
List<EsGoodsIndex> goodsIndices = new ArrayList<>();
|
|
||||||
for (Map<String, Object> skuVO : skuList) {
|
for (Map<String, Object> skuVO : skuList) {
|
||||||
Map<String, Object> resultMap = this.add(skuVO, goods);
|
Map<String, Object> resultMap = this.add(skuVO, goods);
|
||||||
GoodsSku goodsSku = (GoodsSku) resultMap.get("goodsSku");
|
GoodsSku goodsSku = (GoodsSku) resultMap.get("goodsSku");
|
||||||
@ -511,17 +520,10 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
|
|||||||
goodsSku.setSelfOperated(goods.getSelfOperated());
|
goodsSku.setSelfOperated(goods.getSelfOperated());
|
||||||
}
|
}
|
||||||
goodsSku.setGoodsType(goods.getGoodsType());
|
goodsSku.setGoodsType(goods.getGoodsType());
|
||||||
EsGoodsIndex goodsIndex = (EsGoodsIndex) resultMap.get("goodsIndex");
|
|
||||||
skus.add(goodsSku);
|
skus.add(goodsSku);
|
||||||
goodsIndices.add(goodsIndex);
|
|
||||||
stringRedisTemplate.opsForValue().set(GoodsSkuService.getStockCacheKey(goodsSku.getId()), goodsSku.getQuantity().toString());
|
stringRedisTemplate.opsForValue().set(GoodsSkuService.getStockCacheKey(goodsSku.getId()), goodsSku.getQuantity().toString());
|
||||||
}
|
}
|
||||||
this.saveBatch(skus);
|
this.saveBatch(skus);
|
||||||
if (Boolean.TRUE.equals(needIndex)) {
|
|
||||||
String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GENERATOR_GOODS_INDEX.name();
|
|
||||||
//发送mq消息
|
|
||||||
rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(goodsIndices), RocketmqSendCallbackBuilder.commonCallback());
|
|
||||||
}
|
|
||||||
return skus;
|
return skus;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -656,7 +658,6 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public void setGoodsService(GoodsService goodsService) {
|
public void setGoodsService(GoodsService goodsService) {
|
||||||
this.goodsService = goodsService;
|
this.goodsService = goodsService;
|
||||||
|
@ -50,12 +50,11 @@ public class SpecificationServiceImpl extends ServiceImpl<SpecificationMapper, S
|
|||||||
private SpecValuesService specValuesService;
|
private SpecValuesService specValuesService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SpecificationVO> getSpecList(String specName) {
|
public List<SpecificationVO> getSpecList(String specId) {
|
||||||
|
|
||||||
QueryWrapper queryWrapper = new QueryWrapper();
|
QueryWrapper queryWrapper = new QueryWrapper();
|
||||||
queryWrapper.eq(StringUtils.isNotEmpty(specName), "s.spec_name", specName);
|
queryWrapper.eq(StringUtils.isNotEmpty(specId), "s.spec_id", specId);
|
||||||
queryWrapper.orderByDesc("s.create_time");
|
queryWrapper.orderByDesc("s.create_time");
|
||||||
queryWrapper.groupBy("s.id");
|
|
||||||
return this.baseMapper.findSpecList(queryWrapper);
|
return this.baseMapper.findSpecList(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,7 +102,7 @@ public class SpecificationServiceImpl extends ServiceImpl<SpecificationMapper, S
|
|||||||
@Override
|
@Override
|
||||||
public IPage<SpecificationVO> getSpecificationPage(SpecificationSearchParams searchParams, PageVO pageVo) {
|
public IPage<SpecificationVO> getSpecificationPage(SpecificationSearchParams searchParams, PageVO pageVo) {
|
||||||
|
|
||||||
List<SpecificationVO> specList = this.getSpecList(searchParams.getSpecName());
|
List<SpecificationVO> specList = this.getSpecList(searchParams.getSpecId());
|
||||||
IPage<SpecificationVO> page = new Page<>(pageVo.getPageNumber(), pageVo.getPageSize(), specList.size());
|
IPage<SpecificationVO> page = new Page<>(pageVo.getPageNumber(), pageVo.getPageSize(), specList.size());
|
||||||
page.setRecords(PageUtil.listToPage(pageVo, specList));
|
page.setRecords(PageUtil.listToPage(pageVo, specList));
|
||||||
return page;
|
return page;
|
||||||
|
@ -557,9 +557,9 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
|
|||||||
queryWrapper.like(StringUtils.isNotBlank(memberSearchVO.getUsername()), "username", memberSearchVO.getUsername());
|
queryWrapper.like(StringUtils.isNotBlank(memberSearchVO.getUsername()), "username", memberSearchVO.getUsername());
|
||||||
//按照电话号码查询
|
//按照电话号码查询
|
||||||
queryWrapper.like(StringUtils.isNotBlank(memberSearchVO.getMobile()), "mobile", memberSearchVO.getMobile());
|
queryWrapper.like(StringUtils.isNotBlank(memberSearchVO.getMobile()), "mobile", memberSearchVO.getMobile());
|
||||||
//按照电话号码查询
|
//按照状态查询
|
||||||
queryWrapper.like(StringUtils.isNotBlank(memberSearchVO.getDisabled()), "disabled", memberSearchVO.getDisabled());
|
queryWrapper.eq(StringUtils.isNotBlank(memberSearchVO.getDisabled()), "disabled",
|
||||||
queryWrapper.orderByDesc("create_time");
|
memberSearchVO.getDisabled().equals(SwitchEnum.OPEN.name()) ? 1 : 0); queryWrapper.orderByDesc("create_time");
|
||||||
return this.count(queryWrapper);
|
return this.count(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package cn.lili.modules.member.entity.dos;
|
package cn.lili.modules.message.entity.dos;
|
||||||
|
|
||||||
import cn.lili.base.BaseEntity;
|
import cn.lili.base.BaseEntity;
|
||||||
import cn.lili.modules.message.entity.enums.MessageStatusEnum;
|
import cn.lili.modules.message.entity.enums.MessageStatusEnum;
|
||||||
@ -11,7 +11,7 @@ import javax.persistence.Entity;
|
|||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员消息
|
* 会员接受消息对象
|
||||||
*
|
*
|
||||||
* @author Chopper
|
* @author Chopper
|
||||||
* @date 2020-02-25 14:10:16
|
* @date 2020-02-25 14:10:16
|
||||||
@ -37,6 +37,9 @@ public class MemberMessage extends BaseEntity {
|
|||||||
@ApiModelProperty(value = "消息内容")
|
@ApiModelProperty(value = "消息内容")
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "关联消息id")
|
||||||
|
private String messageId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see MessageStatusEnum
|
* @see MessageStatusEnum
|
||||||
*/
|
*/
|
@ -2,6 +2,7 @@ package cn.lili.modules.message.entity.dos;
|
|||||||
|
|
||||||
import cn.lili.base.BaseEntity;
|
import cn.lili.base.BaseEntity;
|
||||||
import cn.lili.modules.message.entity.enums.RangeEnum;
|
import cn.lili.modules.message.entity.enums.RangeEnum;
|
||||||
|
import cn.lili.modules.message.entity.enums.MessageSendClient;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
@ -13,6 +14,8 @@ import javax.persistence.Table;
|
|||||||
import javax.persistence.Transient;
|
import javax.persistence.Transient;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 管理段发送消息对象
|
||||||
|
*
|
||||||
* @author lili
|
* @author lili
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -37,7 +40,10 @@ public class Message extends BaseEntity {
|
|||||||
@ApiModelProperty(value = "发送范围")
|
@ApiModelProperty(value = "发送范围")
|
||||||
private String messageRange;
|
private String messageRange;
|
||||||
|
|
||||||
@ApiModelProperty(value = "发送客户端 商家和会员")
|
/**
|
||||||
|
* @see MessageSendClient
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(value = "发送客户端 商家或者会员")
|
||||||
private String messageClient;
|
private String messageClient;
|
||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
|
@ -10,7 +10,7 @@ import javax.persistence.Entity;
|
|||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 站内消息模板设置
|
* 通知类站内信模版对象
|
||||||
*
|
*
|
||||||
* @author Bulbasaur
|
* @author Bulbasaur
|
||||||
* @version v4.1
|
* @version v4.1
|
||||||
@ -20,7 +20,7 @@ import javax.persistence.Table;
|
|||||||
@Entity
|
@Entity
|
||||||
@Table(name = "li_notice_message")
|
@Table(name = "li_notice_message")
|
||||||
@TableName("li_notice_message")
|
@TableName("li_notice_message")
|
||||||
@ApiModel(value = "站内消息模板")
|
@ApiModel(value = "通知类消息模板")
|
||||||
public class NoticeMessage extends BaseEntity {
|
public class NoticeMessage extends BaseEntity {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
@ -17,7 +17,7 @@ import javax.persistence.*;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 店铺消息
|
* 店铺接收消息对象
|
||||||
* @author Chopper
|
* @author Chopper
|
||||||
* @date 2021/1/30 4:13 下午
|
* @date 2021/1/30 4:13 下午
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
package cn.lili.modules.message.entity.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息发送客户端
|
||||||
|
*
|
||||||
|
* @author pikachu
|
||||||
|
* @date 2020/12/8 9:46
|
||||||
|
*/
|
||||||
|
public enum MessageSendClient {
|
||||||
|
|
||||||
|
//全部用户
|
||||||
|
MEMBER("会员"),
|
||||||
|
//指定用户
|
||||||
|
STORE("店铺");
|
||||||
|
|
||||||
|
private final String description;
|
||||||
|
|
||||||
|
MessageSendClient(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,17 +1,19 @@
|
|||||||
package cn.lili.modules.member.entity.vo;
|
package cn.lili.modules.message.entity.vos;
|
||||||
|
|
||||||
import cn.lili.modules.message.entity.enums.MessageStatusEnum;
|
import cn.lili.modules.message.entity.enums.MessageStatusEnum;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员消息查询
|
* 会员接收消息查询vo
|
||||||
*
|
*
|
||||||
* @author Chopper
|
* @author Chopper
|
||||||
* @date 2020-02-25 14:10:16
|
* @date 2020/12/2 17:50
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@ApiModel(value = "会员接收消息查询vo")
|
||||||
public class MemberMessageQueryVO {
|
public class MemberMessageQueryVO {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
@ -22,6 +24,9 @@ public class MemberMessageQueryVO {
|
|||||||
@ApiModelProperty(value = "状态")
|
@ApiModelProperty(value = "状态")
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "消息id")
|
||||||
|
private String messageId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "消息标题")
|
@ApiModelProperty(value = "消息标题")
|
||||||
private String title;
|
private String title;
|
||||||
|
|
@ -1,12 +1,12 @@
|
|||||||
package cn.lili.modules.member.mapper;
|
package cn.lili.modules.message.mapper;
|
||||||
|
|
||||||
|
|
||||||
import cn.lili.modules.member.entity.dos.MemberMessage;
|
import cn.lili.modules.message.entity.dos.MemberMessage;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员消息数据处理层
|
* 会员接收到消息数据处理层
|
||||||
*
|
*
|
||||||
* @author lili
|
* @author lili
|
||||||
* @date 2020-02-25 14:10:16
|
* @date 2020-02-25 14:10:16
|
@ -4,7 +4,7 @@ import cn.lili.modules.message.entity.dos.Message;
|
|||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息内容数据处理层
|
* 管理端发送消息内容数据处理层
|
||||||
* @author Chopper
|
* @author Chopper
|
||||||
* @date 2020/12/2 17:50
|
* @date 2020/12/2 17:50
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@ import cn.lili.modules.message.entity.dos.NoticeMessage;
|
|||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息模板数据处理层
|
* 通知类消息模板数据处理层
|
||||||
*
|
*
|
||||||
* @author Bulbasaur
|
* @author Bulbasaur
|
||||||
* @date 2020/12/8 9:46
|
* @date 2020/12/8 9:46
|
||||||
|
@ -9,7 +9,7 @@ import org.apache.ibatis.annotations.Param;
|
|||||||
import org.apache.ibatis.annotations.Select;
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息发送数据处理层
|
* 店铺接收到消息发送数据处理层
|
||||||
*
|
*
|
||||||
* @author Chopper
|
* @author Chopper
|
||||||
* @date 2021/1/30 4:17 下午
|
* @date 2021/1/30 4:17 下午
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
package cn.lili.modules.member.service;
|
package cn.lili.modules.message.service;
|
||||||
|
|
||||||
import cn.lili.common.vo.PageVO;
|
import cn.lili.common.vo.PageVO;
|
||||||
import cn.lili.modules.member.entity.dos.MemberMessage;
|
import cn.lili.modules.message.entity.dos.MemberMessage;
|
||||||
import cn.lili.modules.member.entity.vo.MemberMessageQueryVO;
|
import cn.lili.modules.message.entity.vos.MemberMessageQueryVO;
|
||||||
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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息发送业务层
|
* 会员消息发送业务层
|
||||||
*
|
*
|
||||||
* @author Chopper
|
* @author Chopper
|
||||||
* @date 2020/11/17 3:44 下午
|
* @date 2020/11/17 3:44 下午
|
||||||
@ -41,4 +43,13 @@ public interface MemberMessageService extends IService<MemberMessage> {
|
|||||||
Boolean deleteMessage(String messageId);
|
Boolean deleteMessage(String messageId);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存消息信息
|
||||||
|
*
|
||||||
|
* @param messages 消息
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
boolean save(List<MemberMessage> messages);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息内容业务层
|
* 管理端发送消息内容业务层
|
||||||
*
|
*
|
||||||
* @author Chopper
|
* @author Chopper
|
||||||
* @date 2020/11/17 3:44 下午
|
* @date 2020/11/17 3:44 下午
|
||||||
|
@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息模板业务层
|
* 通知类消息模板业务层
|
||||||
*
|
*
|
||||||
* @author Bulbasaur
|
* @author Bulbasaur
|
||||||
* @date 2020/12/8 9:47
|
* @date 2020/12/8 9:47
|
||||||
|
@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息发送业务层
|
* 店铺接收消息业务层
|
||||||
*
|
*
|
||||||
* @author Chopper
|
* @author Chopper
|
||||||
* @date 2020/11/17 3:44 下午
|
* @date 2020/11/17 3:44 下午
|
||||||
@ -34,7 +34,7 @@ public interface StoreMessageService extends IService<StoreMessage> {
|
|||||||
IPage<StoreMessage> getPage(StoreMessageQueryVO storeMessageQueryVO, PageVO pageVO);
|
IPage<StoreMessage> getPage(StoreMessageQueryVO storeMessageQueryVO, PageVO pageVO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存消息信息
|
* 保存店铺消息信息
|
||||||
*
|
*
|
||||||
* @param messages 消息
|
* @param messages 消息
|
||||||
* @return
|
* @return
|
||||||
|
@ -1,21 +1,23 @@
|
|||||||
package cn.lili.modules.member.serviceimpl;
|
package cn.lili.modules.message.serviceimpl;
|
||||||
|
|
||||||
|
|
||||||
import cn.lili.common.utils.PageUtil;
|
import cn.lili.common.utils.PageUtil;
|
||||||
import cn.lili.common.utils.StringUtils;
|
import cn.lili.common.utils.StringUtils;
|
||||||
import cn.lili.common.vo.PageVO;
|
import cn.lili.common.vo.PageVO;
|
||||||
import cn.lili.modules.member.entity.dos.MemberMessage;
|
import cn.lili.modules.message.entity.dos.MemberMessage;
|
||||||
import cn.lili.modules.member.entity.vo.MemberMessageQueryVO;
|
import cn.lili.modules.message.mapper.MemberMessageMapper;
|
||||||
import cn.lili.modules.member.mapper.MemberMessageMapper;
|
import cn.lili.modules.message.service.MemberMessageService;
|
||||||
import cn.lili.modules.member.service.MemberMessageService;
|
import cn.lili.modules.message.entity.vos.MemberMessageQueryVO;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
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;
|
||||||
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.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员消息业务层实现
|
* 会员接收消息业务层实现
|
||||||
*
|
*
|
||||||
* @author Chopper
|
* @author Chopper
|
||||||
* @date 2020/11/17 3:48 下午
|
* @date 2020/11/17 3:48 下午
|
||||||
@ -28,6 +30,8 @@ public class MemberMessageServiceImpl extends ServiceImpl<MemberMessageMapper, M
|
|||||||
@Override
|
@Override
|
||||||
public IPage<MemberMessage> getPage(MemberMessageQueryVO memberMessageQueryVO, PageVO pageVO) {
|
public IPage<MemberMessage> getPage(MemberMessageQueryVO memberMessageQueryVO, PageVO pageVO) {
|
||||||
QueryWrapper<MemberMessage> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<MemberMessage> queryWrapper = new QueryWrapper<>();
|
||||||
|
//消息id
|
||||||
|
queryWrapper.like(StringUtils.isNotEmpty(memberMessageQueryVO.getMessageId()), "message_id", memberMessageQueryVO.getMessageId());
|
||||||
//消息标题
|
//消息标题
|
||||||
queryWrapper.like(StringUtils.isNotEmpty(memberMessageQueryVO.getTitle()), "title", memberMessageQueryVO.getTitle());
|
queryWrapper.like(StringUtils.isNotEmpty(memberMessageQueryVO.getTitle()), "title", memberMessageQueryVO.getTitle());
|
||||||
//会员id
|
//会员id
|
||||||
@ -61,4 +65,9 @@ public class MemberMessageServiceImpl extends ServiceImpl<MemberMessageMapper, M
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean save(List<MemberMessage> messages) {
|
||||||
|
return saveBatch(messages);
|
||||||
|
}
|
||||||
}
|
}
|
@ -17,7 +17,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息内容业务层实现
|
* 管理端发送消息内容业务层实现
|
||||||
*
|
*
|
||||||
* @author Chopper
|
* @author Chopper
|
||||||
* @date 2020/11/17 3:48 下午
|
* @date 2020/11/17 3:48 下午
|
||||||
|
@ -22,7 +22,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息模板业务层实现
|
* 通知类消息模板业务层实现
|
||||||
*
|
*
|
||||||
* @author Bulbasaur
|
* @author Bulbasaur
|
||||||
* @date 2020/12/8 9:48
|
* @date 2020/12/8 9:48
|
||||||
|
@ -510,6 +510,10 @@ public class CartServiceImpl implements CartService {
|
|||||||
tradeDTO.setClientType(tradeParams.getClient());
|
tradeDTO.setClientType(tradeParams.getClient());
|
||||||
tradeDTO.setStoreRemark(tradeParams.getRemark());
|
tradeDTO.setStoreRemark(tradeParams.getRemark());
|
||||||
tradeDTO.setParentOrderSn(tradeParams.getParentOrderSn());
|
tradeDTO.setParentOrderSn(tradeParams.getParentOrderSn());
|
||||||
|
//订单无收货地址校验
|
||||||
|
if (tradeDTO.getMemberAddress() == null) {
|
||||||
|
throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST);
|
||||||
|
}
|
||||||
//将购物车信息写入缓存,后续逻辑调用校验
|
//将购物车信息写入缓存,后续逻辑调用校验
|
||||||
this.resetTradeDTO(tradeDTO);
|
this.resetTradeDTO(tradeDTO);
|
||||||
//构建交易
|
//构建交易
|
||||||
|
@ -69,7 +69,7 @@ public class OrderSearchParams extends PageVO {
|
|||||||
* @see OrderTypeEnum
|
* @see OrderTypeEnum
|
||||||
* @see cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum
|
* @see cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "订单类型",allowableValues = "NORMAL,VIRTUAL,GIFT,PINTUAN,POINT" )
|
@ApiModelProperty(value = "订单类型", allowableValues = "NORMAL,VIRTUAL,GIFT,PINTUAN,POINT")
|
||||||
private String orderType;
|
private String orderType;
|
||||||
|
|
||||||
@ApiModelProperty(value = "支付方式")
|
@ApiModelProperty(value = "支付方式")
|
||||||
@ -98,53 +98,60 @@ public class OrderSearchParams extends PageVO {
|
|||||||
|
|
||||||
//关键字查询
|
//关键字查询
|
||||||
if (StringUtils.isNotEmpty(keywords)) {
|
if (StringUtils.isNotEmpty(keywords)) {
|
||||||
wrapper.like("o.sn", keywords);
|
wrapper.and(queryWrapper -> wrapper.like("o.sn", keywords).or().
|
||||||
wrapper.like("oi.goods_name", keywords);
|
like("oi.goods_name", keywords));
|
||||||
}
|
}
|
||||||
//按卖家查询
|
//按卖家查询
|
||||||
if (StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name())) {
|
wrapper.eq(StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()), "o.store_id", UserContext.getCurrentUser().getStoreId());
|
||||||
wrapper.eq("o.store_id", UserContext.getCurrentUser().getStoreId());
|
|
||||||
}
|
//店铺查询
|
||||||
if (StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.MANAGER.name())
|
wrapper.eq(StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.MANAGER.name())
|
||||||
&& StringUtils.isNotEmpty(storeId)) {
|
&& StringUtils.isNotEmpty(storeId), "o.store_id", storeId);
|
||||||
wrapper.eq("o.store_id", storeId);
|
|
||||||
}
|
|
||||||
//按买家查询
|
//按买家查询
|
||||||
if (StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.MEMBER.name())) {
|
wrapper.eq(StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.MEMBER.name()), "o.member_id", UserContext.getCurrentUser().getId());
|
||||||
wrapper.eq("o.member_id", UserContext.getCurrentUser().getId());
|
|
||||||
}
|
|
||||||
//按照买家查询
|
//按照买家查询
|
||||||
if (StringUtils.isNotEmpty(memberId)) {
|
wrapper.like(StringUtils.isNotEmpty(memberId), "o.member_id", memberId);
|
||||||
wrapper.like("o.member_id", memberId);
|
|
||||||
}
|
|
||||||
|
|
||||||
//按订单编号查询
|
//按订单编号查询
|
||||||
if (StringUtils.isNotEmpty(orderSn)) {
|
wrapper.like(StringUtils.isNotEmpty(orderSn), "o.sn", orderSn);
|
||||||
wrapper.like("o.sn", orderSn);
|
|
||||||
}
|
|
||||||
|
|
||||||
//按时间查询
|
//按时间查询
|
||||||
if (startDate != null) {
|
wrapper.ge(startDate != null, "o.create_time", startDate);
|
||||||
wrapper.ge("o.create_time", startDate);
|
|
||||||
}
|
wrapper.le(endDate != null, "o.create_time", DateUtil.endOfDate(endDate));
|
||||||
if (endDate != null) {
|
|
||||||
wrapper.le("o.create_time", DateUtil.endOfDate(endDate));
|
|
||||||
}
|
|
||||||
//按购买人用户名
|
//按购买人用户名
|
||||||
if (StringUtils.isNotEmpty(buyerName)) {
|
wrapper.like(StringUtils.isNotEmpty(buyerName), "o.member_name", buyerName);
|
||||||
wrapper.like("o.member_name", buyerName);
|
|
||||||
}
|
|
||||||
|
|
||||||
//按订单类型
|
//按订单类型
|
||||||
if (StringUtils.isNotEmpty(orderType)) {
|
if (StringUtils.isNotEmpty(orderType)) {
|
||||||
wrapper.eq("o.order_type", orderType)
|
wrapper.and(queryWrapper-> queryWrapper.eq("o.order_type", orderType).or()
|
||||||
.or().eq("o.order_promotion_type", orderType);
|
.eq("o.order_promotion_type", orderType));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//物流查询
|
||||||
|
wrapper.like(StringUtils.isNotEmpty(shipName), "o.ship_name", shipName);
|
||||||
|
|
||||||
|
//按商品名称查询
|
||||||
|
wrapper.like(StringUtils.isNotEmpty(goodsName), "oi.goods_name", goodsName);
|
||||||
|
|
||||||
|
//付款方式
|
||||||
|
wrapper.like(StringUtils.isNotEmpty(paymentType), "o.payment_type", paymentType);
|
||||||
|
|
||||||
//按支付方式
|
//按支付方式
|
||||||
if (StringUtils.isNotEmpty(paymentMethod)) {
|
wrapper.eq(StringUtils.isNotEmpty(paymentMethod), "o.payment_method", paymentMethod);
|
||||||
wrapper.eq("o.payment_method", paymentMethod);
|
|
||||||
}
|
//订单状态
|
||||||
|
wrapper.eq(StringUtils.isNotEmpty(orderStatus), "o.order_status", orderStatus);
|
||||||
|
|
||||||
|
//付款状态
|
||||||
|
wrapper.eq(StringUtils.isNotEmpty(payStatus), "o.pay_status", payStatus);
|
||||||
|
|
||||||
|
//订单来源
|
||||||
|
wrapper.like(StringUtils.isNotEmpty(clientType), "o.client_type", clientType);
|
||||||
|
|
||||||
|
|
||||||
//按标签查询
|
//按标签查询
|
||||||
if (StringUtils.isNotEmpty(tag)) {
|
if (StringUtils.isNotEmpty(tag)) {
|
||||||
@ -176,33 +183,7 @@ public class OrderSearchParams extends PageVO {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtils.isNotEmpty(shipName)) {
|
|
||||||
wrapper.like("o.ship_name", shipName);
|
|
||||||
}
|
|
||||||
//按商品名称查询
|
|
||||||
if (StringUtils.isNotEmpty(goodsName)) {
|
|
||||||
wrapper.like("oi.goods_name", goodsName);
|
|
||||||
}
|
|
||||||
|
|
||||||
//付款方式
|
|
||||||
if (StringUtils.isNotEmpty(paymentType)) {
|
|
||||||
wrapper.like("o.payment_type", paymentType);
|
|
||||||
}
|
|
||||||
|
|
||||||
//订单状态
|
|
||||||
if (StringUtils.isNotEmpty(orderStatus)) {
|
|
||||||
wrapper.eq("o.order_status", orderStatus);
|
|
||||||
}
|
|
||||||
|
|
||||||
//付款状态
|
|
||||||
if (StringUtils.isNotEmpty(payStatus)) {
|
|
||||||
wrapper.eq("o.pay_status", payStatus);
|
|
||||||
}
|
|
||||||
|
|
||||||
//订单来源
|
|
||||||
if (StringUtils.isNotEmpty(clientType)) {
|
|
||||||
wrapper.like("o.client_type", clientType);
|
|
||||||
}
|
|
||||||
wrapper.eq("o.delete_flag", false);
|
wrapper.eq("o.delete_flag", false);
|
||||||
return wrapper;
|
return wrapper;
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
package cn.lili.modules.search.entity.dos;
|
package cn.lili.modules.search.entity.dos;
|
||||||
|
|
||||||
import cn.hutool.json.JSONObject;
|
|
||||||
import cn.hutool.json.JSONUtil;
|
|
||||||
import cn.lili.common.elasticsearch.EsSuffix;
|
import cn.lili.common.elasticsearch.EsSuffix;
|
||||||
import cn.lili.common.utils.StringUtils;
|
import cn.lili.modules.goods.entity.dos.GoodsParams;
|
||||||
import cn.lili.modules.goods.entity.dos.GoodsSku;
|
import cn.lili.modules.goods.entity.dos.GoodsSku;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
@ -275,15 +273,33 @@ public class EsGoodsIndex implements Serializable {
|
|||||||
this.intro = sku.getIntro();
|
this.intro = sku.getIntro();
|
||||||
this.grade = sku.getGrade();
|
this.grade = sku.getGrade();
|
||||||
this.releaseTime = new Date();
|
this.releaseTime = new Date();
|
||||||
if (StringUtils.isNotEmpty(sku.getSpecs())) {
|
// if (CharSequenceUtil.isNotEmpty(sku.getSpecs())) {
|
||||||
|
// List<EsGoodsAttribute> attributes = new ArrayList<>();
|
||||||
|
// JSONObject jsonObject = JSONUtil.parseObj(sku.getSpecs());
|
||||||
|
// for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
|
||||||
|
// if (!entry.getKey().equals("images")) {
|
||||||
|
// EsGoodsAttribute attribute = new EsGoodsAttribute();
|
||||||
|
// attribute.setType(1);
|
||||||
|
// attribute.setName(entry.getKey());
|
||||||
|
// attribute.setValue(entry.getValue().toString());
|
||||||
|
// attributes.add(attribute);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// this.attrList = attributes;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public EsGoodsIndex(GoodsSku sku, List<GoodsParams> goodsParams) {
|
||||||
|
this(sku);
|
||||||
|
if (goodsParams != null && !goodsParams.isEmpty()) {
|
||||||
List<EsGoodsAttribute> attributes = new ArrayList<>();
|
List<EsGoodsAttribute> attributes = new ArrayList<>();
|
||||||
JSONObject jsonObject = JSONUtil.parseObj(sku.getSpecs());
|
for (GoodsParams goodsParam : goodsParams) {
|
||||||
for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
|
|
||||||
if (!entry.getKey().equals("images")) {
|
|
||||||
EsGoodsAttribute attribute = new EsGoodsAttribute();
|
EsGoodsAttribute attribute = new EsGoodsAttribute();
|
||||||
attribute.setType(0);
|
if (goodsParam.getIsIndex() != null && goodsParam.getIsIndex() == 1) {
|
||||||
attribute.setName(entry.getKey());
|
attribute.setType(1);
|
||||||
attribute.setValue(entry.getValue().toString());
|
attribute.setName(goodsParam.getParamName());
|
||||||
|
attribute.setValue(goodsParam.getParamValue());
|
||||||
attributes.add(attribute);
|
attributes.add(attribute);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -291,8 +307,6 @@ public class EsGoodsIndex implements Serializable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGoodsSku(GoodsSku sku) {
|
public void setGoodsSku(GoodsSku sku) {
|
||||||
if (sku != null) {
|
if (sku != null) {
|
||||||
this.id = sku.getId();
|
this.id = sku.getId();
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.lili.modules.search.service;
|
package cn.lili.modules.search.service;
|
||||||
|
|
||||||
|
import cn.lili.modules.goods.entity.dos.GoodsParams;
|
||||||
import cn.lili.modules.goods.entity.dos.GoodsSku;
|
import cn.lili.modules.goods.entity.dos.GoodsSku;
|
||||||
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
|
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
|
||||||
import cn.lili.modules.promotion.entity.dto.BasePromotion;
|
import cn.lili.modules.promotion.entity.dto.BasePromotion;
|
||||||
@ -145,7 +146,8 @@ public interface EsGoodsIndexService {
|
|||||||
* 重置当前商品索引
|
* 重置当前商品索引
|
||||||
*
|
*
|
||||||
* @param goodsSku 商品sku信息
|
* @param goodsSku 商品sku信息
|
||||||
|
* @param goodsParams 商品参数
|
||||||
* @return 商品索引
|
* @return 商品索引
|
||||||
*/
|
*/
|
||||||
EsGoodsIndex resetEsGoodsIndex(GoodsSku goodsSku);
|
EsGoodsIndex resetEsGoodsIndex(GoodsSku goodsSku, List<GoodsParams> goodsParams);
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import cn.hutool.extra.pinyin.PinyinUtil;
|
|||||||
import cn.lili.common.elasticsearch.BaseElasticsearchService;
|
import cn.lili.common.elasticsearch.BaseElasticsearchService;
|
||||||
import cn.lili.common.elasticsearch.EsSuffix;
|
import cn.lili.common.elasticsearch.EsSuffix;
|
||||||
import cn.lili.config.elasticsearch.ElasticsearchProperties;
|
import cn.lili.config.elasticsearch.ElasticsearchProperties;
|
||||||
|
import cn.lili.modules.goods.entity.dos.GoodsParams;
|
||||||
import cn.lili.modules.goods.entity.dos.GoodsSku;
|
import cn.lili.modules.goods.entity.dos.GoodsSku;
|
||||||
import cn.lili.modules.goods.entity.dos.GoodsWords;
|
import cn.lili.modules.goods.entity.dos.GoodsWords;
|
||||||
import cn.lili.modules.goods.entity.enums.GoodsWordsTypeEnum;
|
import cn.lili.modules.goods.entity.enums.GoodsWordsTypeEnum;
|
||||||
@ -367,11 +368,12 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements
|
|||||||
* 重置当前商品索引
|
* 重置当前商品索引
|
||||||
*
|
*
|
||||||
* @param goodsSku 商品sku信息
|
* @param goodsSku 商品sku信息
|
||||||
|
* @param goodsParams 商品参数
|
||||||
* @return 商品索引
|
* @return 商品索引
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public EsGoodsIndex resetEsGoodsIndex(GoodsSku goodsSku) {
|
public EsGoodsIndex resetEsGoodsIndex(GoodsSku goodsSku, List<GoodsParams> goodsParams) {
|
||||||
EsGoodsIndex index = new EsGoodsIndex(goodsSku);
|
EsGoodsIndex index = new EsGoodsIndex(goodsSku, goodsParams);
|
||||||
//获取活动信息
|
//获取活动信息
|
||||||
Map<String, Object> goodsCurrentPromotionMap = promotionService.getGoodsCurrentPromotionMap(index);
|
Map<String, Object> goodsCurrentPromotionMap = promotionService.getGoodsCurrentPromotionMap(index);
|
||||||
//写入促销信息
|
//写入促销信息
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package cn.lili.controller.goods;
|
package cn.lili.controller.goods;
|
||||||
|
|
||||||
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.goods.entity.dos.CategorySpecification;
|
import cn.lili.modules.goods.entity.dos.CategorySpecification;
|
||||||
@ -16,6 +15,7 @@ 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.*;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -68,9 +68,12 @@ public class CategorySpecificationManagerController {
|
|||||||
//删除分类规格绑定信息
|
//删除分类规格绑定信息
|
||||||
this.categorySpecificationService.remove(new QueryWrapper<CategorySpecification>().eq("category_id", categoryId));
|
this.categorySpecificationService.remove(new QueryWrapper<CategorySpecification>().eq("category_id", categoryId));
|
||||||
//绑定规格信息
|
//绑定规格信息
|
||||||
for (String specId : categorySpecs) {
|
if (categorySpecs != null && categorySpecs.length > 0) {
|
||||||
CategorySpecification categoryBrand = new CategorySpecification(categoryId, specId);
|
List<CategorySpecification> categorySpecifications = new ArrayList<>();
|
||||||
categorySpecificationService.save(categoryBrand);
|
for (String categorySpec : categorySpecs) {
|
||||||
|
categorySpecifications.add( new CategorySpecification(categoryId, categorySpec));
|
||||||
|
}
|
||||||
|
categorySpecificationService.saveBatch(categorySpecifications);
|
||||||
}
|
}
|
||||||
return ResultUtil.success();
|
return ResultUtil.success();
|
||||||
}
|
}
|
||||||
|
@ -53,9 +53,9 @@ public class SpecificationManagerController {
|
|||||||
|
|
||||||
@GetMapping(value = "/page")
|
@GetMapping(value = "/page")
|
||||||
@ApiOperation(value = "分页获取")
|
@ApiOperation(value = "分页获取")
|
||||||
public ResultMessage<IPage<SpecificationVO>> getByPage(@RequestParam(required = false) String specName, PageVO pageVo) {
|
public ResultMessage<IPage<SpecificationVO>> getByPage(String specId, PageVO pageVo) {
|
||||||
SpecificationSearchParams searchParams = new SpecificationSearchParams();
|
SpecificationSearchParams searchParams = new SpecificationSearchParams();
|
||||||
searchParams.setSpecName(specName);
|
searchParams.setSpecId(specId);
|
||||||
return ResultUtil.data(specificationService.getSpecificationPage(searchParams, pageVo));
|
return ResultUtil.data(specificationService.getSpecificationPage(searchParams, pageVo));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,45 @@
|
|||||||
|
package cn.lili.controller.member;
|
||||||
|
|
||||||
|
import cn.lili.common.enums.ResultUtil;
|
||||||
|
import cn.lili.common.vo.PageVO;
|
||||||
|
import cn.lili.common.vo.ResultMessage;
|
||||||
|
import cn.lili.modules.message.entity.dos.MemberMessage;
|
||||||
|
import cn.lili.modules.message.entity.dos.StoreMessage;
|
||||||
|
import cn.lili.modules.message.entity.vos.MemberMessageQueryVO;
|
||||||
|
import cn.lili.modules.message.entity.vos.StoreMessageQueryVO;
|
||||||
|
import cn.lili.modules.message.service.MemberMessageService;
|
||||||
|
import cn.lili.modules.message.service.StoreMessageService;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 管理端,会员消息消息管理接口
|
||||||
|
*
|
||||||
|
* @author pikachu
|
||||||
|
* @date: 2020/12/6 16:09
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
@RestController
|
||||||
|
@Api(tags = "管理端,会员消息消息管理接口")
|
||||||
|
@RequestMapping("/manager/message/member")
|
||||||
|
public class MemberMessageManagerController {
|
||||||
|
@Autowired
|
||||||
|
private MemberMessageService memberMessageService;
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
@ApiOperation(value = "多条件分页获取")
|
||||||
|
public ResultMessage<IPage<MemberMessage>> getByCondition(MemberMessageQueryVO memberMessageQueryVO,
|
||||||
|
PageVO pageVo) {
|
||||||
|
IPage<MemberMessage> page = memberMessageService.getPage(memberMessageQueryVO, pageVo);
|
||||||
|
return ResultUtil.data(page);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -68,23 +68,14 @@ public class ElasticsearchController {
|
|||||||
String goodsId = null;
|
String goodsId = null;
|
||||||
//库存锁是在redis做的,所以生成索引,同时更新一下redis中的库存数量
|
//库存锁是在redis做的,所以生成索引,同时更新一下redis中的库存数量
|
||||||
for (GoodsSku goodsSku : list) {
|
for (GoodsSku goodsSku : list) {
|
||||||
boolean needIndex = false;
|
|
||||||
if (goodsId == null || !goodsId.equals(goodsSku.getGoodsId())) {
|
if (goodsId == null || !goodsId.equals(goodsSku.getGoodsId())) {
|
||||||
goodsId = goodsSku.getGoodsId();
|
goodsId = goodsSku.getGoodsId();
|
||||||
Goods goods = goodsService.getById(goodsId);
|
Goods goods = goodsService.getById(goodsId);
|
||||||
|
EsGoodsIndex index = new EsGoodsIndex(goodsSku);
|
||||||
if (goods.getParams() != null && !goods.getParams().isEmpty()) {
|
if (goods.getParams() != null && !goods.getParams().isEmpty()) {
|
||||||
List<GoodsParams> goodsParams = JSONUtil.toList(goods.getParams(), GoodsParams.class);
|
List<GoodsParams> goodsParams = JSONUtil.toList(goods.getParams(), GoodsParams.class);
|
||||||
for (GoodsParams goodsParam : goodsParams) {
|
index = new EsGoodsIndex(goodsSku, goodsParams);
|
||||||
Parameters parameters = parametersService.getById(goodsParam.getParamId());
|
|
||||||
if (parameters.getIsIndex() == 1) {
|
|
||||||
needIndex = true;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Boolean.TRUE.equals(needIndex)) {
|
|
||||||
EsGoodsIndex index = new EsGoodsIndex(goodsSku);
|
|
||||||
Map<String, Object> goodsCurrentPromotionMap = promotionService.getGoodsCurrentPromotionMap(index);
|
Map<String, Object> goodsCurrentPromotionMap = promotionService.getGoodsCurrentPromotionMap(index);
|
||||||
index.setPromotionMap(goodsCurrentPromotionMap);
|
index.setPromotionMap(goodsCurrentPromotionMap);
|
||||||
esGoodsIndices.add(index);
|
esGoodsIndices.add(index);
|
||||||
|
@ -12,3 +12,6 @@ ALTER TABLE li_coupon ADD range_day_type VARCHAR ( 32 );
|
|||||||
ALTER TABLE li_coupon ADD effective_days INT;
|
ALTER TABLE li_coupon ADD effective_days INT;
|
||||||
/**秒杀增加显示商品数量**/
|
/**秒杀增加显示商品数量**/
|
||||||
ALTER TABLE li_seckill ADD goods_num INT;
|
ALTER TABLE li_seckill ADD goods_num INT;
|
||||||
|
|
||||||
|
/**商品参数增加字段**/
|
||||||
|
ALTER TABLE li_goods_params ADD is_index INT;
|
Loading…
x
Reference in New Issue
Block a user