From f937285895907a20dfbf82fe8a9f3d28494713f7 Mon Sep 17 00:00:00 2001 From: xiezhijun <15270898033@163.com> Date: Thu, 25 Mar 2021 18:54:29 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E9=A3=9F=E8=B0=B1=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=97=B6=E6=9B=B4=E6=96=B0=E5=A4=A9=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E9=A3=9F=E8=B0=B1=E6=9A=82=E5=81=9C=E9=99=90=E5=88=B6?= =?UTF-8?q?=E8=8C=83=E5=9B=B4=EF=BC=8C=E4=B8=8D=E8=83=BD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=B8=8A=E6=9C=88=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SysRecipesPlanServiceImpl.java | 13 ++++++------- .../RecipesPlanDrawer/PlanPauseDrawer/index.vue | 4 +++- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java index 87629416e..b5bd90305 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java @@ -181,13 +181,12 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService { List delList = new ArrayList<>(); for (SysRecipesPlan plan : oldRecipesPlanList) { if(index < newSize){ - if(plan.getStartDate().compareTo(newRecipesPlanList.get(index).getStartDate()) != 0 - || plan.getEndDate().compareTo(newRecipesPlanList.get(index).getEndDate()) != 0){ - plan.setStartDate(newRecipesPlanList.get(index).getStartDate()); - plan.setEndDate(newRecipesPlanList.get(index).getEndDate()); - plan.setPauseDate(newRecipesPlanList.get(index).getPauseDate()); - updateList.add(plan); - } + plan.setStartDate(newRecipesPlanList.get(index).getStartDate()); + plan.setEndDate(newRecipesPlanList.get(index).getEndDate()); + plan.setPauseDate(newRecipesPlanList.get(index).getPauseDate()); + plan.setStartNumDay(plan.getStartNumDay()); + plan.setEndNumDay(plan.getEndNumDay()); + updateList.add(plan); }else{ delList.add(plan.getId()); } diff --git a/stdiet-ui/src/components/RecipesPlanDrawer/PlanPauseDrawer/index.vue b/stdiet-ui/src/components/RecipesPlanDrawer/PlanPauseDrawer/index.vue index 7667dbd9a..4e97924ac 100644 --- a/stdiet-ui/src/components/RecipesPlanDrawer/PlanPauseDrawer/index.vue +++ b/stdiet-ui/src/components/RecipesPlanDrawer/PlanPauseDrawer/index.vue @@ -137,6 +137,7 @@ end-placeholder="结束日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd" + :picker-options="orderPickerOptions" > @@ -233,7 +234,8 @@ export default { }, orderPickerOptions: { disabledDate(time) { - return time.getTime() < Date.now() - 24 * 60 * 60 * 1000; + //不能添加上月日期的暂停,会影响提成计算 + return time.getTime() < dayjs().startOf('month').valueOf() }, }, }; 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 2/4] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=8C=89=E5=A4=A9?= =?UTF-8?q?=E8=AE=A1=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 everyYearMonthPauseDay; @@ -54,99 +63,12 @@ public class SysOrderCommisionDayDetail extends BaseEntity { /**每年每月对应金额*/ private Map everyYearMonthServerMoney; - public LocalDateTime getOrderTime() { - return orderTime; - } + /**每年每月对应提成*/ + private Map 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 getEveryYearMonthPauseDay() { - return everyYearMonthPauseDay; - } - - public void setEveryYearMonthPauseDay(Map everyYearMonthPauseDay) { - this.everyYearMonthPauseDay = everyYearMonthPauseDay; - } - - public Map getEveryYearMonthServerDay() { - return everyYearMonthServerDay; - } - - public void setEveryYearMonthServerDay(Map everyYearMonthServerDay) { - this.everyYearMonthServerDay = everyYearMonthServerDay; - } - - public Map getEveryYearMonthServerMoney() { - return everyYearMonthServerMoney; - } - - public void setEveryYearMonthServerMoney(Map 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 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 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> orderUserMap = getOrderByList(sysCommision); + if(orderUserMap == null || !orderUserMap.containsKey(sysCommision.getUserId())){ + return result; + } + //查询用户 + List 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 everyMonthTotalAmountList = sysOrderMapper.getTotalAmountByUserId(sysCommision); + if(everyMonthTotalAmountList == null || everyMonthTotalAmountList.size() == 0){ + return result; + } + Map everyMonthTotalAmountMap = new TreeMap<>(new MyComparator()); + for (EveryMonthTotalAmount everyMonthTotalAmount : everyMonthTotalAmountList) { + everyMonthTotalAmountMap.put(everyMonthTotalAmount.getYearMonth(), everyMonthTotalAmount.getTotalAmount()); + } + //获取每个月的提成比例以及计算提成 + Map rateMap = getRateByAmount(userId, postId, everyMonthTotalAmountMap); + BigDecimal totalCommission = BigDecimal.valueOf(0); + //根据用户ID获取对应订单列表 + List 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 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 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 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 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 @@ and review_status = #{reviewStatus} - + and (su_sale.user_id = #{userId} or su_nutritionist.user_id = #{userId}) @@ -413,6 +413,48 @@ order by o.order_time desc + + + + + + @@ -419,7 +423,8 @@ from sys_order o left join sys_user su_sale on su_sale.user_id = o.after_sale_id and su_sale.del_flag = 0 left join sys_user su_nutritionist on su_nutritionist.user_id = o.nutritionist_id and su_nutritionist.del_flag = 0 - where o.order_time >= '2021-01-01' and o.del_flag = 0 + where o.order_time >= '2021-01-01' and o.del_flag = 0 and (su_sale.user_id is not null OR su_nutritionist.user_id is not null) + and o.amount is not null and review_status = #{reviewStatus} @@ -429,6 +434,9 @@ AND DATE_FORMAT(o.order_time,'%Y-%m-%d') <= #{endTime} + + AND #{serverScopeEndTime} >= DATE_FORMAT(o.commiss_start_time,'%Y-%m-%d') + order by o.order_time desc @@ -440,7 +448,8 @@ FROM sys_order o LEFT JOIN sys_user su_sale ON su_sale.user_id = o.after_sale_id AND su_sale.del_flag = 0 LEFT JOIN sys_user su_nutritionist ON su_nutritionist.user_id = o.nutritionist_id AND su_nutritionist.del_flag = 0 - where o.order_time >= '2021-01-01' and o.del_flag = 0 + where o.order_time >= '2021-01-01' and o.del_flag = 0 and (su_sale.user_id is not null OR su_nutritionist.user_id is not null) + and o.amount is not null and o.review_status = #{reviewStatus} diff --git a/stdiet-ui/src/components/OrdercommissDetail/index.vue b/stdiet-ui/src/components/OrdercommissDetail/index.vue index 6529b1dd6..1b3c5c932 100644 --- a/stdiet-ui/src/components/OrdercommissDetail/index.vue +++ b/stdiet-ui/src/components/OrdercommissDetail/index.vue @@ -5,19 +5,53 @@ :close-on-press-escape="false" :visible.sync="visible" @closed="handleOnClosed" - size="63%" + size="65%" > -
+
+
+ + + + + + + 搜索 + 重置 + + +
- + 当前页总服务金额:{{totalServerAmount}}元 + + 当前页总提成:{{ totalCommission }}元 + 已发放总提成:{{ totalSendCommission }}元 + 未发放总提成:{{ totalNotSendCommission }}元
- - +
+ @@ -419,7 +419,7 @@ export default { 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)); + this.$refs["ordercommissDetailRef"].showDrawer(this.addDateRange({'yearMonth': dayjs(this.month).endOf("month").format("YYYY-MM-DD"),'name': row.nickName, 'userId': row.userId, 'reviewStatus': this.queryParams.reviewStatus}, dateRange)); }, getSummaries(param) { //param 是固定的对象,里面包含 columns与 data参数的对象 {columns: Array[4], data: Array[5]},包含了表格的所有的列与数据信息 From b87b96d46e381ebac84d0367e524d35aa2700767 Mon Sep 17 00:00:00 2001 From: xiezhijun <15270898033@163.com> Date: Sun, 28 Mar 2021 17:38:38 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=8F=90=E6=88=90=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/SysOrderCommisionDayDetail.java | 8 +- .../impl/SysCommissionDayServiceImpl.java | 282 +++++++++++------- .../custom/commision/detail_day/index.vue | 7 +- 3 files changed, 178 insertions(+), 119 deletions(-) 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 981507c97..f6d8c39c0 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 @@ -42,12 +42,18 @@ public class SysOrderCommisionDayDetail extends BaseEntity { /**赠送天数*/ private Integer giveDay; - /**订单金额*/ + /**订单金额或服务订单金额*/ private BigDecimal orderAmount; /**订单总提成**/ private BigDecimal orderCommission; + //已发放提成 + private BigDecimal hasSendOrderCommission; + + //未发放提成 + private BigDecimal notHasSendOrderCommission; + /**服务天数*/ private Integer serverDay; 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 1432f75c3..7919e65a0 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 @@ -52,7 +52,8 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { sysCommissionDayDetail.setNickName(commision.getUserName()); sysCommissionDayDetail.setPostId(commision.getPostId()); sysCommissionDayDetail.setPostName(commision.getPostName()); - dealServerOrderCommissionDetail(orderDetailMap.get(sysCommissionDayDetail.getUserId()), sysCommissionDayDetail); + + dealServerOrderCommissionDetail(sysCommision, orderDetailMap.get(sysCommissionDayDetail.getUserId()), sysCommissionDayDetail); result.add(sysCommissionDayDetail); //统计所以用户总提成、已发放提成、未发放提成 total.setTotalCommissionAmount(total.getTotalCommissionAmount().add(sysCommissionDayDetail.getTotalCommissionAmount())); @@ -150,38 +151,12 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { //根据用户ID获取对应订单列表 List 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 everyYearMonthServerCommission = new TreeMap<>(new MyComparator()); - //每年每月提成是否发放状态 - Map everyYearMonthCommissionSendFlag = new TreeMap<>(new MyComparator()); - //当前订单的提成总和 - BigDecimal currentOrderCommission = 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); + //处理订单提成 + 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); @@ -194,72 +169,137 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { return result; } - /** * 根据用户ID统计出该用户在该月所有订单的服务数量、服务总天数、服务订单总额、暂停总天数 * **/ - public void dealServerOrderCommissionDetail(List orderDetailList, SysCommissionDayDetail sysCommissionDayDetail){ + public void dealServerOrderCommissionDetail(SysCommision commisionParam, List orderDetailList, SysCommissionDayDetail sysCommissionDayDetail){ //总提成 - BigDecimal totalCommissionAmount = new BigDecimal(0); - //已发放提成 - BigDecimal totalHasSentCommissionAmount = new BigDecimal(0); - //未发放提成记录 - List> sendDetailList = new ArrayList<>(); - if(orderDetailList != null){ - //获取每个月的成交总额度 - Map orderAmount = new TreeMap<>(new MyComparator()); - Set commissionMonthSet = new TreeSet<>(new MyComparator()); - for (SysOrderCommisionDayDetail sysOrderCommisionDayDetail : orderDetailList) { - String yearMonth = sysOrderCommisionDayDetail.getOrderTime().getYear()+""+sysOrderCommisionDayDetail.getOrderTime().getMonth().getValue(); - if(orderAmount.containsKey(yearMonth)){ - orderAmount.put(yearMonth, orderAmount.get(yearMonth).add(sysOrderCommisionDayDetail.getOrderAmount())); - }else{ - orderAmount.put(yearMonth, sysOrderCommisionDayDetail.getOrderAmount()); - } - commissionMonthSet.addAll(sysOrderCommisionDayDetail.getEveryYearMonthServerMoney().keySet()); - } - //获取提成比例以及计算提成 - Map rateMap = getRateByAmount(sysCommissionDayDetail.getUserId(), sysCommissionDayDetail.getPostId(), orderAmount); + sysCommissionDayDetail.setTotalCommissionAmount(BigDecimal.valueOf(0)); + //总共已发提成 + sysCommissionDayDetail.setTotalHasSentCommissionAmount(BigDecimal.valueOf(0)); + //总共未发提成 + sysCommissionDayDetail.setTotalNotSentCommissionAmount(BigDecimal.valueOf(0)); + //提成发放计划 + sysCommissionDayDetail.setSendDetailList(new ArrayList<>()); + //下月应发提成 + sysCommissionDayDetail.setNextMonthCommission(BigDecimal.valueOf(0)); - int i = 1; - BigDecimal commissionA = new BigDecimal(0); - for (String ym : commissionMonthSet) { - BigDecimal ym_mession = new BigDecimal(0); - if(orderAmount.containsKey(ym)){ - totalCommissionAmount = totalCommissionAmount.add(getMoney(orderAmount.get(ym).doubleValue() * rateMap.get(ym) / 100D)); + if(orderDetailList == null || orderDetailList.size() == 0 ){ + return; + } + + //总提成 + BigDecimal totalCommissionAmount = BigDecimal.valueOf(0); + //已发放提成 + BigDecimal totalHasSentCommissionAmount = BigDecimal.valueOf(0); + //未发放提成 + BigDecimal totalNotHasSentCommissionAmount = BigDecimal.valueOf(0); + //已发放提成记录 + List> hasSendYearMonthDetailList = new ArrayList<>(); + //未发放提成计划 + List> notHasSendYearMonthDetailList = new ArrayList<>(); + + //获取每个月的成交总额度 + commisionParam.setUserId(sysCommissionDayDetail.getUserId()); + List everyMonthTotalAmountList = sysOrderMapper.getTotalAmountByUserId(commisionParam); + if(everyMonthTotalAmountList == null || everyMonthTotalAmountList.size() == 0){ + return; + } + Map everyMonthTotalAmountMap = new TreeMap<>(new MyComparator()); + for (EveryMonthTotalAmount everyMonthTotalAmount : everyMonthTotalAmountList) { + everyMonthTotalAmountMap.put(everyMonthTotalAmount.getYearMonth(), everyMonthTotalAmount.getTotalAmount()); + } + //获取每个月的提成比例以及计算提成 + Map rateMap = getRateByAmount(sysCommissionDayDetail.getUserId(), sysCommissionDayDetail.getPostId(), everyMonthTotalAmountMap); + + //存在提成的年月 + Set 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 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 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)); - } - } - if(isSendCommissionByYearMonth(ym)){ - totalHasSentCommissionAmount = totalHasSentCommissionAmount.add(ym_mession); - }else{ - Map 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++; + } + map.put("yearMonth", yearMonth); + map.put("yearMonthCommission", yearMonthCommiss); + if(isSendCommissionByYearMonth(yearMonth)){ + hasSendYearMonthDetailList.add(map); + }else{ + notHasSendYearMonthDetailList.add(map); } } + sysCommissionDayDetail.setTotalCommissionAmount(totalCommissionAmount); sysCommissionDayDetail.setTotalHasSentCommissionAmount(totalHasSentCommissionAmount); - //未发放提成 = 总提成 - 已发放提成 - sysCommissionDayDetail.setTotalNotSentCommissionAmount(totalCommissionAmount.subtract(totalHasSentCommissionAmount)); - sysCommissionDayDetail.setSendDetailList(sendDetailList); - sysCommissionDayDetail.setNextMonthCommission(sendDetailList.size() > 0 ? (BigDecimal)sendDetailList.get(0).get("yearMonthCommission") : new BigDecimal(0)); + sysCommissionDayDetail.setTotalNotSentCommissionAmount(totalNotHasSentCommissionAmount); + sysCommissionDayDetail.setSendDetailList(notHasSendYearMonthDetailList); + sysCommissionDayDetail.setNextMonthCommission(notHasSendYearMonthDetailList.size() > 0 ? (BigDecimal)notHasSendYearMonthDetailList.get(0).get("yearMonthCommission") : new BigDecimal(0)); + + + } + + /** + * 处理每个订单的提成,包括已发放、未发放提成 + * @param sysOrderCommisionDayDetail 订单服务详情对象 + * @param everyMonthTotalAmountMap 每个月成交总额 + * @param rateMap 提成比例 + */ + public void dealCommissionByOrderCommisionDayDetail(SysOrderCommisionDayDetail sysOrderCommisionDayDetail, Map everyMonthTotalAmountMap, Map 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 everyYearMonthServerCommission = new TreeMap<>(new MyComparator()); + //每年每月提成是否发放状态 + Map 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); } /**判断该月提成是否已发放*/ @@ -411,7 +451,7 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { //服务总天数 int realServerDay = getTotalByMap(realEveryYearMonthServerDay); //每年每月对于金额 - Map realEveryYearMonthServerMoney = getEveryMonthServerMoney(realEveryYearMonthServerDay, orderAmount, dayMoney, serverEndDate); + Map realEveryYearMonthServerMoney = getRealEveryMonthServerMoney(realEveryYearMonthServerDay, orderAmount, dayMoney, serverEndDate, everyYearMonthServerDay, everyYearMonthServerMoney); //服务时间范围内暂停天数 sysOrderCommisionDayDetail.setPauseTotalDay(realPauseTotalDay); sysOrderCommisionDayDetail.setEveryYearMonthPauseDay(realEveryYearMonthPauseDay); @@ -528,13 +568,10 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { public Map getEveryMonthServerMoney(Map everyMonthServerDay, BigDecimal orderMoney, BigDecimal dayMoney, LocalDate serverEndTime){ Map everyMonthServerMoney = new TreeMap<>(new MyComparator()); Set keySet = everyMonthServerDay.keySet(); - int i = 1; BigDecimal total = BigDecimal.valueOf(0); for(String key : keySet){ - //System.out.println(serverEndTime.getYear()+""+serverEndTime.getMonth().getValue()); //判断是否为最后一个月 if(key.equals(serverEndTime.getYear()+""+serverEndTime.getMonth().getValue())){ - System.out.println(key); //由于小数保留问题,最后一个月的金额等于总额减去前几个月金额,避免总数不一致 everyMonthServerMoney.put(key, orderMoney.subtract(total)); }else{ @@ -545,6 +582,40 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { return everyMonthServerMoney; } + /** + * 获取订单服务时间范围中每年每月服务金额 + * @Param everyMonthServerDay 真正每年每月服务天数 + * @Param orderMoney 订单总额 + * @Param dayMoney 每天对于金额 + * @Param serverEndTime 订单服务结束时间 + * @Param everyYearMonthServerDay 整个订单的每年每月服务天数 + * @Param everyYearMonthServerMoney 整个订单的每年每月服务金额 + * */ + public Map getRealEveryMonthServerMoney(Map realEveryMonthServerDay, BigDecimal orderMoney, BigDecimal dayMoney, LocalDate serverEndTime, + Map everyYearMonthServerDay, Map everyYearMonthServerMoney){ + Map everyMonthServerMoney = new TreeMap<>(new MyComparator()); + Set 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; + } + /** * 根据订单服务开始日期、订单服务结束日期、营养师或售后实际开始时间、营养师或售后实际结束时间,统计出实际时间范围内每年每月对应的天数 * */ @@ -618,31 +689,12 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { @Override public int compare(String o1, String o2) { - return Integer.parseInt(o1) - Integer.parseInt(o2); + if(o1.substring(0,4).equals(o2.substring(0,4))){ + return Integer.parseInt(o1.substring(4)) - Integer.parseInt(o2.substring(4)); + }else{ + return Integer.parseInt(o1.substring(0,4)) - Integer.parseInt(o2.substring(0,4)); + } } } - public static void main(String[] args){ - Double s = 31190.1; - /* NumberFormat nf = NumberFormat.getNumberInstance(); - // 保留小数位数 - nf.setMaximumFractionDigits(1); - // 如果不需要四舍五入,可以使用 - nf.setRoundingMode(RoundingMode.DOWN); - System.out.println(Double.parseDouble(nf.format(s))); - System.out.println( new BigDecimal(nf.format(s)).doubleValue());*/ - /*System.out.println(new BigDecimal(s).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue()); - - LocalDate localDate = LocalDate.of(2020, 1, 15); - System.out.println(ChronoUnit.MONTHS.between(localDate, LocalDate.now())); - System.out.println(localDate.getDayOfMonth()); - System.out.println(localDate.getDayOfWeek()); - System.out.println(localDate.getDayOfYear()); - - System.out.println(ChronoUnit.DAYS.between(LocalDate.of(2021, 1,14), LocalDate.now()));*/ - - /*System.out.println(ts(109792.8 * 6 / 100D, 1)); - System.out.println(ts(6587.8,2).doubleValue());*/ - - } } 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 22dec651b..c43c5db36 100644 --- a/stdiet-ui/src/views/custom/commision/detail_day/index.vue +++ b/stdiet-ui/src/views/custom/commision/detail_day/index.vue @@ -157,11 +157,11 @@ @click="openFormDialog('查看发放计划', scope.row)" >查看发放计划 - + > @@ -186,6 +186,7 @@ :data="sendCommissionPlan.list" show-summary :summary-method="getSummaries" + style="height:400px;overflow: auto" >
- +