1 changed files with 90 additions and 0 deletions
@ -0,0 +1,90 @@ |
|||
package cn.chjyj.szwh.utils; |
|||
|
|||
import cn.chjyj.szwh.bean.OrderGoodsDetail; |
|||
|
|||
import java.math.BigDecimal; |
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 发票信息工具 |
|||
*/ |
|||
public class TaxUtils { |
|||
/** |
|||
* 计算订单发税务 发票信息,万元票 |
|||
* @param orglist 商品详情list |
|||
* @return |
|||
*/ |
|||
public static List TaxSpilt(List<OrderGoodsDetail> orglist){ |
|||
List taxlist = new ArrayList(); |
|||
//loop
|
|||
for(OrderGoodsDetail odg:orglist){ |
|||
//服务费
|
|||
BigDecimal serviceCharge = odg.getServiceCharge(); |
|||
//万元票,单张顶格金额
|
|||
BigDecimal topFee = new BigDecimal("9999.00"); |
|||
//服务费小于等于0
|
|||
if(serviceCharge.compareTo(new BigDecimal("0"))!=1){ |
|||
continue; |
|||
} |
|||
/** |
|||
* 服务费超过9999,万元票需要多张 |
|||
* 计算方法:第一张发票金额为 9999,第二张发票金额显示剩余,若额度仍然超过 9999,继续出现第三张发票 |
|||
*/ |
|||
// 付费超过 9999
|
|||
if(serviceCharge.compareTo(topFee) ==1){ |
|||
//统计需要的发票数量
|
|||
int tnum = countTaxPapers(serviceCharge.longValue(),1); |
|||
for(int i=0;i<tnum;i++){ |
|||
BigDecimal price = topFee; |
|||
BigDecimal leftAmount = serviceCharge.subtract(topFee); |
|||
if(leftAmount.compareTo(new BigDecimal("0"))==-1){ //小于0
|
|||
price = leftAmount; |
|||
} |
|||
// 填充发票信息
|
|||
Map txmap = fillTax(price); |
|||
taxlist.add(txmap); |
|||
} |
|||
}else{ |
|||
// 填充发票信息
|
|||
Map txmap = fillTax(serviceCharge); |
|||
taxlist.add(txmap); |
|||
} |
|||
} |
|||
return taxlist; |
|||
} |
|||
|
|||
public static Map fillTax(BigDecimal price){ |
|||
Map tmap = new HashMap(); |
|||
tmap.put("totalAmountTax",price); //发票总金额
|
|||
Map tdmap = new HashMap(); |
|||
tdmap.put("amount",price); //金额
|
|||
tdmap.put("invoiceNature","0");//0:正常 1:折扣 2:被折扣
|
|||
tdmap.put("itemName","*现代服务*交易佣金");//商品名称
|
|||
tdmap.put("itemTaxCode","3049900000000000000"); //商品税号
|
|||
tdmap.put("taxIncluded", '1'); //1:含税0:不含税
|
|||
tdmap.put("taxRate","0.06");//税率
|
|||
tdmap.put("yhzcbs","0"); //优惠政策标识
|
|||
//添加到细节节点
|
|||
tmap.put("manualOrderDetails",tdmap);//发票细节
|
|||
//返回发票对象map
|
|||
return tdmap; |
|||
} |
|||
|
|||
/** |
|||
* 计算发票数量 (万元版,每张金额:9999) |
|||
* @param amount |
|||
* @param num |
|||
* @return |
|||
*/ |
|||
public static Integer countTaxPapers(long amount,int num){ |
|||
long left = amount-9999l;//
|
|||
if(left>0){ |
|||
num = countTaxPapers(left,num); |
|||
return num+1; |
|||
} |
|||
return num; |
|||
} |
|||
} |
|||
Loading…
Reference in new issue