增加平台远程重启桩协议

This commit is contained in:
panshuling321 2022-08-01 12:16:30 +08:00
parent 9c60a1a5a5
commit a11070cd04
6 changed files with 164 additions and 1 deletions

View File

@ -186,6 +186,21 @@ public class XhpcChargingPileController extends BaseController {
} }
// 远程重启桩
@GetMapping("/restart")
public AjaxResult pileRestart(String serialNumber) {
if(serialNumber==null || "".equals(serialNumber)){
return AjaxResult.error("桩号为空");
}
R r = powerPileService.pileRestart(serialNumber);
if(r.getCode() !=200){
return AjaxResult.error(r.getMsg());
}
return AjaxResult.success(r.getMsg());
}
@GetMapping("/configRmReplyMessage") @GetMapping("/configRmReplyMessage")
public AjaxResult configRmReplyMessage(String serialNumber) { public AjaxResult configRmReplyMessage(String serialNumber) {
if(serialNumber==null || "".equals(serialNumber)){ if(serialNumber==null || "".equals(serialNumber)){

View File

@ -46,4 +46,8 @@ public interface PowerPileService {
@PostMapping("/pile/{pileNo}/softwareUpgrade") @PostMapping("/pile/{pileNo}/softwareUpgrade")
R pileSoftwareUpgrade(@PathVariable("pileNo") String pileNo); R pileSoftwareUpgrade(@PathVariable("pileNo") String pileNo);
@PostMapping("/pile/{pileNo}/restart")
R pileRestart(@PathVariable("pileNo") String pileNo);
} }

View File

@ -69,6 +69,12 @@ public class PowerPileFallbackFactory implements FallbackFactory<PowerPileServic
return R.fail("更新桩程序失败:" + cause.getMessage()); return R.fail("更新桩程序失败:" + cause.getMessage());
} }
@Override
public R pileRestart(String pileNo) {
return R.fail("重启桩程序失败:" + cause.getMessage());
}
}; };
} }

View File

@ -7,6 +7,7 @@ import com.xhpc.common.core.utils.HttpUtils;
import com.xhpc.common.enums.StationDeviceEnum; import com.xhpc.common.enums.StationDeviceEnum;
import com.xhpc.pp.domain.XhpcDeviceMessage; import com.xhpc.pp.domain.XhpcDeviceMessage;
import com.xhpc.pp.logic.RateModelRequestLogic; import com.xhpc.pp.logic.RateModelRequestLogic;
import com.xhpc.pp.logic.RemoteRestartDataLogic;
import com.xhpc.pp.logic.RemoteUpgradeDataLogic; import com.xhpc.pp.logic.RemoteUpgradeDataLogic;
import com.xhpc.pp.mapper.XhpcDeviceMessageMapper; import com.xhpc.pp.mapper.XhpcDeviceMessageMapper;
import com.xhpc.pp.utils.HexUtils; import com.xhpc.pp.utils.HexUtils;
@ -204,6 +205,68 @@ public class PileController {
} }
@PostMapping("pile/{pileNo}/restart")
public R pileRestart(@PathVariable("pileNo") String pileNo) {
String pkey = "pile:".concat(pileNo);
Map<String, Object> cachePile = REDIS.getCacheMap(pkey);
R<Object> r = checkPile(cachePile);
if (r.getCode() == 200) {
String svcSrv = (String) cachePile.get("svcSrv");
String response = HttpUtils.post(fmt(svcSrv).concat("/native/pile/").concat(pileNo).concat("/restart"));
r = getRR(response);
}
return r;
}
@PostMapping("native/pile/{pileNo}/restart")
public R nativePileRestart(@PathVariable("pileNo") String pileNo) {
ClientHandler handler = getHandler(pileNo);
R r = R.fail("充电桩重启失败,充电桩未注册.");
if (handler != null && handler.isOpen()) {
if (!handler.isOpen()) {
log.error("send message failed. [{}]({}) connection lost", handler.getName(), pileNo);
removeHandler(pileNo);
r = R.fail("充电桩连接已断开,请稍后再试.");
} else {
String gkPattern = ("gun:").concat(pileNo).concat("*");
Collection<String> gks = REDIS.keys(gkPattern);
boolean charging = false;
for (String gk : gks) {
if (gk.length() == 20 && isInteger(REDIS.getCacheMapValue(gk, "status"))) {
charging = true;
break;
}
}
int runFlag = charging ? 2: 1;
try {
String rsmsg = RemoteRestartDataLogic.translate(pileNo, runFlag);
handler.sendClientBinary(HexUtils.toBytes(rsmsg));
r = R.ok("充电桩重启下发成功.");
XhpcDeviceMessage deviceMessage = new XhpcDeviceMessage();
deviceMessage.setType(StationDeviceEnum.PILE.getCode());
deviceMessage.setSerialNumber(pileNo);
deviceMessage.setRemark("充电桩主动下发远程重启");
deviceMessage.setStatus(0);
deviceMessage.setContent(rsmsg);
deviceMessageMapper.insertByDomain(deviceMessage);
} catch (Exception e) {
r = R.fail("充电桩重启下发失败,请重试.");
}
}
}
return r;
}
@PostMapping("pile/{pileNo}/softwareUpgrade") @PostMapping("pile/{pileNo}/softwareUpgrade")
public R pileSoftwareUpgrade(@PathVariable("pileNo") String pileNo) { public R pileSoftwareUpgrade(@PathVariable("pileNo") String pileNo) {

View File

@ -7,7 +7,6 @@ import com.xhpc.pp.mapper.XhpcDeviceMessageMapper;
import com.xhpc.pp.tx.ServiceParameter; import com.xhpc.pp.tx.ServiceParameter;
import com.xhpc.pp.tx.ServiceResult; import com.xhpc.pp.tx.ServiceResult;
import com.xhpc.pp.tx.logic.ServiceLogic; import com.xhpc.pp.tx.logic.ServiceLogic;
import com.xhpc.pp.utils.HexUtils;
import com.xhpc.pp.utils.security.CRCCalculator; import com.xhpc.pp.utils.security.CRCCalculator;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -106,4 +105,10 @@ public class RegisterLogic implements ServiceLogic {
REDIS.setCacheSet(svcSrvKey, svcPileGuns); REDIS.setCacheSet(svcSrvKey, svcPileGuns);
} }
public static void main(String[] args) {
String version = new String(toBytes("332E340000000000"));
System.out.println("version: " + version);
}
} }

View File

@ -0,0 +1,70 @@
package com.xhpc.pp.logic;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.xhpc.common.enums.StationDeviceEnum;
import com.xhpc.pp.domain.XhpcDeviceMessage;
import com.xhpc.pp.mapper.XhpcDeviceMessageMapper;
import com.xhpc.pp.tx.ServiceParameter;
import com.xhpc.pp.tx.ServiceResult;
import com.xhpc.pp.tx.logic.ServiceLogic;
import com.xhpc.pp.utils.HexUtils;
import com.xhpc.pp.utils.security.CRCCalculator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Map;
import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS;
import static com.xhpc.common.data.redis.StaticBeanUtil.seqHex;
@Lazy
@Component("RemoteRestartDataLogic")
public class RemoteRestartDataLogic implements ServiceLogic {
private static final Logger log = LoggerFactory.getLogger(RemoteRestartDataLogic.class);
@Resource
XhpcDeviceMessageMapper deviceMessageMapper;
@Override
public ServiceResult service(ServiceParameter sp) throws Exception {
Map<String, Object> req = sp.getParameters();
String pileNo = (String) req.get("pileNo");
Map<String, Object> cachePile = REDIS.getCacheMap("pile:".concat(pileNo));
if(!"已注册".equals(cachePile.get("status").toString())){
ObjectMapper mapper = new ObjectMapper();
ObjectNode json = mapper.createObjectNode();
json.put("error", "桩未注册");
return new ServiceResult(null, ServiceResult.FAIL, json);
}
String resultStr = translate(pileNo, 2);
String remark = "充电桩主动下发远程重启";
XhpcDeviceMessage deviceMessage = new XhpcDeviceMessage();
deviceMessage.setType(StationDeviceEnum.PILE.getCode());
deviceMessage.setSerialNumber(sp.getPileNo());
deviceMessage.setRemark(remark);
deviceMessage.setStatus(0);
deviceMessage.setContent(resultStr);
deviceMessageMapper.insertByDomain(deviceMessage);
return new ServiceResult(HexUtils.toBytes(resultStr), ServiceResult.OK);
}
public static String translate(String pileNo, int runFlag) {
String skey = "pile:".concat(pileNo).concat(".seqhex");
String resultStr = "680C".concat(seqHex(skey)).concat("0092")
.concat(pileNo).concat(String.format("%02x", runFlag));
resultStr = resultStr.concat(CRCCalculator.calcCrc(resultStr));
return resultStr;
}
}