diff --git a/src/main/java/com/ycwl/basic/repository/DeviceRepository.java b/src/main/java/com/ycwl/basic/repository/DeviceRepository.java index 131f803..8b6f3b5 100644 --- a/src/main/java/com/ycwl/basic/repository/DeviceRepository.java +++ b/src/main/java/com/ycwl/basic/repository/DeviceRepository.java @@ -17,6 +17,8 @@ import lombok.extern.slf4j.Slf4j; import java.time.ZoneId; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.HashMap; import java.util.concurrent.TimeUnit; @Slf4j @@ -165,4 +167,77 @@ public class DeviceRepository { } return List.of(); } + + /** + * 批量获取设备信息 + * @param deviceIds 设备ID列表 + * @return 设备ID到设备实体的映射 + */ + public Map batchGetDevices(List deviceIds) { + if (deviceIds == null || deviceIds.isEmpty()) { + return new HashMap<>(); + } + + Map result = new HashMap<>(); + for (Long deviceId : deviceIds) { + try { + DeviceEntity device = getDevice(deviceId); + if (device != null) { + result.put(deviceId, device); + } + } catch (Exception e) { + log.warn("获取设备信息失败: {}, 错误: {}", deviceId, e.getMessage()); + } + } + return result; + } + + /** + * 批量根据设备编号获取设备信息 + * @param deviceNos 设备编号列表 + * @return 设备编号到设备实体的映射 + */ + public Map batchGetDevicesByNo(List deviceNos) { + if (deviceNos == null || deviceNos.isEmpty()) { + return new HashMap<>(); + } + + Map result = new HashMap<>(); + for (String deviceNo : deviceNos) { + try { + DeviceEntity device = getDeviceByDeviceNo(deviceNo); + if (device != null) { + result.put(deviceNo, device); + } + } catch (Exception e) { + log.warn("根据设备编号获取设备信息失败: {}, 错误: {}", deviceNo, e.getMessage()); + } + } + return result; + } + + /** + * 批量获取设备名称 + * @param deviceIds 设备ID列表 + * @return 设备ID到设备名称的映射 + */ + public Map batchGetDeviceNames(List deviceIds) { + if (deviceIds == null || deviceIds.isEmpty()) { + return new HashMap<>(); + } + + Map result = new HashMap<>(); + for (Long deviceId : deviceIds) { + try { + DeviceEntity device = getDevice(deviceId); + if (device != null) { + result.put(deviceId, device.getName()); + } + } catch (Exception e) { + log.warn("获取设备名称失败: {}, 错误: {}", deviceId, e.getMessage()); + result.put(deviceId, "未知设备"); + } + } + return result; + } } diff --git a/src/main/java/com/ycwl/basic/repository/ScenicRepository.java b/src/main/java/com/ycwl/basic/repository/ScenicRepository.java index 4125a96..d9b8f9c 100644 --- a/src/main/java/com/ycwl/basic/repository/ScenicRepository.java +++ b/src/main/java/com/ycwl/basic/repository/ScenicRepository.java @@ -25,6 +25,9 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.stream.Collectors; @Component public class ScenicRepository { @@ -359,4 +362,79 @@ public class ScenicRepository { return null; } + /** + * 批量获取景区名称 + * @param scenicIds 景区ID列表 + * @return 景区ID到景区名称的映射 + */ + public Map batchGetScenicNames(List scenicIds) { + if (scenicIds == null || scenicIds.isEmpty()) { + return new HashMap<>(); + } + + Map result = new HashMap<>(); + for (Long scenicId : scenicIds) { + try { + ScenicV2DTO scenic = getScenicBasic(scenicId); + if (scenic != null) { + result.put(scenicId, scenic.getName()); + } + } catch (Exception e) { + // 获取失败时使用默认值 + result.put(scenicId, "未知景区"); + } + } + return result; + } + + /** + * 批量获取景区完整信息 + * @param scenicIds 景区ID列表 + * @return 景区ID到景区实体的映射 + */ + public Map batchGetScenics(List scenicIds) { + if (scenicIds == null || scenicIds.isEmpty()) { + return new HashMap<>(); + } + + Map result = new HashMap<>(); + for (Long scenicId : scenicIds) { + try { + ScenicEntity scenic = getScenic(scenicId); + if (scenic != null) { + result.put(scenicId, scenic); + } + } catch (Exception e) { + // 获取失败时记录日志但不中断处理 + System.err.println("获取景区信息失败: " + scenicId + ", 错误: " + e.getMessage()); + } + } + return result; + } + + /** + * 批量获取景区基础信息DTO + * @param scenicIds 景区ID列表 + * @return 景区ID到景区DTO的映射 + */ + public Map batchGetScenicBasics(List scenicIds) { + if (scenicIds == null || scenicIds.isEmpty()) { + return new HashMap<>(); + } + + Map result = new HashMap<>(); + for (Long scenicId : scenicIds) { + try { + ScenicV2DTO scenic = getScenicBasic(scenicId); + if (scenic != null) { + result.put(scenicId, scenic); + } + } catch (Exception e) { + // 获取失败时记录日志但不中断处理 + System.err.println("获取景区基础信息失败: " + scenicId + ", 错误: " + e.getMessage()); + } + } + return result; + } + } diff --git a/src/main/java/com/ycwl/basic/service/pc/impl/OrderServiceImpl.java b/src/main/java/com/ycwl/basic/service/pc/impl/OrderServiceImpl.java index 0637a7d..1638ebc 100644 --- a/src/main/java/com/ycwl/basic/service/pc/impl/OrderServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/pc/impl/OrderServiceImpl.java @@ -53,6 +53,7 @@ import com.ycwl.basic.pay.adapter.IPayAdapter; import com.ycwl.basic.pay.entity.PayResponse; import com.ycwl.basic.repository.FaceRepository; import com.ycwl.basic.repository.PriceRepository; +import com.ycwl.basic.repository.ScenicRepository; import com.ycwl.basic.repository.TemplateRepository; import com.ycwl.basic.repository.VideoRepository; import com.ycwl.basic.repository.VideoTaskRepository; @@ -129,6 +130,8 @@ public class OrderServiceImpl implements OrderService { @Autowired private ScenicService scenicService; @Autowired + private ScenicRepository scenicRepository; + @Autowired private VideoMapper videoMapper; @Autowired private IVoucherService iVoucherService; @@ -139,7 +142,21 @@ public class OrderServiceImpl implements OrderService { public ApiResponse> pageQuery(OrderReqQuery query) { PageHelper.startPage(query.getPageNum(), query.getPageSize()); List list = orderMapper.list(query); + + // 批量获取景区名称 + List scenicIds = list.stream() + .map(OrderRespVO::getScenicId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + Map scenicNames = scenicRepository.batchGetScenicNames(scenicIds); + list.forEach(item -> { + // 设置景区名称 + if (item.getScenicId() != null) { + item.setScenicName(scenicNames.get(item.getScenicId())); + } + if (Integer.valueOf(-1).equals(item.getType())) { item.setGoodsName("一口价"); item.setOrderType("一口价"); @@ -181,8 +198,21 @@ public class OrderServiceImpl implements OrderService { public ApiResponse> pageQueryDetail(OrderReqQuery query) { PageHelper.startPage(query.getPageNum(), query.getPageSize()); List list = orderMapper.listDetail(query); + + // 批量获取景区名称 + List scenicIds = list.stream() + .map(OrderRespVO::getScenicId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + Map scenicNames = scenicRepository.batchGetScenicNames(scenicIds); + for (OrderRespVO item : list) { item.setPrice(item.getPayPrice()); + // 设置景区名称 + if (item.getScenicId() != null) { + item.setScenicName(scenicNames.get(item.getScenicId())); + } } PageInfo pageInfo = new PageInfo<>(list); return ApiResponse.success(pageInfo); @@ -191,8 +221,21 @@ public class OrderServiceImpl implements OrderService { @Override public ApiResponse> list(OrderReqQuery query) { List list = orderMapper.list(query); + + // 批量获取景区名称 + List scenicIds = list.stream() + .map(OrderRespVO::getScenicId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + Map scenicNames = scenicRepository.batchGetScenicNames(scenicIds); + for (OrderRespVO item : list) { item.setPrice(item.getPayPrice()); + // 设置景区名称 + if (item.getScenicId() != null) { + item.setScenicName(scenicNames.get(item.getScenicId())); + } } return ApiResponse.success(list); } @@ -318,6 +361,18 @@ public class OrderServiceImpl implements OrderService { } }); order.setGoodsList(goodsList); + + // 设置景区名称 + if (order.getScenicId() != null) { + try { + String scenicName = scenicRepository.batchGetScenicNames(List.of(order.getScenicId())) + .get(order.getScenicId()); + order.setScenicName(scenicName); + } catch (Exception e) { + log.warn("获取景区名称失败: {}", order.getScenicId(), e); + } + } + return ApiResponse.success(order); } @@ -437,6 +492,22 @@ public class OrderServiceImpl implements OrderService { } }); }); + + // 批量获取景区名称 + List scenicIds = list.stream() + .map(OrderAppRespVO::getScenicId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + Map scenicNames = scenicRepository.batchGetScenicNames(scenicIds); + + // 设置景区名称 + list.forEach(order -> { + if (order.getScenicId() != null) { + order.setScenicName(scenicNames.get(order.getScenicId())); + } + }); + PageInfo pageInfo = new PageInfo<>(list); return ApiResponse.success(pageInfo); } @@ -444,6 +515,18 @@ public class OrderServiceImpl implements OrderService { @Override public ApiResponse appDetail(Long id) { OrderAppRespVO orderAppRespVO = orderMapper.appDetail(id); + + // 设置景区名称 + if (orderAppRespVO != null && orderAppRespVO.getScenicId() != null) { + try { + String scenicName = scenicRepository.batchGetScenicNames(List.of(orderAppRespVO.getScenicId())) + .get(orderAppRespVO.getScenicId()); + orderAppRespVO.setScenicName(scenicName); + } catch (Exception e) { + log.warn("获取景区名称失败: {}", orderAppRespVO.getScenicId(), e); + } + } + return ApiResponse.success(orderAppRespVO); } @@ -484,7 +567,21 @@ public class OrderServiceImpl implements OrderService { public ApiResponse> refundPageQuery(OrderReqQuery query) { PageHelper.startPage(query.getPageNum(), query.getPageSize()); List list = orderMapper.refundList(query); + + // 批量获取景区名称 + List scenicIds = list.stream() + .map(OrderRespVO::getScenicId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + Map scenicNames = scenicRepository.batchGetScenicNames(scenicIds); + list.forEach(item -> { + // 设置景区名称 + if (item.getScenicId() != null) { + item.setScenicName(scenicNames.get(item.getScenicId())); + } + if (Integer.valueOf(-1).equals(item.getType())) { item.setGoodsName("一口价"); item.setOrderType("一口价"); diff --git a/src/main/resources/mapper/BrokerMapper.xml b/src/main/resources/mapper/BrokerMapper.xml index c2a56f7..ce05c2d 100644 --- a/src/main/resources/mapper/BrokerMapper.xml +++ b/src/main/resources/mapper/BrokerMapper.xml @@ -42,7 +42,7 @@ (select min(r.create_time) from broker_record r where r.broker_id = b.id) as first_broker_date, (select max(r.create_time) from broker_record r where r.broker_id = b.id) as last_broker_date, b.create_at, b.update_at - from broker b left join scenic s on b.scenic_id = s.id + from broker b and b.scenic_id = #{scenicId} @@ -65,8 +65,8 @@ \ No newline at end of file diff --git a/src/main/resources/mapper/CouponMapper.xml b/src/main/resources/mapper/CouponMapper.xml index 46f2450..a08b155 100644 --- a/src/main/resources/mapper/CouponMapper.xml +++ b/src/main/resources/mapper/CouponMapper.xml @@ -10,13 +10,12 @@ select d.id, d.ident as no, d.scenic_id, d.name, d.status, s.name as scenic_name from extra_device d - left join scenic s on d.scenic_id = s.id + where d.scenic_id = #{scenicId} and d.status = 1 diff --git a/src/main/resources/mapper/OrderMapper.xml b/src/main/resources/mapper/OrderMapper.xml index 502b05d..c1a2a34 100644 --- a/src/main/resources/mapper/OrderMapper.xml +++ b/src/main/resources/mapper/OrderMapper.xml @@ -110,8 +110,7 @@ oi.order_id AS orderId, oi.goods_id, msd.source_id, - sc.id AS scenic_id, - sc.name AS scenic_name, + o.scenic_id AS scenic_id, CASE oi.goods_type WHEN '0' THEN mvd.cover_url WHEN '3' THEN mpd.url @@ -147,7 +146,6 @@ END AS imgUrl FROM order_item oi LEFT JOIN `order` o ON oi.order_id = o.id - LEFT JOIN scenic sc ON o.scenic_id = sc.id LEFT JOIN member_video_data mvd ON o.face_id = mvd.face_id AND oi.goods_id = mvd.video_id LEFT JOIN member_source_data msd ON o.face_id = msd.face_id AND oi.goods_id = msd.face_id AND msd.type = oi.goods_type LEFT JOIN member_photo_data mpd ON oi.goods_id = mpd.id AND mpd.type = oi.goods_type @@ -238,13 +236,12 @@ delete from `order` where id = #{id} - select p.*, s.name as scenic_name from price_config p - left join scenic s on s.id = p.scenic_id + select p.* from price_config p where p.id = #{id} diff --git a/src/main/resources/mapper/ProfitSharingConfigMapper.xml b/src/main/resources/mapper/ProfitSharingConfigMapper.xml index 0bf0333..86bd598 100644 --- a/src/main/resources/mapper/ProfitSharingConfigMapper.xml +++ b/src/main/resources/mapper/ProfitSharingConfigMapper.xml @@ -2,9 +2,9 @@ - SELECT r.*, s.name as scenic_name + SELECT r.* FROM profit_sharing_record r - LEFT JOIN scenic s ON s.id = r.scenic_id delete_time is null @@ -65,9 +64,8 @@ GROUP BY order_id @@ -163,7 +163,7 @@ select so.id, ms.face_id, ms.scenic_id, ms.type, so.url, ms.is_free, so.create_time, so.update_time,sc.`name` as scenicName, ms.is_buy from member_source ms left join source so on ms.source_id = so.id - left join scenic sc on sc.id = so.scenic_id + where ms.member_id = #{memberId} and so.id and ms.face_id = #{faceId} diff --git a/src/main/resources/mapper/TemplateMapper.xml b/src/main/resources/mapper/TemplateMapper.xml index 9266c83..8a2a10d 100644 --- a/src/main/resources/mapper/TemplateMapper.xml +++ b/src/main/resources/mapper/TemplateMapper.xml @@ -76,8 +76,8 @@ delete from template_config where id = #{id} @@ -113,10 +113,10 @@ order by sort diff --git a/src/main/resources/mapper/VideoMapper.xml b/src/main/resources/mapper/VideoMapper.xml index ac8ca0e..d8eebaa 100644 --- a/src/main/resources/mapper/VideoMapper.xml +++ b/src/main/resources/mapper/VideoMapper.xml @@ -77,9 +77,8 @@ select v.id, v.scenic_id, template_id, task_id, worker_id, video_url, v.create_time, v.update_time, t.name templateName,t.price templatePrice, t.cover_url templateCoverUrl, t.slash_price slashPrice, - s.name scenicName, v.height, v.width, v.duration + v.height, v.width, v.duration from video v - left join scenic s on v.scenic_id = s.id left join template t on v.template_id = t.id where v.id = #{id} @@ -110,10 +108,9 @@