zoukankan      html  css  js  c++  java
  • 一对多查询、创建、编辑。

    前端传参格式

    "interfaces": [
    {
    "nodeId": 2351,
    "ipAddress": "192.168.1.222",
    "macAddress": "值班人员"
    }]

    一对多后端查询编写从controller到service,实体类,SQL。

     1  @RequestMapping(value = "/mini/server/zone", method = RequestMethod.GET, produces = "text/html;charset=UTF-8")
     2     @ApiOperation(value = "查询分区", httpMethod = "GET", response = String.class)
     3     public String listMiniServerZone(@ApiParam(value = "服务器ID", required = false) @RequestParam(required = false, name = "parentId") Integer parentId,
     4                                      @ApiParam(value = "资源池ID") @RequestParam(required = false) Integer poolId) {
     5         HashMap<String, Object> paramMap = new HashMap<>();
     6         Optional.ofNullable(parentId).map(t -> paramMap.put("parentId", t));
     7         Optional.ofNullable(poolId).map(t -> paramMap.put("poolId", t));
     8 
     9         return resourceService.listMiniServerZone(paramMap);
    10     }

    service

     1  /**
     2      * 查询分区
     3      * @param paramMap
     4      * @return
     5      */
     6     public String listMiniServerZone(HashMap<String, Object> paramMap) {
     7         List<Map<String, Object>> resultList = resourceMapper.selectMiniServerZone(paramMap);
           //一对多返回HashMap格式给前端
    8 for (Map<String, Object> itemMap : resultList) { 9 List<Map<String, Object>> wwnList = resourceMapper.selectMiniServerZoneWwn(itemMap); 10 itemMap.put("wwns", wwnList); 11 12 List<Map<String, Object>> interfaceList = resourceMapper.selectMiniServerZoneInterface(itemMap); 13 itemMap.put("interfaces", interfaceList); 14 } 15 String result = JsonHelper.toJson(resultList); 16 return result; 17 }

    创建

     @RequestMapping(value = "/mini/server/zone", method = RequestMethod.POST)
        @ApiOperation(value = "添加分区", httpMethod = "POST", response = String.class)
        public Result createMiniServerZone(@ApiParam(value = "添加分区", required = true) @RequestBody MiniServerZoneRequest miniServerZoneRequest) {
            HashMap<String, Object> paramMap = miniServerZoneRequest.parseToMap();
            return  resourceService.insertMiniServerZone(getCurrentLoginId(), paramMap);
        }
    /**
         * 添加分区
         * @param currentLoginId
         * @return
         */
        public Result insertMiniServerZone(String currentLoginId, HashMap<String, Object> paramMap) {
            Result result = new Result();
            try {
    // id自动随机生成 UUID uuid
    = UUID.randomUUID(); int nodeId = CommonTools.genterateRnId(uuid.toString(),""); paramMap.put("nodeId", nodeId); resourceMapper.insertMiniServerZone(paramMap); //一对多后端获取 先获取到wwns List<HashMap<String, Object>> wwnValues = (List<HashMap<String, Object>>) paramMap.get("wwns"); for (HashMap<String, Object> item : wwnValues) { item.put("nodeId", nodeId); resourceMapper.insertMiniServerZoneWwn(item); } List<HashMap<String, Object>> fieldValues = (List<HashMap<String, Object>>) paramMap.get("interfaces"); for (HashMap<String, Object> paramter : fieldValues) { paramter.put("nodeId", nodeId); if (paramter.containsKey("ipAddress")) { paramter.put("ipAddressLong", CommonTools.parseIpToLong((String) paramter.get("ipAddress"))); } resourceMapper.insertMiniServerZoneInterface(paramter); } result.setResultCode(EResultCode.SUCCESS); result.setResultMsg("分区添加成功"); } catch (Exception e) { logger.error("update updatePowerZone error!", e); result.setResultCode(EResultCode.DATABASE_FAIL); result.setResultMsg("分区添加失败"); } return result; }

    编辑

     @RequestMapping(value = "/mini/server/zone/{nodeId}", method = RequestMethod.PUT)
        @ResponseBody
        @ApiOperation(value = "编辑分区", httpMethod = "PUT", response = String.class)
        public Result updateMiniServerZone(@ApiParam(value = "nodeId", required = true) @PathVariable Integer nodeId,
                                              @ApiParam(value = "修改分区", required = true) @RequestBody MiniServerZoneRequest miniServerZoneRequest) {
            HashMap<String, Object> paramMap = miniServerZoneRequest.parseToMap();
            paramMap.put("nodeId", nodeId);
            return resourceService.updateMiniServerZone(getCurrentLoginId(), paramMap);
        /**
         * 修改分区
         * @param currentLoginId
         * @return
         */
        public Result updateMiniServerZone(String currentLoginId, HashMap<String, Object> paramMap) {
            Result result = new Result();
            try {
                resourceMapper.updateMiniServerZone(paramMap);
    //修改wwn和interface表时先删除这条记录,然后在添加 resourceMapper.deleteMiniServerZoneInterface(paramMap); resourceMapper.deleteMiniServerZoneWwn(paramMap); List
    <HashMap<String, Object>> wwnValues = (List<HashMap<String, Object>>) paramMap.get("wwns"); for (HashMap<String, Object> item : wwnValues) { item.put("nodeId", paramMap.get("nodeId")); resourceMapper.insertMiniServerZoneWwn(item); } List<HashMap<String, Object>> fieldValues = (List<HashMap<String, Object>>) paramMap.get("interfaces"); for (HashMap<String, Object> paramter : fieldValues) { paramter.put("nodeId",paramMap.get("nodeId")); if (paramter.containsKey("ipAddress")) { paramter.put("ipAddressLong", CommonTools.parseIpToLong((String) paramter.get("ipAddress"))); } resourceMapper.insertMiniServerZoneInterface(paramter); } result.setResultCode(EResultCode.SUCCESS); result.setResultMsg("分区修改成功"); } catch (Exception e) { logger.error("update updatePowerZone error!", e); result.setResultCode(EResultCode.DATABASE_FAIL); result.setResultMsg("分区修改失败"); } return result; }

    实体类

    @Data
    public class MiniServerZoneRequest extends AbstractRequest {
    
        @ApiModelProperty(value="nodeId", dataType="integer", hidden=true)
        private Integer nodeId;
        private String hostName;
        private Integer parentId;
        private String serialNumber;
        private String unitType;
        private String openSSH;
        private String agentId;
        private String remark;
        private String name;
        private String wwn;
        private String ipAddress;
        private List<WwnRequest> wwns;  //一对多实体类
        private List<MiniServerInterface> interfaces;

    导入模板

     public String importMiniServer(String currentLoginId, String templatePath, String uploadedFilePath) {
            // 模板文件
            File templateFile = new File(uploadDir + File.separator + FileUpDownController.TEMPLATE_BASE_DIR + File.separator + templatePath);
            // 已上传文件
            File uploadedFile = new File(uploadDir + File.separator + uploadedFilePath);
            Result result = new Result();
            // 查询机房数据列表,并转为map方便后面使用
            List<HashMap<String, Object>> machineRoomList = ossDatabaseService.directSelect(ApigateMapperConst.SELECT_RESOURCE_MACHINE_ROOMS, new HashMap<>());
            // 查询设备类型字典
            Map<String, Object> machineTypeDictMap = systemService.listDictMap("IPPOOL_MACHINE_TYPE");
            // 查询设备厂家字典
            Map<String, Object> manufacturerDictMap = systemService.listDictMap("RESOURCE_MANUFACTURERCODE");
            //查询HMC
            HashMap<String, Object> hmcMap = new HashMap<>();
            List<Map<String, Object>> dataList = resourceMapper.selectHMC(hmcMap);
            Map<String, Object> resourceHmcMap = new HashMap<>();
            dataList.forEach(data -> resourceHmcMap.put(data.get("name").toString(), data.get("id")));
    
            // 判断文件是否都存在
            if (!templateFile.exists() || !uploadedFile.exists()) {
                result.setResultCode(EResultCode.GET_DATA_FAIL);
                result.setResultMsg("模板文件或上传文件不存在");
                return JsonHelper.toJson(result);
            }
            // 必填字段key
            List<String> requiredKeys = Arrays.asList("machineRoomName", "column_", "row_", "unum",
                                                       "height", "machineType", "manufacturerCode","cpuNum","memory");
            try {
                // 从excel读文件
                List<Map<String, Object>> datalist = ExcelReaderUtil.readExcel(uploadedFile.getPath(), templateFile.getPath());
                logger.debug("[服务器导入]:读取到的excel数据-" + JsonHelper.toJson(datalist));
                // 遍历数据,校验数据,处理数据,但是先不入库
                for (Map<String, Object> data : datalist) {
                    // 处理数据 校验数据
                    // 验证必填字段
                    for (String dataKey : requiredKeys) {
                        if (!data.containsKey(dataKey) || data.get(dataKey) == null || StringUtils.isBlank((String) data.get(dataKey))) {
                            result.setResultCode(EResultCode.GET_DATA_FAIL);
                            result.setResultMsg("服务器[" + data.get("serialNumber") + "]的必填字段缺失");
                            return JsonHelper.toJson(result);
                        }
                    }
                    // 处理所属机房
                    String machineRoomName = (String) data.get("machineRoomName");
                    val tmpMachineRoomList = machineRoomList.stream().filter(it -> machineRoomName.equals(it.get("name"))).collect(Collectors.toList());
                    if (tmpMachineRoomList.isEmpty()) {
                        result.setResultCode(EResultCode.GET_DATA_FAIL);
                        result.setResultMsg("服务器[" + data.get("serialNumber") + "]的所属机房不存在");
                        return JsonHelper.toJson(result);
                    } else {
                        data.put("machineRoomId", tmpMachineRoomList.get(0).get("id"));
                        data.put("machineRoomAlias", tmpMachineRoomList.get(0).get("alias"));
                    }
                    // 机柜-列
                    String column_ = (String) data.get("column_");
                    if (StringUtils.isNotBlank(column_)) {
                        if (column_.toUpperCase().matches("^[A-Z]$")) {
                            data.put("column_", column_.toUpperCase());
                        } else {
                            result.setResultCode(EResultCode.GET_DATA_FAIL);
                            result.setResultMsg("服务器[" + data.get("serialNumber") + "]的机柜-列格式不对,请输入1位大写字母");
                            return JsonHelper.toJson(result);
                        }
                    }
                    // 机柜-行
                    Object row_ = data.get("row_");
                    if (row_ != null) {
                        if (row_.toString().length() == 1) {
                            row_ = "0" + row_;
                        }
                        if (row_.toString().matches("^[0-9]{2}$")) {
                            data.put("row_", row_);
                        } else {
                            result.setResultCode(EResultCode.GET_DATA_FAIL);
                            result.setResultMsg("服务器[" + data.get("serialNumber") + "]的机柜-行格式不对,请输入2位数字");
                            return JsonHelper.toJson(result);
                        }
                    }
                    if (data.get("hmcName") == null) {
                        data.put("hmcId", 0);
                    }else {
                        Object hmcId = resourceHmcMap.get(data.get("hmcName"));
                           data.put("hmcId", hmcId);
                    }
                    // 机位验证,只能输入数字
                    Object unum = data.get("unum");
                    if (unum != null) {
                        try {
                            unum = Integer.parseInt(String.valueOf(unum));
                            data.put("unum", unum);
                        } catch (Exception e) {
                            result.setResultCode(EResultCode.GET_DATA_FAIL);
                            result.setResultMsg("服务器[" + data.get("serialNumber") + "]的机位格式不对,只需输入数字");
                            return JsonHelper.toJson(result);
                        }
                    }
                    // 高度验证,只能输入数字
                    Object height = data.get("height");
                    if (height != null) {
                        try {
                            height = Integer.parseInt(String.valueOf(height));
                            data.put("height", height);
                        } catch (Exception e) {
                            result.setResultCode(EResultCode.GET_DATA_FAIL);
                            result.setResultMsg("服务器[" + data.get("serialNumber") + "]的高度格式不对,只需输入数字");
                            return JsonHelper.toJson(result);
                        }
                    }
                    // 验证设备类型
                    if (data.get("machineType") != null) {
                        Object machineType = data.get("machineType");
                        if (machineTypeDictMap.containsValue(machineType)) {
                            for (Map.Entry<String, Object> entry : machineTypeDictMap.entrySet()) {
                                if (entry.getValue().toString().equalsIgnoreCase(machineType.toString())) {
                                    machineType = entry.getKey();
                                    break;
                                }
                            }
                            data.put("machineType", machineType);
                        } else {
                            result.setResultCode(EResultCode.GET_DATA_FAIL);
                            result.setResultMsg("服务器[" + data.get("serialNumber") + "]的设备类型不存在");
                            return JsonHelper.toJson(result);
                        }
                    }
                    // 验证设备厂家
                    if (data.get("manufacturerCode") != null) {
                        Object manufacturerCode = data.get("manufacturerCode");
                        String manufacturerId = null;
                        if (manufacturerDictMap.containsValue(manufacturerCode)) {
                            for (Map.Entry<String, Object> entry : manufacturerDictMap.entrySet()) {
                                if (entry.getValue().toString().equalsIgnoreCase(manufacturerCode.toString())) {
                                    manufacturerId = entry.getKey();
                                    break;
                                }
                            }
                            data.put("manufacturerCode", manufacturerId);
                        } else {
                            result.setResultCode(EResultCode.GET_DATA_FAIL);
                            result.setResultMsg("服务器[" + data.get("serialNumber") + "]的设备厂家不存在");
                            return JsonHelper.toJson(result);
                        }
                    }
                    // 验证CPU核数是否是数字
                    Object cpuNum = data.get("cpuNum");
                    if (cpuNum != null) {
                        try {
                            cpuNum = Integer.parseInt(String.valueOf(cpuNum));
                            data.put("cpuNum", cpuNum);
                        } catch (Exception e) {
                            result.setResultCode(EResultCode.GET_DATA_FAIL);
                            result.setResultMsg("服务器[" + data.get("serialNumber") + "]的CPU核数格式不对,只需输入数字");
                            return JsonHelper.toJson(result);
                        }
                    }
                    // 验证内存(MB)是否是数字
                    Object memory = data.get("memory");
                    if (memory != null) {
                        try {
                            memory = Integer.parseInt(String.valueOf(memory));
                            data.put("memory", memory);
                        } catch (Exception e) {
                            result.setResultCode(EResultCode.GET_DATA_FAIL);
                            result.setResultMsg("服务器[" + data.get("serialNumber") + "]的内存格式不对,只需输入数字");
                            return JsonHelper.toJson(result);
                        }
                    }
                }
                for (Map<String, Object> data : datalist) {
                    logger.debug("[服务器导入]:发送到EAction的数据-" + JsonHelper.toJson(data));
                    String json = JsonHelper.toJson(data);//转为String
                    HashMap<String, Object> fromJson = JsonHelper.fromJson(HashMap.class, json);//转为HashMap
                    if (data.get("nodeId") != null) {
                        // 更新服务器
                        updateMiniServer(currentLoginId,fromJson);
                    } else {
                        // 添加服务器
                        insertMiniServer(currentLoginId, fromJson);
                    }
                }
    
            } catch (Exception e) {
                logger.error(e.getCause().getMessage(), e);
                result.setResultCode(EResultCode.GET_DATA_FAIL);
                result.setResultMsg(e.getCause().getMessage());
                return JsonHelper.toJson(result);
            }
            result.setResultCode(EResultCode.SUCCESS);
            return JsonHelper.toJson(result);
        }
  • 相关阅读:
    采购标准流程及底层分析
    ORACLE FORM ZA 常用子程序
    在R12中实现多OU编程
    FORM未找到数据的原因
    在Oracle的FORM中高亮显示鼠标点击或光标所在的行
    MPICH运行程序时出错之解决方法
    两个基于C++的MPI编辑例子
    面向对象PHP面向对象的特性
    PHP 数组遍历 foreach 语法结构
    php BC高精确度函数库
  • 原文地址:https://www.cnblogs.com/fenghh/p/12101362.html
Copyright © 2011-2022 走看看