From 1576cab8045fdc03de6858b0ddd1dc8d11591991 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期一, 23 十一月 2020 23:46:22 +0800
Subject: [PATCH] 优化 小区面积公摊问题

---
 service-fee/src/main/java/com/java110/fee/bmo/importFee/impl/FeeSharingBMOImpl.java |   77 ++++++++++++++++++++++++++++++++------
 1 files changed, 65 insertions(+), 12 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 facb719..01fe56a 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,17 +4,19 @@
 import com.java110.core.annotation.Java110Transactional;
 import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.dto.RoomDto;
+import com.java110.dto.community.CommunityDto;
 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.ICommunityInnerServiceSMO;
 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.IImportFeeDetailInnerServiceSMO;
 import com.java110.intf.fee.IImportFeeInnerServiceSMO;
 import com.java110.po.fee.FeeAttrPo;
 import com.java110.po.fee.PayFeeConfigPo;
@@ -33,7 +35,9 @@
 import javax.script.ScriptEngineManager;
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Service("feeSharingBMOImpl")
 public class FeeSharingBMOImpl implements IFeeSharingBMO {
@@ -61,6 +65,9 @@
     @Autowired
     private IImportFeeDetailInnerServiceSMO importFeeDetailInnerServiceSMOImpl;
 
+    @Autowired
+    private ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
+
     /**
      * 娣诲姞灏忓尯淇℃伅
      *
@@ -71,9 +78,20 @@
     public ResponseEntity<String> share(JSONObject reqJson) {
 
 
+        CommunityDto communityDto = new CommunityDto();
+        communityDto.setCommunityId(reqJson.getString("communityId"));
+        List<CommunityDto> communityDtos = communityInnerServiceSMOImpl.queryCommunitys(communityDto);
+
+        Assert.listOnlyOne(communityDtos, "鏈壘鍒板皬鍖轰俊鎭�");
+
         String scope = reqJson.getString("scope");
         RoomDto roomDto = new RoomDto();
-        roomDto.setState(RoomDto.STATE_SELL); // 宸插敭鎴垮眿
+        if (reqJson.containsKey("roomState") && reqJson.getString("roomState").split(",").length > 0) {
+            String[] states = reqJson.getString("roomState").split(",");
+            roomDto.setStates(states);
+        } else {
+            roomDto.setState(RoomDto.STATE_SELL); // 宸茬粡鍏ヤ綇
+        }
         List<RoomDto> roomDtos = null;
         if ("1001".equals(scope)) {//灏忓尯
             roomDto.setCommunityId(reqJson.getString("objId"));
@@ -117,7 +135,7 @@
         String formulaValue = deakFormula(feeFormulaDtos.get(0));
 
         //鍏憡璐圭敤鍒版埧灞�
-        sharingFeeToRoom(formulaValue, Double.parseDouble(feeFormulaDtos.get(0).getPrice()), roomDtos, reqJson, feeConfigDto);
+        sharingFeeToRoom(formulaValue, Double.parseDouble(feeFormulaDtos.get(0).getPrice()), roomDtos, reqJson, feeConfigDto, communityDtos.get(0));
 
 
         return ResultVo.success();
@@ -130,15 +148,18 @@
      * @param roomDtos
      */
     private void sharingFeeToRoom(String formulaValue, double price, List<RoomDto> roomDtos,
-                                  JSONObject reqJson, FeeConfigDto feeConfigDto) {
+                                  JSONObject reqJson, FeeConfigDto feeConfigDto, CommunityDto communityDto) {
 
 
         List<PayFeePo> payFeePos = new ArrayList<>();
         List<FeeAttrPo> feeAttrPos = new ArrayList<>();
         List<ImportFeeDetailPo> importFeeDetailPos = new ArrayList<>();
         String importFeeId = GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId);
+        Map<String, Integer> floorRooms = new HashMap();
+        Map<String, Integer> unitRooms = new HashMap();
         for (RoomDto roomDto : roomDtos) {
-            doSharingFeeToRoom(formulaValue, price, roomDto, reqJson, payFeePos, feeConfigDto, feeAttrPos, importFeeId, importFeeDetailPos);
+            doSharingFeeToRoom(formulaValue, price, roomDto, reqJson, payFeePos, feeConfigDto, feeAttrPos,
+                    importFeeId, importFeeDetailPos, floorRooms, unitRooms, communityDto);
         }
 
         feeInnerServiceSMOImpl.saveFee(payFeePos);
@@ -183,13 +204,43 @@
     private void doSharingFeeToRoom(String formulaValue, double price, RoomDto roomDto, JSONObject reqJson,
                                     List<PayFeePo> payFeePos, FeeConfigDto feeConfigDto,
                                     List<FeeAttrPo> feeAttrPos, String importFeeId,
-                                    List<ImportFeeDetailPo> importFeeDetailPos) {
+                                    List<ImportFeeDetailPo> importFeeDetailPos,
+                                    Map<String, Integer> floorRooms,
+                                    Map<String, Integer> unitRooms,
+                                    CommunityDto communityDto) {
+
+        if (!floorRooms.containsKey(roomDto.getFloorId())) {
+            RoomDto tmpRoomDto = new RoomDto();
+            tmpRoomDto.setCommunityId(roomDto.getCommunityId());
+            tmpRoomDto.setFloorId(roomDto.getFloorId());
+            tmpRoomDto.setState(RoomDto.STATE_SELL);
+            int roomCount = roomInnerServiceSMOImpl.queryRoomsCount(tmpRoomDto);
+            floorRooms.put(roomDto.getFloorId(), roomCount);
+        }
+
+        if (!unitRooms.containsKey(roomDto.getUnitId())) {
+            RoomDto tmpRoomDto = new RoomDto();
+            tmpRoomDto.setCommunityId(roomDto.getCommunityId());
+            tmpRoomDto.setUnitId(roomDto.getUnitId());
+            tmpRoomDto.setState(RoomDto.STATE_SELL);
+            int roomCount = roomInnerServiceSMOImpl.queryRoomsCount(tmpRoomDto);
+            unitRooms.put(roomDto.getUnitId(), roomCount);
+        }
+
+        long floorRoomCount = floorRooms.get(roomDto.getFloorId());
+        long unitRoomCount = unitRooms.get(roomDto.getUnitId());
+
+
         String orgFormulaValue = formulaValue;
         formulaValue = formulaValue.replace("T", reqJson.getString("totalDegrees"))
                 .replace("F", roomDto.getFloorArea())
                 .replace("U", roomDto.getUnitArea())
                 .replace("R", roomDto.getBuiltUpArea())
-                .replace("X", roomDto.getFeeCoefficient());
+                .replace("X", roomDto.getFeeCoefficient())
+                .replace("L", floorRoomCount + "")
+                .replace("D", unitRoomCount + "")
+                .replace("C", communityDto.getCommunityArea());
+
 
         ScriptEngineManager manager = new ScriptEngineManager();
         ScriptEngine engine = manager.getEngineByName("JavaScript");
@@ -250,11 +301,13 @@
         feeAttrPo.setFeeId(payFeePo.getFeeId());
         feeAttrPos.add(feeAttrPo);
 
-        String formulaValueRemark = orgFormulaValue.replace("T", reqJson.getString("totalDegrees")+"<鎬荤敤閲�>")
-                .replace("F", roomDto.getFloorArea()+"<"+roomDto.getFloorNum()+"鏍嬮潰绉�>")
-                .replace("U", roomDto.getUnitArea()+"<"+roomDto.getUnitNum()+"鍗曞厓闈㈢Н>")
-                .replace("R", roomDto.getBuiltUpArea()+"<"+roomDto.getRoomNum()+"瀹ら潰绉�>")
-                .replace("X", roomDto.getFeeCoefficient()+"<"+roomDto.getRoomNum()+"瀹ょ畻璐圭郴鏁�>");
+        String formulaValueRemark = orgFormulaValue.replace("T", reqJson.getString("totalDegrees") + "<鎬荤敤閲�>")
+                .replace("F", roomDto.getFloorArea() + "<" + roomDto.getFloorNum() + "鏍嬮潰绉�>")
+                .replace("U", roomDto.getUnitArea() + "<" + roomDto.getUnitNum() + "鍗曞厓闈㈢Н>")
+                .replace("R", roomDto.getBuiltUpArea() + "<" + roomDto.getRoomNum() + "瀹ら潰绉�>")
+                .replace("X", roomDto.getFeeCoefficient() + "<" + roomDto.getRoomNum() + "瀹ょ畻璐圭郴鏁�>");
+
+        formulaValueRemark += (" * " + price + "<鍗曚环>");
         // 鍏憡鍏紡
         feeAttrPo = new FeeAttrPo();
         feeAttrPo.setCommunityId(reqJson.getString("communityId"));

--
Gitblit v1.8.0