UserServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. package com.fdkankan.ucenter.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import com.fdkankan.common.constant.ConstantRegex;
  8. import com.fdkankan.common.constant.ConstantUrl;
  9. import com.fdkankan.common.exception.BusinessException;
  10. import com.fdkankan.common.util.*;
  11. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  12. import com.fdkankan.ucenter.common.constants.ConstantFilePath;
  13. import com.fdkankan.redis.constant.RedisKey;
  14. import com.fdkankan.redis.util.RedisUtil;
  15. import com.fdkankan.sensitive.Variable;
  16. import com.fdkankan.ucenter.common.constants.NacosProperty;
  17. import com.fdkankan.ucenter.constant.LoginConstant;
  18. import com.fdkankan.ucenter.entity.*;
  19. import com.fdkankan.ucenter.mapper.IUserIncrementMapper;
  20. import com.fdkankan.ucenter.mapper.IUserMapper;
  21. import com.fdkankan.ucenter.service.*;
  22. import com.fdkankan.ucenter.util.DateUserUtil;
  23. import com.fdkankan.ucenter.vo.request.RegisterParam;
  24. import com.fdkankan.ucenter.vo.request.ShipAddressParam;
  25. import com.fdkankan.ucenter.vo.request.UserParam;
  26. import com.fdkankan.ucenter.vo.response.*;
  27. import java.io.File;
  28. import java.util.ArrayList;
  29. import java.util.Date;
  30. import java.util.HashMap;
  31. import java.util.List;
  32. import java.util.Set;
  33. import java.util.stream.Collectors;
  34. import javax.annotation.Resource;
  35. import org.apache.commons.lang3.StringUtils;
  36. import org.joda.time.DateTime;
  37. import org.joda.time.Days;
  38. import org.springframework.beans.BeanUtils;
  39. import org.springframework.beans.factory.annotation.Autowired;
  40. import org.springframework.beans.factory.annotation.Value;
  41. import org.springframework.stereotype.Service;
  42. /**
  43. * <p>
  44. * 用户信息表 服务实现类
  45. * </p>
  46. *
  47. * @author
  48. * @since 2022-07-01
  49. */
  50. @Service
  51. public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements IUserService {
  52. @Value("${fyun.host}")
  53. private String osssPrefixUrl;
  54. @Autowired
  55. ICameraDetailService cameraDetailService;
  56. @Autowired
  57. IUserIncrementService userIncrementService;
  58. @Autowired
  59. IIncrementTypeService incrementTypeService;
  60. @Autowired
  61. IReceiverInfoService receiverInfoService;
  62. @Autowired
  63. RedisUtil redisUtil;
  64. @Autowired
  65. FYunFileServiceInterface fYunFileService;
  66. @Autowired
  67. ICameraService cameraService;
  68. @Autowired
  69. ICameraSpaceService cameraSpaceService;
  70. @Autowired
  71. ICameraTypeService cameraTypeService;
  72. private User getByEmail(String email){
  73. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  74. queryWrapper.lambda().eq(User ::getEmail,email);
  75. List<User> list = this.list(queryWrapper);
  76. if(list == null || list.size()<=0){
  77. return null;
  78. }
  79. return list.get(0);
  80. }
  81. @Override
  82. public User getByUserName(String phoneNum) {
  83. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  84. wrapper.eq(User::getUserName,phoneNum);
  85. List<User> list = this.list(wrapper);
  86. if(list != null && list.size() >0){
  87. return list.get(0);
  88. }
  89. return null;
  90. }
  91. @Override
  92. public void register(RegisterParam param) {
  93. User userEntity = new User();
  94. userEntity.setPassword(SecurityUtil.MD5(param.getPassword()));
  95. userEntity.setEmail(param.getEmail());
  96. userEntity.setUserName(param.getPhoneNum());
  97. if(StringUtils.isNotBlank(param.getNickName())){
  98. userEntity.setNickName(param.getNickName());
  99. }else {
  100. userEntity.setNickName(param.getPhoneNum());
  101. }
  102. userEntity.setHead(ConstantUrl.DEFAULT_USER_HEAD);
  103. userEntity.setCountry(param.getCountry());
  104. userEntity.setStatus(1);
  105. userEntity.setIsNotice(1);
  106. userEntity.setRecStatus("A");
  107. userEntity.setCreateTime(DateUserUtil.getDate(new Date()));
  108. userEntity.setUpdateTime(DateUserUtil.getDate(new Date()));
  109. this.save(userEntity);
  110. }
  111. @Override
  112. public void updatePassword(String phoneNum, String password) {
  113. LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
  114. wrapper.set(User::getPassword,password)
  115. .eq(User::getUserName,phoneNum);
  116. this.update(wrapper);
  117. }
  118. @Override
  119. public UserVo getUserInfo(String userName) {
  120. User user = this.getByUserName(userName);
  121. UserVo userVo = new UserVo();
  122. BeanUtils.copyProperties(user,userVo);
  123. Long cameraCount = cameraDetailService.getCountByUserId(user.getId(),null);
  124. Long incrementNum = userIncrementService.getCountByUserId(user.getId(),0);
  125. Long incrementBindNum = userIncrementService.getCountByUserId(user.getId(),1);
  126. userVo.setCameraCount(cameraCount);
  127. userVo.setIncrementNum(incrementNum);
  128. userVo.setIncrementBindNum(incrementBindNum);
  129. return userVo;
  130. }
  131. @Override
  132. public String uploadHead(String imgdata, String userName) throws Exception {
  133. if (StringUtils.isEmpty(imgdata)){
  134. throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
  135. }
  136. User dbUser = this.getByUserName(userName);
  137. StringBuilder sb = new StringBuilder().append("head")
  138. .append(File.separator).append(dbUser.getUserName()).append(File.separator)
  139. .append("head").append("_").append(new Date().getTime()).append(".png");
  140. StringBuilder qiniuPath = new StringBuilder().append("head")
  141. .append("/").append(dbUser.getUserName()).append("/")
  142. .append("head").append("_").append(new Date().getTime()).append(".png");
  143. FileUtils.uploadImg(ConstantFilePath.USER_IMAGES_PATH + sb.toString(), imgdata);
  144. byte[] imageByte = FileUtils.getImageByte(imgdata);
  145. //上传头像到oss
  146. fYunFileService.uploadFile(imageByte, qiniuPath.toString());
  147. dbUser.setHead(osssPrefixUrl + qiniuPath.toString()+"?m="+System.currentTimeMillis());
  148. this.updateById(dbUser);
  149. return dbUser.getHead();
  150. }
  151. @Override
  152. public void insertAddress(ShipAddressParam param, String userName) {
  153. if (StringUtils.isEmpty(param.getShipAddress()) || StringUtils.isEmpty(param.getShipAreaPath())
  154. || StringUtils.isEmpty(param.getProvince()) || StringUtils.isEmpty(param.getCity())){
  155. throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
  156. }
  157. User user = getByUserName(userName);
  158. receiverInfoService.saveByParam(param,user.getId());
  159. }
  160. @Override
  161. public void updateAddress(ShipAddressParam param, String userName) {
  162. if (param.getId() == null || StringUtils.isEmpty(param.getShipAddress()) || StringUtils.isEmpty(param.getShipAreaPath())
  163. || StringUtils.isEmpty(param.getProvince()) || StringUtils.isEmpty(param.getCity())){
  164. throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
  165. }
  166. User user = getByUserName(userName);
  167. receiverInfoService.updateDefaultAddress(param,user.getId());
  168. }
  169. @Override
  170. public void deleteAddress(Long id) {
  171. if (id == null ){
  172. throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
  173. }
  174. receiverInfoService.removeById(id);
  175. }
  176. @Override
  177. public void updateEmail(String email, String userName) {
  178. if (StringUtils.isEmpty(email)){
  179. throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
  180. }
  181. if(!email.matches(ConstantRegex.EMAIL_REGEX)){
  182. throw new BusinessException(LoginConstant.FAILURE_CODE_3019, LoginConstant.FAILURE_MSG_3019);
  183. }
  184. User user = this.getByEmail(email);
  185. if(user!=null && !user.getUserName().equals(userName)){
  186. throw new BusinessException(LoginConstant.FAILURE_CODE_3020 , LoginConstant.FAILURE_MSG_3020);
  187. }
  188. LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
  189. wrapper.eq(User::getUserName,userName);
  190. wrapper.set(User::getEmail,email);
  191. this.update(wrapper);
  192. }
  193. @Override
  194. public ReceiverInfo getReceiverInfo(String userName) {
  195. User dbUser = getByUserName(userName);
  196. return receiverInfoService.getDefaultByUserId(dbUser.getId());
  197. }
  198. @Override
  199. public List<ReceiverInfo> getReceiverList(String userName) {
  200. User dbUser = getByUserName(userName);
  201. return receiverInfoService.getListByUserId(dbUser.getId());
  202. }
  203. @Override
  204. public void updateNickName(String nickName, String userName) {
  205. if (StringUtils.isEmpty(nickName)){
  206. throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
  207. }
  208. //检验昵称敏感词
  209. Set<String> set = Variable.sensitiveWord.getSensitiveWord(nickName, 1);
  210. if (set != null && set.size() > 0){
  211. throw new BusinessException(LoginConstant.FAILURE_CODE_3012, LoginConstant.FAILURE_MSG_3012);
  212. }
  213. LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
  214. wrapper.eq(User::getUserName,userName);
  215. wrapper.set(User::getNickName,nickName);
  216. this.update(wrapper);
  217. }
  218. @Override
  219. public void updateUserDetail(UserParam param, String userName) {
  220. if (param.getNickName() != null){
  221. //检验昵称敏感词
  222. Set<String> set = Variable.sensitiveWord.getSensitiveWord(param.getNickName(), 1);
  223. if (set != null && set.size() > 0){
  224. throw new BusinessException(LoginConstant.FAILURE_CODE_3012, LoginConstant.FAILURE_MSG_3012);
  225. }
  226. }
  227. if(param.getEmail() != null && !param.getEmail().matches(ConstantRegex.EMAIL_REGEX)){
  228. throw new BusinessException(LoginConstant.FAILURE_CODE_3019, LoginConstant.FAILURE_MSG_3019);
  229. }
  230. User emailUser = getByEmail(param.getEmail());
  231. if(emailUser != null && !emailUser.getUserName().equals(userName)){
  232. throw new BusinessException(LoginConstant.FAILURE_CODE_3020 , LoginConstant.FAILURE_MSG_3020);
  233. }
  234. LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
  235. wrapper.eq(User::getUserName,userName);
  236. wrapper.set(User::getNickName,param.getNickName());
  237. wrapper.set(User::getEmail,param.getEmail());
  238. wrapper.set(User::getIsNotice,param.getIsNotice());
  239. this.update(wrapper);
  240. }
  241. @Override
  242. public HashMap<Long, User> getByIds(List<Long> userIds) {
  243. HashMap<Long,User> map = new HashMap<>();
  244. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  245. if(userIds.size() >0){
  246. wrapper.in(User::getId,userIds);
  247. List<User> list = this.list(wrapper);
  248. list.forEach(entity -> map.put(entity.getId(),entity));
  249. }
  250. return map;
  251. }
  252. @Override
  253. public Long getCountByNickName(String nickName) {
  254. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  255. wrapper.eq(User::getNickName,nickName);
  256. return this.count(wrapper);
  257. }
  258. @Override
  259. public List<Long> getLikeUserName(String userName) {
  260. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  261. wrapper.like(User::getUserName,userName);
  262. List<Long> collect = this.list(wrapper).parallelStream().map(User::getId).collect(Collectors.toList());
  263. return new ArrayList<>(collect);
  264. }
  265. @Override
  266. public User getByToken(String token) {
  267. try {
  268. String value = redisUtil.get(String.format(RedisKey.TOKEN_V3, token));
  269. if(StringUtils.isEmpty(value)){
  270. throw new Exception();
  271. }
  272. return JSONObject.parseObject(value,User.class);
  273. }catch (Exception e){
  274. e.printStackTrace();
  275. }
  276. String username = JwtUtil.getUsername(token);
  277. return this.getByUserName(username);
  278. }
  279. @Override
  280. public CameraVo findCameraDetailByChildName(String token, String childName) {
  281. CameraVo cameraVo = cameraService.getVoByChildName(childName);
  282. if(cameraVo == null){
  283. return null;
  284. }
  285. User userVo = this.getByToken(token);
  286. if(userVo != null && userVo.getId()!= null){
  287. User user = this.getById(userVo.getId());
  288. cameraVo.setNickName(user.getNickName());
  289. cameraVo.setNickNameEn(user.getNickName());
  290. }else {
  291. switch (cameraVo.getType()){
  292. case 9 : cameraVo.setNickName("Minion设备用户") ; cameraVo.setNickNameEn("4DMinion user") ;break;
  293. case 10 : cameraVo.setNickName("四维深时用户"); cameraVo.setNickNameEn("4DMega user"); break;
  294. case 11 : cameraVo.setNickName("四维深光用户");cameraVo.setNickNameEn("4DMeta user"); break;
  295. default: cameraVo.setNickName("Pro设备用户");cameraVo.setNickNameEn("4DKanKan user"); break;
  296. }
  297. }
  298. List<CameraSpaceVo> voList = cameraSpaceService.getVoListByCameraId(cameraVo.getId());
  299. if(voList != null && voList.size() > 0){
  300. CameraSpaceVo cameraSpace = voList.get(0);
  301. Long space = cameraSpace.getSpace();
  302. cameraVo.setSpaceId(cameraSpace.getId());
  303. cameraVo.setSpace((long) FileSizeUtil.formetFileSize(space, FileSizeUtil.SIZETYPE_GB));
  304. cameraVo.setSpaceStr(FileSizeUtil.formatFileSize(space));
  305. cameraVo.setSpaceEndStr(DateUtil.date2String(cameraSpace.getSpaceEndTime(), DateUtil.YYYY_MM_DD_DATE_FORMAT));
  306. if(Days.daysBetween(new DateTime(), new DateTime(cameraSpace.getSpaceEndTime())).getDays() < 7){
  307. cameraVo.setIsExpire(true);
  308. }
  309. }
  310. //获取会员权益
  311. UserIncrement userIncrement = userIncrementService.getByCameraId(cameraVo.getId());
  312. if(userIncrement != null){
  313. ResponseUserIncrement responseUserIncrement = new ResponseUserIncrement();
  314. BeanUtils.copyProperties(userIncrement,responseUserIncrement);
  315. cameraVo.setResponseUserIncrement(responseUserIncrement);
  316. cameraVo.setMemberLevels(userIncrement.getMemberLevels());
  317. IncrementType incrementType = incrementTypeService.getById(userIncrement.getIncrementTypeId());
  318. if(incrementType != null && userIncrement.getIsExpired() == 0){
  319. if("GB".equals(cameraVo.getUnit())){
  320. cameraVo.setTotalSpace(String.valueOf(incrementType.getCameraCapacity()));
  321. cameraVo.setTotalSpaceStr(incrementType.getCameraCapacity()+".00GB");
  322. }
  323. if("SP".equals(cameraVo.getUnit())){
  324. cameraVo.setTotalSpace(String.valueOf(incrementType.getCameraSpace()));
  325. cameraVo.setTotalSpaceStr(String.valueOf(incrementType.getCameraSpace()));
  326. }
  327. }
  328. }
  329. return cameraVo;
  330. }
  331. @Override
  332. public void updateDownloadNum(long userId, int num) {
  333. this.update(new LambdaUpdateWrapper<User>().setSql("download_num = download_num + " + num).eq(User::getId, userId));
  334. }
  335. }