Prechádzať zdrojové kódy

Merge branch 'spotify_unlimit'

# Conflicts:
#	netflix-web/src/main/java/com/cyksj/web/controller/register/RegisterController.java
chenbiao 3 rokov pred
rodič
commit
7a3011fffa

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

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

@@ -0,0 +1,45 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ejlchina.searcher.bean.SearchBean;
+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")
+@SearchBean(tables = "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);
 }

+ 45 - 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,35 @@ 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())
+                .eq(RegisterOrderDon::getPlatform, "spotify")
+                .eq(RegisterOrderDon::getStatus, RegisterOrderDon.Status.complete)
+                .last("limit 1"));
+        if (registerOrderDon == null) {
+            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);

+ 2 - 1
netflix-web/src/main/java/com/cyksj/config/WebConfig.java

@@ -28,7 +28,8 @@ public class WebConfig implements WebMvcConfigurer {
 							"/manage/corp/**",
 							"/manage/coupon/corp/send",
 							"/manage/coupon",
-							"/manage/register/wx/refund/notify"));
+							"/manage/register/wx/refund/notify",
+							"/manage/register/unLimit"));
 		}
 	}
 

+ 25 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/register/CmsRegisterController.java

@@ -10,8 +10,10 @@ import com.cyksj.common.util.Xmls;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.AppleAutoRegisterDataMapper;
+import com.cyksj.mapper.SpotifyUnLimitRecordMapper;
 import com.cyksj.model.entity.AppleAutoRegisterData;
 import com.cyksj.model.entity.RegisterOrderDon;
+import com.cyksj.model.entity.SpotifyUnLimitRecord;
 import com.cyksj.model.excel.ExcelAppleIdTemplateData;
 import com.cyksj.model.excel.listener.ExcelAppleDataListener;
 import com.cyksj.model.request.WxOrderRefundReq;
@@ -54,6 +56,8 @@ public class CmsRegisterController {
 
     private final AppleAutoRegisterDataMapper appleAutoRegisterDataMapper;
 
+    private final SpotifyUnLimitRecordMapper spotifyUnLimitRecordMapper;
+
     @GetMapping("/get")
     public Result<SearchResult<RegisterOrderDon>> get(Boolean appleIsAutoType) {
         MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
@@ -162,4 +166,25 @@ public class CmsRegisterController {
         }
     }
 
+    /**
+     * 获取需要解除限制的账号列表
+     */
+    @GetMapping("/unLimit")
+    public Result<SearchResult<SpotifyUnLimitRecord>> getUnLimit(){
+        SearchResult<SpotifyUnLimitRecord> search = beanSearcher.search(SpotifyUnLimitRecord.class, MapUtils.flatBuilder(request.getParameterMap())
+                .field(SpotifyUnLimitRecord::getStatus,"Processing").build());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
+
+    /**
+     * 修改解除限制状态
+     */
+    @PutMapping("/unLimit")
+    public Result<String> upUnLimit(@RequestBody SpotifyUnLimitRecord spotifyUnLimitRecord){
+        spotifyUnLimitRecordMapper.update(null, Wrappers.lambdaUpdate(SpotifyUnLimitRecord.class)
+                .eq(SpotifyUnLimitRecord::getId,spotifyUnLimitRecord.getId())
+                .set(SpotifyUnLimitRecord::getStatus,spotifyUnLimitRecord.getStatus())
+        );
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
 }

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

@@ -2,6 +2,7 @@ package com.cyksj.web.controller.register;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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,12 +10,15 @@ import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.AppleAutoRegisterDataMapper;
 import com.cyksj.mapper.ProxysMapper;
+import com.cyksj.mapper.manage.coupon.CouponSkuMapper;
 import com.cyksj.model.dto.H5JsPayParams;
 import com.cyksj.model.entity.AppleAutoRegisterData;
 import com.cyksj.model.entity.Proxys;
 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;
@@ -24,6 +28,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;
@@ -51,6 +56,8 @@ public class RegisterController {
 
 	private final ProxysMapper proxysMapper;
 
+    private final CouponSkuMapper couponSkuMapper;
+
     @PostMapping
     public Result<RegisterOrderDon> register(@RequestBody RegisterReq req) throws Exception {
         long userId = StpUserUtil.getLoginIdAsLong();
@@ -165,6 +172,22 @@ public class RegisterController {
         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);
+        if (couponUserView != null) {
+            String str = couponSkuMapper.selectGoodsSkuStr(couponUserView.getCouponId());
+            couponUserView.setGoodsSkuStr(str.replaceAll(",", "/").replaceAll(";", ""));
+        }
+        return GatewayResponse.SUCCESS.newBuilder().toResult(couponUserView);
+    }
+
     /**
      * 获取代理ip
      */