Commit 4e6e37f7 by BANice

线上提交版

parent 741f7b68
...@@ -5,20 +5,37 @@ ...@@ -5,20 +5,37 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="00edf348-0453-4317-8d2b-bf5eb8ea4b7a" name="Default" comment=""> <list default="true" id="00edf348-0453-4317-8d2b-bf5eb8ea4b7a" name="Default" comment="">
<change afterPath="$PROJECT_DIR$/Application/Controller/AmmeterController.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Application/Controller/PortStateController.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Application/Controller/PowerOffController.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Lib/api/message/ChargerShedTimeOutMessage.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Lib/cdz_order/state/Refund.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Application/Controller/AccessController.php" beforeDir="false" afterPath="$PROJECT_DIR$/Application/Controller/AccessController.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Application/Controller/AccessController.php" beforeDir="false" afterPath="$PROJECT_DIR$/Application/Controller/AccessController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Application/Controller/CertifyController.php" beforeDir="false" afterPath="$PROJECT_DIR$/Application/Controller/CertifyController.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Application/Controller/HeartController.php" beforeDir="false" afterPath="$PROJECT_DIR$/Application/Controller/HeartController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Application/Controller/PortController.php" beforeDir="false" afterPath="$PROJECT_DIR$/Application/Controller/PortController.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Application/Controller/PortController.php" beforeDir="false" afterPath="$PROJECT_DIR$/Application/Controller/PortController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Application/Controller/PowerController.php" beforeDir="false" afterPath="$PROJECT_DIR$/Application/Controller/PowerController.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Application/Controller/PowerController.php" beforeDir="false" afterPath="$PROJECT_DIR$/Application/Controller/PowerController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Application/Events.php" beforeDir="false" afterPath="$PROJECT_DIR$/Application/Events.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Application/Events.php" beforeDir="false" afterPath="$PROJECT_DIR$/Application/Events.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/api/message/ChargerFinishMessage.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/api/message/ChargerFinishMessage.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Lib/api/message/ChargerFullMessage.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/api/message/ChargerFullMessage.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/api/message/ChargerRefundMessage.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/api/message/ChargerRefundMessage.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/api/message/ChargerReloadMessage.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/api/message/ChargerReloadMessage.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/api/message/ChargerStartMessage.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/api/message/ChargerStartMessage.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/cdz_order/Order.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/Order.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Lib/cdz_order/Order.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/Order.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/cdz_order/order/SaveOrder.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/order/SaveOrder.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/cdz_order/state/Charger.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/state/Charger.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Lib/cdz_order/state/Charger.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/state/Charger.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/cdz_order/state/Created.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/state/Created.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/cdz_order/state/Offline.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/state/Offline.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Lib/cdz_order/state/Offline.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/state/Offline.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/cdz_order/state/Online.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/state/Online.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/cdz_order/state/PortShed.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/state/PortShed.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/cdz_order/state/State.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/state/State.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Lib/cdz_order/state/State.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/state/State.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/cdz_order/state/WaitingCharger.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/state/WaitingCharger.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Lib/cdz_order/state/WaitingCharger.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/cdz_order/state/WaitingCharger.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/order_exception/Exception.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/order_exception/Exception.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Lib/order_exception/Exception.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/order_exception/Exception.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/order_exception/OrderTrace.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/order_exception/OrderTrace.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/port/Port.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/port/Port.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Lib/port/Port.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/port/Port.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/send/Send.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/send/Send.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/send/command/StopChargerCommand.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/send/command/StopChargerCommand.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Lib/state/StateCode.php" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/state/StateCode.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Route/Api.php" beforeDir="false" afterPath="$PROJECT_DIR$/Route/Api.php" afterDir="false" />
</list> </list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" /> <option name="TRACKING_ENABLED" value="true" />
...@@ -35,11 +52,11 @@ ...@@ -35,11 +52,11 @@
</component> </component>
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="PowerController.php" pinned="false" current-in-tab="false"> <file leaf-file-name="AccessController.php" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/Application/Controller/PowerController.php"> <entry file="file://$PROJECT_DIR$/Application/Controller/AccessController.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-1537"> <state relative-caret-position="516">
<caret line="151" column="17" selection-start-line="151" selection-start-column="17" selection-end-line="151" selection-end-column="17" /> <caret line="283" selection-start-line="283" selection-end-line="283" />
<folding> <folding>
<element signature="e#126#153#0#PHP" expanded="true" /> <element signature="e#126#153#0#PHP" expanded="true" />
</folding> </folding>
...@@ -47,89 +64,89 @@ ...@@ -47,89 +64,89 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="Events.php" pinned="false" current-in-tab="false"> <file leaf-file-name="PublishPortShed.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Application/Events.php"> <entry file="file://$PROJECT_DIR$/Lib/rabbitmq/PublishPortShed.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="193"> <state relative-caret-position="255">
<caret line="154" selection-start-line="154" selection-end-line="154" /> <caret line="22" column="20" selection-start-line="22" selection-start-column="20" selection-end-line="22" selection-end-column="20" />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="PortController.php" pinned="false" current-in-tab="false"> <file leaf-file-name="Charger.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Application/Controller/PortController.php"> <entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/Charger.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2385"> <state relative-caret-position="889">
<caret line="164" selection-start-line="164" selection-end-line="164" /> <caret line="143" column="51" selection-start-line="143" selection-start-column="51" selection-end-line="143" selection-end-column="51" />
<folding> <folding>
<element signature="e#131#158#0#PHP" expanded="true" /> <element signature="e#123#156#0#PHP" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="CertifyController.php" pinned="false" current-in-tab="false"> <file leaf-file-name="Events.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Application/Controller/CertifyController.php"> <entry file="file://$PROJECT_DIR$/Application/Events.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="647"> <state relative-caret-position="997">
<caret line="52" column="9" selection-start-line="52" selection-start-column="9" selection-end-line="52" selection-end-column="9" /> <caret line="213" column="39" selection-start-line="213" selection-start-column="39" selection-end-line="213" selection-end-column="39" />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="Gateway.php" pinned="false" current-in-tab="false"> <file leaf-file-name="ExceptionModel.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/vendor/workerman/gateway-worker/src/Lib/Gateway.php"> <entry file="file://$PROJECT_DIR$/Application/Model/ExceptionModel.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="369"> <state relative-caret-position="120">
<caret line="169" column="27" selection-start-line="169" selection-start-column="27" selection-end-line="169" selection-end-column="27" /> <caret line="13" column="6" selection-start-line="13" selection-start-column="6" selection-end-line="13" selection-end-column="6" />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="AccessController.php" pinned="false" current-in-tab="false"> <file leaf-file-name="Controller.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Application/Controller/AccessController.php"> <entry file="file://$PROJECT_DIR$/Application/Controller.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="395"> <state relative-caret-position="400">
<caret line="242" column="40" selection-start-line="242" selection-start-column="40" selection-end-line="242" selection-end-column="40" /> <caret line="155" column="26" selection-start-line="155" selection-start-column="26" selection-end-line="155" selection-end-column="26" />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="Offline.php" pinned="false" current-in-tab="true"> <file leaf-file-name="DeviceLog.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/Offline.php"> <entry file="file://$PROJECT_DIR$/Lib/log/DeviceLog.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="579"> <state relative-caret-position="780">
<caret line="47" column="12" selection-start-line="47" selection-start-column="12" selection-end-line="47" selection-end-column="12" /> <caret line="57" column="20" selection-start-line="57" selection-start-column="20" selection-end-line="57" selection-end-column="20" />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="HeartController.php" pinned="false" current-in-tab="false"> <file leaf-file-name="Api.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Application/Controller/HeartController.php"> <entry file="file://$PROJECT_DIR$/Route/Api.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="345"> <state relative-caret-position="467">
<caret line="29" column="21" selection-start-line="29" selection-start-column="21" selection-end-line="29" selection-end-column="21" /> <caret line="70" column="44" selection-start-line="70" selection-start-column="44" selection-end-line="70" selection-end-column="44" />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="State.php" pinned="false" current-in-tab="false"> <file leaf-file-name="Port.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/State.php"> <entry file="file://$PROJECT_DIR$/Lib/port/Port.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1828"> <state relative-caret-position="310">
<caret line="281" column="20" selection-start-line="281" selection-start-column="20" selection-end-line="281" selection-end-column="20" /> <caret line="199" column="20" selection-start-line="199" selection-start-column="20" selection-end-line="199" selection-end-column="20" />
<folding>
<element signature="e#123#148#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="CapacityController.php" pinned="false" current-in-tab="false"> <file leaf-file-name="PowerOffController.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Application/Controller/CapacityController.php"> <entry file="file://$PROJECT_DIR$/Application/Controller/PowerOffController.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="390"> <state relative-caret-position="330">
<caret line="31" lean-forward="true" selection-start-line="31" selection-end-line="31" /> <caret line="27" selection-start-line="27" selection-end-line="27" />
<folding>
<element signature="e#126#153#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
...@@ -151,7 +168,17 @@ ...@@ -151,7 +168,17 @@
<find>ff0000</find> <find>ff0000</find>
<find>端口离线命令</find> <find>端口离线命令</find>
<find>after</find> <find>after</find>
<find>记录订单</find>
<find>var_dump</find> <find>var_dump</find>
<find>OrderTrace</find>
<find>3</find>
<find>充电时间结束</find>
<find>记录订单异常</find>
<find>var_d</find>
<find>offlineTime</find>
<find>del</find>
<find>'('</find>
<find>var_dum</find>
</findStrings> </findStrings>
<replaceStrings> <replaceStrings>
<replace>Env</replace> <replace>Env</replace>
...@@ -172,57 +199,57 @@ ...@@ -172,57 +199,57 @@
<component name="IdeDocumentHistory"> <component name="IdeDocumentHistory">
<option name="CHANGED_PATHS"> <option name="CHANGED_PATHS">
<list> <list>
<option value="$PROJECT_DIR$/Application/Model.php" />
<option value="$PROJECT_DIR$/Lib/Log.php" />
<option value="$PROJECT_DIR$/Application/Controller.php" />
<option value="$PROJECT_DIR$/Application/Model/ConfigModel.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerStartMessage.php" />
<option value="$PROJECT_DIR$/Application/Middleware/AuthMiddleware.php" />
<option value="$PROJECT_DIR$/Lib/Gateway.php" />
<option value="$PROJECT_DIR$/Lib/log/DeviceLog.php" />
<option value="$PROJECT_DIR$/Application/Model/ExceptionModel.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerRefundMessage.php" />
<option value="$PROJECT_DIR$/Route/Api.php" />
<option value="$PROJECT_DIR$/vendor/workerman/workerman/Protocols/Bintohex.php" /> <option value="$PROJECT_DIR$/vendor/workerman/workerman/Protocols/Bintohex.php" />
<option value="$PROJECT_DIR$/Application/Model/OrderCapacityModel.php" /> <option value="$PROJECT_DIR$/Application/Model/OrderCapacityModel.php" />
<option value="$PROJECT_DIR$/Lib/rabbitmq/MyRabbitMq.php" /> <option value="$PROJECT_DIR$/Lib/rabbitmq/MyRabbitMq.php" />
<option value="$PROJECT_DIR$/Lib/api/message/PortShedMessage.php" /> <option value="$PROJECT_DIR$/Lib/api/message/PortShedMessage.php" />
<option value="$PROJECT_DIR$/Lib/rabbitmq/Publish.php" /> <option value="$PROJECT_DIR$/Lib/rabbitmq/Publish.php" />
<option value="$PROJECT_DIR$/Lib/rabbitmq/PublishPortShed.php" /> <option value="$PROJECT_DIR$/Lib/rabbitmq/PublishPortShed.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerReloadMessage.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerExcessMessage.php" /> <option value="$PROJECT_DIR$/Lib/api/message/ChargerExcessMessage.php" />
<option value="$PROJECT_DIR$/Lib/api/message/MessageData.php" /> <option value="$PROJECT_DIR$/Lib/api/message/MessageData.php" />
<option value="$PROJECT_DIR$/Lib/api/message/Push.php" /> <option value="$PROJECT_DIR$/Lib/api/message/Push.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerFullMessage.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerExceedMessage.php" /> <option value="$PROJECT_DIR$/Lib/api/message/ChargerExceedMessage.php" />
<option value="$PROJECT_DIR$/Application/Controller/SettingController.php" /> <option value="$PROJECT_DIR$/Application/Controller/SettingController.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerFailMessage.php" /> <option value="$PROJECT_DIR$/Lib/api/message/ChargerFailMessage.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerExceptionMessage.php" /> <option value="$PROJECT_DIR$/Lib/api/message/ChargerExceptionMessage.php" />
<option value="$PROJECT_DIR$/Lib/order_exception/OrderTrace.php" />
<option value="$PROJECT_DIR$/Lib/send/Send.php" />
<option value="$PROJECT_DIR$/Lib/tool/StringTool.php" /> <option value="$PROJECT_DIR$/Lib/tool/StringTool.php" />
<option value="$PROJECT_DIR$/Application/Controller/HeartController.php" />
<option value="$PROJECT_DIR$/Lib/redis/RedisKey.php" /> <option value="$PROJECT_DIR$/Lib/redis/RedisKey.php" />
<option value="$PROJECT_DIR$/Lib/order_exception/OrderState.php" /> <option value="$PROJECT_DIR$/Lib/order_exception/OrderState.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/PortShed.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/Online.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/order/SaveOrder.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/Created.php" />
<option value="$PROJECT_DIR$/Lib/Response.php" /> <option value="$PROJECT_DIR$/Lib/Response.php" />
<option value="$PROJECT_DIR$/test/test.php" /> <option value="$PROJECT_DIR$/test/test.php" />
<option value="$PROJECT_DIR$/Application/Controller/AccessController.php" /> <option value="$PROJECT_DIR$/Application/Controller/CertifyController.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerReloadMessage.php" />
<option value="$PROJECT_DIR$/Lib/port/Port.php" /> <option value="$PROJECT_DIR$/Lib/port/Port.php" />
<option value="$PROJECT_DIR$/Lib/order_exception/Exception.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/State.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/WaitingCharger.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/Order.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/Charger.php" />
<option value="$PROJECT_DIR$/Application/Controller/PortController.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerFinishMessage.php" /> <option value="$PROJECT_DIR$/Lib/api/message/ChargerFinishMessage.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/order/SaveOrder.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerShedTimeOutMessage.php" />
<option value="$PROJECT_DIR$/Application/Controller/HeartController.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerFullMessage.php" />
<option value="$PROJECT_DIR$/Lib/state/StateCode.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/Online.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/Finish.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/Created.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/State.php" />
<option value="$PROJECT_DIR$/Lib/order_exception/OrderTrace.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/Refund.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerStartMessage.php" />
<option value="$PROJECT_DIR$/Lib/order_exception/Exception.php" />
<option value="$PROJECT_DIR$/Application/Controller/PortStateController.php" />
<option value="$PROJECT_DIR$/Application/Controller/AmmeterController.php" />
<option value="$PROJECT_DIR$/Lib/api/message/ChargerRefundMessage.php" />
<option value="$PROJECT_DIR$/Application/Controller/PowerController.php" /> <option value="$PROJECT_DIR$/Application/Controller/PowerController.php" />
<option value="$PROJECT_DIR$/Application/Controller/PortController.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/WaitingCharger.php" />
<option value="$PROJECT_DIR$/Application/Events.php" /> <option value="$PROJECT_DIR$/Application/Events.php" />
<option value="$PROJECT_DIR$/Application/Controller/CertifyController.php" /> <option value="$PROJECT_DIR$/Lib/cdz_order/state/PortShed.php" />
<option value="$PROJECT_DIR$/Lib/send/command/StopChargerCommand.php" />
<option value="$PROJECT_DIR$/Lib/send/Send.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/Offline.php" /> <option value="$PROJECT_DIR$/Lib/cdz_order/state/Offline.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/state/Charger.php" />
<option value="$PROJECT_DIR$/Lib/cdz_order/Order.php" />
<option value="$PROJECT_DIR$/Route/Api.php" />
<option value="$PROJECT_DIR$/Application/Controller/PowerOffController.php" />
<option value="$PROJECT_DIR$/Application/Controller/AccessController.php" />
</list> </list>
</option> </option>
</component> </component>
...@@ -281,6 +308,30 @@ ...@@ -281,6 +308,30 @@
<item name="Application" type="462c0819:PsiDirectoryNode" /> <item name="Application" type="462c0819:PsiDirectoryNode" />
<item name="Controller" type="462c0819:PsiDirectoryNode" /> <item name="Controller" type="462c0819:PsiDirectoryNode" />
</path> </path>
<path>
<item name="cdz_gateway" type="b2602c69:ProjectViewProjectNode" />
<item name="cdz_gateway" type="462c0819:PsiDirectoryNode" />
<item name="Lib" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="cdz_gateway" type="b2602c69:ProjectViewProjectNode" />
<item name="cdz_gateway" type="462c0819:PsiDirectoryNode" />
<item name="Lib" type="462c0819:PsiDirectoryNode" />
<item name="cdz_order" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="cdz_gateway" type="b2602c69:ProjectViewProjectNode" />
<item name="cdz_gateway" type="462c0819:PsiDirectoryNode" />
<item name="Lib" type="462c0819:PsiDirectoryNode" />
<item name="cdz_order" type="462c0819:PsiDirectoryNode" />
<item name="state" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="cdz_gateway" type="b2602c69:ProjectViewProjectNode" />
<item name="cdz_gateway" type="462c0819:PsiDirectoryNode" />
<item name="Lib" type="462c0819:PsiDirectoryNode" />
<item name="rabbitmq" type="462c0819:PsiDirectoryNode" />
</path>
</expand> </expand>
<select /> <select />
</subPane> </subPane>
...@@ -348,12 +399,12 @@ ...@@ -348,12 +399,12 @@
<workItem from="1530496499150" duration="45852000" /> <workItem from="1530496499150" duration="45852000" />
<workItem from="1531129252870" duration="18903000" /> <workItem from="1531129252870" duration="18903000" />
<workItem from="1531278957060" duration="18725000" /> <workItem from="1531278957060" duration="18725000" />
<workItem from="1531467678517" duration="33417000" /> <workItem from="1531467678517" duration="142023000" />
</task> </task>
<servers /> <servers />
</component> </component>
<component name="TimeTrackingManager"> <component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="397011000" /> <option name="totallyTimeSpent" value="505617000" />
</component> </component>
<component name="TodoView"> <component name="TodoView">
<todo-panel id="selected-file"> <todo-panel id="selected-file">
...@@ -366,7 +417,6 @@ ...@@ -366,7 +417,6 @@
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="1920" y="-58" width="1920" height="1080" extended-state="0" /> <frame x="1920" y="-58" width="1920" height="1080" extended-state="0" />
<editor active="true" />
<layout> <layout>
<window_info anchor="bottom" id="TODO" order="6" weight="0.32977587" /> <window_info anchor="bottom" id="TODO" order="6" weight="0.32977587" />
<window_info anchor="bottom" id="Event Log" order="7" side_tool="true" /> <window_info anchor="bottom" id="Event Log" order="7" side_tool="true" />
...@@ -402,373 +452,389 @@ ...@@ -402,373 +452,389 @@
</breakpoint-manager> </breakpoint-manager>
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/Lib/send/Send.php"> <entry file="file://$PROJECT_DIR$/Lib/Request.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1320"> <state relative-caret-position="90">
<caret line="96" selection-start-line="96" selection-end-line="96" /> <caret line="11" column="6" selection-start-line="11" selection-start-column="6" selection-end-line="11" selection-end-column="6" />
<folding>
<element signature="e#115#131#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/send/command/StopChargerCommand.php"> <entry file="file://$PROJECT_DIR$/Application/Controller/HeartController.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="990"> <state relative-caret-position="615">
<caret line="72" column="20" selection-start-line="72" selection-start-column="20" selection-end-line="72" selection-end-column="20" /> <caret line="48" column="90" selection-start-line="48" selection-start-column="90" selection-end-line="48" selection-end-column="90" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/Log.php"> <entry file="file://$PROJECT_DIR$/Lib/order_exception/OrderState.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="300"> <state relative-caret-position="660">
<caret line="27" column="5" selection-start-line="27" selection-start-column="5" selection-end-line="27" selection-end-column="5" /> <caret line="49" column="27" selection-start-line="49" selection-start-column="27" selection-end-line="49" selection-end-column="27" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/send/command/BalanceChargerCommand.php"> <entry file="file://$PROJECT_DIR$/Lib/api/message/PortShedMessage.php">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/Lib/api/message/ChargerFullMessage.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="285"> <state relative-caret-position="400">
<caret line="24" selection-start-line="24" selection-end-line="24" /> <caret line="50" column="20" selection-start-line="50" selection-start-column="20" selection-end-line="50" selection-end-column="20" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/api/message/ChargerRefundMessage.php"> <entry file="file://$PROJECT_DIR$/Lib/api/message/ChargerExceptionMessage.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="955"> <state relative-caret-position="-1018">
<caret line="96" column="39" selection-start-line="96" selection-start-column="39" selection-end-line="96" selection-end-column="39" /> <caret line="11" column="6" selection-start-line="11" selection-start-column="6" selection-end-line="11" selection-end-column="6" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/api/message/ChargerFailMessage.php"> <entry file="file://$PROJECT_DIR$/Lib/order_exception/OrderTrace.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-304"> <state relative-caret-position="685">
<caret line="11" column="6" selection-start-line="11" selection-start-column="6" selection-end-line="11" selection-end-column="6" /> <caret line="121" column="20" selection-start-line="121" selection-start-column="20" selection-end-line="121" selection-end-column="20" />
<folding>
<element signature="e#124#166#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/api/message/ChargerExcessMessage.php"> <entry file="file://$PROJECT_DIR$/Lib/state/StateCode.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90"> <state relative-caret-position="300">
<caret line="11" column="6" selection-start-line="11" selection-start-column="6" selection-end-line="11" selection-end-column="6" /> <caret line="25" column="10" selection-start-line="25" selection-start-column="10" selection-end-line="25" selection-end-column="10" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/api/message/ChargerExceptionMessage.php"> <entry file="file://$PROJECT_DIR$/Lib/order_exception/Exception.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="512"> <state relative-caret-position="150">
<caret line="57" column="41" selection-start-line="57" selection-start-column="41" selection-end-line="57" selection-end-column="41" /> <caret line="15" column="25" selection-start-line="15" selection-start-column="25" selection-end-line="15" selection-end-column="25" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Application/Controller.php"> <entry file="file://$PROJECT_DIR$/Application/Model/OrderCapacityModel.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1245"> <state relative-caret-position="120">
<caret line="93" column="18" lean-forward="true" selection-start-line="93" selection-start-column="18" selection-end-line="93" selection-end-column="18" /> <caret line="13" column="35" lean-forward="true" selection-start-line="13" selection-start-column="35" selection-end-line="13" selection-end-column="35" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Application/Model.php"> <entry file="file://$PROJECT_DIR$/Application/Model.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="426"> <state relative-caret-position="584">
<caret line="93" column="43" selection-start-line="93" selection-start-column="43" selection-end-line="93" selection-end-column="43" /> <caret line="93" column="30" selection-start-line="93" selection-start-column="30" selection-end-line="93" selection-end-column="30" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Application/Model/OrderExceptionModel.php"> <entry file="file://$PROJECT_DIR$/vendor/workerman/mysql/README.md">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state relative-caret-position="255"> <state split_layout="SPLIT">
<caret line="22" selection-start-line="22" selection-end-line="22" /> <first_editor />
<second_editor />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/api/message/ChargerStartMessage.php"> <entry file="file://$PROJECT_DIR$/vendor/workerman/mysql/src/Connection.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1535"> <state relative-caret-position="713">
<caret line="132" column="20" selection-start-line="132" selection-start-column="20" selection-end-line="132" selection-end-column="20" /> <caret line="257" column="20" selection-start-line="257" selection-start-column="20" selection-end-line="257" selection-end-column="20" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/state/StateCode.php"> <entry file="file://$PROJECT_DIR$/Lib/api/message/Push.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210"> <state relative-caret-position="120">
<caret line="19" column="10" selection-start-line="19" selection-start-column="10" selection-end-line="19" selection-end-column="10" /> <caret line="14" column="6" selection-start-line="14" selection-start-column="6" selection-end-line="14" selection-end-column="6" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Route/Api.php"> <entry file="file://$PROJECT_DIR$/Application/Controller/SettingController.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="300"> <state relative-caret-position="495">
<caret line="27" column="52" selection-start-line="27" selection-start-column="52" selection-end-line="27" selection-end-column="52" /> <caret line="42" selection-start-line="42" selection-end-line="42" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/standard/standard_1.php"> <entry file="file://$PROJECT_DIR$/Application/Controller/AmmeterController.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="299"> <state relative-caret-position="330">
<caret line="996" column="9" selection-start-line="996" selection-start-column="9" selection-end-line="996" selection-end-column="9" /> <caret line="27" selection-start-line="27" selection-end-line="27" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/bug_doc/guide/charger.png"> <entry file="file://$PROJECT_DIR$/test/test.php">
<provider selected="true" editor-type-id="images" />
</entry>
<entry file="file://$PROJECT_DIR$/Application/Controller/SettingController.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="495"> <state relative-caret-position="165">
<caret line="42" selection-start-line="42" selection-end-line="42" /> <caret line="16" selection-start-line="16" selection-end-line="16" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/standard/_types.php"> <entry file="file://$PROJECT_DIR$/Lib/api/message/ChargerRefundMessage.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1575"> <state relative-caret-position="1773">
<caret line="105" column="13" selection-start-line="105" selection-start-column="13" selection-end-line="105" selection-end-column="13" /> <caret line="174" column="20" selection-start-line="174" selection-start-column="20" selection-end-line="174" selection-end-column="20" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/composer.json"> <entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/redis/Redis.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60"> <state relative-caret-position="297">
<caret line="4" column="31" selection-start-line="4" selection-start-column="31" selection-end-line="4" selection-end-column="31" /> <caret line="2734" column="20" selection-start-line="2734" selection-start-column="20" selection-end-line="2734" selection-end-column="20" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/standard/standard_3.php"> <entry file="file://$PROJECT_DIR$/Application/Controller/PortController.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="304"> <state relative-caret-position="198">
<caret line="94" column="9" selection-start-line="94" selection-start-column="9" selection-end-line="94" selection-end-column="9" /> <caret line="341" column="109" selection-start-line="341" selection-start-column="109" selection-end-line="341" selection-end-column="109" />
<folding>
<element signature="e#131#158#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/Response.php"> <entry file="file://$PROJECT_DIR$/Lib/Response.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="483"> <state relative-caret-position="483">
<caret line="83" selection-start-line="83" selection-end-line="83" /> <caret line="72" column="20" selection-start-line="72" selection-start-column="20" selection-end-line="72" selection-end-column="20" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/standard/standard_5.php"> <entry file="file://$PROJECT_DIR$/Lib/Gateway.php">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/Lib/redis/RedisKey.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="304"> <state relative-caret-position="555">
<caret line="293" column="9" selection-start-line="293" selection-start-column="9" selection-end-line="293" selection-end-column="9" /> <caret line="42" column="10" selection-start-line="42" selection-start-column="10" selection-end-line="42" selection-end-column="10" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/api/message/ChargerReloadMessage.php"> <entry file="file://$PROJECT_DIR$/Application/Controller/CertifyController.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90"> <state relative-caret-position="660">
<caret line="11" column="6" selection-start-line="11" selection-start-column="6" selection-end-line="11" selection-end-column="6" /> <caret line="52" column="9" selection-start-line="52" selection-start-column="9" selection-end-line="52" selection-end-column="9" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/Created.php"> <entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/Created.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180"> <state relative-caret-position="84">
<caret line="17" selection-start-line="17" selection-end-line="17" /> <caret line="17" column="15" selection-start-line="17" selection-start-column="15" selection-end-line="17" selection-end-column="15" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/Finish.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120">
<caret line="13" selection-start-line="13" selection-end-line="13" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/Online.php"> <entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/Online.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90"> <state relative-caret-position="150">
<caret line="11" column="6" selection-start-line="11" selection-start-column="6" selection-end-line="11" selection-end-column="6" /> <caret line="15" selection-start-line="15" selection-end-line="15" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/PortShed.php"> <entry file="file://$PROJECT_DIR$/Lib/api/message/ChargerFinishMessage.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135"> <state relative-caret-position="-556">
<caret line="14" selection-start-line="14" selection-end-line="14" /> <caret line="14" column="6" selection-start-line="14" selection-start-column="6" selection-end-line="14" selection-end-column="6" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/order/SaveOrder.php"> <entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/PortShed.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="727"> <state relative-caret-position="280">
<caret line="64" column="20" selection-start-line="64" selection-start-column="20" selection-end-line="64" selection-end-column="20" /> <caret line="224" column="27" lean-forward="true" selection-start-line="224" selection-start-column="27" selection-end-line="224" selection-end-column="27" />
<folding> <folding>
<element signature="e#123#147#0#PHP" expanded="true" /> <element signature="e#123#156#0#PHP" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/standard/standard_9.php"> <entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/Refund.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="299"> <state relative-caret-position="150">
<caret line="85" column="9" selection-start-line="85" selection-start-column="9" selection-end-line="85" selection-end-column="9" /> <caret line="15" selection-start-line="15" selection-end-line="15" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/redis/RedisKey.php"> <entry file="file://$PROJECT_DIR$/Lib/api/message/ChargerStartMessage.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="465"> <state relative-caret-position="-171">
<caret line="36" column="51" selection-start-line="36" selection-start-column="51" selection-end-line="36" selection-end-column="51" /> <caret line="28" column="20" selection-start-line="28" selection-start-column="20" selection-end-line="28" selection-end-column="20" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/test/test.php"> <entry file="file://$PROJECT_DIR$/Application/Middleware.php">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/WaitingCharger.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180"> <state relative-caret-position="778">
<caret line="17" lean-forward="true" selection-start-line="17" selection-end-line="17" /> <caret line="165" lean-forward="true" selection-start-line="165" selection-end-line="165" />
<folding>
<element signature="e#123#156#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/redis/Redis.php"> <entry file="file://$PROJECT_DIR$/Application/Controller/PowerController.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="297"> <state relative-caret-position="729">
<caret line="3000" column="20" selection-start-line="3000" selection-start-column="20" selection-end-line="3000" selection-end-column="20" /> <caret line="684" column="9" selection-start-line="684" selection-start-column="9" selection-end-line="684" selection-end-column="9" />
<folding>
<element signature="e#126#153#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/order_exception/OrderState.php"> <entry file="file://$PROJECT_DIR$/Lib/cdz_order/order/SaveOrder.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="660"> <state relative-caret-position="480">
<caret line="49" column="27" selection-start-line="49" selection-start-column="27" selection-end-line="49" selection-end-column="27" /> <caret line="37" column="20" selection-start-line="37" selection-start-column="20" selection-end-line="37" selection-end-column="20" />
<folding>
<element signature="e#123#147#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/order_exception/Exception.php"> <entry file="file://$PROJECT_DIR$/Lib/send/Command.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330"> <state relative-caret-position="90">
<caret line="27" column="27" selection-start-line="27" selection-start-column="27" selection-end-line="27" selection-end-column="27" /> <caret line="11" column="15" selection-start-line="11" selection-start-column="15" selection-end-line="11" selection-end-column="15" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/order_exception/OrderTrace.php"> <entry file="file://$PROJECT_DIR$/Lib/send/command/StopChargerCommand.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="465"> <state relative-caret-position="827">
<caret line="36" column="20" selection-start-line="36" selection-start-column="20" selection-end-line="36" selection-end-column="20" /> <caret line="170" selection-start-line="170" selection-end-line="170" />
<folding>
<element signature="e#124#166#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/WaitingCharger.php"> <entry file="file://$PROJECT_DIR$/Application/Controller/PortStateController.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="320"> <state relative-caret-position="990">
<caret line="28" lean-forward="true" selection-start-line="28" selection-end-line="28" /> <caret line="71" column="53" lean-forward="true" selection-start-line="71" selection-start-column="53" selection-end-line="71" selection-end-column="53" />
<folding>
<element signature="e#127#154#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/Order.php"> <entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/State.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="292"> <state relative-caret-position="3524">
<caret line="98" column="20" selection-start-line="98" selection-start-column="20" selection-end-line="98" selection-end-column="20" /> <caret line="323" column="20" selection-start-line="323" selection-start-column="20" selection-end-line="323" selection-end-column="20" />
<folding> <folding>
<element signature="e#117#147#0#PHP" expanded="true" /> <element signature="e#123#148#0#PHP" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/Finish.php"> <entry file="file://$PROJECT_DIR$/Lib/send/Send.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120"> <state relative-caret-position="491">
<caret line="13" lean-forward="true" selection-start-line="13" selection-end-line="13" /> <caret line="94" column="8" selection-start-line="94" selection-start-column="8" selection-end-line="94" selection-end-column="8" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/port/Port.php"> <entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/Offline.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="355"> <state relative-caret-position="431">
<caret line="31" column="20" selection-start-line="31" selection-start-column="20" selection-end-line="31" selection-end-column="20" /> <caret line="67" selection-start-line="67" selection-end-line="67" />
<folding>
<element signature="e#124#148#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/Charger.php"> <entry file="file://$PROJECT_DIR$/Lib/cdz_order/Order.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="675"> <state relative-caret-position="812">
<caret line="50" selection-start-line="50" selection-end-line="50" /> <caret line="459" lean-forward="true" selection-start-line="459" selection-end-line="459" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/api/message/ChargerFinishMessage.php"> <entry file="file://$PROJECT_DIR$/Application/Controller/PowerOffController.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="503"> <state relative-caret-position="330">
<caret line="79" column="71" selection-start-line="79" selection-start-column="71" selection-end-line="79" selection-end-column="71" /> <caret line="27" selection-start-line="27" selection-end-line="27" />
<folding>
<element signature="e#126#153#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Application/Events.php"> <entry file="file://$PROJECT_DIR$/Route/Api.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="193"> <state relative-caret-position="467">
<caret line="154" selection-start-line="154" selection-end-line="154" /> <caret line="70" column="44" selection-start-line="70" selection-start-column="44" selection-end-line="70" selection-end-column="44" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/vendor/workerman/gateway-worker/src/Lib/Gateway.php"> <entry file="file://$PROJECT_DIR$/Lib/log/DeviceLog.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="369"> <state relative-caret-position="780">
<caret line="169" column="27" selection-start-line="169" selection-start-column="27" selection-end-line="169" selection-end-column="27" /> <caret line="57" column="20" selection-start-line="57" selection-start-column="20" selection-end-line="57" selection-end-column="20" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Application/Controller/CapacityController.php"> <entry file="file://$PROJECT_DIR$/Application/Controller.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="390"> <state relative-caret-position="400">
<caret line="31" lean-forward="true" selection-start-line="31" selection-end-line="31" /> <caret line="155" column="26" selection-start-line="155" selection-start-column="26" selection-end-line="155" selection-end-column="26" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Application/Controller/CertifyController.php"> <entry file="file://$PROJECT_DIR$/Lib/port/Port.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="647"> <state relative-caret-position="310">
<caret line="52" column="9" selection-start-line="52" selection-start-column="9" selection-end-line="52" selection-end-column="9" /> <caret line="199" column="20" selection-start-line="199" selection-start-column="20" selection-end-line="199" selection-end-column="20" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Application/Controller/HeartController.php"> <entry file="file://$PROJECT_DIR$/Application/Model/ExceptionModel.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="345"> <state relative-caret-position="120">
<caret line="29" column="21" selection-start-line="29" selection-start-column="21" selection-end-line="29" selection-end-column="21" /> <caret line="13" column="6" selection-start-line="13" selection-start-column="6" selection-end-line="13" selection-end-column="6" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Application/Controller/PortController.php"> <entry file="file://$PROJECT_DIR$/Application/Events.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2385"> <state relative-caret-position="997">
<caret line="164" selection-start-line="164" selection-end-line="164" /> <caret line="213" column="39" selection-start-line="213" selection-start-column="39" selection-end-line="213" selection-end-column="39" />
<folding>
<element signature="e#131#158#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Application/Controller/PowerController.php"> <entry file="file://$PROJECT_DIR$/Lib/rabbitmq/PublishPortShed.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-1537"> <state relative-caret-position="255">
<caret line="151" column="17" selection-start-line="151" selection-start-column="17" selection-end-line="151" selection-end-column="17" /> <caret line="22" column="20" selection-start-line="22" selection-start-column="20" selection-end-line="22" selection-end-column="20" />
<folding>
<element signature="e#126#153#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/State.php"> <entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/Charger.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1828"> <state relative-caret-position="889">
<caret line="281" column="20" selection-start-line="281" selection-start-column="20" selection-end-line="281" selection-end-column="20" /> <caret line="143" column="51" selection-start-line="143" selection-start-column="51" selection-end-line="143" selection-end-column="51" />
<folding> <folding>
<element signature="e#123#148#0#PHP" expanded="true" /> <element signature="e#123#156#0#PHP" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Application/Controller/AccessController.php"> <entry file="file://$PROJECT_DIR$/Application/Controller/AccessController.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="395"> <state relative-caret-position="516">
<caret line="242" column="40" selection-start-line="242" selection-start-column="40" selection-end-line="242" selection-end-column="40" /> <caret line="283" selection-start-line="283" selection-end-line="283" />
</state> <folding>
</provider> <element signature="e#126#153#0#PHP" expanded="true" />
</entry> </folding>
<entry file="file://$PROJECT_DIR$/Lib/cdz_order/state/Offline.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="579">
<caret line="47" column="12" selection-start-line="47" selection-start-column="12" selection-end-line="47" selection-end-column="12" />
</state> </state>
</provider> </provider>
</entry> </entry>
......
...@@ -17,11 +17,13 @@ use Application\Model\StationModel; ...@@ -17,11 +17,13 @@ use Application\Model\StationModel;
use GatewayWorker\Lib\Gateway; use GatewayWorker\Lib\Gateway;
use Lib\cdz_order\Order; use Lib\cdz_order\Order;
use Lib\cdz_order\state\Offline; use Lib\cdz_order\state\Offline;
use Lib\cdz_order\state\Online;
use Lib\Log; use Lib\Log;
use Lib\order_exception\OrderState;
use Lib\port\Port; use Lib\port\Port;
use Lib\rabbitmq\PublishPortShed;
use Lib\redis\RedisKey; use Lib\redis\RedisKey;
use Lib\send\command\StopChargerCommand;
use Lib\send\Send;
use Lib\state\StateCode;
class AccessController extends Controller class AccessController extends Controller
{ {
...@@ -55,8 +57,12 @@ class AccessController extends Controller ...@@ -55,8 +57,12 @@ class AccessController extends Controller
$gateway = $gatewayModel->getColumns(['id', 'station_id'], " mac_address = '$mac' "); $gateway = $gatewayModel->getColumns(['id', 'station_id'], " mac_address = '$mac' ");
Log::debug('gateway_info', $gateway); if ($gateway === false) {
Gateway::closeClient($this->clientId);
return;
}
if (count($gateway) !== 0) { if (count($gateway) !== 0) {
$gatewayId = $gateway['id']; $gatewayId = $gateway['id'];
...@@ -116,7 +122,6 @@ class AccessController extends Controller ...@@ -116,7 +122,6 @@ class AccessController extends Controller
$sessionId .= $hex; $sessionId .= $hex;
} }
$this->response->send('02', $sessionId); $this->response->send('02', $sessionId);
} else { } else {
...@@ -142,6 +147,8 @@ class AccessController extends Controller ...@@ -142,6 +147,8 @@ class AccessController extends Controller
Log::debug('端口同步'); Log::debug('端口同步');
$stopCommandArray = [];
$startLogicNum = $this->get('start_num'); $startLogicNum = $this->get('start_num');
$startLogicNumDec = hexdec($startLogicNum); $startLogicNumDec = hexdec($startLogicNum);
...@@ -220,13 +227,19 @@ class AccessController extends Controller ...@@ -220,13 +227,19 @@ class AccessController extends Controller
$responseOrder = []; $responseOrder = [];
$orderModel = new OrderModel();
foreach ($portIdState as $id => $state) { foreach ($portIdState as $id => $state) {
$port->setId($id); $port->setId($id);
$orderId = $port->getPortUsingOrderId($redis, $id); $orderId = $port->getPortUsingOrderId($redis, $id);
if (isset($orderId) === false || $orderId === false || $orderId == 0) { if (isset($orderId) === false || $orderId === false || $orderId == 0) {
Log::debug('缺少orderId');
continue; continue;
} else { } else {
...@@ -235,13 +248,69 @@ class AccessController extends Controller ...@@ -235,13 +248,69 @@ class AccessController extends Controller
$order->setId($orderId); $order->setId($orderId);
if ($order->getOrderCache($redis) !== false) { if ($order->getOrderCache($redis) !== false) {
//插口脱落重新推送定时任务
Log::debug($offlineReason);
//订单从离线的状态变为正在充电状态 //订单从离线的状态变为正在充电状态
$orderState = new Offline($order, $redis, $offlineReason); $orderState = new Offline($order, $redis, $offlineReason);
if ($state === StateCode::PORT_SHED) {
try {
$time = time();
$publish = new PublishPortShed();
$publish->publishOrder([
'order_id' => $order->getId(),
'time' => date('Y-m-d H:i:s'),
'gateway_mac' => $_SESSION['gateway_mac'],
'shed_time' => $time,
]);
} catch (\Exception $exception) {
Log::error($exception->getMessage());
}
$orderState->setShedTime($time);
$orderState->getSaveOrder()->saveShedTime();
}
$orderState->toCharger(); $orderState->toCharger();
$orderId = $order->getId();
$orderStateCode = $orderModel->getColumn('state', 'id = ' . $orderId);
if ($orderStateCode == 3) {
$stopCommand = new StopChargerCommand();
$stopCommand->setOrderId($orderId);
$stopCommand->setLogicNum($order->getPortLogicId());
$stopCommand->setGatewayMac($order->getGatewayMac());
$stopCommand->setFinishType(43);
$stopCommand->setClientUid($order->getGatewayMac());
array_push($stopCommandArray, $stopCommand);
unset($stopCommand);
}
$remainChargerTime = $orderState->getRemainChargerTime(); $remainChargerTime = $orderState->getRemainChargerTime();
if ($remainChargerTime > 0) { if ($remainChargerTime > 0) {
...@@ -253,8 +322,33 @@ class AccessController extends Controller ...@@ -253,8 +322,33 @@ class AccessController extends Controller
sprintf('%04x', $remainChargerTime), sprintf('%04x', $remainChargerTime),
]); ]);
if ($orderStateCode != 3) {
$offlineTimeLength = (int)$orderState->getOnlineTime() - (int)$orderState->getOfflineTime();
$orderState->setStartTime((int)strtotime($orderState->getStartTime()) + (int)$offlineTimeLength);
$orderState->getSaveOrder()->saveStartTime();
$userId = $order->getUserId();
if (Gateway::isUidOnline($userId) === 1) {
Gateway::sendToUid($userId, json_encode(['code' => 10000]));
}
}
} else {
Log::debug('剩余充电时间小于0');
} }
} else {
Log::debug('同步订单找不到redis');
} }
...@@ -264,9 +358,6 @@ class AccessController extends Controller ...@@ -264,9 +358,6 @@ class AccessController extends Controller
} }
Log::debug('using order',$responseOrder);
$orderCount = sprintf('%02x', count($responseOrder)); $orderCount = sprintf('%02x', count($responseOrder));
$responseOrderMessage = ''; $responseOrderMessage = '';
...@@ -277,9 +368,18 @@ class AccessController extends Controller ...@@ -277,9 +368,18 @@ class AccessController extends Controller
} }
$this->response->send('03', $startLogicNum . $count . $totalCount . $orderCount . $responseOrderMessage); $this->response->send('03', $startLogicNum . $count . $totalCount . $orderCount . $responseOrderMessage);
foreach ($stopCommandArray as $stopCommand) {
$send = new Send($stopCommand);
$messageData = $send->makeMessage();
Gateway::sendToCurrentClient($messageData);
unset($send);
}
} }
......
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/7/24
* Time: 下午2:41
*/
namespace Application\Controller;
use Application\Controller;
class AmmeterController extends Controller
{
protected $parameterMap = [
'06' => [
'capacity' => 6
]
];
public function record()
{
}
}
\ No newline at end of file
...@@ -10,6 +10,7 @@ namespace Application\Controller; ...@@ -10,6 +10,7 @@ namespace Application\Controller;
use Application\Controller; use Application\Controller;
use GatewayWorker\Lib\Gateway;
use Lib\Log; use Lib\Log;
class HeartController extends Controller class HeartController extends Controller
...@@ -27,9 +28,25 @@ class HeartController extends Controller ...@@ -27,9 +28,25 @@ class HeartController extends Controller
$time = sprintf('%08x', time()); $time = sprintf('%08x', time());
if(isset($_SESSION['gateway_mac']) === false)
{
Log::error('心跳包未找到gateway_mac,断开连接');
try{
Gateway::closeCurrentClient();
}catch (\Exception $exception)
{
Log::error($exception->getMessage());
}
}
Log::debug("[heart]", [ Log::debug("[heart]", [
'gateway_id' => $_SESSION['gateway_id'], 'gateway_id' => isset($_SESSION['gateway_id']) ? $_SESSION['gateway_id'] : '',
'data' => $this->message, 'data' => $this->message,
'length' => hexdec(substr($this->message,4*2,4)), 'length' => hexdec(substr($this->message,4*2,4)),
......
...@@ -15,7 +15,6 @@ use Application\Model\OrderExceptionModel; ...@@ -15,7 +15,6 @@ use Application\Model\OrderExceptionModel;
use Application\Model\OrderModel; use Application\Model\OrderModel;
use Application\Model\PortModel; use Application\Model\PortModel;
use Application\Model\StationModel; use Application\Model\StationModel;
use function GuzzleHttp\Psr7\str;
use Lib\api\message\ChargerReloadMessage; use Lib\api\message\ChargerReloadMessage;
use Lib\api\message\ChargerStartMessage; use Lib\api\message\ChargerStartMessage;
use Lib\api\message\PortShedMessage; use Lib\api\message\PortShedMessage;
...@@ -25,7 +24,6 @@ use Lib\cdz_order\state\Charger; ...@@ -25,7 +24,6 @@ use Lib\cdz_order\state\Charger;
use Lib\cdz_order\state\WaitingCharger; use Lib\cdz_order\state\WaitingCharger;
use Lib\Gateway; use Lib\Gateway;
use Lib\Log; use Lib\Log;
use Lib\order_exception\OrderState;
use Lib\port\Port; use Lib\port\Port;
use Lib\rabbitmq\PublishPortShed; use Lib\rabbitmq\PublishPortShed;
use Lib\state\StateCode; use Lib\state\StateCode;
...@@ -147,13 +145,13 @@ class PortController extends Controller ...@@ -147,13 +145,13 @@ class PortController extends Controller
foreach ($offlinePortId as $portId) { foreach ($offlinePortId as $portId) {
$orderId = $port->getPortUsingOrderId(\Events::getRedis(),$portId); $orderId = $port->getPortUsingOrderId(\Events::getRedis(), $portId);
$order = new Order(); $order = new Order();
$order->setId($orderId); $order->setId($orderId);
$charger = new Charger($order,\Events::getRedis()); $charger = new Charger($order, \Events::getRedis());
$charger->toOffline(); $charger->toOffline();
...@@ -179,8 +177,6 @@ class PortController extends Controller ...@@ -179,8 +177,6 @@ class PortController extends Controller
$nowTime = date('Y-m-d H:i:s'); $nowTime = date('Y-m-d H:i:s');
Log::debug('口子状态改变', $this->getRequest()->getParameters());
$portMac = $this->get('mac'); $portMac = $this->get('mac');
$state = $this->get('state'); $state = $this->get('state');
...@@ -197,8 +193,6 @@ class PortController extends Controller ...@@ -197,8 +193,6 @@ class PortController extends Controller
$lastState = $port->getState($portId); $lastState = $port->getState($portId);
Log::debug('口子状态改变-->原状态为->' . $lastState . '更新->' . $state);
if ($state === StateCode::PORT_EXCEPTION) { if ($state === StateCode::PORT_EXCEPTION) {
//口子当前状态为异常,下位机会发送充电结束命令状态为中为异常,所以此处不处理,或者只记录 //口子当前状态为异常,下位机会发送充电结束命令状态为中为异常,所以此处不处理,或者只记录
...@@ -224,7 +218,7 @@ class PortController extends Controller ...@@ -224,7 +218,7 @@ class PortController extends Controller
$order->setId($orderId); $order->setId($orderId);
$waiting = new WaitingCharger($order,\Events::getRedis()); $waiting = new WaitingCharger($order, \Events::getRedis());
$waiting->toCharger(); $waiting->toCharger();
...@@ -240,25 +234,6 @@ class PortController extends Controller ...@@ -240,25 +234,6 @@ class PortController extends Controller
$update = ['shed_time' => $nowTime]; $update = ['shed_time' => $nowTime];
// $orderLastState = OrderState::getState($orderId);
//
// if ($orderLastState == StateCode::PORT_SHED) {
//
// if (isset($lastShedTime)) {
// $gapTime = strtotime($nowTime) - strtotime($lastShedTime);
//
// if (($gapTime / 60) > 12) {
//
// //fixme debug
//
// //口子距离上一次插口脱落时间超过了十分中,下发结束充电命令
// //发送结束充电,结束状态为远程超时结束
//
// Log::debug('todo 插口脱落超时10分钟');
//
// }
// }
// }
$orderModel->update($update, 'id = ' . $orderId); $orderModel->update($update, 'id = ' . $orderId);
...@@ -309,19 +284,6 @@ class PortController extends Controller ...@@ -309,19 +284,6 @@ class PortController extends Controller
} }
if ($state !== StateCode::PORT_CHARGER) {
$orderModel = new OrderModel();
if (isset($orderId) === false) {
$orderId = $port->getPortUsingOrderId(\Events::getRedis(), $portId);
}
$orderModel->update(['is_exception' => 1], 'id = ' . $orderId);
}
} }
$redis = \Events::getRedis(); $redis = \Events::getRedis();
...@@ -365,9 +327,8 @@ class PortController extends Controller ...@@ -365,9 +327,8 @@ class PortController extends Controller
$order->setId($orderId); $order->setId($orderId);
if($order->getOrderCache($redis) !== false) if ($order->getOrderCache($redis) !== false) {
{ $waiting = new WaitingCharger($order, $redis);
$waiting = new WaitingCharger($order,$redis);
$waiting->toCharger(); $waiting->toCharger();
...@@ -378,7 +339,7 @@ class PortController extends Controller ...@@ -378,7 +339,7 @@ class PortController extends Controller
$chargerStartMessage->setAmount(number_format($result['order_amount'] / 100, 2)); $chargerStartMessage->setAmount(number_format($result['order_amount'] / 100, 2));
$chargerStartMessage->setAddress($result['station_name'] . '(' . $result['port_name'] . ')'); $chargerStartMessage->setAddress($result['station_name'] . '-' . $result['port_name']);
$push = new Push(); $push = new Push();
...@@ -437,6 +398,15 @@ class PortController extends Controller ...@@ -437,6 +398,15 @@ class PortController extends Controller
} }
//订单状态修改
$order = new Order();
$order->setId($orderId);
$charger = new Charger($order,$redis);
$charger->toPortShed();
//发送延迟任务 //发送延迟任务
try { try {
...@@ -444,17 +414,18 @@ class PortController extends Controller ...@@ -444,17 +414,18 @@ class PortController extends Controller
$publishPortShedJob = new PublishPortShed(); $publishPortShedJob = new PublishPortShed();
$publishPortShedJob->publishOrder(
[
'order_id' => $orderId,
'time' => date('Y-m-d H:i:s'),
'gateway_mac' => $_SESSION['gateway_mac'],
]
);
} catch (\Exception $exception) { } catch (\Exception $exception) {
Log::error($exception->getMessage()); Log::error($exception->getMessage());
} }
$publishPortShedJob->publishOrder(
[
'order_id' => $orderId,
'time' => date('Y-m-d H:i:s'),
'gateway_mac' => $_SESSION['gateway_mac'],
]
);
} }
......
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/7/18
* Time: 上午10:16
*/
namespace Application\Controller;
use Application\Controller;
use Application\Model\OrderModel;
use Lib\cdz_order\Order;
use Lib\cdz_order\state\Charger;
use Lib\cdz_order\state\PortShed;
use Lib\cdz_order\state\State;
use Lib\cdz_order\state\WaitingCharger;
use Lib\Log;
use Lib\port\Port;
use Lib\state\StateCode;
class PortStateController extends Controller
{
protected $parameterMap = [
'0B' => [
'logic' => 1,
'mac' => 8,
'state' => 1,
],
];
/**
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function change()
{
Log::debug('口子状态改变');
$portMac = $this->get('mac');
$state = $this->get('state');
$state = hexdec($state);
$portMacId = $_SESSION['port_mac_id'];
if (!isset($portMacId[$portMac])) {
Log::error('口子状态改变,session中缺少口子的mac地址与id的映射');
return ;
}
$portId = $portMacId[$portMac];
$port = new Port();
$port->setId($portId);
$redis = \Events::getRedis();
$usingOrderId = $port->getPortUsingOrderId($redis, $portId);
$portState = $port->getState($portId);
if(!($portState == -1 && $state == StateCode::PORT_SHED))
{
$port->setPortState([$portId => $state]);
}
if ($usingOrderId === 0) {
$port->setPortState([$portId => $state]);
return;
}
$order = new Order();
$order->setId($usingOrderId);
if ($order->getOrderCache($redis) === false) {
Log::error('using order -> ' . $usingOrderId . '<-redis中缺失订单信息');
return;
}
$orderStateCode = $order->getStateCode();
$orderState = '';
Log::debug('port state ->'.$orderStateCode);
//订单原本的状态对象生成
switch ($orderStateCode) {
case StateCode::PORT_CHARGER:
$orderState = new Charger($order, $redis);
Log::debug('创建充电状态');
break;
case StateCode::PORT_SHED:
$orderState = new PortShed($order, $redis);
Log::debug('订单脱落状态');
break;
case StateCode::WAITING:
$orderState = new WaitingCharger($order, $redis);
break;
default:
break;
}
if (!($orderState instanceof State)) {
Log::error('口子状态改变缺少该state 类' . "($state)");
return;
}
//根据现有的状态修改状态
Log::debug('state->'.$state);
switch ($state) {
case StateCode::PORT_CHARGER:
$orderState->toCharger();
if($orderState instanceof WaitingCharger)
{
$orderModel = new OrderModel();
$date = date('Y-m-d H:i:s');
$orderModel->update(['is_charger' => $state,'start_time' => $date,'updated_at' =>$date ],'id = '.$usingOrderId);
}
break;
case StateCode::PORT_SHED:
$orderState->toPortShed();
break;
default:
break;
}
}
}
\ No newline at end of file
...@@ -18,9 +18,12 @@ use Lib\api\message\ChargerExceptionMessage; ...@@ -18,9 +18,12 @@ use Lib\api\message\ChargerExceptionMessage;
use Lib\api\message\ChargerFinishMessage; use Lib\api\message\ChargerFinishMessage;
use Lib\api\message\ChargerRefundMessage; use Lib\api\message\ChargerRefundMessage;
use Lib\api\message\ChargerStartMessage; use Lib\api\message\ChargerStartMessage;
use Lib\api\message\PortShedMessage;
use Lib\api\message\Push; use Lib\api\message\Push;
use Lib\cdz_order\Order; use Lib\cdz_order\Order;
use Lib\cdz_order\state\Charger; use Lib\cdz_order\state\Charger;
use Lib\cdz_order\state\PortShed;
use Lib\cdz_order\state\State;
use Lib\cdz_order\state\WaitingCharger; use Lib\cdz_order\state\WaitingCharger;
use Lib\Gateway; use Lib\Gateway;
use Lib\Log; use Lib\Log;
...@@ -59,11 +62,12 @@ class PowerController extends Controller ...@@ -59,11 +62,12 @@ class PowerController extends Controller
], ],
'05' => [ '05' => [
'type' => 1, 'type' => 1,
'logic' => 1, 'logic' => 1,
'state' => 1, 'state' => 1,
'orderId' => 6, 'orderId' => 6,
'capacity' => 4, 'capacity' => 4,
'finish_type' => 1,
], ],
'07' => [ '07' => [
...@@ -98,86 +102,156 @@ class PowerController extends Controller ...@@ -98,86 +102,156 @@ class PowerController extends Controller
$orderId = $this->get('orderId'); $orderId = $this->get('orderId');
if ($type == 1) { $id = hexdec($orderId);
$logic = $this->get('logic'); $logic = hexdec($this->get('logic'));
$power = $this->get('capacity'); $power = hexdec($this->get('capacity'));
$state = hexdec($this->get('state')); $state = hexdec($this->get('state'));
$orderModel = new OrderModel(); $order = new Order();
$order->setId($id);
//订单对应的逻辑地址与redis中的不同,则该开始充电消息作废
if ($order->getOrderCache(\Events::getRedis()) !== false) {
$currentLogicNum = $order->getPortLogicId();
if ($currentLogicNum != $logic) {
$this->response->send('14', $orderId);
return;
}
$id = hexdec($orderId); }
if ($logic != $order->getPortLogicId() || $_SESSION['gateway_id'] != $order->getGatewayId()) {
$this->response->send('14', $orderId);
$_SESSION['order_state'] = $state; return;
}
$orderCollection = $orderModel->getColumns(['wx_user_id', 'port_name', 'order_amount', 'port_id'], 'id = ' . $id); if ($type == 1) {
Log::debug('start_power', [$orderId, $power]);
$orderModel = new OrderModel();
$_SESSION['current_order_id'][strval($orderCollection['port_id'])] = $id; $portId = $order->getPortId();
$_SESSION['current_order_id'][strval($portId)] = $id;
$update = ['is_charger' => $state, 'start_capacity' => $power]; $update = ['is_charger' => $state, 'start_capacity' => $power];
$userId = $orderCollection['wx_user_id']; $userId = $order->getUserId();
$portName = $orderCollection['port_name'];
$stationName = $_SESSION['station_name']; $portName = $order->getPortName();
$order = new Order(); $stationName = $_SESSION['station_name'];
$order->setId($id);
$redis = \Events::getRedis(); $redis = \Events::getRedis();
$orderAmount = $order->getPayAmount();
if ($order->getOrderCache($redis) !== false) {
$waiting = new WaitingCharger($order, $redis);
if ($state === StateCode::PORT_CHARGER) {
$timeNow = date('Y-m-d H:i:s'); } else {
$update['start_time'] = $timeNow; $this->response->send('14', $orderId);
$orderAmount = $orderCollection['order_amount']; Log::error('开始充电缺失订单');
$pushMessage = new ChargerStartMessage(); return;
$pushMessage->setAmount(number_format($orderAmount / 100, 2));
$pushMessage->setAddress($stationName . '-' . $portName . '号'); }
if ($state !== 14)//未插上不更新数据库,依然为等待充电
{
$row = $orderModel->update($update, 'id = ' . $id);
if( $order->getOrderCache($redis) !== false) $port = new Port();
{
$waiting = new WaitingCharger($order,$redis);
$waiting->toCharger(); $port->setPortState([$portId => ($state)]);
} }
if ($state === StateCode::PORT_CHARGER) {
$waiting->toCharger();
$timeNow = date('Y-m-d H:i:s');
$update['start_time'] = $timeNow;
$update['updated_at'] = $timeNow;
// $pushMessage = new ChargerStartMessage();
//
// $pushMessage->setAmount(number_format($orderAmount / 100, 2));
//
// $pushMessage->setAddress($stationName . '-' . $portName . '号');
//
// $pushMessage->setRemark($pushMessage->getRemark() . '(' . $orderId . ')');
$orderTrace = new OrderTrace();
$orderTrace->setOrderId($orderId);
$orderTrace->writeRawTrace('1112', '订单开始充电');
} else if ($state === StateCode::PORT_EXCEPTION) { } else if ($state === StateCode::PORT_EXCEPTION) {
Log::debug('waiting to exception');
$pushMessage = new ChargerExceptionMessage(); $pushMessage = new ChargerExceptionMessage();
$pushMessage->setAddress($stationName . "($portName)"); $pushMessage->setAddress($stationName . "($portName)");
$orderAmount = number_format($orderCollection['order_amount'] / 100, 2); $pushMessage->setAmount(number_format($orderAmount / 100, 2));
$pushMessage->setAmount($orderAmount);
$pushMessage->setOrderId($orderId); $pushMessage->setOrderId($orderId);
} else if ($state === StateCode::PORT_ONLINE) {
$port = new Port();
$port->setPortState([$portId => ($state)]);
$this->response->send('14', $orderId);
return;
} else if ($state === StateCode::PORT_SHED) {
$port = new Port();
$port->setPortState([$portId => -1]);
$this->response->send('14', $orderId);
return;
} }
try { try {
$push = new Push();
if (isset($pushMessage)) { if (isset($pushMessage)) {
$push = new Push();
$push->push($pushMessage, $userId); $push->push($pushMessage, $userId);
} }
...@@ -190,35 +264,195 @@ class PowerController extends Controller ...@@ -190,35 +264,195 @@ class PowerController extends Controller
Gateway::sendToUid($userId, json_encode(['code' => 10000])); Gateway::sendToUid($userId, json_encode(['code' => 10000]));
} else { } else {
Log::debug($userId . '用户webSocket不在线'); Log::debug($userId . '用户webSocket不在线');
} }
if ($state !== 14)//未插上不更新数据库,依然为等待充电
{
$row = $orderModel->update($update, 'id = ' . $id);
$portId = $orderModel->getPortId($id);
$port = new Port(); }
$port->setPortState([$portId => ($state)]); $this->response->send('14', $orderId);
}
//记录订单的轨迹 }
$orderTrace = new OrderTrace($state);
$orderTrace->setOrderId($orderId);
$orderTrace->writeTrace(); /**
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function finish()
{
$orderIdHex = $this->get('orderId');
$orderId = hexdec($orderIdHex);
$logic = hexdec($this->get('logic'));
$state = hexdec($this->get('state'));
$capacity = hexdec($this->get('capacity'));
$order = new Order();
$order->setId($orderId);
$redis = \Events::getRedis();
Log::debug('finish', $this->getRequest()->getParameters());
if ($order->getOrderCache($redis) === false) {
$this->response->send('15', $orderIdHex);
return;
} }
$this->response->send('14', $orderId);
if ($logic != $order->getPortLogicId() || $_SESSION['gateway_id'] != $order->getGatewayId()) {
} $port = new Port();
$port->setLogic($logic);
$portId = $port->getIdByLogic();
$port->setId($portId);
$port->freePort();
$this->response->send('15', $orderIdHex);
return;
}
$orderStateCode = $order->getStateCode();
$orderState = '';
switch ($orderStateCode) {
case StateCode::WAITING:
$orderState = new WaitingCharger($order, $redis);
Log::debug('等待充电状态订单');
break;
case StateCode::PORT_CHARGER:
$orderState = new Charger($order, $redis);
Log::debug('正在充电订单');
break;
case StateCode::PORT_SHED:
$orderState = new PortShed($order, $redis);
Log::debug('口子脱落订单');
break;
default:
break;
}
$order->setEndCapacity($capacity);
$orderState->setEndTime(date('Y-m-d H:i:s'));
$orderState->setFinishState($state);
switch ($state) {
case StateCode::FINISH_TIME_END:
$orderState->toFinish();
break;
case StateCode::FINISH_REMOTE:
break;
case StateCode::FINISH_FULL:
$orderState->toFull();
break;
case StateCode::FINISH_EXCEED:
$orderState->toFinishPowerExceed();
break;
case StateCode::FINISH_USER:
$orderState->toFinishByUser();
break;
case StateCode::FINISH_SHED_TIMEOUT:
$orderState->toFinishShed();
break;
case StateCode::FINISH_REFUND:
$orderState->toFinish();
break;
default:
break;
}
$port = new Port();
if ($logic == $order->getPortLogicId()) {
$port->setId($order->getPortId());
$port->freePort();
$orderState->destroy();
}
$userId = $order->getUserId();
if (Gateway::isUidOnline($userId) === 1) {
Gateway::sendToUid($userId, json_encode(['code' => 10000]));
}
$this->response->send('15', $orderIdHex);
}
/** /**
* 硬件充电结束 * 硬件充电结束
...@@ -258,6 +492,8 @@ class PowerController extends Controller ...@@ -258,6 +492,8 @@ class PowerController extends Controller
$portId = $port->getIdByLogic(); $portId = $port->getIdByLogic();
Log::debug('port_id ->' . $portId);
try { try {
//记录订单轨迹 //记录订单轨迹
...@@ -274,7 +510,7 @@ class PowerController extends Controller ...@@ -274,7 +510,7 @@ class PowerController extends Controller
// 发送微信消息给用户。 // 发送微信消息给用户。
// 充电结束时删除端口正在使用的hash表中的元素,删除充电用户正在充电订单中的本次订单 // 充电结束时删除端口正在使用的hash表中的元素,删除充电用户正在充电订单中的本次订单
$orderInfo = $orderModel->getColumns(['port_id', 'wx_user_id', 'is_charger', 'port_name', 'station_name', 'out_trade_no', 'order_amount', 'wx_user_id', 'start_time', 'charger_time'], 'id = ' . $id); $orderInfo = $orderModel->getColumns(['port_id', 'wx_user_id', 'is_charger', 'port_name', 'station_name', 'out_trade_no', 'order_amount', 'start_time', 'charger_time'], 'id = ' . $id);
if ((int)$portId !== (int)$orderInfo['port_id']) { if ((int)$portId !== (int)$orderInfo['port_id']) {
//fixme 使用logicNum查找到portId比对订单中的口子id是否相同,如果不相同则不处理(为转换口子之前的口子,释放口子即可) //fixme 使用logicNum查找到portId比对订单中的口子id是否相同,如果不相同则不处理(为转换口子之前的口子,释放口子即可)
...@@ -301,11 +537,6 @@ class PowerController extends Controller ...@@ -301,11 +537,6 @@ class PowerController extends Controller
$userId = $orderInfo['wx_user_id']; $userId = $orderInfo['wx_user_id'];
if (Gateway::isUidOnline($userId) === 1) {
Gateway::sendToUid($userId, json_encode(['code' => 10000]));
}
$port->setId($portId); $port->setId($portId);
$port->freePort(); $port->freePort();
...@@ -314,7 +545,7 @@ class PowerController extends Controller ...@@ -314,7 +545,7 @@ class PowerController extends Controller
$order->setId($id); $order->setId($id);
$chargerState = new Charger($order,\Events::getRedis()); $chargerState = new Charger($order, \Events::getRedis());
$chargerState->setFinishState($state); $chargerState->setFinishState($state);
...@@ -448,7 +679,10 @@ class PowerController extends Controller ...@@ -448,7 +679,10 @@ class PowerController extends Controller
} }
unset($_SESSION['current_order_id']); if (Gateway::isUidOnline($userId) === 1) {
Gateway::sendToUid($userId, json_encode(['code' => 10000]));
}
$this->response->send('15', $orderId); $this->response->send('15', $orderId);
...@@ -474,24 +708,63 @@ class PowerController extends Controller ...@@ -474,24 +708,63 @@ class PowerController extends Controller
//todo 依据状态修改订单中的状态,本地缓存该笔订单的状态,状态不发生改变则不更新数据库 //todo 依据状态修改订单中的状态,本地缓存该笔订单的状态,状态不发生改变则不更新数据库
$logic = $this->get('logic'); $logic = $this->get('logic');
$startTime = $this->get('startTime'); $port = new Port();
if (isset($_SESSION['logic_port_id'][$logic])) {
$portId = $_SESSION['logic_port_id'][$logic];
} else {
$portId = $port->getIdByLogic();
}
$orderId = $port->getPortUsingOrderId(\Events::getRedis(), $portId);
return;
$count = $this->get('count'); if ($orderId !== false) {
$powerData = substr($this->message, $this->plc, hexdec($count) * 4); $startTime = hexdec($this->get('startTime'));
$powerData = str_split($powerData, 4); $intervalTime = hexdec($this->get('intervalTime'));
$this->plc += hexdec($count) * 4; $count = $this->get('count');
$capacity = substr($this->message, $this->plc); $powerData = substr($this->message, $this->plc, hexdec($count) * 4);
$capacity = str_split($capacity, 8); $powerData = str_split($powerData, 4);
$this->plc += hexdec($count) * 4;
Log::debug('功率数据', $powerData); $capacity = substr($this->message, $this->plc);
Log::debug($this->message); $capacity = str_split($capacity, 8);
$orderCapacity = new OrderCapacityModel();
try {
for ($i = 0; $i < $count; $i++) {
$orderCapacity->insertRow([
'order_id' => $orderId,
'port_id' => $portId,
'capacity' => hexdec($capacity[$i]),
'power' => hexdec($powerData[$i]),
'created_at' => strtotime('Y-m-d H:i:s', $startTime += $intervalTime),
]);
}
} catch (\Exception $exception) {
Log::error($exception->getMessage());
}
}
} }
...@@ -503,7 +776,6 @@ class PowerController extends Controller ...@@ -503,7 +776,6 @@ class PowerController extends Controller
public function onePower() public function onePower()
{ {
Log::debug('上报功率(one)', $this->getRequest()->getParameters());
$logicNum = $this->get('logic'); $logicNum = $this->get('logic');
...@@ -515,7 +787,6 @@ class PowerController extends Controller ...@@ -515,7 +787,6 @@ class PowerController extends Controller
$port->setLogic($logicNum); $port->setLogic($logicNum);
if (isset($_SESSION['logic_port_id'][$logicNum])) { if (isset($_SESSION['logic_port_id'][$logicNum])) {
$portId = $_SESSION['logic_port_id'][$logicNum]; $portId = $_SESSION['logic_port_id'][$logicNum];
...@@ -526,37 +797,32 @@ class PowerController extends Controller ...@@ -526,37 +797,32 @@ class PowerController extends Controller
} }
if (isset($_SESSION['current_order_id'][$portId])) { $orderId = $port->getPortUsingOrderId(\Events::getRedis(), $portId);
$orderId = $_SESSION['current_order_id'][$portId]; if ($orderId !== false) {
} else {
Log::info('gatway session 缺少当前订单id');
$orderId = $port->getPortUsingOrderId(\Events::getRedis(), $portId); $orderId = $port->getPortUsingOrderId(\Events::getRedis(), $portId);
Log::info('从redis中获取当前订单 ->' . $orderId); try {
$orderCapacityModel = new OrderCapacityModel();
$orderCapacityModel->insertRow([
'order_id' => $orderId,
'port_id' => $portId,
'capacity' => $capacity,
'power' => $powerData,
'created_at' => date('Y-m-d H:i:s'),
]);
} catch (\Exception $exception) {
Log::error($exception->getMessage());
} }
try { } else {
$orderCapacityModel = new OrderCapacityModel();
$orderCapacityModel->insertRow([
'order_id' => $orderId,
'port_id' => $portId,
'capacity' => $capacity,
'power' => $powerData,
'created_at' => date('Y-m-d H:i:s'),
]);
} catch (\Exception $exception) {
Log::error($exception->getMessage());
Log::info('gatway session 缺少当前订单id');
} }
} }
} }
......
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/7/27
* Time: 下午4:32
*/
namespace Application\Controller;
use Application\Controller;
use Lib\Log;
class PowerOffController extends Controller
{
protected $parameterMap = [
'0F' => []
];
public function powerOff()
{
Log::debug('断电提醒');
}
}
\ No newline at end of file
...@@ -151,20 +151,17 @@ class Events ...@@ -151,20 +151,17 @@ class Events
$redis = Events::getRedis(); $redis = Events::getRedis();
Log::debug('disconnect');
if (isset($_SESSION['gateway_id']) === true) { if (isset($_SESSION['gateway_id']) === true) {
Log::info('gateway_id(' . $_SESSION['gateway_id'] . ')' . 'disconnect');
$redis->zAdd(\Lib\redis\RedisKey::GATEWAY_STATE, 0, $_SESSION['gateway_id']); $redis->zAdd(\Lib\redis\RedisKey::GATEWAY_STATE, 0, $_SESSION['gateway_id']);
} else { } else {
Log::info(isset($_SESSION['gateway_mac']) ? $_SESSION['gateway_mac'] : '');
Log::info('gatway disconnect'); Log::error('网关离线缺少gatewayId');
} }
......
...@@ -11,18 +11,148 @@ namespace Lib\api\message; ...@@ -11,18 +11,148 @@ namespace Lib\api\message;
class ChargerFullMessage extends MessageData class ChargerFullMessage extends MessageData
{ {
protected $templateId ='rdzTNQ7t4uRXkP0SkuwW10WH77A_CIgYFiJykXJ0utU'; protected $templateId = 'rdzTNQ7t4uRXkP0SkuwW10WH77A_CIgYFiJykXJ0utU';
private $first = ''; /**
* @var string
*/
private $first = '尊敬的用户,您的爱车已充满电,本次充电已结束
';
/**
* @var string
*/
private $startTime = ''; private $startTime = '';
/**
* @var string
*/
private $remark = '温馨提示:您的爱车已停止充电,如有疑问您可以在公众号后台留言或直接拨打客服热线进行咨询。
感谢您的使用';
private $endTime = '';
private $purchaseTime = '';
public function getPushDataJson(): string public function getPushDataJson(): string
{ {
return ''; return json_encode([
'first' => [
'value' => $this->first,
'color' => '#333',
],
'keyword1' => [
'value' => $this->startTime,
'color' => '#333',
],
'keyword2' => [
'value' => $this->purchaseTime,
'color' => '#333',
],
'keyword3' => [
'value' => $this->endTime,
'color' => '#333',
],
'remark' => [
'value' => $this->remark,
'color' => '#333',
],
]);
}
/**
* @return string
*/
public function getTemplateId(): string
{
return $this->templateId;
}
/**
* @return string
*/
public function getFirst(): string
{
return $this->first;
}
/**
* @param string $first
*/
public function setFirst(string $first): void
{
$this->first = $first;
}
/**
* @return string
*/
public function getStartTime(): string
{
return $this->startTime;
}
/**
* @param string $startTime
*/
public function setStartTime(string $startTime): void
{
$this->startTime = $startTime;
}
/**
* @return string
*/
public function getRemark(): string
{
return $this->remark;
}
/**
* @param string $remark
*/
public function setRemark(string $remark): void
{
$this->remark = $remark;
}
/**
* @return string
*/
public function getEndTime(): string
{
return $this->endTime;
}
/**
* @param string $endTime
*/
public function setEndTime(string $endTime): void
{
$this->endTime = $endTime;
}
/**
* @return string
*/
public function getPurchaseTime(): string
{
return $this->purchaseTime;
}
/**
* @param string $purchaseTime
*/
public function setPurchaseTime(string $purchaseTime): void
{
$this->purchaseTime = $purchaseTime;
} }
......
...@@ -34,7 +34,7 @@ class ChargerRefundMessage extends MessageData ...@@ -34,7 +34,7 @@ class ChargerRefundMessage extends MessageData
private $remark = '温馨提示:超时关闭此次交易,支付金额会在1个工作日内退回您的余额或零钱,请注意查看,若未收到请联系我们的客服为您处理。若为充电口异常,请您及时更换至其它充电口充电 private $remark = '温馨提示:超时关闭此次交易,支付金额会在1个工作日内退回您的余额或零钱,请注意查看,若未收到请联系我们的客服为您处理。
'; ';
/** /**
......
...@@ -13,7 +13,7 @@ class ChargerReloadMessage extends MessageData ...@@ -13,7 +13,7 @@ class ChargerReloadMessage extends MessageData
{ {
protected $templateId = 't_PyOGCKN_fmD0blw0EuIQs-8sS3qOTmpQay12haPZY'; protected $templateId = 't_PyOGCKN_fmD0blw0EuIQs-8sS3qOTmpQay12haPZY';
private $first = '充电继续通知:'; private $first = '尊敬的用户,检测到插头插入,您的爱车已开始继续充电';
private $stationName = ''; private $stationName = '';
......
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/7/19
* Time: 下午3:23
*/
namespace Lib\api\message;
class ChargerShedTimeOutMessage extends MessageData
{
protected $templateId = 'rdzTNQ7t4uRXkP0SkuwW10WH77A_CIgYFiJykXJ0utU';
private $first = '尊敬的用户,您的爱车插头脱落,等待10分钟未检测到插头重新插入,本次充电已结束
';
/**
* @var string
*/
private $startTime = '';
/**
* @var string
*/
private $purchaseTime = '';
/**
* @var string
*/
private $endTime = '';
/**
* @var string
*/
private $remark = '温馨提示:您的爱车已停止充电,如有疑问您可以在公众号后台留言或直接拨打客服热线进行咨询。
感谢您的使用';
public function getPushDataJson(): string
{
return json_encode([
'first' => [
'value' => $this->first,
'color' => '#333',
],
'keyword1' => [
'value' => $this->startTime,
'color' => '#333',
],
'keyword2' => [
'value' => $this->purchaseTime,
'color' => '#333',
],
'keyword3' => [
'value' => $this->endTime,
'color' => '#333',
],
'remark' => [
'value' => $this->remark,
'color' => '#333',
],
]);
}
/**
* @return string
*/
public function getTemplateId(): string
{
return $this->templateId;
}
/**
* @return string
*/
public function getFirst(): string
{
return $this->first;
}
/**
* @param string $first
*/
public function setFirst(string $first): void
{
$this->first = $first;
}
/**
* @return string
*/
public function getStartTime(): string
{
return $this->startTime;
}
/**
* @param string $startTime
*/
public function setStartTime(string $startTime): void
{
$this->startTime = $startTime;
}
/**
* @return string
*/
public function getPurchaseTime(): string
{
return $this->purchaseTime;
}
/**
* @param string $purchaseTime
*/
public function setPurchaseTime(string $purchaseTime): void
{
$this->purchaseTime = $purchaseTime;
}
/**
* @return string
*/
public function getEndTime(): string
{
return $this->endTime;
}
/**
* @param string $endTime
*/
public function setEndTime(string $endTime): void
{
$this->endTime = $endTime;
}
/**
* @return string
*/
public function getRemark(): string
{
return $this->remark;
}
/**
* @param string $remark
*/
public function setRemark(string $remark): void
{
$this->remark = $remark;
}
}
\ No newline at end of file
...@@ -24,6 +24,8 @@ class ChargerStartMessage extends MessageData ...@@ -24,6 +24,8 @@ class ChargerStartMessage extends MessageData
private $amount; private $amount;
private $remark = '感谢你的使用';
public function __construct() public function __construct()
{ {
...@@ -58,7 +60,7 @@ class ChargerStartMessage extends MessageData ...@@ -58,7 +60,7 @@ class ChargerStartMessage extends MessageData
'color' => '#333' 'color' => '#333'
], ],
'remark' => [ 'remark' => [
'value' => '感谢你的使用', 'value' => $this->remark,
'color' => '#333' 'color' => '#333'
], ],
]); ]);
...@@ -135,5 +137,22 @@ class ChargerStartMessage extends MessageData ...@@ -135,5 +137,22 @@ class ChargerStartMessage extends MessageData
$this->amount = $amount; $this->amount = $amount;
} }
/**
* @return string
*/
public function getRemark(): string
{
return $this->remark;
}
/**
* @param string $remark
*/
public function setRemark(string $remark): void
{
$this->remark = $remark;
}
} }
\ No newline at end of file
...@@ -10,7 +10,6 @@ namespace Lib\cdz_order; ...@@ -10,7 +10,6 @@ namespace Lib\cdz_order;
use Lib\cdz_order\state\State; use Lib\cdz_order\state\State;
use Lib\Log;
class Order class Order
{ {
...@@ -93,17 +92,40 @@ class Order ...@@ -93,17 +92,40 @@ class Order
/** /**
* @var int
*/
private $startCapacity;
/**
* @var int
*/
private $endCapacity;
/**
* @var string
*/
private $outTradeNo;
/**
* @var int
*/
private $isRefund = 0;
/**
* @param \Redis $redis * @param \Redis $redis
* @return array|bool * @return array|bool
*/ */
public function getOrderCache(\Redis $redis) public function getOrderCache(\Redis $redis)
{ {
if(isset($this->orderCache) === false){ if (isset($this->orderCache) == false || (is_array($this->orderCache) && count($this->orderCache) === 0)) {
$keyName = State::ORDER_HASH_PREFIX . $this->id; $keyName = State::ORDER_HASH_PREFIX . $this->id;
if ($redis->exists($keyName) === false) { if ($redis->exists($keyName) == false) {
return false; return false;
...@@ -111,6 +133,8 @@ class Order ...@@ -111,6 +133,8 @@ class Order
$this->orderCache = $redis->hGetAll($keyName); $this->orderCache = $redis->hGetAll($keyName);
var_dump($this->orderCache);
foreach ($this->orderCache as $key => $value) { foreach ($this->orderCache as $key => $value) {
$this->$key = $value; $this->$key = $value;
...@@ -124,6 +148,32 @@ class Order ...@@ -124,6 +148,32 @@ class Order
/** /**
* @param \Redis $redis * @param \Redis $redis
* @return array|bool
*/
public function refreshOrderCache(\Redis $redis)
{
$keyName = State::ORDER_HASH_PREFIX . $this->id;
if ($redis->exists($keyName) == false) {
return false;
}
$this->orderCache = $redis->hGetAll($keyName);
foreach ($this->orderCache as $key => $value) {
$this->$key = $value;
}
return $this->orderCache;
}
/**
* @param \Redis $redis
* @param $orderCache * @param $orderCache
*/ */
public function setOrderCache(\Redis $redis, $orderCache): void public function setOrderCache(\Redis $redis, $orderCache): void
...@@ -301,7 +351,7 @@ class Order ...@@ -301,7 +351,7 @@ class Order
*/ */
public function getPortLogicId(): int public function getPortLogicId(): int
{ {
return $this->portLogicId; return isset($this->portLogicId) ? (int)$this->portLogicId : 0;
} }
/** /**
...@@ -344,5 +394,69 @@ class Order ...@@ -344,5 +394,69 @@ class Order
$this->stationName = $stationName; $this->stationName = $stationName;
} }
/**
* @return int
*/
public function getStartCapacity(): int
{
return $this->startCapacity;
}
/**
* @param int $startCapacity
*/
public function setStartCapacity(int $startCapacity): void
{
$this->startCapacity = $startCapacity;
}
/**
* @return int
*/
public function getEndCapacity(): int
{
return $this->endCapacity;
}
/**
* @param int $endCapacity
*/
public function setEndCapacity(int $endCapacity): void
{
$this->endCapacity = $endCapacity;
}
/**
* @return string
*/
public function getOutTradeNo(): string
{
return $this->outTradeNo;
}
/**
* @param string $outTradeNo
*/
public function setOutTradeNo(string $outTradeNo): void
{
$this->outTradeNo = $outTradeNo;
}
/**
* @return int
*/
public function getisRefund(): int
{
return $this->isRefund;
}
/**
* @param int $isRefund
*/
public function setIsRefund(int $isRefund): void
{
$this->isRefund = $isRefund;
}
} }
\ No newline at end of file
...@@ -69,6 +69,18 @@ class SaveOrder ...@@ -69,6 +69,18 @@ class SaveOrder
} }
public function saveEndCapacity()
{
$this->redis->hSet($this->state->getKeyName(), 'endCapacity', $this->state->getOrder()->getEndCapacity());
}
public function saveStartCapacity()
{
$this->redis->hSet($this->state->getKeyName(), 'startCapacity', $this->state->getOrder()->getStartCapacity());
}
public function pipe() public function pipe()
{ {
$this->state->getRedis()->multi(2); $this->state->getRedis()->multi(2);
......
...@@ -9,10 +9,28 @@ ...@@ -9,10 +9,28 @@
namespace Lib\cdz_order\state; namespace Lib\cdz_order\state;
use Application\Model\OrderModel;
use Lib\api\message\ChargerExceedMessage;
use Lib\api\message\ChargerExceptionMessage;
use Lib\api\message\ChargerFinishMessage;
use Lib\api\message\ChargerFullMessage;
use Lib\api\message\PortShedMessage;
use Lib\api\message\Push;
use Lib\cdz_order\Order; use Lib\cdz_order\Order;
use Lib\Log;
use Lib\order_exception\OrderTrace;
use Lib\port\Port;
use Lib\rabbitmq\PublishPortShed;
use Lib\state\StateCode;
class Charger extends State class Charger extends State
{ {
/**
* @var int
*/
protected $selfStateCode = 12;
public function __construct(Order $order, \Redis $redis) { parent::__construct($order, $redis); } public function __construct(Order $order, \Redis $redis) { parent::__construct($order, $redis); }
public function toCharger() public function toCharger()
...@@ -20,34 +38,271 @@ class Charger extends State ...@@ -20,34 +38,271 @@ class Charger extends State
// TODO: Implement toCharger() method. // TODO: Implement toCharger() method.
} }
/**
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toFinishByUser()
{
// TODO: Implement toFinishByUser() method.
$this->redis->hMSet($this->keyName, ['finishState' => $this->finishState, 'endTime' => $this->endTime]);
$fullMessage = new ChargerFullMessage();
$fullMessage->setEndTime($this->endTime);
$fullMessage->setFirst('尊敬的用户,本次充电已结束
(手动关闭)');
$fullMessage->setPurchaseTime($this->order->getPurchaseTime());
$fullMessage->setStartTime($this->startTime);
$push = new Push();
$push->push($fullMessage, $this->order->getUserId());
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => $this->finishState,
'updated_at' => $this->endTime,
'end_capacity' => $this->order->getEndCapacity(),
'end_time' => $this->endTime,
'state' => 1,
], 'id = ' . $this->order->getId());
$orderTrace = new OrderTrace();
$orderTrace->setOrderId($this->order->getId());
$orderTrace->writeRawTrace(1241, '正在充电 --> 用户主动结束');
}
public function toFinishShed()
{
// TODO: Implement toFinishShed() method.
}
/**
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toPortShed() public function toPortShed()
{ {
// TODO: Implement toPortShed() method. $this->shedTime = time();
$this->order->setStateCode(StateCode::PORT_SHED);
$this->saveOrder->pipe();
$this->saveOrder->saveStateCode();
$this->saveOrder->saveShedTime();
$port = new Port();
$port->setPortState([$this->order->getPortId() => 14]);
$this->saveOrder->exec();
$shedMessage = new PortShedMessage();
$shedMessage->setStationName($this->order->getStationName());
$shedMessage->setPortName($this->order->getPortName());
$shedMessage->setWaitingTime(10);
$shedMessage->setRemark('超时将关闭此次交易哦,请尽快重连插头');
$shedMessage->setTime(date('Y-m-d H:i:s'));
$push = new Push();
try {
$push->push($shedMessage, $this->order->getUserId());
} catch (\Exception $exception) {
Log::error($exception->getMessage());
}
try {
$publishPortShedJob = new PublishPortShed();
$publishPortShedJob->publishOrder(
[
'order_id' => $this->order->getId(),
'time' => date('Y-m-d H:i:s'),
'gateway_mac' => $_SESSION['gateway_mac'],
'shed_time' => $this->shedTime,
]
);
} catch (\Exception $exception) {
Log::error($exception->getMessage());
}
$orderTrace = new OrderTrace();
$this->order->setCurrentState(new PortShed($this->order, $this->redis));
$orderTrace->setOrderId($this->order->getId());
$orderTrace->write($this, $this->order->getCurrentState());
} }
public function toPowerExceed() public function toPowerExceed()
{ {
// TODO: Implement toPowerExceed() method.
}
/**
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toFinishPowerExceed()
{
$exceedMessage = new ChargerExceedMessage();
$exceedMessage->setStartTime($this->startTime);
$exceedMessage->setEndTime($this->endTime);
$exceedMessage->setChargerTime($this->order->getPurchaseTime());
$push = new Push();
$push->push($exceedMessage, $this->order->getUserId());
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => $this->finishState,
'updated_at' => $this->endTime,
'end_capacity' => $this->order->getEndCapacity(),
'end_time' => $this->endTime,
'state' => 1,
], 'id = ' . $this->order->getId());
$this->redis->hMSet($this->keyName, ['finishState' => $this->finishState, 'endTime' => $this->endTime]);
$orderTrace = new OrderTrace();
$orderTrace->setOrderId($this->order->getId());
$orderTrace->writeRawTrace(1234, '正在充电 --> 功率超限');
} }
/**
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toFull() public function toFull()
{ {
$this->redis->hMSet($this->keyName, ['finishState' => $this->finishState, 'endTime' => $this->endTime]);
$fullMessage = new ChargerFullMessage();
$fullMessage->setStartTime($this->startTime);
$fullMessage->setPurchaseTime($this->order->getPurchaseTime());
$fullMessage->setEndTime($this->endTime);
$push = new Push();
$push->push($fullMessage, $this->order->getUserId());
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => $this->finishState,
'updated_at' => $this->endTime,
'end_capacity' => $this->order->getEndCapacity(),
'end_time' => $this->endTime,
'state' => 1,
], 'id = ' . $this->order->getId());
$orderTrace = new OrderTrace();
$orderTrace->setOrderId($this->order->getId());
$orderTrace->writeRawTrace(1233, '正在充电 --> 充满自停');
// TODO: Implement toFull() method. // TODO: Implement toFull() method.
} }
/** /**
* 充电结束记录充电结束状态和结束充电时间 * 充电结束记录充电结束状态和结束充电时间
* @throws \GuzzleHttp\Exception\GuzzleException
*/ */
public function toFinish() public function toFinish()
{ {
$this->redis->hMSet($this->keyName, ['finishState' => $this->finishState, 'endTime' => $this->endTime]); $this->redis->hMSet($this->keyName, ['finishState' => $this->finishState, 'endTime' => $this->endTime]);
$finishMessage = new ChargerFinishMessage();
$finishMessage->setEndTime($this->endTime);
$finishMessage->setUserId($this->order->getUserId());
$finishMessage->setChargerTime($this->order->getPurchaseTime());
$finishMessage->setChargerPlc($this->order->getStationName() . '-' . $this->order->getPortName() . '号');
$finishMessage->setOrderAmount($this->order->getPayAmount());
$push = new Push();
try {
$push->push($finishMessage, $this->order->getUserId());
} catch (\Exception $exception) {
Log::error($exception->getMessage());
}
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => $this->finishState,
'updated_at' => $this->endTime,
'end_capacity' => $this->order->getEndCapacity(),
'end_time' => $this->endTime,
'state' => 1,
'is_exception' => 0,
], 'id = ' . $this->order->getId());
$orderTrace = new OrderTrace();
$orderTrace->setOrderId($this->order->getId());
$orderTrace->writeRawTrace(1230, '正在充电 --> 充电时间结束');
} }
public function toOffline() public function toOffline()
{ {
$this->redis->hSet($this->keyName,'offlineTime',time()); $this->redis->hSet($this->keyName, 'offlineTime', time());
// TODO: Implement toOffline() method. // TODO: Implement toOffline() method.
} }
......
...@@ -13,8 +13,23 @@ use Lib\cdz_order\Order; ...@@ -13,8 +13,23 @@ use Lib\cdz_order\Order;
class Created extends State class Created extends State
{ {
/**
* @var int
*/
protected $selfStateCode = 1;
public function __construct(Order $order, \Redis $redis) { parent::__construct($order, $redis); } public function __construct(Order $order, \Redis $redis) { parent::__construct($order, $redis); }
public function toFinishByUser()
{
// TODO: Implement toFinishByUser() method.
}
public function toFinishShed()
{
// TODO: Implement toFinishShed() method.
}
public function toCharger() public function toCharger()
{ {
......
...@@ -10,11 +10,19 @@ namespace Lib\cdz_order\state; ...@@ -10,11 +10,19 @@ namespace Lib\cdz_order\state;
use Lib\cdz_order\Order; use Lib\cdz_order\Order;
use Lib\Gateway;
use Lib\Log;
use Lib\order_exception\OrderTrace;
class Offline extends State class Offline extends State
{ {
public function __construct(Order $order, \Redis $redis, int $offlineReason) /**
* @var int
*/
protected $selfStateCode = 10;
public function __construct(Order $order, \Redis $redis, int $offlineReason = 0)
{ {
parent::__construct($order, $redis); parent::__construct($order, $redis);
...@@ -22,6 +30,17 @@ class Offline extends State ...@@ -22,6 +30,17 @@ class Offline extends State
} }
public function toFinishByUser()
{
// TODO: Implement toFinishByUser() method.
}
public function toFinishShed()
{
// TODO: Implement toFinishShed() method.
}
/** /**
*记录了离线原因和上线时间 *记录了离线原因和上线时间
* 通过上线时间和离线时间根据离线原因计算剩余充电时间 * 通过上线时间和离线时间根据离线原因计算剩余充电时间
...@@ -30,41 +49,47 @@ class Offline extends State ...@@ -30,41 +49,47 @@ class Offline extends State
{ {
$purchaseTime = $this->order->getPurchaseTime(); $purchaseTime = $this->order->getPurchaseTime();
$startTime = strtotime($this->startTime);
$this->onlineTime = time(); $this->onlineTime = time();
if($this->order->getStateCode() == -1) if ($this->order->getStateCode() == -1) {
{
$this->remainChargerTime = $this->order->getPurchaseTime(); $this->remainChargerTime = $this->order->getPurchaseTime();
}else { } else {
$startTime = $this->getStartTime(); Log::debug('off reason'.$this->offlineReason);
$offlineTime = $this->getOfflineTime();
if ($this->offlineReason == 1) { if ($this->offlineReason == 0) {
$remainTime = $purchaseTime * 60 - ($this->onlineTime - $startTime);
$this->remainChargerTime = (int)($remainTime / 60);
$remainTime = $purchaseTime * 60 - ($offlineTime - $startTime); Log::debug('断网离线');
$this->remainChargerTime = (int)ceil($remainTime / 60);
} else { } else {
$remainTime = $purchaseTime * 60 - ($this->onlineTime - $startTime); $remainTime = $purchaseTime * 60 - ((int)$this->offlineTime - (int)$startTime);
$this->remainChargerTime = (int)($remainTime / 60);
$this->remainChargerTime = (int)ceil($remainTime / 60);
} }
} }
$this->saveOrder->savePortOnlineTime(); $this->saveOrder->savePortOnlineTime();
$this->order->setCurrentState(new Charger($this->order,$this->redis)); $orderTrace = new OrderTrace();
$this->order->setCurrentState(new Charger($this->order, \Events::getRedis()));
$orderTrace->write($this, $this->order->getCurrentState());
} }
......
...@@ -12,6 +12,19 @@ namespace Lib\cdz_order\state; ...@@ -12,6 +12,19 @@ namespace Lib\cdz_order\state;
class Online extends State class Online extends State
{ {
protected $selfStateCode = 11;
public function toFinishByUser()
{
// TODO: Implement toFinishByUser() method.
}
public function toFinishShed()
{
// TODO: Implement toFinishShed() method.
}
public function toCharger() public function toCharger()
{ {
// TODO: Implement toCharger() method. // TODO: Implement toCharger() method.
......
...@@ -9,8 +9,257 @@ ...@@ -9,8 +9,257 @@
namespace Lib\cdz_order\state; namespace Lib\cdz_order\state;
class PortShed use Application\Model\OrderModel;
use Lib\api\message\ChargerFinishMessage;
use Lib\api\message\ChargerFullMessage;
use Lib\api\message\ChargerReloadMessage;
use Lib\api\message\ChargerShedTimeOutMessage;
use Lib\api\message\PortShedMessage;
use Lib\api\message\Push;
use Lib\Log;
use Lib\order_exception\OrderTrace;
use Lib\port\Port;
class PortShed extends State
{ {
/**
*
* @var int
*/
protected $selfStateCode = 14;
/**
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toFinishByUser()
{
$this->redis->hMSet($this->keyName, ['finishState' => $this->finishState, 'endTime' => $this->endTime]);
$fullMessage = new ChargerFullMessage();
$fullMessage->setEndTime($this->endTime);
$fullMessage->setFirst('尊敬的用户,本次充电已结束
(手动关闭)');
$fullMessage->setPurchaseTime($this->order->getPurchaseTime());
$fullMessage->setStartTime($this->startTime);
$push = new Push();
$push->push($fullMessage, $this->order->getUserId());
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => $this->finishState,
'updated_at' => $this->endTime,
'end_capacity' => $this->order->getEndCapacity(),
'end_time' => $this->endTime,
'state' => 1,
], 'id = ' . $this->order->getId());
$orderTrace = new OrderTrace();
$orderTrace->setOrderId($this->order->getId());
$orderTrace->writeRawTrace(1441, '口子脱落 --> 用户主动结束');
}
/**
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toFinishShed()
{
$this->redis->hMSet($this->keyName, ['finishState' => $this->finishState, 'endTime' => $this->endTime]);
$shedTimeOutMessgae = new ChargerShedTimeOutMessage();
$shedTimeOutMessgae->setEndTime($this->endTime);
$shedTimeOutMessgae->setStartTime($this->startTime);
$shedTimeOutMessgae->setPurchaseTime($this->order->getPurchaseTime());
$push = new Push();
$push->push($shedTimeOutMessgae, $this->order->getUserId());
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => $this->finishState,
'updated_at' => $this->endTime,
'end_capacity' => $this->order->getEndCapacity(),
'end_time' => $this->endTime,
'state' => 1,
], 'id = ' . $this->order->getId());
$orderTrace = new OrderTrace();
$orderTrace->setOrderId($this->order->getId());
$orderTrace->writeRawTrace(1442, '口子脱落 --> 口子脱落超时结束');
}
/**
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toCharger()
{
$reloadMessage = new ChargerReloadMessage();
$reloadMessage->setPortName($this->order->getPortName());
$reloadMessage->setStationName($this->order->getStationName());
$push = new Push();
try {
$push->push($reloadMessage, $this->order->getUserId());
} catch (\Exception $exception) {
Log::error($exception->getMessage());
}
$this->order->setStateCode(12);
$this->saveOrder->saveStateCode();
$orderModel = new OrderModel();
$orderModel->update(['is_charger' => 12], 'id = ' . $this->order->getId());
$orderTrace = new OrderTrace();
$this->order->setCurrentState(new Charger($this->order, $this->redis));
$orderTrace->setOrderId($this->order->getId());
$orderTrace->write($this, $this->order->getCurrentState());
$port = new Port();
$port->setPortState([$this->order->getPortId() => 12]);
}
public function toPortShed()
{
Log::error('order shed state can not change to shed');
// TODO: Implement toPortShed() method.
}
public function toPowerExceed()
{
Log::error('order shed state can not change to exceed');
// TODO: Implement toPowerExceed() method.
}
/**
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toFull()
{
$this->redis->hMSet($this->keyName, ['finishState' => $this->finishState, 'endTime' => $this->endTime]);
$fullMessage = new ChargerFullMessage();
$fullMessage->setStartTime($this->startTime);
$fullMessage->setPurchaseTime($this->order->getPurchaseTime());
$fullMessage->setEndTime($this->endTime);
$push = new Push();
$push->push($fullMessage, $this->order->getUserId());
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => $this->finishState,
'updated_at' => $this->endTime,
'end_capacity' => $this->order->getEndCapacity(),
'end_time' => $this->endTime,
'state' => 1,
], 'id = ' . $this->order->getId());
$orderTrace = new OrderTrace();
$orderTrace->setOrderId($this->order->getId());
$orderTrace->writeRawTrace(1433, '口子脱落 --> 充满自停');
}
/**
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function toFinish()
{
$this->redis->hMSet($this->keyName, ['finishState' => $this->finishState, 'endTime' => $this->endTime]);
$finishMessage = new ChargerFinishMessage();
$finishMessage->setEndTime($this->endTime);
$finishMessage->setUserId($this->order->getUserId());
$finishMessage->setChargerTime($this->order->getPurchaseTime());
$finishMessage->setChargerPlc($this->order->getStationName() . '-' . $this->order->getPortName());
$finishMessage->setOrderAmount($this->order->getPayAmount());
$push = new Push();
try {
$push->push($finishMessage, $this->order->getUserId());
} catch (\Exception $exception) {
Log::error($exception->getMessage());
}
$orderModel = new OrderModel();
$orderModel->update([
'is_stop' => $this->finishState,
'updated_at' => $this->endTime,
'end_capacity' => $this->order->getEndCapacity(),
'end_time' => $this->endTime,
'state' => 1,
], 'id = ' . $this->order->getId());
// TODO: Implement toFinish() method.
}
public function toOffline()
{
$this->redis->hSet($this->keyName, 'offlineTime', time());
// TODO: Implement toOffline() method.
}
public function toOnline()
{
// TODO: Implement toOnline() method.
}
} }
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: banice
* Date: 2018/7/20
* Time: 下午4:19
*/
namespace Lib\cdz_order\state;
class Refund extends State
{
protected $selfStateCode = 3;
public function toCharger()
{
// TODO: Implement toCharger() method.
}
public function toPortShed()
{
// TODO: Implement toPortShed() method.
}
public function toPowerExceed()
{
// TODO: Implement toPowerExceed() method.
}
public function toFull()
{
// TODO: Implement toFull() method.
}
public function toFinish()
{
// TODO: Implement toFinish() method.
}
public function toOffline()
{
// TODO: Implement toOffline() method.
}
public function toOnline()
{
// TODO: Implement toOnline() method.
}
public function toFinishByUser()
{
// TODO: Implement toFinishByUser() method.
}
public function toFinishShed()
{
// TODO: Implement toFinishShed() method.
}
}
\ No newline at end of file
...@@ -12,6 +12,8 @@ namespace Lib\cdz_order\state; ...@@ -12,6 +12,8 @@ namespace Lib\cdz_order\state;
use Lib\api\message\Push; use Lib\api\message\Push;
use Lib\cdz_order\Order; use Lib\cdz_order\Order;
use Lib\cdz_order\order\SaveOrder; use Lib\cdz_order\order\SaveOrder;
use Lib\order_exception\Exception;
use Lib\order_exception\OrderTrace;
abstract class State abstract class State
{ {
...@@ -31,6 +33,12 @@ abstract class State ...@@ -31,6 +33,12 @@ abstract class State
'stateCode', 'stateCode',
]; ];
/**
* @var int
*/
protected $selfStateCode;
/** /**
* 订单状态hash前缀 * 订单状态hash前缀
*/ */
...@@ -50,7 +58,7 @@ abstract class State ...@@ -50,7 +58,7 @@ abstract class State
/** /**
* @var string * @var string
*/ */
protected $keyName= ''; protected $keyName = '';
/** /**
...@@ -100,15 +108,17 @@ abstract class State ...@@ -100,15 +108,17 @@ abstract class State
* @var int * @var int
*/ */
protected $finishState; protected $finishState;
/** /**
* State constructor. * State constructor.
* @param Order $order * @param Order $order
*/ */
public function __construct(Order $order,\Redis $redis) { public function __construct(Order $order, \Redis $redis)
{
$this->order = $order; $this->order = $order;
$this->keyName = self::ORDER_HASH_PREFIX.$order->getId(); $this->keyName = self::ORDER_HASH_PREFIX . $order->getId();
$this->redis = $redis; $this->redis = $redis;
...@@ -116,16 +126,18 @@ abstract class State ...@@ -116,16 +126,18 @@ abstract class State
$orderCache = $order->getOrderCache($redis); $orderCache = $order->getOrderCache($redis);
if(is_array($orderCache)) if (is_array($orderCache)) {
{
foreach ($orderCache as $key => $value) {
if (isset($value) === true) {
if (property_exists($this, $key) === true) {
if($key == 'startTime')
{
$value = date('Y-m-d H:i:s',$value);
foreach ($orderCache as $key => $value) }
{ $this->$key = $value;
if(isset($value) === true)
{
if(property_exists($this,$key) === true)
{
$this->$key =$value;
} }
} }
} }
...@@ -148,6 +160,20 @@ abstract class State ...@@ -148,6 +160,20 @@ abstract class State
abstract public function toOnline(); abstract public function toOnline();
abstract public function toFinishByUser();
abstract public function toFinishShed();
/**
*删除订单redis副本
*/
public function destroy()
{
$this->redis->del($this->keyName);
}
/** /**
* @return Order * @return Order
*/ */
...@@ -340,10 +366,70 @@ abstract class State ...@@ -340,10 +366,70 @@ abstract class State
$this->finishState = $finishState; $this->finishState = $finishState;
} }
protected function orderTrace(int $state,string $desc = '')
{
$desc = isset(Exception::STATE_MESSAGE[$state]) ? Exception::STATE_MESSAGE[$state] : $desc;
$orderTrace = new OrderTrace();
$orderTrace->setOrderId($this->order->getId());
}
/**
* @return int
*/
public function getSelfStateCode(): int
{
return $this->selfStateCode;
}
/**
* @param int $selfStateCode
*/
public function setSelfStateCode(int $selfStateCode): void
{
$this->selfStateCode = $selfStateCode;
}
}
}
\ No newline at end of file
...@@ -9,18 +9,42 @@ ...@@ -9,18 +9,42 @@
namespace Lib\cdz_order\state; namespace Lib\cdz_order\state;
use Application\Model\OrderModel;
use Lib\api\message\ChargerRefundMessage;
use Lib\api\message\ChargerStartMessage;
use Lib\api\message\Push;
use Lib\cdz_order\Order; use Lib\cdz_order\Order;
use Lib\Log;
use Lib\order_exception\OrderTrace;
use Lib\port\Port;
class WaitingCharger extends State class WaitingCharger extends State
{ {
/**
* @var int
*/
protected $selfStateCode = -1;
public function __construct(Order $order, \Redis $redis) { parent::__construct($order, $redis); } public function __construct(Order $order, \Redis $redis) { parent::__construct($order, $redis); }
public function toFinishByUser()
{
// TODO: Implement toFinishByUser() method.
}
public function toFinishShed()
{
// TODO: Implement toFinishShed() method.
}
/** /**
* 订单从等待充电转为开始充电状态 * 订单从等待充电转为开始充电状态
* @throws \GuzzleHttp\Exception\GuzzleException
*/ */
public function toCharger():void public function toCharger(): void
{ {
$this->setStartTime(time()); $this->setStartTime(time());
...@@ -29,13 +53,44 @@ class WaitingCharger extends State ...@@ -29,13 +53,44 @@ class WaitingCharger extends State
$this->saveOrder->pipe(); $this->saveOrder->pipe();
$this->saveOrder->saveStateCode();
$this->saveOrder->saveStartTime(); $this->saveOrder->saveStartTime();
$this->saveOrder->saveStateCode(); $this->saveOrder->saveStateCode();
$this->saveOrder->exec(); $this->saveOrder->exec();
$this->order->setCurrentState(new Charger($this->order,$this->redis)); $orderModel = new OrderModel();
$orderModel->update(['start_time' => date('Y-m-d H:i:s')], 'id = ' . $this->order->getId());
$charger = new Charger($this->order, $this->redis);
$this->order->setCurrentState($charger);
$port = new Port();
$portId = $this->order->getPortId();
$port->setPortState([$portId => 12]);
$orderTrace = new OrderTrace();
$orderTrace->write($this, $charger);
$pushMessage = new ChargerStartMessage();
$pushMessage->setAmount(number_format($this->order->getPayAmount() / 100, 2));
$pushMessage->setAddress($this->order->getStationName() . '-' . $this->order->getPortName() . '号');
$pushMessage->setRemark($pushMessage->getRemark() . '(' . strtoupper(sprintf('%012x', $this->order->getId())) . ')');
$push = new Push();
$push->push($pushMessage, $this->order->getUserId());
} }
...@@ -45,7 +100,6 @@ class WaitingCharger extends State ...@@ -45,7 +100,6 @@ class WaitingCharger extends State
*/ */
public function toPortShed() public function toPortShed()
{ {
throw new \Exception(' waiting state can not change to port shed');
// TODO: Implement toPortShed() method. // TODO: Implement toPortShed() method.
} }
...@@ -71,9 +125,33 @@ class WaitingCharger extends State ...@@ -71,9 +125,33 @@ class WaitingCharger extends State
// TODO: Implement toFull() method. // TODO: Implement toFull() method.
} }
/**
* @throws \GuzzleHttp\Exception\GuzzleException
* 3分钟退款
*/
public function toFinish() public function toFinish()
{ {
$refundMessage = new ChargerRefundMessage();
$refundMessage->setOutTradeNo($this->order->getOutTradeNo());
$refundMessage->setOrderInfo($this->order->getStationName() . '-' . $this->order->getPortName());
$refundMessage->setOrderFee(number_format($this->order->getPayAmount() / 100, 2));
$refundMessage->setRemark($refundMessage->getRemark() . ' (' . $this->order->getOutTradeNo() . ')');
$push = new Push();
$push->push($refundMessage, $this->order->getUserId());
$orderTrace = new OrderTrace();
$orderTrace->setOrderId($this->order->getId());
$orderTrace->write($this, new Refund($this->order, $this->redis));
// TODO: Implement toFinish() method. // TODO: Implement toFinish() method.
} }
...@@ -86,7 +164,11 @@ class WaitingCharger extends State ...@@ -86,7 +164,11 @@ class WaitingCharger extends State
$this->saveOrder->savePortOfflineTime(); $this->saveOrder->savePortOfflineTime();
$this->order->setCurrentState(new Offline($this->order,$this->redis)); $orderTrace = new OrderTrace();
$orderTrace->setOrderId($this->order->getId());
$orderTrace->write($this, $this->order->getCurrentState());
} }
......
...@@ -13,7 +13,7 @@ class Exception ...@@ -13,7 +13,7 @@ class Exception
{ {
const STATE_MESSAGE = [ const STATE_MESSAGE = [
'12' => '开始充电', '12' => '开始充电(充电中)',
'10' => '口子离线', '10' => '口子离线',
'11' => '口子上线', '11' => '口子上线',
'13' => '开始充电失败(异常)', '13' => '开始充电失败(异常)',
...@@ -26,6 +26,12 @@ class Exception ...@@ -26,6 +26,12 @@ class Exception
'98' => '更换充电口', '98' => '更换充电口',
'97' => '下发结束充电命令', '97' => '下发结束充电命令',
'96' => '订单更换口子成功', '96' => '订单更换口子成功',
'41' => '用户主动结束',
'42' => '插口脱落超时结束',
'-1' => '等待充电',
'3' => '超时退款',
'1' => '创建订单',
'43' => '脱落超时结束',
]; ];
......
...@@ -10,6 +10,7 @@ namespace Lib\order_exception; ...@@ -10,6 +10,7 @@ namespace Lib\order_exception;
use Application\Model\OrderExceptionModel; use Application\Model\OrderExceptionModel;
use Lib\cdz_order\state\State;
use Lib\Log; use Lib\Log;
class OrderTrace class OrderTrace
...@@ -17,7 +18,7 @@ class OrderTrace ...@@ -17,7 +18,7 @@ class OrderTrace
/** /**
* @var string * @var string
*/ */
private $orderId =''; private $orderId = '';
/** /**
* @var string * @var string
...@@ -34,7 +35,8 @@ class OrderTrace ...@@ -34,7 +35,8 @@ class OrderTrace
* OrderTrace constructor. * OrderTrace constructor.
* @param string $state * @param string $state
*/ */
public function __construct($state = '') { public function __construct($state = '')
{
$this->orderExceptionModel = new OrderExceptionModel(); $this->orderExceptionModel = new OrderExceptionModel();
...@@ -68,22 +70,20 @@ class OrderTrace ...@@ -68,22 +70,20 @@ class OrderTrace
public function writeTrace() public function writeTrace()
{ {
if (!isset(Exception::STATE_MESSAGE[$this->state])) if (!isset(Exception::STATE_MESSAGE[$this->state])) {
{ Log::error('记录订单异常无次state' . "($this->state)");
Log::error('记录订单异常无次state'."($this->state)");
return ; return;
} }
try{ try {
$this->orderExceptionModel->insertRow([ $this->orderExceptionModel->insertRow([
'state' => $this->state, 'state' => $this->state,
'desc' => Exception::STATE_MESSAGE[$this->state], 'desc' => Exception::STATE_MESSAGE[$this->state],
'created_at' => date('Y-m-d H:i:s'), 'created_at' => date('Y-m-d H:i:s'),
'order_id' => $this->orderId, 'order_id' => $this->orderId,
]); ]);
}catch (\Exception $exception) } catch (\Exception $exception) {
{
Log::error($exception->getMessage()); Log::error($exception->getMessage());
...@@ -96,23 +96,47 @@ class OrderTrace ...@@ -96,23 +96,47 @@ class OrderTrace
* @param int $state * @param int $state
* @param string $message * @param string $message
*/ */
public function writeRawTrace(int $state,string $message) public function writeRawTrace(int $state, string $message)
{ {
try{ try {
$this->orderExceptionModel->insertRow([ $this->orderExceptionModel->insertRow([
'state' => $state, 'state' => $state,
'desc' => $message, 'desc' => $message,
'created_at' => date('Y-m-d H:i:s'), 'created_at' => date('Y-m-d H:i:s'),
'order_id' => $this->orderId 'order_id' => $this->orderId,
]); ]);
}catch (\Exception $exception) } catch (\Exception $exception) {
{
Log::error($exception->getMessage()); Log::error($exception->getMessage());
} }
} }
/**
* 根据状态模式写入订单轨迹
* @param int $lastState
* @param int $currentState
*/
public function write(State $lastState, State $currentState)
{
$lastState = $lastState->getSelfStateCode();
$currentState = $currentState->getSelfStateCode();
$this->orderExceptionModel->insertRow([
'state' => (int)($lastState . $currentState),
'desc' => Exception::STATE_MESSAGE[$lastState] . '-->' . Exception::STATE_MESSAGE[$currentState],
'created_at' => date('Y-m-d H:i:s'),
'order_id' => $this->orderId,
]);
}
} }
......
...@@ -345,10 +345,6 @@ class Port ...@@ -345,10 +345,6 @@ class Port
$result = $redis->hGet(RedisKey::PORT_USING_ORDER_ID,$portId); $result = $redis->hGet(RedisKey::PORT_USING_ORDER_ID,$portId);
var_dump('using order');
var_dump($result);
return is_string($result) ? $result : 0; return is_string($result) ? $result : 0;
} }
...@@ -359,8 +355,6 @@ class Port ...@@ -359,8 +355,6 @@ class Port
$result = $redis->hMGet(RedisKey::PORT_USING_ORDER_ID,$portsId); $result = $redis->hMGet(RedisKey::PORT_USING_ORDER_ID,$portsId);
var_dump($result);
return $result; return $result;
} }
......
...@@ -79,8 +79,6 @@ class Send ...@@ -79,8 +79,6 @@ class Send
} }
/** /**
* 发送至下位机 * 发送至下位机
* @return bool * @return bool
...@@ -93,15 +91,12 @@ class Send ...@@ -93,15 +91,12 @@ class Send
$message = $this->makeMessage(); $message = $this->makeMessage();
Log::debug('send messag'.$message); Log::debug('send message' . $message);
if (strlen($message) % 2 === 1) {
Log::error('length wrong- ' . $message);
if(strlen($message)%2 === 1)
{
Log::error('length wrong- '.$message);
} }
//debug
if (Gateway::isUidOnline($clientUid) === 1) { if (Gateway::isUidOnline($clientUid) === 1) {
......
...@@ -32,8 +32,16 @@ class StopChargerCommand extends Command ...@@ -32,8 +32,16 @@ class StopChargerCommand extends Command
private $gatewayMac; private $gatewayMac;
/**
* @var string
*/
protected $headerCtrl = '05'; protected $headerCtrl = '05';
/**
* @var int
*/
protected $finishType = 0;
public function getMessageBody(): string public function getMessageBody(): string
{ {
...@@ -43,13 +51,18 @@ class StopChargerCommand extends Command ...@@ -43,13 +51,18 @@ class StopChargerCommand extends Command
$orderId = sprintf('%012x', $this->orderId); $orderId = sprintf('%012x', $this->orderId);
return $this->messageBody = $logicNum . $orderId; $finishType = sprintf('%02x', $this->finishType);
return $this->messageBody = $logicNum . $orderId . $finishType;
} }
public function getClientId(): string public function getClientId(): string
{ {
return $this->clientId;
// TODO: Implement getClientId() method. // TODO: Implement getClientId() method.
} }
...@@ -123,5 +136,38 @@ class StopChargerCommand extends Command ...@@ -123,5 +136,38 @@ class StopChargerCommand extends Command
$this->headerCtrl = $headerCtrl; $this->headerCtrl = $headerCtrl;
} }
/**
* @return int
*/
public function getFinishType(): int
{
return $this->finishType;
}
/**
* @param int $finishType
*/
public function setFinishType(int $finishType): void
{
$this->finishType = $finishType;
}
/**
* @param string $clientId
*/
public function setClientId(string $clientId): void
{
$this->clientId = $clientId;
}
/**
* @param string $clientUid
*/
public function setClientUid(string $clientUid): void
{
$this->clientUid = $clientUid;
}
} }
\ No newline at end of file
...@@ -13,6 +13,8 @@ class StateCode ...@@ -13,6 +13,8 @@ class StateCode
{ {
const WAITING = -1;
const PORT_OFFLINE = 10; const PORT_OFFLINE = 10;
const PORT_ONLINE = 11; const PORT_ONLINE = 11;
...@@ -43,6 +45,13 @@ class StateCode ...@@ -43,6 +45,13 @@ class StateCode
const FINISH_CHARGER = 36; const FINISH_CHARGER = 36;
const FINISH_USER = 41;
const FINISH_SHED_TIMEOUT = 42;
const FINISH_REFUND = 43;
......
...@@ -23,42 +23,50 @@ class Api ...@@ -23,42 +23,50 @@ class Api
// static::add('00','HeartController@heart',[new AuthMiddleware(),new HasMacMiddleware()]); // static::add('00','HeartController@heart',[new AuthMiddleware(),new HasMacMiddleware()]);
static::add('00','HeartController@heart'); static::add('00', 'HeartController@heart');
static::add('01','CertifyController@certify'); static::add('01', 'CertifyController@certify');
static::add('02','AccessController@access'); static::add('02', 'AccessController@access');
static::add('03','AccessController@syncPort',[new AuthMiddleware(),new HasMacMiddleware()]); static::add('03', 'AccessController@syncPort', [new AuthMiddleware(), new HasMacMiddleware()]);
static::add('04','PowerController@charger',[new AuthMiddleware(),new HasMacMiddleware()]); static::add('04', 'PowerController@charger', [new AuthMiddleware(), new HasMacMiddleware()]);
static::add('05','PowerController@stop',[new AuthMiddleware(),new HasMacMiddleware()]); static::add('06', 'AmmeterController@recordd', [new AuthMiddleware(), new HasMacMiddleware()]);
static::add('08','PortController@online',[new AuthMiddleware(),new HasMacMiddleware()]); //debug
// static::add('05','PowerController@stop',[new AuthMiddleware(),new HasMacMiddleware()]);
static::add('09','PortController@offline',[new AuthMiddleware(),new HasMacMiddleware()]); static::add('05', 'PowerController@finish', [new AuthMiddleware(), new HasMacMiddleware()]);
static::add('07','PowerController@power',[new AuthMiddleware(),new HasMacMiddleware()]); static::add('08', 'PortController@online', [new AuthMiddleware(), new HasMacMiddleware()]);
static::add('17','PowerController@onePower',[new AuthMiddleware(),new HasMacMiddleware()]); static::add('09', 'PortController@offline', [new AuthMiddleware(), new HasMacMiddleware()]);
static::add('0B','PortController@portState',[new AuthMiddleware(),new HasMacMiddleware()]); static::add('07', 'PowerController@power', [new AuthMiddleware(), new HasMacMiddleware()]);
static::add('0A','SettingController@setting'); static::add('17', 'PowerController@onePower', [new AuthMiddleware(), new HasMacMiddleware()]);
//static::add('0B','PortController@portState',[new AuthMiddleware(),new HasMacMiddleware()]);
static::add('0B', 'PortStateController@change', [new AuthMiddleware(), new HasMacMiddleware()]);
static::add('0A', 'SettingController@setting');
static::add('0F', 'PowerOffController@powerOff', [new AuthMiddleware(), new HasMacMiddleware()]);
} }
public static function add(string $command, string $controllerAction,array $middleware =[]) public static function add(string $command, string $controllerAction, array $middleware = [])
{ {
$route = new Route(); $route = new Route();
$route->setCommand($command); $route->setCommand($command);
$controllerAction = explode('@',$controllerAction); $controllerAction = explode('@', $controllerAction);
$route->setController($controllerAction[0]); $route->setController($controllerAction[0]);
......
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