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