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