package com.fdkankan.manage.service.impl; import cn.hutool.core.net.Ipv4Util; import cn.hutool.extra.servlet.ServletUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.manage.common.IpUtils; import com.fdkankan.manage.common.PageInfo; import com.fdkankan.manage.common.RedisKeyUtil; import com.fdkankan.manage.common.ResultCode; import com.fdkankan.manage.entity.Feedback; import com.fdkankan.manage.entity.FeedbackOption; import com.fdkankan.manage.exception.BusinessException; import com.fdkankan.manage.mapper.IFeedbackMapper; import com.fdkankan.manage.service.IFeedbackOptionService; import com.fdkankan.manage.service.IFeedbackService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.manage.util.ProvinceUtils; import com.fdkankan.manage.vo.request.FeedbackParam; import com.fdkankan.manage.vo.response.GroupByAvg; import com.fdkankan.manage.vo.response.GroupByCount; import com.fdkankan.manage.vo.response.IpAddressVo; import com.fdkankan.redis.util.RedisUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import sun.net.util.IPAddressUtil; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author * @since 2024-01-24 */ @Service public class FeedbackServiceImpl extends ServiceImpl implements IFeedbackService { @Autowired IFeedbackOptionService feedbackOptionService; @Override public Object pageList(FeedbackParam param) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if(param.getHardwareOptionId() != null){ wrapper.eq(Feedback::getHardwareOptionId,param.getHardwareOptionId()); } if(param.getSoftwareOptionId() != null){ wrapper.eq(Feedback::getSoftwareOptionId,param.getSoftwareOptionId()); } if(param.getIndustryOptionId() != null){ wrapper.eq(Feedback::getIndustryOptionId,param.getIndustryOptionId()); } if(param.getStatus() != null){ wrapper.eq(Feedback::getStatus,param.getStatus()); } Page page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper); HashSet optionIds = new HashSet<>(); Set collect = page.getRecords().stream().map(Feedback::getHardwareOptionId).collect(Collectors.toSet()); Set collect1 = page.getRecords().stream().map(Feedback::getSoftwareOptionId).collect(Collectors.toSet()); Set collect2 = page.getRecords().stream().map(Feedback::getIndustryOptionId).collect(Collectors.toSet()); optionIds.addAll(collect); optionIds.addAll(collect1); optionIds.addAll(collect2); HashMap map = feedbackOptionService.getMapByIds(optionIds); for (Feedback record : page.getRecords()) { if(record.getHardwareOptionId()!=null && map.get(record.getHardwareOptionId())!= null){ record.setHardwareOption(map.get(record.getHardwareOptionId())); } if(record.getSoftwareOptionId()!=null && map.get(record.getSoftwareOptionId())!= null){ record.setSoftwareOption(map.get(record.getSoftwareOptionId())); } if(record.getIndustryOptionId()!=null && map.get(record.getIndustryOptionId())!= null){ record.setIndustryOption(map.get(record.getIndustryOptionId())); } } return PageInfo.PageInfo(page); } @Override public void handle(Feedback param) { if(param.getId() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(Feedback::getId,param.getId()); if(StringUtils.isNotBlank(param.getResult())){ wrapper.set(Feedback::getResult,param.getResult()); } wrapper.set(Feedback::getStatus,1); this.update(wrapper); } @Override public Object scoreAug() { HashMap map = new HashMap<>(); List list = this.getBaseMapper().scoreAugHardware(); List list2 = this.getBaseMapper().scoreAugSoftware(); list.forEach(e ->map.put(e.getId(),e.getAvg())); list2.forEach(e ->map.put(e.getId(),e.getAvg())); List options = feedbackOptionService.list(); List hardwareList = options.stream().filter(e -> e.getTypeId().equals(2)).collect(Collectors.toList()); List softwareList = options.stream().filter(e -> e.getTypeId().equals(2)).collect(Collectors.toList()); setScore(hardwareList,map); setScore(softwareList,map); HashMap result = new HashMap<>(); result.put("hardware",hardwareList); result.put("software",softwareList); return result; } private void setScore(List list,HashMap map){ for (FeedbackOption feedbackOption : list) { BigDecimal value = map.get(feedbackOption.getTypeId()); if(value == null){ feedbackOption.setScore("暂无评分"); continue; } BigDecimal bigDecimal = value.setScale(1, RoundingMode.HALF_UP); feedbackOption.setScore(bigDecimal.toString()); } } @Autowired RedisUtil redisUtil; @Override public Object getDefaultAddress(HttpServletRequest request) { //获取ip地址 String clientIP = IpUtils.getIpAddr(request); if(StringUtils.isBlank(clientIP)){ return new IpAddressVo(); } String redisKey = String.format(RedisKeyUtil.ipAddress,clientIP); if(redisUtil.hasKey(redisKey)){ return JSONObject.parseObject(redisUtil.get(redisKey)); } IpAddressVo addressByIp = ProvinceUtils.getAddressByIp(clientIP); redisUtil.set(redisKey,JSONObject.toJSONString(addressByIp)); return addressByIp; } } // proxy_set_header X-Real-IP $remote_addr; //添加此项