From b173d31976fc4731b7c247d4038de92134eba317 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期四, 29 六月 2023 11:42:17 +0800
Subject: [PATCH] Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity
---
service-report/src/main/java/com/java110/report/cmd/dataReport/QueryReceivedDetailStatisticsCmd.java | 187 +++++++++++++++++++++++++++++++++++++++-------
1 files changed, 159 insertions(+), 28 deletions(-)
diff --git a/service-report/src/main/java/com/java110/report/cmd/dataReport/QueryReceivedDetailStatisticsCmd.java b/service-report/src/main/java/com/java110/report/cmd/dataReport/QueryReceivedDetailStatisticsCmd.java
index 6f793d7..87f3948 100644
--- a/service-report/src/main/java/com/java110/report/cmd/dataReport/QueryReceivedDetailStatisticsCmd.java
+++ b/service-report/src/main/java/com/java110/report/cmd/dataReport/QueryReceivedDetailStatisticsCmd.java
@@ -1,21 +1,27 @@
package com.java110.report.cmd.dataReport;
+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.room.RoomDto;
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.utils.util.StringUtil;
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.HashMap;
import java.util.List;
import java.util.Map;
@@ -27,6 +33,10 @@
@Autowired
private IFeeStatistics feeStatisticsImpl;
+
+ @Autowired
+ private IBaseDataStatistics baseDataStatisticsImpl;
+
@Override
public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
@@ -50,58 +60,179 @@
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"));
+ long count = baseDataStatisticsImpl.getRoomCount(queryStatisticsDto);
+ List<RoomDto> rooms = null;
+ if (count > 0) {
+ rooms = baseDataStatisticsImpl.getRoomInfo(queryStatisticsDto);
+ } else {
+ rooms = new ArrayList<>();
+ }
- List<Map> datas = null;
- // todo 鎸夋ゼ鏍嬭绠楀疄鏀舵儏鍐�
- datas = feeStatisticsImpl.getReceivedFeeByFloor(queryStatisticsDto);
+ // todo 璁$畻 鎴垮眿娆犺垂瀹炴敹鏁版嵁
+ JSONArray datas = computeRoomOweReceivedFee(rooms,queryStatisticsDto);
- datas = computeFloorReceivedFee(datas);
+ ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) queryStatisticsDto.getRow()), count, datas);
- context.setResponseEntity(ResultVo.createResponseEntity(datas));
+ ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK);
+ context.setResponseEntity(responseEntity);
}
- private List<Map> computeFloorReceivedFee(List<Map> datas) {
- if (datas == null || datas.size() < 1) {
- return new ArrayList<>();
+ /**
+ * 璁$畻鎴垮眿娆犺垂 瀹炴敹璐圭敤
+ *
+ * @param rooms
+ * @return
+ */
+ private JSONArray computeRoomOweReceivedFee(List<RoomDto> rooms,QueryStatisticsDto queryStatisticsDto) {
+ if (rooms == null || rooms.size() < 1) {
+ return new JSONArray();
}
- List<Map> tmpDatas = new ArrayList<>();
- for (Map data : datas) {
- if (!hasInTmp(tmpDatas, data)) {
- tmpDatas.add(data);
- }
+ JSONArray datas = new JSONArray();
+ JSONObject data = null;
+
+ List<String> objIds = new ArrayList<>();
+ for (RoomDto roomDto : rooms) {
+ objIds.add(roomDto.getRoomId());
+ data = new JSONObject();
+ data.put("roomId",roomDto.getRoomId());
+ data.put("roomName",roomDto.getFloorNum()+"-"+roomDto.getUnitNum()+"-"+roomDto.getRoomNum());
+ data.put("ownerName",roomDto.getOwnerName());
+ data.put("ownerId",roomDto.getOwnerId());
+ data.put("link",roomDto.getLink());
+ datas.add(data);
}
- if (tmpDatas == null || tmpDatas.size() < 1) {
- return new ArrayList<>();
+ queryStatisticsDto.setObjIds(objIds.toArray(new String[objIds.size()]));
+ List<Map> infos = feeStatisticsImpl.getObjReceivedFee(queryStatisticsDto);
+
+
+ if (infos == null || infos.size() < 1) {
+ return datas;
}
+
+ //todo 娓呮礂鏁版嵁 灏嗘暟鎹浆鍙樻垚 map roomId feeTypeCd->array
+ // todo 璁� payerObjId, feeTypeCd,feeName,endTime,deadlineTime,amountOwed 杞崲涓� 鎸塸ayerObjId 绾靛悜杞崲
+ // todo nInfo.put(info.get("payerObjId").toString(), info.get("payerObjId").toString());
+ // todo nInfo.put(info.get("feeTypeCd").toString(), tmpInfos);
+ infos = washInfos(infos);
BigDecimal receivedFee = new BigDecimal(0.00);
- for (Map tmpData : tmpDatas) {
- for (Map data : datas) {
- if (!data.get("floorId").toString().equals(tmpData.get("floorId"))) {
+ List<Map> itemFees = null;
+ String feeTypeCd = "";
+ data.put("receivedFee", "0");
+
+ // todo 鏍规嵁鎴垮眿ID 鍜宲ayerObjId 姣旇緝 鍚堝苟鏁版嵁锛岃璐圭敤澶х被 妯悜 鏀惧叆 data涓紝
+ // todo 骞朵笖璁$畻姣忎釜 鎴垮眿 璐圭敤澶х被鐨勬瑺璐� 鍜屾埧灞嬬殑鎬绘瑺璐�
+ for (int dataIndex = 0; dataIndex < datas.size(); dataIndex++) {
+ data = datas.getJSONObject(dataIndex);
+ //todo 杩欓噷寰幆璐圭敤澶х被
+ for (Map info : infos) {
+ if (!data.getString("roomId").equals(info.get("payerObjId"))) {
continue;
}
-
- receivedFee = receivedFee.add(new BigDecimal(data.get("receivedFee").toString()));
- tmpData.put("receivedFee" + data.get("feeTypeCd").toString(), data.get("receivedFee"));
+ feeTypeCd = info.get("feeTypeCd").toString();
+ receivedFee = receivedFee.add(new BigDecimal(info.get(feeTypeCd + "receivedFee").toString()));
+ data.put("receivedFee" + feeTypeCd, info.get(feeTypeCd));
}
- tmpData.put("receivedFee", receivedFee.doubleValue());
+ data.put("receivedFee", receivedFee.doubleValue());
}
- return tmpDatas;
+ return datas;
}
- private boolean hasInTmp(List<Map> tmpDatas, Map data) {
- for (Map tmpData : tmpDatas) {
- if (tmpData.get("floorId").equals(data.get("floorId"))) {
- return true;
+ /**
+ * //todo 娓呮礂鏁版嵁 灏嗘暟鎹浆鍙樻垚 map roomId feeTypeCd->array
+ * // todo 璁� payerObjId, feeTypeCd,feeName,endTime,deadlineTime,amountOwed 杞崲涓� 鎸塸ayerObjId 绾靛悜杞崲
+ * // todo nInfo.put(info.get("feeTypeCd").toString(), tmpInfos);
+ *
+ * @param infos
+ * @return
+ */
+ private List<Map> washInfos(List<Map> infos) {
+ List<Map> newInfos = new ArrayList<>();
+ for (Map info : infos) {
+ generatorNewInfo(newInfos, info);
+ }
+
+ List<Map> tmpInfos = null;
+ Map dInfo = null;
+ for (Map nInfo : newInfos) {
+ for (Map info : infos) {
+ if (!nInfo.get("payerObjId").equals(info.get("payerObjId"))) {
+ continue;
+ }
+ tmpInfos = getTmpInfos(nInfo, info);
+ //todo 娣辨嫹璐�
+ dInfo = new HashMap();
+ dInfo.putAll(info);
+ tmpInfos.add(dInfo);
+ //璁$畻鍗曢」 娆犺垂閲戦
+ computeReceivedAmount(tmpInfos, info.get("feeTypeCd").toString(), nInfo);
+ nInfo.put(info.get("feeTypeCd").toString(), tmpInfos);
}
}
- return false;
+
+ return newInfos;
+
+ }
+
+ /**
+ * 璁$畻姣忎釜璐圭敤澶х被鐨� 娆犺垂
+ *
+ * @param tmpInfos
+ * @param feeTypeCd
+ * @param nInfo
+ */
+ private void computeReceivedAmount(List<Map> tmpInfos, String feeTypeCd, Map nInfo) {
+ if (tmpInfos == null || tmpInfos.size() < 1) {
+ nInfo.put(feeTypeCd + "receivedFee", 0.0);
+ return;
+ }
+ BigDecimal receivedAmount = new BigDecimal(0.0);
+ for (Map tInfo : tmpInfos) {
+ receivedAmount = receivedAmount.add(new BigDecimal(tInfo.get("receivedAmount").toString()));
+ }
+ receivedAmount = receivedAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
+ nInfo.put(feeTypeCd + "receivedFee", receivedAmount.doubleValue());
+ }
+
+ private List<Map> getTmpInfos(Map nInfo, Map info) {
+ String feeTypeCd = info.get("feeTypeCd").toString();
+ if (nInfo.containsKey(feeTypeCd)) {
+ return (List<Map>) nInfo.get(feeTypeCd);
+ }
+
+ return new ArrayList<>();
+ }
+
+ /**
+ * 鏌ヨ 鏂版暟鎹鏂�
+ *
+ * @param newInfos
+ * @param info
+ * @return
+ */
+ private void generatorNewInfo(List<Map> newInfos, Map info) {
+ if (newInfos.size() < 1) {
+ newInfos.add(info);
+ return;
+ }
+
+ for (Map newInfo : newInfos) {
+ if (newInfo.get("payerObjId").equals(info.get("payerObjId"))) {
+ return;
+ }
+ }
+
+ newInfos.add(info);
}
}
--
Gitblit v1.8.0