/**
*
*/
package com.ycsoft.business.component.core;
import java.util.Date;
import java.util.List;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import com.ycsoft.beans.core.bill.BBill;
import com.ycsoft.beans.core.bill.BBillWriteoff;
import com.ycsoft.beans.core.bill.BillDto;
import com.ycsoft.beans.core.prod.CProd;
import com.ycsoft.business.commons.abstracts.BaseBusiComponent;
import com.ycsoft.business.dao.core.bill.BBillDao;
import com.ycsoft.business.dao.core.bill.BBillWriteoffDao;
import com.ycsoft.business.dao.core.bill.BRentfeeDao;
import com.ycsoft.business.dto.core.fee.QueryFeeInfo;
import com.ycsoft.commons.constants.SystemConstants;
import com.ycsoft.daos.core.JDBCException;
import com.ycsoft.daos.core.Pager;
/**
*
* @author pyb
*
* Nov 3, 2010
*
*/
@Component
public class BillComponent extends BaseBusiComponent{
private BBillWriteoffDao bBillWriteoffDao;
private BRentfeeDao bRentfeeDao;
public List<BBill> queryPromFeeBillByCreateDonecode(String custId,int doneCode,String billingCycle,String comeFrom)throws Exception{
return bBillDao.queryPromFeeBill(custId, doneCode, billingCycle,comeFrom);
}
//包多月产品按账目查账单
public List<BBill> queryMuchMonthProdBill(String prodSn,int doneCode,String billingCycle,String comeFrom) throws Exception{
return bBillDao.queryMuchProdBill(prodSn, doneCode, billingCycle, comeFrom, this.getOptr().getCounty_id());
}
public Integer queryPromFeeBillOwefeeSum(String custId,int doneCode,String prodSn)throws Exception{
return bBillDao.queryPromFeeOweFeeSumByProdSn(custId, doneCode,prodSn);
}
/**
* 套餐缴费额外账单插入
* @param prod
* @param doneCode
* @param billingCycle
* @param billFee
* @param oweFee
* @param comeFrom
* @return
* @throws Exception
*/
public void createPromFeeBill(CProd prod,int doneCode,String billingCycle,int billFee,int oweFee) throws Exception{
String billSn = bBillDao.findSequence().toString();
BBill bill = new BBill();
BeanUtils.copyProperties(prod, bill);
bill.setAcctitem_id(prod.getProd_id());
bill.setBill_sn(billSn);
bill.setBilling_cycle_id(billingCycle);
bill.setStatus("1");
bill.setCome_from("5");//套餐缴费的额外账单设置成5
bill.setBill_done_code(""+doneCode);
bill.setFee_flag("ZC");
bill.setBill_type("1");
bill.setBill_date(new Date());
bill.setEff_date(new Date());
bill.setRent_month_fee(billFee);
bill.setUse_fee(0);
bill.setFinal_month_fee(billFee);
bill.setFinal_use_fee(0);
bill.setFinal_bill_fee(billFee);
bill.setOwe_fee(oweFee);
bBillDao.save(bill);
createRecordChange("B_BILL", "ADD", billSn);
}
/**
* 创建账单
* @param prod 产品信息
* @param doneCode 流水号
* @param billingCycle 帐期
* @param billFee 出帐金额
* @param comeFrom 来源
* @throws Exception
*/
public BBill createBill(CProd prod,int doneCode,String billingCycle,int billFee,int oweFee,String comeFrom) throws Exception{
String billSn = bBillDao.findSequence().toString();
BBill bill = new BBill();
BeanUtils.copyProperties(prod, bill);
bill.setAcctitem_id(prod.getProd_id());
bill.setBill_sn(billSn);
bill.setBilling_cycle_id(billingCycle);
bill.setStatus("1");
bill.setCome_from(comeFrom);
bill.setBill_done_code(""+doneCode);
bill.setFee_flag("ZC");
bill.setBill_type("1");
bill.setBill_date(new Date());
bill.setRent_month_fee(billFee);
bill.setUse_fee(0);
bill.setFinal_month_fee(billFee);
bill.setFinal_use_fee(0);
bill.setFinal_bill_fee(billFee);
bill.setOwe_fee(oweFee);
bBillDao.save(bill);
createRecordChange("B_BILL", "ADD", billSn);
return bill;
}
/**
* 创建账单
* @param prod 产品信息
* @param doneCode 流水号
* @param billingCycle 帐期
* @param billFee 出帐金额
* @param comeFrom 来源
* @throws Exception
*/
public BBill createVodBill(CProd prod,int doneCode,String billingCycle,int billFee,int oweFee,String comeFrom) throws Exception{
String billSn = bBillDao.findSequence().toString();
BBill bill = new BBill();
BeanUtils.copyProperties(prod, bill);
bill.setAcctitem_id(prod.getProd_id());
bill.setBill_sn(billSn);
bill.setBilling_cycle_id(billingCycle);
bill.setStatus("0");
bill.setCome_from(comeFrom);
bill.setBill_done_code(""+doneCode);
bill.setFee_flag("ZC");
bill.setBill_date(new Date());
bill.setRent_month_fee(billFee);
bill.setUse_fee(0);
bill.setFinal_month_fee(billFee);
bill.setFinal_use_fee(0);
bill.setFinal_bill_fee(billFee);
bill.setOwe_fee(oweFee);
bBillDao.save(bill);
createRecordChange("B_BILL", "ADD", billSn);
return bill;
}
/**
* 出帐
*/
public BBill confirmBill(String prodSn,int doneCode) throws Exception{
BBill bill = bBillDao.confirmBill(prodSn, doneCode);
if (bill != null)
createRecordChange("B_BILL", "ADD", bill.getBill_sn());
return bill;
}
/**
* 作废账单
* @param billSn
* @throws Exception
*/
public void cancelBill(String billSn) throws Exception{
this.bBillDao.updateStatus(billSn,"4");
}
public void cancelBillByDoneCode(Integer doneCode, String status, String billMonth, String comeFrom) throws Exception {
this.bBillDao.updateStatusByDoneCode(doneCode, status, billMonth, comeFrom);
}
public void updateFeeStatus(String billSn) throws Exception{
this.bBillDao.updateFeeStatus(billSn,"ZF");
}
public void updateBillInfo(String oldProdSn, String newProdSn, String newTariffId,
String newAcctId, String newProdId) throws Exception {
this.bBillDao.updateBillInfo(oldProdSn, newProdSn, newTariffId, newAcctId, newProdId, getOptr().getCounty_id());
}
/**
* 作废账单
* @param billSn
* @throws Exception
*/
public void cancelBill(String prodSn,String billCycleId) throws Exception{
this.bBillDao.cancelBill(prodSn,billCycleId,"4");
}
/**
* 作废包多月或套餐账单
* @param prodSn
* @param billCycleId
* @throws Exception
*/
public void cancelMuchBill(String prodSn,String billCycleId) throws Exception{
this.bBillDao.cancalMuchBill(prodSn,billCycleId,"4");
}
/**
* 作废普通帐单
* @param prodSn
* @param billCycleId
* @throws Exception
*/
public void cancelTerminateBill(String prodSn,String billCycleId) throws Exception{
this.bBillDao.cancelTerminateBill(prodSn,billCycleId,"4");
}
public List<BBill> queryMuchBill(String prodSn, String billCycleId, String comeFrom) throws Exception {
return bBillDao.queryMuchBill(prodSn, billCycleId, comeFrom);
}
public List<BBill> queryOweFeeBill(String prodSn) throws Exception {
return bBillDao.queryOweFeeBill(prodSn);
}
/**
* 作废账期之后的所有账单
* @param billSn
* @throws Exception
*/
public void cancelOweActiveBill(String prodSn,String billCycleId) throws Exception{
this.bBillDao.cancelOweActiveBill(prodSn,billCycleId,"4");
}
/**
* 删除月租
* @param prodSn
* @throws Exception
*/
public void deleteRentfee(String billSn,String prodSn,String acctId, String acctItemId) throws Exception{
this.bRentfeeDao.deleteRentfee(prodSn, acctId, acctItemId);
createRecordChange("B_BILL", "MOD", billSn);
}
/**
* 删除月租
* @param prodSn
* @throws Exception
*/
public void deleteRentfee(String prodSn,String countyId) throws Exception{
this.bRentfeeDao.deleteRentfee(prodSn,countyId);
}
/**
* 恢复账单
* @param prodSn
* @param billCycleId
* @throws Exception
*/
public void recoverBill(String prodSn,String billCycleId)throws Exception{
this.bBillDao.recoverBill(prodSn,billCycleId,"0");
}
public List<BBill> queryOweBillByProdSn(String prodSn) throws Exception {
return bBillDao.queryOweBillByProdSn(prodSn);
}
public List<BBill> queryPromOweFeeBill(String prodSn) throws Exception {
return bBillDao.queryPromOweFeeBill(prodSn);
}
//手工创建销账记录
public void createWriteOff(BBill bill,String addrId) throws Exception{
String sn = this.bBillWriteoffDao.findSequence().toString();
BBillWriteoff writeOff = new BBillWriteoff();
BeanUtils.copyProperties(bill, writeOff);
writeOff.setWriteoff_sn(sn);
writeOff.setFee_type(SystemConstants.ACCT_FEETYPE_CASH);
writeOff.setFee(bill.getFinal_bill_fee());
writeOff.setStatus("ZC");
writeOff.setWriteoff_type("XZ");
writeOff.setBill_acctitem_id(bill.getAcctitem_id());
writeOff.setBill_tariff_id(bill.getTariff_id());
writeOff.setAddr_id(addrId);
this.bBillWriteoffDao.save(writeOff);
}
public void cancelWriteOff(BBillWriteoff writeOff,Integer doneCode) throws Exception{
//更新原销账记录的状态和取消流水号
this.bBillWriteoffDao.updateStatus(writeOff.getWriteoff_sn(),"ZF",doneCode);
//插入反销账记录
String sn = this.bBillWriteoffDao.findSequence().toString();
writeOff.setWriteoff_sn(sn);
writeOff.setDone_code(doneCode);
writeOff.setWriteoff_type("FXZ");
writeOff.setFee(writeOff.getFee()*-1);
this.bBillWriteoffDao.save(writeOff);
}
/**
* @param billSn
* @return
*/
public List<BBillWriteoff> queryWriteOffByBill(String billSn) throws Exception{
// TODO Auto-generated method stub
return this.bBillWriteoffDao.queryByBill(billSn);
}
/**
* 根据客户和月份查询客户月账单
* @param custId
* @param month 格式 YYYYMM
* @return
* @throws Exception
*/
public List<BillDto> queryBillByCustId(String custId,String month) throws Exception{
return bBillDao.queryBillByCustId(custId, month);
}
/**
* 根据客户和月份查询客户欠费月账单
* @param custId
* @param month 格式 YYYYMM
* @return
* @throws Exception
*/
public Pager<BillDto> queryCustBill(String custId, QueryFeeInfo queryFeeInfo, Integer start, Integer limit) throws Exception{
return bBillDao.queryCustBill(custId, queryFeeInfo, start, limit);
}
public List<BillDto> queryCustOweBill(String custId)throws Exception{
return bBillDao.queryCustOweBill(custId);
}
/**
* 查找产品最后一个月的账单
* @param prodSn
* @return
* @throws JDBCException
*/
public BBill queryLatsBillByProdSn(String prodSn) throws JDBCException {
return bBillDao.queryLatsBillByProdSn(prodSn);
}
public BBill queryBillBySn(String billSn) throws Exception{
return bBillDao.findByKey(billSn);
}
public int updateBill(String prodSn,int billFee) throws Exception{
return bBillDao.updateBill(prodSn, billFee);
}
public void updateMuchBill(String prodSn, int fee, String billingCycleId) throws Exception {
bBillDao.updateMuchBill(prodSn, fee, billingCycleId, getOptr().getCounty_id());
}
public void deleteBill(int doneCode) throws Exception{
bBillWriteoffDao.deleteWriteOff(doneCode);
bBillDao.deleteBill(doneCode);
}
public void setBBillWriteoffDao(BBillWriteoffDao billWriteoffDao) {
bBillWriteoffDao = billWriteoffDao;
}
public void setBRentfeeDao(BRentfeeDao rentfeeDao) {
bRentfeeDao = rentfeeDao;
}
}