From 54a85886ceb6d7550bbde1494e67d7403d560940 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期四, 20 八月 2020 15:11:25 +0800
Subject: [PATCH] 优化费用

---
 service-fee/src/main/java/com/java110/fee/listener/fee/UpdateFeeInfoListener.java |   79 +++++++++++++++++++++++++++++++++++++--
 1 files changed, 74 insertions(+), 5 deletions(-)

diff --git a/service-fee/src/main/java/com/java110/fee/listener/fee/UpdateFeeInfoListener.java b/service-fee/src/main/java/com/java110/fee/listener/fee/UpdateFeeInfoListener.java
index 51929f4..fd7f594 100644
--- a/service-fee/src/main/java/com/java110/fee/listener/fee/UpdateFeeInfoListener.java
+++ b/service-fee/src/main/java/com/java110/fee/listener/fee/UpdateFeeInfoListener.java
@@ -2,18 +2,18 @@
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.java110.intf.order.IOrderInnerServiceSMO;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
 import com.java110.dto.order.BusinessDto;
+import com.java110.entity.center.Business;
 import com.java110.fee.dao.IFeeDetailServiceDao;
+import com.java110.fee.dao.IFeeServiceDao;
+import com.java110.intf.order.IOrderInnerServiceSMO;
 import com.java110.po.fee.PayFeePo;
 import com.java110.utils.constant.*;
 import com.java110.utils.exception.ListenerExecuteException;
 import com.java110.utils.lock.DistributedLock;
 import com.java110.utils.util.Assert;
-import com.java110.core.annotation.Java110Listener;
-import com.java110.core.context.DataFlowContext;
-import com.java110.entity.center.Business;
-import com.java110.fee.dao.IFeeServiceDao;
 import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
 import org.slf4j.Logger;
@@ -120,6 +120,18 @@
         List<BusinessDto> businessDtos = orderInnerServiceSMOImpl.querySameOrderBusiness(businessDto);
         Assert.listOnlyOne(businessDtos, "瀛樺湪澶氭潯缂磋垂璁板綍鎴栨病鏈�");
 
+        //鏌ヨ鏄惁涓洪��璐归�昏緫
+        businessDto = new BusinessDto();
+        businessDto.setbId(business.getbId());
+        businessDto.setBusinessTypeCd("621100040001");
+        List<BusinessDto> returnPayFeeDtos = orderInnerServiceSMOImpl.querySameOrderBusiness(businessDto);
+
+
+        if (returnPayFeeDtos != null && returnPayFeeDtos.size() > 0) {
+            returnPayFee(businessFeeInfos, businessDtos, dataFlowContext, business, returnPayFeeDtos);
+            return;
+        }
+
         //鏌ヨ璐圭敤鏄庣粏杩囩▼琛�
         Map feeDetailInfo = new HashMap();
         feeDetailInfo.put("bId", businessDtos.get(0).getbId());
@@ -183,8 +195,65 @@
                 }
             }
         }
+    }
+
+    private void returnPayFee(List<Map> businessFeeInfos, List<BusinessDto> businessDtos, DataFlowContext dataFlowContext, Business business, List<BusinessDto> returnPayFeeDtos) {
+        //鏌ヨ璐圭敤鏄庣粏杩囩▼琛�
+        Map feeDetailInfo = new HashMap();
+        feeDetailInfo.put("bId", businessDtos.get(0).getbId());
+        feeDetailInfo.put("operate", "ADD");
+        List<Map> feeDetails = feeDetailServiceDaoImpl.getBusinessFeeDetailInfo(feeDetailInfo);
+        Assert.listOnlyOne(feeDetails, "business琛ㄤ腑瀛樺湪澶氭潯缂磋垂璁板綍鎴栨病鏈�");
+        String cyclesStr = feeDetails.get(0).get("cycles").toString();
+        double cycles = Double.parseDouble(cyclesStr);
+
+        Map feeMap = null;
+        if (businessFeeInfos != null && businessFeeInfos.size() > 0) {
+            for (int _feeIndex = 0; _feeIndex < businessFeeInfos.size(); _feeIndex++) {
+                Map businessFeeInfo = businessFeeInfos.get(_feeIndex);
+                //寮�濮嬮攣浠g爜
+                String requestId = DistributedLock.getLockUUID();
+                String key = this.getClass().getSimpleName() + businessFeeInfo.get("fee_id");
+                try {
+                    DistributedLock.waitGetDistributedLock(key, requestId);
+                    //杩欓噷鑰冭檻骞跺彂闂
+                    feeMap = new HashMap();
+                    feeMap.put("feeId", businessFeeInfo.get("fee_id"));
+                    feeMap.put("communityId", businessFeeInfo.get("community_id"));
+                    feeMap.put("statusCd", "0");
+                    List<Map> feeInfo = feeServiceDaoImpl.getFeeInfo(feeMap);
+                    Assert.listOnlyOne(feeInfo, "鏌ヨ鍒板鏉℃暟鎹垨鏈煡璇㈠埌鏁版嵁" + feeMap);
+                    //鏍规嵁褰撳墠鐨勭粨鏉熸椂闂� 淇敼
+                    Date endTime = (Date) feeInfo.get(0).get("end_time");
+
+                    Calendar endCalender = Calendar.getInstance();
+                    endCalender.setTime(endTime);
+                    if (StringUtil.isNumber(cyclesStr)) {
+                        endCalender.add(Calendar.MONTH, new Double(cycles).intValue());
+                    } else {
+                        int hours = new Double(cycles * DateUtil.getCurrentMonthDay() * 24).intValue();
+                        endCalender.add(Calendar.HOUR, hours);
+                    }
+                    businessFeeInfo.put("end_time", endCalender.getTime());
 
 
+                    // 涓�娆℃�ф敹璐圭被鍨嬶紝缂磋垂鍚庯紝鍒欒缃垂鐢ㄧ姸鎬佷负鏀惰垂缁撴潫銆佽缃粨鏉熸棩鏈熶负璐圭敤椤圭粓姝㈡棩鏈�
+                    if (FeeFlagTypeConstant.ONETIME.equals(feeInfo.get(0).get("feeFlag"))) {
+                        //鎶奸噾鐨勮瘽璐圭敤鐩存帴缁撴潫
+                        businessFeeInfo.put("state", "888800010006".equals(feeInfo.get(0).get("feeTypeCd")) ? FeeStateConstant.END : FeeStateConstant.CHARGING);
+                        businessFeeInfo.put("end_time", feeInfo.get(0).get("startTime"));
+                    }
+
+                    flushBusinessFeeInfo(businessFeeInfo, StatusConstant.STATUS_CD_VALID);
+                    feeServiceDaoImpl.updateFeeInfoInstance(businessFeeInfo);
+                    if (businessFeeInfo.size() == 1) {
+                        dataFlowContext.addParamOut("feeId", businessFeeInfo.get("fee_id"));
+                    }
+                } finally {
+                    DistributedLock.releaseDistributedLock(requestId, key);
+                }
+            }
+        }
     }
 
     /**

--
Gitblit v1.8.0