Merge branch 'master' of gitee.com:darlk/ShengTangManage into develop
This commit is contained in:
		@@ -5,8 +5,11 @@ import java.math.RoundingMode;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import com.stdiet.custom.domain.SysCommissionDayDetail;
 | 
			
		||||
import com.stdiet.custom.domain.SysOrder;
 | 
			
		||||
import com.stdiet.custom.domain.SysOrderCommisionDayDetail;
 | 
			
		||||
import com.stdiet.custom.dto.request.SysOrderCommision;
 | 
			
		||||
import com.stdiet.custom.service.ISysCommissionDayService;
 | 
			
		||||
import com.stdiet.custom.service.ISysOrderService;
 | 
			
		||||
import com.stdiet.framework.web.domain.server.Sys;
 | 
			
		||||
import com.stdiet.system.domain.CusSalesman;
 | 
			
		||||
import com.stdiet.system.service.ISysUserService;
 | 
			
		||||
@@ -199,6 +202,16 @@ public class SysCommisionController extends BaseController {
 | 
			
		||||
        return getDataTable(sysCommissionDayService.calculateCommissionByDay(sysCommision));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据用户ID查询该用户按天计算提成的详情
 | 
			
		||||
     * */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('commisionDay:detail:list')")
 | 
			
		||||
    @GetMapping("/orderDetailDay")
 | 
			
		||||
    public AjaxResult getOrderCommissionDetailDay(SysCommision sysCommision) {
 | 
			
		||||
        startPage();
 | 
			
		||||
        return sysCommissionDayService.calculateOrderCommissionDetail(sysCommision);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 导出按天计算提成详细列表
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -62,4 +62,10 @@ public class SysCommision extends BaseEntity {
 | 
			
		||||
 | 
			
		||||
    //订单审核状态
 | 
			
		||||
    private String reviewStatus;
 | 
			
		||||
 | 
			
		||||
    //服务开始时间,用于计算该时间段的提成
 | 
			
		||||
    private String serverScopeStartTime;
 | 
			
		||||
 | 
			
		||||
    //服务结束时间,用于计算该时间段的提成
 | 
			
		||||
    private String serverScopeEndTime;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ package com.stdiet.custom.domain;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonFormat;
 | 
			
		||||
import com.stdiet.common.annotation.Excel;
 | 
			
		||||
import com.stdiet.common.core.domain.BaseEntity;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.time.LocalDate;
 | 
			
		||||
@@ -12,22 +13,27 @@ import java.util.Map;
 | 
			
		||||
/**
 | 
			
		||||
 * 每个订单的提成详情
 | 
			
		||||
 * */
 | 
			
		||||
@Data
 | 
			
		||||
public class SysOrderCommisionDayDetail extends BaseEntity {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /**订单ID*/
 | 
			
		||||
    private Long orderId;
 | 
			
		||||
 | 
			
		||||
    /**订单成交时间*/
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 | 
			
		||||
    private LocalDateTime orderTime;
 | 
			
		||||
 | 
			
		||||
    /**客户姓名*/
 | 
			
		||||
    private String name;
 | 
			
		||||
 | 
			
		||||
    /**服务结束时间*/
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 | 
			
		||||
    @Excel(name = "成交时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd")
 | 
			
		||||
    private LocalDate serverStartDate;
 | 
			
		||||
 | 
			
		||||
    /**服务结束时间*/
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd")
 | 
			
		||||
    private LocalDate serverEndDate;
 | 
			
		||||
 | 
			
		||||
    /**服务月数*/
 | 
			
		||||
@@ -36,15 +42,27 @@ public class SysOrderCommisionDayDetail extends BaseEntity {
 | 
			
		||||
    /**赠送天数*/
 | 
			
		||||
    private Integer giveDay;
 | 
			
		||||
 | 
			
		||||
    /**订单金额*/
 | 
			
		||||
    /**订单金额或服务订单金额*/
 | 
			
		||||
    private BigDecimal orderAmount;
 | 
			
		||||
 | 
			
		||||
    /**订单总提成**/
 | 
			
		||||
    private BigDecimal orderCommission;
 | 
			
		||||
 | 
			
		||||
    //已发放提成
 | 
			
		||||
    private BigDecimal hasSendOrderCommission;
 | 
			
		||||
 | 
			
		||||
    //未发放提成
 | 
			
		||||
    private BigDecimal notHasSendOrderCommission;
 | 
			
		||||
 | 
			
		||||
    /**服务天数*/
 | 
			
		||||
    private Integer serverDay;
 | 
			
		||||
 | 
			
		||||
    /**每天金额*/
 | 
			
		||||
    private BigDecimal dayMoney;
 | 
			
		||||
 | 
			
		||||
    /** 暂停总天数 **/
 | 
			
		||||
    private int pauseTotalDay;
 | 
			
		||||
 | 
			
		||||
    /**每年每月暂停天数*/
 | 
			
		||||
    private Map<String, Integer> everyYearMonthPauseDay;
 | 
			
		||||
 | 
			
		||||
@@ -54,99 +72,15 @@ public class SysOrderCommisionDayDetail extends BaseEntity {
 | 
			
		||||
    /**每年每月对应金额*/
 | 
			
		||||
    private Map<String, BigDecimal> everyYearMonthServerMoney;
 | 
			
		||||
 | 
			
		||||
    public LocalDateTime getOrderTime() {
 | 
			
		||||
        return orderTime;
 | 
			
		||||
    }
 | 
			
		||||
    /**每年每月对应提成*/
 | 
			
		||||
    private Map<String, BigDecimal> everyYearMonthServerCommission;
 | 
			
		||||
 | 
			
		||||
    public void setOrderTime(LocalDateTime orderTime) {
 | 
			
		||||
        this.orderTime = orderTime;
 | 
			
		||||
    }
 | 
			
		||||
    /**每年每月的提成是否发放**/
 | 
			
		||||
    private Map<String, Boolean> everyYearMonthCommissionSendFlag;
 | 
			
		||||
 | 
			
		||||
    public String getName() {
 | 
			
		||||
        return name;
 | 
			
		||||
    }
 | 
			
		||||
    //该笔订单成交的当月的总成交额,用于确定提成比例
 | 
			
		||||
    private BigDecimal monthOrderTotalAmount;
 | 
			
		||||
 | 
			
		||||
    public void setName(String name) {
 | 
			
		||||
        this.name = name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public LocalDate getServerStartDate() {
 | 
			
		||||
        return serverStartDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setServerStartDate(LocalDate serverStartDate) {
 | 
			
		||||
        this.serverStartDate = serverStartDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public LocalDate getServerEndDate() {
 | 
			
		||||
        return serverEndDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setServerEndDate(LocalDate serverEndDate) {
 | 
			
		||||
        this.serverEndDate = serverEndDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Integer getServerMonth() {
 | 
			
		||||
        return serverMonth;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setServerMonth(Integer serverMonth) {
 | 
			
		||||
        this.serverMonth = serverMonth;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Integer getGiveDay() {
 | 
			
		||||
        return giveDay;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setGiveDay(Integer giveDay) {
 | 
			
		||||
        this.giveDay = giveDay;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public BigDecimal getOrderAmount() {
 | 
			
		||||
        return orderAmount;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOrderAmount(BigDecimal orderAmount) {
 | 
			
		||||
        this.orderAmount = orderAmount;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Integer getServerDay() {
 | 
			
		||||
        return serverDay;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setServerDay(Integer serverDay) {
 | 
			
		||||
        this.serverDay = serverDay;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public BigDecimal getDayMoney() {
 | 
			
		||||
        return dayMoney;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDayMoney(BigDecimal dayMoney) {
 | 
			
		||||
        this.dayMoney = dayMoney;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, Integer> getEveryYearMonthPauseDay() {
 | 
			
		||||
        return everyYearMonthPauseDay;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEveryYearMonthPauseDay(Map<String, Integer> everyYearMonthPauseDay) {
 | 
			
		||||
        this.everyYearMonthPauseDay = everyYearMonthPauseDay;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, Integer> getEveryYearMonthServerDay() {
 | 
			
		||||
        return everyYearMonthServerDay;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEveryYearMonthServerDay(Map<String, Integer> everyYearMonthServerDay) {
 | 
			
		||||
        this.everyYearMonthServerDay = everyYearMonthServerDay;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, BigDecimal> getEveryYearMonthServerMoney() {
 | 
			
		||||
        return everyYearMonthServerMoney;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEveryYearMonthServerMoney(Map<String, BigDecimal> everyYearMonthServerMoney) {
 | 
			
		||||
        this.everyYearMonthServerMoney = everyYearMonthServerMoney;
 | 
			
		||||
    }
 | 
			
		||||
    //该笔订单对应提成比例
 | 
			
		||||
    private Float commissionRate;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,13 @@
 | 
			
		||||
package com.stdiet.custom.dto.response;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
 | 
			
		||||
@Data
 | 
			
		||||
public class EveryMonthTotalAmount {
 | 
			
		||||
 | 
			
		||||
    private String yearMonth;
 | 
			
		||||
 | 
			
		||||
    private BigDecimal totalAmount;
 | 
			
		||||
}
 | 
			
		||||
@@ -2,12 +2,14 @@ package com.stdiet.custom.mapper;
 | 
			
		||||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import com.stdiet.custom.domain.SysCommision;
 | 
			
		||||
import com.stdiet.custom.domain.SysCommissionDayDetail;
 | 
			
		||||
import com.stdiet.custom.domain.SysCustomer;
 | 
			
		||||
import com.stdiet.custom.domain.SysOrder;
 | 
			
		||||
import com.stdiet.custom.dto.request.SysOrderCommision;
 | 
			
		||||
import com.stdiet.custom.dto.response.EveryMonthTotalAmount;
 | 
			
		||||
import org.apache.ibatis.annotations.Param;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -85,4 +87,17 @@ public interface SysOrderMapper
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    int getOrderCountByCustomer(SysCustomer sysCustomer);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询每年每月的总金额
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    List<EveryMonthTotalAmount> getTotalAmountByUserId(SysCommision sysCommision);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取订单数量(按天提成计算)
 | 
			
		||||
     * @param sysCommision
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    int selectSimpleOrderMessageCount(SysCommision sysCommision);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
package com.stdiet.custom.service;
 | 
			
		||||
 | 
			
		||||
import com.stdiet.common.core.domain.AjaxResult;
 | 
			
		||||
import com.stdiet.custom.domain.SysCommision;
 | 
			
		||||
import com.stdiet.custom.domain.SysCommissionDayDetail;
 | 
			
		||||
import com.stdiet.custom.domain.SysOrder;
 | 
			
		||||
@@ -33,4 +34,9 @@ public interface ISysCommissionDayService {
 | 
			
		||||
     */
 | 
			
		||||
    LocalDate getServerEndDate(SysOrder sysOrder);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计算订单提成详情
 | 
			
		||||
     */
 | 
			
		||||
    AjaxResult calculateOrderCommissionDetail(SysCommision sysCommision);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,12 @@ package com.stdiet.custom.service;
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import com.stdiet.custom.domain.SysCommision;
 | 
			
		||||
import com.stdiet.custom.domain.SysCustomer;
 | 
			
		||||
import com.stdiet.custom.domain.SysOrder;
 | 
			
		||||
import com.stdiet.custom.dto.response.EveryMonthTotalAmount;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 销售订单Service接口
 | 
			
		||||
@@ -84,4 +87,17 @@ public interface ISysOrderService
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    int getOrderCountByCustomer(SysCustomer sysCustomer);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询每年每月的总金额
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    List<EveryMonthTotalAmount> getTotalAmountByUserId(SysCommision sysCommision);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取订单数量(按天提成计算)
 | 
			
		||||
     * @param sysCommision
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    int selectSimpleOrderMessageCount(SysCommision sysCommision);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,9 +1,12 @@
 | 
			
		||||
package com.stdiet.custom.service.impl;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.fastjson.JSONArray;
 | 
			
		||||
import com.stdiet.common.core.domain.AjaxResult;
 | 
			
		||||
import com.stdiet.common.utils.DateUtils;
 | 
			
		||||
import com.stdiet.common.utils.StringUtils;
 | 
			
		||||
import com.stdiet.custom.domain.*;
 | 
			
		||||
import com.stdiet.custom.dto.request.SysOrderCommision;
 | 
			
		||||
import com.stdiet.custom.dto.response.EveryMonthTotalAmount;
 | 
			
		||||
import com.stdiet.custom.mapper.SysCommisionMapper;
 | 
			
		||||
import com.stdiet.custom.mapper.SysOrderMapper;
 | 
			
		||||
import com.stdiet.custom.mapper.SysOrderPauseMapper;
 | 
			
		||||
@@ -49,7 +52,8 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
                sysCommissionDayDetail.setNickName(commision.getUserName());
 | 
			
		||||
                sysCommissionDayDetail.setPostId(commision.getPostId());
 | 
			
		||||
                sysCommissionDayDetail.setPostName(commision.getPostName());
 | 
			
		||||
                dealServerOrderCommissionDetail(orderDetailMap.get(sysCommissionDayDetail.getUserId()), sysCommissionDayDetail);
 | 
			
		||||
 | 
			
		||||
                dealServerOrderCommissionDetail(sysCommision, orderDetailMap.get(sysCommissionDayDetail.getUserId()), sysCommissionDayDetail);
 | 
			
		||||
                result.add(sysCommissionDayDetail);
 | 
			
		||||
                //统计所以用户总提成、已发放提成、未发放提成
 | 
			
		||||
                total.setTotalCommissionAmount(total.getTotalCommissionAmount().add(sysCommissionDayDetail.getTotalCommissionAmount()));
 | 
			
		||||
@@ -103,72 +107,199 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
        return serverEndDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计算订单提成详情
 | 
			
		||||
     * @param sysCommision
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public AjaxResult calculateOrderCommissionDetail(SysCommision sysCommision){
 | 
			
		||||
        AjaxResult result = AjaxResult.error("参数错误");
 | 
			
		||||
        if(sysCommision.getUserId() == null){
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
        //分页查询2021年1月份之后所有订单
 | 
			
		||||
        Map<Long, List<SysOrderCommisionDayDetail>> orderUserMap = getOrderByList(sysCommision);
 | 
			
		||||
        if(orderUserMap == null || !orderUserMap.containsKey(sysCommision.getUserId())){
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
        //查询用户
 | 
			
		||||
        List<SysCommision> list = sysCommisionMapper.getAfterSaleAndNutri(sysCommision);
 | 
			
		||||
        if(list == null || list.size() == 0){
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
        Long userId = list.get(0).getUserId();
 | 
			
		||||
        Long postId = list.get(0).getPostId();
 | 
			
		||||
        //获取每个月的成交总额度
 | 
			
		||||
        List<EveryMonthTotalAmount> everyMonthTotalAmountList = sysOrderMapper.getTotalAmountByUserId(sysCommision);
 | 
			
		||||
        if(everyMonthTotalAmountList == null || everyMonthTotalAmountList.size() == 0){
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
        Map<String, BigDecimal> everyMonthTotalAmountMap = new TreeMap<>(new MyComparator());
 | 
			
		||||
        for (EveryMonthTotalAmount everyMonthTotalAmount : everyMonthTotalAmountList) {
 | 
			
		||||
            everyMonthTotalAmountMap.put(everyMonthTotalAmount.getYearMonth(), everyMonthTotalAmount.getTotalAmount());
 | 
			
		||||
        }
 | 
			
		||||
        //获取每个月的提成比例以及计算提成
 | 
			
		||||
        Map<String, Float> rateMap = getRateByAmount(userId, postId, everyMonthTotalAmountMap);
 | 
			
		||||
        //总服务金额
 | 
			
		||||
        BigDecimal totalServerAmount = BigDecimal.valueOf(0);
 | 
			
		||||
        //总提成金额
 | 
			
		||||
        BigDecimal totalCommission = BigDecimal.valueOf(0);
 | 
			
		||||
        //已发放提成金额
 | 
			
		||||
        BigDecimal totalSendCommission = BigDecimal.valueOf(0);
 | 
			
		||||
        //未发放提成金额
 | 
			
		||||
        BigDecimal totalNotSendCommission = BigDecimal.valueOf(0);
 | 
			
		||||
        //根据用户ID获取对应订单列表
 | 
			
		||||
        List<SysOrderCommisionDayDetail> orderDetailList = orderUserMap.get(userId);
 | 
			
		||||
        for(SysOrderCommisionDayDetail sysOrderCommisionDayDetail : orderDetailList){
 | 
			
		||||
            //处理订单提成
 | 
			
		||||
            dealCommissionByOrderCommisionDayDetail(sysOrderCommisionDayDetail, everyMonthTotalAmountMap, rateMap);
 | 
			
		||||
            totalCommission = totalCommission.add(sysOrderCommisionDayDetail.getOrderCommission());
 | 
			
		||||
            totalServerAmount = totalServerAmount.add(sysOrderCommisionDayDetail.getOrderAmount());
 | 
			
		||||
            totalSendCommission = totalSendCommission.add(sysOrderCommisionDayDetail.getHasSendOrderCommission());
 | 
			
		||||
            totalNotSendCommission = totalNotSendCommission.add(sysOrderCommisionDayDetail.getNotHasSendOrderCommission());
 | 
			
		||||
        }
 | 
			
		||||
        result = AjaxResult.success();
 | 
			
		||||
        int total = sysOrderMapper.selectSimpleOrderMessageCount(sysCommision);
 | 
			
		||||
        result.put("total", total);
 | 
			
		||||
        result.put("list", orderDetailList);
 | 
			
		||||
        result.put("totalServerAmount", totalServerAmount);
 | 
			
		||||
        result.put("totalCommission", totalCommission);
 | 
			
		||||
        result.put("totalSendCommission", totalSendCommission);
 | 
			
		||||
        result.put("totalNotSendCommission", totalNotSendCommission);
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据用户ID统计出该用户在该月所有订单的服务数量、服务总天数、服务订单总额、暂停总天数
 | 
			
		||||
     * **/
 | 
			
		||||
    public void dealServerOrderCommissionDetail(List<SysOrderCommisionDayDetail> orderDetailList, SysCommissionDayDetail sysCommissionDayDetail){
 | 
			
		||||
    public void dealServerOrderCommissionDetail(SysCommision commisionParam, List<SysOrderCommisionDayDetail> orderDetailList, SysCommissionDayDetail sysCommissionDayDetail){
 | 
			
		||||
        //总提成
 | 
			
		||||
        BigDecimal totalCommissionAmount = new BigDecimal(0);
 | 
			
		||||
        //已发放提成
 | 
			
		||||
        BigDecimal totalHasSentCommissionAmount = new BigDecimal(0);
 | 
			
		||||
        //未发放提成记录
 | 
			
		||||
        List<Map<String, Object>> sendDetailList = new ArrayList<>();
 | 
			
		||||
        if(orderDetailList != null){
 | 
			
		||||
            //获取每个月的成交总额度
 | 
			
		||||
            Map<String, BigDecimal> orderAmount = new TreeMap<>(new MyComparator());
 | 
			
		||||
            Set<String> commissionMonthSet = new TreeSet<>(new MyComparator());
 | 
			
		||||
            for (SysOrderCommisionDayDetail sysOrderCommisionDayDetail : orderDetailList) {
 | 
			
		||||
                String yearMonth = sysOrderCommisionDayDetail.getOrderTime().getYear()+""+sysOrderCommisionDayDetail.getOrderTime().getMonth().getValue();
 | 
			
		||||
                if(orderAmount.containsKey(yearMonth)){
 | 
			
		||||
                    orderAmount.put(yearMonth, orderAmount.get(yearMonth).add(sysOrderCommisionDayDetail.getOrderAmount()));
 | 
			
		||||
                }else{
 | 
			
		||||
                    orderAmount.put(yearMonth, sysOrderCommisionDayDetail.getOrderAmount());
 | 
			
		||||
                }
 | 
			
		||||
                commissionMonthSet.addAll(sysOrderCommisionDayDetail.getEveryYearMonthServerMoney().keySet());
 | 
			
		||||
            }
 | 
			
		||||
            //获取提成比例以及计算提成
 | 
			
		||||
            Map<String, Float> rateMap = getRateByAmount(sysCommissionDayDetail.getUserId(), sysCommissionDayDetail.getPostId(), orderAmount);
 | 
			
		||||
        sysCommissionDayDetail.setTotalCommissionAmount(BigDecimal.valueOf(0));
 | 
			
		||||
        //总共已发提成
 | 
			
		||||
        sysCommissionDayDetail.setTotalHasSentCommissionAmount(BigDecimal.valueOf(0));
 | 
			
		||||
        //总共未发提成
 | 
			
		||||
        sysCommissionDayDetail.setTotalNotSentCommissionAmount(BigDecimal.valueOf(0));
 | 
			
		||||
        //提成发放计划
 | 
			
		||||
        sysCommissionDayDetail.setSendDetailList(new ArrayList<>());
 | 
			
		||||
        //下月应发提成
 | 
			
		||||
        sysCommissionDayDetail.setNextMonthCommission(BigDecimal.valueOf(0));
 | 
			
		||||
 | 
			
		||||
            int i = 1;
 | 
			
		||||
            BigDecimal commissionA = new BigDecimal(0);
 | 
			
		||||
            for (String ym : commissionMonthSet) {
 | 
			
		||||
                BigDecimal ym_mession = new BigDecimal(0);
 | 
			
		||||
                if(orderAmount.containsKey(ym)){
 | 
			
		||||
                    totalCommissionAmount = totalCommissionAmount.add(getMoney(orderAmount.get(ym).doubleValue() * rateMap.get(ym) / 100D, 1));
 | 
			
		||||
        if(orderDetailList == null || orderDetailList.size() == 0 ){
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //总提成
 | 
			
		||||
        BigDecimal totalCommissionAmount = BigDecimal.valueOf(0);
 | 
			
		||||
        //已发放提成
 | 
			
		||||
        BigDecimal totalHasSentCommissionAmount = BigDecimal.valueOf(0);
 | 
			
		||||
        //未发放提成
 | 
			
		||||
        BigDecimal totalNotHasSentCommissionAmount = BigDecimal.valueOf(0);
 | 
			
		||||
        //已发放提成记录
 | 
			
		||||
        List<Map<String, Object>> hasSendYearMonthDetailList = new ArrayList<>();
 | 
			
		||||
        //未发放提成计划
 | 
			
		||||
        List<Map<String, Object>> notHasSendYearMonthDetailList = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        //获取每个月的成交总额度
 | 
			
		||||
        commisionParam.setUserId(sysCommissionDayDetail.getUserId());
 | 
			
		||||
        List<EveryMonthTotalAmount> everyMonthTotalAmountList = sysOrderMapper.getTotalAmountByUserId(commisionParam);
 | 
			
		||||
        if(everyMonthTotalAmountList == null || everyMonthTotalAmountList.size() == 0){
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        Map<String, BigDecimal> everyMonthTotalAmountMap = new TreeMap<>(new MyComparator());
 | 
			
		||||
        for (EveryMonthTotalAmount everyMonthTotalAmount : everyMonthTotalAmountList) {
 | 
			
		||||
            everyMonthTotalAmountMap.put(everyMonthTotalAmount.getYearMonth(), everyMonthTotalAmount.getTotalAmount());
 | 
			
		||||
        }
 | 
			
		||||
        //获取每个月的提成比例以及计算提成
 | 
			
		||||
        Map<String, Float> rateMap = getRateByAmount(sysCommissionDayDetail.getUserId(), sysCommissionDayDetail.getPostId(), everyMonthTotalAmountMap);
 | 
			
		||||
 | 
			
		||||
        //存在提成的年月
 | 
			
		||||
        Set<String> commissionYearMonthSet = new TreeSet<>(new MyComparator());
 | 
			
		||||
        for (SysOrderCommisionDayDetail sysOrderCommisionDayDetail : orderDetailList) {
 | 
			
		||||
                    Map<String, BigDecimal> everyYearMonthServerMoney = sysOrderCommisionDayDetail.getEveryYearMonthServerMoney();
 | 
			
		||||
                    if(everyYearMonthServerMoney.containsKey(ym)){
 | 
			
		||||
                        String orderYearMonth = sysOrderCommisionDayDetail.getOrderTime().getYear()+""+sysOrderCommisionDayDetail.getOrderTime().getMonth().getValue();
 | 
			
		||||
                        BigDecimal m = (everyYearMonthServerMoney.get(ym) == null) ? new BigDecimal(0) : everyYearMonthServerMoney.get(ym);
 | 
			
		||||
                        ym_mession = ym_mession.add(getMoney(m.doubleValue() * rateMap.get(orderYearMonth) / 100D, 1));
 | 
			
		||||
            //处理订单提成
 | 
			
		||||
            dealCommissionByOrderCommisionDayDetail(sysOrderCommisionDayDetail, everyMonthTotalAmountMap, rateMap);
 | 
			
		||||
            //合并每个订单的年月日
 | 
			
		||||
            commissionYearMonthSet.addAll(sysOrderCommisionDayDetail.getEveryYearMonthServerCommission().keySet());
 | 
			
		||||
            //合计总提成
 | 
			
		||||
            totalCommissionAmount = totalCommissionAmount.add(sysOrderCommisionDayDetail.getOrderCommission());
 | 
			
		||||
            //合计已发放提成
 | 
			
		||||
            totalHasSentCommissionAmount = totalHasSentCommissionAmount.add(sysOrderCommisionDayDetail.getHasSendOrderCommission());
 | 
			
		||||
            //合计未发放提成
 | 
			
		||||
            totalNotHasSentCommissionAmount = totalNotHasSentCommissionAmount.add(sysOrderCommisionDayDetail.getNotHasSendOrderCommission());
 | 
			
		||||
        }
 | 
			
		||||
                }
 | 
			
		||||
                if(isSendCommissionByYearMonth(ym)){
 | 
			
		||||
                    totalHasSentCommissionAmount = totalHasSentCommissionAmount.add(ym_mession);
 | 
			
		||||
                }else{
 | 
			
		||||
 | 
			
		||||
        for (String yearMonth : commissionYearMonthSet) {
 | 
			
		||||
            Map<String, Object> map = new HashMap<>();
 | 
			
		||||
                    map.put("yearMonth", ym);
 | 
			
		||||
                    if(i != commissionMonthSet.size()){
 | 
			
		||||
                        //计算未发放的提成(除最后一个月)
 | 
			
		||||
                        commissionA = commissionA.add(ym_mession);
 | 
			
		||||
                        map.put("yearMonthCommission", ym_mession);
 | 
			
		||||
            BigDecimal yearMonthCommiss = BigDecimal.valueOf(0);
 | 
			
		||||
            for (SysOrderCommisionDayDetail sysOrderCommisionDayDetail : orderDetailList) {
 | 
			
		||||
                if(sysOrderCommisionDayDetail.getEveryYearMonthServerCommission().containsKey(yearMonth)){
 | 
			
		||||
                    yearMonthCommiss = yearMonthCommiss.add(sysOrderCommisionDayDetail.getEveryYearMonthServerCommission().get(yearMonth));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            map.put("yearMonth", yearMonth);
 | 
			
		||||
            map.put("yearMonthCommission", yearMonthCommiss);
 | 
			
		||||
            if(isSendCommissionByYearMonth(yearMonth)){
 | 
			
		||||
                hasSendYearMonthDetailList.add(map);
 | 
			
		||||
            }else{
 | 
			
		||||
                        //最后一个月除去已发放的月份的提成,再减去前面未发放提成,防止出现误差
 | 
			
		||||
                        map.put("yearMonthCommission", totalCommissionAmount.subtract(totalHasSentCommissionAmount).subtract(commissionA));
 | 
			
		||||
                    }
 | 
			
		||||
                    sendDetailList.add(map);
 | 
			
		||||
                }
 | 
			
		||||
                i++;
 | 
			
		||||
                notHasSendYearMonthDetailList.add(map);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        sysCommissionDayDetail.setTotalCommissionAmount(totalCommissionAmount);
 | 
			
		||||
        sysCommissionDayDetail.setTotalHasSentCommissionAmount(totalHasSentCommissionAmount);
 | 
			
		||||
        //未发放提成 = 总提成 - 已发放提成
 | 
			
		||||
        sysCommissionDayDetail.setTotalNotSentCommissionAmount(totalCommissionAmount.subtract(totalHasSentCommissionAmount));
 | 
			
		||||
        sysCommissionDayDetail.setSendDetailList(sendDetailList);
 | 
			
		||||
        sysCommissionDayDetail.setNextMonthCommission(sendDetailList.size() > 0 ? (BigDecimal)sendDetailList.get(0).get("yearMonthCommission") : new BigDecimal(0));
 | 
			
		||||
        sysCommissionDayDetail.setTotalNotSentCommissionAmount(totalNotHasSentCommissionAmount);
 | 
			
		||||
        sysCommissionDayDetail.setSendDetailList(notHasSendYearMonthDetailList);
 | 
			
		||||
        sysCommissionDayDetail.setNextMonthCommission(notHasSendYearMonthDetailList.size() > 0 ? (BigDecimal)notHasSendYearMonthDetailList.get(0).get("yearMonthCommission") : new BigDecimal(0));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 处理每个订单的提成,包括已发放、未发放提成
 | 
			
		||||
     * @param sysOrderCommisionDayDetail 订单服务详情对象
 | 
			
		||||
     * @param everyMonthTotalAmountMap 每个月成交总额
 | 
			
		||||
     * @param rateMap 提成比例
 | 
			
		||||
     */
 | 
			
		||||
    public void dealCommissionByOrderCommisionDayDetail(SysOrderCommisionDayDetail sysOrderCommisionDayDetail, Map<String, BigDecimal> everyMonthTotalAmountMap, Map<String, Float> rateMap){
 | 
			
		||||
        String yearMonth = sysOrderCommisionDayDetail.getOrderTime().getYear() + "" + sysOrderCommisionDayDetail.getOrderTime().getMonth().getValue();
 | 
			
		||||
        //该笔订单当月的成交总额
 | 
			
		||||
        sysOrderCommisionDayDetail.setMonthOrderTotalAmount(everyMonthTotalAmountMap.get(yearMonth));
 | 
			
		||||
        //该笔订单对应提成比例
 | 
			
		||||
        sysOrderCommisionDayDetail.setCommissionRate(rateMap.get(yearMonth));
 | 
			
		||||
        //计算该笔订单总提成
 | 
			
		||||
        sysOrderCommisionDayDetail.setOrderCommission(getMoney(sysOrderCommisionDayDetail.getOrderAmount().doubleValue() * sysOrderCommisionDayDetail.getCommissionRate() / 100D));
 | 
			
		||||
        //每年每月提成
 | 
			
		||||
        Map<String, BigDecimal> everyYearMonthServerCommission = new TreeMap<>(new MyComparator());
 | 
			
		||||
        //每年每月提成是否发放状态
 | 
			
		||||
        Map<String, Boolean> everyYearMonthCommissionSendFlag = new TreeMap<>(new MyComparator());
 | 
			
		||||
        //当前订单的提成总和,用于最后一个月相减
 | 
			
		||||
        BigDecimal currentOrderCommission = BigDecimal.valueOf(0);
 | 
			
		||||
        //已发放提成金额
 | 
			
		||||
        BigDecimal totalSendCommission = BigDecimal.valueOf(0);
 | 
			
		||||
        //未发放提成金额
 | 
			
		||||
        BigDecimal totalNotSendCommission = BigDecimal.valueOf(0);
 | 
			
		||||
 | 
			
		||||
        for (String everyMonth : sysOrderCommisionDayDetail.getEveryYearMonthServerMoney().keySet()) {
 | 
			
		||||
            if(everyMonth.equals(sysOrderCommisionDayDetail.getServerEndDate().getYear()+""+sysOrderCommisionDayDetail.getServerEndDate().getMonth().getValue())){
 | 
			
		||||
                //最后一个月的提成直接相减,避免误差
 | 
			
		||||
                everyYearMonthServerCommission.put(everyMonth, sysOrderCommisionDayDetail.getOrderCommission().subtract(currentOrderCommission));
 | 
			
		||||
            }else{
 | 
			
		||||
                everyYearMonthServerCommission.put(everyMonth, getMoney(sysOrderCommisionDayDetail.getEveryYearMonthServerMoney().get(everyMonth).doubleValue() * sysOrderCommisionDayDetail.getCommissionRate() / 100D));
 | 
			
		||||
            }
 | 
			
		||||
            //判断是否已发放
 | 
			
		||||
            if(isSendCommissionByYearMonth(everyMonth)){
 | 
			
		||||
                everyYearMonthCommissionSendFlag.put(everyMonth, true);
 | 
			
		||||
                totalSendCommission = totalSendCommission.add(everyYearMonthServerCommission.get(everyMonth));
 | 
			
		||||
            }else{
 | 
			
		||||
                everyYearMonthCommissionSendFlag.put(everyMonth, false);
 | 
			
		||||
                totalNotSendCommission = totalNotSendCommission.add(everyYearMonthServerCommission.get(everyMonth));
 | 
			
		||||
            }
 | 
			
		||||
            currentOrderCommission = currentOrderCommission.add(everyYearMonthServerCommission.get(everyMonth));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        sysOrderCommisionDayDetail.setEveryYearMonthServerCommission(everyYearMonthServerCommission);
 | 
			
		||||
        sysOrderCommisionDayDetail.setEveryYearMonthCommissionSendFlag(everyYearMonthCommissionSendFlag);
 | 
			
		||||
        sysOrderCommisionDayDetail.setHasSendOrderCommission(totalSendCommission);
 | 
			
		||||
        sysOrderCommisionDayDetail.setNotHasSendOrderCommission(totalNotSendCommission);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**判断该月提成是否已发放*/
 | 
			
		||||
@@ -237,7 +368,7 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            //对每笔订单进行处理,统计出该比订单在每年每月对应的服务天数、金额、暂停天数等
 | 
			
		||||
            SysOrderCommisionDayDetail sysOrderCommisionDayDetail = statisticsOrderMessage(sysOrder);
 | 
			
		||||
            SysOrderCommisionDayDetail sysOrderCommisionDayDetail = statisticsOrderMessage(sysOrder, sysCommision.getServerScopeStartTime(), sysCommision.getServerScopeEndTime());
 | 
			
		||||
            if(sysOrder.getAfterSaleId() != null && sysOrder.getAfterSaleId() > 0L){
 | 
			
		||||
                addUserOrderResultMap(sysOrder.getAfterSaleId(), sysOrderCommisionDayDetail, userOrderResultMap);
 | 
			
		||||
            }
 | 
			
		||||
@@ -264,7 +395,7 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
    /**
 | 
			
		||||
     * 统计每笔订单的服务开始时间、结束时间、每年每月服务天数、服务金额、服务暂停天数等信息
 | 
			
		||||
     * */
 | 
			
		||||
    public SysOrderCommisionDayDetail statisticsOrderMessage(SysOrder sysOrder){
 | 
			
		||||
    public SysOrderCommisionDayDetail statisticsOrderMessage(SysOrder sysOrder, String serverScopeStartTime, String serverScopeEndTime){
 | 
			
		||||
        //提成计算开始时间(与食谱计划开始时间可能不同)
 | 
			
		||||
        LocalDate serverStartDate = DateUtils.dateToLocalDate(sysOrder.getCommissStartTime());
 | 
			
		||||
        //订单总服务月数
 | 
			
		||||
@@ -288,26 +419,70 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
        //服务总天数
 | 
			
		||||
        int serverDay = getTotalByMap(everyYearMonthServerDay);
 | 
			
		||||
        //每天对应金额
 | 
			
		||||
        BigDecimal dayMoney = getMoney(orderAmount.doubleValue()/serverDay, 1);
 | 
			
		||||
        BigDecimal dayMoney = getMoney(orderAmount.doubleValue()/serverDay);
 | 
			
		||||
        //每年每月对于金额
 | 
			
		||||
        Map<String, BigDecimal> everyYearMonthServerMoney = getEveryMonthServerMoney(everyYearMonthServerDay, orderAmount, dayMoney);
 | 
			
		||||
        Map<String, BigDecimal> everyYearMonthServerMoney = getEveryMonthServerMoney(everyYearMonthServerDay, orderAmount, dayMoney, serverEndDate);
 | 
			
		||||
 | 
			
		||||
        SysOrderCommisionDayDetail sysOrderCommisionDayDetail = new SysOrderCommisionDayDetail();
 | 
			
		||||
        sysOrderCommisionDayDetail.setOrderId(sysOrder.getOrderId());
 | 
			
		||||
        sysOrderCommisionDayDetail.setOrderTime(DateUtils.dateToLocalDateTime(sysOrder.getOrderTime()));
 | 
			
		||||
        sysOrderCommisionDayDetail.setName(sysOrder.getCustomer());
 | 
			
		||||
        sysOrderCommisionDayDetail.setServerStartDate(serverStartDate);
 | 
			
		||||
        sysOrderCommisionDayDetail.setServerEndDate(serverEndDate);
 | 
			
		||||
        sysOrderCommisionDayDetail.setServerMonth(serverMonth);
 | 
			
		||||
        sysOrderCommisionDayDetail.setGiveDay(giveDay);
 | 
			
		||||
        sysOrderCommisionDayDetail.setPauseTotalDay(pauseTotalDay);
 | 
			
		||||
        sysOrderCommisionDayDetail.setOrderAmount(orderAmount);
 | 
			
		||||
        sysOrderCommisionDayDetail.setServerDay(serverDay);
 | 
			
		||||
        sysOrderCommisionDayDetail.setDayMoney(dayMoney);
 | 
			
		||||
        sysOrderCommisionDayDetail.setEveryYearMonthPauseDay(everyYearMonthPauseDay);
 | 
			
		||||
        sysOrderCommisionDayDetail.setEveryYearMonthServerDay(everyYearMonthServerDay);
 | 
			
		||||
        sysOrderCommisionDayDetail.setEveryYearMonthServerMoney(everyYearMonthServerMoney);
 | 
			
		||||
 | 
			
		||||
        if(StringUtils.isNotEmpty(serverScopeStartTime) && StringUtils.isNotEmpty(serverScopeEndTime)){
 | 
			
		||||
            LocalDate realStartTime = DateUtils.stringToLocalDate(serverScopeStartTime, "yyyy-MM-dd");
 | 
			
		||||
            LocalDate realEndTime = DateUtils.stringToLocalDate(serverScopeEndTime, "yyyy-MM-dd");
 | 
			
		||||
            //计算该时间范围内的暂停时间
 | 
			
		||||
            Map<String, Integer> realEveryYearMonthPauseDay = getRealEveryYearMonthPauseDay(sysOrder.getOrderPauseList(), serverStartDate, serverEndDate, realStartTime, realEndTime);
 | 
			
		||||
            //暂停总天数
 | 
			
		||||
            int realPauseTotalDay = getTotalByMap(realEveryYearMonthPauseDay);
 | 
			
		||||
            //计算每年每月服务天数
 | 
			
		||||
            Map<String, Integer> realEveryYearMonthServerDay = getRealEveryYearMonthDayCount(serverStartDate, serverEndDate, realStartTime, realEndTime, everyYearMonthPauseDay);
 | 
			
		||||
            //服务总天数
 | 
			
		||||
            int realServerDay = getTotalByMap(realEveryYearMonthServerDay);
 | 
			
		||||
            //每年每月对于金额
 | 
			
		||||
            Map<String, BigDecimal> realEveryYearMonthServerMoney = getRealEveryMonthServerMoney(realEveryYearMonthServerDay, orderAmount, dayMoney, serverEndDate, everyYearMonthServerDay, everyYearMonthServerMoney);
 | 
			
		||||
            //服务时间范围内暂停天数
 | 
			
		||||
            sysOrderCommisionDayDetail.setPauseTotalDay(realPauseTotalDay);
 | 
			
		||||
            sysOrderCommisionDayDetail.setEveryYearMonthPauseDay(realEveryYearMonthPauseDay);
 | 
			
		||||
            sysOrderCommisionDayDetail.setServerDay(realServerDay);
 | 
			
		||||
            sysOrderCommisionDayDetail.setEveryYearMonthServerDay(realEveryYearMonthServerDay);
 | 
			
		||||
            sysOrderCommisionDayDetail.setEveryYearMonthServerMoney(realEveryYearMonthServerMoney);
 | 
			
		||||
            sysOrderCommisionDayDetail.setOrderAmount(getBigDecimalTotalByMap(realEveryYearMonthServerMoney));
 | 
			
		||||
        }
 | 
			
		||||
        return sysOrderCommisionDayDetail;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取真正服务时间范围内的每年每月暂停天数
 | 
			
		||||
     * @Param list 暂停记录集合
 | 
			
		||||
     * */
 | 
			
		||||
    public Map<String, Integer> getRealEveryYearMonthPauseDay(List<SysOrderPause> list, LocalDate serverStartDate, LocalDate serverEndDate, LocalDate realStartDate, LocalDate realEndDate){
 | 
			
		||||
        Map<String, Integer> pauseMap = new TreeMap<>(new MyComparator());
 | 
			
		||||
        if(ChronoUnit.DAYS.between(realEndDate, serverStartDate) > 0 || ChronoUnit.DAYS.between(serverEndDate, realStartDate) > 0){
 | 
			
		||||
            return pauseMap;
 | 
			
		||||
        }
 | 
			
		||||
        //更新服务开始时间
 | 
			
		||||
        if(ChronoUnit.DAYS.between(serverStartDate,realStartDate) > 0){
 | 
			
		||||
            serverStartDate =  realStartDate;
 | 
			
		||||
        }
 | 
			
		||||
        //更新服务结束时间
 | 
			
		||||
        if(ChronoUnit.DAYS.between(realEndDate,serverEndDate) > 0){
 | 
			
		||||
            serverEndDate =  realEndDate;
 | 
			
		||||
        }
 | 
			
		||||
        return getEveryYearMonthPauseDay(list, serverStartDate, serverEndDate);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取每年每月暂停天数
 | 
			
		||||
     * @Param list 暂停记录集合
 | 
			
		||||
@@ -362,6 +537,17 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
        return total;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取Map<String, BigDecimal>集合中BigDecimal的总和
 | 
			
		||||
     * */
 | 
			
		||||
    public BigDecimal getBigDecimalTotalByMap(Map<String, BigDecimal> map){
 | 
			
		||||
        BigDecimal totalBigDecimal = BigDecimal.valueOf(0);
 | 
			
		||||
        for(String key : map.keySet()){
 | 
			
		||||
            totalBigDecimal = totalBigDecimal.add(map.get(key));
 | 
			
		||||
        }
 | 
			
		||||
        return totalBigDecimal;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取订单服务时间范围中每年每月服务天数,减去当月暂停天数
 | 
			
		||||
     * @Param server_start_date 服务开始时间
 | 
			
		||||
@@ -377,27 +563,81 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
     * @Param everyMonthServerDay 每年每月服务天数
 | 
			
		||||
     * @Param orderMoney 订单总额
 | 
			
		||||
     * @Param dayMoney 每天对于金额
 | 
			
		||||
     * @Param serverEndTime 订单服务结束时间
 | 
			
		||||
     * */
 | 
			
		||||
    public Map<String, BigDecimal> getEveryMonthServerMoney(Map<String, Integer> everyMonthServerDay, BigDecimal orderMoney, BigDecimal dayMoney){
 | 
			
		||||
    public Map<String, BigDecimal> getEveryMonthServerMoney(Map<String, Integer> everyMonthServerDay, BigDecimal orderMoney, BigDecimal dayMoney, LocalDate serverEndTime){
 | 
			
		||||
        Map<String, BigDecimal > everyMonthServerMoney = new TreeMap<>(new MyComparator());
 | 
			
		||||
        Set<String> keySet = everyMonthServerDay.keySet();
 | 
			
		||||
        int i = 1;
 | 
			
		||||
        double totalMoney = 0.0;
 | 
			
		||||
        BigDecimal total = BigDecimal.valueOf(0);
 | 
			
		||||
        for(String key : keySet){
 | 
			
		||||
            if(i++ != keySet.size()){
 | 
			
		||||
                everyMonthServerMoney.put(key, getMoney(everyMonthServerDay.get(key) * dayMoney.doubleValue(), 1));
 | 
			
		||||
                totalMoney += everyMonthServerMoney.get(key).doubleValue();
 | 
			
		||||
            //判断是否为最后一个月
 | 
			
		||||
            if(key.equals(serverEndTime.getYear()+""+serverEndTime.getMonth().getValue())){
 | 
			
		||||
                //由于小数保留问题,最后一个月的金额等于总额减去前几个月金额,避免总数不一致
 | 
			
		||||
                everyMonthServerMoney.put(key, orderMoney.subtract(total));
 | 
			
		||||
            }else{
 | 
			
		||||
                //由于小数点只保留一位,最后一个月的金额等于总额减去前几个月金额,避免总数不一致
 | 
			
		||||
                everyMonthServerMoney.put(key, getMoney(orderMoney.doubleValue() - totalMoney, 1));
 | 
			
		||||
                everyMonthServerMoney.put(key, getMoney(everyMonthServerDay.get(key) * dayMoney.doubleValue()));
 | 
			
		||||
                total = total.add(everyMonthServerMoney.get(key));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return everyMonthServerMoney;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取订单服务时间范围中每年每月服务金额
 | 
			
		||||
     * @Param everyMonthServerDay 真正每年每月服务天数
 | 
			
		||||
     * @Param orderMoney 订单总额
 | 
			
		||||
     * @Param dayMoney 每天对于金额
 | 
			
		||||
     * @Param serverEndTime 订单服务结束时间
 | 
			
		||||
     * @Param everyYearMonthServerDay 整个订单的每年每月服务天数
 | 
			
		||||
     * @Param everyYearMonthServerMoney 整个订单的每年每月服务金额
 | 
			
		||||
     * */
 | 
			
		||||
    public Map<String, BigDecimal> getRealEveryMonthServerMoney(Map<String, Integer> realEveryMonthServerDay, BigDecimal orderMoney, BigDecimal dayMoney, LocalDate serverEndTime,
 | 
			
		||||
                                                                Map<String, Integer> everyYearMonthServerDay, Map<String, BigDecimal> everyYearMonthServerMoney){
 | 
			
		||||
        Map<String, BigDecimal > everyMonthServerMoney = new TreeMap<>(new MyComparator());
 | 
			
		||||
        Set<String> keySet = realEveryMonthServerDay.keySet();
 | 
			
		||||
        BigDecimal total = null;
 | 
			
		||||
        String lastMonth = serverEndTime.getYear()+""+serverEndTime.getMonth().getValue();
 | 
			
		||||
        for(String key : keySet){
 | 
			
		||||
            //判断是否为最后一个月,以及实际这个月的服务时间是否等于该整个订单最后一个月的天数
 | 
			
		||||
            if(key.equals(lastMonth) && realEveryMonthServerDay.get(key).intValue() == everyYearMonthServerDay.get(key).intValue() ){
 | 
			
		||||
                //由于小数保留问题,最后一个月的金额等于总额减去前几个月金额,避免总数不一致
 | 
			
		||||
                total = BigDecimal.valueOf(0);
 | 
			
		||||
                //获取该笔订单除最后一个月的金额总和
 | 
			
		||||
                for (String orderYearMonth : everyYearMonthServerMoney.keySet()) {
 | 
			
		||||
                    if(!orderYearMonth.equals(lastMonth)){
 | 
			
		||||
                        total = total.add(everyYearMonthServerMoney.get(orderYearMonth));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                everyMonthServerMoney.put(key, orderMoney.subtract(total));
 | 
			
		||||
            }else{
 | 
			
		||||
                everyMonthServerMoney.put(key, getMoney(realEveryMonthServerDay.get(key) * dayMoney.doubleValue()));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return everyMonthServerMoney;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据开始日期、结束日期统计出时间范围内每年每月对应的天数
 | 
			
		||||
     * 根据订单服务开始日期、订单服务结束日期、营养师或售后实际开始时间、营养师或售后实际结束时间,统计出实际时间范围内每年每月对应的天数
 | 
			
		||||
     * */
 | 
			
		||||
    public Map<String, Integer> getRealEveryYearMonthDayCount(LocalDate startDate, LocalDate endDate, LocalDate realStartDate, LocalDate realEndDate, Map<String, Integer> lessDayMap){
 | 
			
		||||
        Map<String, Integer> everyYearMonthServerDay = new TreeMap<>(new MyComparator());
 | 
			
		||||
        if(ChronoUnit.DAYS.between(realEndDate, startDate) > 0 || ChronoUnit.DAYS.between(endDate, realStartDate) > 0){
 | 
			
		||||
            return everyYearMonthServerDay;
 | 
			
		||||
        }
 | 
			
		||||
        //更新服务开始时间
 | 
			
		||||
        if(ChronoUnit.DAYS.between(startDate,realStartDate) > 0){
 | 
			
		||||
            startDate =  realStartDate;
 | 
			
		||||
        }
 | 
			
		||||
        //更新服务结束时间
 | 
			
		||||
        if(ChronoUnit.DAYS.between(realEndDate,endDate) > 0){
 | 
			
		||||
            endDate =  realEndDate;
 | 
			
		||||
        }
 | 
			
		||||
        return getEveryYearMonthDayCount(startDate, endDate, lessDayMap);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据订单开始日期、订单结束日期统计出时间范围内每年每月对应的天数
 | 
			
		||||
     * */
 | 
			
		||||
    public Map<String, Integer> getEveryYearMonthDayCount(LocalDate startDate, LocalDate endDate, Map<String, Integer> lessDayMap){
 | 
			
		||||
        Map<String, Integer> everyYearMonthServerDay = new TreeMap<>(new MyComparator());
 | 
			
		||||
@@ -407,8 +647,8 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
        LocalDate everyMonthLastDate = everyMonthFirstDate.with(TemporalAdjusters.lastDayOfMonth());
 | 
			
		||||
        int day = 0;
 | 
			
		||||
        boolean breakFlag = false;
 | 
			
		||||
        //写100防止死循环
 | 
			
		||||
        for(int i = 0; i < 100; i++){
 | 
			
		||||
        //写1000防止死循环
 | 
			
		||||
        for(int i = 0; i < 1000; i++){
 | 
			
		||||
            if(ChronoUnit.DAYS.between(everyMonthLastDate, endDate) > 0){
 | 
			
		||||
                day = Period.between(everyMonthFirstDate, everyMonthLastDate).getDays() + 1;
 | 
			
		||||
            }else{
 | 
			
		||||
@@ -436,9 +676,9 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * double转为BigDecimal,保留一位小数,向下舍去
 | 
			
		||||
     * double转为BigDecimal,保留2位小数,四舍五入
 | 
			
		||||
     * */
 | 
			
		||||
    public BigDecimal getMoney(Double money, int n){
 | 
			
		||||
    public BigDecimal getMoney(Double money){
 | 
			
		||||
        return new BigDecimal(money.toString()).setScale(2, BigDecimal.ROUND_HALF_UP);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -449,31 +689,12 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        public int compare(String o1, String o2) {
 | 
			
		||||
            return Integer.parseInt(o1) - Integer.parseInt(o2);
 | 
			
		||||
            if(o1.substring(0,4).equals(o2.substring(0,4))){
 | 
			
		||||
                return Integer.parseInt(o1.substring(4)) - Integer.parseInt(o2.substring(4));
 | 
			
		||||
            }else{
 | 
			
		||||
                return Integer.parseInt(o1.substring(0,4)) - Integer.parseInt(o2.substring(0,4));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void main(String[] args){
 | 
			
		||||
        Double s = 31190.1;
 | 
			
		||||
       /* NumberFormat nf = NumberFormat.getNumberInstance();
 | 
			
		||||
        // 保留小数位数
 | 
			
		||||
        nf.setMaximumFractionDigits(1);
 | 
			
		||||
        // 如果不需要四舍五入,可以使用
 | 
			
		||||
        nf.setRoundingMode(RoundingMode.DOWN);
 | 
			
		||||
        System.out.println(Double.parseDouble(nf.format(s)));
 | 
			
		||||
        System.out.println( new BigDecimal(nf.format(s)).doubleValue());*/
 | 
			
		||||
        /*System.out.println(new BigDecimal(s).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue());
 | 
			
		||||
 | 
			
		||||
        LocalDate localDate = LocalDate.of(2020, 1, 15);
 | 
			
		||||
        System.out.println(ChronoUnit.MONTHS.between(localDate, LocalDate.now()));
 | 
			
		||||
        System.out.println(localDate.getDayOfMonth());
 | 
			
		||||
        System.out.println(localDate.getDayOfWeek());
 | 
			
		||||
        System.out.println(localDate.getDayOfYear());
 | 
			
		||||
 | 
			
		||||
        System.out.println(ChronoUnit.DAYS.between(LocalDate.of(2021, 1,14), LocalDate.now()));*/
 | 
			
		||||
 | 
			
		||||
        /*System.out.println(ts(109792.8 * 6 / 100D, 1));
 | 
			
		||||
        System.out.println(ts(6587.8,2).doubleValue());*/
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,8 +4,10 @@ import com.stdiet.common.annotation.Excel;
 | 
			
		||||
import com.stdiet.common.utils.DateUtils;
 | 
			
		||||
import com.stdiet.common.utils.SecurityUtils;
 | 
			
		||||
import com.stdiet.common.utils.StringUtils;
 | 
			
		||||
import com.stdiet.custom.domain.SysCommision;
 | 
			
		||||
import com.stdiet.custom.domain.SysCustomer;
 | 
			
		||||
import com.stdiet.custom.domain.SysOrder;
 | 
			
		||||
import com.stdiet.custom.dto.response.EveryMonthTotalAmount;
 | 
			
		||||
import com.stdiet.custom.mapper.SysOrderMapper;
 | 
			
		||||
import com.stdiet.custom.service.ISysCommissionDayService;
 | 
			
		||||
import com.stdiet.custom.service.ISysOrderPauseService;
 | 
			
		||||
@@ -22,6 +24,7 @@ import java.time.temporal.ChronoUnit;
 | 
			
		||||
import java.time.temporal.TemporalAdjusters;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 销售订单Service业务层处理
 | 
			
		||||
@@ -349,7 +352,26 @@ public class SysOrderServiceImpl implements ISysOrderService {
 | 
			
		||||
     * @param sysCustomer
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public int getOrderCountByCustomer(SysCustomer sysCustomer){
 | 
			
		||||
        return sysOrderMapper.getOrderCountByCustomer(sysCustomer);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询每年每月的总金额
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<EveryMonthTotalAmount> getTotalAmountByUserId(SysCommision sysCommision){
 | 
			
		||||
        return sysOrderMapper.getTotalAmountByUserId(sysCommision);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取订单数量(按天提成计算)
 | 
			
		||||
     * @param sysCommision
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public int selectSimpleOrderMessageCount(SysCommision sysCommision){
 | 
			
		||||
        return sysOrderMapper.selectSimpleOrderMessageCount(sysCommision);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -181,13 +181,12 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
 | 
			
		||||
        List<Long> delList = new ArrayList<>();
 | 
			
		||||
        for (SysRecipesPlan plan : oldRecipesPlanList) {
 | 
			
		||||
            if(index < newSize){
 | 
			
		||||
                if(plan.getStartDate().compareTo(newRecipesPlanList.get(index).getStartDate()) != 0
 | 
			
		||||
                    || plan.getEndDate().compareTo(newRecipesPlanList.get(index).getEndDate()) != 0){
 | 
			
		||||
                plan.setStartDate(newRecipesPlanList.get(index).getStartDate());
 | 
			
		||||
                plan.setEndDate(newRecipesPlanList.get(index).getEndDate());
 | 
			
		||||
                plan.setPauseDate(newRecipesPlanList.get(index).getPauseDate());
 | 
			
		||||
                plan.setStartNumDay(plan.getStartNumDay());
 | 
			
		||||
                plan.setEndNumDay(plan.getEndNumDay());
 | 
			
		||||
                updateList.add(plan);
 | 
			
		||||
                }
 | 
			
		||||
            }else{
 | 
			
		||||
                delList.add(plan.getId());
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -400,19 +400,70 @@
 | 
			
		||||
      from sys_order o
 | 
			
		||||
      left join sys_user su_sale on su_sale.user_id = o.after_sale_id and su_sale.del_flag = 0
 | 
			
		||||
      left join sys_user su_nutritionist on su_nutritionist.user_id = o.nutritionist_id and su_nutritionist.del_flag = 0
 | 
			
		||||
      where o.order_time >= '2021-01-01' and o.del_flag = 0
 | 
			
		||||
      where o.order_time >= '2021-01-01' and o.del_flag = 0 and (su_sale.user_id is not null OR su_nutritionist.user_id is not null)
 | 
			
		||||
      and o.amount is not null
 | 
			
		||||
        <if test="reviewStatus != null and reviewStatus != ''">
 | 
			
		||||
            and review_status = #{reviewStatus}
 | 
			
		||||
        </if>
 | 
			
		||||
      <if test="userId != null">
 | 
			
		||||
      <if test="userId != null"><!-- 限于营养师、售后不可能同一个的情况下 -->
 | 
			
		||||
          and (su_sale.user_id = #{userId} or su_nutritionist.user_id = #{userId})
 | 
			
		||||
      </if>
 | 
			
		||||
      <if test="endTime != null and endTime != ''">
 | 
			
		||||
          AND DATE_FORMAT(o.order_time,'%Y-%m-%d') <= #{endTime}
 | 
			
		||||
      </if>
 | 
			
		||||
        <if test="serverScopeEndTime != null and serverScopeEndTime != ''">
 | 
			
		||||
            AND  #{serverScopeEndTime} >= DATE_FORMAT(o.commiss_start_time,'%Y-%m-%d')
 | 
			
		||||
        </if>
 | 
			
		||||
      order by o.order_time desc
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <!-- 查询2021年开始的已审核的订单信息的总条数(用于计算提成,请勿随意改动) -->
 | 
			
		||||
    <select id="selectSimpleOrderMessageCount" resultType="int" parameterType="SysCommision">
 | 
			
		||||
        select count(o.order_id) as orderCount
 | 
			
		||||
        from sys_order o
 | 
			
		||||
        left join sys_user su_sale on su_sale.user_id = o.after_sale_id and su_sale.del_flag = 0
 | 
			
		||||
        left join sys_user su_nutritionist on su_nutritionist.user_id = o.nutritionist_id and su_nutritionist.del_flag = 0
 | 
			
		||||
        where o.order_time >= '2021-01-01' and o.del_flag = 0 and (su_sale.user_id is not null OR su_nutritionist.user_id is not null)
 | 
			
		||||
        and o.amount is not null
 | 
			
		||||
        <if test="reviewStatus != null and reviewStatus != ''">
 | 
			
		||||
            and review_status = #{reviewStatus}
 | 
			
		||||
        </if>
 | 
			
		||||
        <if test="userId != null"><!-- 限于营养师、售后不可能同一个的情况下 -->
 | 
			
		||||
            and (su_sale.user_id = #{userId} or su_nutritionist.user_id = #{userId})
 | 
			
		||||
        </if>
 | 
			
		||||
        <if test="endTime != null and endTime != ''">
 | 
			
		||||
            AND DATE_FORMAT(o.order_time,'%Y-%m-%d') <= #{endTime}
 | 
			
		||||
        </if>
 | 
			
		||||
        <if test="serverScopeEndTime != null and serverScopeEndTime != ''">
 | 
			
		||||
            AND  #{serverScopeEndTime} >= DATE_FORMAT(o.commiss_start_time,'%Y-%m-%d')
 | 
			
		||||
        </if>
 | 
			
		||||
        order by o.order_time desc
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <!-- 查询售后、营养师的每个月服务总金额 -->
 | 
			
		||||
    <select id="getTotalAmountByUserId" parameterType="SysCommision" resultType="com.stdiet.custom.dto.response.EveryMonthTotalAmount">
 | 
			
		||||
        SELECT s.yearMonth,SUM(s.amount) AS totalAmount FROM
 | 
			
		||||
        (
 | 
			
		||||
          SELECT CONCAT(YEAR(o.order_time),'',MONTH(o.order_time)) AS yearMonth,o.amount
 | 
			
		||||
          FROM sys_order o
 | 
			
		||||
          LEFT JOIN sys_user su_sale ON su_sale.user_id = o.after_sale_id AND su_sale.del_flag = 0
 | 
			
		||||
          LEFT JOIN sys_user su_nutritionist ON su_nutritionist.user_id = o.nutritionist_id AND su_nutritionist.del_flag = 0
 | 
			
		||||
          where o.order_time >= '2021-01-01' and o.del_flag = 0 and (su_sale.user_id is not null OR su_nutritionist.user_id is not null)
 | 
			
		||||
          and o.amount is not null
 | 
			
		||||
          <if test="reviewStatus != null and reviewStatus != ''">
 | 
			
		||||
            and o.review_status = #{reviewStatus}
 | 
			
		||||
          </if>
 | 
			
		||||
          <if test="userId != null"><!-- 限于营养师、售后不可能同一个的情况下 -->
 | 
			
		||||
            and (su_sale.user_id = #{userId} or su_nutritionist.user_id = #{userId})
 | 
			
		||||
          </if>
 | 
			
		||||
          <if test="endTime != null and endTime != ''">
 | 
			
		||||
            AND DATE_FORMAT(o.order_time,'%Y-%m-%d') <= #{endTime}
 | 
			
		||||
          </if>
 | 
			
		||||
          ORDER BY o.order_time ASC
 | 
			
		||||
        ) s
 | 
			
		||||
        GROUP BY s.yearMonth
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <!-- 根据客户信息查询客户的订单列表数量 -->
 | 
			
		||||
    <select id="getOrderCountByCustomer" parameterType="SysCustomer" resultType="int">
 | 
			
		||||
        SELECT count(so.order_id) FROM sys_order so LEFT JOIN sys_customer sc ON sc.id = so.cus_id AND sc.del_flag = 0
 | 
			
		||||
 
 | 
			
		||||
@@ -87,3 +87,12 @@ export function exportDayCommision(query) {
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 用户对应订单的按天计算提成明细
 | 
			
		||||
export function orderDetailDay(query) {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/custom/commision/orderDetailDay',
 | 
			
		||||
    method: 'get',
 | 
			
		||||
    params: query
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										350
									
								
								stdiet-ui/src/components/OrdercommissDetail/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										350
									
								
								stdiet-ui/src/components/OrdercommissDetail/index.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,350 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <el-drawer
 | 
			
		||||
      :title="title"
 | 
			
		||||
      :close-on-press-escape="false"
 | 
			
		||||
      :visible.sync="visible"
 | 
			
		||||
      @closed="handleOnClosed"
 | 
			
		||||
      size="65%"
 | 
			
		||||
    >
 | 
			
		||||
      <div class="order_drawer_wrapper" >
 | 
			
		||||
        <div style="margin-left:40px">
 | 
			
		||||
          <el-form
 | 
			
		||||
            ref="queryForm"
 | 
			
		||||
            :inline="true"
 | 
			
		||||
            v-show="true"
 | 
			
		||||
            label-width="100px"
 | 
			
		||||
          >
 | 
			
		||||
            <el-form-item label="服务时间范围" prop="dateScope">
 | 
			
		||||
              <el-date-picker
 | 
			
		||||
                v-model="serverDateScope"
 | 
			
		||||
                type="daterange"
 | 
			
		||||
                range-separator="至"
 | 
			
		||||
                start-placeholder="开始日期"
 | 
			
		||||
                end-placeholder="结束日期"
 | 
			
		||||
                format="yyyy-MM-dd"
 | 
			
		||||
                value-format="yyyy-MM-dd"
 | 
			
		||||
              
 | 
			
		||||
              >
 | 
			
		||||
              </el-date-picker>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
            <el-form-item>
 | 
			
		||||
              <el-button type="cyan" icon="el-icon-search" size="small" @click="fetchOrderList">搜索</el-button>
 | 
			
		||||
              <el-button icon="el-icon-refresh" size="small" @click="resetQueryForm">重置</el-button>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-form>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div
 | 
			
		||||
          class="order_total_data"
 | 
			
		||||
        >
 | 
			
		||||
       <span class="order_total_data_span_right20">
 | 
			
		||||
            当前页总服务金额:{{totalServerAmount}}元
 | 
			
		||||
          </span>
 | 
			
		||||
          <span class="order_total_data_span_right20"
 | 
			
		||||
            >当前页总提成:{{ totalCommission }}元</span
 | 
			
		||||
          >
 | 
			
		||||
          <span class="order_total_data_span_right20"
 | 
			
		||||
            >已发放总提成:{{ totalSendCommission }}元</span
 | 
			
		||||
          >
 | 
			
		||||
          <span class="order_total_data_span"
 | 
			
		||||
            >未发放总提成:{{ totalNotSendCommission }}元</span
 | 
			
		||||
          >  
 | 
			
		||||
        </div>
 | 
			
		||||
        <div style="width:100%;height:80%;overflow: auto">
 | 
			
		||||
        <el-table :data="orderList" v-loading="loading" stripe>
 | 
			
		||||
          <el-table-column
 | 
			
		||||
            label="订单成交时间"
 | 
			
		||||
            prop="orderTime"
 | 
			
		||||
            align="center"
 | 
			
		||||
            width="160"
 | 
			
		||||
          ></el-table-column>
 | 
			
		||||
          <el-table-column
 | 
			
		||||
            label="客户姓名"
 | 
			
		||||
            prop="name"
 | 
			
		||||
            align="center"
 | 
			
		||||
            width="100"
 | 
			
		||||
          ></el-table-column>
 | 
			
		||||
          <el-table-column
 | 
			
		||||
            label="服务金额"
 | 
			
		||||
            prop="orderAmount"
 | 
			
		||||
            align="center"
 | 
			
		||||
            width="100"
 | 
			
		||||
          ></el-table-column>
 | 
			
		||||
 | 
			
		||||
          <el-table-column
 | 
			
		||||
            label="开始时间"
 | 
			
		||||
            prop="serverStartDate"
 | 
			
		||||
            align="center"
 | 
			
		||||
            width="100"
 | 
			
		||||
          ></el-table-column>
 | 
			
		||||
          <el-table-column
 | 
			
		||||
            label="结束时间"
 | 
			
		||||
            prop="serverEndDate"
 | 
			
		||||
            align="center"
 | 
			
		||||
            width="100"
 | 
			
		||||
          ></el-table-column>
 | 
			
		||||
          <el-table-column
 | 
			
		||||
            label="服务天数"
 | 
			
		||||
            prop="serverDay"
 | 
			
		||||
            align="center"
 | 
			
		||||
            width="100"
 | 
			
		||||
          >
 | 
			
		||||
            <template slot-scope="scope">
 | 
			
		||||
              {{ scope.row.serverDay }}
 | 
			
		||||
              <el-popover
 | 
			
		||||
                placement="top-start"
 | 
			
		||||
                width="200"
 | 
			
		||||
                popper-class="autohideinfo_detial"
 | 
			
		||||
                trigger="hover"
 | 
			
		||||
              >
 | 
			
		||||
                <div
 | 
			
		||||
                  v-for="(item, index) in scope.row.everyYearMonthServerDay"
 | 
			
		||||
                  :key="index"
 | 
			
		||||
                >
 | 
			
		||||
                  {{ item }}
 | 
			
		||||
                </div>
 | 
			
		||||
                <el-button type="text" slot="reference">详情</el-button>
 | 
			
		||||
              </el-popover>
 | 
			
		||||
            </template>
 | 
			
		||||
          </el-table-column>
 | 
			
		||||
          <el-table-column
 | 
			
		||||
            label="暂停天数"
 | 
			
		||||
            prop="pauseTotalDay"
 | 
			
		||||
            align="center"
 | 
			
		||||
            width="80"
 | 
			
		||||
          ></el-table-column>
 | 
			
		||||
 | 
			
		||||
          <el-table-column
 | 
			
		||||
            label="每天金额"
 | 
			
		||||
            prop="dayMoney"
 | 
			
		||||
            align="center"
 | 
			
		||||
            width="100"
 | 
			
		||||
          ></el-table-column>
 | 
			
		||||
          <el-table-column
 | 
			
		||||
            label="当月成交额"
 | 
			
		||||
            prop="monthOrderTotalAmount"
 | 
			
		||||
            align="center"
 | 
			
		||||
            width="100"
 | 
			
		||||
          ></el-table-column>
 | 
			
		||||
          <el-table-column
 | 
			
		||||
            label="提成比例"
 | 
			
		||||
            prop="commissionRate"
 | 
			
		||||
            align="center"
 | 
			
		||||
            width="80"
 | 
			
		||||
          >
 | 
			
		||||
            <template slot-scope="scope">
 | 
			
		||||
              {{ scope.row.commissionRate + "%" }}
 | 
			
		||||
            </template>
 | 
			
		||||
          </el-table-column>
 | 
			
		||||
          <el-table-column
 | 
			
		||||
            label="订单提成"
 | 
			
		||||
            prop="orderCommission"
 | 
			
		||||
            align="center"
 | 
			
		||||
            width="100"
 | 
			
		||||
          >
 | 
			
		||||
            <template slot-scope="scope">
 | 
			
		||||
              {{ scope.row.orderCommission }}
 | 
			
		||||
              <el-popover
 | 
			
		||||
                placement="top-start"
 | 
			
		||||
                width="200"
 | 
			
		||||
                popper-class="autohideinfo_detial"
 | 
			
		||||
                trigger="hover"
 | 
			
		||||
              >
 | 
			
		||||
                <div
 | 
			
		||||
                  v-for="(item, index) in scope.row
 | 
			
		||||
                    .everyYearMonthServerCommission"
 | 
			
		||||
                  :key="index"
 | 
			
		||||
                >
 | 
			
		||||
                  {{ item }}
 | 
			
		||||
                </div>
 | 
			
		||||
                <el-button type="text" slot="reference">详情</el-button>
 | 
			
		||||
              </el-popover>
 | 
			
		||||
            </template>
 | 
			
		||||
          </el-table-column>
 | 
			
		||||
          <el-table-column
 | 
			
		||||
            label="操作"
 | 
			
		||||
            align="center"
 | 
			
		||||
            width="100"
 | 
			
		||||
          >
 | 
			
		||||
            <template slot-scope="scope">
 | 
			
		||||
              <el-button
 | 
			
		||||
                size="mini"
 | 
			
		||||
                type="text"
 | 
			
		||||
                @click="handleOnDetailClick(scope.row)"
 | 
			
		||||
                >订单详情</el-button
 | 
			
		||||
              >
 | 
			
		||||
            </template>
 | 
			
		||||
          </el-table-column> 
 | 
			
		||||
        </el-table>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!--<div style="float: right; margin-right: 40px">
 | 
			
		||||
          <span style="font-size:14px;margin-top:-200px;margin-right:20px">
 | 
			
		||||
            当前页总服务金额:{{totalServerAmount}}元
 | 
			
		||||
          </span>
 | 
			
		||||
          <span style="font-size:14px;margin-top:-200px;margin-right:20px"
 | 
			
		||||
            >当前页总提成:{{ totalCommission }}元</span
 | 
			
		||||
          >
 | 
			
		||||
          <span style="font-size:14px;margin-top:-200px;margin-right:20px"
 | 
			
		||||
            >已发放总提成:{{ totalSendCommission }}元</span
 | 
			
		||||
          >
 | 
			
		||||
          <span style="font-size:14px;margin-top:-200px"
 | 
			
		||||
            >未发放总提成:{{ totalNotSendCommission }}元</span
 | 
			
		||||
          >  
 | 
			
		||||
        </div>-->
 | 
			
		||||
        <pagination
 | 
			
		||||
          v-show="total > 0"
 | 
			
		||||
          :total="total"
 | 
			
		||||
          :page.sync="queryParam.pageNum"
 | 
			
		||||
          :limit.sync="queryParam.pageSize"
 | 
			
		||||
          @pagination="fetchOrderList"
 | 
			
		||||
          :pageSizes="[10, 15, 30, 50, 100]"
 | 
			
		||||
        >
 | 
			
		||||
        </pagination>
 | 
			
		||||
        
 | 
			
		||||
      </div>
 | 
			
		||||
    </el-drawer>
 | 
			
		||||
 | 
			
		||||
    <order-detail ref="orderDetailRef" />
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import { orderDetailDay } from "@/api/custom/commision";
 | 
			
		||||
import OrderDetail from "@/components/OrderDetail";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "OrdercommissDetail",
 | 
			
		||||
  components: {
 | 
			
		||||
    "order-detail": OrderDetail,
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      visible: false,
 | 
			
		||||
      loading: false,
 | 
			
		||||
      title: "",
 | 
			
		||||
      data: undefined,
 | 
			
		||||
      orderList: [],
 | 
			
		||||
      queryParam: {},
 | 
			
		||||
      total: 0,
 | 
			
		||||
      totalServerAmount: 0,
 | 
			
		||||
      totalCommission: 0,
 | 
			
		||||
      totalSendCommission: 0,
 | 
			
		||||
      totalNotSendCommission: 0,
 | 
			
		||||
      serverDateScope: null,
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  computed: {},
 | 
			
		||||
  methods: {
 | 
			
		||||
    showDrawer(data) {
 | 
			
		||||
      this.data = data;
 | 
			
		||||
      this.serverDateScope = null;
 | 
			
		||||
      if (!this.data) {
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      this.queryParam = {
 | 
			
		||||
        pageNum: 1,
 | 
			
		||||
        pageSize: 10,
 | 
			
		||||
      },
 | 
			
		||||
      this.queryParam.userId = this.data.userId;
 | 
			
		||||
      this.queryParam.reviewStatus = this.data.reviewStatus;
 | 
			
		||||
      this.queryParam.endTime = this.data.endTime;
 | 
			
		||||
      this.title = `「${this.data.name}`;
 | 
			
		||||
      if (this.data.yearMonth) {
 | 
			
		||||
        this.title += " 截止" + `${this.data.yearMonth}`;
 | 
			
		||||
      }
 | 
			
		||||
      if (this.queryParam.reviewStatus) {
 | 
			
		||||
        this.title +=
 | 
			
		||||
          this.queryParam.reviewStatus == "yes" ? " 已审核" : " 未审核";
 | 
			
		||||
      }
 | 
			
		||||
      this.title += " 订单提成列表」";
 | 
			
		||||
      this.visible = true;
 | 
			
		||||
      this.fetchOrderList();
 | 
			
		||||
    },
 | 
			
		||||
    fetchOrderList() {
 | 
			
		||||
      this.loading = true;
 | 
			
		||||
      this.queryParam.serverScopeStartTime = this.serverDateScope && this.serverDateScope.length > 0 ? this.serverDateScope[0] : null;
 | 
			
		||||
      this.queryParam.serverScopeEndTime = this.serverDateScope && this.serverDateScope.length > 0 ? this.serverDateScope[1] : null;
 | 
			
		||||
      orderDetailDay(this.queryParam).then((res) => {
 | 
			
		||||
        //console.log(res);
 | 
			
		||||
        if (res.code == 200) {
 | 
			
		||||
          this.orderList = this.dealOrderList(res.list);
 | 
			
		||||
          this.total = res.total;
 | 
			
		||||
          this.totalServerAmount = res.totalServerAmount;
 | 
			
		||||
          this.totalCommission = res.totalCommission;
 | 
			
		||||
          this.totalSendCommission = res.totalSendCommission;
 | 
			
		||||
          this.totalNotSendCommission = res.totalNotSendCommission;
 | 
			
		||||
        }
 | 
			
		||||
        this.loading = false;
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    handleOnClosed() {
 | 
			
		||||
      this.data = undefined;
 | 
			
		||||
      this.serverDateScope = null;
 | 
			
		||||
    },
 | 
			
		||||
    dealOrderList(orderList) {
 | 
			
		||||
      //处理每个月的服务天数
 | 
			
		||||
      orderList.forEach((item, index) => {
 | 
			
		||||
        let everyYearMonthServerDayArray = [];
 | 
			
		||||
        for (let yearMonth in item.everyYearMonthServerDay) {
 | 
			
		||||
          everyYearMonthServerDayArray.push(
 | 
			
		||||
            yearMonth.slice(0, 4) +
 | 
			
		||||
              "-" +
 | 
			
		||||
              yearMonth.slice(4) +
 | 
			
		||||
              ":" +
 | 
			
		||||
              item.everyYearMonthServerDay[yearMonth] +
 | 
			
		||||
              "天"
 | 
			
		||||
          );
 | 
			
		||||
        }
 | 
			
		||||
        item.everyYearMonthServerDay = everyYearMonthServerDayArray;
 | 
			
		||||
        let everyYearMonthServerCommissionArray = [];
 | 
			
		||||
        for (let commissYearMonth in item.everyYearMonthServerCommission) {
 | 
			
		||||
          everyYearMonthServerCommissionArray.push(
 | 
			
		||||
            commissYearMonth.slice(0, 4) +
 | 
			
		||||
              "-" +
 | 
			
		||||
              commissYearMonth.slice(4) +
 | 
			
		||||
              ":" +
 | 
			
		||||
              item.everyYearMonthServerCommission[commissYearMonth]
 | 
			
		||||
              + (item.everyYearMonthCommissionSendFlag[commissYearMonth] ? '  已发放' : '  未发放')
 | 
			
		||||
          );
 | 
			
		||||
        }
 | 
			
		||||
        item.everyYearMonthServerCommission = everyYearMonthServerCommissionArray;
 | 
			
		||||
      });
 | 
			
		||||
      return orderList;
 | 
			
		||||
    },
 | 
			
		||||
    resetQueryForm(){
 | 
			
		||||
      this.serverDateScope = null;
 | 
			
		||||
      this.fetchOrderList();
 | 
			
		||||
    },
 | 
			
		||||
    handleOnDetailClick(data) {
 | 
			
		||||
      this.$refs.orderDetailRef.showDialog(data.orderId);
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style  lang="scss" scoped>
 | 
			
		||||
/deep/ :focus {
 | 
			
		||||
  outline: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order_drawer_wrapper {
 | 
			
		||||
  height: calc(100vh - 77px);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order_total_data {
 | 
			
		||||
  float: right; 
 | 
			
		||||
  margin-right: 40px; 
 | 
			
		||||
  margin-bottom:20px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order_total_data_span_right20 {
 | 
			
		||||
  font-size:16px;
 | 
			
		||||
  margin-top:-200px;
 | 
			
		||||
  margin-right:20px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order_total_data_span {
 | 
			
		||||
  font-size:16px;
 | 
			
		||||
  margin-top:-200px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
@@ -137,6 +137,7 @@
 | 
			
		||||
              end-placeholder="结束日期"
 | 
			
		||||
              format="yyyy-MM-dd"
 | 
			
		||||
              value-format="yyyy-MM-dd"
 | 
			
		||||
              :picker-options="orderPickerOptions"
 | 
			
		||||
            >
 | 
			
		||||
            </el-date-picker>
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
@@ -233,7 +234,8 @@ export default {
 | 
			
		||||
      },
 | 
			
		||||
      orderPickerOptions: {
 | 
			
		||||
        disabledDate(time) {
 | 
			
		||||
          return time.getTime() < Date.now() - 24 * 60 * 60 * 1000;
 | 
			
		||||
          //不能添加上月日期的暂停,会影响提成计算
 | 
			
		||||
          return time.getTime() < dayjs().startOf('month').valueOf()
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
@@ -180,7 +180,7 @@ export default {
 | 
			
		||||
        pageSize: 10,
 | 
			
		||||
        userId: null,
 | 
			
		||||
        postId: null,
 | 
			
		||||
        reviewStatus: null
 | 
			
		||||
        reviewStatus: "yes"
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
 
 | 
			
		||||
@@ -157,6 +157,11 @@
 | 
			
		||||
            @click="openFormDialog('查看发放计划', scope.row)"
 | 
			
		||||
            >查看发放计划</el-button
 | 
			
		||||
          >
 | 
			
		||||
          <el-button
 | 
			
		||||
            type="text"
 | 
			
		||||
            @click="handleDetailClick(scope.row)"
 | 
			
		||||
            >查看订单详情</el-button
 | 
			
		||||
          >
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
 | 
			
		||||
@@ -181,6 +186,7 @@
 | 
			
		||||
        :data="sendCommissionPlan.list"
 | 
			
		||||
        show-summary
 | 
			
		||||
        :summary-method="getSummaries"
 | 
			
		||||
        style="height:400px;overflow: auto"
 | 
			
		||||
      >
 | 
			
		||||
        <el-table-column
 | 
			
		||||
          property="nickName"
 | 
			
		||||
@@ -205,7 +211,11 @@
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
      </el-table>
 | 
			
		||||
    </el-dialog>
 | 
			
		||||
 | 
			
		||||
    <OrdercommissDetail ref="ordercommissDetailRef"></OrdercommissDetail>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<style>
 | 
			
		||||
@@ -226,6 +236,8 @@ import { getOptions } from "@/api/custom/global";
 | 
			
		||||
 | 
			
		||||
import dayjs from "dayjs";
 | 
			
		||||
 | 
			
		||||
import OrdercommissDetail from "@/components/OrdercommissDetail";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "CommisionDayDetail",
 | 
			
		||||
  data() {
 | 
			
		||||
@@ -266,13 +278,16 @@ export default {
 | 
			
		||||
        pageSize: 20,
 | 
			
		||||
        userId: null,
 | 
			
		||||
        postId: null,
 | 
			
		||||
        reviewStatus: null,
 | 
			
		||||
        reviewStatus: "yes",
 | 
			
		||||
      },
 | 
			
		||||
      sendCommissionPlanTable: false,
 | 
			
		||||
      sendCommissionPlan: {},
 | 
			
		||||
      fixLength: 2,
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  components: {
 | 
			
		||||
    OrdercommissDetail
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    this.getList();
 | 
			
		||||
    getOptions().then((response) => {
 | 
			
		||||
@@ -399,6 +414,14 @@ export default {
 | 
			
		||||
      this.sendCommissionPlan.total = row.totalNotSentCommissionAmount;
 | 
			
		||||
      this.sendCommissionPlanTable = true;
 | 
			
		||||
    },
 | 
			
		||||
    handleDetailClick(row) {
 | 
			
		||||
      // console.log(row);
 | 
			
		||||
      const dateRange = [
 | 
			
		||||
        dayjs(this.month).startOf("month").format("YYYY-MM-DD"),
 | 
			
		||||
        dayjs(this.month).endOf("month").format("YYYY-MM-DD"),
 | 
			
		||||
      ];
 | 
			
		||||
      this.$refs["ordercommissDetailRef"].showDrawer(this.addDateRange({'yearMonth': dayjs(this.month).endOf("month").format("YYYY-MM-DD"),'name': row.nickName, 'userId': row.userId, 'reviewStatus': this.queryParams.reviewStatus}, dateRange));
 | 
			
		||||
    },
 | 
			
		||||
    getSummaries(param) {
 | 
			
		||||
      //param 是固定的对象,里面包含 columns与 data参数的对象 {columns: Array[4], data: Array[5]},包含了表格的所有的列与数据信息
 | 
			
		||||
      const { columns, data } = param;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user