package com.ycsoft.boss.remoting.cfocn;
import java.rmi.RemoteException;
import java.util.Date;
import java.util.List;
import org.apache.axis2.AxisFault;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.gson.JsonObject;
import com.ycsoft.beans.core.user.CUser;
import com.ycsoft.beans.system.SOptr;
import com.ycsoft.beans.task.TaskCustExtInfo;
import com.ycsoft.beans.task.WTaskBaseInfo;
import com.ycsoft.beans.task.WTaskUser;
import com.ycsoft.boss.remoting.cfocn.CFOCN_WebSvc_WorkOrderStub.ArrayOfDeviceInfo;
import com.ycsoft.boss.remoting.cfocn.CFOCN_WebSvc_WorkOrderStub.ArrayOfProductInfo;
import com.ycsoft.boss.remoting.cfocn.CFOCN_WebSvc_WorkOrderStub.DeviceInfo;
import com.ycsoft.boss.remoting.cfocn.CFOCN_WebSvc_WorkOrderStub.ManuallyInfluencedWorkOrder;
import com.ycsoft.boss.remoting.cfocn.CFOCN_WebSvc_WorkOrderStub.ProductInfo;
import com.ycsoft.boss.remoting.cfocn.CFOCN_WebSvc_WorkOrderStub.ReceiveWorkOrder;
import com.ycsoft.boss.remoting.cfocn.CFOCN_WebSvc_WorkOrderStub.ResultHead;
import com.ycsoft.boss.remoting.cfocn.CFOCN_WebSvc_WorkOrderStub.WorkOrder;
import com.ycsoft.commons.constants.SystemConstants;
import com.ycsoft.commons.helper.DateHelper;
import com.ycsoft.commons.helper.JsonHelper;
import com.ycsoft.commons.helper.StringHelper;
public class WorkOrderClient {
private CFOCN_WebSvc_WorkOrderStub workOrderStub;
private static Logger LOG = LoggerFactory.getLogger(WorkOrderClient.class);
private final String INFL_TYPE_CANCEL="Cancle";//撤销工单
private final String INFL_TYPE_REMIND="Remind";//催单
private final String INFL_TYPE_CONTACT="Contact";//联系单
private final String ISP_CODE="1";
public WorkOrderClient (){
try {
workOrderStub = new CFOCN_WebSvc_WorkOrderStub();
} catch (AxisFault e) {
LOG.error("创建CNFON工单 Stub时错误,请检查网络是否通畅!", e);
}
}
public boolean createTaskService(WTaskBaseInfo task,List<WTaskUser> userList,TaskCustExtInfo extInfo,List<CUser> custUsers) throws WordOrderException{
ReceiveWorkOrder receiveWorkOrder = new ReceiveWorkOrder();
//设置工单基本信息
WorkOrder workOrder = getWorkOrderBaseInfo(task, extInfo.getCust_no(),extInfo.getArea_code(),extInfo.getCustManager(),userList,custUsers);
//设置设备信息
ArrayOfProductInfo productArray = getDeviceInfo(userList);
workOrder.setProductInfos(productArray);
receiveWorkOrder.setMWorkOrder(workOrder);
try {
if(LOG.isDebugEnabled()){
LOG.debug(JsonHelper.fromObject(receiveWorkOrder));
}
} catch (Exception e) {e.printStackTrace();}
return createTaskService(receiveWorkOrder);
}
private ArrayOfProductInfo getDeviceInfo(List<WTaskUser> userList) {
ArrayOfProductInfo productArray = new ArrayOfProductInfo();
ProductInfo product = new ProductInfo();
product.setProductName("supernet");
//product.setProductName("supernet");
ArrayOfDeviceInfo deviceArray = new ArrayOfDeviceInfo();
for (WTaskUser user:userList){
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.setDeviceName(user.getDevice_model());
if(StringHelper.isNotEmpty(user.getDevice_id())){
deviceInfo.setDeviceSN(user.getDevice_id());//设备编号
}
if(StringHelper.isNotEmpty(user.getOcc_no())){
deviceInfo.setOCCSerialCode(user.getOcc_no());//交接箱编号
}
if(StringHelper.isNotEmpty(user.getPos_no())){
deviceInfo.setPOSSerialCode(user.getPos_no());//分光器编号
}
deviceInfo.setIsFCPort(SystemConstants.USER_TYPE_BAND.equals(user.getUser_type())?true:false);
deviceArray.addDeviceInfo(deviceInfo);
}
product.setDeviceInfos(deviceArray);
productArray.addProductInfo(product);
return productArray;
}
private WorkOrder getWorkOrderBaseInfo(WTaskBaseInfo task, String custNo,String areaCode,SOptr custManager,List<WTaskUser> userList,List<CUser> custUsers) {
WorkOrder order = new WorkOrder();
order.setOrderNo(task.getTask_id());
order.setOrderType(Integer.parseInt(task.getTask_type_id()));
order.setAreaCode(areaCode);
order.setISPCode(ISP_CODE);
order.setUserAddress(task.getNew_addr());
order.setUserNo(custNo);
order.setUserName(task.getCust_name());
if(StringHelper.isNotEmpty(task.getMobile())){
order.setUserTel(task.getTel()+"*"+task.getMobile());
}else{
order.setUserTel(task.getTel());
}
StringBuilder OrderContent=new StringBuilder();
if (task.getTask_type_id().equals(SystemConstants.TASK_TYPE_INSTALL)){
//客户编号
OrderContent.append("客户编号CustNo:").append(custNo);
//安装的设备类型数量 : 安装设备 ONT:1 OTT(几核):2
this.fillInstallDeviceInfo(OrderContent, userList, "安装设备Install:");
//带宽 账号 密码
this.fillTaskBroadbandInfo(OrderContent, userList, true);
}else if (task.getTask_type_id().equals(SystemConstants.TASK_TYPE_MOVE)){
OrderContent.append("客户编号CustNo:").append(custNo);
this.moveFillAllUser(OrderContent, custUsers, "安装设备Install:");
this.fillTaskBroadbandInfo(OrderContent, userList, false);
}else if (task.getTask_type_id().equals(SystemConstants.TASK_TYPE_WRITEOFF_LINE)){
OrderContent.append("客户编号CustNo:").append(custNo);
this.fillTaskDeviceInfo(OrderContent, userList, "拆除线路WriteoffLine:");
this.fillTaskBroadbandInfo(OrderContent, userList, false);
}else if (task.getTask_type_id().equals(SystemConstants.TASK_TYPE_FAULT)){
OrderContent.append("客户编号CustNo:").append(custNo);
//this.fillTaskBroadbandInfo(OrderContent, userList, false);
if(StringHelper.isNotEmpty(task.getBug_phone())){
OrderContent.append("\n").append("报障电话ReportFaultTel:").append(task.getBug_phone());
}
OrderContent.append("\n").append("故障现象Fault:").append(task.getBug_detail());
}else {
OrderContent.append("other");
}
//装入客户经理
if (custManager != null){
OrderContent.append("\n").append("客户经理CustManager:").append(custManager.getOptr_name());
if(StringHelper.isNotEmpty(custManager.getTel())&&StringHelper.isNotEmpty(custManager.getMobile())){
OrderContent.append(" tel:").append(custManager.getTel()).append("*").append(custManager.getMobile());
}else if(StringHelper.isNotEmpty(custManager.getTel())){
OrderContent.append(" tel:").append(custManager.getTel());
}else if(StringHelper.isNotEmpty(custManager.getMobile())){
OrderContent.append(" tel:").append(custManager.getMobile());
}
}
order.setOrderContent(OrderContent.toString());
//TODO 预约上门时间
//order.setArriveTime(DateHelper.formatNowTime());
//创建时间
order.setCreateTime(DateHelper.formatNowTime());
//上门施工截止日期
order.setDealLine(DateHelper.format(DateHelper.addDate(new Date(), 7)));
order.setOrderStatus("0");
order.setPublisherNo("admin");
//设置客户经理信息
if (custManager != null){
JsonObject managerInfo = new JsonObject();
managerInfo.addProperty("custManagerName", custManager.getOptr_name());
if(StringHelper.isNotEmpty(custManager.getMobile())){
managerInfo.addProperty("mobile", custManager.getTel()+"*"+custManager.getMobile());
}else{
managerInfo.addProperty("mobile", custManager.getTel());
}
order.setAttachData(managerInfo.toString());
}
return order;
}
private void fillTaskBroadbandInfo(StringBuilder OrderContent,List<WTaskUser> userList,boolean needPD){
for(WTaskUser taskUser: userList){
if(SystemConstants.USER_TYPE_BAND.equals(taskUser.getUser_type())){
OrderContent.append("\n").append("宽带Broadband:").append(taskUser.getBandwidth())
.append(" 账号Loginname:").append(taskUser.getLogin_name());
if(needPD){
OrderContent.append(" 密码Password:").append(taskUser.getPassword());
}
}
}
}
private void fillTaskDeviceInfo(StringBuilder OrderContent,List<WTaskUser> userList,String taskTypeInfo){
int ont_cnt=0;
int ott_cnt=0;
for(WTaskUser taskUser: userList){
if(SystemConstants.USER_TYPE_BAND.equals(taskUser.getUser_type())){
ont_cnt++;
}
if(SystemConstants.USER_TYPE_OTT.equals(taskUser.getUser_type())){
ott_cnt++;
}
}
if(ont_cnt+ott_cnt>0){
OrderContent.append("\n").append(taskTypeInfo);
if(ont_cnt>0){
OrderContent.append(" ONT:").append(ont_cnt);
}
if(ott_cnt>0){
OrderContent.append(" OTT:").append(ott_cnt);
}
}
}
private void fillInstallDeviceInfo(StringBuilder OrderContent,List<WTaskUser> userList,String taskTypeInfo){
int ont_cnt=0;
int ott_cnt_4core=0;
int ott_cnt_2core=0;
for(WTaskUser taskUser: userList){
if(SystemConstants.USER_TYPE_BAND.equals(taskUser.getUser_type())){
ont_cnt++;
}
if(SystemConstants.USER_TYPE_OTT.equals(taskUser.getUser_type())){
if("PND_OTT_04".equals(taskUser.getDevice_model())){
ott_cnt_4core++;
}else{
ott_cnt_2core++;
}
}
}
if(ont_cnt+ott_cnt_4core+ott_cnt_2core>0){
OrderContent.append("\n").append(taskTypeInfo);
if(ont_cnt>0){
OrderContent.append(" ONT:").append(ont_cnt);
}
if(ott_cnt_4core>0){
OrderContent.append(" OTT(四核4core):").append(ott_cnt_4core);
}
if(ott_cnt_2core>0){
OrderContent.append(" OTT(两核2core):").append(ott_cnt_2core);
}
}
}
/**
* 移机单填入所有终端用户
* @param OrderContent
* @param taskTypeInfo
*/
public void moveFillAllUser(StringBuilder OrderContent,List<CUser> userList,String taskTypeInfo){
if(userList==null||userList.size()==0)
return;
int ont_cnt=0;
int ott_cnt=0;
for(CUser taskUser: userList){
if(SystemConstants.USER_TYPE_BAND.equals(taskUser.getUser_type())){
ont_cnt++;
}
if(SystemConstants.USER_TYPE_OTT.equals(taskUser.getUser_type())){
ott_cnt++;
}
}
if(ont_cnt+ott_cnt>0){
OrderContent.append("\n").append(taskTypeInfo);
if(ont_cnt>0){
OrderContent.append(" ONT:").append(ont_cnt);
}
if(ott_cnt>0){
OrderContent.append(" OTT:").append(ott_cnt);
}
}
}
private boolean createTaskService(final ReceiveWorkOrder workOrder) throws WordOrderException{
return applyTemplate(new Callback(){
@Override
public ResultHead doCallback() throws RemoteException {
return workOrderStub.receiveWorkOrder(workOrder).getReceiveWorkOrderResult();
}
});
}
/**
* 取消工单
* @param doneCode
* @param taskId
* @return
* @throws WordOrderException
*/
public boolean cancelTaskService(int doneCode,String taskId) throws WordOrderException{
ManuallyInfluencedWorkOrder influence = new ManuallyInfluencedWorkOrder();
influence.setWorkOrderNo(taskId);
influence.setNo(""+doneCode);
influence.setType(INFL_TYPE_CANCEL);
influence.setContent("cancel work order "+taskId);
try {
if(LOG.isDebugEnabled()){
LOG.debug(JsonHelper.fromObject(influence));
}
} catch (Exception e) {e.printStackTrace();}
return cancelTaskService(influence);
}
private boolean cancelTaskService(final ManuallyInfluencedWorkOrder influence) throws WordOrderException{
return applyTemplate(new Callback(){
@Override
public ResultHead doCallback() throws RemoteException {
return workOrderStub.manuallyInfluencedWorkOrder(influence).getManuallyInfluencedWorkOrderResult();
}
});
}
private boolean applyTemplate(Callback callback)throws WordOrderException{
ResultHead result = null;
try {
result = callback.doCallback();
//System.out.println("============================="+result.getHeadCode()+" "+result.getHeadMsg());
} catch (RemoteException e) {
throw new WordOrderException(e);
}
if(WordOrderResultUtils.success(result)){
return true;
}else{
throw new WordOrderException(result);
}
}
private interface Callback{
ResultHead doCallback()throws RemoteException;
}
}