From 74cfe232a815e89df46678accb3b8915ca3bddaa Mon Sep 17 00:00:00 2001 From: xiezhijun <15270898033@163.com> Date: Fri, 26 Mar 2021 19:04:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=8C=89=E5=A4=A9=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../custom/SysCommisionController.java | 13 + .../domain/SysOrderCommisionDayDetail.java | 112 ++------- .../dto/response/EveryMonthTotalAmount.java | 13 + .../stdiet/custom/mapper/SysOrderMapper.java | 15 ++ .../service/ISysCommissionDayService.java | 6 + .../custom/service/ISysOrderService.java | 16 ++ .../impl/SysCommissionDayServiceImpl.java | 75 +++++- .../service/impl/SysOrderServiceImpl.java | 22 ++ .../mapper/custom/SysOrderMapper.xml | 44 +++- stdiet-ui/src/api/custom/commision.js | 9 + .../components/OrdercommissDetail/index.vue | 226 ++++++++++++++++++ .../views/custom/commision/detail/index.vue | 2 +- .../custom/commision/detail_day/index.vue | 24 +- 13 files changed, 472 insertions(+), 105 deletions(-) create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/dto/response/EveryMonthTotalAmount.java create mode 100644 stdiet-ui/src/components/OrdercommissDetail/index.vue diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysCommisionController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysCommisionController.java index c7fd11182..bbef32ffb 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysCommisionController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysCommisionController.java @@ -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); + } + /** * 导出按天计算提成详细列表 */ diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrderCommisionDayDetail.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrderCommisionDayDetail.java index 7d9ff4f04..449d24a61 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrderCommisionDayDetail.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrderCommisionDayDetail.java @@ -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,24 @@ import java.util.Map; /** * 每个订单的提成详情 * */ +@Data public class SysOrderCommisionDayDetail extends BaseEntity { private static final long serialVersionUID = 1L; /**订单成交时间*/ + @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; /**服务月数*/ @@ -39,12 +42,18 @@ public class SysOrderCommisionDayDetail extends BaseEntity { /**订单金额*/ private BigDecimal orderAmount; + /**订单总提成**/ + private BigDecimal orderCommission; + /**服务天数*/ private Integer serverDay; /**每天金额*/ private BigDecimal dayMoney; + /** 暂停总天数 **/ + private int pauseTotalDay; + /**每年每月暂停天数*/ private Map<String, Integer> everyYearMonthPauseDay; @@ -54,99 +63,12 @@ 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 BigDecimal monthOrderTotalAmount; - public String getName() { - return name; - } - - 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; } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/EveryMonthTotalAmount.java b/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/EveryMonthTotalAmount.java new file mode 100644 index 000000000..f34d2d53f --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/EveryMonthTotalAmount.java @@ -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; +} diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysOrderMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysOrderMapper.java index 8662f4b91..caafa2e63 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysOrderMapper.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysOrderMapper.java @@ -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); } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysCommissionDayService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysCommissionDayService.java index cb92b0c40..f3fae710c 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysCommissionDayService.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysCommissionDayService.java @@ -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); + } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysOrderService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysOrderService.java index 8daa51afe..06402d7d3 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysOrderService.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysOrderService.java @@ -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); } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCommissionDayServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCommissionDayServiceImpl.java index 02e223550..41e40a9a6 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCommissionDayServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCommissionDayServiceImpl.java @@ -1,9 +1,11 @@ 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.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; @@ -103,6 +105,63 @@ 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 totalCommission = BigDecimal.valueOf(0); + //根据用户ID获取对应订单列表 + List<SysOrderCommisionDayDetail> orderDetailList = orderUserMap.get(userId); + for(SysOrderCommisionDayDetail sysOrderCommisionDayDetail : orderDetailList){ + 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()); + for (String everyMonth : sysOrderCommisionDayDetail.getEveryYearMonthServerMoney().keySet()) { + everyYearMonthServerCommission.put(everyMonth, getMoney(sysOrderCommisionDayDetail.getEveryYearMonthServerMoney().get(everyMonth).doubleValue() * sysOrderCommisionDayDetail.getCommissionRate() / 100D)); + } + sysOrderCommisionDayDetail.setEveryYearMonthServerCommission(everyYearMonthServerCommission); + totalCommission = totalCommission.add(sysOrderCommisionDayDetail.getOrderCommission()); + } + result = AjaxResult.success(); + int total = sysOrderMapper.selectSimpleOrderMessageCount(sysCommision); + result.put("total", total); + result.put("list", orderDetailList); + result.put("totalCommission", totalCommission); + return result; + } + /** * 根据用户ID统计出该用户在该月所有订单的服务数量、服务总天数、服务订单总额、暂停总天数 @@ -135,14 +194,14 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { 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)); + totalCommissionAmount = totalCommissionAmount.add(getMoney(orderAmount.get(ym).doubleValue() * rateMap.get(ym) / 100D)); } 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)); + ym_mession = ym_mession.add(getMoney(m.doubleValue() * rateMap.get(orderYearMonth) / 100D)); } } if(isSendCommissionByYearMonth(ym)){ @@ -288,7 +347,7 @@ 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); @@ -299,12 +358,14 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { 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); + return sysOrderCommisionDayDetail; } @@ -385,11 +446,11 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { double totalMoney = 0.0; for(String key : keySet){ if(i++ != keySet.size()){ - everyMonthServerMoney.put(key, getMoney(everyMonthServerDay.get(key) * dayMoney.doubleValue(), 1)); + everyMonthServerMoney.put(key, getMoney(everyMonthServerDay.get(key) * dayMoney.doubleValue())); totalMoney += everyMonthServerMoney.get(key).doubleValue(); }else{ //由于小数点只保留一位,最后一个月的金额等于总额减去前几个月金额,避免总数不一致 - everyMonthServerMoney.put(key, getMoney(orderMoney.doubleValue() - totalMoney, 1)); + everyMonthServerMoney.put(key, getMoney(orderMoney.doubleValue() - totalMoney)); } } return everyMonthServerMoney; @@ -436,9 +497,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); } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderServiceImpl.java index 9ee2c1a41..4922a2c11 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderServiceImpl.java @@ -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); + } } \ No newline at end of file diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml index 0d38fd545..1c4c712f8 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml @@ -404,7 +404,7 @@ <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 != ''"> @@ -413,6 +413,48 @@ 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 + <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> + 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 + <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 diff --git a/stdiet-ui/src/api/custom/commision.js b/stdiet-ui/src/api/custom/commision.js index 967382272..977a0f422 100644 --- a/stdiet-ui/src/api/custom/commision.js +++ b/stdiet-ui/src/api/custom/commision.js @@ -87,3 +87,12 @@ export function exportDayCommision(query) { }) } +// 用户对应订单的按天计算提成明细 +export function orderDetailDay(query) { + return request({ + url: '/custom/commision/orderDetailDay', + method: 'get', + params: query + }) +} + diff --git a/stdiet-ui/src/components/OrdercommissDetail/index.vue b/stdiet-ui/src/components/OrdercommissDetail/index.vue new file mode 100644 index 000000000..6529b1dd6 --- /dev/null +++ b/stdiet-ui/src/components/OrdercommissDetail/index.vue @@ -0,0 +1,226 @@ +<template> + <div> + <el-drawer + :title="title" + :close-on-press-escape="false" + :visible.sync="visible" + @closed="handleOnClosed" + size="63%" + > + <div class="order_drawer_wrapper" height="84%"> + <div + class="header" + style="float: right; margin-bottom: 20px; margin-right: 60px" + > + <span style="font-size:14px;margin-top:-200px" + >当前页总提成:{{ totalCommission }}元</span + > + </div> + + <el-table :data="orderList" v-loading="loading"> + <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="100" + ></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="100" + > + <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> + + <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> + </div> +</template> +<script> +import { orderDetailDay } from "@/api/custom/commision"; + +export default { + name: "OrdercommissDetail", + components: {}, + data() { + return { + visible: false, + loading: false, + title: "", + data: undefined, + orderList: [], + queryParam: {}, + total: 0, + totalCommission: 0, + serverDayList: ["1月:30", "2月:20"], + }; + }, + computed: {}, + methods: { + showDrawer(data) { + this.data = data; + 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}」订单提成列表`; + this.visible = true; + + this.fetchOrderList(); + }, + fetchOrderList() { + this.loading = true; + orderDetailDay(this.queryParam).then((res) => { + //console.log(res); + if (res.code == 200) { + this.orderList = this.dealOrderList(res.list); + this.total = res.total; + this.totalCommission = res.totalCommission; + } + this.loading = false; + }); + }, + handleOnClosed() { + this.data = undefined; + }, + 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.everyYearMonthServerCommission = everyYearMonthServerCommissionArray; + }); + return orderList; + }, + }, +}; +</script> +<style lang="scss" scoped> +/deep/ :focus { + outline: 0; +} + +.order_drawer_wrapper { + height: calc(100vh - 77px); +} +</style> diff --git a/stdiet-ui/src/views/custom/commision/detail/index.vue b/stdiet-ui/src/views/custom/commision/detail/index.vue index 531f94efa..3c9e56b93 100644 --- a/stdiet-ui/src/views/custom/commision/detail/index.vue +++ b/stdiet-ui/src/views/custom/commision/detail/index.vue @@ -180,7 +180,7 @@ export default { pageSize: 10, userId: null, postId: null, - reviewStatus: null + reviewStatus: "yes" }, }; }, diff --git a/stdiet-ui/src/views/custom/commision/detail_day/index.vue b/stdiet-ui/src/views/custom/commision/detail_day/index.vue index 28583eaf7..6fd2bbea1 100644 --- a/stdiet-ui/src/views/custom/commision/detail_day/index.vue +++ b/stdiet-ui/src/views/custom/commision/detail_day/index.vue @@ -157,6 +157,11 @@ @click="openFormDialog('查看发放计划', scope.row)" >查看发放计划</el-button > + <el-button + type="text" + @click="handleDetailClick(scope.row)" + >查看订单详情</el-button + > </template> </el-table-column> @@ -205,7 +210,11 @@ </el-table-column> </el-table> </el-dialog> + + <OrdercommissDetail ref="ordercommissDetailRef"></OrdercommissDetail> </div> + + </template> <style> @@ -226,6 +235,8 @@ import { getOptions } from "@/api/custom/global"; import dayjs from "dayjs"; +import OrdercommissDetail from "@/components/OrdercommissDetail"; + export default { name: "CommisionDayDetail", data() { @@ -266,13 +277,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 +413,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({'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;