Explorar o código

Merge branch 'mirror_notice' into dev

# Conflicts:
#	netflix-service/src/main/java/com/cyksj/redis/RedisService.java
#	netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java
#	netflix-web/src/main/java/com/cyksj/web/controller/mirror/MidjourneyController.java
zoujiajian %!s(int64=2) %!d(string=hai) anos
pai
achega
d2963b6f8c
Modificáronse 100 ficheiros con 1830 adicións e 81 borrados
  1. 6 0
      netflix-common/pom.xml
  2. 15 0
      netflix-common/src/main/java/com/cyksj/common/constant/Constant.java
  3. 2 2
      netflix-common/src/main/java/com/cyksj/common/util/J11HttpC.java
  4. 53 0
      netflix-common/src/main/java/com/cyksj/common/util/SmsUtil.java
  5. 46 2
      netflix-common/src/main/java/com/cyksj/common/util/StringUtil.java
  6. 46 0
      netflix-common/src/main/java/com/cyksj/common/util/TicketCodeCommonUtil.java
  7. 96 0
      netflix-common/src/main/java/com/cyksj/dto/ArkIpAddressDto.java
  8. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/GoodsDonQaMapper.java
  9. 22 0
      netflix-dao/src/main/java/com/cyksj/mapper/GoodsDonQaRelateMapper.java
  10. 2 0
      netflix-dao/src/main/java/com/cyksj/mapper/GroupsMapper.java
  11. 18 0
      netflix-dao/src/main/java/com/cyksj/mapper/GroupsRelationExpiryNotifyRecordMapper.java
  12. 5 1
      netflix-dao/src/main/java/com/cyksj/mapper/GroupsRelationMapper.java
  13. 17 0
      netflix-dao/src/main/java/com/cyksj/mapper/MidjourneyPaintingPlazaMapper.java
  14. 12 0
      netflix-dao/src/main/java/com/cyksj/mapper/MirrorNoticeMapper.java
  15. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/OrderDonExceptionUserRecordMapper.java
  16. 2 0
      netflix-dao/src/main/java/com/cyksj/mapper/OrderDonMapper.java
  17. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/SysCorpFollowMapper.java
  18. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/SysCorpFollowRelateMapper.java
  19. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/UserGoodsNewbieGuideRecordMapper.java
  20. 3 1
      netflix-dao/src/main/java/com/cyksj/mapper/UserMapper.java
  21. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/UserReceiveTrialTicketRecordMapper.java
  22. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/UserTrialTicketJumpPayRecordMapper.java
  23. 2 0
      netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpUserFollowRelationMapper.java
  24. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/DistributeExtraRebateConfigMapper.java
  25. 4 4
      netflix-dao/src/main/java/com/cyksj/mapper/shop/YhShopGoodsSkuMapper.java
  26. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/station/CollegeStudentStationClickRecordMapper.java
  27. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/station/CollegeStudentStationUseTicketRecordMapper.java
  28. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/station/CollegeStudentStationUserRelateMapper.java
  29. 6 0
      netflix-dao/src/main/java/com/cyksj/model/dto/AuthRedirect.java
  30. 2 0
      netflix-dao/src/main/java/com/cyksj/model/dto/CorpFollowServiceDto.java
  31. 2 0
      netflix-dao/src/main/java/com/cyksj/model/dto/YhServiceDto.java
  32. 12 0
      netflix-dao/src/main/java/com/cyksj/model/entity/ChatgptUser.java
  33. 19 0
      netflix-dao/src/main/java/com/cyksj/model/entity/CollegeStudentStationClickRecord.java
  34. 20 0
      netflix-dao/src/main/java/com/cyksj/model/entity/CollegeStudentStationUseTicketRecord.java
  35. 21 0
      netflix-dao/src/main/java/com/cyksj/model/entity/CollegeStudentStationUserRelate.java
  36. 2 0
      netflix-dao/src/main/java/com/cyksj/model/entity/CorpCustomerAcquisitionLinkExtraCustomer.java
  37. 5 3
      netflix-dao/src/main/java/com/cyksj/model/entity/CorpUserPayIntention.java
  38. 20 0
      netflix-dao/src/main/java/com/cyksj/model/entity/DistributeExtraRebateConfig.java
  39. 15 0
      netflix-dao/src/main/java/com/cyksj/model/entity/DistributeWaitingSendPoints.java
  40. 5 0
      netflix-dao/src/main/java/com/cyksj/model/entity/ExchangeCode.java
  41. 47 0
      netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDonQa.java
  42. 22 0
      netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDonQaRelate.java
  43. 5 0
      netflix-dao/src/main/java/com/cyksj/model/entity/GroupsRelation.java
  44. 24 0
      netflix-dao/src/main/java/com/cyksj/model/entity/GroupsRelationExpiryNotifyRecord.java
  45. 39 0
      netflix-dao/src/main/java/com/cyksj/model/entity/MidjourneyPaintingPlaza.java
  46. 8 0
      netflix-dao/src/main/java/com/cyksj/model/entity/MidjourneyUser.java
  47. 31 0
      netflix-dao/src/main/java/com/cyksj/model/entity/MirrorNotice.java
  48. 4 0
      netflix-dao/src/main/java/com/cyksj/model/entity/OrderDon.java
  49. 24 0
      netflix-dao/src/main/java/com/cyksj/model/entity/OrderDonExceptionUserRecord.java
  50. 18 0
      netflix-dao/src/main/java/com/cyksj/model/entity/SysCorpFollow.java
  51. 29 0
      netflix-dao/src/main/java/com/cyksj/model/entity/SysCorpFollowRelate.java
  52. 7 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UpgradeOrderDon.java
  53. 19 1
      netflix-dao/src/main/java/com/cyksj/model/entity/UpgradePackage.java
  54. 19 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UserGoodsNewbieGuideRecord.java
  55. 27 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UserReceiveTrialTicketRecord.java
  56. 16 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UserTrialTicketJumpPayRecord.java
  57. 7 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/CorpMsgAuditUserView.java
  58. 5 1
      netflix-dao/src/main/java/com/cyksj/model/manage/views/CorpWxOrderDonView.java
  59. 3 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonSearchView.java
  60. 3 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonView.java
  61. 1 1
      netflix-dao/src/main/java/com/cyksj/model/manage/views/UpgradeOrderDonBackView.java
  62. 4 8
      netflix-dao/src/main/java/com/cyksj/model/manage/views/UpgradeOrderDonSearchView.java
  63. 1 1
      netflix-dao/src/main/java/com/cyksj/model/manage/views/UpgradeOrderDonView.java
  64. 18 0
      netflix-dao/src/main/java/com/cyksj/model/request/ChannelPayReq.java
  65. 5 0
      netflix-dao/src/main/java/com/cyksj/model/request/OrderPayRequest.java
  66. 40 0
      netflix-dao/src/main/java/com/cyksj/model/request/sys/SysCorpFollowReq.java
  67. 33 0
      netflix-dao/src/main/java/com/cyksj/model/views/ChatGptUserView.java
  68. 1 1
      netflix-dao/src/main/java/com/cyksj/model/views/CorpCustomerAcquisitionLinkExtraCustomerView.java
  69. 12 0
      netflix-dao/src/main/java/com/cyksj/model/views/DistributePopularizeOrdersView.java
  70. 77 0
      netflix-dao/src/main/java/com/cyksj/model/views/ExternalExchangeCodeView.java
  71. 42 0
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsDetailView.java
  72. 37 0
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonQaFrontView.java
  73. 18 0
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonQaGoodsView.java
  74. 47 0
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonQaView.java
  75. 3 0
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsFrontListView.java
  76. 29 0
      netflix-dao/src/main/java/com/cyksj/model/views/MidjourneyPaintingUserView.java
  77. 30 0
      netflix-dao/src/main/java/com/cyksj/model/views/MidjourneyUserPaintingDayRecordView.java
  78. 36 0
      netflix-dao/src/main/java/com/cyksj/model/views/MidjourneyUserPaintingRecordView.java
  79. 1 1
      netflix-dao/src/main/java/com/cyksj/model/views/RefundUpdradeOrderDonView.java
  80. 54 1
      netflix-dao/src/main/java/com/cyksj/model/views/RenewalView.java
  81. 92 0
      netflix-dao/src/main/java/com/cyksj/model/views/SysCorpFollowView.java
  82. 24 0
      netflix-dao/src/main/java/com/cyksj/model/views/SysCorpMasterFollowView.java
  83. 3 2
      netflix-dao/src/main/java/com/cyksj/model/views/TicketView.java
  84. 25 6
      netflix-dao/src/main/java/com/cyksj/model/views/UpgradePackageView.java
  85. 5 0
      netflix-dao/src/main/java/com/cyksj/model/views/UserInfoView.java
  86. 2 14
      netflix-dao/src/main/java/com/cyksj/model/views/YHLXUserDetailView.java
  87. 1 1
      netflix-dao/src/main/resources/mapper/CorpCustomerAcquisitionLinkMapper.xml
  88. 4 0
      netflix-dao/src/main/resources/mapper/CorpUserFollowRelationMapper.xml
  89. 14 0
      netflix-dao/src/main/resources/mapper/GoodsDonQaRelateMapper.xml
  90. 29 6
      netflix-dao/src/main/resources/mapper/GroupRelationMapper.xml
  91. 9 0
      netflix-dao/src/main/resources/mapper/GroupsMapper.xml
  92. 14 0
      netflix-dao/src/main/resources/mapper/GroupsRelationExpiryNotifyRecordMapper.xml
  93. 6 0
      netflix-dao/src/main/resources/mapper/MidjourneyPaintingPlazaMapper.xml
  94. 9 0
      netflix-dao/src/main/resources/mapper/OrderDonMapper.xml
  95. 4 4
      netflix-dao/src/main/resources/mapper/StatisticsExportMapper.xml
  96. 14 0
      netflix-dao/src/main/resources/mapper/UserMapper.xml
  97. 6 0
      netflix-service/pom.xml
  98. 2 0
      netflix-service/src/main/java/com/cyksj/redis/RedisService.java
  99. 95 11
      netflix-service/src/main/java/com/cyksj/service/chatgpt/impl/ChatGptAccountServiceImpl.java
  100. 3 9
      netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpCustomerAcquisitionLinkServiceImpl.java

+ 6 - 0
netflix-common/pom.xml

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

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

@@ -317,4 +317,19 @@ public interface Constant {
 	 * 设备意向标签组
 	 */
 	String EP_INTENTION_GROUP_NAME= "设备群发标签";
+
+	/**
+	 * 大学生快递站 体验车票规格
+	 */
+	Long GPT_MIRROR_SKU_ID = 429l;
+
+	/**
+	 * MJ试用规格id
+	 */
+	Long MIDJOURNEY_TRIAL_SKU_ID = 435L;
+
+	/**
+	 * 电影域名
+	 */
+	String ZHAOJU_MOVIES = "https://zhaoju666.com";
 }

+ 2 - 2
netflix-common/src/main/java/com/cyksj/common/util/J11HttpC.java

@@ -40,12 +40,12 @@ public class J11HttpC {
     /**
      * 连接超时时间
      */
-    private static final Duration CONNECT_TIMEOUT = Duration.ofSeconds(4);
+    private static final Duration CONNECT_TIMEOUT = Duration.ofSeconds(120);
 
     /**
      * 读取超时时间
      */
-    private static final Duration SOCKET_TIMEOUT = Duration.ofSeconds(6);
+    private static final Duration SOCKET_TIMEOUT = Duration.ofSeconds(120);
 
     /**
      * Thread-safe

+ 53 - 0
netflix-common/src/main/java/com/cyksj/common/util/SmsUtil.java

@@ -4,6 +4,10 @@ import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpResponse;
 import cn.hutool.http.Method;
 import cn.hutool.json.JSONObject;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.tencentcloudapi.captcha.v20190722.CaptchaClient;
+import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultRequest;
+import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultResponse;
 import com.tencentcloudapi.common.Credential;
 import com.tencentcloudapi.common.exception.TencentCloudSDKException;
 import com.tencentcloudapi.common.profile.ClientProfile;
@@ -48,6 +52,17 @@ public class SmsUtil {
     //账号修改密码国际短信通知
     private static final String TENCENT_SMS_ACCOUNT_INTERNATIONAL_TEMPLATE_ID = "2040574";
 
+
+    private static final String TENCENT_CAPTCHA_SECRET_ID = "AKIDogNE1uQ3azlVH0582pS0gRD7HZ3aIAYs";
+
+    private static final String TENCENT_CAPTCHA_SECRET_KEY = "Ig2SnIyeHqK5tmrw27kR4bJ727bAsjSX";
+
+    //腾讯云图形认证密钥id
+    private static final Long TENCENT_CAPTCHA_APP_ID = 197694921l;
+
+    //腾讯云图形认证密钥key
+    private static final String TENCENT_CAPTCHA_APP_SECRET_KEY = "vOd32NejzMM2HQX0WtKy7ItvK";
+
     private static final Logger log = LoggerFactory.getLogger(SmsUtil.class);
 
     public static void main(String[] args) {
@@ -193,4 +208,42 @@ public class SmsUtil {
         }
         return false;
     }
+
+    public static void checkTencentCaptcha(String ticket, String userIp,String randsStr) {
+        try {
+            // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
+            // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
+            // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
+            Credential cred = new Credential(TENCENT_CAPTCHA_SECRET_ID, TENCENT_CAPTCHA_SECRET_KEY);
+            // 实例化一个http选项,可选的,没有特殊需求可以跳过
+            HttpProfile httpProfile = new HttpProfile();
+            // 推荐使用北极星,相关指引可访问如下链接
+            // https://git.woa.com/tencentcloud-internal/tencentcloud-sdk-java#%E5%8C%97%E6%9E%81%E6%98%9F
+            httpProfile.setEndpoint("captcha.tencentcloudapi.com");
+            // 实例化一个client选项,可选的,没有特殊需求可以跳过
+            ClientProfile clientProfile = new ClientProfile();
+            clientProfile.setHttpProfile(httpProfile);
+            // 实例化要请求产品的client对象,clientProfile是可选的
+            CaptchaClient client = new CaptchaClient(cred, "", clientProfile);
+            // 实例化一个请求对象,每个接口都会对应一个request对象
+            DescribeCaptchaResultRequest req = new DescribeCaptchaResultRequest();
+            req.setCaptchaType(9L);
+            req.setTicket(ticket);
+            req.setUserIp(userIp);
+            req.setRandstr(randsStr);
+            req.setCaptchaAppId(TENCENT_CAPTCHA_APP_ID);
+            req.setAppSecretKey(TENCENT_CAPTCHA_APP_SECRET_KEY);
+
+            // 返回的resp是一个DescribeCaptchaResultResponse的实例,与请求对象对应
+            DescribeCaptchaResultResponse resp = client.DescribeCaptchaResult(req);
+            //1 OK 验证通过
+            Long captchaCode = resp.getCaptchaCode();
+            if (captchaCode != 1) {
+                log.error("腾讯云图形验证错误:{}", resp.getCaptchaMsg());
+                throw BusinessRuntimeException.getInstance("图形验证失败");
+            }
+        } catch (TencentCloudSDKException e) {
+            log.error("腾讯云图形认证异常:{}", StringUtil.getErrorText(e));
+        }
+    }
 }

+ 46 - 2
netflix-common/src/main/java/com/cyksj/common/util/StringUtil.java

@@ -2,8 +2,10 @@ package com.cyksj.common.util;
 
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.cyksj.dto.ArkIpAddressDto;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -50,6 +52,8 @@ public final class StringUtil {
 
 	private static final String baseStr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 
+	private static final String PAID_IP_APP_CODE_AUTH = "APPCODE ce891b0008634139a493d477c064ff19";
+
 	/**
 	 * provate constructor
 	 */
@@ -561,9 +565,9 @@ public final class StringUtil {
 	/**
 	 * 获取账号登录验证码
 	 */
-	public static String getVerifyCodePattern(String code) {
+	public static String getVerifyCodePattern(String code, Integer length) {
 		if (StrUtil.isNotEmpty(code)) {
-			Pattern pattern = Pattern.compile("\\d{4,}");
+			Pattern pattern = Pattern.compile(String.format("\\d{%s,}", length));
 			Matcher matcher = pattern.matcher(code);
 			while (matcher.find()) {
 				return matcher.group();
@@ -571,4 +575,44 @@ public final class StringUtil {
 		}
 		return StrUtil.EMPTY;
 	}
+
+	public static <T> List<List<T>> averageAssign(List<T> source, int n) {
+		List<List<T>> result = new ArrayList<List<T>>();
+		int remainder = source.size() % n;  //(先计算出余数)
+		int number = source.size() / n;  //然后是商
+		int offset = 0;//偏移量
+		for (int i = 0; i < n; i++) {
+			List<T> value = null;
+			if (remainder > 0) {
+				value = source.subList(i * number + offset, (i + 1) * number + offset + 1);
+				remainder--;
+				offset++;
+			} else {
+				value = source.subList(i * number + offset, (i + 1) * number + offset);
+			}
+			result.add(value);
+		}
+		return result;
+	}
+
+	/**
+	 * 付费ip地址查询
+	 */
+	public static String paidIpAddress(String ip) {
+		cn.hutool.http.HttpResponse execute = HttpUtil.createGet(String.format("https://ipaddr.market.alicloudapi.com/ip_addr_search/v1?IP_ADDR=%s", ip))
+				.header("Authorization", PAID_IP_APP_CODE_AUTH)
+				.header("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")
+				.execute();
+
+		try {
+			ArkIpAddressDto arkIpAddressDto = Jsons.parseObject(execute.body(), ArkIpAddressDto.class);
+			ArkIpAddressDto.Entity.InputIpAddress inputIpAddress = arkIpAddressDto.getEntity().getInputIpAddress();
+			return new StringBuilder()
+					.append(inputIpAddress.getNation())
+					.append(inputIpAddress.getProvince())
+					.append(inputIpAddress.getCity()).toString();
+		} catch (Exception e) {
+		}
+		return "unknown";
+	}
 }

+ 46 - 0
netflix-common/src/main/java/com/cyksj/common/util/TicketCodeCommonUtil.java

@@ -0,0 +1,46 @@
+package com.cyksj.common.util;
+
+import cn.hutool.core.util.StrUtil;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: TicketCodeCommonUtil
+ * 创建者: JavaZou
+ * 创建时间:2024/5/24 15:31
+ */
+
+public class TicketCodeCommonUtil {
+	/**
+	 * 车票邮箱验证码
+	 */
+	public static String getTicketCodeStr(String body, Long goodsId) {
+		if (StrUtil.isEmpty(body)) {
+			return body;
+		}
+		String str = null;
+		if (goodsId == 33l) {
+			str = "color:#505050; font-family:adobe-clean, Helvetica Neue, Helvetica, Verdana, Arial, sans-serif;";
+		}
+		if (goodsId == 3l) {
+			str = "letter-spacing:4px; line-height:38px; mso-line-height-rule: exactly";
+		}
+		if (StrUtil.isEmpty(str)) {
+			return str;
+		}
+		int index = body.indexOf(str);
+		if (index == -1) {
+			if (goodsId == 33l) {
+				str = "X-Report-Abuse: abuse@adobe.com";
+			}
+			if (goodsId == 3l) {
+				str = "Noto Sans Display', Helvetica, Arial, sans-serif; font-weight: 600;text-align: center;";
+			}
+			index = body.indexOf(str);
+		}
+		String code = StrUtil.subWithLength(body, index, 512);
+		if (StrUtil.isNotBlank(code)) {
+			code = code.replace(str, "");
+		}
+		return code;
+	}
+}

+ 96 - 0
netflix-common/src/main/java/com/cyksj/dto/ArkIpAddressDto.java

@@ -0,0 +1,96 @@
+package com.cyksj.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: ArkIpAddressDto
+ * 创建者: JavaZou
+ * 创建时间:2024/6/21 11:15
+ */
+@Getter
+@Setter
+public class ArkIpAddressDto {
+	@JsonProperty("INPUT_STRING")
+	private String inputString;
+	@JsonProperty("INPUT_IP_ADDRESS")
+	private String inputIpAddress;
+	@JsonProperty("CALLER_IP_ADDRESS")
+	private String callerIpAddress;
+	@JsonProperty("STATUS")
+	private String status;
+	@JsonProperty("ENTITY")
+	private Entity entity;
+
+	@Getter
+	@Setter
+	public static class Entity {
+		@JsonProperty("INPUT_IP_ADDRESS")
+		private InputIpAddress inputIpAddress;
+		@JsonProperty("CALLER_IP_ADDRESS")
+		private CallerIpAddress callerIpAddress;
+
+		/**
+		 * ip信息
+		 */
+		@Getter
+		@Setter
+		public static class InputIpAddress {
+			@JsonProperty("IP_ADDRESS")
+			private String ipAddress;
+			@JsonProperty("GLOBAL")
+			private String global;
+			@JsonProperty("NATION")
+			private String nation;
+			@JsonProperty("NATION_NAME_EN")
+			private String nationNameEn;
+			@JsonProperty("NATION_NAME_EN_ABBR")
+			private String nationNameEnAbbr;
+			@JsonProperty("PROVINCE")
+			private String province;
+			@JsonProperty("CITY")
+			private String city;
+			@JsonProperty("DISTRICT")
+			private String district;
+			@JsonProperty("ISP")
+			private String isp;
+			@JsonProperty("ADCODE")
+			private String adcode;
+			@JsonProperty("GPS")
+			private String gps;
+			@JsonProperty("STATUS")
+			private String status;
+		}
+
+		@Getter
+		@Setter
+		public static class CallerIpAddress {
+			@JsonProperty("IP_ADDRESS")
+			private String ipAddress;
+			@JsonProperty("GLOBAL")
+			private String global;
+			@JsonProperty("NATION")
+			private String nation;
+			@JsonProperty("NATION_NAME_EN")
+			private String nationNameEn;
+			@JsonProperty("NATION_NAME_EN_ABBR")
+			private String nationNameEnAbbr;
+			@JsonProperty("PROVINCE")
+			private String province;
+			@JsonProperty("CITY")
+			private String city;
+			@JsonProperty("DISTRICT")
+			private String district;
+			@JsonProperty("ISP")
+			private String isp;
+			@JsonProperty("ADCODE")
+			private String adcode;
+			@JsonProperty("GPS")
+			private String gps;
+			@JsonProperty("STATUS")
+			private String status;
+		}
+	}
+}

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

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

+ 22 - 0
netflix-dao/src/main/java/com/cyksj/mapper/GoodsDonQaRelateMapper.java

@@ -0,0 +1,22 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.GoodsDonQaRelate;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: GoodsDonQaRelateMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/5/24 16:13
+ */
+public interface GoodsDonQaRelateMapper extends BaseMapper<GoodsDonQaRelate> {
+
+	@Select("select g.id from (select goods_id from goods_don_qa_relate where question_id = #{questionId}) gqr inner join goods_don g on g.id = gqr.goods_id")
+	List<Long> getQaGoodsByQaId(Long questionId);
+
+	void batchInsert(@Param("id") Long id, @Param("list") List<Long> goodsIds);
+}

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/mapper/GroupsMapper.java

@@ -41,4 +41,6 @@ public interface GroupsMapper extends BaseMapper<GroupsTrips> {
 	Integer countExpiredNum(Long accountId);
 
 	GroupsTrips selectTicketGroups(@Param("skuId") Long skuId, @Param("status") GroupsTrips.Status status, @Param("maxNum") Integer maxNum, @Param("ip") String ip);
+
+	GroupsTrips selectCollegeStudentUserGptTicket(Long skuId);
 }

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/mapper/GroupsRelationExpiryNotifyRecordMapper.java

@@ -0,0 +1,18 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.GroupsRelationExpiryNotifyRecord;
+import com.cyksj.model.views.RenewalView;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: GroupsRelationExpiryNotifyRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/5/24 14:56
+ */
+public interface GroupsRelationExpiryNotifyRecordMapper extends BaseMapper<GroupsRelationExpiryNotifyRecord> {
+	void batchInsert(@Param("userId") Long userId, @Param("list") List<RenewalView> expiryTickets);
+}

+ 5 - 1
netflix-dao/src/main/java/com/cyksj/mapper/GroupsRelationMapper.java

@@ -53,7 +53,7 @@ public interface GroupsRelationMapper extends BaseMapper<GroupsRelation> {
 
 	List<Long> getTicketGoodsId(@Param("list") List<Long> userIds, @Param("status") List<String> status);
 
-	Page<UserRecommendGoodsFrontView> getRecommendGoodsViews(@Param("page") Page<UserRecommendGoodsFrontView> page, @Param("list") List<Long> filter_goods_id, @Param("isPayNf") Boolean isPayNf);
+	Page<UserRecommendGoodsFrontView> getRecommendGoodsViews(@Param("page") Page<UserRecommendGoodsFrontView> page, @Param("list") List<Long> filter_goods_id, @Param("isPayNf") Boolean isPayNf, @Param("filterCourseGoods") Boolean filterCourseGoods);
 
 	Long getOutSideGroupsTripsRelationByGoodsId(@Param("skuId") Long skuId, @Param("beginOfDay") DateTime beginOfDay, @Param("extraNum") Integer extraNum, @Param("userId") Long userId, @Param("skuNum") Integer skuNum, @Param("maxNum") Integer maxNum);
 
@@ -70,4 +70,8 @@ public interface GroupsRelationMapper extends BaseMapper<GroupsRelation> {
 	PhoneCode getAreaPhoneByUserId(Long userId);
 
 	List<RenewalView> getUserHasPayGoods(@Param("list") List<Long> userIds, @Param("now") DateTime now);
+
+	Long getExperienceTicket(@Param("userId") Long userId, @Param("skuId") Long skuId);
+
+	Long selectGoodsDonQaByGoodsId(Long goodsId);
 }

+ 17 - 0
netflix-dao/src/main/java/com/cyksj/mapper/MidjourneyPaintingPlazaMapper.java

@@ -0,0 +1,17 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.MidjourneyPaintingPlaza;
+import org.apache.ibatis.annotations.Update;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: MidjourneyPaintingPlazaMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/6/3 17:22
+ */
+public interface MidjourneyPaintingPlazaMapper extends BaseMapper<MidjourneyPaintingPlaza> {
+
+	@Update("update midjourney_painting_plaza set copy_num = copy_num + 1 where id = #{id}")
+	void updatePaintingCopyNum(Long id);
+}

+ 12 - 0
netflix-dao/src/main/java/com/cyksj/mapper/MirrorNoticeMapper.java

@@ -0,0 +1,12 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.MirrorNotice;
+
+/**
+ * @author chan
+ * @date 2024/6/21 14:59
+ */
+public interface MirrorNoticeMapper extends BaseMapper<MirrorNotice> {
+
+}

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

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

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/mapper/OrderDonMapper.java

@@ -91,4 +91,6 @@ public interface OrderDonMapper extends BaseMapper<OrderDon> {
 	BigDecimal getTotalRefundAmountTime(@Param("startDate") Date startDate, @Param("endDate") Date endDate);
 
 	BigDecimal getCouponUsedMoney(Long couponId);
+
+	Integer checkUserHasPaidMjMirror(@Param("list") List<Long> userIdList);
 }

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.SysCorpFollow;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: SysCorpFollowMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/6/12 11:53
+ */
+public interface SysCorpFollowMapper extends BaseMapper<SysCorpFollow> {
+}

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.SysCorpFollowRelate;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: SysCorpFollowRelateMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/6/12 11:54
+ */
+public interface SysCorpFollowRelateMapper extends BaseMapper<SysCorpFollowRelate> {
+}

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserGoodsNewbieGuideRecord;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserGoodsNewbieGuideRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/5/27 12:14
+ */
+public interface UserGoodsNewbieGuideRecordMapper extends BaseMapper<UserGoodsNewbieGuideRecord> {
+}

+ 3 - 1
netflix-dao/src/main/java/com/cyksj/mapper/UserMapper.java

@@ -31,7 +31,7 @@ public interface UserMapper extends BaseMapper<User> {
     @Update("update user set active_points = active_points - #{subPoints} where active_points > 0 and active_points >= #{subPoints} and id = #{userId}")
     Integer subActivePoints(@Param("userId") Long userId, @Param("subPoints") BigDecimal subPoints);
 
-    @Select("select id from user where nickname like concat(#{nickname},'%')")
+    @Select("select id from user where nickname like concat('%',#{nickname},'%')")
     List<Long> selectListByNickname(String nickname);
 
     @Update("update user set points = points - #{deductPoints} where id = #{id} and points = #{originalPoints}")
@@ -75,4 +75,6 @@ public interface UserMapper extends BaseMapper<User> {
     Integer addDistributeSubMoney(@Param("id") Long id, @Param("subApplyMoney") BigDecimal subApplyMoney, @Param("addApplyMoney") BigDecimal addApplyMoney);
 
     Integer getNewMaliceUser(DateTime beginOfDay);
+
+    List<User> selectUserById(@Param("pid") Long phoneUserId, @Param("eid") Long emailUserId);
 }

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserReceiveTrialTicketRecord;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserReceiveTrialTicketRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/6/3 17:58
+ */
+public interface UserReceiveTrialTicketRecordMapper extends BaseMapper<UserReceiveTrialTicketRecord> {
+}

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserTrialTicketJumpPayRecord;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserTrialTicketJumpPayRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/6/3 18:27
+ */
+public interface UserTrialTicketJumpPayRecordMapper extends BaseMapper<UserTrialTicketJumpPayRecord> {
+}

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpUserFollowRelationMapper.java

@@ -23,4 +23,6 @@ public interface CorpUserFollowRelationMapper extends BaseMapper<CorpUserFollowR
 	List<CorpUserFollowRelationDto> selectCorpUserNotUnderTagIds(@Param("list") List<String> tagIds, @Param("wxCorpId") Long wxCorpId, @Param("followIds") List<String> followIds, @Param("userScope") Integer userScope, @Param("consumerScope") Integer consumerScope, @Param("joinStartTime") Date joinStartTime, @Param("joinEndTime") Date joinEndTime);
 
 	CorpUserFollowRelation getCorpUserFollowRelation(@Param("unionId") String unionId, @Param("followId") String followId);
+
+	Integer selectNumOfCorpuserByFollowId(String followId);
 }

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/DistributeExtraRebateConfigMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.distribute;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.DistributeExtraRebateConfig;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: DistributeExtraRebateConfigMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/5/29 15:12
+ */
+public interface DistributeExtraRebateConfigMapper extends BaseMapper<DistributeExtraRebateConfig> {
+}

+ 4 - 4
netflix-dao/src/main/java/com/cyksj/mapper/shop/YhShopGoodsSkuMapper.java

@@ -20,12 +20,12 @@ public interface YhShopGoodsSkuMapper extends BaseMapper<YhShopGoodsSku> {
 			" inner join goods_don_sku sku on sku.id = ygs.sku_id")
 	GoodsDonSku selectGoodsDonSkuBySkuIdAndYhsId(@Param("yhsId") Long yhsId, @Param("skuId") Long skuId);
 
-	@Update("update yh_shop_goods_sku set status = 0 where sku_id = #{skuId} and price < #{minPrice}")
-	Integer setBelowPriceShopSkuDown(@Param("skuId") Long skuId, @Param("minPrice") BigDecimal minPrice);
+	@Update("update yh_shop_goods_sku set status = 0 where sku_id = #{skuId} and price not between #{minPrice} and #{maxPrice}")
+	Integer setBelowPriceShopSkuDown(@Param("skuId") Long skuId, @Param("minPrice") BigDecimal minPrice, @Param("maxPrice") BigDecimal maxPrice);
 
 	@Select("select sku_id,price from yh_shop_goods_sku where yhs_id = #{yhsId} and goods_id = #{goodsId} and deleted is true and status is true order by price limit 1")
 	YhShopGoodsSku selectMinPriceSkuByYhsId(@Param("yhsId") Long yhsId, @Param("goodsId") Long goodsId);
 
-	@Select("select * from yh_shop_goods_sku where sku_id = #{skuId} and price < #{minPrice} and status = 1")
-	List<YhShopGoodsSku> getBelowPriceShopSku(@Param("skuId") Long skuId, @Param("minPrice") BigDecimal minPrice);
+	@Select("select * from yh_shop_goods_sku where sku_id = #{skuId} and price not between #{minPrice} and #{maxPrice} and status = 1")
+	List<YhShopGoodsSku> getBelowPriceShopSku(@Param("skuId") Long skuId, @Param("minPrice") BigDecimal minPrice, @Param("maxPrice") BigDecimal maxPrice);
 }

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

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

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.station;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.CollegeStudentStationUseTicketRecord;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CollegeStudentStationUseTicketRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/5/29 13:50
+ */
+public interface CollegeStudentStationUseTicketRecordMapper extends BaseMapper<CollegeStudentStationUseTicketRecord> {
+}

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

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

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/AuthRedirect.java

@@ -77,4 +77,10 @@ public class AuthRedirect {
      * 跳转url
      */
     private String url;
+
+    /**
+     * 大学生快递站 进入类型
+     * 1.主动 2.被邀请用户
+     */
+    private Integer cst;
 }

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/CorpFollowServiceDto.java

@@ -18,4 +18,6 @@ public class CorpFollowServiceDto {
 	private Integer indx;
 
 	private String followId;
+
+	private String img;
 }

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/YhServiceDto.java

@@ -55,6 +55,8 @@ public class YhServiceDto {
 		private String url;
 
 		private String followId;
+
+		private Integer status;
 	}
 
 	public Boolean isBetween(LocalTime currentTime) {

+ 12 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/ChatgptUser.java

@@ -1,5 +1,6 @@
 package com.cyksj.model.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.ejlchina.searcher.bean.SearchBean;
@@ -75,4 +76,15 @@ public class ChatgptUser extends BaseEntity {
      * 是否为车队
      */
     private Boolean isCar;
+
+    /**
+     * 目前套餐包id
+     */
+    private Long packageId;
+
+    /**
+     * 清洗套餐包时间
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Date clearPackageTime;
 }

+ 19 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CollegeStudentStationClickRecord.java

@@ -0,0 +1,19 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CollegeStudentStattionClickRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/5/28 11:55
+ */
+@Getter
+@Setter
+public class CollegeStudentStationClickRecord extends BaseEntity {
+
+	private Long userId;
+
+	private Integer type;
+}

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CollegeStudentStationUseTicketRecord.java

@@ -0,0 +1,20 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CollegeStudentStationUseTicketRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/5/29 12:10
+ */
+@Getter
+@Setter
+public class CollegeStudentStationUseTicketRecord extends BaseEntity{
+	private Long userId;
+
+	@TableField(value = "userToken")
+	private String userToken;
+}

+ 21 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CollegeStudentStationUserRelate.java

@@ -0,0 +1,21 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CollegeStudentStationUserRelate
+ * 创建者: JavaZou
+ * 创建时间:2024/5/28 11:56
+ */
+@Getter
+@Setter
+public class CollegeStudentStationUserRelate extends BaseEntity{
+	private Long userId;
+
+	/**
+	 * 1.主动 2.被邀请用户
+	 */
+	private Integer type;
+}

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CorpCustomerAcquisitionLinkExtraCustomer.java

@@ -20,6 +20,8 @@ public class CorpCustomerAcquisitionLinkExtraCustomer extends BaseEntity{
 	@NotNull
 	private Integer serviceId;
 
+	private String followId;
+
 	/**
 	 * 值班日期
 	 */

+ 5 - 3
netflix-dao/src/main/java/com/cyksj/model/entity/CorpUserPayIntention.java

@@ -18,6 +18,10 @@ public class CorpUserPayIntention extends BaseEntity {
 
 	/**
 	 * 意向 0无回复 1无意向 2.问相关问题 3有意向 4很有意向
+	 *  无回复、无意向:合并为无意向
+	 * 问相关问题、有意向合并为有意向
+	 * 很有意向改为有下单意向
+	 * 0 无意向 1.有意向 2.下单意向
 	 */
 	private Integer intention;
 
@@ -28,11 +32,9 @@ public class CorpUserPayIntention extends BaseEntity {
 
 	@Getter
 	public enum Intention {
-		whf("无回复", "etvj2DPQAA13a2LWPMwCikcmnp6T40FA"),
 		wyx("无意向", "etvj2DPQAASnQouiyPZD9el0QLLSNs8Q"),
-		wxgwt("问相关问题", "etvj2DPQAAUOcl8WGtkF27Ul_V7ixF4A"),
 		yyx("有意向", "etvj2DPQAA41WEz2wXpuLlf1XzKTnK9g"),
-		hyyx("很有意向", "etvj2DPQAAPQOeqPoY-ByfdmCrC3PDkw");
+		xdyx("下单意向", "etvj2DPQAAPQOeqPoY-ByfdmCrC3PDkw");
 		String tagName;
 
 		String tagId;

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/DistributeExtraRebateConfig.java

@@ -0,0 +1,20 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: DistributeExtraRebateConfig
+ * 创建者: JavaZou
+ * 创建时间:2024/5/29 15:10
+ */
+@Getter
+@Setter
+public class DistributeExtraRebateConfig extends BaseEntity{
+	private BigDecimal multiple;
+
+	private BigDecimal rate;
+}

+ 15 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/DistributeWaitingSendPoints.java

@@ -29,6 +29,21 @@ public class DistributeWaitingSendPoints extends BaseEntity{
 
 	private BigDecimal points;
 
+	/**
+	 * 额外返利积分(目前只针对普通推广)
+	 */
+	private BigDecimal extraRebate;
+
+	/**
+	 * 倍数
+	 */
+	private BigDecimal extraMultiple;
+
+	/**
+	 * 原本积分奖励
+	 */
+	private BigDecimal oriPoints;
+
 	private BigDecimal refundPoints;
 
 	/**

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

@@ -31,6 +31,11 @@ public class ExchangeCode extends BaseEntity{
 	 */
 	private Boolean useStatus;
 
+	/**
+	 * 订单状态
+	 */
+	private String orderStatus;
+
 	/**
 	 * 使用时间
 	 */

+ 47 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDonQa.java

@@ -0,0 +1,47 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: GoodsDonQa
+ * 创建者: JavaZou
+ * 创建时间:2024/5/24 11:47
+ */
+@Getter
+@Setter
+public class GoodsDonQa extends BaseEntity{
+
+	/**
+	 * 1.售前,2.售后
+	 */
+	private Integer type;
+
+	private String problem;
+
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private String content;
+
+	/**
+	 * 跳转链接
+	 */
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private String url;
+
+	private Boolean status;
+
+	private Boolean deleted;
+
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Integer sorted;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private List<Long> goodsIds;
+}

+ 22 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDonQaRelate.java

@@ -0,0 +1,22 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: GoodsDonQaRelate
+ * 创建者: JavaZou
+ * 创建时间:2024/5/24 11:49
+ */
+
+@Getter
+@Setter
+public class GoodsDonQaRelate extends BaseEntity{
+
+	private Long questionId;
+
+	private Long goodsId;
+
+	private Boolean deleted;
+}

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

@@ -103,6 +103,11 @@ public class GroupsRelation extends BaseEntity {
     @DbIgnore
     private Integer maxNum;
 
+    /**
+     * 车票获取类型 默认1购买,2.体验
+     */
+    private Integer aqType;
+
 
     @AllArgsConstructor
     @Getter

+ 24 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GroupsRelationExpiryNotifyRecord.java

@@ -0,0 +1,24 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: GroupsRelationExpiryNotifyRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/5/24 14:55
+ */
+@Getter
+@Setter
+public class GroupsRelationExpiryNotifyRecord extends BaseEntity{
+	private Long userId;
+
+	private Long relationId;
+
+	private Long skuId;
+
+	private Date expiryTime;
+}

+ 39 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/MidjourneyPaintingPlaza.java

@@ -0,0 +1,39 @@
+package com.cyksj.model.entity;
+
+import com.cyksj.model.BaseEntity;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: MidjourneyPaintingPlaza
+ * 创建者: JavaZou
+ * 创建时间:2024/6/3 17:19
+ */
+@Getter
+@Setter
+public class MidjourneyPaintingPlaza extends BaseEntity {
+	/**
+	 * 提示词
+	 */
+	private String tips;
+
+	/**
+	 * 图片
+	 */
+	private String img;
+
+	/**
+	 * 备注
+	 */
+	private String remark;
+
+	/**
+	 * 复制次数
+	 */
+	private Integer copyNum;
+
+	private Boolean status;
+
+	private Boolean deleted;
+}

+ 8 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/MidjourneyUser.java

@@ -6,6 +6,7 @@ package com.cyksj.model.entity;
  */
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Data;
 
@@ -54,4 +55,11 @@ public class MidjourneyUser extends BaseEntity{
      * 当前模式 1:fast 2:relax
      */
     private Integer mode;
+
+    /**
+     * 车票类型 2试用
+     */
+    @DbIgnore
+    @TableField(exist = false)
+    private Integer aqType;
 }

+ 31 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/MirrorNotice.java

@@ -0,0 +1,31 @@
+package com.cyksj.model.entity;
+
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author chan
+ * @date 2024/6/21 14:57
+ */
+@Data
+@SearchBean(tables = "mirror_notice")
+public class MirrorNotice extends BaseEntity implements Serializable {
+
+    /**
+     * 平台 MJ GPT
+     */
+    private String platform;
+
+    /**
+     * 富文本
+     */
+    private String text;
+
+    /**
+     * 状态
+     */
+    private Boolean status;
+
+}

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

@@ -290,6 +290,10 @@ public class OrderDon extends BaseEntity implements Serializable {
      */
     private String phone;
 
+    @DbIgnore
+    @TableField(exist = false)
+    private Boolean isMirror;
+
     public enum Status {
         /**
          * 订单状态

+ 24 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDonExceptionUserRecord.java

@@ -0,0 +1,24 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderDonExceptionUserRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/6/21 11:34
+ */
+@Getter
+@Setter
+public class OrderDonExceptionUserRecord extends BaseEntity{
+	private Long orderId;
+
+	private Long userId;
+
+	private String ip;
+
+	private String buyerId;
+
+	private String address;
+}

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/SysCorpFollow.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: SysCorpFollow
+ * 创建者: JavaZou
+ * 创建时间:2024/6/12 11:51
+ */
+@Getter
+@Setter
+public class SysCorpFollow extends BaseEntity{
+	private String name;
+
+	private Boolean deleted;
+}

+ 29 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/SysCorpFollowRelate.java

@@ -0,0 +1,29 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: SysCorpFollowRelate
+ * 创建者: JavaZou
+ * 创建时间:2024/6/12 11:52
+ */
+@Getter
+@Setter
+public class SysCorpFollowRelate extends BaseEntity{
+	private Long mid;
+
+	private String name;
+
+	private String followId;
+
+	/**
+	 * 激活状态: 1=已激活,2=已禁用,4=未激活,5=退出企业
+	 */
+	private Integer status;
+
+	private String img;
+
+	private Boolean deleted;
+}

+ 7 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UpgradeOrderDon.java

@@ -24,6 +24,8 @@ public class UpgradeOrderDon extends BaseEntity {
      */
     private Long goodsId;
 
+    private Long skuId;
+
     /**
      * 套餐id
      */
@@ -43,6 +45,11 @@ public class UpgradeOrderDon extends BaseEntity {
 
     private String transactionId;
 
+    /**
+     * 时间
+     * */
+    private Long time;
+
     private Integer num;
 
     private BigDecimal price;

+ 19 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/UpgradePackage.java

@@ -1,5 +1,7 @@
 package com.cyksj.model.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -24,13 +26,29 @@ public class UpgradePackage extends BaseEntity{
     /**
      * 商品规格id
      */
-    private Long skuId;
+    private String skuIds;
+
+    /**
+     * 升级规格
+     */
+    private Long upgradeSkuId;
+
+    /**
+     * gpt类型,0.车票套餐
+     */
+    private Integer gptType;
 
     /**
      * 套餐价格
      */
     private BigDecimal price;
 
+    /**
+     * 时间限制
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long time;
+
     /**
      * 数量
      */

+ 19 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserGoodsNewbieGuideRecord.java

@@ -0,0 +1,19 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: UserGoodsNewbieGuideRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/5/27 12:12
+ */
+@Getter
+@Setter
+public class UserGoodsNewbieGuideRecord extends BaseEntity{
+
+	private Long userId;
+
+	private Long goodsId;
+}

+ 27 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserReceiveTrialTicketRecord.java

@@ -0,0 +1,27 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserReceiveTrialTicketRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/6/3 17:53
+ */
+@Getter
+@Setter
+public class UserReceiveTrialTicketRecord extends BaseEntity{
+	private Long userId;
+
+	private Long goodsId;
+
+	private Long skuId;
+
+	private Long relationId;
+
+	/**
+	 * mj会话 user_id
+	 */
+	private Long mjUserId;
+}

+ 16 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserTrialTicketJumpPayRecord.java

@@ -0,0 +1,16 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserTrialTicketJumpPayRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/6/3 18:26
+ */
+@Getter
+@Setter
+public class UserTrialTicketJumpPayRecord extends BaseEntity {
+	private Long orderId;
+}

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

@@ -1,6 +1,7 @@
 package com.cyksj.model.manage.views;
 
 import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Data;
 
@@ -74,4 +75,10 @@ public class CorpMsgAuditUserView {
      */
     @DbField("cr.add_created_time")
     private Date addCreatedTime;
+
+    @DbField("c.unionid")
+    private String unionId;
+
+    @DbIgnore
+    private Integer intention;
 }

+ 5 - 1
netflix-dao/src/main/java/com/cyksj/model/manage/views/CorpWxOrderDonView.java

@@ -19,7 +19,8 @@ import java.util.Date;
 @Setter
 @SearchBean(tables = "order_don o left join goods_don_sku sku on o.sku_id = sku.id " +
 		"left join goods_don g on g.id = sku.goods_id " +
-		"left join groups_relation gr on gr.user_id = o.user_id")
+		"left join groups_relation gr on gr.id = o.relation_id " +
+		"left join user u on u.id = o.user_id")
 public class CorpWxOrderDonView {
 	@DbField("o.id")
 	private Long id;
@@ -83,4 +84,7 @@ public class CorpWxOrderDonView {
 
 	@DbField("o.pay_title")
 	private String payTitle;
+
+	@DbField("u.nickname")
+	private String nickname;
 }

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

@@ -161,4 +161,7 @@ public class OrderDonSearchView {
 	 */
 	@DbField("o.ex_code")
 	private String exCode;
+
+	@DbField("sku.is_mirror")
+	private Boolean isMirror;
 }

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

@@ -95,6 +95,9 @@ public class OrderDonView {
     @DbField("o.status")
     private OrderDon.Status status;
 
+    @DbField("sku.is_mirror")
+    private Boolean isMirror;
+
     @DbField("o.type")
     private OrderDon.Type type;
 

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/manage/views/UpgradeOrderDonBackView.java

@@ -22,7 +22,7 @@ import java.util.List;
 @Setter
 @SearchBean(tables = "upgrade_order_don o left join upgrade_package up on o.package_id = up.id " +
 		"left join goods_don g on up.goods_id = g.id " +
-		"left join goods_don_sku gds on up.sku_id = gds.id ",
+		"left join goods_don_sku gds on o.sku_id = gds.id ",
 		where = ":condition:"
 )
 public class UpgradeOrderDonBackView {

+ 4 - 8
netflix-dao/src/main/java/com/cyksj/model/manage/views/UpgradeOrderDonSearchView.java

@@ -1,20 +1,13 @@
 package com.cyksj.model.manage.views;
 
-import com.cyksj.model.entity.GoodsDon;
-import com.cyksj.model.entity.OrderDon;
-import com.cyksj.model.entity.OrderDonWaybill;
 import com.cyksj.model.entity.UpgradeOrderDon;
-import com.cyksj.model.views.GoodsDonSkuView;
 import com.ejlchina.searcher.bean.DbField;
-import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Getter;
 import lombok.Setter;
 
 import java.math.BigDecimal;
 import java.util.Date;
-import java.util.List;
 
 /*
  *项目名: netflix
@@ -26,7 +19,7 @@ import java.util.List;
 @Setter
 @SearchBean(tables = "(select * from upgrade_order_don :orderId:) o left join upgrade_package up on o.package_id = up.id " +
 		"left join goods_don g on g.id = up.goods_id " +
-		"left join goods_don_sku gs on gs.id = up.sku_id ")
+		"left join goods_don_sku gs on gs.id = o.sku_id ")
 public class UpgradeOrderDonSearchView {
 	@DbField("o.id")
 	private Long id;
@@ -40,6 +33,9 @@ public class UpgradeOrderDonSearchView {
 	@DbField("up.num")
 	private Integer num;
 
+	@DbField("g.id")
+	private Long goodsId;
+
 	@DbField("g.title")
 	private String title;
 

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/manage/views/UpgradeOrderDonView.java

@@ -24,7 +24,7 @@ import java.util.List;
 @Setter
 @SearchBean(tables = "upgrade_order_don o left join upgrade_package up on o.package_id = up.id " +
         "left join goods_don g on g.id = o.goods_id " +
-        "left join goods_don_sku sku on up.sku_id = sku.id ")
+        "left join goods_don_sku sku on o.sku_id = sku.id ")
 public class UpgradeOrderDonView {
 
     @DbField("o.id")

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/request/ChannelPayReq.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: ChannelPayReq
+ * 创建者: JavaZou
+ * 创建时间:2024/5/31 13:57
+ */
+@Getter
+@Setter
+public class ChannelPayReq {
+	private String wxShopId;
+
+	private String zfbShopId;
+}

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

@@ -175,4 +175,9 @@ public class OrderPayRequest {
      * 源订单id
      */
     private Long originalOrderId;
+
+    /**
+     * 是否是试用车票跳转
+     */
+    private Boolean isTrial;
 }

+ 40 - 0
netflix-dao/src/main/java/com/cyksj/model/request/sys/SysCorpFollowReq.java

@@ -0,0 +1,40 @@
+package com.cyksj.model.request.sys;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: SysCorpFollowReq
+ * 创建者: JavaZou
+ * 创建时间:2024/6/12 11:55
+ */
+@Getter
+@Setter
+public class SysCorpFollowReq {
+	private Long mid;
+
+	/**
+	 * 客服名
+	 */
+	private String name;
+
+	/**
+	 * 子账号id
+	 */
+	private Long sid;
+
+	/**
+	 * 企业客服名
+	 */
+	private String followName;
+
+	/**
+	 * 企业客服id
+	 */
+	private String followId;
+
+	private Integer status;
+
+	private String img;
+}

+ 33 - 0
netflix-dao/src/main/java/com/cyksj/model/views/ChatGptUserView.java

@@ -3,6 +3,7 @@ package com.cyksj.model.views;
 import lombok.Builder;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -37,4 +38,36 @@ public class ChatGptUserView {
      * 使用次数
      */
     private Long use;
+
+    /**
+     * 是否可升级套餐
+     */
+    private Boolean upgrade;
+
+    /**
+     * 原订单id
+     */
+    private Long orderId;
+
+    private Long goodsId;
+
+    /**
+     * 规格
+     */
+    private Long skuId;
+
+    /**
+     * 月份
+     */
+    private Integer months;
+
+    /**
+     * 目前套餐id
+     */
+    private Long packageId;
+
+    /**
+     * 目前套餐价格
+     */
+    private BigDecimal packagePrice;
 }

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/views/CorpCustomerAcquisitionLinkExtraCustomerView.java

@@ -29,7 +29,7 @@ public class CorpCustomerAcquisitionLinkExtraCustomerView {
 	private String linkName;
 
 	@DbField("cc.service_id")
-	private Integer serviceId;
+	private Long serviceId;
 
 	@DbField("cc.duty_date")
 	private String dutyDate;

+ 12 - 0
netflix-dao/src/main/java/com/cyksj/model/views/DistributePopularizeOrdersView.java

@@ -47,9 +47,21 @@ public class DistributePopularizeOrdersView {
 	@DbField("dw.points")
 	private BigDecimal points;
 
+	@DbField("dw.extra_rebate")
+	private BigDecimal extraRebate;
+
+	/**
+	 * 原本积分奖励
+	 */
+	@DbField("dw.ori_points")
+	private BigDecimal oriPoints;
+
 	@DbIgnore
 	private BigDecimal waitGetMoney;
 
+	@DbIgnore
+	private BigDecimal oriGetMoney;
+
 	@DbField("dw.send_status")
 	private String sendStatus;
 

+ 77 - 0
netflix-dao/src/main/java/com/cyksj/model/views/ExternalExchangeCodeView.java

@@ -0,0 +1,77 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: ExternalExchangeCodeView
+ * 创建者: JavaZou
+ * 创建时间:2024/6/11 15:02
+ */
+@Getter
+@Setter
+@SearchBean(tables = "exchange_code ec left join user u on u.id = ec.user_id" +
+		" left join goods_don gd on ec.goods_id = gd.id" +
+		" left join goods_don_sku gdk on gdk.id = ec.sku_id",
+		where = "ec.type = 0",
+		orderBy = "ec.id desc")
+public class ExternalExchangeCodeView {
+	@DbField("ec.id")
+	private Long id;
+
+	@DbField("ec.code")
+	private String code;
+
+	@DbField("ec.goods_id")
+	private Long goodsId;
+
+	@DbField("ec.sku_id")
+	private Long skuId;
+
+	/**
+	 * 平台名称
+	 */
+	@DbField("gd.title")
+	private String title;
+
+	/**
+	 * 规格名称,金额
+	 */
+	@DbField("gdk.spec_val")
+	private String specVal;
+
+	/**
+	 * 使用状态
+	 */
+	@DbField("ec.use_status")
+	private Boolean useStatus;
+
+	/**
+	 * 订单状态
+	 */
+	@DbField("ec.order_status")
+	private String orderStatus;
+
+	/**
+	 * 使用时间
+	 */
+	@DbField("ec.use_time")
+	private Date useTime;
+
+	/**
+	 * 使用人id
+	 */
+	@DbField("ec.user_id")
+	private Long userId;
+
+	/**
+	 * 生成日期
+	 */
+	@DbField("ec.created_time")
+	private Date createdTime;
+}

+ 42 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDetailView.java

@@ -0,0 +1,42 @@
+package com.cyksj.model.views;
+
+import com.cyksj.model.entity.GoodsDonSku;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: GoodsDetailView
+ * 创建者: JavaZou
+ * 创建时间:2024/5/31 14:15
+ */
+@Getter
+@Setter
+@SearchBean(tables = "goods_don g", where = ":condition:")
+public class GoodsDetailView {
+	@DbField("g.id")
+	private Long id;
+
+	/**
+	 * 1.虚拟,2.实物,3.潮玩,4.租赁
+	 */
+	@DbField("g.type")
+	private Integer type;
+
+	@DbField("g.title")
+	private String title;
+
+	@DbField("g.status")
+	private Boolean status;
+
+	@DbField("g.deleted")
+	private Boolean deleted;
+
+	@DbIgnore
+	private List<GoodsDonSku> skuList;
+}

+ 37 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonQaFrontView.java

@@ -0,0 +1,37 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: GoodsDonQaFrontView
+ * 创建者: JavaZou
+ * 创建时间:2024/5/27 11:07
+ */
+@Getter
+@Setter
+@SearchBean(tables = "goods_don_qa_relate gr inner join goods_don_qa ga on ga.id = gr.question_id",
+		where = "ga.status is true and ga.deleted is true",
+		orderBy = "ga.sorted asc,ga.update_time desc")
+public class GoodsDonQaFrontView {
+	@DbField("ga.id")
+	private Long id;
+
+	@DbField("ga.problem")
+	private String problem;
+
+	@DbField("ga.type")
+	private Integer type;
+
+	@DbField("gr.goods_id")
+	private Long goodsId;
+
+	@DbField("ga.content")
+	private String content;
+
+	@DbField("ga.url")
+	private String url;
+}

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonQaGoodsView.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.views;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: GoodsDonQaGoodsView
+ * 创建者: JavaZou
+ * 创建时间:2024/5/27 13:33
+ */
+@Getter
+@Setter
+public class GoodsDonQaGoodsView {
+	private Long goodsId;
+
+	private String title;
+}

+ 47 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonQaView.java

@@ -0,0 +1,47 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: GoodsDonQaView
+ * 创建者: JavaZou
+ * 创建时间:2024/5/24 16:04
+ */
+@Getter
+@Setter
+@SearchBean(tables = "goods_don_qa gq left join goods_don_qa_relate gqr on gqr.question_id = gq.id" +
+		" left join goods_don g on g.id = gqr.goods_id",
+		where = "gq.deleted is true",
+		orderBy = "gq.sorted is null asc,gq.sorted asc",
+		groupBy = "gq.id,gq.type,gq.problem,gq.status,gq.created_time,gq.update_time")
+public class GoodsDonQaView {
+	@DbField("gq.id")
+	private Long id;
+
+	@DbField("gq.type")
+	private Integer type;
+
+	@DbField("gq.problem")
+	private String problem;
+
+	@DbField("GROUP_CONCAT(g.title)")
+	private String title;
+
+	@DbField("gq.status")
+	private Boolean status;
+
+	@DbField("gq.sorted")
+	private Integer sorted;
+
+	@DbField("gq.created_time")
+	private Date createdTime;
+
+	@DbField("gq.update_time")
+	private Date updateTime;
+}

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

@@ -169,4 +169,7 @@ public class GoodsFrontListView {
 
 	@DbIgnore
 	private OrderCommentFrontView comments;
+
+	@DbIgnore
+	private List<GoodsDonQaFrontView> questions;
 }

+ 29 - 0
netflix-dao/src/main/java/com/cyksj/model/views/MidjourneyPaintingUserView.java

@@ -0,0 +1,29 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: MidjourneyPaintingUserView
+ * 创建者: JavaZou
+ * 创建时间:2024/6/4 13:54
+ */
+@Getter
+@Setter
+@SearchBean(tables = "midjourney_painting_plaza mpp",
+		where = "mpp.status is true and mpp.deleted is true",
+		orderBy = "mpp.update_time desc")
+public class MidjourneyPaintingUserView {
+
+	@DbField("mpp.id")
+	private Long id;
+
+	@DbField("mpp.tips")
+	private String tips;
+
+	@DbField("mpp.img")
+	private String img;
+}

+ 30 - 0
netflix-dao/src/main/java/com/cyksj/model/views/MidjourneyUserPaintingDayRecordView.java

@@ -0,0 +1,30 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: MidjourneyUserPaintingDayRecordView
+ * 创建者: JavaZou
+ * 创建时间:2024/6/4 15:42
+ */
+@Getter
+@Setter
+@SearchBean(tables = "midjourney_user_conversation mc"
+		, where = "mc.status = 'SUCCESS' :condition:"
+		, groupBy = "DATE_FORMAT(mc.created_time,'%Y-%m-%d')",
+		orderBy = "DATE_FORMAT(mc.created_time,'%Y-%m-%d') desc")
+public class MidjourneyUserPaintingDayRecordView {
+
+	@DbField("DATE_FORMAT(mc.created_time,'%Y-%m-%d')")
+	private String date;
+
+	@DbIgnore
+	private List<MidjourneyUserPaintingRecordView> list;
+}

+ 36 - 0
netflix-dao/src/main/java/com/cyksj/model/views/MidjourneyUserPaintingRecordView.java

@@ -0,0 +1,36 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: MidjourneyUserPaintingRecordView
+ * 创建者: JavaZou
+ * 创建时间:2024/6/4 15:40
+ */
+@Getter
+@Setter
+@SearchBean(tables = "midjourney_user_conversation mc",
+		where = "mc.status = 'SUCCESS' :condition: :date:")
+public class MidjourneyUserPaintingRecordView {
+
+	/**
+	 * 提示词
+	 */
+	@DbField("mc.prompt")
+	private String prompt;
+
+	@DbField("mc.image_url")
+	private String imageUrl;
+
+	@DbField("bookmark")
+	private Boolean bookmark;
+
+	@DbField("mc.created_time")
+	private Date createdTime;
+}

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/views/RefundUpdradeOrderDonView.java

@@ -18,7 +18,7 @@ import java.util.Date;
 @Getter
 @Setter
 @SearchBean(tables = "refund_upgrade_order_don rd left join upgrade_order_don o on o.id = rd.order_id " +
-		"left join upgrade_package up on up.id = o.package_id left join goods_don_sku s on s.id = up.sku_id")
+		"left join upgrade_package up on up.id = o.package_id left join goods_don_sku s on s.id = o.sku_id")
 public class RefundUpdradeOrderDonView {
 	@DbField("rd.id")
 	private Long id;

+ 54 - 1
netflix-dao/src/main/java/com/cyksj/model/views/RenewalView.java

@@ -97,7 +97,6 @@ public class RenewalView {
     private Long userId;
 
     @DbField("gr.expiry_time")
-    @JsonIgnore
     private Date expiryTime;
 
     @DbIgnore
@@ -160,6 +159,12 @@ public class RenewalView {
     @DbField("gr.yhs_id")
     private Long yhsId;
 
+    /**
+     * 车票获取类型 默认1购买,2.体验
+     */
+    @DbField("gr.aq_type")
+    private Integer aqType;
+
     @DbIgnore
     private Date payTime;
 
@@ -204,4 +209,52 @@ public class RenewalView {
      */
     @DbIgnore
     private BigDecimal mjPackagePrice;
+
+    /**
+     * 用户 mj fast次数
+     */
+    @DbIgnore
+    private Integer mjUserFastNum;
+
+    /**
+     * 用户 mj relax次数
+     */
+    @DbIgnore
+    private Integer mjUserRelaxNum;
+
+    /**
+     * gpt 用户镜像限制次数
+     */
+    @DbIgnore
+    private Integer gptUserLimitNum;
+
+    /**
+     * gpt 用户镜像限制时间
+     */
+    @DbIgnore
+    private Long gptUserLimitTime;
+
+    @DbIgnore
+    private Long use;
+
+    /**
+     * 是否可升级套餐 (标准,专业)
+     */
+    @DbIgnore
+    private Boolean upgrade;
+
+    @DbIgnore
+    private Long packageId;
+
+    /**
+     * 目前已升级套餐价格
+     */
+    @DbIgnore
+    private BigDecimal packagePrice;
+
+    /**
+     * 是否有配置售后问题
+     */
+    @DbIgnore
+    private Boolean qa;
 }

+ 92 - 0
netflix-dao/src/main/java/com/cyksj/model/views/SysCorpFollowView.java

@@ -0,0 +1,92 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: SysCorpFollowView
+ * 创建者: JavaZou
+ * 创建时间:2024/6/12 12:02
+ */
+@Getter
+@Setter
+@SearchBean(tables = "sys_corp_follow sf left join sys_corp_follow_relate sfr on sf.id = sfr.mid",
+		where = "sf.deleted is true and sfr.deleted is true",
+		orderBy = "sf.id,sfr.update_time desc")
+public class SysCorpFollowView {
+	@DbField("sf.id")
+	private Long mid;
+
+	@DbField("sf.name")
+	private String name;
+
+	@DbField("sfr.id")
+	private Long sid;
+
+	@DbField("sfr.name")
+	private String followName;
+
+	@DbField("sfr.follow_id")
+	private String followId;
+
+	@DbField("sfr.img")
+	private String img;
+
+	/**
+	 * 激活状态: 1=已激活,2=已禁用,4=未激活,5=退出企业
+	 */
+	@DbField("sfr.status")
+	private Integer status;
+
+	@DbField("sfr.update_time")
+	private Date updateTime;
+
+	@DbIgnore
+	private Integer numOfCorpUser;
+
+	@DbIgnore
+	List<SysCorpFollowRelateView> subList;
+
+	public String getShowName() {
+		StringBuilder sb = new StringBuilder();
+		sb.append(name).append("(").append(followName).append(")");
+		return sb.toString();
+	}
+
+
+	@Getter
+	@Setter
+	@SearchBean(tables = "sys_corp_follow_relate sfr",
+			where = "sfr.deleted is true"
+			, orderBy = "sfr.update_time desc")
+	public class SysCorpFollowRelateView {
+
+		@DbField("sfr.id")
+		private Long sid;
+
+		@DbField("sfr.mid")
+		private Long mid;
+
+		@DbField("sfr.name")
+		private String followName;
+
+		@DbField("sfr.follow_id")
+		private String followId;
+
+		@DbField("sfr.img")
+		private String img;
+
+		/**
+		 * 激活状态: 1=已激活,2=已禁用,4=未激活,5=退出企业
+		 */
+		@DbField("sfr.status")
+		private Integer status;
+	}
+}

+ 24 - 0
netflix-dao/src/main/java/com/cyksj/model/views/SysCorpMasterFollowView.java

@@ -0,0 +1,24 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: SysCorpMasterFollowView
+ * 创建者: JavaZou
+ * 创建时间:2024/6/19 11:20
+ */
+@Getter
+@Setter
+@SearchBean(tables = "sys_corp_follow sf",
+		where = "sf.deleted is true")
+public class SysCorpMasterFollowView {
+	@DbField("sf.id")
+	private Long mid;
+
+	@DbField("sf.name")
+	private String name;
+}

+ 3 - 2
netflix-dao/src/main/java/com/cyksj/model/views/TicketView.java

@@ -13,8 +13,9 @@ import java.util.Date;
 @SearchBean(tables = "groups_relation gr left join groups_trips gt on gt.id = gr.groups_id" +
 		" left join account a on a.id = gt.account_id" +
 		" left join goods_don gd on gd.id = a.goods_id" +
-		" left join goods_don_sku gdk on gdk.id = gt.sku_id")
-public class TicketView{
+		" left join goods_don_sku gdk on gdk.id = gt.sku_id",
+		where = ":condition:")
+public class TicketView {
 	@DbField("gr.user_id")
 	private Long userId;
 

+ 25 - 6
netflix-dao/src/main/java/com/cyksj/model/views/UpgradePackageView.java

@@ -1,7 +1,7 @@
 package com.cyksj.model.views;
 
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Data;
 
@@ -12,8 +12,9 @@ import java.math.BigDecimal;
  * @date 2024/4/24 15:20
  */
 @Data
-@SearchBean(tables = "upgrade_package up left join goods_don g on up.goods_id = g.id " +
-        "left join goods_don_sku s on up.sku_id = s.id", where = "up.deleted = true")
+@SearchBean(tables = "upgrade_package up left join goods_don g on up.goods_id = g.id "
+        , where = "up.deleted = true :sku:",
+        orderBy = "up.num asc")
 public class UpgradePackageView {
     @DbField("up.id")
     private Long id;
@@ -39,13 +40,25 @@ public class UpgradePackageView {
     /**
      * 商品规格id
      */
-    @DbField("up.sku_id")
-    private Long skuId;
+    @DbField("up.sku_ids")
+    private String skuIds;
+
+    /**
+     * 升级规格
+     */
+    @DbField("up.upgrade_sku_id")
+    private Long upgradeSkuId;
+
+    /**
+     * gpt类型,0.车票套餐
+     */
+    @DbField("up.gpt_type")
+    private Integer gptType;
 
     /**
      * 商品规格名称
      */
-    @DbField("s.spec_val")
+    @DbIgnore
     private String specVal;
 
     /**
@@ -54,6 +67,12 @@ public class UpgradePackageView {
     @DbField("up.price")
     private BigDecimal price;
 
+    /**
+     * 小时
+     */
+    @DbField("up.time")
+    private Integer time;
+
     /**
      * 数量
      */

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/views/UserInfoView.java

@@ -18,4 +18,9 @@ public class UserInfoView {
 	private String img;
 
 	private String nickname;
+
+	/**
+	 * 是否是设备分销
+	 */
+	private Boolean isEp;
 }

+ 2 - 14
netflix-dao/src/main/java/com/cyksj/model/views/YHLXUserDetailView.java

@@ -2,11 +2,10 @@ package com.cyksj.model.views;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.cyksj.model.entity.Address;
-import com.cyksj.model.manage.views.CorpWxOrderDonView;
+import com.cyksj.model.entity.User;
 import com.ejlchina.searcher.bean.DbField;
 import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -35,7 +34,6 @@ public class YHLXUserDetailView {
 	private String nickname;
 
 	@DbField("u.unionid")
-	@JsonIgnore
 	private String unionId;
 
 	/**
@@ -57,17 +55,7 @@ public class YHLXUserDetailView {
 	@TableField(exist = false)
 	private Address address;
 
-	/**
-	 * 车票信息
-	 */
-	@DbIgnore
-	@TableField(exist = false)
-	private List<TicketView> ticketViews;
-
-	/**
-	 * 订单信息
-	 */
 	@DbIgnore
 	@TableField(exist = false)
-	private List<CorpWxOrderDonView> orderDonViews;
+	private List<User> userBindInfos;
 }

+ 1 - 1
netflix-dao/src/main/resources/mapper/CorpCustomerAcquisitionLinkMapper.xml

@@ -8,7 +8,7 @@
         from corp_customer_acquisition_link
         where user_list != '[]' and
         <foreach collection="list" item="item" open="(" separator="OR" close=")">
-            JSON_CONTAINS(user_list, '${item}')
+            JSON_CONTAINS(user_list, '"${item}"')
         </foreach>
     </select>
 

+ 4 - 0
netflix-dao/src/main/resources/mapper/CorpUserFollowRelationMapper.xml

@@ -137,4 +137,8 @@
                  inner join corp_user_follow_relation cufr on cufr.corp_user_id = ca.external_userid
         where cufr.follow_id = #{followId} limit 1
     </select>
+
+    <select id="selectNumOfCorpuserByFollowId" resultType="java.lang.Integer">
+        select count(distinct corp_user_id) from corp_user_follow_relation cufr where cufr.follow_id = #{followId} and status = 1
+    </select>
 </mapper>

+ 14 - 0
netflix-dao/src/main/resources/mapper/GoodsDonQaRelateMapper.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.cyksj.mapper.GoodsDonQaRelateMapper">
+
+
+    <insert id="batchInsert">
+        insert ignore into
+        goods_don_qa_relate(`question_id`,`goods_id`,`created_time`,`update_time`)
+        values
+        <foreach collection="list" item="item" separator=",">
+            (#{id},#{item},now(),now())
+        </foreach>
+    </insert>
+</mapper>

+ 29 - 6
netflix-dao/src/main/resources/mapper/GroupRelationMapper.xml

@@ -17,7 +17,8 @@
         send_time = null,
         submit_time = null,
         operator = null,
-        yhs_id = 0
+        yhs_id = 0,
+        aq_type = 1
         where id = #{entity.id}
         <if test="expireTime != null">
             and expiry_time = #{expireTime}
@@ -210,17 +211,23 @@
         when category = 3 then 755
         else 666 end
         ) as sorted
-        from `goods_don` where id not in
-        <foreach collection="list" item="item" open="(" separator="," close=")">
-            #{item}
-        </foreach>
+        from `goods_don` where deleted is true and status is true
+        <if test="list!=null and list.size()>0">
+            and id not in
+            <foreach collection="list" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
         <if test="isPayNf">
             and type in (1,2)
         </if>
         <if test="!isPayNf">
             and type = 1
         </if>
-        and deleted is true and status is true) s order by s.sorted desc,sort_by asc
+        <if test="filterCourseGoods!=null and filterCourseGoods">
+            and (special_type is null or special_type != 'courseware')
+        </if>
+        ) s order by s.sorted desc,sort_by asc
     </select>
 
     <select id="getOutSideGroupsTripsRelationByGoodsId" resultType="java.lang.Long">
@@ -340,4 +347,20 @@
         group by g.id,g.title,g.logo
         order by goods_id
     </select>
+
+    <select id="getExperienceTicket" resultType="java.lang.Long">
+        select gr.id
+        from (select id, groups_id from groups_relation where user_id = #{userId}) gr
+                 inner join groups_trips gt on gt.id = gr.groups_id
+        where gt.sku_id = #{skuId} limit 1
+    </select>
+
+    <select id="selectGoodsDonQaByGoodsId" resultType="java.lang.Long">
+        select count(1)
+        from (select question_id from goods_don_qa_relate where goods_id = #{goodsId} and deleted is true) s
+                 inner join goods_don_qa qa on qa.id = s.question_id
+        where qa.type = 2
+          and qa.status is true
+          and qa.deleted is true
+    </select>
 </mapper>

+ 9 - 0
netflix-dao/src/main/resources/mapper/GroupsMapper.xml

@@ -98,4 +98,13 @@
         order by available_num asc
         limit 1
     </select>
+
+    <select id="selectCollegeStudentUserGptTicket" resultType="com.cyksj.model.entity.GroupsTrips">
+        select gt.id
+        from `groups_trips` gt
+        where gt.sku_id = #{skuId}
+          and gt.status = 'validity'
+          and gt.available_num > 0
+        order by rand() limit 1
+    </select>
 </mapper>

+ 14 - 0
netflix-dao/src/main/resources/mapper/GroupsRelationExpiryNotifyRecordMapper.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.cyksj.mapper.GroupsRelationExpiryNotifyRecordMapper">
+
+
+    <insert id="batchInsert">
+        insert into
+        groups_relation_expiry_notify_record(`user_id`,`relation_id`,`sku_id`,`expiry_time`,`created_time`,`update_time`)
+        values
+        <foreach collection="list" item="item" separator=",">
+            (#{userId},#{item.relationId},#{item.skuId},#{item.expiryTimeStr},now(),now())
+        </foreach>
+    </insert>
+</mapper>

+ 6 - 0
netflix-dao/src/main/resources/mapper/MidjourneyPaintingPlazaMapper.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.cyksj.mapper.MidjourneyPaintingPlazaMapper">
+
+
+</mapper>

+ 9 - 0
netflix-dao/src/main/resources/mapper/OrderDonMapper.xml

@@ -513,4 +513,13 @@
         from (select id from coupon_user where coupon_id = #{couponId}) cu
                  inner join order_don o on o.coupon_user_id = cu.id and o.status not in ('close', 'noPayment')
     </select>
+
+    <select id="checkUserHasPaidMjMirror" resultType="java.lang.Integer">
+        select count(1) from order_don where user_id in
+        <foreach collection="list" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+        and status not in ('close','noPayment','refund') and sku_id in (select id from goods_don_sku where goods_id = 26 and
+        is_mirror = 1)
+    </select>
 </mapper>

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

@@ -72,7 +72,7 @@
     </select>
 
     <select id="getMonthAiExNumOfUser" resultType="java.lang.Integer">
-        select count(distinct buyer_id)
+        select count(distinct user_id)
         from `order_don` od
         where status not in ('close','noPayment')
         and (refund_money is null or refund_money != money)
@@ -84,7 +84,7 @@
     </select>
 
     <select id="getMonthAiExNumOfUserByType" resultType="java.lang.Integer">
-        select count(distinct buyer_id) from (select buyer_id
+        select count(distinct user_id) from (select user_id
         from `order_don` od
         where status not in ('close','noPayment')
         and (refund_money is null or refund_money != money)
@@ -98,7 +98,7 @@
         and (refund_money is null or refund_money != money)
         and created_time between #{thisMonth} and #{nextMonth}
         and order_type = #{type}
-        and buyer_id = s.buyer_id
+        and user_id = s.user_id
         and sku_id in
         <foreach collection="skuIds" item="item" open="(" separator="," close=")">
             #{item}
@@ -107,7 +107,7 @@
     </select>
 
     <select id="getMonthAiRenewNumOfUser" resultType="java.lang.Integer">
-        select count(distinct buyer_id)
+        select count(distinct user_id)
         from `order_don` od
         where status not in ('close','noPayment')
         and (refund_money is null or refund_money != money)

+ 14 - 0
netflix-dao/src/main/resources/mapper/UserMapper.xml

@@ -39,4 +39,18 @@
               having count(distinct buyer_id) > 4) o
                  inner join user u on u.id = o.user_id
     </select>
+
+    <select id="selectUserById" resultType="com.cyksj.model.entity.User">
+        select id,login_phone,email,headimgurl,nickname from user
+        where
+        <if test="pid != null">
+            id = #{pid}
+        </if>
+        <if test=" pid != null and eid != null">
+            or
+        </if>
+        <if test="eid != null">
+            id = #{eid}
+        </if>
+    </select>
 </mapper>

+ 6 - 0
netflix-service/pom.xml

@@ -40,6 +40,12 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.github.rholder</groupId>
+            <artifactId>guava-retrying</artifactId>
+            <version>2.0.0</version>
+        </dependency>
     </dependencies>
 
 </project>

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

@@ -773,6 +773,7 @@ public class RedisService {
         H5_WEB_CACHE("h5_web_cache", "h5首页平台缓存", 10 * 60),
         YH_HOME_PAGHE_CACHE("yh_home_paghe_cache:", "银河首页缓存", 30 * 60),
         YH_HOME_PAGHE_CACHE_SHOP("yh_home_paghe_cache:shop:", "银河首页店铺缓存", 40 * 60),
+        YH_GOODS_QUESTIONS_DETAIL("yh_goods_questions_detail:%s:%s", "平台售后问题", 60 * 60 * 24),
         REGISTER_HOME_PAGE_CACHE("register_home_page_cache:", "注册首页缓存", 10 * 60),
         CPS_BACK_LOGIN_KEY("cps_back_login:", "cps商务后台登录key", 3 * 60),
         CPS_AUTH_SUCCESS_KEY("cps_auth_success_key:%s", "cps后台微信授权", 60 * 10),
@@ -840,6 +841,7 @@ public class RedisService {
         MIDJOURNEY_ACCOUNT("midjourney:account:", "midjourney account", 60 * 60 * 48L),
         MIDJOURNEY_QUERY("midjourney:query:", "midjourney query", 60 * 60 * 2L),
 
+        APPLY_MONEY_DAY_LIMIT_KEY("apply_money_day_limit_key:%s:%s:%s", "每日提现次数限制", 60 * 60 * 24L),
 
         ;
 

+ 95 - 11
netflix-service/src/main/java/com/cyksj/service/chatgpt/impl/ChatGptAccountServiceImpl.java

@@ -1,8 +1,10 @@
 package com.cyksj.service.chatgpt.impl;
 
 import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.UUID;
+import cn.hutool.core.util.RandomUtil;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpResponse;
 import cn.hutool.http.HttpUtil;
@@ -11,10 +13,13 @@ import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
+import com.cyksj.common.util.Jsons;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.mapper.*;
+import com.cyksj.mapper.station.CollegeStudentStationUseTicketRecordMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.request.gpt.ConversationRequest;
 import com.cyksj.model.response.ConversationLimitResponse;
@@ -23,6 +28,7 @@ import com.cyksj.model.views.ChatGptUserView;
 import com.cyksj.model.views.ChatgptCarInfoView;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.chatgpt.ChatGptAccountService;
+import com.cyksj.service.sys.SysConfigService;
 import com.cyksj.service.user.UserBindRelationService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
@@ -95,6 +101,14 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
 
     private final ChatgptUserCarUsedRecordMapper chatgptUserCarUsedRecordMapper;
 
+    private final CollegeStudentStationUseTicketRecordMapper collegeStudentStationUseTicketRecordMapper;
+
+    private final UpgradePackageMapper upgradePackageMapper;
+
+    private final OrderDonMapper orderDonMapper;
+
+    private final SysConfigService sysConfigService;
+
     @Override
     public String addAccount(Account account) {
         if (isAccountExists(account)) {
@@ -241,7 +255,25 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
         GoodsDonSku goodsDonSku = skuMapper.selectById(groupsTrips.getSkuId());
         if (goodsDonSku != null && goodsDonSku.getIsMirror() && goodsDonSku.getIsCar()) {
             ChatgptUser chatgptUser = getChatgptCarUser(userId, relationId, groupsRelation, goodsDonSku);
+
             String DOMAIN = "https://chat.galaxydvd.com";
+            if(goodsDonSku.getId() == 444){
+                DOMAIN = "https://car.galaxydvd.com";
+            }else {
+                try {
+                    SysConfig sysConfig = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class).eq(SysConfig::getSysKey, "mirror_gpt_domain"));
+                    if (sysConfig != null) {
+                        String sysValue = sysConfig.getSysValue();
+                        if (JSONUtil.isJsonArray(sysValue)) {
+                            List<String> domainList = JSONUtil.parseArray(sysValue).toList(String.class);
+                            DOMAIN = domainList.get(RandomUtil.randomInt(domainList.size()));
+                        }
+                    }
+                }catch (Exception e){
+                    log.error("随机抽取域名错误. msg:{}", StringUtil.getErrorText(e));
+                }
+            }
+
             log.info("domain:{},用户:{},所在车次:{},座位id:{},在{}获取跳转GPT镜像的登录url", DOMAIN, userId, groupsTrips.getId(), relationId, DateTime.now());
             return DOMAIN + "/auth/logintoken?carid=" + carId + "&usertoken=" + chatgptUser.getUserToken();
         } else {
@@ -355,6 +387,17 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
             chatgptUser.setRelationId(groupsRelation.getId());
             chatgptUser.setUserToken(UUID.randomUUID().toString());
             chatgptUserMapper.insert(chatgptUser);
+
+            //是否是大学生限时车队
+            Date expiryTime = groupsRelation.getExpiryTime();
+            Date startTime = groupsRelation.getStartTime();
+            //大学生站 1天免费试用
+            if (DateUtil.between(startTime, expiryTime, DateUnit.DAY) <= 1) {
+                CollegeStudentStationUseTicketRecord useTicketRecord = new CollegeStudentStationUseTicketRecord();
+                useTicketRecord.setUserId(user.getId());
+                useTicketRecord.setUserToken(chatgptUser.getUserToken());
+                collegeStudentStationUseTicketRecordMapper.insert(useTicketRecord);
+            }
         } catch (DuplicateKeyException e) {
             log.error("重复插入镜像用户:{}token,errmsg:{}", user.getNickname(), StringUtil.getErrorText(e));
         }
@@ -431,11 +474,10 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
     @Override
     public void saveConversationRecord(String userToken, ConversationRequest conversationRequest) {
         LambdaQueryWrapper<ChatgptSession> wrapper = Wrappers.lambdaQuery(ChatgptSession.class);
-
+        ChatgptUser chatgptUser = chatgptUserMapper.selectOne(Wrappers.lambdaQuery(ChatgptUser.class).eq(ChatgptUser::getUserToken, userToken));
         if (StringUtils.isNotBlank(conversationRequest.getCarId())) {
             wrapper.eq(ChatgptSession::getCarId, conversationRequest.getCarId());
         } else {
-            ChatgptUser chatgptUser = chatgptUserMapper.selectOne(Wrappers.lambdaQuery(ChatgptUser.class).eq(ChatgptUser::getUserToken, userToken));
             if (chatgptUser.getSessionId() != null) {
                 wrapper.eq(ChatgptSession::getId, chatgptUser.getSessionId());
             }
@@ -445,15 +487,32 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
         chatgptUserConversationRecord.setUserToken(userToken);
         chatgptUserConversationRecord.setCarId(chatgptSession.getCarId());
         chatgptUserConversationRecord.setCarName(chatgptSession.getCarName());
-        if (StringUtils.isBlank(conversationRequest.getConversation_id())) {
-            chatgptUserConversationRecord.setMessageId(conversationRequest.getMessages().get(0).getId());
-        } else {
+
+        if (StringUtils.isNotBlank(conversationRequest.getConversation_id())) {
             chatgptUserConversationRecord.setConversationId(conversationRequest.getConversation_id());
         }
 
         chatgptUserConversationRecord.setModel(conversationRequest.getModel());
         chatgptUserConversationRecordMapper.insert(chatgptUserConversationRecord);
 
+        if(!"text-davinci-002-render-sha".equals(conversationRequest.getModel())){
+            String key = RedisService.key.CHATGPT_CONVERSATION_LIMIT.getName() + ":" + userToken;
+            long currentTimeMillis = System.currentTimeMillis();
+
+            redisService.del();
+            if(redisService.hasKey("chatgpt:team:clears_in:" + chatgptSession.getCarId())){
+                redisService.del("chatgpt:team:clears_in:" + chatgptSession.getCarId());
+            }
+            if (redisService.hasKey("chatgpt:clears_in:" + chatgptSession.getCarId())) {
+                redisService.del("chatgpt:clears_in:" + chatgptSession.getCarId());
+            }
+
+            // 如果未超过限制,记录当前请求的时间戳
+            redisService.zAdd(key, currentTimeMillis, currentTimeMillis);
+            // 设置ZSet的过期时间,窗口大小加上一段冗余时间
+            redisService.expire(key, (chatgptUser.getLimitTime() * 60 * 60) + 20);
+        }
+
         if (StringUtils.isNotBlank(chatgptSession.getCarId())) {
             updateExperienceAndScore(chatgptSession.getCarId(), !"text-davinci-002-render-sha".equals(conversationRequest.getModel()), System.currentTimeMillis());
         }
@@ -508,10 +567,6 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
             chatgptUserCarUsedRecordMapper.insert(chatgptUserCarUsedRecord);
             return conversationLimitResponse;
         } else {
-            // 如果未超过限制,记录当前请求的时间戳
-            redisService.zAdd(key, currentTimeMillis, currentTimeMillis);
-            // 设置ZSet的过期时间,窗口大小加上一段冗余时间
-            redisService.expire(key, (limitTime * 60 * 60) + 20);
             conversationLimitResponse.setLimited(false);
             return conversationLimitResponse;
         }
@@ -586,7 +641,7 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
         GroupsTrips groupsTrips = getGroupsTrips(groupsRelation);
         GoodsDonSku goodsDonSku = skuMapper.selectById(groupsTrips.getSkuId());
 
-        if (goodsDonSku != null && goodsDonSku.getIsMirror() && goodsDonSku.getIsCar()) {
+        if (goodsDonSku != null && goodsDonSku.getGoodsId() == 18 && goodsDonSku.getIsMirror() && goodsDonSku.getIsCar()) {
             ChatgptUser chatgptUser = getChatgptCarUser(userId, relationId, groupsRelation, goodsDonSku);
             return true;
         } else {
@@ -786,12 +841,41 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
             GroupsTrips groupsTrips = getGroupsTrips(groupsRelation);
             GoodsDonSku goodsDonSku = skuMapper.selectById(groupsTrips.getSkuId());
             ChatgptUser chatgptUser = chatgptUserMapper.selectOne(Wrappers.lambdaQuery(ChatgptUser.class).eq(ChatgptUser::getRelationId, relationId));
+
+            Integer count = upgradePackageMapper.selectCount(Wrappers.lambdaQuery(UpgradePackage.class).apply("JSON_CONTAINS(sku_ids,'\"" + groupsTrips.getSkuId() + "\"')")
+                    .gt(UpgradePackage::getNum, chatgptUser.getLimitNum())
+                    .eq(UpgradePackage::getStatus, Boolean.TRUE)
+                    .eq(UpgradePackage::getGptType, 0)
+                    .eq(UpgradePackage::getDeleted, Boolean.TRUE));
+            Boolean upgrade = count > 0 ? true : false;
+            OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
+                    .eq(OrderDon::getRelationId, relationId)
+                    .eq(OrderDon::getUserId, groupsRelation.getUserId())
+                    .notIn(OrderDon::getStatus, Constant.noOrderAllStatus)
+                    .orderByDesc(OrderDon::getId)
+                    .last("limit 1"));
+            Long orderId = null;
+            if (orderDon != null) {
+                orderId = orderDon.getId();
+            }
+            BigDecimal packagePrice = null;
+            if (chatgptUser.getPackageId() != 0) {
+                UpgradePackage upgradePackage = upgradePackageMapper.selectById(chatgptUser.getPackageId());
+                packagePrice = upgradePackage.getPrice();
+            }
             return ChatGptUserView.builder()
                     .skuName(goodsDonSku.getSubTitle())
                     .expireTime(chatgptUser.getExpireTime())
                     .limitNum(chatgptUser.getLimitNum())
                     .limitTime(chatgptUser.getLimitTime())
-                    .use(getConversationCount(chatgptUser.getUserToken(), chatgptUser.getLimitTime()))
+                    .upgrade(upgrade)
+                    .orderId(orderId)
+                    .goodsId(goodsDonSku.getGoodsId())
+                    .skuId(goodsDonSku.getId())
+                    .months(goodsDonSku.getMonths())
+                    .use(Math.min(chatgptUser.getLimitNum(), getConversationCount(chatgptUser.getUserToken(), chatgptUser.getLimitTime())))
+                    .packageId(chatgptUser.getPackageId())
+                    .packagePrice(packagePrice)
                     .build();
         } else {
             throw BusinessRuntimeException.getInstance("您还未购买该车票");

+ 3 - 9
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpCustomerAcquisitionLinkServiceImpl.java

@@ -70,7 +70,6 @@ public class CorpCustomerAcquisitionLinkServiceImpl extends ServiceImpl<CorpCust
     @Transactional(rollbackFor = Throwable.class)
     public void up(CorpCustomerAcquisitionLink corpCustomerAcquisitionLink) throws Exception {
         CorpCustomerAcquisitionLink link = getById(corpCustomerAcquisitionLink.getId());
-        String oldUserList = link.getUserList();
         link.setLinkName(corpCustomerAcquisitionLink.getLinkName());
         link.setUserList(corpCustomerAcquisitionLink.getUserList());
 
@@ -79,12 +78,7 @@ public class CorpCustomerAcquisitionLinkServiceImpl extends ServiceImpl<CorpCust
         wxCpLinkUpd.setLinkId(corpCustomerAcquisitionLink.getLinkId());
         wxCpLinkUpd.setSkipVerify(corpCustomerAcquisitionLink.getSkipVerify());
         Range range = new Range();
-        String userList;
-        if (link.getIsDuty()) {
-            userList = corpCustomerAcquisitionLink.getChooseDutyUsers();
-        } else {
-            userList = corpCustomerAcquisitionLink.getUserList();
-        }
+        String userList = corpCustomerAcquisitionLink.getUserList();
         //值班客服
         List<String> followIds = sysCorpServiceRelateService.getFollowIdsByRelateIds(Jsons.parseList(userList, Integer.class));
         range.setUserList(followIds);
@@ -98,13 +92,13 @@ public class CorpCustomerAcquisitionLinkServiceImpl extends ServiceImpl<CorpCust
         Boolean isDuty = Optional.ofNullable(corpCustomerAcquisitionLink.getIsDuty()).orElse(false);
         if (!isDuty) {
             corpCustomerAcquisitionLink.setChooseDutyUsers(null);
-        } else if (StrUtil.isEmpty(corpCustomerAcquisitionLink.getChooseDutyUsers())) {
+        } else {
             corpCustomerAcquisitionLink.setChooseDutyUsers(corpCustomerAcquisitionLink.getUserList());
         }
 
         this.updateById(corpCustomerAcquisitionLink);
 
-        if (corpCustomerAcquisitionLink.getIsDuty() != null && corpCustomerAcquisitionLink.getIsDuty() && !StrUtil.equals(oldUserList, corpCustomerAcquisitionLink.getUserList())) {
+        if (corpCustomerAcquisitionLink.getIsDuty() != null && corpCustomerAcquisitionLink.getIsDuty()) {
             handleCorpLinkSchedulerJob();
         }
     }

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio