From 4bee38335818a10e5a4f5ec804b69dbec2efad79 Mon Sep 17 00:00:00 2001 From: xiezhijun <15270898033@163.com> Date: Sat, 27 Mar 2021 19:29:15 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8F=90=E6=88=90=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stdiet/custom/domain/SysCommision.java | 6 + .../domain/SysOrderCommisionDayDetail.java | 6 + .../impl/SysCommissionDayServiceImpl.java | 136 ++++++++++++-- .../mapper/custom/SysOrderMapper.xml | 15 +- .../components/OrdercommissDetail/index.vue | 174 +++++++++++++++--- .../custom/commision/detail_day/index.vue | 6 +- 6 files changed, 298 insertions(+), 45 deletions(-) diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCommision.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCommision.java index a1fe6f18a..2ee667379 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCommision.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCommision.java @@ -62,4 +62,10 @@ public class SysCommision extends BaseEntity { //订单审核状态 private String reviewStatus; + + //服务开始时间,用于计算该时间段的提成 + private String serverScopeStartTime; + + //服务结束时间,用于计算该时间段的提成 + private String serverScopeEndTime; } 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 449d24a61..981507c97 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 @@ -18,6 +18,9 @@ public class SysOrderCommisionDayDetail extends BaseEntity { private static final long serialVersionUID = 1L; + /**订单ID*/ + private Long orderId; + /**订单成交时间*/ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime orderTime; @@ -66,6 +69,9 @@ public class SysOrderCommisionDayDetail extends BaseEntity { /**每年每月对应提成*/ private Map<String, BigDecimal> everyYearMonthServerCommission; + /**每年每月的提成是否发放**/ + private Map<String, Boolean> everyYearMonthCommissionSendFlag; + //该笔订单成交的当月的总成交额,用于确定提成比例 private BigDecimal monthOrderTotalAmount; 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 41e40a9a6..1432f75c3 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 @@ -3,6 +3,7 @@ package com.stdiet.custom.service.impl; import com.alibaba.fastjson.JSONArray; import com.stdiet.common.core.domain.AjaxResult; import com.stdiet.common.utils.DateUtils; +import com.stdiet.common.utils.StringUtils; import com.stdiet.custom.domain.*; import com.stdiet.custom.dto.request.SysOrderCommision; import com.stdiet.custom.dto.response.EveryMonthTotalAmount; @@ -138,7 +139,14 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { } //获取每个月的提成比例以及计算提成 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){ @@ -147,18 +155,42 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { 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); for (String everyMonth : sysOrderCommisionDayDetail.getEveryYearMonthServerMoney().keySet()) { - everyYearMonthServerCommission.put(everyMonth, getMoney(sysOrderCommisionDayDetail.getEveryYearMonthServerMoney().get(everyMonth).doubleValue() * sysOrderCommisionDayDetail.getCommissionRate() / 100D)); + 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); totalCommission = totalCommission.add(sysOrderCommisionDayDetail.getOrderCommission()); + totalServerAmount = totalServerAmount.add(sysOrderCommisionDayDetail.getOrderAmount()); } 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; } @@ -296,7 +328,7 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { continue; } //对每笔订单进行处理,统计出该比订单在每年每月对应的服务天数、金额、暂停天数等 - SysOrderCommisionDayDetail sysOrderCommisionDayDetail = statisticsOrderMessage(sysOrder); + SysOrderCommisionDayDetail sysOrderCommisionDayDetail = statisticsOrderMessage(sysOrder, sysCommision.getServerScopeStartTime(), sysCommision.getServerScopeEndTime()); if(sysOrder.getAfterSaleId() != null && sysOrder.getAfterSaleId() > 0L){ addUserOrderResultMap(sysOrder.getAfterSaleId(), sysOrderCommisionDayDetail, userOrderResultMap); } @@ -323,7 +355,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()); //订单总服务月数 @@ -349,9 +381,10 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { //每天对应金额 BigDecimal dayMoney = getMoney(orderAmount.doubleValue()/serverDay); //每年每月对于金额 - Map<String, BigDecimal> everyYearMonthServerMoney = getEveryMonthServerMoney(everyYearMonthServerDay, orderAmount, dayMoney); + Map<String, BigDecimal> everyYearMonthServerMoney = getEveryMonthServerMoney(everyYearMonthServerDay, orderAmount, dayMoney, serverEndDate); SysOrderCommisionDayDetail sysOrderCommisionDayDetail = new SysOrderCommisionDayDetail(); + sysOrderCommisionDayDetail.setOrderId(sysOrder.getOrderId()); sysOrderCommisionDayDetail.setOrderTime(DateUtils.dateToLocalDateTime(sysOrder.getOrderTime())); sysOrderCommisionDayDetail.setName(sysOrder.getCustomer()); sysOrderCommisionDayDetail.setServerStartDate(serverStartDate); @@ -366,9 +399,50 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { sysOrderCommisionDayDetail.setEveryYearMonthServerDay(everyYearMonthServerDay); sysOrderCommisionDayDetail.setEveryYearMonthServerMoney(everyYearMonthServerMoney); + if(StringUtils.isNotEmpty(serverScopeStartTime) && StringUtils.isNotEmpty(serverScopeEndTime)){ + LocalDate realStartTime = DateUtils.stringToLocalDate(serverScopeStartTime, "yyyy-MM-dd"); + LocalDate realEndTime = DateUtils.stringToLocalDate(serverScopeEndTime, "yyyy-MM-dd"); + //计算该时间范围内的暂停时间 + Map<String, Integer> realEveryYearMonthPauseDay = getRealEveryYearMonthPauseDay(sysOrder.getOrderPauseList(), serverStartDate, serverEndDate, realStartTime, realEndTime); + //暂停总天数 + int realPauseTotalDay = getTotalByMap(realEveryYearMonthPauseDay); + //计算每年每月服务天数 + Map<String, Integer> realEveryYearMonthServerDay = getRealEveryYearMonthDayCount(serverStartDate, serverEndDate, realStartTime, realEndTime, everyYearMonthPauseDay); + //服务总天数 + int realServerDay = getTotalByMap(realEveryYearMonthServerDay); + //每年每月对于金额 + Map<String, BigDecimal> realEveryYearMonthServerMoney = getEveryMonthServerMoney(realEveryYearMonthServerDay, orderAmount, dayMoney, serverEndDate); + //服务时间范围内暂停天数 + sysOrderCommisionDayDetail.setPauseTotalDay(realPauseTotalDay); + sysOrderCommisionDayDetail.setEveryYearMonthPauseDay(realEveryYearMonthPauseDay); + sysOrderCommisionDayDetail.setServerDay(realServerDay); + sysOrderCommisionDayDetail.setEveryYearMonthServerDay(realEveryYearMonthServerDay); + sysOrderCommisionDayDetail.setEveryYearMonthServerMoney(realEveryYearMonthServerMoney); + sysOrderCommisionDayDetail.setOrderAmount(getBigDecimalTotalByMap(realEveryYearMonthServerMoney)); + } return sysOrderCommisionDayDetail; } + /** + * 获取真正服务时间范围内的每年每月暂停天数 + * @Param list 暂停记录集合 + * */ + public Map<String, Integer> getRealEveryYearMonthPauseDay(List<SysOrderPause> list, LocalDate serverStartDate, LocalDate serverEndDate, LocalDate realStartDate, LocalDate realEndDate){ + Map<String, Integer> pauseMap = new TreeMap<>(new MyComparator()); + if(ChronoUnit.DAYS.between(realEndDate, serverStartDate) > 0 || ChronoUnit.DAYS.between(serverEndDate, realStartDate) > 0){ + return pauseMap; + } + //更新服务开始时间 + if(ChronoUnit.DAYS.between(serverStartDate,realStartDate) > 0){ + serverStartDate = realStartDate; + } + //更新服务结束时间 + if(ChronoUnit.DAYS.between(realEndDate,serverEndDate) > 0){ + serverEndDate = realEndDate; + } + return getEveryYearMonthPauseDay(list, serverStartDate, serverEndDate); + } + /** * 获取每年每月暂停天数 * @Param list 暂停记录集合 @@ -423,6 +497,17 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { return total; } + /** + * 获取Map<String, BigDecimal>集合中BigDecimal的总和 + * */ + public BigDecimal getBigDecimalTotalByMap(Map<String, BigDecimal> map){ + BigDecimal totalBigDecimal = BigDecimal.valueOf(0); + for(String key : map.keySet()){ + totalBigDecimal = totalBigDecimal.add(map.get(key)); + } + return totalBigDecimal; + } + /** * 获取订单服务时间范围中每年每月服务天数,减去当月暂停天数 * @Param server_start_date 服务开始时间 @@ -438,27 +523,50 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { * @Param everyMonthServerDay 每年每月服务天数 * @Param orderMoney 订单总额 * @Param dayMoney 每天对于金额 + * @Param serverEndTime 订单服务结束时间 * */ - public Map<String, BigDecimal> getEveryMonthServerMoney(Map<String, Integer> everyMonthServerDay, BigDecimal orderMoney, BigDecimal dayMoney){ + public Map<String, BigDecimal> getEveryMonthServerMoney(Map<String, Integer> everyMonthServerDay, BigDecimal orderMoney, BigDecimal dayMoney, LocalDate serverEndTime){ Map<String, BigDecimal > everyMonthServerMoney = new TreeMap<>(new MyComparator()); Set<String> keySet = everyMonthServerDay.keySet(); int i = 1; - double totalMoney = 0.0; + BigDecimal total = BigDecimal.valueOf(0); for(String key : keySet){ - if(i++ != keySet.size()){ - everyMonthServerMoney.put(key, getMoney(everyMonthServerDay.get(key) * dayMoney.doubleValue())); - totalMoney += everyMonthServerMoney.get(key).doubleValue(); + //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{ - //由于小数点只保留一位,最后一个月的金额等于总额减去前几个月金额,避免总数不一致 - everyMonthServerMoney.put(key, getMoney(orderMoney.doubleValue() - totalMoney)); + everyMonthServerMoney.put(key, getMoney(everyMonthServerDay.get(key) * dayMoney.doubleValue())); + total = total.add(everyMonthServerMoney.get(key)); } } return everyMonthServerMoney; } + /** + * 根据订单服务开始日期、订单服务结束日期、营养师或售后实际开始时间、营养师或售后实际结束时间,统计出实际时间范围内每年每月对应的天数 + * */ + public Map<String, Integer> getRealEveryYearMonthDayCount(LocalDate startDate, LocalDate endDate, LocalDate realStartDate, LocalDate realEndDate, Map<String, Integer> lessDayMap){ + Map<String, Integer> everyYearMonthServerDay = new TreeMap<>(new MyComparator()); + if(ChronoUnit.DAYS.between(realEndDate, startDate) > 0 || ChronoUnit.DAYS.between(endDate, realStartDate) > 0){ + return everyYearMonthServerDay; + } + //更新服务开始时间 + if(ChronoUnit.DAYS.between(startDate,realStartDate) > 0){ + startDate = realStartDate; + } + //更新服务结束时间 + if(ChronoUnit.DAYS.between(realEndDate,endDate) > 0){ + endDate = realEndDate; + } + return getEveryYearMonthDayCount(startDate, endDate, lessDayMap); + } + /** - * 根据开始日期、结束日期统计出时间范围内每年每月对应的天数 + * 根据订单开始日期、订单结束日期统计出时间范围内每年每月对应的天数 * */ public Map<String, Integer> getEveryYearMonthDayCount(LocalDate startDate, LocalDate endDate, Map<String, Integer> lessDayMap){ Map<String, Integer> everyYearMonthServerDay = new TreeMap<>(new MyComparator()); @@ -468,8 +576,8 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { LocalDate everyMonthLastDate = everyMonthFirstDate.with(TemporalAdjusters.lastDayOfMonth()); int day = 0; boolean breakFlag = false; - //写100防止死循环 - for(int i = 0; i < 100; i++){ + //写1000防止死循环 + for(int i = 0; i < 1000; i++){ if(ChronoUnit.DAYS.between(everyMonthLastDate, endDate) > 0){ day = Period.between(everyMonthFirstDate, everyMonthLastDate).getDays() + 1; }else{ diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml index 1c4c712f8..84c9e65dd 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml @@ -400,7 +400,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 <if test="reviewStatus != null and reviewStatus != ''"> and review_status = #{reviewStatus} </if> @@ -410,6 +411,9 @@ <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> @@ -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 <if test="reviewStatus != null and reviewStatus != ''"> and review_status = #{reviewStatus} </if> @@ -429,6 +434,9 @@ <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> @@ -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 <if test="reviewStatus != null and reviewStatus != ''"> and o.review_status = #{reviewStatus} </if> 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%" > - <div class="order_drawer_wrapper" height="84%"> + <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="header" - style="float: right; margin-bottom: 20px; margin-right: 60px" + class="order_total_data" > - <span style="font-size:14px;margin-top:-200px" + <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> - - <el-table :data="orderList" v-loading="loading"> + <div style="width:100%;height:80%;overflow: auto"> + <el-table :data="orderList" v-loading="loading" stripe> <el-table-column label="订单成交时间" prop="orderTime" @@ -31,7 +65,7 @@ width="100" ></el-table-column> <el-table-column - label="订单金额" + label="服务金额" prop="orderAmount" align="center" width="100" @@ -77,7 +111,7 @@ label="暂停天数" prop="pauseTotalDay" align="center" - width="100" + width="80" ></el-table-column> <el-table-column @@ -87,7 +121,7 @@ width="100" ></el-table-column> <el-table-column - label="当月总额" + label="当月成交额" prop="monthOrderTotalAmount" align="center" width="100" @@ -96,7 +130,7 @@ label="提成比例" prop="commissionRate" align="center" - width="100" + width="80" > <template slot-scope="scope"> {{ scope.row.commissionRate + "%" }} @@ -108,7 +142,7 @@ align="center" width="100" > - <template slot-scope="scope"> + <template slot-scope="scope"> {{ scope.row.orderCommission }} <el-popover placement="top-start" @@ -117,7 +151,8 @@ trigger="hover" > <div - v-for="(item, index) in scope.row.everyYearMonthServerCommission" + v-for="(item, index) in scope.row + .everyYearMonthServerCommission" :key="index" > {{ item }} @@ -126,10 +161,36 @@ </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" @@ -139,16 +200,22 @@ :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: {}, + components: { + "order-detail": OrderDetail, + }, data() { return { visible: false, @@ -158,60 +225,98 @@ export default { orderList: [], queryParam: {}, total: 0, + totalServerAmount: 0, totalCommission: 0, - serverDayList: ["1月:30", "2月:20"], + totalSendCommission: 0, + totalNotSendCommission: 0, + serverDateScope: null, }; }, computed: {}, methods: { showDrawer(data) { this.data = data; + this.serverDateScope = null; if (!this.data) { return; } - (this.queryParam = { + this.queryParam = { pageNum: 1, pageSize: 10, - }), - (this.queryParam.userId = this.data.userId); + }, + this.queryParam.userId = this.data.userId; this.queryParam.reviewStatus = this.data.reviewStatus; this.queryParam.endTime = this.data.endTime; - this.title = `「${this.data.name}」订单提成列表`; + 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] + "天"); + 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]); + 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> @@ -223,4 +328,23 @@ export default { .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> 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 6fd2bbea1..22dec651b 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)" >查看发放计划</el-button > - <el-button + <!--<el-button type="text" @click="handleDetailClick(scope.row)" >查看订单详情</el-button - > + >--> </template> </el-table-column> @@ -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 2/2] =?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<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()); - //每年每月提成是否发放状态 - Map<String, Boolean> 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<SysOrderCommisionDayDetail> orderDetailList, SysCommissionDayDetail sysCommissionDayDetail){ + public void dealServerOrderCommissionDetail(SysCommision commisionParam, List<SysOrderCommisionDayDetail> orderDetailList, SysCommissionDayDetail sysCommissionDayDetail){ //总提成 - BigDecimal totalCommissionAmount = new BigDecimal(0); - //已发放提成 - BigDecimal totalHasSentCommissionAmount = new BigDecimal(0); - //未发放提成记录 - List<Map<String, Object>> sendDetailList = new ArrayList<>(); - if(orderDetailList != null){ - //获取每个月的成交总额度 - Map<String, BigDecimal> orderAmount = new TreeMap<>(new MyComparator()); - Set<String> commissionMonthSet = new TreeSet<>(new MyComparator()); - for (SysOrderCommisionDayDetail sysOrderCommisionDayDetail : orderDetailList) { - String yearMonth = sysOrderCommisionDayDetail.getOrderTime().getYear()+""+sysOrderCommisionDayDetail.getOrderTime().getMonth().getValue(); - if(orderAmount.containsKey(yearMonth)){ - orderAmount.put(yearMonth, orderAmount.get(yearMonth).add(sysOrderCommisionDayDetail.getOrderAmount())); - }else{ - orderAmount.put(yearMonth, sysOrderCommisionDayDetail.getOrderAmount()); - } - commissionMonthSet.addAll(sysOrderCommisionDayDetail.getEveryYearMonthServerMoney().keySet()); - } - //获取提成比例以及计算提成 - Map<String, Float> rateMap = getRateByAmount(sysCommissionDayDetail.getUserId(), sysCommissionDayDetail.getPostId(), orderAmount); + sysCommissionDayDetail.setTotalCommissionAmount(BigDecimal.valueOf(0)); + //总共已发提成 + sysCommissionDayDetail.setTotalHasSentCommissionAmount(BigDecimal.valueOf(0)); + //总共未发提成 + sysCommissionDayDetail.setTotalNotSentCommissionAmount(BigDecimal.valueOf(0)); + //提成发放计划 + sysCommissionDayDetail.setSendDetailList(new ArrayList<>()); + //下月应发提成 + sysCommissionDayDetail.setNextMonthCommission(BigDecimal.valueOf(0)); - int i = 1; - BigDecimal commissionA = new BigDecimal(0); - for (String ym : commissionMonthSet) { - BigDecimal ym_mession = new BigDecimal(0); - if(orderAmount.containsKey(ym)){ - totalCommissionAmount = totalCommissionAmount.add(getMoney(orderAmount.get(ym).doubleValue() * rateMap.get(ym) / 100D)); + if(orderDetailList == null || orderDetailList.size() == 0 ){ + return; + } + + //总提成 + BigDecimal totalCommissionAmount = BigDecimal.valueOf(0); + //已发放提成 + BigDecimal totalHasSentCommissionAmount = BigDecimal.valueOf(0); + //未发放提成 + BigDecimal totalNotHasSentCommissionAmount = BigDecimal.valueOf(0); + //已发放提成记录 + List<Map<String, Object>> hasSendYearMonthDetailList = new ArrayList<>(); + //未发放提成计划 + List<Map<String, Object>> notHasSendYearMonthDetailList = new ArrayList<>(); + + //获取每个月的成交总额度 + commisionParam.setUserId(sysCommissionDayDetail.getUserId()); + List<EveryMonthTotalAmount> everyMonthTotalAmountList = sysOrderMapper.getTotalAmountByUserId(commisionParam); + if(everyMonthTotalAmountList == null || everyMonthTotalAmountList.size() == 0){ + return; + } + Map<String, BigDecimal> everyMonthTotalAmountMap = new TreeMap<>(new MyComparator()); + for (EveryMonthTotalAmount everyMonthTotalAmount : everyMonthTotalAmountList) { + everyMonthTotalAmountMap.put(everyMonthTotalAmount.getYearMonth(), everyMonthTotalAmount.getTotalAmount()); + } + //获取每个月的提成比例以及计算提成 + Map<String, Float> rateMap = getRateByAmount(sysCommissionDayDetail.getUserId(), sysCommissionDayDetail.getPostId(), everyMonthTotalAmountMap); + + //存在提成的年月 + Set<String> commissionYearMonthSet = new TreeSet<>(new MyComparator()); + for (SysOrderCommisionDayDetail sysOrderCommisionDayDetail : orderDetailList) { + //处理订单提成 + 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(); - 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<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++; + } + 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<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); } /**判断该月提成是否已发放*/ @@ -411,7 +451,7 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { //服务总天数 int realServerDay = getTotalByMap(realEveryYearMonthServerDay); //每年每月对于金额 - Map<String, BigDecimal> realEveryYearMonthServerMoney = getEveryMonthServerMoney(realEveryYearMonthServerDay, orderAmount, dayMoney, serverEndDate); + Map<String, BigDecimal> 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<String, BigDecimal> getEveryMonthServerMoney(Map<String, Integer> everyMonthServerDay, BigDecimal orderMoney, BigDecimal dayMoney, LocalDate serverEndTime){ Map<String, BigDecimal > everyMonthServerMoney = new TreeMap<>(new MyComparator()); Set<String> keySet = everyMonthServerDay.keySet(); - int i = 1; 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<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; + } + /** * 根据订单服务开始日期、订单服务结束日期、营养师或售后实际开始时间、营养师或售后实际结束时间,统计出实际时间范围内每年每月对应的天数 * */ @@ -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)" >查看发放计划</el-button > - <!--<el-button + <el-button type="text" @click="handleDetailClick(scope.row)" >查看订单详情</el-button - >--> + > </template> </el-table-column> @@ -186,6 +186,7 @@ :data="sendCommissionPlan.list" show-summary :summary-method="getSummaries" + style="height:400px;overflow: auto" > <el-table-column property="nickName" @@ -214,7 +215,7 @@ <OrdercommissDetail ref="ordercommissDetailRef"></OrdercommissDetail> </div> - + </template> <style>