Explorar el Código

[feat]
1.处理团购列表头像拼接接口;2.拼团用户接口增加返利金额逻辑;3.参团接口增加对拼团用户头像的处理逻辑;4.取消订单接口增加对参团用户头像的处理逻辑

limeng hace 2 meses
padre
commit
9e669192ab
Se han modificado 15 ficheros con 221 adiciones y 42 borrados
  1. 23 16
      application-webadmin/src/main/java/com/tourism/webadmin/app/website/controller/TourismOrderController.java
  2. 27 12
      application-webadmin/src/main/java/com/tourism/webadmin/app/website/controller/WebsiteProjectGroupPurchaseController.java
  3. 3 0
      application-webadmin/src/main/java/com/tourism/webadmin/app/website/dto/TourGroupUserToWebDto.java
  4. 7 0
      application-webadmin/src/main/java/com/tourism/webadmin/app/website/vo/TourGroupPurchaseUserVo.java
  5. 3 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourProjectGroupPurchaseRebateMapper.java
  6. 5 2
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourOrderMapper.xml
  7. 17 1
      application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourProjectGroupPurchase.java
  8. 1 1
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourOrderService.java
  9. 12 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourProjectGroupPurchaseRebateService.java
  10. 2 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourProjectGroupPurchaseService.java
  11. 2 1
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourOrderServiceImpl.java
  12. 14 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourProjectGroupPurchaseRebateServiceImpl.java
  13. 70 3
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourProjectGroupPurchaseServiceImpl.java
  14. 16 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourProjectGroupPurchaseVo.java
  15. 19 6
      common/common-huaweicloud/common-huaweicloud-obs/src/main/java/com/tourism/common/huaweicloud/obs/util/MergeAvatarsFlexUtils.java

+ 23 - 16
application-webadmin/src/main/java/com/tourism/webadmin/app/website/controller/TourismOrderController.java

@@ -202,18 +202,22 @@ public class TourismOrderController {
         tourOrderService.saveNew(tourOrder);
 
         if(tourProjectGroupPurchase != null && tourBookInfoDto.getShareId() != null){
-            TourUser byId = tourUserService.getById(tourBookInfoDto.getShareId());
-            if(byId != null) {
-                // 为分享用户增加返利
-                TourProjectGroupPurchaseRebate rebate = new TourProjectGroupPurchaseRebate();
-                rebate.setUserId(tourBookInfoDto.getShareId());
-                rebate.setGroupPurchaseProgressId(Long.valueOf(tourProjectGroupPurchase.getId()));
-                rebate.setOrderId(tourOrder.getId());
-                rebate.setReasonRelationUserid(TokenData.takeFromRequest().getUserId());
-                rebate.setPrice(new BigDecimal(100).multiply(BigDecimal.valueOf(tourBookInfoDto.getAdultNumber() + tourBookInfoDto.getChildrenNumber())));
-                rebate.setReason(GroupPurchaseRebate.INVITE_USER);
-                rebate.setPriceUnit(tourProjectGroupPurchase.getPriceUnit());
-                tourProjectGroupPurchaseRebateService.saveNew(rebate);
+            if(tourBookInfoDto.getShareId().equals(TokenData.takeFromRequest().getUserId())) {
+                // 分享人和当前下单用户是同一个人时,不需要返利
+            }else {
+                TourUser byId = tourUserService.getById(tourBookInfoDto.getShareId());
+                if (byId != null) {
+                    // 为分享用户增加返利
+                    TourProjectGroupPurchaseRebate rebate = new TourProjectGroupPurchaseRebate();
+                    rebate.setUserId(tourBookInfoDto.getShareId());
+                    rebate.setGroupPurchaseProgressId(Long.valueOf(tourProjectGroupPurchase.getId()));
+                    rebate.setOrderId(tourOrder.getId());
+                    rebate.setReasonRelationUserid(TokenData.takeFromRequest().getUserId());
+                    rebate.setPrice(new BigDecimal(100).multiply(BigDecimal.valueOf(tourBookInfoDto.getAdultNumber() + tourBookInfoDto.getChildrenNumber())));
+                    rebate.setReason(GroupPurchaseRebate.INVITE_USER);
+                    rebate.setPriceUnit(tourProjectGroupPurchase.getPriceUnit());
+                    tourProjectGroupPurchaseRebateService.saveNew(rebate);
+                }
             }
         }
         TourProjectGroupPurchaseVo tourProjectGroupPurchaseVo = MyModelUtil.copyTo(tourProjectGroupPurchase, TourProjectGroupPurchaseVo.class);
@@ -261,10 +265,13 @@ public class TourismOrderController {
             rebateFilter.setOrderId(Long.valueOf(id));
             TourProjectGroupPurchaseRebate one = tourProjectGroupPurchaseRebateService.getOne(rebateFilter);
 
-            TourProjectGroupPurchaseRebate rebate = MyModelUtil.copyTo(one, TourProjectGroupPurchaseRebate.class);
-            rebate.setId(null);
-            rebate.setPrice(BigDecimal.ZERO.subtract(rebate.getPrice()));
-            tourProjectGroupPurchaseRebateService.saveNew(rebate);
+            // 如果被取消订单有返利记录,增加一条反向返利记录
+            if(one != null){
+                TourProjectGroupPurchaseRebate rebate = MyModelUtil.copyTo(one, TourProjectGroupPurchaseRebate.class);
+                rebate.setId(null);
+                rebate.setPrice(BigDecimal.ZERO.subtract(rebate.getPrice()));
+                tourProjectGroupPurchaseRebateService.saveNew(rebate);
+            }
         }
         //判断id是否为有效id
         if(tourOrder == null){

+ 27 - 12
application-webadmin/src/main/java/com/tourism/webadmin/app/website/controller/WebsiteProjectGroupPurchaseController.java

@@ -15,10 +15,7 @@ import com.tourism.webadmin.back.model.TourProjectGroupPurchase;
 import com.tourism.webadmin.back.model.TourProjectGroupPurchaseDetail;
 import com.tourism.webadmin.back.model.TourUser;
 import com.tourism.webadmin.back.model.constant.Enable;
-import com.tourism.webadmin.back.service.TourOrderService;
-import com.tourism.webadmin.back.service.TourProjectGroupPurchaseDetailService;
-import com.tourism.webadmin.back.service.TourProjectGroupPurchaseService;
-import com.tourism.webadmin.back.service.TourismDatePriceService;
+import com.tourism.webadmin.back.service.*;
 import com.tourism.webadmin.back.vo.TourProjectGroupPurchaseVo;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
@@ -26,9 +23,11 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.ZoneId;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -55,6 +54,8 @@ public class WebsiteProjectGroupPurchaseController {
     private TourProjectGroupPurchaseDetailService tourProjectGroupPurchaseDetailService;
     @Autowired
     private TourismDatePriceService tourismDatePriceService;
+    @Autowired
+    private TourProjectGroupPurchaseRebateService tourProjectGroupPurchaseRebateService;
 
     /**
      * 项目首页热门拼团列表接口。
@@ -98,6 +99,9 @@ public class WebsiteProjectGroupPurchaseController {
                 String s = NumberToChineseConverter.convertToChinese(i);
                 entity.setDiffDaysToEnd("还剩" + s + "天失效");
             }
+            if(StringUtils.isNotBlank(entity.getUsersAvatars())){
+                entity.setUsersAvatarList(Arrays.asList(entity.getUsersAvatars().split(",")));
+            }
             entity.setImage(UrlConvertUtils.urlConvertSingle(applicationConfig.getHostIpPort(), entity.getImage()));
         }
         return ResponseResult.success(MyPageUtil.makeResponseData(tourProjectGroupPurchaseList, TourProjectGroupPurchaseVo.class));
@@ -117,13 +121,7 @@ public class WebsiteProjectGroupPurchaseController {
             return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
         }
         TourProjectGroupPurchaseVo tourProjectGroupPurchaseVo = MyModelUtil.copyTo(tourProjectGroupPurchase, TourProjectGroupPurchaseVo.class);
-//        // 查询阶梯价格详情以计算当前价格
-//        TourProjectGroupPurchaseDetail detail = tourProjectGroupPurchaseDetailService.getTourProjectGroupPurchaseDetail(tourProjectGroupPurchase);
-//        if(detail != null) {
-//            tourProjectGroupPurchaseVo.setNowPrice(detail.getAdultPrice());
-//        }else {
-//            tourProjectGroupPurchaseVo.setNowPrice(tourProjectGroupPurchaseVo.getOriginalPrice());
-//        }
+
         return ResponseResult.success(tourProjectGroupPurchaseVo);
     }
 
@@ -138,6 +136,18 @@ public class WebsiteProjectGroupPurchaseController {
         List<TourUser> tourUserList = tourOrderService.getTourUserListByProjectId(dto);
         // 把List<TourUser>转为List<TourProjectGroupPurchaseUserVo>
         List<TourGroupPurchaseUserVo> tourGroupPurchaseUserVoList = MyModelUtil.copyCollectionTo(tourUserList, TourGroupPurchaseUserVo.class);
+        // 查询这些用户在当前团都获得了多少返利
+        if(dto.getGroupPurchaseProgressId() != null) {
+            Map<String, BigDecimal> userRebateAmountMap = tourProjectGroupPurchaseRebateService.getUserRebateAmount(dto.getGroupPurchaseProgressId());
+            if(userRebateAmountMap != null) {
+                tourGroupPurchaseUserVoList.forEach(e -> {
+                    System.out.println(e.getUserId());
+                    System.out.println(userRebateAmountMap);
+                    System.out.println(userRebateAmountMap.get(e.getUserId()));
+                    e.setRebatePrice(userRebateAmountMap.get(e.getUserId()));
+                });
+            }
+        }
         return ResponseResult.success(tourGroupPurchaseUserVoList);
     }
 
@@ -157,5 +167,10 @@ public class WebsiteProjectGroupPurchaseController {
         return ResponseResult.success(tourProjectGroupPurchaseService.calcTotalAmount(param));
     }
 
-
+//    @SaIgnore
+//    @GetMapping("/initavatar")
+//    public ResponseResult<String> initAvatar(TourCalcTotalAmountParam param) {
+//        tourProjectGroupPurchaseService.initAvatar();
+//        return ResponseResult.success("");
+//    }
 }

+ 3 - 0
application-webadmin/src/main/java/com/tourism/webadmin/app/website/dto/TourGroupUserToWebDto.java

@@ -34,4 +34,7 @@ public class TourGroupUserToWebDto {
      */
     @Schema(description = "团购id。")
     private Long groupPurchaseProgressId;
+
+    @Schema(description = "当前订单ID")
+    private Long currentOrderId;
 }

+ 7 - 0
application-webadmin/src/main/java/com/tourism/webadmin/app/website/vo/TourGroupPurchaseUserVo.java

@@ -3,6 +3,7 @@ package com.tourism.webadmin.app.website.vo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -14,6 +15,8 @@ import java.util.Date;
 @Data
 public class TourGroupPurchaseUserVo {
 
+    private String userId;
+
     /**
      * 昵称。
      */
@@ -37,5 +40,9 @@ public class TourGroupPurchaseUserVo {
     /**
      * 当前用户下单人数
      */
+    @Schema(description = "当前用户下单人数")
     private Integer peopleNumber;
+
+    @Schema(description = "当前用户获得的返利")
+    private BigDecimal rebatePrice;
 }

+ 3 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourProjectGroupPurchaseRebateMapper.java

@@ -35,4 +35,7 @@ public interface TourProjectGroupPurchaseRebateMapper extends BaseDaoMapper<Tour
 
     @Select("select sum(price) as total_rebate_amount from tour_project_group_purchase_rebate where user_id = #{userId}")
     BigDecimal getTotalRebateAmount(@Param("userId") Long userId);
+
+    @Select("select user_id, sum(price) as price from tour_project_group_purchase_rebate where group_purchase_progress_id = #{groupId} group by user_id")
+    List<TourProjectGroupPurchaseRebate> getUserRebateAmount(@Param("groupId") Long groupId);
 }

+ 5 - 2
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourOrderMapper.xml

@@ -162,8 +162,8 @@
         </if>
     </select>
 
-    <select id="getTourUserList" resultMap="BaseResultMap" parameterType="com.tourism.webadmin.back.model.TourUser">
-        select tu.show_name,tu.head_image_url,to1.create_time, to1.adult_number + to1.children_number as people_number from tour_user tu
+    <select id="getTourUserList" resultType="com.tourism.webadmin.back.model.TourUser" parameterType="com.tourism.webadmin.back.model.TourUser">
+        select tu.user_id,tu.show_name,tu.head_image_url,to1.create_time, to1.adult_number + to1.children_number as people_number from tour_user tu
         inner join tour_order to1 on tu.user_id = to1.create_user_id
         <where>
             to1.type = 1 and to1.order_status != 3
@@ -174,6 +174,9 @@
                 <if test="groupUserFilter.groupPurchaseProgressId != null">
                     AND to1.group_purchase_progress_id = #{groupUserFilter.groupPurchaseProgressId}
                 </if>
+                <if test="groupUserFilter.currentOrderId != null">
+                    AND to1.id != #{groupUserFilter.currentOrderId}
+                </if>
             </if>
         </where>
     </select>

+ 17 - 1
application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourProjectGroupPurchase.java

@@ -251,7 +251,7 @@ public class TourProjectGroupPurchase extends BaseModel {
             slaveModelClass = TourProjectGroupPurchaseDetail.class,
             slaveIdField = "groupPurchaseCode")
     @TableField(exist = false)
-    private List<TourProjectGroupPurchase> tourProjectGroupPurchaseList;
+    private List<TourProjectGroupPurchaseDetail> tourProjectGroupPurchaseDetailList;
 
     /**
      * 距离结束时间的天数。
@@ -284,4 +284,20 @@ public class TourProjectGroupPurchase extends BaseModel {
      */
     @TableField(value = "next_stage_num")
     private Integer nextStageNum;
+
+    /**
+     * 拼接后的参团用户头像
+     */
+    @TableField(value = "splicing_avatars")
+    private String splicingAvatars;
+    /**
+     * 拼接前的参团用户头像
+     */
+    @TableField(value = "users_avatars")
+    private String usersAvatars;
+    /**
+     * 拼接前的参团用户头像
+     */
+    @TableField(exist = false)
+    private List<String> usersAvatarList;
 }

+ 1 - 1
application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourOrderService.java

@@ -71,7 +71,7 @@ public interface TourOrderService extends IBaseService<TourOrder, Long> {
 
     /**
      * 根据项目id查询该项目参与拼团的用户
-     * @param projectId
+     * @param dto
      * @return
      */
     List<TourUser> getTourUserListByProjectId(TourGroupUserToWebDto dto);

+ 12 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourProjectGroupPurchaseRebateService.java

@@ -3,6 +3,7 @@ package com.tourism.webadmin.back.service;
 import com.tourism.webadmin.back.model.*;
 import com.tourism.common.core.base.service.IBaseService;
 
+import java.math.BigDecimal;
 import java.util.*;
 
 /**
@@ -66,5 +67,16 @@ public interface TourProjectGroupPurchaseRebateService extends IBaseService<Tour
      */
     List<TourProjectGroupPurchaseRebate> getTourProjectGroupPurchaseRebateListWithRelation(TourProjectGroupPurchaseRebate filter, String orderBy);
 
+    /**
+     * 获取当前用户返利合计
+     * @return
+     */
     Map<String, Object> getTotalRebateAmount();
+
+    /**
+     * 以用户为分组获取用户返利
+     * @param groupId
+     * @return
+     */
+    Map<String, BigDecimal> getUserRebateAmount(Long groupId);
 }

+ 2 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourProjectGroupPurchaseService.java

@@ -119,4 +119,6 @@ public interface TourProjectGroupPurchaseService extends IBaseService<TourProjec
      * @return
      */
     TourProjectGroupPurchase cancelGroupBuy(TourProjectGroupPurchase groupPurchase, TourOrder tourOrder);
+
+//    void initAvatar();
 }

+ 2 - 1
application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourOrderServiceImpl.java

@@ -131,7 +131,8 @@ public class TourOrderServiceImpl extends BaseService<TourOrder, Long> implement
 
     @Override
     public List<TourUser> getTourUserListByProjectId(TourGroupUserToWebDto dto) {
-        return tourOrderMapper.getTourUserList(dto);
+        List<TourUser> tourUserList = tourOrderMapper.getTourUserList(dto);
+        return tourUserList;
     }
 
     @Override

+ 14 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourProjectGroupPurchaseRebateServiceImpl.java

@@ -103,6 +103,20 @@ public class TourProjectGroupPurchaseRebateServiceImpl extends BaseService<TourP
         return resMap;
     }
 
+    @Override
+    public Map<String, BigDecimal> getUserRebateAmount(Long groupId) {
+        // 通过团购id查询该团购内参与用户的返利,以用户id为key,返利金额为value
+        List<TourProjectGroupPurchaseRebate> userRebateAmount = tourProjectGroupPurchaseRebateMapper.getUserRebateAmount(groupId);
+
+        // 以user_id为key,price为value,封装成map返回
+        Map<String, BigDecimal> rebateAmountMap = new HashMap<>();
+        if (CollUtil.isNotEmpty(userRebateAmount)) {
+            userRebateAmount.forEach(e -> rebateAmountMap.put(e.getUserId().toString(), e.getPrice()));
+        }
+
+        return rebateAmountMap;
+    }
+
     private TourProjectGroupPurchaseRebate buildDefaultValue(TourProjectGroupPurchaseRebate tourProjectGroupPurchaseRebate) {
         if (tourProjectGroupPurchaseRebate.getId() == null) {
             tourProjectGroupPurchaseRebate.setId(idGenerator.nextLongId());

+ 70 - 3
application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourProjectGroupPurchaseServiceImpl.java

@@ -11,20 +11,26 @@ import com.tourism.common.core.constant.GlobalDeletedFlag;
 import com.tourism.common.core.exception.MyRuntimeException;
 import com.tourism.common.core.object.CallResult;
 import com.tourism.common.core.object.MyRelationParam;
+import com.tourism.common.core.object.TokenData;
 import com.tourism.common.core.util.MyDateUtil;
 import com.tourism.common.core.util.MyModelUtil;
+import com.tourism.common.huaweicloud.obs.util.MergeAvatarsFlexUtils;
 import com.tourism.common.sequence.wrapper.IdGeneratorWrapper;
 import com.tourism.webadmin.app.website.dto.TourCalcTotalAmountParam;
+import com.tourism.webadmin.app.website.dto.TourGroupUserToWebDto;
 import com.tourism.webadmin.app.website.dto.TourProjectGroupPurchaseDtoToWebDto;
 import com.tourism.webadmin.app.website.dto.TourismBookProjectDto;
 import com.tourism.webadmin.back.dao.TourProjectGroupPurchaseMapper;
 import com.tourism.webadmin.back.model.TourOrder;
 import com.tourism.webadmin.back.model.TourProjectGroupPurchase;
 import com.tourism.webadmin.back.model.TourProjectGroupPurchaseDetail;
+import com.tourism.webadmin.back.model.TourUser;
+import com.tourism.webadmin.back.service.TourOrderService;
 import com.tourism.webadmin.back.service.TourProjectGroupPurchaseDetailService;
 import com.tourism.webadmin.back.service.TourProjectGroupPurchaseService;
 import com.tourism.webadmin.back.service.TourismProjectService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -53,6 +59,10 @@ public class TourProjectGroupPurchaseServiceImpl extends BaseService<TourProject
     private TourismProjectService tourismProjectService;
     @Autowired
     private TourProjectGroupPurchaseDetailService tourProjectGroupPurchaseDetailService;
+    @Autowired
+    private TourOrderService tourOrderService;
+    @Autowired
+    private MergeAvatarsFlexUtils mergeAvatarsFlexUtils;
 
     /**
      * 返回当前Service的主表Mapper对象。
@@ -174,7 +184,7 @@ public class TourProjectGroupPurchaseServiceImpl extends BaseService<TourProject
     }
 
     @Override
-    public TourProjectGroupPurchase handleGroupBuy(TourismBookProjectDto paramDTO, TourOrder tourOrder) {
+    public TourProjectGroupPurchase handleGroupBuy(TourismBookProjectDto paramDTO, TourOrder tourOrder){
         TourProjectGroupPurchase groupPurchase = this.getById(paramDTO.getGroupId());
         if (groupPurchase != null) {
             // 先判断下拼团信息是不是过期了  由于这里默认是yyyy-MM-dd 00:00:00  所以要加一天
@@ -185,13 +195,22 @@ public class TourProjectGroupPurchaseServiceImpl extends BaseService<TourProject
         }else {
             throw new MyRuntimeException(ErrorCodeEnum.GROUP_BUYING_DOES_NOT_EXIST.getErrorMessage());
         }
-
         // 计算此次订单参加拼团人数
         Integer groupCount = paramDTO.getAdultNumber() + paramDTO.getChildrenNumber();
-
         if(groupCount > groupPurchase.getMaxCount()){
             throw new MyRuntimeException(ErrorCodeEnum.PEOPLE_EXCCEDS.getErrorMessage());
         }
+        // 获取已参团的用户头像信息并拼接头像,放到团购信息里
+        String usersAvatars = groupPurchase.getUsersAvatars();
+        if(StringUtils.isNotBlank(usersAvatars)){
+            groupPurchase.setUsersAvatars(usersAvatars + "," + TokenData.takeFromRequest().getHeadImageUrl());
+        }else {
+            groupPurchase.setUsersAvatars(TokenData.takeFromRequest().getHeadImageUrl());
+        }
+        // usersAvatars用,分割成List
+        List<String> headImageUrlList = Arrays.asList(usersAvatars.split(","));
+        groupPurchase.setSplicingAvatars(this.splicingAvatars(headImageUrlList));
+
         //  2024-01-08逻辑修改 // 判断人数是不是超了,如果超了或者人数满了,自动开个完全一样的新团,直接在新团上加数量
         // 如果超过团购人数,则需要提醒已经满团,不允许客户继续参团
         if(groupCount + groupPurchase.getNowCount() > groupPurchase.getMaxCount()) {
@@ -220,6 +239,8 @@ public class TourProjectGroupPurchaseServiceImpl extends BaseService<TourProject
         tourOrder.setAdultPrice(groupPurchase.getNowPrice());
         tourOrder.setChildrenPrice(groupPurchase.getNowChildPrice());
         tourOrder.setGroupPurchaseProgressId(Long.valueOf(groupPurchase.getId()));
+
+        // 查询
         return groupPurchase;
     }
 
@@ -253,11 +274,57 @@ public class TourProjectGroupPurchaseServiceImpl extends BaseService<TourProject
 
         tourOrder.setAdultPrice(groupPurchase.getNowPrice());
         tourOrder.setChildrenPrice(groupPurchase.getNowChildPrice());
+        // 获取已参团的用户头像信息并拼接头像,放到团购信息里
+        // 查询已经参团的用户头像,拼接好赋值给团购信息
+        TourGroupUserToWebDto dto = new TourGroupUserToWebDto();
+        dto.setGroupPurchaseProgressId(groupPurchase.getId());
+        dto.setCurrentOrderId(tourOrder.getId());
+        // 查询已经参团的用户头像,拼接好赋值给团购信息
+        List<TourUser> tourUserList = tourOrderService.getTourUserListByProjectId(dto);
+        // tourUserList里的头像url提取成List<String>
+        List<String> headImageUrlList = tourUserList.stream().map(TourUser::getHeadImageUrl).collect(Collectors.toList());
+
+        // headImageUrlList使用,分割,转为字符串
+        if(headImageUrlList != null && headImageUrlList.size() > 0) {
+            // 如果是参与拼团,那么加上当前用户头像,如果是取消,就不用处理
+            groupPurchase.setSplicingAvatars(this.splicingAvatars(headImageUrlList));
+            groupPurchase.setUsersAvatars(String.join(",", headImageUrlList));
+        }
         // 修改团购当前参团人数、当前价格、下一阶段价格、距离下一阶段数量
         this.updateById(groupPurchase);
         return groupPurchase;
     }
 
+//    @Override
+//    public void initAvatar() {
+//        // 查询有人参团的团购
+//        LambdaQueryWrapper<TourProjectGroupPurchase> queryWrapper = new LambdaQueryWrapper<>();
+//        queryWrapper.ge(TourProjectGroupPurchase::getNowCount, 1);
+//        List<TourProjectGroupPurchase> tourProjectGroupPurchases = tourProjectGroupPurchaseMapper.selectList(queryWrapper);
+//        // 查询这些团购参与过的用户
+//        for(TourProjectGroupPurchase tourProjectGroupPurchase : tourProjectGroupPurchases) {
+//            TourGroupUserToWebDto dto = new TourGroupUserToWebDto();
+//            dto.setGroupPurchaseProgressId(tourProjectGroupPurchase.getId());
+//            List<TourUser> userList = tourOrderService.getTourUserListByProjectId(dto);
+//            List<String> headImageUrlList = new ArrayList<>();
+//            for (TourUser tourUser : userList) {
+//                headImageUrlList.add(StringUtils.isNotBlank(tourUser.getHeadImageUrl()) ? tourUser.getHeadImageUrl() : "https://t.xiaoyaotravel.com/default_profile/defaultAvatar.png");
+//            }
+//            tourProjectGroupPurchase.setSplicingAvatars(this.splicingAvatars(headImageUrlList));
+//            tourProjectGroupPurchase.setUsersAvatars(String.join(",", headImageUrlList));
+//            this.updateById(tourProjectGroupPurchase);
+//        }
+//    }
+
+    /**
+     *
+     * @param headImageUrlList
+     * @return
+     */
+    private String splicingAvatars(List<String> headImageUrlList) {
+        return mergeAvatarsFlexUtils.mergeAndUploadAvatars(headImageUrlList);
+    }
+
     private TourProjectGroupPurchase buildDefaultValue(TourProjectGroupPurchase tourProjectGroupPurchase) {
         if (tourProjectGroupPurchase.getId() == null) {
             tourProjectGroupPurchase.setId(idGenerator.nextLongId());

+ 16 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourProjectGroupPurchaseVo.java

@@ -1,5 +1,6 @@
 package com.tourism.webadmin.back.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.tourism.common.core.base.vo.BaseVo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -7,6 +8,7 @@ import lombok.EqualsAndHashCode;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -186,4 +188,18 @@ public class TourProjectGroupPurchaseVo extends BaseVo {
      */
     @Schema(description = "距离下个阶段还需要多少人")
     private Integer nextStageNum;
+
+    @Schema(description = "拼团拼接头像")
+    private String splicingAvatars;
+
+    /**
+     * 拼接前的参团用户头像
+     */
+    @Schema(description = "拼接前的参团用户头像")
+    private String usersAvatars;
+    /**
+     * 拼接前的参团用户头像
+     */
+    @Schema(description = "拼接前的参团用户头像集合")
+    private List<String> usersAvatarList;
 }

+ 19 - 6
common/common-huaweicloud/common-huaweicloud-obs/src/main/java/com/tourism/common/huaweicloud/obs/util/MergeAvatarsFlexUtils.java

@@ -2,6 +2,7 @@ package com.tourism.common.huaweicloud.obs.util;
 
 import com.obs.services.ObsClient;
 import com.obs.services.model.PutObjectResult;
+import com.tourism.common.additional.config.ApplicationConfig;
 import com.tourism.common.huaweicloud.obs.config.HuaweicloudObsProperties;
 import jakarta.annotation.PostConstruct;
 import org.apache.commons.collections4.CollectionUtils;
@@ -23,6 +24,9 @@ public class MergeAvatarsFlexUtils {
     private final HuaweicloudObsProperties huaweicloudObsProperties;
     private final ObsClient client;
 
+    @Autowired
+    private ApplicationConfig applicationConfig;
+
     public MergeAvatarsFlexUtils(HuaweicloudObsProperties properties, HuaweicloudObsProperties huaweicloudObsProperties, ObsClient client) {
         super();
         this.huaweicloudObsProperties = huaweicloudObsProperties;
@@ -205,19 +209,28 @@ public class MergeAvatarsFlexUtils {
      * @return 上传后的图片 URL
      * @throws Exception 异常处理
      */
-    public String mergeAndUploadAvatars(String hostIpPort,List<String> avatarUrls) throws Exception {
+    public String mergeAndUploadAvatars(List<String> avatarUrls) {
+        if(avatarUrls == null || avatarUrls.isEmpty() || avatarUrls.size() == 0) {
+            return "";
+        }
         //设定最多为九张图片的组合
         if(CollectionUtils.isNotEmpty(avatarUrls) && avatarUrls.size() > 9){
             avatarUrls = avatarUrls.subList(0,9);
         }
         // 1. 合成图片
-        BufferedImage mergedImage = mergeAvatars(avatarUrls);
+        BufferedImage mergedImage = null;
+        String uploadedUrl = null;
+        try {
+            mergedImage = mergeAvatars(avatarUrls);
 
-        // 2. 将图片上传到华为云
-        String fileName = "merged_avatar_" + System.currentTimeMillis() + ".png";
-        String uploadedUrl = uploadToHuaweiCloud(mergedImage, fileName);
+            // 2. 将图片上传到华为云
+            String fileName = "merged_avatar_" + System.currentTimeMillis() + ".png";
+            uploadedUrl = uploadToHuaweiCloud(mergedImage, fileName);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
         String imageUrlAfterConvert =
-                hostIpPort + "/" + uploadedUrl;
+                applicationConfig.getHostIpPort() + "/" + uploadedUrl;
         return imageUrlAfterConvert;
     }