feat: 开票申请查看增加每张发票金蝶开票状态与结果备注
This commit is contained in:
+5
@@ -26,6 +26,7 @@
|
|||||||
package org.springblade.transport.pojo.vo;
|
package org.springblade.transport.pojo.vo;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import org.springblade.transport.pojo.entity.InvoiceApplicationLine;
|
import org.springblade.transport.pojo.entity.InvoiceApplicationLine;
|
||||||
@@ -44,4 +45,8 @@ import java.util.List;
|
|||||||
public class InvoiceApplicationSheetVO extends InvoiceApplicationSheet {
|
public class InvoiceApplicationSheetVO extends InvoiceApplicationSheet {
|
||||||
@Serial private static final long serialVersionUID = 1L;
|
@Serial private static final long serialVersionUID = 1L;
|
||||||
@TableField(exist = false) private List<InvoiceApplicationLine> lines;
|
@TableField(exist = false) private List<InvoiceApplicationLine> lines;
|
||||||
|
@Schema(description = "开票状态名称(按金蝶回写的发票结果实时推导:已开票/未开票)")
|
||||||
|
@TableField(exist = false) private String invoiceStatusName;
|
||||||
|
@Schema(description = "金蝶开票结果备注(本张发票经 A303-5 回写的发票号、开票日期、价税合计汇总)")
|
||||||
|
@TableField(exist = false) private String kingdeeResultRemark;
|
||||||
}
|
}
|
||||||
|
|||||||
+37
-3
@@ -138,6 +138,9 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl<InvoiceApplic
|
|||||||
implements IInvoiceApplicationService {
|
implements IInvoiceApplicationService {
|
||||||
/** A303-5 开票结果批量查询单批单据编号上限(接口限制 50) */
|
/** A303-5 开票结果批量查询单批单据编号上限(接口限制 50) */
|
||||||
private static final int INVOICE_RESULT_QUERY_BATCH = 50;
|
private static final int INVOICE_RESULT_QUERY_BATCH = 50;
|
||||||
|
/** 张次开票状态展示文案(按金蝶回写的发票结果实时推导) */
|
||||||
|
private static final String INVOICE_STATUS_INVOICED = "已开票";
|
||||||
|
private static final String INVOICE_STATUS_UNINVOICED = "未开票";
|
||||||
/** 金蝶开票结果回写 single-flight 锁键前缀(多副本定时任务与手动触发共用) */
|
/** 金蝶开票结果回写 single-flight 锁键前缀(多副本定时任务与手动触发共用) */
|
||||||
private static final String INVOICE_RESULT_SYNC_LOCK_PREFIX = "transport:invoice-application:kingdee-invoice-result-sync:";
|
private static final String INVOICE_RESULT_SYNC_LOCK_PREFIX = "transport:invoice-application:kingdee-invoice-result-sync:";
|
||||||
private final InvoiceApplicationSettlementMapper settlementRelationMapper;
|
private final InvoiceApplicationSettlementMapper settlementRelationMapper;
|
||||||
@@ -251,10 +254,23 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl<InvoiceApplic
|
|||||||
vo.setSettlements(relations);
|
vo.setSettlements(relations);
|
||||||
List<InvoiceApplicationSheet> sheets = sheetMapper.selectList(Wrappers.<InvoiceApplicationSheet>lambdaQuery()
|
List<InvoiceApplicationSheet> sheets = sheetMapper.selectList(Wrappers.<InvoiceApplicationSheet>lambdaQuery()
|
||||||
.eq(InvoiceApplicationSheet::getInvoiceApplicationId, id).orderByAsc(InvoiceApplicationSheet::getSheetNo));
|
.eq(InvoiceApplicationSheet::getInvoiceApplicationId, id).orderByAsc(InvoiceApplicationSheet::getSheetNo));
|
||||||
|
List<InvoiceApplicationInvoice> invoices = invoiceApplicationInvoiceMapper.selectList(
|
||||||
|
Wrappers.<InvoiceApplicationInvoice>lambdaQuery()
|
||||||
|
.eq(InvoiceApplicationInvoice::getInvoiceApplicationId, id)
|
||||||
|
.orderByAsc(InvoiceApplicationInvoice::getCreateTime));
|
||||||
|
vo.setInvoices(invoices);
|
||||||
|
// 每张发票的金蝶开票结果:按张次金蝶单号归集,查看页展示开票状态与结果备注
|
||||||
|
Map<String, List<InvoiceApplicationInvoice>> invoicesBySerialNo = invoices.stream()
|
||||||
|
.filter(invoice -> Func.isNotBlank(invoice.getSerialNo()))
|
||||||
|
.collect(Collectors.groupingBy(invoice -> Func.toStr(invoice.getSerialNo()).trim()));
|
||||||
vo.setSheets(sheets.stream().map(sheet -> {
|
vo.setSheets(sheets.stream().map(sheet -> {
|
||||||
InvoiceApplicationSheetVO sheetVO = Objects.requireNonNull(BeanUtil.copyProperties(sheet, InvoiceApplicationSheetVO.class));
|
InvoiceApplicationSheetVO sheetVO = Objects.requireNonNull(BeanUtil.copyProperties(sheet, InvoiceApplicationSheetVO.class));
|
||||||
sheetVO.setLines(lineMapper.selectList(Wrappers.<InvoiceApplicationLine>lambdaQuery()
|
sheetVO.setLines(lineMapper.selectList(Wrappers.<InvoiceApplicationLine>lambdaQuery()
|
||||||
.eq(InvoiceApplicationLine::getInvoiceSheetId, sheet.getId()).orderByAsc(InvoiceApplicationLine::getLineNo)));
|
.eq(InvoiceApplicationLine::getInvoiceSheetId, sheet.getId()).orderByAsc(InvoiceApplicationLine::getLineNo)));
|
||||||
|
List<InvoiceApplicationInvoice> sheetInvoices =
|
||||||
|
invoicesBySerialNo.get(Func.toStr(sheet.getKingdeeBillNo()).trim());
|
||||||
|
sheetVO.setInvoiceStatusName(Func.isEmpty(sheetInvoices) ? INVOICE_STATUS_UNINVOICED : INVOICE_STATUS_INVOICED);
|
||||||
|
sheetVO.setKingdeeResultRemark(Func.isEmpty(sheetInvoices) ? "" : kingdeeResultRemark(sheetInvoices));
|
||||||
return sheetVO;
|
return sheetVO;
|
||||||
}).toList());
|
}).toList());
|
||||||
vo.setDetails(applicationDetailMapper.selectList(Wrappers.<InvoiceApplicationDetail>lambdaQuery()
|
vo.setDetails(applicationDetailMapper.selectList(Wrappers.<InvoiceApplicationDetail>lambdaQuery()
|
||||||
@@ -262,9 +278,6 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl<InvoiceApplic
|
|||||||
vo.setRecords(recordMapper.selectList(Wrappers.<InvoiceApplicationRecord>lambdaQuery()
|
vo.setRecords(recordMapper.selectList(Wrappers.<InvoiceApplicationRecord>lambdaQuery()
|
||||||
.eq(InvoiceApplicationRecord::getInvoiceApplicationId, id)
|
.eq(InvoiceApplicationRecord::getInvoiceApplicationId, id)
|
||||||
.orderByAsc(InvoiceApplicationRecord::getCreateTime)));
|
.orderByAsc(InvoiceApplicationRecord::getCreateTime)));
|
||||||
vo.setInvoices(invoiceApplicationInvoiceMapper.selectList(Wrappers.<InvoiceApplicationInvoice>lambdaQuery()
|
|
||||||
.eq(InvoiceApplicationInvoice::getInvoiceApplicationId, id)
|
|
||||||
.orderByAsc(InvoiceApplicationInvoice::getCreateTime)));
|
|
||||||
return vo;
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1340,6 +1353,27 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl<InvoiceApplic
|
|||||||
.collect(Collectors.toMap(InvoiceApplicationInvoice::getInvoiceNo, Function.identity(), (left, right) -> left));
|
.collect(Collectors.toMap(InvoiceApplicationInvoice::getInvoiceNo, Function.identity(), (left, right) -> left));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 汇总本张发票经 A303-5 回写的金蝶开票结果备注(发票号、开票日期、价税合计)
|
||||||
|
*
|
||||||
|
* @param sheetInvoices 本张发票的金蝶发票结果
|
||||||
|
* @return 结果备注
|
||||||
|
*/
|
||||||
|
private String kingdeeResultRemark(List<InvoiceApplicationInvoice> sheetInvoices) {
|
||||||
|
return sheetInvoices.stream()
|
||||||
|
.map(invoice -> {
|
||||||
|
StringBuilder remark = new StringBuilder("发票号").append(Func.toStr(invoice.getInvoiceNo()));
|
||||||
|
if (invoice.getInvoiceDate() != null) {
|
||||||
|
remark.append(",开票日期").append(invoice.getInvoiceDate().toLocalDate());
|
||||||
|
}
|
||||||
|
if (invoice.getInvoiceAmount() != null) {
|
||||||
|
remark.append(",价税合计").append(invoice.getInvoiceAmount());
|
||||||
|
}
|
||||||
|
return remark.toString();
|
||||||
|
})
|
||||||
|
.collect(Collectors.joining(";"));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将 A303-5 返回的发票文件地址补齐到已落库记录(仅补空字段,不覆盖已有值)
|
* 将 A303-5 返回的发票文件地址补齐到已落库记录(仅补空字段,不覆盖已有值)
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user