Merge branch 'master' of gitee.com:darlk/ShengTangManage into develop
This commit is contained in:
commit
6fe95722e2
@ -5,8 +5,11 @@ import java.math.RoundingMode;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.stdiet.custom.domain.SysCommissionDayDetail;
|
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.dto.request.SysOrderCommision;
|
||||||
import com.stdiet.custom.service.ISysCommissionDayService;
|
import com.stdiet.custom.service.ISysCommissionDayService;
|
||||||
|
import com.stdiet.custom.service.ISysOrderService;
|
||||||
import com.stdiet.framework.web.domain.server.Sys;
|
import com.stdiet.framework.web.domain.server.Sys;
|
||||||
import com.stdiet.system.domain.CusSalesman;
|
import com.stdiet.system.domain.CusSalesman;
|
||||||
import com.stdiet.system.service.ISysUserService;
|
import com.stdiet.system.service.ISysUserService;
|
||||||
@ -199,6 +202,16 @@ public class SysCommisionController extends BaseController {
|
|||||||
return getDataTable(sysCommissionDayService.calculateCommissionByDay(sysCommision));
|
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 reviewStatus;
|
||||||
|
|
||||||
|
//服务开始时间,用于计算该时间段的提成
|
||||||
|
private String serverScopeStartTime;
|
||||||
|
|
||||||
|
//服务结束时间,用于计算该时间段的提成
|
||||||
|
private String serverScopeEndTime;
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package com.stdiet.custom.domain;
|
|||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import com.stdiet.common.annotation.Excel;
|
import com.stdiet.common.annotation.Excel;
|
||||||
import com.stdiet.common.core.domain.BaseEntity;
|
import com.stdiet.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
@ -12,22 +13,27 @@ import java.util.Map;
|
|||||||
/**
|
/**
|
||||||
* 每个订单的提成详情
|
* 每个订单的提成详情
|
||||||
* */
|
* */
|
||||||
|
@Data
|
||||||
public class SysOrderCommisionDayDetail extends BaseEntity {
|
public class SysOrderCommisionDayDetail extends BaseEntity {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**订单ID*/
|
||||||
|
private Long orderId;
|
||||||
|
|
||||||
/**订单成交时间*/
|
/**订单成交时间*/
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
private LocalDateTime orderTime;
|
private LocalDateTime orderTime;
|
||||||
|
|
||||||
/**客户姓名*/
|
/**客户姓名*/
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
/**服务结束时间*/
|
/**服务结束时间*/
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
@Excel(name = "成交时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
|
|
||||||
private LocalDate serverStartDate;
|
private LocalDate serverStartDate;
|
||||||
|
|
||||||
/**服务结束时间*/
|
/**服务结束时间*/
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
private LocalDate serverEndDate;
|
private LocalDate serverEndDate;
|
||||||
|
|
||||||
/**服务月数*/
|
/**服务月数*/
|
||||||
@ -36,15 +42,27 @@ public class SysOrderCommisionDayDetail extends BaseEntity {
|
|||||||
/**赠送天数*/
|
/**赠送天数*/
|
||||||
private Integer giveDay;
|
private Integer giveDay;
|
||||||
|
|
||||||
/**订单金额*/
|
/**订单金额或服务订单金额*/
|
||||||
private BigDecimal orderAmount;
|
private BigDecimal orderAmount;
|
||||||
|
|
||||||
|
/**订单总提成**/
|
||||||
|
private BigDecimal orderCommission;
|
||||||
|
|
||||||
|
//已发放提成
|
||||||
|
private BigDecimal hasSendOrderCommission;
|
||||||
|
|
||||||
|
//未发放提成
|
||||||
|
private BigDecimal notHasSendOrderCommission;
|
||||||
|
|
||||||
/**服务天数*/
|
/**服务天数*/
|
||||||
private Integer serverDay;
|
private Integer serverDay;
|
||||||
|
|
||||||
/**每天金额*/
|
/**每天金额*/
|
||||||
private BigDecimal dayMoney;
|
private BigDecimal dayMoney;
|
||||||
|
|
||||||
|
/** 暂停总天数 **/
|
||||||
|
private int pauseTotalDay;
|
||||||
|
|
||||||
/**每年每月暂停天数*/
|
/**每年每月暂停天数*/
|
||||||
private Map<String, Integer> everyYearMonthPauseDay;
|
private Map<String, Integer> everyYearMonthPauseDay;
|
||||||
|
|
||||||
@ -54,99 +72,15 @@ public class SysOrderCommisionDayDetail extends BaseEntity {
|
|||||||
/**每年每月对应金额*/
|
/**每年每月对应金额*/
|
||||||
private Map<String, BigDecimal> everyYearMonthServerMoney;
|
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;
|
private Float commissionRate;
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.stdiet.custom.domain.SysCommision;
|
import com.stdiet.custom.domain.SysCommision;
|
||||||
import com.stdiet.custom.domain.SysCommissionDayDetail;
|
import com.stdiet.custom.domain.SysCommissionDayDetail;
|
||||||
import com.stdiet.custom.domain.SysCustomer;
|
import com.stdiet.custom.domain.SysCustomer;
|
||||||
import com.stdiet.custom.domain.SysOrder;
|
import com.stdiet.custom.domain.SysOrder;
|
||||||
import com.stdiet.custom.dto.request.SysOrderCommision;
|
import com.stdiet.custom.dto.request.SysOrderCommision;
|
||||||
|
import com.stdiet.custom.dto.response.EveryMonthTotalAmount;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -85,4 +87,17 @@ public interface SysOrderMapper
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
int getOrderCountByCustomer(SysCustomer sysCustomer);
|
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;
|
package com.stdiet.custom.service;
|
||||||
|
|
||||||
|
import com.stdiet.common.core.domain.AjaxResult;
|
||||||
import com.stdiet.custom.domain.SysCommision;
|
import com.stdiet.custom.domain.SysCommision;
|
||||||
import com.stdiet.custom.domain.SysCommissionDayDetail;
|
import com.stdiet.custom.domain.SysCommissionDayDetail;
|
||||||
import com.stdiet.custom.domain.SysOrder;
|
import com.stdiet.custom.domain.SysOrder;
|
||||||
@ -33,4 +34,9 @@ public interface ISysCommissionDayService {
|
|||||||
*/
|
*/
|
||||||
LocalDate getServerEndDate(SysOrder sysOrder);
|
LocalDate getServerEndDate(SysOrder sysOrder);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算订单提成详情
|
||||||
|
*/
|
||||||
|
AjaxResult calculateOrderCommissionDetail(SysCommision sysCommision);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,12 @@ package com.stdiet.custom.service;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
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.SysCustomer;
|
||||||
import com.stdiet.custom.domain.SysOrder;
|
import com.stdiet.custom.domain.SysOrder;
|
||||||
|
import com.stdiet.custom.dto.response.EveryMonthTotalAmount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 销售订单Service接口
|
* 销售订单Service接口
|
||||||
@ -84,4 +87,17 @@ public interface ISysOrderService
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
int getOrderCountByCustomer(SysCustomer sysCustomer);
|
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;
|
package com.stdiet.custom.service.impl;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.stdiet.common.core.domain.AjaxResult;
|
||||||
import com.stdiet.common.utils.DateUtils;
|
import com.stdiet.common.utils.DateUtils;
|
||||||
|
import com.stdiet.common.utils.StringUtils;
|
||||||
import com.stdiet.custom.domain.*;
|
import com.stdiet.custom.domain.*;
|
||||||
import com.stdiet.custom.dto.request.SysOrderCommision;
|
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.SysCommisionMapper;
|
||||||
import com.stdiet.custom.mapper.SysOrderMapper;
|
import com.stdiet.custom.mapper.SysOrderMapper;
|
||||||
import com.stdiet.custom.mapper.SysOrderPauseMapper;
|
import com.stdiet.custom.mapper.SysOrderPauseMapper;
|
||||||
@ -49,7 +52,8 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
|
|||||||
sysCommissionDayDetail.setNickName(commision.getUserName());
|
sysCommissionDayDetail.setNickName(commision.getUserName());
|
||||||
sysCommissionDayDetail.setPostId(commision.getPostId());
|
sysCommissionDayDetail.setPostId(commision.getPostId());
|
||||||
sysCommissionDayDetail.setPostName(commision.getPostName());
|
sysCommissionDayDetail.setPostName(commision.getPostName());
|
||||||
dealServerOrderCommissionDetail(orderDetailMap.get(sysCommissionDayDetail.getUserId()), sysCommissionDayDetail);
|
|
||||||
|
dealServerOrderCommissionDetail(sysCommision, orderDetailMap.get(sysCommissionDayDetail.getUserId()), sysCommissionDayDetail);
|
||||||
result.add(sysCommissionDayDetail);
|
result.add(sysCommissionDayDetail);
|
||||||
//统计所以用户总提成、已发放提成、未发放提成
|
//统计所以用户总提成、已发放提成、未发放提成
|
||||||
total.setTotalCommissionAmount(total.getTotalCommissionAmount().add(sysCommissionDayDetail.getTotalCommissionAmount()));
|
total.setTotalCommissionAmount(total.getTotalCommissionAmount().add(sysCommissionDayDetail.getTotalCommissionAmount()));
|
||||||
@ -103,72 +107,199 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
|
|||||||
return serverEndDate;
|
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统计出该用户在该月所有订单的服务数量、服务总天数、服务订单总额、暂停总天数
|
* 根据用户ID统计出该用户在该月所有订单的服务数量、服务总天数、服务订单总额、暂停总天数
|
||||||
* **/
|
* **/
|
||||||
public void dealServerOrderCommissionDetail(List<SysOrderCommisionDayDetail> orderDetailList, SysCommissionDayDetail sysCommissionDayDetail){
|
public void dealServerOrderCommissionDetail(SysCommision commisionParam, List<SysOrderCommisionDayDetail> orderDetailList, SysCommissionDayDetail sysCommissionDayDetail){
|
||||||
//总提成
|
//总提成
|
||||||
BigDecimal totalCommissionAmount = new BigDecimal(0);
|
sysCommissionDayDetail.setTotalCommissionAmount(BigDecimal.valueOf(0));
|
||||||
//已发放提成
|
//总共已发提成
|
||||||
BigDecimal totalHasSentCommissionAmount = new BigDecimal(0);
|
sysCommissionDayDetail.setTotalHasSentCommissionAmount(BigDecimal.valueOf(0));
|
||||||
//未发放提成记录
|
//总共未发提成
|
||||||
List<Map<String, Object>> sendDetailList = new ArrayList<>();
|
sysCommissionDayDetail.setTotalNotSentCommissionAmount(BigDecimal.valueOf(0));
|
||||||
if(orderDetailList != null){
|
//提成发放计划
|
||||||
//获取每个月的成交总额度
|
sysCommissionDayDetail.setSendDetailList(new ArrayList<>());
|
||||||
Map<String, BigDecimal> orderAmount = new TreeMap<>(new MyComparator());
|
//下月应发提成
|
||||||
Set<String> commissionMonthSet = new TreeSet<>(new MyComparator());
|
sysCommissionDayDetail.setNextMonthCommission(BigDecimal.valueOf(0));
|
||||||
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);
|
|
||||||
|
|
||||||
int i = 1;
|
if(orderDetailList == null || orderDetailList.size() == 0 ){
|
||||||
BigDecimal commissionA = new BigDecimal(0);
|
return;
|
||||||
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));
|
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) {
|
||||||
|
//处理订单提成
|
||||||
|
dealCommissionByOrderCommisionDayDetail(sysOrderCommisionDayDetail, everyMonthTotalAmountMap, rateMap);
|
||||||
|
//合并每个订单的年月日
|
||||||
|
commissionYearMonthSet.addAll(sysOrderCommisionDayDetail.getEveryYearMonthServerCommission().keySet());
|
||||||
|
//合计总提成
|
||||||
|
totalCommissionAmount = totalCommissionAmount.add(sysOrderCommisionDayDetail.getOrderCommission());
|
||||||
|
//合计已发放提成
|
||||||
|
totalHasSentCommissionAmount = totalHasSentCommissionAmount.add(sysOrderCommisionDayDetail.getHasSendOrderCommission());
|
||||||
|
//合计未发放提成
|
||||||
|
totalNotHasSentCommissionAmount = totalNotHasSentCommissionAmount.add(sysOrderCommisionDayDetail.getNotHasSendOrderCommission());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String yearMonth : commissionYearMonthSet) {
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
BigDecimal yearMonthCommiss = BigDecimal.valueOf(0);
|
||||||
|
for (SysOrderCommisionDayDetail sysOrderCommisionDayDetail : orderDetailList) {
|
||||||
|
if(sysOrderCommisionDayDetail.getEveryYearMonthServerCommission().containsKey(yearMonth)){
|
||||||
|
yearMonthCommiss = yearMonthCommiss.add(sysOrderCommisionDayDetail.getEveryYearMonthServerCommission().get(yearMonth));
|
||||||
}
|
}
|
||||||
for (SysOrderCommisionDayDetail sysOrderCommisionDayDetail : orderDetailList) {
|
}
|
||||||
Map<String, BigDecimal> everyYearMonthServerMoney = sysOrderCommisionDayDetail.getEveryYearMonthServerMoney();
|
map.put("yearMonth", yearMonth);
|
||||||
if(everyYearMonthServerMoney.containsKey(ym)){
|
map.put("yearMonthCommission", yearMonthCommiss);
|
||||||
String orderYearMonth = sysOrderCommisionDayDetail.getOrderTime().getYear()+""+sysOrderCommisionDayDetail.getOrderTime().getMonth().getValue();
|
if(isSendCommissionByYearMonth(yearMonth)){
|
||||||
BigDecimal m = (everyYearMonthServerMoney.get(ym) == null) ? new BigDecimal(0) : everyYearMonthServerMoney.get(ym);
|
hasSendYearMonthDetailList.add(map);
|
||||||
ym_mession = ym_mession.add(getMoney(m.doubleValue() * rateMap.get(orderYearMonth) / 100D, 1));
|
}else{
|
||||||
}
|
notHasSendYearMonthDetailList.add(map);
|
||||||
}
|
|
||||||
if(isSendCommissionByYearMonth(ym)){
|
|
||||||
totalHasSentCommissionAmount = totalHasSentCommissionAmount.add(ym_mession);
|
|
||||||
}else{
|
|
||||||
Map<String, Object> map = new HashMap<>();
|
|
||||||
map.put("yearMonth", ym);
|
|
||||||
if(i != commissionMonthSet.size()){
|
|
||||||
//计算未发放的提成(除最后一个月)
|
|
||||||
commissionA = commissionA.add(ym_mession);
|
|
||||||
map.put("yearMonthCommission", ym_mession);
|
|
||||||
}else{
|
|
||||||
//最后一个月除去已发放的月份的提成,再减去前面未发放提成,防止出现误差
|
|
||||||
map.put("yearMonthCommission", totalCommissionAmount.subtract(totalHasSentCommissionAmount).subtract(commissionA));
|
|
||||||
}
|
|
||||||
sendDetailList.add(map);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sysCommissionDayDetail.setTotalCommissionAmount(totalCommissionAmount);
|
sysCommissionDayDetail.setTotalCommissionAmount(totalCommissionAmount);
|
||||||
sysCommissionDayDetail.setTotalHasSentCommissionAmount(totalHasSentCommissionAmount);
|
sysCommissionDayDetail.setTotalHasSentCommissionAmount(totalHasSentCommissionAmount);
|
||||||
//未发放提成 = 总提成 - 已发放提成
|
sysCommissionDayDetail.setTotalNotSentCommissionAmount(totalNotHasSentCommissionAmount);
|
||||||
sysCommissionDayDetail.setTotalNotSentCommissionAmount(totalCommissionAmount.subtract(totalHasSentCommissionAmount));
|
sysCommissionDayDetail.setSendDetailList(notHasSendYearMonthDetailList);
|
||||||
sysCommissionDayDetail.setSendDetailList(sendDetailList);
|
sysCommissionDayDetail.setNextMonthCommission(notHasSendYearMonthDetailList.size() > 0 ? (BigDecimal)notHasSendYearMonthDetailList.get(0).get("yearMonthCommission") : new BigDecimal(0));
|
||||||
sysCommissionDayDetail.setNextMonthCommission(sendDetailList.size() > 0 ? (BigDecimal)sendDetailList.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;
|
continue;
|
||||||
}
|
}
|
||||||
//对每笔订单进行处理,统计出该比订单在每年每月对应的服务天数、金额、暂停天数等
|
//对每笔订单进行处理,统计出该比订单在每年每月对应的服务天数、金额、暂停天数等
|
||||||
SysOrderCommisionDayDetail sysOrderCommisionDayDetail = statisticsOrderMessage(sysOrder);
|
SysOrderCommisionDayDetail sysOrderCommisionDayDetail = statisticsOrderMessage(sysOrder, sysCommision.getServerScopeStartTime(), sysCommision.getServerScopeEndTime());
|
||||||
if(sysOrder.getAfterSaleId() != null && sysOrder.getAfterSaleId() > 0L){
|
if(sysOrder.getAfterSaleId() != null && sysOrder.getAfterSaleId() > 0L){
|
||||||
addUserOrderResultMap(sysOrder.getAfterSaleId(), sysOrderCommisionDayDetail, userOrderResultMap);
|
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());
|
LocalDate serverStartDate = DateUtils.dateToLocalDate(sysOrder.getCommissStartTime());
|
||||||
//订单总服务月数
|
//订单总服务月数
|
||||||
@ -288,26 +419,70 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
|
|||||||
//服务总天数
|
//服务总天数
|
||||||
int serverDay = getTotalByMap(everyYearMonthServerDay);
|
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 sysOrderCommisionDayDetail = new SysOrderCommisionDayDetail();
|
||||||
|
sysOrderCommisionDayDetail.setOrderId(sysOrder.getOrderId());
|
||||||
sysOrderCommisionDayDetail.setOrderTime(DateUtils.dateToLocalDateTime(sysOrder.getOrderTime()));
|
sysOrderCommisionDayDetail.setOrderTime(DateUtils.dateToLocalDateTime(sysOrder.getOrderTime()));
|
||||||
sysOrderCommisionDayDetail.setName(sysOrder.getCustomer());
|
sysOrderCommisionDayDetail.setName(sysOrder.getCustomer());
|
||||||
sysOrderCommisionDayDetail.setServerStartDate(serverStartDate);
|
sysOrderCommisionDayDetail.setServerStartDate(serverStartDate);
|
||||||
sysOrderCommisionDayDetail.setServerEndDate(serverEndDate);
|
sysOrderCommisionDayDetail.setServerEndDate(serverEndDate);
|
||||||
sysOrderCommisionDayDetail.setServerMonth(serverMonth);
|
sysOrderCommisionDayDetail.setServerMonth(serverMonth);
|
||||||
sysOrderCommisionDayDetail.setGiveDay(giveDay);
|
sysOrderCommisionDayDetail.setGiveDay(giveDay);
|
||||||
|
sysOrderCommisionDayDetail.setPauseTotalDay(pauseTotalDay);
|
||||||
sysOrderCommisionDayDetail.setOrderAmount(orderAmount);
|
sysOrderCommisionDayDetail.setOrderAmount(orderAmount);
|
||||||
sysOrderCommisionDayDetail.setServerDay(serverDay);
|
sysOrderCommisionDayDetail.setServerDay(serverDay);
|
||||||
sysOrderCommisionDayDetail.setDayMoney(dayMoney);
|
sysOrderCommisionDayDetail.setDayMoney(dayMoney);
|
||||||
sysOrderCommisionDayDetail.setEveryYearMonthPauseDay(everyYearMonthPauseDay);
|
sysOrderCommisionDayDetail.setEveryYearMonthPauseDay(everyYearMonthPauseDay);
|
||||||
sysOrderCommisionDayDetail.setEveryYearMonthServerDay(everyYearMonthServerDay);
|
sysOrderCommisionDayDetail.setEveryYearMonthServerDay(everyYearMonthServerDay);
|
||||||
sysOrderCommisionDayDetail.setEveryYearMonthServerMoney(everyYearMonthServerMoney);
|
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;
|
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 暂停记录集合
|
* @Param list 暂停记录集合
|
||||||
@ -362,6 +537,17 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
|
|||||||
return total;
|
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 服务开始时间
|
* @Param server_start_date 服务开始时间
|
||||||
@ -377,27 +563,81 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
|
|||||||
* @Param everyMonthServerDay 每年每月服务天数
|
* @Param everyMonthServerDay 每年每月服务天数
|
||||||
* @Param orderMoney 订单总额
|
* @Param orderMoney 订单总额
|
||||||
* @Param dayMoney 每天对于金额
|
* @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());
|
Map<String, BigDecimal > everyMonthServerMoney = new TreeMap<>(new MyComparator());
|
||||||
Set<String> keySet = everyMonthServerDay.keySet();
|
Set<String> keySet = everyMonthServerDay.keySet();
|
||||||
int i = 1;
|
BigDecimal total = BigDecimal.valueOf(0);
|
||||||
double totalMoney = 0.0;
|
|
||||||
for(String key : keySet){
|
for(String key : keySet){
|
||||||
if(i++ != keySet.size()){
|
//判断是否为最后一个月
|
||||||
everyMonthServerMoney.put(key, getMoney(everyMonthServerDay.get(key) * dayMoney.doubleValue(), 1));
|
if(key.equals(serverEndTime.getYear()+""+serverEndTime.getMonth().getValue())){
|
||||||
totalMoney += everyMonthServerMoney.get(key).doubleValue();
|
//由于小数保留问题,最后一个月的金额等于总额减去前几个月金额,避免总数不一致
|
||||||
|
everyMonthServerMoney.put(key, orderMoney.subtract(total));
|
||||||
}else{
|
}else{
|
||||||
//由于小数点只保留一位,最后一个月的金额等于总额减去前几个月金额,避免总数不一致
|
everyMonthServerMoney.put(key, getMoney(everyMonthServerDay.get(key) * dayMoney.doubleValue()));
|
||||||
everyMonthServerMoney.put(key, getMoney(orderMoney.doubleValue() - totalMoney, 1));
|
total = total.add(everyMonthServerMoney.get(key));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return everyMonthServerMoney;
|
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){
|
public Map<String, Integer> getEveryYearMonthDayCount(LocalDate startDate, LocalDate endDate, Map<String, Integer> lessDayMap){
|
||||||
Map<String, Integer> everyYearMonthServerDay = new TreeMap<>(new MyComparator());
|
Map<String, Integer> everyYearMonthServerDay = new TreeMap<>(new MyComparator());
|
||||||
@ -407,8 +647,8 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
|
|||||||
LocalDate everyMonthLastDate = everyMonthFirstDate.with(TemporalAdjusters.lastDayOfMonth());
|
LocalDate everyMonthLastDate = everyMonthFirstDate.with(TemporalAdjusters.lastDayOfMonth());
|
||||||
int day = 0;
|
int day = 0;
|
||||||
boolean breakFlag = false;
|
boolean breakFlag = false;
|
||||||
//写100防止死循环
|
//写1000防止死循环
|
||||||
for(int i = 0; i < 100; i++){
|
for(int i = 0; i < 1000; i++){
|
||||||
if(ChronoUnit.DAYS.between(everyMonthLastDate, endDate) > 0){
|
if(ChronoUnit.DAYS.between(everyMonthLastDate, endDate) > 0){
|
||||||
day = Period.between(everyMonthFirstDate, everyMonthLastDate).getDays() + 1;
|
day = Period.between(everyMonthFirstDate, everyMonthLastDate).getDays() + 1;
|
||||||
}else{
|
}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);
|
return new BigDecimal(money.toString()).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -449,31 +689,12 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compare(String o1, String o2) {
|
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.DateUtils;
|
||||||
import com.stdiet.common.utils.SecurityUtils;
|
import com.stdiet.common.utils.SecurityUtils;
|
||||||
import com.stdiet.common.utils.StringUtils;
|
import com.stdiet.common.utils.StringUtils;
|
||||||
|
import com.stdiet.custom.domain.SysCommision;
|
||||||
import com.stdiet.custom.domain.SysCustomer;
|
import com.stdiet.custom.domain.SysCustomer;
|
||||||
import com.stdiet.custom.domain.SysOrder;
|
import com.stdiet.custom.domain.SysOrder;
|
||||||
|
import com.stdiet.custom.dto.response.EveryMonthTotalAmount;
|
||||||
import com.stdiet.custom.mapper.SysOrderMapper;
|
import com.stdiet.custom.mapper.SysOrderMapper;
|
||||||
import com.stdiet.custom.service.ISysCommissionDayService;
|
import com.stdiet.custom.service.ISysCommissionDayService;
|
||||||
import com.stdiet.custom.service.ISysOrderPauseService;
|
import com.stdiet.custom.service.ISysOrderPauseService;
|
||||||
@ -22,6 +24,7 @@ import java.time.temporal.ChronoUnit;
|
|||||||
import java.time.temporal.TemporalAdjusters;
|
import java.time.temporal.TemporalAdjusters;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 销售订单Service业务层处理
|
* 销售订单Service业务层处理
|
||||||
@ -349,7 +352,26 @@ public class SysOrderServiceImpl implements ISysOrderService {
|
|||||||
* @param sysCustomer
|
* @param sysCustomer
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public int getOrderCountByCustomer(SysCustomer sysCustomer){
|
public int getOrderCountByCustomer(SysCustomer sysCustomer){
|
||||||
return sysOrderMapper.getOrderCountByCustomer(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<>();
|
List<Long> delList = new ArrayList<>();
|
||||||
for (SysRecipesPlan plan : oldRecipesPlanList) {
|
for (SysRecipesPlan plan : oldRecipesPlanList) {
|
||||||
if(index < newSize){
|
if(index < newSize){
|
||||||
if(plan.getStartDate().compareTo(newRecipesPlanList.get(index).getStartDate()) != 0
|
plan.setStartDate(newRecipesPlanList.get(index).getStartDate());
|
||||||
|| plan.getEndDate().compareTo(newRecipesPlanList.get(index).getEndDate()) != 0){
|
plan.setEndDate(newRecipesPlanList.get(index).getEndDate());
|
||||||
plan.setStartDate(newRecipesPlanList.get(index).getStartDate());
|
plan.setPauseDate(newRecipesPlanList.get(index).getPauseDate());
|
||||||
plan.setEndDate(newRecipesPlanList.get(index).getEndDate());
|
plan.setStartNumDay(plan.getStartNumDay());
|
||||||
plan.setPauseDate(newRecipesPlanList.get(index).getPauseDate());
|
plan.setEndNumDay(plan.getEndNumDay());
|
||||||
updateList.add(plan);
|
updateList.add(plan);
|
||||||
}
|
|
||||||
}else{
|
}else{
|
||||||
delList.add(plan.getId());
|
delList.add(plan.getId());
|
||||||
}
|
}
|
||||||
|
@ -400,19 +400,70 @@
|
|||||||
from sys_order o
|
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_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
|
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 != ''">
|
<if test="reviewStatus != null and reviewStatus != ''">
|
||||||
and review_status = #{reviewStatus}
|
and review_status = #{reviewStatus}
|
||||||
</if>
|
</if>
|
||||||
<if test="userId != null">
|
<if test="userId != null"><!-- 限于营养师、售后不可能同一个的情况下 -->
|
||||||
and (su_sale.user_id = #{userId} or su_nutritionist.user_id = #{userId})
|
and (su_sale.user_id = #{userId} or su_nutritionist.user_id = #{userId})
|
||||||
</if>
|
</if>
|
||||||
<if test="endTime != null and endTime != ''">
|
<if test="endTime != null and endTime != ''">
|
||||||
AND DATE_FORMAT(o.order_time,'%Y-%m-%d') <= #{endTime}
|
AND DATE_FORMAT(o.order_time,'%Y-%m-%d') <= #{endTime}
|
||||||
</if>
|
</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
|
order by o.order_time desc
|
||||||
</select>
|
</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 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
|
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="结束日期"
|
end-placeholder="结束日期"
|
||||||
format="yyyy-MM-dd"
|
format="yyyy-MM-dd"
|
||||||
value-format="yyyy-MM-dd"
|
value-format="yyyy-MM-dd"
|
||||||
|
:picker-options="orderPickerOptions"
|
||||||
>
|
>
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -233,7 +234,8 @@ export default {
|
|||||||
},
|
},
|
||||||
orderPickerOptions: {
|
orderPickerOptions: {
|
||||||
disabledDate(time) {
|
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,
|
pageSize: 10,
|
||||||
userId: null,
|
userId: null,
|
||||||
postId: null,
|
postId: null,
|
||||||
reviewStatus: null
|
reviewStatus: "yes"
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
@ -157,6 +157,11 @@
|
|||||||
@click="openFormDialog('查看发放计划', scope.row)"
|
@click="openFormDialog('查看发放计划', scope.row)"
|
||||||
>查看发放计划</el-button
|
>查看发放计划</el-button
|
||||||
>
|
>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
@click="handleDetailClick(scope.row)"
|
||||||
|
>查看订单详情</el-button
|
||||||
|
>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
@ -181,6 +186,7 @@
|
|||||||
:data="sendCommissionPlan.list"
|
:data="sendCommissionPlan.list"
|
||||||
show-summary
|
show-summary
|
||||||
:summary-method="getSummaries"
|
:summary-method="getSummaries"
|
||||||
|
style="height:400px;overflow: auto"
|
||||||
>
|
>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
property="nickName"
|
property="nickName"
|
||||||
@ -205,7 +211,11 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
<OrdercommissDetail ref="ordercommissDetailRef"></OrdercommissDetail>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@ -226,6 +236,8 @@ import { getOptions } from "@/api/custom/global";
|
|||||||
|
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
|
|
||||||
|
import OrdercommissDetail from "@/components/OrdercommissDetail";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "CommisionDayDetail",
|
name: "CommisionDayDetail",
|
||||||
data() {
|
data() {
|
||||||
@ -266,13 +278,16 @@ export default {
|
|||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
userId: null,
|
userId: null,
|
||||||
postId: null,
|
postId: null,
|
||||||
reviewStatus: null,
|
reviewStatus: "yes",
|
||||||
},
|
},
|
||||||
sendCommissionPlanTable: false,
|
sendCommissionPlanTable: false,
|
||||||
sendCommissionPlan: {},
|
sendCommissionPlan: {},
|
||||||
fixLength: 2,
|
fixLength: 2,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
components: {
|
||||||
|
OrdercommissDetail
|
||||||
|
},
|
||||||
created() {
|
created() {
|
||||||
this.getList();
|
this.getList();
|
||||||
getOptions().then((response) => {
|
getOptions().then((response) => {
|
||||||
@ -399,6 +414,14 @@ export default {
|
|||||||
this.sendCommissionPlan.total = row.totalNotSentCommissionAmount;
|
this.sendCommissionPlan.total = row.totalNotSentCommissionAmount;
|
||||||
this.sendCommissionPlanTable = true;
|
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) {
|
getSummaries(param) {
|
||||||
//param 是固定的对象,里面包含 columns与 data参数的对象 {columns: Array[4], data: Array[5]},包含了表格的所有的列与数据信息
|
//param 是固定的对象,里面包含 columns与 data参数的对象 {columns: Array[4], data: Array[5]},包含了表格的所有的列与数据信息
|
||||||
const { columns, data } = param;
|
const { columns, data } = param;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user