|
@@ -92,18 +92,14 @@ public class CalculateTax {
|
|
|
|
|
|
// 消费税税率
|
|
|
final BigDecimal impConsumTaxRate = goodsEntity.getImpConsumTaxRate();
|
|
|
- System.out.println("impConsumTaxRate:"+impConsumTaxRate);
|
|
|
// 增值税税率
|
|
|
final BigDecimal valueAddedTaxRate = goodsEntity.getValueAddedTaxRate();
|
|
|
- System.out.println("valueAddedTaxRate:"+valueAddedTaxRate);
|
|
|
|
|
|
try {
|
|
|
// 计算某类产品的消费税
|
|
|
final BigDecimal subConsumerTax = calculateConsumerTax(actualPaymentAmount, impConsumTaxRate, hsCodeName, goodsEntity, actualPaymentAmount);
|
|
|
- System.out.println("subConsumerTax:"+subConsumerTax);
|
|
|
// 计算某类产品的增值税
|
|
|
final BigDecimal subValueAddTax = calculateValueAddTax(actualPaymentAmount, valueAddedTaxRate, subConsumerTax);
|
|
|
- System.out.println("subValueAddTax:"+subValueAddTax);
|
|
|
|
|
|
// 计算总的消费税
|
|
|
grandConsumerTax = grandConsumerTax.add(subConsumerTax);
|
|
@@ -214,6 +210,63 @@ public class CalculateTax {
|
|
|
|
|
|
|
|
|
/**
|
|
|
+ * 计算税率
|
|
|
+ *
|
|
|
+ * @param
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static final BigDecimal calculateGoodsRate(GoodsEntity goodsEntity, BigDecimal actualPaymentAmount) {
|
|
|
+ // 该商品消费税
|
|
|
+ BigDecimal grandConsumerTax = BigDecimal.ZERO;
|
|
|
+ // 该商品增值税
|
|
|
+ BigDecimal grandValueAddTax = BigDecimal.ZERO;
|
|
|
+
|
|
|
+
|
|
|
+ String hsCode = goodsEntity.getHsCode();// 海关商品编码
|
|
|
+ String hsCodeName = goodsEntity.getHsCodeName();// 海关商品编码名称
|
|
|
+
|
|
|
+ // 消费税税率
|
|
|
+ final BigDecimal impConsumTaxRate = goodsEntity.getImpConsumTaxRate();
|
|
|
+ // 增值税税率
|
|
|
+ final BigDecimal valueAddedTaxRate = goodsEntity.getValueAddedTaxRate();
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 计算某类产品的消费税
|
|
|
+ final BigDecimal subConsumerTax = calculateConsumerTax(actualPaymentAmount, impConsumTaxRate, hsCodeName, goodsEntity, actualPaymentAmount);
|
|
|
+ // 计算某类产品的增值税
|
|
|
+ final BigDecimal subValueAddTax = calculateValueAddTax(actualPaymentAmount, valueAddedTaxRate, subConsumerTax);
|
|
|
+
|
|
|
+ // 计算总的消费税
|
|
|
+ grandConsumerTax = grandConsumerTax.add(subConsumerTax);
|
|
|
+ // 计算总的增值税
|
|
|
+ grandValueAddTax = grandValueAddTax.add(subValueAddTax);
|
|
|
+ } catch (final RuntimeException e) {
|
|
|
+ if (logger.isErrorEnabled()) logger.error("计算税费出错!请检查产品的分类数据,以及产品类别的税率数据!", e);
|
|
|
+ throw new IllegalStateException("计算税费出错!请检查产品的分类数据,以及产品类别的税率数据!", e);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果增值税为0,免税
|
|
|
+ if (BigDecimal.ZERO.compareTo(grandValueAddTax)==0){
|
|
|
+ return grandValueAddTax;
|
|
|
+ }
|
|
|
+ // 如果有消费税 23.06%=(0.13+0.15)/(1-0.15)*0.7
|
|
|
+ if (BigDecimal.ZERO.compareTo(grandConsumerTax)!=0){
|
|
|
+ return valueAddedTaxRate.add(impConsumTaxRate).
|
|
|
+ divide(new BigDecimal(100).subtract(impConsumTaxRate),10, BigDecimal.ROUND_HALF_UP)
|
|
|
+ .multiply(new BigDecimal("0.7")).setScale(4, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }else {
|
|
|
+ // 如果没有消费税 9.1%=0.13*0.7
|
|
|
+ valueAddedTaxRate.multiply(new BigDecimal("0.7")).divide(new BigDecimal("100"),4,BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 按照公式,打7折
|
|
|
+ final BigDecimal tax = grandConsumerTax.add(grandValueAddTax).multiply(new BigDecimal("0.7")).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ return tax.divide(actualPaymentAmount, 4, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
* * 1.2.1 特殊化妆品(如下列举的“特殊化妆品SKU”),计算“消费税成分单价”:
|
|
|
* 1.2.1.1 如果是片、张,优先使用片、张成分单价,没有,则按毫升、克成分单价为算税依据,二者成分单价计算公式如下:
|
|
|
* 如果特殊化妆品内规格为“片”或“张”的化妆品,用第二数量按片、张计算成分单价:成分单价=销售单价/产品备案数据第二数量;
|