|
|
|
@@ -55,6 +55,7 @@ import com.bms.ar.domain.ArExportTemplate;
|
|
|
|
|
import com.bms.ar.event.ArBillExportTaskEvent;
|
|
|
|
|
import com.bms.ar.event.ArBillGenerateTaskEvent;
|
|
|
|
|
import com.bms.ar.enums.ArBillGenerateTaskStatus;
|
|
|
|
|
import com.bms.ar.enums.ArBillDateType;
|
|
|
|
|
import com.bms.ar.enums.ArBillGenerationStatus;
|
|
|
|
|
import com.bms.ar.enums.ArBillSelectionMode;
|
|
|
|
|
import com.bms.ar.enums.ArBillStatus;
|
|
|
|
@@ -319,7 +320,7 @@ public class ArBillServiceImpl implements IArBillService {
|
|
|
|
|
List<String> excludeOrderIdentifiers = normalizeOrderIdentifiers(query.getExcludeOrderOrTrackingNo());
|
|
|
|
|
List<PrcOrderBill> result = sourceBillMapper.selectPrcOrderBillByCustomerPeriod(query.getCustomerId(),
|
|
|
|
|
query.getCustomerCode(), orderIdentifiers,
|
|
|
|
|
excludeOrderIdentifiers, query.getBillPeriodEnd(), query.getCurrency(),
|
|
|
|
|
excludeOrderIdentifiers, query.getBillPeriodEnd(), query.getDateType(), query.getCurrency(),
|
|
|
|
|
eligibleOrderBillStatuses(), ArIncomeBillFeeStatus.UNBILLED.getCode(), null);
|
|
|
|
|
log.debug("应收账单生成范围预览查询完成,customerId={}, billPeriodEnd={}, currency={}, resultCount={}, costMs={}",
|
|
|
|
|
query.getCustomerId(), query.getBillPeriodEnd(), safeLogValue(query.getCurrency()),
|
|
|
|
@@ -349,7 +350,7 @@ public class ArBillServiceImpl implements IArBillService {
|
|
|
|
|
List<String> excludeOrderIdentifiers = normalizeOrderIdentifiers(query.getExcludeOrderOrTrackingNo());
|
|
|
|
|
BigDecimal total = nvl(sourceBillMapper.sumPrcOrderBillIncomeByCustomerPeriod(query.getCustomerId(),
|
|
|
|
|
query.getCustomerCode(), orderIdentifiers,
|
|
|
|
|
excludeOrderIdentifiers, query.getBillPeriodEnd(), query.getCurrency(),
|
|
|
|
|
excludeOrderIdentifiers, query.getBillPeriodEnd(), query.getDateType(), query.getCurrency(),
|
|
|
|
|
eligibleOrderBillStatuses(), ArIncomeBillFeeStatus.UNBILLED.getCode()));
|
|
|
|
|
log.debug("应收账单生成范围金额汇总完成,customerId={}, billPeriodEnd={}, currency={}, costMs={}",
|
|
|
|
|
query.getCustomerId(), query.getBillPeriodEnd(), safeLogValue(query.getCurrency()),
|
|
|
|
@@ -604,7 +605,7 @@ public class ArBillServiceImpl implements IArBillService {
|
|
|
|
|
int totalCount = sourceBillMapper.countPrcOrderBillByCustomerPeriod(
|
|
|
|
|
request.getCustomerId(), request.getCustomerCode(),
|
|
|
|
|
normalizeOrderIdentifiers(request.getOrderOrTrackingNo()),
|
|
|
|
|
request.getBillPeriodEnd(), request.getCurrency(), eligibleOrderBillStatuses(),
|
|
|
|
|
request.getBillPeriodEnd(), request.getDateType(), request.getCurrency(), eligibleOrderBillStatuses(),
|
|
|
|
|
ArIncomeBillFeeStatus.UNBILLED.getCode(), task.getSnapshotCreateTime(), null,
|
|
|
|
|
excludedSourceBillIds, excludedOrderIdentifiers);
|
|
|
|
|
if (totalCount <= 0) {
|
|
|
|
@@ -731,7 +732,8 @@ public class ArBillServiceImpl implements IArBillService {
|
|
|
|
|
List<PrcOrderBill> sources = sourceBillMapper.selectPrcOrderBillByCustomerPeriodCursor(
|
|
|
|
|
request.getCustomerId(), request.getCustomerCode(),
|
|
|
|
|
normalizeOrderIdentifiers(request.getOrderOrTrackingNo()),
|
|
|
|
|
request.getBillPeriodEnd(), StringUtils.isEmpty(request.getCurrency()) ? "CNY" : request.getCurrency(),
|
|
|
|
|
request.getBillPeriodEnd(), request.getDateType(),
|
|
|
|
|
StringUtils.isEmpty(request.getCurrency()) ? "CNY" : request.getCurrency(),
|
|
|
|
|
eligibleOrderBillStatuses(), ArIncomeBillFeeStatus.UNBILLED.getCode(),
|
|
|
|
|
task.getSnapshotCreateTime(), task.getLastSourceBillId(),
|
|
|
|
|
explicitIds, selectionMode == ArBillSelectionMode.ALL_MATCHED ? excludedSourceBillIds : null,
|
|
|
|
@@ -836,7 +838,7 @@ public class ArBillServiceImpl implements IArBillService {
|
|
|
|
|
}
|
|
|
|
|
int processedCount = (task.getProcessedCount() == null ? 0 : task.getProcessedCount()) + sources.size();
|
|
|
|
|
BigDecimal totalAmount = nvl(task.getTotalAmount()).add(batchAmount);
|
|
|
|
|
Date periodStart = earliestBizDate(sources);
|
|
|
|
|
Date periodStart = earliestDate(sources, request.getDateType());
|
|
|
|
|
billMapper.updateArBillProgress(bill.getArBillId(), processedCount, totalAmount, totalAmount,
|
|
|
|
|
periodStart, task.getCreateBy());
|
|
|
|
|
String lastSourceBillId = sources.get(sources.size() - 1).getBillId();
|
|
|
|
@@ -2181,6 +2183,7 @@ public class ArBillServiceImpl implements IArBillService {
|
|
|
|
|
if (StringUtils.isNotEmpty(request.getRemark()) && request.getRemark().trim().length() > 500) {
|
|
|
|
|
throw new ServiceException("备注不能超过500个字符");
|
|
|
|
|
}
|
|
|
|
|
request.setDateType(normalizeDateType(request.getDateType()));
|
|
|
|
|
// 生成任务会保存原始请求快照,先在入任务前校验号码数量,避免后台任务创建后才失败。
|
|
|
|
|
normalizeOrderIdentifiers(request.getOrderOrTrackingNo());
|
|
|
|
|
}
|
|
|
|
@@ -2190,6 +2193,7 @@ public class ArBillServiceImpl implements IArBillService {
|
|
|
|
|
|| query.getBillPeriodEnd() == null) {
|
|
|
|
|
throw new ServiceException("客户和账单截止日不能为空");
|
|
|
|
|
}
|
|
|
|
|
query.setDateType(normalizeDateType(query.getDateType()));
|
|
|
|
|
int identifierCount = normalizeOrderIdentifiers(query.getOrderOrTrackingNo()).size()
|
|
|
|
|
+ normalizeOrderIdentifiers(query.getExcludeOrderOrTrackingNo()).size();
|
|
|
|
|
if (identifierCount > ORDER_IDENTIFIER_LIMIT) {
|
|
|
|
@@ -2203,16 +2207,26 @@ public class ArBillServiceImpl implements IArBillService {
|
|
|
|
|
return Arrays.asList(ArOrderBillStatus.UNBILLED.getCode(), ArOrderBillStatus.PARTIAL.getCode());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Date earliestBizDate(List<PrcOrderBill> sources) {
|
|
|
|
|
private Date earliestDate(List<PrcOrderBill> sources, String dateType) {
|
|
|
|
|
boolean usePickupDate = ArBillDateType.PICKUP_DATE.getCode().equals(dateType);
|
|
|
|
|
Date earliest = null;
|
|
|
|
|
for (PrcOrderBill source : sources) {
|
|
|
|
|
if (source.getBizDate() != null && (earliest == null || source.getBizDate().before(earliest))) {
|
|
|
|
|
earliest = source.getBizDate();
|
|
|
|
|
Date sourceDate = usePickupDate ? source.getPickupDate() : source.getBizDate();
|
|
|
|
|
if (sourceDate != null && (earliest == null || sourceDate.before(earliest))) {
|
|
|
|
|
earliest = sourceDate;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return earliest == null ? new Date() : earliest;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String normalizeDateType(String dateType) {
|
|
|
|
|
ArBillDateType type = ArBillDateType.of(dateType);
|
|
|
|
|
if (type == null) {
|
|
|
|
|
throw new ServiceException("账单日期类型无效");
|
|
|
|
|
}
|
|
|
|
|
return type.getCode();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<String> normalizeSourceBillIds(List<String> sourceBillIds) {
|
|
|
|
|
LinkedHashSet<String> uniqueIds = new LinkedHashSet<>();
|
|
|
|
|
if (sourceBillIds != null) {
|
|
|
|
|