1.传BIP税率字段逻辑优化

This commit is contained in:
李贵强 2025-06-09 13:52:58 +08:00
parent 0b87fa9d49
commit 32bab7cf7e
3 changed files with 85 additions and 14 deletions

View File

@ -272,13 +272,29 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin {
indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:物料单位不能为空或空字符串"); indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:物料单位不能为空或空字符串");
} }
// String name = (String) map.get("qeug_materialnames"); // 物料单位 JSONObject taxRateObj = (JSONObject) map.get("qeug_taxrate");
// String model = (String) map.get("qeug_importmodel")==null ? "":(String) map.get("qeug_importmodel"); // 物料规格 if (taxRateObj != null) {
// String name = taxRateObj.getString("name"); // 税率名称
// // 校验物料编码是否已经存在于当前页面的表格中 if (name != null && !name.trim().isEmpty()) {
// if (existComb.contains(name.trim()+model.trim())) { // 验证name必须是带%的文本格式
// indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:物料+规格已存在,请勿重复导入"); if (!name.contains("%")) {
// } indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:税率格式错误!系统无法识别,请输入带%的文本格式例如13%");
} else {
// 可选进一步验证%位置和数字格式
String numPart = name.replace("%", "").trim();
try {
// 尝试转换为数字验证是否是有效的百分比数值
Double.parseDouble(numPart);
// 可以添加更多验证比如%是否在末尾
if (!name.trim().endsWith("%")) {
indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:税率格式错误!百分比符号(%)应放在数值末尾例如13%");
}
} catch (NumberFormatException e) {
indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:税率格式错误!百分比数值部分无效,请输入有效数值加%例如13%");
}
}
}
}
} }
return indexVsMsgMap; return indexVsMsgMap;

View File

@ -649,9 +649,13 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
items.put("taxrate","0");//税率 items.put("taxrate","0");//税率
items.put("local_tax_de","0");//税额 items.put("local_tax_de","0");//税额
items.put("taxcodeid","CN07");//税码 items.put("taxcodeid","CN07");//税码
items.put("notax_de",payRequestInfo.getBigDecimal("notaxamt").toString());//贷方无税金额除税金额
items.put("local_notax_de",payRequestInfo.getBigDecimal("notaxamt").toString());//组织本币无税金额
} else { } else {
// 税额 // 税额
BigDecimal taxAmount = BigDecimal.ZERO; BigDecimal taxAmount = BigDecimal.ZERO;
//无税金额(专普混合专票无税+普票价税合计)
BigDecimal notTaxAmount = BigDecimal.ZERO;
// 税率相关变量 // 税率相关变量
BigDecimal commonTaxRate = null; BigDecimal commonTaxRate = null;
Long commonTaxRateId = null; Long commonTaxRateId = null;
@ -664,11 +668,16 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
Object pkValue = invoiceBillF7.getPkValue(); Object pkValue = invoiceBillF7.getPkValue();
DynamicObject invoiceBill = BusinessDataServiceHelper.loadSingle(pkValue, "recon_invoicebill"); DynamicObject invoiceBill = BusinessDataServiceHelper.loadSingle(pkValue, "recon_invoicebill");
if (invoiceBill != null) { if (invoiceBill != null) {
//表头不含税
BigDecimal notTax=invoiceBill.getBigDecimal("notaxamt");
//表头价税合计
BigDecimal amount=invoiceBill.getBigDecimal("amount");
// 判断发票登记-发票类型-名称 // 判断发票登记-发票类型-名称
DynamicObject invoice = invoiceBill.getDynamicObject("invoice"); DynamicObject invoice = invoiceBill.getDynamicObject("invoice");
if (invoice != null) { if (invoice != null) {
String invoiceName = invoice.getString("name"); String invoiceName = invoice.getString("name");
if (invoiceName != null && invoiceName.contains("专用")) { if (invoiceName != null && invoiceName.contains("专用")) {
notTaxAmount=notTaxAmount.add(notTax);
// 发票登记-发票明细 // 发票登记-发票明细
DynamicObjectCollection invoiceDetails = invoiceBill.getDynamicObjectCollection("invoiceentry"); DynamicObjectCollection invoiceDetails = invoiceBill.getDynamicObjectCollection("invoiceentry");
if (invoiceDetails != null && invoiceDetails.size() != 0) { if (invoiceDetails != null && invoiceDetails.size() != 0) {
@ -695,6 +704,9 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
} }
} }
} }
}else {
notTaxAmount=notTaxAmount.add(amount);
} }
} }
} }
@ -703,10 +715,14 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
// 设置税额 // 设置税额
items.put("local_tax_de", taxAmount.compareTo(BigDecimal.ZERO)==0 ? "0":taxAmount.toString()); items.put("local_tax_de", taxAmount.compareTo(BigDecimal.ZERO)==0 ? "0":taxAmount.toString());
//不含税
items.put("notax_de",notTaxAmount.toString());//贷方无税金额除税金额
items.put("local_notax_de",notTaxAmount.toString());//组织本币无税金额
// 设置税率值所有税率相同则使用共同税率不同则设为null // 设置税率值所有税率相同则使用共同税率存在多税率传0
if (hasDifferentTaxRates) { if (hasDifferentTaxRates) {
items.put("taxrate", "0"); items.put("taxrate", "0");
items.put("taxcodeid", "CN07");
} else if (commonTaxRate != null) { } else if (commonTaxRate != null) {
// 设置税率 // 设置税率
items.put("taxrate", commonTaxRate.compareTo(BigDecimal.ZERO)==0 ? "0":commonTaxRate.toString()); items.put("taxrate", commonTaxRate.compareTo(BigDecimal.ZERO)==0 ? "0":commonTaxRate.toString());
@ -722,10 +738,10 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
} }
} else { } else {
items.put("taxrate", "0"); items.put("taxrate", "0");
items.put("taxcodeid", "CN07");
} }
items.put("notax_de",payRequestInfo.getBigDecimal("notaxamt").toString());//贷方无税金额除税金额
items.put("local_notax_de",payRequestInfo.getBigDecimal("notaxamt").toString());//组织本币无税金额
if("unaudit".equals(eventName)){ if("unaudit".equals(eventName)){
//如果此时是反审核则需要将金额置为负数 //如果此时是反审核则需要将金额置为负数
items.put("local_tax_de","-"+items.getString("local_tax_de")); items.put("local_tax_de","-"+items.getString("local_tax_de"));
@ -748,14 +764,19 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
items.put("taxrate","0");//税率 items.put("taxrate","0");//税率
items.put("local_tax_de","0");//税额 items.put("local_tax_de","0");//税额
items.put("taxcodeid","CN07");//税码 items.put("taxcodeid","CN07");//税码
items.put("notax_de",bcsqje.toString());//贷方无税金额除税金额
items.put("local_notax_de",bcsqje.toString());//组织本币无税金额
if("unaudit".equals(eventName)){ if("unaudit".equals(eventName)){
//如果此时是反审核则需要将金额置为负数 //如果此时是反审核则需要将金额置为负数
items.put("notax_de","-"+bcsqje.toString()); items.put("notax_de","-"+bcsqje.toString());
items.put("local_notax_de","-"+bcsqje.toString());//组织本币无税金额 items.put("local_notax_de","-"+bcsqje.toString());//组织本币无税金额
} }
} else { }
else {
// 税额 // 税额
BigDecimal taxAmount = BigDecimal.ZERO; BigDecimal taxAmount = BigDecimal.ZERO;
//无税金额(专普混合专票无税+普票价税合计)
BigDecimal notTaxAmount = BigDecimal.ZERO;
// 税率相关变量 // 税率相关变量
BigDecimal commonTaxRate = null; BigDecimal commonTaxRate = null;
Long commonTaxRateId = null; Long commonTaxRateId = null;
@ -768,11 +789,17 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
Object pkValue = invoiceBillF7.getPkValue(); Object pkValue = invoiceBillF7.getPkValue();
DynamicObject invoiceBill = BusinessDataServiceHelper.loadSingle(pkValue, "recon_invoicebill"); DynamicObject invoiceBill = BusinessDataServiceHelper.loadSingle(pkValue, "recon_invoicebill");
if (invoiceBill != null) { if (invoiceBill != null) {
//表头不含税
BigDecimal notTax=invoiceBill.getBigDecimal("notaxamt");
//表头价税合计
BigDecimal amount=invoiceBill.getBigDecimal("amount");
// 判断发票登记-发票类型-名称 // 判断发票登记-发票类型-名称
DynamicObject invoice = invoiceBill.getDynamicObject("invoice"); DynamicObject invoice = invoiceBill.getDynamicObject("invoice");
if (invoice != null) { if (invoice != null) {
String invoiceName = invoice.getString("name"); String invoiceName = invoice.getString("name");
if (invoiceName != null && invoiceName.contains("专用")) { if (invoiceName != null && invoiceName.contains("专用")) {
notTaxAmount=notTaxAmount.add(notTax);
// 发票登记-发票明细 // 发票登记-发票明细
DynamicObjectCollection invoiceDetails = invoiceBill.getDynamicObjectCollection("invoiceentry"); DynamicObjectCollection invoiceDetails = invoiceBill.getDynamicObjectCollection("invoiceentry");
if (invoiceDetails != null && invoiceDetails.size() != 0) { if (invoiceDetails != null && invoiceDetails.size() != 0) {
@ -780,7 +807,6 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
BigDecimal entryTax = invoiceDetail.getBigDecimal("entry_tax"); BigDecimal entryTax = invoiceDetail.getBigDecimal("entry_tax");
// 税额累加 // 税额累加
taxAmount = taxAmount.add(entryTax); taxAmount = taxAmount.add(entryTax);
// 处理税率 // 处理税率
DynamicObject entryTaxRate = invoiceDetail.getDynamicObject("entry_taxrate"); DynamicObject entryTaxRate = invoiceDetail.getDynamicObject("entry_taxrate");
if (entryTaxRate != null) { if (entryTaxRate != null) {
@ -799,6 +825,8 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
} }
} }
} }
}else{
notTaxAmount=notTaxAmount.add(amount);
} }
} }
} }
@ -807,10 +835,14 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
// 设置税额 // 设置税额
items.put("local_tax_de", taxAmount.compareTo(BigDecimal.ZERO)==0 ? "0":taxAmount.toString()); items.put("local_tax_de", taxAmount.compareTo(BigDecimal.ZERO)==0 ? "0":taxAmount.toString());
//不含税
items.put("notax_de",notTaxAmount.toString());//贷方无税金额除税金额
items.put("local_notax_de",notTaxAmount.toString());//组织本币无税金额
// 设置税率值所有税率相同则使用共同税率不同则设为null // 设置税率值所有税率相同则使用共同税率不同则设为null
if (hasDifferentTaxRates) { if (hasDifferentTaxRates) {
items.put("taxrate", "0"); items.put("taxrate", "0");
items.put("taxcodeid", "CN07");
} else if (commonTaxRate != null) { } else if (commonTaxRate != null) {
// 设置税率 // 设置税率
items.put("taxrate", commonTaxRate.compareTo(BigDecimal.ZERO)==0 ? "0":commonTaxRate.toString()); items.put("taxrate", commonTaxRate.compareTo(BigDecimal.ZERO)==0 ? "0":commonTaxRate.toString());
@ -826,10 +858,9 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
} }
} else { } else {
items.put("taxrate", "0"); items.put("taxrate", "0");
items.put("taxcodeid", "CN07");
} }
items.put("notax_de",payRequestInfo.getBigDecimal("notaxamt").toString());//贷方无税金额除税金额
items.put("local_notax_de",payRequestInfo.getBigDecimal("notaxamt").toString());//组织本币无税金额
if("unaudit".equals(eventName)){ if("unaudit".equals(eventName)){
//如果此时是反审核则需要将金额置为负数 //如果此时是反审核则需要将金额置为负数
items.put("local_tax_de","-"+items.getString("local_tax_de")); items.put("local_tax_de","-"+items.getString("local_tax_de"));

View File

@ -288,6 +288,30 @@ public class OrderFormMaterialImportPlugin extends AbstractFormPlugin implements
if (existComb.contains(name.trim()+model.trim())) { if (existComb.contains(name.trim()+model.trim())) {
indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:物料+规格已存在,请勿重复导入"); indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:物料+规格已存在,请勿重复导入");
} }
JSONObject taxRateObj = (JSONObject) map.get("taxrate");
if (taxRateObj != null) {
String taxRatName = taxRateObj.getString("name"); // 税率名称
if (taxRatName != null && !taxRatName.trim().isEmpty()) {
// 验证name必须是带%的文本格式
if (!taxRatName.contains("%")) {
indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:税率格式错误!系统无法识别,请输入带%的文本格式例如13%");
} else {
// 可选进一步验证%位置和数字格式
String numPart = taxRatName.replace("%", "").trim();
try {
// 尝试转换为数字验证是否是有效的百分比数值
Double.parseDouble(numPart);
// 可以添加更多验证比如%是否在末尾
if (!taxRatName.trim().endsWith("%")) {
indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:税率格式错误!百分比符号(%)应放在数值末尾例如13%");
}
} catch (NumberFormatException e) {
indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:税率格式错误!百分比数值部分无效,请输入有效数值加%例如13%");
}
}
}
}
} }
return indexVsMsgMap; return indexVsMsgMap;