Kaynağa Gözat

optimize pay fee detail to month

java110 2 yıl önce
ebeveyn
işleme
d6c57faee4

+ 5 - 1
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java

@@ -33,6 +33,8 @@ public class DateUtil {
     public static final String DATE_FORMATE_STRING_M = "yyyyMM";
     public static final String DATE_FORMATE_STRING_M = "yyyyMM";
     public static final String DATE_FORMATE_STRING_N = "HHmmss";
     public static final String DATE_FORMATE_STRING_N = "HHmmss";
     public static final String DATE_FORMATE_STRING_O = "yyyyMMddHHmm";
     public static final String DATE_FORMATE_STRING_O = "yyyyMMddHHmm";
+    public static final String DATE_FORMATE_STRING_Q = "yyyy-MM";
+
 
 
 
 
     static {
     static {
@@ -52,6 +54,8 @@ public class DateUtil {
         formats.put("yyyyMM", new SimpleDateFormat("yyyyMM"));
         formats.put("yyyyMM", new SimpleDateFormat("yyyyMM"));
         formats.put("HHmmss", new SimpleDateFormat("HHmmss"));
         formats.put("HHmmss", new SimpleDateFormat("HHmmss"));
         formats.put("yyyyMMddHHmm", new SimpleDateFormat("yyyyMMddHHmm"));
         formats.put("yyyyMMddHHmm", new SimpleDateFormat("yyyyMMddHHmm"));
+        formats.put("yyyy-MM", new SimpleDateFormat("yyyy-MM"));
+
     }
     }
 
 
 
 
@@ -722,7 +726,7 @@ public class DateUtil {
      * @return:list
      * @return:list
      */
      */
     public static List<String> getMonthBetweenDate(String startTime, String endTime) {
     public static List<String> getMonthBetweenDate(String startTime, String endTime) {
-        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMATE_STRING_M);
+        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMATE_STRING_Q);
         // 声明保存日期集合
         // 声明保存日期集合
         List<String> list = new ArrayList<>();
         List<String> list = new ArrayList<>();
         try {
         try {

+ 10 - 14
java110-utils/src/test/java/com/java110/utils/AppTest.java

@@ -6,6 +6,7 @@ import junit.framework.TestCase;
 import junit.framework.TestSuite;
 import junit.framework.TestSuite;
 
 
 import java.util.Calendar;
 import java.util.Calendar;
+import java.util.List;
 
 
 /**
 /**
  * Unit test for simple App.
  * Unit test for simple App.
@@ -36,21 +37,16 @@ public class AppTest
      */
      */
     public void testApp()
     public void testApp()
     {
     {
-        Calendar today = Calendar.getInstance();
-        today.setTime(DateUtil.getDateFromStringB("2022-12-26"));
-        int week = today.get(Calendar.WEEK_OF_MONTH);
-        int curDay = today.get(Calendar.DAY_OF_WEEK);
-
-        //一周第一天是否为星期天
-        boolean isFirstSunday = (today.getFirstDayOfWeek() == Calendar.SUNDAY);
-        //获取周几
-        //若一周第一天为星期天,则-1
-        if (isFirstSunday) {
-            curDay = curDay - 1;
-            if (curDay == 0) {
-                curDay = 7;
-            }
+        String startTime = "2023-03-02 04:00:00";
+        String endTime = "2024-01-01 00:00:00";
+
+
+        List<String> months = DateUtil.getMonthBetweenDate(startTime,endTime);
+
+        for(String month : months) {
+            System.out.println(month);
         }
         }
 
 
+
     }
     }
 }
 }

+ 9 - 2
service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java

@@ -164,12 +164,19 @@ public class PayFeeMonthHelp implements IPayFeeMonthHelp {
         Map<String, MonthFeeDetailDto> monthFeeDetailDtos = new HashMap<>();
         Map<String, MonthFeeDetailDto> monthFeeDetailDtos = new HashMap<>();
 
 
         for (FeeDetailDto feeDetailDto : feeDetailDtos) {
         for (FeeDetailDto feeDetailDto : feeDetailDtos) {
+            Date endTime =  feeDetailDto.getEndTime();
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(endTime);
+            calendar.add(Calendar.DAY_OF_MONTH,-1);
+            if(feeDetailDto.getStartTime().getTime()< calendar.getTime().getTime()){
+                endTime = calendar.getTime();
+            }
             //计算两个日期包含的月份
             //计算两个日期包含的月份
-            List<String> months = DateUtil.getMonthBetweenDate(feeDetailDto.getStartTime(), feeDetailDto.getEndTime());
+            List<String> months = DateUtil.getMonthBetweenDate(feeDetailDto.getStartTime(), endTime);
 
 
             if (months == null || months.size() < 1) {
             if (months == null || months.size() < 1) {
                 putReceivedAmountToMonthFeeDetailDtos(monthFeeDetailDtos,
                 putReceivedAmountToMonthFeeDetailDtos(monthFeeDetailDtos,
-                        DateUtil.getFormatTimeString(feeDetailDto.getStartTime(), DateUtil.DATE_FORMATE_STRING_M),
+                        DateUtil.getFormatTimeString(feeDetailDto.getStartTime(), DateUtil.DATE_FORMATE_STRING_Q),
                         Double.parseDouble(feeDetailDto.getReceivedAmount()),
                         Double.parseDouble(feeDetailDto.getReceivedAmount()),
                         feeDetailDto);
                         feeDetailDto);
                 continue;
                 continue;