Merge branch 'master' into qiuqiu
This commit is contained in:
commit
13b1c353b9
@ -1,80 +0,0 @@
|
||||
package cn.lili.timetask.handler.impl.coupon;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivity;
|
||||
import cn.lili.modules.promotion.entity.enums.CouponActivityTypeEnum;
|
||||
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
|
||||
import cn.lili.modules.promotion.service.CouponActivityService;
|
||||
import cn.lili.timetask.handler.EveryMinuteExecute;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 优惠券活动状态监测
|
||||
*
|
||||
* @author Bulbasaur
|
||||
* @date: 2021/5/24 10:08 上午
|
||||
*/
|
||||
@Component
|
||||
public class CouponActivityExecute implements EveryMinuteExecute {
|
||||
|
||||
@Autowired
|
||||
private CouponActivityService couponActivityService;
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
//精确发券活动
|
||||
specify();
|
||||
//注册赠券的活动
|
||||
registered();
|
||||
}
|
||||
|
||||
/**
|
||||
* 监测精确发券活动
|
||||
* 达到活动时间发送优惠券
|
||||
*/
|
||||
private void specify(){
|
||||
DateTime dateTime=DateUtil.date();
|
||||
List<CouponActivity> couponActivities=couponActivityService.list(new LambdaQueryWrapper<CouponActivity>()
|
||||
.eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.SPECIFY.name())
|
||||
.le(CouponActivity::getStartTime, dateTime)
|
||||
.eq(CouponActivity::getPromotionStatus,PromotionStatusEnum.NEW.name()));
|
||||
//如果有符合要求的优惠券活动,发送优惠券
|
||||
if(couponActivities.size()>0){
|
||||
for (CouponActivity couponActivity:couponActivities) {
|
||||
couponActivityService.specify(couponActivity.getId());
|
||||
|
||||
//修改精准发券优惠券活动状态
|
||||
couponActivityService.update(new LambdaUpdateWrapper<CouponActivity>()
|
||||
.eq(CouponActivity::getId,couponActivity.getId())
|
||||
.set(CouponActivity::getPromotionStatus,PromotionStatusEnum.END.name()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* 注册赠券活动状态监测
|
||||
*/
|
||||
private void registered(){
|
||||
//开启注册赠券优惠券活动
|
||||
LambdaUpdateWrapper<CouponActivity> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
lambdaUpdateWrapper.eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.REGISTERED.name())
|
||||
.eq(CouponActivity::getPromotionStatus, PromotionStatusEnum.NEW.name())
|
||||
.le(CouponActivity::getStartTime, DateUtil.date())
|
||||
.set(CouponActivity::getPromotionStatus,PromotionStatusEnum.START.name());
|
||||
couponActivityService.update(lambdaUpdateWrapper);
|
||||
|
||||
//关闭注册赠券优惠券活动
|
||||
LambdaUpdateWrapper<CouponActivity> endWrapper = new LambdaUpdateWrapper<>();
|
||||
endWrapper.eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.REGISTERED.name())
|
||||
.eq(CouponActivity::getPromotionStatus, PromotionStatusEnum.START.name())
|
||||
.le(CouponActivity::getEndTime, DateUtil.date())
|
||||
.set(CouponActivity::getPromotionStatus,PromotionStatusEnum.END.name());
|
||||
couponActivityService.update(endWrapper);
|
||||
}
|
||||
}
|
@ -320,6 +320,11 @@ public enum ResultCode {
|
||||
|
||||
FULL_DISCOUNT_EDIT_DELETE(43002, "删除满优惠活动成功"),
|
||||
|
||||
/**
|
||||
* 直播
|
||||
*/
|
||||
STODIO_GOODS_EXIST_ERROR(44001,"直播商品已存在"),
|
||||
|
||||
/**
|
||||
* 店铺
|
||||
*/
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cn.lili.common.validation;
|
||||
|
||||
import cn.lili.common.validation.impl.MobileValidator;
|
||||
import cn.lili.common.validation.impl.PhoneValidator;
|
||||
|
||||
import javax.validation.Constraint;
|
||||
import javax.validation.Payload;
|
||||
@ -12,7 +13,7 @@ import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
|
||||
/**
|
||||
* 手机号码校验注解
|
||||
* 电话号码校验注解
|
||||
*
|
||||
* @author Bulbasaur
|
||||
*/
|
||||
@ -22,9 +23,9 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
@Constraint(validatedBy = {MobileValidator.class})
|
||||
public @interface Mobile {
|
||||
|
||||
String regexp() default "1[3|4|5|7|8]\\d{9}";
|
||||
String regexp() default "";
|
||||
|
||||
String message() default "手机号码格式不正确";
|
||||
String message() default "电话号码格式不正确";
|
||||
|
||||
Class<?>[] groups() default {};
|
||||
|
||||
|
32
framework/src/main/java/cn/lili/common/validation/Phone.java
Normal file
32
framework/src/main/java/cn/lili/common/validation/Phone.java
Normal file
@ -0,0 +1,32 @@
|
||||
package cn.lili.common.validation;
|
||||
|
||||
import cn.lili.common.validation.impl.PhoneValidator;
|
||||
|
||||
import javax.validation.Constraint;
|
||||
import javax.validation.Payload;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
|
||||
/**
|
||||
* 手机号码校验注解
|
||||
*
|
||||
* @author Bulbasaur
|
||||
*/
|
||||
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
|
||||
@Retention(RUNTIME)
|
||||
@Documented
|
||||
@Constraint(validatedBy = {PhoneValidator.class})
|
||||
public @interface Phone {
|
||||
|
||||
String regexp() default "1[3|4|5|7|8]\\d{9}";
|
||||
|
||||
String message() default "手机号码格式不正确";
|
||||
|
||||
Class<?>[] groups() default {};
|
||||
|
||||
Class<? extends Payload>[] payload() default {};
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package cn.lili.common.validation.impl;
|
||||
|
||||
import cn.lili.common.validation.Mobile;
|
||||
import cn.lili.common.validation.Phone;
|
||||
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
@ -10,12 +11,21 @@ import java.util.regex.Pattern;
|
||||
|
||||
public class MobileValidator implements ConstraintValidator<Mobile, String> {
|
||||
|
||||
private static Pattern pattern = Pattern.compile("^0?(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])[0-9]{8}$");
|
||||
|
||||
@Override
|
||||
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
|
||||
Matcher m = pattern.matcher(value);
|
||||
return m.matches();
|
||||
Pattern p1 = null,p2 = null;
|
||||
Matcher m = null;
|
||||
boolean b = false;
|
||||
p1 = Pattern.compile("^[0][1-9]{2,3}-[0-9]{5,10}$"); // 验证带区号的
|
||||
p2 = Pattern.compile("^[1-9]{1}[0-9]{5,8}$"); // 验证没有区号的
|
||||
if(value.length() >9)
|
||||
{ m = p1.matcher(value);
|
||||
b = m.matches();
|
||||
}else{
|
||||
m = p2.matcher(value);
|
||||
b = m.matches();
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -0,0 +1,25 @@
|
||||
package cn.lili.common.validation.impl;
|
||||
|
||||
import cn.lili.common.validation.Phone;
|
||||
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
public class PhoneValidator implements ConstraintValidator<Phone, String> {
|
||||
|
||||
private static Pattern pattern = Pattern.compile("^0?(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])[0-9]{8}$");
|
||||
|
||||
@Override
|
||||
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
|
||||
Matcher m = pattern.matcher(value);
|
||||
return m.matches();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(Phone constraintAnnotation) {
|
||||
|
||||
}
|
||||
}
|
@ -5,6 +5,7 @@ import cn.lili.common.delayqueue.BroadcastMessage;
|
||||
import cn.lili.common.enums.ResultCode;
|
||||
import cn.lili.common.exception.ServiceException;
|
||||
import cn.lili.common.security.context.UserContext;
|
||||
import cn.lili.common.security.enums.UserEnums;
|
||||
import cn.lili.common.trigger.enums.DelayTypeEnums;
|
||||
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
||||
import cn.lili.common.trigger.model.TimeExecuteConstant;
|
||||
@ -61,9 +62,9 @@ public class StudioServiceImpl extends ServiceImpl<StudioMapper, Studio> impleme
|
||||
public Boolean create(Studio studio) {
|
||||
try {
|
||||
//创建小程序直播
|
||||
Map<String, String> roomMap = wechatLivePlayerUtil.create(studio);
|
||||
studio.setRoomId(Integer.parseInt(roomMap.get("roomId")));
|
||||
studio.setQrCodeUrl(roomMap.get("qrcodeUrl"));
|
||||
// Map<String, String> roomMap = wechatLivePlayerUtil.create(studio);
|
||||
// studio.setRoomId(Integer.parseInt(roomMap.get("roomId")));
|
||||
// studio.setQrCodeUrl(roomMap.get("qrcodeUrl"));
|
||||
studio.setStoreId(UserContext.getCurrentUser().getStoreId());
|
||||
studio.setStatus(StudioStatusEnum.NEW.name());
|
||||
//直播间添加成功发送直播间开启、关闭延时任务
|
||||
@ -71,7 +72,8 @@ public class StudioServiceImpl extends ServiceImpl<StudioMapper, Studio> impleme
|
||||
//直播开启延时任务
|
||||
BroadcastMessage broadcastMessage = new BroadcastMessage(studio.getId(), StudioStatusEnum.START.name());
|
||||
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.BROADCAST_EXECUTOR,
|
||||
Long.parseLong(studio.getStartTime()) * 1000L, broadcastMessage,
|
||||
Long.parseLong(studio.getStartTime()),
|
||||
broadcastMessage,
|
||||
DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.BROADCAST, studio.getId()),
|
||||
rocketmqCustomProperties.getPromotionTopic());
|
||||
|
||||
@ -81,7 +83,7 @@ public class StudioServiceImpl extends ServiceImpl<StudioMapper, Studio> impleme
|
||||
//直播结束延时任务
|
||||
broadcastMessage = new BroadcastMessage(studio.getId(), StudioStatusEnum.END.name());
|
||||
timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.BROADCAST_EXECUTOR,
|
||||
Long.parseLong(studio.getEndTime()) * 1000L, broadcastMessage,
|
||||
Long.parseLong(studio.getEndTime()), broadcastMessage,
|
||||
DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.BROADCAST, studio.getId()),
|
||||
rocketmqCustomProperties.getPromotionTopic());
|
||||
//发送促销活动开始的延时任务
|
||||
@ -152,6 +154,14 @@ public class StudioServiceImpl extends ServiceImpl<StudioMapper, Studio> impleme
|
||||
|
||||
@Override
|
||||
public Boolean push(Integer roomId, Integer goodsId) {
|
||||
|
||||
//判断直播间是否已添加商品
|
||||
if (studioCommodityService.getOne(
|
||||
new LambdaQueryWrapper<StudioCommodity>().eq(StudioCommodity::getRoomId, roomId)
|
||||
.eq(StudioCommodity::getGoodsId, goodsId)) != null) {
|
||||
throw new ServiceException(ResultCode.STODIO_GOODS_EXIST_ERROR);
|
||||
}
|
||||
|
||||
//调用微信接口添加直播间商品并进行记录
|
||||
if (wechatLivePlayerUtil.pushGoods(roomId, goodsId)) {
|
||||
studioCommodityService.save(new StudioCommodity(roomId, goodsId));
|
||||
@ -186,10 +196,14 @@ public class StudioServiceImpl extends ServiceImpl<StudioMapper, Studio> impleme
|
||||
|
||||
@Override
|
||||
public IPage<Studio> studioList(PageVO pageVO, Integer recommend, String status) {
|
||||
return this.page(PageUtil.initPage(pageVO), new QueryWrapper<Studio>()
|
||||
QueryWrapper queryWrapper = new QueryWrapper<Studio>()
|
||||
.eq(recommend != null, "recommend", true)
|
||||
.eq(status != null, "status", status)
|
||||
.orderByDesc("create_time"));
|
||||
.orderByDesc("create_time");
|
||||
if (UserContext.getCurrentUser().getRole().equals(UserEnums.STORE)) {
|
||||
queryWrapper.eq("store_id", UserContext.getCurrentUser().getStoreId());
|
||||
}
|
||||
return this.page(PageUtil.initPage(pageVO), queryWrapper);
|
||||
|
||||
}
|
||||
|
||||
|
@ -201,7 +201,7 @@ public class WechatLivePlayerUtil {
|
||||
log.info("微信小程序请求结果:" + content);
|
||||
//获取请求内容,如果token过期则重新获取,如果出错则抛出错误
|
||||
JSONObject jsonObject = new JSONObject(content);
|
||||
if (jsonObject.get("errcode").equals("0")) {
|
||||
if (jsonObject.get("errcode").toString().equals("0")) {
|
||||
return jsonObject;
|
||||
} else if (jsonObject.get("errcode").equals("40001")) {
|
||||
wechatAccessTokenUtil.removeAccessToken(ClientTypeEnum.WECHAT_MP);
|
||||
|
@ -184,6 +184,8 @@ public class ConnectUtil {
|
||||
.clientId(qqConnectSettingItem.getAppId())
|
||||
.clientSecret(qqConnectSettingItem.getAppKey())
|
||||
.redirectUri(getRedirectUri(authInterface))
|
||||
//这里qq获取unionid 需要配置为true,详情可以查阅属性说明,内部有帮助文档
|
||||
.unionId(true)
|
||||
.build(), cache);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package cn.lili.modules.member.entity.dos;
|
||||
|
||||
import cn.lili.base.BaseEntity;
|
||||
import cn.lili.common.validation.Mobile;
|
||||
import cn.lili.common.validation.Phone;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
@ -34,7 +34,7 @@ public class MemberAddress extends BaseEntity {
|
||||
@ApiModelProperty(value = "收货人姓名")
|
||||
private String name;
|
||||
|
||||
@Mobile
|
||||
@Phone
|
||||
@ApiModelProperty(value = "手机号码")
|
||||
private String mobile;
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
package cn.lili.modules.member.entity.dto;
|
||||
|
||||
import cn.lili.common.security.context.UserContext;
|
||||
import cn.lili.common.security.enums.UserEnums;
|
||||
import cn.lili.common.utils.StringUtils;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package cn.lili.modules.member.entity.dto;
|
||||
|
||||
import cn.lili.common.validation.Mobile;
|
||||
import cn.lili.common.validation.Phone;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ -20,7 +20,7 @@ public class MemberAddressDTO {
|
||||
@ApiModelProperty(value = "收货人姓名")
|
||||
private String consigneeName;
|
||||
|
||||
@Mobile
|
||||
@Phone
|
||||
@ApiModelProperty(value = "手机号码")
|
||||
private String consigneeMobile;
|
||||
|
||||
|
@ -2,7 +2,14 @@ package cn.lili.modules.promotion.serviceimpl;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import cn.lili.common.exception.ServiceException;
|
||||
import cn.lili.common.trigger.enums.DelayTypeEnums;
|
||||
import cn.lili.common.trigger.interfaces.TimeTrigger;
|
||||
import cn.lili.common.trigger.message.PromotionMessage;
|
||||
import cn.lili.common.trigger.model.TimeExecuteConstant;
|
||||
import cn.lili.common.trigger.model.TimeTriggerMsg;
|
||||
import cn.lili.common.trigger.util.DelayQueueTools;
|
||||
import cn.lili.common.utils.DateUtil;
|
||||
import cn.lili.config.rocketmq.RocketmqCustomProperties;
|
||||
import cn.lili.modules.member.entity.dos.Member;
|
||||
import cn.lili.modules.member.service.MemberService;
|
||||
import cn.lili.modules.promotion.entity.dos.Coupon;
|
||||
@ -10,9 +17,7 @@ import cn.lili.modules.promotion.entity.dos.CouponActivity;
|
||||
import cn.lili.modules.promotion.entity.dos.CouponActivityItem;
|
||||
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
|
||||
import cn.lili.modules.promotion.entity.dto.CouponActivityDTO;
|
||||
import cn.lili.modules.promotion.entity.enums.CouponActivitySendTypeEnum;
|
||||
import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum;
|
||||
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
|
||||
import cn.lili.modules.promotion.entity.enums.*;
|
||||
import cn.lili.modules.promotion.entity.vos.CouponActivityVO;
|
||||
import cn.lili.modules.promotion.mapper.CouponActivityMapper;
|
||||
import cn.lili.modules.promotion.service.CouponActivityItemService;
|
||||
@ -47,6 +52,12 @@ public class CouponActivityServiceImpl extends ServiceImpl<CouponActivityMapper,
|
||||
private CouponActivityItemService couponActivityItemService;
|
||||
@Autowired
|
||||
private MemberService memberService;
|
||||
//Rocketmq
|
||||
@Autowired
|
||||
private RocketmqCustomProperties rocketmqCustomProperties;
|
||||
//延时任务
|
||||
@Autowired
|
||||
private TimeTrigger timeTrigger;
|
||||
|
||||
@Override
|
||||
public CouponActivityDTO addCouponActivity(CouponActivityDTO couponActivityDTO) {
|
||||
@ -60,6 +71,17 @@ public class CouponActivityServiceImpl extends ServiceImpl<CouponActivityMapper,
|
||||
this.save(couponActivityDTO);
|
||||
//添加优惠券活动优惠券
|
||||
this.addCouponActivityItems(couponActivityDTO);
|
||||
|
||||
//创建优惠券活动延时任务
|
||||
PromotionMessage promotionMessage = new PromotionMessage(couponActivityDTO.getId(), PromotionTypeEnum.COUPON_ACTIVITY.name(), PromotionStatusEnum.START.name(), couponActivityDTO.getStartTime(), couponActivityDTO.getEndTime());
|
||||
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||
couponActivityDTO.getStartTime().getTime(),
|
||||
promotionMessage,
|
||||
DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
||||
rocketmqCustomProperties.getPromotionTopic());
|
||||
//发送促销活动开始的延时任务
|
||||
this.timeTrigger.addDelay(timeTriggerMsg);
|
||||
|
||||
return couponActivityDTO;
|
||||
}
|
||||
|
||||
|
@ -15,18 +15,12 @@ import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.config.rocketmq.RocketmqCustomProperties;
|
||||
import cn.lili.modules.goods.entity.dos.GoodsSku;
|
||||
import cn.lili.modules.goods.service.GoodsSkuService;
|
||||
import cn.lili.modules.promotion.entity.dos.Coupon;
|
||||
import cn.lili.modules.promotion.entity.dos.FullDiscount;
|
||||
import cn.lili.modules.promotion.entity.dos.MemberCoupon;
|
||||
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
|
||||
import cn.lili.modules.promotion.entity.dos.*;
|
||||
import cn.lili.modules.promotion.entity.enums.*;
|
||||
import cn.lili.modules.promotion.entity.vos.CouponSearchParams;
|
||||
import cn.lili.modules.promotion.entity.vos.CouponVO;
|
||||
import cn.lili.modules.promotion.mapper.CouponMapper;
|
||||
import cn.lili.modules.promotion.service.CouponService;
|
||||
import cn.lili.modules.promotion.service.FullDiscountService;
|
||||
import cn.lili.modules.promotion.service.MemberCouponService;
|
||||
import cn.lili.modules.promotion.service.PromotionGoodsService;
|
||||
import cn.lili.modules.promotion.service.*;
|
||||
import cn.lili.modules.promotion.tools.PromotionTools;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
@ -76,6 +70,9 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
|
||||
//满额活动
|
||||
@Autowired
|
||||
private FullDiscountService fullDiscountService;
|
||||
//优惠券活动-优惠券关联
|
||||
@Autowired
|
||||
private CouponActivityItemService couponActivityItemService;
|
||||
|
||||
@Override
|
||||
public CouponVO add(CouponVO coupon) {
|
||||
@ -159,15 +156,31 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
|
||||
@Override
|
||||
public boolean deleteCoupon(String id) {
|
||||
CouponVO couponVO = checkStatus(id);
|
||||
LambdaUpdateWrapper<Coupon> couponUpdateWrapper = new LambdaUpdateWrapper<Coupon>().eq(Coupon::getId, id).set(Coupon::getPromotionStatus, PromotionStatusEnum.CLOSE.name()).set(Coupon::getDeleteFlag, true);
|
||||
|
||||
//更新优惠券状态为关闭,标示删除标志
|
||||
LambdaUpdateWrapper<Coupon> couponUpdateWrapper = new LambdaUpdateWrapper<Coupon>().eq(Coupon::getId, id)
|
||||
.set(Coupon::getPromotionStatus, PromotionStatusEnum.CLOSE.name()).set(Coupon::getDeleteFlag, true);
|
||||
boolean result = this.update(couponUpdateWrapper);
|
||||
LambdaUpdateWrapper<PromotionGoods> updateWrapper = new LambdaUpdateWrapper<PromotionGoods>().eq(PromotionGoods::getPromotionId, id).set(PromotionGoods::getPromotionStatus, PromotionStatusEnum.CLOSE.name()).set(PromotionGoods::getDeleteFlag, true);
|
||||
|
||||
//更新促销商品记录信息为删除
|
||||
LambdaUpdateWrapper<PromotionGoods> updateWrapper = new LambdaUpdateWrapper<PromotionGoods>()
|
||||
.eq(PromotionGoods::getPromotionId, id)
|
||||
.set(PromotionGoods::getPromotionStatus, PromotionStatusEnum.CLOSE.name())
|
||||
.set(PromotionGoods::getDeleteFlag, true);
|
||||
this.promotionGoodsService.update(updateWrapper);
|
||||
LambdaUpdateWrapper<MemberCoupon> memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper<MemberCoupon>().eq(MemberCoupon::getCouponId, id).set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.CLOSED.name());
|
||||
|
||||
//删除mongo优惠券信息
|
||||
LambdaUpdateWrapper<MemberCoupon> memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper<MemberCoupon>()
|
||||
.eq(MemberCoupon::getCouponId, id)
|
||||
.set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.CLOSED.name());
|
||||
memberCouponService.update(memberCouponLambdaUpdateWrapper);
|
||||
this.mongoTemplate.remove(new Query().addCriteria(Criteria.where("id").is(id)), CouponVO.class);
|
||||
|
||||
//删除优惠券活动关联优惠券
|
||||
couponActivityItemService.remove(new LambdaQueryWrapper<CouponActivityItem>()
|
||||
.eq(CouponActivityItem::getCouponId,id));
|
||||
|
||||
//删除延时任务
|
||||
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||
couponVO.getStartTime().getTime(),
|
||||
DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.COUPON.name() + couponVO.getId())),
|
||||
|
@ -16,6 +16,7 @@ import cn.lili.modules.search.service.EsGoodsIndexService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
@ -416,16 +417,17 @@ public class PromotionServiceImpl implements PromotionService {
|
||||
* @return 修改结果
|
||||
*/
|
||||
private boolean updateCouponActivity(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum){
|
||||
boolean result;
|
||||
CouponActivityVO couponActivityVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), CouponActivityVO.class);
|
||||
if (couponActivityVO == null) {
|
||||
this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus());
|
||||
return false;
|
||||
|
||||
//如果是精准发券,进行发送优惠券
|
||||
CouponActivity couponActivity=couponActivityService.getById(promotionMessage.getPromotionId());
|
||||
if(couponActivity.getCouponActivityType().equals(CouponActivityTypeEnum.SPECIFY.name())){
|
||||
couponActivityService.specify(couponActivity.getId());
|
||||
}
|
||||
couponActivityVO.setPromotionStatus(promotionMessage.getPromotionStatus());
|
||||
result = this.couponActivityService.update(promotionMessage.updateWrapper());
|
||||
this.mongoTemplate.save(couponActivityVO);
|
||||
return result;
|
||||
|
||||
//修改活动状态
|
||||
return couponActivityService.update(new LambdaUpdateWrapper<CouponActivity>()
|
||||
.eq(CouponActivity::getId,promotionMessage.getPromotionId())
|
||||
.set(CouponActivity::getPromotionStatus,promotionMessage.getPromotionStatus()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -185,7 +185,7 @@ public class SeckillApplyServiceImpl extends ServiceImpl<SeckillApplyMapper, Sec
|
||||
promotionGoodsService.saveBatch(promotionGoodsList);
|
||||
}
|
||||
//设置秒杀活动的商品数量、店铺数量
|
||||
seckillService.updateSeckillGoodsNum(seckill.getId());
|
||||
seckillService.updateSeckillGoodsNum(seckillId);
|
||||
}
|
||||
|
||||
|
||||
|
@ -126,7 +126,7 @@ public class SeckillServiceImpl extends ServiceImpl<SeckillMapper, Seckill> impl
|
||||
//检查秒杀活动参数
|
||||
checkSeckillParam(seckillVO, seckill.getStoreId());
|
||||
//保存到MYSQL中
|
||||
boolean result = this.save(seckill);
|
||||
boolean result = this.save(seckillVO);
|
||||
//保存到MONGO中
|
||||
this.mongoTemplate.save(seckillVO);
|
||||
//添加秒杀延时任务
|
||||
@ -245,7 +245,7 @@ public class SeckillServiceImpl extends ServiceImpl<SeckillMapper, Seckill> impl
|
||||
public Integer getApplyNum() {
|
||||
LambdaQueryWrapper<Seckill> queryWrapper = Wrappers.lambdaQuery();
|
||||
//秒杀申请时间未超过当前时间
|
||||
queryWrapper.le(Seckill::getApplyEndTime, cn.hutool.core.date.DateUtil.date());
|
||||
queryWrapper.ge(Seckill::getApplyEndTime, cn.hutool.core.date.DateUtil.date());
|
||||
queryWrapper.eq(Seckill::getPromotionStatus, PromotionStatusEnum.NEW.name());
|
||||
return this.count(queryWrapper);
|
||||
}
|
||||
@ -296,7 +296,7 @@ public class SeckillServiceImpl extends ServiceImpl<SeckillMapper, Seckill> impl
|
||||
int sameNum = this.count(queryWrapper);
|
||||
//当前时间段是否存在同类活动
|
||||
if (sameNum > 0) {
|
||||
throw new ServiceException("当前时间内已存在同类活动");
|
||||
throw new ServiceException("当前时间内已存在同类活动:"+seckill.getStartTime());
|
||||
}
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@ package cn.lili.modules.store.entity.dos;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.lili.common.validation.Mobile;
|
||||
import cn.lili.common.validation.Phone;
|
||||
import cn.lili.modules.store.entity.dto.AdminStoreApplyDTO;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
@ -93,7 +94,7 @@ public class StoreDetail {
|
||||
private String linkName;
|
||||
|
||||
@NotBlank(message = "手机号不能为空")
|
||||
@Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误")
|
||||
@Phone
|
||||
@ApiModelProperty(value = "联系人电话")
|
||||
private String linkPhone;
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.lili.modules.store.entity.dto;
|
||||
|
||||
import cn.lili.common.validation.Mobile;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@ -57,6 +58,7 @@ public class AdminStoreApplyDTO {
|
||||
@ApiModelProperty(value = "公司名称")
|
||||
private String companyName;
|
||||
|
||||
@Mobile
|
||||
@ApiModelProperty(value = "公司电话")
|
||||
private String companyPhone;
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.lili.modules.store.entity.dto;
|
||||
|
||||
import cn.lili.common.validation.Mobile;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
@ -38,6 +39,10 @@ public class StoreCompanyDTO {
|
||||
@ApiModelProperty(value = "公司地址")
|
||||
private String companyAddress;
|
||||
|
||||
@Mobile
|
||||
@ApiModelProperty(value = "公司电话")
|
||||
private String companyPhone;
|
||||
|
||||
@Email
|
||||
@ApiModelProperty(value = "电子邮箱")
|
||||
private String companyEmail;
|
||||
|
@ -1,11 +1,23 @@
|
||||
package cn.lili.modules.store.entity.dto;
|
||||
|
||||
import cn.lili.common.validation.Mobile;
|
||||
import cn.lili.common.validation.Phone;
|
||||
import cn.lili.modules.store.entity.dos.StoreDetail;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Id;
|
||||
import javax.validation.constraints.Email;
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 店铺修改DTO
|
||||
@ -14,7 +26,147 @@ import javax.validation.constraints.Size;
|
||||
* @date 2020-08-22 15:10:51
|
||||
*/
|
||||
@Data
|
||||
public class StoreEditDTO extends StoreDetail {
|
||||
public class StoreEditDTO {
|
||||
|
||||
|
||||
@Id
|
||||
@TableId
|
||||
@TableField
|
||||
@Column(columnDefinition = "bigint(20)")
|
||||
@ApiModelProperty(value = "唯一标识", hidden = true)
|
||||
private String id;
|
||||
|
||||
@NotBlank(message = "店铺不能为空")
|
||||
@ApiModelProperty(value = "店铺id")
|
||||
private String storeId;
|
||||
|
||||
@Size(min = 2, max = 200, message = "店铺名称长度为2-200位")
|
||||
@NotBlank(message = "店铺名称不能为空")
|
||||
@ApiModelProperty(value = "店铺名称")
|
||||
private String storeName;
|
||||
|
||||
@NotBlank(message = "公司名称不能为空")
|
||||
@Size(min = 2, max = 100, message = "公司名称错误")
|
||||
@ApiModelProperty(value = "公司名称")
|
||||
private String companyName;
|
||||
|
||||
@NotBlank(message = "公司地址不能为空")
|
||||
@Size(min = 1, max = 200, message = "公司地址,长度为1-200字符")
|
||||
@ApiModelProperty(value = "公司地址")
|
||||
private String companyAddress;
|
||||
|
||||
@ApiModelProperty(value = "公司地址地区Id")
|
||||
private String companyAddressIdPath;
|
||||
|
||||
@ApiModelProperty(value = "公司地址地区")
|
||||
private String companyAddressPath;
|
||||
|
||||
@Mobile
|
||||
@ApiModelProperty(value = "公司电话")
|
||||
private String companyPhone;
|
||||
|
||||
@Email
|
||||
@ApiModelProperty(value = "电子邮箱")
|
||||
private String companyEmail;
|
||||
|
||||
@Min(value = 1, message = "员工总数,至少一位")
|
||||
@ApiModelProperty(value = "员工总数")
|
||||
private Integer employeeNum;
|
||||
|
||||
@Min(value = 1, message = "注册资金,至少一位")
|
||||
@ApiModelProperty(value = "注册资金")
|
||||
private Double registeredCapital;
|
||||
|
||||
@NotBlank(message = "联系人姓名为空")
|
||||
@Length(min = 2, max = 20, message = "联系人长度为:2-20位字符")
|
||||
@ApiModelProperty(value = "联系人姓名")
|
||||
private String linkName;
|
||||
|
||||
@NotBlank(message = "手机号不能为空")
|
||||
@Phone
|
||||
@ApiModelProperty(value = "联系人电话")
|
||||
private String linkPhone;
|
||||
|
||||
@Size(min = 18, max = 18, message = "营业执照长度为18位字符")
|
||||
@ApiModelProperty(value = "营业执照号")
|
||||
private String licenseNum;
|
||||
|
||||
@Size(min = 1, max = 200, message = "法定经营范围长度为1-200位字符")
|
||||
@ApiModelProperty(value = "法定经营范围")
|
||||
private String scope;
|
||||
|
||||
@NotBlank(message = "营业执照电子版不能为空")
|
||||
@ApiModelProperty(value = "营业执照电子版")
|
||||
private String licencePhoto;
|
||||
|
||||
@NotBlank(message = "法人姓名不能为空")
|
||||
@Size(min = 2, max = 20, message = "法人姓名长度为2-20位字符")
|
||||
@ApiModelProperty(value = "法人姓名")
|
||||
private String legalName;
|
||||
|
||||
@NotBlank(message = "法人身份证不能为空")
|
||||
@Size(min = 18, max = 18, message = "法人身份证号长度为18位")
|
||||
@ApiModelProperty(value = "法人身份证")
|
||||
private String legalId;
|
||||
|
||||
@NotBlank(message = "法人身份证不能为空")
|
||||
@ApiModelProperty(value = "法人身份证照片")
|
||||
private String legalPhoto;
|
||||
|
||||
@Size(min = 1, max = 200, message = "结算银行开户行名称长度为1-200位")
|
||||
@NotBlank(message = "结算银行开户行名称不能为空")
|
||||
@ApiModelProperty(value = "结算银行开户行名称")
|
||||
private String settlementBankAccountName;
|
||||
|
||||
@Size(min = 1, max = 200, message = "结算银行开户账号长度为1-200位")
|
||||
@NotBlank(message = "结算银行开户账号不能为空")
|
||||
@ApiModelProperty(value = "结算银行开户账号")
|
||||
private String settlementBankAccountNum;
|
||||
|
||||
@Size(min = 1, max = 200, message = "结算银行开户支行名称长度为1-200位")
|
||||
@NotBlank(message = "结算银行开户支行名称不能为空")
|
||||
@ApiModelProperty(value = "结算银行开户支行名称")
|
||||
private String settlementBankBranchName;
|
||||
|
||||
@Size(min = 1, max = 50, message = "结算银行支行联行号长度为1-200位")
|
||||
@NotBlank(message = "结算银行支行联行号不能为空")
|
||||
@ApiModelProperty(value = "结算银行支行联行号")
|
||||
private String settlementBankJointName;
|
||||
|
||||
@NotBlank(message = "店铺经营类目不能为空")
|
||||
@ApiModelProperty(value = "店铺经营类目")
|
||||
@Column(columnDefinition = "TEXT")
|
||||
private String goodsManagementCategory;
|
||||
|
||||
@ApiModelProperty(value = "结算周期")
|
||||
private String settlementCycle;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "库存预警数量")
|
||||
private Integer stockWarning;
|
||||
|
||||
/**
|
||||
* 同城配送达达店铺编码
|
||||
*/
|
||||
@ApiModelProperty(value = "同城配送达达店铺编码")
|
||||
@TableField(value = "dd_code")
|
||||
private String ddCode;
|
||||
|
||||
//店铺退货收件地址
|
||||
@ApiModelProperty(value = "收货人姓名")
|
||||
private String salesConsigneeName;
|
||||
|
||||
@ApiModelProperty(value = "收件人手机")
|
||||
private String salesConsigneeMobile;
|
||||
|
||||
@ApiModelProperty(value = "地址Id, ','分割")
|
||||
private String salesConsigneeAddressId;
|
||||
|
||||
@ApiModelProperty(value = "地址名称, ','分割")
|
||||
private String salesConsigneeAddressPath;
|
||||
|
||||
@ApiModelProperty(value = "详细地址")
|
||||
private String salesConsigneeDetail;
|
||||
|
||||
@ApiModelProperty(value = "店铺状态")
|
||||
private String storeDisable;
|
||||
|
@ -24,7 +24,7 @@ public interface StoreDetailMapper extends BaseMapper<StoreDetail> {
|
||||
"d.* from li_store s inner join li_store_detail d on s.id=d.store_id where s.id=#{storeId}")
|
||||
StoreDetailVO getStoreDetail(String storeId);
|
||||
|
||||
@Select("select s.member_name,s.store_name,s.store_disable,s.self_operated,s.store_center,s.store_logo,s.store_desc,d.* " +
|
||||
@Select("select s.member_name,s.store_name,s.store_disable,s.self_operated,s.store_center,s.store_logo,s.store_desc,s.store_address_detail,s.store_address_path,s.store_address_id_path,d.* " +
|
||||
"from li_store s inner join li_store_detail d on s.id=d.store_id where s.member_id=#{memberId}")
|
||||
StoreDetailVO getStoreDetailByMemberId(String memberId);
|
||||
|
||||
|
@ -177,7 +177,10 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> implements
|
||||
member.setHaveStore(true);
|
||||
member.setStoreId(id);
|
||||
memberService.updateById(member);
|
||||
|
||||
//设定商家的结算日
|
||||
storeDetailService.update(new LambdaUpdateWrapper<StoreDetail>()
|
||||
.eq(StoreDetail::getStoreId, id)
|
||||
.set(StoreDetail::getSettlementDay, new DateTime()));
|
||||
} else {
|
||||
store.setStoreDisable(StoreStatusEnum.REFUSED.value());
|
||||
}
|
||||
@ -217,11 +220,17 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> implements
|
||||
if (!Optional.ofNullable(store).isPresent()) {
|
||||
Member member = memberService.getById(UserContext.getCurrentUser().getId());
|
||||
store = new Store(member);
|
||||
BeanUtil.copyProperties(storeCompanyDTO, store);
|
||||
this.save(store);
|
||||
StoreDetail storeDetail = new StoreDetail();
|
||||
storeDetail.setStoreId(store.getId());
|
||||
BeanUtil.copyProperties(storeCompanyDTO, storeDetail);
|
||||
return storeDetailService.save(storeDetail);
|
||||
} else {
|
||||
store.setStoreAddressDetail(storeCompanyDTO.getStoreAddressDetail());
|
||||
store.setStoreAddressIdPath(storeCompanyDTO.getStoreAddressIdPath());
|
||||
store.setStoreAddressPath(storeCompanyDTO.getStoreAddressPath());
|
||||
this.saveOrUpdate(store);
|
||||
}
|
||||
//判断是否存在店铺详情,如果没有则进行新建,如果存在则进行修改
|
||||
StoreDetail storeDetail = storeDetailService.getStoreDetail(store.getId());
|
||||
|
@ -1,6 +1,8 @@
|
||||
package cn.lili.controller.trade;
|
||||
|
||||
import cn.lili.common.enums.ResultUtil;
|
||||
import cn.lili.common.security.context.UserContext;
|
||||
import cn.lili.common.security.enums.UserEnums;
|
||||
import cn.lili.common.vo.ResultMessage;
|
||||
import cn.lili.modules.member.entity.dto.EvaluationQueryParams;
|
||||
import cn.lili.modules.member.entity.vo.MemberEvaluationListVO;
|
||||
@ -31,6 +33,7 @@ public class MemberEvaluationStoreController {
|
||||
@ApiOperation(value = "分页获取会员评论列表")
|
||||
@GetMapping
|
||||
public ResultMessage<IPage<MemberEvaluationListVO>> getByPage(EvaluationQueryParams evaluationQueryParams) {
|
||||
evaluationQueryParams.setStoreId(UserContext.getCurrentUser().getStoreId());
|
||||
return ResultUtil.data(memberEvaluationService.queryPage(evaluationQueryParams));
|
||||
}
|
||||
|
||||
|
@ -117,3 +117,5 @@ CREATE TABLE `li_coupon_activity_item` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/** 修改商品模板详情字段类型**/
|
||||
ALTER TABLE `li_draft_goods` MODIFY COLUMN `intro` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL;
|
||||
/** 添加秒杀设置**/
|
||||
INSERT INTO `li_setting` ( `id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `setting_value` ) VALUES ( 'SECKILL_SETTING', NULL, NULL, NULL, 'admin', '2021-06-04 09:58:39.384000', '{\"seckillRule\":\"秒杀规则\",\"hours\":\"9,10,11,12,13,14,15,21,22,23\"}' );
|
Loading…
x
Reference in New Issue
Block a user