Forráskód Böngészése

Merge branch 'master' of http://git.ds-bay.com/project/kmall-pt-general

 Conflicts:
	kmall-admin/src/main/java/com/kmall/admin/utils/CalculateTax.java
zcb 4 éve
szülő
commit
bff119bd6a

+ 28 - 9
kmall-admin/src/main/java/com/kmall/admin/Test.java

@@ -34,14 +34,33 @@ import java.util.Map;
  */
 public class Test {
     public static void main(String[] args) {
-        String result = HttpUtil.get("https://oms.ds-bay.com/oms-controller-mgt/pdProductRecord/hsCodeMapBySkuList?skuList=ISZWCW48781");
-        Map<String,Map> map = JSON.parseObject(result, Map.class);
-        System.out.println(map);
-        Map skuMap =  map.get("ISZWCW48781");
-        System.out.println(skuMap);
-        String cusGoodsName = (String) skuMap.get("cusGoodsName");
-        System.out.println(cusGoodsName);
-        String valueAddedTaxRate = (String) skuMap.get("valueAddedTaxRate");
-        System.out.println(valueAddedTaxRate);
+//        String result = HttpUtil.get("https://oms.ds-bay.com/oms-controller-mgt/pdProductRecord/hsCodeMapBySkuList?skuList=ISZWCW48781");
+//        Map<String,Map> map = JSON.parseObject(result, Map.class);
+//        System.out.println(map);
+//        Map skuMap =  map.get("ISZWCW48781");
+//        System.out.println(skuMap);
+//        String cusGoodsName = (String) skuMap.get("cusGoodsName");
+//        System.out.println(cusGoodsName);
+//        String valueAddedTaxRate = (String) skuMap.get("valueAddedTaxRate");
+//        System.out.println(valueAddedTaxRate);
+
+
+        // 消费税税率
+        final BigDecimal impConsumTaxRate = new BigDecimal("15");
+        // 增值税税率
+        final BigDecimal valueAddedTaxRate =new BigDecimal("13");
+        BigDecimal grandConsumerTax = new BigDecimal("214");
+        BigDecimal grandValueAddTax = new BigDecimal("0");
+        if (BigDecimal.ZERO.compareTo(grandValueAddTax)==0){
+            System.out.println(grandValueAddTax);
+        }
+        if (BigDecimal.ZERO.compareTo(grandConsumerTax)!=0) {
+            System.out.println(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 {
+
+            System.out.println(valueAddedTaxRate.multiply(new BigDecimal("0.7")).divide(new BigDecimal("100"), 4, BigDecimal.ROUND_HALF_UP));
+        }
     }
 }

+ 3 - 2
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -1891,8 +1891,9 @@ public class GoodsServiceImpl implements GoodsService {
                     GoodsDetailsDto goods = (GoodsDetailsDto) goodsDetailMap.get("goods");
                     // 顾客给的钱 就是税后价
                     BigDecimal actualPaymentAmount = goods.getActualPaymentAmount(); //随便拿一个门店的当前时间的价格,如果有活动价会使用活动价
-                    BigDecimal calculateTax = CalculateTax.calculateTax(goodsEntity, actualPaymentAmount);// 税费
-                    BigDecimal goodsRate = calculateTax.divide(actualPaymentAmount, 4, BigDecimal.ROUND_HALF_UP);
+//                    BigDecimal calculateTax = CalculateTax.calculateTax(goodsEntity, actualPaymentAmount);// 税费
+//                    BigDecimal goodsRate = calculateTax.divide(actualPaymentAmount, 4, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal goodsRate =CalculateTax.calculateGoodsRate(goodsEntity, actualPaymentAmount);
                     goodsEntity.setGoodsRate(goodsRate);
                     goodsDao.update(goodsEntity);
                 }

+ 57 - 4
kmall-admin/src/main/java/com/kmall/admin/utils/CalculateTax.java

@@ -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 如果是片、张,优先使用片、张成分单价,没有,则按毫升、克成分单价为算税依据,二者成分单价计算公式如下:
                * 如果特殊化妆品内规格为“片”或“张”的化妆品,用第二数量按片、张计算成分单价:成分单价=销售单价/产品备案数据第二数量;