package com.sercurityControl.proteam.controller; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.securityControl.common.core.utils.StringUtils; import com.securityControl.common.core.utils.aes.StringHelper; import com.securityControl.common.core.web.controller.BaseController; import com.securityControl.common.core.web.domain.AjaxResult; import com.securityControl.common.log.annotation.Log; import com.securityControl.common.log.enums.BusinessType; import com.securityControl.common.log.enums.OperationType; import com.securityControl.common.redis.service.RedisService; import com.sercurityControl.proteam.domain.DeviceMachineEntity; import com.sercurityControl.proteam.domain.NodeEntity; import com.sercurityControl.proteam.domain.NodeVo; import com.sercurityControl.proteam.domain.QxGroupVo; import com.sercurityControl.proteam.service.DeviceMachineService; import com.sercurityControl.proteam.util.JsonHelper; import com.sercurityControl.proteam.util.QxWebUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.*; /** * 设备分配控制层 * * @author bonus */ @Api(tags = "设备分配") @Slf4j @RestController @RequestMapping("/pot/deviceMachine/") public class DeviceMachineController extends BaseController { @Autowired private DeviceMachineService service; @Autowired private RedisService redisUtil; /** * 获取设备分配数据 * * @param entity 实体类 * @return 集合 */ @ApiOperation(value = "获取设备分配数据") @PostMapping("/getDeviceMachineList") @Log(title = "获取设备分配数据", menu = "获取设备分配数据", businessType = BusinessType.QUERY, details = "获取设备分配数据") public Map getDeviceMachineList(DeviceMachineEntity entity) { PageHelper.startPage(Integer.parseInt(entity.getPage()), Integer.parseInt(entity.getLimit())); Map map = new HashMap(6); try { PageInfo pageInfo = service.getDeviceMachineList(entity); map.put("code", 200); map.put("msg", "获取数据成功"); map.put("count", pageInfo.getTotal()); map.put("curr", Integer.parseInt(entity.getPage())); map.put("limit", Integer.parseInt(entity.getLimit())); map.put("data", pageInfo.getList()); } catch (Exception e) { map.put("code", 200); map.put("msg", "获取数据成功"); map.put("error", e.toString()); map.put("count", 0); map.put("curr", Integer.parseInt(entity.getPage())); map.put("limit", Integer.parseInt(entity.getLimit())); map.put("data", new ArrayList()); } return map; } /** * 获取分组节点 * * @return 集合 */ @ApiOperation(value = "获取分组节点") @PostMapping("getGroupNode") @Log(title = "获取分组节点", menu = "获取分组节点", businessType = BusinessType.EXPORT, details = "获取分组节点", grade = OperationType.EXPORT_BUSINESS) public AjaxResult getGroupNode(String type) { try { String groupNode = (String) redisUtil.get("dev:groupNode"); if (StringUtils.isNotEmpty(groupNode) && !groupNode.contains("null")) { QxGroupVo vo = JSON.parseObject(groupNode, QxGroupVo.class); List nodelist = vo.getNodelist(); if (StringHelper.isNotEmpty(type)) { List list = getNodeList(type, nodelist); return AjaxResult.success(list); } else { return AjaxResult.success(JsonHelper.jsonStrToJsonObj(groupNode).getJSONArray("nodelist")); } } else { return AjaxResult.error(); } } catch (Exception e) { e.printStackTrace(); return AjaxResult.error(); } } public List getNodeList(String type, List nodelist) { List list = new ArrayList<>(); try { for (NodeVo node : nodelist) { if (type.equals(node.getParentIndex()) || type.equals(node.getIndex())) { if (!"1".equals(node.getIndex())) { list.add(node); } } if ("all".equals(type)) { if (!"1".equals(node.getIndex())) { list.add(node); } } } } catch (Exception e) { log.error(e.toString(), e); } return list; } /** * 查询设备 * * @return 集合 */ @ApiOperation(value = "查询设备") @PostMapping("getPu") @Log(title = "查询设备", menu = "查询设备", businessType = BusinessType.EXPORT, details = "查询设备", grade = OperationType.EXPORT_BUSINESS) public AjaxResult getPu(String puId, String all) { try { String pu = QxWebUtil.getPu(puId); if (StringUtils.isNotEmpty(pu) && !pu.contains("null")) { if (StringUtils.isNotBlank(all) && "all".equals(all)) { return AjaxResult.success(); } else { return AjaxResult.success(JsonHelper.jsonStrToJsonObj(pu).getJSONArray("rows")); } } else { return AjaxResult.error(); } } catch (Exception e) { e.printStackTrace(); return AjaxResult.error(); } } /** * 分组节点添加设备 * * @return 集合 */ @ApiOperation(value = "分组节点添加设备") @PostMapping("getPuSet") @Log(title = "分组节点添加设备", menu = "分组节点添加设备", businessType = BusinessType.EXPORT, details = "分组节点添加设备", grade = OperationType.EXPORT_BUSINESS) public AjaxResult getPuSet(String puIds, String node, String oldNode) { try { List nodeList = JSON.parseArray(node, NodeVo.class); System.err.println(nodeList); String[] arrPuId = puIds.split(","); if (arrPuId.length > 200) { return AjaxResult.error("最多200个设备"); } HashSet map = new HashSet<>(); for (NodeVo vo : nodeList) { for (String str : arrPuId) { String strValue = (String) redisUtil.get(vo.getParentIndex() + ":" + str); if (!ObjectUtil.isEmpty(strValue)) { map.add(strValue); } if("false".equals(oldNode)) { redisUtil.set(vo.getParentIndex() + ":" + str, vo.getIndex(), 60 * 60 * 6); }else{ redisUtil.delete(vo.getParentIndex() + ":" + str); } } } for (String value : map) { QxWebUtil.getPuRemove(puIds, value); } if("false".equals(oldNode)){//不是清空 for (NodeVo vo : nodeList) { QxWebUtil.getPuSet(puIds, vo.getIndex()); } } } catch (Exception e) { e.printStackTrace(); log.error(e.toString(),e); return AjaxResult.error(e.toString()); } return AjaxResult.success(); } /** * 分组节点添加设备 * * @return 集合 */ @ApiOperation(value = "分组节点添加设备") @PostMapping("refreshRedisUtil") @Log(title = "分组节点添加设备", menu = "分组节点添加设备", businessType = BusinessType.EXPORT, details = "分组节点添加设备", grade = OperationType.EXPORT_BUSINESS) public AjaxResult refreshRedisUtil() { try { String groupNode = QxWebUtil.getGroupNode(); redisUtil.set("dev:groupNode", groupNode, 60 * 60 * 6); getNodeDevice(); return AjaxResult.success(); } catch (Exception e) { e.printStackTrace(); return AjaxResult.error(); } } /** * 分组节点添加设备 * * @return 集合 */ @ApiOperation(value = "节点添加") @PostMapping("nodeAdd") @Log(title = "节点添加", menu = "节点添加", businessType = BusinessType.EXPORT, details = "节点添加", grade = OperationType.EXPORT_BUSINESS) public AjaxResult nodeAdd(NodeEntity entity) { try { if (entity.getContext().length() > 255) { return AjaxResult.error("节点名称过长"); } AjaxResult determine = determine(entity); if (!ObjectUtil.isEmpty(determine)) { return determine; } else { String nodeAdd = QxWebUtil.nodeAdd(entity.getContext(), entity.getParentId()); if (!ObjectUtil.isEmpty(nodeAdd)) { JSONObject jsonObject = JSONObject.parseObject(nodeAdd); if ("0".equals(jsonObject.getString("code"))) { return AjaxResult.success("添加成功"); } else { return AjaxResult.error("添加失败"); } } else { return AjaxResult.error("添加失败"); } } } catch (Exception e) { e.printStackTrace(); return AjaxResult.error(); } } /** * 分组节点添加设备 * * @return 集合 */ @ApiOperation(value = "节点修改") @PostMapping("nodeSet") @Log(title = "节点修改", menu = "节点修改", businessType = BusinessType.EXPORT, details = "节点修改", grade = OperationType.EXPORT_BUSINESS) public AjaxResult nodeSet(NodeEntity entity) { try { if (entity.getContext().length() > 255) { return AjaxResult.error("节点名称过长"); } AjaxResult determine = determine(entity); if (!ObjectUtil.isEmpty(determine)) { return determine; } else { String nodeAdd = QxWebUtil.nodeSet(entity.getContext(), entity.getNodeId()); if (!ObjectUtil.isEmpty(nodeAdd)) { JSONObject jsonObject = JSONObject.parseObject(nodeAdd); if ("0".equals(jsonObject.getString("code"))) { return AjaxResult.success("修改成功"); } else { return AjaxResult.error("修改失败"); } } else { return AjaxResult.error("修改失败"); } } } catch (Exception e) { e.printStackTrace(); return AjaxResult.error(); } } /** * 分组节点添加设备 * * @return 集合 */ @ApiOperation(value = "节点删除") @PostMapping("nodeRemove") @Log(title = "节点删除", menu = "节点删除", businessType = BusinessType.EXPORT, details = "节点删除", grade = OperationType.EXPORT_BUSINESS) public AjaxResult nodeRemove(NodeEntity entity) { try { String nodeRemove = QxWebUtil.nodeRemove(entity.getNodeId()); if (!ObjectUtil.isEmpty(nodeRemove)) { JSONObject jsonObject = JSONObject.parseObject(nodeRemove); if ("0".equals(jsonObject.getString("code"))) { return AjaxResult.success("删除成功"); } else { return AjaxResult.error("删除失败"); } } else { return AjaxResult.error("删除失败"); } } catch (Exception e) { e.printStackTrace(); return AjaxResult.error("删除失败"); } } /** * 获取分组节点 * * @return 集合 */ @ApiOperation(value = "获取分组节点") @PostMapping("groupNode") @Log(title = "获取分组节点", menu = "获取分组节点", businessType = BusinessType.EXPORT, details = "获取分组节点", grade = OperationType.EXPORT_BUSINESS) public AjaxResult groupNode(String type) { try { String groupNode = QxWebUtil.getGroupNode(); redisUtil.set("dev:groupNode", groupNode, 60 * 60 * 6); if (StringUtils.isNotEmpty(groupNode) && !groupNode.contains("null")) { QxGroupVo vo = JSON.parseObject(groupNode, QxGroupVo.class); List nodelist = vo.getNodelist(); if (StringHelper.isNotEmpty(type)) { List list = getNodeList(type, nodelist); return AjaxResult.success(list); } else { return AjaxResult.success(JsonHelper.jsonStrToJsonObj(groupNode).getJSONArray("nodelist")); } } else { return AjaxResult.error(); } } catch (Exception e) { e.printStackTrace(); return AjaxResult.error(); } } public void getNodeDevice() { try { StringBuilder nodeIndex = new StringBuilder(); String groupNode = QxWebUtil.getGroupNode(); QxGroupVo vo = JSON.parseObject(groupNode, QxGroupVo.class); if (vo != null) { List nodeList = vo.getNodelist(); for (NodeVo entity : nodeList) { if (!"0".equals(entity.getParentIndex())) { String groupPu = QxWebUtil.getGroupPu(entity.getIndex()); JSONObject json = JSON.parseObject(groupPu); jsonArrayToMapList(json.getJSONArray("rows").toString(), entity.getParentIndex(), entity.getIndex()); } else { nodeIndex.append(entity.getIndex()).append(","); } } } redisUtil.set("dev:" + "nodeIndex", nodeIndex.toString(), 60 * 60 * 6); } catch (Exception e) { e.printStackTrace(); } } public void jsonArrayToMapList(String jsonArrayString, String parentIndex, String nodeIndex) { JSONArray jsonArr = JSON.parseArray(jsonArrayString); if (jsonArr != null && jsonArr.size() > 0) { for (int i = 0; i < jsonArr.size(); i++) { JSONObject jsonObject = JSON.parseObject(jsonArr.getString(i)); Map map = new HashMap(16); redisUtil.set(parentIndex + ":" + jsonObject.getString("puid"), nodeIndex, 60 * 60 * 6); } } } public AjaxResult determine(NodeEntity entity) { String groupNode = (String) redisUtil.get("dev:groupNode"); if (StringUtils.isNotEmpty(groupNode) && !groupNode.contains("null")) { QxGroupVo vo = JSON.parseObject(groupNode, QxGroupVo.class); List nodeList = vo.getNodelist(); for (NodeVo nodeVo : nodeList) { if (entity.getParentId().equals(nodeVo.getParentIndex())) { if (entity.getContext().equals(nodeVo.getName())) { return AjaxResult.error("节点名称已存在"); } } } } return null; } }