Kaynağa Gözat

优化 欠费缴费时 的 数据问题 导致程序异常问题

java110 3 yıl önce
ebeveyn
işleme
5455344826

+ 11 - 0
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java

@@ -150,6 +150,17 @@ public class DateUtil {
         }
     }
 
+    public static Date getDateFromStringA(String date){
+        SimpleDateFormat sDateFormat = getDateFormat(DateUtil.DATE_FORMATE_STRING_A);
+        try{
+            synchronized (sDateFormat) {
+                return sDateFormat.parse(date);
+            }
+        }catch (Exception e){
+            throw new IllegalArgumentException(e);
+        }
+    }
+
     public static Date getDefaultDateFromString(String date)
             throws ParseException {
         return getDateFromString(date, "yyyyMMddHHmmss");

+ 4 - 5
service-api/src/main/java/com/java110/api/bmo/fee/impl/FeeBMOImpl.java

@@ -338,17 +338,16 @@ public class FeeBMOImpl extends ApiBaseBMO implements IFeeBMO {
             feeMap.put("state", FeeDto.STATE_FINISH);
         }
         Date maxEndTime = feeInfo.getConfigEndTime();
-        if(!FeeDto.FEE_FLAG_CYCLE.equals(feeInfo.getFeeFlag())){
+        if (!FeeDto.FEE_FLAG_CYCLE.equals(feeInfo.getFeeFlag())) {
             maxEndTime = feeInfo.getDeadlineTime();
         }
-        try {
-            Date endTime = DateUtil.getDateFromString(paramInJson.getString("endTime"), DateUtil.DATE_FORMATE_STRING_A);
+        if(maxEndTime != null) { //这里数据问题的情况下
+            Date endTime = DateUtil.getDateFromStringA(paramInJson.getString("endTime"));
             if (endTime.getTime() >= maxEndTime.getTime()) {
                 feeMap.put("state", FeeDto.STATE_FINISH);
             }
-        } catch (ParseException e) {
-            throw new IllegalArgumentException("缴费异常" + e);
         }
+
         businessFee.putAll(feeMap);
         business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put(PayFeePo.class.getSimpleName(), businessFee);
         return business;

+ 3 - 5
service-fee/src/main/java/com/java110/fee/bmo/fee/impl/FeeBMOImpl.java

@@ -345,16 +345,14 @@ public class FeeBMOImpl extends ApiBaseBMO implements IFeeBMO {
             feeMap.put("state", FeeDto.STATE_FINISH);
         }
         Date maxEndTime = feeInfo.getConfigEndTime();
-        if(!FeeDto.FEE_FLAG_CYCLE.equals(feeInfo.getFeeFlag())){
+        if (!FeeDto.FEE_FLAG_CYCLE.equals(feeInfo.getFeeFlag())) {
             maxEndTime = feeInfo.getDeadlineTime();
         }
-        try {
-            Date endTime = DateUtil.getDateFromString(paramInJson.getString("endTime"), DateUtil.DATE_FORMATE_STRING_A);
+        if(maxEndTime != null) { //这里数据问题的情况下
+            Date endTime = DateUtil.getDateFromStringA(paramInJson.getString("endTime"));
             if (endTime.getTime() >= maxEndTime.getTime()) {
                 feeMap.put("state", FeeDto.STATE_FINISH);
             }
-        } catch (ParseException e) {
-            throw new IllegalArgumentException("缴费异常" + e);
         }
         businessFee.putAll(feeMap);
         business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put(PayFeePo.class.getSimpleName(), businessFee);

+ 4 - 2
service-fee/src/main/java/com/java110/fee/cmd/fee/PayBatchFeeCmd.java

@@ -407,8 +407,10 @@ public class PayBatchFeeCmd extends Cmd {
             maxEndTime = feeInfo.getConfigEndTime();
         }
         //判断 结束时间 是否大于 费用项 结束时间,这里 容错一下,如果 费用结束时间大于 费用项结束时间 30天 走报错 属于多缴费
-        if (feeInfo.getEndTime().getTime() - maxEndTime.getTime() > 30 * 24 * 60 * 60 * 1000L) {
-            throw new IllegalArgumentException("缴费超过了 费用项结束时间");
+        if(maxEndTime != null) {
+            if (feeInfo.getEndTime().getTime() - maxEndTime.getTime() > 30 * 24 * 60 * 60 * 1000L) {
+                throw new IllegalArgumentException("缴费超过了 费用项结束时间");
+            }
         }
         Map feeMap = BeanConvertUtil.beanCovertMap(feeInfo);
         feeMap.put("startTime", DateUtil.getFormatTimeString(feeInfo.getStartTime(), DateUtil.DATE_FORMATE_STRING_A));

+ 4 - 2
service-fee/src/main/java/com/java110/fee/cmd/fee/PayFeeCmd.java

@@ -682,8 +682,10 @@ public class PayFeeCmd extends Cmd {
         }
 
         //判断 结束时间 是否大于 费用项 结束时间,这里 容错一下,如果 费用结束时间大于 费用项结束时间 30天 走报错 属于多缴费
-        if (feeInfo.getEndTime().getTime() - maxEndTime.getTime() > 30 * 24 * 60 * 60 * 1000L) {
-            throw new IllegalArgumentException("缴费超过了 费用项结束时间");
+        if(maxEndTime != null) {
+            if (feeInfo.getEndTime().getTime() - maxEndTime.getTime() > 30 * 24 * 60 * 60 * 1000L) {
+                throw new IllegalArgumentException("缴费超过了 费用项结束时间");
+            }
         }
         Map feeMap = BeanConvertUtil.beanCovertMap(feeInfo);
         feeMap.put("startTime", DateUtil.getFormatTimeString(feeInfo.getStartTime(), DateUtil.DATE_FORMATE_STRING_A));