Explorar o código

optimize owner received owe fee

java110 %!s(int64=3) %!d(string=hai) anos
pai
achega
16b2c90a6c

+ 10 - 0
java110-bean/src/main/java/com/java110/dto/report/QueryStatisticsDto.java

@@ -34,6 +34,8 @@ public class QueryStatisticsDto extends PageDto implements Serializable {
 
     private String[] ownerIds;
 
+    private String storeId;
+
 
     public String getCommunityId() {
         return communityId;
@@ -139,4 +141,12 @@ public class QueryStatisticsDto extends PageDto implements Serializable {
     public void setOwnerIds(String[] ownerIds) {
         this.ownerIds = ownerIds;
     }
+
+    public String getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(String storeId) {
+        this.storeId = storeId;
+    }
 }

+ 139 - 0
service-report/src/main/java/com/java110/report/cmd/reportFeeMonthStatistics/QueryReportFeeDetailContractCmd.java

@@ -0,0 +1,139 @@
+package com.java110.report.cmd.reportFeeMonthStatistics;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.context.ICmdDataFlowContext;
+import com.java110.core.event.cmd.Cmd;
+import com.java110.core.event.cmd.CmdEvent;
+import com.java110.dto.RoomDto;
+import com.java110.dto.contract.ContractDto;
+import com.java110.dto.report.QueryStatisticsDto;
+import com.java110.report.statistics.IBaseDataStatistics;
+import com.java110.report.statistics.IFeeStatistics;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 查询合同费用明细表
+ * 以房屋为维度统计 房屋的各个费用项 欠费和实收
+ */
+
+@Java110Cmd(serviceCode = "reportFeeMonthStatistics.queryReportFeeDetailContract")
+public class QueryReportFeeDetailContractCmd extends Cmd {
+
+    @Autowired
+    private IFeeStatistics feeStatisticsImpl;
+
+    @Autowired
+    private IBaseDataStatistics baseDataStatisticsImpl;
+
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        super.validatePageInfo(reqJson);
+        Assert.hasKeyAndValue(reqJson, "startDate", "未包含开始日期");
+        Assert.hasKeyAndValue(reqJson, "endDate", "未包含结束日期");
+        Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区信息");
+    }
+
+    @Override
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+
+        String storeId = context.getReqHeaders().get("store-id");
+
+        QueryStatisticsDto queryStatisticsDto = new QueryStatisticsDto();
+        queryStatisticsDto.setCommunityId(reqJson.getString("communityId"));
+        queryStatisticsDto.setStartDate(reqJson.getString("startDate"));
+        queryStatisticsDto.setEndDate(reqJson.getString("endDate"));
+        queryStatisticsDto.setConfigId(reqJson.getString("configId"));
+        queryStatisticsDto.setFloorId(reqJson.getString("floorId"));
+        queryStatisticsDto.setObjName(reqJson.getString("objName"));
+        queryStatisticsDto.setFeeTypeCd(reqJson.getString("feeTypeCd"));
+        queryStatisticsDto.setOwnerName(reqJson.getString("ownerName"));
+        queryStatisticsDto.setLink(reqJson.getString("link"));
+        queryStatisticsDto.setPage(reqJson.getInteger("page"));
+        queryStatisticsDto.setRow(reqJson.getInteger("row"));
+        queryStatisticsDto.setStoreId(storeId);
+        long count = baseDataStatisticsImpl.getContractCount(queryStatisticsDto);
+        List<ContractDto> contractDtos = null;
+        if (count > 0) {
+            contractDtos = baseDataStatisticsImpl.getContract(queryStatisticsDto);
+        } else {
+            contractDtos = new ArrayList<>();
+        }
+
+        // todo 计算 房屋欠费实收数据
+        JSONArray datas = computeContractOweReceivedFee(contractDtos, queryStatisticsDto);
+
+        ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) queryStatisticsDto.getRow()), count, datas);
+
+        ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK);
+        context.setResponseEntity(responseEntity);
+
+    }
+
+    /**
+     * 计算合同欠费 实收费用
+     *
+     * @param contractDtos
+     * @return
+     */
+    private JSONArray computeContractOweReceivedFee(List<ContractDto> contractDtos, QueryStatisticsDto queryStatisticsDto) {
+        if (contractDtos == null || contractDtos.size() < 1) {
+            return new JSONArray();
+        }
+
+        JSONArray datas = new JSONArray();
+        JSONObject data = null;
+
+        List<String> objIds = new ArrayList<>();
+        for (ContractDto contractDto : contractDtos) {
+            objIds.add(contractDto.getContractId());
+            data = new JSONObject();
+            data.put("contractId", contractDto.getContractId());
+            data.put("contractName", contractDto.getContractName() + "(" + contractDto.getContractCode() + ")");
+            data.put("ownerName", contractDto.getPartyB());
+            data.put("ownerId", contractDto.getObjId());
+            data.put("link", contractDto.getbLink());
+            datas.add(data);
+        }
+
+        queryStatisticsDto.setObjIds(objIds.toArray(new String[objIds.size()]));
+        List<Map> infos = feeStatisticsImpl.getObjFeeSummary(queryStatisticsDto);
+
+        if (infos == null || infos.size() < 1) {
+            return datas;
+        }
+
+        BigDecimal oweFee = new BigDecimal(0.00);
+        BigDecimal receivedFee = new BigDecimal(0.00);
+        for (int dataIndex = 0; dataIndex < datas.size(); dataIndex++) {
+            data = datas.getJSONObject(dataIndex);
+            for (Map info : infos) {
+                if (!data.get("contractId").toString().equals(info.get("objId"))) {
+                    continue;
+                }
+
+                oweFee = oweFee.add(new BigDecimal(info.get("oweFee").toString()));
+                receivedFee = oweFee.add(new BigDecimal(info.get("receivedFee").toString()));
+                data.put("oweFee" + info.get("feeTypeCd").toString(), info.get("oweFee"));
+                data.put("receivedFee" + info.get("feeTypeCd").toString(), info.get("receivedFee"));
+            }
+            data.put("oweFee", oweFee.doubleValue());
+            data.put("receivedFee", receivedFee.doubleValue());
+        }
+
+        return datas;
+    }
+}

+ 10 - 0
service-report/src/main/java/com/java110/report/statistics/IBaseDataStatistics.java

@@ -1,6 +1,7 @@
 package com.java110.report.statistics;
 
 import com.java110.dto.RoomDto;
+import com.java110.dto.contract.ContractDto;
 import com.java110.dto.owner.OwnerDto;
 import com.java110.dto.report.QueryStatisticsDto;
 
@@ -46,4 +47,13 @@ public interface IBaseDataStatistics {
      * @return
      */
     List<OwnerDto> getOwnerInfo(QueryStatisticsDto queryStatisticsDto);
+
+    /**
+     * 查询合同总数
+     * @param queryStatisticsDto
+     * @return
+     */
+    long getContractCount(QueryStatisticsDto queryStatisticsDto);
+
+    List<ContractDto> getContract(QueryStatisticsDto queryStatisticsDto);
 }

+ 25 - 0
service-report/src/main/java/com/java110/report/statistics/impl/BaseDataStatisticsImpl.java

@@ -1,11 +1,13 @@
 package com.java110.report.statistics.impl;
 
 import com.java110.dto.RoomDto;
+import com.java110.dto.contract.ContractDto;
 import com.java110.dto.owner.OwnerDto;
 import com.java110.dto.report.QueryStatisticsDto;
 import com.java110.intf.community.IRoomV1InnerServiceSMO;
 import com.java110.intf.report.IBaseDataStatisticsInnerServiceSMO;
 import com.java110.intf.report.IReportFeeStatisticsInnerServiceSMO;
+import com.java110.intf.store.IContractInnerServiceSMO;
 import com.java110.intf.user.IOwnerV1InnerServiceSMO;
 import com.java110.report.statistics.IBaseDataStatistics;
 import com.java110.utils.util.StringUtil;
@@ -29,6 +31,9 @@ public class BaseDataStatisticsImpl implements IBaseDataStatistics {
     @Autowired
     private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl;
 
+    @Autowired
+    private IContractInnerServiceSMO contractInnerServiceSMOImpl;
+
     /**
      * 查询全部房屋
      *
@@ -99,6 +104,26 @@ public class BaseDataStatisticsImpl implements IBaseDataStatistics {
         return ownerV1InnerServiceSMOImpl.queryOwners(ownerDto);
     }
 
+    @Override
+    public long getContractCount(QueryStatisticsDto queryStatisticsDto) {
+        ContractDto contractDto = new ContractDto();
+        contractDto.setStoreId(queryStatisticsDto.getStoreId());
+        contractDto.setbLink(queryStatisticsDto.getLink());
+        contractDto.setPartyBLike(queryStatisticsDto.getOwnerName());
+        return contractInnerServiceSMOImpl.queryContractsCount(contractDto);
+    }
+
+    @Override
+    public List<ContractDto> getContract(QueryStatisticsDto queryStatisticsDto) {
+        ContractDto contractDto = new ContractDto();
+        contractDto.setStoreId(queryStatisticsDto.getStoreId());
+        contractDto.setbLink(queryStatisticsDto.getLink());
+        contractDto.setPartyBLike(queryStatisticsDto.getOwnerName());
+        contractDto.setPage(queryStatisticsDto.getPage());
+        contractDto.setRow(queryStatisticsDto.getRow());
+        return contractInnerServiceSMOImpl.queryContracts(contractDto);
+    }
+
 
     /**
      * roomNum 拆分 查询房屋信息