/*
* @(#) AAAUtils.java 1.0.0 2015年7月20日 下午3:02:26
*/
package com.ycsoft.boss.remoting.aaa;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.AAASubscriberInfo;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.AAASubscriberServiceInfo;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.ActivateSubscriberRequest;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.ActivateSubscriberRequestMsg;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.CancelSubscriberServiceRequest;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.CancelSubscriberServiceRequestMsg;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.DeactivateSubscriberRequest;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.DeactivateSubscriberRequestMsg;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.DeleteAAASubscriberRequest;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.DeleteAAASubscriberRequestMsg;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.ModifySubscriberServiceRequest;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.ModifySubscriberServiceRequestMsg;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.NewAAASubscriberRequest;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.NewAAASubscriberRequestMsg;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.OperatorInfo;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.OrderSubscriberServiceRequest;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.OrderSubscriberServiceRequestMsg;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.QuerySubscriberServiceRequest;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.QuerySubscriberServiceRequestMsg;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.RequestHeader;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.RequestType_type1;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.ResetAAASubscriberPswdRequest;
import com.ycsoft.boss.remoting.aaa.AAAInterfaceBusinessMgrServiceStub.ResetAAASubscriberPswdRequestMsg;
/**
* 华为接口工具类,解析请求与响应的内容
*
* @author Killer
*/
public final class AAARequestUtils {
// 默认的业务流水号
private static final long DEFAULT_DONE_CODE = 0L;
private static final String DEFAULT_LIMIT_PORT_GROUP_ID="1";
// 华为AAA接入方式支持很多种,但目前boss系统仅支持1090204:FBB&WiFi
private static final Integer DEFAULT_ACCESS_TYPE = 1090204;
static enum CommandId{
// 开户
NewSubscriber,
// 销户
DeleteSubscriber,
// 暂停用户
DeactivateSubscriber,
// 恢复用户
ActivateSubscriber,
// 重置密码
ResetAAASubscriberPswd,
// 订购业务
OrderSubscriberService,
// 修改订购业务
ModifySubscriberService,
// 删除订购业务
CancelSubscriberService,
// 查询用户订购业务
QuerySubscriberService
}
/**
* 构建修改订购业务的请求数据结构
* @param doneCode 流水号用于生成请求头信息
* @param userId boss系统的userId
* @param policyId 对应AAA的policyId
* @param effectTime YYMMDDhhmmss 如:20370101000000
* @param expireTime YYMMDDhhmmss 如:20370101000000
* @return
*/
public static ModifySubscriberServiceRequestMsg buildModifySubscriberServiceRequestMsg(long doneCode, String userId, Integer policyId, String effectTime, String expireTime){
ModifySubscriberServiceRequestMsg request = new ModifySubscriberServiceRequestMsg();
ModifySubscriberServiceRequest body = new ModifySubscriberServiceRequest();
body.setSubscriberID(userId);
AAASubscriberServiceInfo serviceInfo = createServiceInfo(policyId, effectTime, expireTime);
body.setAAASubscriberServiceInfo(serviceInfo);
request.setModifySubscriberServiceRequest(body);
request.setRequestHeader(buildReqeustHeader(CommandId.ModifySubscriberService, doneCode));
return request;
}
public static ModifySubscriberServiceRequestMsg buildModifySubscriberServiceRequestMsg(String userId, Integer policyId, String effectTime, String expireTime){
return buildModifySubscriberServiceRequestMsg(DEFAULT_DONE_CODE, userId, policyId, effectTime, expireTime);
}
/**
* TODO 查询订购有问题没有实现
* 构建查询订购业务的请求数据结构
* @param doneCode 流水号用于生成请求头信息
* @param userId boss系统的userId
* @return
*/
public static QuerySubscriberServiceRequestMsg buildQuerySubscriberServiceMsg(long doneCode, String userId){
QuerySubscriberServiceRequestMsg request = new QuerySubscriberServiceRequestMsg();
QuerySubscriberServiceRequest body = new QuerySubscriberServiceRequest();
body.setSubscriberID(userId);
// 接入方式 1090204:FBB&WiFi
body.setAccessType(DEFAULT_ACCESS_TYPE);
System.out.println(body.getSubscriberIDType());
body.setSubscriberIDType(3);
System.out.println(body.getSubscriberIDType());
request.setQuerySubscriberServiceRequest(body);
request.setRequestHeader(buildReqeustHeader(CommandId.QuerySubscriberService, doneCode));
return request;
}
public static QuerySubscriberServiceRequestMsg buildQuerySubscriberServiceMsg(String userId){
return buildQuerySubscriberServiceMsg(DEFAULT_DONE_CODE, userId);
}
/**
* 构建订购业务的请求数据结构
* @param doneCode 流水号用于生成请求头信息
* @param userId boss系统的userId
* @param policyId 对应AAA的policyId
* @param effectTime YYMMDDhhmmss 如:20370101000000
* @param expireTime YYMMDDhhmmss 如:20370101000000
* @return
*/
public static OrderSubscriberServiceRequestMsg buildOrderSubscriberServiceRequestMsg(long doneCode, String userId, Integer policyId, String effectTime, String expireTime){
OrderSubscriberServiceRequestMsg request = new OrderSubscriberServiceRequestMsg();
OrderSubscriberServiceRequest body = new OrderSubscriberServiceRequest();
body.setSubscriberID(userId);
AAASubscriberServiceInfo serviceInfo = createServiceInfo(policyId, effectTime, expireTime);
body.setAAASubscriberServiceInfo(serviceInfo);
request.setOrderSubscriberServiceRequest(body);
request.setRequestHeader(buildReqeustHeader(CommandId.OrderSubscriberService, doneCode));
return request;
}
public static OrderSubscriberServiceRequestMsg buildOrderSubscriberServiceRequestMsg(String userId, Integer policyId, String effectTime, String expireTime){
return buildOrderSubscriberServiceRequestMsg(DEFAULT_DONE_CODE, userId, policyId, effectTime, expireTime);
}
/**
* 取消业务订购
* @param doneCode 业务流水号
* @param userId BOSS系统的用户编号
* @return
*/
public static CancelSubscriberServiceRequestMsg buildCancelSubscriberServiceRequestMsg(long doneCode, String userId){
CancelSubscriberServiceRequestMsg request = new CancelSubscriberServiceRequestMsg();
CancelSubscriberServiceRequest body = new CancelSubscriberServiceRequest();
body.setSubscriberID(userId);
// 接入方式 1090204:FBB&WiFi
body.setAccessType(DEFAULT_ACCESS_TYPE);
body.setOperatorInfo(createDefaultOperatorInfo());
request.setCancelSubscriberServiceRequest(body);
request.setRequestHeader(buildReqeustHeader(CommandId.CancelSubscriberService, doneCode));
return request;
}
public static CancelSubscriberServiceRequestMsg buildCancelSubscriberServiceRequestMsg(String userId){
return buildCancelSubscriberServiceRequestMsg(DEFAULT_DONE_CODE, userId);
}
/**
* 构建重置密码的请求数据结构
* @param doneCode 业务流水号
* @param bandId 宽带账号
* @param pswd 新的密码
* @return
*/
public static ResetAAASubscriberPswdRequestMsg buildResetAAASubscriberPswdRequestMsg(long doneCode, String bandId, String pswd){
ResetAAASubscriberPswdRequestMsg request = new ResetAAASubscriberPswdRequestMsg();
ResetAAASubscriberPswdRequest body = new ResetAAASubscriberPswdRequest();
body.setSubscriberID(bandId);
body.setPassword(pswd);
request.setResetAAASubscriberPswdRequest(body);
request.setRequestHeader(buildReqeustHeader(CommandId.ResetAAASubscriberPswd, doneCode));
return request;
}
public static ResetAAASubscriberPswdRequestMsg buildResetAAASubscriberPswdRequestMsg(String bandId, String pswd){
return buildResetAAASubscriberPswdRequestMsg(DEFAULT_DONE_CODE, bandId, pswd);
}
/**
* 构建恢复用户的请求数据结构
*
* @param doneCode 业务流水号
* @param bandId 宽带账号
* @return
*/
public static ActivateSubscriberRequestMsg buildActivateSubscriberRequestMsg(long doneCode, String bandId){
ActivateSubscriberRequestMsg request = new ActivateSubscriberRequestMsg();
ActivateSubscriberRequest body = new ActivateSubscriberRequest();
body.setSubscriberID(bandId);
// 申请恢复
body.setOprType(1);
request.setActivateSubscriberRequest(body);
request.setRequestHeader(buildReqeustHeader(CommandId.ActivateSubscriber, doneCode));
return request;
}
public static ActivateSubscriberRequestMsg buildActivateSubscriberRequestMsg(String bandId){
return buildActivateSubscriberRequestMsg(DEFAULT_DONE_CODE, bandId);
}
/**
* 构建暂停用户的请求数据结构
* @param doneCode 业务流水号
* @param bandId 宽带账号
* @return
*/
public static DeactivateSubscriberRequestMsg buildDeactivateSubscriberRequestMsg(long doneCode, String bandId){
DeactivateSubscriberRequestMsg request = new DeactivateSubscriberRequestMsg();
DeactivateSubscriberRequest body = new DeactivateSubscriberRequest();
body.setSubscriberID(bandId);
// 主动暂停
body.setOprType(1);
request.setDeactivateSubscriberRequest(body);
request.setRequestHeader(buildReqeustHeader(CommandId.DeactivateSubscriber, doneCode));
return request;
}
public static DeactivateSubscriberRequestMsg buildDeactivateSubscriberRequestMsg(String bandId){
return buildDeactivateSubscriberRequestMsg(DEFAULT_DONE_CODE, bandId);
}
/**
* 构建销户的请求数据结构
* @param doneCode 业务流水号
* @param bandId 宽带账号
* @return
*/
public static DeleteAAASubscriberRequestMsg buildDeleteAAASubscriberRequestMsg(long doneCode, String bandId){
DeleteAAASubscriberRequestMsg request = new DeleteAAASubscriberRequestMsg();
DeleteAAASubscriberRequest body = new DeleteAAASubscriberRequest();
body.setSubscriberID(bandId);
request.setDeleteAAASubscriberRequest(body);
request.setRequestHeader(buildReqeustHeader(CommandId.DeleteSubscriber, doneCode));
return request;
}
public static DeleteAAASubscriberRequestMsg buildDeleteAAASubscriberRequestMsg(String bandId){
return buildDeleteAAASubscriberRequestMsg(DEFAULT_DONE_CODE, bandId);
}
/**
* 构建一个创建宽带用户的请求数据结构
*
* @param doneCode 业务流水号,可以为null
* @param bandId 宽带账号
* @param pswd 密码,最大16个字符
* @param policyId 接入策略 目前仅仅支持FBB&WiFi
* @return
*/
public static NewAAASubscriberRequestMsg buildNewAAASubscriberRequestMsg(long doneCode, String bandId, String pswd, Integer policyId){
NewAAASubscriberRequestMsg request = new NewAAASubscriberRequestMsg();
// 业务数据
NewAAASubscriberRequest body = new NewAAASubscriberRequest();
// 宽带账号
body.setSubscriberID(bandId);
AAASubscriberInfo basic = new AAASubscriberInfo();
// 密码
basic.setPassword(pswd);
body.setAAASubscriberInfo(basic);
//开户时订购策略
if(policyId!=null){
AAASubscriberServiceInfo serviceInfo = createServiceInfo(policyId, null, null);
body.setAAASubscriberServiceInfo(new AAASubscriberServiceInfo[]{serviceInfo});
}
request.setRequestHeader(buildReqeustHeader(CommandId.NewSubscriber, doneCode));
request.setNewAAASubscriberRequest(body);
return request;
}
/**
* 创建一个订购内容
* @param policyId 策略编号, 可以为空
* @param effectTime 生效时间, 可以为空
* @param expireTime 失效时间,可以为空
* @return
*/
private static AAASubscriberServiceInfo createServiceInfo(Integer policyId, String effectTime, String expireTime){
AAASubscriberServiceInfo serviceInfo = new AAASubscriberServiceInfo();
// 接入方式 1090204:FBB&WiFi
serviceInfo.setAccessType(DEFAULT_ACCESS_TYPE);
// 1:固网 2:WLAN 3:固网+WLAN
serviceInfo.setPermittedANTYpe(3);
// 接入策略ID
if (policyId != null)
serviceInfo.setAccessPolicyID(policyId);
serviceInfo.setChargingType("1");
serviceInfo.setMaxSessNumber(0);
serviceInfo.setCancelBinding(0);
serviceInfo.setPortBindingType(0);
serviceInfo.setLimitPortGroupID(DEFAULT_LIMIT_PORT_GROUP_ID);
// 开始日期
if(null != effectTime){
serviceInfo.setEffectTime(effectTime);
}
// 结束日期
if(null != expireTime){
serviceInfo.setExpireTime(expireTime);
}
return serviceInfo;
}
/**
* 创建一个默认的操作员
* @return
*/
private static OperatorInfo createDefaultOperatorInfo(){
OperatorInfo optr = new OperatorInfo();
optr.setDeptID("boss");
optr.setOperID("0");
return optr;
}
public static NewAAASubscriberRequestMsg buildNewAAASubscriberRequestMsg(String bandId, String pswd, Integer policyId){
return buildNewAAASubscriberRequestMsg(DEFAULT_DONE_CODE, bandId, pswd, policyId);
}
/**
* 构造一个默认的RequestHeader,这里会设置一些默认的参数值,
* 获得返回的请求头对象,可以覆盖默认值,也可以设置额外的参数值
*
* @return
*/
public static RequestHeader buildReqeustHeader(CommandId cmd, long doneCode){
RequestHeader header = new RequestHeader();
// 命令代码
header.setCommandId(cmd.name());
// 接口版本号
header.setVersion("1");
// 事务ID,用来关联一个会话
header.setTransactionId("1");
// 序列ID
header.setSequenceId("1");
// 每个操作的序列号,需要保持唯一
header.setSerialNo(String.valueOf(doneCode));
// 操作类型, 默认为Event
header.setRequestType(RequestType_type1.Event);
// 语言包ZH,EN
header.setLocale("ZH");
return header;
}
}