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.SceneSourceUtil; import com.fdkankan.ucenter.common.constants.ResultCode; import com.fdkankan.ucenter.config.UcenterConfig; import com.fdkankan.ucenter.entity.*; import com.fdkankan.ucenter.exception.BusinessException; import com.fdkankan.ucenter.geo.IPUtils; import com.fdkankan.ucenter.mapper.IContactUsMapper; import com.fdkankan.ucenter.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.ucenter.util.DateUserUtil; import com.fdkankan.ucenter.vo.request.RegisterParam; import com.fdkankan.ucenter.vo.response.LoginVo; import com.fdkankan.ucenter.vo.response.SceneInfoVo; import com.fdkankan.ucenter.vo.response.ScenePlusVo; import com.fdkankan.ucenter.vo.response.SceneVo; 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.io.IOException; import java.util.*; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author * @since 2025-10-20 */ @Service @Slf4j public class ContactUsServiceImpl extends ServiceImpl implements IContactUsService { @Autowired RedisUtil redisUtil; @Autowired IMailTemplateService mailTemplateService; @Autowired IUserService userService; @Autowired LoginService loginService; @Autowired IContactUsPointService contactUsPointService; @Autowired UcenterConfig ucenterConfig; @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; } String callBackUrl = ucenterConfig.getContactUsCallBackUrl() + uuid; Boolean b = mailTemplateService.sendContactUs(contactUs.getEmail(),callBackUrl); if(!b){ throw new BusinessException(ResultCode.email_submit_error); } contactUs.setCountry(IPUtils.getCountry(contactUs.getIpAddress())); this.save(contactUs); redisUtil.set(redisKey, uuid,7* 24 * 60 * 60); redisUtil.set(redisKey2, JSONObject.toJSONString(contactUs),7* 24 * 60 * 60); } @Override public LoginVo callBack(String uuid) { String rediskey = String.format(RedisKeyUtil.CONTACT_US_KEY,uuid); String rediskey2 = null; if(!redisUtil.hasKey(rediskey)){ throw new BusinessException(ResultCode.url_exprix); } try { if(redisUtil.hasKey(rediskey) ){ ContactUs contactUs = JSONObject.parseObject( redisUtil.get(rediskey),ContactUs.class); rediskey2 = String.format(RedisKeyUtil.CONTACT_US_KEY,contactUs.getEmail()); User userEntity = userService.getByUserName(contactUs.getEmail()); if(userEntity == null){ userEntity = new User(); userEntity.setPassword(SecurityUtil.MD5(ucenterConfig.getContactUsDfPassword())); 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); return login; } }catch (Exception e){ log.info("contact-us-callback-error:{}",e); }finally { redisUtil.del(rediskey); if(rediskey2 != null){ redisUtil.del(rediskey2); } } return null; } @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); } @Autowired IContactUsSceneService contactUsSceneService; @Autowired IScenePlusService scenePlusService; @Override public List sceneList() { List list = contactUsSceneService.list(); List numList = list.stream().map(ContactUsScene::getNum).collect(Collectors.toList()); if(numList.isEmpty()){ return new ArrayList<>(); } List sceneVos = scenePlusService.getVoByNumList(numList); for (SceneVo sceneVo : sceneVos) { if(SceneSourceUtil.isLaser(sceneVo.getSceneSource())){ if(ucenterConfig.getActive().contains("prod")){ sceneVo.setWebSite(ucenterConfig.getBasePath() +"/index.html?m="+sceneVo.getNum()); }else { sceneVo.setWebSite(ucenterConfig.getBasePath() +"/uat/index.html?m="+sceneVo.getNum()); } sceneVo.setSceneName(sceneVo.getLaserTitle()); } } return sceneVos; } }