From 40f773f8b6e4b39ec04348be9fa6e0cc7afdaf98 Mon Sep 17 00:00:00 2001
From: xiezhijun <15270898033@163.com>
Date: Mon, 12 Apr 2021 18:15:08 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=88=B0=E6=9C=9F=E6=97=B6?=
 =?UTF-8?q?=E9=97=B4=E4=BD=BF=E7=94=A8=E6=96=B0=E7=AE=97=E6=B3=95=E8=AE=A1?=
 =?UTF-8?q?=E7=AE=97=EF=BC=8C=E7=9B=B4=E6=8E=A5=E5=8A=A0=E5=A4=A9=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../impl/SysCommissionDayServiceImpl.java     | 49 +++++++++++++++----
 1 file changed, 39 insertions(+), 10 deletions(-)

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 f7d1b3ba0..c7a1de60f 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
@@ -38,6 +38,9 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
     @Autowired
     private ISysOrderNutritionistReplaceRecordService sysOrderNutritionistReplaceRecordService;
 
+    //2021-04-13开始使用新的算法计算服务结束日期,直接加上对应天数
+    public static final LocalDate newVersionServerDateStartDate = DateUtils.stringToLocalDate("2021-04-13", "yyyy-MM-dd");
+
     @Override
     public List<SysCommissionDayDetail> calculateCommissionByDay(SysCommision sysCommision){
         List<SysCommissionDayDetail> result = new ArrayList<>();
@@ -85,14 +88,10 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
         if(sysOrder != null && sysOrder.getStartTime() != null){
             //服务开始时间,食谱开始时间
             LocalDate serverStartDate = DateUtils.dateToLocalDate(sysOrder.getStartTime());
-            //订单总服务月数
-            int serverMonth = sysOrder.getServeTimeId() != null ? sysOrder.getServeTimeId().intValue()/30 : 0;
-            //服务天数(不满一个月的零头)
-            int serverSmallDay = sysOrder.getServeTimeId().intValue()%30 - (serverMonth > 0 ? 0 : 1);
-            //赠送时长
-            int giveDay = sysOrder.getGiveServeDay() != null ? sysOrder.getGiveServeDay().intValue() : 0;
-            //服务到期时间(加赠送时间,不加暂停时间)
-            serverEndDate = serverStartDate.plusMonths(serverMonth).plusDays(giveDay+serverSmallDay);
+
+            //计算基础服务到期时间(不包含暂停)
+            serverEndDate = getBaseServerEndDate(sysOrder);
+
             List<SysOrderPause> pausesList = new ArrayList<>();
             if(sysOrder.getOrderId() != null){
                 SysOrderPause sysOrderPause = new SysOrderPause();
@@ -110,6 +109,36 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
         return serverEndDate;
     }
 
+    /**
+     * 计算基础服务到期时间,食谱计划、提成计算服务到期时间共用方法(不包含暂停)
+     * @param sysOrder
+     * @return
+     */
+    public LocalDate getBaseServerEndDate(SysOrder sysOrder){
+        LocalDate serverEndDate = null;
+        //服务开始时间,食谱开始时间
+        LocalDate serverStartDate = DateUtils.dateToLocalDate(sysOrder.getStartTime());
+        //成交时间
+        LocalDate orderDate = DateUtils.dateToLocalDate(sysOrder.getOrderTime());
+        //大于界限时间
+        if(ChronoUnit.DAYS.between(newVersionServerDateStartDate, orderDate) >= 0){
+            //订单总服务天数
+            long serverDay = sysOrder.getServeTimeId() != null ? sysOrder.getServeTimeId() : 0L;
+            serverDay += sysOrder.getGiveServeDay() != null ? sysOrder.getGiveServeDay().intValue() : 0;
+            serverEndDate = serverStartDate.plusDays(serverDay - 1);
+        }else{
+            //订单总服务月数
+            int serverMonth = sysOrder.getServeTimeId() != null ? sysOrder.getServeTimeId().intValue()/30 : 0;
+            //服务天数(不满一个月的零头)
+            int serverSmallDay = sysOrder.getServeTimeId().intValue()%30 - (serverMonth > 0 ? 0 : 1);
+            //赠送时长
+            int giveDay = sysOrder.getGiveServeDay() != null ? sysOrder.getGiveServeDay().intValue() : 0;
+            //服务到期时间(加赠送时间,不加暂停时间)
+            serverEndDate = serverStartDate.plusMonths(serverMonth).plusDays(giveDay+serverSmallDay);
+        }
+        return serverEndDate;
+    }
+
     /**
      * 计算订单提成详情
      * @param sysCommision
@@ -570,11 +599,11 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
         //订单总服务月数
         int serverMonth = sysOrder.getServeTimeId().intValue()/30;
         //服务天数(不满一个月的零头)
-        int serverSmallDay = sysOrder.getServeTimeId().intValue()%30 - (serverMonth > 0 ? 0 : 1);
+        //int serverSmallDay = sysOrder.getServeTimeId().intValue()%30 - (serverMonth > 0 ? 0 : 1);
         //赠送时长
         int giveDay = sysOrder.getGiveServeDay().intValue();
         //服务到期时间(加赠送时间,不加暂停时间)
-        LocalDate serverEndDate = sysOrder.getServerEndTime() == null ? serverStartDate.plusMonths(serverMonth).plusDays(giveDay+serverSmallDay) : DateUtils.dateToLocalDate(sysOrder.getServerEndTime());
+        LocalDate serverEndDate = sysOrder.getServerEndTime() == null ? getBaseServerEndDate(sysOrder) : DateUtils.dateToLocalDate(sysOrder.getServerEndTime());
         //订单金额
         BigDecimal orderAmount = sysOrder.getAmount();
         //查询暂停列表