package edu.sjtu.infosec.ismp.manager.OSS.wom.web.actions;
import java.io.PrintWriter;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.infosec.ismp.manager.rmi.comm.model.SystemModelInfo;
import org.infosec.ismp.manager.rmi.lm.pfLog.model.SystemLog;
import org.infosec.ismp.manager.rmi.sensor.operation.service.WinsensorOperationWorkOrdersService;
import org.infosec.ismp.manager.rmi.sysm.config.model.SysConfigSms;
import org.infosec.ismp.manager.rmi.sysm.config.service.SysConfigSmsService;
import edu.sjtu.infosec.ismp.manager.LM.pfLog.service.SystemLogService;
import edu.sjtu.infosec.ismp.manager.OSS.pm.model.Roster;
import edu.sjtu.infosec.ismp.manager.OSS.wom.model.ClientQuestion;
import edu.sjtu.infosec.ismp.manager.OSS.wom.model.WorkOrder;
import edu.sjtu.infosec.ismp.manager.OSS.wom.service.ClientQuestionService;
import edu.sjtu.infosec.ismp.manager.OSS.wom.service.WorkOrderService;
import edu.sjtu.infosec.ismp.manager.OSS.wom.web.form.WorkOrderForm;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.comm.SecurityUserHolder;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.service.DomainService;
import edu.sjtu.infosec.ismp.manager.comm.comm.send.SendMsg;
import edu.sjtu.infosec.ismp.security.Domain;
import edu.sjtu.infosec.ismp.security.OperatorDetails;
import edu.sjtu.infosec.ismp.security.Role;
/**
* web层 派工单Action.
*/
public class WorkOrderAction extends DispatchAction{
private static Logger logger = Logger.getLogger(WorkOrderAction.class);
//派工单访问接口
private WorkOrderService workOrderService;
//注入客户端问题service.
private ClientQuestionService clientQuestionService;
private DomainService domainService;
private WinsensorOperationWorkOrdersService winsensorOperationWorkOrdersService;
private SystemLogService logService;
private SysConfigSmsService sysConfigSmsService;
public void setSysConfigSmsService(SysConfigSmsService sysConfigSmsService) {
this.sysConfigSmsService = sysConfigSmsService;
}
public void setLogService(SystemLogService logService) {
this.logService = logService;
}
public void setWinsensorOperationWorkOrdersService(
WinsensorOperationWorkOrdersService winsensorOperationWorkOrdersService) {
this.winsensorOperationWorkOrdersService = winsensorOperationWorkOrdersService;
}
public WorkOrderService getWorkOrderService() {
return workOrderService;
}
public void setWorkOrderService(WorkOrderService workOrderService) {
this.workOrderService = workOrderService;
}
public ClientQuestionService getClientQuestionService() {
return clientQuestionService;
}
public void setClientQuestionService(ClientQuestionService clientQuestionService) {
this.clientQuestionService = clientQuestionService;
}
public DomainService getDomainService() {
return domainService;
}
public void setDomainService(DomainService domainService) {
this.domainService = domainService;
}
/**
* 工单分页
*/
public ActionForward showWorkOrder(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
int currPage = 1;
Double totalPage = 0d;
int totalNum = 0;
int startResult = 0;
int maxResult = 5;
Domain domain = null;
try{
String isAll = (request.getParameter("isAll")==null)?"0":request.getParameter("isAll");
System.out.println("---------------isAll:----------"+isAll);
OperatorDetails user = SecurityUserHolder.getCurrentUser();
List<Domain> userDomainList = new ArrayList<Domain>();
if(user != null){
userDomainList = user.getDomainList();
}else{
userDomainList = null;
}
//分页定义的相关的基本信息
String cp = (request.getParameter("currPage")==null)?"1":request.getParameter("currPage");
if(cp!=null && !cp.equals("")){
currPage = Integer.parseInt(cp);
}
startResult = (currPage-1)*maxResult;
if(startResult < 0){
startResult = 0;
}
//数据相关的基本信息
WorkOrderForm show=(WorkOrderForm)form;
request.setAttribute("domain", show.getDomain());
request.setAttribute("state",show.getState());
if(show.getDomain()!=null){
domain = domainService.findById(show.getDomain());
}
List<WorkOrder> workOrderList = new ArrayList<WorkOrder>();
if(isAll.equals("1")){
request.setAttribute("isAll", isAll);
workOrderList = workOrderService.findAll(startResult, maxResult,domain,show.getState());
}else{
workOrderList = workOrderService.findAllByDomain(userDomainList, startResult, maxResult,domain,show.getState());
}
//分页定义的相关的基本信息
if(workOrderList!=null && workOrderList.size()>=0){
if(isAll.equals("1")){
totalNum=workOrderService.getCount(domain,show.getState());
}else{
totalNum = workOrderService.getCountByDomain(userDomainList,domain,show.getState());
}
}
totalPage = Math.ceil((double)totalNum/maxResult);
if(totalPage>0 && currPage<=0){
currPage = 1;
}
request.setAttribute("udl", userDomainList);
request.setAttribute("workOrderList", workOrderList);
}catch(Exception e){
logger.debug("工单管理--访问出错啦!");
e.printStackTrace();
}
request.setAttribute("currPage", currPage);
request.setAttribute("totalPage", totalPage.intValue());
request.setAttribute("ossMenu","wom");
request.setAttribute("womMenu", "work");
return mapping.findForward("showWorkOrder");
}
/**
* 关闭工单
*/
public ActionForward OnClose(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
try {
request.setAttribute("isAll", request.getParameter("isAll"));
request.setAttribute("currPage", request.getParameter("currPage"));
String id = request.getParameter("id");
WorkOrder workOrder =null;
if(id!=null&&id.length()>0){
workOrder=workOrderService.findById(Integer.parseInt(id));
workOrder.setState(4);
workOrderService.saveOrUpdate(workOrder);
ClientQuestion question = workOrder.getQuestion();
question.setState(1);
clientQuestionService.saveOrUpdate(question);
//向后台发送数据
if(question.getSn()!=null&&question.getSn().length()>0){
winsensorOperationWorkOrdersService.closeWorkOrders(question.getSn(), workOrder.getId().toString());
}
}
//添加日志
OperatorDetails user = SecurityUserHolder.getCurrentUser();
SystemLog log = new SystemLog();
log.setUsername(user.getUsername());
List<Role> list=user.getRoleList();
String roles="";
for(Role role:list){
roles+=role.getRole()+",";
}
log.setRoleName(roles.substring(0,roles.length()-1));
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_OSS_wom);
log.setOperationDesc("运维工单,关闭工单,工单ID为:"+workOrder.getId()+",工单所属问题名称为:"+workOrder.getQuestion().getName());
log.setControl("成功");
logService.saveSystemLog(log);
} catch (Exception e) {
e.printStackTrace();
}
return showWorkOrder(mapping,form,request,response);
}
/**
* 结单
*/
public ActionForward OverWorkOrder(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
try {
request.setAttribute("isAll", request.getParameter("isAll"));
request.setAttribute("currPage", request.getParameter("currPage"));
String id = request.getParameter("id");
WorkOrder workOrder =null;
ClientQuestion question=null;
if(id!=null&&id.length()>0){
workOrder=workOrderService.findById(Integer.parseInt(id));
workOrder.setState(3);
workOrderService.saveOrUpdate(workOrder);
question = workOrder.getQuestion();
question.setState(3);
clientQuestionService.saveOrUpdate(question);
//向后台发送数据
if(question.getSn()!=null&&question.getSn().length()>0){
winsensorOperationWorkOrdersService.completeWorkOrders(question.getSn(), workOrder.getId().toString());
}
}
//添加日志
OperatorDetails user = SecurityUserHolder.getCurrentUser();
SystemLog log = new SystemLog();
log.setUsername(user.getUsername());
List<Role> list=user.getRoleList();
String roles="";
for(Role role:list){
roles+=role.getRole()+",";
}
log.setRoleName(roles.substring(0,roles.length()-1));
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_OSS_wom);
log.setOperationDesc("运维工单,结单,工单ID为:"+workOrder.getId()+",问题ID为:"+question.getId()+",问题名称为:"+question.getName());
log.setControl("成功");
logService.saveSystemLog(log);
} catch (Exception e) {
e.printStackTrace();
}
return showWorkOrder(mapping,form,request,response);
}
/**
* 新增工单前
*/
public ActionForward preAddWorkOrder(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
try {
request.setAttribute("isAll", request.getParameter("isAll"));
//工单号
String str=workOrderService.findSN();
int i=Integer.parseInt(str);
String str2=i+1+"";
String sn = str.substring(0,str.length()-str2.length())+str2;
//所属域
OperatorDetails user = SecurityUserHolder.getCurrentUser();
List<Domain> userDomainList = new ArrayList<Domain>();
if(user != null){
userDomainList = user.getDomainList();
}else{
userDomainList = null;
}
//处理人
List<Roster> rosterList= workOrderService.findOperator();
request.setAttribute("sn", sn);
request.setAttribute("udl", userDomainList);
request.setAttribute("rosterList", rosterList);
String id =request.getParameter("id");
if(id!=null&&!"".equals(id)){
ClientQuestion question=clientQuestionService.findById(Integer.parseInt(id));
request.setAttribute("question", question);
}
} catch (Exception e) {
e.printStackTrace();
}
return mapping.findForward("preAddWorkOrder");
}
/**
* 新增工单
*/
public ActionForward addWorkOrder(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setAttribute("isAll", request.getParameter("isAll"));
WorkOrderForm orderForm = (WorkOrderForm)form;
Roster operator=workOrderService.findOperatorById(orderForm.getOperator());
String mobile = operator.getMobile();
String email =operator.getEMail();
String message="尊敬的'"+operator.getName()+"'您好!你有一个工单需要处理问题标题为'"+orderForm.getName()+"',详情请登录安管平台进行处理或拨打电话进行咨询。";
List<SysConfigSms> sysList=sysConfigSmsService.findAll();
SysConfigSms sysconfigSms=null;
if(sysList!=null&&sysList.size()>0){
sysconfigSms=sysList.get(0);
}
String socketIp =null;
Integer socketProt=0;
if(sysconfigSms!=null){
socketIp=sysconfigSms.getSendIp();
socketProt=Integer.parseInt(sysconfigSms.getSendPort());
}else{
request.getSession().setAttribute("message", "邮件服务器的IP和端口未设置请进行设置!");
return preAddWorkOrder(mapping,form,request,response);
}
int[] notices=orderForm.getNoticeWays();
//发送短信,邮件
int noticeWay=1;
try {
if(notices!=null&¬ices.length==1){
noticeWay=notices[0];
//发短信
if(noticeWay==1){
String msg=SendMsg.sendMobileMes(mobile, message, socketIp, socketProt);
if(msg!="1"){
request.getSession().setAttribute("message", "短息发送失败,请重新提交页面");
return preAddWorkOrder(mapping,form,request,response);
}
}else if(noticeWay==2){
//发送邮件
String mail=SendMsg.sendMail(email, message, socketIp, socketProt);
String[] str= mail.split(":");
mail=str[1];
if("false".equals(mail.trim())){
request.getSession().setAttribute("message", "邮件发送失败,请重新提交页面");
return preAddWorkOrder(mapping,form,request,response);
}
}
}else if(notices!=null&¬ices.length==2){
noticeWay = 3;
//发送短信和邮件
String msg=SendMsg.sendMobileMes(mobile, message, socketIp, socketProt);
String mail=SendMsg.sendMail(email, message, socketIp, socketProt);
String[] str= mail.split(":");
mail=str[1];
if(msg!="1"||"false".equals(mail.trim())){
request.getSession().setAttribute("message", "短息或邮件发送失败,请重新提交页面");
return preAddWorkOrder(mapping,form,request,response);
}
}
} catch (Exception e) {
e.printStackTrace();
}
boolean flag=true;
try {
//保存问题
ClientQuestion question = new ClientQuestion();
Domain domain = domainService.findById(orderForm.getDomain());
question.setDomain(domain);
/*if(orderForm.getIsNew()>=0){
question.setIsNew(orderForm.getIsNew());
}else{
question.setIsNew(1);
}*/
question.setName(orderForm.getName());
question.setDesc(orderForm.getDesc());
question.setRemark(orderForm.getRemark());
question.setServerUrl(orderForm.getServerUrl());
question.setLinkman(orderForm.getLinkman());
question.setContactInfo(orderForm.getContactInfo());
question.setState(2);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(new Date());
Timestamp time = Timestamp.valueOf(dateString);
question.setCreateTime(time);
if(orderForm.getId()!=null){
flag=false;
question.setId(orderForm.getId());
question.setSource(orderForm.getSource());
question.setSn(orderForm.getQ_sn());
question.setSensorId(orderForm.getSensorId());
}
if(question.getSn()!=null&&question.getSn().length()>0&&question.getSensorId()!=null&&question.getSensorId().length()>0){
question.setIsNew(1);
}else{
question.setIsNew(0);
}
clientQuestionService.saveOrUpdate(question);
//保存工单
WorkOrder order = new WorkOrder();
order.setDomain(domain);
order.setQuestion(question);
order.setSn(orderForm.getSn());
order.setOperator(operator);
order.setLevel(orderForm.getLevel());
order.setState(2);
order.setNoticeWay(noticeWay);
order.setCreateTime(time);
String endTime = orderForm.getEndTime() + " 23:59:59" ;
Timestamp tempEndtime = Timestamp.valueOf(endTime);
order.setEndTime(tempEndtime);
workOrderService.saveOrUpdate(order);
//向后台发送数据
if(question.getSn()!=null&&question.getSn().length()>0){
winsensorOperationWorkOrdersService.generateWorkOrders(question.getSn(), order.getId().toString());
}
//添加日志
OperatorDetails user = SecurityUserHolder.getCurrentUser();
SystemLog log = new SystemLog();
log.setUsername(user.getUsername());
List<Role> list=user.getRoleList();
String roles="";
for(Role role:list){
roles+=role.getRole()+",";
}
log.setRoleName(roles.substring(0,roles.length()-1));
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_OSS_wom);
if(flag){
log.setOperationDesc("运维工单,直接生成工单,工单ID为:"+order.getId()+",问题ID为:"+question.getId()+",问题名称为:"+question.getName());
}else{
log.setOperationDesc("运维工单,由问题生成工单,工单ID为:"+order.getId()+",问题ID为:"+question.getId()+",问题名称为:"+question.getName());
}
log.setControl("成功");
logService.saveSystemLog(log);
} catch (Exception e) {
e.printStackTrace();
}
PrintWriter out = response.getWriter();
out = response.getWriter();
response.setContentType("text/html; charset=UTF-8");
out.println("<script language=\"javascript\">");
out.println("window.opener.location.href=window.opener.location.href;");
out.println("window.opener.location.reload();");
out.println("window.close();");
out.println("</script>");
out.close();
return null;
}
/**
* 查看工单
*/
public ActionForward lookWorkOrder(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
String id = request.getParameter("id");
WorkOrder workOrder = null;
if(id!=null&&!"".equals(id)){
workOrder=workOrderService.findById(Integer.parseInt(id));
}
request.setAttribute("workOrder", workOrder);
return mapping.findForward("lookOrder");
}
}