销售税面试题六编码实现之业务逻辑层

ProductService.java:

package com.xy6.interview;

import java.math.BigDecimal;
import java.util.ArrayList;

import com.xy6.interview.util.ProductConstants;
import com.xy6.interview.util.ProductFreeTaxTypeUtil;
import com.xy6.interview.util.ProductUtil;

/**
 * 商品数据逻辑接口实现类
 *
 * @author daxiang
 * @since 2014-07-17
 */
public class ProductService implements IProductService {

	private final ProductDAO productDAO = new ProductDAO();

	/**
	 * 读取免税商品类型
	 *
	 * @param strXmlFilePath 免税商品类型配置xml文件路径
	 * @return 免税商品类型集合
	 */
	public ArrayList<String> readFreeTypeList(String strXmlFilePath){
		return productDAO.readFreeTypeList(strXmlFilePath);
	}

	/**
	 * 计算xml文件中各商品总价、总税额
	 *
	 * @param strXmlFilePath 保存商品的xml文件路径
	 * @return 购物车表单
	 */
	public ProductResultForm calcProductPrice(String strXmlFilePath){
		ArrayList<ProductForm> listProductForm = this.readProductList(strXmlFilePath);
		listProductForm = this.calcEachPriceAndTax(listProductForm);
		ProductResultForm resultForm = this.calcTotalPriceAndTax(listProductForm);

		return resultForm;
	}

	/**
	 * 读取商品信息
	 *
	 * @param strXmlFilePath 保存商品的xml文件路径
	 * @return 商品信息集合
	 */
	public ArrayList<ProductForm> readProductList(String strXmlFilePath){
		return productDAO.readProductList(strXmlFilePath);
	}

	/**
	 * 计算集合中每个商品的价格、税额,并将其保存到集合中
	 *
	 * @param listProductForm 商品信息集合
	 * @return 商品信息集合
	 */
	public ArrayList<ProductForm> calcEachPriceAndTax(ArrayList<ProductForm> listProductForm){
		if(listProductForm == null || listProductForm.size() == 0){
			return listProductForm;
		}
		BigDecimal bdRate;
		BigDecimal bdItemPrice;
		BigDecimal bdItemTax;
		ProductForm formCalc;
		ArrayList<String> listFreeTaxProType = ProductFreeTaxTypeUtil.listFreeTaxProType;
		// 计算每个商品的税率,总价,总税额
		for(int i=0; i<listProductForm.size(); i++){
			formCalc = listProductForm.get(i);
			bdRate = BigDecimal.ZERO;
			if(!listFreeTaxProType.contains(formCalc.getType())){
				bdRate = bdRate.add(ProductConstants.RateBasic);
			}
			if(formCalc.getImported()){
				bdRate = bdRate.add(ProductConstants.RateImport);
			}
			bdItemPrice = formCalc.getUnitPrice().multiply(new BigDecimal(formCalc.getCount()));
			formCalc.setItemPrice(bdItemPrice);

			bdItemTax = ProductUtil.roundTax(bdItemPrice.multiply(bdRate));
			formCalc.setItemTax(bdItemTax);
		}
		return listProductForm;
	}

	/**
	 * 计算集合中各商品总价、总税额
	 * @param listProductForm 商品信息集合
	 * @return 购物车表单
	 */
	public ProductResultForm calcTotalPriceAndTax(ArrayList<ProductForm> listProductForm){
		ProductResultForm resultForm = new ProductResultForm();
		if(listProductForm == null || listProductForm.size() == 0){
			return resultForm;
		}
		BigDecimal bdTotalPrice = BigDecimal.ZERO;
		BigDecimal bdTotalTax = BigDecimal.ZERO;
		ProductForm formCalc;
		// 计算购物车总价,总税额
		for(int i=0; i<listProductForm.size(); i++){
			formCalc = listProductForm.get(i);
			bdTotalPrice = bdTotalPrice.add(formCalc.getItemPrice());
			bdTotalTax = bdTotalTax.add(formCalc.getItemTax());
		}
		// 将总税额加入到总价中
		bdTotalPrice = bdTotalPrice.add(bdTotalTax);
		resultForm.setBdTotalPrice(bdTotalPrice);
		resultForm.setBdTotalTax(bdTotalTax);
		return resultForm;
	}
}

IProductService.java:

package com.xy6.interview;

import java.util.ArrayList;

/**
 * 商品数据逻辑接口类
 *
 * @author daxiang
 * @since 2014-07-17
 */
public interface IProductService {

	/**
	 * 读取免税商品类型
	 *
	 * @param strXmlFilePath 免税商品类型配置xml文件路径
	 * @return 免税商品类型集合
	 */
	public ArrayList<String> readFreeTypeList(String strXmlFilePath);

	/**
	 * 计算xml文件中各商品总价、总税额
	 *
	 * @param strXmlFilePath 保存商品的xml文件路径
	 * @return 购物车表单
	 */
	public ProductResultForm calcProductPrice(String strXmlFilePath);

	/**
	 * 读取商品信息
	 *
	 * @param strXmlFilePath 保存商品的xml文件路径
	 * @return 商品信息集合
	 */
	public ArrayList<ProductForm> readProductList(String strXmlFilePath);

	/**
	 * 计算集合中每个商品的价格、税额,并将其保存到集合中
	 *
	 * @param listProductForm 商品信息集合
	 * @return 商品信息集合
	 */
	public ArrayList<ProductForm> calcEachPriceAndTax(ArrayList<ProductForm> listProductForm);

	/**
	 * 计算集合中各商品总价、总税额
	 * @param listProductForm 商品信息集合
	 * @return 购物车表单
	 */
	public ProductResultForm calcTotalPriceAndTax(ArrayList<ProductForm> listProductForm);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值