ximon-admin/src/main/java/com/sandu/ximon/admin/controller/C3ChargingController.java
@@ -31,9 +31,13 @@ */ @PostMapping("/startCharging") public ResponseVO<Object> startCharging(@RequestBody C3ChargingParam c3ChargingParam) { c3ChargingService.startCharging(c3ChargingParam.getC3Mac(), c3ChargingParam.getChargingCapacity(), c3ChargingParam.getChargeAmount()); String result = c3ChargingService.startCharging(c3ChargingParam.getC3Mac(), c3ChargingParam.getChargingCapacity(), c3ChargingParam.getChargeAmount()); if ("æä½æå".equals(result)) { return ResponseUtil.success(result); } else { return ResponseUtil.fail(result); } return ResponseUtil.success(null); } /** @@ -41,9 +45,13 @@ */ @PostMapping("/finishCharging") public ResponseVO<Object> finishCharging(@RequestBody C3ChargingParam c3ChargingParam) { c3ChargingService.finishCharging(c3ChargingParam.getC3Mac()); String result = c3ChargingService.finishCharging(c3ChargingParam.getC3Mac()); return ResponseUtil.success(null); if ("æä½æå".equals(result)) { return ResponseUtil.success(result); } else { return ResponseUtil.fail(result); } } @@ -52,8 +60,12 @@ */ @PostMapping("/restartCharging") public ResponseVO<Object> restartCharging(@RequestBody C3ChargingParam c3ChargingParam) { c3ChargingService.restartCharging(c3ChargingParam.getC3Mac()); String result = c3ChargingService.restartCharging(c3ChargingParam.getC3Mac()); return ResponseUtil.success(null); if ("æä½æå".equals(result)) { return ResponseUtil.success(result); } else { return ResponseUtil.fail(result); } } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/processor/c3ChargingProcessor.java
@@ -2,7 +2,9 @@ import com.sandu.common.util.SpringContextHolder; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3HeartbeatReportInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3OperationReportInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame; import com.sandu.ximon.admin.manager.iot.rrpc.enums.C3ChargingEnum; import com.sandu.ximon.admin.manager.iot.rrpc.enums.C3ChargingReportEnum; import com.sandu.ximon.admin.service.C3ChargingService; import lombok.extern.slf4j.Slf4j; @@ -29,12 +31,23 @@ public void process(String productKey, String deviceName, CommonFrame frame) { String functionCode = frame.getPayload().substring(2, 4); if (C3ChargingReportEnum.HeartBeat_Data.getCode().equals(functionCode)) { log.info("å¿è·³ç¸åºââC3å çµæ¡©æ°æ®"+productKey+" ------- "+deviceName); log.info("å¿è·³ç¸åºââC3å çµæ¡©æ°æ®" + productKey + " ------- " + deviceName); A5C3HeartbeatReportInnerFrame heartbeatReportInnerFrame = new A5C3HeartbeatReportInnerFrame().transformFrame(frame.getPayload()); log.info("C3å çµæ¡©ä¸æ¥å¤ç_heartbeatReportInnerFrame"); log.info(heartbeatReportInnerFrame.toString()); SpringContextHolder.getBean(C3ChargingService.class).saveReportData(deviceName, heartbeatReportInnerFrame.getHeartBeatDataPackage()); if (heartbeatReportInnerFrame.isValidate()) { SpringContextHolder.getBean(C3ChargingService.class).saveReportData(deviceName, heartbeatReportInnerFrame.getHeartBeatDataPackage()); } } else if (C3ChargingEnum.StartCharging.getCode().equals(functionCode)) { log.info("å¿è·³ååºââC3å çµæ¡©å¼å§å çµ"); A5C3OperationReportInnerFrame operationReportInnerFrame = new A5C3OperationReportInnerFrame().transformFrame(frame.getPayload()); log.info("C3å çµæ¡©ä¸æ¥å¤ç_heartbeatReportInnerFrame"); log.info(operationReportInnerFrame.toString()); // if (operationReportInnerFrame.isValidate()) { // SpringContextHolder.getBean(C3ChargingService.class).saveReportData(deviceName, operationReportInnerFrame.getHeartBeatDataPackage()); // } } } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3OperationReportInnerFrame.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,147 @@ package com.sandu.ximon.admin.manager.iot.frame.inner.report; import cn.hutool.core.util.StrUtil; import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; import lombok.Data; import lombok.ToString; /** * @author ZZQ * @date 2022/3/14 16:36 * C3å çµæ¡©æä½æä»¤ååºå¸§ */ @Data @ToString(callSuper = true) public class A5C3OperationReportInnerFrame extends BaseResponseInnerFrame<A5C3OperationReportInnerFrame> { //MACå°å private String mac; //ååºç¶æ // æ éç ç±»åè¡¨ï¼ // 1.éä¿¡æµç¨è¶ æ¶ // 2.æ çµå // 3.æ çµæµ // 4.æ åç // 5.å çµåçè¿å° // 6.æ¼çµ // 7.è®¾å¤æ¸©åº¦è¿é« // 8.è®¾å¤æ¸©åº¦è¿ä½ // 9.å çµè¶ æ¶ï¼å çµåçè¿å°å¯¼è³å çµæ¶é´è¶ é¿ï¼ // 10.æ ç½ç» // 11.è¿æ¥ä¸»æºè¶ æ¶ // 12.è¿æ¥æå¡å¨è¶ æ¶ // 13.触æ¸å±æ ååº // 14.æ´æ°åå ¥Flash失败 // 15.åå ¥EEProm失败 // 16.å¸çµçµåè¿é«è¦å // 17.å¸çµçµåè¿åºè¦å // 18.å°éæ éï¼å½å为解éç¶æï¼ä¸è½éä¸ï¼ // 19.å°éæ éï¼å½å为éä¸ç¶æï¼ä¸è½è§£éï¼ // 20.å çµå£1æ é(ä¸è½ä½¿ç¨ï¼ // 21.å çµå£2æ é(ä¸è½ä½¿ç¨ï¼ï¼æä¸ç¨ï¼ // 22. å çµå£1æ æ³ä¸è½¦æºé讯 // 23. å çµå£2æ æ³ä¸è½¦æºéè®¯ï¼æä¸ç¨ï¼ private String state; @Override public A5C3OperationReportInnerFrame transformFrame(String hex) { // é¿åº¦ä¸ä¸è´æ¶ï¼è¿ånull if (StrUtil.isBlank(hex)) { return null; } // MQTTéä¿¡æ¹å¼(1) setConnectType(hex.substring(0, 2)); // åè½ç (1) setFunctionCode(hex.substring(2, 4)); // è´è·é¿åº¦(2) setPayloadLength(hex.substring(4, 8)); //MACå°å setMac(hex.substring(8, 16)); //硬件交äºååºç»æ setState(returnState(hex.substring(16, 18))); setCrc32(hex.substring(hex.length() - 8)); // æ ¡éªCRC32 String frame = hex.substring(2, hex.length() - 8); this.setValidate(CRC32Utils.validateFrame(frame, getCrc32())); return this; } public String returnState(String stateCode) { String State = ""; switch (stateCode) { case "00": State = "æä½æå"; break; case "01": State = "éä¿¡æµç¨è¶ æ¶"; break; case "02": State = "æ çµå"; break; case "03": State = "æ çµæµ"; break; case "04": State = "æ åç"; break; case "05": State = "å çµåçè¿å°"; break; case "06": State = "æ¼çµ"; break; case "07": State = "è®¾å¤æ¸©åº¦è¿é«"; break; case "08": State = "è®¾å¤æ¸©åº¦è¿ä½"; break; case "09": State = "å çµè¶ æ¶ï¼å çµåçè¿å°å¯¼è³å çµæ¶é´è¶ é¿ï¼"; break; case "10": State = "æ ç½ç»"; break; case "11": State = "è¿æ¥ä¸»æºè¶ æ¶"; break; case "12": State = "è¿æ¥æå¡å¨è¶ æ¶"; break; case "13": State = "触æ¸å±æ ååº"; break; case "14": State = "æ´æ°åå ¥Flash失败"; break; case "15": State = "åå ¥EEProm失败"; break; case "16": State = "å¸çµçµåè¿é«è¦å"; break; case "17": State = "å¸çµçµåè¿åºè¦å"; break; case "18": State = "å°éæ éï¼å½å为解éç¶æï¼ä¸è½éä¸ï¼"; break; case "19": State = "å°éæ éï¼å½å为éä¸ç¶æï¼ä¸è½è§£éï¼"; break; case "20": State = "å çµå£1æ é(ä¸è½ä½¿ç¨ï¼"; break; case "21": State = "å çµå£2æ é(ä¸è½ä½¿ç¨ï¼ï¼æä¸ç¨ï¼"; break; case "22": State = "å çµå£1æ æ³ä¸è½¦æºé讯"; break; case "23": State = "å çµå£2æ æ³ä¸è½¦æºéè®¯ï¼æä¸ç¨ï¼"; default: } return State; } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/C3FinishChargingReqInnerFrame.java
@@ -22,7 +22,7 @@ @Override public String getEncodeFrame() { String functionCode = C3ChargingEnum.FinishCharging.getCode(); String functionCode = C3ChargingEnum.FinishOrder.getCode(); String payloadLength = "0004"; String frame = functionCode + payloadLength + payload; return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase()); ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/C3ChargingEnum.java
@@ -8,8 +8,40 @@ public enum C3ChargingEnum { //å¼å§å çµ StartCharging("01"), //ç»æå çµ FinishCharging("02"), //åæ¥ç»æ EndOfTheSynchronization("04"), //äºç»´ç QrCode("05"), //ç»æè®¢å FinishOrder("09"), //æ¥è¯¢çæ¬ QueryVersion("10"), //æ¥è¯¢å¿è·³å é´éæ¶é´ QueryIntervalTime("11"), //æ¥è¯¢çµå/çµæµå¸¸æ° QueryConstant("12"), //æ¥è¯¢å°å(ææ¶ä¸ç¨å°ï¼ QueryAddress("13"), //æ¥è¯¢æ éç QueryFaultCode("14"), //读å¿è·³å ReadTheHeartbeatPackage("15"), //设置å¿è·³å æ¶é´(ç§ï¼-å çµç¶ææ¶ SetHeartbeatPacketTimeCharging("20"), //设置å¿è·³å é´éæ¶é´(ç§ï¼-éå çµç¶ææ¶ SetHeartbeatPacketTimeNotCharging("21"), //设置çµå/çµæµå¸¸æ°(åä¸åè)(é»è®¤å¼0xBC64) SetConstant("22"), //设置å°å SetAddress("23"), //设置æ¥åï¼åå¿è·³å ä¸ç6åèæ¥ææ¶é´ï¼ SetCalendar("24"), //设置费çï¼å¼å§æ¶é´1ï¼è´¹ç1ï¼å¼å§æ¶é´2ï¼è´¹ç2ï¼å¼å§æ¶é´3ï¼è´¹ç3ï¼å¼å§æ¶é´ï¼è´¹ç5ï¼å¼å§æ¶é´ï¼è´¹ç5ï¼ SetRate("25"), //æ éç 䏿¥æ¸ é¤ ClearedFaultCode("26"), //æ¢å¤åºåå¼ RestoreFactoryValue("29"), //软éå¯ RestartCharging("2B"); @@ -19,7 +51,7 @@ return code; } C3ChargingEnum(String code){ C3ChargingEnum(String code) { this.code = code; } } ximon-admin/src/main/java/com/sandu/ximon/admin/security/PermissionConfig.java
@@ -22,10 +22,10 @@ if (loginUserInfo == null || loginUserInfo.getPermission() == null) { return false; } // å®¢æ·æ²¡ææé管ç if(AdministratorEnums.CUSTOMER.getCode().equals(loginUserInfo.getAdministratorType())){ return true; } // // å®¢æ·æ²¡ææé管ç // if(AdministratorEnums.CUSTOMER.getCode().equals(loginUserInfo.getAdministratorType())){ // return true; // } String[] split = loginUserInfo.getPermission().split(","); // è·åå½åç¨æ·çæææé List<String> elPermissions = Arrays.stream(split).collect(Collectors.toList()); ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java
@@ -2,20 +2,25 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.sandu.common.execption.BusinessException; import com.sandu.common.object.BaseConditionVO; import com.sandu.common.service.impl.BaseServiceImpl; import com.sandu.ximon.admin.manager.iot.amqp.processor.c3ChargingProcessor; import com.sandu.ximon.admin.manager.iot.frame.A5Frame; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3HeartbeatReportInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3OperationReportInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.request.C3FinishChargingReqInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.request.C3RestartChargingReqInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.request.C3StartChargingReqInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame; import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum; import com.sandu.ximon.admin.manager.iot.rrpc.enums.C3ChargingEnum; import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService; import com.sandu.ximon.admin.utils.RedisUtils; import com.sandu.ximon.dao.domain.C3mCharging; import com.sandu.ximon.dao.mapper.C3mChargingMapper; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.List; @@ -26,6 +31,7 @@ * @date 2022/3/4 9:58 */ @Service @Slf4j @AllArgsConstructor public class C3ChargingService extends BaseServiceImpl<C3mChargingMapper, C3mCharging> { @@ -69,7 +75,7 @@ * @param chargingCapacity * @param chargeAmount */ public void startCharging(String c3Mac, Integer chargingCapacity, Double chargeAmount) { public String startCharging(String c3Mac, Integer chargingCapacity, Double chargeAmount) { C3StartChargingReqInnerFrame c3StartChargingReqInnerFrame = new C3StartChargingReqInnerFrame(c3Mac, chargingCapacity, chargeAmount); @@ -78,6 +84,19 @@ CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC("32313243305008ff0a04ffff", a5Frame); System.out.println(commonFrame + " -----commonFrame"); // String functionCode = commonFrame.getPayload().substring(2, 4); // if (C3ChargingEnum.StartCharging.getCode().equals(functionCode)) {} A5C3OperationReportInnerFrame operationReportInnerFrame = new A5C3OperationReportInnerFrame().transformFrame(commonFrame.getPayload()); if (operationReportInnerFrame.isValidate()) { return operationReportInnerFrame.getState(); } else { throw new BusinessException("æ°æ®æ ¡éªé误ï¼è¯·éæ°è¯·æ±"); } } /** @@ -85,7 +104,7 @@ * * @param c3Mac */ public void finishCharging(String c3Mac) { public String finishCharging(String c3Mac) { C3FinishChargingReqInnerFrame c3FinishChargingReqInnerFrame = new C3FinishChargingReqInnerFrame(c3Mac); @@ -94,6 +113,14 @@ CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC("32313243305008ff0a04ffff", a5Frame); System.out.println(commonFrame + " -----commonFrame"); A5C3OperationReportInnerFrame operationReportInnerFrame = new A5C3OperationReportInnerFrame().transformFrame(commonFrame.getPayload()); if (operationReportInnerFrame.isValidate()) { return operationReportInnerFrame.getState(); } else { throw new BusinessException("æ°æ®æ ¡éªé误ï¼è¯·éæ°è¯·æ±"); } } /** @@ -101,7 +128,7 @@ * * @param c3Mac */ public void restartCharging(String c3Mac) { public String restartCharging(String c3Mac) { C3RestartChargingReqInnerFrame c3RestartChargingReqInnerFrame = new C3RestartChargingReqInnerFrame(c3Mac); @@ -110,5 +137,13 @@ CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC("32313243305008ff0a04ffff", a5Frame); System.out.println(commonFrame + " -----commonFrame"); A5C3OperationReportInnerFrame operationReportInnerFrame = new A5C3OperationReportInnerFrame().transformFrame(commonFrame.getPayload()); if (operationReportInnerFrame.isValidate()) { return operationReportInnerFrame.getState(); } else { throw new BusinessException("æ°æ®æ ¡éªé误ï¼è¯·éæ°è¯·æ±"); } } }