diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RealtimeDataLogic.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RealtimeDataLogic.java index aeab4d2e..ebdcc386 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RealtimeDataLogic.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RealtimeDataLogic.java @@ -102,70 +102,85 @@ public class RealtimeDataLogic implements ServiceLogic { cacheTerminalStatusMap.put(terminalId, statusOrSOC); REDIS.setCacheMap(stationTermStatusKey, cacheTerminalStatusMap); Map cacheOrder = REDIS.getCacheMap(orderkey); - if (!orderNo.equals("00000000000000000000000000000000") && statusInt == 3) { - List realtimeDataList = (List) cacheOrder.get("realtimeDataList"); - cacheGun.put("idleCnt", 0); - if (realtimeDataList == null) { - realtimeDataList = new ArrayList<>(); - } - StartChargingData startChargingData = new StartChargingData(); - Integer balance = (Integer) cacheOrder.get("initBalance"); - CacheRealtimeData cacheRealtimeData = translate(realtimeData); - balance -= cacheRealtimeData.getAmountCharged(); + if (!orderNo.equals("00000000000000000000000000000000")) { + if (statusInt == 3) { + List realtimeDataList = (List) cacheOrder.get( + "realtimeDataList"); + cacheGun.put("idleCnt", 0); + if (realtimeDataList == null) { + realtimeDataList = new ArrayList<>(); + } + StartChargingData startChargingData = new StartChargingData(); + Integer balance = (Integer) cacheOrder.get("initBalance"); + CacheRealtimeData cacheRealtimeData = translate(realtimeData); + balance -= cacheRealtimeData.getAmountCharged(); // startChargingData.setBalance(balance); //todo make pile work then uncomment // startChargingData.setLogicCardNo(cacheOrder.get("logicCardNo").toString()); // startChargingData.setPhysicCardNo(cacheOrder.get("physicCardNo").toString()); // startChargingData.setPileNo(cacheOrder.get("pileNo").toString()); // startChargingData.setGunId(cacheOrder.get("gunId").toString()); // Thread.sleep(300); -// chargingController.nativ-eRefreshBalance(startChargingData); - cacheRealtimeData.setCreateTime(DateUtil.now()); - String lord = orderkey.concat(".lord"); - REDIS.setCacheObject(lord, cacheRealtimeData); - realtimeDataList.add(cacheRealtimeData); - Integer cacheStartSoc = (Integer) cacheOrder.get("startSoc"); - if (cacheStartSoc == null && socInt != 0) cacheOrder.put("startSoc", socInt); - if (socInt != 0) cacheOrder.put("endSoc", socInt); +// chargingController.nativeRefreshBalance(startChargingData); + cacheRealtimeData.setCreateTime(DateUtil.now()); + String lord = orderkey.concat(".lord"); + REDIS.setCacheObject(lord, cacheRealtimeData); + realtimeDataList.add(cacheRealtimeData); + Integer cacheStartSoc = (Integer) cacheOrder.get("startSoc"); + if (cacheStartSoc == null && socInt != 0) cacheOrder.put("startSoc", socInt); + if (socInt != 0) cacheOrder.put("endSoc", socInt); // cacheOrder.put("em", realtimeData.()); //todo 实时时段明细数据是否由桩直接上传? - cacheOrder.put("rbalance", balance); - cacheOrder.put("remainingTime", tr); - cacheOrder.put("rdtime", DateUtil.calendar().getTime().getTime()); - cacheOrder.put("status", statusplain); - cacheOrder.put("totalPower", cacheRealtimeData.getChargingDegree() / 10000.0); - cacheOrder.put("totalMoney", cacheRealtimeData.getAmountCharged() / 10000.0); - cacheOrder.put("realtimeDataList", realtimeDataList); - pileOrderService.pileRimeOrder(orderNo); - Integer stopSoc = (Integer) cacheOrder.get("stopSoc"); - if (stopSoc != null && socInt >= stopSoc) { - String alerted = (String) cacheOrder.get("socalerted"); - String tel = (String) cacheOrder.get("tel"); - if (alerted == null && tel != null) { - R r = chargingController.nativeStopCharging(pileNo, gunId, default_version); - if (r.getCode() == 200) { - HashMap paramMap = new HashMap<>(); - paramMap.put("battery", stopSoc.toString()); - paramMap.put("phone", tel); - paramMap.put("content", "【小华充电】尊敬的用户,你的车辆已充电达至设定的SOC("+stopSoc.toString()+"%)已自动停止充电,请您尽快将车辆挪走以方便他人使用充电桩,谢谢合作。"); - smsService.sendNotice(paramMap); - cacheOrder.put("socalerted", "true"); + cacheOrder.put("rbalance", balance); + cacheOrder.put("remainingTime", tr); + cacheOrder.put("rdtime", DateUtil.calendar().getTime().getTime()); + cacheOrder.put("status", statusplain); + cacheOrder.put("totalPower", cacheRealtimeData.getChargingDegree() / 10000.0); + cacheOrder.put("totalMoney", cacheRealtimeData.getAmountCharged() / 10000.0); + cacheOrder.put("realtimeDataList", realtimeDataList); + pileOrderService.pileRimeOrder(orderNo); + Integer stopSoc = (Integer) cacheOrder.get("stopSoc"); + if (stopSoc != null && socInt >= stopSoc) { + String alerted = (String) cacheOrder.get("socalerted"); + String tel = (String) cacheOrder.get("tel"); + if (alerted == null && tel != null) { + R r = chargingController.nativeStopCharging(pileNo, gunId, default_version); + if (r.getCode() == 200) { + HashMap paramMap = new HashMap<>(); + paramMap.put("battery", stopSoc.toString()); + paramMap.put("phone", tel); + paramMap.put("content", "【小华充电】尊敬的用户,你的车辆已充电达至设定的SOC(" + stopSoc.toString() + "%)" + + "已自动停止充电,请您尽快将车辆挪走以方便他人使用充电桩,谢谢合作。"); + smsService.sendNotice(paramMap); + cacheOrder.put("socalerted", "true"); + } } } - } - if (balance < 50000) { - String alerted = (String) cacheOrder.get("lt5alerted"); - String tel = (String) cacheOrder.get("tel"); - if (alerted == null && tel != null) { - HashMap paramMap = new HashMap<>(); - paramMap.put("money", "5"); - paramMap.put("phone", tel); - paramMap.put("content", "【小华充电】尊敬的用户,你的账户余额小于5元,为不影响您的正常充电,请您尽快充值交费,谢谢。"); - smsService.sendNotice(paramMap); - cacheOrder.put("lt5alerted", "true"); + if (balance < 50000) { + String alerted = (String) cacheOrder.get("lt5alerted"); + String tel = (String) cacheOrder.get("tel"); + if (alerted == null && tel != null) { + HashMap paramMap = new HashMap<>(); + paramMap.put("money", "5"); + paramMap.put("phone", tel); + paramMap.put("content", "【小华充电】尊敬的用户,你的账户余额小于5元,为不影响您的正常充电,请您尽快充值交费,谢谢。"); + smsService.sendNotice(paramMap); + cacheOrder.put("lt5alerted", "true"); + } } - } - if ("true".equals(cacheOrder.get("lordiss"))) { - cacheOrder.put("lordiss", "false"); - pileOrderService.pileStop(orderNo, 4, "订单实时数据恢复"); + if ("true".equals(cacheOrder.get("lordiss"))) { + cacheOrder.put("lordiss", "false"); + pileOrderService.pileStop(orderNo, 4, "订单实时数据恢复"); + } + } else { + Integer errorfreecnt = (Integer) cacheOrder.get("errorfreecnt"); + errorfreecnt = errorfreecnt == null ? 1 : ++errorfreecnt; + if (errorfreecnt == 2) { + final R r = pileOrderService.abnormalOrder(orderNo); + if (r.getCode() != 200) { + errorfreecnt = 1; + } + log.error("abnormal.1 order[{}]", orderNo); + } + cacheOrder.put("errorfreecnt", errorfreecnt); } REDIS.setCacheMap(orderkey, cacheOrder); } else { @@ -181,7 +196,7 @@ public class RealtimeDataLogic implements ServiceLogic { String status = (String) problematicOrder.get("status"); if (!isInteger(status) && !status.equals("充电中") && orderData == null) { pileOrderService.abnormalOrder(orderNo); - log.error("abnormal order[{}]", orderNo); + log.error("abnormal.2 order[{}]", orderNo); cacheGun.put("orderkey", null); idleCnt = 0; } @@ -199,7 +214,8 @@ public class RealtimeDataLogic implements ServiceLogic { return new ServiceResult(false); } - private CacheRealtimeData translate(RealtimeData realtimeData) throws InvocationTargetException, IllegalAccessException, InstantiationException { + private CacheRealtimeData translate(RealtimeData realtimeData) throws InvocationTargetException, IllegalAccessException, + InstantiationException { Class crdclz = CacheRealtimeData.class; Class rdclz = RealtimeData.class;