新增多个异常检测位置

This commit is contained in:
andy 2026-07-06 08:54:13 +08:00
parent e81b4f46c2
commit 78e746ece1
9 changed files with 311 additions and 111 deletions

View File

@ -5,9 +5,14 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="ec76006e-5a88-4766-9722-bc8eda172857" name="Changes" comment=""> <list default="true" id="ec76006e-5a88-4766-9722-bc8eda172857" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/commoms/core/src/main/java/com/evotech/hd/core/enums/SwapBatteryStepEnum.java" beforeDir="false" afterPath="$PROJECT_DIR$/commoms/core/src/main/java/com/evotech/hd/core/enums/SwapBatteryStepEnum.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/commoms/core/src/main/resources/application-core.yml" beforeDir="false" afterPath="$PROJECT_DIR$/commoms/core/src/main/resources/application-core.yml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/mqtt/MessageTopic.java" beforeDir="false" afterPath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/mqtt/MessageTopic.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/commoms/mongodb/src/main/resources/application-mongoDev.yml" beforeDir="false" afterPath="$PROJECT_DIR$/commoms/mongodb/src/main/resources/application-mongoDev.yml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/controller/TestController.java" beforeDir="false" afterPath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/controller/TestController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/job/service/ExecutionBatterySwapService.java" beforeDir="false" afterPath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/job/service/ExecutionBatterySwapService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/service/impl/BatteryCompartmentServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/service/impl/BatteryCompartmentServiceImpl.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/utils/ParamUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/utils/ParamUtils.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/utils/sendCloud/CloudSendInfoUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/utils/sendCloud/CloudSendInfoUtils.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/utils/sendCloud/CloudSendInfoUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/utils/sendCloud/CloudSendInfoUtils.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/web-server/src/main/resources/application-dev.yml" beforeDir="false" afterPath="$PROJECT_DIR$/web-server/src/main/resources/application-dev.yml" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -31,8 +36,7 @@
<component name="MavenImportPreferences"> <component name="MavenImportPreferences">
<option name="generalSettings"> <option name="generalSettings">
<MavenGeneralSettings> <MavenGeneralSettings>
<option name="localRepository" value="D:\andy\apache-maven-3.6.3\repository" /> <option name="userSettingsFile" value="E:\andy\apache-maven-3.6.3\conf\settings.xml" />
<option name="userSettingsFile" value="D:\andy\apache-maven-3.6.3\conf\settings.xml" />
</MavenGeneralSettings> </MavenGeneralSettings>
</option> </option>
</component> </component>
@ -86,8 +90,9 @@
&quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;, &quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
&quot;Spring Boot.WebServerApplication.executor&quot;: &quot;Debug&quot;, &quot;Spring Boot.WebServerApplication.executor&quot;: &quot;Debug&quot;,
&quot;git-widget-placeholder&quot;: &quot;master&quot;, &quot;git-widget-placeholder&quot;: &quot;master&quot;,
&quot;ignore.virus.scanning.warn.message&quot;: &quot;true&quot;,
&quot;kotlin-language-version-configured&quot;: &quot;true&quot;, &quot;kotlin-language-version-configured&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;D:/andy/ideaWorker/station-control/web-server/src/main/resources/mapper&quot;, &quot;last_opened_file_path&quot;: &quot;E:/andy/ideaWorker/station-control&quot;,
&quot;node.js.detected.package.eslint&quot;: &quot;true&quot;, &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
&quot;node.js.detected.package.tslint&quot;: &quot;true&quot;, &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;, &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
@ -96,7 +101,7 @@
&quot;project.structure.last.edited&quot;: &quot;Project&quot;, &quot;project.structure.last.edited&quot;: &quot;Project&quot;,
&quot;project.structure.proportion&quot;: &quot;0.15&quot;, &quot;project.structure.proportion&quot;: &quot;0.15&quot;,
&quot;project.structure.side.proportion&quot;: &quot;0.2&quot;, &quot;project.structure.side.proportion&quot;: &quot;0.2&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;fileTemplates&quot;, &quot;settings.editor.selected.configurable&quot;: &quot;MavenSettings&quot;,
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot; &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
} }
}</component> }</component>
@ -216,9 +221,9 @@
<list> <list>
<item itemvalue="Application.CloudSendInfoUtils" /> <item itemvalue="Application.CloudSendInfoUtils" />
<item itemvalue="Application.DataUtils" /> <item itemvalue="Application.DataUtils" />
<item itemvalue="Application.test111" />
<item itemvalue="Application.TestController" /> <item itemvalue="Application.TestController" />
<item itemvalue="Application.XmlRpcHttpDirectCall" /> <item itemvalue="Application.XmlRpcHttpDirectCall" />
<item itemvalue="Application.test111" />
<item itemvalue="Spring Boot.WebServerApplication" /> <item itemvalue="Spring Boot.WebServerApplication" />
</list> </list>
<recent_temporary> <recent_temporary>
@ -380,7 +385,30 @@
<workItem from="1768987212149" duration="43024000" /> <workItem from="1768987212149" duration="43024000" />
<workItem from="1769503255745" duration="104829000" /> <workItem from="1769503255745" duration="104829000" />
<workItem from="1771808159438" duration="2384000" /> <workItem from="1771808159438" duration="2384000" />
<workItem from="1771813138867" duration="22007000" /> <workItem from="1771813138867" duration="29469000" />
<workItem from="1772069861662" duration="592000" />
<workItem from="1772074387857" duration="28620000" />
<workItem from="1773017896803" duration="2333000" />
<workItem from="1773111217952" duration="612000" />
<workItem from="1773219373047" duration="6000" />
<workItem from="1773476095685" duration="4000" />
<workItem from="1773481286873" duration="11510000" />
<workItem from="1773816984584" duration="14780000" />
<workItem from="1774492006073" duration="11336000" />
<workItem from="1776328369112" duration="2210000" />
<workItem from="1776475073840" duration="6622000" />
<workItem from="1777001049911" duration="2561000" />
<workItem from="1777017231989" duration="596000" />
<workItem from="1777076946116" duration="150000" />
<workItem from="1777250309275" duration="637000" />
<workItem from="1778145530415" duration="7000" />
<workItem from="1779694307815" duration="46000" />
<workItem from="1779694510296" duration="216000" />
<workItem from="1780020423057" duration="300000" />
<workItem from="1780288599862" duration="312000" />
<workItem from="1780302770434" duration="4721000" />
<workItem from="1780360636111" duration="2172000" />
<workItem from="1780449070480" duration="778000" />
</task> </task>
<servers /> <servers />
</component> </component>
@ -390,11 +418,24 @@
<component name="XDebuggerManager"> <component name="XDebuggerManager">
<breakpoint-manager> <breakpoint-manager>
<breakpoints> <breakpoints>
<line-breakpoint enabled="true" type="java-line"> <line-breakpoint enabled="true" type="java-method">
<url>file://$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/controller/TestController.java</url> <url>file://$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/controller/TestController.java</url>
<line>1480</line> <line>73</line>
<properties class="com.evotech.hd.webserver.controller.TestController" method="sendCloud">
<option name="EMULATED" value="true" />
<option name="WATCH_EXIT" value="false" />
</properties>
<option name="timeStamp" value="3" /> <option name="timeStamp" value="3" />
</line-breakpoint> </line-breakpoint>
<line-breakpoint enabled="true" type="java-method">
<url>file://$PROJECT_DIR$/web-server/src/main/java/com/evotech/hd/webserver/controller/TestController.java</url>
<line>491</line>
<properties class="com.evotech.hd.webserver.controller.TestController" method="stop">
<option name="EMULATED" value="true" />
<option name="WATCH_EXIT" value="false" />
</properties>
<option name="timeStamp" value="4" />
</line-breakpoint>
</breakpoints> </breakpoints>
</breakpoint-manager> </breakpoint-manager>
<watches-manager> <watches-manager>

View File

@ -2,4 +2,4 @@
ythd: ythd:
cloud-private-key: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALEbx7j2XmAo3NiviJIk8/Mo1RF4yT/MYmZdZRnB9iSh4koIiu/KKCGSwvViFGfmP/q8TNLWsvpTVo3MxWBFJkWaALuo/iPu5RJ+tU1l0YXA35zZNxMuiDbmnI7wODRePUY1g5fa1ZNy5oDUQumfrXhDCoFC2AMUBn9KiMr+QQ97AgMBAAECgYAk/lF8X/Gckkx28ktLg251Nu0yZhFbQxy2lwF8HNiGFE5I+nnS1l4FjTstuBvdC+oHPHerfm8J/IhSvBfqIOd6PulJyuh5s31cdc+2SDWUzh8sBm48YHlDfjltZG2ijgM7h/+uvw1gHwXH8JQGF7ZjWguD3TJfqZ/jPFsuxoLKOQJBAOsp+f7kS5VXg6ziKzCMlWOAEfrsAO5ZhLJNMtoirbMQZYUfYxUc3KFWQMT9i9O2M752NXoeUed8a1DjmfyxaX8CQQDAzPs5EPNfpfuGsvJ79lGsH8mZcw7VdjDzmwNVVLLnSOaJxQIPTusjEJ2YmBs+ifCF30VIDpkRd/DGaj4yNgAFAkEAorh1B+6objoUHviQshNU+3iO+HV9X3AJ5eaNHWuJjbH2zVqekOlbsTehsa1Pp7sXqt7YuhtoySjKiTo0PynzuQJBAJsvovsBANQ5VubJ/NH4py6je3LPIN6Cvs4mNJ2nikUN8bps38aQoEVeJ2ve6vcAsqAe4bYpQd3ErAIZHCzwOD0CQF8hDwEGx1S4nJQpB9rmSQhoNzaEJuJKXgpAxNCQ9g4kLRZE+hpZk1kPw+VjGalyyZkY5ilXkWnqsvrprn+wW7Y= cloud-private-key: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALEbx7j2XmAo3NiviJIk8/Mo1RF4yT/MYmZdZRnB9iSh4koIiu/KKCGSwvViFGfmP/q8TNLWsvpTVo3MxWBFJkWaALuo/iPu5RJ+tU1l0YXA35zZNxMuiDbmnI7wODRePUY1g5fa1ZNy5oDUQumfrXhDCoFC2AMUBn9KiMr+QQ97AgMBAAECgYAk/lF8X/Gckkx28ktLg251Nu0yZhFbQxy2lwF8HNiGFE5I+nnS1l4FjTstuBvdC+oHPHerfm8J/IhSvBfqIOd6PulJyuh5s31cdc+2SDWUzh8sBm48YHlDfjltZG2ijgM7h/+uvw1gHwXH8JQGF7ZjWguD3TJfqZ/jPFsuxoLKOQJBAOsp+f7kS5VXg6ziKzCMlWOAEfrsAO5ZhLJNMtoirbMQZYUfYxUc3KFWQMT9i9O2M752NXoeUed8a1DjmfyxaX8CQQDAzPs5EPNfpfuGsvJ79lGsH8mZcw7VdjDzmwNVVLLnSOaJxQIPTusjEJ2YmBs+ifCF30VIDpkRd/DGaj4yNgAFAkEAorh1B+6objoUHviQshNU+3iO+HV9X3AJ5eaNHWuJjbH2zVqekOlbsTehsa1Pp7sXqt7YuhtoySjKiTo0PynzuQJBAJsvovsBANQ5VubJ/NH4py6je3LPIN6Cvs4mNJ2nikUN8bps38aQoEVeJ2ve6vcAsqAe4bYpQd3ErAIZHCzwOD0CQF8hDwEGx1S4nJQpB9rmSQhoNzaEJuJKXgpAxNCQ9g4kLRZE+hpZk1kPw+VjGalyyZkY5ilXkWnqsvrprn+wW7Y=
cloud-public-key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCxG8e49l5gKNzYr4iSJPPzKNUReMk/zGJmXWUZwfYkoeJKCIrvyighksL1YhRn5j/6vEzS1rL6U1aNzMVgRSZFmgC7qP4j7uUSfrVNZdGFwN+c2TcTLog25pyO8Dg0Xj1GNYOX2tWTcuaA1ELpn614QwqBQtgDFAZ/SojK/kEPewIDAQAB cloud-public-key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCxG8e49l5gKNzYr4iSJPPzKNUReMk/zGJmXWUZwfYkoeJKCIrvyighksL1YhRn5j/6vEzS1rL6U1aNzMVgRSZFmgC7qP4j7uUSfrVNZdGFwN+c2TcTLog25pyO8Dg0Xj1GNYOX2tWTcuaA1ELpn614QwqBQtgDFAZ/SojK/kEPewIDAQAB
static-public-key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC32MZ8u1bK66Uj+Uh3eTfDLcGy4TosSLfksYvJBavX6fckS6vdV8VeYj9gQvTrB6b3VKIdsqf/uP4AjgiKlP34GVMfDr0bEPEccurEhs23QWSHGrVSJG5HPG0B1PBbRMMUwUkmQJxo65Ml6SSPyS/4ebdZ0qeY2/cWaK8laYj7sQIDAQAB static-public-key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdc3YXAeVRGUCDjKLlc62i5tojX42DoIENqvfCX8Z2lFkalfgh0I01Qx+WeaxWxqnovv4gy32RN2bPxjKXNhK2krZ4Or9uXcbkC66rowBACesrYs/MNcFvmVZH7tLVIXTkBkE2XS20FNYeoyc0dCZ3/kgXlfxty6ztIwCmRGQpAQIDAQAB

View File

@ -1,6 +1,6 @@
yt: yt:
base_properties: base_properties:
host: 192.168.5.112 host: 192.168.5.232
port: 27017 port: 27017
#用于账号密码验证的库 #用于账号密码验证的库
authentication-database: admin authentication-database: admin

View File

@ -206,11 +206,17 @@ public class TestController {
Boolean result = false; Boolean result = false;
do{ do{
Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds()); Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds());
errorCenCheck(rgvNo, category, 0);
if (checkJt(rgvNo, category, 0)) {
return;
}
if(result = InstructionReadUtils.getCenRbDoorOpenStatus()){ if(result = InstructionReadUtils.getCenRbDoorOpenStatus()){
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format("%s 开合门已打开", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format("%s 开合门已打开", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
} }
}while (!result); }while (!result);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
stopRgv(rgvNo, category, "打开开合门出现异常=="+e.getMessage());
throw new RuntimeException("打开开合门出现异常:",e); throw new RuntimeException("打开开合门出现异常:",e);
} }
} }
@ -276,33 +282,6 @@ public class TestController {
return; return;
} }
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format("第[%s]次执行: 执行时间:[%s]; RRG:[%s], 电池仓位[%s]>>>>>存入操作完成", (runNun+1), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()), rgvNo, targetPositionNo)))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format("第[%s]次执行: 执行时间:[%s]; RRG:[%s], 电池仓位[%s]>>>>>存入操作完成", (runNun+1), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()), rgvNo, targetPositionNo))));
// InstructionWriteUtils.rgvResetToZero(rgvNo);
// openResult = false;
// do{
// errorCheck(rgvNo, category, runNun);
// if(checkJt(rgvNo, category, runNun)){
// return;
// }
// Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds());
// //跳开查询
// if(openResult = executionBatterySwapService.executionOpenResult(rgvNo)){
// WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format("第[%s]次执行: 执行时间:[%s]; RRG:[%s]>>>>>执行归位操作", (runNun+1), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()),rgvNo))));
// endResult = false;
// do{
// errorCheck(rgvNo, category, runNun);
// if(checkJt(rgvNo, category, runNun)){
// return;
// }
// Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds());
// //执行结束查询
// if(endResult = executionBatterySwapService.executionResult(rgvNo)){
// //输出
// WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format("第[%s]次执行: 执行时间:[%s]; RRG:[%s]>>>>>归位操作完成",(runNun+1), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()), rgvNo))));
// errorCheck(rgvNo, category, runNun);
// }
// }while(!endResult);
// }
// }while (!openResult);
} }
}while(!endResult); }while(!endResult);
} }
@ -319,8 +298,12 @@ public class TestController {
message = JSONObject.toJSONString(error); message = JSONObject.toJSONString(error);
} }
closeRunMap.put(rgvNo, new AtomicBoolean(true)); closeRunMap.put(rgvNo, new AtomicBoolean(true));
e.printStackTrace();
stopRgv(rgvNo, category, "执行取存电池出现异常=="+e.getMessage());
throw new RuntimeException(String.format(" 执行时间:[%s]; RRG:[%s] 出现异常; 机构区间为:{%s}; 执行类型为:{%s}; 执行次数为:{%s}; 异常信息为:{%s}",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()), rgvNo, category, "取存", (runNun+1), message), e); throw new RuntimeException(String.format(" 执行时间:[%s]; RRG:[%s] 出现异常; 机构区间为:{%s}; 执行类型为:{%s}; 执行次数为:{%s}; 异常信息为:{%s}",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()), rgvNo, category, "取存", (runNun+1), message), e);
} catch (InstructionException ex) { } catch (InstructionException ex) {
ex.printStackTrace();
stopRgv(rgvNo, category, "执行取存电池出现异常=="+ex.getMessage());
throw new RuntimeException(ex); throw new RuntimeException(ex);
} }
} }
@ -375,32 +358,6 @@ public class TestController {
return; return;
} }
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data", String.format("第[%s]次执行: 执行时间:[%s]; RRG:[%s]>>>>>执行装电池操作完成", (runNun+1),new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()), rgvNo)))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data", String.format("第[%s]次执行: 执行时间:[%s]; RRG:[%s]>>>>>执行装电池操作完成", (runNun+1),new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()), rgvNo))));
// InstructionWriteUtils.rgvResetToZero(rgvNo);
// openResult = false;
// do {
// errorCheck(rgvNo, category, runNun);
// if(checkJt(rgvNo, category, runNun)){
// return;
// }
// Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds());
// //跳开查询
// if (openResult = executionBatterySwapService.executionOpenResult(rgvNo)) {
// WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data", String.format("第[%s]次执行: 执行时间:[%s]; RRG:[%s]>>>>>执行归位操作", (runNun+1),new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()), rgvNo))));
// result = false;
// do{
// errorCheck(rgvNo, category, runNun);
// if(checkJt(rgvNo, category, runNun)){
// return;
// }
// Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds());
// if(result = executionBatterySwapService.executionResult(rgvNo)){
// //输出
// WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format("第[%s]次执行: 执行时间:[%s]; RRG:[%s]>>>>>归位操作完成",(runNun+1), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()), rgvNo))));
// errorCheck(rgvNo, category, runNun);
// }
// }while (!result);
// }
// }while (!openResult);
} }
}while(!result); }while(!result);
} }
@ -416,9 +373,13 @@ public class TestController {
if(Collections.isNotEmpty(error)){ if(Collections.isNotEmpty(error)){
message = JSONObject.toJSONString(error); message = JSONObject.toJSONString(error);
} }
e.printStackTrace();
stopRgv(rgvNo, category, "执行拆装电池操作=="+e.getMessage());
closeRunMap.put(rgvNo, new AtomicBoolean(true)); closeRunMap.put(rgvNo, new AtomicBoolean(true));
throw new RuntimeException(String.format(" 执行时间:[%s]; RRG:[%s] 出现异常; 机构区间为:{%s}; 执行类型为:{%s}; 执行次数为:{%s}; 异常信息为:{%s}",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()), rgvNo, category, "拆装", (runNun+1), message), e); throw new RuntimeException(String.format(" 执行时间:[%s]; RRG:[%s] 出现异常; 机构区间为:{%s}; 执行类型为:{%s}; 执行次数为:{%s}; 异常信息为:{%s}",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()), rgvNo, category, "拆装", (runNun+1), message), e);
} catch (InstructionException ex) { } catch (InstructionException ex) {
ex.printStackTrace();
stopRgv(rgvNo, category, "执行拆装电池操作=="+ex.getMessage());
throw new RuntimeException(ex); throw new RuntimeException(ex);
} }
} }
@ -434,12 +395,18 @@ public class TestController {
InstructionWriteUtils.closeCenDoor(); InstructionWriteUtils.closeCenDoor();
Boolean result = false; Boolean result = false;
do{ do{
errorCenCheck(rgvNo, category, 0);
if (checkJt(rgvNo, category, 0)) {
return;
}
Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds()); Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds());
if(result = InstructionReadUtils.getCenRbDoorCloseStatus()){ if(result = InstructionReadUtils.getCenRbDoorCloseStatus()){
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format("%s 开合门已关闭", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format("%s 开合门已关闭", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
} }
}while (!result); }while (!result);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
stopRgv(rgvNo, category, "关闭开合门出现异常=="+e.getMessage());
throw new RuntimeException("关闭开合门出现异常:", e); throw new RuntimeException("关闭开合门出现异常:", e);
} }
} }
@ -506,6 +473,16 @@ public class TestController {
} }
public void errorCenCheck(final String rgvNo, final String category, final Integer runNun) throws Exception {
Map<String, Object> error = executionBatterySwapService.checkCenErrorInfo();
if(Collections.isNotEmpty(error)){
String message = JSONObject.toJSONString(error);
stopRgv(rgvNo, rgvNo, String.valueOf(error.get("errorMsg")));
throw new RuntimeException(String.format("RRG:[%s] 出现异常; 机构区间为:{%s}; 执行类型为:{%s}; 执行次数为:{%s}; 异常信息为:{%s}",rgvNo, category, "取存", (runNun+1), message));
}
}
@ -514,13 +491,14 @@ public class TestController {
@ApiLog(value = "结束", type = LogTypeEnum.OPERATION) @ApiLog(value = "结束", type = LogTypeEnum.OPERATION)
public Result stop(@PathVariable("category") final String category, @RequestParam("rgvNo") final String rgvNo) throws Exception { public Result stop(@PathVariable("category") final String category, @RequestParam("rgvNo") final String rgvNo) throws Exception {
//检查RGV是否运作 //检查RGV是否运作
if(executionBatterySwapService.executionResult(rgvNo) && taskRgvMap.containsKey(rgvNo)){ // if(executionBatterySwapService.executionResult(rgvNo) && taskRgvMap.containsKey(rgvNo)){
//睡了1秒再次检查, 防止空闲冲突 // //睡了1秒再次检查, 防止空闲冲突
Thread.sleep(1000); // Thread.sleep(1000);
if(executionBatterySwapService.executionResult(rgvNo)){ // if(executionBatterySwapService.executionResult(rgvNo)){
taskRgvMap.remove(rgvNo); // taskRgvMap.remove(rgvNo);
} // }
}else{ // }else{
//不管rgv是否运作, 直接停止
CompletableFuture<Void> future = taskRgvMap.get(rgvNo); CompletableFuture<Void> future = taskRgvMap.get(rgvNo);
future.cancel(true); future.cancel(true);
closeRunMap.put(rgvNo, new AtomicBoolean(true)); closeRunMap.put(rgvNo, new AtomicBoolean(true));
@ -617,7 +595,7 @@ public class TestController {
taskRgvMap.remove(rgvNo); taskRgvMap.remove(rgvNo);
} }
}); });
} // }
return Result.getInstance().success(); return Result.getInstance().success();
} }
@ -733,13 +711,25 @@ public class TestController {
InstructionWriteUtils.startCorrectInstitution(); InstructionWriteUtils.startCorrectInstitution();
Boolean openResult = false; Boolean openResult = false;
do { do {
errorCenCheck(rgv, category, finalRunNun);
if (checkJt(rgv, category, finalRunNun)) {
return false;
}
//检查是否存在异常 //检查是否存在异常
if (openResult = executionBatterySwapService.checkCenOpenExecutionResult()) { if (openResult = executionBatterySwapService.checkCenOpenExecutionResult()) {
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构正在执行", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构正在执行", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
Boolean result = false; Boolean result = false;
do { do {
errorCenCheck(rgv, category, finalRunNun);
if (checkJt(rgv, category, finalRunNun)) {
return false;
}
if(result = executionBatterySwapService.checkCenExecutionResult()){ if(result = executionBatterySwapService.checkCenExecutionResult()){
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构已锁定", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构已锁定", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
errorCenCheck(rgv, category, finalRunNun);
if (checkJt(rgv, category, finalRunNun)) {
return false;
}
// 推送云端, 并查询是否存在异常 没有异常, 开始启动换电 // 推送云端, 并查询是否存在异常 没有异常, 开始启动换电
return true; return true;
} }
@ -748,6 +738,8 @@ public class TestController {
} }
}while (!openResult); }while (!openResult);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
stopRgv(rgv, finalSplitStorageRgv, "启动对中机构出现异常=="+e.getMessage());
throw new RuntimeException("启动对中机构出现异常:",e); throw new RuntimeException("启动对中机构出现异常:",e);
} }
return false; return false;
@ -764,13 +756,23 @@ public class TestController {
InstructionWriteUtils.openCenDoor(); InstructionWriteUtils.openCenDoor();
Boolean result = false; Boolean result = false;
do{ do{
errorCenCheck(rgv, category, finalRunNun);
if (checkJt(rgv, category, finalRunNun)) {
return false;
}
Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds()); Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds());
if(result = InstructionReadUtils.getCenRbDoorOpenStatus()){ if(result = InstructionReadUtils.getCenRbDoorOpenStatus()){
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 开合门已打开", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 开合门已打开", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
errorCenCheck(rgv, category, finalRunNun);
if (checkJt(rgv, category, finalRunNun)) {
return false;
}
return true; return true;
} }
}while (!result); }while (!result);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
stopRgv(rgv, finalSplitStorageRgv, "打开开合门出现异常=="+e.getMessage());
throw new RuntimeException("打开开合门出现异常:",e); throw new RuntimeException("打开开合门出现异常:",e);
} }
} }
@ -1048,14 +1050,24 @@ public class TestController {
InstructionWriteUtils.closeCenDoor(); InstructionWriteUtils.closeCenDoor();
Boolean result = false; Boolean result = false;
do{ do{
errorCenCheck(rgv, category, finalRunNun);
if (checkJt(rgv, category, finalRunNun)) {
return false;
}
Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds()); Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds());
if(result = InstructionReadUtils.getCenRbDoorCloseStatus()){ if(result = InstructionReadUtils.getCenRbDoorCloseStatus()){
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format("%s 开合门已关闭", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format("%s 开合门已关闭", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
errorCenCheck(rgv, category, finalRunNun);
if (checkJt(rgv, category, finalRunNun)) {
return false;
}
return true; return true;
} }
}while (!result); }while (!result);
//开门完成 //开门完成
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
stopRgv(rgv, finalLoadingRgv, "关闭开合门出现异常=="+e.getMessage());
throw new RuntimeException("关闭开合门出现异常:", e); throw new RuntimeException("关闭开合门出现异常:", e);
} }
} }
@ -1073,14 +1085,26 @@ public class TestController {
InstructionWriteUtils.closeCorrectInstitution(); InstructionWriteUtils.closeCorrectInstitution();
Boolean openResult = false; Boolean openResult = false;
do { do {
errorCenCheck(rgv, category, finalRunNun);
if (checkJt(rgv, category, finalRunNun)) {
return false;
}
//检查是否存在异常 //检查是否存在异常
if (openResult = executionBatterySwapService.checkCenOpenExecutionResult()) { if (openResult = executionBatterySwapService.checkCenOpenExecutionResult()) {
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构正在执行", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构正在执行", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
Boolean result = false; Boolean result = false;
do { do {
errorCenCheck(rgv, category, finalRunNun);
if (checkJt(rgv, category, finalRunNun)) {
return false;
}
if(result = executionBatterySwapService.checkCenExecutionResult()){ if(result = executionBatterySwapService.checkCenExecutionResult()){
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构已释放", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构已释放", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
// 推送云端, 并查询是否存在异常 没有异常, 开始启动换电 // 推送云端, 并查询是否存在异常 没有异常, 开始启动换电
errorCenCheck(rgv, category, finalRunNun);
if (checkJt(rgv, category, finalRunNun)) {
return false;
}
return true; return true;
} }
}while (!result); }while (!result);
@ -1088,6 +1112,8 @@ public class TestController {
} }
}while (!openResult); }while (!openResult);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
stopRgv(rgv, finalLoadingRgv, e.getMessage());
throw new RuntimeException("释放对中机构出现异常:",e); throw new RuntimeException("释放对中机构出现异常:",e);
} }
} }
@ -1159,13 +1185,14 @@ public class TestController {
String rgv = splitStorageRgvNo+"_"+takePackRgvNo; String rgv = splitStorageRgvNo+"_"+takePackRgvNo;
//检查RGV是否运作 //检查RGV是否运作
if(executionBatterySwapService.executionResult(splitStorageRgvNo) && executionBatterySwapService.executionResult(takePackRgvNo) && taskRgvMap.containsKey(rgv)){ // if(executionBatterySwapService.executionResult(splitStorageRgvNo) && executionBatterySwapService.executionResult(takePackRgvNo) && taskRgvMap.containsKey(rgv)){
//睡了1秒再次检查, 防止空闲冲突 // //睡了1秒再次检查, 防止空闲冲突
Thread.sleep(1000); // Thread.sleep(1000);
if(executionBatterySwapService.executionResult(splitStorageRgvNo) && executionBatterySwapService.executionResult(takePackRgvNo)){ // if(executionBatterySwapService.executionResult(splitStorageRgvNo) && executionBatterySwapService.executionResult(takePackRgvNo)){
taskRgvMap.remove(rgv); // taskRgvMap.remove(rgv);
} // }
}else{ // }else{
//无论rgv是否运作, 直接定制
CompletableFuture<Void> future = taskRgvMap.get(rgv); CompletableFuture<Void> future = taskRgvMap.get(rgv);
if(future == null){ if(future == null){
return Result.getInstance().success("当前任务已停止"); return Result.getInstance().success("当前任务已停止");
@ -1277,7 +1304,7 @@ public class TestController {
taskRgvMap.remove(rgv); taskRgvMap.remove(rgv);
} }
}); });
} // }
return Result.getInstance().success(); return Result.getInstance().success();
} }
@ -1304,19 +1331,30 @@ public class TestController {
return; return;
} }
//执行开门 //执行开门
int finalRunNun = runNun;
CompletableFuture<Boolean> openFuture = CompletableFuture.supplyAsync(() -> { CompletableFuture<Boolean> openFuture = CompletableFuture.supplyAsync(() -> {
try { try {
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method", "testRgv" + category, "data", String.format(" 执行时间:[%s]; 下发打开开合门命令", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method", "testRgv" + category, "data", String.format(" 执行时间:[%s]; 下发打开开合门命令", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
InstructionWriteUtils.openCenDoor(); InstructionWriteUtils.openCenDoor();
Boolean result = false; Boolean result = false;
do { do {
errorCheck("door", category, finalRunNun);
if(checkJt("door", category, finalRunNun)){
return false;
}
Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds()); Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds());
if (result = InstructionReadUtils.getCenRbDoorOpenStatus()) { if (result = InstructionReadUtils.getCenRbDoorOpenStatus()) {
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method", "testRgv" + category, "data", String.format(" 执行时间:[%s]; 开合门已打开", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method", "testRgv" + category, "data", String.format(" 执行时间:[%s]; 开合门已打开", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
errorCheck("door", category, finalRunNun);
if(checkJt("door", category, finalRunNun)){
return false;
}
return true; return true;
} }
} while (!result); } while (!result);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
stopRgv("door", category, "打开开合门出现异常=="+e.getMessage());
throw new RuntimeException("打开开合门出现异常:", e); throw new RuntimeException("打开开合门出现异常:", e);
} }
return false; return false;
@ -1331,14 +1369,24 @@ public class TestController {
InstructionWriteUtils.closeCenDoor(); InstructionWriteUtils.closeCenDoor();
Boolean result = false; Boolean result = false;
do { do {
errorCheck("door", category, finalRunNun);
if(checkJt("door", category, finalRunNun)){
return false;
}
Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds()); Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds());
if (result = InstructionReadUtils.getCenRbDoorCloseStatus()) { if (result = InstructionReadUtils.getCenRbDoorCloseStatus()) {
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method", "testRgv" + category, "data", String.format("%s 开合门已关闭", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method", "testRgv" + category, "data", String.format("%s 开合门已关闭", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
errorCheck("door", category, finalRunNun);
if(checkJt("door", category, finalRunNun)){
return false;
}
return true; return true;
} }
} while (!result); } while (!result);
//开门完成 //开门完成
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
stopRgv("door", category, "关闭开合门出现异常=="+e.getMessage());
throw new RuntimeException("关闭开合门出现异常:", e); throw new RuntimeException("关闭开合门出现异常:", e);
} }
return false; return false;
@ -1458,13 +1506,25 @@ public class TestController {
InstructionWriteUtils.startCorrectInstitution(); InstructionWriteUtils.startCorrectInstitution();
Boolean openResult = false; Boolean openResult = false;
do { do {
errorCenCheck(rgv, category, 0);
if (checkJt(rgv, category, 0)) {
return false;
}
//检查是否存在异常 //检查是否存在异常
if (openResult = executionBatterySwapService.checkCenOpenExecutionResult()) { if (openResult = executionBatterySwapService.checkCenOpenExecutionResult()) {
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构正在执行", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构正在执行", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
Boolean result = false; Boolean result = false;
do { do {
errorCenCheck(rgv, category, 0);
if (checkJt(rgv, category, 0)) {
return false;
}
if(result = executionBatterySwapService.checkCenExecutionResult()){ if(result = executionBatterySwapService.checkCenExecutionResult()){
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构已锁定", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构已锁定", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
errorCenCheck(rgv, category, 0);
if (checkJt(rgv, category, 0)) {
return false;
}
// 推送云端, 并查询是否存在异常 没有异常, 开始启动换电 // 推送云端, 并查询是否存在异常 没有异常, 开始启动换电
return true; return true;
} }
@ -1473,6 +1533,8 @@ public class TestController {
} }
}while (!openResult); }while (!openResult);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
stopRgv(rgv, category, "启动对中机构出现异常=="+e.getMessage());
throw new RuntimeException("启动对中机构出现异常:",e); throw new RuntimeException("启动对中机构出现异常:",e);
} }
return false; return false;
@ -1489,13 +1551,23 @@ public class TestController {
InstructionWriteUtils.openCenDoor(); InstructionWriteUtils.openCenDoor();
Boolean result = false; Boolean result = false;
do{ do{
errorCenCheck(rgv, category, 0);
if (checkJt(rgv, category, 0)) {
return false;
}
Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds()); Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds());
if(result = InstructionReadUtils.getCenRbDoorOpenStatus()){ if(result = InstructionReadUtils.getCenRbDoorOpenStatus()){
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 开合门已打开", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 开合门已打开", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
errorCenCheck(rgv, category, 0);
if (checkJt(rgv, category, 0)) {
return false;
}
return true; return true;
} }
}while (!result); }while (!result);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
stopRgv(rgv, category, "打开开合门出现异常=="+e.getMessage());
throw new RuntimeException("打开开合门出现异常:",e); throw new RuntimeException("打开开合门出现异常:",e);
} }
} }
@ -1723,14 +1795,24 @@ public class TestController {
InstructionWriteUtils.closeCenDoor(); InstructionWriteUtils.closeCenDoor();
Boolean result = false; Boolean result = false;
do{ do{
errorCenCheck(rgv, category, 0);
if (checkJt(rgv, category, 0)) {
return false;
}
Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds()); Thread.sleep(ParamUtils.getInstructionIntervalRequestMilliseconds());
if(result = InstructionReadUtils.getCenRbDoorCloseStatus()){ if(result = InstructionReadUtils.getCenRbDoorCloseStatus()){
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format("%s 开合门已关闭", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format("%s 开合门已关闭", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
errorCenCheck(rgv, category, 0);
if (checkJt(rgv, category, 0)) {
return false;
}
return true; return true;
} }
}while (!result); }while (!result);
//开门完成 //开门完成
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
stopRgv(rgv, category, "关闭开合门出现异常=="+e.getMessage());
throw new RuntimeException("关闭开合门出现异常:", e); throw new RuntimeException("关闭开合门出现异常:", e);
} }
} }
@ -1748,11 +1830,19 @@ public class TestController {
InstructionWriteUtils.closeCorrectInstitution(); InstructionWriteUtils.closeCorrectInstitution();
Boolean openResult = false; Boolean openResult = false;
do { do {
errorCenCheck(rgv, category, 0);
if (checkJt(rgv, category, 0)) {
return false;
}
//检查是否存在异常 //检查是否存在异常
if (openResult = executionBatterySwapService.checkCenOpenExecutionResult()) { if (openResult = executionBatterySwapService.checkCenOpenExecutionResult()) {
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构正在执行", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构正在执行", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
Boolean result = false; Boolean result = false;
do { do {
errorCenCheck(rgv, category, 0);
if (checkJt(rgv, category, 0)) {
return false;
}
if(result = executionBatterySwapService.checkCenExecutionResult()){ if(result = executionBatterySwapService.checkCenExecutionResult()){
WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构已释放", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))))); WebSocketUtils.broadCastMessage(JSONObject.toJSONString(Collections.asMap("method","testRgv"+category,"data",String.format(" 执行时间:[%s]; 对中机构已释放", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())))));
// 推送云端, 并查询是否存在异常 没有异常, 开始启动换电 // 推送云端, 并查询是否存在异常 没有异常, 开始启动换电
@ -1763,6 +1853,8 @@ public class TestController {
} }
}while (!openResult); }while (!openResult);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
stopRgv(rgv, category, "释放对中机构出现异常=="+e.getMessage());
throw new RuntimeException("释放对中机构出现异常:",e); throw new RuntimeException("释放对中机构出现异常:",e);
} }
} }
@ -1830,21 +1922,22 @@ public class TestController {
String rgv = splitStorageRgvNo; String rgv = splitStorageRgvNo;
//检查RGV是否运作 //检查RGV是否运作
if(executionBatterySwapService.executionResult(splitStorageRgvNo) && taskRgvMap.containsKey(rgv)){ // if(executionBatterySwapService.executionResult(splitStorageRgvNo) && taskRgvMap.containsKey(rgv)){
//睡了1秒再次检查, 防止空闲冲突 // //睡了1秒再次检查, 防止空闲冲突
Thread.sleep(1000); // Thread.sleep(1000);
if(executionBatterySwapService.executionResult(splitStorageRgvNo)){ // if(executionBatterySwapService.executionResult(splitStorageRgvNo)){
CompletableFuture<Void> future = taskRgvMap.get(rgv); // CompletableFuture<Void> future = taskRgvMap.get(rgv);
if(future == null){ // if(future == null){
return Result.getInstance().success("当前任务已停止"); // return Result.getInstance().success("当前任务已停止");
} // }
future.cancel(true); // future.cancel(true);
closeRunMap.put(rgv, new AtomicBoolean(true)); // closeRunMap.put(rgv, new AtomicBoolean(true));
InstructionWriteUtils.rgvStopMove(splitStorageRgvNo); // InstructionWriteUtils.rgvStopMove(splitStorageRgvNo);
checkJt(rgv, category, 0); // checkJt(rgv, category, 0);
taskRgvMap.remove(rgv); // taskRgvMap.remove(rgv);
} // }
}else{ // }else{
//无论rgv是否运作, 直接停止
CompletableFuture<Void> future = taskRgvMap.get(rgv); CompletableFuture<Void> future = taskRgvMap.get(rgv);
if(future == null){ if(future == null){
return Result.getInstance().success("当前任务已停止"); return Result.getInstance().success("当前任务已停止");
@ -1944,7 +2037,7 @@ public class TestController {
taskRgvMap.remove(rgv); taskRgvMap.remove(rgv);
} }
}); });
} // }
return Result.getInstance().success(); return Result.getInstance().success();
} }

View File

@ -693,6 +693,11 @@ public class ExecutionBatterySwapService {
//如果为0, 则执行结束 //如果为0, 则执行结束
return Collections.isNotEmpty(executionResult(ParamUtils.getCenErrorCode())); return Collections.isNotEmpty(executionResult(ParamUtils.getCenErrorCode()));
} }
public Map<String, Object> checkCenErrorInfo() throws InstructionException {
//如果为0, 则执行结束
return executionResult(ParamUtils.getCenErrorCode());
}
//对中机构异常查询 //对中机构异常查询
public Boolean checkCenError(SwapBatteryStepEnum swapBatteryStep) throws InstructionException { public Boolean checkCenError(SwapBatteryStepEnum swapBatteryStep) throws InstructionException {
//如果为0, 则执行结束 //如果为0, 则执行结束

View File

@ -1,5 +1,6 @@
package com.evotech.hd.webserver.service.impl; package com.evotech.hd.webserver.service.impl;
import cn.hutool.json.JSONException;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -19,12 +20,15 @@ import com.evotech.hd.core.entity.business.OrderCharging;
import com.evotech.hd.core.enums.ChargerStatusEnums; import com.evotech.hd.core.enums.ChargerStatusEnums;
import com.evotech.hd.exception.InstructionException; import com.evotech.hd.exception.InstructionException;
import com.evotech.hd.utils.Collections; import com.evotech.hd.utils.Collections;
import com.evotech.hd.utils.DateUtils;
import com.evotech.hd.webserver.mapper.BatteryCompartmentMapper; import com.evotech.hd.webserver.mapper.BatteryCompartmentMapper;
import com.evotech.hd.webserver.mqtt.MqttPublishUtils;
import com.evotech.hd.webserver.service.BatteryCompartmentService; import com.evotech.hd.webserver.service.BatteryCompartmentService;
import com.evotech.hd.webserver.service.BatteryService; import com.evotech.hd.webserver.service.BatteryService;
import com.evotech.hd.webserver.service.BatteryStrategyService; import com.evotech.hd.webserver.service.BatteryStrategyService;
import com.evotech.hd.webserver.service.OrderChargingService; import com.evotech.hd.webserver.service.OrderChargingService;
import com.evotech.hd.webserver.utils.AccessStrategyUtil; import com.evotech.hd.webserver.utils.AccessStrategyUtil;
import com.evotech.hd.webserver.utils.ParamUtils;
import com.evotech.hd.webserver.utils.instruction.InstructionReadUtils; import com.evotech.hd.webserver.utils.instruction.InstructionReadUtils;
import com.evotech.hd.webserver.utils.instruction.InstructionWriteUtils; import com.evotech.hd.webserver.utils.instruction.InstructionWriteUtils;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
@ -56,10 +60,44 @@ public class BatteryCompartmentServiceImpl extends ServiceImpl<BatteryCompartmen
@Override @Override
public Result<Boolean> init(Integer maxNo) { public Result<Boolean> init(Integer maxNo) {
String stationCode = ParamUtils.findStationCode();
cn.hutool.json.JSONObject bc = new cn.hutool.json.JSONObject();
bc.put("stationCode", stationCode);
cn.hutool.json.JSONObject b = new cn.hutool.json.JSONObject();
b.put("sourceFrom", 1); //默认来源为站
b.put("sourceCode", stationCode); //默认编码为换电站编号
b.put("pointType", 1); //默认轨迹点类型为电站
b.put("pointCode", stationCode); //默认轨迹点编码为换电站编号
for (int i=1; i <= maxNo; i++){ for (int i=1; i <= maxNo; i++){
try { try {
if(buildCompartmentResult(i)){ BatteryCompartment batteryCompartment = buildCompartment(i);
batteryService.buildBattery(i); if(ObjectUtils.isNotEmpty(batteryCompartment)){
try {
//电池仓推送云端
bc.put("dccNo", batteryCompartment.getBatteryCompartmentNo());
bc.put("status", batteryCompartment.getStatus());
MqttPublishUtils.sendState("batteryCompartment",bc);
} catch (JSONException e) {
e.printStackTrace();
log.error("电池仓推送云端出现异常>>>>>>>>>", e.getCause());
}
//初始化电池
Battery battery = batteryService.buildBattery(i);
//如果仓存存在电池, 推送电池数据
if(battery != null){
// b.put("typeCode", ); //电池型号编码
// b.put("typeName",); //电池型号名称
b.put("batCode", battery.getBatteryCode()); //电池编码
// b.put("productionDate",); //生产日期
b.put("registrationDate", DateUtils.parseDateToStr("yyyyMMdd",battery.getCreateTime())); //注册时间
b.put("status", getStatus(battery.getBatteryMode())); //状态
// b.put("pointName",); //轨迹点名称
b.put("soc", battery.getSoc()); //当前电量
b.put("dccNo", i); //电池仓位号
MqttPublishUtils.sendState("battery",b);
}
//电池推送云端
}else{ }else{
break; break;
} }
@ -71,6 +109,24 @@ public class BatteryCompartmentServiceImpl extends ServiceImpl<BatteryCompartmen
return Result.getInstance().build(Boolean.class).success(true); return Result.getInstance().build(Boolean.class).success(true);
} }
Integer getStatus(String mode){
if(StringUtils.isEmpty(mode)){
return 5;
}
switch (mode){
case "0":
return 3;
case "3":
case "4":
return 2;
case "7":
case "8":
return 4;
default:
return 5;
}
}
@Override @Override
public IPage<BatteryCompartmentDTO> findPageList(Page<BatteryCompartmentDTO> page, QueryWrapper queryWrapper) { public IPage<BatteryCompartmentDTO> findPageList(Page<BatteryCompartmentDTO> page, QueryWrapper queryWrapper) {
queryWrapper.orderByAsc("a.id");// 根据预约日期和预约时间段倒序排序 queryWrapper.orderByAsc("a.id");// 根据预约日期和预约时间段倒序排序

View File

@ -1,7 +1,9 @@
package com.evotech.hd.webserver.utils; package com.evotech.hd.webserver.utils;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.evotech.hd.core.dtos.system.ParamsDTO; import com.evotech.hd.core.dtos.system.ParamsDTO;
import com.evotech.hd.webserver.service.BatteryCompartmentService;
import com.evotech.hd.webserver.service.ParamsService; import com.evotech.hd.webserver.service.ParamsService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -377,6 +379,7 @@ public class ParamUtils {
return paramService.getParamsDTOByCode(code); return paramService.getParamsDTOByCode(code);
} }
public static void encryptKeyReq(cn.hutool.json.JSONObject jsonObject){ public static void encryptKeyReq(cn.hutool.json.JSONObject jsonObject){
try { try {
String encryptVector = jsonObject.getStr("encryptVector"); String encryptVector = jsonObject.getStr("encryptVector");
@ -387,6 +390,9 @@ public class ParamUtils {
if(StringUtils.isNotEmpty(encryptKey)){ if(StringUtils.isNotEmpty(encryptKey)){
paramService.getOrUpdateParamsDTO("站点AES公钥", ParamsConstant.STATION_AES_PUBLIC_KEY,encryptKey,"软件初始安装时, 直接初始化"); paramService.getOrUpdateParamsDTO("站点AES公钥", ParamsConstant.STATION_AES_PUBLIC_KEY,encryptKey,"软件初始安装时, 直接初始化");
} }
//每次跟换站控编码, 检测是否存在电池仓数据信息, 如果不存在,需要初始化电池仓信息, 并且同步通知到云端
//默认100个电池仓
SpringUtil.getBean(BatteryCompartmentService.class).init(jsonObject.getInt("dccNum"));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
log.error("更新站控的AES秘钥出现异常", e.getMessage()); log.error("更新站控的AES秘钥出现异常", e.getMessage());

View File

@ -1,5 +1,6 @@
package com.evotech.hd.webserver.utils.sendCloud; package com.evotech.hd.webserver.utils.sendCloud;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
@ -9,7 +10,9 @@ import com.evotech.hd.utils.Collections;
import com.evotech.hd.webserver.logging.AsyncLogService; import com.evotech.hd.webserver.logging.AsyncLogService;
import com.evotech.hd.webserver.logging.LogUtils; import com.evotech.hd.webserver.logging.LogUtils;
import com.evotech.hd.webserver.mqtt.MessageTopic; import com.evotech.hd.webserver.mqtt.MessageTopic;
import com.evotech.hd.webserver.mqtt.MessageUtilService;
import com.evotech.hd.webserver.mqtt.MqttPublishUtils; import com.evotech.hd.webserver.mqtt.MqttPublishUtils;
import com.evotech.hd.webserver.mqtt.MyMqttMessage;
import com.evotech.hd.webserver.service.MessageMqttService; import com.evotech.hd.webserver.service.MessageMqttService;
import com.evotech.hd.webserver.utils.ParamUtils; import com.evotech.hd.webserver.utils.ParamUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -44,9 +47,12 @@ public class CloudSendInfoUtils {
private static MessageMqttService messageMqttService; private static MessageMqttService messageMqttService;
public CloudSendInfoUtils(AsyncLogService asyncLogService, MessageMqttService messageMqttService) { private static MessageUtilService messageUtilService;
public CloudSendInfoUtils(AsyncLogService asyncLogService, MessageMqttService messageMqttService, MessageUtilService messageUtilService) {
this.asyncLogService = asyncLogService; this.asyncLogService = asyncLogService;
this.messageMqttService = messageMqttService; this.messageMqttService = messageMqttService;
this.messageUtilService =messageUtilService;
} }
@ -175,18 +181,11 @@ public class CloudSendInfoUtils {
json.put("stationCode", stationCode); json.put("stationCode", stationCode);
json.put("stationName", stationName); json.put("stationName", stationName);
json.put("timestamp", timestamp); json.put("timestamp", timestamp);
String sign = null;
try {
sign = RsaEcbPkcsFullUtil.sign(json.toString());
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
Map<String, Object> map = Collections.emptyMap(); Map<String, Object> map = Collections.emptyMap();
map.put("stationCode", stationCode); map.put("stationCode", stationCode);
map.put("stationName", stationName); map.put("stationName", stationName);
map.put("sign", sign); SymmetricCrypto aes = messageUtilService.getAes(stationCode);
map.put("data", json.toString()); map.put("data", aes.encryptBase64(json.toString()));
JSONObject result = doPost(ParamUtils.getCloudRequestUrl(), map, Collections.asMap("Content-Type", "application/json","Accept-Language", "zh-CN")); JSONObject result = doPost(ParamUtils.getCloudRequestUrl(), map, Collections.asMap("Content-Type", "application/json","Accept-Language", "zh-CN"));
messageMqttService.update(null,new MessageTopic(json.getString("method"), "HTTP"), "-1", 1, JSONUtil.parseObj(map)); messageMqttService.update(null,new MessageTopic(json.getString("method"), "HTTP"), "-1", 1, JSONUtil.parseObj(map));
asyncLogService.saveLog(LogUtils.getSendCloudLog(functionName, (System.currentTimeMillis()-startTime), json, (result == null ? "" : result.toString()), null)); asyncLogService.saveLog(LogUtils.getSendCloudLog(functionName, (System.currentTimeMillis()-startTime), json, (result == null ? "" : result.toString()), null));

View File

@ -1,6 +1,6 @@
spring: spring:
redis: redis:
host: 192.168.5.112 host: 192.168.5.232
port: 6379 port: 6379
database: 13 database: 13
password: hbyt2025 password: hbyt2025
@ -17,7 +17,7 @@ spring:
# #连接池最大阻塞等待时间(使用负值表示没有限制) # #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms max-wait: -1ms
mqtt: mqtt:
broker: tcp://192.168.5.112:1883 # MQTT服务器地址如Mosquitto默认端口1883 broker: tcp://192.168.5.232:1883 # MQTT服务器地址如Mosquitto默认端口1883
client-id: springboot-mqtt-${random.value} # 客户端ID添加随机数确保唯一 client-id: springboot-mqtt-${random.value} # 客户端ID添加随机数确保唯一
username: admin # 可选MQTT服务器认证用户名 username: admin # 可选MQTT服务器认证用户名
password: hbyt12345 # 可选MQTT服务器认证密码 password: hbyt12345 # 可选MQTT服务器认证密码