174 lines
5.7 KiB
Java
174 lines
5.7 KiB
Java
package com.rj.util;
|
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
import com.rj.entity.LbBuyerShopping;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.time.LocalDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeParseException;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* 将 hxrd {@code /api/order/list} 响应中的订单节点解析为 {@link LbBuyerShopping}。
|
|
*/
|
|
public final class LbBuyerShoppingOrderParser {
|
|
|
|
private static final DateTimeFormatter DATE_TIME_FORMATTER =
|
|
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
private LbBuyerShoppingOrderParser() {
|
|
}
|
|
|
|
public static List<LbBuyerShopping> parseOrderList(JsonNode dataNode) {
|
|
JsonNode listNode = extractListNode(dataNode);
|
|
if (listNode == null || !listNode.isArray() || listNode.isEmpty()) {
|
|
return List.of();
|
|
}
|
|
if (listNode.get(0).isTextual() || listNode.get(0).isNumber()) {
|
|
return List.of();
|
|
}
|
|
|
|
List<LbBuyerShopping> orders = new ArrayList<>(listNode.size());
|
|
for (JsonNode item : listNode) {
|
|
LbBuyerShopping entity = fromOrderNode(item);
|
|
if (entity != null) {
|
|
orders.add(entity);
|
|
}
|
|
}
|
|
return orders;
|
|
}
|
|
|
|
public static boolean resolveHasMore(JsonNode dataNode, int rowCount, int pageLimit) {
|
|
if (dataNode != null && dataNode.isObject()) {
|
|
if (dataNode.has("hasmore")) {
|
|
return dataNode.path("hasmore").asBoolean(false);
|
|
}
|
|
}
|
|
return rowCount >= pageLimit;
|
|
}
|
|
|
|
public static int resolveLastPage(JsonNode dataNode, int safePage, boolean hasMore) {
|
|
if (dataNode != null && dataNode.isObject()) {
|
|
int lastPage = dataNode.path("last_page").asInt(-1);
|
|
if (lastPage >= 1) {
|
|
return lastPage;
|
|
}
|
|
}
|
|
return hasMore ? Integer.MAX_VALUE : safePage;
|
|
}
|
|
|
|
public static LbBuyerShopping fromOrderNode(JsonNode node) {
|
|
if (node == null || node.isNull() || !node.isObject()) {
|
|
return null;
|
|
}
|
|
Long id = longValue(node.get("id"));
|
|
if (id == null) {
|
|
return null;
|
|
}
|
|
|
|
LbBuyerShopping entity = new LbBuyerShopping();
|
|
entity.setId(id);
|
|
entity.setSellerId(longValue(node.get("seller_id")));
|
|
entity.setMerchandiseId(longValue(node.get("merchandise_id")));
|
|
entity.setBuyerId(longValue(node.get("buyer_id")));
|
|
entity.setOrderSn(textValue(node.get("order_sn")));
|
|
entity.setTotalMoney(parseMoney(textValue(node.get("total_money"))));
|
|
entity.setNewTotal(parseMoney(textValue(node.get("new_total"))));
|
|
entity.setCreatedAt(parseDateTime(textValue(node.get("created_at"))));
|
|
entity.setBuyTime(parseDateTime(textValue(node.get("buy_time"))));
|
|
entity.setConfirmTime(parseDateTime(textValue(node.get("confirm_time"))));
|
|
|
|
JsonNode seller = node.get("seller");
|
|
if (seller != null && seller.isObject()) {
|
|
entity.setSellerNickname(textValue(seller.get("nickname")));
|
|
entity.setSellerMobile(textValue(seller.get("mobile")));
|
|
} else {
|
|
entity.setSellerNickname(textValue(node.get("seller_name")));
|
|
entity.setSellerMobile(textValue(node.get("seller_phone")));
|
|
}
|
|
|
|
JsonNode buyer = node.get("buyer");
|
|
if (buyer != null && buyer.isObject()) {
|
|
entity.setBuyerNickname(textValue(buyer.get("nickname")));
|
|
entity.setBuyerMobile(textValue(buyer.get("mobile")));
|
|
} else {
|
|
entity.setBuyerNickname(textValue(node.get("buyer_name")));
|
|
entity.setBuyerMobile(textValue(node.get("buyer_phone")));
|
|
}
|
|
return entity;
|
|
}
|
|
|
|
private static JsonNode extractListNode(JsonNode dataNode) {
|
|
if (dataNode == null || dataNode.isNull()) {
|
|
return null;
|
|
}
|
|
if (dataNode.isArray()) {
|
|
return dataNode;
|
|
}
|
|
if (dataNode.isObject()) {
|
|
return dataNode.get("list");
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private static Long longValue(JsonNode node) {
|
|
if (node == null || node.isNull()) {
|
|
return null;
|
|
}
|
|
if (node.isNumber()) {
|
|
return node.longValue();
|
|
}
|
|
String text = node.asText(null);
|
|
if (text == null || text.isBlank()) {
|
|
return null;
|
|
}
|
|
try {
|
|
return Long.parseLong(text.trim());
|
|
} catch (NumberFormatException e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private static String textValue(JsonNode node) {
|
|
if (node == null || node.isNull()) {
|
|
return null;
|
|
}
|
|
String text = node.asText(null);
|
|
if (text == null) {
|
|
return null;
|
|
}
|
|
text = text.trim();
|
|
return text.isEmpty() ? null : text;
|
|
}
|
|
|
|
private static BigDecimal parseMoney(String money) {
|
|
if (money == null || money.isBlank()) {
|
|
return null;
|
|
}
|
|
try {
|
|
return new BigDecimal(money.trim());
|
|
} catch (NumberFormatException e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private static LocalDateTime parseDateTime(String text) {
|
|
if (text == null || text.isBlank()) {
|
|
return null;
|
|
}
|
|
String trimmed = text.trim();
|
|
try {
|
|
return LocalDateTime.parse(trimmed, DATE_TIME_FORMATTER);
|
|
} catch (DateTimeParseException ignored) {
|
|
// continue
|
|
}
|
|
try {
|
|
return LocalDateTime.parse(trimmed, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
|
|
} catch (DateTimeParseException e) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|