package com.ruoyi.sales.vo;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import lombok.Data;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 销售台账导出对象(主从表格)。
*
* 台账字段做纵向合并居中,右侧同行展开该台账下的产品明细,避免出现大片空白单元格。
* products 必须是最后一个字段:无产品的台账不会输出产品列,若其后面还有字段会导致列错位。
*/
@Data
public class SalesLedgerExportVo {
@Excel(name = "销售合同号", needMerge = true)
private String salesContractNo;
@Excel(name = "项目名称", needMerge = true)
private String projectName;
@Excel(name = "录入日期", width = 30, dateFormat = "yyyy-MM-dd", needMerge = true)
private Date entryDate;
@Excel(name = "业务员", needMerge = true)
private String salesman;
@Excel(name = "客户名称", needMerge = true)
private String customerName;
@Excel(name = "录入人", needMerge = true)
private String entryPersonName;
@Excel(name = "合同金额", scale = 2, needMerge = true)
private BigDecimal contractAmount;
@Excel(name = "备注", needMerge = true)
private String remarks;
@Excel(name = "产品明细")
private List- products = new ArrayList<>();
@Data
public static class Item {
@Excel(name = "产品大类")
private String productCategory;
@Excel(name = "规格型号")
private String specificationModel;
@Excel(name = "单位")
private String unit;
@Excel(name = "数量", cellType = Excel.ColumnType.NUMERIC)
private BigDecimal quantity;
@Excel(name = "待发货数量", cellType = Excel.ColumnType.NUMERIC)
private BigDecimal noQuantity;
@Excel(name = "发货状态")
private String shippingStatus;
@Excel(name = "税率(%)", cellType = Excel.ColumnType.NUMERIC)
private BigDecimal taxRate;
@Excel(name = "含税单价(元)", scale = 2)
private BigDecimal taxInclusiveUnitPrice;
@Excel(name = "含税总价(元)", scale = 2)
private BigDecimal taxInclusiveTotalPrice;
@Excel(name = "不含税总价(元)", scale = 2)
private BigDecimal taxExclusiveTotalPrice;
public static Item fromProduct(SalesLedgerProduct product) {
Item item = new Item();
item.setProductCategory(product.getProductCategory());
item.setSpecificationModel(product.getSpecificationModel());
item.setUnit(product.getUnit());
item.setQuantity(product.getQuantity());
item.setNoQuantity(product.getNoQuantity());
item.setShippingStatus(product.getShippingStatus());
item.setTaxRate(product.getTaxRate());
item.setTaxInclusiveUnitPrice(product.getTaxInclusiveUnitPrice());
item.setTaxInclusiveTotalPrice(product.getTaxInclusiveTotalPrice());
item.setTaxExclusiveTotalPrice(product.getTaxExclusiveTotalPrice());
return item;
}
}
public static SalesLedgerExportVo fromLedger(SalesLedger ledger) {
SalesLedgerExportVo vo = new SalesLedgerExportVo();
vo.setSalesContractNo(ledger.getSalesContractNo());
vo.setProjectName(ledger.getProjectName());
vo.setEntryDate(ledger.getEntryDate());
vo.setSalesman(ledger.getSalesman());
vo.setCustomerName(ledger.getCustomerName());
vo.setEntryPersonName(ledger.getEntryPersonName());
vo.setContractAmount(ledger.getContractAmount());
vo.setRemarks(ledger.getRemarks());
return vo;
}
public void addProduct(SalesLedgerProduct product) {
this.products.add(Item.fromProduct(product));
}
}