订单增加状态搜索
This commit is contained in:
@@ -38,6 +38,11 @@ public class TabOrderMonitorQuery implements Serializable
|
||||
private List<String> orderIdentifiers;
|
||||
/** 上游产品代码 LINE_CODE(产品比对点进订单号时使用) */
|
||||
private String productCode;
|
||||
/**
|
||||
* 订单状态 ORDER_STATUS 多选。
|
||||
* 空则服务端回落默认 3,4,5,6,7,8,11(与历史硬编码一致)。
|
||||
*/
|
||||
private List<Integer> orderStatuses;
|
||||
/** 分批同步计费每批条数 */
|
||||
private Integer batchSize;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.bms.price.enums;
|
||||
|
||||
/**
|
||||
* Snapshot of prc_order_bill.order_status (aligned with upstream TAB_ORDER).
|
||||
* Fee refund sets {@link #REFUNDED} (9 / 已退件).
|
||||
*/
|
||||
public enum BillOrderStatus
|
||||
{
|
||||
/** Upstream: returned package; also set after billing-list fee refund. */
|
||||
REFUNDED(9);
|
||||
|
||||
private final int code;
|
||||
|
||||
BillOrderStatus(int code)
|
||||
{
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public int getCode()
|
||||
{
|
||||
return code;
|
||||
}
|
||||
|
||||
public Integer getCodeBoxed()
|
||||
{
|
||||
return Integer.valueOf(code);
|
||||
}
|
||||
|
||||
public boolean matches(Integer status)
|
||||
{
|
||||
return status != null && status.intValue() == code;
|
||||
}
|
||||
|
||||
public static BillOrderStatus of(Integer status)
|
||||
{
|
||||
if (status == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
for (BillOrderStatus value : values())
|
||||
{
|
||||
if (value.code == status.intValue())
|
||||
{
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package com.bms.price.oracle;
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
@@ -71,6 +72,12 @@ public class TabOrderMonitorService
|
||||
/** 单批 Oracle 查询最长等待(从库 socketTimeout 为 120s,留同样余量)。 */
|
||||
private static final long COLLECT_BATCH_TIMEOUT_SECONDS = 120L;
|
||||
|
||||
/** Same default as historical hardcoded ORDER_STATUS IN (...). */
|
||||
private static final List<Integer> DEFAULT_ORDER_STATUSES =
|
||||
Collections.unmodifiableList(Arrays.asList(
|
||||
Integer.valueOf(3), Integer.valueOf(4), Integer.valueOf(5), Integer.valueOf(6),
|
||||
Integer.valueOf(7), Integer.valueOf(8), Integer.valueOf(11)));
|
||||
|
||||
@Autowired
|
||||
private OracleUpstreamOrderMapper oracleUpstreamOrderMapper;
|
||||
|
||||
@@ -994,7 +1001,8 @@ public class TabOrderMonitorService
|
||||
appendSorted(sb, q.getCustomerCodes());
|
||||
sb.append('|').append(safe(q.getBeginTime())).append('|').append(safe(q.getEndTime()))
|
||||
.append('|').append(safe(q.getOrderId())).append('|').append(safe(q.getOrgOrderId()))
|
||||
.append('|').append(safe(q.getTransferOrderId()));
|
||||
.append('|').append(safe(q.getTransferOrderId())).append('|');
|
||||
appendSortedInts(sb, q.getOrderStatuses());
|
||||
return Integer.toHexString(sb.toString().hashCode());
|
||||
}
|
||||
|
||||
@@ -1012,6 +1020,20 @@ public class TabOrderMonitorService
|
||||
}
|
||||
}
|
||||
|
||||
private static void appendSortedInts(StringBuilder sb, List<Integer> values)
|
||||
{
|
||||
if (values == null || values.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
List<Integer> copy = new ArrayList<Integer>(values);
|
||||
Collections.sort(copy);
|
||||
for (Integer v : copy)
|
||||
{
|
||||
sb.append(v).append(',');
|
||||
}
|
||||
}
|
||||
|
||||
private static String safe(String s)
|
||||
{
|
||||
return s == null ? "" : s;
|
||||
@@ -1152,6 +1174,25 @@ public class TabOrderMonitorService
|
||||
query.setOrderId(trimToNull(query.getOrderId()));
|
||||
query.setOrgOrderId(trimToNull(query.getOrgOrderId()));
|
||||
query.setTransferOrderId(trimToNull(query.getTransferOrderId()));
|
||||
normalizeOrderStatuses(query);
|
||||
}
|
||||
|
||||
/** Empty/missing -> default 3,4,5,6,7,8,11 so SQL always has a status IN list. */
|
||||
private static void normalizeOrderStatuses(TabOrderMonitorQuery query)
|
||||
{
|
||||
List<Integer> statuses = query.getOrderStatuses();
|
||||
List<Integer> cleaned = new ArrayList<Integer>();
|
||||
if (statuses != null)
|
||||
{
|
||||
for (Integer s : statuses)
|
||||
{
|
||||
if (s != null)
|
||||
{
|
||||
cleaned.add(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
query.setOrderStatuses(cleaned.isEmpty() ? new ArrayList<Integer>(DEFAULT_ORDER_STATUSES) : cleaned);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+21
-1
@@ -77,6 +77,7 @@ import com.bms.price.domain.vo.TmsPriceQuoteFeeLine;
|
||||
import com.bms.price.domain.vo.TmsPriceQuoteResult;
|
||||
import com.bms.price.enums.BillCreditArrearsStatus;
|
||||
import com.bms.price.enums.BillCustomerActiveStatus;
|
||||
import com.bms.price.enums.BillOrderStatus;
|
||||
import com.bms.price.enums.BillRefundStatus;
|
||||
import com.bms.price.enums.BillBillingFailStatus;
|
||||
import com.bms.price.enums.TmsOrderBillMatchType;
|
||||
@@ -300,6 +301,8 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
|
||||
refundFee.setManualFlag("0");
|
||||
incomeBillFeeMapper.insertPrcIncomeBillFee(refundFee);
|
||||
bill.setRefundStatus(BillRefundStatus.REFUNDED.getCode());
|
||||
// Align with upstream 已退件 after fee refund.
|
||||
bill.setOrderStatus(BillOrderStatus.REFUNDED.getCodeBoxed());
|
||||
if (incomeBill != null)
|
||||
{
|
||||
incomeBill.setRefundStatus(BillRefundStatus.REFUNDED.getCode());
|
||||
@@ -315,6 +318,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
|
||||
req.put("refundAmount", feeSum.negate());
|
||||
req.put("feeId", refundFee.getFeeId());
|
||||
req.put("refundStatus", bill.getRefundStatus());
|
||||
req.put("orderStatus", bill.getOrderStatus());
|
||||
if (billSearchStore != null)
|
||||
{
|
||||
billSearchStore.save(EsLogType.BILL,
|
||||
@@ -762,6 +766,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
|
||||
{
|
||||
throw new ServiceException(MessageUtils.message("price.bill.bizDateRequired"));
|
||||
}
|
||||
assertOrderBillNotRefunded(bill);
|
||||
TmsPriceBillRequest req = buildBillRequestFromBill(bill);
|
||||
return billLocalWithDbRetry(billId.trim(), req);
|
||||
}
|
||||
@@ -1631,6 +1636,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
|
||||
String billKey = Md5Utils.hash(orderNo);
|
||||
PrcOrderBill existed = orderBillMapper.selectPrcOrderBillByOrderNo(orderNo);
|
||||
assertOrderBillEditable(existed);
|
||||
assertOrderBillNotRefunded(existed);
|
||||
BigDecimal previousIncome = existed == null ? BigDecimal.ZERO : nz(existed.getIncomeTotal());
|
||||
PrcOrderBill bill = existed == null ? new PrcOrderBill() : existed;
|
||||
if (existed == null)
|
||||
@@ -2087,6 +2093,15 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
|
||||
}
|
||||
}
|
||||
|
||||
/** Block rebill when refundStatus=REFUNDED (order_status=9 alone is logistics return, not fee refund). */
|
||||
private void assertOrderBillNotRefunded(PrcOrderBill bill)
|
||||
{
|
||||
if (bill != null && BillRefundStatus.REFUNDED.getCode().equalsIgnoreCase(bill.getRefundStatus()))
|
||||
{
|
||||
throw new ServiceException("\u8ba2\u5355\u5df2\u9000\u8d39\uff0c\u4e0d\u53ef\u91cd\u65b0\u8ba1\u8d39");
|
||||
}
|
||||
}
|
||||
|
||||
private static BigDecimal nz(BigDecimal v)
|
||||
{
|
||||
return v == null ? BigDecimal.ZERO : v;
|
||||
@@ -2931,7 +2946,12 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (request.getOrderStatus() != null)
|
||||
// Fee refund marks order_status=9 (已退件); do not let Oracle sync overwrite it.
|
||||
if (BillRefundStatus.REFUNDED.getCode().equalsIgnoreCase(bill.getRefundStatus()))
|
||||
{
|
||||
bill.setOrderStatus(BillOrderStatus.REFUNDED.getCodeBoxed());
|
||||
}
|
||||
else if (request.getOrderStatus() != null)
|
||||
{
|
||||
bill.setOrderStatus(request.getOrderStatus());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user