Quellcode durchsuchen

[fix]
完善系统核销返利的逻辑

chenchen vor 2 Monaten
Ursprung
Commit
20557c79dc

+ 1 - 0
application-webadmin/src/main/java/com/tourism/webadmin/app/website/controller/LoginToWebsiteController.java

@@ -345,6 +345,7 @@ public class LoginToWebsiteController {
             tourUser.setMobile(phoneNoInfo.getPhoneNumber());
             tourUser.setMobile(phoneNoInfo.getPhoneNumber());
             tourUser.setPassword(passwordEncoder.encode("123456"));
             tourUser.setPassword(passwordEncoder.encode("123456"));
             tourUser.setCountryCode(phoneNoInfo.getCountryCode());
             tourUser.setCountryCode(phoneNoInfo.getCountryCode());
+            tourUser.setHeadImageUrl(appConfig+"/default_profile/defaultAvatar.png");
             tourUser = tourUserService.saveNew(tourUser);
             tourUser = tourUserService.saveNew(tourUser);
         }
         }
         // 生成token
         // 生成token

+ 36 - 1
application-webadmin/src/main/java/com/tourism/webadmin/back/controller/TourOrderController.java

@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.tourism.common.log.annotation.OperationLog;
 import com.tourism.common.log.annotation.OperationLog;
 import com.tourism.common.log.model.constant.SysOperationLogType;
 import com.tourism.common.log.model.constant.SysOperationLogType;
 import com.github.pagehelper.page.PageMethod;
 import com.github.pagehelper.page.PageMethod;
+import com.tourism.webadmin.back.model.constant.GroupPurchaseRebate;
 import com.tourism.webadmin.back.vo.*;
 import com.tourism.webadmin.back.vo.*;
 import com.tourism.webadmin.back.dto.*;
 import com.tourism.webadmin.back.dto.*;
 import com.tourism.webadmin.back.model.*;
 import com.tourism.webadmin.back.model.*;
@@ -18,6 +19,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.*;
 
 
 /**
 /**
@@ -162,7 +164,10 @@ public class TourOrderController {
         TourOrder tourOrderFilter = MyModelUtil.copyTo(tourOrderDtoFilter, TourOrder.class);
         TourOrder tourOrderFilter = MyModelUtil.copyTo(tourOrderDtoFilter, TourOrder.class);
         String orderBy = MyOrderParam.buildOrderBy(orderParam, TourOrder.class);
         String orderBy = MyOrderParam.buildOrderBy(orderParam, TourOrder.class);
         List<TourOrder> tourOrderList = tourOrderService.getTourOrderListWithRelation(tourOrderFilter, orderBy);
         List<TourOrder> tourOrderList = tourOrderService.getTourOrderListWithRelation(tourOrderFilter, orderBy);
-        return ResponseResult.success(MyPageUtil.makeResponseData(tourOrderList, TourOrderVo.class));
+        for(TourOrder item:tourOrderList){
+            item.setRebateSumPrice(tourOrderService.getTourUserRebate(item.getCreateUserId(),item.getGroupPurchaseProgressId()));
+        }
+         return ResponseResult.success(MyPageUtil.makeResponseData(tourOrderList, TourOrderVo.class));
     }
     }
 
 
     /**
     /**
@@ -179,6 +184,7 @@ public class TourOrderController {
             return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
             return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
         }
         }
         TourOrderVo tourOrderVo = MyModelUtil.copyTo(tourOrder, TourOrderVo.class);
         TourOrderVo tourOrderVo = MyModelUtil.copyTo(tourOrder, TourOrderVo.class);
+        tourOrderVo.setRebateSumPrice(tourOrderService.getTourUserRebate(tourOrderVo.getCreateUserId(),Long.parseLong(tourOrderVo.getGroupPurchaseProgressId())));
         return ResponseResult.success(tourOrderVo);
         return ResponseResult.success(tourOrderVo);
     }
     }
 
 
@@ -197,4 +203,33 @@ public class TourOrderController {
         }
         }
         return ResponseResult.success();
         return ResponseResult.success();
     }
     }
+
+    /**
+     * 根据旅游订单id进行核销
+     *
+     * @param tourOrderDto 核销对象。
+     * @return 应答结果对象。
+     */
+    @SaCheckPermission("tourOrder.clearRebate")
+    @OperationLog(type = SysOperationLogType.UPLOAD)
+    @PostMapping("/clearRebate")
+    public ResponseResult<Void> clearRebate(@MyRequestBody TourOrderDto tourOrderDto) {
+        if (MyCommonUtil.existBlankArgument(tourOrderDto.getId())) {
+            return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
+        }
+        TourOrder tourOrder = tourOrderService.getById(tourOrderDto.getId());
+        if (tourOrder != null) {
+            //计算返利的价格
+            BigDecimal tourUserRebate =
+                    tourOrderService.getTourUserRebate(tourOrder.getCreateUserId(), tourOrder.getGroupPurchaseProgressId());
+            //判断核销金额是否超过了最大返利金额
+            if(tourUserRebate.compareTo(tourOrderDto.getRebatePrice()) ==  -1) {
+                return ResponseResult.error(ErrorCodeEnum.TOUR_ORDER_USER_ERROR,"核销金额不能超过最大返利金额,请刷新列表后,重新输入");
+            }
+            tourOrderService.clearRebate(tourOrderDto,tourOrder);
+        }else {
+            return ResponseResult.error(ErrorCodeEnum.TOUR_ORDER_USER_ERROR,"订单信息未查到,请刷新列表后,重新输入");
+        }
+        return ResponseResult.success();
+    }
 }
 }

+ 10 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourOrderMapper.java

@@ -6,7 +6,9 @@ import com.tourism.webadmin.back.model.TourOrder;
 import com.tourism.webadmin.back.model.TourUser;
 import com.tourism.webadmin.back.model.TourUser;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Select;
+import org.apache.poi.hpsf.Decimal;
 
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -40,4 +42,12 @@ public interface TourOrderMapper extends BaseDaoMapper<TourOrder> {
      * @return
      * @return
      */
      */
     List<TourUser> getTourUserList(@Param("groupUserFilter") TourGroupUserToWebDto dto);
     List<TourUser> getTourUserList(@Param("groupUserFilter") TourGroupUserToWebDto dto);
+
+    /**
+     * 根据条件查询对应的返利金额
+     * @param userId 用户id
+     * @param groupPurchaseProgressId 拼团id
+     * @return
+     */
+    BigDecimal getTourUserRebate(Long userId, Long groupPurchaseProgressId);
 }
 }

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

@@ -180,4 +180,11 @@
             </if>
             </if>
         </where>
         </where>
     </select>
     </select>
+
+    <select id="getTourUserRebate" resultType="BigDecimal" parameterType="Long">
+        select sum(tour_project_group_purchase_rebate.price) from tour_project_group_purchase_rebate where
+            tour_project_group_purchase_rebate.data_state = 1 and tour_project_group_purchase_rebate.user_id = #{userId} and
+            tour_project_group_purchase_rebate.group_purchase_progress_id = #{groupPurchaseProgressId}
+    </select>
+
 </mapper>
 </mapper>

+ 6 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourOrderDto.java

@@ -224,4 +224,10 @@ public class TourOrderDto {
 
 
     @Schema(description = "订单类型(0.普通订单;1.拼团的订单)")
     @Schema(description = "订单类型(0.普通订单;1.拼团的订单)")
     private Integer type;
     private Integer type;
+
+    /**
+     * 核销价格。
+     */
+    @Schema(description = "核销价格。可支持等于操作符的列表数据过滤。")
+    private BigDecimal rebatePrice;
 }
 }

+ 1 - 1
application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourProjectGroupPurchaseRebateDto.java

@@ -91,5 +91,5 @@ public class TourProjectGroupPurchaseRebateDto {
      * NOTE: 可支持等于操作符的列表数据过滤。
      * NOTE: 可支持等于操作符的列表数据过滤。
      */
      */
     @Schema(description = "返利金额的单位。")
     @Schema(description = "返利金额的单位。")
-    private BigDecimal priceUnit;
+    private String priceUnit;
 }
 }

+ 4 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourOrder.java

@@ -10,6 +10,7 @@ import com.tourism.common.core.base.model.BaseModel;
 import com.tourism.common.core.util.MyCommonUtil;
 import com.tourism.common.core.util.MyCommonUtil;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
+import org.apache.poi.hpsf.Decimal;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.Date;
@@ -243,4 +244,7 @@ public class TourOrder extends BaseModel {
             slaveIdField = "id")
             slaveIdField = "id")
     @TableField(exist = false)
     @TableField(exist = false)
     private TourProjectGroupPurchase tourProjectGroupPurchase;
     private TourProjectGroupPurchase tourProjectGroupPurchase;
+
+    @TableField(exist = false)
+    private BigDecimal rebateSumPrice;
 }
 }

+ 1 - 1
application-webadmin/src/main/java/com/tourism/webadmin/back/model/constant/GroupPurchaseRebate.java

@@ -28,7 +28,7 @@ public final class GroupPurchaseRebate {
     static {
     static {
         DICT_MAP.put(INVITE_USER, "邀请用户");
         DICT_MAP.put(INVITE_USER, "邀请用户");
         DICT_MAP.put(INVITE_USER_CANCEL, "邀请的用户取消订单");
         DICT_MAP.put(INVITE_USER_CANCEL, "邀请的用户取消订单");
-        DICT_MAP.put(SYSTEM_RETURN_ZERO, "系统清空返利");
+        DICT_MAP.put(SYSTEM_RETURN_ZERO, "系统核销返利");
     }
     }
 
 
     /**
     /**

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

@@ -5,7 +5,9 @@ import com.tourism.webadmin.app.website.dto.TourGroupUserToWebDto;
 import com.tourism.webadmin.back.dto.TourOrderDto;
 import com.tourism.webadmin.back.dto.TourOrderDto;
 import com.tourism.webadmin.back.model.TourOrder;
 import com.tourism.webadmin.back.model.TourOrder;
 import com.tourism.webadmin.back.model.TourUser;
 import com.tourism.webadmin.back.model.TourUser;
+import org.apache.poi.hpsf.Decimal;
 
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -81,4 +83,16 @@ public interface TourOrderService extends IBaseService<TourOrder, Long> {
      * @param tourOrder
      * @param tourOrder
      */
      */
     void updateHistoryOrderPrice(TourOrder tourOrder);
     void updateHistoryOrderPrice(TourOrder tourOrder);
+
+    /**
+     * 更新参与拼团的其他订单价格
+     * @param userId 用户id groupPurchaseProgressId 拼团id
+     */
+    BigDecimal getTourUserRebate(Long userId, Long groupPurchaseProgressId);
+
+    /**
+     * 订单进行核销操作
+     * @param tourOrderDto 订单Dto
+     */
+    void clearRebate(TourOrderDto tourOrderDto,TourOrder tourOrder);
 }
 }

+ 38 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourOrderServiceImpl.java

@@ -6,9 +6,11 @@ import com.github.pagehelper.Page;
 import com.tourism.common.core.annotation.MyDataSource;
 import com.tourism.common.core.annotation.MyDataSource;
 import com.tourism.common.core.base.dao.BaseDaoMapper;
 import com.tourism.common.core.base.dao.BaseDaoMapper;
 import com.tourism.common.core.base.service.BaseService;
 import com.tourism.common.core.base.service.BaseService;
+import com.tourism.common.core.constant.ErrorCodeEnum;
 import com.tourism.common.core.constant.GlobalDeletedFlag;
 import com.tourism.common.core.constant.GlobalDeletedFlag;
 import com.tourism.common.core.object.CallResult;
 import com.tourism.common.core.object.CallResult;
 import com.tourism.common.core.object.MyRelationParam;
 import com.tourism.common.core.object.MyRelationParam;
+import com.tourism.common.core.object.ResponseResult;
 import com.tourism.common.core.util.MyModelUtil;
 import com.tourism.common.core.util.MyModelUtil;
 import com.tourism.common.dict.service.GlobalDictService;
 import com.tourism.common.dict.service.GlobalDictService;
 import com.tourism.common.sequence.wrapper.IdGeneratorWrapper;
 import com.tourism.common.sequence.wrapper.IdGeneratorWrapper;
@@ -16,12 +18,16 @@ import com.tourism.webadmin.app.website.dto.TourGroupUserToWebDto;
 import com.tourism.webadmin.back.dao.TourOrderMapper;
 import com.tourism.webadmin.back.dao.TourOrderMapper;
 import com.tourism.webadmin.back.dto.TourOrderDto;
 import com.tourism.webadmin.back.dto.TourOrderDto;
 import com.tourism.webadmin.back.model.TourOrder;
 import com.tourism.webadmin.back.model.TourOrder;
+import com.tourism.webadmin.back.model.TourProjectGroupPurchaseRebate;
 import com.tourism.webadmin.back.model.TourUser;
 import com.tourism.webadmin.back.model.TourUser;
+import com.tourism.webadmin.back.model.constant.GroupPurchaseRebate;
 import com.tourism.webadmin.back.service.TourOrderPassenageService;
 import com.tourism.webadmin.back.service.TourOrderPassenageService;
 import com.tourism.webadmin.back.service.TourOrderService;
 import com.tourism.webadmin.back.service.TourOrderService;
+import com.tourism.webadmin.back.service.TourProjectGroupPurchaseRebateService;
 import com.tourism.webadmin.back.service.TourismProjectService;
 import com.tourism.webadmin.back.service.TourismProjectService;
 import com.tourism.webadmin.config.DataSourceType;
 import com.tourism.webadmin.config.DataSourceType;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.hpsf.Decimal;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
@@ -50,6 +56,8 @@ public class TourOrderServiceImpl extends BaseService<TourOrder, Long> implement
     private TourismProjectService tourismProjectService;
     private TourismProjectService tourismProjectService;
     @Autowired
     @Autowired
     private GlobalDictService globalDictService;
     private GlobalDictService globalDictService;
+    @Autowired
+    private TourProjectGroupPurchaseRebateService tourProjectGroupPurchaseRebateService;
 
 
     /**
     /**
      * 返回当前Service的主表Mapper对象。
      * 返回当前Service的主表Mapper对象。
@@ -158,4 +166,34 @@ public class TourOrderServiceImpl extends BaseService<TourOrder, Long> implement
         tourOrder.setDataState(GlobalDeletedFlag.NORMAL);
         tourOrder.setDataState(GlobalDeletedFlag.NORMAL);
         return tourOrder;
         return tourOrder;
     }
     }
+
+    /**
+     * 更新参与拼团的其他订单价格
+     * @param userId 用户id groupPurchaseProgressId 拼团id
+     */
+    @Override
+    public BigDecimal getTourUserRebate(Long userId, Long groupPurchaseProgressId){
+        return tourOrderMapper.getTourUserRebate(userId, groupPurchaseProgressId);
+    }
+
+    /**
+     * 订单进行核销操作
+     * @param tourOrderDto 订单Dto
+     */
+    @Override
+    @Transactional
+    public void clearRebate(TourOrderDto tourOrderDto,TourOrder tourOrder){
+        //返利记录加一条记录
+        TourProjectGroupPurchaseRebate tourProjectGroupPurchaseRebate = new TourProjectGroupPurchaseRebate();
+        tourProjectGroupPurchaseRebate.setUserId(tourOrder.getCreateUserId());
+        tourProjectGroupPurchaseRebate.setGroupPurchaseProgressId(tourOrder.getGroupPurchaseProgressId());
+        tourProjectGroupPurchaseRebate.setOrderId(tourOrder.getId());
+        tourProjectGroupPurchaseRebate.setPrice(BigDecimal.ZERO.subtract(tourOrderDto.getRebatePrice()));
+        tourProjectGroupPurchaseRebate.setPriceUnit(tourOrder.getCurrency());
+        tourProjectGroupPurchaseRebate.setReason(GroupPurchaseRebate.SYSTEM_RETURN_ZERO);
+        tourProjectGroupPurchaseRebateService.saveNew(tourProjectGroupPurchaseRebate);
+        //订单金额进行金额扣除
+        tourOrder.setTotalAmount(tourOrder.getTotalAmount().subtract(tourOrderDto.getRebatePrice()));
+        updateById(tourOrder);
+    }
 }
 }

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

@@ -90,7 +90,7 @@ public class TourProjectGroupPurchaseRebateServiceImpl extends BaseService<TourP
         // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
         // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
         // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
         // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
         int batchSize = resultList instanceof Page ? 0 : 1000;
         int batchSize = resultList instanceof Page ? 0 : 1000;
-        this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
+        this.buildRelationForDataList(resultList, MyRelationParam.full(), batchSize);
         return resultList;
         return resultList;
     }
     }
 
 

+ 10 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourOrderVo.java

@@ -1,5 +1,6 @@
 package com.tourism.webadmin.back.vo;
 package com.tourism.webadmin.back.vo;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.tourism.common.core.base.vo.BaseVo;
 import com.tourism.common.core.base.vo.BaseVo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.Data;
@@ -192,4 +193,13 @@ public class TourOrderVo extends BaseVo {
 
 
     @Schema(description = "团购信息")
     @Schema(description = "团购信息")
     private TourProjectGroupPurchaseVo tourProjectGroupPurchase;
     private TourProjectGroupPurchaseVo tourProjectGroupPurchase;
+
+    @Schema(description = "返利金额")
+    private BigDecimal rebateSumPrice;
+
+    /**
+     * 拼团设置id。
+     */
+    @Schema(description = "拼团设置id")
+    private String groupPurchaseProgressId;
 }
 }

+ 1 - 1
application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourProjectGroupPurchaseRebateVo.java

@@ -53,7 +53,7 @@ public class TourProjectGroupPurchaseRebateVo extends BaseVo {
      * 返利的金额的单位。
      * 返利的金额的单位。
      */
      */
     @Schema(description = "返利的金额的单位")
     @Schema(description = "返利的金额的单位")
-    private BigDecimal priceUnit;
+    private String priceUnit;
 
 
     /**
     /**
      * 返利变化的原因(0.邀请用户;1.邀请的用户取消;2.清空返利)。
      * 返利变化的原因(0.邀请用户;1.邀请的用户取消;2.清空返利)。