Эх сурвалжийг харах

Merge branch 'rent_goods_func' into dev

# Conflicts:
#	netflix-service/src/main/java/com/cyksj/redis/RedisService.java
#	netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java
#	netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java
zoujiajian 2 жил өмнө
parent
commit
2035939e3a
40 өөрчлөгдсөн 673 нэмэгдсэн , 94 устгасан
  1. 6 0
      netflix-common/pom.xml
  2. 2 2
      netflix-common/src/main/java/com/cyksj/common/constant/Constant.java
  3. 11 0
      netflix-common/src/main/java/com/cyksj/common/util/StringUtil.java
  4. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/UserCertRecordMapper.java
  5. 1 1
      netflix-dao/src/main/java/com/cyksj/mapper/manage/statistics/StatisticsExportMapper.java
  6. 20 0
      netflix-dao/src/main/java/com/cyksj/model/dto/UserWxIndentDto.java
  7. 5 0
      netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDon.java
  8. 5 0
      netflix-dao/src/main/java/com/cyksj/model/entity/OrderDon.java
  9. 28 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UserCertRecord.java
  10. 5 0
      netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSkuSpec.java
  11. 6 1
      netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSpuInsert.java
  12. 7 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/GoodsDonViewer.java
  13. 3 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonBackView.java
  14. 20 0
      netflix-dao/src/main/java/com/cyksj/model/request/UserIndentCertReq.java
  15. 24 0
      netflix-dao/src/main/java/com/cyksj/model/response/WxCertAuthTokenResp.java
  16. 6 0
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsFrontListView.java
  17. 6 0
      netflix-dao/src/main/java/com/cyksj/model/views/YhShopGoodsFrontView.java
  18. 8 2
      netflix-dao/src/main/resources/mapper/StatisticsExportMapper.xml
  19. 1 0
      netflix-service/src/main/java/com/cyksj/redis/RedisService.java
  20. 3 5
      netflix-service/src/main/java/com/cyksj/service/giftcard/impl/GiftCardGoodsSkuServiceImpl.java
  21. 14 0
      netflix-service/src/main/java/com/cyksj/service/mange/RefreshCacheService.java
  22. 5 1
      netflix-service/src/main/java/com/cyksj/service/mange/goods/CmsGoodsDonSpecServiceImpl.java
  23. 32 0
      netflix-service/src/main/java/com/cyksj/service/mange/impl/RefreshCacheServiceImpl.java
  24. 15 15
      netflix-service/src/main/java/com/cyksj/service/mange/statistics/impl/StatisticsDataServiceImpl.java
  25. 49 1
      netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java
  26. 5 1
      netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java
  27. 3 5
      netflix-service/src/main/java/com/cyksj/service/sys/impl/SysFuncTimingShelfServiceImpl.java
  28. 24 0
      netflix-service/src/main/java/com/cyksj/service/user/UserIdentCertService.java
  29. 196 0
      netflix-service/src/main/java/com/cyksj/service/user/impl/UserIdentCertServiceImpl.java
  30. 2 0
      netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java
  31. 24 0
      netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java
  32. 2 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsOrderController.java
  33. 7 13
      netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonCategoryController.java
  34. 6 10
      netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonController.java
  35. 8 14
      netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonSkuController.java
  36. 0 6
      netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonSpecController.java
  37. 8 15
      netflix-web/src/main/java/com/cyksj/web/controller/manage/home/HomeManageConfigController.java
  38. 1 1
      netflix-web/src/main/java/com/cyksj/web/controller/payment/OrderCommentFrontController.java
  39. 0 1
      netflix-web/src/main/java/com/cyksj/web/controller/user/DistributePopularizeController.java
  40. 92 0
      netflix-web/src/main/java/com/cyksj/web/controller/user/UserCertController.java

+ 6 - 0
netflix-common/pom.xml

@@ -98,6 +98,12 @@
             <artifactId>tencentcloud-sdk-java-sms</artifactId>
             <version>3.1.694</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.tencentcloudapi</groupId>
+            <artifactId>tencentcloud-sdk-java-faceid</artifactId>
+            <version>3.1.694</version>
+        </dependency>
     </dependencies>
 
 

+ 2 - 2
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -23,9 +23,9 @@ public interface Constant {
 
 	/**
 	 * 实物类型
-	 * 2实物、3潮玩好物
+	 * 2实物、3潮玩好物、4租赁商品
 	 */
-	List<Integer> realGoodsType = List.of(2, 3);
+	List<Integer> realGoodsType = List.of(2, 3, 4);
 
 	/**
 	 * 平台类型

+ 11 - 0
netflix-common/src/main/java/com/cyksj/common/util/StringUtil.java

@@ -521,4 +521,15 @@ public final class StringUtil {
 
 		return "unknown";
 	}
+
+	/**
+	 * 身份证号返回
+	 */
+	public static String deIndent(String ident) {
+		String front = ident.substring(0, 4);
+		String back = ident.substring(ident.length() - 4);
+		StringBuilder sb = new StringBuilder();
+		sb.append(front).append("****").append(back);
+		return sb.toString();
+	}
 }

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserCertRecord;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserCertRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/2/21 10:11
+ */
+public interface UserCertRecordMapper extends BaseMapper<UserCertRecord> {
+}

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/mapper/manage/statistics/StatisticsExportMapper.java

@@ -61,7 +61,7 @@ public interface StatisticsExportMapper{
 
 	BigDecimal getMonthAmountOfOrderByType(@Param("type") Integer type, @Param("startDate") String startDate, @Param("endDate") String endDate);
 
-	BigDecimal getMonthGoodsTypeAmountOfOrderByType(@Param("type") Integer type, @Param("goodsType") Integer goodsType, @Param("category") Long category, @Param("startDate") String startDate, @Param("endDate") String endDate);
+	BigDecimal getMonthGoodsTypeAmountOfOrderByType(@Param("type") Integer type, @Param("goodsType") Integer goodsType, @Param("category") Long category, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("isBind") Boolean isBind);
 
 	Integer getMonthUserSourceNumOrderByType(@Param("type") Integer type, @Param("startDate") String startDate, @Param("endDate") String endDate);
 

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/UserWxIndentDto.java

@@ -0,0 +1,20 @@
+package com.cyksj.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserWxIndentDto
+ * 创建者: JavaZou
+ * 创建时间:2024/2/21 16:00
+ */
+@Getter
+@Setter
+public class UserWxIndentDto {
+	private Long userId;
+
+	private String redirectUrl;
+
+	private String bizToken;
+}

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDon.java

@@ -63,6 +63,11 @@ public class GoodsDon extends BaseEntity {
      */
     private String detail;
 
+    /**
+     * 租赁说明
+     */
+    private String depositDetail;
+
     /**
      * 描述
      */

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDon.java

@@ -61,6 +61,11 @@ public class OrderDon extends BaseEntity implements Serializable {
     /** 金额 */
     private BigDecimal money;
 
+    /**
+     * 押金
+     */
+    private BigDecimal deposit;
+
     /**
      * 加购商品金额
      */

+ 28 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserCertRecord.java

@@ -0,0 +1,28 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserCert
+ * 创建者: JavaZou
+ * 创建时间:2024/2/21 10:00
+ */
+@Getter
+@Setter
+public class UserCertRecord extends BaseEntity{
+	private Long userId;
+
+	private String name;
+
+	private String sex;
+
+	private String ident;
+
+	private String front;
+
+	private String reverse;
+
+	private String addr;
+}

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSkuSpec.java

@@ -30,6 +30,11 @@ public class ReqGoodsSkuSpec {
 
         private BigDecimal price;
 
+        /**
+         * 租赁押金
+         */
+        private BigDecimal deposit;
+
         /**
          * 预览图
          */

+ 6 - 1
netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSpuInsert.java

@@ -46,6 +46,11 @@ public class ReqGoodsSpuInsert {
      */
     private String detail;
 
+    /**
+     * 租赁说明
+     */
+    private String depositDetail;
+
     /**
      * 描述
      */
@@ -62,7 +67,7 @@ public class ReqGoodsSpuInsert {
     private Boolean deleted;
 
     /**
-     * 类型 1账号 2.实物
+     * 类型 1账号 2.实物 3.潮玩 4.租赁
      */
     private Integer type;
 

+ 7 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/GoodsDonViewer.java

@@ -100,6 +100,13 @@ public class GoodsDonViewer {
     @DbField("g.detail")
     private String detail;
 
+
+    /**
+     * 租赁说明
+     */
+    @DbField("g.deposit_detail")
+    private String depositDetail;
+
     /**
      * 类型
      */

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonBackView.java

@@ -116,6 +116,9 @@ public class OrderDonBackView {
 	@DbField("o.money")
 	private BigDecimal money;
 
+	@DbField("o.deposit")
+	private BigDecimal deposit;
+
 	@DbField("o.balance")
 	private BigDecimal balance;
 

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/request/UserIndentCertReq.java

@@ -0,0 +1,20 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserIndentCertReq
+ * 创建者: JavaZou
+ * 创建时间:2024/2/21 11:17
+ */
+@Getter
+@Setter
+public class UserIndentCertReq {
+	private Long userId;
+
+	private String bindState;
+
+	private String redirectUrl;
+}

+ 24 - 0
netflix-dao/src/main/java/com/cyksj/model/response/WxCertAuthTokenResp.java

@@ -0,0 +1,24 @@
+package com.cyksj.model.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserCertAuthTokenResp
+ * 创建者: JavaZou
+ * 创建时间:2024/2/21 10:16
+ */
+@Getter
+@Setter
+public class WxCertAuthTokenResp {
+	/**
+	 * 用于发起核身流程的URL,仅微信H5场景使用
+	 */
+	private String Url;
+
+	/**
+	 * 一次核身流程的标识
+	 */
+	private String BizToken;
+}

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsFrontListView.java

@@ -140,6 +140,12 @@ public class GoodsFrontListView {
 	@DbField("g.detail")
 	private String detail;
 
+	/**
+	 * 租赁说明
+	 */
+	@DbField("g.deposit_detail")
+	private String depositDetail;
+
 	@DbField("g.video")
 	private String video;
 

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/views/YhShopGoodsFrontView.java

@@ -119,6 +119,12 @@ public class YhShopGoodsFrontView {
 	@DbField("g.detail")
 	private String detail;
 
+	/**
+	 * 租赁说明
+	 */
+	@DbField("g.deposit_detail")
+	private String depositDetail;
+
 	/**
 	 * 购买通知信息
 	 */

+ 8 - 2
netflix-dao/src/main/resources/mapper/StatisticsExportMapper.xml

@@ -375,10 +375,16 @@
                 us.id is null
             </when>
             <when test="type == 4">
-                us.id is not null and us.is_bind = 0
+                us.id is not null
+                <if test="isBind != null">
+                    and us.is_bind = 0
+                </if>
             </when>
             <otherwise>
-                us.id is not null and us.is_bind = 1
+                us.id is not null
+                <if test="isBind != null">
+                    and us.is_bind = 1
+                </if>
             </otherwise>
         </choose>
         <if test="startDate != null">

+ 1 - 0
netflix-service/src/main/java/com/cyksj/redis/RedisService.java

@@ -667,6 +667,7 @@ public class RedisService {
 
         WEEKEND_DUTY_UNDERSTAFFED_NOTIFY("weekend_duty_understaffed_notify","周末值班人员不足短信通知key",60*60),
         DOUBLE_VERIFY_CODE_VIEW_MINUTES_KEY("double_verify_code_view_minutes_key","双重验证码查看同时间段人数限制",60),
+        WX_INDENT_BIND_KEY("wx_indent_bind:key:", "微信身份授权绑定key", 60 * 60 * 24),
 
         INFORMATION_KEY("information_key:", "文章", 30 * 60L),
         ;

+ 3 - 5
netflix-service/src/main/java/com/cyksj/service/giftcard/impl/GiftCardGoodsSkuServiceImpl.java

@@ -11,14 +11,13 @@ import com.cyksj.model.entity.GiftCardGoodsSku;
 import com.cyksj.model.entity.GoodsDon;
 import com.cyksj.model.entity.GoodsDonSku;
 import com.cyksj.model.request.GiftCardGoodsSkuReq;
-import com.cyksj.redis.RedisService;
 import com.cyksj.service.giftcard.GiftCardGoodsSkuService;
+import com.cyksj.service.mange.RefreshCacheService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.util.List;
-import java.util.Set;
 
 /*
  *项目名: netflix
@@ -33,7 +32,7 @@ public class GiftCardGoodsSkuServiceImpl extends ServiceImpl<GiftCardGoodsSkuMap
 
 	private final GoodsDonMapper goodsDonMapper;
 
-	private final RedisService redisService;
+	private final RefreshCacheService refreshCacheService;
 
 	@Override
 	public void setOrUpdateGiftCardSku(GiftCardGoodsSku data) {
@@ -118,8 +117,7 @@ public class GiftCardGoodsSkuServiceImpl extends ServiceImpl<GiftCardGoodsSkuMap
 			if (minPrice == null || min.getPrice().compareTo(minPrice) != 0) {
 				goodsDon.setMinPrice(min.getPrice());
 				goodsDonMapper.updateById(goodsDon);
-				Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-				redisService.del(keys.toArray(String[]::new));
+				refreshCacheService.refreshYhHomePageCache();
 			}
 		}
 	}

+ 14 - 0
netflix-service/src/main/java/com/cyksj/service/mange/RefreshCacheService.java

@@ -0,0 +1,14 @@
+package com.cyksj.service.mange;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: RefreshCacheService
+ * 创建者: JavaZou
+ * 创建时间:2024/2/22 16:28
+ */
+public interface RefreshCacheService {
+
+	void refreshYhHomePageCache();
+
+	void refreshYhHomeCategoryPageCache();
+}

+ 5 - 1
netflix-service/src/main/java/com/cyksj/service/mange/goods/CmsGoodsDonSpecServiceImpl.java

@@ -72,7 +72,7 @@ public class CmsGoodsDonSpecServiceImpl extends ServiceImpl<GoodsDonSpecMapper,
 		}
 
 		// 属性最大id
-		Integer maxId = 0;
+		Integer maxId = loveSpec == null ? 0 : Optional.ofNullable(loveSpec.getMaxId()).orElse(0);
 		// 统计总属性数
 		Integer total = 0;
 		// 判断id是否有重复
@@ -106,6 +106,10 @@ public class CmsGoodsDonSpecServiceImpl extends ServiceImpl<GoodsDonSpecMapper,
 				if (goods.getType() == 2 && insert.getId()  == null && (e.getPrice() == null || e.getPrice().compareTo(BigDecimal.ZERO) < 0)) {
 					throw BusinessRuntimeException.getInstance("实物规格:{0}对应价格请输入", e.getValue());
 				}
+				//租赁规格
+				if (goods.getType() == 4 && insert.getId() == null && (e.getDeposit() == null || e.getDeposit().compareTo(BigDecimal.ZERO) < 0)) {
+					throw BusinessRuntimeException.getInstance("规格:{0}对应押金请输入", e.getValue());
+				}
 
 				if (null == map) {
 					map = new HashMap<>(16);

+ 32 - 0
netflix-service/src/main/java/com/cyksj/service/mange/impl/RefreshCacheServiceImpl.java

@@ -0,0 +1,32 @@
+package com.cyksj.service.mange.impl;
+
+import com.cyksj.redis.RedisService;
+import com.cyksj.service.mange.RefreshCacheService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Set;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: RefreshCacheServiceImpl
+ * 创建者: JavaZou
+ * 创建时间:2024/2/22 16:28
+ */
+@Service
+@RequiredArgsConstructor
+public class RefreshCacheServiceImpl implements RefreshCacheService {
+	private final RedisService redisService;
+
+	@Override
+	public void refreshYhHomePageCache() {
+		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
+		redisService.del(keys.toArray(String[]::new));
+	}
+
+	@Override
+	public void refreshYhHomeCategoryPageCache() {
+		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "category" + "*");
+		redisService.del(keys.toArray(String[]::new));
+	}
+}

+ 15 - 15
netflix-service/src/main/java/com/cyksj/service/mange/statistics/impl/StatisticsDataServiceImpl.java

@@ -439,11 +439,11 @@ public class StatisticsDataServiceImpl implements StatisticsDataService {
 	private void getUnbindChannelOrderData(GroupsDataStatisticsView groupsDataStatisticsView, String startDate, String endDate) {
 		//解绑渠道
 		//流媒体
-		BigDecimal unBIndGroupsStreamingMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(4, null, 2l, startDate, endDate)).orElse(BigDecimal.ZERO);
+		BigDecimal unBIndGroupsStreamingMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(4, null, 2l, startDate, endDate, true)).orElse(BigDecimal.ZERO);
 		// AI销售金额
-		BigDecimal unBIndGroupsAiOrderMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(4, null, 1l, startDate, endDate)).orElse(BigDecimal.ZERO);
+		BigDecimal unBIndGroupsAiOrderMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(4, null, 1l, startDate, endDate, true)).orElse(BigDecimal.ZERO);
 		//设备销售金额
-		BigDecimal unBIndGroupsEpOrderMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(4, 2, null, startDate, endDate)).orElse(BigDecimal.ZERO);
+		BigDecimal unBIndGroupsEpOrderMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(4, 2, null, startDate, endDate, true)).orElse(BigDecimal.ZERO);
 		groupsDataStatisticsView.setUnBIndGroupsStreamingMoney(unBIndGroupsStreamingMoney);
 		groupsDataStatisticsView.setUnBIndGroupsAiOrderMoney(unBIndGroupsAiOrderMoney);
 		groupsDataStatisticsView.setUnBIndGroupsEpOrderMoney(unBIndGroupsEpOrderMoney);
@@ -480,11 +480,11 @@ public class StatisticsDataServiceImpl implements StatisticsDataService {
 	}
 
 	public void getCategoryOrderData(GroupsDataStatisticsView groupsDataStatisticsView, String startDate, String endDate) {
-		BigDecimal natureStreamingMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, null, 2l, startDate, endDate)).orElse(BigDecimal.ZERO);
+		BigDecimal natureStreamingMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, null, 2l, startDate, endDate, true)).orElse(BigDecimal.ZERO);
 		// AI销售金额
-		BigDecimal natureAiOrderMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, null, 1l, startDate, endDate)).orElse(BigDecimal.ZERO);
+		BigDecimal natureAiOrderMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, null, 1l, startDate, endDate, true)).orElse(BigDecimal.ZERO);
 		//设备销售金额
-		BigDecimal natureEpOrderMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, 2, null, startDate, endDate)).orElse(BigDecimal.ZERO);
+		BigDecimal natureEpOrderMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, 2, null, startDate, endDate, true)).orElse(BigDecimal.ZERO);
 		groupsDataStatisticsView.setNatureStreamingMoney(natureStreamingMoney);
 		groupsDataStatisticsView.setNatureAiOrderMoney(natureAiOrderMoney);
 		groupsDataStatisticsView.setNatureEpOrderMoney(natureEpOrderMoney);
@@ -493,11 +493,11 @@ public class StatisticsDataServiceImpl implements StatisticsDataService {
 	public void getGroupsOrderCategoryData(GroupsDataStatisticsView groupsDataStatisticsView, String startDate, String endDate) {
 		//渠道商+个人分销
 		//流媒体
-		BigDecimal groupsStreamingMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, null, 2l, startDate, endDate)).orElse(BigDecimal.ZERO);
+		BigDecimal groupsStreamingMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, null, 2l, startDate, endDate, true)).orElse(BigDecimal.ZERO);
 		// AI销售金额
-		BigDecimal groupsAiOrderMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, null, 1l, startDate, endDate)).orElse(BigDecimal.ZERO);
+		BigDecimal groupsAiOrderMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, null, 1l, startDate, endDate, true)).orElse(BigDecimal.ZERO);
 		//设备销售金额
-		BigDecimal groupsEpOrderMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, 2, null, startDate, endDate)).orElse(BigDecimal.ZERO);
+		BigDecimal groupsEpOrderMoney = Optional.ofNullable(statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, 2, null, startDate, endDate, true)).orElse(BigDecimal.ZERO);
 		groupsDataStatisticsView.setGroupsStreamingMoney(groupsStreamingMoney);
 		groupsDataStatisticsView.setGroupsAiOrderMoney(groupsAiOrderMoney);
 		groupsDataStatisticsView.setGroupsEpOrderMoney(groupsEpOrderMoney);
@@ -678,23 +678,23 @@ public class StatisticsDataServiceImpl implements StatisticsDataService {
 		excelMonthlyDistributeOrderData.setMonthDsFAmountOfOrder(monthDsFAmountOfOrder);
 		//自然渠道
 		//流媒体
-		BigDecimal monthStreamingAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, null, 2l, startDate, endDate);
+		BigDecimal monthStreamingAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, null, 2l, startDate, endDate,null);
 		excelMonthlyDistributeOrderData.setMonthStreamingAmountOfOrder(monthStreamingAmountOfOrder);
 		// AI销售金额
-		BigDecimal monthAiAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, null, 1l, startDate, endDate);
+		BigDecimal monthAiAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, null, 1l, startDate, endDate,null);
 		excelMonthlyDistributeOrderData.setMonthAiAmountOfOrder(monthAiAmountOfOrder);
 		//设备销售金额
-		BigDecimal monthOfEqAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, 2, null, startDate, endDate);
+		BigDecimal monthOfEqAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, 2, null, startDate, endDate,null);
 		excelMonthlyDistributeOrderData.setMonthOfEqAmountOfOrder(monthOfEqAmountOfOrder);
 		//渠道商+个人分销
 		//流媒体
-		BigDecimal monthOfSpecStreamingAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, null, 2l, startDate, endDate);
+		BigDecimal monthOfSpecStreamingAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, null, 2l, startDate, endDate,null);
 		excelMonthlyDistributeOrderData.setMonthOfSpecStreamingAmountOfOrder(monthOfSpecStreamingAmountOfOrder);
 		// AI销售金额
-		BigDecimal monthOfSpecAiAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, null, 1l, startDate, endDate);
+		BigDecimal monthOfSpecAiAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, null, 1l, startDate, endDate,null);
 		excelMonthlyDistributeOrderData.setMonthOfSpecAiAmountOfOrder(monthOfSpecAiAmountOfOrder);
 		//设备销售金额
-		BigDecimal monthOfSpecEqAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, 2, null, startDate, endDate);
+		BigDecimal monthOfSpecEqAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, 2, null, startDate, endDate,null);
 		excelMonthlyDistributeOrderData.setMonthOfSpecEqAmountOfOrder(monthOfSpecEqAmountOfOrder);
 
 		//分销提现数据

+ 49 - 1
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -54,6 +54,7 @@ import com.cyksj.model.dto.*;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.dto.ChannelBaiDuDiscountDto;
 import com.cyksj.model.manage.dto.GiftCardDto;
+import com.cyksj.model.manage.request.ReqGoodsSkuSpec;
 import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.model.manage.views.OrderDonView;
 import com.cyksj.model.request.*;
@@ -131,6 +132,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final GoodsDonMapper goodsDonMapper;
 
+	private final GoodsDonSpecMapper goodsDonSpecMapper;
+
 	private final GroupsRelationMapper groupsRelationMapper;
 
 	private final BeanSearcher beanSearcher;
@@ -261,6 +264,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final EquipmentActivityReduceMapper equipmentActivityReduceMapper;
 
+	private final UserCertRecordMapper userCertRecordMapper;
+
 	private final InformationClickUserRecordMapper informationClickUserRecordMapper;
 
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
@@ -401,6 +406,23 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			payRequest.setDonMoney(sku.getPrice());
 		}
 
+		//租赁商品
+		if (goodsDon.getType() == 4) {
+			//是否已实名认证过
+			List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, user);
+			Integer count = userCertRecordMapper.selectCount(Wrappers.lambdaQuery(UserCertRecord.class).in(UserCertRecord::getUserId, userIdList));
+			if (count == 0) throw BusinessRuntimeException.getInstance("请您先完成实名认证..");
+
+			//租赁商品押金
+			BigDecimal rentGoodsDonDeposit = getRentGoodsDonDeposit(goodsId, sku.getSpecIds());
+			if (rentGoodsDonDeposit == null) throw BusinessRuntimeException.getInstance("应付押金异常..");
+			BigDecimal sPay = rentGoodsDonDeposit.add(sku.getPrice());
+			if (payRequest.getDonMoney().compareTo(sPay) < 0) {
+				payRequest.setDonMoney(sPay);
+			}
+			orderDon.setDeposit(rentGoodsDonDeposit);
+		}
+
 		orderDon.setMoney(payRequest.getDonMoney());
 		orderDon.setRealMoney(payRequest.getDonMoney());
 		orderDon.setOriMoney(sku.getPrice());
@@ -460,7 +482,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				throw BusinessRuntimeException.getInstance("车位与车队规格不一致");
 			}
 		}
-		if (sku != null) {
+		//租赁商品不参与优惠
+		if (sku != null && goodsDon.getType() != 4) {
 			//扣除使用优惠券、余额的订单金额
 			deductOrderMoney(orderDon, couponUser, payRequest.getBalance(), user, sku.getPrice(), goodsDon.getType(), payRequest.getGcCash(), payRequest.getGcpIds(), payRequest.getIsAcReduce());
 		}
@@ -1229,6 +1252,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		if (orderDon.getMoney().compareTo(BigDecimal.ZERO) > 0) {
 			throw BusinessRuntimeException.getInstance("订单异常");
 		}
+		if (orderDon.getStatus() != OrderDon.Status.noPayment) {
+			throw BusinessRuntimeException.getInstance("订单状态已修改");
+		}
 		GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
 		GoodsDonSku sku = null;
 		if (orderDon.getSkuId() != null) {
@@ -2786,4 +2812,26 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			orderDon.setBalance(subBalance);
 		}
 	}
+
+	/**
+	 * 获取租赁商品的应付押金
+	 */
+	private BigDecimal getRentGoodsDonDeposit(Long goodsId, String specIdsStr) throws Exception {
+		GoodsDonSpec rentGoodsDonSpec = goodsDonSpecMapper.selectOne(Wrappers.lambdaQuery(GoodsDonSpec.class)
+				.eq(GoodsDonSpec::getGoodsId, goodsId)
+				.last("limit 1"));
+		List<Integer> specIds = Jsons.parseList(specIdsStr, Integer.class);
+		String specsJson = rentGoodsDonSpec.getSpecsJson();
+		List<ReqGoodsSkuSpec> reqGoodsSkuSpec = Jsons.parseList(specsJson, ReqGoodsSkuSpec.class);
+		for (ReqGoodsSkuSpec spec : reqGoodsSkuSpec) {
+			if (spec.getKey().contains("版本")) {
+				for (ReqGoodsSkuSpec.Node value : spec.getValues()) {
+					if (specIds.contains(value.getId())) {
+						return value.getDeposit();
+					}
+				}
+			}
+		}
+		return null;
+	}
 }

+ 5 - 1
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -602,7 +602,11 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 			String urlPref = "https://www.netflix.com/account/update-primary-location";
 			code = StrUtil.subBetween(body, "[" + urlPref, "]");
 			if (StrUtil.isEmpty(code)) {
-				throw BusinessRuntimeException.getInstance("获取认证链接失败,请重新获取");
+				urlPref = "https://www.netflix.com/account/travel/verify";
+				code = StrUtil.subBetween(body, "[" + urlPref, "]");
+				if (StrUtil.isEmpty(code)) {
+					throw BusinessRuntimeException.getInstance("获取认证链接失败,请重新获取");
+				}
 			}
 			return urlPref + code;
 		}

+ 3 - 5
netflix-service/src/main/java/com/cyksj/service/sys/impl/SysFuncTimingShelfServiceImpl.java

@@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.mapper.manage.home.HomeManagementConfigMapper;
 import com.cyksj.mapper.sys.SysFuncTimingShelfMapper;
 import com.cyksj.model.entity.SysFuncTimingShelf;
-import com.cyksj.redis.RedisService;
+import com.cyksj.service.mange.RefreshCacheService;
 import com.cyksj.service.sys.SysFuncTimingShelfService;
 import com.cyksj.task.JobManager;
 import lombok.RequiredArgsConstructor;
@@ -18,7 +18,6 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.PostConstruct;
 import java.util.List;
 import java.util.Optional;
-import java.util.Set;
 
 /**
  * 项目名: yhlxj2
@@ -34,7 +33,7 @@ public class SysFuncTimingShelfServiceImpl extends ServiceImpl<SysFuncTimingShel
 
 	private final HomeManagementConfigMapper homeManagementConfigMapper;
 
-	private final RedisService redisService;
+	private final RefreshCacheService refreshCacheService;
 
 
 	@PostConstruct
@@ -83,8 +82,7 @@ public class SysFuncTimingShelfServiceImpl extends ServiceImpl<SysFuncTimingShel
 				homeManagementConfigMapper.updateById(homeManagementConfig);
 				log.info("将首页配置:{}的状态置为:{}状态", funcId, timingShelf.getPreStatus());
 
-				Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-				redisService.del(keys.toArray(String[]::new));
+				refreshCacheService.refreshYhHomePageCache();
 			});
 		});
 	}

+ 24 - 0
netflix-service/src/main/java/com/cyksj/service/user/UserIdentCertService.java

@@ -0,0 +1,24 @@
+package com.cyksj.service.user;
+
+import com.cyksj.model.dto.UserWxIndentDto;
+import com.cyksj.model.entity.UserCertRecord;
+import com.cyksj.model.request.UserIndentCertReq;
+import com.cyksj.model.response.WxCertAuthTokenResp;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserIdentCertService
+ * 创建者: JavaZou
+ * 创建时间:2024/2/21 10:21
+ */
+public interface UserIdentCertService {
+	WxCertAuthTokenResp wxH5IndentCert(UserIndentCertReq indentCertReq) throws Exception;
+
+	void wxH5IndentCertResult(UserWxIndentDto userWxIndentDto) throws Exception;
+
+	String bindWxUser(long userId);
+
+	Boolean checkCertRecord(long userId);
+
+	UserCertRecord getUserCertRecord(long userId);
+}

+ 196 - 0
netflix-service/src/main/java/com/cyksj/service/user/impl/UserIdentCertServiceImpl.java

@@ -0,0 +1,196 @@
+package com.cyksj.service.user.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.EnvCommonService;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.snowflake.Sequence;
+import com.cyksj.common.util.Jsons;
+import com.cyksj.common.util.StringUtil;
+import com.cyksj.mapper.UserCertRecordMapper;
+import com.cyksj.mapper.UserMapper;
+import com.cyksj.model.dto.UserWxIndentDto;
+import com.cyksj.model.entity.User;
+import com.cyksj.model.entity.UserCertRecord;
+import com.cyksj.model.request.UserIndentCertReq;
+import com.cyksj.model.response.WxCertAuthTokenResp;
+import com.cyksj.redis.RedisService;
+import com.cyksj.service.market.task.BindTaskService;
+import com.cyksj.service.user.UserBindRelationService;
+import com.cyksj.service.user.UserIdentCertService;
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.profile.ClientProfile;
+import com.tencentcloudapi.common.profile.HttpProfile;
+import com.tencentcloudapi.faceid.v20180301.FaceidClient;
+import com.tencentcloudapi.faceid.v20180301.models.*;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserIdentCertServiceImpl
+ * 创建者: JavaZou
+ * 创建时间:2024/2/21 10:21
+ */
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class UserIdentCertServiceImpl implements UserIdentCertService {
+	private final UserBindRelationService userBindRelationService;
+
+	private final UserCertRecordMapper userCertRecordMapper;
+
+	private final BindTaskService bindTaskService;
+
+	private final UserMapper userMapper;
+
+	private final RedisService redisService;
+
+	private final EnvCommonService envCommonService;
+
+	private final static Sequence SEQUENCE = new Sequence(0);
+
+	private static final String TENCENT_SECRET_ID = "AKIDBB3jEqR0Y95zpfTix1vd6fMqAIahc4Ka";
+
+	private static final String TENCENT_SECRET_KEY = "c6YtNm63rcQ1QdiGmEbmEPSTPF3e4KQK";
+
+	private static final String ruleId = "1";
+
+	private static final String REDIRECT_URL = "applets/user/cert/auth/result/";
+
+	@Override
+	public Boolean checkCertRecord(long userId) {
+		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+		Integer count = userCertRecordMapper.selectCount(Wrappers.lambdaQuery(UserCertRecord.class)
+				.in(UserCertRecord::getUserId, userIdList));
+		return count > 0 ? true : false;
+	}
+
+	@Override
+	public UserCertRecord getUserCertRecord(long userId) {
+		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+		UserCertRecord record = userCertRecordMapper.selectOne(Wrappers.lambdaQuery(UserCertRecord.class)
+				.in(UserCertRecord::getUserId, userIdList)
+				.select(UserCertRecord::getName, UserCertRecord::getIdent, UserCertRecord::getCreatedTime)
+				.last("limit 1"));
+		if (record == null) {
+			return null;
+		}
+		record.setIdent(StringUtil.deIndent(record.getIdent()));
+		return record;
+	}
+
+	@Override
+	public String bindWxUser(long userId) {
+		User user = userMapper.selectById(userId);
+		if (StrUtil.isNotBlank(user.getOpenId())) {
+			return null;
+		}
+		String state = StringUtil.randomString(6);
+		redisService.set(RedisService.key.WX_INDENT_BIND_KEY.getEnvName() + state, userId, RedisService.key.WX_INDENT_BIND_KEY.getTimeout());
+		return state;
+	}
+
+	@Override
+	public WxCertAuthTokenResp wxH5IndentCert(UserIndentCertReq indentCertReq) throws Exception {
+		Long userId = indentCertReq.getUserId();
+		String redirectUrl = indentCertReq.getRedirectUrl();
+		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+//		String bindState = indentCertReq.getBindState();
+//		if (userIdList.size() == 1 && StrUtil.isNotEmpty(bindState)) {
+//			User user = userMapper.selectById(userId);
+//			if (StrUtil.isEmpty(user.getOpenId())) {
+//				String key = RedisService.key.WX_INDENT_BIND_KEY.getEnvName() + bindState;
+//				Object bindInfo = redisService.get(key);
+//				if (bindInfo == null) {
+//					throw BusinessRuntimeException.getInstance("认证信息已失效,请重新操作..");
+//				}
+//				Long bindUserId = Long.parseLong(bindInfo.toString());
+//				User bindUser = userMapper.selectById(bindUserId);
+//				//绑定微信端用户
+//				UserBindInfoReq request = new UserBindInfoReq();
+//				request.setType(StrUtil.isNotBlank(bindUser.getLoginPhone()) ? 1 : 2);
+//				request.setUserId(userId);
+//				request.setAccount(request.getType() == 1 ? bindUser.getLoginPhone() : bindUser.getEmail());
+//				bindTaskService.bindOtherAccount(request);
+//				userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+//				redisService.del(key);
+//			}
+//		}
+
+		Integer count = userCertRecordMapper.selectCount(Wrappers.lambdaQuery(UserCertRecord.class)
+				.in(UserCertRecord::getUserId, userIdList));
+		if (count > 0) throw BusinessRuntimeException.getInstance("您已完成认证了..");
+
+		Credential cred = new Credential(TENCENT_SECRET_ID, TENCENT_SECRET_KEY);
+		// 实例化一个http选项,可选的,没有特殊需求可以跳过
+		HttpProfile httpProfile = new HttpProfile();
+		httpProfile.setEndpoint("faceid.tencentcloudapi.com");
+		// 实例化一个client选项,可选的,没有特殊需求可以跳过
+		ClientProfile clientProfile = new ClientProfile();
+		clientProfile.setHttpProfile(httpProfile);
+		// 实例化要请求产品的client对象,clientProfile是可选的
+		FaceidClient client = new FaceidClient(cred, "", clientProfile);
+		// 实例化一个请求对象,每个接口都会对应一个request对象
+		DetectAuthRequest req = new DetectAuthRequest();
+		req.setRuleId(ruleId);
+		Long mappingId = SEQUENCE.nextId();
+		req.setRedirectUrl(envCommonService.getHost() + REDIRECT_URL + mappingId);
+		// 返回的resp是一个DetectAuthResponse的实例,与请求对象对应
+		DetectAuthResponse resp = client.DetectAuth(req);
+
+		log.info("微信h5核身认证,返回:{}", Jsons.toJson(resp));
+
+		WxCertAuthTokenResp tokenResp = new WxCertAuthTokenResp();
+		BeanUtil.copyProperties(resp, tokenResp);
+
+		UserWxIndentDto userWxIndentDto = new UserWxIndentDto();
+		userWxIndentDto.setUserId(userId);
+		userWxIndentDto.setRedirectUrl(redirectUrl);
+		userWxIndentDto.setBizToken(tokenResp.getBizToken());
+		redisService.set(mappingId.toString(), Jsons.toJson(userWxIndentDto), 60 * 60 * 24L);
+		return tokenResp;
+	}
+
+	@Override
+	public void wxH5IndentCertResult(UserWxIndentDto userWxIndentDto) throws Exception {
+		Long userId = userWxIndentDto.getUserId();
+		Credential cred = new Credential(TENCENT_SECRET_ID, TENCENT_SECRET_KEY);
+		// 实例化一个http选项,可选的,没有特殊需求可以跳过
+		HttpProfile httpProfile = new HttpProfile();
+		httpProfile.setEndpoint("faceid.tencentcloudapi.com");
+		// 实例化一个client选项,可选的,没有特殊需求可以跳过
+		ClientProfile clientProfile = new ClientProfile();
+		clientProfile.setHttpProfile(httpProfile);
+		// 实例化要请求产品的client对象,clientProfile是可选的
+		FaceidClient client = new FaceidClient(cred, "", clientProfile);
+		// 实例化一个请求对象,每个接口都会对应一个request对象
+		GetDetectInfoEnhancedRequest req = new GetDetectInfoEnhancedRequest();
+		req.setBizToken(userWxIndentDto.getBizToken());
+		req.setRuleId(ruleId);
+		// 返回的resp是一个GetDetectInfoEnhancedResponse的实例,与请求对象对应
+		GetDetectInfoEnhancedResponse resp = client.GetDetectInfoEnhanced(req);
+		DetectInfoText text = resp.getText();
+		if (text.getErrCode() == 0) {
+			UserCertRecord certRecord = new UserCertRecord();
+			String ocrIdCard = text.getOcrIdCard();
+			Integer count = userCertRecordMapper.selectCount(Wrappers.lambdaQuery(UserCertRecord.class)
+					.eq(UserCertRecord::getIdent, ocrIdCard));
+			if (count > 0) {
+				throw BusinessRuntimeException.getInstance("该身份证号已被其他账号绑定");
+			}
+			if (count == 0) {
+				certRecord.setIdent(text.getOcrIdCard());
+				certRecord.setName(text.getOcrName());
+				certRecord.setSex(text.getOcrGender());
+				certRecord.setUserId(userId);
+				certRecord.setAddr(text.getOcrAddress());
+				userCertRecordMapper.insert(certRecord);
+			}
+		}
+	}
+}

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -117,6 +117,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
 	private final UserDistributeSharedMapper userDistributeSharedMapper;
 
+	private final UserCertRecordMapper userCertRecordMapper;
+
 	private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
 	@Override

+ 24 - 0
netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java

@@ -1086,4 +1086,28 @@ public class GoodsDonController {
 		}
 		return GatewayResponse.SUCCESS.newBuilder().toResult(list);
 	}
+
+	/**
+	 * 获取租赁商品列表
+	 */
+	@GetMapping("/get/deposit")
+	public Result<? extends Object> getDepositGoods() {
+		String depositGoodsKey = RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "deposit";
+		Object o = redisService.get(depositGoodsKey);
+		if (o == null) {
+			List<GoodsDon> depositList = beanSearcher.searchAll(GoodsDon.class, MapUtils.builder()
+					.field(GoodsDon::getType, 4)
+					.field(GoodsDon::getStatus, true)
+					.field(GoodsDon::getDeleted, true)
+					.onlySelect(GoodsDon::getId, GoodsDon::getTitle, GoodsDon::getLogo)
+					.build());
+			if (CollUtil.isEmpty(depositList)) {
+				return GatewayResponse.SUCCESS.newBuilder().toResult();
+			}
+			redisService.setNx(depositGoodsKey, depositList, RedisService.key.YH_HOME_PAGHE_CACHE.getTimeout() + 60 * RandomUtil.randomInt(10));
+			o = redisService.get(depositGoodsKey);
+		}
+		List<GoodsDon> depositList = Jsons.parseList(o, GoodsDon.class);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(depositList);
+	}
 }

+ 2 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsOrderController.java

@@ -281,6 +281,8 @@ public class CmsOrderController {
 				data.setRealGoodName("路由器");
 			} else if (data.getGoodsDonType() == Constant.realGoodsType.get(1)) {
 				data.setRealGoodName("银河潮玩");
+			} else if (data.getGoodsDonType() == Constant.realGoodsType.get(2)) {
+				data.setRealGoodName("Apple Vision Pro");
 			}
 //			data.setIndex(index.getAndIncrement());
 		});

+ 7 - 13
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonCategoryController.java

@@ -13,10 +13,10 @@ import com.cyksj.model.entity.GoodsDonCategory;
 import com.cyksj.model.entity.GoodsDonCategoryRelate;
 import com.cyksj.model.views.GoodsDonCategoryGoodsView;
 import com.cyksj.model.views.GoodsDonCategoryView;
-import com.cyksj.redis.RedisService;
 import com.cyksj.service.mange.CmsGoodsDonService;
 import com.cyksj.service.mange.GoodsDonCategoryRelateService;
 import com.cyksj.service.mange.GoodsDonCategoryService;
+import com.cyksj.service.mange.RefreshCacheService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
 import com.ejlchina.searcher.util.MapBuilder;
@@ -28,7 +28,6 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
 
 /*
  *项目名: netflix
@@ -52,7 +51,7 @@ public class CmsGoodsDonCategoryController {
 
 	private final GoodsDonCategoryRelateService goodsDonCategoryRelateService;
 
-	private final RedisService redisService;
+	private final RefreshCacheService refreshCacheService;
 
 	/**
 	 * 新增分类
@@ -69,8 +68,7 @@ public class CmsGoodsDonCategoryController {
 	@PutMapping("/put")
 	public Result<String> updateGoodsDonCategory(@RequestBody List<GoodsDonCategory> categorys) {
 		categorys.forEach(category -> goodsDonCategoryService.saveOrUpdateGoods(category));
-		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "category" + "*");
-		redisService.del(keys.toArray(String[]::new));
+		refreshCacheService.refreshYhHomeCategoryPageCache();
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -83,8 +81,7 @@ public class CmsGoodsDonCategoryController {
 		Assert.notNull(byId, "分类不存在");
 		byId.setStatus(!byId.getStatus());
 		goodsDonCategoryService.updateById(byId);
-		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "category" + "*");
-		redisService.del(keys.toArray(String[]::new));
+		refreshCacheService.refreshYhHomeCategoryPageCache();
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -99,8 +96,7 @@ public class CmsGoodsDonCategoryController {
 			throw BusinessRuntimeException.getInstance("存在该分类下平台");
 		}
 		goodsDonCategoryService.delById(id);
-		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "category" + "*");
-		redisService.del(keys.toArray(String[]::new));
+		refreshCacheService.refreshYhHomeCategoryPageCache();
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -115,8 +111,7 @@ public class CmsGoodsDonCategoryController {
 		if (category.getSorted() != null) {
 			byId.setSorted(category.getSorted());
 			goodsDonCategoryService.updateById(byId);
-			Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "category" + "*");
-			redisService.del(keys.toArray(String[]::new));
+			refreshCacheService.refreshYhHomeCategoryPageCache();
 		}
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
@@ -169,8 +164,7 @@ public class CmsGoodsDonCategoryController {
 		});
 		if (CollUtil.isNotEmpty(updateList)) {
 			goodsDonCategoryRelateService.updateBatchById(updateList);
-			Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-			redisService.del(keys.toArray(String[]::new));
+			refreshCacheService.refreshYhHomePageCache();
 		}
 
 		return GatewayResponse.SUCCESS.newBuilder().toResult();

+ 6 - 10
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonController.java

@@ -16,9 +16,9 @@ import com.cyksj.model.entity.GoodsDonSku;
 import com.cyksj.model.manage.request.ReqGoodsSpuInsert;
 import com.cyksj.model.manage.views.GoodsDonViewer;
 import com.cyksj.model.views.GoodsDonCategoryDetailView;
-import com.cyksj.redis.RedisService;
 import com.cyksj.service.mange.CmsGoodsDonService;
 import com.cyksj.service.mange.GoodsDonCategoryService;
+import com.cyksj.service.mange.RefreshCacheService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
 import com.ejlchina.searcher.param.Operator;
@@ -52,7 +52,7 @@ public class CmsGoodsDonController {
 
     private final CmsGoodsDonService goodsDonService;
 
-    private final RedisService redisService;
+    private final RefreshCacheService refreshCacheService;
 
     private final GoodsDonCategoryService goodsDonCategoryService;
 
@@ -112,8 +112,7 @@ public class CmsGoodsDonController {
         if (CollUtil.isNotEmpty(categoryList)) {
             goodsDonCategoryService.saveBatchRelate(goods.getId(), categoryList);
         }
-        Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-        redisService.del(keys.toArray(String[]::new));
+        refreshCacheService.refreshYhHomePageCache();
         return GatewayResponse.SUCCESS.newBuilder().toResult(goods.getId());
     }
 
@@ -155,8 +154,7 @@ public class CmsGoodsDonController {
         //平台 分类关系
         goodsDonCategoryService.handleGoodsRelate(goods.getId(), spu.getCategoryList());
         goodsDonService.updateById(goods);
-        Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-        redisService.del(keys.toArray(String[]::new));
+        refreshCacheService.refreshYhHomePageCache();
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
@@ -171,8 +169,7 @@ public class CmsGoodsDonController {
         }
         goods.setStatus(!goods.getStatus());
         goodsDonService.updateById(goods);
-        Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-        redisService.del(keys.toArray(String[]::new));
+        refreshCacheService.refreshYhHomePageCache();
         return GatewayResponse.SUCCESS.newBuilder().toResult(goods.getStatus());
     }
 
@@ -186,8 +183,7 @@ public class CmsGoodsDonController {
         }
         goods.setDeleted(false);
         goodsDonService.updateById(goods);
-        Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-        redisService.del(keys.toArray(String[]::new));
+        refreshCacheService.refreshYhHomePageCache();
         return GatewayResponse.SUCCESS.newBuilder().toResult(id);
     }
 

+ 8 - 14
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonSkuController.java

@@ -15,10 +15,10 @@ import com.cyksj.model.entity.GoodsDonSku;
 import com.cyksj.model.manage.request.ReqGoodsSkuInsert;
 import com.cyksj.model.request.CombinationSkuReq;
 import com.cyksj.model.views.DistributeSearchView;
-import com.cyksj.redis.RedisService;
 import com.cyksj.service.mange.CmsGoodsDonService;
 import com.cyksj.service.mange.CmsGoodsDonSkuService;
 import com.cyksj.service.mange.CmsGoodsDonSpecService;
+import com.cyksj.service.mange.RefreshCacheService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
 import com.ejlchina.searcher.param.Operator;
@@ -56,7 +56,7 @@ public class CmsGoodsDonSkuController {
 
     private final HttpServletRequest request;
 
-    private final RedisService redisService;
+    private final RefreshCacheService refreshCacheService;
 
 
     /**
@@ -66,8 +66,7 @@ public class CmsGoodsDonSkuController {
     @Log(module = "平台管理/新增商品sku&spec", businessType = BusinessType.POST, isSaveRequestData = true)
     public Result<String> skuInsert(@Validated @RequestBody ReqGoodsSkuInsert insert) throws Exception{
         goodsDonSpecService.insertOrUpdateSkuSpec(insert, false);
-        Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-        redisService.del(keys.toArray(String[]::new));
+        refreshCacheService.refreshYhHomePageCache();
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
@@ -77,8 +76,7 @@ public class CmsGoodsDonSkuController {
     @PutMapping("/update/spec")
     public Result<String> updateGoodsSpec(@Validated @RequestBody ReqGoodsSkuInsert insert) throws Exception {
         goodsDonSpecService.insertOrUpdateSkuSpec(insert, true);
-        Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-        redisService.del(keys.toArray(String[]::new));
+        refreshCacheService.refreshYhHomePageCache();
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
@@ -97,8 +95,7 @@ public class CmsGoodsDonSkuController {
         goodsDonSpecService.skuAppend(insert, goods);
         //给平台更新额外属性
         goodsDonService.updateGoodsSkuPrice(goods.getId(), goods);
-        Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-        redisService.del(keys.toArray(String[]::new));
+        refreshCacheService.refreshYhHomePageCache();
        return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
@@ -163,8 +160,7 @@ public class CmsGoodsDonSkuController {
         goodsDonSkuService.saveOrUpdate(sku);
         //给平台更新额外属性
         goodsDonService.updateGoodsSkuPrice(sku.getGoodsId(), null);
-        Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-        redisService.del(keys.toArray(String[]::new));
+        refreshCacheService.refreshYhHomePageCache();
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
@@ -181,8 +177,7 @@ public class CmsGoodsDonSkuController {
         goodsDonSkuService.handleDiscountPurchaseGoods(sku, null);
         goodsDonSkuService.removeById(skuId);
         goodsDonService.updateGoodsSkuPrice(sku.getGoodsId(), null);
-        Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-        redisService.del(keys.toArray(String[]::new));
+        refreshCacheService.refreshYhHomePageCache();
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
@@ -240,8 +235,7 @@ public class CmsGoodsDonSkuController {
                 .eq(GoodsDonSku::getStatus, false));
         if (update) {
             goodsDonService.updateGoodsSkuPrice(goodsId, null);
-            Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-            redisService.del(keys.toArray(String[]::new));
+            refreshCacheService.refreshYhHomePageCache();
         }
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }

+ 0 - 6
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonSpecController.java

@@ -9,7 +9,6 @@ import com.cyksj.model.entity.GoodsDon;
 import com.cyksj.model.entity.GoodsDonSpec;
 import com.cyksj.model.manage.request.ReqGoodsSkuSpec;
 import com.cyksj.model.manage.request.ReqGoodsSpecSingle;
-import com.cyksj.service.mange.CmsGoodsDonService;
 import com.cyksj.service.mange.CmsGoodsDonSpecService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.util.MapUtils;
@@ -19,7 +18,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -34,14 +32,10 @@ import java.util.Map;
 @RequestMapping("/manage/goods/spec")
 public class CmsGoodsDonSpecController {
 
-    private final HttpServletRequest request;
-
     private final BeanSearcher beanSearcher;
 
     private final CmsGoodsDonSpecService goodsDonSpecService;
 
-    private final CmsGoodsDonService goodsDonService;
-
     @PostMapping("/post")
     public Result<String> specAppend(@RequestBody ReqGoodsSpecSingle specSingle) throws Exception {
 

+ 8 - 15
netflix-web/src/main/java/com/cyksj/web/controller/manage/home/HomeManageConfigController.java

@@ -11,9 +11,9 @@ import com.cyksj.model.request.HomeConfigTimingReq;
 import com.cyksj.model.request.HomeManageConfigReq;
 import com.cyksj.model.views.HomeManagementAvailableGoodsView;
 import com.cyksj.model.views.HomeManagementConfigView;
-import com.cyksj.redis.RedisService;
 import com.cyksj.service.home.HomeManagementConfigService;
 import com.cyksj.service.mange.GoodsDonCategoryService;
+import com.cyksj.service.mange.RefreshCacheService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
 import com.ejlchina.searcher.util.MapUtils;
@@ -22,7 +22,6 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
-import java.util.Set;
 
 /** admin/首页管理/首页配置管理
  *项目名: netflix
@@ -40,7 +39,7 @@ public class HomeManageConfigController {
 
 	private final HttpServletRequest request;
 
-	private final RedisService redisService;
+	private final RefreshCacheService refreshCacheService;
 
 	private final GoodsDonCategoryService goodsDonCategoryService;
 
@@ -59,8 +58,7 @@ public class HomeManageConfigController {
 	@PutMapping("/put")
 	public Result<String> updateConfig(@RequestBody HomeManageConfigReq config) {
 		homeManagementConfigService.saveOrUpdateConfig(config);
-		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-		redisService.del(keys.toArray(String[]::new));
+		refreshCacheService.refreshYhHomePageCache();
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -76,8 +74,7 @@ public class HomeManageConfigController {
 		byId.setTime(null);
 		byId.setPreStatus(null);
 		homeManagementConfigService.updateById(byId);
-		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-		redisService.del(keys.toArray(String[]::new));
+		refreshCacheService.refreshYhHomePageCache();
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -93,8 +90,7 @@ public class HomeManageConfigController {
 				.in(HomeManagementConfig::getId, ids));
 		//批量取消定时上下架状态
 		homeManagementConfigService.batchCancelTimingStatus(ids);
-		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-		redisService.del(keys.toArray(String[]::new));
+		refreshCacheService.refreshYhHomePageCache();
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -106,8 +102,7 @@ public class HomeManageConfigController {
 		goodsDonCategoryService.update(null, Wrappers.lambdaUpdate(GoodsDonCategory.class)
 				.set(GoodsDonCategory::getStatus, status)
 				.in(GoodsDonCategory::getId, ids));
-		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-		redisService.del(keys.toArray(String[]::new));
+		refreshCacheService.refreshYhHomePageCache();
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -122,8 +117,7 @@ public class HomeManageConfigController {
 		Integer sorted = config.getSorted();
 		byId.setSorted(sorted);
 		homeManagementConfigService.updateById(byId);
-		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-		redisService.del(keys.toArray(String[]::new));
+		refreshCacheService.refreshYhHomePageCache();
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -136,8 +130,7 @@ public class HomeManageConfigController {
 						.set(HomeManagementConfig::getDeleted, false)
 						.eq(HomeManagementConfig::getId, id)
 						.eq(HomeManagementConfig::getDeleted, true));
-		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
-		redisService.del(keys.toArray(String[]::new));
+		refreshCacheService.refreshYhHomePageCache();
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 

+ 1 - 1
netflix-web/src/main/java/com/cyksj/web/controller/payment/OrderCommentFrontController.java

@@ -58,7 +58,7 @@ public class OrderCommentFrontController {
 		String userIdsStr = userIds.toString().replace("[", "(")
 				.replace("]", ")");
 		String conditionSql = "where status not in ('close','noPayment','refund')";
-		if (Constant.realGoodsType.contains(type)) {
+		if (type != 4 && Constant.realGoodsType.contains(type)) {
 			conditionSql = "where status = 'transport'";
 		}
 		conditionSql += String.format(" and user_id in %s", userIdsStr);

+ 0 - 1
netflix-web/src/main/java/com/cyksj/web/controller/user/DistributePopularizeController.java

@@ -135,7 +135,6 @@ public class DistributePopularizeController {
 		}
 		DistributePopularizeView distributePopularizeView = new DistributePopularizeView();
 		String dsUrl = String.format(envCommonService.DISTRIBUTE_DEFAULT_URL_PREFIX, user.getShowId());
-//		distributePopularizeView.setUrl(String.format("https://%s/8081/api/auth/weChat?url=https://%s/yinhe/web&sharedId=%s", domain, domain, userId));
 		distributePopularizeView.setUrl(dsUrl);
 		distributePopularizeView.setUrlCode(QrCodeUtil.generateAsBase64(distributePopularizeView.getUrl(), QrConfig.create(), "png"));
 		distributePopularizeView.setGotPoints(user.getPoints());

+ 92 - 0
netflix-web/src/main/java/com/cyksj/web/controller/user/UserCertController.java

@@ -0,0 +1,92 @@
+package com.cyksj.web.controller.user;
+
+import cn.hutool.core.util.StrUtil;
+import com.cyksj.common.util.Jsons;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.model.dto.UserWxIndentDto;
+import com.cyksj.model.entity.UserCertRecord;
+import com.cyksj.model.request.UserIndentCertReq;
+import com.cyksj.model.response.WxCertAuthTokenResp;
+import com.cyksj.redis.RedisService;
+import com.cyksj.service.user.UserIdentCertService;
+import com.cyksj.web.util.StpUserUtil;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserCertController
+ * 创建者: JavaZou
+ * 创建时间:2024/2/21 10:13
+ */
+@RequestMapping("/applets/user/cert")
+@RestController
+@RequiredArgsConstructor
+public class UserCertController {
+
+	private final UserIdentCertService userIdentCertService;
+
+	private final RedisService redisService;
+
+
+	/**
+	 * 用户是否已授权认证
+	 */
+	@GetMapping("/check/record")
+	public Result<Boolean> checkCertRecord() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		Boolean flag = userIdentCertService.checkCertRecord(userId);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(flag);
+	}
+
+	/**
+	 * 非微信端 用户身份认证 建立微信用户绑定关系
+	 */
+	@PostMapping("/bind")
+	@Deprecated
+	public Result<String> bindWxUser() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		String state = userIdentCertService.bindWxUser(userId);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(state);
+	}
+
+
+	/**
+	 * 用户微信H5认证
+	 */
+	@PostMapping("/auth")
+	public Result<WxCertAuthTokenResp> wxH5IndentCertAuth(@RequestBody UserIndentCertReq indentCertReq) throws Exception {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		indentCertReq.setUserId(userId);
+		WxCertAuthTokenResp resp = userIdentCertService.wxH5IndentCert(indentCertReq);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(resp);
+	}
+
+	/**
+	 * 用户微信H5认证结果查询
+	 */
+	@GetMapping("/auth/result/{mappingId}")
+	public void wxH5IndentCertAuthResult(@PathVariable String mappingId, HttpServletResponse response) throws Exception {
+		String redirectParams = redisService.getStr(mappingId);
+		if (StrUtil.isNotBlank(redirectParams)) {
+			UserWxIndentDto userWxIndentDto = Jsons.parseObject(redirectParams, UserWxIndentDto.class);
+			userIdentCertService.wxH5IndentCertResult(userWxIndentDto);
+			String url = userWxIndentDto.getRedirectUrl();
+			redisService.del(mappingId);
+			response.sendRedirect(url);
+		}
+	}
+
+	/**
+	 * 查看实名认证信息
+	 */
+	@GetMapping("/get/info")
+	public Result<UserCertRecord> getUserCertRecord() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		UserCertRecord record = userIdentCertService.getUserCertRecord(userId);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(record);
+	}
+}