提成明细优化
This commit is contained in:
		@@ -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;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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());*/
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user