|  | @@ -1,5 +1,6 @@
 | 
	
		
			
				|  |  |  package com.yonge.cooleshow.biz.dal.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson.JSON;
 | 
	
		
			
				|  |  |  import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.core.metadata.IPage;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
	
	
		
			
				|  | @@ -20,6 +21,7 @@ import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.wrapper.coupon.CouponOrderWrapper;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.constant.SysConfigConstant;
 | 
	
	
		
			
				|  | @@ -65,6 +67,7 @@ import java.util.Objects;
 | 
	
		
			
				|  |  |  import java.util.concurrent.TimeUnit;
 | 
	
		
			
				|  |  |  import java.util.function.Consumer;
 | 
	
		
			
				|  |  |  import java.util.function.Function;
 | 
	
		
			
				|  |  | +import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Slf4j
 | 
	
		
			
				|  |  |  @Service
 | 
	
	
		
			
				|  | @@ -129,6 +132,15 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private UserPaymentOrderService userPaymentOrderService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private UserOrderDetailService userOrderDetailService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private SysUserService sysUserService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private MusicAlbumService musicAlbumService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      //验证订单是否可以下单,获取订单金额信息
 | 
	
		
			
				|  |  |      private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
 | 
	
		
			
				|  |  |      //插入订单后执行
 | 
	
	
		
			
				|  | @@ -240,6 +252,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 | 
	
		
			
				|  |  |                              .amount(userOrderVo.getExpectPrice().doubleValue())
 | 
	
		
			
				|  |  |                              .build());
 | 
	
		
			
				|  |  |              userOrderVo.setDiscountPrice(BigDecimal.valueOf(couponOrderWrapper.getDiscountedPrices()));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            List<UserOrderDetailVo> userOrderDetailVos = getUserOrderDetailVos(Lists.newArrayList(userOrderVo.getOrderNo()));
 | 
	
		
			
				|  |  | +            userOrderVo.setOrderDetailList(userOrderDetailVos);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          return userOrderVo;
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -348,10 +363,105 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        // 订单ID集合
 | 
	
		
			
				|  |  | +        List<String> orderNos = records.stream().map(UserOrder::getOrderNo).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +        List<UserOrderDetailVo> detailVoList = getUserOrderDetailVos(orderNos);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // id分组
 | 
	
		
			
				|  |  | +        Map<String, List<UserOrderDetailVo>> map = detailVoList.stream().collect(Collectors.groupingBy(o -> o.getOrderNo()));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        for (UserOrderVo record : records) {
 | 
	
		
			
				|  |  | +            List<UserOrderDetailVo> userOrderDetailVos = map.get(record.getOrderNo());
 | 
	
		
			
				|  |  | +            record.setOrderDetailList(userOrderDetailVos);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          return userOrderVoIPage;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    private List<UserOrderDetailVo> getUserOrderDetailVos(List<String> orderNos) {
 | 
	
		
			
				|  |  | +        List<UserOrderDetailVo> detailVoList = userOrderDetailService.getOrderDetilListByOrderNos(orderNos);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 根据商品类型分组获取商品ID集合
 | 
	
		
			
				|  |  | +        Map<GoodTypeEnum, List<UserOrderDetailVo>> orderBizMap = detailVoList.stream()
 | 
	
		
			
				|  |  | +                .collect(Collectors.groupingBy(UserOrderDetailVo::getGoodType));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 只针对机构专辑,曲目,专辑,vip
 | 
	
		
			
				|  |  | +        orderBizMap.forEach((orderType,list) -> {
 | 
	
		
			
				|  |  | +            if (CollectionUtils.isEmpty(list)) {
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            // bizId集合
 | 
	
		
			
				|  |  | +            List<Long> bizIds = list.stream().map(UserOrderDetailVo::getBizId).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +            switch (orderType) {
 | 
	
		
			
				|  |  | +                case MUSIC: {
 | 
	
		
			
				|  |  | +                    Map<Long, MusicSheet> mapByIds = musicSheetService.getMapByIds(bizIds);
 | 
	
		
			
				|  |  | +                    // 上传人ID集合
 | 
	
		
			
				|  |  | +                    List<Long> userIds = mapByIds.values().stream().map(MusicSheet::getUserId).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +                    Map<Long, SysUser> userMap = sysUserService.getMapByIds(userIds);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    for (UserOrderDetailVo userOrderDetailVo : list) {
 | 
	
		
			
				|  |  | +                        MusicSheet musicSheet = mapByIds.getOrDefault(userOrderDetailVo.getBizId(),new MusicSheet());
 | 
	
		
			
				|  |  | +                        UserOrderDetailVo.BizInfo bizInfo = new UserOrderDetailVo.BizInfo();
 | 
	
		
			
				|  |  | +                        bizInfo.setBizCover(musicSheet.getTitleImg());
 | 
	
		
			
				|  |  | +                        bizInfo.setBizName(userOrderDetailVo.getGoodName());
 | 
	
		
			
				|  |  | +                        bizInfo.setComposer(musicSheet.getComposer());
 | 
	
		
			
				|  |  | +                        bizInfo.setUploadUser(userMap.getOrDefault(musicSheet.getUserId(),new SysUser()).getUsername());
 | 
	
		
			
				|  |  | +                        userOrderDetailVo.setBizInfo(bizInfo);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                case TENANT_ALBUM:
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    Map<Long, TenantAlbum> mapByIds = tenantAlbumService.getMapByIds(bizIds);
 | 
	
		
			
				|  |  | +                    Map<Long, Long> musicCountByIds = tenantAlbumService.getMusicCountByIds(bizIds);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    for (UserOrderDetailVo userOrderDetailVo : list) {
 | 
	
		
			
				|  |  | +                        TenantAlbumWrapper.TenantAlbumContent tenantAlbumContent = JSON
 | 
	
		
			
				|  |  | +                                .parseObject(userOrderDetailVo.getBizContent(), TenantAlbumWrapper.TenantAlbumContent.class);
 | 
	
		
			
				|  |  | +                        UserOrderDetailVo.BizInfo bizInfo = new UserOrderDetailVo.BizInfo();
 | 
	
		
			
				|  |  | +                        TenantAlbum tenantAlbum = mapByIds.getOrDefault(userOrderDetailVo.getBizId(),new TenantAlbum());
 | 
	
		
			
				|  |  | +                        bizInfo.setBizCover(tenantAlbum.getCoverImg());
 | 
	
		
			
				|  |  | +                        bizInfo.setBizName(userOrderDetailVo.getGoodName());
 | 
	
		
			
				|  |  | +                        bizInfo.setBizDesc(tenantAlbum.getDescribe());
 | 
	
		
			
				|  |  | +                        bizInfo.setBizMusicCount(musicCountByIds.getOrDefault(tenantAlbum.getId(),0L).intValue());
 | 
	
		
			
				|  |  | +                        bizInfo.setBizValidTime(tenantAlbumContent.getBuyCycle());
 | 
	
		
			
				|  |  | +                        userOrderDetailVo.setBizInfo(bizInfo);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                case ALBUM:
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    Map<Long, MusicAlbum> mapByIds = musicAlbumService.getMapByIds(bizIds);
 | 
	
		
			
				|  |  | +                    Map<Long, Long> musicCountByIds = musicAlbumService.getMusicCountByIds(bizIds);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    for (UserOrderDetailVo userOrderDetailVo : list) {
 | 
	
		
			
				|  |  | +                        UserOrderDetailVo.BizInfo bizInfo = new UserOrderDetailVo.BizInfo();
 | 
	
		
			
				|  |  | +                        MusicAlbum musicAlbum = mapByIds.getOrDefault(userOrderDetailVo.getBizId(), new MusicAlbum());
 | 
	
		
			
				|  |  | +                        bizInfo.setBizCover(musicAlbum.getAlbumCoverUrl());
 | 
	
		
			
				|  |  | +                        bizInfo.setBizName(userOrderDetailVo.getGoodName());
 | 
	
		
			
				|  |  | +                        bizInfo.setBizDesc(musicAlbum.getAlbumDesc());
 | 
	
		
			
				|  |  | +                        bizInfo.setBizMusicCount(musicCountByIds.getOrDefault(userOrderDetailVo.getBizId(),0L).intValue());
 | 
	
		
			
				|  |  | +                        userOrderDetailVo.setBizInfo(bizInfo);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                case VIP:
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    for (UserOrderDetailVo userOrderDetailVo : list) {
 | 
	
		
			
				|  |  | +                        UserOrderDetailVo.BizInfo bizInfo = new UserOrderDetailVo.BizInfo();
 | 
	
		
			
				|  |  | +                        bizInfo.setBizName(userOrderDetailVo.getGoodName());
 | 
	
		
			
				|  |  | +                        userOrderDetailVo.setBizInfo(bizInfo);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        return detailVoList;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public List<UserOrderVo> selectAllList(OrderSearch query) {
 | 
	
		
			
				|  |  |          return baseMapper.selectAllList(query);
 |