From e755145ce3a5d14468a09b4062c84d7c13a92f0c Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期一, 04 十一月 2024 15:39:07 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java | 181 +++++++++++++++++++++++++++++++++------------ 1 files changed, 132 insertions(+), 49 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 0e9038a..dee224b 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 @@ -15,6 +15,7 @@ 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.feignClient.PartnerClient; import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO; @@ -24,6 +25,7 @@ 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; @@ -41,10 +43,12 @@ 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; @@ -54,11 +58,7 @@ 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; /** @@ -101,6 +101,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; + @@ -116,10 +131,20 @@ @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); @@ -139,14 +164,15 @@ 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; } @@ -172,9 +198,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); @@ -193,7 +221,27 @@ 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; } @@ -204,11 +252,12 @@ * @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); } } @@ -227,7 +276,32 @@ 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<>(); + if(null == pageList.getSiteId() || 0 == pageList.getSiteId()){ + SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData(); + Integer roleType = sysUser.getRoleType(); + Integer objectId = sysUser.getObjectId(); + //合作商 + if(roleType == 2){ + Set<Integer> data = partnerService.authSite(objectId, "/data/site").getData(); + siteIds = new ArrayList<>(data); + }else{ + //非管理员需要根据角色和用户配置查询允许的站点数据 + if(!SecurityUtils.isAdmin(SecurityUtils.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; + } + } + }else{ + siteIds.add(pageList.getSiteId()); + } + + List<GetOrderEvaluatePageListDTO> list = this.baseMapper.getPageList(pageList, evaluationTagIds, siteIds, pageInfo); for (GetOrderEvaluatePageListDTO dto : list) { TAppUser appUser = appUserClient.getUserById(dto.getAppUserId()).getData(); if(null != appUser){ @@ -235,8 +309,11 @@ 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()); + 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){ @@ -274,29 +351,31 @@ //检测敏感词 String content = orderEvaluate.getContent(); - String token = appUserClient.getWXToken().getData(); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("content", content); - jsonObject.put("version", 2); - jsonObject.put("scene", 2); - jsonObject.put("openid", appUser.getWxOpenid()); - String post = HttpUtils.post("https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" + token, jsonObject.toString()); - JSONObject object = JSONObject.parseObject(post); - Integer errcode = object.getInteger("errcode"); - if(0 != errcode){ - throw new RuntimeException(object.getString("errmsg")); - } - JSONArray detail = object.getJSONArray("detail"); - for (int i = 0; i < detail.size(); i++) { - JSONObject jsonObject1 = detail.getJSONObject(i); - Integer errcode1 = jsonObject1.getInteger("errcode"); - if(0 == errcode1){ - String suggest = jsonObject1.getString("suggest"); - Integer label = jsonObject1.getInteger("label"); - String keyword = jsonObject1.getString("keyword"); - Integer prob = jsonObject1.getInteger("prob"); - if(("risky".equals(suggest) || "review".equals(suggest)) && 100 != label && StringUtils.isNotEmpty(keyword) && 80 <= prob){ - content = content.replaceAll(keyword, "***"); + if(StringUtils.isNotEmpty(content)){ + String token = appUserClient.getWXToken().getData(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("content", content); + jsonObject.put("version", 2); + jsonObject.put("scene", 2); + jsonObject.put("openid", appUser.getWxOpenid()); + String post = HttpUtils.post("https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" + token, jsonObject.toString()); + JSONObject object = JSONObject.parseObject(post); + Integer errcode = object.getInteger("errcode"); + if(0 != errcode){ + throw new RuntimeException(object.getString("errmsg")); + } + JSONArray detail = object.getJSONArray("detail"); + for (int i = 0; i < detail.size(); i++) { + JSONObject jsonObject1 = detail.getJSONObject(i); + Integer errcode1 = jsonObject1.getInteger("errcode"); + if(0 == errcode1){ + String suggest = jsonObject1.getString("suggest"); + Integer label = jsonObject1.getInteger("label"); + String keyword = jsonObject1.getString("keyword"); + Integer prob = jsonObject1.getInteger("prob"); + if(("risky".equals(suggest) || "review".equals(suggest)) && 100 != label && StringUtils.isNotEmpty(keyword) && 80 <= prob){ + return AjaxResult.error("评价包含违规内容,请重新评价!"); + } } } } @@ -330,6 +409,7 @@ appUser.setPoints(appUser.getPoints() + num1); appUserClient.updateAppUser(appUser); + TChargingOrder chargingOrder = chargingOrderService.getById(orderEvaluate.getOrderId()); //积分变动明细 TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); appUserIntegralChange.setAppUserId(appUser.getId()); @@ -337,7 +417,8 @@ appUserIntegralChange.setHistoricalIntegral(points); appUserIntegralChange.setCurrentIntegral(points + num1); appUserIntegralChange.setCreateTime(LocalDateTime.now()); - appUserIntegralChange.setOrderCode(orderEvaluate.getId().toString()); + appUserIntegralChange.setOrderCode(chargingOrder.getCode()); + appUserIntegralChange.setExtension(orderEvaluate.getOrderId().toString()); appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); } } @@ -352,16 +433,18 @@ * @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){ 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