zoujiajian 3 лет назад
Родитель
Сommit
7b42e7f22a

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/SpotifyUnLimitRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.SpotifyUnLimitRecord;
+
+/*
+ *项目名: netflix
+ *文件名: SpotifyUnLimitRecordMapper
+ *创建者: JavaZou
+ *创建时间:2022/12/20 14:12
+ */
+public interface SpotifyUnLimitRecordMapper extends BaseMapper<SpotifyUnLimitRecord> {
+}

+ 1 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CouponUser.java

@@ -56,6 +56,7 @@ public class CouponUser extends BaseEntity {
 		center("unused", "领卷中心"),
 		exCode("exCode", "兑换码"),
 		wxCorp("wxCorp", "企业微信"),
+		manual("manual","手动发放")
 		;
 		private String channel;
 		private String desc;

+ 43 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/SpotifyUnLimitRecord.java

@@ -0,0 +1,43 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+
+/*
+ *项目名: netflix
+ *文件名: SpotifyUnLimitRecord
+ *创建者: JavaZou
+ *创建时间:2022/12/20 12:24
+ */
+@Getter
+@Setter
+@TableName("spotify_unLimit_record")
+public class SpotifyUnLimitRecord extends BaseEntity {
+	private Long userId;
+
+	@NotEmpty
+	private String account;
+
+	@NotEmpty
+	private String password;
+
+	private Status status;
+
+
+	@Getter
+	public enum Status {
+		Processing("待解除"),
+		Success("解除成功"),
+		Fail("解除失败"),
+		;
+
+		String desc;
+
+		Status(String desc) {
+			this.desc = desc;
+		}
+	}
+}

+ 6 - 0
netflix-service/src/main/java/com/cyksj/service/mange/coupon/CouponCommonService.java

@@ -2,6 +2,7 @@ package com.cyksj.service.mange.coupon;
 
 import com.cyksj.model.entity.Coupon;
 import com.cyksj.model.entity.CouponDistributePopularize;
+import com.cyksj.model.entity.CouponUser;
 import com.cyksj.model.request.CorpCouponSendReq;
 import com.cyksj.model.request.CouponActiveReq;
 import com.cyksj.model.request.CouponDistributeReq;
@@ -59,4 +60,9 @@ public interface CouponCommonService {
 	 * 发放优惠券
 	 */
 	void corpSendCoupon(CorpCouponSendReq corpCouponSendReq) throws Exception;
+
+	/**
+	 * 发放优惠券至用户
+	 */
+	Boolean sendCouponToUser(Long userId, Long couponId, Long couponActiveId, Long recommendId, Long popularizeId, CouponUser.Channel channel);
 }

+ 26 - 13
netflix-service/src/main/java/com/cyksj/service/mange/coupon/impl/CouponCommonServiceImpl.java

@@ -184,21 +184,34 @@ public class CouponCommonServiceImpl implements CouponCommonService {
 		if (coupon == null || !coupon.getDeleted()) {
 			throw BusinessRuntimeException.getInstance("该优惠券已被删除");
 		}
-		CouponUser couponUser = new CouponUser();
-		couponUser.setUserId(user.getId());
-		couponUser.setCouponId(corpCouponSendReq.getCouponId());
-		//领卷中心
-		couponUser.setChannel(CouponUser.Channel.wxCorp);
-		couponUser.setStatus(CouponUser.Status.unused);
-		couponFontService.updateCouponUserValidTime(couponId, couponUser);
-		try {
-			couponUserMapper.insert(couponUser);
-		} catch (DuplicateKeyException e) {
-			log.info("用户:{}重复领取优惠券{}插入数据错误", user.getId(), corpCouponSendReq.getCouponId());
-			throw BusinessRuntimeException.getInstance("已发放该优惠券");
-		}
+		//发放优惠券给用户
+		this.sendCouponToUser(user.getId(), couponId, null, null,null, CouponUser.Channel.wxCorp);
 	}
 
+	@Override
+	public Boolean sendCouponToUser(Long userId, Long couponId, Long couponActiveId, Long recommendId, Long popularizeId, CouponUser.Channel channel) {
+		CouponUser couponUser = couponUserMapper.selectOne(Wrappers.lambdaQuery(CouponUser.class).eq(CouponUser::getUserId, userId).eq(CouponUser::getCouponId, couponId).last("limit 1"));
+		if (couponUser == null) {
+			couponUser = new CouponUser();
+			couponUser.setUserId(userId);
+			couponUser.setCouponId(couponId);
+			//领券中心
+			couponUser.setChannel(channel);
+			couponUser.setStatus(CouponUser.Status.unused);
+			couponUser.setCouponActiveId(couponActiveId);
+			couponUser.setRecommendId(recommendId);
+			couponUser.setPopularizeId(recommendId);
+			//优惠券有效时间
+			couponFontService.updateCouponUserValidTime(couponId, couponUser);
+			try {
+				couponUserMapper.insert(couponUser);
+				return true;
+			} catch (DuplicateKeyException e) {
+				log.info("用户:{}重复领取优惠券{}插入数据错误", userId, couponId);
+			}
+		}
+		return false;
+	}
 
 	public void checkCouponParamsAndSaveOrUpdate(Coupon coupon) throws Exception {
 		List<Coupon.CouponGoodsSku> goodsSkuList = Jsons.parseList(coupon.getGoodsSkuIds(), Coupon.CouponGoodsSku.class);

+ 4 - 0
netflix-service/src/main/java/com/cyksj/service/register/RegisterOrderDonService.java

@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.cyksj.dto.Result;
 import com.cyksj.model.dto.H5JsPayParams;
 import com.cyksj.model.entity.RegisterOrderDon;
+import com.cyksj.model.entity.SpotifyUnLimitRecord;
 import com.cyksj.model.manage.request.RegisterReq;
 import com.cyksj.model.request.WxOrderRefundReq;
+import com.cyksj.model.views.CouponUserView;
 
 import java.util.Map;
 
@@ -28,4 +30,6 @@ public interface RegisterOrderDonService extends IService<RegisterOrderDon> {
     void wxRefundNotify(Map<String, String> map) throws Exception;
 
     void updateAppleAutoStatus(Long orderId);
+
+    CouponUserView spotifyUnLimit(SpotifyUnLimitRecord spotifyUnLimitRecord);
 }

+ 43 - 1
netflix-service/src/main/java/com/cyksj/service/register/impl/RegisterOrderDonServiceImpl.java

@@ -12,22 +12,29 @@ import com.cyksj.common.util.Jsons;
 import com.cyksj.common.util.Xmls;
 import com.cyksj.config.WeChatConfig;
 import com.cyksj.dto.RedisKey;
-import com.cyksj.mapper.AppleAutoRegisterDataMapper;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.AppleAutoRegisterDataMapper;
 import com.cyksj.mapper.RegisterOrderDonMapper;
+import com.cyksj.mapper.SpotifyUnLimitRecordMapper;
 import com.cyksj.mapper.UserMapper;
+import com.cyksj.mapper.manage.coupon.CouponMapper;
 import com.cyksj.model.dto.H5JsPayParams;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.request.RegisterReq;
 import com.cyksj.model.request.OrderAttach;
 import com.cyksj.model.request.WxOrderRefundReq;
+import com.cyksj.model.views.CouponUserView;
 import com.cyksj.redis.RedisService;
+import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.cyksj.service.register.RegisterOrderDonService;
 import com.cyksj.service.register.SpotifyService;
 import com.cyksj.service.sys.SysConfigService;
 import com.cyksj.service.wechat.WeChatService;
 import com.cyksj.task.JobManager;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.param.Operator;
+import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -68,6 +75,14 @@ public class RegisterOrderDonServiceImpl extends ServiceImpl<RegisterOrderDonMap
 
     private final RegisterOrderDonMapper registerOrderDonMapper;
 
+    private final CouponMapper couponMapper;
+
+    private final CouponCommonService couponCommonService;
+
+    private final SpotifyUnLimitRecordMapper spotifyUnLimitRecordMapper;
+
+    private final BeanSearcher beanSearcher;
+
     private static final Long EXPIRY_TIME = 1000 * 60 * 5L;
 
     /**
@@ -168,6 +183,33 @@ public class RegisterOrderDonServiceImpl extends ServiceImpl<RegisterOrderDonMap
         }
     }
 
+    @Override
+    public CouponUserView spotifyUnLimit(SpotifyUnLimitRecord spotifyUnLimitRecord) {
+        RegisterOrderDon registerOrderDon = this.getOne(Wrappers.lambdaQuery(RegisterOrderDon.class).eq(RegisterOrderDon::getUserId, spotifyUnLimitRecord.getUserId()).eq(RegisterOrderDon::getEmail, spotifyUnLimitRecord.getAccount()).select(RegisterOrderDon::getPassword, RegisterOrderDon::getUsername).last("limit 1"));
+        if (registerOrderDon == null) {
+            throw BusinessRuntimeException.getInstance("仅接受银河录像局注册成功的Spotify邮箱");
+        }
+        if (registerOrderDon.getStatus() != RegisterOrderDon.Status.complete) {
+            throw BusinessRuntimeException.getInstance("您的Spotify账号暂未注册成功");
+        }
+        Boolean isFlag = false;
+        Long spotifyCouponId = null;
+        //是否配置了优惠券
+        SysConfig spotify_coupon_id = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class).eq(SysConfig::getSysKey, "spotify_coupon_id").last("limit 1"));
+        if (spotify_coupon_id != null) {
+            spotifyCouponId = Long.parseLong(spotify_coupon_id.getSysValue());
+            Coupon coupon = couponMapper.selectById(spotifyCouponId);
+            if (coupon != null) {
+                isFlag = couponCommonService.sendCouponToUser(spotifyUnLimitRecord.getUserId(), spotifyCouponId, null, null, null, CouponUser.Channel.manual);
+            }
+        }
+        spotifyUnLimitRecordMapper.insert(spotifyUnLimitRecord);
+        return isFlag ? beanSearcher.searchFirst(CouponUserView.class, MapUtils.builder()
+                .field(CouponUserView::getUserId, spotifyUnLimitRecord.getUserId()).op(Operator.Equal)
+                .field(CouponUserView::getCouponId, spotifyCouponId).op(Operator.Equal)
+                .build()) : null;
+    }
+
     @Override
     public H5JsPayParams pay(Long orderId) throws Exception {
         log.info("注册 账号调起微信支付[start] orderId:{}", orderId);

+ 16 - 0
netflix-web/src/main/java/com/cyksj/web/controller/register/RegisterController.java

@@ -1,5 +1,6 @@
 package com.cyksj.web.controller.register;
 
+import com.cyksj.common.annotation.NoSubmit;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.IoKit;
 import com.cyksj.common.util.Xmls;
@@ -9,8 +10,10 @@ import com.cyksj.mapper.AppleAutoRegisterDataMapper;
 import com.cyksj.model.dto.H5JsPayParams;
 import com.cyksj.model.entity.AppleAutoRegisterData;
 import com.cyksj.model.entity.RegisterOrderDon;
+import com.cyksj.model.entity.SpotifyUnLimitRecord;
 import com.cyksj.model.manage.request.RegisterReq;
 import com.cyksj.model.views.AppleIdCountryOrAreaDataView;
+import com.cyksj.model.views.CouponUserView;
 import com.cyksj.service.register.RegisterOrderDonService;
 import com.cyksj.web.util.StpUserUtil;
 import com.ejlchina.searcher.BeanSearcher;
@@ -20,6 +23,7 @@ import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
@@ -158,4 +162,16 @@ public class RegisterController {
         registerOrderDonService.updateAppleAutoStatus(orderId);
         return GatewayResponse.SUCCESS.newBuilder().toResult("取消订单成功");
     }
+
+    /**
+     * 解除限制申请
+     */
+    @PostMapping("/spotify/unLimit")
+    @NoSubmit
+    public Result<CouponUserView> spotifyUnLimit(@RequestBody @Validated SpotifyUnLimitRecord spotifyUnLimitRecord) {
+        long userId = StpUserUtil.getLoginIdAsLong();
+        spotifyUnLimitRecord.setUserId(userId);
+        CouponUserView couponUserView = registerOrderDonService.spotifyUnLimit(spotifyUnLimitRecord);
+        return GatewayResponse.SUCCESS.newBuilder().toResult(couponUserView);
+    }
 }