Commit 0bcb2a88 by banice

修复了断电续充和更换口子

parent df104c15
......@@ -2,54 +2,53 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="a4269ceb-5bf6-49dc-9b41-8690287f228c" name="Default" comment="">
<change beforePath="" afterPath="$PROJECT_DIR$/application/controller/card/BalanceController.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/application/controller/card/PayRuleController.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/application/model/BillTmpModel.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/application/model/CardModel.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/application/model/ExceptionModel.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/application/model/ParkModel.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/remote/api/message/ChargerReloadMessage.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/remote/api/message/ChargerShedMessage.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/remote/api/message/ChargerShedTimeOutMessage.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/src/BroadcastToAgent.php" />
<change beforePath="$PROJECT_DIR$/.env" afterPath="$PROJECT_DIR$/.env" />
<change beforePath="$PROJECT_DIR$/.example" afterPath="$PROJECT_DIR$/.example" />
<change beforePath="" afterPath="$PROJECT_DIR$/application/controller/card/charger/OverController.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/application/controller/card/charger/PowerController.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/application/controller/card/charger/RequestController.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/application/controller/card/charger/StartController.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/application/controller/card/port/StateController.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/Tool.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/cdz/card_order/state/ChargerState.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/cdz/card_order/state/ExceptionState.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/cdz/card_order/state/OfflineNetState.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/cdz/card_order/state/OfflinePowerState.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/cdz/card_order/state/PowerExceedState.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/cdz/card_order/state/PowerFullState.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/cdz/card_order/state/ShedState.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/cdz/card_order/state/ShedTimeoutState.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/cdz/card_order/state/State.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/cdz/card_order/state/TimeoutState.php" />
<change beforePath="" afterPath="$PROJECT_DIR$/lib/cdz/card_order/state/WaitingState.php" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change beforePath="$PROJECT_DIR$/application/Events.php" afterPath="$PROJECT_DIR$/application/Events.php" />
<change beforePath="$PROJECT_DIR$/application/controller/Controller.php" afterPath="$PROJECT_DIR$/application/controller/Controller.php" />
<change beforePath="$PROJECT_DIR$/application/controller/HeartController.php" afterPath="$PROJECT_DIR$/application/controller/HeartController.php" />
<change beforePath="$PROJECT_DIR$/application/controller/accept/AccessController.php" afterPath="$PROJECT_DIR$/application/controller/accept/AccessController.php" />
<change beforePath="$PROJECT_DIR$/application/controller/accept/CertifyController.php" afterPath="$PROJECT_DIR$/application/controller/accept/CertifyController.php" />
<change beforePath="$PROJECT_DIR$/application/controller/business/charger/OverController.php" afterPath="$PROJECT_DIR$/application/controller/business/charger/OverController.php" />
<change beforePath="$PROJECT_DIR$/application/controller/business/charger/StartController.php" afterPath="$PROJECT_DIR$/application/controller/business/charger/StartController.php" />
<change beforePath="$PROJECT_DIR$/application/controller/business/port/OfflineController.php" afterPath="$PROJECT_DIR$/application/controller/business/port/OfflineController.php" />
<change beforePath="$PROJECT_DIR$/application/controller/business/port/OnlineController.php" afterPath="$PROJECT_DIR$/application/controller/business/port/OnlineController.php" />
<change beforePath="$PROJECT_DIR$/application/controller/business/port/StateController.php" afterPath="$PROJECT_DIR$/application/controller/business/port/StateController.php" />
<change beforePath="$PROJECT_DIR$/application/controller/business/power/PowerController.php" afterPath="$PROJECT_DIR$/application/controller/business/power/PowerController.php" />
<change beforePath="$PROJECT_DIR$/application/controller/card/BalanceController.php" afterPath="$PROJECT_DIR$/application/controller/card/BalanceController.php" />
<change beforePath="$PROJECT_DIR$/application/controller/card/PayRuleController.php" afterPath="$PROJECT_DIR$/application/controller/card/PayRuleController.php" />
<change beforePath="$PROJECT_DIR$/application/controller/setting/SettingController.php" afterPath="$PROJECT_DIR$/application/controller/setting/SettingController.php" />
<change beforePath="$PROJECT_DIR$/application/model/StationModel.php" afterPath="$PROJECT_DIR$/application/model/StationModel.php" />
<change beforePath="$PROJECT_DIR$/application/model/BillTmpModel.php" afterPath="$PROJECT_DIR$/application/model/BillTmpModel.php" />
<change beforePath="$PROJECT_DIR$/application/route/Api.php" afterPath="$PROJECT_DIR$/application/route/Api.php" />
<change beforePath="$PROJECT_DIR$/lib/Gateway.php" afterPath="$PROJECT_DIR$/lib/Gateway.php" />
<change beforePath="$PROJECT_DIR$/lib/StateCode.php" afterPath="$PROJECT_DIR$/lib/StateCode.php" />
<change beforePath="$PROJECT_DIR$/lib/cdz/order/Order.php" afterPath="$PROJECT_DIR$/lib/cdz/order/Order.php" />
<change beforePath="$PROJECT_DIR$/lib/cdz/order/save/OrderSaveRedis.php" afterPath="$PROJECT_DIR$/lib/cdz/order/save/OrderSaveRedis.php" />
<change beforePath="$PROJECT_DIR$/lib/cdz/order/state/ChargerState.php" afterPath="$PROJECT_DIR$/lib/cdz/order/state/ChargerState.php" />
<change beforePath="$PROJECT_DIR$/lib/cdz/order/state/ExceptionState.php" afterPath="$PROJECT_DIR$/lib/cdz/order/state/ExceptionState.php" />
<change beforePath="$PROJECT_DIR$/lib/cdz/order/state/OfflineNetState.php" afterPath="$PROJECT_DIR$/lib/cdz/order/state/OfflineNetState.php" />
<change beforePath="$PROJECT_DIR$/lib/cdz/order/state/OfflinePowerState.php" afterPath="$PROJECT_DIR$/lib/cdz/order/state/OfflinePowerState.php" />
<change beforePath="$PROJECT_DIR$/lib/cdz/order/state/PowerExceedState.php" afterPath="$PROJECT_DIR$/lib/cdz/order/state/PowerExceedState.php" />
<change beforePath="$PROJECT_DIR$/lib/cdz/order/state/PowerFullState.php" afterPath="$PROJECT_DIR$/lib/cdz/order/state/PowerFullState.php" />
<change beforePath="$PROJECT_DIR$/lib/cdz/order/state/ShedState.php" afterPath="$PROJECT_DIR$/lib/cdz/order/state/ShedState.php" />
<change beforePath="$PROJECT_DIR$/lib/cdz/order/state/ShedTimeoutState.php" afterPath="$PROJECT_DIR$/lib/cdz/order/state/ShedTimeoutState.php" />
<change beforePath="$PROJECT_DIR$/lib/cdz/order/state/State.php" afterPath="$PROJECT_DIR$/lib/cdz/order/state/State.php" />
<change beforePath="$PROJECT_DIR$/lib/cdz/order/state/TimeoutState.php" afterPath="$PROJECT_DIR$/lib/cdz/order/state/TimeoutState.php" />
<change beforePath="$PROJECT_DIR$/lib/cdz/order/state/WaitingState.php" afterPath="$PROJECT_DIR$/lib/cdz/order/state/WaitingState.php" />
<change beforePath="$PROJECT_DIR$/lib/remote/api/message/ChargerFullMessage.php" afterPath="$PROJECT_DIR$/lib/remote/api/message/ChargerFullMessage.php" />
<change beforePath="$PROJECT_DIR$/lib/remote/api/message/ChargerShedMessage.php" afterPath="$PROJECT_DIR$/lib/remote/api/message/ChargerShedMessage.php" />
<change beforePath="$PROJECT_DIR$/lib/remote/api/message/FailMessage.php" afterPath="$PROJECT_DIR$/lib/remote/api/message/FailMessage.php" />
<change beforePath="$PROJECT_DIR$/lib/remote/api/message/SendMessage.php" afterPath="$PROJECT_DIR$/lib/remote/api/message/SendMessage.php" />
<change beforePath="$PROJECT_DIR$/lib/remote/api/message/FinishByUserMessage.php" afterPath="$PROJECT_DIR$/lib/remote/api/message/FinishByUserMessage.php" />
<change beforePath="$PROJECT_DIR$/lib/remote/api/message/PowerExceedMessage.php" afterPath="$PROJECT_DIR$/lib/remote/api/message/PowerExceedMessage.php" />
<change beforePath="$PROJECT_DIR$/lib/remote/api/message/ShedMessage.php" afterPath="$PROJECT_DIR$/lib/remote/api/message/ShedMessage.php" />
<change beforePath="$PROJECT_DIR$/lib/remote/api/message/StartMessage.php" afterPath="$PROJECT_DIR$/lib/remote/api/message/StartMessage.php" />
<change beforePath="$PROJECT_DIR$/lib/station/gateway/Gateway.php" afterPath="$PROJECT_DIR$/lib/station/gateway/Gateway.php" />
<change beforePath="$PROJECT_DIR$/lib/station/gateway/port/Port.php" afterPath="$PROJECT_DIR$/lib/station/gateway/port/Port.php" />
<change beforePath="$PROJECT_DIR$/src/Test.php" afterPath="$PROJECT_DIR$/src/Test.php" />
<change beforePath="$PROJECT_DIR$/vendor/workerman/workerman/Protocols/Bintohex.php" afterPath="$PROJECT_DIR$/vendor/workerman/workerman/Protocols/Bintohex.php" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
......@@ -66,103 +65,109 @@
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="WaitingState.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/WaitingState.php">
<file leaf-file-name="AccessController.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application/controller/accept/AccessController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="705">
<caret line="64" column="50" lean-forward="false" selection-start-line="64" selection-start-column="50" selection-end-line="64" selection-end-column="50" />
<folding />
<state relative-caret-position="369">
<caret line="234" column="56" lean-forward="false" selection-start-line="234" selection-start-column="56" selection-end-line="234" selection-end-column="56" />
<folding>
<element signature="e#1064#1118#0#PHP" expanded="false" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ShedState.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/ShedState.php">
<file leaf-file-name="ChargerState.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/ChargerState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="571">
<caret line="194" column="58" lean-forward="false" selection-start-line="194" selection-start-column="58" selection-end-line="194" selection-end-column="58" />
<folding />
<state relative-caret-position="1827">
<caret line="359" column="79" lean-forward="true" selection-start-line="359" selection-start-column="79" selection-end-line="359" selection-end-column="79" />
<folding>
<element signature="e#124#161#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ChargerShedTimeOutMessage.php" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/lib/remote/api/message/ChargerShedTimeOutMessage.php">
<file leaf-file-name=".env" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/.env">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="255">
<caret line="22" column="28" lean-forward="true" selection-start-line="22" selection-start-column="28" selection-end-line="22" selection-end-column="28" />
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="OverController.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application/controller/business/charger/OverController.php">
<file leaf-file-name="Controller.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application/controller/Controller.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="24">
<caret line="71" column="0" lean-forward="false" selection-start-line="71" selection-start-column="0" selection-end-line="71" selection-end-column="0" />
<state relative-caret-position="105">
<caret line="16" column="6" lean-forward="false" selection-start-line="16" selection-start-column="6" selection-end-line="16" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="StateCode.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/StateCode.php">
<file leaf-file-name="WaitingState.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/cdz/card_order/state/WaitingState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="345">
<caret line="28" column="10" lean-forward="false" selection-start-line="28" selection-start-column="10" selection-end-line="28" selection-end-column="10" />
<state relative-caret-position="672">
<caret line="123" column="0" lean-forward="false" selection-start-line="123" selection-start-column="0" selection-end-line="123" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="OnlineController.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application/controller/business/port/OnlineController.php">
<file leaf-file-name="OrderExceptionModel.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application/model/OrderExceptionModel.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="559">
<caret line="61" column="9" lean-forward="false" selection-start-line="61" selection-start-column="9" selection-end-line="61" selection-end-column="9" />
<state relative-caret-position="90">
<caret line="11" column="6" lean-forward="false" selection-start-line="11" selection-start-column="6" selection-end-line="11" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="OfflineController.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application/controller/business/port/OfflineController.php">
<file leaf-file-name="OverController.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application/controller/business/charger/OverController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="739">
<caret line="71" column="61" lean-forward="false" selection-start-line="71" selection-start-column="61" selection-end-line="71" selection-end-column="61" />
<state relative-caret-position="412">
<caret line="155" column="48" lean-forward="false" selection-start-line="155" selection-start-column="48" selection-end-line="155" selection-end-column="48" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="TimeoutState.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/TimeoutState.php">
<file leaf-file-name="CapacityController.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application/controller/business/power/CapacityController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="852">
<caret line="69" column="5" lean-forward="false" selection-start-line="69" selection-start-column="5" selection-end-line="69" selection-end-column="5" />
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="StateController.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application/controller/business/port/StateController.php">
<file leaf-file-name="PowerController.php" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/application/controller/business/power/PowerController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="522">
<caret line="65" column="0" lean-forward="false" selection-start-line="65" selection-start-column="0" selection-end-line="65" selection-end-column="0" />
<folding />
<state relative-caret-position="350">
<caret line="130" column="46" lean-forward="true" selection-start-line="130" selection-start-column="46" selection-end-line="130" selection-end-column="46" />
<folding>
<element signature="e#878#2655#0#PHP" expanded="false" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Port.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/station/gateway/port/Port.php">
<file leaf-file-name="Bintohex.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/vendor/workerman/workerman/Protocols/Bintohex.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="364">
<caret line="139" column="9" lean-forward="false" selection-start-line="139" selection-start-column="9" selection-end-line="139" selection-end-column="9" />
<state relative-caret-position="582">
<caret line="68" column="39" lean-forward="false" selection-start-line="68" selection-start-column="39" selection-end-line="68" selection-end-column="39" />
<folding>
<element signature="e#128#162#0#PHP" expanded="true" />
<element signature="e#128#144#0#PHP" expanded="true" />
</folding>
</state>
</provider>
......@@ -187,6 +192,9 @@
<find>port_logic_id</find>
<find>offline</find>
<find>gateway:port:state:</find>
<find>你</find>
<find>remain ch</find>
<find>remain c</find>
</findStrings>
<replaceStrings>
<replace>$this-&gt;nowDate</replace>
......@@ -201,57 +209,57 @@
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/vendor/workerman/workerman/Protocols/Bintohex.php" />
<option value="$PROJECT_DIR$/src/response/Response.php" />
<option value="$PROJECT_DIR$/src/log/record/Record.php" />
<option value="$PROJECT_DIR$/src/log/GatewayLogWriter.php" />
<option value="$PROJECT_DIR$/application/controller/Controller.php" />
<option value="$PROJECT_DIR$/application/controller/HeartController.php" />
<option value="$PROJECT_DIR$/application/route/Api.php" />
<option value="$PROJECT_DIR$/application/controller/setting/SettingController.php" />
<option value="$PROJECT_DIR$/application/model/StationModel.php" />
<option value="$PROJECT_DIR$/lib/remote/api/message/FailMessage.php" />
<option value="$PROJECT_DIR$/application/controller/accept/CertifyController.php" />
<option value="$PROJECT_DIR$/application/model/ParkModel.php" />
<option value="$PROJECT_DIR$/src/BroadcastToAgent.php" />
<option value="$PROJECT_DIR$/lib/remote/api/message/ChargerReloadMessage.php" />
<option value="$PROJECT_DIR$/lib/remote/api/message/SendMessage.php" />
<option value="$PROJECT_DIR$/lib/remote/api/message/ChargerShedTimeOutMessage.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/State.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/ExceptionState.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/OfflinePowerState.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/PowerExceedState.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/PowerFullState.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/ShedTimeoutState.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/TimeoutState.php" />
<option value="$PROJECT_DIR$/application/model/ExceptionModel.php" />
<option value="$PROJECT_DIR$/src/Test.php" />
<option value="$PROJECT_DIR$/lib/station/gateway/Gateway.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/save/OrderSaveRedis.php" />
<option value="$PROJECT_DIR$/lib/Gateway.php" />
<option value="$PROJECT_DIR$/application/controller/business/power/PowerController.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/Order.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/OfflineNetState.php" />
<option value="$PROJECT_DIR$/application/controller/accept/AccessController.php" />
<option value="$PROJECT_DIR$/lib/StateCode.php" />
<option value="$PROJECT_DIR$/application/controller/business/charger/StartController.php" />
<option value="$PROJECT_DIR$/application/Events.php" />
<option value="$PROJECT_DIR$/lib/remote/api/message/StartMessage.php" />
<option value="$PROJECT_DIR$/lib/remote/api/message/ChargerShedMessage.php" />
<option value="$PROJECT_DIR$/.env" />
<option value="$PROJECT_DIR$/.example" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/ChargerState.php" />
<option value="$PROJECT_DIR$/application/model/BillTmpModel.php" />
<option value="$PROJECT_DIR$/application/model/CardModel.php" />
<option value="$PROJECT_DIR$/application/controller/card/BalanceController.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/ShedState.php" />
<option value="$PROJECT_DIR$/lib/remote/api/message/ChargerFullMessage.php" />
<option value="$PROJECT_DIR$/lib/remote/api/message/ChargerShedMessage.php" />
<option value="$PROJECT_DIR$/lib/remote/api/message/FinishByUserMessage.php" />
<option value="$PROJECT_DIR$/lib/remote/api/message/PowerExceedMessage.php" />
<option value="$PROJECT_DIR$/lib/remote/api/message/ShedMessage.php" />
<option value="$PROJECT_DIR$/lib/remote/api/message/StartMessage.php" />
<option value="$PROJECT_DIR$/lib/Tool.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/Order.php" />
<option value="$PROJECT_DIR$/lib/cdz/card_order/state/State.php" />
<option value="$PROJECT_DIR$/lib/cdz/card_order/state/ChargerState.php" />
<option value="$PROJECT_DIR$/lib/cdz/card_order/state/ExceptionState.php" />
<option value="$PROJECT_DIR$/lib/cdz/card_order/state/OfflineNetState.php" />
<option value="$PROJECT_DIR$/lib/cdz/card_order/state/OfflinePowerState.php" />
<option value="$PROJECT_DIR$/lib/cdz/card_order/state/PowerExceedState.php" />
<option value="$PROJECT_DIR$/lib/cdz/card_order/state/PowerFullState.php" />
<option value="$PROJECT_DIR$/lib/cdz/card_order/state/ShedState.php" />
<option value="$PROJECT_DIR$/lib/cdz/card_order/state/ShedTimeoutState.php" />
<option value="$PROJECT_DIR$/lib/cdz/card_order/state/TimeoutState.php" />
<option value="$PROJECT_DIR$/application/controller/card/charger/OverController.php" />
<option value="$PROJECT_DIR$/application/controller/card/charger/StartController.php" />
<option value="$PROJECT_DIR$/application/controller/card/charger/PowerController.php" />
<option value="$PROJECT_DIR$/lib/station/gateway/port/Port.php" />
<option value="$PROJECT_DIR$/lib/notice/Notice.php" />
<option value="$PROJECT_DIR$/lib/remote/api/message/FailMessage.php" />
<option value="$PROJECT_DIR$/application/model/BillTmpModel.php" />
<option value="$PROJECT_DIR$/application/controller/card/PayRuleController.php" />
<option value="$PROJECT_DIR$/application/controller/card/BalanceController.php" />
<option value="$PROJECT_DIR$/application/controller/card/charger/RequestController.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/OfflineNetState.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/WaitingState.php" />
<option value="$PROJECT_DIR$/application/controller/setting/SettingController.php" />
<option value="$PROJECT_DIR$/application/controller/business/charger/StartController.php" />
<option value="$PROJECT_DIR$/application/route/Api.php" />
<option value="$PROJECT_DIR$/application/controller/HeartController.php" />
<option value="$PROJECT_DIR$/application/controller/business/port/OnlineController.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/save/OrderSaveRedis.php" />
<option value="$PROJECT_DIR$/application/controller/business/port/OfflineController.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/ChargerState.php" />
<option value="$PROJECT_DIR$/application/Events.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/OfflinePowerState.php" />
<option value="$PROJECT_DIR$/application/controller/business/port/StateController.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/WaitingState.php" />
<option value="$PROJECT_DIR$/vendor/workerman/workerman/Protocols/Bintohex.php" />
<option value="$PROJECT_DIR$/application/controller/accept/AccessController.php" />
<option value="$PROJECT_DIR$/lib/cdz/card_order/state/WaitingState.php" />
<option value="$PROJECT_DIR$/application/controller/business/charger/OverController.php" />
<option value="$PROJECT_DIR$/lib/station/gateway/port/Port.php" />
<option value="$PROJECT_DIR$/lib/cdz/order/state/ShedState.php" />
<option value="$PROJECT_DIR$/application/controller/business/power/PowerController.php" />
</list>
</option>
</component>
......@@ -283,9 +291,9 @@
</include_path>
</component>
<component name="ProjectFrameBounds" fullScreen="true">
<option name="x" value="65" />
<option name="x" value="4" />
<option name="y" value="23" />
<option name="width" value="1790" />
<option name="width" value="1851" />
<option name="height" value="1057" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
......@@ -306,8 +314,6 @@
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scope" />
<pane id="Scratches" />
<pane id="ProjectPane">
<subPane>
<expand>
......@@ -331,7 +337,7 @@
<item name="cdz_gateway_v2" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="application" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="controller" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="business" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="accept" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="cdz_gateway_v2" type="b2602c69:ProjectViewProjectNode" />
......@@ -339,7 +345,6 @@
<item name="application" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="controller" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="business" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="charger" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="cdz_gateway_v2" type="b2602c69:ProjectViewProjectNode" />
......@@ -347,54 +352,41 @@
<item name="application" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="controller" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="business" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="port" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="charger" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="cdz_gateway_v2" type="b2602c69:ProjectViewProjectNode" />
<item name="cdz_gateway_v2" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="lib" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="application" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="controller" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="business" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="power" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="cdz_gateway_v2" type="b2602c69:ProjectViewProjectNode" />
<item name="cdz_gateway_v2" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="lib" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="cdz" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="cdz_gateway_v2" type="b2602c69:ProjectViewProjectNode" />
<item name="cdz_gateway_v2" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="lib" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="cdz" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="order" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="cdz_gateway_v2" type="b2602c69:ProjectViewProjectNode" />
<item name="cdz_gateway_v2" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="lib" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="cdz" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="order" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="state" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="cdz_gateway_v2" type="b2602c69:ProjectViewProjectNode" />
<item name="cdz_gateway_v2" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="lib" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="remote" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="card_order" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="cdz_gateway_v2" type="b2602c69:ProjectViewProjectNode" />
<item name="cdz_gateway_v2" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="lib" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="remote" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="api" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="cdz_gateway_v2" type="b2602c69:ProjectViewProjectNode" />
<item name="cdz_gateway_v2" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="lib" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="remote" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="api" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="message" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="cdz" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="card_order" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="state" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="cdz_gateway_v2" type="b2602c69:ProjectViewProjectNode" />
......@@ -404,6 +396,8 @@
<select />
</subPane>
</pane>
<pane id="Scratches" />
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
......@@ -411,15 +405,17 @@
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
<property name="php.override.implement.member.chooser.php.doc" value="NONE" />
<property name="settings.editor.selected.configurable" value="preferences.pluginManager" />
<property name="settings.editor.selected.configurable" value="preferences.sourceCode" />
<property name="run.code.analysis.last.selected.profile" value="pProject Default" />
</component>
<component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/lib" />
<recent name="$PROJECT_DIR$/application/model" />
<recent name="$PROJECT_DIR$/application" />
</key>
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/lib/cdz/card/state" />
<recent name="$PROJECT_DIR$/lib/remote/api/message" />
<recent name="$PROJECT_DIR$/lib/cdz/order/state" />
<recent name="$PROJECT_DIR$/vendor/workerman/workerman/Protocols" />
......@@ -457,12 +453,14 @@
<workItem from="1534745314460" duration="104140000" />
<workItem from="1535099164178" duration="184000" />
<workItem from="1535101118300" duration="241000" />
<workItem from="1535169242819" duration="28662000" />
<workItem from="1535169242819" duration="52420000" />
<workItem from="1535770378527" duration="20000" />
<workItem from="1535770634212" duration="18306000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="185084000" />
<option name="totallyTimeSpent" value="227168000" />
</component>
<component name="ToolWindowManager">
<frame x="0" y="0" width="1920" height="1080" extended-state="0" />
......@@ -474,7 +472,7 @@
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32969216" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.23535253" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2593184" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.19755058" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Docker" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
......@@ -502,413 +500,403 @@
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/PowerExceedState.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/card_order/state/OfflinePowerState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="852">
<caret line="69" column="5" lean-forward="false" selection-start-line="69" selection-start-column="5" selection-end-line="69" selection-end-column="5" />
<state relative-caret-position="45">
<caret line="8" column="18" lean-forward="false" selection-start-line="8" selection-start-column="18" selection-end-line="8" selection-end-column="18" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/PowerFullState.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/card_order/state/PowerExceedState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="852">
<caret line="69" column="5" lean-forward="false" selection-start-line="69" selection-start-column="5" selection-end-line="69" selection-end-column="5" />
<state relative-caret-position="45">
<caret line="8" column="18" lean-forward="false" selection-start-line="8" selection-start-column="18" selection-end-line="8" selection-end-column="18" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/controller/business/power/CapacityController.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/card_order/state/PowerFullState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<state relative-caret-position="45">
<caret line="8" column="18" lean-forward="false" selection-start-line="8" selection-start-column="18" selection-end-line="8" selection-end-column="18" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/controller/business/power/ShutdownController.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/card_order/state/ShedState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="270">
<caret line="23" column="32" lean-forward="false" selection-start-line="23" selection-start-column="32" selection-end-line="23" selection-end-column="32" />
<state relative-caret-position="45">
<caret line="8" column="18" lean-forward="false" selection-start-line="8" selection-start-column="18" selection-end-line="8" selection-end-column="18" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/BroadcastToAgent.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/card_order/state/ShedTimeoutState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="465">
<caret line="36" column="0" lean-forward="false" selection-start-line="36" selection-start-column="0" selection-end-line="36" selection-end-column="0" />
<state relative-caret-position="45">
<caret line="8" column="18" lean-forward="false" selection-start-line="8" selection-start-column="18" selection-end-line="8" selection-end-column="18" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/model/ExceptionModel.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/card_order/state/State.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="165">
<caret line="16" column="1" lean-forward="false" selection-start-line="16" selection-start-column="1" selection-end-line="16" selection-end-column="1" />
<state relative-caret-position="45">
<caret line="8" column="18" lean-forward="false" selection-start-line="8" selection-start-column="18" selection-end-line="8" selection-end-column="18" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/model/ParkModel.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/card_order/state/TimeoutState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="165">
<caret line="16" column="0" lean-forward="false" selection-start-line="16" selection-start-column="0" selection-end-line="16" selection-end-column="0" />
<folding />
<state relative-caret-position="45">
<caret line="8" column="18" lean-forward="false" selection-start-line="8" selection-start-column="18" selection-end-line="8" selection-end-column="18" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/log/Log.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/card_order/state/ChargerState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="615">
<caret line="48" column="31" lean-forward="false" selection-start-line="48" selection-start-column="31" selection-end-line="48" selection-end-column="31" />
<folding />
<state relative-caret-position="-1983">
<caret line="23" column="1" lean-forward="false" selection-start-line="23" selection-start-column="1" selection-end-line="23" selection-end-column="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Test.php">
<entry file="file://$PROJECT_DIR$/application/controller/card/charger/PowerController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="165">
<caret line="16" column="0" lean-forward="false" selection-start-line="16" selection-start-column="0" selection-end-line="16" selection-end-column="0" />
<folding />
<state relative-caret-position="975">
<caret line="70" column="13" lean-forward="false" selection-start-line="70" selection-start-column="13" selection-end-line="70" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/station/Station.php">
<entry file="file://$PROJECT_DIR$/lib/notice/Notice.php" />
<entry file="file://$PROJECT_DIR$/src/BroadcastToAgent.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120">
<caret line="13" column="10" lean-forward="false" selection-start-line="13" selection-start-column="10" selection-end-line="13" selection-end-column="10" />
<folding />
<state relative-caret-position="195">
<caret line="18" column="20" lean-forward="false" selection-start-line="18" selection-start-column="20" selection-end-line="18" selection-end-column="20" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/cdz/order/save/OrderSaveRedis.php">
<entry file="file://$PROJECT_DIR$/lib/remote/api/message/PowerExceedMessage.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="660">
<caret line="49" column="0" lean-forward="false" selection-start-line="49" selection-start-column="0" selection-end-line="49" selection-end-column="0" />
<state relative-caret-position="255">
<caret line="22" column="29" lean-forward="false" selection-start-line="22" selection-start-column="29" selection-end-line="22" selection-end-column="29" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/rabbitmq/PublishPortShed.php">
<entry file="file://$PROJECT_DIR$/application/model/OrderModel.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="375">
<caret line="30" column="0" lean-forward="true" selection-start-line="30" selection-start-column="0" selection-end-line="30" selection-end-column="0" />
<folding />
<state relative-caret-position="90">
<caret line="11" column="6" lean-forward="false" selection-start-line="11" selection-start-column="6" selection-end-line="11" selection-end-column="6" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/model/OrderModel.php">
<entry file="file://$PROJECT_DIR$/lib/rabbitmq/MyRabbitMq.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90">
<caret line="11" column="6" lean-forward="false" selection-start-line="11" selection-start-column="6" selection-end-line="11" selection-end-column="6" />
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/model/OrderPowerModel.php">
<entry file="file://$PROJECT_DIR$/application/model/BillTmpModel.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90">
<caret line="11" column="6" lean-forward="false" selection-start-line="11" selection-start-column="6" selection-end-line="11" selection-end-column="6" />
<state relative-caret-position="135">
<caret line="14" column="37" lean-forward="false" selection-start-line="14" selection-start-column="37" selection-end-line="14" selection-end-column="37" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/route/Api.php">
<entry file="file://$PROJECT_DIR$/application/controller/card/charger/OverController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="525">
<caret line="36" column="23" lean-forward="false" selection-start-line="36" selection-start-column="23" selection-end-line="36" selection-end-column="23" />
<state relative-caret-position="585">
<caret line="50" column="0" lean-forward="false" selection-start-line="50" selection-start-column="0" selection-end-line="50" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/controller/accept/CertifyController.php">
<entry file="file://$PROJECT_DIR$/application/controller/card/charger/StartController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="657">
<caret line="63" column="43" lean-forward="false" selection-start-line="63" selection-start-column="43" selection-end-line="63" selection-end-column="43" />
<state relative-caret-position="206">
<caret line="62" column="43" lean-forward="false" selection-start-line="62" selection-start-column="43" selection-end-line="62" selection-end-column="43" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/controller/business/power/PowerController.php">
<entry file="file://$PROJECT_DIR$/application/controller/card/port/StateController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="161">
<caret line="54" column="1" lean-forward="false" selection-start-line="54" selection-start-column="1" selection-end-line="54" selection-end-column="1" />
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/ShedTimeoutState.php">
<entry file="file://$PROJECT_DIR$/application/controller/card/BalanceController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="945">
<caret line="68" column="5" lean-forward="false" selection-start-line="68" selection-start-column="5" selection-end-line="68" selection-end-column="5" />
<state relative-caret-position="448">
<caret line="37" column="0" lean-forward="false" selection-start-line="37" selection-start-column="0" selection-end-line="37" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/cdz/order/Order.php">
<entry file="file://$PROJECT_DIR$/application/controller/card/PayRuleController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="205">
<caret line="28" column="6" lean-forward="false" selection-start-line="28" selection-start-column="6" selection-end-line="28" selection-end-column="6" />
<state relative-caret-position="386">
<caret line="54" column="38" lean-forward="false" selection-start-line="54" selection-start-column="38" selection-end-line="54" selection-end-column="38" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/OfflineNetState.php">
<entry file="file://$PROJECT_DIR$/application/controller/card/charger/RequestController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="345">
<caret line="30" column="73" lean-forward="false" selection-start-line="30" selection-start-column="73" selection-end-line="30" selection-end-column="73" />
<state relative-caret-position="609">
<caret line="110" column="49" lean-forward="false" selection-start-line="110" selection-start-column="49" selection-end-line="110" selection-end-column="49" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/controller/accept/AccessController.php">
<entry file="file://$PROJECT_DIR$/lib/remote/api/message/FailMessage.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="567">
<caret line="269" column="1" lean-forward="true" selection-start-line="269" selection-start-column="1" selection-end-line="269" selection-end-column="1" />
<folding>
<element signature="e#1064#1118#0#PHP" expanded="false" />
</folding>
<state relative-caret-position="326">
<caret line="39" column="20" lean-forward="false" selection-start-line="39" selection-start-column="20" selection-end-line="39" selection-end-column="20" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/Gateway.php">
<entry file="file://$PROJECT_DIR$/src/route/Route.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="319">
<caret line="161" column="27" lean-forward="false" selection-start-line="161" selection-start-column="27" selection-end-line="161" selection-end-column="27" />
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/redis/Redis.php">
<entry file="file://$PROJECT_DIR$/lib/station/gateway/port/Port.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="326">
<caret line="2762" column="20" lean-forward="false" selection-start-line="2762" selection-start-column="20" selection-end-line="2762" selection-end-column="20" />
<state relative-caret-position="259">
<caret line="79" column="20" lean-forward="false" selection-start-line="79" selection-start-column="20" selection-end-line="79" selection-end-column="20" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/Events.php">
<entry file="file://$PROJECT_DIR$/application/controller/setting/SettingController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="52">
<caret line="126" column="0" lean-forward="false" selection-start-line="126" selection-start-column="0" selection-end-line="126" selection-end-column="0" />
<state relative-caret-position="585">
<caret line="48" column="0" lean-forward="false" selection-start-line="48" selection-start-column="0" selection-end-line="48" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/station/gateway/Gateway.php">
<entry file="file://$PROJECT_DIR$/application/route/Api.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="195">
<caret line="18" column="28" lean-forward="false" selection-start-line="18" selection-start-column="28" selection-end-line="18" selection-end-column="28" />
<state relative-caret-position="407">
<caret line="36" column="32" lean-forward="false" selection-start-line="36" selection-start-column="32" selection-end-line="36" selection-end-column="32" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/controller/business/charger/StartController.php">
<entry file="file://$PROJECT_DIR$/application/model/ExceptionModel.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="221">
<caret line="49" column="14" lean-forward="false" selection-start-line="49" selection-start-column="14" selection-end-line="49" selection-end-column="14" />
<state relative-caret-position="90">
<caret line="11" column="6" lean-forward="false" selection-start-line="11" selection-start-column="6" selection-end-line="11" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/remote/api/message/Message.php">
<entry file="file://$PROJECT_DIR$/application/controller/business/port/OnlineController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1035">
<caret line="74" column="20" lean-forward="false" selection-start-line="74" selection-start-column="20" selection-end-line="74" selection-end-column="20" />
<state relative-caret-position="544">
<caret line="60" column="47" lean-forward="false" selection-start-line="60" selection-start-column="47" selection-end-line="60" selection-end-column="47" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/remote/api/message/StartMessage.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/order/Order.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="221">
<caret line="57" column="46" lean-forward="false" selection-start-line="57" selection-start-column="46" selection-end-line="57" selection-end-column="46" />
<state relative-caret-position="-443">
<caret line="13" column="6" lean-forward="false" selection-start-line="13" selection-start-column="6" selection-end-line="13" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/ChargerShedTimeOutMessage.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/order/save/OrderSaveRedis.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<state relative-caret-position="630">
<caret line="48" column="0" lean-forward="false" selection-start-line="48" selection-start-column="0" selection-end-line="48" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/remote/api/message/ChargerTimeoutMessage.php">
<entry file="file://$PROJECT_DIR$/application/controller/business/port/OfflineController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="129">
<caret line="49" column="20" lean-forward="false" selection-start-line="49" selection-start-column="20" selection-end-line="49" selection-end-column="20" />
<state relative-caret-position="814">
<caret line="99" column="19" lean-forward="false" selection-start-line="99" selection-start-column="19" selection-end-line="99" selection-end-column="19" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/remote/api/message/ChargerFullMessage.php">
<entry file="file://$PROJECT_DIR$/lib/remote/api/message/ChargerTimeoutMessage.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<state relative-caret-position="566">
<caret line="78" column="41" lean-forward="true" selection-start-line="78" selection-start-column="41" selection-end-line="78" selection-end-column="41" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/remote/api/message/ChargerReloadMessage.php">
<entry file="file://$PROJECT_DIR$/application/Events.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="765">
<caret line="56" column="14" lean-forward="false" selection-start-line="56" selection-start-column="14" selection-end-line="56" selection-end-column="14" />
<state relative-caret-position="1707">
<caret line="188" column="0" lean-forward="false" selection-start-line="188" selection-start-column="0" selection-end-line="188" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.env">
<entry file="file://$PROJECT_DIR$/application/controller/accept/CertifyController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="510">
<caret line="34" column="0" lean-forward="true" selection-start-line="0" selection-start-column="0" selection-end-line="35" selection-end-column="0" />
<state relative-caret-position="379">
<caret line="43" column="22" lean-forward="true" selection-start-line="43" selection-start-column="22" selection-end-line="43" selection-end-column="22" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.example">
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/OfflineNetState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="525">
<caret line="35" column="0" lean-forward="true" selection-start-line="35" selection-start-column="0" selection-end-line="35" selection-end-column="0" />
<state relative-caret-position="31">
<caret line="24" column="20" lean-forward="false" selection-start-line="24" selection-start-column="20" selection-end-line="24" selection-end-column="20" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/remote/api/message/ChargerShedMessage.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/OfflinePowerState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="29" column="20" lean-forward="false" selection-start-line="29" selection-start-column="20" selection-end-line="29" selection-end-column="20" />
<folding />
<state relative-caret-position="555">
<caret line="42" column="99" lean-forward="false" selection-start-line="42" selection-start-column="99" selection-end-line="42" selection-end-column="99" />
<folding>
<element signature="e#123#147#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/remote/api/message/ShedMessage.php">
<entry file="file://$PROJECT_DIR$/application/controller/HeartController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="420">
<caret line="33" column="17" lean-forward="false" selection-start-line="33" selection-start-column="17" selection-end-line="33" selection-end-column="17" />
<state relative-caret-position="570">
<caret line="43" column="54" lean-forward="true" selection-start-line="43" selection-start-column="54" selection-end-line="43" selection-end-column="54" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/ChargerState.php">
<entry file="file://$PROJECT_DIR$/application/controller/business/charger/StartController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1823">
<caret line="265" column="41" lean-forward="false" selection-start-line="265" selection-start-column="41" selection-end-line="265" selection-end-column="41" />
<state relative-caret-position="1115">
<caret line="106" column="32" lean-forward="false" selection-start-line="106" selection-start-column="32" selection-end-line="106" selection-end-column="32" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/model/BillTmpModel.php">
<entry file="file://$PROJECT_DIR$/application/controller/business/port/StateController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="14" column="38" lean-forward="false" selection-start-line="14" selection-start-column="38" selection-end-line="14" selection-end-column="38" />
<state relative-caret-position="489">
<caret line="107" column="27" lean-forward="false" selection-start-line="107" selection-start-column="27" selection-end-line="107" selection-end-column="27" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/model/CardModel.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/WaitingState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="14" column="31" lean-forward="false" selection-start-line="14" selection-start-column="31" selection-end-line="14" selection-end-column="31" />
<state relative-caret-position="104">
<caret line="195" column="58" lean-forward="false" selection-start-line="195" selection-start-column="58" selection-end-line="195" selection-end-column="58" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/controller/card/BalanceController.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/ShedState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="300">
<caret line="25" column="13" lean-forward="false" selection-start-line="25" selection-start-column="13" selection-end-line="25" selection-end-column="13" />
<folding>
<element signature="e#131#169#0#PHP" expanded="false" />
</folding>
<state relative-caret-position="-318">
<caret line="194" column="58" lean-forward="false" selection-start-line="194" selection-start-column="58" selection-end-line="194" selection-end-column="58" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/controller/card/PayRuleController.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/ChargerState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="27" column="13" lean-forward="false" selection-start-line="27" selection-start-column="13" selection-end-line="27" selection-end-column="13" />
<state relative-caret-position="1827">
<caret line="359" column="79" lean-forward="true" selection-start-line="359" selection-start-column="79" selection-end-line="359" selection-end-column="79" />
<folding>
<element signature="e#131#169#0#PHP" expanded="true" />
<element signature="e#124#161#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/controller/business/port/StateController.php">
<entry file="file://$PROJECT_DIR$/vendor/workerman/workerman/Protocols/Bintohex.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="522">
<caret line="65" column="0" lean-forward="false" selection-start-line="65" selection-start-column="0" selection-end-line="65" selection-end-column="0" />
<folding />
<state relative-caret-position="582">
<caret line="68" column="39" lean-forward="false" selection-start-line="68" selection-start-column="39" selection-end-line="68" selection-end-column="39" />
<folding>
<element signature="e#128#144#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/controller/business/port/OfflineController.php">
<entry file="file://$PROJECT_DIR$/.env">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="739">
<caret line="71" column="61" lean-forward="false" selection-start-line="71" selection-start-column="61" selection-end-line="71" selection-end-column="61" />
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/TimeoutState.php">
<entry file="file://$PROJECT_DIR$/application/controller/Controller.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="852">
<caret line="69" column="5" lean-forward="false" selection-start-line="69" selection-start-column="5" selection-end-line="69" selection-end-column="5" />
<state relative-caret-position="105">
<caret line="16" column="6" lean-forward="false" selection-start-line="16" selection-start-column="6" selection-end-line="16" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/WaitingState.php">
<entry file="file://$PROJECT_DIR$/application/model/OrderExceptionModel.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="705">
<caret line="64" column="50" lean-forward="false" selection-start-line="64" selection-start-column="50" selection-end-line="64" selection-end-column="50" />
<state relative-caret-position="90">
<caret line="11" column="6" lean-forward="false" selection-start-line="11" selection-start-column="6" selection-end-line="11" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/controller/business/port/OnlineController.php">
<entry file="file://$PROJECT_DIR$/lib/cdz/card_order/state/WaitingState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="559">
<caret line="61" column="9" lean-forward="false" selection-start-line="61" selection-start-column="9" selection-end-line="61" selection-end-column="9" />
<state relative-caret-position="672">
<caret line="123" column="0" lean-forward="false" selection-start-line="123" selection-start-column="0" selection-end-line="123" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/StateCode.php">
<entry file="file://$PROJECT_DIR$/application/controller/business/charger/OverController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="345">
<caret line="28" column="10" lean-forward="false" selection-start-line="28" selection-start-column="10" selection-end-line="28" selection-end-column="10" />
<state relative-caret-position="412">
<caret line="155" column="48" lean-forward="false" selection-start-line="155" selection-start-column="48" selection-end-line="155" selection-end-column="48" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/controller/business/charger/OverController.php">
<entry file="file://$PROJECT_DIR$/application/controller/business/power/CapacityController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="24">
<caret line="71" column="0" lean-forward="false" selection-start-line="71" selection-start-column="0" selection-end-line="71" selection-end-column="0" />
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/station/gateway/port/Port.php">
<entry file="file://$PROJECT_DIR$/application/controller/accept/AccessController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="364">
<caret line="139" column="9" lean-forward="false" selection-start-line="139" selection-start-column="9" selection-end-line="139" selection-end-column="9" />
<state relative-caret-position="369">
<caret line="234" column="56" lean-forward="false" selection-start-line="234" selection-start-column="56" selection-end-line="234" selection-end-column="56" />
<folding>
<element signature="e#128#162#0#PHP" expanded="true" />
<element signature="e#1064#1118#0#PHP" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/cdz/order/state/ShedState.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="571">
<caret line="194" column="58" lean-forward="false" selection-start-line="194" selection-start-column="58" selection-end-line="194" selection-end-column="58" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/remote/api/message/ChargerShedTimeOutMessage.php">
<entry file="file://$PROJECT_DIR$/application/controller/business/power/PowerController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="255">
<caret line="22" column="28" lean-forward="true" selection-start-line="22" selection-start-column="28" selection-end-line="22" selection-end-column="28" />
<folding />
<state relative-caret-position="350">
<caret line="130" column="46" lean-forward="true" selection-start-line="130" selection-start-column="46" selection-end-line="130" selection-end-column="46" />
<folding>
<element signature="e#878#2655#0#PHP" expanded="false" />
</folding>
</state>
</provider>
</entry>
......
......@@ -117,27 +117,28 @@ class Events
*/
public static function onClose($clientId)
{
Log::info('client close', [
'client_id' => $clientId,
'gateway_id' => isset($_SESSION['gateway_id']) ? $_SESSION['gateway_id'] : '',
'station_id' => isset($_SESSION['station_id']) ? $_SESSION['station_id'] : ''
]);
$gatewayId = isset($_SESSION['gateway_id']) ? $_SESSION['gateway_id'] : '';
$stationId = isset($_SESSION['station_id']) ? $_SESSION['station_id'] : '';
if ($gatewayId === '' || $stationId === '') {
$stationName = isset($_SESSION['station_name']) ? $_SESSION['station_name'] : '';
$gatewayName = isset($_SESSION['gateway_name']) ? $_SESSION['gateway_name'] : '';
if ($gatewayId === '' || $stationId === '' || $gatewayName === '' || $stationName === '') {
Log::error('client close can not find station_id or gateway_id');
return;
}
Log::info('gateway offline', [
'gateway_id' => $gatewayId,
'station_id' => $stationId
]);
$exceptionModel = new \Application\model\ExceptionModel();
if (isset($_SESSION['station_id']) && isset($_SESSION['gateway_id'])) {
$exceptionModel->insertRow([
'message' => '网关离线',
'gateway_id' => $_SESSION['gateway_id'],
'station_id' => $_SESSION['station_id'],
'gateway_id' => $gatewayId,
'station_id' => $stationId,
'type' => 1,
]);
}
......@@ -161,6 +162,8 @@ class Events
$exceptionModel = new \Application\model\ExceptionModel();
$orderExceptionModel = new \Application\model\OrderExceptionModel();
$date = date('Y-m-d H:i:s');
......@@ -175,15 +178,17 @@ class Events
$exceptionModel->insertRow([
'gateway_id' => $gatewayId,
'station_id' => isset($_SESSION['station_id']) ? $_SESSION['station_id'] : '',
'station_id' => $stationId,
'port_id' => $portId,
'message' => '口子离线',
'created_at' => $date,
'type' => 1,
]);
$portUsingOrderId = $port->getPortUsingOrderId();
//端口当前订单记录离线时间
if ($portUsingOrderId != false && $portUsingOrderId != '') {
$order = new \Lib\cdz\order\Order($portUsingOrderId);
if ($order->getOrderCache(static::$redis) != false) {
......@@ -192,11 +197,30 @@ class Events
$saveOrder->save(['offlineTime']);
unset($saveOrder);
$orderExceptionModel->insertRow([
'order_id' => $order->getId(),
'state' => \Lib\StateCode::PORT_OFFLINE,
'created_at' => date('Y-m-d H:i:s'),
'desc' => '网关离线,订单离线',
]);
}
}
}
$broadcastToAgent = new \Src\BroadcastToAgent();
$broadcastToAgent->broadcast([
'notice_exception_code' => 15,
'gateway_id' => $gatewayId,
'station_id' => $stationId,
'station_name' => $stationName,
'gateway_mac' => isset($_SESSION['gateway_mac']) ? $_SESSION['gateway_mac'] : '',
]);
}
......
......@@ -35,12 +35,13 @@ class HeartController extends Controller
$time = time();
$redis = \Events::getRedis();
if (isset($_SESSION['gateway_id'])) {
$redis->hSet(self::GATEWAY_LAST_HEART_TIME, $_SESSION['gateway_id'], $time);
$redis->hSet(self::GATEWAY_LAST_HEART_TIME,$_SESSION['gateway_id'],$time);
$redis->zIncrBy(self::GATEWAY_HEART_TIMES, 1, $_SESSION['gateway_id']);
}
$redis->zIncrBy(self::GATEWAY_HEART_TIMES,1,$_SESSION['gateway_id']);
$this->response->send('00',sprintf('%08x',time()));
$this->response->send('00', sprintf('%08x', time()));
}
}
\ No newline at end of file
......@@ -68,6 +68,7 @@ class AccessController extends Controller
$gatewayModelResult = $gatewayModel->getColumns([
'station_id',
'id',
'name'
], 'mac_address = ' . "'$mac'");
if ($gatewayModelResult == false) {
......@@ -78,20 +79,30 @@ class AccessController extends Controller
$gatewayId = $gatewayModelResult['id'];
$_SESSION['gateway_name'] = $gatewayModelResult['name'];
//日志记录
$this->logRecord->setGatewayId($gatewayId);
$this->logRecord->setStationId($stationId);
$stationModel = new StationModel();
$stationData = $stationModel->getColumns([
'park_id',
'name',
], 'id = ' . $stationId);
if (isset($stationData['park_id']) && isset($stationData['name'])) {
$parkId = $stationData['park_id'];
$_SESSION['station_name'] = $stationData['name'];
if (isset($parkId)) {
$parkModel = new ParkModel();
$_SESSION['park_id'] = $parkId;
$agentId = $parkModel->getColumn('agent_id', 'id = ' . $parkId);
if (isset($agentId)) {
$_SESSION['agent_id'] = $agentId;
}
$parkId = $stationModel->getColumn('park_id', 'id = ' . $stationId);
if (isset($parkId)) {
$parkModel = new ParkModel();
$_SESSION['park_id'] = $parkId;
$agentId = $parkModel->getColumn('agent_id', 'id = ' . $parkId);
if (isset($agentId)) {
$_SESSION['agent_id'] = $agentId;
}
}
......@@ -103,16 +114,19 @@ class AccessController extends Controller
'id',
'device_mac',
'name',
], 'gateway_id = ' . $gatewayId);
$tmp = [];
$portsIdName = [];
foreach ($deviceModelResult as $item) {
$tmp[$item['device_mac']] = $item['id'];
$portsIdName[$item['id']] = $item['name'];
}
$_SESSION['port_id_name'] = $portsIdName;
$_SESSION['port_mac_id'] = $tmp;
$_SESSION['port_id_mac'] = array_flip($tmp);
......@@ -159,12 +173,14 @@ class AccessController extends Controller
for ($i = 0; $i < $count; $i++) {
$mac = substr($this->message, $this->plc, 8 * 2);
$state = substr($this->message, $this->plc + ($count * 16 - 16 * $i + $i * 2), 2);
$this->plc += 16;
$state = substr($this->message, $this->plc, 2);
$portMacState[$mac] = hexdec($state);
// $portMacState[$mac] = StateCode::PORT_OFFLINE;
}
if (isset($_SESSION['port_mac_id']) == false) {
......@@ -178,8 +194,6 @@ class AccessController extends Controller
$port = new Port();
$portsLogicId = [];
// $portsId = array_values($portsMacId);
$portsId = [];
foreach ($portMacState as $mac => $state) {
......@@ -188,12 +202,15 @@ class AccessController extends Controller
}
}
$logicStartTmp = $logicStart;
foreach ($portMacState as $mac => $state) {
$portId = isset($portsMacId[$mac]) ? $portsMacId[$mac] : false;
if ($portId === false) {
continue;
}
$port->setPortId($portId);
//设置端口状态
......@@ -202,7 +219,7 @@ class AccessController extends Controller
$port->setStationId($_SESSION['station_id']);
$port->updatePortState();
$portsLogicId[$logicStart++] = $portId;
$portsLogicId[$logicStartTmp] = $portId;
}
\Events::exec();
......@@ -215,14 +232,14 @@ class AccessController extends Controller
}
//更新逻辑地址
foreach ($portsLogicId as $portId => $logicId) {
foreach ($portsLogicId as $logicId => $portId) {
$deviceModel->update(['logic_num' => $logicId], 'id = ' . $portId);
}
$order = new Order();
$responseOrder = [];
$offlineReason = hexdec(substr($this->message, $this->plc, 2));
$offlineReason = hexdec(substr($this->message, -4, 2));
$orderCount = '00';
......@@ -240,27 +257,23 @@ class AccessController extends Controller
if ($order->getOrderCache(\Events::getRedis()) == false) {
continue;
}
$order->setOnlineTime(time());
if ($offlineReason === 1) {
if ($offlineReason == 1) {
$orderState = new OfflinePowerState($order);
} else {
$orderState = new OfflineNetState($order);
}
$portState = $portMacState[$_SESSION['port_id_mac'][$portId]];
$remainTime = $orderState->getRemainChargerTime();
if ($remainTime > 0) {
$logicNum = sprintf('%02x', $order->getPortLogicId());
$orderId = sprintf('%012x', $order->getId());
$time = sprintf('%04x', $remainTime);
array_push($responseOrder, $logicNum . $orderId . $time);
}
......
......@@ -63,6 +63,11 @@ class OverController extends Controller
$orderStateCode = $order->getStateCode();
$order->setEndCapacity($capacity);
$order->setEndCode($state);
$portId = isset($_SESSION['port_logic_id'][$logicId]) ? $_SESSION['port_logic_id'][$logicId] : 0;
if ($portId !== 0) {
$this->logRecord->setPortId($portId);
}
if (Gateway::isUidOnline($order->getUserId()) === 1) {
Gateway::sendToUid($order->getUserId(), json_encode(['code' => 10000]));
......@@ -86,6 +91,22 @@ class OverController extends Controller
if (isset($orderState)) {
switch ($state) {
case StateCode::PORT_EXCEPTION://口子打开失败,适配zegbee设备
$this->logRecord->setDesc('口子打开失败结束');
$port = new Port($order->getPortId());
$port->setStationId($order->getStationId());
$port->setGatewayId($order->getGatewayId());
$port->freePort($orderId);
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => StateCode::FINISH_REFUND,
'end_capacity' => $order->getEndCapacity(),
'end_time' => date('Y-m-d H:i:s'),
], 'id = ' . $order->getId());
break;
case StateCode::FINISH_USER: //用户主动结束
$this->logRecord->setDesc('用户主动结束充电');
$orderState->toUserFinish();
......@@ -132,7 +153,7 @@ class OverController extends Controller
$this->logRecord->setDesc('更换口子,' . $portId . '关闭成功');
}
$this->response->send('05', sprintf('%02x', $logicId) . sprintf('%012x', $orderId));
$this->response->send('15', sprintf('%02x', $logicId) . sprintf('%012x', $orderId));
return;
......@@ -157,7 +178,7 @@ class OverController extends Controller
}
$this->response->send('05', sprintf('%02x', $logicId) . sprintf('%012x', $orderId));
$this->response->send('15', sprintf('%02x', $logicId) . sprintf('%012x', $orderId));
}
......
......@@ -104,7 +104,7 @@ class StartController extends Controller
}
}
$this->response->send('04', sprintf('%012x', $orderId));
$this->response->send('14', sprintf('%012x', $orderId));
}
......
......@@ -11,8 +11,10 @@ namespace Application\controller\business\port;
use Application\controller\Controller;
use Application\model\ExceptionModel;
use Lib\log\Log;
use Lib\StateCode;
use Lib\station\gateway\port\Port;
use Src\BroadcastToAgent;
class OfflineController extends Controller
{
......@@ -37,20 +39,28 @@ class OfflineController extends Controller
public function offline()
{
$count = $this->request->get('count');
$count = hexdec($this->request->get('count'));
$portsLogicMac = [];
$str = substr($this->message, $this->plc);
$portsLogic = substr($this->message, $this->plc, $count * 2);
$tmp = str_split($str, 18);
foreach ($tmp as $item) {
$portsLogic = str_split($portsLogic, 2);
$this->plc += ($count * 2);
$str = substr($this->message, $this->plc, -2);
$tmp = str_split($str, 16);
for ($i = 0; $i < $count; $i++) {
$portsLogicMac[hexdec($portsLogic[$i])] = $tmp[$i];
$portsLogicMac[hexdec(substr($item, 0, 2))] = substr($item, 2);
}
if (isset($_SESSION['port_mac_id'])) {
if (!isset($_SESSION['port_mac_id'])) {
return;
}
......@@ -60,13 +70,20 @@ class OfflineController extends Controller
$exceptionModel = new ExceptionModel();
if (!(isset($_SESSION['station_id']) && isset($_SESSION['gateway_id']))) {
if (!(isset($_SESSION['station_id']) || !isset($_SESSION['gateway_id']))) {
return;
}
$broadcastToAgent = new BroadcastToAgent();
$offlinePorts = [];
foreach ($portsLogicMac as $portLogic => $portMac) {
if (isset($portsMacId[$portMac])) {
$portId = $portsMacId[$portMac];
if (isset($_SESSION['port_id_name'][$portId])) {
array_push($offlinePorts, ['name' => $_SESSION['port_id_name'][$portId], 'id' => $portId]);
}
Log::debug('offline port_id' . $portId);
$port->setPortId($portId);
$port->setStationId($_SESSION['station_id']);
$port->setGatewayId($_SESSION['gateway_id']);
......@@ -76,13 +93,24 @@ class OfflineController extends Controller
$exceptionModel->insertRow([
'message' => '口子离线',
'gateway_id' => isset($_SESSION['gateway_id']) ? $_SESSION['gateway_id'] : '',
'station_id' => isset($_SESSION['stationg_id']) ? $_SESSION['station_id'] : '',
'station_id' => isset($_SESSION['station_id']) ? $_SESSION['station_id'] : '',
'port_id' => $portId,
'created_at' => date('Y-m-d H:i:s'),
'type' => 1,
]);
}
}
$broadcastToAgent->broadcast([
'notice_exception_code' => StateCode::PORT_OFFLINE,
'ports' => $offlinePorts,
'station_name' => $_SESSION['station_name'],
'gateway_name' => $_SESSION['gateway_name'],
'station_id' => $_SESSION['station_id'],
'gateway_id' => $_SESSION['gateway_id'],
]);
}
}
\ No newline at end of file
......@@ -33,23 +33,30 @@ class OnlineController extends Controller
*/
public function online()
{
$count = $this->request->get('count');
$count = hexdec($this->request->get('count'));
$portsLogicMac = [];
$str = substr($this->message, $this->plc);
$portsLogic = substr($this->message, $this->plc, $count * 2);
$tmp = str_split($str, 18);
foreach ($tmp as $item) {
$portsLogic = str_split($portsLogic, 2);
$this->plc += ($count * 2);
$str = substr($this->message, $this->plc, -2);
$tmp = str_split($str, 16);
for ($i = 0; $i < $count; $i++) {
$portsLogicMac[hexdec($portsLogic[$i])] = $tmp[$i];
$portsLogicMac[hexdec(substr($item, 0, 2))] = substr($item, 2);
}
if (isset($_SESSION['port_mac_id']) === false) {
if (!isset($_SESSION['port_mac_id'])) {
return;
return;
}
$portsMacId = $_SESSION['port_mac_id'];
......
......@@ -105,7 +105,7 @@ class StateController extends Controller
break;
default:
break;
return;
}
Log::debug('now state' . $state);
......
......@@ -109,14 +109,15 @@ class PowerController extends Controller
$logicId = hexdec($this->request->get('logic_id'));
$startTime = hexdec($this->request->get('start_time'));
$intervalTime = hexdec($this->request->get('interval_time')) * 60;
$count = $this->request->get('count');
$count = hexdec($this->request->get('count'));
$powers = substr($this->message, $this->plc, $count * 4);
$this->plc += ($count * 4);
$capacitys = substr($this->message, $this->plc, $count * 8);
$powers = explode($powers, 4);
$capacitys = explode($capacitys, 8);
$powers = str_split($powers, 4);
$capacitys = str_split($capacitys, 8);
if (count($powers) != $count || count($capacitys) != $count) {
Log::error('plural miss power or capacity,less than count ');
......@@ -124,11 +125,6 @@ class PowerController extends Controller
return;
}
if (isset($_SESSION['port_id_logic']) == false) {
return;
}
$portsLogicId = array_flip($_SESSION['port_logic_id']);
if (isset($portsLogicId[$logicId])) {
......
......@@ -18,7 +18,7 @@ class BalanceController extends Controller
'32' => [
'card_id' => 6
'card_id' => 3
]
];
......@@ -36,7 +36,7 @@ class BalanceController extends Controller
$balance = isset($balance) ? $balance : 0;
$balance = sprintf('%04x', $balance);
$balance = sprintf('%08x', $balance);
var_dump($balance);
......
......@@ -13,6 +13,7 @@ use Application\controller\Controller;
use Application\model\BillTmpModel;
use GatewayWorker\Lib\Gateway;
use Lib\log\Log;
class PayRuleController extends Controller
{
......@@ -36,8 +37,12 @@ class PayRuleController extends Controller
Gateway::closeClient($this->clientId);
}
Log::debug($_SESSION['station_id']);
$rule = $billingTmp->getColumn('context', 'id = ' . $_SESSION['station_id']);
Log::debug($rule);
if (isset($rule)) {
$rule = json_decode($rule, true);
......@@ -46,11 +51,10 @@ class PayRuleController extends Controller
$count = count($rule);
foreach ($rule as $item) {
$time = sprintf('%02x', $item['time']);
$price = sprintf('%02x', $item['price']);
$time = sprintf('%04x', $item['time']);
$price = sprintf('%04x', $item['price']);
array_push($back, $time . $price);
}
$this->response->send('31', sprintf('%02x', $count) . implode($back));
}
......
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/29
* Time: 下午4:30
*/
namespace Application\controller\card\charger;
use Application\controller\Controller;
use Lib\cdz\order\Order;
use Lib\cdz_order\state\ChargerState;
use Lib\cdz_order\state\ShedState;
use Lib\cdz_order\state\WaitingState;
use Lib\StateCode;
use Lib\Tool;
class OverController extends Controller
{
protected $parameterMap = [
'35' => [
'type' => 1,
'logic_id' => 1,
'state' => 1,
'order_id' => 6,
'capacity' => 4,
]
];
/**
* 结束充电
*/
public function over()
{
$orderId = hexdec($this->request->get('order_id'));
$state = hexdec($this->request->get('state'));
$capacity = hexdec($this->request->get('capacity'));
$order = new Order($orderId);
$order->setEndCapacity($capacity);
$order->setEndCode($state);
$this->logRecord->setOrderId($orderId);
if ($order->getOrderCache(\Events::getRedis()) !== false) {
$orderStateCode = $order->getStateCode();
$this->logRecord->setPortId($order->getPortId());
switch ($orderStateCode) {
case StateCode::PORT_CHARGER:
$orderState = new ChargerState($order);
break;
case StateCode::PORT_SHED:
$orderState = new ShedState($order);
break;
case StateCode::WAITING:
$orderState = new WaitingState($order);
break;
default:
break;
}
if (isset($orderState)) {
switch ($state) {
case StateCode::FINISH_TIME_END:
$orderState->toTimeoutState();
break;
case StateCode::FINISH_SHED_TIMEOUT:
$orderState->toShedTimeoutState();
break;
case StateCode::FINISH_EXCEED:
$orderState->toPowerExceedState();
break;
default:
break;
}
}
}
$this->response->send('45', Tool::padding($orderId, 6));
}
}
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/29
* Time: 下午4:29
*/
namespace Application\controller\card\charger;
use Application\controller\Controller;
use Lib\log\Log;
use Lib\station\gateway\port\Port;
use Application\model\OrderPowerModel;
class PowerController extends Controller
{
protected $parameterMap = [
'17' => [
'logic_id' => 1,
'power' => 2,
'capacity' => 4,
],
];
public function power()
{
$logicId = hexdec($this->request->get('logic_id'));
$startTime = hexdec($this->request->get('start_time'));
$intervalTime = hexdec($this->request->get('interval_time')) * 60;
$count = $this->request->get('count');
$powers = substr($this->message, $this->plc, $count * 4);
$this->plc += ($count * 4);
$capacitys = substr($this->message, $this->plc, $count * 8);
$powers = explode($powers, 4);
$capacitys = explode($capacitys, 8);
if (count($powers) != $count || count($capacitys) != $count) {
Log::error('plural miss power or capacity,less than count ');
return;
}
if (isset($_SESSION['port_id_logic']) == false) {
return;
}
$portsLogicId = array_flip($_SESSION['port_logic_id']);
if (isset($portsLogicId[$logicId])) {
$portId = $portsLogicId[$logicId];
$port = new Port($portId);
$orderId = $port->getPortUsingOrderId();
if ($orderId == false || $orderId == '') {
Log::error('power data can not find order_id', [
'logic_id' => $logicId,
'message' => $this->message,
]);
return;
}
$this->logRecord->setPortId($portId);
$this->logRecord->setOrderId($orderId);
$orderPowerModel = new OrderPowerModel();
for ($i = 0; $i < $count; $i++) {
$orderPowerModel->insertRow([
'created_at' => date('Y-m-d H:i:s', $startTime),
'order_id' => $orderId,
'port_id' => $portId,
'power' => $powers[$i],
'capacity' => $capacitys[$i],
]);
$startTime += $intervalTime;
}
}
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/29
* Time: 上午9:48
*/
namespace Application\controller\card\charger;
use Application\controller\Controller;
use Application\model\CardModel;
use Application\model\OrderModel;
use Lib\cdz\order\Order;
use Lib\cdz\order\save\OrderSaveRedis;
use Lib\log\Log;
use Lib\Tool;
class RequestController extends Controller
{
protected $parameterMap = [
'33' => [
'type' => 1,
'logic_id' => 1,
'card_id' => 3,
'time' => 2,
'price' => 2,
],
];
/**
* 请求充电
*/
public function request()
{
$type = $this->request->get('type');
$logicId = hexdec($this->request->get('logic_id'));
$cardId = $this->request->get('card_id');
$time = hexdec($this->request->get('time'));
$price = hexdec($this->request->get('price'));
if ((isset($_SESSION['gateway_id']) && isset($_SESSION['station_id']) && isset($_SESSION['station_name'])) === false) {
Log::debug('miss gateway)id');
return;
}
if (isset($_SESSION['port_logic_id'])) {
Log::debug('port_logic_id', $_SESSION['port_logic_id']);
if (isset($_SESSION['port_logic_id'][$logicId])) {
$portId = $_SESSION['port_logic_id'][$logicId];
}
}
if (isset($portId) === false) {
return;
}
$cardModel = new CardModel();
$balance = $cardModel->getColumn('balance', 'card_number = ' . $cardId);
Log::debug($balance);
if (isset($balance) === false || $balance == '') {
return;
}
if ((int)$balance < (int)$price) {
$orderId = 0;
} else {
//添加订单记录.
$stationId = $_SESSION['station_id'];
$gatewayId = $_SESSION['gateway_id'];
$stationName = $_SESSION['station_name'];
$date = date('Y-m-d H:i:s');
$orderModel = new OrderModel();
$outTradeNo = '3' . time() . $stationId . $portId . $gatewayId;
$orderModel->insertRow([
'gateway_id' => $gatewayId,
'station_id' => $stationId,
'port_id' => $portId,
'out_trade_no' => $outTradeNo,
'pay_amount' => $price,
'charger_time' => $time,
'created_at' => $date,
'logic_num' => $logicId,
'pay_type' => 3,
'station_name' => $stationName,
]);
$orderId = $orderModel->getColumn('id', 'out_trade_no = ' . $outTradeNo);
}
$this->response->send('33', $type . Tool::padding($logicId, 1) . $cardId . Tool::padding($time, 2) . Tool::padding($price, 2) . Tool::padding($orderId, 6) . Tool::padding($balance, 4));
if ($orderId != 0) {
//todo 订单缓存存储
$order = new Order($orderId);
$order->setStationId($stationId);
$order->setGatewayId($gatewayId);
$order->setCardId($cardId);
$order->setStationId($stationId);
$order->setStationName($stationName);
$order->setCreatedTime(time());
$order->setPayAmount($price);
$order->setPurchaseTime($time);
$order->setPortLogicId($logicId);
$order->setStateCode(-1);
$saveOrder = new OrderSaveRedis($order);
$saveOrder->saveAll();
}
}
}
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/29
* Time: 上午10:35
*/
namespace Application\controller\card\charger;
use Application\controller\Controller;
use Lib\cdz\order\Order;
use Lib\cdz_order\state\WaitingState;
use Lib\StateCode;
use Lib\Tool;
class StartController extends Controller
{
protected $parameterMap = [
'34' => [
'type' => 1,
'logic_id' => 1,
'state' => 1,
'order_id' => 6,
'capacity' => 4,
]
];
/**
* 开始充电
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function start()
{
$logicId = $this->request->get('logic_id');
$state = hexdec($this->request->get('state'));
$orderId = hexdec($this->request->get('order_id'));
$capacity = hexdec($this->request->get('capacity'));
$order = new Order($orderId);
if ($order->getOrderCache(\Events::getRedis()) != false) {
$orderStateCode = $order->getStateCode();
$order->setStartCapacity($capacity);
$order->setStartTime(time());
$this->logRecord->setOrderId($orderId);
$this->logRecord->setPortId($order->getPortId());
switch ($orderStateCode) {
case StateCode::WAITING:
$orderState = new WaitingState($order);
break;
default:
return;
}
switch ($state) {
case StateCode::PORT_CHARGER:
$orderState->toChargerState();
break;
case StateCode::PORT_SHED:
$orderState->toShedState();
break;
case StateCode::PORT_EXCEPTION:
$orderState->toExceptionState();
break;
default:
break;
}
}
$this->response->send('34', Tool::padding($orderId, 6));
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/29
* Time: 下午4:29
*/
namespace Application\controller\card\port;
class StateController
{
}
\ No newline at end of file
......@@ -12,6 +12,8 @@ namespace Application\controller\setting;
use Application\controller\Controller;
use Application\model\ConfigModel;
use Application\model\StationModel;
use Lib\Gateway;
use Lib\log\Log;
class SettingController extends Controller
{
......@@ -41,6 +43,12 @@ class SettingController extends Controller
}
$invertalTime = $idConfigsValue['5']; //设备上报数据间隔单位 秒
if (isset($_SESSION['station_id']) === false) {
Gateway::closeClient($this->clientId);
Log::error('setting miss station_id');
return;
}
$stationId = $_SESSION['station_id'];
$stationModel = new StationModel();
......
......@@ -12,6 +12,6 @@ namespace Application\model;
class BillTmpModel extends Model
{
protected $table = 'billing_tmps';
protected $table = 'billing_tpls';
}
\ No newline at end of file
......@@ -11,31 +11,36 @@ class Api
public $route = [];
public function boot()
public function boot()
{
$this->add('01', 'accept\CertifyController@certify');
$this->add('00','HeartController@break');
$this->add('02','accept\AccessController@request');
$this->add('03','accept\AccessController@syncPort');
$this->add('00', 'HeartController@break');
$this->add('02', 'accept\AccessController@request');
$this->add('03', 'accept\AccessController@syncPort');
$this->add('04','business\charger\StartController@start');
$this->add('05','business\charger\OverController@over');
$this->add('04', 'business\charger\StartController@start');
$this->add('05', 'business\charger\OverController@over');
$this->add('0B','business\port\StateController@change');
$this->add('0B', 'business\port\StateController@change');
$this->add('07','business\power\PowerController@plural');
$this->add('17','business\power\PowerController@one');
$this->add('07', 'business\power\PowerController@plural');
$this->add('17', 'business\power\PowerController@one');
$this->add('06','business\power\CapacityController@capacity');
$this->add('06', 'business\power\CapacityController@capacity');
$this->add('08','business\port\OnlineController@online');
$this->add('09','business\port\OfflineController@offline');
$this->add('08', 'business\port\OnlineController@online');
$this->add('09', 'business\port\OfflineController@offline');
$this->add('0F','business\power\ShutdownController@shutdown');
$this->add('0A','setting\SettingController@get');
// $this->add('0F', 'business\power\ShutdownController@shutdown');
$this->add('0A', 'setting\SettingController@get');
$this->add('31', 'card\PayRuleController@get');
$this->add('32', 'card\BalanceController@get');
$this->add('33', 'card\charger\RequestController@request');
$this->add('34', 'card\charger\StartController@start');
$this->add('35', 'card\charger\OverController@over');
}
......@@ -48,7 +53,7 @@ class Api
* @param array $middlewar
* @return void
*/
public function add(string $command, string $controllerAction, array $middleware = [])
public function add(string $command, string $controllerAction, array $middleware = [])
{
$route = new Route();
......
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/29
* Time: 上午10:25
*/
namespace Lib;
class Tool
{
public static function padding($data, $length)
{
$length *= 2;
return sprintf('%0' . $length . 'x', $data);
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/13
* Time: 上午11:21
*/
namespace Lib\cdz_order\state;
use Application\model\OrderExceptionModel;
use Application\model\OrderModel;
use Lib\cdz\order\Order;
use Lib\cdz\order\save\OrderSaveRedis;
use Lib\log\Log;
use Lib\rabbitmq\PublishPortShed;
use Lib\remote\api\message\ChargerFullMessage;
use Lib\remote\api\message\ChargerShedMessage;
use Lib\remote\api\message\ChargerTimeoutMessage;
use Lib\remote\api\message\FinishByUserMessage;
use Lib\remote\api\message\PowerExceedMessage;
use Lib\remote\api\message\SendMessage;
use Lib\StateCode;
use Lib\station\gateway\port\Port;
use Src\BroadcastToAgent;
class ChargerState extends State
{
public function __construct(Order $order)
{
parent::__construct($order);
}
/**
* 用户主动结束充电
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toUserFinish()
{
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => $this->order->getEndCode(),
'end_capacity' => $this->order->getEndCapacity(),
'updated_at' => $this->nowDate,
'end_time' => $this->nowDate,
'state' => 1,
], 'id = ' . $this->order->getId());
$port = new Port();
$port->setState(StateCode::PORT_ONLINE);
$port->setPortId($this->order->getPortId());
$port->setGatewayId($this->order->getGatewayId());
$port->setStationId($this->order->getStationId());
//释放口子状态
$port->freePort($this->order->getId());
//删除订单的缓存
$this->order->delCache(\Events::getRedis());
//用户主动结束充电推送
$finishByUserMessage = new FinishByUserMessage();
$finishByUserMessage->setOrderId($this->order->getId());
$finishByUserMessage->setAddress($this->order->getStationName() . '--' . $this->order->getPortName());
$finishByUserMessage->setUserId($this->order->getUserId());
$chargerTime = (int)time() - (int)$this->order->getStartTime();
$chargerTime /= 60;
$chargerTime = (int)$chargerTime;
$finishByUserMessage->setChargerTime($chargerTime);
$finishByUserMessage->setEndTime($this->nowDate);
$finishByUserMessage->setOrderAmount($this->order->getPayAmount());
$sendMessage = new SendMessage();
if ($sendMessage->request($finishByUserMessage) == false) {
Log::error('send finish by user message fail');
}
$orderException = new OrderExceptionModel();
$orderException->insertRow([
'order_id' => $this->order->getId(),
'state' => StateCode::PORT_CHARGER . StateCode::FINISH_USER,
'desc' => '用户主动结束充电',
'created_at' => $this->nowDate,
]);
}
public function toWaitingState()
{
Log::error('charger state can not change to waiting state');
// TODO: Implement toWaitingState() method.
}
public function toChargerState()
{
Log::error('charger state can not change to charger state');
// TODO: Implement toChargerState() method.
}
public function toExceptionState()
{
// TODO: Implement toExceptionState() method.
}
/**
* 开始充电后功率过大
* 修改订单状态
* 推送消息
* 更新口子状态释放订单
* 记录订单异常
* 推送给agentId
*
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toPowerExceedState()
{
//更新订单状态
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => StateCode::FINISH_EXCEED,
'end_capacity' => $this->order->getEndCapacity(),
'end_time' => $this->nowDate,
'state' => 1,
], 'id = ' . $this->order->getId());
$orderExceptionModel = new OrderExceptionModel();
$orderExceptionModel->insertRow([
'order_id' => $this->order->getId(),
'state' => StateCode::PORT_CHARGER . StateCode::FINISH_EXCEED,
'desc' => '功率超限',
'created_at' => date('Y-m-d H:i:s', $this->nowTimeStamp),
]);
$powerExceedMessage = new PowerExceedMessage();
$powerExceedMessage->setUserId($this->order->getUserId());
$powerExceedMessage->setStartTime(date('Y-m-d H:i:s', $this->order->getStartTime()));
$powerExceedMessage->setEndTime(date('Y-m-d H:i:s', $this->nowTimeStamp));
$powerExceedMessage->setChargerTime($this->order->getPurchaseTime());
$powerExceedMessage->setRemark($powerExceedMessage->getRemark() . '\n' . sprintf('%012x', $this->order->getId()));
$sendMessage = new SendMessage();
if ($sendMessage->request($powerExceedMessage) === false) {
Log::error('send power exceed message fail');
//todo tcp异常上报
}
$port = new Port();
$port->setPortId($this->order->getPortId());
$port->setState(StateCode::PORT_ONLINE);
$port->setGatewayId($this->order->getGatewayId());
$port->setStationId($this->order->getStationId());
$port->freePort($this->order->getId());
$broadcastToAgent = new BroadcastToAgent();
$broadcastToAgent->broadcast($this->order->getOrderCache(\Events::getRedis()) + ['notice_exception_code' => StateCode::FINISH_EXCEED]);
}
/**
* 充满自停
* 修改订单状态
* 记录订单异常
* 推送消息
* 释放口子
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toPowerFullState()
{
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => StateCode::FINISH_FULL,
'end_time' => $this->nowDate,
'end_capacity' => $this->order->getEndCapacity(),
'state' => 1,
], 'id = ' . $this->order->getId());
$orderExceptionModel = new OrderExceptionModel();
$orderExceptionModel->insertRow([
'order_id' => $this->order->getId(),
'state' => StateCode::PORT_CHARGER . StateCode::FINISH_FULL,
'desc' => '订单充电自停',
'created_at' => $this->nowDate,
]);
$chargerFullMessage = new ChargerFullMessage();
$chargerFullMessage->setEndTime($this->nowDate);
$chargerFullMessage->setStartTime($this->order->getStartTime());
$chargerFullMessage->setPurchaseTime($this->order->getPurchaseTime());
$chargerFullMessage->setRemark($chargerFullMessage->getRemark() . '\n' . sprintf('%012x', $this->order->getId()));
$sendMessage = new SendMessage();
if ($sendMessage->request($chargerFullMessage) === false) {
Log::error('send charger full message fail');
}
$port = new Port();
$port->setPortId($this->order->getPortId());
$port->setState(StateCode::PORT_ONLINE);
$port->setGatewayId($this->order->getGatewayId());
$port->setStationId($this->order->getStationId());
$port->freePort($this->order->getId());
$broadcastToAgent = new BroadcastToAgent();
$broadcastToAgent->broadcast($this->order->getOrderCache(\Events::getRedis()) + ['notice_exception_code' => StateCode::FINISH_FULL]);
}
/**
* 口子脱落
* redis订单状态副本更新
* 推送用户信息
* 发布延时任务十分钟后检测端口
*
*
* @throws \GuzzleHttp\Exception\GuzzleException
* @throws \AMQPConnectionException
* @throws \AMQPExchangeException
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toShedState()
{
$this->order->setStateCode(StateCode::PORT_SHED);
$this->order->setShedTime($this->nowTimeStamp);
$orderSaveRedis = new OrderSaveRedis($this->order);
$orderSaveRedis->save([
'stateCode',
'shedTime'
]);
$orderModel = new OrderModel();
$orderModel->update([
'updated_at' => $this->nowDate,
'shed_time' => $this->nowDate,
], 'id = ' . $this->order->getId());
$orderExceptionModel = new OrderExceptionModel();
$orderExceptionModel->insertRow([
'order_id' => $this->order->getId(),
'state' => StateCode::PORT_CHARGER . StateCode::PORT_SHED,
'desc' => '口子脱落',
'created_at' => $this->nowDate,
]);
//更新端口状态和订单状态
$port = new Port($this->order->getPortId());
$port->setState(StateCode::PORT_SHED);
$port->setGatewayId($this->order->getGatewayId());
$port->setStationId($this->order->getStationId());
$port->updatePortState($this->order->getId());
$chargerShedMessage = new ChargerShedMessage();
$chargerShedMessage->setStationName($this->order->getStationName());
$chargerShedMessage->setPortName($this->order->getPortName());
$chargerShedMessage->setUserId($this->order->getUserId());
$chargerShedMessage->setDate($this->nowDate);
$sendMessage = new SendMessage();
if ($sendMessage->request($chargerShedMessage) == false) {
Log::error('send port shed message fail');
}
//todo publish 十分钟的延迟任务
try {
$publish = new PublishPortShed();
$publish->publishOrder([
'order_id' => $this->order->getId(),
'shed_time' => $this->nowTimeStamp,
'port_id' => $this->order->getPortId(),
'gateway_mac' => $this->order->getGatewayMac(),
'check_times' => 1,
'gateway_id' => $this->order->getGatewayId(),
'station_id' => $_SESSION['station_id'],
]);
} catch (\Exception $exception) {
Log::error($exception->getMessage());
}
$broadcastToAgent = new BroadcastToAgent();
$broadcastToAgent->broadcast($this->order->getOrderCache(\Events::getRedis()) + ['notice_exception_code' => StateCode::PORT_SHED]);
}
public function toShedTimeoutState()
{
Log::error('charger state can not change to shed timeout');
}
/**
* 更新订单记录
* 释放口子
* 清楚订单redis副本
* 推送用户消息
* @throws \GuzzleHttp\Exception\GuzzleException
*
*/
public function toTimeoutState()
{
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => StateCode::FINISH_TIME_END,
'end_capacity' => $this->order->getEndCapacity(),
'end_time' => $this->nowDate,
'updated_at' => $this->nowDate,
'state' => 1,
], 'id = ' . $this->order->getId());
$port = new Port();
$port->setPortId($this->order->getPortId());
$port->setState(StateCode::PORT_ONLINE);
$port->setGatewayId($this->order->getGatewayId());
$port->setStationId($this->order->getStationId());
$port->freePort($this->order->getId());
$chargerTimeoutMessage = new ChargerTimeoutMessage();
$chargerTimeoutMessage->setStationName($this->order->getStationName());
$chargerTimeoutMessage->setPortName($this->order->getPortName());
$chargerTimeoutMessage->setOrderId($this->order->getId());
$chargerTimeoutMessage->setOrderAmount($this->order->getPayAmount());
$chargerTimeoutMessage->setEndTime($this->nowDate);
$chargerTimeoutMessage->setUserId($this->order->getUserId());
$chargerTime = $this->nowTimeStamp - $this->order->getStartTime();
$chargerTime /= 60;
$chargerTimeoutMessage->setChargerTime((int)$chargerTime);
$sendMessage = new SendMessage();
if ($sendMessage->request($chargerTimeoutMessage) == false) {
Log::error('send charger timeout message fail');
}
}
/**
* 关闭失败
*/
public function stopFail()
{
}
}
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/13
* Time: 上午11:22
*/
namespace Lib\cdz_order\state;
use Lib\cdz\order\Order;
class ExceptionState extends State
{
public function __construct(Order $order)
{
parent::__construct($order);
}
public function toUserFinish()
{
// TODO: Implement toUserFinish() method.
}
public function toWaitingState()
{
// TODO: Implement toWaitingState() method.
}
public function toChargerState()
{
// TODO: Implement toChargerState() method.
}
public function toExceptionState()
{
// TODO: Implement toExceptionState() method.
}
public function toPowerExceedState()
{
// TODO: Implement toPowerExceedState() method.
}
public function toPowerFullState()
{
// TODO: Implement toPowerFullState() method.
}
public function toShedState()
{
// TODO: Implement toShedState() method.
}
public function toShedTimeoutState()
{
// TODO: Implement toShedTimeoutState() method.
}
public function toTimeoutState()
{
// TODO: Implement toTimeoutState() method.
}
public function stopFail()
{
// TODO: Implement stopFail() method.
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/20
* Time: 下午6:45
*/
namespace Lib\cdz_order\state;
use Lib\cdz\order\NoticePortShed;
use Lib\cdz\order\Order;
use Lib\log\Log;
class OfflineNetState extends State
{
use NoticePortShed;
/**
* @var int
*/
private $remainChargerTime = 0;
public function __construct(Order $order)
{
parent::__construct($order);
$startTime = $this->order->getStartTime();
if ($startTime === '' || $this->order->getOfflineTime() == '0') {
$this->remainChargerTime = (int)($this->order->getPurchaseTime());
} else {
$purchaseTime = $this->order->getPurchaseTime();
$this->remainChargerTime = $purchaseTime * 60 - ((int)$this->order->getOnlineTime() - $startTime);
Log::debug('remain charger time' . $this->remainChargerTime);
$this->remainChargerTime = (int)($this->remainChargerTime / 60);
}
}
public function toUserFinish()
{
// TODO: Implement toUserFinish() method.
}
public function toWaitingState()
{
// TODO: Implement toWaitingState() method.
}
public function toChargerState()
{
if ($this->order->getIsRefund() === 1) {
//已经退款 下发结束充电命令
$this->order->stop($this->order, $_SESSION['client_id'], 43);
return;
}
}
public function toExceptionState()
{
// TODO: Implement toExceptionState() method.
}
public function toPowerExceedState()
{
// TODO: Implement toPowerExceedState() method.
}
public function toPowerFullState()
{
// TODO: Implement toPowerFullState() method.
}
/**
* @throws \AMQPConnectionException
* @throws \AMQPExchangeException
*/
public function toShedState()
{
if ($this->remainChargerTime > 0) {
$this->publishPortShed($this->order);
}
// TODO: Implement toShedState() method.
}
public function toShedTimeoutState()
{
// TODO: Implement toShedTimeoutState() method.
}
public function toTimeoutState()
{
// TODO: Implement toTimeoutState() method.
}
/**
* @return int
*/
public function getRemainChargerTime(): int
{
return $this->remainChargerTime;
}
/**
* @param int $remainChargerTime
*/
public function setRemainChargerTime(int $remainChargerTime): void
{
$this->remainChargerTime = $remainChargerTime;
}
public function stopFail()
{
// TODO: Implement stopFail() method.
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/20
* Time: 下午6:45
*/
namespace Lib\cdz_order\state;
use Lib\cdz\order\Order;
class OfflinePowerState extends State
{
/**
* @var int
*/
private $remainChargerTime = 0;
public function __construct(Order $order)
{
parent::__construct($order);
if ($this->order->getIsRefund() === 1) {
//已经退款 下发结束充电命令
//$this->order->stop($this->order,$_SESSION['client_id'],43);
$this->remainChargerTime = 0;
return;
}
$offlineTime = $this->order->getOfflineTime();
$startTime = $this->order->getStartTime();
if ($startTime === '' || $this->order->getOfflineTime() == '0') {
$this->remainChargerTime = (int)($this->order->getPurchaseTime());
} else {
$purchaseTime = $this->order->getPurchaseTime();
$this->remainChargerTime = $purchaseTime * 60 - ($offlineTime - $startTime);
$this->remainChargerTime = (int)($this->remainChargerTime / 60);
}
}
public function toUserFinish()
{
// TODO: Implement toUserFinish() method.
}
public function toWaitingState()
{
// TODO: Implement toWaitingState() method.
}
public function toChargerState()
{
if ($this->order->getIsRefund() === 1) {
//已经退款 下发结束充电命令
//$this->order->stop($this->order,$_SESSION['client_id'],43);
$this->remainChargerTime = 0;
return;
}
$offlineTime = $this->order->getOfflineTime();
$startTime = $this->order->getStartTime();
$purchaseTime = $this->order->getPurchaseTime();
$this->remainChargerTime = $purchaseTime * 60 - ($offlineTime - $startTime);
$this->remainChargerTime = (int)($this->remainChargerTime / 60);
}
public function toExceptionState()
{
// TODO: Implement toExceptionState() method.
}
public function toPowerExceedState()
{
// TODO: Implement toPowerExceedState() method.
}
public function toPowerFullState()
{
// TODO: Implement toPowerFullState() method.
}
public function toShedState()
{
// TODO: Implement toShedState() method.
}
public function toShedTimeoutState()
{
// TODO: Implement toShedTimeoutState() method.
}
public function toTimeoutState()
{
// TODO: Implement toTimeoutState() method.
}
public function stopFail()
{
// TODO: Implement stopFail() method.
}
/**
* @return int
*/
public function getRemainChargerTime(): int
{
return $this->remainChargerTime;
}
/**
* @param int $remainChargerTime
*/
public function setRemainChargerTime(int $remainChargerTime): void
{
$this->remainChargerTime = $remainChargerTime;
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/13
* Time: 上午11:22
*/
namespace Lib\cdz_order\state;
use Lib\cdz\order\Order;
class PowerExceedState extends State
{
public function __construct(Order $order)
{
parent::__construct($order);
}
public function toUserFinish()
{
// TODO: Implement toUserFinish() method.
}
public function toWaitingState()
{
// TODO: Implement toWaitingState() method.
}
public function toChargerState()
{
// TODO: Implement toChargerState() method.
}
public function toExceptionState()
{
// TODO: Implement toExceptionState() method.
}
public function toPowerExceedState()
{
// TODO: Implement toPowerExceedState() method.
}
public function toPowerFullState()
{
// TODO: Implement toPowerFullState() method.
}
public function toShedState()
{
// TODO: Implement toShedState() method.
}
public function toShedTimeoutState()
{
// TODO: Implement toShedTimeoutState() method.
}
public function toTimeoutState()
{
// TODO: Implement toTimeoutState() method.
}
public function stopFail()
{
// TODO: Implement stopFail() method.
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/13
* Time: 上午11:22
*/
namespace Lib\cdz_order\state;
use Lib\cdz\order\Order;
class PowerFullState extends State
{
public function __construct(Order $order)
{
parent::__construct($order);
}
public function toWaitingState()
{
// TODO: Implement toWaitingState() method.
}
public function toChargerState()
{
// TODO: Implement toChargerState() method.
}
public function toExceptionState()
{
// TODO: Implement toExceptionState() method.
}
public function toPowerExceedState()
{
// TODO: Implement toPowerExceedState() method.
}
public function toPowerFullState()
{
// TODO: Implement toPowerFullState() method.
}
public function toShedState()
{
// TODO: Implement toShedState() method.
}
public function toShedTimeoutState()
{
// TODO: Implement toShedTimeoutState() method.
}
public function toTimeoutState()
{
// TODO: Implement toTimeoutState() method.
}
public function toUserFinish()
{
// TODO: Implement toUserFinish() method.
}
public function stopFail()
{
// TODO: Implement stopFail() method.
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/13
* Time: 上午11:21
*/
namespace Lib\cdz_order\state;
use Application\model\OrderExceptionModel;
use Application\model\OrderModel;
use Lib\cdz\order\Order;
use Lib\cdz\order\save\OrderSaveRedis;
use Lib\log\Log;
use Lib\remote\api\message\ChargerReloadMessage;
use Lib\remote\api\message\ChargerShedTimeOutMessage;
use Lib\remote\api\message\ChargerTimeoutMessage;
use Lib\remote\api\message\FinishByUserMessage;
use Lib\remote\api\message\SendMessage;
use Lib\StateCode;
use Lib\station\gateway\port\Port;
class ShedState extends State
{
public function __construct(Order $order)
{
parent::__construct($order);
}
/**
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toUserFinish()
{
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => $this->order->getEndCode(),
'end_capacity' => $this->order->getEndCapacity(),
'updated_at' => $this->nowDate,
'end_time' => $this->nowDate,
'state' => 1,
], 'id = ' . $this->order->getId());
$port = new Port();
$port->setState(StateCode::PORT_ONLINE);
$port->setPortId($this->order->getPortId());
$port->setGatewayId($this->order->getGatewayId());
$port->setStationId($this->order->getStationId());
$port->freePort($this->order->getId());
//用户主动结束充电推送
$finishByUserMessage = new FinishByUserMessage();
$finishByUserMessage->setOrderId($this->order->getId());
$finishByUserMessage->setAddress($this->order->getStationName() . '--' . $this->order->getPortName());
$finishByUserMessage->setUserId($this->order->getUserId());
$chargerTime = (int)time() - (int)$this->order->getStartTime();
$chargerTime /= 60;
$chargerTime = (int)$chargerTime;
$finishByUserMessage->setChargerTime($chargerTime);
$finishByUserMessage->setEndTime($this->nowDate);
$finishByUserMessage->setOrderAmount($this->order->getPayAmount());
$sendMessage = new SendMessage();
if ($sendMessage->request($finishByUserMessage) == false) {
Log::error('send finish by user message fail');
}
$orderException = new OrderExceptionModel();
$orderException->insertRow([
'order_id' => $this->order->getId(),
'state' => StateCode::PORT_SHED . StateCode::FINISH_USER,
'desc' => '用户主动结束充电',
'created_at' => $this->nowDate,
]);
}
public function toWaitingState()
{
Log::error('shed state can not change to waiting state');
}
/**
* 更新订单状态
* 更新口子状态
* 推送微信消息
* 记录订单异常
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toChargerState()
{
$this->order->setStateCode(StateCode::PORT_CHARGER);
$orderSaveRedis = new OrderSaveRedis($this->order);
$orderSaveRedis->save([
'stateCode',
]);
Log::debug('shed to charger');
$port = new Port($this->order->getPortId());
$port->setState(StateCode::PORT_CHARGER);
$port->updatePortState($this->order->getId());
$chargerReloadMessage = new ChargerReloadMessage();
$chargerReloadMessage->setUserId($this->order->getUserId());
$chargerReloadMessage->setOrderId($this->order->getId());
$chargerReloadMessage->setPortName($this->order->getPortName());
$chargerReloadMessage->setStationName($this->order->getStationName());
$sendMessage = new SendMessage();
if ($sendMessage->request($chargerReloadMessage) === false) {
Log::error('send order reload message fail');
}
$orderExceptionModel = new OrderExceptionModel();
$orderExceptionModel->insertRow(
[
'order_id' => $this->order->getId(),
'state' => StateCode::PORT_SHED . StateCode::PORT_CHARGER,
'created_at' => $this->nowDate,
'desc' => '订单口子脱落重新插上',
]
);
}
public function toExceptionState()
{
//todo
}
public function toPowerExceedState()
{
Log::error('shed state can not change to power exceed state');
}
public function toPowerFullState()
{
Log::error('shed state can not change to power full state');
}
public function toShedState()
{
Log::error('shed state can not change to shed');
}
/**
* 记录订单异常
* 释放口子
* 推送用户消息
* 更新订单记录,记录结束用电量
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toShedTimeoutState()
{
$orderExceptionModel = new OrderExceptionModel();
$orderExceptionModel->insertRow([
'order_id' => $this->order->getId(),
'state' => StateCode::PORT_SHED . StateCode::FINISH_SHED_TIMEOUT,
'created_at' => $this->nowDate,
'desc' => '订单口子脱落超时结束',
]);
$orderModel = new OrderModel();
$orderModel->update([
'state' => 1,
'updated_at' => $this->nowDate,
'end_time' => $this->nowDate,
'is_stop' => StateCode::FINISH_SHED_TIMEOUT,
'end_capacity' => $this->order->getEndCapacity(),
], 'id = ' . $this->order->getId());
$port = new Port($this->order->getPortId());
$port->setState(StateCode::PORT_ONLINE);
$port->setStationId($this->order->getStationId());
$port->setGatewayId($this->order->getGatewayId());
$port->freePort($this->order->getId());
$shedTimeoutMessage = new ChargerShedTimeOutMessage();
$shedTimeoutMessage->setUserId($this->order->getUserId());
$shedTimeoutMessage->setPurchaseTime($this->order->getPurchaseTime());
$shedTimeoutMessage->setStartTime(date('Y-m-d H:i:s', $this->order->getStartTime()));
$shedTimeoutMessage->setEndTime($this->nowDate);
$sendMessage = new SendMessage();
if ($sendMessage->request($shedTimeoutMessage) === false) {
Log::error('send shed timeout message fail');
}
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => StateCode::FINISH_SHED_TIMEOUT,
'end_capacity' => $this->order->getEndCapacity(),
'state' => 1,
], 'id = ' . $this->order->getId());
}
/**
* 记录订单异常
* 释放口子
* 推送结束消息
* 更新订单记录
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toTimeoutState()
{
$orderExceptionModel = new OrderExceptionModel();
$orderExceptionModel->insertRow([
'order_id' => $this->order->getId(),
'state' => StateCode::PORT_SHED . StateCode::FINISH_TIME_END,
'created_at' => $this->nowDate,
'desc' => '订单充电时间结束',
]);
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => StateCode::FINISH_TIME_END,
'end_capacity' => $this->order->getEndCapacity(),
'state' => 1,
'updated_at' => $this->nowDate,
'end_time' => $this->nowDate,
], 'id = ' . $this->order->getId());
$port = new Port($this->order->getPortId());
$port->setState(StateCode::PORT_ONLINE);
$port->setStationId($this->order->getStationId());
$port->setGatewayId($this->order->getGatewayId());
$port->freePort($this->order->getId());
$chargerTimeoutMessage = new ChargerTimeoutMessage();
$chargerTimeoutMessage->setOrderAmount($this->order->getPayAmount());
$chargerTime = $this->nowTimeStamp - (int)$this->order->getStartTime();
$chargerTime /= 60;
$chargerTimeoutMessage->setChargerTime((int)$chargerTime);
$chargerTimeoutMessage->setEndTime($this->nowDate);
$chargerTimeoutMessage->setUserId($this->order->getUserId());
$chargerTimeoutMessage->setOrderId($this->order->getOutTradeNo());
$chargerTimeoutMessage->setPortName($this->order->getPortName());
$chargerTimeoutMessage->setStationName($this->order->getStationName());
$sendMessage = new SendMessage();
if ($sendMessage->request($chargerTimeoutMessage) === false) {
Log::error('shed state order send charger timeout message fail');
}
}
public function stopFail()
{
// TODO: Implement stopFail() method.
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/13
* Time: 上午11:23
*/
namespace Lib\cdz_order\state;
use Lib\cdz\order\Order;
class ShedTimeoutState extends State
{
public function __construct(Order $order)
{
parent::__construct($order);
}
public function toWaitingState()
{
// TODO: Implement toWaitingState() method.
}
public function toChargerState()
{
// TODO: Implement toChargerState() method.
}
public function toExceptionState()
{
// TODO: Implement toExceptionState() method.
}
public function toPowerExceedState()
{
// TODO: Implement toPowerExceedState() method.
}
public function toPowerFullState()
{
// TODO: Implement toPowerFullState() method.
}
public function toShedState()
{
// TODO: Implement toShedState() method.
}
public function toShedTimeoutState()
{
// TODO: Implement toShedTimeoutState() method.
}
public function toTimeoutState()
{
// TODO: Implement toTimeoutState() method.
}
public function toUserFinish()
{
// TODO: Implement toUserFinish() method.
}
public function stopFail()
{
// TODO: Implement stopFail() method.
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/13
* Time: 上午11:21
*/
namespace Lib\cdz_order\state;
use Lib\cdz\order\Order;
abstract class State
{
/**
* @var State
*/
protected $currentState;
/**
* @var Order
*/
protected $order;
/**
* @var int
*/
protected $nowTimeStamp;
/**
* @var string
*/
protected $nowDate;
public function __construct(Order $order)
{
$this->nowTimeStamp = time();
$this->nowDate = date('Y-m-d H:i:s', $this->nowTimeStamp);
$this->order = $order;
}
public abstract function toWaitingState();
public abstract function toChargerState();
public abstract function toExceptionState();//充电异常
public abstract function toPowerExceedState(); //功率超限
public abstract function toPowerFullState(); //充满自停
public abstract function toShedState(); //口子脱落
public abstract function toShedTimeoutState(); //口子脱落超时
public abstract function toTimeoutState(); //时间耗尽
public abstract function toUserFinish();
public abstract function stopFail();
/**
* @return Order
*/
public function getOrder(): Order
{
return $this->order;
}
/**
* @param Order $order
*/
public function setOrder(Order $order): void
{
$this->order = $order;
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/13
* Time: 上午11:23
*/
namespace Lib\cdz_order\state;
use Lib\cdz\order\Order;
class TimeoutState extends State
{
public function __construct(Order $order)
{
parent::__construct($order);
}
public function toWaitingState()
{
// TODO: Implement toWaitingState() method.
}
public function toChargerState()
{
// TODO: Implement toChargerState() method.
}
public function toExceptionState()
{
// TODO: Implement toExceptionState() method.
}
public function toPowerExceedState()
{
// TODO: Implement toPowerExceedState() method.
}
public function toPowerFullState()
{
// TODO: Implement toPowerFullState() method.
}
public function toShedState()
{
// TODO: Implement toShedState() method.
}
public function toShedTimeoutState()
{
// TODO: Implement toShedTimeoutState() method.
}
public function toTimeoutState()
{
// TODO: Implement toTimeoutState() method.
}
public function toUserFinish()
{
// TODO: Implement toUserFinish() method.
}
public function stopFail()
{
// TODO: Implement stopFail() method.
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/8/13
* Time: 上午11:21
*/
namespace Lib\cdz_order\state;
use Application\model\OrderExceptionModel;
use Application\model\OrderModel;
use Lib\cdz\order\Order;
use Lib\cdz\order\save\OrderSaveRedis;
use Lib\log\Log;
use Lib\remote\api\message\FailMessage;
use Lib\remote\api\message\SendMessage;
use Lib\remote\api\message\StartMessage;
use Lib\StateCode;
use Lib\station\gateway\port\Port;
use Src\command\SendCommand;
use Src\command\StopChargerCommand;
class WaitingState extends State
{
/**
* WaitingState constructor.
* @param Order $order
*/
public function __construct(Order $order)
{
parent::__construct($order);
}
/**
*
*/
public function toUserFinish()
{
// TODO: Implement toUserFinish() method.
}
public function toWaitingState()
{
}
public function toRefundFinish()
{
//更新订单状态
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => StateCode::FINISH_REFUND,
'end_capacity' => $this->order->getEndCapacity(),
'end_time' => date('Y-m-d H:i:s'),
], 'id = ' . $this->order->getId());
$port = new Port();
$port->setState(StateCode::PORT_ONLINE);
$port->setPortId($this->order->getPortId());
$port->setStationId($this->order->getStationId());
$port->setGatewayId($this->order->getGatewayId());
$port->freePort($this->order->getId());
//释放端口
}
/**
*
* 开始充电
* 更新订单的cache
* 更新数据库中订单
* 推送开始充电消息
* 订单轨迹记录
* 更新端口状态
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toChargerState(): void
{
//订单已经退款则直接结束
//更新订单cache
$this->order->setStartTime($this->nowTimeStamp);
$this->order->setStateCode(12);
\Events::pipe();
$orderSaveRedis = new OrderSaveRedis($this->order);
$orderSaveRedis->save(['stateCode', 'startTime', 'startCapacity']);
//更新口子状态
$port = new Port();
$port->setPortId($this->order->getPortId());
$port->setState(StateCode::PORT_CHARGER);
$port->setGatewayId($this->order->getGatewayId());
$port->setStationId($_SESSION['station_id']);
$port->updatePortState($this->order->getId());
\Events::exec();
//更新订单状态
$update = [
'is_charger' => StateCode::PORT_CHARGER,
'start_time' => date('Y-m-d H:i:s', $this->order->getStartTime()),
'start_capacity' => $this->order->getStartCapacity(),
];
$orderModel = new OrderModel();
$orderModel->update($update, 'id = ' . $this->order->getId());
// $orderExceptionModel = new OrderExceptionModel();
//
// $orderExceptionModel->insertRow([
//
// 'order_id' => $this->order->getId(),
// 'state' => '-1' . StateCode::PORT_CHARGER,
// 'desc' => '开始充电',
// 'created_at' => $this->nowDate,
// ]);
$port->addUsingOrder($this->order->getPortId(), $this->order->getId());
}
/**
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toExceptionState(): void
{
//更新订单状态
$orderModel = new OrderModel();
$orderModel->update([
'is_charger' => StateCode::PORT_EXCEPTION,
], 'id = ' . $this->order->getId());
//添加订单异常
$orderExceptionModel = new OrderExceptionModel();
$orderExceptionModel->insertRow([
'order_id' => $this->order->getId(),
'state' => '-1' . StateCode::PORT_EXCEPTION,
'desc' => '打开口子失败',
'created_at' => date('Y-m-d H:i:s'),
]);
//推送消息
//更新口子状态
$port = new Port();
$port->setPortId($this->order->getPortId());
$port->setState(StateCode::PORT_EXCEPTION);
$port->updatePortState($this->order->getId());
// TODO: Implement toExceptionState() method.
}
/**
* 功率超限
*/
public function toPowerExceedState()
{
Log::error('waiting state can not change to power exceed state');
}
public function toPowerFullState()
{
Log::error('waiting state can not change to power full state');
}
public function toShedState()
{
Log::error('waiting state can not change to shed state');
}
public function toShedTimeoutState()
{
Log::error('waiting state can not change to shed timeout');
}
public function toTimeoutState()
{
Log::error('waiting state can not change to timeout state');
}
public function stopFail()
{
// TODO: Implement stopFail() method.
}
}
\ No newline at end of file
......@@ -153,6 +153,11 @@ class Order
/**
* @var string
*/
private $cardId = '';
/**
* @param $name
* @return string
*/
......@@ -628,5 +633,21 @@ class Order
$this->stationId = $stationId;
}
/**
* @return string
*/
public function getCardId(): string
{
return $this->cardId;
}
/**
* @param string $cardId
*/
public function setCardId(string $cardId): void
{
$this->cardId = $cardId;
}
}
\ No newline at end of file
......@@ -10,6 +10,7 @@ namespace Lib\cdz\order\save;
use Lib\cdz\order\Order;
use Lib\log\Log;
class OrderSaveRedis
{
......@@ -44,6 +45,8 @@ class OrderSaveRedis
}
}
Log::debug('update', $update);
$this->redis->hMset($this->order->getCacheKeyName(), $update);
$this->redis->expire($this->order->getCacheKeyName(), 60 * 60 * 24);
......@@ -51,5 +54,33 @@ class OrderSaveRedis
}
public function saveAll()
{
$update = [];
try {
$reflection = new \ReflectionClass($this->order);
$properties = $reflection->getDefaultProperties();
foreach ($properties as $property) {
if (isset($this->order->$property) && $this->order->$property != '') {
$update[$property] = $this->order->$property;
}
}
} catch (\Exception $exception) {
Log::error($exception->getMessage());
}
$this->redis->hMset($this->order->getCacheKeyName(), $update);
$this->redis->expire($this->order->getCacheKeyName(), 60 * 60 * 24);
}
}
\ No newline at end of file
......@@ -9,6 +9,7 @@
namespace Lib\cdz\order\state;
use Application\model\ExceptionModel;
use Application\model\OrderExceptionModel;
use Application\model\OrderModel;
use Lib\cdz\order\Order;
......@@ -138,12 +139,24 @@ class ChargerState extends State
'created_at' => date('Y-m-d H:i:s', $this->nowTimeStamp),
]);
$exceptionModel = new ExceptionModel();
$exceptionModel->insertRow([
'message' => '功率超限',
'gateway_id' => isset($_SESSION['gateway_id']) ? $_SESSION['gateway_id'] : '',
'station_id' => isset($_SESSION['station_id']) ? $_SESSION['station_id'] : '',
'port_id' => $this->order->getPortId(),
'created_at' => date('Y-m-d H:i:s'),
'type' => 2,
]);
$powerExceedMessage = new PowerExceedMessage();
$powerExceedMessage->setUserId($this->order->getUserId());
$powerExceedMessage->setStartTime($this->order->getStartTime());
$powerExceedMessage->setStartTime(date('Y-m-d H:i:s', $this->order->getStartTime()));
$powerExceedMessage->setEndTime(date('Y-m-d H:i:s', $this->nowTimeStamp));
$powerExceedMessage->setChargerTime($this->order->getPurchaseTime());
$powerExceedMessage->setRemark($powerExceedMessage->getRemark() . '\n' . sprintf('%012x', $this->order->getId()));
$powerExceedMessage->setRemark($powerExceedMessage->getRemark() . '(' . $this->order->getOutTradeNo() . ')');
$sendMessage = new SendMessage();
......@@ -256,6 +269,16 @@ class ChargerState extends State
'created_at' => $this->nowDate,
]);
$exceptionModel = new ExceptionModel();
$exceptionModel->insertRow([
'message' => '口子脱落',
'gateway_id' => isset($_SESSION['gateway_id']) ? $_SESSION['gateway_id'] : '',
'station_id' => isset($_SESSION['station_id']) ? $_SESSION['station_id'] : '',
'port_id' => $this->order->getPortId(),
'created_at' => date('Y-m-d H:i:s'),
'type' => 2,
]);
//更新端口状态和订单状态
$port = new Port($this->order->getPortId());
$port->setState(StateCode::PORT_SHED);
......@@ -337,12 +360,13 @@ class ChargerState extends State
$chargerTimeoutMessage->setStationName($this->order->getStationName());
$chargerTimeoutMessage->setPortName($this->order->getPortName());
$chargerTimeoutMessage->setOrderId($this->order->getId());
$chargerTimeoutMessage->setOrderAmount($this->order->getPayAmount());
$chargerTimeoutMessage->setEndTime($this->nowDate);
$chargerTimeoutMessage->setUserId($this->order->getUserId());
$chargerTime = $this->nowTimeStamp - $this->order->getStartTime();
$chargerTime /= 60;
$chargerTimeoutMessage->setChargerTime((int)$chargerTime);
$chargerTimeoutMessage->setChargerTime(ceil($chargerTime));
$sendMessage = new SendMessage();
if ($sendMessage->request($chargerTimeoutMessage) == false) {
......
......@@ -26,6 +26,14 @@ class OfflineNetState extends State
{
parent::__construct($order);
if ($this->order->getIsRefund() === 1) {
//已经退款 下发结束充电命令
//$this->order->stop($this->order,$_SESSION['client_id'],43);
$this->remainChargerTime = 0;
return;
}
$startTime = $this->order->getStartTime();
if ($startTime === '' || $this->order->getOfflineTime() == '0') {
......@@ -33,20 +41,11 @@ class OfflineNetState extends State
} else {
$purchaseTime = $this->order->getPurchaseTime();
Log::debug($purchaseTime * 60);
Log::debug($this->order->getOfflineTime());
Log::debug($this->order->getStartTime());
$this->remainChargerTime = $purchaseTime * 60 - ((int)$this->order->getOnlineTime() - $startTime);
Log::debug('remain charger time' . $this->remainChargerTime);
Log::debug('---');
Log::debug($this->remainChargerTime);
$this->remainChargerTime = (int)($this->remainChargerTime / 60);
$this->remainChargerTime = ceil($this->remainChargerTime / 60);
Log::debug($this->remainChargerTime);
}
......
......@@ -10,12 +10,44 @@ namespace Lib\cdz\order\state;
use Lib\cdz\order\Order;
use Lib\cdz\order\save\OrderSaveRedis;
use Lib\log\Log;
class OfflinePowerState extends State
{
/**
* @var int
*/
private $remainChargerTime = 0;
public function __construct(Order $order)
{
parent::__construct($order);
if ($this->order->getIsRefund() === 1) {
//已经退款 下发结束充电命令
//$this->order->stop($this->order,$_SESSION['client_id'],43);
$this->remainChargerTime = 0;
return;
}
$offlineTime = $this->order->getOfflineTime();
$startTime = $this->order->getStartTime();
if ($startTime === '' || $this->order->getOfflineTime() == '0') {
$this->remainChargerTime = (int)($this->order->getPurchaseTime());
} else {
$purchaseTime = $this->order->getPurchaseTime();
$this->remainChargerTime = $purchaseTime * 60 - ($offlineTime - $startTime);
$this->order->setStartTime(strval((int)$startTime + ((int)time() - (int)$offlineTime)));
$this->remainChargerTime = ceil($this->remainChargerTime / 60);
$saveOrder = new OrderSaveRedis($this->order);
$saveOrder->save(['startTime']);
}
}
public function toUserFinish()
......@@ -24,11 +56,6 @@ class OfflinePowerState extends State
}
/**
* @var int
*/
private $remainChargerTime = 0;
public function toWaitingState()
{
// TODO: Implement toWaitingState() method.
......@@ -89,5 +116,21 @@ class OfflinePowerState extends State
// TODO: Implement stopFail() method.
}
/**
* @return int
*/
public function getRemainChargerTime(): int
{
return $this->remainChargerTime;
}
/**
* @param int $remainChargerTime
*/
public function setRemainChargerTime(int $remainChargerTime): void
{
$this->remainChargerTime = $remainChargerTime;
}
}
\ No newline at end of file
......@@ -20,6 +20,7 @@ use Lib\remote\api\message\SendMessage;
use Lib\remote\api\message\StartMessage;
use Lib\StateCode;
use Lib\station\gateway\port\Port;
use Src\BroadcastToAgent;
use Src\command\SendCommand;
use Src\command\StopChargerCommand;
......@@ -179,7 +180,8 @@ class WaitingState extends State
$failMessage = new FailMessage();
$failMessage->setAddress($this->order->getStationName() . '--' . $this->order->getPortName());
$failMessage->setAddress($this->order->getPayAmount());
$failMessage->setAmount($this->order->getPayAmount());
$failMessage->setOrderId($this->order->getOutTradeNo());
$failMessage->setUserId($this->order->getUserId());
$sendMessage = new SendMessage();
if ($sendMessage->request($failMessage) === false) {
......@@ -190,9 +192,17 @@ class WaitingState extends State
$port = new Port();
$port->setPortId($this->order->getPortId());
$port->setState(StateCode::PORT_EXCEPTION);
$port->setStationId($this->order->getStationId());
$port->setGatewayId($this->order->getGatewayId());
$port->updatePortState($this->order->getId());
$broadcastToAgent = new BroadcastToAgent();
$broadcastToAgent->broadcast([
'data' => $this->order->getOrderCache(\Events::getRedis()),
'notice_exception_code' => StateCode::PORT_EXCEPTION,
]);
// TODO: Implement toExceptionState() method.
}
......
......@@ -48,7 +48,7 @@ class ChargerFullMessage extends Message
'value' => $this->endTime,
'color' => '#333',
],
'remark' => [
'remark' => [
'value' => $this->remark,
'color' => '#333',
],
......
......@@ -17,7 +17,7 @@ class ChargerShedMessage extends Message
{
protected $templateId = 'C0LvfETe-1rCR_IhOydDGPTUwwYkrWZxgfwMsETrhw8';
private $first = '尊敬的 户,充电端未检测到插头,请您在10分钟内接入。';
private $first = '尊敬的用户,充电端未检测到插头,请您在10分钟内接入';
private $stationName = '';
......@@ -25,7 +25,7 @@ class ChargerShedMessage extends Message
private $date = '';
private $remark = '感谢您的使用。';
private $remark = '感谢您的使用';
public function __construct()
{
......@@ -52,7 +52,7 @@ class ChargerShedMessage extends Message
'color' => '#333',
],
'remark' => [
'value' => '感谢你的使用',
'value' => '感谢您的使用',
'color' => '#333',
],
......
......@@ -54,7 +54,7 @@ class FailMessage extends Message
],
'keyword1' => [
'value' => sprintf('%012x', $this->orderId),
'value' => $this->orderId,
'color' => '#333',
],
......
......@@ -23,13 +23,13 @@ class FinishByUserMessage extends Message
private $endTime = '';
private $address= '';
private $address = '';
private $chargerTime = 0;
private $orderAmount =0;
private $orderAmount = 0;
private $remark = '感谢你的使用';
private $remark = '感谢您的使用';
/**
* FinishByUserMessage constructor.
......@@ -59,14 +59,14 @@ class FinishByUserMessage extends Message
'color' => '#333',
],
'keyword3' => [
'value' => $this->chargerTime.'分钟',
'value' => $this->chargerTime . '分钟',
'color' => '#333',
],
'keyword4' => [
'value' => '¥'.number_format($this->orderAmount/100,2),
'value' => '¥' . number_format($this->orderAmount / 100, 2),
'color' => '#333',
],
'remark' => [
'remark' => [
'value' => $this->remark,
'color' => '#333',
],
......@@ -171,6 +171,4 @@ class FinishByUserMessage extends Message
}
}
\ No newline at end of file
......@@ -20,7 +20,7 @@ class PowerExceedMessage extends Message
/**
* @var string
*/
private $first = '尊敬的用户,你的爱车功率过大,本次充电已结束';
private $first = '尊敬的用户,您的爱车功率过大,本次充电已结束';
/**
* @var string
......@@ -45,7 +45,8 @@ class PowerExceedMessage extends Message
/**
* PowerExceedMessage constructor.
*/
public function __construct() {
public function __construct()
{
$this->templateId = getenv('MESSAGE_POWER_EXCEED');
......@@ -67,14 +68,14 @@ class PowerExceedMessage extends Message
],
'keyword2' => [
'value' => $this->chargerTime.'分钟',
'value' => $this->chargerTime . '分钟',
'color' => '#333',
],
'keyword3' => [
'value' => $this->endTime,
'color' => '#333',
],
'remark' => [
'remark' => [
'value' => $this->remark,
'color' => '#333',
],
......@@ -179,8 +180,4 @@ class PowerExceedMessage extends Message
}
}
\ No newline at end of file
......@@ -17,7 +17,7 @@ class ShedMessage extends Message
/**
* @var string
*/
private $first = '尊敬的用户,充电端未检测到插头,请您在%s分钟内接入。';
private $first = '尊敬的用户,充电端未检测到插头,请您在%s分钟内接入';
/**
* @var string
......@@ -57,7 +57,7 @@ class ShedMessage extends Message
public function getPushJson(): string
{
$this->first = sprintf($this->first,$this->waitingTime);
$this->first = sprintf($this->first, $this->waitingTime);
return json_encode([
......@@ -75,7 +75,7 @@ class ShedMessage extends Message
'value' => $this->time,
'color' => '#333',
],
'remark' => [
'remark' => [
'value' => $this->remark,
'color' => '#333',
],
......@@ -182,5 +182,4 @@ class ShedMessage extends Message
}
}
\ No newline at end of file
......@@ -36,7 +36,7 @@ class StartMessage extends Message
/**
* @var string
*/
private $remark = '感谢你的使用';
private $remark = '感谢您的使用';
/**
* StartMessage constructor.
......
......@@ -24,7 +24,6 @@ class Port
/**
* 端口正在充电的订单号
* cdz:port:using:order_id:hash
*/
const USING_ORDER_ID = 'cdz:port:using:order_id:hash';
......@@ -263,5 +262,13 @@ class Port
$this->stationId = $stationId;
}
public function addUsingOrder(int $portId, int $orderId)
{
$redis = \Events::getRedis();
$redis->hSet(self::USING_ORDER_ID, $portId, $orderId);
}
}
\ No newline at end of file
......@@ -9,6 +9,7 @@
namespace Workerman\Protocols;
use Lib\log\Log;
use Workerman\Connection\TcpConnection;
class Bintohex
......@@ -27,36 +28,32 @@ class Bintohex
$packageLength = strlen($data);
$packageLength/=2;
$packageLength /= 2;
//小于最小的头长度继续等待
if($packageLength < self::HEAD_LENGTH)
{
if ($packageLength < self::HEAD_LENGTH) {
return 0;
}
//数据非ffaa开头直接断开连接
if(substr($data,0,4) !== 'ffaa')
{
var_dump('111');
if (substr($data, 0, 4) !== 'ffaa') {
$tcpConnection->close();
}
$hexCount = hexdec(substr($data,8,4));
$hexCount = hexdec(substr($data, 8, 4));
if($packageLength >= $hexCount)
{
if ($packageLength >= $hexCount) {
return $hexCount;
}else{
} else {
return 0;
}
}
......@@ -67,6 +64,11 @@ class Bintohex
public static function encode($buffer)
{
if (strlen($buffer) % 2 === 1) {
Log::error('encode error');
return;
}
return pack('H*', bin2hex(hex2bin($buffer)));
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment