|
|
@@ -21,6 +21,7 @@ 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;
|
|
|
|
|
|
@@ -110,26 +111,127 @@ public class QueryReceivedDetailStatisticsCmd extends Cmd {
|
|
|
}
|
|
|
|
|
|
queryStatisticsDto.setObjIds(objIds.toArray(new String[objIds.size()]));
|
|
|
- List<Map> infos = feeStatisticsImpl.getObjFeeSummary(queryStatisticsDto);
|
|
|
+ List<Map> infos = feeStatisticsImpl.getObjReceivedFee(queryStatisticsDto);
|
|
|
|
|
|
- if(infos == null || infos.size() < 1){
|
|
|
+
|
|
|
+ if (infos == null || infos.size() < 1) {
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
- BigDecimal receivedFee = new BigDecimal(0.00);
|
|
|
- for(int dataIndex = 0; dataIndex < datas.size();dataIndex ++){
|
|
|
+ //todo 清洗数据 将数据转变成 map roomId feeTypeCd->array
|
|
|
+ // todo 讲 payerObjId, feeTypeCd,feeName,endTime,deadlineTime,amountOwed 转换为 按payerObjId 纵向转换
|
|
|
+ // todo nInfo.put(info.get("payerObjId").toString(), info.get("payerObjId").toString());
|
|
|
+ // todo nInfo.put(info.get("feeTypeCd").toString(), tmpInfos);
|
|
|
+ infos = washInfos(infos);
|
|
|
+
|
|
|
+ BigDecimal oweFee = new BigDecimal(0.00);
|
|
|
+ List<Map> itemFees = null;
|
|
|
+ String feeTypeCd = "";
|
|
|
+
|
|
|
+ // todo 根据房屋ID 和payerObjId 比较 合并数据,讲费用大类 横向 放入 data中,
|
|
|
+ // todo 并且计算每个 房屋 费用大类的欠费 和房屋的总欠费
|
|
|
+ for (int dataIndex = 0; dataIndex < datas.size(); dataIndex++) {
|
|
|
data = datas.getJSONObject(dataIndex);
|
|
|
- for(Map info : infos){
|
|
|
- if(!data.get("roomId").toString().equals(info.get("objId"))){
|
|
|
+ //todo 这里循环费用大类
|
|
|
+ for (Map info : infos) {
|
|
|
+ if (!data.getString("roomId").equals(info.get("payerObjId"))) {
|
|
|
continue;
|
|
|
}
|
|
|
- receivedFee = receivedFee.add(new BigDecimal(info.get("receivedFee").toString()));
|
|
|
- data.put("receivedFee"+info.get("feeTypeCd").toString(),info.get("receivedFee"));
|
|
|
+ feeTypeCd = info.get("feeTypeCd").toString();
|
|
|
+ oweFee = oweFee.add(new BigDecimal(info.get(feeTypeCd + "receivedFee").toString()));
|
|
|
+ data.put("receivedFee" + feeTypeCd, info.get(feeTypeCd));
|
|
|
}
|
|
|
- data.put("receivedFee",receivedFee.doubleValue());
|
|
|
+ data.put("receivedFee", oweFee.doubleValue());
|
|
|
}
|
|
|
|
|
|
return datas;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * //todo 清洗数据 将数据转变成 map roomId feeTypeCd->array
|
|
|
+ * // todo 讲 payerObjId, feeTypeCd,feeName,endTime,deadlineTime,amountOwed 转换为 按payerObjId 纵向转换
|
|
|
+ * // 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 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);
|
|
|
+ }
|
|
|
+
|
|
|
}
|