FeedbackServiceImpl.java 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package com.fdkankan.manage.service.impl;
  2. import cn.hutool.core.net.Ipv4Util;
  3. import cn.hutool.extra.servlet.ServletUtil;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.fdkankan.manage.common.IpUtils;
  9. import com.fdkankan.manage.common.PageInfo;
  10. import com.fdkankan.manage.common.RedisKeyUtil;
  11. import com.fdkankan.manage.common.ResultCode;
  12. import com.fdkankan.manage.entity.Feedback;
  13. import com.fdkankan.manage.entity.FeedbackOption;
  14. import com.fdkankan.manage.exception.BusinessException;
  15. import com.fdkankan.manage.mapper.IFeedbackMapper;
  16. import com.fdkankan.manage.service.IFeedbackOptionService;
  17. import com.fdkankan.manage.service.IFeedbackService;
  18. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  19. import com.fdkankan.manage.util.ProvinceUtils;
  20. import com.fdkankan.manage.vo.request.FeedbackParam;
  21. import com.fdkankan.manage.vo.response.GroupByAvg;
  22. import com.fdkankan.manage.vo.response.GroupByCount;
  23. import com.fdkankan.manage.vo.response.IpAddressVo;
  24. import com.fdkankan.redis.util.RedisUtil;
  25. import org.apache.commons.lang3.StringUtils;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.stereotype.Service;
  28. import sun.net.util.IPAddressUtil;
  29. import javax.servlet.http.HttpServletRequest;
  30. import java.math.BigDecimal;
  31. import java.math.RoundingMode;
  32. import java.util.HashMap;
  33. import java.util.HashSet;
  34. import java.util.List;
  35. import java.util.Set;
  36. import java.util.stream.Collectors;
  37. /**
  38. * <p>
  39. * 服务实现类
  40. * </p>
  41. *
  42. * @author
  43. * @since 2024-01-24
  44. */
  45. @Service
  46. public class FeedbackServiceImpl extends ServiceImpl<IFeedbackMapper, Feedback> implements IFeedbackService {
  47. @Autowired
  48. IFeedbackOptionService feedbackOptionService;
  49. @Override
  50. public Object pageList(FeedbackParam param) {
  51. LambdaQueryWrapper<Feedback> wrapper = new LambdaQueryWrapper<>();
  52. if(param.getHardwareOptionId() != null){
  53. wrapper.eq(Feedback::getHardwareOptionId,param.getHardwareOptionId());
  54. }
  55. if(param.getSoftwareOptionId() != null){
  56. wrapper.eq(Feedback::getSoftwareOptionId,param.getSoftwareOptionId());
  57. }
  58. if(param.getIndustryOptionId() != null){
  59. wrapper.eq(Feedback::getIndustryOptionId,param.getIndustryOptionId());
  60. }
  61. if(param.getStatus() != null){
  62. wrapper.eq(Feedback::getStatus,param.getStatus());
  63. }
  64. Page<Feedback> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
  65. HashSet<Integer> optionIds = new HashSet<>();
  66. Set<Integer> collect = page.getRecords().stream().map(Feedback::getHardwareOptionId).collect(Collectors.toSet());
  67. Set<Integer> collect1 = page.getRecords().stream().map(Feedback::getSoftwareOptionId).collect(Collectors.toSet());
  68. Set<Integer> collect2 = page.getRecords().stream().map(Feedback::getIndustryOptionId).collect(Collectors.toSet());
  69. optionIds.addAll(collect);
  70. optionIds.addAll(collect1);
  71. optionIds.addAll(collect2);
  72. HashMap<Integer, FeedbackOption> map = feedbackOptionService.getMapByIds(optionIds);
  73. for (Feedback record : page.getRecords()) {
  74. if(record.getHardwareOptionId()!=null && map.get(record.getHardwareOptionId())!= null){
  75. record.setHardwareOption(map.get(record.getHardwareOptionId()));
  76. }
  77. if(record.getSoftwareOptionId()!=null && map.get(record.getSoftwareOptionId())!= null){
  78. record.setSoftwareOption(map.get(record.getSoftwareOptionId()));
  79. }
  80. if(record.getIndustryOptionId()!=null && map.get(record.getIndustryOptionId())!= null){
  81. record.setIndustryOption(map.get(record.getIndustryOptionId()));
  82. }
  83. }
  84. return PageInfo.PageInfo(page);
  85. }
  86. @Override
  87. public void handle(Feedback param) {
  88. if(param.getId() == null){
  89. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  90. }
  91. LambdaUpdateWrapper<Feedback> wrapper = new LambdaUpdateWrapper<>();
  92. wrapper.eq(Feedback::getId,param.getId());
  93. if(StringUtils.isNotBlank(param.getResult())){
  94. wrapper.set(Feedback::getResult,param.getResult());
  95. }
  96. wrapper.set(Feedback::getStatus,1);
  97. this.update(wrapper);
  98. }
  99. @Override
  100. public Object scoreAug() {
  101. HashMap<Integer,BigDecimal> map = new HashMap<>();
  102. List<GroupByAvg> list = this.getBaseMapper().scoreAugHardware();
  103. List<GroupByAvg> list2 = this.getBaseMapper().scoreAugSoftware();
  104. list.forEach(e ->map.put(e.getId(),e.getAvg()));
  105. list2.forEach(e ->map.put(e.getId(),e.getAvg()));
  106. List<FeedbackOption> options = feedbackOptionService.list();
  107. List<FeedbackOption> hardwareList = options.stream().filter(e -> e.getTypeId().equals(2)).collect(Collectors.toList());
  108. List<FeedbackOption> softwareList = options.stream().filter(e -> e.getTypeId().equals(2)).collect(Collectors.toList());
  109. setScore(hardwareList,map);
  110. setScore(softwareList,map);
  111. HashMap<String,Object> result = new HashMap<>();
  112. result.put("hardware",hardwareList);
  113. result.put("software",softwareList);
  114. return result;
  115. }
  116. private void setScore(List<FeedbackOption> list,HashMap<Integer,BigDecimal> map){
  117. for (FeedbackOption feedbackOption : list) {
  118. BigDecimal value = map.get(feedbackOption.getTypeId());
  119. if(value == null){
  120. feedbackOption.setScore("暂无评分");
  121. continue;
  122. }
  123. BigDecimal bigDecimal = value.setScale(1, RoundingMode.HALF_UP);
  124. feedbackOption.setScore(bigDecimal.toString());
  125. }
  126. }
  127. @Autowired
  128. RedisUtil redisUtil;
  129. @Override
  130. public Object getDefaultAddress(HttpServletRequest request) {
  131. //获取ip地址
  132. String clientIP = IpUtils.getIpAddr(request);
  133. if(StringUtils.isBlank(clientIP)){
  134. return new IpAddressVo();
  135. }
  136. String redisKey = String.format(RedisKeyUtil.ipAddress,clientIP);
  137. if(redisUtil.hasKey(redisKey)){
  138. return JSONObject.parseObject(redisUtil.get(redisKey));
  139. }
  140. IpAddressVo addressByIp = ProvinceUtils.getAddressByIp(clientIP);
  141. redisUtil.set(redisKey,JSONObject.toJSONString(addressByIp));
  142. return addressByIp;
  143. }
  144. }
  145. // proxy_set_header X-Real-IP $remote_addr; //添加此项