tms查询客户状态和订单状态接口 优化

This commit is contained in:
caojia
2026-09-23 15:09:28 +08:00
parent 8522201248
commit 72e1ec463a
6 changed files with 146 additions and 34 deletions
@@ -23,6 +23,9 @@ public interface BmsCustomerMapper
*/
public BmsCustomer selectBmsCustomerByCustomerId(Long customerId);
/** 轻量查询客户当前状态;不存在或已逻辑删除时返回 null。 */
public BmsCustomer selectCustomerStatusByCustomerId(Long customerId);
/**
* 只取客户档案物理额度列(credit_ed 在通用查询里是账户可用额度的子查询别名,
* 账户首次初始化时必须读取档案原始值)
@@ -20,7 +20,7 @@ public class TmsOrderBillStatusResult {
private int matchedCount;
/**
* 命中类型:ORDER_NO/ TRACKING_NO/TRANSFER_NO/MULTIPLE。
* 命中类型:NOT_FOUND/ORDER_NO/TRACKING_NO/TRANSFER_NO/MULTIPLE。
*/
private String matchType;
@@ -35,6 +35,11 @@ public class TmsOrderBillStatusResult {
private Long customerId;
private String customerCode;
/**
* 订单关联的当前客户是否存在;订单未找到或匹配到多条时为 null。
*/
private Boolean customerFound;
/**
* 客户生效状态:ACTIVE/MISSING/DISABLED。
*/
@@ -4,6 +4,8 @@ package com.ruoyi.price.enums;
* TMS 查询订单计费数据时的标识匹配类型。
*/
public enum TmsOrderBillMatchType {
/** 没有匹配到订单。 */
NOT_FOUND("NOT_FOUND", "未找到订单"),
/**
* 按订单号匹配。
*/
@@ -24,6 +24,8 @@ import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.sign.Md5Utils;
import com.ruoyi.customer.customerinfo.domain.BmsCustomer;
import com.ruoyi.customer.customerinfo.mapper.BmsCustomerMapper;
import com.ruoyi.price.domain.PrcIncomeBill;
import com.ruoyi.price.domain.PrcIncomeBillFee;
import com.ruoyi.price.domain.PrcOrderBill;
@@ -68,6 +70,10 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
@Autowired
private PrcOrderBillMapper orderBillMapper;
/** TMS 实时状态查询使用客户主档案,不读取订单上的历史状态快照。 */
@Autowired
private BmsCustomerMapper bmsCustomerMapper;
@Autowired
private PrcOrderBillExtMapper orderBillExtMapper;
@@ -468,6 +474,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
{
TmsOrderBillStatusResult result = new TmsOrderBillStatusResult();
result.setMatchedCount(0);
result.setMatchType(TmsOrderBillMatchType.NOT_FOUND.getCode());
return result;
}
if (bills.size() > 1)
@@ -490,7 +497,12 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
result.setTransferNo(bill.getTransferNo());
result.setCustomerId(bill.getCustomerId());
result.setCustomerCode(bill.getCustomerCode());
result.setCustomerActiveStatus(normalizeCustomerActiveStatus(bill.getCustomerActiveStatus()));
// customer_active_status 是计费时的历史快照;TMS 状态接口必须读取客户当前启用状态。
BmsCustomer customer = bill.getCustomerId() == null || bill.getCustomerId() <= 0 ? null
: bmsCustomerMapper.selectCustomerStatusByCustomerId(bill.getCustomerId());
result.setCustomerFound(customer != null);
result.setCustomerActiveStatus(resolveCurrentCustomerActiveStatus(customer));
// 欠费状态仍按订单计费时保存的快照返回,与当前客户是否存在相互独立。
result.setCreditArrearsStatus(normalizeCreditArrearsStatus(bill.getCreditArrearsStatus()));
return result;
}
@@ -543,10 +555,32 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
return TmsOrderBillMatchType.TRANSFER_NO;
}
private String normalizeCustomerActiveStatus(String status)
/**
* 将客户主表的启用状态转换为 TMS 接口状态。
* 客户不存在或已被逻辑删除时返回 MISSING,不能回退使用订单上的历史快照。
*/
private String resolveCurrentCustomerActiveStatus(BmsCustomer customer)
{
BillCustomerActiveStatus statusEnum = BillCustomerActiveStatus.of(status);
return statusEnum == null ? normalizeUnknownStatus(status) : statusEnum.getCode();
if (customer == null)
{
return BillCustomerActiveStatus.MISSING.getCode();
}
String normalized = StringUtils.trim(customer.getIsEnable());
if (StringUtils.isEmpty(normalized))
{
// 客户存在但启用状态为空时按非正常状态处理,确保接口只返回约定枚举。
return BillCustomerActiveStatus.DISABLED.getCode();
}
if ("0".equals(normalized))
{
return BillCustomerActiveStatus.ACTIVE.getCode();
}
if ("1".equals(normalized))
{
return BillCustomerActiveStatus.DISABLED.getCode();
}
// 客户存在但状态值异常时按非正常状态处理,确保接口只返回约定枚举。
return BillCustomerActiveStatus.DISABLED.getCode();
}
private String normalizeCreditArrearsStatus(String status)