lyhzzz 2 maanden geleden
bovenliggende
commit
f415c86220
22 gewijzigde bestanden met toevoegingen van 623 en 35 verwijderingen
  1. 7 0
      pom.xml
  2. 3 1
      src/main/java/com/fdkankan/ucenter/common/RedisKeyUtil.java
  3. 5 0
      src/main/java/com/fdkankan/ucenter/common/constants/ResultCode.java
  4. 2 1
      src/main/java/com/fdkankan/ucenter/config/WebAppConfig.java
  5. 54 0
      src/main/java/com/fdkankan/ucenter/controller/ContactUsController.java
  6. 66 0
      src/main/java/com/fdkankan/ucenter/entity/ContactUs.java
  7. 78 0
      src/main/java/com/fdkankan/ucenter/entity/ContactUsPoint.java
  8. 1 1
      src/main/java/com/fdkankan/ucenter/generate/AutoGenerate.java
  9. 24 0
      src/main/java/com/fdkankan/ucenter/geo/IPLocation.java
  10. 58 0
      src/main/java/com/fdkankan/ucenter/geo/IPLocationService.java
  11. 64 0
      src/main/java/com/fdkankan/ucenter/geo/IPUtils.java
  12. 2 32
      src/main/java/com/fdkankan/ucenter/interceptor/ControllerAopInterceptor.java
  13. 18 0
      src/main/java/com/fdkankan/ucenter/mapper/IContactUsMapper.java
  14. 18 0
      src/main/java/com/fdkankan/ucenter/mapper/IContactUsPointMapper.java
  15. 17 0
      src/main/java/com/fdkankan/ucenter/service/IContactUsPointService.java
  16. 26 0
      src/main/java/com/fdkankan/ucenter/service/IContactUsService.java
  17. 27 0
      src/main/java/com/fdkankan/ucenter/service/impl/ContactUsPointServiceImpl.java
  18. 142 0
      src/main/java/com/fdkankan/ucenter/service/impl/ContactUsServiceImpl.java
  19. 1 0
      src/main/java/com/fdkankan/ucenter/service/impl/FusionService.java
  20. BIN
      src/main/resources/geo/GeoLite2-City.mmdb
  21. 5 0
      src/main/resources/mapper/ucenter/ContactUsMapper.xml
  22. 5 0
      src/main/resources/mapper/ucenter/ContactUsPointMapper.xml

+ 7 - 0
pom.xml

@@ -146,6 +146,13 @@
             <artifactId>4dkankan-utils-sign</artifactId>
             <version>3.0.0-SNAPSHOT</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.maxmind.geoip2</groupId>
+            <artifactId>geoip2</artifactId>
+            <version>2.15.0</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 3 - 1
src/main/java/com/fdkankan/ucenter/common/RedisKeyUtil.java

@@ -18,6 +18,8 @@ public class RedisKeyUtil {
 
     public static final String laserCopyLock = "ucenter:laser:copy:lock:";
     public static String copySpaceLock =  "ucenter:scene:copy:lock:%s";
-
     public static String downE57Key =  "ucenter:down:e57:lock:%s";
+
+    public static String CONTACT_US_KEY =  "ucenter:contactus:%s";
+
 }

+ 5 - 0
src/main/java/com/fdkankan/ucenter/common/constants/ResultCode.java

@@ -21,6 +21,11 @@ public enum ResultCode {
 
     SIGN_ERROR(99991, "签名错误"),
 
+    email_submit(500009, "邮件已提交"),
+    email_submit_error(500010, "邮件发送失败"),
+    USER_EXSIT(500011, "用户已存在"),
+
+
     ;
     private Integer code;
     private String message;

+ 2 - 1
src/main/java/com/fdkankan/ucenter/config/WebAppConfig.java

@@ -40,7 +40,8 @@ public class WebAppConfig implements WebMvcConfigurer {
 						"/**/vaild/cameras/**",
 						"/**/hot/shop/**",
 						"/**/getIncrementType/**",
-						"/**/system/**"
+						"/**/system/**",
+						"/**/contactUs/**"
 				);
 		registry.addInterceptor(ucenterInterceptor).addPathPatterns("/**/user/scene/**")
 				.excludePathPatterns(

+ 54 - 0
src/main/java/com/fdkankan/ucenter/controller/ContactUsController.java

@@ -0,0 +1,54 @@
+package com.fdkankan.ucenter.controller;
+
+
+import com.fdkankan.ucenter.common.BaseController;
+import com.fdkankan.ucenter.common.RequestBase;
+import com.fdkankan.ucenter.common.Result;
+import com.fdkankan.ucenter.entity.ContactUs;
+import com.fdkankan.ucenter.entity.ContactUsPoint;
+import com.fdkankan.ucenter.geo.IPUtils;
+import com.fdkankan.ucenter.service.IContactUsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-20
+ */
+@RestController
+@RequestMapping("/ucenter/contactUs")
+public class ContactUsController extends BaseController {
+
+    @Autowired
+    IContactUsService contactUsService;
+
+    @PostMapping("/submit")
+    public Result submit(@RequestBody ContactUs contactUs){
+        String ip = IPUtils.getIpAddr(request);
+        contactUs.setIpAddress(ip);
+        contactUsService.submit(contactUs);
+        return Result.success();
+    }
+
+    @GetMapping("/callBack/{email}")
+    public Result callBack(@PathVariable String email){
+        contactUsService.callBack(email,response);
+        return Result.success();
+    }
+
+    @PostMapping("/point")
+    public Result point(@RequestBody ContactUsPoint contactUsPoint){
+        String ip = IPUtils.getIpAddr(request);
+        contactUsPoint.setIpAddress(ip);
+        contactUsPoint.setSessionId(request.getSession().getId());
+        contactUsService.point(contactUsPoint);
+        return Result.success();
+    }
+}
+

+ 66 - 0
src/main/java/com/fdkankan/ucenter/entity/ContactUs.java

@@ -0,0 +1,66 @@
+package com.fdkankan.ucenter.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-20
+ */
+@Getter
+@Setter
+@TableName("t_contact_us")
+public class ContactUs implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("name")
+    private String name;
+
+    @TableField("tel")
+    private String tel;
+
+    @TableField("email")
+    private String email;
+
+    @TableField("company")
+    private String company;
+
+    @TableField("note")
+    private String note;
+
+    @TableField("ip_address")
+    private String ipAddress;
+
+    @TableField("country")
+    private String country;
+
+    @TableField("redirect_url")
+    private String redirectUrl;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 78 - 0
src/main/java/com/fdkankan/ucenter/entity/ContactUsPoint.java

@@ -0,0 +1,78 @@
+package com.fdkankan.ucenter.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-21
+ */
+@Getter
+@Setter
+@TableName("t_contact_us_point")
+public class ContactUsPoint implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("session_id")
+    private String sessionId;
+
+    @TableField("page_name")
+    private String pageName;
+
+    @TableField("page_url")
+    private String pageUrl;
+
+    @TableField("utm_source")
+    private String utmSource;
+
+    @TableField("device_type")
+    private String deviceType;
+
+    @TableField("ip_address")
+    private String ipAddress;
+
+    @TableField("country")
+    private String country;
+
+    @TableField("scroll_depth")
+    private String scrollDepth;
+
+    @TableField("stop_time")
+    private Long stopTime;
+
+    @TableField("load_time")
+    private String loadTime;
+
+    @TableField("network_type")
+    private String networkType;
+
+    @TableField("lang")
+    private String lang;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 1 - 1
src/main/java/com/fdkankan/ucenter/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir") ;
 
         generate(path,"ucenter", getTables(new String[]{
-                "t_app_secret"
+                "t_contact_us_point"
         }));
 
 //        generate(path,"goods", getTables(new String[]{

+ 24 - 0
src/main/java/com/fdkankan/ucenter/geo/IPLocation.java

@@ -0,0 +1,24 @@
+package com.fdkankan.ucenter.geo;
+
+public class IPLocation {
+    private String ip;
+    private String country;
+    private String countryCode;
+    private String city;
+    private Double latitude;
+    private Double longitude;
+
+    // getters and setters
+    public String getIp() { return ip; }
+    public void setIp(String ip) { this.ip = ip; }
+    public String getCountry() { return country; }
+    public void setCountry(String country) { this.country = country; }
+    public String getCountryCode() { return countryCode; }
+    public void setCountryCode(String countryCode) { this.countryCode = countryCode; }
+    public String getCity() { return city; }
+    public void setCity(String city) { this.city = city; }
+    public Double getLatitude() { return latitude; }
+    public void setLatitude(Double latitude) { this.latitude = latitude; }
+    public Double getLongitude() { return longitude; }
+    public void setLongitude(Double longitude) { this.longitude = longitude; }
+}

+ 58 - 0
src/main/java/com/fdkankan/ucenter/geo/IPLocationService.java

@@ -0,0 +1,58 @@
+package com.fdkankan.ucenter.geo;
+
+import com.maxmind.geoip2.DatabaseReader;
+import com.maxmind.geoip2.model.CityResponse;
+import com.maxmind.geoip2.model.CountryResponse;
+import org.springframework.core.io.ClassPathResource;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.InetAddress;
+
+public class IPLocationService {
+    private DatabaseReader dbReader;
+
+    public IPLocationService(String dbPath) throws IOException {
+        ClassPathResource resource = new ClassPathResource(dbPath);
+        InputStream inputStream = resource.getInputStream();
+        dbReader = new DatabaseReader.Builder(inputStream).build();
+    }
+
+    public String getCountryByIP(String ip) {
+        try {
+            InetAddress ipAddress = InetAddress.getByName(ip);
+            CountryResponse response = dbReader.country(ipAddress);
+            return response.getCountry().getName();
+        } catch (Exception e) {
+            return "Unknown";
+        }
+    }
+
+    public IPLocation getLocationByIP(String ip) {
+        try {
+            InetAddress ipAddress = InetAddress.getByName(ip);
+            CityResponse response = dbReader.city(ipAddress);
+
+            IPLocation location = new IPLocation();
+            location.setIp(ip);
+            location.setCountry(response.getCountry().getName());
+            location.setCountryCode(response.getCountry().getIsoCode());
+            location.setCity(response.getCity().getName());
+            location.setLatitude(response.getLocation().getLatitude());
+            location.setLongitude(response.getLocation().getLongitude());
+
+            return location;
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    public void close() throws IOException {
+        if (dbReader != null) {
+            dbReader.close();
+        }
+    }
+}
+
+

+ 64 - 0
src/main/java/com/fdkankan/ucenter/geo/IPUtils.java

@@ -0,0 +1,64 @@
+package com.fdkankan.ucenter.geo;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+public class IPUtils {
+    private static IPLocationService locationService;
+
+    static {
+        try {
+            locationService = new IPLocationService("geo/GeoLite2-City.mmdb");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static String getCountry(String ip) {
+        if (locationService != null) {
+            return locationService.getCountryByIP(ip);
+        }
+        return "Unknown";
+    }
+
+    public static Map<String, String> getLocationInfo(String ip) {
+        Map<String, String> info = new HashMap<>();
+        if (locationService != null) {
+            IPLocation location = locationService.getLocationByIP(ip);
+            if (location != null) {
+                info.put("country", location.getCountry());
+                info.put("city", location.getCity());
+                info.put("latitude", String.valueOf(location.getLatitude()));
+                info.put("longitude", String.valueOf(location.getLongitude()));
+            }
+        }
+        return info;
+    }
+
+    public static String getIpAddr(HttpServletRequest request) {
+        String ipAddress = null;
+        ipAddress = request.getHeader("x-forwarded-for");
+        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
+            ipAddress = request.getHeader("Proxy-Client-IP");
+        }
+        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
+            ipAddress = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
+            ipAddress = request.getRemoteAddr();
+        }
+
+// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
+        if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
+            // = 15
+            if (ipAddress.indexOf(",") > 0) {
+                ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
+            }
+        }
+        // 或者这样也行,对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
+//return ipAddress!=null&&!"".equals(ipAddress)?ipAddress.split(",")[0]:null;
+        return ipAddress;
+    }
+
+}

+ 2 - 32
src/main/java/com/fdkankan/ucenter/interceptor/ControllerAopInterceptor.java

@@ -1,6 +1,7 @@
 package com.fdkankan.ucenter.interceptor;
 
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.ucenter.geo.IPUtils;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
@@ -50,7 +51,7 @@ public class ControllerAopInterceptor {
 		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
 		// 请求的URL
 		String requestURL = request.getRequestURL().toString();
-		String ip = getIpAddr(request);
+		String ip = IPUtils.getIpAddr(request);
 
 		StringBuilder paramsBuf = new StringBuilder();
 		// 获取请求参数集合并进行遍历拼接
@@ -75,36 +76,5 @@ public class ControllerAopInterceptor {
 		return result;
 	}
 
-	/**
-	 * @Title: getIpAddr
-	 * @Description: 获取ip
-	 * @param request
-	 * @return
-	 * @return String 返回类型
-	 */
-	public String getIpAddr(HttpServletRequest request) {
-		String ipAddress = null;
-		ipAddress = request.getHeader("x-forwarded-for");
-		if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
-			ipAddress = request.getHeader("Proxy-Client-IP");
-		}
-		if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
-			ipAddress = request.getHeader("WL-Proxy-Client-IP");
-		}
-		if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
-			ipAddress = request.getRemoteAddr();
-		}
-
-// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
-		if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
-			// = 15
-			if (ipAddress.indexOf(",") > 0) {
-				ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
-			}
-		}
-		// 或者这样也行,对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
-//return ipAddress!=null&&!"".equals(ipAddress)?ipAddress.split(",")[0]:null;
-		return ipAddress;
-	}
 }
 

+ 18 - 0
src/main/java/com/fdkankan/ucenter/mapper/IContactUsMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.ucenter.mapper;
+
+import com.fdkankan.ucenter.entity.ContactUs;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-20
+ */
+@Mapper
+public interface IContactUsMapper extends BaseMapper<ContactUs> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/ucenter/mapper/IContactUsPointMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.ucenter.mapper;
+
+import com.fdkankan.ucenter.entity.ContactUsPoint;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-21
+ */
+@Mapper
+public interface IContactUsPointMapper extends BaseMapper<ContactUsPoint> {
+
+}

+ 17 - 0
src/main/java/com/fdkankan/ucenter/service/IContactUsPointService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.ucenter.service;
+
+import com.fdkankan.ucenter.entity.ContactUsPoint;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-21
+ */
+public interface IContactUsPointService extends IService<ContactUsPoint> {
+
+    ContactUsPoint getBySessionId(String sessionId);
+}

+ 26 - 0
src/main/java/com/fdkankan/ucenter/service/IContactUsService.java

@@ -0,0 +1,26 @@
+package com.fdkankan.ucenter.service;
+
+import com.fdkankan.ucenter.entity.ContactUs;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.ucenter.entity.ContactUsPoint;
+import org.springframework.http.ResponseEntity;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-20
+ */
+public interface IContactUsService extends IService<ContactUs> {
+
+    void submit(ContactUs contactUs);
+
+    void callBack(String email, HttpServletResponse response);
+
+    void point(ContactUsPoint contactUsPoint);
+}

+ 27 - 0
src/main/java/com/fdkankan/ucenter/service/impl/ContactUsPointServiceImpl.java

@@ -0,0 +1,27 @@
+package com.fdkankan.ucenter.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.ucenter.entity.ContactUsPoint;
+import com.fdkankan.ucenter.mapper.IContactUsPointMapper;
+import com.fdkankan.ucenter.service.IContactUsPointService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-21
+ */
+@Service
+public class ContactUsPointServiceImpl extends ServiceImpl<IContactUsPointMapper, ContactUsPoint> implements IContactUsPointService {
+
+    @Override
+    public ContactUsPoint getBySessionId(String sessionId) {
+        LambdaQueryWrapper<ContactUsPoint> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ContactUsPoint::getSessionId,sessionId);
+        return this.getOne(wrapper);
+    }
+}

+ 142 - 0
src/main/java/com/fdkankan/ucenter/service/impl/ContactUsServiceImpl.java

@@ -0,0 +1,142 @@
+package com.fdkankan.ucenter.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.ConstantUrl;
+import com.fdkankan.common.util.SecurityUtil;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.ucenter.common.RedisKeyUtil;
+import com.fdkankan.ucenter.common.constants.ResultCode;
+import com.fdkankan.ucenter.entity.ContactUs;
+import com.fdkankan.ucenter.entity.ContactUsPoint;
+import com.fdkankan.ucenter.entity.MailTemplate;
+import com.fdkankan.ucenter.entity.User;
+import com.fdkankan.ucenter.exception.BusinessException;
+import com.fdkankan.ucenter.geo.IPUtils;
+import com.fdkankan.ucenter.mapper.IContactUsMapper;
+import com.fdkankan.ucenter.service.IContactUsPointService;
+import com.fdkankan.ucenter.service.IContactUsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.ucenter.service.IMailTemplateService;
+import com.fdkankan.ucenter.service.IUserService;
+import com.fdkankan.ucenter.util.DateUserUtil;
+import com.fdkankan.ucenter.vo.request.RegisterParam;
+import com.fdkankan.ucenter.vo.response.LoginVo;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-20
+ */
+@Service
+@Slf4j
+public class ContactUsServiceImpl extends ServiceImpl<IContactUsMapper, ContactUs> implements IContactUsService {
+
+    @Autowired
+    RedisUtil redisUtil;
+    @Autowired
+    IMailTemplateService mailTemplateService;
+    @Autowired
+    IUserService userService;
+    @Autowired
+    LoginService loginService;
+    @Autowired
+    IContactUsPointService contactUsPointService;
+
+    @Override
+    public void submit(ContactUs contactUs) {
+        if(StringUtils.isBlank(contactUs.getName()) || StringUtils.isBlank(contactUs.getTel())
+                || StringUtils.isBlank(contactUs.getEmail()) || StringUtils.isBlank(contactUs.getCompany())){
+            throw new BusinessException(ResultCode.PARAM_MISS);
+        }
+        String redisKey = String.format(RedisKeyUtil.CONTACT_US_KEY,contactUs.getEmail());
+        if(redisUtil.hasKey(redisKey)){
+            throw new BusinessException(ResultCode.email_submit);
+        }
+        String uuid = UUID.randomUUID().toString().replace("-", "");
+        String redisKey2 = String.format(RedisKeyUtil.CONTACT_US_KEY,uuid);
+
+        User user = userService.getByUserName(contactUs.getEmail());
+        if(user !=null){
+           return;
+        }
+
+        Boolean b = mailTemplateService.sendMail(contactUs.getEmail(), new MailTemplate(), null);
+        if(!b){
+            throw new BusinessException(ResultCode.email_submit_error);
+        }
+
+        redisUtil.set(redisKey, uuid,15 * 60);
+        redisUtil.set(redisKey2, JSONObject.toJSONString(contactUs),15 * 60);
+    }
+
+    @Override
+    public void callBack(String uuid, HttpServletResponse response) {
+
+        String rediskey = String.format(RedisKeyUtil.CONTACT_US_KEY,uuid);
+        String rediskey2 = null;
+        try {
+            if(redisUtil.hasKey(rediskey)){
+                ContactUs contactUs = JSONObject.parseObject(redisUtil.get(rediskey),ContactUs.class);
+                contactUs.setCountry(IPUtils.getCountry(contactUs.getIpAddress()));
+                this.save(contactUs);
+                rediskey2 = String.format(RedisKeyUtil.CONTACT_US_KEY,contactUs.getEmail());
+                User user = userService.getByUserName(contactUs.getEmail());
+                if(user !=null){
+                    return;
+                }
+                User userEntity = new User();
+                userEntity.setPassword(SecurityUtil.MD5("4Dage168."));
+                userEntity.setEmail(contactUs.getEmail());
+                userEntity.setUserName(contactUs.getEmail());
+                userEntity.setNickName(contactUs.getName());
+                userEntity.setHead(ConstantUrl.DEFAULT_USER_HEAD);
+                userEntity.setStatus(1);
+                userEntity.setIsNotice(1);
+                userEntity.setRecStatus("A");
+                userEntity.setCreateTime(DateUserUtil.getDate(new Date()));
+                userEntity.setUpdateTime(DateUserUtil.getDate(new Date()));
+                userEntity.setAgentKey("wherefor");
+                userService.save(userEntity);
+                LoginVo login = loginService.login(userEntity);
+                response.setHeader("token", login.getToken());
+                response.sendRedirect(contactUs.getRedirectUrl());
+            }
+
+        }catch (Exception e){
+            log.info("contact-us-callback-error:{}",e);
+        }finally {
+            redisUtil.del(rediskey);
+            if(rediskey2 != null){
+                redisUtil.del(rediskey2);
+            }
+        }
+    }
+
+    @Override
+    public  void point(ContactUsPoint contactUsPoint) {
+        ContactUsPoint contactUsPoint2 = contactUsPointService.getBySessionId(contactUsPoint.getSessionId());
+        if(contactUsPoint2 == null){
+            contactUsPoint.setStopTime(1L);
+            contactUsPoint.setCountry(IPUtils.getCountry(contactUsPoint.getIpAddress()));
+        }
+        if(contactUsPoint2 != null){
+            contactUsPoint.setId(contactUsPoint2.getId());
+            contactUsPoint.setStopTime(contactUsPoint2.getStopTime() + 1);
+        }
+        contactUsPointService.saveOrUpdate(contactUsPoint);
+    }
+}

+ 1 - 0
src/main/java/com/fdkankan/ucenter/service/impl/FusionService.java

@@ -3,6 +3,7 @@ package com.fdkankan.ucenter.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.SecurityUtil;
 import com.fdkankan.ucenter.common.PageInfo;
 import com.fdkankan.ucenter.constant.LoginConstant;
 import com.fdkankan.ucenter.entity.*;

BIN
src/main/resources/geo/GeoLite2-City.mmdb


+ 5 - 0
src/main/resources/mapper/ucenter/ContactUsMapper.xml

@@ -0,0 +1,5 @@
+<?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.fdkankan.ucenter.mapper.IContactUsMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/ucenter/ContactUsPointMapper.xml

@@ -0,0 +1,5 @@
+<?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.fdkankan.ucenter.mapper.IContactUsPointMapper">
+
+</mapper>