| | |
| | | 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.room.RoomDto; |
| | | import com.java110.dto.report.QueryStatisticsDto; |
| | | import com.java110.report.statistics.IBaseDataStatistics; |
| | | import com.java110.report.statistics.IFeeStatistics; |
| | |
| | | import java.math.BigDecimal; |
| | | import java.text.ParseException; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | |
| | | //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 receivedFee = new BigDecimal(0.00); |
| | | for(int dataIndex = 0; dataIndex < datas.size();dataIndex ++){ |
| | | List<Map> itemFees = null; |
| | | String feeTypeCd = ""; |
| | | data.put("receivedFee", "0"); |
| | | |
| | | // 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(); |
| | | receivedFee = receivedFee.add(new BigDecimal(info.get(feeTypeCd + "receivedFee").toString())); |
| | | data.put("receivedFee" + feeTypeCd, info.get(feeTypeCd)); |
| | | } |
| | | data.put("receivedFee",receivedFee.doubleValue()); |
| | | data.put("receivedFee", receivedFee.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); |
| | | } |
| | | |
| | | } |