Merge branch 'master' into qiuqiu

This commit is contained in:
pikachu 2021-06-29 08:26:22 +08:00
commit 13b1c353b9
25 changed files with 353 additions and 131 deletions

View File

@ -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);
}
}

View File

@ -320,6 +320,11 @@ public enum ResultCode {
FULL_DISCOUNT_EDIT_DELETE(43002, "删除满优惠活动成功"),
/**
* 直播
*/
STODIO_GOODS_EXIST_ERROR(44001,"直播商品已存在"),
/**
* 店铺
*/

View File

@ -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 {};

View 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 {};
}

View File

@ -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

View File

@ -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) {
}
}

View File

@ -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);
}

View File

@ -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);

View File

@ -184,6 +184,8 @@ public class ConnectUtil {
.clientId(qqConnectSettingItem.getAppId())
.clientSecret(qqConnectSettingItem.getAppKey())
.redirectUri(getRedirectUri(authInterface))
//这里qq获取unionid 需要配置为true详情可以查阅属性说明内部有帮助文档
.unionId(true)
.build(), cache);
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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())),

View File

@ -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()));
}
/**

View File

@ -185,7 +185,7 @@ public class SeckillApplyServiceImpl extends ServiceImpl<SeckillApplyMapper, Sec
promotionGoodsService.saveBatch(promotionGoodsList);
}
//设置秒杀活动的商品数量店铺数量
seckillService.updateSeckillGoodsNum(seckill.getId());
seckillService.updateSeckillGoodsNum(seckillId);
}

View File

@ -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());
}
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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());

View File

@ -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));
}

View File

@ -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\"}' );