LumaServiceImpl.java 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package com.cyksj.service.luma.impl;
  2. import cn.hutool.core.lang.UUID;
  3. import cn.hutool.http.HttpUtil;
  4. import cn.hutool.json.JSONObject;
  5. import cn.hutool.json.JSONUtil;
  6. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  7. import com.cyksj.common.constant.Constant;
  8. import com.cyksj.common.exception.BusinessRuntimeException;
  9. import com.cyksj.common.util.StringUtil;
  10. import com.cyksj.mapper.*;
  11. import com.cyksj.model.entity.*;
  12. import com.cyksj.redis.RedisService;
  13. import com.cyksj.service.luma.LumaService;
  14. import com.cyksj.service.user.UserBindRelationService;
  15. import lombok.RequiredArgsConstructor;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.springframework.dao.DuplicateKeyException;
  18. import org.springframework.stereotype.Service;
  19. import javax.imageio.stream.FileImageOutputStream;
  20. import java.io.IOException;
  21. import java.nio.file.Files;
  22. import java.nio.file.Path;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;
  26. /**
  27. * 项目名: yhlxj2
  28. * 文件名: LumaServiceImpl
  29. * 创建者: JavaZou
  30. * 创建时间:2024/8/5 11:55
  31. */
  32. @Service
  33. @RequiredArgsConstructor
  34. @Slf4j
  35. public class LumaServiceImpl implements LumaService {
  36. private final GoodsDonMapper goodsDonMapper;
  37. private final GoodsDonSkuMapper skuMapper;
  38. private final UserBindRelationService userBindRelationService;
  39. private final GroupsRelationMapper groupsRelationMapper;
  40. private final GroupsMapper groupsMapper;
  41. private final LumaUserMapper lumaUserMapper;
  42. private final UserMapper userMapper;
  43. private final RedisService redisService;
  44. @Override
  45. public LumaUser getLumaUser(Long userId, Long relationId) {
  46. GroupsRelation groupsRelation = getGroupsRelation(userId, relationId);
  47. GroupsTrips groupsTrips = getGroupsTrips(groupsRelation);
  48. GoodsDonSku goodsDonSku = skuMapper.selectById(groupsTrips.getSkuId());
  49. if (goodsDonSku != null && goodsDonSku.getGoodsId() == Constant.LUMA_GOODS_ID) {
  50. return getLumaUser(userId, relationId, groupsRelation, goodsDonSku);
  51. } else {
  52. throw BusinessRuntimeException.getInstance("服务器出了点问题");
  53. }
  54. }
  55. private GroupsRelation getGroupsRelation(Long userId, Long relationId) {
  56. List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
  57. GroupsRelation groupsRelation = groupsRelationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class).in(GroupsRelation::getUserId, userIdList).eq(GroupsRelation::getId, relationId));
  58. if (groupsRelation == null) {
  59. throw BusinessRuntimeException.getInstance("车票不存在");
  60. }
  61. return groupsRelation;
  62. }
  63. /**
  64. * 获取车队信息
  65. *
  66. * @param groupsRelation
  67. * @return
  68. */
  69. private GroupsTrips getGroupsTrips(GroupsRelation groupsRelation) {
  70. GroupsTrips groupsTrips = groupsMapper.selectById(groupsRelation.getGroupsId());
  71. if (groupsTrips == null) {
  72. throw BusinessRuntimeException.getInstance("车队异常");
  73. }
  74. return groupsTrips;
  75. }
  76. private LumaUser getLumaUser(Long userId, Long relationId, GroupsRelation groupsRelation, GoodsDonSku goodsDonSku) {
  77. LumaUser lumaUser = lumaUserMapper.selectOne(Wrappers.lambdaQuery(LumaUser.class).eq(LumaUser::getRelationId, relationId));
  78. User user = userMapper.selectById(userId);
  79. if (lumaUser == null) {
  80. lumaUser = createLumaUser(groupsRelation, user, goodsDonSku);
  81. } else {
  82. updateLumaUser(groupsRelation, user, lumaUser);
  83. }
  84. return lumaUser;
  85. }
  86. private void updateLumaUser(GroupsRelation groupsRelation, User user, LumaUser lumaUser) {
  87. lumaUser.setName(user.getNickname());
  88. lumaUser.setImg(getWxImg(user.getHeadimgurl(), user));
  89. lumaUser.setExpireTime(groupsRelation.getExpiryTime());
  90. lumaUserMapper.updateById(lumaUser);
  91. lumaUser.setAqType(groupsRelation.getAqType());
  92. redisService.set(RedisService.key.LUMA_USER.getName() + lumaUser.getUserToken(), lumaUser, RedisService.key.LUMA_USER.getTimeout());
  93. }
  94. private LumaUser createLumaUser(GroupsRelation groupsRelation, User user, GoodsDonSku goodsDonSku) {
  95. LumaUser lumaUser = new LumaUser();
  96. lumaUser.setExpireTime(groupsRelation.getExpiryTime());
  97. lumaUser.setName(user.getNickname());
  98. lumaUser.setImg(getWxImg(user.getHeadimgurl(), user));
  99. lumaUser.setRelationId(groupsRelation.getId());
  100. lumaUser.setUserToken(UUID.randomUUID().toString());
  101. if (groupsRelation.getAqType() == 2) {
  102. lumaUser.setNum(goodsDonSku.getLumaNum());
  103. } else {
  104. lumaUser.setNum(goodsDonSku.getLumaNum());
  105. }
  106. lumaUser.setAqType(groupsRelation.getAqType());
  107. try {
  108. lumaUserMapper.insert(lumaUser);
  109. } catch (DuplicateKeyException e) {
  110. }
  111. redisService.set(RedisService.key.LUMA_NUM_LIMIT.getName() + lumaUser.getId(), lumaUser.getNum(), RedisService.key.LUMA_NUM_LIMIT.getTimeout());
  112. return lumaUser;
  113. }
  114. /**
  115. * 更换wx头像至oss
  116. */
  117. private String getWxImg(String headimgurl, User user) {
  118. if (headimgurl.contains("thirdwx.qlogo.cn")) {
  119. try {
  120. return uploadPic(headimgurl, "wxheadimg-" + user.getId());
  121. } catch (Exception ex) {
  122. log.error("上传微信头像错误!msg:{}", StringUtil.getErrorText(ex));
  123. return "./avatars.png";
  124. }
  125. } else {
  126. return user.getHeadimgurl();
  127. }
  128. }
  129. private static String uploadPic(String url, String prefix) throws IOException {
  130. byte[] body = HttpUtil.downloadBytes(url);
  131. Path tempFile = Files.createTempFile(prefix, ".jpeg");
  132. try (FileImageOutputStream imageOutput = new FileImageOutputStream(tempFile.toFile())) {
  133. imageOutput.write(body, 0, body.length);
  134. }
  135. Map<String, Object> paramMap = new HashMap<>();
  136. paramMap.put("file", tempFile.toFile());
  137. JSONObject result = JSONUtil.parseObj(HttpUtil.post("https://files.liuliangbang.vip/pic/ups", paramMap));
  138. return result.getJSONObject("value").getJSONArray("saved").getJSONObject(0).getJSONObject("info").getStr("cdnUrl");
  139. }
  140. }