From 67d06a785d5fc4524639ace27651c01ff05a4b58 Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期四, 29 五月 2025 22:31:33 +0800 Subject: [PATCH] 修改bug --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java | 196 +++++++++++++++++++++++++++++++++++++----------- 1 files changed, 149 insertions(+), 47 deletions(-) diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java index 689b6e2..84b6550 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java @@ -1,6 +1,5 @@ package com.ruoyi.order.service.impl; -import cn.hutool.db.DaoTemplate; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -10,17 +9,17 @@ import com.ruoyi.account.api.feignClient.AppUserIntegralChangeClient; import com.ruoyi.account.api.model.TAppUser; import com.ruoyi.account.api.model.TAppUserCar; -import com.ruoyi.account.api.feignClient.AppUserClient; -import com.ruoyi.account.api.model.TAppUser; import com.ruoyi.account.api.model.TAppUserIntegralChange; +import com.ruoyi.chargingPile.api.domain.SiteMenu; +import com.ruoyi.chargingPile.api.feignClient.PartnerClient; import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.chargingPile.api.model.Site; -import com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TOrderEvaluate; import com.ruoyi.order.api.model.TOrderEvaluateTag; @@ -38,24 +37,21 @@ import com.ruoyi.other.api.domain.TEvaluationTag; import com.ruoyi.other.api.domain.TIntegralRule; import com.ruoyi.other.api.domain.TVip; -import com.ruoyi.other.api.feignClient.IntegralRuleClient; -import com.ruoyi.other.api.feignClient.TEvaluationTagClient; -import com.ruoyi.other.api.feignClient.VipClient; +import com.ruoyi.other.api.feignClient.*; import com.ruoyi.other.api.vo.TEvaluationTagVO; +import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.api.feignClient.SysUserClient; +import com.ruoyi.system.api.feignClient.SysUserRoleClient; +import com.ruoyi.system.api.model.SysUserRoleVo; import io.seata.spring.annotation.GlobalTransactional; import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -98,6 +94,21 @@ @Resource private VipClient vipClient; + @Resource + private SysUserClient sysUserClient; + + @Resource + private PartnerClient partnerService; + + @Resource + private UserSiteClient userSiteClient; + + @Resource + private RoleSiteClient roleSiteClient; + + @Resource + private SysUserRoleClient sysUserRoleClient; + @@ -113,31 +124,48 @@ @Resource private TOrderEvaluateMapper orderEvaluateMapper; @Override - public List<TEvaluationTagVO> getTagCount() { + public List<TEvaluationTagVO> getTagCount(Integer siteId) { // 查询标签列表 R<List<TEvaluationTagVO>> r = evaluationTagClient.getList(); List<TEvaluationTagVO> tagList = r.getData(); + // 查询站点下的所有订单 + List<TChargingOrder> tChargingOrders = chargingOrderMapper.selectList(Wrappers.lambdaQuery(TChargingOrder.class) + .eq(TChargingOrder::getSiteId, siteId)); + if(CollectionUtils.isEmpty(tChargingOrders)){ + tagList.forEach(e->e.setTagCount(0)); + packageTagCount(0L,"有图",2,tagList); + packageTagCount(0L,"好评",3,tagList); + packageTagCount(0L,"中差评",4,tagList); + return tagList; + } List<Integer> tagIds = tagList.stream().map(TEvaluationTagVO::getId).collect(Collectors.toList()); // 统计标签使用数量 List<TEvaluationTagVO> counts = orderEvaluateTagMapper.getCountByTagIds(tagIds); + List<Integer> ids = counts.stream().map(TEvaluationTagVO::getId).collect(Collectors.toList()); tagList.forEach(tag -> { - counts.forEach(count -> { - if (tag.getId().equals(count.getId())) { - tag.setTagCount(count.getTagCount()); - } - }); + if(ids.contains(tag.getId())){ + counts.forEach(count -> { + if (tag.getId().equals(count.getId())) { + tag.setTagCount(count.getTagCount()); + } + }); + }else{ + tag.setTagCount(0); + } + }); tagList = tagList.stream().sorted(Comparator.comparing(TEvaluationTagVO::getTagCount).reversed()).collect(Collectors.toList()); // 统计有图,好评,中差评数量 long imgUrlCount = this.count(Wrappers.lambdaQuery(TOrderEvaluate.class) - .isNotNull(TOrderEvaluate::getImgUrl)); - packageTagCount(imgUrlCount,"有图",tagList); + .isNotNull(TOrderEvaluate::getImgUrl) + .ne(TOrderEvaluate::getImgUrl,"")); + packageTagCount(imgUrlCount,"有图",2,tagList); long goodCount = this.count(Wrappers.lambdaQuery(TOrderEvaluate.class) .ge(TOrderEvaluate::getMark,4)); - packageTagCount(goodCount,"好评",tagList); + packageTagCount(goodCount,"好评",3,tagList); long badCount = this.count(Wrappers.lambdaQuery(TOrderEvaluate.class) .le(TOrderEvaluate::getMark,3)); - packageTagCount(badCount,"中差评",tagList); + packageTagCount(badCount,"中差评",4,tagList); return tagList; } @@ -163,9 +191,11 @@ orderEvaluateVO.setName(appUser.getName()); orderEvaluateVO.setAvatar(appUser.getAvatar()); } - TAppUserCar appUserCar = appUserCars.stream().filter(car -> car.getId().equals(Long.parseLong(String.valueOf(orderEvaluateVO.getAppUserCarId())))).findFirst().orElse(null); - if(Objects.nonNull(appUserCar)){ - orderEvaluateVO.setCarName(appUserCar.getVehicleBrand()); + if(Objects.nonNull(orderEvaluateVO.getAppUserCarId())){ + TAppUserCar appUserCar = appUserCars.stream().filter(car -> car.getId().equals(Long.parseLong(String.valueOf(orderEvaluateVO.getAppUserCarId())))).findFirst().orElse(null); + if(Objects.nonNull(appUserCar)){ + orderEvaluateVO.setCarName(appUserCar.getVehicleBrand()); + } } }); pageInfo.setRecords(list); @@ -181,10 +211,30 @@ siteDetailEvaluateVO.setOrderEvaluateVOS(tChargingOrders); // 统计好评率 long goodCount = tChargingOrders.stream().filter(orderEvaluateVO -> orderEvaluateVO.getMark()>=4).count(); - BigDecimal reviewRate = new BigDecimal(goodCount).divide(new BigDecimal(tChargingOrders.size())).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal reviewRate = new BigDecimal(goodCount).divide(new BigDecimal(tChargingOrders.size()),2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP); siteDetailEvaluateVO.setReviewRate(reviewRate); siteDetailEvaluateVO.setEvaluateCount(tChargingOrders.size()); - siteDetailEvaluateVO.setOrderEvaluateVOS(tChargingOrders.stream().limit(3).collect(Collectors.toList())); + List<TOrderEvaluateVO> collect = tChargingOrders.stream().limit(3).collect(Collectors.toList()); + // 查询评价下的标签 + List<Long> orderIds = collect.stream().map(TOrderEvaluateVO::getId).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(orderIds)){ + List<TOrderEvaluateTag> tOrderEvaluateTags = orderEvaluateTagMapper.selectList(Wrappers.lambdaQuery(TOrderEvaluateTag.class) + .in(TOrderEvaluateTag::getOrderEvaluateId, orderIds)); + for (TOrderEvaluateVO tOrderEvaluateVO : collect) { + List<TOrderEvaluateTag> tOrderEvaluateTagList = tOrderEvaluateTags.stream().filter(e -> e.getOrderEvaluateId().equals(tOrderEvaluateVO.getId())).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(tOrderEvaluateTagList)){ + List<Integer> tagIds = tOrderEvaluateTagList.stream().map(TOrderEvaluateTag::getEvaluationTagId).collect(Collectors.toList()); + List<TEvaluationTag> data = evaluationTagClient.getListByIds(tagIds).getData(); + tOrderEvaluateVO.setOrderEvaluateTags(data); + } + TAppUser data = appUserClient.getUserById(tOrderEvaluateVO.getAppUserId()).getData(); + if(Objects.nonNull(data)){ + tOrderEvaluateVO.setName(data.getName()); + tOrderEvaluateVO.setAvatar(data.getAvatar()); + } + } + } + siteDetailEvaluateVO.setOrderEvaluateVOS(collect); } return siteDetailEvaluateVO; } @@ -195,16 +245,18 @@ * @param name * @param tagList */ - private void packageTagCount(Long count,String name,List<TEvaluationTagVO> tagList){ + private void packageTagCount(Long count,String name,Integer type,List<TEvaluationTagVO> tagList){ if(count>0){ TEvaluationTagVO evaluationTagVO = new TEvaluationTagVO(); evaluationTagVO.setName(name); evaluationTagVO.setTagCount(Integer.parseInt(String.valueOf(count))); + evaluationTagVO.setType(type); tagList.add(evaluationTagVO); } } - - + + @Resource + private PartnerClient partnerClient; /** * 获取充电评价列表 * @param pageList @@ -218,14 +270,41 @@ List<TEvaluationTagVO> data = evaluationTagClient.getTagList(pageList.getEvaluateType()).getData(); evaluationTagIds = data.stream().map(TEvaluationTagVO::getId).collect(Collectors.toList()); } - List<GetOrderEvaluatePageListDTO> list = this.baseMapper.getPageList(pageList, evaluationTagIds, pageInfo); + + //校验合作商权限 + List<Integer> siteIds = new ArrayList<>(); + SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData(); + Integer roleType = sysUser.getRoleType(); + Integer objectId = sysUser.getObjectId(); + if(null == pageList.getSiteId() || 0 == pageList.getSiteId()){ + //合作商 + if(roleType == 2){ + Set<Integer> data = partnerService.authSite(objectId, SiteMenu.CHARGE_EVALUATION.getValue()).getData(); + siteIds = new ArrayList<>(data); + }else{ + //非管理员需要根据角色和用户配置查询允许的站点数据 + if(!SecurityUtils.isAdmin(tokenService.getLoginUser().getUserid())){ + List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); + List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData(); + List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData(); + data.addAll(data1); + siteIds = data; + } + } + } + List<GetOrderEvaluatePageListDTO> list = this.baseMapper.getPageList(pageList, evaluationTagIds, siteIds, pageInfo); for (GetOrderEvaluatePageListDTO dto : list) { TAppUser appUser = appUserClient.getUserById(dto.getAppUserId()).getData(); - dto.setAvatar(appUser.getAvatar()); - String phone = appUser.getPhone(); - dto.setPhone(phone.substring(0, 3) + "****" + phone.substring(6)); - Site site = siteClient.getSiteByIds(Arrays.asList(dto.getSiteId())).getData().get(0); - dto.setSiteName(site.getName()); + if(null != appUser){ + dto.setAvatar(appUser.getAvatar()); + String phone = appUser.getPhone(); + dto.setPhone(phone.substring(0, 3) + "****" + phone.substring(6)); + } + List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(dto.getSiteId())).getData(); + if(null != data1 && data1.size() > 0){ + Site site = data1.get(0); + dto.setSiteName(site.getName()); + } List<TOrderEvaluateTag> tOrderEvaluateTags = orderEvaluateTagMapper.selectList(new LambdaQueryWrapper<TOrderEvaluateTag>().eq(TOrderEvaluateTag::getOrderEvaluateId, dto.getId())); List<Integer> tagIds = tOrderEvaluateTags.stream().map(TOrderEvaluateTag::getEvaluationTagId).collect(Collectors.toList()); if(tagIds.size() > 0){ @@ -233,6 +312,8 @@ List<String> collect = data.stream().map(TEvaluationTag::getName).collect(Collectors.toList()); dto.setTags(collect); } + dto.setAuthReply(roleType == 1 ? true : partnerService.authMenu(objectId, dto.getSiteId(), SiteMenu.CHARGE_EVALUATION_ANSWER.getValue())); + dto.setAuthDelete(roleType == 1 ? true : partnerService.authMenu(objectId, dto.getSiteId(), SiteMenu.CHARGE_EVALUATION_DEL.getValue())); } return pageInfo.setRecords(list); } @@ -259,14 +340,27 @@ TChargingOrder chargingOrder = chargingOrderService.getById(query.getOrderId()); orderEvaluate.setAppUserCarId(chargingOrder.getAppUserCarId()); } + TAppUser appUser = appUserClient.getUserById(userid).getData(); + + //检测敏感词 + String content = orderEvaluate.getContent(); + if(StringUtils.isNotEmpty(content)){ + Boolean data = appUserClient.sensitiveWordDetection(content, appUser.getWxOpenid()).getData(); + if(data){ + return AjaxResult.error("评价包含违规内容,请重新评价!"); + } + } + orderEvaluate.setContent(content); this.save(orderEvaluate); List<Integer> tagIds = query.getTagIds(); - for (Integer tagId : tagIds) { - TOrderEvaluateTag orderEvaluateTag = new TOrderEvaluateTag(); - orderEvaluateTag.setOrderEvaluateId(orderEvaluate.getId()); - orderEvaluateTag.setEvaluationTagId(tagId); - orderEvaluateTagMapper.insert(orderEvaluateTag); + if(null != tagIds){ + for (Integer tagId : tagIds) { + TOrderEvaluateTag orderEvaluateTag = new TOrderEvaluateTag(); + orderEvaluateTag.setOrderEvaluateId(orderEvaluate.getId()); + orderEvaluateTag.setEvaluationTagId(tagId); + orderEvaluateTagMapper.insert(orderEvaluateTag); + } } //判断发放积分 文字+图片+5星好评 @@ -276,7 +370,6 @@ //积分 Integer num1 = JSON.parseObject(credit).getInteger("num1"); if(null != num1 && 0 < num1){ - TAppUser appUser = appUserClient.getUserById(userid).getData(); if(null != appUser.getVipId()){ TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); Integer doubleIntegration = vip.getDoubleIntegration(); @@ -289,6 +382,7 @@ appUser.setPoints(appUser.getPoints() + num1); appUserClient.updateAppUser(appUser); + TChargingOrder chargingOrder = chargingOrderService.getById(orderEvaluate.getOrderId()); //积分变动明细 TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); appUserIntegralChange.setAppUserId(appUser.getId()); @@ -296,6 +390,8 @@ appUserIntegralChange.setHistoricalIntegral(points); appUserIntegralChange.setCurrentIntegral(points + num1); appUserIntegralChange.setCreateTime(LocalDateTime.now()); + appUserIntegralChange.setOrderCode(chargingOrder.getCode()); + appUserIntegralChange.setExtension(orderEvaluate.getOrderId().toString()); appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); } } @@ -310,16 +406,22 @@ * @return */ @Override - public OrderEvaluateVo getOrderEvaluate(Integer orderId, Integer orderType) { + public OrderEvaluateVo getOrderEvaluate(String orderId, Integer orderType) { TOrderEvaluate orderEvaluate = this.getOne(new LambdaQueryWrapper<TOrderEvaluate>().eq(TOrderEvaluate::getOrderId, orderId).eq(TOrderEvaluate::getOrderType, orderType)); if(null != orderEvaluate){ + Long userId = tokenService.getLoginUserApplet().getUserId(); + if(!orderEvaluate.getAppUserId().equals(userId)){ + throw new RuntimeException("权限不足"); + } OrderEvaluateVo orderEvaluateVo = new OrderEvaluateVo(); BeanUtils.copyProperties(orderEvaluate, orderEvaluateVo); List<TOrderEvaluateTag> tOrderEvaluateTags = orderEvaluateTagMapper.selectList(new LambdaQueryWrapper<TOrderEvaluateTag>().eq(TOrderEvaluateTag::getOrderEvaluateId, orderEvaluate.getId())); List<Integer> tagId = tOrderEvaluateTags.stream().map(TOrderEvaluateTag::getEvaluationTagId).collect(Collectors.toList()); - List<TEvaluationTag> data = evaluationTagClient.getListByIds(tagId).getData(); - List<String> collect = data.stream().map(TEvaluationTag::getName).collect(Collectors.toList()); - orderEvaluateVo.setTagName(collect); + if(tagId.size() > 0){ + List<TEvaluationTag> data = evaluationTagClient.getListByIds(tagId).getData(); + List<String> collect = data.stream().map(TEvaluationTag::getName).collect(Collectors.toList()); + orderEvaluateVo.setTagName(collect); + } return orderEvaluateVo; } return null; -- Gitblit v1.7.1