From 627f3930f06a41db3d9b59a7ed06689a6d939b30 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期四, 10 九月 2020 23:44:15 +0800
Subject: [PATCH] 优化代码

---
 service-fee/src/main/java/com/java110/fee/bmo/importFee/impl/FeeSharingBMOImpl.java |  171 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 150 insertions(+), 21 deletions(-)

diff --git a/service-fee/src/main/java/com/java110/fee/bmo/importFee/impl/FeeSharingBMOImpl.java b/service-fee/src/main/java/com/java110/fee/bmo/importFee/impl/FeeSharingBMOImpl.java
index 7b65ec1..08f0762 100644
--- a/service-fee/src/main/java/com/java110/fee/bmo/importFee/impl/FeeSharingBMOImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/bmo/importFee/impl/FeeSharingBMOImpl.java
@@ -4,15 +4,26 @@
 import com.java110.core.annotation.Java110Transactional;
 import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.dto.RoomDto;
+import com.java110.dto.fee.FeeAttrDto;
+import com.java110.dto.fee.FeeConfigDto;
 import com.java110.dto.fee.FeeDto;
 import com.java110.dto.feeFormula.FeeFormulaDto;
 import com.java110.fee.bmo.importFee.IFeeSharingBMO;
+import com.java110.intf.IImportFeeDetailInnerServiceSMO;
 import com.java110.intf.community.IRoomInnerServiceSMO;
+import com.java110.intf.fee.IFeeAttrInnerServiceSMO;
+import com.java110.intf.fee.IFeeConfigInnerServiceSMO;
 import com.java110.intf.fee.IFeeFormulaInnerServiceSMO;
 import com.java110.intf.fee.IFeeInnerServiceSMO;
 import com.java110.intf.fee.IImportFeeInnerServiceSMO;
+import com.java110.po.fee.FeeAttrPo;
+import com.java110.po.fee.PayFeeConfigPo;
 import com.java110.po.fee.PayFeePo;
+import com.java110.po.importFee.ImportFeePo;
+import com.java110.po.importFeeDetail.ImportFeeDetailPo;
 import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
@@ -20,11 +31,14 @@
 
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 
 @Service("feeSharingBMOImpl")
 public class FeeSharingBMOImpl implements IFeeSharingBMO {
+
+    private static final String IMPORT_FEE_NAME = "瀵煎叆璐圭敤";
 
     @Autowired
     private IImportFeeInnerServiceSMO importFeeInnerServiceSMOImpl;
@@ -37,6 +51,15 @@
 
     @Autowired
     private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl;
+
+    @Autowired
+    private IImportFeeDetailInnerServiceSMO importFeeDetailInnerServiceSMOImpl;
 
     /**
      * 娣诲姞灏忓尯淇℃伅
@@ -69,6 +92,20 @@
             throw new IllegalArgumentException("鏈壘鍒扮浉搴旀埧灞嬪叕鎽婅垂鐢�");
         }
 
+        FeeConfigDto feeConfigDto = new FeeConfigDto();
+        feeConfigDto.setFeeTypeCd(reqJson.getString("feeTypeCd"));
+        feeConfigDto.setFeeName(IMPORT_FEE_NAME);
+        feeConfigDto.setCommunityId(reqJson.getString("communityId"));
+        List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
+        // 鏍规嵁璐圭敤澶х被 鍒ゆ柇鏄惁鏈夊瓨鍦� 璐圭敤瀵煎叆鏀跺叆椤�
+        if (feeConfigDtos == null || feeConfigDtos.size() < 1) {
+            //鐢熸垚瀵煎叆璐�
+            feeConfigDto.setConfigId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_configId));
+            saveFeeConfig(feeConfigDto);
+        } else {
+            feeConfigDto.setConfigId(feeConfigDtos.get(0).getConfigId());
+        }
+
         FeeFormulaDto feeFormulaDto = new FeeFormulaDto();
         feeFormulaDto.setCommunityId(reqJson.getString("communityId"));
         feeFormulaDto.setFormulaId(reqJson.getString("formulaId"));
@@ -80,7 +117,7 @@
         String formulaValue = deakFormula(feeFormulaDtos.get(0));
 
         //鍏憡璐圭敤鍒版埧灞�
-        sharingFeeToRoom(formulaValue, roomDtos, reqJson);
+        sharingFeeToRoom(formulaValue, feeFormulaDtos.get(0).getPrice(), roomDtos, reqJson, feeConfigDto);
 
 
         return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "淇濆瓨澶辫触");
@@ -92,13 +129,42 @@
      * @param formulaValue
      * @param roomDtos
      */
-    private void sharingFeeToRoom(String formulaValue, List<RoomDto> roomDtos, JSONObject reqJson) {
+    private void sharingFeeToRoom(String formulaValue, double price, List<RoomDto> roomDtos,
+                                  JSONObject reqJson, FeeConfigDto feeConfigDto) {
 
 
         List<PayFeePo> payFeePos = new ArrayList<>();
+        List<FeeAttrPo> feeAttrPos = new ArrayList<>();
+        List<ImportFeeDetailPo> importFeeDetailPos = new ArrayList<>();
+        String importFeeId = GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId);
         for (RoomDto roomDto : roomDtos) {
-            doSharingFeeToRoom(formulaValue, roomDto, reqJson, payFeePos);
+            doSharingFeeToRoom(formulaValue, price, roomDto, reqJson, payFeePos, feeConfigDto, feeAttrPos, importFeeId, importFeeDetailPos);
         }
+
+        feeInnerServiceSMOImpl.saveFee(payFeePos);
+
+        feeAttrInnerServiceSMOImpl.saveFeeAttrs(feeAttrPos);
+
+        //淇濆瓨鏃ュ織
+        ImportFeePo importFeePo = new ImportFeePo();
+        importFeePo.setCommunityId(reqJson.getString("communityId"));
+        importFeePo.setFeeTypeCd(reqJson.getString("feeTypeCd"));
+        importFeePo.setImportFeeId(importFeeId);
+        String scope = reqJson.getString("scope");
+        String scopeName = "";
+        if ("1001".equals(scope)) {//灏忓尯
+            scopeName = "鏁翠釜灏忓尯";
+        } else if ("2002".equals(scope)) {//妤兼爧
+            scopeName = roomDtos.get(0).getFloorNum() + "鏍�";
+        } else {//鍗曞厓
+            scopeName = roomDtos.get(0).getFloorNum() + "鏍�" + roomDtos.get(0).getUnitNum() + "鍗曞厓";
+        }
+        importFeePo.setRemark("鎬讳娇鐢ㄩ噺锛�" + reqJson.getString("totalDegrees")
+                + ",鍏紡锛�" + formulaValue + ",鍏憡鑼冨洿锛�" + scopeName);
+        importFeeInnerServiceSMOImpl.saveImportFee(importFeePo);
+
+        importFeeDetailInnerServiceSMOImpl.saveImportFeeDetails(importFeeDetailPos);
+
     }
 
     /**
@@ -114,18 +180,10 @@
      * @param formulaValue
      * @param roomDto
      */
-    private void doSharingFeeToRoom(String formulaValue, RoomDto roomDto, JSONObject reqJson, List<PayFeePo> payFeePos) {
-        Assert.hasKeyAndValue(reqJson, "communityId", "鏈寘鍚皬鍖篒D");
-        Assert.hasKeyAndValue(reqJson, "totalDegrees", "鏈寘鍚娇鐢ㄩ噺");
-        Assert.hasKeyAndValue(reqJson, "scope", "鏈寘鍚叕鎽婅寖鍥�");
-        Assert.hasKeyAndValue(reqJson, "formulaId", "鏈寘鍚叕鎽婂叕寮�");
-        Assert.hasKeyAndValue(reqJson, "feeName", "鏈寘鍚垂鐢ㄥ悕绉�");
-        Assert.hasKeyAndValue(reqJson, "startTime", "鏈寘鍚紑濮嬫椂闂�");
-        Assert.hasKeyAndValue(reqJson, "endTime", "鏈寘鍚粨鏉熸椂闂�");
-        Assert.hasKeyAndValue(reqJson, "objId", "鏈寘鍚叕鎽婂璞�");
-        Assert.hasKeyAndValue(reqJson, "feeTypeCd", "鏈寘鍚垂鐢ㄧ被鍨�");
-
-
+    private void doSharingFeeToRoom(String formulaValue, double price, RoomDto roomDto, JSONObject reqJson,
+                                    List<PayFeePo> payFeePos, FeeConfigDto feeConfigDto,
+                                    List<FeeAttrPo> feeAttrPos, String importFeeId,
+                                    List<ImportFeeDetailPo> importFeeDetailPos) {
         String orgFormulaValue = formulaValue;
         formulaValue = formulaValue.replace("T", reqJson.getString("totalDegrees"))
                 .replace("F", roomDto.getFloorArea())
@@ -136,22 +194,66 @@
         ScriptEngineManager manager = new ScriptEngineManager();
         ScriptEngine engine = manager.getEngineByName("JavaScript");
         String value = "";
+        double amount = 0.0;
         try {
             value = engine.eval(formulaValue).toString();
-            value = engine.eval(value + ".toFixed(2)").toString();
+            BigDecimal valueObj = new BigDecimal(Double.parseDouble(value));
+            BigDecimal priceObj = new BigDecimal(price);
+            priceObj = valueObj.multiply(priceObj).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+            amount = priceObj.doubleValue();
         } catch (Exception e) {
             throw new IllegalArgumentException("鍏紡璁$畻寮傚父锛屽叕寮忎负銆�" + orgFormulaValue + "銆�,璁$畻 銆�" + formulaValue + "銆戝紓甯�");
         }
 
         PayFeePo payFeePo = new PayFeePo();
-        payFeePo.setEndTime(reqJson.getString("endTime"));
-        payFeePo.setUserId(reqJson.getString("userId"));
-        payFeePo.setPayerObjId(roomDto.getRoomId());
-        payFeePo.setCommunityId(reqJson.getString("communityId"));
         payFeePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
+        payFeePo.setEndTime(reqJson.getString("startTime"));
         payFeePo.setState(FeeDto.STATE_DOING);
+        payFeePo.setCommunityId(reqJson.getString("communityId"));
+        payFeePo.setConfigId(feeConfigDto.getConfigId());
+        payFeePo.setPayerObjId(reqJson.getString("objId"));
+        payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
+        payFeePo.setUserId(reqJson.getString("userId"));
         payFeePo.setIncomeObjId(reqJson.getString("storeId"));
-        //payFeePo.setFeeFlag();
+        payFeePo.setFeeTypeCd(reqJson.getString("feeTypeCd"));
+        payFeePo.setFeeFlag(FeeDto.FEE_FLAG_ONCE);
+        payFeePo.setAmount(amount + "");
+        //payFeePo.setStartTime(importRoomFee.getStartTime());
+        payFeePo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+
+        payFeePos.add(payFeePo);
+
+        FeeAttrPo feeAttrPo = new FeeAttrPo();
+        feeAttrPo.setCommunityId(reqJson.getString("communityId"));
+        feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
+        feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_IMPORT_FEE_NAME);
+        feeAttrPo.setValue(reqJson.getString("feeName"));
+        feeAttrPo.setFeeId(payFeePo.getFeeId());
+        feeAttrPos.add(feeAttrPo);
+
+        feeAttrPo = new FeeAttrPo();
+        feeAttrPo.setCommunityId(reqJson.getString("communityId"));
+        feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
+        feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_SHARE_DEGREES);
+        feeAttrPo.setValue(reqJson.getString("value"));
+        feeAttrPo.setFeeId(payFeePo.getFeeId());
+        feeAttrPos.add(feeAttrPo);
+        ImportFeeDetailPo importFeeDetailPo = new ImportFeeDetailPo();
+        importFeeDetailPo.setAmount(value);
+        importFeeDetailPo.setCommunityId(reqJson.getString("communityId"));
+        importFeeDetailPo.setEndTime(reqJson.getString("endTime"));
+        importFeeDetailPo.setFeeId(payFeePo.getFeeId());
+        importFeeDetailPo.setFeeName(reqJson.getString("feeName"));
+        importFeeDetailPo.setFloorNum(roomDto.getFloorNum());
+        importFeeDetailPo.setUnitNum(roomDto.getUnitNum());
+        importFeeDetailPo.setRoomNum(roomDto.getRoomNum());
+        importFeeDetailPo.setRoomId(roomDto.getRoomId());
+        importFeeDetailPo.setStartTime(reqJson.getString("startTime"));
+        importFeeDetailPo.setIfdId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
+        importFeeDetailPo.setState("1000");
+        importFeeDetailPo.setImportFeeId(importFeeId);
+        importFeeDetailPo.setRemark("鍏憡鐢ㄩ噺锛�" + value);
+        importFeeDetailPos.add(importFeeDetailPo);
 
 
     }
@@ -166,4 +268,31 @@
         return value;
     }
 
+
+    /**
+     * 淇濆瓨淇濆瓨瀵煎叆璐圭敤閰嶇疆
+     *
+     * @param feeConfigDto
+     */
+    private void saveFeeConfig(FeeConfigDto feeConfigDto) {
+
+        PayFeeConfigPo payFeeConfigPo = BeanConvertUtil.covertBean(feeConfigDto, PayFeeConfigPo.class);
+        payFeeConfigPo.setAdditionalAmount("0");
+        payFeeConfigPo.setBillType(FeeConfigDto.BILL_TYPE_MONTH);
+        payFeeConfigPo.setComputingFormula("4004");
+        payFeeConfigPo.setEndTime(DateUtil.getLastTime());
+        payFeeConfigPo.setFeeFlag("2006012");
+        payFeeConfigPo.setIsDefault("T");
+        payFeeConfigPo.setPaymentCd("2100");
+        payFeeConfigPo.setFeeName(IMPORT_FEE_NAME);
+        payFeeConfigPo.setSquarePrice("0");
+        payFeeConfigPo.setPaymentCycle("1");
+        payFeeConfigPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        int saveFlag = feeConfigInnerServiceSMOImpl.saveFeeConfig(payFeeConfigPo);
+
+        if (saveFlag < 1) {
+            throw new IllegalArgumentException("鍒涘缓瀵煎叆璐圭敤澶辫触");
+        }
+    }
+
 }

--
Gitblit v1.8.0