Browse Source

抄表率代码优化

pengdi@zoniot.com 4 years ago
parent
commit
3c2ba5e856

+ 96 - 86
smart-city-platform/src/main/java/com/bz/smart_city/service/impl/MeterReadRecordServiceImpl.java

@@ -441,51 +441,68 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService{
 
 		for(int i = 1 ;i <= totalPage; i++) {
 			int start = (i - 1) * pageSize;
-
+			log.info("Meter Reading Start :{},PageSize :{},Param : {} ",start,pageSize,pageSize);
 			List<DeviceDto> deviceList = deviceMapper.getDeviceList(param, start, pageSize);
 			List<MeterReadRecord> records = new ArrayList<MeterReadRecord>();
 			for(DeviceDto device : deviceList) {
-				String readStatus = "1" ; // 1:未抄,2:已抄
-				Integer startDate = Integer.parseInt(DateTimeUtil.formatDate(DateTimeUtil.before(date, 1), "yyyyMMdd"));
-				Integer endDate = Integer.parseInt(DateTimeUtil.formatDate(date, "yyyyMMdd"));
-				MeterReadRecord record = new MeterReadRecord();
-				String deviceNo = device.getDeviceNo() ;
-				Long deviceId = device.getId();
-				record.setId(idWorker.nextId());
-				record.setSiteId(device.getSiteId());
-				record.setSysId(device.getSysId());
-				record.setProvince(device.getProvince());
-				record.setRegion(device.getRegion());
-				record.setCity(device.getCity());
-				record.setCommunityId(device.getCommunity());
-				record.setBuildingId(device.getBuildingId());
-				record.setLocation(device.getLocDesc());
-				record.setDeviceTypeId(device.getDeviceType());
-				record.setDeviceId(device.getId());
-				record.setDeviceNo(deviceNo);
-				record.setMeterFileNo(device.getWaterMeterFileNo());
-				record.setMeterNo(device.getWaterMeterNo());
-				record.setReadDate(startDate);
-				record.setCustomerId(device.getCustomerId());
-				// 先从缓存中获取数据
-				String deviceDataJSONStr = redisUtil.get(String.valueOf(device.getId()));
-				if(StringUtils.isNotEmpty(deviceDataJSONStr)) {
-					JSONObject dataObj = (JSONObject)JSON.parse(deviceDataJSONStr);
-					// 分别获取用水测点与上报时间测点
-					JSONObject timeData = (JSONObject)dataObj.get("TIME");
-					JSONObject wsvData = (JSONObject)dataObj.get("WSV");
-					String timeStr = (String)timeData.get("measuringVaule"); // 格式 20181221100659
-					// 判断上报时间是超时
-					Date cacheDate = DateTimeUtil.parseDate(timeStr, "yyyyMMddhhmmss");
-					if(cacheDate.after(DateTimeUtil.parseDate(String.valueOf(startDate), "yyyyMMdd")) && cacheDate.before(DateTimeUtil.parseDate(String.valueOf(endDate), "yyyyMMdd"))) {
-						readStatus = "2"; //已抄
-						record.setReadTime(cacheDate);
-						record.setReadData(wsvData.getString("measuringVaule"));
+				try{
+					String readStatus = "1" ; // 1:未抄,2:已抄
+					Integer startDate = Integer.parseInt(DateTimeUtil.formatDate(DateTimeUtil.before(date, 1), "yyyyMMdd"));
+					Integer endDate = Integer.parseInt(DateTimeUtil.formatDate(date, "yyyyMMdd"));
+					MeterReadRecord record = new MeterReadRecord();
+					String deviceNo = device.getDeviceNo() ;
+					Long deviceId = device.getId();
+					record.setId(idWorker.nextId());
+					record.setSiteId(device.getSiteId());
+					record.setSysId(device.getSysId());
+					record.setProvince(device.getProvince());
+					record.setRegion(device.getRegion());
+					record.setCity(device.getCity());
+					record.setCommunityId(device.getCommunity());
+					record.setBuildingId(device.getBuildingId());
+					record.setLocation(device.getLocDesc());
+					record.setDeviceTypeId(device.getDeviceType());
+					record.setDeviceId(device.getId());
+					record.setDeviceNo(deviceNo);
+					record.setMeterFileNo(device.getWaterMeterFileNo());
+					record.setMeterNo(device.getWaterMeterNo());
+					record.setReadDate(startDate);
+					record.setCustomerId(device.getCustomerId());
+					// 先从缓存中获取数据
+					String deviceDataJSONStr = redisUtil.get(String.valueOf(device.getId()));
+					if(StringUtils.isNotEmpty(deviceDataJSONStr)) {
+						JSONObject dataObj = (JSONObject)JSON.parse(deviceDataJSONStr);
+						// 分别获取用水测点与上报时间测点
+						JSONObject timeData = (JSONObject)dataObj.get("TIME");
+						JSONObject wsvData = (JSONObject)dataObj.get("WSV");
+						String timeStr = (String)timeData.get("measuringVaule"); // 格式 20181221100659
+						// 判断上报时间是超时
+						Date cacheDate = DateTimeUtil.parseDate(timeStr, "yyyyMMddhhmmss");
+						if(cacheDate.after(DateTimeUtil.parseDate(String.valueOf(startDate), "yyyyMMdd")) && cacheDate.before(DateTimeUtil.parseDate(String.valueOf(endDate), "yyyyMMdd"))) {
+							readStatus = "2"; //已抄
+							record.setReadTime(cacheDate);
+							record.setReadData(wsvData.getString("measuringVaule"));
+						}
+						else {
+							DeviceDataDim p = new DeviceDataDim();
+							p.setDeviceId(deviceId);
+							p.setDeviceNo(deviceNo);
+							p.setStartDate(startDate);
+							p.setEndDate(endDate);
+							p.setMeasuringCode("WSV");
+							List<DeviceDataDim> data = deviceDataDimMapper.queryDeviceDataDim(p,1);
+
+							if(data.size() > 0) {
+								readStatus = "2" ; // 已抄
+								record.setReadTime(data.get(0).getSendTime()); // 抄表时间
+								record.setReadData(data.get(0).getMeasuringData());
+							}
+						}
 					}
-					else {
+					else { // 缓存中没有数据则从数据库中进行查询
 						DeviceDataDim p = new DeviceDataDim();
-						p.setDeviceId(deviceId);
 						p.setDeviceNo(deviceNo);
+						p.setDeviceId(deviceId);
 						p.setStartDate(startDate);
 						p.setEndDate(endDate);
 						p.setMeasuringCode("WSV");
@@ -497,54 +514,42 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService{
 							record.setReadData(data.get(0).getMeasuringData());
 						}
 					}
-				}
-				else { // 缓存中没有数据则从数据库中进行查询
-					DeviceDataDim p = new DeviceDataDim();
-					p.setDeviceNo(deviceNo);
-					p.setDeviceId(deviceId);
-					p.setStartDate(startDate);
-					p.setEndDate(endDate);
-					p.setMeasuringCode("WSV");
-					List<DeviceDataDim> data = deviceDataDimMapper.queryDeviceDataDim(p,1);
-
-					if(data.size() > 0) {
-						readStatus = "2" ; // 已抄
-						record.setReadTime(data.get(0).getSendTime()); // 抄表时间
-						record.setReadData(data.get(0).getMeasuringData());
-					}
-				}
-				record.setReadStatus(readStatus); // 抄表状态
-				record.setStatus(1);
-
-				// 计算当日用水量
-				Integer lastDate = Integer.parseInt(DateTimeUtil.formatDate(DateTimeUtil.before(date, 2), "yyyyMMdd"));
-				MeterReadRecord lastDayRecord = meterReadRecordMapper.getLastDayData(deviceId, lastDate);
-				String rd = record.getReadData();
-				if (lastDayRecord == null) {
-					if (rd == null || rd.equals("")) {
-						record.setLastCost(BigDecimal.ZERO);
-						record.setLastValid("0");
-					} else {
-						record.setLastValid(rd);
-						BigDecimal lastC = new BigDecimal(Double.parseDouble(rd));
-						record.setLastCost(lastC);
-					}
-				} else {
-					if (rd == null || rd.equals("")) {
-						record.setLastCost(BigDecimal.ZERO);
-						record.setLastValid(lastDayRecord.getLastValid());
+					record.setReadStatus(readStatus); // 抄表状态
+					record.setStatus(1);
+
+					// 计算当日用水量
+					Integer lastDate = Integer.parseInt(DateTimeUtil.formatDate(DateTimeUtil.before(date, 2), "yyyyMMdd"));
+					MeterReadRecord lastDayRecord = meterReadRecordMapper.getLastDayData(deviceId, lastDate);
+					String rd = record.getReadData();
+					if (lastDayRecord == null) {
+						if (rd == null || rd.equals("")) {
+							record.setLastCost(BigDecimal.ZERO);
+							record.setLastValid("0");
+						} else {
+							record.setLastValid(rd);
+							BigDecimal lastC = new BigDecimal(Double.parseDouble(rd));
+							record.setLastCost(lastC);
+						}
 					} else {
-						record.setLastValid(rd);
-						BigDecimal lastC = new BigDecimal(Double.parseDouble(rd) - Double.parseDouble(lastDayRecord.getLastValid()));
-						record.setLastCost(lastC);
+						if (rd == null || rd.equals("")) {
+							record.setLastCost(BigDecimal.ZERO);
+							record.setLastValid(lastDayRecord.getLastValid());
+						} else {
+							record.setLastValid(rd);
+							BigDecimal lastC = new BigDecimal(Double.parseDouble(rd) - Double.parseDouble(lastDayRecord.getLastValid()));
+							record.setLastCost(lastC);
+						}
 					}
+					records.add(record);
+				}catch (Exception e){
+					log.error("Meter {} Reading Failed !",device.getDeviceNo(),e);
 				}
-				records.add(record);
+
 			}
 			// 保存抄表记录
 			meterReadRecordMapper.insertList(records);
 			try {
-				Thread.sleep(10000l);
+				Thread.sleep(10000L);
 			} catch (InterruptedException e) {
 				log.error("thread interrupted", e);
 			}
@@ -851,7 +856,7 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService{
 			// 保存抄表记录
 			meterReadRecordMapper.insertList(records);
 			try {
-				Thread.sleep(10000l);
+				Thread.sleep(10000L);
 			} catch (InterruptedException e) {
 				log.error("thread interrupted", e);
 			}
@@ -905,12 +910,17 @@ public class MeterReadRecordServiceImpl implements MeterReadRecordService{
 			List<DeviceDto> deviceList = deviceMapper.getDeviceList(param, start, pageSize);
 			List<MeterReadRecord> records = new ArrayList<MeterReadRecord>();
 			for(DeviceDto device : deviceList) {
-				MeterReadRecord readRecord = genrateMeterRecord(date, device, wsvCode);
-				if(readRecord != null){
-					long id = idWorker.nextId();
-					readRecord.setId(id);
-					records.add(readRecord);
+				try{
+					MeterReadRecord readRecord = genrateMeterRecord(date, device, wsvCode);
+					if(readRecord != null){
+						long id = idWorker.nextId();
+						readRecord.setId(id);
+						records.add(readRecord);
+					}
+				}catch (Exception e){
+					log.error("Meter {} Reading Failed !",device.getDeviceNo(),e);
 				}
+
 			}
 			// 保存抄表记录
 			log.info("Begin Save Read Record List ,Size ={}",records.size());