/**
*
*/
package com.ycsoft.business.service;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.ycsoft.beans.core.job.JCaCommand;
import com.ycsoft.beans.core.prod.CProd;
import com.ycsoft.beans.core.prod.CProdPropChange;
import com.ycsoft.beans.prod.PProd;
import com.ycsoft.beans.prod.PRes;
import com.ycsoft.business.commons.abstracts.IBaseService;
import com.ycsoft.business.dto.core.prod.CProdBacthDto;
import com.ycsoft.business.dto.core.prod.PProdDto;
import com.ycsoft.business.dto.core.prod.ProdDictDto;
import com.ycsoft.business.dto.core.prod.ProdResDto;
import com.ycsoft.business.dto.core.prod.ProdTariffDto;
import com.ycsoft.business.dto.core.user.UserProdRscDto;
import com.ycsoft.commons.exception.ServicesException;
import com.ycsoft.daos.core.Pager;
/**
* @author YC-SOFT
*
*/
public interface IUserProdService extends IBaseService{
/**
* 查询资费的折扣信息
* @param tariffIds 资费编号
* @return
* @throws Exception
*/
public List<ProdTariffDto> queryTariffByTariffIds(String[] tariffIds,String[] userIds,String custId) throws Exception;
public List<ProdTariffDto> queryBatchTariffByTariffId(String[] tariffIds) throws Exception;
/**
* 查找用户可以订购的产品
* 可以直接订购的产品包括基本产品和用户套餐
* 产品状态为正常并且不在用户已经订购的产品中
* @param userIds 用户编号
* @param userType 用户类型
* @return
*/
public List<ProdDictDto> queryCanOrderProd(String[] userIds,String userType,String servType) throws Exception;
/**
* 查找宽带用户可以订购的产品
* @param userId
* @return
* @throws Exception
*/
public List<PProd> queryCanOrderBandProd(String userId) throws Exception;
/**
* 批量订购
* @param userIds
* @param userType
* @return
* @throws Exception
*/
public List<ProdDictDto> queryBatchCanOrderProd(String userType) throws Exception;
/**
* 呼叫中心 查询用户可订购产品
* @param userIds
* @param userType
* @param servType
* @return
* @throws Exception
*/
public List<PProdDto> queryCanOrderProdToCallCenter(String[] userIds, String userType,String servType) throws Exception;
/**
* 根据客户编号,查找可以订购的产品
* @param custId
* @return
* @throws Exception
*/
public List<ProdDictDto> queryCanOrderPkg(String custId) throws Exception;
/**
* 查找产品对应的资源信息,包括动态资源和静态资源
* @param prodId 产品编号
* @return
*/
public List<ProdResDto> queryProdRes(String prodId) throws Exception;
/**
* 查找产品对应的子产品
* @param prodId 产品编号
* @return
*/
public List<PProd> querySubProds(String prodId) throws Exception;
/**
* 查找产品可以选择的资费
* @param prodId
* @param custDto
* @param tariffId
* @return
* @throws Exception
*/
public List<ProdTariffDto> queryProdTariff(String[] userIds,String prodId,String tariffId) throws Exception;
/**
* 修改免费终端,查询基本产品资费
* @param userIds
* @param type
* @param prodId
* @param tariffId
* @return
* @throws Exception
*/
public List<ProdTariffDto> queryFreeTariff(String[] userIds,String type,String prodId,String tariffId) throws Exception;
/**
* 查找产品可以选择的资费,包含不同周期的资费
* @param prodId
* @param custDto
* @param tariffId
* @return
* @throws Exception
*/
public Map<String,Object> queryEditProdTariff(String[] userIds,String prodId,String tariffId) throws Exception;
/**
* 批量订购产品可选择的资费
* @param prodId
* @return
* @throws Exception
*/
public List<ProdTariffDto> queryBatchProdTariff(String prodId) throws Exception;
public List<ProdTariffDto> queryAllProdTariff(String[] userIds, String prodId,String tariffId) throws Exception;
/**
* 第二终端转副机的时候基本包可以选择的资费
* @param custId
* @param userId
* @param prodId
* @param tariffId
* @return
* @throws Exception
*/
public List<ProdTariffDto> queryTariffForEzdToFzd(String custId,String userId,String prodId,String tariffId)
throws Exception;
/**
* 保存产品订购
* @param prodId 产品id
* @param tariffId 资费id
* @param feeDate 开始计费日期
* @param dynamicRscList 动态资源信息
* @throws Exception
*/
public void saveOrder(String prodId,String tariffId,String feeDate, List<UserProdRscDto> dynamicRscList, String expDate, Date preOpenTime,String isBankPay)throws Exception;
/**
* 保存产品订购
* @param prodId 产品id
* @param tariffId 资费id
* @param feeDate 开始计费日期
* @param dynamicRscList 动态资源信息
* @throws Exception
*/
public void saveOrder(String prodId,String tariffId,String feeDate, List<UserProdRscDto> dynamicRscList, String expDate,String publicAcctItemType)throws Exception;
/**
* 批量订购产品
* @param userIds
* @param prodId
* @param tariffId
* @param feeDate
* @param dynamicRscList
* @param expDate
* @param publicAcctItemType
* @throws Exception
*/
public void saveBatchOrder(List<String> userIdList, String prodId,
String tariffId, String feeDate,
List<UserProdRscDto> dynamicRscList, String expDate) throws Exception;
/**
* 批量退订产品
* @param userIdList
* @param prodId
* @throws Exception
*/
public void saveBatchCancel(List<String> userIdList, String prodId) throws Exception;
/**
* 保存批量订购产品
* @param pordLists
* @throws Exception
*/
public void saveOrderList(String pordLists)throws Exception;
/**
* 保存客户套餐订购
* @param prodId
* @param tariffId
* @param feeDate
* @param stopType
* @param prodSns
* @param preOpenDate 预开通时间.
* @throws Exception
*/
public void saveOrderCustPkg(String prodId, String tariffId, String feeDate,String stopType, String[] prodSns) throws Exception;
/**
* 变更到期日
* @param prodSn
* @param invalidDate
* @throws Exception
*/
public void editInvalidDate(String prodSn, String invalidDate) throws Exception;
/**
* 修改用户产品的资费
* @param prodSn
* @param newTariffId
* @param effDate
* @param expDate
* @throws Exception
*/
public void changeTariff(String prodSn,String newTariffId,String effDate, String expDate,boolean isUpdate) throws Exception;
public void bacthChangeTariff(List<CProdBacthDto> pordList,String newTariffId,boolean isUpdate) throws Exception;
/**
* 修改失效日期
* @param prodSn
* @param expDate
* @throws Exception
*/
public void changeExpDate(String prodSn,String expDate) throws Exception;
/**
* 取消资费生效
* @param prodSn
* @param tariffId
* @throws Exception
*/
public void removeByProdSn(String prodSn, String tariffId) throws Exception;
/**
* 查询用户产品的的资源信息
* @param prodSn
* @return
* @throws JDBCException
*/
public List<PRes> queryProdResByUserProdSn(String prodSn) throws Exception ;
/**
* 终止产品
* @param prodSns
* @param banlanceDealType
* @throws Exception
*/
public void saveTerminate(String[] prodSn,String banlanceDealType,String transAcctId,String transAcctItemId,String promFeeSn) throws Exception;
/**
* 更换宽带产品
* @param prodId
* @param tariffId
* @param feeDate
* @param expDate
* @param oldProdSn
* @param present_fee
* @throws Exception
*/
public void changeBandProd(String prodId,String tariffId,String feeDate,String expDate,String oldProdSn,int present_fee) throws Exception;
/**
* 更换产品动态资源
* @param prodSn
* @param dyResList
* @throws Exception
*/
public void changeProdDynRes(String prodSn,List<UserProdRscDto> dyResList) throws Exception;
/**
* 终止套餐
* @param prodSn
* @param banlanceDealType
* @param transAcctId
* @param transAcctItemId
* @throws Exception
*/
public void saveTerminatePkg(String prodSn,String banlanceDealType,String transAcctId,String transAcctItemId) throws Exception;
/**
* 同步产品
* @throws Exception
*/
public void saveProdSyn(String[] prodSns,String[] userIds) throws Exception;
/**
* 修改客户套餐对应的产品
* @param pkgSn
* @param stopType
* @param prodSns
* @throws Exception
*/
public void saveEditCustPkg(String pkgSn,String stopType, String[] prodSns) throws Exception;
/**
* 重设用户产品对应的资源
* @throws Exception
*/
public void resetUserProdRes() throws Exception;
/**
* 根据用户Id和产品Id查询已订购产品
* @param userId
* @param prodId
* @return
*/
public CProd queryOrderdProdByUserId(String userId,String prodId) throws Exception;
/**
* 修改产品
* @param propChangeList
* @throws Exception
*/
public void saveEditProd(String prodSn , List<CProdPropChange> propChangeList) throws Exception;
//产品暂停
public void pauseProd(String prodSn,String userId) throws Exception;
//产品恢复
public void resumeProd(String prodSn,String userId) throws Exception;
/**
* 修改产品的预开通时间.
* @param prodSn
* @param countyId
* @param newPreOpenDate 新的预开通时间.
*/
public void updateProdPreOpenDate(String prodSn, String countyId,Date newPreOpenDate, Date feeDate) throws ServicesException;
/**
* 修改产品 公用账目适用类型 .
* @param prodSn
* @param countyId
* @param publicAcctitemType
*/
public void updatePublicAcctItemType(String prodSn, String countyId,String publicAcctitemType) throws ServicesException;
/**
* modify cust class and zzd base prod's tariff is YBZF
* @throws Exception
*/
public void resumeCustClass()throws Exception;
// public Date getInvalidDateByFee(long fee,int balance,int oweFee,int realFee,int rent,String rentType,Date beginFeeDate)throws Exception;
//
//
// public long getFeeByInvalidDate(int balance,int oweFee,int realFee,int rent,String rentType,Date invaidDate,Date beginFeeDate) throws Exception;
public Date getInvalidDateByFee(String prodSn,int payFee)throws Exception;
public long getFeeByInvalidDate(String prodSn,Date invalidDate) throws Exception;
public void saveBusiCmdCard(String cardId)throws Exception;
/**
* @param cardId
* @param start
* @param limit
* @return
*/
public Pager<JCaCommand> queryCaCommandByCardId(String cardId, Integer start,Integer limit)throws Exception;
/**
* 变更银行扣费
* @param prodSn
*/
public void changeCprodBank(String prodSn)throws Exception;
/**
* 重算到期日.`
* @param prodSn
* @return
*/
public Date reCalcInvalidDate(String prodSn) throws Exception;
}