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