业务代码: 入参 json字符串{"1-3": 29},{"8-": 50},{"8-": 50},返回 1-3天 29,大于8天 100
private void mergePostponeDetail(List<CfChargeListVO> chargeInList) {
// {"1-3": 29},{"8-": 50},{"8-": 50}
Set<String> keys = new HashSet<>();
for (CfChargeListVO chargeInVO : chargeInList) {
if (chargeInVO.getPostponeDetail() == null) {
chargeInVO.setPostponeDetail("");
}
String postponeDetail = chargeInVO.getPostponeDetail();
String[] substring = postponeDetail.split(",");
for (String s : substring) {
JSONObject object = JSONObject.parseObject(s, JSONObject.class);
if (object == null) {
continue;
}
Set<String> strings = object.keySet();
keys.addAll(strings);
}
}
if (keys.size() > 0) {
keys.addAll(getAllRuleBillDetails(1));
}
// 排序
List<Integer> sortList = new ArrayList<>(5);
Map<Integer, String> mapsort = new HashMap<>(8);
Set<String> keysSorted = new LinkedHashSet<>();
for (String key : keys) {
String[] split = key.split("-");
String s = split[0];
int i = Integer.parseInt(s);
sortList.add(i);
mapsort.put(i, key);
}
Collections.sort(sortList);
for (Integer integer : sortList) {
String s = mapsort.get(integer);
keysSorted.add(s);
}
// 字符串 数字汇总
for (CfChargeListVO chargeInVO : chargeInList) {
String postponeDetail = chargeInVO.getPostponeDetail();
String[] substring = postponeDetail.split(",");
Map<String, Integer> objectToArray = new LinkedHashMap<>();
List<Map<String, Integer>> sortArray = new LinkedList<>();
for (String key : keysSorted) {
for (String s : substring) {
JSONObject object = JSONObject.parseObject(s, JSONObject.class);
if (object == null) {
object = new JSONObject();
}
if (!objectToArray.containsKey(key)) {
objectToArray.put(key, 0);
}
if (object.containsKey(key)) {
int sum = Integer.parseInt(objectToArray.get(key).toString());
int num = Integer.parseInt(object.get(key).toString());
objectToArray.put(key, sum + num);
}
}
Map<String, Integer> jsonObject = new HashMap<>(4);
String keyAlias = getKeyAlias(key);
jsonObject.put(keyAlias, objectToArray.get(key));
sortArray.add(jsonObject);
}
chargeInVO.setPostponeDetail(JSONObject.toJSONString(sortArray));
chargeInVO.setPostponeDetailArray(sortArray);
private String getKeyAlias(String key) {
String keyAlias = "延期";
if (StringUtils.isNotBlank(key)) {
String[] split = key.split("-");
if (split.length > 0) {
if (split.length == 1 || StringUtils.isBlank(split[1])) {
keyAlias = "延期" + split[0] + "天以上";
} else {
keyAlias = "延期" + key + "天";
}
}
}
return keyAlias;
}
/**
* 延期明细
*/
private List<Map<String, Integer>> postponeDetailArray;
/**
* 延期明细
*/
private String postponeDetail;