zoujiajian пре 3 година
родитељ
комит
845c3e7e70

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

@@ -13,6 +13,9 @@ import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * @author chan
  * @date 2022/10/13 11:29 AM
@@ -21,6 +24,8 @@ public class SmsUtil {
 
     private static final String URL = "http://sms-api.luosimao.com/v1/send.json";
 
+    private static final String BATCH_URL = "http://sms-api.luosimao.com/v1/send_batch.json";
+
     private static final String PASSWORD = "key-1bf2a2f243e18be640b2428ddf03ded9";
 
     private static final String LVSINCO_PASSWORD = "key-246cd85eb5603c3d4924531e5d5c4edc";
@@ -61,6 +66,15 @@ public class SmsUtil {
         System.out.println(execute.body());
     }
 
+    public static void batchSendLuoKey2Msg(List<String> mobile, String msg) {
+        HttpRequest request = new HttpRequest(BATCH_URL);
+        request.setMethod(Method.POST);
+        request.basicAuth("api", LVSINCO_PASSWORD);
+        request.form("mobile_list", mobile.stream().collect(Collectors.joining(",")));
+        request.form("message", msg);
+        HttpResponse execute = request.execute();
+    }
+
     public static void sendTencent(String mobile, String msg) {
         try {
             /* 必要步骤:

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

@@ -1,6 +1,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 java.io.PrintWriter;
 import java.io.StringWriter;
@@ -445,4 +449,23 @@ public final class StringUtil {
 		}
 		return new String(chars);
 	}
+
+	public static String getRealAddressByIP(String ip) {
+		if (StrUtil.isBlank(ip)) {
+			return "unknown";
+		}
+		try {
+			String rspStr = HttpUtil.get("http://whois.pconline.com.cn/ipJson.jsp?ip=" + ip + "&json=true");
+			if (StrUtil.isEmpty(rspStr)) {
+				return "unknown";
+			}
+			JSONObject obj = JSONUtil.parseObj(rspStr);
+			String region = obj.getStr("pro");
+			String city = obj.getStr("city");
+			return String.format("%s %s", region, city);
+		} catch (Exception e) {
+		}
+
+		return "unknown";
+	}
 }

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.ChatGptPwdViewRecord;
+
+/*
+ *项目名: netflix
+ *文件名: ChatGptPwdViewRecordMapper
+ *创建者: JavaZou
+ *创建时间:2023/5/17 16:15
+ */
+public interface ChatGptPwdViewRecordMapper extends BaseMapper<ChatGptPwdViewRecord> {
+}

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

@@ -0,0 +1,22 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: ChatGptPwdViewRecord
+ *创建者: JavaZou
+ *创建时间:2023/5/17 16:07
+ */
+@Getter
+@Setter
+public class ChatGptPwdViewRecord extends BaseEntity{
+	private Long userId;
+
+	private Long relationId;
+
+	private Long skuId;
+
+	private String operateLocation;
+}

+ 2 - 26
netflix-service/src/main/java/com/cyksj/service/mange/account/CmsAccountServiceImpl.java

@@ -2,16 +2,13 @@ package com.cyksj.service.mange.account;
 
 import cn.hutool.core.collection.CollUtil;
 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.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.Jsons;
+import com.cyksj.common.util.StringUtil;
 import com.cyksj.mapper.AccountMapper;
 import com.cyksj.mapper.AccountUpdatePasswordRecordMapper;
 import com.cyksj.mapper.manage.AutoUpdateAccountPwdLogMapper;
@@ -102,7 +99,7 @@ public class CmsAccountServiceImpl extends ServiceImpl<AccountMapper, Account> i
 		log.setAccount(account);
 		log.setOldPwd(oldPwd);
 		log.setNewPwd(newPwd);
-		log.setOperateLocation(getRealAddressByIP(operateIp));
+		log.setOperateLocation(StringUtil.getRealAddressByIP(operateIp));
 		log.setOperateIp(operateIp);
 
 		autoUpdateAccountPwdLogMapper.insert(log);
@@ -207,25 +204,4 @@ public class CmsAccountServiceImpl extends ServiceImpl<AccountMapper, Account> i
 			}
 		});
 	}
-
-	public String getRealAddressByIP(String ip) {
-		if (StrUtil.isBlank(ip)) {
-			return "unknown";
-		}
-		try {
-			String rspStr = HttpUtil.get("http://whois.pconline.com.cn/ipJson.jsp?ip=" + ip + "&json=true");
-			if (StrUtil.isEmpty(rspStr)) {
-				log.error("获取地理位置异常 {}", ip);
-				return "unknown";
-			}
-			JSONObject obj = JSONUtil.parseObj(rspStr);
-			String region = obj.getStr("pro");
-			String city = obj.getStr("city");
-			return String.format("%s %s", region, city);
-		} catch (Exception e) {
-			log.error("获取地理位置异常 {}", ip);
-		}
-
-		return "unknown";
-	}
 }

+ 2 - 25
netflix-web/src/main/java/com/cyksj/aspect/LogAspect.java

@@ -4,11 +4,9 @@ import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.servlet.ServletUtil;
-import cn.hutool.http.HttpUtil;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
 import com.cyksj.common.annotation.Log;
 import com.cyksj.common.util.Jsons;
+import com.cyksj.common.util.StringUtil;
 import com.cyksj.enums.BusinessStatus;
 import com.cyksj.mapper.manage.cms.SysLogMapper;
 import com.cyksj.model.entity.CmsUser;
@@ -93,7 +91,7 @@ public class LogAspect {
 			getControllerMethodDescription(joinPoint, controllerLog, sysLog, jsonResult);
 			//请求方式
 			sysLog.setRequestMethod(request.getMethod());
-			sysLog.setOperateLocation(getRealAddressByIP(sysLog.getOperateIp()));
+			sysLog.setOperateLocation(StringUtil.getRealAddressByIP(sysLog.getOperateIp()));
 			sysLogManager.insert(sysLog);
 		} catch (Exception exp) {
 			// 记录本地异常日志
@@ -183,25 +181,4 @@ public class LogAspect {
 		return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse
 				|| o instanceof BindingResult;
 	}
-
-	public String getRealAddressByIP(String ip) {
-		if (StrUtil.isBlank(ip)) {
-			return "unknown";
-		}
-		try {
-			String rspStr = HttpUtil.get("http://whois.pconline.com.cn/ipJson.jsp?ip=" + ip + "&json=true");
-			if (StrUtil.isEmpty(rspStr)) {
-				log.error("获取地理位置异常 {}", ip);
-				return "unknown";
-			}
-			JSONObject obj = JSONUtil.parseObj(rspStr);
-			String region = obj.getStr("pro");
-			String city = obj.getStr("city");
-			return String.format("%s %s", region, city);
-		} catch (Exception e) {
-			log.error("获取地理位置异常 {}", ip);
-		}
-
-		return "unknown";
-	}
 }

+ 28 - 0
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -1,12 +1,17 @@
 package com.cyksj.web.controller.group;
 
+import cn.hutool.extra.servlet.ServletUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.util.StringUtil;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.ChatGptPwdViewRecordMapper;
 import com.cyksj.mapper.GroupsRelationMapper;
+import com.cyksj.model.entity.ChatGptPwdViewRecord;
 import com.cyksj.model.entity.GroupsRelation;
 import com.cyksj.model.entity.OrderDon;
+import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.model.request.OrderPayRequest;
 import com.cyksj.model.views.RenewalView;
 import com.cyksj.model.views.UserTicketView;
@@ -21,6 +26,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 
 /**
@@ -43,6 +49,10 @@ public class GroupRelationController {
 
     private final UserService userService;
 
+    private final ChatGptPwdViewRecordMapper chatGptPwdViewRecordMapper;
+
+    private final HttpServletRequest request;
+
     @RequestMapping("/get/renewal")
     public Result<List<RenewalView>> get(Boolean isLoginPopularize) {
         long userId = StpUserUtil.getLoginIdAsLong();
@@ -93,4 +103,22 @@ public class GroupRelationController {
                 .build());
         return GatewayResponse.SUCCESS.newBuilder().toResult(ticketViews);
     }
+
+    /**
+     * 记录查看ChatGPT车票密码
+     */
+    @GetMapping("/recordView/{relationId}")
+    public Result<String> recordGPTPwdView(@PathVariable Long relationId) {
+        long userId = StpUserUtil.getLoginIdAsLong();
+        GroupsRelationView groupsRelationView = beanSearcher.searchFirst(GroupsRelationView.class, MapUtils.builder().field(GroupsRelationView::getUserId, userId)
+                .field(GroupsRelationView::getId, relationId).build());
+        if (groupRelationFrontService == null) throw BusinessRuntimeException.getInstance("车票已不存在");
+        ChatGptPwdViewRecord viewRecord = new ChatGptPwdViewRecord();
+        viewRecord.setUserId(userId);
+        viewRecord.setRelationId(relationId);
+        viewRecord.setSkuId(groupsRelationView.getSkuId());
+        viewRecord.setOperateLocation(StringUtil.getRealAddressByIP(ServletUtil.getClientIP(request)));
+        chatGptPwdViewRecordMapper.insert(viewRecord);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
 }