package edu.sjtu.infosec.ismp.manager.AM.web.actions;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 edu.sjtu.infosec.ismp.manager.AM.comm.AssetConstant;
import edu.sjtu.infosec.ismp.manager.AM.comm.MessageOut;
import edu.sjtu.infosec.ismp.manager.AM.model.AssetDeviceBO;
import edu.sjtu.infosec.ismp.manager.AM.model.AssetDeviceForComm;
import edu.sjtu.infosec.ismp.manager.AM.model.AssetPositionBO;
import edu.sjtu.infosec.ismp.manager.AM.model.AssetPositionForComm;
import edu.sjtu.infosec.ismp.manager.AM.model.AssetToPositionBO;
import edu.sjtu.infosec.ismp.manager.AM.model.AssetToPositionForComm;
import edu.sjtu.infosec.ismp.manager.AM.service.AssetDeviceService;
import edu.sjtu.infosec.ismp.manager.AM.service.AssetPositionService;
import edu.sjtu.infosec.ismp.manager.AM.service.AssetToPositionService;
import edu.sjtu.infosec.ismp.manager.AM.web.form.LocationForm;
import edu.sjtu.infosec.ismp.manager.AM.web.reports.AssetSenderWrapper;
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.SYSM.user.self.service.UserService;
import edu.sjtu.infosec.ismp.manager.comm.model.page.Page;
import edu.sjtu.infosec.ismp.manager.comm.model.page.PageResult;
import edu.sjtu.infosec.ismp.manager.comm.model.page.PageUtil;
import edu.sjtu.infosec.ismp.security.Domain;
import edu.sjtu.infosec.ismp.security.OperatorDetails;
import edu.sjtu.infosec.ismp.util.RandomCodeUtil;
public class LocationAction extends DispatchAction {
// 树形服务接口
private AssetPositionService assetPositionService;
// 根据物理位置ID 查询出资产列表的服务接口
private AssetToPositionService assetToPositionService;
// 注入资产接口
private AssetDeviceService assetDeviceService;
// 通讯接口
private AssetSenderWrapper assetSenderWrapper;
// 注入委办局 信息 service
private DomainService domainService;
// 注入用户service接口
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public void setDomainService(DomainService domainService) {
this.domainService = domainService;
}
public void setAssetSenderWrapper(AssetSenderWrapper assetSenderWrapper) {
this.assetSenderWrapper = assetSenderWrapper;
}
public void setAssetDeviceService(AssetDeviceService assetDeviceService) {
this.assetDeviceService = assetDeviceService;
}
public void setAssetToPositionService(
AssetToPositionService assetToPositionService) {
this.assetToPositionService = assetToPositionService;
}
public void setAssetPositionService(AssetPositionService assetPositionService) {
this.assetPositionService = assetPositionService;
}
private String buildPositionTree(List<AssetPositionBO> posList) {
StringBuffer tree = new StringBuffer();
if (posList == null || posList.isEmpty())
return "";
for (AssetPositionBO pos : posList) {
if(pos.getParentId() == null)
tree.append("d.add(").append(pos.getId()).append(",").append(pos.getPositionId()+"00").append(",'").append(pos.getDescription()).append("');");
else
tree.append("d.add(").append(pos.getId()).append(",").append(pos.getParentId()).append(",'").append(pos.getDescription()).append("',").append("'javascript:fwd(").append(pos.getId()).append(")')").append(";");
}
return tree.toString();
}
private String buildManageTree(List<Domain> managerList) {
StringBuffer tree = new StringBuffer();
if (managerList == null || managerList.isEmpty())
return "";
for (Domain bo : managerList) {
tree.append("d.add(").append(bo.getId()+"00").append(",").append(0).append(",'").append(bo.getDomainName()).append("');");
}
return tree.toString();
}
// 获得树形数据
public ActionForward initTree(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 获得所有父节点
// HttpSession session = request.getSession();
// UserBO userbo = (UserBO) session.getAttribute("userbo");
// List<ManagerBO> managerList = null;
// if (userbo != null) {
// managerList = getManagerList(userbo);
// }
OperatorDetails uservo = SecurityUserHolder.getCurrentUser();
List<Domain> managerList = uservo.getDomainList();
List<AssetPositionBO> posList = assetPositionService
.getListByAssetPosition(null);
request.setAttribute("posList", posList);
request.setAttribute("tree", this.buildPositionTree(posList));
request.setAttribute("rootTree", this.buildManageTree(managerList));
return mapping.findForward("locationleft");
}
// private List<Domain> getManagerList(UserBO uservo) {
// if (uservo != null) {
// String managsStr = uservo.getUserToManager();
// boolean status = userService.checkAdminService(uservo.getId());
// // 如果是管理员就查询所有的委办局信息
// if (status) {
// return managerService.getManagerAllService();
// } else {
// if (managsStr != null && managsStr.length() > 0) {
// String mStr[] = managsStr.split(",");
// List<Integer> ids = new ArrayList();
// if (mStr != null && mStr.length > 0) {
// for (String string : mStr) {
// ids.add(Integer.parseInt(string));
// }
// }
// return managerService.getManagerByUserIDsService(ids);
// }
// }
// }
// return null;
// }
// 删除已个树形节点
public ActionForward delTree(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setAttribute("operation", "删除物理位置信息");
String locationCheckBox = request.getParameter("locationCheckBox");
String[]ids = locationCheckBox.split(",");
if (ids != null && ids.length > 0) {
for (String id : ids) {
if(id !=null && !"".equals(id.trim())){
AssetPositionBO position = new AssetPositionBO();
position.setId(Integer.parseInt(id));
AssetPositionBO p = new AssetPositionBO();
p.setParentId(Integer.parseInt(id));
// 先删除本身
assetPositionService.deleteAssetPosition(position);
// 传送删除物理位置
sendPosition(p, AssetConstant.ASSET_DELETE);
// 在删除自己下面的子节点
List<AssetPositionBO> list = assetPositionService
.getListByAssetPosition(p);
for (AssetPositionBO assetPositionBO : list) {
assetPositionService.deleteAssetPosition(assetPositionBO);
}}
}
}
return mapping.findForward("locationFrame");
}
// 根据父ID查询出所有的子节点
public ActionForward getChialNode(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// HttpSession session = request.getSession();
// UserBO userbo = (UserBO) session.getAttribute("userbo");
// List<ManagerBO> managerList = null;
// if (userbo != null) {
// managerList = getManagerList(userbo);
// }
OperatorDetails uservo = SecurityUserHolder.getCurrentUser();
List<Domain> managerList = uservo.getDomainList();
System.out.println("===="+managerList.size());
request.setAttribute("managerbo", managerList);
if (request.getParameter("parentId") != null
&& (!request.getParameter("parentId").equals(""))) {
AssetPositionBO position = new AssetPositionBO();
position.setParentId(Integer.parseInt(request
.getParameter("parentId")));
List list = assetPositionService.getListByAssetPosition(position);
request.setAttribute("parentId",
request.getParameter("parentId"));
request.setAttribute("nodeList", list);
}
if (request.getParameter("posId") != null
&& (!request.getParameter("posId").equals(""))) {
AssetPositionBO position = new AssetPositionBO();
position.setParentId(Integer.parseInt(request
.getParameter("posId")));
List list = assetPositionService.getChildNodeListByParent(position);
request.setAttribute("posId",
request.getParameter("posId"));
request.setAttribute("nodeList", list);
}
if (request.getParameter("del") != null) {
return mapping.findForward("delromm");
} else if (request.getParameter("delRomm") != null) {
return mapping.findForward("delCHialNode");
} else if (request.getParameter("delFang") != null) {
return mapping.findForward("delFang");
} else {
return mapping.findForward("addromm");
}
}
// 根据父ID查询出所有的子节点
public ActionForward getChialNodeHouse(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
// HttpSession session = request.getSession();
// UserBO userbo = (UserBO) session.getAttribute("userbo");
// List<ManagerBO> managerList = null;
// if (userbo != null) {
// managerList = getManagerList(userbo);
// }
OperatorDetails uservo = SecurityUserHolder.getCurrentUser();
List<Domain> managerList = uservo.getDomainList();
request.setAttribute("managerbo", managerList);
if (request.getParameter("del") != null) {
return mapping.findForward("delromm");
} else if (request.getParameter("delRomm") != null) {
return mapping.findForward("delCHialNode");
} else if (request.getParameter("delFang") != null) {
return mapping.findForward("delFang");
} else {
return mapping.findForward("addromm");
}
}
// 修改节点名称
public ActionForward updateTree(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setAttribute("operation", "修改物理位置信息");
LocationForm locationForm = (LocationForm) form;
// 执行更新
assetPositionService.updateAssetPosition(locationForm.getPosition());
// 传送更新物理位置
sendPosition(locationForm.getPosition(), AssetConstant.ASSET_UPDATE);
// 更新后动态显示更新的
return mapping.findForward("locationleft");
}
// 添加物理位置 也就是树形节点
public ActionForward addTree(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 获得所有父节点List
LocationForm locationForm = (LocationForm) form;
// 执行节点的添加
if (null != locationForm.getPosition()) {
AssetPositionBO positionBO = locationForm.getPosition();
positionBO.setSingleCode(RandomCodeUtil.getSingleRandomCode());
positionBO.setPositionId(null);
assetPositionService.saveAssetPosition(positionBO);
// 添加成功后马上执行查询 动态显示添加的内容
// 传送添加物理位置
sendPosition(positionBO, AssetConstant.ASSET_ADD);
} else {
MessageOut.println(response, "请选择父节点", -2);
}
return mapping.findForward("locationFrame");
}
/**
* 添加楼号信息
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward addPos(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LocationForm locationForm = (LocationForm) form;
AssetPositionBO positionBO = locationForm.getPosition();
positionBO.setParentId(null);
if (positionBO != null) {
positionBO.setSingleCode(RandomCodeUtil.getSingleRandomCode());
assetPositionService.saveAssetPosition(positionBO);
sendPosition(positionBO, AssetConstant.ASSET_ADD);
} else {
MessageOut.println(response, "请选择父节点", -2);
}
return mapping.findForward("locationFrame");
}
// 根据物理位置查询相应的资产列表
public ActionForward findlocationDevicePagin(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
Page page = new Page();
AssetDeviceBO assetdevice = new AssetDeviceBO();
Integer typeid = 1;
if (request.getParameter("pid") != null) {
typeid = Integer.parseInt(request.getParameter("pid"));
}
if (request.getAttribute("pid") != null) {
System.out.println("jinglailTid::" + request.getAttribute("pid"));
typeid = Integer.parseInt(request.getAttribute("pid").toString());
}
request.setAttribute("publicPid", typeid);
// 将ID存起来 添加的时候要用
String curpage = request.getParameter("curpage") == null ? "1"
: request.getParameter("curpage");
// 当前页数
page.setEveryPage(10);
page.setCurrentPage(Integer.parseInt(curpage));
page.setBeginIndex((page.getCurrentPage() - 1) * page.getEveryPage());
page = PageUtil.createPage(page.getEveryPage(), page.getCurrentPage(), page.getTotalCount());
PageResult result = assetToPositionService.getPageListByAssetDevice(typeid,
page);
request.setAttribute("page", result.getPage());
request.setAttribute("devicelist", result.getPageList());
request.setAttribute("softid", typeid);
return mapping.findForward("locationToasset");
}
// 删除ID资产列表
public ActionForward delDevice(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setAttribute("operation", "删除在与物理位置有关联中的资产信息");
if (request.getParameter("did") != null) {
AssetDeviceBO assetDevicebo = new AssetDeviceBO();
assetDevicebo.setId(Integer.parseInt(request.getParameter("did")));
assetDeviceService.delete(assetDevicebo);
// 发送删除设备信息
sendAssetDevice(assetDevicebo, AssetConstant.ASSET_DELETE);
}
request.setAttribute("pid", request.getParameter("pid"));
return this.findlocationDevicePagin(mapping, form, request, response);
}
// 查询单个资产信息用于界面显示详细,或者更新
public ActionForward getOneDevice(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 获得id 根据ID 进行查询
SimpleDateFormat simp = new SimpleDateFormat("yyyy-mm-dd hh:MM:ss");
String deviceId = request.getParameter("deviceId");
if (deviceId != null && !"".equals(deviceId.trim())) {
AssetDeviceBO assetDevicebo = assetDeviceService.findById(Integer
.parseInt(deviceId));
// 将时间转换成字符串
request.setAttribute("assetBo", assetDevicebo);
OperatorDetails uservo = SecurityUserHolder.getCurrentUser();
List<Domain> managerList = uservo.getDomainList();
// HttpSession session = request.getSession();
// if (session != null) {
// UserBO userbo = (UserBO) session.getAttribute("userbo");
// List<ManagerBO> managerList = getManagerList(userbo);
// request.setAttribute("managerbo", managerList);
// }
request.setAttribute("managerbo", managerList);
// request.setAttribute("tmList", DeviceTradeMarkUtil.getMarkList());
// if (DeviceTradeMarkUtil.getMarkList() != null
// && DeviceTradeMarkUtil.getMarkList().size() > 0) {
// request.setAttribute("models", DeviceTradeMarkUtil.getModelList());
// }
if (assetDevicebo.getStockTime() != null) {
request.setAttribute("stocktimepage", simp.format(assetDevicebo
.getStockTime()));
}
if (assetDevicebo.getRegistrationTime() != null) {
request.setAttribute("registrationtimepage", simp
.format(assetDevicebo.getRegistrationTime()));
}
}
if (request.getParameter("part") != null) {
request.setAttribute("aid", deviceId);
return mapping.findForward("assetpart");
} else {
request.setAttribute("pid", request.getParameter("pid"));
return mapping.findForward("updateDevice");
}
}
// 更新资产信息
public ActionForward updateDevice(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setAttribute("operation", "更新在与物理位置有关联中的资产信息");
// 获得id 根据ID 进行查询
LocationForm assetForm = (LocationForm) form;
AssetDeviceBO assetbo = assetForm.getAssetBo();
assetDeviceService.update(assetbo);
// 发送更新设备信息
sendAssetDevice(assetbo, AssetConstant.ASSET_UPDATE);
request.setAttribute("pid", request.getParameter("pid"));
return this.findlocationDevicePagin(mapping, assetForm, request,
response);
}
// 查询所有没有关联的assetDevice
public ActionForward getNotJoinAssetDevice(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
// 获得id 根据ID 进行查询
if (request.getParameter("pid") != null) {
AssetPositionBO assetpositionbo = assetPositionService
.getAssetPosition(Integer.parseInt(request
.getParameter("pid")));
request.setAttribute("assetPositionBo", assetpositionbo);
// List list = assettoposition.getListNotJoinAssetDevice(Integer
// .parseInt(request.getParameter("pid")));
List list = assetToPositionService.getListNotJoinAssetDevice();
request.setAttribute("dlist", list);
}
if (request.getParameter("seachpos") != null) {
request.setAttribute("seachpos", 1);
}
return mapping.findForward("deviceJion");
}
// 查询跟当前物理位置有关联的设备信息
public ActionForward getByJoinAssetDevice(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
// 获得id 根据ID 进行查询
Integer pid = 0;
if (request.getParameter("pid") != null) {
pid = Integer.parseInt(request.getParameter("pid"));
AssetToPositionBO atpobj = new AssetToPositionBO();
atpobj.setPositionId(pid);
// 根据物理位置ID 查询出相关表中的备注信息...
List<AssetToPositionBO> assetlist = assetToPositionService
.getListByAssetToPosition(atpobj);
request.setAttribute("assetList", assetlist);
AssetPositionBO assetpositionbo = assetPositionService
.getAssetPosition(pid);
request.setAttribute("assetPositionBo", assetpositionbo);
List list = assetToPositionService.getListByAssetDevice(pid);
if (request.getParameter("seachpos") != null) {
request.setAttribute("seachpos", 1);
}
request.setAttribute("dlist", list);
}
return mapping.findForward("canceldeviceJion");
}
// 物理位置跟资产的关联
public ActionForward assetJionposition(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setAttribute("operation", "添加物理位置跟资产的关联");
// 获得id 根据ID 进行查询
LocationForm locationForm = (LocationForm) form;
String str[] = request.getParameterValues("assetid");
Integer pid = 0;
if (str != null && str.length > 0) {
pid = Integer.parseInt(request.getParameter("pid"));
List<AssetToPositionBO> list = new ArrayList<AssetToPositionBO>();
for (int i = 0; i < str.length; i++) {
AssetToPositionBO assetToposition = new AssetToPositionBO();
assetToposition.setAssetId(Integer.parseInt(str[i]));
assetToposition.setDescription(request.getParameter("descr"));
assetToposition.setPositionId(pid);
assetToPositionService.saveAssetToPosition(assetToposition);
list.add(assetToposition);
}
// 发送新增资产和地理位置关联
sendAssetToPosition(list, AssetConstant.ASSET_ADD);
request.setAttribute("pid", pid);
if (request.getParameter("seachpos") != null
&& request.getParameter("seachpos").equals("1")) {
MessageOut.println(response, "关联成功", -2);
return null;
}
return this.findlocationDevicePagin(mapping, locationForm, request,
response);
} else {
MessageOut.println(response, "没有任务关联", -2);
}
if (request.getParameter("seachpos") != null
&& request.getParameter("seachpos").equals("1")) {
return mapping.findForward("seachpos");
}
return null;
}
// 取消物理位置跟资产的关联
public ActionForward cancelAssetJionposition(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setAttribute("operation", "取消物理位置跟资产的关联");
// 获得id 根据ID 进行查询
LocationForm locationForm = (LocationForm) form;
String str[] = request.getParameterValues("assetid");
Integer assetid = 0;
Integer pid = null;
if (request.getParameter("pid") != null) {
pid = Integer.parseInt(request.getParameter("pid"));
}
if (str != null && str.length > 0) {
// 在重新关联
for (int i = 0; i < str.length; i++) {
AssetToPositionBO assetToposition = new AssetToPositionBO();
assetToposition.setAssetId(Integer.parseInt(str[i]));
assetToposition.setPositionId(pid);
List<AssetToPositionBO> list = assetToPositionService
.getListByAssetToPosition(assetToposition);
for (AssetToPositionBO assetToPositionBO : list) {
assetToPositionService.deleteAssetToPosition(assetToPositionBO);
}
// 发送删除资产地理位置关联
sendAssetToPosition(list, AssetConstant.ASSET_DELETE);
request.setAttribute("pid", pid);
}
if (request.getParameter("seachpos") != null
&& request.getParameter("seachpos").equals("1")) {
MessageOut.println(response, "取消成功", -2);
return null;
}
return this.findlocationDevicePagin(mapping, locationForm, request,
response);
} else {
MessageOut.println(response, "没有任何关联", -2);
}
MessageOut.println(response, "取消成功", -2);
return null;
}
// 根据设备ID 查询出该设备所在的地理位置信息,
public ActionForward getLocationinfo(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
if (request.getParameter("did") != null) {
List<AssetPositionBO> list = assetToPositionService
.getListByPosition(Integer.parseInt(request
.getParameter("did")));
if (list != null && !list.isEmpty()) {
AssetPositionBO assetPositionBO = list.get(0);
// 房号
request.setAttribute("room", assetPositionBO
.getDescription());
// 根据房号查询出楼号
AssetPositionBO positionBO = new AssetPositionBO();
positionBO.setId(assetPositionBO.getParentId());
List<AssetPositionBO> alist = assetPositionService.getListByAssetPosition(positionBO);
if (alist != null && alist.get(0) != null) {
AssetPositionBO pos = alist.get(0);
request.setAttribute("foom", pos.getDescription());
if(pos.getPositionId() != null) {
// ManagerBO managerBO = managerService.getManagerByIdService(pos.getPositionId());
Domain domain = domainService.findById(pos.getPositionId());
request.setAttribute("weibanju", domain.getDomainName());
}
}
}
}
return mapping.findForward("showAssetToLocation");
}
// 传送物理位置信息
private void sendPosition(AssetPositionBO bean, String method) {
if (assetSenderWrapper == null) {
log.info("发送器对象为Null,终止服务!");
return;
}
AssetPositionForComm comm = new AssetPositionForComm();
comm.setMethod(method);
List<AssetPositionBO> list = new ArrayList<AssetPositionBO>();
list.add(bean);
comm.setPositions(list);
try {
assetSenderWrapper.executeSend(comm);
} catch (Exception e) {
e.printStackTrace();
}
}
// 传送资产和地位关系信息
private void sendAssetToPosition(List<AssetToPositionBO> beans,
String method) {
if (assetSenderWrapper == null) {
log.info("发送器对象为Null,终止服务!");
return;
}
AssetToPositionForComm comm = new AssetToPositionForComm();
comm.setMethod(method);
comm.setAssetToPositions(beans);
try {
assetSenderWrapper.executeSend(comm);
} catch (Exception e) {
e.printStackTrace();
}
}
// 传送设备信息
private void sendAssetDevice(AssetDeviceBO bean, String method) {
if (assetSenderWrapper == null) {
log.info("发送器对象为Null,终止服务!");
return;
}
AssetDeviceForComm comm = new AssetDeviceForComm();
comm.setMethod(method);
List<AssetDeviceBO> list = new ArrayList<AssetDeviceBO>();
list.add(bean);
comm.setAssetDeviceList(list);
try {
assetSenderWrapper.executeSend(comm);
} catch (Exception e) {
e.printStackTrace();
}
}
}