package com.ycsoft.business.service;
import java.util.List;
import java.util.Map;
import com.ycsoft.beans.config.TDeviceBuyMode;
import com.ycsoft.beans.config.TNonresCustApproval;
import com.ycsoft.beans.core.cust.CCust;
import com.ycsoft.beans.core.cust.CCustAddr;
import com.ycsoft.beans.core.cust.CCustLinkman;
import com.ycsoft.beans.core.cust.CCustPropChange;
import com.ycsoft.beans.device.RDeviceFee;
import com.ycsoft.beans.device.RDeviceModel;
import com.ycsoft.beans.device.RStbModel;
import com.ycsoft.beans.system.SOptr;
import com.ycsoft.business.commons.abstracts.IBaseService;
import com.ycsoft.business.dto.core.cust.CustFullInfoDto;
import com.ycsoft.business.dto.core.fee.FeeInfoDto;
import com.ycsoft.business.dto.core.prod.CustProdDto;
import com.ycsoft.business.dto.device.DeviceDto;
import com.ycsoft.commons.exception.ComponentException;
import com.ycsoft.commons.exception.ServicesException;
import com.ycsoft.daos.core.JDBCException;
import com.ycsoft.daos.core.Pager;
import com.ycsoft.sysmanager.dto.resource.RDeviceModelTotalDto;
/**
* @author YC-SOFT
*
*/
public interface ICustService extends IBaseService{
/**
* 查询产权变更的设备销售方式
* @return
* @throws Exception
*/
public List<TDeviceBuyMode> queryDeviceBuyModeByOwnership() throws Exception;
public List<RDeviceModelTotalDto> queryDeviceModel()throws Exception;
public List<TDeviceBuyMode> queryDeviceCanFee() throws Exception;
/**
* 生成客户
* @param busiCode 业务编号
* @param cust 客户基本信息
* @param linkman 联系人信息
* @param custCode
* @param resident 居民客户信息
* @throws Exception
*
*/
public void createCust(CCust cust, CCustLinkman linkman, String custCode) throws Exception;
/**
* 批量预开户
* @param addrId 地址编号
* @param custName
* @param addrName 地址名称
* @param custCount 客户数
*/
public void createCustBatch(String addrId,String address,String custName, int custCount,List<CCustAddr> addrList)throws Exception;
/**
* 修改客户信息:移机、过户、修改客户资料等功能调用
* @param propChangeList 属性变化列表
* @throws Exception
*/
public void editCust(List<CCustPropChange> propChangeList) throws Exception;
public void relocateCust(String custId) throws Exception;
/**
* 客户销户
* @param banlanceDealType 余额处理方式:退款、不退款
* @throws Exception
*/
public void saveRemoveCust(String banlanceDealType)throws Exception;
/**
* 购买设备
* @param deviceId 设备id
* @param cardId 卡号id
* @param modemMac MODEM_MAC
* @param buyMode 购买方式
* @param feeId 费用id
* @param feeStdId
* @param fee
* @param feeValueId 费用值
* @param virtualCard 是否是虚拟卡
* @param virtualModem 是否是虚拟MODEM
* @throws Exception
*/
public void saveBuyDevice(String deviceId,String cardId,String modemMac,String buyMode,List<FeeInfoDto> feeInfoList,String virtualCard,String virtualModem) throws Exception;
/**
* 给设备购买保修期.
* @param deviceId
* @throws Exception
*/
public void saveBuyReplacover(String deviceId,String deviceCode) throws Exception;
/**
* 购买配件
* @param deviceType
* @param deviceModel
* @param buyMode
* @param feeId
* @param feeStdId
* @param fee
* @param buyNum 购买数量
* @throws Exception
*/
public void saveBuyMaterial(String deviceType,String deviceModel,String buyMode,List<FeeInfoDto> feeInfoList,int buyNum) throws Exception;
/**
* 把客户名下产权属于广电的设备销售给客户
* @param deviceId
* @param buyMode
* @param feeId
* @param fee
* @throws Exception
*/
public void saveSaleDevice(String deviceId,List<FeeInfoDto> feeInfoList,String buyMode,String changeOwnship) throws Exception;
public void saveChangeDeviceType(String deviceId,String buyMode) throws Exception;
/**
* 设备回收
* @param deviceId 设备id
* @param deviceStatus 回收后的设备状态
* @param fee
* @throws Exception
*/
public void saveReclaimDevice(String deviceId,String deviceStatus,String reclaimReason, int fee) throws Exception;
/**
* 换MODEM
* @param oldModemId 原modem的设备code
* @param newModemId 新modem的设备code
* @param fee
* @param modemZjFee MODEM折旧费
* @param feeStdId
* @param feeId
* @param buyMode
* @param changeOwnership 是否变更产权
* @param deviceStatus
* @throws Exception
*/
public void saveChangeModem(String oldModemId, String newModemId,
String buyMode, List<FeeInfoDto> feeInfoList, int modemZjFee,
boolean reclaim, String deviceStatus) throws Exception;
/**
* 更换机顶盒和卡
* @param oldStbId 原stb的设备code
* @param oldCardId 原card的设备code
* @param oldModemId 原modem的设备code
* @param newStbId 新stb的设备code
* @param newCardId 新card的设备code
* @param newModemId 新modem的设备code
* @param buyMode 购买方式
* @param feeId 费用编号
* @param feeStdId 费用标准id
* @param fee 费用
* @param stbZjFee 机顶盒折旧费用
* @param cardZjFee 智能卡折旧费用
* @param modemZjFee MODEM折旧费用
* @param reclaim 是否回收
* @param deviceStatus 设备状态
* @param buyFlag 5:机卡猫全买;4:机卡;3:机猫;6:猫卡;1:单机;2:单卡;7:单猫;0:不用买
* @param singleCard 是否一体机
* @throws Exception
*/
public void saveChangeStbCard(String oldStbId, String oldCardId, String oldModemId,
String newStbId, String newCardId, String newModemId, List<FeeInfoDto> feeInfoList,
int stbZjFee, int cardZjFee, int modemZjFee,String deviceStatus, int buyFlag,
boolean singleCard,String changeReason) throws Exception;
/**
* 机卡互换,客户之间可以互换,必须是有用户的设备(正在使用的)才可以互换。</br>
* 同客户互换:交换2个用户的机卡号,重发指令,保修期不变。</br>
* 不同客户互换:交换2个用户的机卡号,重发指令,保修期也同时互换</br>
* 猫的参数留待以后如果需求有变更使用.
* @param oldStbId 旧机顶盒
* @param oldCardId 旧智能卡
* @param oldModemId 旧猫
* @param newStbId 新机顶盒
* @param newCardId 新智能卡
* @param newModemId 新猫
* @throws Exception
*/
public void saveSwitchDevice(String oldStbId, String oldCardId, String oldModemId,
String newStbId, String newCardId, String newModemId) throws Exception;
/**
* 设备挂失
* @param deviceId
* @throws Exception
*/
public void saveRegLossDevcie(String deviceId) throws Exception;
/**
* 取消挂失
* @param deviceId
* @throws Exception
*/
public void saveCancelLossDevcie(String deviceId) throws Exception;
/**
* 客户加入单位
* @param unitId 加入的单位客户id
* @throws Exception
*/
public void saveCustJoinUnit(String unitId) throws Exception;
/**
* 暂停卡扣
* @throws Exception
*/
public void saveBankStop()throws Exception;
/**
* 恢复卡扣
* @throws Exception
*/
public void saveBankResume()throws Exception;
/**
* 客户加入单位
* @param custIds 被加入的客户id
* @throws Exception
*/
public void saveCustJoinUnit( String[] custIds)
throws Exception;
/**
* 客户退出单位
* @param unitId
* @throws Exception
*/
public void saveCustQuitUnit(String[] unitId) throws Exception;
/**
* 居民转非居民
* @param nonresCust 非居民客户(不存在则新建)
* @param linkman 居民客户
* @throws Exception
*/
public void changeNonresCust(CCust nonresCust, CCustLinkman linkman) throws Exception;
/**
* 客户迁移.
* @param nonresCust
* @param linkman
* @throws ServicesException
*/
public void transferCust(CCust nonresCust) throws ServicesException;
/**
* 根据设备编号查询设备信息及客户信息
* @param deviceCode
* @return
* @throws Exception
*/
public com.ycsoft.sysmanager.dto.resource.DeviceDto queryDeviceInfoByCode(String deviceCode)
throws Exception;
/**
* 根据设备类型查找设备型号信息
* @param deivceId
* @param deviceType
* @return
* @throws Exception
*/
public RDeviceModel queryDeviceModelByDeviceType(String deivceId,String deviceType) throws Exception;
/**
* 根据设备编号查找可以销售的设备信息
* 如果设备不存在,或者设备不能用于销售,则抛出异常
*
* 如果设备为配对的卡,返回为配对的机顶盒
* @param deviceCode
* @return
* @throws Exception
*/
public DeviceDto querySaleableDevice(String deviceCode) throws Exception;
/**
* 返回最后一个设备的型号
* @param deviceCode
* @return
* @throws Exception
*/
public DeviceDto querySaleableDeviceArea(String deviceCodes,String userType) throws Exception;
public DeviceDto queryChangeDevice(String userType, String deviceCode) throws Exception;
/**
* 根据设备编号查可以进行机卡互换的设备,该设备只能是已经在使用的。不能为空闲的.
* @param deviceCode
* @return
* @throws Exception
*/
public Map<String, Object> queryDeviceForSwitch(String deviceCode,String deviceType, String custId) throws Exception;
/**
* 查询可以单独购买的智能卡
* @return
* @throws Exception
*/
public DeviceDto querySaleableCard(String deviceCode) throws Exception;
/**
* 查询可以单独购买的MODEM
* @return
* @throws Exception
*/
public DeviceDto querySaleableModem(String deviceCode) throws Exception;
/**
* 根据设备编号查找设备信息
* 如果设备不存在,则抛出异常
*
* 如果设备为配对的卡,返回为配对的机顶盒
* @param deviceCode
* @return
* @throws Exception
*/
public DeviceDto queryDevice(String deviceCode) throws Exception;
/**
* 根据设备号,查询用户下另一个设备的编号
* deviceType 为STB ,返回用户下的卡
* deviceType 为CARD ,返回用户下的机
* @param deviceCode
* @return
* @throws Exception
*/
public DeviceDto queryUserAnotherDevice(String deviceType,String deviceCode) throws Exception;
/**
* 根据设备编号查找可以被当前用户使用的设备
* 如果设备不存在,或者设备不能用于使用(开户、更换),则抛出异常
* @param custId
* @param deviceCode
* @return
* @throws Exception
*/
public DeviceDto queryUseableDevice(String custId,String deviceType, String deviceCode,String userType) throws Exception;
/**
* 根据设备型号和销售方式查找销售费用信息
* @param deviceModel
* @param buyMode
* @return
*/
public List<RDeviceFee> queryDeviceFee(String deviceType,String deviceModel,String buyMode)throws Exception;
/**
* 查询指定客户下 设备的购买方式
* @param custId
* @param deviceCode
* @return
*/
public List<TDeviceBuyMode> queryDeviceBuyMode()
throws Exception;
/**
* 根据客户编号、客户类型、和套餐编号查找客户名下可以
* @param custId
* @param custType
* @param pkgId
* @return
* @throws Exception
*/
public List<CustProdDto> queryCustProdForPkg(String custId,String custType,String pkgId, String pkgTarrifId) throws Exception;
public List<CustProdDto> queryProdsOfPkg(String custId,String pkgId ) throws Exception;
/**
* 查询机顶盒设备类型,验证是否双向
* @param stbId
* @return
* @throws Exception
*/
public RStbModel queryStbModel(String stbId) throws Exception;
/**批量明细修改地址
* @param custAddrList
* @param busiCode
* @throws Exception
*/
public void updateAddressList(List<CCust> custAddrList,List<CCust> custLinkmanList,String busiCode) throws Exception;
public void updateAddressList(CCust cust,String newAddrId ,String newAddress, String old_addr_id,String busiCode) throws Exception;
/**A小区名下的客户移入B小区下
* @param oldAddrId
* @param newAddrId
* @param optr
* @throws Exception
*/
public String updateCustAddress(String oldAddrId,String newAddrId,SOptr optr) throws Exception;
/**
* 修改设备产权
* @param deviceId
*/
public void saveChangeOwnership(String deviceId)throws Exception;
/**
* 仓库管理调用回收设备
* @param deviceId
* @param deviceStatus
* @throws JDBCException
* @throws Exception
* @throws ComponentException
*/
public void saveCancelDevice(String deviceId, String deviceStatus)
throws JDBCException, Exception, ComponentException;
/**
* 批量修改客户状态
* @param custNos
* @param custStatus
* @throws Exception
*/
public void updateCustStatus(List<String> custNos,String custStatus) throws Exception;
/**
* 恢复客户状态 从资料隔离到正常
* @param custId
* @throws Exception
*/
public String renewCust() throws Exception;
/**
* 调用存储过程,批量销客户
* @param custIdList
* @param isReclaimDevice
* @param deviceStatus
* @param remark
*/
public void batchLogoffCust(List<String> custIdList, String isReclaimDevice, String deviceStatus, String remark) throws Exception;
public Pager<TNonresCustApproval> queryNonresCustApp(Integer start,Integer limit) throws Exception;
/**
* 恢复已销户的客户.恢复客户信息,客户联系人,客户地址.
* @param custId
*/
public CustFullInfoDto restoeCust(String custId) throws ServicesException;
/**
* @param userId
* @param prodId
* @param tariffId
* @param tariffStartDate
* @param custClass
* @param custClassDate
*/
public void editCustClass(String userId, String prodId, String tariffId,
String tariffStartDate, String expDate, String custClass, String custClassDate)throws Exception;
/**
* @param deviceType
* @param oldModel
* @param newModel
* @returnR
*/
public RDeviceFee queryFeeByModel(String deviceType, String oldModel,String newModel) throws Exception;
public List<RDeviceModelTotalDto> queryDeviceCanBuy(SOptr optr) throws Exception;
public void saveBacthBuyMaterial(List<RDeviceModelTotalDto> feeInfoList) throws Exception;
public void editCustLevel(String parameter) throws Exception;
public void saveBugTask(String bugDetail, String bugPhone)throws Exception;
}