设备CSV文件导入,类型转换加try...catch...

cvStr = this.getCellValue(row, j++);
if (cvStr == null || cvStr.trim().equals("")) {
	// 7纬度
	osmDev.setGpslat(0D);
} else {
	try {
		osmDev.setGpslat(Double.valueOf(cvStr.trim()));
	} catch (Exception err) {
		logger.error("gpsln parse error: " + cvStr.trim());
	}
}

全代码:

/**
 * //18.10.11加设备的批量导入
 * 设备批量(csv文件)导入
 * 
 * @param request
 * @param response
 * @return
 */
@RequestMapping("devbatchImport")
@ResponseBody
public ClaaAjaxResult devbatchImport(@RequestParam(value="dev_import_file", required=false) CommonsMultipartFile file, 
		HttpServletRequest request, HttpServletResponse response) throws Exception 
{
	if(!checkAccessRight(Constants.OPCODE_OSM_DEV_MOD)){
		this.addSmLog(MODULE_NAME, SmLogBean.OP_RET_FAIL, "权限不足", "尝试批量导入设备信息", "");
		throw this.genNoRightException();
	}
	ClaaAjaxResult ret = new ClaaAjaxResult();
	String randomStr = Long.toUnsignedString(UUID.randomUUID().getLeastSignificantBits());
	try{		
		this.setProgress(randomStr, 1, true, "开始导入设备信息...");
		List<OsmDev> devList = new ArrayList<OsmDev>();
		// 获得原始文件名  
		String fileName = file.getOriginalFilename();  	        
		logger.info("devbatchImport(): file name=" + fileName);          
		// 新文件名.
		String filePath = this.getUploadPath(request)+randomStr+"_"+ fileName;
		filePath = filePath.replaceAll("\\\\", "/");
		logger.info("filePath: "+filePath);
		// 上传
		File f = new File(filePath);
		file.transferTo(f);
		// 异步解析文件csv
		DevImportCSVFileParser gwEuiCsvParser = new DevImportCSVFileParser(f.getAbsolutePath());
		List<OsmDev> csvEuiList = gwEuiCsvParser.parseFile();
		devList.addAll(csvEuiList);			
		if(devList.size() == 0){
			this.setProgress(randomStr, 100, true, "没有待导入的设备信息!");
			ret.setRetCode(ClaaAjaxResult.RET_CODE_OK);
			ret.setRetRemark("没有待导入的设备信息!");
			return ret;
		}
		this.addOsmDevs(randomStr, devList);
		ret.setRetCode(ClaaAjaxResult.RET_CODE_OK);
		// 将随机数返回,用于后续批量导入进度查询。
		ret.setRetRemark(randomStr);
	}catch(Exception ex){
		ret.setRetCode(ClaaAjaxResult.RET_CODE_ERR);
		ret.setRetRemark(ex.getMessage());
		this.setProgress(randomStr, 100, false, ex.getMessage());
	}
	this.addOpLog(ret, MODULE_NAME, "批量导入设备", "导入请求提交", "请求批次编号:"+randomStr);
	return ret;
}	


/**
 * 以异步方式进行导入设备
 * 
 * @param excelFile
 * @param randomStr
 * @param extParaMap
 * @throws Exception
 */
private void addOsmDevs(String randomStr, List<OsmDev> devList) throws Exception {
	logger.info("Begin process Dev: totalNum="+devList.size());
	final User u = this.getLoginUser();
	ExecutorService execSvr = Executors.newSingleThreadExecutor();
	execSvr.submit(new Runnable(){
		@Override
		public void run() {
			try {
				StringBuffer errBuf = new StringBuffer();
				int totalNum = devList.size();
				totalNum = (totalNum == 0) ? 1 : totalNum;					
				double stepVal = 100.0 / totalNum;
				int cc = 0;
				for(OsmDev osmDev : devList){
					cc++; 
					if(osmDev == null){
						continue;
					}
					try {
						String deveui = osmDev.getDeveui();
						if (deveui == null || deveui.trim().equals("")) {
							continue;
						}
						OsmDev curOsmdev = devService.queryOsmDev(deveui);
						if (curOsmdev == null) {
							devService.addOsmDevImport(osmDev);
						} else {
							//设备类型
							String csvdevTp = osmDev.getDevType();
							if (csvdevTp != null && !csvdevTp.trim().equals("")) {
								curOsmdev.setDevType(csvdevTp);
							}
							//发货单
							String csvordno = osmDev.getOrdNo();
							if (csvordno != null && !csvordno.trim().equals("") && !"NA".equals(csvordno)) {
								curOsmdev.setOrdNo(csvordno);
							}
							//设备状态
							Integer csvdevStatus = osmDev.getDevStatus();
							if (csvdevStatus != null) {
								curOsmdev.setDevStatus(csvdevStatus);
							}
							//地址
							String csvaddress = osmDev.getAddress();
							if (csvaddress != null && !csvaddress.trim().equals("")) {
								curOsmdev.setAddress(csvaddress);
							}
							//归属项目
							String csvprojectid = osmDev.getProjectid();
							if (csvprojectid != null && !csvprojectid.trim().equals("")) {
								curOsmdev.setProjectid(csvprojectid);
							}
							Double csvlat = osmDev.getGpslat();
							if (csvlat != null) {
								curOsmdev.setGpslat(csvlat);
							}
							Double csvlng = osmDev.getGpslng();
							if (csvlng != null) {
								curOsmdev.setGpslng(csvlng);
							}
							Float csvalt = osmDev.getGpsalt();
							if (csvalt != null) {
								curOsmdev.setGpsalt(csvalt);
							}
							String csvremark = osmDev.getRemark();
							if (csvremark != null && !csvremark.trim().equals("")) {
								curOsmdev.setRemark(csvremark);
							}
							devService.modifyDevImport(curOsmdev);
						}
						setProgress(randomStr, (int) (cc * stepVal), true, "导入设备信息成功");
						logger.info("addOsmDev OK: " + osmDev.getDeveui());
					} catch(Exception e){
						errBuf.append(osmDev.getDeveui()).append("导入设备信息失败:"+e.getMessage()).append("; ");
						logger.error("addOsmContracts failed: "+osmDev.getDeveui()+", err="+e.getMessage(), e);
						setProgress(randomStr, 100, false, e.getMessage());
					}
				}
			}catch(Exception ex){
				logger.error(ex.getMessage(), ex);
				setProgress(randomStr, 100, false, ex.getMessage());
			}catch(Throwable err){
				logger.error(err.getMessage(), err);
				setProgress(randomStr, 100, false, err.getMessage());
			}finally {
				// 停掉线程池.
				execSvr.shutdown();
				checkProgressMap(); 
			}
		}
	});		
}
/**
 * 读取csv中的数据
 * 
 * @return List<String>
 * @author
 */
public List<OsmDev> parseFile() {
	List<OsmDev> ret = new ArrayList<OsmDev>();
	// 1.读取有效数据行
	CsvReader reader = null;
	List<String[]> rawRowList = new ArrayList<String[]>();
	try {
		reader = new CsvReader(this.filePath, ',', Charset.forName("UTF-8"));
		// 跳过表头 如果需要表头的话,这句可以忽略
		reader.readHeaders();
		// 去掉空白行.
		reader.setSkipEmptyRecords(true);
		// trim
		reader.setTrimWhitespace(true);
		// 逐行读入除表头的数据
		while (reader.readRecord()) {
			// reader.getRawRecord() 读取原始行字符串.
			rawRowList.add(reader.getValues());
		}
		logger.info("Step.1>>Load file success: " + this.filePath + ", recordNum=" + rawRowList.size());
	} catch (Exception e) {
		logger.error("Step.1>>Load csv failed: " + this.filePath, e);
		return null;
	} finally {
		reader.close();
		reader = null;
	}

	// 2. 解析各行
	/**
	 * GWEUI
	 */
	for (String[] row : rawRowList) {
		// new contract 对象...
		OsmDev osmDev = new OsmDev();
		int j = 0;
		String cvStr = this.getCellValue(row, j++);
		if (cvStr == null) {
			cvStr = "";
		}
		// 1设备编号
		osmDev.setDeveui(cvStr.trim());
		cvStr = this.getCellValue(row, j++);
		if (cvStr == null || cvStr.trim().equals("")) {
			// 2发货单,如果发货单没填值,设个默认值NA
			osmDev.setOrdNo("NA");
		} else {
			osmDev.setOrdNo(cvStr);
		}
		cvStr = this.getCellValue(row, j++);
		if (cvStr == null) {
			cvStr = "";
		}
		// 3设备类型
		osmDev.setDevType(cvStr.trim());
		cvStr = this.getCellValue(row, j++);
		if (cvStr != null && !cvStr.trim().equals("")) {
			try{
				// 4.设备状态
				osmDev.setDevStatus(Integer.parseInt(cvStr.trim()));
			} catch (Exception err) {
				logger.error("gpsln parse error: " + cvStr.trim());
		    }
		}
		cvStr = this.getCellValue(row, j++);
		if (cvStr == null) {
			cvStr = "";
		}
		// 5终端位置
		osmDev.setAddress(cvStr.trim());
		cvStr = this.getCellValue(row, j++);
		if (cvStr == null) {
			cvStr = "";
		}
		// 6归属项目
		osmDev.setProjectid(cvStr.trim());
		cvStr = this.getCellValue(row, j++);
		if (cvStr == null || cvStr.trim().equals("")) {
			// 7纬度
			osmDev.setGpslat(0D);
		} else {
			try {
				osmDev.setGpslat(Double.valueOf(cvStr.trim()));
			} catch (Exception err) {
				logger.error("gpsln parse error: " + cvStr.trim());
			}
		}
		cvStr = this.getCellValue(row, j++);
		if (cvStr == null || cvStr.trim().equals("")) {
			// 8经度
			osmDev.setGpslng(0D);
		} else {
			try {
				osmDev.setGpslng(Double.valueOf(cvStr.trim()));
			} catch (Exception err) {
				logger.error("gpsln parse error: " + cvStr.trim());
			}
		}
		cvStr = this.getCellValue(row, j++);
		if (cvStr == null || cvStr.trim().equals("")) {
			// 9海拔
			osmDev.setGpsalt(1F);
		} else {
			try {
				osmDev.setGpsalt(Float.valueOf(cvStr.trim()));
			} catch (Exception err) {
				logger.error("gpsln parse error: " + cvStr.trim());
			}
		}
		cvStr = this.getCellValue(row, j++);
		if (cvStr == null) {
			cvStr = "";
		}
		// 10备注
		osmDev.setRemark(cvStr.trim());

		ret.add(osmDev);
	}
	logger.info("Step.2>>Parse file success: " + this.filePath);
	return ret;
}

/**
 * 返回每一行各cell的值
 * 
 * @param row
 * @param cellId
 * @return
 */
private String getCellValue(String[] row, int cellId) {
	if (row == null || row.length <= cellId) {
		return "";
	}
	return row[cellId];
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值