/**
*
*/
package com.ycsoft.business.service.impl;
import static com.ycsoft.commons.constants.BusiCodeConstants.CUST_OPEN;
import static com.ycsoft.commons.constants.BusiCodeConstants.DEVICE_BUY;
import static com.ycsoft.commons.constants.BusiCodeConstants.DEVICE_CHANGE;
import static com.ycsoft.commons.constants.BusiCodeConstants.PROD_PACKAGE_ORDER;
import static com.ycsoft.commons.constants.BusiCodeConstants.USER_OPEN;
import static com.ycsoft.commons.constants.BusiCodeConstants.USER_OPEN_BATCH;
import static com.ycsoft.commons.constants.BusiCodeConstants.USER_PROMOTION;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.ycsoft.beans.config.TBusiCode;
import com.ycsoft.beans.core.acct.CAcct;
import com.ycsoft.beans.core.acct.CAcctAcctitem;
import com.ycsoft.beans.core.acct.CAcctAcctitemTrans;
import com.ycsoft.beans.core.bill.BBill;
import com.ycsoft.beans.core.common.CDoneCode;
import com.ycsoft.beans.core.common.CDoneCodeDetail;
import com.ycsoft.beans.core.cust.CCust;
import com.ycsoft.beans.core.cust.CCustPropChange;
import com.ycsoft.beans.core.fee.CFee;
import com.ycsoft.beans.core.fee.CFeeDevice;
import com.ycsoft.beans.core.job.JProdNextTariff;
import com.ycsoft.beans.core.job.JProdNextTariffHis;
import com.ycsoft.beans.core.prod.CProd;
import com.ycsoft.beans.core.prod.CProdPropChange;
import com.ycsoft.beans.core.user.CUser;
import com.ycsoft.beans.core.user.CUserPropChange;
import com.ycsoft.beans.prod.PProdTariff;
import com.ycsoft.business.component.config.BusiConfigComponent;
import com.ycsoft.business.component.core.UserPromComponent;
import com.ycsoft.business.dto.core.cust.DoneCodeExtAttrDto;
import com.ycsoft.business.dto.core.cust.DoneInfoDto;
import com.ycsoft.business.dto.core.fee.BusiFeeDto;
import com.ycsoft.business.dto.core.fee.QueryFeeInfo;
import com.ycsoft.business.service.IDoneCodeService;
import com.ycsoft.commons.constants.BusiCmdConstants;
import com.ycsoft.commons.constants.BusiCodeConstants;
import com.ycsoft.commons.constants.StatusConstants;
import com.ycsoft.commons.constants.SystemConstants;
import com.ycsoft.commons.exception.ErrorCode;
import com.ycsoft.commons.exception.ServicesException;
import com.ycsoft.commons.helper.CollectionHelper;
import com.ycsoft.commons.helper.DateHelper;
import com.ycsoft.commons.helper.JsonHelper;
import com.ycsoft.commons.helper.StringHelper;
import com.ycsoft.daos.core.Pager;
/**
* @author YC-SOFT
*
*/
@Service
public class DoneCodeService extends BaseBusiService implements IDoneCodeService {
private UserPromComponent userPromComponent;
private BusiConfigComponent busiConfigComponent;
/**
* 根据流水号查询业务费用,按费用进行汇总
* @param doneCode
* @return
* @throws Exception
*/
public List<BusiFeeDto> queryEditFee(String custId,Integer doneCode,String busiCode) throws Exception{
List<BusiFeeDto> feeList = new ArrayList<BusiFeeDto>();
List<CFee> sumFeeList = feeComponent.querySumFeeByDoneCode(custId,doneCode);
Map<String,CFee> feeMap = CollectionHelper.converToMapSingle(sumFeeList, "fee_id","fee_std_id");
// if (busiCode.equals(DEVICE_BUY) || busiCode.equals(DEVICE_SALE)
// || busiCode.equals(DEVICE_RECLAIM) || busiCode.equals(BusiCodeConstants.DEVICE_CHANGE )
// || busiCode.equals(BusiCodeConstants.DEVICE_BUY_PJ ) || busiCode.equals(BusiCodeConstants.DEVICE_BUY_PJ_BACTH)){
List<BusiFeeDto> list = feeComponent.getDeviceFeeItems();
List<CFeeDevice> deviceList = feeComponent.queryDeviceByDoneCode(doneCode);
if (deviceList!=null ){
for(CFeeDevice device : deviceList){
CFee fee = feeMap.get(device.getFee_id()+"_"+device.getFee_std_id());
if (StringHelper.isNotEmpty(device.getFee_std_id())){
for (BusiFeeDto busiFee:list){
if (busiFee.getFee_std_id().equals(device.getFee_std_id())){
busiFee.setSum_fee(fee.getReal_pay());
busiFee.setBuy_num(fee.getBuy_num());
busiFee.setAddr_id(fee.getAddr_id());
busiFee.setKeyname(SystemConstants.FEE_TYPE_DEVICE);
busiFee.setDevice_model_text(device.getDevice_model_text());
feeList.add(busiFee);
break;
}
}
} else {
for (BusiFeeDto busiFee:list){
if (busiFee.getFee_id().equals(device.getFee_id())){
busiFee.setDevice_model(device.getDevice_model());
busiFee.setDefault_value(0);
busiFee.setSum_fee(fee.getReal_pay());
busiFee.setBuy_num(fee.getBuy_num());
busiFee.setAddr_id(fee.getAddr_id());
busiFee.setKeyname(SystemConstants.FEE_TYPE_DEVICE);
busiFee.setDevice_model_text(device.getDevice_model_text());
feeList.add(busiFee);
break;
}
}
}
}
}
// } else {
List<BusiFeeDto> busiList = feeComponent.getBusiFeeItems();
for (BusiFeeDto busiFee:busiList){
// //IP费用
// if(busiFee.getFee_id().equals(SystemConstants.USER_IP_FEE_ID)){
// CFee fee = feeMap.get(busiFee.getFee_id());
// if(fee != null){
// busiFee.setSum_fee(fee.getReal_pay());
// busiFee.setBuy_num(0);
// busiFee.setAddr_id(fee.getAddr_id());
// feeList.add(busiFee);
// }
// }else{
if (busiFee.getBusi_code().equals(busiCode)){
for (CFee fee:sumFeeList){
if (fee.getFee_id().equals(busiFee.getFee_id())){
busiFee.setSum_fee(fee.getReal_pay());
busiFee.setBuy_num(0);
busiFee.setAddr_id(fee.getAddr_id());
break;
}
}
feeList.add(busiFee);
}
// }
}
// }
return feeList;
}
public void cancelDoneCode(Integer doneCode) throws Exception {
String custId =getBusiParam().getCust().getCust_id();
CDoneCode cDoneCode = doneCodeComponent.queryByKey(doneCode);
TBusiCode tBusiCode= busiConfigComponent.queryBusiCode(cDoneCode.getBusi_code());
//判断是否可以取消
if (tBusiCode.getCancel().equals(SystemConstants.BOOLEAN_FALSE)){
throw new ServicesException(tBusiCode.getBusi_name()+"业务不能回退");
} else if (!cDoneCode.getOptr_id().equals(cDoneCode.getOptr_id())){
throw new ServicesException("不是本人办理的业务,不能回退");
} else if(!DateHelper.dateToStr(cDoneCode.getDone_date()).equals(DateHelper.getDate("-"))) {
throw new ServicesException("不是当天办理的业务,不能回退");
} else if (cDoneCode.getStatus().equals(StatusConstants.INVALID)){
throw new ServicesException("该业务已回退");
} else if (doneCodeComponent.getNeedCancleCount(doneCode, custId)>0){
throw new ServicesException("前面有业务需要先回退");
}
//根据业务编号调用相应的回退方法
String busiCode = cDoneCode.getBusi_code();
if (busiCode.equals(CUST_OPEN))
cancelOpenCust(custId, doneCode);
// else if (busiCode.equals(CUST_EDIT) || busiCode.equals(CUST_TRANS)
// || busiCode.equals(CUST_CHANGE_ADDR) || busiCode.equals(CUST_RELOCATE))
// cancelEditCust(custId, doneCode);
// else if (busiCode.equals(USER_OPEN))
// cancelOpenUser(custId, doneCode);
// else if (busiCode.equals(USER_EDIT) || busiCode.equals(USER_EDIT_LEVEL))
// cancelEditUser(custId, doneCode);
// else if (busiCode.equals(USER_DTOI))
// cancelOpenInteractive(custId, doneCode);
// else if (busiCode.equals(USER_REQUIRE_STOP))
// cancelRequireStop(custId, doneCode);
// else if (busiCode.equals(PROD_PACKAGE_ORDER))
// cancelOrder(custId, doneCode);
// else if (busiCode.equals(PROD_CHANGE_TARIFF))
// cancelEditTariff(custId, doneCode);
// else if (busiCode.equals(USER_PROMOTION))
// cancelPromotion(custId, doneCode);
// else if (busiCode.equals(ACCT_TRANS))
// cancelTransAcct(custId, doneCode);
//// else if (busiCode.equals(ACCT_ADJUST))
//// cancelAdjustAcct(custId, doneCode);
// else if (busiCode.equals(DEVICE_BUY))
// cancelBuyDevice(custId, doneCode);
// else if (busiCode.equals(DEVICE_CHANGE))
// cancelChangeDevice(custId, doneCode);
// else if (busiCode.equals(EDIT_INVALID_DATE))
// cancelEditInvalid(custId, doneCode);
else
throw new ServicesException(ErrorCode.BusiCodeCanNotCancel,busiCode);
//冲正流水对应的费用
List<CFee> feeList = feeComponent.queryByDoneCode(doneCode);
for (CFee fee:feeList){
if(fee.getFee_type().equals(SystemConstants.FEE_TYPE_BUSI)){
cancelOtherFee(doneCode,busiCode,fee);
}
}
//TODO 插入负费用,原先费用不用改
Integer createDoneCode = doneCodeComponent.gDoneCode();
getBusiParam().setRemark("doneCode="+doneCode);
// getBusiParam().setFees(fees);
getBusiParam().setBusiCode(BusiCodeConstants.BUSI_CANCEL);
saveAllPublic(createDoneCode, getBusiParam());
// if (fee.getStatus().equals(StatusConstants.PAY))
// cancelFee(doneCode, cDoneCode.getBusi_code(), fee);
// else {
// if (fee.getFee_type().equals(SystemConstants.FEE_TYPE_ACCT)){
// cancelFee(doneCode, cDoneCode.getBusi_code(), fee);
// }
// feeComponent.removeFee(fee.getFee_sn());
// }
// }
//创建返销帐任务 jpz not need
// if (feeList.size()>0){
// jobComponent.createCustWriteOffJob(doneCode, custId, SystemConstants.BOOLEAN_FALSE);
// jobComponent.createAcctModeCalJob(doneCode, custId);
//
// }
//TODO 作废工单 wait new task jpz
// taskComponent.cancelTaskByDoneCode(doneCode);
//更新流水状态
// doneCodeComponent.updateStatus(doneCode,cDoneCode.getBusi_code());
}
public Pager<DoneCodeExtAttrDto> queryByCustId(String custId, QueryFeeInfo queryFeeInfo,
Integer start,Integer limit) throws Exception {
return doneCodeComponent.queryByCustId(custId, queryFeeInfo,start,limit);
}
//取消创建客户---客户开户
private void cancelOpenCust(String custId,Integer doneCode) throws Exception {
//删除客户
custComponent.removeCustWithOutHis(custId);
//删除账户
CAcct acct = acctComponent.queryCustAcctByCustId(custId);
acctComponent.removeAcctWithoutHis(acct.getAcct_id());
}
//取消修改客户资料----修改客户、过户、移机
private void cancelEditCust(String custId,Integer doneCode) throws Exception {
List<CCustPropChange> propChangeList = custComponent.queryPropChangeByDoneCode(custId, doneCode);
List<CCustPropChange> newPropChangeList = new ArrayList<CCustPropChange>();
for (CCustPropChange change:propChangeList){
String temp = change.getOld_value() == null?"": change.getOld_value();
change.setOld_value(change.getNew_value()== null?"":change.getNew_value());
change.setNew_value(temp);
newPropChangeList.add(change);
}
custComponent.editCust(doneCode, custId, newPropChangeList);
//删除属性变动历史
custComponent.removeCustPropChange(custId, doneCode);
}
//取消修改用户
private void cancelEditUser(String custId,Integer doneCode) throws Exception {
CDoneCodeDetail detail = doneCodeComponent.queryDetail(doneCode).get(0);
List<CUserPropChange> propChangeList = userComponent.queryPropChangeByDoneCode(detail.getUser_id(), doneCode);
List<CUserPropChange> newPropChangeList = new ArrayList<CUserPropChange>();
for (CUserPropChange change:propChangeList){
String temp = change.getOld_value();
change.setOld_value(change.getNew_value());
change.setNew_value(temp);
newPropChangeList.add(change);
}
userComponent.editUser(doneCode, detail.getUser_id(), newPropChangeList);
//删除属性变动历史
userComponent.removeUserPropChange(detail.getUser_id(), doneCode);
}
//取消用户开户
private void cancelOpenUser(String custId,Integer doneCode) throws Exception {
//查找流水对应的用户
CDoneCodeDetail detail = doneCodeComponent.queryDetail(doneCode).get(0);
CCust cust = custComponent.queryCustById(custId);
CUser user = userComponent.queryUserById(detail.getUser_id());
//生成删除用户job
delUserJob(user, custId, doneCode);
//更新客户设备状态
custComponent.updateDeviceStatusByCode(custId, user.getStb_id(), StatusConstants.IDLE);
custComponent.updateDeviceStatusByCode(custId, user.getCard_id(), StatusConstants.IDLE);
custComponent.updateDeviceStatusByCode(custId, user.getModem_mac(), StatusConstants.IDLE);
//删除账户信息
acctComponent.removeAcctWithoutHis(user.getAcct_id());
//删除用户相关信息
userComponent.removeUserWithoutHis(user.getUser_id());
List<CUser> userList = userComponent.queryUserByCustId(user.getCust_id());
if(userList.size() == 0){
//修改客户状态为预开户
if(cust.getStatus().equals(StatusConstants.ACTIVE))
custComponent.updateCustStatus(doneCode,custId,StatusConstants.ACTIVE,StatusConstants.PREOPEN);
}
}
//取消开通双向
private void cancelOpenInteractive(String custId,Integer doneCode) throws Exception {
//查找流水对应的用户
CDoneCodeDetail detail = doneCodeComponent.queryDetail(doneCode).get(0);
CUser userDto = queryUserById(detail.getUser_id());
//取消修改用户属性
cancelEditUser(userDto.getUser_id(), doneCode);
jobComponent.createBusiCmdJob(doneCode, BusiCmdConstants.CANCEL_INTERACTIVE, custId,
userDto.getUser_id(), userDto.getStb_id(), userDto.getCard_id(), "", null,null,JsonHelper.fromObject(userDto));
//修改设备状态
custComponent.updateDeviceStatusByCode(custId, userDto.getModem_mac(), StatusConstants.IDLE);
}
//取消报停
private void cancelRequireStop(String custId,Integer doneCode) throws Exception {
//根据流水号查找是否有预报停任务,
//如果有,删除预报停任务
//如果没有,则修改用户及设备以及产品的状态
if (jobComponent.isPreStop(doneCode)){
jobComponent.removePreStopByDoneCode(doneCode);
} else {
List<CDoneCodeDetail> detailList = doneCodeComponent.queryDetail(doneCode);
List<CUser> userList = userComponent.queryUserByCustId(detailList.get(0).getCust_id());
CUser user = null;
for (CDoneCodeDetail detail:detailList){
for (CUser cu:userList){
if (cu.getUser_id().equals(detail.getUser_id())){
user = userComponent.queryUserById(detail.getUser_id());
break;
}
}
//修改设备状态
custComponent.updateDeviceStatusByCode(user.getCust_id(), user.getStb_id(), StatusConstants.USE);
custComponent.updateDeviceStatusByCode(user.getCust_id(), user.getCard_id(), StatusConstants.USE);
custComponent.updateDeviceStatusByCode(user.getCust_id(), user.getModem_mac(), StatusConstants.USE);
//修改用户状态
updateUserStatus(doneCode, user.getUser_id(), user.getStatus(), StatusConstants.ACTIVE);
//生成激活用户JOB
CUser userDto = queryUserById(user.getUser_id());
jobComponent.createBusiCmdJob(doneCode, BusiCmdConstants.ACCTIVATE_USER, custId,
user.getUser_id(), user.getStb_id(), user.getCard_id(), user.getModem_mac(), null,null,JsonHelper.fromObject(userDto));
}
//更新产品状态
List<CProdPropChange> changeList = userProdComponent.queryChangeByDoneCode(doneCode);
for (CProdPropChange change:changeList){
CProd prod = userProdComponent.queryByProdSn(change.getProd_sn());
for (CUser cu:userList){
if (cu.getUser_id().equals(prod.getUser_id())){
user = userComponent.queryUserById(prod.getUser_id());
break;
}
}
userProdComponent.updateProdStatus(doneCode, change.getProd_sn(), change.getNew_value(), change.getOld_value());
if (isProdOpen(change.getOld_value())){
jobComponent.createBusiCmdJob(doneCode, BusiCmdConstants.ACCTIVATE_PROD,
custId, user.getUser_id(), user.getStb_id(), user.getCard_id(),
user.getModem_mac(), prod.getProd_sn(), prod.getProd_id());
}
}
}
}
//取消产品订购
private void cancelOrder(String custId,Integer doneCode) throws Exception {
List<CProd> prodList = userProdComponent.queryProdByDoneCode(doneCode);
for (CProd prod :prodList){
CUser user = userComponent.queryUserById(prod.getUser_id());
//生成钝化产品的指令
jobComponent.createBusiCmdJob(doneCode, BusiCmdConstants.PASSVATE_PROD, custId,
user.getUser_id(), user.getStb_id(), user.getCard_id(), user.getModem_mac(),
prod.getProd_sn(),prod.getProd_id());
//删除产品
userProdComponent.removeProdWithoutHis(doneCode, prod.getProd_sn());
//删除产品对应的账目
acctComponent.removeAcctItemWithoutHis(user.getCust_id(),user.getAcct_id(),prod.getProd_id(), doneCode,this.getBusiParam().getBusiCode());
}
}
//取消修改资费
private void cancelEditTariff(String custId,Integer doneCode) throws Exception {
JProdNextTariff tariffJob = jobComponent.queryTariffJob(doneCode);
if(tariffJob != null){
JProdNextTariffHis tariffJobHis = new JProdNextTariffHis();
BeanUtils.copyProperties(tariffJob, tariffJobHis);
jobComponent.saveTariffJobHis(tariffJobHis);
jobComponent.removeTariffJobByDoneCode(doneCode);
userProdComponent.updateNextTariff(tariffJob.getProd_sn(), "");
}
}
//取消促销
private void cancelPromotion(String custId,Integer doneCode) throws Exception {
//有问题
/*String busiCode = getBusiParam().getBusiCode();
CPromotion promotion = userPromComponent.queryByDoneCode(doneCode);
//修改费用的优惠信息为空
feeComponent.cancelDisct(promotion.getPromotion_sn());
//退还已经返还的优惠账目金额
List<CAcctAcctitemInactive> itemList = acctComponent.queryInactiveByPromSn(promotion.getPromotion_sn());
for (CAcctAcctitemInactive item:itemList){
if(item.getUse_amount()>0){
acctComponent.changeAcctItemBanlance(doneCode, busiCode, custId,
item.getAcct_id(), item.getAcctitem_id(),
SystemConstants.ACCT_CHANGE_PROMOTION, SystemConstants.ACCT_FEETYPE_PRESENT, item.getUse_amount()*-1);
}
}
//删除优惠信息
userPromComponent.removeBySn(promotion.getPromotion_sn());
//删除冻结账户信息
acctComponent.removeInactiveWithoutHis(promotion.getPromotion_sn());
//删除赠送的产品信息
cancelOrder(custId,doneCode);
//生成返销帐任务
jobComponent.createCustWriteOffJob(doneCode, custId, SystemConstants.BOOLEAN_FALSE);*/
}
private void cancelMuchProdTransAcct(Integer doneCode, String prodSn, int transAmount) throws Exception {
CProd prod = userProdComponent.queryByProdSn(prodSn);
if(prod != null){
String acctId = prod.getAcct_id();
String acctItemId = prod.getProd_id();
CAcct acct = acctComponent.queryByAcctId(acctId);
if (acct!=null && !acct.getAcct_type().equals(SystemConstants.ACCT_TYPE_PUBLIC)){
CAcctAcctitem acctItem = acctComponent.queryAcctItemByAcctitemId(acctId, acctItemId);
PProdTariff tariff = userProdComponent.queryProdTariffById(prod.getTariff_id());
if(tariff != null && tariff.getBilling_cycle() > 1 && tariff.getRent() >0 ){
//包多月的情况,如果有账单,则要取消账单
List<BBill> muchbills=billComponent.queryMuchMonthProdBill(prod.getProd_sn(), doneCode, DateHelper.format(new Date(),
DateHelper.FORMAT_YM), SystemConstants.BILL_COME_FROM_MUCH);
if(muchbills!=null&&muchbills.size()>0){
int owefee=0;
int billfee=0;
for(BBill bill:muchbills){
owefee=owefee+bill.getOwe_fee();
billfee=billfee+bill.getFinal_bill_fee();
billComponent.cancelBill(bill.getBill_sn());
}
acctComponent.changeAcctItemOwefee(false, acctId, acctItemId, owefee*-1);
// userProdComponent.updateInvalidDate(doneCode, prod.getProd_sn(),0, billfee*-1, acctItem);
userProdComponent.updateInvalidDate(doneCode, prod.getProd_sn(),
userProdComponent.getDate(userProdComponent.queryByProdSn(prod.getProd_sn()).getInvalid_date(), muchbills.size()*-1, 0));
}
}else{
//包月情况
userProdComponent.updateInvalidDate(doneCode, prod.getProd_sn(),0, transAmount*-1, acctItem);
}
}
}
}
//取消转账
private void cancelTransAcct(String custId,Integer doneCode) throws Exception {
String busiCode = getBusiParam().getBusiCode();
//取消转账
List<CAcctAcctitemTrans> transList = acctComponent.queryTransByDoneCode(doneCode);
for (CAcctAcctitemTrans trans:transList){
String outAcctId = trans.getOut_acct_id();
String outAcctItemId = trans.getOut_acctitem_id();
String inAcctId = trans.getIn_acct_id();
String inAcctItemId = trans.getIn_acctitem_id();
int fee = trans.getAmount();
acctComponent.changeAcctItemBanlance(doneCode, busiCode,trans.getCust_id(),
outAcctId, outAcctItemId,
SystemConstants.ACCT_CHANGE_TRANS,trans.getFee_type(),fee, null);
acctComponent.changeAcctItemBanlance(doneCode, busiCode,trans.getCust_id(),
inAcctId, inAcctItemId,
SystemConstants.ACCT_CHANGE_TRANS,trans.getFee_type(),fee*-1, null);
CProd outProd = userProdComponent.queryByAcctItem(outAcctId, outAcctItemId);
if (outProd != null){
CAcctAcctitem acctItemOut = acctComponent.queryAcctItemByAcctitemId(outAcctId, outAcctItemId);
// acctComponent.updateInvalidDate(doneCode, outProd.getProd_sn(), 0, fee, acctItemOut);
this.cancelMuchProdTransAcct(doneCode, outProd.getProd_sn(), fee);
}
CProd inProd = userProdComponent.queryByAcctItem(inAcctId, inAcctItemId);
if (inProd != null){
CAcctAcctitem acctItemIn = acctComponent.queryAcctItemByAcctitemId(inAcctId, inAcctItemId);
// acctComponent.updateInvalidDate(doneCode, inProd.getProd_sn(), 0, fee*-1, acctItemIn);
this.cancelMuchProdTransAcct(doneCode, inProd.getProd_sn(), fee*-1);
}
}
//生成返销帐任务
jobComponent.createCustWriteOffJob(doneCode, custId, SystemConstants.BOOLEAN_FALSE);
jobComponent.createAcctModeCalJob(doneCode, custId);
jobComponent.createInvalidCalJob(doneCode, custId);
//删除转账记录
acctComponent.removeTrans(doneCode);
//删除账户异动
acctComponent.removeChange(doneCode);
}
//取消调账
// private void cancelAdjustAcct(String custId,Integer doneCode) throws Exception {
// String busiCode = getBusiParam().getBusiCode();
// //查找调账记录
// CAcctAcctitemAdjust adjust = acctComponent.queryAdjustByDoneCode(doneCode);
// //修改账目余额
// acctComponent.changeAcctItemBanlance(doneCode, busiCode, custId,
// adjust.getAcct_id(), adjust.getAcctitem_id(),
// SystemConstants.ACCT_CHANGE_ADJUST, SystemConstants.ACCT_FEETYPE_ADJUST, adjust.getAjust_fee());
// //删除调账对应的账单
// billComponent.deleteBill(adjust.getDone_code());
// //生成返销帐任务
// jobComponent.createCustWriteOffJob(doneCode, custId, SystemConstants.BOOLEAN_FALSE);
// //删除调账记录
// acctComponent.removeAdjust(doneCode);
// //删除账户异动
// acctComponent.removeChange(doneCode);
// }
//取消购买设备
private void cancelBuyDevice(String custId,Integer doneCode) throws Exception {
//查找购买的设备信息
List<CFeeDevice> deviceList = feeComponent.queryDeviceByDoneCode(doneCode);
//修改设备属性
deviceComponent.recover(doneCode);
//删除客户设备
for (CFeeDevice device:deviceList){
custComponent.removeDevice(custId, device.getDevice_id(),doneCode, SystemConstants.BOOLEAN_FALSE);
if (StringHelper.isNotEmpty(device.getPair_card_id())){
custComponent.removeDevice(custId, device.getPair_card_id(),doneCode, SystemConstants.BOOLEAN_FALSE);
}
}
//删除设备信息异动
deviceComponent.removeChange(doneCode);
}
/**
* 回退修改到期日
* @param custId
* @param doneCode
* @throws Exception
*/
private void cancelEditInvalid(String custId,Integer doneCode) throws Exception {
List<CProdPropChange> changeList = userProdComponent.queryChangeByDoneCode(doneCode);
if(changeList.size()>0){
List<CProdPropChange> cList = new ArrayList<CProdPropChange>();
for (CProdPropChange change:changeList){
CProdPropChange propChange = new CProdPropChange();
propChange.setColumn_name(change.getColumn_name());
propChange.setOld_value(change.getNew_value());
propChange.setNew_value(change.getOld_value());
cList.add(propChange);
}
userProdComponent.editProd(doneCode, changeList.get(0).getProd_sn(), cList);
CProd cProd = userProdComponent.queryByProdSn(changeList.get(0).getProd_sn());
if (cProd != null){
if(cProd.getInvalid_date().before(DateHelper.strToDate(DateHelper.formatNow()))){
CUser user = userComponent.queryUserById(cProd.getUser_id());
jobComponent.createBusiCmdJob(doneCode, BusiCmdConstants.PASSVATE_PROD,
custId, user.getUser_id(), user.getStb_id(), user.getCard_id(),
user.getModem_mac(), cProd.getProd_sn(), cProd.getProd_id());
}
//删除属性变动历史
userProdComponent.removePropChange(cProd.getProd_sn(), doneCode);
}
}
}
//取消更换设备
private void cancelChangeDevice(String custId,Integer doneCode) throws Exception {
/*//查找变更记录
List<CCustDeviceChange> changeList = custComponent.queryDeviceChangeByDoneCode(doneCode);
//调用变更接口
String busiCode = getBusiParam().getBusiCode();
//boolean changeOwnership = changeList.get(0).getChange_ownship().equals(SystemConstants.BOOLEAN_TRUE)?true:false;
String oldStbId="";
String newStbId="";
String oldCardId="";
String newCardId="";
String oldModemId="";
String newModemId="";
for (CCustDeviceChange change:changeList){
if (change.getDevice_type().equals(SystemConstants.DEVICE_TYPE_STB)){
oldStbId = change.getNew_device_code();
newStbId = change.getOld_device_code();
} else if (change.getDevice_type().equals(SystemConstants.DEVICE_TYPE_CARD)){
oldCardId = change.getNew_device_code();
newCardId = change.getOld_device_code();
} else if (change.getDevice_type().equals(SystemConstants.DEVICE_TYPE_MODEM)){
oldModemId = change.getNew_device_code();
newModemId = change.getOld_device_code();
}
}
if (changeList.get(0).getDevice_type().equals(SystemConstants.DEVICE_TYPE_MODEM)){
changeModem(oldModemId, newModemId,
custId, doneCode,busiCode);
} else {
changeStbCard(oldStbId, oldCardId, newStbId, newCardId, custId, doneCode, busiCode);
}
//删除客户设备变更历史
custComponent.removeDeviceChange(doneCode);
//删除设备信息异动
deviceComponent.removeChange(doneCode);*/
}
public void setUserPromComponent(UserPromComponent userPromComponent) {
this.userPromComponent = userPromComponent;
}
/**
* @param busiConfigComponent the busiConfigComponent to set
*/
public void setBusiConfigComponent(BusiConfigComponent busiConfigComponent) {
this.busiConfigComponent = busiConfigComponent;
}
public Pager<DoneInfoDto> getGridDate(Integer doneCode, String custId, Integer start,
Integer limit) throws Exception {
CDoneCode cDoneCode = doneCodeComponent.queryByKey(doneCode);
String busiCode = cDoneCode.getBusi_code();
if(busiCode.equals(USER_OPEN) || busiCode.equals(USER_OPEN_BATCH)){
//目前不支持分页,还未有批量开户
List<CDoneCodeDetail> detailList = doneCodeComponent.queryDetail(doneCode);
String[] users = CollectionHelper.converValueToArray(detailList, "user_id");
List<CUser> userList = new ArrayList<CUser>();
List<CUser> userUseList = userComponent.queryAllUserByUserIds(users);
userList.addAll(userUseList);
List<CUser> userHisList = userComponent.queryAllUserHisByUserIds(users);
userList.addAll(userHisList);
List<DoneInfoDto> infoList = new ArrayList<DoneInfoDto>();
for(CUser user:userList){
DoneInfoDto info = new DoneInfoDto();
info.setCard_id(user.getCard_id());
info.setModem_mac(user.getModem_mac());
info.setStb_id(user.getStb_id());
info.setUser_type(user.getUser_type());
info.setUser_name(user.getUser_name());
info.setStatus_text(user.getStatus_text());
infoList.add(info);
}
return new Pager(infoList,infoList.size());
// return doneCodeComponent.getUserOpenDate(doneCode,start,limit);
}else if(busiCode.equals(PROD_PACKAGE_ORDER) || busiCode.equals(BusiCodeConstants.PROD_SINGLE_ORDER)
|| busiCode.equals(BusiCodeConstants.PROD_CONTINUE) || busiCode.equals(BusiCodeConstants.PROD_UPGRADE)
|| busiCode.equals(BusiCodeConstants.OTT_MOBILE_UPGRADE) || busiCode.equals(BusiCodeConstants.PROD_TERMINATE)
|| busiCode.equals(BusiCodeConstants.PROD_HIGH_TERMINATE) || busiCode.equals(BusiCodeConstants.PROD_SUPER_TERMINATE)
|| busiCode.equals(BusiCodeConstants.ACCT_PAY) || busiCode.equals(BusiCodeConstants.ACCT_REFUND)){
return doneCodeComponent.getOrderProdDate(doneCode,custId,start,limit);
}else if(busiCode.equals(DEVICE_CHANGE)){
return doneCodeComponent.getDeviceChangeDate(doneCode,cDoneCode.getCounty_id(),start,limit);
}else if(busiCode.equals(DEVICE_BUY)){
return doneCodeComponent.getDeviceBuyDate(doneCode,cDoneCode.getCounty_id(),start,limit);
}else if(busiCode.equals(USER_PROMOTION) || busiCode.equals(BusiCodeConstants.PROMOTION_AUTO)){
return doneCodeComponent.getPromotionDate(doneCode,cDoneCode.getCounty_id(),start,limit);
}else if(busiCode.equals(BusiCodeConstants.PROM_ACCT_PAY)){
Pager<DoneInfoDto> donePager = doneCodeComponent.getPromFeeDate(doneCode,cDoneCode.getCounty_id(),start,limit);
String[] users = CollectionHelper.converValueToArray(donePager.getRecords(), "user_id");
List<CUser> userList = userComponent.queryAllUserByUserIds(users);
for(DoneInfoDto dto:donePager.getRecords()){
for(CUser user:userList){
if(dto.getUser_id().equals(user.getUser_id())){
String userName = "";
if(StringHelper.isNotEmpty(user.getCard_id())){
userName = user.getUser_type_text()+"-"+ user.getUser_name()+"("+user.getCard_id().substring( user.getCard_id().length()-4, user.getCard_id().length())+")";
}else if(StringHelper.isNotEmpty(user.getUser_name())){
userName = user.getUser_type_text()+"-"+user.getUser_name();
}else{
userName = user.getUser_type_text();
}
dto.setUser_name(userName);
}
}
}
return donePager;
}else if(busiCode.equals(BusiCodeConstants.BAND_CHANG_PROD)){
return doneCodeComponent.getBandUpgradeDate(doneCode, cDoneCode.getCounty_id(), start, limit);
}
return null;
}
}