|
|
@@ -0,0 +1,427 @@
|
|
|
+package org.dromara.order.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import org.dromara.common.core.exception.ServiceException;
|
|
|
+import org.dromara.common.core.utils.MapstructUtils;
|
|
|
+import org.dromara.common.core.utils.StringUtils;
|
|
|
+import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
+import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.dromara.order.domain.OrderEvaluationItem;
|
|
|
+import org.dromara.order.domain.bo.OrderEvaluationItemBo;
|
|
|
+import org.dromara.order.domain.vo.OrderEvaluationItemVo;
|
|
|
+import org.dromara.order.domain.vo.OrderEvaluationListVo;
|
|
|
+import org.dromara.order.domain.vo.OrderProductBriefVo;
|
|
|
+import org.dromara.order.mapper.OrderEvaluationItemMapper;
|
|
|
+import org.dromara.order.mapper.OrderProductMapper;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.dromara.order.domain.bo.OrderEvaluationHeaderBo;
|
|
|
+import org.dromara.order.domain.vo.OrderEvaluationHeaderVo;
|
|
|
+import org.dromara.order.domain.OrderEvaluationHeader;
|
|
|
+import org.dromara.order.mapper.OrderEvaluationHeaderMapper;
|
|
|
+import org.dromara.order.service.IOrderEvaluationHeaderService;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 订单评价主Service业务层处理
|
|
|
+ *
|
|
|
+ * @author LionLi
|
|
|
+ * @date 2026-03-09
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@RequiredArgsConstructor
|
|
|
+@Service
|
|
|
+public class OrderEvaluationHeaderServiceImpl extends ServiceImpl<OrderEvaluationHeaderMapper, OrderEvaluationHeader> implements IOrderEvaluationHeaderService {
|
|
|
+
|
|
|
+ private final OrderEvaluationHeaderMapper baseMapper;
|
|
|
+
|
|
|
+ private final OrderEvaluationItemMapper itemMapper;
|
|
|
+
|
|
|
+ private final OrderProductMapper orderProductMapper;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询订单评价主
|
|
|
+ *
|
|
|
+ * @param id 主键
|
|
|
+ * @return 订单评价主
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public OrderEvaluationHeaderVo queryById(Long id) {
|
|
|
+ OrderEvaluationHeader header = baseMapper.selectById(id);
|
|
|
+ if (header == null) return null;
|
|
|
+
|
|
|
+ OrderEvaluationHeaderVo vo = MapstructUtils.convert(header, OrderEvaluationHeaderVo.class);
|
|
|
+
|
|
|
+ // 为了保持一致性,queryById 也建议把明细查出来
|
|
|
+ List<OrderEvaluationItem> items = itemMapper.selectList(Wrappers.<OrderEvaluationItem>lambdaQuery()
|
|
|
+ .eq(OrderEvaluationItem::getEvaluationId, header.getId())
|
|
|
+ .eq(OrderEvaluationItem::getDelFlag, "0"));
|
|
|
+
|
|
|
+ if (!items.isEmpty()) {
|
|
|
+ vo.setOrderEvaluationItemList(items.stream()
|
|
|
+ .map(item -> MapstructUtils.convert(item, OrderEvaluationItemVo.class))
|
|
|
+ .collect(Collectors.toList()));
|
|
|
+ } else {
|
|
|
+ vo.setOrderEvaluationItemList(new ArrayList<>());
|
|
|
+ }
|
|
|
+
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public OrderEvaluationHeaderVo queryByOrderId(Long orderId) {
|
|
|
+ if (orderId == null) {
|
|
|
+ throw new ServiceException("订单ID不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 1. 查询主表
|
|
|
+ OrderEvaluationHeader header = baseMapper.selectOne(Wrappers.<OrderEvaluationHeader>lambdaQuery()
|
|
|
+ .eq(OrderEvaluationHeader::getOrderId, orderId)
|
|
|
+ .eq(OrderEvaluationHeader::getDelFlag, "0"));
|
|
|
+
|
|
|
+ if (header == null) {
|
|
|
+ // 如果还没评价,返回 null 或者抛错,由前端决定如何处理(通常返回 null 表示去新建评价)
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 转换为 VO
|
|
|
+ OrderEvaluationHeaderVo vo = MapstructUtils.convert(header, OrderEvaluationHeaderVo.class);
|
|
|
+
|
|
|
+ // 2. 查询明细列表
|
|
|
+ List<OrderEvaluationItem> items = itemMapper.selectList(Wrappers.<OrderEvaluationItem>lambdaQuery()
|
|
|
+ .eq(OrderEvaluationItem::getEvaluationId, header.getId())
|
|
|
+ .eq(OrderEvaluationItem::getDelFlag, "0")
|
|
|
+ .orderByAsc(OrderEvaluationItem::getId)); // 保持顺序
|
|
|
+
|
|
|
+ // 转换明细为 VO
|
|
|
+ if (!items.isEmpty()) {
|
|
|
+ List<OrderEvaluationItemVo> itemVos = items.stream()
|
|
|
+ .map(item -> MapstructUtils.convert(item, OrderEvaluationItemVo.class))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ vo.setOrderEvaluationItemList(itemVos);
|
|
|
+ } else {
|
|
|
+ vo.setOrderEvaluationItemList(new ArrayList<>());
|
|
|
+ }
|
|
|
+
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分页查询订单评价主列表
|
|
|
+ *
|
|
|
+ * @param bo 查询条件
|
|
|
+ * @param pageQuery 分页参数
|
|
|
+ * @return 订单评价主分页列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public TableDataInfo<OrderEvaluationHeaderVo> queryPageList(OrderEvaluationHeaderBo bo, PageQuery pageQuery) {
|
|
|
+ LambdaQueryWrapper<OrderEvaluationHeader> lqw = buildQueryWrapper(bo);
|
|
|
+ Page<OrderEvaluationHeaderVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
+ return TableDataInfo.build(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TableDataInfo<OrderEvaluationListVo> getEvaluationOrderList(Long customerId, String evaluationStatus, PageQuery pageQuery) {
|
|
|
+ // 1. 创建分页对象
|
|
|
+ Page<OrderEvaluationListVo> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
|
|
|
+
|
|
|
+ // 2. 调用 Mapper
|
|
|
+ // ⚠️ 重点检查这里:参数顺序必须是 (page, customerId, evaluationStatus)
|
|
|
+ // 如果你之前传成了 (page, pageQuery, evaluationStatus) 或者其他组合,就会报这个错!
|
|
|
+ Page<OrderEvaluationListVo> resultPage = baseMapper.selectEvaluationOrderListPage(
|
|
|
+ page,
|
|
|
+ customerId,
|
|
|
+ evaluationStatus // 确保这里传的是 String 类型的 "0", "1", "2" 或 null,而不是对象
|
|
|
+ );
|
|
|
+
|
|
|
+ List<OrderEvaluationListVo> orders = resultPage.getRecords();
|
|
|
+
|
|
|
+ if (!orders.isEmpty()) {
|
|
|
+ // 3. 提取当前页所有订单 ID
|
|
|
+ List<Long> orderIds = orders.stream()
|
|
|
+ .map(OrderEvaluationListVo::getOrderId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 4. 批量查询这些订单下的商品列表
|
|
|
+
|
|
|
+ List<OrderProductBriefVo> allProducts = orderProductMapper.selectBriefListByOrderIds(orderIds);
|
|
|
+
|
|
|
+ // 5. 按 orderId 分组商品 (Key: orderId, Value: List<Product>)
|
|
|
+ Map<Long, List<OrderProductBriefVo>> productMap = allProducts.stream()
|
|
|
+ .collect(Collectors.groupingBy(OrderProductBriefVo::getOrderId));
|
|
|
+
|
|
|
+ // 6. 将商品列表组装到对应订单的 productList 字段
|
|
|
+ for (OrderEvaluationListVo order : orders) {
|
|
|
+ List<OrderProductBriefVo> productList = productMap.getOrDefault(order.getOrderId(), Collections.emptyList());
|
|
|
+ order.setProductList(productList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 7. 构建返回结果
|
|
|
+ return TableDataInfo.build(resultPage);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询符合条件的订单评价主列表
|
|
|
+ *
|
|
|
+ * @param bo 查询条件
|
|
|
+ * @return 订单评价主列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<OrderEvaluationHeaderVo> queryList(OrderEvaluationHeaderBo bo) {
|
|
|
+ LambdaQueryWrapper<OrderEvaluationHeader> lqw = buildQueryWrapper(bo);
|
|
|
+ return baseMapper.selectVoList(lqw);
|
|
|
+ }
|
|
|
+
|
|
|
+ private LambdaQueryWrapper<OrderEvaluationHeader> buildQueryWrapper(OrderEvaluationHeaderBo bo) {
|
|
|
+ Map<String, Object> params = bo.getParams();
|
|
|
+ LambdaQueryWrapper<OrderEvaluationHeader> lqw = Wrappers.lambdaQuery();
|
|
|
+ lqw.orderByAsc(OrderEvaluationHeader::getId);
|
|
|
+ lqw.eq(bo.getOrderId() != null, OrderEvaluationHeader::getOrderId, bo.getOrderId());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getOrderNo()), OrderEvaluationHeader::getOrderNo, bo.getOrderNo());
|
|
|
+ lqw.eq(bo.getLogisticsPackScore() != null, OrderEvaluationHeader::getLogisticsPackScore, bo.getLogisticsPackScore());
|
|
|
+ lqw.eq(bo.getDeliverSpeedScore() != null, OrderEvaluationHeader::getDeliverSpeedScore, bo.getDeliverSpeedScore());
|
|
|
+ lqw.eq(bo.getCourierServiceScore() != null, OrderEvaluationHeader::getCourierServiceScore, bo.getCourierServiceScore());
|
|
|
+ lqw.eq(bo.getEvaluationType() != null, OrderEvaluationHeader::getEvaluationType, bo.getEvaluationType());
|
|
|
+ lqw.eq(bo.getCustomerId() != null, OrderEvaluationHeader::getCustomerId, bo.getCustomerId());
|
|
|
+ lqw.eq(bo.getUserId() != null, OrderEvaluationHeader::getUserId, bo.getUserId());
|
|
|
+ return lqw;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增/更新 订单评价 (核心逻辑)
|
|
|
+ * 策略:
|
|
|
+ * 1. 检查订单是否已有评价。
|
|
|
+ * 2. 无记录 -> 首次评价 (Insert 主表 + Insert 明细)。
|
|
|
+ * 3. 有记录 ->
|
|
|
+ * - 若为首次评价请求 -> 报错。
|
|
|
+ * - 若为追评请求 -> 更新主表 + 更新明细 (Update)。
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean insertByBo(OrderEvaluationHeaderBo bo) {
|
|
|
+ // 1. 基础校验
|
|
|
+ if (bo.getOrderId() == null) {
|
|
|
+ throw new ServiceException("订单 ID 不能为空");
|
|
|
+ }
|
|
|
+ if (bo.getOrderEvaluationItemList() == null || bo.getOrderEvaluationItemList().isEmpty()) {
|
|
|
+ throw new ServiceException("至少需要评价一个商品");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 查询该订单是否已存在有效评价
|
|
|
+ OrderEvaluationHeader existingHeader = baseMapper.selectOne(Wrappers.<OrderEvaluationHeader>lambdaQuery()
|
|
|
+ .eq(OrderEvaluationHeader::getOrderId, bo.getOrderId())
|
|
|
+ .eq(OrderEvaluationHeader::getDelFlag, "0"));
|
|
|
+
|
|
|
+ if (existingHeader == null) {
|
|
|
+ // --- 场景 A: 首次评价 (INSERT) ---
|
|
|
+ return doFirstEvaluation(bo);
|
|
|
+ } else {
|
|
|
+ // --- 场景 B: 已存在评价 (UPDATE/追评) ---
|
|
|
+ return doAppendEvaluation(bo, existingHeader);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 执行首次评价逻辑
|
|
|
+ */
|
|
|
+ private Boolean doFirstEvaluation(OrderEvaluationHeaderBo bo) {
|
|
|
+ // 校验类型
|
|
|
+ if (bo.getEvaluationType() != null && bo.getEvaluationType() != 1) {
|
|
|
+ throw new ServiceException("新订单只能进行首次评价 (type=1)");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 转换主表对象
|
|
|
+ OrderEvaluationHeader header = MapstructUtils.convert(bo, OrderEvaluationHeader.class);
|
|
|
+ header.setEvaluationType(1); // 强制设为首次
|
|
|
+
|
|
|
+ validEntityBeforeSave(header);
|
|
|
+
|
|
|
+ // 插入主表
|
|
|
+ if (baseMapper.insert(header) <= 0) {
|
|
|
+ throw new ServiceException("评价主表保存失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ Long evaluationId = header.getId();
|
|
|
+
|
|
|
+ // 处理明细表 (Insert)
|
|
|
+ List<OrderEvaluationItem> items = buildEvaluationItems(bo, evaluationId);
|
|
|
+ if (!items.isEmpty()) {
|
|
|
+ if (!itemMapper.insertBatch(items)) {
|
|
|
+ throw new ServiceException("评价明细保存失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ bo.setId(evaluationId);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 执行追评/更新逻辑
|
|
|
+ * 需求:不加字段,直接更新原记录。
|
|
|
+ */
|
|
|
+ private Boolean doAppendEvaluation(OrderEvaluationHeaderBo bo, OrderEvaluationHeader existingHeader) {
|
|
|
+ // 1. 校验是否为追评请求
|
|
|
+ // 如果前端传 type=1 但库里有数据,说明重复提交首次评价
|
|
|
+ if (bo.getEvaluationType() == null || bo.getEvaluationType() == 1) {
|
|
|
+ throw new ServiceException("该订单已完成首次评价,如需修改或补充请提交追评 (type=2)");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 准备更新主表数据
|
|
|
+ OrderEvaluationHeader updateHeader = new OrderEvaluationHeader();
|
|
|
+ updateHeader.setId(existingHeader.getId());
|
|
|
+
|
|
|
+ // 更新评价类型为追评 (如果之前是首次)
|
|
|
+ updateHeader.setEvaluationType(2);
|
|
|
+
|
|
|
+ // 更新评分 (如果前端传了新的评分,覆盖旧的;没传则保持原样)
|
|
|
+ if (bo.getLogisticsPackScore() != null) updateHeader.setLogisticsPackScore(bo.getLogisticsPackScore());
|
|
|
+ if (bo.getDeliverSpeedScore() != null) updateHeader.setDeliverSpeedScore(bo.getDeliverSpeedScore());
|
|
|
+ if (bo.getCourierServiceScore() != null) updateHeader.setCourierServiceScore(bo.getCourierServiceScore());
|
|
|
+
|
|
|
+ // 更新备注/内容
|
|
|
+ if (StringUtils.isNotBlank(bo.getRemark())) {
|
|
|
+ updateHeader.setRemark(bo.getRemark());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新其他可能需要的字段 (如 userId, customerId 如果需要刷新)
|
|
|
+ if (bo.getUserId() != null) updateHeader.setUserId(bo.getUserId());
|
|
|
+ if (bo.getCustomerId() != null) updateHeader.setCustomerId(bo.getCustomerId());
|
|
|
+
|
|
|
+ // 执行主表更新
|
|
|
+ if (baseMapper.updateById(updateHeader) <= 0) {
|
|
|
+ throw new ServiceException("评价主表更新失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 处理明细表 (Update)
|
|
|
+
|
|
|
+ Long evaluationId = existingHeader.getId();
|
|
|
+ for (OrderEvaluationItemBo itemBo : bo.getOrderEvaluationItemList()) {
|
|
|
+ // 构建更新对象
|
|
|
+ OrderEvaluationItem updateItem = new OrderEvaluationItem();
|
|
|
+
|
|
|
+ // 定位逻辑:
|
|
|
+ // 情况 A: 前端传了明细主键 id (推荐,最准确)
|
|
|
+ if (itemBo.getId() != null) {
|
|
|
+ updateItem.setId(itemBo.getId());
|
|
|
+ // 额外校验:确保这个 id 属于当前的 evaluationId,防止越权
|
|
|
+ }
|
|
|
+ // 情况 B: 前端没传 id,只传了 orderItemId (需要根据 orderItemId 和 evaluationId 查询出真正的 id)
|
|
|
+ else if (itemBo.getOrderItemId() != null) {
|
|
|
+ OrderEvaluationItem existItem = itemMapper.selectOne(Wrappers.<OrderEvaluationItem>lambdaQuery()
|
|
|
+ .eq(OrderEvaluationItem::getEvaluationId, evaluationId)
|
|
|
+ .eq(OrderEvaluationItem::getOrderItemId, itemBo.getOrderItemId())
|
|
|
+ .last("LIMIT 1"));
|
|
|
+
|
|
|
+ if (existItem == null) {
|
|
|
+
|
|
|
+ log.warn("追评中未找到原明细记录 orderItemId: {}, 将尝试新增", itemBo.getOrderItemId());
|
|
|
+ // 转去走新增逻辑 (复用 build 逻辑的一部分,但需要 evaluationId)
|
|
|
+ OrderEvaluationItem newItem = MapstructUtils.convert(itemBo, OrderEvaluationItem.class);
|
|
|
+ newItem.setEvaluationId(evaluationId);
|
|
|
+ newItem.setOrderId(bo.getOrderId());
|
|
|
+ validateItemScore(newItem);
|
|
|
+ itemMapper.insert(newItem);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ updateItem.setId(existItem.getId());
|
|
|
+ } else {
|
|
|
+ throw new ServiceException("追评明细必须包含 id 或 orderItemId 以定位记录");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 填充需要更新的字段 (非空则更新)
|
|
|
+ if (itemBo.getProductScore() != null) updateItem.setProductScore(itemBo.getProductScore());
|
|
|
+ if (StringUtils.isNotBlank(itemBo.getContent())) updateItem.setContent(itemBo.getContent());
|
|
|
+ if (StringUtils.isNotBlank(itemBo.getImages())) updateItem.setImages(itemBo.getImages());
|
|
|
+ if (StringUtils.isNotBlank(itemBo.getRemark())) updateItem.setRemark(itemBo.getRemark());
|
|
|
+
|
|
|
+ // 只有当有实际更新内容时才执行 update,避免空更新
|
|
|
+ // 这里简单起见,只要定位到了就更新
|
|
|
+ if (updateItem.getId() != null) {
|
|
|
+ if (itemMapper.updateById(updateItem) <= 0) {
|
|
|
+ throw new ServiceException("评价明细更新失败,ID:" + updateItem.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ bo.setId(evaluationId);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 辅助方法:构建明细列表 (用于首次评价插入)
|
|
|
+ */
|
|
|
+ private List<OrderEvaluationItem> buildEvaluationItems(OrderEvaluationHeaderBo bo, Long evaluationId) {
|
|
|
+ return bo.getOrderEvaluationItemList().stream().map(itemBo -> {
|
|
|
+ OrderEvaluationItem item = MapstructUtils.convert(itemBo, OrderEvaluationItem.class);
|
|
|
+ item.setEvaluationId(evaluationId);
|
|
|
+ item.setOrderId(bo.getOrderId());
|
|
|
+ validateItemScore(item);
|
|
|
+ return item;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void validateItemScore(OrderEvaluationItem item) {
|
|
|
+ if (item.getProductScore() != null && (item.getProductScore() < 1 || item.getProductScore() > 5)) {
|
|
|
+ throw new ServiceException("商品评分必须在 1-5 之间");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改订单评价主
|
|
|
+ *
|
|
|
+ * @param bo 订单评价主
|
|
|
+ * @return 是否修改成功
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Boolean updateByBo(OrderEvaluationHeaderBo bo) {
|
|
|
+ OrderEvaluationHeader update = MapstructUtils.convert(bo, OrderEvaluationHeader.class);
|
|
|
+ validEntityBeforeSave(update);
|
|
|
+ return baseMapper.updateById(update) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存前的数据校验
|
|
|
+ */
|
|
|
+ private void validEntityBeforeSave(OrderEvaluationHeader entity) {
|
|
|
+ // 校验评分范围
|
|
|
+ validateScore(entity.getLogisticsPackScore(), "快递包装评分");
|
|
|
+ validateScore(entity.getDeliverSpeedScore(), "送货速度评分");
|
|
|
+ validateScore(entity.getCourierServiceScore(), "配送员服务评分");
|
|
|
+
|
|
|
+ // 校验评价类型
|
|
|
+ if (entity.getEvaluationType() != null && !List.of(1, 2).contains(entity.getEvaluationType())) {
|
|
|
+ throw new ServiceException("评价类型错误");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void validateScore(Integer score, String fieldName) {
|
|
|
+ if (score != null && (score < 1 || score > 5)) {
|
|
|
+ throw new ServiceException(fieldName + "必须在1-5之间");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验并批量删除订单评价主信息
|
|
|
+ *
|
|
|
+ * @param ids 待删除的主键集合
|
|
|
+ * @param isValid 是否进行有效性校验
|
|
|
+ * @return 是否删除成功
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
|
|
+ if (isValid) {
|
|
|
+ //TODO 做一些业务上的校验,判断是否需要校验
|
|
|
+ }
|
|
|
+ return baseMapper.deleteByIds(ids) > 0;
|
|
|
+ }
|
|
|
+}
|