diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java deleted file mode 100644 index f960098f..00000000 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java +++ /dev/null @@ -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 couponActivities=couponActivityService.list(new LambdaQueryWrapper() - .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() - .eq(CouponActivity::getId,couponActivity.getId()) - .set(CouponActivity::getPromotionStatus,PromotionStatusEnum.END.name())); - } - } - - } - /** - * 注册赠券活动状态监测 - */ - private void registered(){ - //开启注册赠券优惠券活动 - LambdaUpdateWrapper 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 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); - } -} diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index bb92dd6f..26490d88 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -320,6 +320,11 @@ public enum ResultCode { FULL_DISCOUNT_EDIT_DELETE(43002, "删除满优惠活动成功"), + /** + * 直播 + */ + STODIO_GOODS_EXIST_ERROR(44001,"直播商品已存在"), + /** * 店铺 */ diff --git a/framework/src/main/java/cn/lili/common/validation/Mobile.java b/framework/src/main/java/cn/lili/common/validation/Mobile.java index 374b37f0..578888bc 100644 --- a/framework/src/main/java/cn/lili/common/validation/Mobile.java +++ b/framework/src/main/java/cn/lili/common/validation/Mobile.java @@ -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 {}; diff --git a/framework/src/main/java/cn/lili/common/validation/Phone.java b/framework/src/main/java/cn/lili/common/validation/Phone.java new file mode 100644 index 00000000..9acdd3b9 --- /dev/null +++ b/framework/src/main/java/cn/lili/common/validation/Phone.java @@ -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[] payload() default {}; +} diff --git a/framework/src/main/java/cn/lili/common/validation/impl/MobileValidator.java b/framework/src/main/java/cn/lili/common/validation/impl/MobileValidator.java index add99847..2b21b32c 100644 --- a/framework/src/main/java/cn/lili/common/validation/impl/MobileValidator.java +++ b/framework/src/main/java/cn/lili/common/validation/impl/MobileValidator.java @@ -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 { - 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 diff --git a/framework/src/main/java/cn/lili/common/validation/impl/PhoneValidator.java b/framework/src/main/java/cn/lili/common/validation/impl/PhoneValidator.java new file mode 100644 index 00000000..731e9fe2 --- /dev/null +++ b/framework/src/main/java/cn/lili/common/validation/impl/PhoneValidator.java @@ -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 { + + 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) { + + } +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java index 18f9d74c..990dd0cd 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java @@ -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 impleme public Boolean create(Studio studio) { try { //创建小程序直播 - Map roomMap = wechatLivePlayerUtil.create(studio); - studio.setRoomId(Integer.parseInt(roomMap.get("roomId"))); - studio.setQrCodeUrl(roomMap.get("qrcodeUrl")); +// Map 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 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 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 impleme @Override public Boolean push(Integer roomId, Integer goodsId) { + + //判断直播间是否已添加商品 + if (studioCommodityService.getOne( + new LambdaQueryWrapper().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 impleme @Override public IPage studioList(PageVO pageVO, Integer recommend, String status) { - return this.page(PageUtil.initPage(pageVO), new QueryWrapper() + QueryWrapper queryWrapper = new QueryWrapper() .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); } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java index 0c0ac9fd..776f85a9 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java @@ -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); diff --git a/framework/src/main/java/cn/lili/modules/connect/util/ConnectUtil.java b/framework/src/main/java/cn/lili/modules/connect/util/ConnectUtil.java index cf28840a..acf388a3 100644 --- a/framework/src/main/java/cn/lili/modules/connect/util/ConnectUtil.java +++ b/framework/src/main/java/cn/lili/modules/connect/util/ConnectUtil.java @@ -184,6 +184,8 @@ public class ConnectUtil { .clientId(qqConnectSettingItem.getAppId()) .clientSecret(qqConnectSettingItem.getAppKey()) .redirectUri(getRedirectUri(authInterface)) + //这里qq获取unionid 需要配置为true,详情可以查阅属性说明,内部有帮助文档 + .unionId(true) .build(), cache); } } diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberAddress.java b/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberAddress.java index 84d436d4..ad78c35b 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberAddress.java +++ b/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberAddress.java @@ -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; diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dto/EvaluationQueryParams.java b/framework/src/main/java/cn/lili/modules/member/entity/dto/EvaluationQueryParams.java index 63881cd3..5ff36340 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/dto/EvaluationQueryParams.java +++ b/framework/src/main/java/cn/lili/modules/member/entity/dto/EvaluationQueryParams.java @@ -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; diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dto/MemberAddressDTO.java b/framework/src/main/java/cn/lili/modules/member/entity/dto/MemberAddressDTO.java index 3fe583f9..ad07b84b 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/dto/MemberAddressDTO.java +++ b/framework/src/main/java/cn/lili/modules/member/entity/dto/MemberAddressDTO.java @@ -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; diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java index 03f56f14..9fbd6e88 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java @@ -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 impleme //满额活动 @Autowired private FullDiscountService fullDiscountService; + //优惠券活动-优惠券关联 + @Autowired + private CouponActivityItemService couponActivityItemService; @Override public CouponVO add(CouponVO coupon) { @@ -159,15 +156,31 @@ public class CouponServiceImpl extends ServiceImpl impleme @Override public boolean deleteCoupon(String id) { CouponVO couponVO = checkStatus(id); - LambdaUpdateWrapper couponUpdateWrapper = new LambdaUpdateWrapper().eq(Coupon::getId, id).set(Coupon::getPromotionStatus, PromotionStatusEnum.CLOSE.name()).set(Coupon::getDeleteFlag, true); + //更新优惠券状态为关闭,标示删除标志 + LambdaUpdateWrapper couponUpdateWrapper = new LambdaUpdateWrapper().eq(Coupon::getId, id) + .set(Coupon::getPromotionStatus, PromotionStatusEnum.CLOSE.name()).set(Coupon::getDeleteFlag, true); boolean result = this.update(couponUpdateWrapper); - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper().eq(PromotionGoods::getPromotionId, id).set(PromotionGoods::getPromotionStatus, PromotionStatusEnum.CLOSE.name()).set(PromotionGoods::getDeleteFlag, true); + //更新促销商品记录信息为删除 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .eq(PromotionGoods::getPromotionId, id) + .set(PromotionGoods::getPromotionStatus, PromotionStatusEnum.CLOSE.name()) + .set(PromotionGoods::getDeleteFlag, true); this.promotionGoodsService.update(updateWrapper); - LambdaUpdateWrapper memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper().eq(MemberCoupon::getCouponId, id).set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.CLOSED.name()); + + //删除mongo优惠券信息 + LambdaUpdateWrapper memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper() + .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() + .eq(CouponActivityItem::getCouponId,id)); + + //删除延时任务 this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, couponVO.getStartTime().getTime(), DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.COUPON.name() + couponVO.getId())), diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java index bf1ced2b..4335286d 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java @@ -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() + .eq(CouponActivity::getId,promotionMessage.getPromotionId()) + .set(CouponActivity::getPromotionStatus,promotionMessage.getPromotionStatus())); } /** diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java index 7cec4571..64aa1db9 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java @@ -185,7 +185,7 @@ public class SeckillApplyServiceImpl extends ServiceImpl 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 impl public Integer getApplyNum() { LambdaQueryWrapper 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 impl int sameNum = this.count(queryWrapper); //当前时间段是否存在同类活动 if (sameNum > 0) { - throw new ServiceException("当前时间内已存在同类活动"); + throw new ServiceException("当前时间内已存在同类活动:"+seckill.getStartTime()); } } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/store/entity/dos/StoreDetail.java b/framework/src/main/java/cn/lili/modules/store/entity/dos/StoreDetail.java index e1ac24c8..df4deef9 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/dos/StoreDetail.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/dos/StoreDetail.java @@ -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; diff --git a/framework/src/main/java/cn/lili/modules/store/entity/dto/AdminStoreApplyDTO.java b/framework/src/main/java/cn/lili/modules/store/entity/dto/AdminStoreApplyDTO.java index a8d63597..3c43d7e3 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/dto/AdminStoreApplyDTO.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/dto/AdminStoreApplyDTO.java @@ -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; diff --git a/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreCompanyDTO.java b/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreCompanyDTO.java index 90b62404..3219f465 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreCompanyDTO.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreCompanyDTO.java @@ -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; diff --git a/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreEditDTO.java b/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreEditDTO.java index 6b6bfe50..3a814565 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreEditDTO.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreEditDTO.java @@ -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; diff --git a/framework/src/main/java/cn/lili/modules/store/mapper/StoreDetailMapper.java b/framework/src/main/java/cn/lili/modules/store/mapper/StoreDetailMapper.java index 0c33996b..4253411e 100644 --- a/framework/src/main/java/cn/lili/modules/store/mapper/StoreDetailMapper.java +++ b/framework/src/main/java/cn/lili/modules/store/mapper/StoreDetailMapper.java @@ -24,7 +24,7 @@ public interface StoreDetailMapper extends BaseMapper { "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); diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java index 687b9eb5..3900662a 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java @@ -177,7 +177,10 @@ public class StoreServiceImpl extends ServiceImpl implements member.setHaveStore(true); member.setStoreId(id); memberService.updateById(member); - + //设定商家的结算日 + storeDetailService.update(new LambdaUpdateWrapper() + .eq(StoreDetail::getStoreId, id) + .set(StoreDetail::getSettlementDay, new DateTime())); } else { store.setStoreDisable(StoreStatusEnum.REFUSED.value()); } @@ -217,11 +220,17 @@ public class StoreServiceImpl extends ServiceImpl 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()); diff --git a/seller-api/src/main/java/cn/lili/controller/trade/MemberEvaluationStoreController.java b/seller-api/src/main/java/cn/lili/controller/trade/MemberEvaluationStoreController.java index 71b77c08..79279fc3 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/MemberEvaluationStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/trade/MemberEvaluationStoreController.java @@ -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> getByPage(EvaluationQueryParams evaluationQueryParams) { + evaluationQueryParams.setStoreId(UserContext.getCurrentUser().getStoreId()); return ResultUtil.data(memberEvaluationService.queryPage(evaluationQueryParams)); } diff --git a/update-sql/version4.0to4.1.sql b/update-sql/version4.0to4.1.sql index 3bb510a4..a9a48e72 100644 --- a/update-sql/version4.0to4.1.sql +++ b/update-sql/version4.0to4.1.sql @@ -116,4 +116,6 @@ CREATE TABLE `li_coupon_activity_item` ( PRIMARY KEY (`id`) ) 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; \ No newline at end of file +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\"}' ); \ No newline at end of file