发票名识别校验
This commit is contained in:
parent
c467e552df
commit
96151fbc55
|
@ -0,0 +1,188 @@
|
||||||
|
package zcgj.zcdev.zcdev.pr.plugin.form;
|
||||||
|
|
||||||
|
import kd.bos.coderule.api.CodeRuleInfo;
|
||||||
|
import kd.bos.context.RequestContext;
|
||||||
|
import kd.bos.dataentity.entity.DynamicObject;
|
||||||
|
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||||
|
import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
|
||||||
|
import kd.bos.dataentity.resource.ResManager;
|
||||||
|
import kd.bos.dataentity.utils.StringUtils;
|
||||||
|
import kd.bos.entity.MainEntityType;
|
||||||
|
import kd.bos.exception.KDBizException;
|
||||||
|
import kd.bos.logging.Log;
|
||||||
|
import kd.bos.logging.LogFactory;
|
||||||
|
import kd.bos.orm.query.QFilter;
|
||||||
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||||
|
import kd.bos.servicehelper.coderule.CodeRuleServiceHelper;
|
||||||
|
import kd.ec.basedata.common.enums.BillStatusEnum;
|
||||||
|
import kd.ec.basedata.common.enums.DefaultEnum;
|
||||||
|
import kd.ec.basedata.common.invoicecloud.InvoiceDataHandleHelper;
|
||||||
|
import kd.ec.basedata.common.invoicecloud.bean.InvoiceItemVO;
|
||||||
|
import kd.ec.basedata.common.invoicecloud.bean.InvoiceVO;
|
||||||
|
import kd.ec.basedata.common.invoicecloud.enumeration.InvoiceTypeEnum;
|
||||||
|
import kd.ec.basedata.common.utils.TextHelper;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class InvoiceNameRecognitionBillPlugin extends InvoiceDataHandleHelper {
|
||||||
|
private static final Log log = LogFactory.getLog(InvoiceNameRecognitionBillPlugin.class);
|
||||||
|
public static DynamicObject generateInvoiceByVO(InvoiceVO invoiceVO, MainEntityType dt, long id, long userID, long orgID, Date date, DynamicObject currency) {
|
||||||
|
DynamicObject invoice = new DynamicObject(dt);
|
||||||
|
invoice.set("id", id);
|
||||||
|
invoice.set("serialno", invoiceVO.getSerialNo());
|
||||||
|
InvoiceTypeEnum invoiceTypeEnum = InvoiceTypeEnum.getEnumByValue(invoiceVO.getInvoiceType()); //根据值 返回对应的发票类型
|
||||||
|
if (invoiceTypeEnum != null) {
|
||||||
|
QFilter invoiceTypeFilter = new QFilter("name", "=", invoiceTypeEnum.getName());
|
||||||
|
DynamicObject invoiceType = BusinessDataServiceHelper.loadSingle("ec_invoice_type", "id", new QFilter[]{invoiceTypeFilter});//搜索指定的发票类型
|
||||||
|
invoice.set("invoicetypeid", invoiceType);//设置发票类型
|
||||||
|
}
|
||||||
|
|
||||||
|
invoice.set("invoicecode", invoiceVO.getInvoiceCode());//设置发票代码
|
||||||
|
invoice.set("invoiceno", invoiceVO.getInvoiceNo());//发票号码
|
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
|
||||||
|
try {
|
||||||
|
Date invoiceDate = format.parse(invoiceVO.getInvoiceDate());
|
||||||
|
invoice.set("invoicedate", invoiceDate);//设置发票日期
|
||||||
|
} catch (ParseException var32) {
|
||||||
|
log.info("parse invoice date error.");
|
||||||
|
}
|
||||||
|
//设置发票的货币、含税总金额、未核销金额、总税额、未核销税额和总金额。
|
||||||
|
invoice.set("currency", currency);
|
||||||
|
invoice.set("totaloftaxamount", invoiceVO.getTotalAmount());
|
||||||
|
invoice.set("unapplyamount", invoiceVO.getTotalAmount());
|
||||||
|
invoice.set("totaltax", invoiceVO.getTaxAmount());
|
||||||
|
invoice.set("unapplyinvtax", invoiceVO.getTaxAmount());
|
||||||
|
invoice.set("totalamount", invoiceVO.getAmount());
|
||||||
|
//设置购买方的税号、银行名称、银行账号、电话号码和地址。
|
||||||
|
invoice.set("buyertaxno", invoiceVO.getBuyerTaxNo());
|
||||||
|
invoice.set("buyerbank", TextHelper.getBankName(invoiceVO.getBuyerAccount()));
|
||||||
|
invoice.set("buyeraccount", TextHelper.getBankNum(invoiceVO.getBuyerAccount()));
|
||||||
|
invoice.set("buyerphone", TextHelper.getPhoneNum(invoiceVO.getBuyerAddressPhone()));
|
||||||
|
invoice.set("buyeraddress", TextHelper.getAddress(invoiceVO.getBuyerAddressPhone()));
|
||||||
|
if (StringUtils.equals(dt.getName(), "ec_in_invoice")) {
|
||||||
|
invoice.set("isreceived", "1");
|
||||||
|
}
|
||||||
|
|
||||||
|
invoice.set("source", "03");
|
||||||
|
invoice.set("buyername", invoiceVO.getBuyerName());//设置购买方
|
||||||
|
//原来是name 改为ffirmname
|
||||||
|
QFilter buyerFilter = new QFilter("ffirmname", "=", invoiceVO.getBuyerName());
|
||||||
|
//如果是进项发票,在业务单元里搜索 指定买方信息 否则在客户里搜索
|
||||||
|
DynamicObject buyer = StringUtils.equals(dt.getName(), "ec_in_invoice") ? BusinessDataServiceHelper.loadSingle("bos_org", "", new QFilter[]{buyerFilter}) : BusinessDataServiceHelper.loadSingle("bd_customer", "", new QFilter[]{new QFilter("name", "=", invoiceVO.getBuyerName())});
|
||||||
|
if (buyer == null) {
|
||||||
|
log.info("buyer: "+invoiceVO.getBuyerName()+"is null");
|
||||||
|
throw new KDBizException(String.format(ResManager.loadKDString("发票【%1$s】:购买方【%2$s】不存在。", "InvoiceDataHandleHelper_5", "ec-ecbd-common", new Object[0]), invoiceVO.getInvoiceCode(), invoiceVO.getBuyerName()));
|
||||||
|
} else {
|
||||||
|
invoice.set("buyer", buyer);
|
||||||
|
invoice.set("sellertaxno", invoiceVO.getSalerTaxNo());
|
||||||
|
invoice.set("sellerbank", TextHelper.getBankName(invoiceVO.getSalerAccount()));
|
||||||
|
invoice.set("selleraccount", TextHelper.getBankNum(invoiceVO.getSalerAccount()));
|
||||||
|
invoice.set("sellerphone", TextHelper.getPhoneNum(invoiceVO.getSalerAddressPhone()));
|
||||||
|
invoice.set("selleraddress", TextHelper.getAddress(invoiceVO.getSalerAddressPhone()));
|
||||||
|
String sellerName = invoiceVO.getSalerName();
|
||||||
|
invoice.set("sellername", sellerName);
|
||||||
|
/**
|
||||||
|
* 设置销售方的税号、银行名称、银行账号、电话号码和地址。
|
||||||
|
* 根据销售方名称加载销售方信息(可能是供应商或组织),如果销售方不存在,抛出异常。
|
||||||
|
*/
|
||||||
|
QFilter sellerFilter = new QFilter("name", "=", sellerName);
|
||||||
|
if (!sellerName.contains("(") && !sellerName.contains(")")) {
|
||||||
|
if (sellerName.contains("(") || sellerName.contains(")")) {
|
||||||
|
sellerName.replace('(', '(');
|
||||||
|
sellerName.replace(')', ')');
|
||||||
|
sellerFilter.or("name", "=", sellerName);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sellerName.replace('(', '(');
|
||||||
|
sellerName.replace(')', ')');
|
||||||
|
sellerFilter.or("name", "=", sellerName);
|
||||||
|
}
|
||||||
|
|
||||||
|
DynamicObject seller = StringUtils.equals(dt.getName(), "ec_in_invoice") ? BusinessDataServiceHelper.loadSingle("bd_supplier", "", new QFilter[]{sellerFilter}) : BusinessDataServiceHelper.loadSingle("bos_org", "", new QFilter[]{sellerFilter});
|
||||||
|
if (seller == null) {
|
||||||
|
throw new KDBizException(String.format(ResManager.loadKDString("发票【%1$s】:销售方【%2$s】不存在。", "InvoiceDataHandleHelper_6", "ec-ecbd-common", new Object[0]), invoiceVO.getInvoiceCode(), sellerName));
|
||||||
|
} else {
|
||||||
|
invoice.set("seller", seller);
|
||||||
|
invoice.set("invoicestatus", invoiceVO.getInvoiceStatus());
|
||||||
|
invoice.set("billstatus", BillStatusEnum.AUDIT.getValue());
|
||||||
|
invoice.set("org_id", orgID);
|
||||||
|
//处理发票明细
|
||||||
|
List<InvoiceItemVO> detailEntries = invoiceVO.getItems();
|
||||||
|
if (detailEntries != null && !detailEntries.isEmpty()) {
|
||||||
|
DynamicObjectCollection invoiceEntries = invoice.getDynamicObjectCollection("entryentity");
|
||||||
|
DynamicObjectType entryDt = (new DynamicObject(dt)).getDynamicObjectCollection("entryentity").getDynamicObjectType();
|
||||||
|
|
||||||
|
for(InvoiceItemVO item : detailEntries) {
|
||||||
|
DynamicObject entry = new DynamicObject(entryDt);
|
||||||
|
entry.set("name", item.getGoodsName());
|
||||||
|
entry.set("model", item.getSpecModel());
|
||||||
|
String unitName = item.getUnit();
|
||||||
|
if (unitName != null && !unitName.isEmpty()) {
|
||||||
|
QFilter unitFilter = (new QFilter("name", "=", unitName)).or("number", "=", unitName).or("number", "=", unitName.toLowerCase()).or("number", "=", unitName.toUpperCase());
|
||||||
|
QFilter validFilter = (new QFilter("enable", "=", DefaultEnum.YES.getValue().charAt(0))).and("status", "=", BillStatusEnum.AUDIT.getValue().charAt(0));
|
||||||
|
DynamicObject unit = BusinessDataServiceHelper.loadSingle("bd_measureunits", "name", new QFilter[]{unitFilter, validFilter});
|
||||||
|
if (unit != null) {
|
||||||
|
entry.set("unit", unit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
entry.set("qty", item.getNum());
|
||||||
|
BigDecimal price = item.getUnitPrice();
|
||||||
|
entry.set("price", item.getUnitPrice());
|
||||||
|
entry.set("amount", item.getDetailAmount());
|
||||||
|
BigDecimal ofTaxPrice = price;
|
||||||
|
BigDecimal tax = item.getTaxRate();
|
||||||
|
if (tax != null) {
|
||||||
|
BigDecimal taxRateHundred = tax.multiply(BigDecimal.TEN.multiply(BigDecimal.TEN));
|
||||||
|
QFilter taxFilter = new QFilter("taxrate", "=", taxRateHundred);
|
||||||
|
DynamicObject[] taxRate = BusinessDataServiceHelper.load("bd_taxrate", "name", new QFilter[]{taxFilter});
|
||||||
|
if (taxRate != null && taxRate.length > 0) {
|
||||||
|
entry.set("taxrate", taxRate[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (price != null) {
|
||||||
|
ofTaxPrice = price.multiply(BigDecimal.ONE.add(tax));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
entry.set("oftaxprice", ofTaxPrice);
|
||||||
|
entry.set("tax", item.getTaxAmount());
|
||||||
|
entry.set("oftaxamount", item.getDetailAmount().add(item.getTaxAmount() == null ? BigDecimal.ZERO : item.getTaxAmount()));
|
||||||
|
invoiceEntries.add(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String snapshotUrl = invoiceVO.getSnapshotUrl();
|
||||||
|
if (!StringUtils.isBlank(snapshotUrl)) {
|
||||||
|
DynamicObjectCollection pictureEntries = invoice.getDynamicObjectCollection("pictureentry");
|
||||||
|
DynamicObjectType pictureEntryDt = (new DynamicObject(dt)).getDynamicObjectCollection("pictureentry").getDynamicObjectType();
|
||||||
|
DynamicObject item = new DynamicObject(pictureEntryDt);
|
||||||
|
item.set("filename", invoiceVO.getInvoiceNo());
|
||||||
|
item.set("imageurl", snapshotUrl);
|
||||||
|
item.set("uploaddate", date);
|
||||||
|
pictureEntries.add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
invoice.set("creator_id", userID);
|
||||||
|
invoice.set("modifier_id", userID);
|
||||||
|
invoice.set("auditor_id", userID);
|
||||||
|
invoice.set("createtime", date);
|
||||||
|
invoice.set("modifytime", date);
|
||||||
|
invoice.set("auditdate", date);
|
||||||
|
CodeRuleInfo codeRuleInfo = CodeRuleServiceHelper.getCodeRule(dt.getName(), invoice, String.valueOf(RequestContext.get().getOrgId()));
|
||||||
|
if (null != codeRuleInfo) {
|
||||||
|
invoice.set("billno", CodeRuleServiceHelper.getNumber(codeRuleInfo, invoice));
|
||||||
|
} else {
|
||||||
|
invoice.set("billno", invoiceVO.getSerialNo());
|
||||||
|
}
|
||||||
|
|
||||||
|
return invoice;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue