From 869189d18e2e593f0bc77766253e4d356a66ab19 Mon Sep 17 00:00:00 2001 From: lnk Date: Thu, 4 Sep 2025 20:59:17 +0800 Subject: [PATCH 1/2] add function --- LFtid1056/boot/feservice | 29 + LFtid1056/boot/ps_fe.sh | 62 ++ LFtid1056/boot/start_fe.sh | 97 +++ LFtid1056/boot/stop_fe.sh | 129 ++++ LFtid1056/cloudfront/code/cfg_parser.cpp | 103 ++- LFtid1056/cloudfront/code/interface.cpp | 27 +- LFtid1056/cloudfront/code/interface.h | 6 +- LFtid1056/config/front.cfg | 77 +++ .../dat/095a84f23ec7e283a9ffe8e182708f04.xml | 1 + .../dat/0b53c730f88d4b69a73f239475fc3876.xml | 1 + .../dat/0c6e1be36f19fb4d809836ed96f7796f.xml | 1 + .../dat/0fc2e86ded1ed4cbbda8830acd331314.xml | 1 + .../dat/112e261cb8e804600104ffebfd9cbefd.xml | 1 + .../dat/134e25eb59a22cc8394ff3bc1dde554c.xml | 1 + .../dat/148f24a2664fa054ede4f686fd984292.xml | 1 + .../dat/14e2078291f3a2f800480a6ca699fbcd.xml | 1 + .../dat/1654a86f7cb25a322573bbf3571b1765.xml | 1 + .../dat/180735bfe2c59f4d8e1d85bd2a1984ef.xml | 1 + .../dat/1f2c42ee0e8d689005b3f58967054e5c.xml | 1 + .../dat/1ff4038a4574dbc52ccf005bef20041b.xml | 1 + .../dat/2bd3d80c86e078d77f8482e48c3b3f99.xml | 1 + .../dat/35d62f0ad688a14583290a0ba0fc2b42.xml | 1 + .../dat/38c2ec0e305b07c04674ddbb4c972a2a.xml | 1 + .../dat/393c172bcd297f8cd68a41f202f78b2f.xml | 1 + .../dat/3ef998435d692c62f58a8dc26dec99cc.xml | 1 + .../dat/49dd3d79e7cdd27597ba2526858c372e.xml | 1 + .../dat/4b1e55fba360f30a5e91bcf6fae63d82.xml | 1 + .../dat/4fd8f3fb39c8333e525aad2cfed8d4ba.xml | 1 + .../dat/52f48442032e85d8257b9e6e409ae727.xml | 1 + .../dat/5c26d1a34a996a64645334cf36fc65cd.xml | 1 + .../dat/5d623f8d16d2f66473c4ae04661fc995.xml | 1 + .../dat/5ff7ad05e7bcd2cc2f540b5e06849776.xml | 1 + .../dat/62f1441d04b665b1b598974b411d45eb.xml | 1 + .../dat/63a5b90766f86a484c84f22c9ce29e44.xml | 1 + .../dat/63cb5f7437e1922be7f0b606b12679ce.xml | 1 + .../dat/643f3997e9c31173d8c93cc38c1d5129.xml | 1 + .../dat/64992cafdb7bf7e94b0ae3556c6dd2b3.xml | 1 + .../dat/669466052823ae6ce09cd6bc575176be.xml | 1 + .../dat/66aac8de119b48126ae0fa3fd28b8499.xml | 1 + .../dat/68d618ae6a52e34483c90bb7642ef353.xml | 1 + .../dat/69d6bebce232d3949d9f1d75c66d90c4.xml | 1 + .../dat/6a9b0cae90ca3ea6b750f1117e93816b.xml | 1 + .../dat/6cd6498c079396e9d42d6764bdad21ab.xml | 1 + .../dat/74a0fe58192a690f2037dab8bcff5e25.xml | 1 + .../dat/7677814fc1e2bc194ca2d82a62f3dd1d.xml | 1 + .../dat/7a0fb4cc2013497797dc46d50526d1b1.xml | 1 + .../dat/7be60bf2c9265b2f91ff11a21c62edbb.xml | 1 + .../dat/824cf5433d2d8c82eaf816a28f9a232d.xml | 1 + .../dat/82c0ffe9b6a6e54ff6768aa4b151759d.xml | 1 + .../dat/895f951309513397852cafbe846c9298.xml | 1 + .../dat/8c84b8c0ae99b17afa0c79c0e2e848e3.xml | 1 + .../dat/8dd12600976ac6c95e18c5980400eee3.xml | 1 + .../dat/8e051a07f6fc2ff03487bc87cb3e4d91.xml | 1 + .../dat/942b70650cb8d099401c01446d3c08de.xml | 1 + .../dat/950c2c11da36897552766fd7a02af6d5.xml | 1 + .../dat/9667fe63920c038605911d88b0f9e9a2.xml | 1 + .../dat/a25d58d7780a51de20223c7ffffa3219.xml | 1 + .../dat/ab5204b5e2222712f70233741ff7bfb0.xml | 1 + .../dat/b3f054b07c0cd6eae366c3f7c0178dc8.xml | 1 + .../dat/b59349bf7d426611102acd7ef65f8861.xml | 1 + .../dat/ba674fe68e95b86478683610ad7790df.xml | 1 + .../dat/c1c0d4bbf50a11e76c378ce5ac116f5f.xml | 1 + .../dat/c6ec71e6dcd9e9c2aae7eb5eddd59099.xml | 1 + .../dat/c8a4b43c08da8a44b3d08ee730dc5d56.xml | 1 + .../dat/c9a030d97e42865d4fc24b4424e87ad0.xml | 1 + .../dat/ca16b843d971cb760168c797e24e81f9.xml | 1 + .../dat/ca42aa3651b65244924374397fbffa80.xml | 1 + .../dat/caf9a220fe671f9e82d282c88edad459.xml | 1 + .../dat/cb5275b81d36cf6fc7069fafa121d734.xml | 1 + .../dat/d2526e08196f7dfdc4ca81c67264c0c1.xml | 1 + .../dat/dab107086ada2504be4f40a158858838.xml | 1 + .../dat/dab72e86a7b30990285976169c0dfb3f.xml | 1 + .../dat/dc0a7739bdeb18d6c82b493bcd49d5d3.xml | 1 + .../dat/dc9bef9ba55574c5e7d1d3c78afa2c45.xml | 1 + .../dat/deba4e29af5efbf756557661ec254ec3.xml | 1 + .../dat/e6585f5e6837be74ba04350f133340d9.xml | 1 + .../dat/eeaa3bdc02c4e50b48eb92716d5c14db.xml | 1 + .../dat/f0386b207f416a1bf7948d478087a0fb.xml | 1 + .../dat/fa1050bdce7efd63508e881536157058.xml | 1 + .../dat/fc205e2c998c64fc5afb8ec62b54129a.xml | 1 + .../dat/ledger/20250807185343_ledger.txt | 1 + LFtid1056/dealMsg.cpp | 8 + LFtid1056/etc/Default_Config.xml | 585 ++++++++++++++++++ LFtid1056/etc/runtime.cf | 6 + LFtid1056/main_thread.cpp | 22 +- 85 files changed, 1209 insertions(+), 15 deletions(-) create mode 100644 LFtid1056/boot/feservice create mode 100644 LFtid1056/boot/ps_fe.sh create mode 100644 LFtid1056/boot/start_fe.sh create mode 100644 LFtid1056/boot/stop_fe.sh create mode 100644 LFtid1056/config/front.cfg create mode 100644 LFtid1056/dat/095a84f23ec7e283a9ffe8e182708f04.xml create mode 100644 LFtid1056/dat/0b53c730f88d4b69a73f239475fc3876.xml create mode 100644 LFtid1056/dat/0c6e1be36f19fb4d809836ed96f7796f.xml create mode 100644 LFtid1056/dat/0fc2e86ded1ed4cbbda8830acd331314.xml create mode 100644 LFtid1056/dat/112e261cb8e804600104ffebfd9cbefd.xml create mode 100644 LFtid1056/dat/134e25eb59a22cc8394ff3bc1dde554c.xml create mode 100644 LFtid1056/dat/148f24a2664fa054ede4f686fd984292.xml create mode 100644 LFtid1056/dat/14e2078291f3a2f800480a6ca699fbcd.xml create mode 100644 LFtid1056/dat/1654a86f7cb25a322573bbf3571b1765.xml create mode 100644 LFtid1056/dat/180735bfe2c59f4d8e1d85bd2a1984ef.xml create mode 100644 LFtid1056/dat/1f2c42ee0e8d689005b3f58967054e5c.xml create mode 100644 LFtid1056/dat/1ff4038a4574dbc52ccf005bef20041b.xml create mode 100644 LFtid1056/dat/2bd3d80c86e078d77f8482e48c3b3f99.xml create mode 100644 LFtid1056/dat/35d62f0ad688a14583290a0ba0fc2b42.xml create mode 100644 LFtid1056/dat/38c2ec0e305b07c04674ddbb4c972a2a.xml create mode 100644 LFtid1056/dat/393c172bcd297f8cd68a41f202f78b2f.xml create mode 100644 LFtid1056/dat/3ef998435d692c62f58a8dc26dec99cc.xml create mode 100644 LFtid1056/dat/49dd3d79e7cdd27597ba2526858c372e.xml create mode 100644 LFtid1056/dat/4b1e55fba360f30a5e91bcf6fae63d82.xml create mode 100644 LFtid1056/dat/4fd8f3fb39c8333e525aad2cfed8d4ba.xml create mode 100644 LFtid1056/dat/52f48442032e85d8257b9e6e409ae727.xml create mode 100644 LFtid1056/dat/5c26d1a34a996a64645334cf36fc65cd.xml create mode 100644 LFtid1056/dat/5d623f8d16d2f66473c4ae04661fc995.xml create mode 100644 LFtid1056/dat/5ff7ad05e7bcd2cc2f540b5e06849776.xml create mode 100644 LFtid1056/dat/62f1441d04b665b1b598974b411d45eb.xml create mode 100644 LFtid1056/dat/63a5b90766f86a484c84f22c9ce29e44.xml create mode 100644 LFtid1056/dat/63cb5f7437e1922be7f0b606b12679ce.xml create mode 100644 LFtid1056/dat/643f3997e9c31173d8c93cc38c1d5129.xml create mode 100644 LFtid1056/dat/64992cafdb7bf7e94b0ae3556c6dd2b3.xml create mode 100644 LFtid1056/dat/669466052823ae6ce09cd6bc575176be.xml create mode 100644 LFtid1056/dat/66aac8de119b48126ae0fa3fd28b8499.xml create mode 100644 LFtid1056/dat/68d618ae6a52e34483c90bb7642ef353.xml create mode 100644 LFtid1056/dat/69d6bebce232d3949d9f1d75c66d90c4.xml create mode 100644 LFtid1056/dat/6a9b0cae90ca3ea6b750f1117e93816b.xml create mode 100644 LFtid1056/dat/6cd6498c079396e9d42d6764bdad21ab.xml create mode 100644 LFtid1056/dat/74a0fe58192a690f2037dab8bcff5e25.xml create mode 100644 LFtid1056/dat/7677814fc1e2bc194ca2d82a62f3dd1d.xml create mode 100644 LFtid1056/dat/7a0fb4cc2013497797dc46d50526d1b1.xml create mode 100644 LFtid1056/dat/7be60bf2c9265b2f91ff11a21c62edbb.xml create mode 100644 LFtid1056/dat/824cf5433d2d8c82eaf816a28f9a232d.xml create mode 100644 LFtid1056/dat/82c0ffe9b6a6e54ff6768aa4b151759d.xml create mode 100644 LFtid1056/dat/895f951309513397852cafbe846c9298.xml create mode 100644 LFtid1056/dat/8c84b8c0ae99b17afa0c79c0e2e848e3.xml create mode 100644 LFtid1056/dat/8dd12600976ac6c95e18c5980400eee3.xml create mode 100644 LFtid1056/dat/8e051a07f6fc2ff03487bc87cb3e4d91.xml create mode 100644 LFtid1056/dat/942b70650cb8d099401c01446d3c08de.xml create mode 100644 LFtid1056/dat/950c2c11da36897552766fd7a02af6d5.xml create mode 100644 LFtid1056/dat/9667fe63920c038605911d88b0f9e9a2.xml create mode 100644 LFtid1056/dat/a25d58d7780a51de20223c7ffffa3219.xml create mode 100644 LFtid1056/dat/ab5204b5e2222712f70233741ff7bfb0.xml create mode 100644 LFtid1056/dat/b3f054b07c0cd6eae366c3f7c0178dc8.xml create mode 100644 LFtid1056/dat/b59349bf7d426611102acd7ef65f8861.xml create mode 100644 LFtid1056/dat/ba674fe68e95b86478683610ad7790df.xml create mode 100644 LFtid1056/dat/c1c0d4bbf50a11e76c378ce5ac116f5f.xml create mode 100644 LFtid1056/dat/c6ec71e6dcd9e9c2aae7eb5eddd59099.xml create mode 100644 LFtid1056/dat/c8a4b43c08da8a44b3d08ee730dc5d56.xml create mode 100644 LFtid1056/dat/c9a030d97e42865d4fc24b4424e87ad0.xml create mode 100644 LFtid1056/dat/ca16b843d971cb760168c797e24e81f9.xml create mode 100644 LFtid1056/dat/ca42aa3651b65244924374397fbffa80.xml create mode 100644 LFtid1056/dat/caf9a220fe671f9e82d282c88edad459.xml create mode 100644 LFtid1056/dat/cb5275b81d36cf6fc7069fafa121d734.xml create mode 100644 LFtid1056/dat/d2526e08196f7dfdc4ca81c67264c0c1.xml create mode 100644 LFtid1056/dat/dab107086ada2504be4f40a158858838.xml create mode 100644 LFtid1056/dat/dab72e86a7b30990285976169c0dfb3f.xml create mode 100644 LFtid1056/dat/dc0a7739bdeb18d6c82b493bcd49d5d3.xml create mode 100644 LFtid1056/dat/dc9bef9ba55574c5e7d1d3c78afa2c45.xml create mode 100644 LFtid1056/dat/deba4e29af5efbf756557661ec254ec3.xml create mode 100644 LFtid1056/dat/e6585f5e6837be74ba04350f133340d9.xml create mode 100644 LFtid1056/dat/eeaa3bdc02c4e50b48eb92716d5c14db.xml create mode 100644 LFtid1056/dat/f0386b207f416a1bf7948d478087a0fb.xml create mode 100644 LFtid1056/dat/fa1050bdce7efd63508e881536157058.xml create mode 100644 LFtid1056/dat/fc205e2c998c64fc5afb8ec62b54129a.xml create mode 100644 LFtid1056/dat/ledger/20250807185343_ledger.txt create mode 100644 LFtid1056/etc/Default_Config.xml create mode 100644 LFtid1056/etc/runtime.cf diff --git a/LFtid1056/boot/feservice b/LFtid1056/boot/feservice new file mode 100644 index 0000000..966494d --- /dev/null +++ b/LFtid1056/boot/feservice @@ -0,0 +1,29 @@ +#!/bin/bash + +export CLOUD_PATH=/home/pq/zwproject/LFtid1056 + +if [ -z "$CLOUD_PATH" ]; then + echo "Error: CLOUD_PATH is not set. Please set it first." + exit 1 +fi + +case "$1" in + 'start') + $CLOUD_PATH/boot/start_fe.sh + ;; + + 'stop') + $CLOUD_PATH/boot/stop_fe.sh + ;; + + 'restart') + $CLOUD_PATH/boot/stop_fe.sh + $CLOUD_PATH/boot/start_fe.sh + ;; + + *) + echo "Usage: feservice start|stop|restart" + exit 1 + ;; +esac + diff --git a/LFtid1056/boot/ps_fe.sh b/LFtid1056/boot/ps_fe.sh new file mode 100644 index 0000000..d5a6a6c --- /dev/null +++ b/LFtid1056/boot/ps_fe.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +# ========= 0. 获取脚本所在路径的上一层,设置为 FEP_ENV ========= +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +FEP_ENV="$(dirname "$SCRIPT_DIR")" +export FEP_ENV + +# ========= 1. 初始化软连接 ========= +TEMP_LINK_CREATED=0 +if [ ! -L "/FeProject" ]; then + if [ ! -e "/FeProject" ]; then + sudo ln -s "$FEP_ENV" /FeProject + TEMP_LINK_CREATED=1 + echo "Temporary symlink /FeProject created." + else + echo "/FeProject exists but is not a symlink. Please check manually." + fi +fi + +if [ -z "$FEP_ENV" ]; then + echo "Error: FEP_ENV is not set. Please set it first." + exit 1 +fi + +RUNTIME_CF_FILE="$FEP_ENV/etc/runtime.cf" + +while read LINE ; do + if [ -n "$LINE" ] ; then + if [ ${LINE:0:1} != "#" ]; then + BINPATH=`echo $LINE | awk -F '^' '{printf $1}'` + BINPATH=`echo "$BINPATH" | grep -o "[^ ]\+\( \+[^ ]\+\)*"` +# echo $BINPATH + BIN=`echo $LINE | awk -F '^' '{printf $2}'` + BIN=`echo "$BIN" | grep -o "[^ ]\+\( \+[^ ]\+\)*"` +# echo $BIN + SPECIAL=`echo $LINE | awk -F '^' '{printf $4}'` + SPECIAL=`echo "$SPECIAL" | grep -o "[^ ]\+\( \+[^ ]\+\)*"` +# echo $SPECIAL + + SLEEPSEC=`echo $LINE | awk -F '^' '{printf $5}'` + SLEEPSEC=`echo "$SLEEPSEC" | grep -o "[^ ]\+\( \+[^ ]\+\)*"` +# echo $SLEEPSEC + STARTFLAG=`echo $LINE | awk -F '^' '{printf $7}'` + STARTFLAG=`echo "$STARTFLAG" | grep -o "[^ ]\+\( \+[^ ]\+\)*"` +# echo $STARTFLAG + +# if [ "`echo $STARTFLAG`" != "IGNORE_START" ]; then + CMD_STR=" ps -w | grep `echo "'"``echo $BIN``echo "'"` | grep -v 'grep'" + BIN2=`echo $BIN` + ps -ef | grep "$BIN2" | grep -v 'grep' +# fi + fi + fi +done < $RUNTIME_CF_FILE + +# ========= 4. 清理软链接(仅在本次脚本中创建) ========= +if [ "$TEMP_LINK_CREATED" -eq 1 ]; then + if [ -L "/FeProject" ]; then + sudo rm -f /FeProject + echo "Temporary symlink /FeProject removed." + fi +fi diff --git a/LFtid1056/boot/start_fe.sh b/LFtid1056/boot/start_fe.sh new file mode 100644 index 0000000..d12d468 --- /dev/null +++ b/LFtid1056/boot/start_fe.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +# ========= 0. ȡű·һ㣬Ϊ FEP_ENV ========= +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +FEP_ENV="$(dirname "$SCRIPT_DIR")" +export FEP_ENV + +# ========= 1. ʼ ========= +TEMP_LINK_CREATED=0 +if [ ! -L "/FeProject" ]; then + if [ ! -e "/FeProject" ]; then + sudo ln -s "$FEP_ENV" /FeProject + TEMP_LINK_CREATED=1 + echo "Temporary symlink /FeProject created." + else + echo "/FeProject exists but is not a symlink. Please check manually." + fi +fi + +if [ -z "$FEP_ENV" ]; then + echo "Error: FEP_ENV is not set. Please set it first." + exit 1 +fi + +# ========= 2. ־ת ========= +check_log_file() { + if [ -n "$1" ]; then + FILE_SIZE=$(du "$1" | awk '{print $1}') + if [ "$FILE_SIZE" -ge 5120 ]; then + [ -f "$1.3" ] && rm -f "$1.3" + [ -f "$1.2" ] && mv "$1.2" "$1.3" + [ -f "$1.1" ] && mv "$1.1" "$1.2" + mv "$1" "$1.1" + fi + fi +} + +LOGFILE="$FEP_ENV/dat/log/start_fe.log" +check_log_file "$LOGFILE" + +echo "" ; echo "" +echo "******* $(date "+%F %R:%S") Start Processes *******" +echo "" >>"$LOGFILE" +echo "" >>"$LOGFILE" +echo "******* $(date "+%F %R:%S") Start Processes *******" >>"$LOGFILE" + +# ========= 3. ========= +RUNTIME_CF_FILE="$FEP_ENV/etc/runtime.cf" + +echo "Using config file name: $RUNTIME_CF_FILE" +echo "Using config file name: $RUNTIME_CF_FILE" >>"$LOGFILE" + +cd "$FEP_ENV/boot" || exit 1 +CURDIR=$(pwd) + +while read -r LINE; do + if [ -n "$LINE" ] && [[ ${LINE:0:1} != "#" ]]; then + BINPATH=$(echo "$LINE" | awk -F '^' '{print $1}' | grep -o "[^ ]\+\( \+[^ ]\+\)*") + echo "$BINPATH" + BIN=$(echo "$LINE" | awk -F '^' '{print $2}' | grep -o "[^ ]\+\( \+[^ ]\+\)*") + echo "$BIN" + SPECIAL=$(echo "$LINE" | awk -F '^' '{print $4}' | grep -o "[^ ]\+\( \+[^ ]\+\)*") + echo "$SPECIAL" + SLEEPSEC=$(echo "$LINE" | awk -F '^' '{print $5}' | grep -o "[^ ]\+\( \+[^ ]\+\)*") + echo "$SLEEPSEC" + STARTFLAG=$(echo "$LINE" | awk -F '^' '{print $7}' | grep -o "[^ ]\+\( \+[^ ]\+\)*") + echo "$STARTFLAG" + RESTARTFLAG=$(echo "$LINE" | awk -F '^' '{print $6}' | grep -o "[^ ]\+\( \+[^ ]\+\)*") + echo "$RESTARTFLAG" + + if [ "$RESTARTFLAG" = "IGNORE_RESTART" ]; then + CMD_STR="sleep $SLEEPSEC" + echo "$CMD_STR" + echo "$CMD_STR" >>"$LOGFILE" + eval "$CMD_STR" + + CMD_STR="$BINPATH$BIN $SPECIAL" + echo "$CMD_STR" + echo "$CMD_STR" >>"$LOGFILE" + eval "$CMD_STR" &>/dev/null + fi + fi +done < "$RUNTIME_CF_FILE" + +cd "$CURDIR" + +DT=$(date "+%F %R:%S.%N") +echo "******* ${DT:0:23} Start Processes Succcessfully *******" +echo "******* ${DT:0:23} Start Processes Succcessfully *******" >>"$LOGFILE" + +# ========= 4. ӣڱνűд ========= +if [ "$TEMP_LINK_CREATED" -eq 1 ]; then + if [ -L "/FeProject" ]; then + sudo rm -f /FeProject + echo "Temporary symlink /FeProject removed." + fi +fi diff --git a/LFtid1056/boot/stop_fe.sh b/LFtid1056/boot/stop_fe.sh new file mode 100644 index 0000000..0aa9296 --- /dev/null +++ b/LFtid1056/boot/stop_fe.sh @@ -0,0 +1,129 @@ +#!/bin/bash + +# ========= 0. 获取脚本所在路径的上一层,设置为 FEP_ENV ========= +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +FEP_ENV="$(dirname "$SCRIPT_DIR")" +export FEP_ENV + +# ========= 1. 初始化软连接 ========= +TEMP_LINK_CREATED=0 +if [ ! -L "/FeProject" ]; then + if [ ! -e "/FeProject" ]; then + sudo ln -s "$FEP_ENV" /FeProject + TEMP_LINK_CREATED=1 + echo "Temporary symlink /FeProject created." + else + echo "/FeProject exists but is not a symlink. Please check manually." + fi +fi + +if [ -z "$FEP_ENV" ]; then + echo "Error: FEP_ENV is not set. Please set it first." + exit 1 +fi + +check_log_file() +{ +if [ -n "$1" ] ; then + FILE_SIZE=0 + FILE_SIZE=`du $1 | awk '{print $1}'` + if [ $FILE_SIZE -ge 5120 ] + then + if [ -f "$1".3 ]; then + rm -f "$1".3 + fi + if [ -f "$1".2 ]; then + mv "$1".2 "$1".3 + fi + if [ -f "$1".1 ]; then + mv "$1".1 "$1".2 + fi + mv "$1" "$1".1 + fi +fi +} + +LOGFILE="$FEP_ENV/dat/log/start_fe.log" +check_log_file $LOGFILE + +echo "" ; echo "" +echo "****** `date "+%F %R:%S"` Stop Processes ******" +echo "" >>"$LOGFILE" +echo "" >>"$LOGFILE" +echo "****** `date "+%F %R:%S"` Stop Processes ******" >>"$LOGFILE" + +RUNTIME_CF_FILE="$FEP_ENV/etc/runtime.cf" + +#cat $RUNTIME_CF_FILE |tac > /tmp/runtime.cf +sed '1!G;h;$!d' $RUNTIME_CF_FILE > /tmp/runtime.cf + +echo "Using config file name: $RUNTIME_CF_FILE" +echo "Using config file name: $RUNTIME_CF_FILE">>"$LOGFILE" + +while read LINE ; do + if [ -n "$LINE" ] ; then + if [ ${LINE:0:1} != "#" ]; then + BINPATH=`echo $LINE | awk -F '^' '{printf $1}'` + BINPATH=`echo "$BINPATH" | grep -o "[^ ]\+\( \+[^ ]\+\)*"` +# echo $BINPATH + BIN=`echo $LINE | awk -F '^' '{printf $2}'` + BIN=`echo "$BIN" | grep -o "[^ ]\+\( \+[^ ]\+\)*"` +# echo $BIN + SPECIAL=`echo $LINE | awk -F '^' '{printf $4}'` + SPECIAL=`echo "$SPECIAL" | grep -o "[^ ]\+\( \+[^ ]\+\)*"` +# echo $SPECIAL + + SLEEPSEC=`echo $LINE | awk -F '^' '{printf $5}'` + SLEEPSEC=`echo "$SLEEPSEC" | grep -o "[^ ]\+\( \+[^ ]\+\)*"` +# echo $SLEEPSEC + STARTFLAG=`echo $LINE | awk -F '^' '{printf $7}'` + STARTFLAG=`echo "$STARTFLAG" | grep -o "[^ ]\+\( \+[^ ]\+\)*"` +# echo $STARTFLAG + + if [ "`echo $STARTFLAG`" != "IGNORE_START" ]; then +# echo "" +# echo "" >>"$LOGFILE" + CMD_STR=" ps -w | grep `echo "'"``echo $BIN``echo "'"` | grep -v 'grep'" + BIN2=`echo $BIN` + BIN3=`echo $BIN |awk '{print$1}'` +# CMD_STR="killall `echo $BIN | awk '{print$1}'` 2>&1 " + PIDSTR=`ps -ef | grep "$BIN2" | grep -v 'grep'` + if [ -n "$PIDSTR" ] ; then + if [ "$BIN3" == "fe_main" ]; then + CMD_STR=" sleep 3 " + echo "$CMD_STR" + echo "$CMD_STR" >>"$LOGFILE" + $CMD_STR + fi + + CMD_STR="kill -15 `echo $PIDSTR | awk '{print$2}'` " + echo " Kill process: \"$BIN\" with PID `echo $PIDSTR | awk '{print$2}'`" + echo " Kill process: \"$BIN\" with PID `echo $PIDSTR | awk '{print$2}'`" >>"$LOGFILE" + echo " Executing: $CMD_STR" + echo " Executing: $CMD_STR" >>"$LOGFILE" + CMD_RESULT=`$CMD_STR` + if [ -n "$CMD_RESULT" ] ; then + echo "$CMD_RESULT" + echo "$CMD_RESULT" >>"$LOGFILE" + fi + + else + echo " Process \"$BIN\" not running." + fi + fi + fi + fi +done < /tmp/runtime.cf + +DT=`date "+%F %R:%S.%N"` +echo "****** ${DT:0:23} Stop Processes Succcessfully ******" +echo "" >>"$LOGFILE" +echo "****** ${DT:0:23} Stop Processes Succcessfully ******" >>"$LOGFILE" + +# ========= 4. 清理软链接(仅在本次脚本中创建) ========= +if [ "$TEMP_LINK_CREATED" -eq 1 ]; then + if [ -L "/FeProject" ]; then + sudo rm -f /FeProject + echo "Temporary symlink /FeProject removed." + fi +fi \ No newline at end of file diff --git a/LFtid1056/cloudfront/code/cfg_parser.cpp b/LFtid1056/cloudfront/code/cfg_parser.cpp index 11ba5fa..cb068cc 100644 --- a/LFtid1056/cloudfront/code/cfg_parser.cpp +++ b/LFtid1056/cloudfront/code/cfg_parser.cpp @@ -2820,6 +2820,9 @@ void upload_data_test(){ //////////////////////////////////////////////////////////////////////////////////////////////////台账赋值给通信 std::vector GenerateDeviceInfoFromLedger(const std::vector& terminal_devlist) { + + std::lock_guard lock(ledgermtx); + std::vector devices; for (const auto& terminal : terminal_devlist) { @@ -3217,7 +3220,7 @@ void check_device_busy_timeout() if (dev.busytimecount > 30) { std::cout << "[Timeout] Device " << dev.terminal_id - << " busytype=READING_FILEMENU 超时(" + << " busytype=READING_FILEDATA 超时(" << dev.busytimecount << "s)" << std::endl; //发送超时响应 @@ -3407,6 +3410,37 @@ bool save_internal_value(const std::string &dev_id, const std::vector &fa return true; } +bool save_internal_info(const std::string &dev_id, const std::vector &fixValueList) { + // 找到对应 terminal_dev + std::lock_guard lock(ledgermtx); + + auto it = std::find_if(terminal_devlist.begin(), terminal_devlist.end(), + [&](const terminal_dev &dev) { return dev.terminal_id == dev_id; }); + if (it == terminal_devlist.end()) { + std::cerr << "[send_set_reply] device not found: " << dev_id << std::endl; + return false; + } + + terminal_dev &dev = *it; + + // 判断 isbusy==2 且 busytype==READING_INTERFIXEDVALUE + if (dev.isbusy != 2 || dev.busytype != static_cast(DeviceState::READING_INTERFIXEDVALUE)) { + std::cerr << "[send_set_reply] device not in READING_INTERFIXEDVALUE state." << std::endl; + return false; + } + + // ★ 新增:清理原有的内部定值列表 + dev.dz_internal_info_list.clear(); + //将值严格按顺序存入list中 + for (const auto &info : fixValueList) { + dev.dz_internal_info_list.push_back(info); + } + + dev.isbusy--; + + return true; +} + /////////////////////////////////////////////////////////////////////////////////////////////////////////回复定值读取响应 bool send_set_value_reply(const std::string &dev_id, unsigned char mp_index, const std::vector &dz_info) { std::lock_guard lock(ledgermtx); @@ -3530,3 +3564,70 @@ bool send_set_value_reply(const std::string &dev_id, unsigned char mp_index, con return true; } + +bool send_internal_value_reply(const std::string &dev_id, const std::vector &control_words) { + std::lock_guard lock(ledgermtx); + + // 1) 找终端 + auto it = std::find_if(terminal_devlist.begin(), terminal_devlist.end(), + [&](const terminal_dev &d) { return d.terminal_id == dev_id; }); + if (it == terminal_devlist.end()) { + std::cerr << "[send_set_value_reply] device not found: " << dev_id << std::endl; + return false; + } + terminal_dev &dev = *it; + + // 2) 校验状态:发送“定值读取结果”回复,应处于 READING_INTERFIXEDVALUE;isbusy == 1 + if (dev.isbusy != 1 || dev.busytype != static_cast(DeviceState::READING_INTERFIXEDVALUE)) { //定值读取 + std::cerr << "[send_set_value_reply] device not in READING_INTERFIXEDVALUE state." << std::endl; + return false; + } + + // 5) 生成 JSON(结构严格贴合你给的样例) + nlohmann::json j; + + // 顶层 + j["guid"] = dev.guid; + j["FrontIP"] = FRONT_IP; // 你的前置机 IP(项目已有常量/变量) + j["Node"] = g_front_seg_index; // 节点号(项目已有变量) + j["Dev_mac"] = normalize_mac(dev.addr_str); + + // Detail + nlohmann::json detail; + detail["Type"] = 0x2106; // 设备数据 + + // Msg + nlohmann::json msg; + msg["DataType"] = 0x0D; //内部定值 + + // DataArray(对象数组):逐个填充,DZ_Value 严格按 set_values 顺序 + nlohmann::json dataArray = nlohmann::json::array(); + + //拼接逻辑 + + // 6) 入队发送 + queue_data_t connect_info; + connect_info.strTopic = Topic_Reply_Topic; + connect_info.strText = j.dump(); // 序列化为字符串 + + { + std::lock_guard lk(queue_data_list_mutex); + queue_data_list.push_back(std::move(connect_info)); + } + + // 调试打印 + std::cout << "[send_internal_value_reply] queued JSON:\n" << j.dump(4) << std::endl; + + // 7) 发送后更新终端状态(按你现有规则) + if (dev.isbusy > 0) { + dev.isbusy--; + } + if (dev.isbusy == 0) { + dev.guid.clear(); + dev.busytype = 0; + dev.internal_values.clear();//清理本次定值记录 + dev.dz_internal_info_list.clear();//清理本次定值描述记录 + } + + return true; +} \ No newline at end of file diff --git a/LFtid1056/cloudfront/code/interface.cpp b/LFtid1056/cloudfront/code/interface.cpp index 7605517..ba75ae3 100644 --- a/LFtid1056/cloudfront/code/interface.cpp +++ b/LFtid1056/cloudfront/code/interface.cpp @@ -743,9 +743,34 @@ int parse_device_cfg_web() ///////////////////////////////////////////////////////////////////////////////用例这里将局部的map拷贝到全局map,后续根据协议台账修改 // 先清空全局 container,再逐个拷贝 map 中的 terminal_dev + std::lock_guard lock(ledgermtx); + terminal_devlist.clear(); + for (const auto& kv : terminal_dev_map) { - terminal_devlist.push_back(kv.second); // kv.second 是对象,不用判断指针 + + terminal_dev dev = kv.second; // kv.second 是对象,不用判断指针 + + // ======= [新增] 对 terminal_dev 中 web 未返回/未设置字段做统一初始化,避免脏值 ======= + dev.guid.clear(); // [新增] 业务 guid 初始为空 + dev.busytype = 0; // [新增] 业务类型(状态机)默认 0 + dev.isbusy = 0; // [新增] 未进行业务 + dev.busytimecount = 0; // [新增] 业务计时清零 + dev.internal_values.clear(); // [新增] 内部定值清空,等后续业务真实填充 + // ------------------------------------------------------------------------------------ + + // ======= [新增] 对每个监测点做必要的内部结构初始化 ======= + for (auto &mon : dev.line) { + // 暂态事件容器显式清理(虽然默认构造已空,但这里确保无脏数据) + mon.qvvrevent.qvvrdata.clear(); // [新增] + mon.qvvrevent.qvvrfile.clear(); // [新增] + + // 定值列表清理,等待后续配置/采集填充 + mon.set_values.clear(); // [新增] + } + // ------------------------------------------------------------------------------------ + + terminal_devlist.push_back(dev); } // 判断监测点接线类型 diff --git a/LFtid1056/cloudfront/code/interface.h b/LFtid1056/cloudfront/code/interface.h index 1a11cb0..f91fdf3 100644 --- a/LFtid1056/cloudfront/code/interface.h +++ b/LFtid1056/cloudfront/code/interface.h @@ -91,7 +91,6 @@ public: std::string terminal_connect; //监测点接线方式 std::string timestamp; //更新时间 std::string status; //监测点状态 - double PT1; // 电压变比1 double PT2; // 电压变比2 double CT1; // 电流变比1 @@ -101,6 +100,7 @@ public: //定值list std::list set_values; + std::vector dz_info_list; //定值信息列表 }; //终端台账 @@ -113,7 +113,9 @@ public: int busytimecount; //业务进行计时 //内部定值list - std::list internal_values; + std::list internal_values; + std::vector &dz_internal_info_list; //内部定值信息列表 + std::vector control_words; std::string terminal_id; std::string terminal_name; diff --git a/LFtid1056/config/front.cfg b/LFtid1056/config/front.cfg new file mode 100644 index 0000000..0777f28 --- /dev/null +++ b/LFtid1056/config/front.cfg @@ -0,0 +1,77 @@ +[Queue] +BrokerList= + +RTDataTopic=Real_Time_Data_Topic +HisTopic=njcnAppAutoDataTopic +PSTTopic=njcnAppAutoDataTopic +PLTTopic=njcnAppAutoDataTopic +AlmTopic=AlmTopic +SngTopic=SngTopic + +QUEUE_TAG=stat +QUEUE_KEY=stat + +[Flag] +FrontInst= +FrontIP=192.168.1.138 + +[Ledger] +TerminalStatus="[0]" +MonitorStatus="[1,2]" +IcdFlag=0 +IedCount=300 + +[Http] +WebDevice=http://192.168.1.103:10220/icd/getLedgerInfo +WebEvent=http://192.168.1.103:10222/event/addCldEvent +WebFileupload=http://192.168.1.103:10207/file/upload +WebFiledownload= + + +[RocketMq] +producer=Group_producer +Ipport=192.168.1.24:9876 +AccessKey=rmqroot +SecretKey=001@#njcnmq + +Topic_Test=lnk_Topic +Tag_Test=Test_Tag +Key_Test=Test_Keys +Testflag=1 +Testnum=0 +Testtype=0 +TestPort=11000 +TestList=8ad28e2e36dfbd19906f9e2a4894b375 + +consumer=Group_consumer +ConsumerIpport=192.168.1.24:9876 +ConsumerTopicRT=ask_real_data_topic +ConsumerTagRT=Test_Tag +ConsumerKeyRT=Test_Keys +ConsumerAccessKey=rmqroot +ConsumerSecretKey=001@#njcnmq +ConsumerChannel= +ConsumerTopicUD=control_Topic +ConsumerTagUD=Test_Tag +ConsumerKeyUD=Test_Keys +ConsumerTopicRC=recall_Topic +ConsumerTagRC=Test_Tag +ConsumerKeyRC=Test_Keys +ConsumerTopicSET=process_Topic +ConsumerTagSET=Test_Tag +ConsumerKeySET=Test_Keys +ConsumerTopicLOG=ask_log_Topic +ConsumerTagLOG=Test_Tag +ConsumerKeyLOG=Test_Keys +LOGTopic=log_Topic +LOGTag=Test_Tag +LOGKey=Test_Keys +CONNECTTopic=Device_Run_Flag_Topic +CONNECTTag=Test_Tag +CONNECTKey=Test_Keys +Heart_Beat_Topic=Heart_Beat_Topic +Heart_Beat_Tag=Test_Tag +Heart_Beat_Key=Test_Key +Topic_Reply_Topic=Topic_Reply_Topic +Topic_Reply_Tag=Test_Tag +Topic_Reply_Key=Test_Key diff --git a/LFtid1056/dat/095a84f23ec7e283a9ffe8e182708f04.xml b/LFtid1056/dat/095a84f23ec7e283a9ffe8e182708f04.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/095a84f23ec7e283a9ffe8e182708f04.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/0b53c730f88d4b69a73f239475fc3876.xml b/LFtid1056/dat/0b53c730f88d4b69a73f239475fc3876.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/0b53c730f88d4b69a73f239475fc3876.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/0c6e1be36f19fb4d809836ed96f7796f.xml b/LFtid1056/dat/0c6e1be36f19fb4d809836ed96f7796f.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/0c6e1be36f19fb4d809836ed96f7796f.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/0fc2e86ded1ed4cbbda8830acd331314.xml b/LFtid1056/dat/0fc2e86ded1ed4cbbda8830acd331314.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/0fc2e86ded1ed4cbbda8830acd331314.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/112e261cb8e804600104ffebfd9cbefd.xml b/LFtid1056/dat/112e261cb8e804600104ffebfd9cbefd.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/112e261cb8e804600104ffebfd9cbefd.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/134e25eb59a22cc8394ff3bc1dde554c.xml b/LFtid1056/dat/134e25eb59a22cc8394ff3bc1dde554c.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/134e25eb59a22cc8394ff3bc1dde554c.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/148f24a2664fa054ede4f686fd984292.xml b/LFtid1056/dat/148f24a2664fa054ede4f686fd984292.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/148f24a2664fa054ede4f686fd984292.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/14e2078291f3a2f800480a6ca699fbcd.xml b/LFtid1056/dat/14e2078291f3a2f800480a6ca699fbcd.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/14e2078291f3a2f800480a6ca699fbcd.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/1654a86f7cb25a322573bbf3571b1765.xml b/LFtid1056/dat/1654a86f7cb25a322573bbf3571b1765.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/1654a86f7cb25a322573bbf3571b1765.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/180735bfe2c59f4d8e1d85bd2a1984ef.xml b/LFtid1056/dat/180735bfe2c59f4d8e1d85bd2a1984ef.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/180735bfe2c59f4d8e1d85bd2a1984ef.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/1f2c42ee0e8d689005b3f58967054e5c.xml b/LFtid1056/dat/1f2c42ee0e8d689005b3f58967054e5c.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/1f2c42ee0e8d689005b3f58967054e5c.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/1ff4038a4574dbc52ccf005bef20041b.xml b/LFtid1056/dat/1ff4038a4574dbc52ccf005bef20041b.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/1ff4038a4574dbc52ccf005bef20041b.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/2bd3d80c86e078d77f8482e48c3b3f99.xml b/LFtid1056/dat/2bd3d80c86e078d77f8482e48c3b3f99.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/2bd3d80c86e078d77f8482e48c3b3f99.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/35d62f0ad688a14583290a0ba0fc2b42.xml b/LFtid1056/dat/35d62f0ad688a14583290a0ba0fc2b42.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/35d62f0ad688a14583290a0ba0fc2b42.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/38c2ec0e305b07c04674ddbb4c972a2a.xml b/LFtid1056/dat/38c2ec0e305b07c04674ddbb4c972a2a.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/38c2ec0e305b07c04674ddbb4c972a2a.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/393c172bcd297f8cd68a41f202f78b2f.xml b/LFtid1056/dat/393c172bcd297f8cd68a41f202f78b2f.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/393c172bcd297f8cd68a41f202f78b2f.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/3ef998435d692c62f58a8dc26dec99cc.xml b/LFtid1056/dat/3ef998435d692c62f58a8dc26dec99cc.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/3ef998435d692c62f58a8dc26dec99cc.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/49dd3d79e7cdd27597ba2526858c372e.xml b/LFtid1056/dat/49dd3d79e7cdd27597ba2526858c372e.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/49dd3d79e7cdd27597ba2526858c372e.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/4b1e55fba360f30a5e91bcf6fae63d82.xml b/LFtid1056/dat/4b1e55fba360f30a5e91bcf6fae63d82.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/4b1e55fba360f30a5e91bcf6fae63d82.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/4fd8f3fb39c8333e525aad2cfed8d4ba.xml b/LFtid1056/dat/4fd8f3fb39c8333e525aad2cfed8d4ba.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/4fd8f3fb39c8333e525aad2cfed8d4ba.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/52f48442032e85d8257b9e6e409ae727.xml b/LFtid1056/dat/52f48442032e85d8257b9e6e409ae727.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/52f48442032e85d8257b9e6e409ae727.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/5c26d1a34a996a64645334cf36fc65cd.xml b/LFtid1056/dat/5c26d1a34a996a64645334cf36fc65cd.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/5c26d1a34a996a64645334cf36fc65cd.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/5d623f8d16d2f66473c4ae04661fc995.xml b/LFtid1056/dat/5d623f8d16d2f66473c4ae04661fc995.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/5d623f8d16d2f66473c4ae04661fc995.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/5ff7ad05e7bcd2cc2f540b5e06849776.xml b/LFtid1056/dat/5ff7ad05e7bcd2cc2f540b5e06849776.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/5ff7ad05e7bcd2cc2f540b5e06849776.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/62f1441d04b665b1b598974b411d45eb.xml b/LFtid1056/dat/62f1441d04b665b1b598974b411d45eb.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/62f1441d04b665b1b598974b411d45eb.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/63a5b90766f86a484c84f22c9ce29e44.xml b/LFtid1056/dat/63a5b90766f86a484c84f22c9ce29e44.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/63a5b90766f86a484c84f22c9ce29e44.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/63cb5f7437e1922be7f0b606b12679ce.xml b/LFtid1056/dat/63cb5f7437e1922be7f0b606b12679ce.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/63cb5f7437e1922be7f0b606b12679ce.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/643f3997e9c31173d8c93cc38c1d5129.xml b/LFtid1056/dat/643f3997e9c31173d8c93cc38c1d5129.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/643f3997e9c31173d8c93cc38c1d5129.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/64992cafdb7bf7e94b0ae3556c6dd2b3.xml b/LFtid1056/dat/64992cafdb7bf7e94b0ae3556c6dd2b3.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/64992cafdb7bf7e94b0ae3556c6dd2b3.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/669466052823ae6ce09cd6bc575176be.xml b/LFtid1056/dat/669466052823ae6ce09cd6bc575176be.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/669466052823ae6ce09cd6bc575176be.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/66aac8de119b48126ae0fa3fd28b8499.xml b/LFtid1056/dat/66aac8de119b48126ae0fa3fd28b8499.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/66aac8de119b48126ae0fa3fd28b8499.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/68d618ae6a52e34483c90bb7642ef353.xml b/LFtid1056/dat/68d618ae6a52e34483c90bb7642ef353.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/68d618ae6a52e34483c90bb7642ef353.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/69d6bebce232d3949d9f1d75c66d90c4.xml b/LFtid1056/dat/69d6bebce232d3949d9f1d75c66d90c4.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/69d6bebce232d3949d9f1d75c66d90c4.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/6a9b0cae90ca3ea6b750f1117e93816b.xml b/LFtid1056/dat/6a9b0cae90ca3ea6b750f1117e93816b.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/6a9b0cae90ca3ea6b750f1117e93816b.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/6cd6498c079396e9d42d6764bdad21ab.xml b/LFtid1056/dat/6cd6498c079396e9d42d6764bdad21ab.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/6cd6498c079396e9d42d6764bdad21ab.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/74a0fe58192a690f2037dab8bcff5e25.xml b/LFtid1056/dat/74a0fe58192a690f2037dab8bcff5e25.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/74a0fe58192a690f2037dab8bcff5e25.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/7677814fc1e2bc194ca2d82a62f3dd1d.xml b/LFtid1056/dat/7677814fc1e2bc194ca2d82a62f3dd1d.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/7677814fc1e2bc194ca2d82a62f3dd1d.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/7a0fb4cc2013497797dc46d50526d1b1.xml b/LFtid1056/dat/7a0fb4cc2013497797dc46d50526d1b1.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/7a0fb4cc2013497797dc46d50526d1b1.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/7be60bf2c9265b2f91ff11a21c62edbb.xml b/LFtid1056/dat/7be60bf2c9265b2f91ff11a21c62edbb.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/7be60bf2c9265b2f91ff11a21c62edbb.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/824cf5433d2d8c82eaf816a28f9a232d.xml b/LFtid1056/dat/824cf5433d2d8c82eaf816a28f9a232d.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/824cf5433d2d8c82eaf816a28f9a232d.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/82c0ffe9b6a6e54ff6768aa4b151759d.xml b/LFtid1056/dat/82c0ffe9b6a6e54ff6768aa4b151759d.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/82c0ffe9b6a6e54ff6768aa4b151759d.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/895f951309513397852cafbe846c9298.xml b/LFtid1056/dat/895f951309513397852cafbe846c9298.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/895f951309513397852cafbe846c9298.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/8c84b8c0ae99b17afa0c79c0e2e848e3.xml b/LFtid1056/dat/8c84b8c0ae99b17afa0c79c0e2e848e3.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/8c84b8c0ae99b17afa0c79c0e2e848e3.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/8dd12600976ac6c95e18c5980400eee3.xml b/LFtid1056/dat/8dd12600976ac6c95e18c5980400eee3.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/8dd12600976ac6c95e18c5980400eee3.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/8e051a07f6fc2ff03487bc87cb3e4d91.xml b/LFtid1056/dat/8e051a07f6fc2ff03487bc87cb3e4d91.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/8e051a07f6fc2ff03487bc87cb3e4d91.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/942b70650cb8d099401c01446d3c08de.xml b/LFtid1056/dat/942b70650cb8d099401c01446d3c08de.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/942b70650cb8d099401c01446d3c08de.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/950c2c11da36897552766fd7a02af6d5.xml b/LFtid1056/dat/950c2c11da36897552766fd7a02af6d5.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/950c2c11da36897552766fd7a02af6d5.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/9667fe63920c038605911d88b0f9e9a2.xml b/LFtid1056/dat/9667fe63920c038605911d88b0f9e9a2.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/9667fe63920c038605911d88b0f9e9a2.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/a25d58d7780a51de20223c7ffffa3219.xml b/LFtid1056/dat/a25d58d7780a51de20223c7ffffa3219.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/a25d58d7780a51de20223c7ffffa3219.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/ab5204b5e2222712f70233741ff7bfb0.xml b/LFtid1056/dat/ab5204b5e2222712f70233741ff7bfb0.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/ab5204b5e2222712f70233741ff7bfb0.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/b3f054b07c0cd6eae366c3f7c0178dc8.xml b/LFtid1056/dat/b3f054b07c0cd6eae366c3f7c0178dc8.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/b3f054b07c0cd6eae366c3f7c0178dc8.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/b59349bf7d426611102acd7ef65f8861.xml b/LFtid1056/dat/b59349bf7d426611102acd7ef65f8861.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/b59349bf7d426611102acd7ef65f8861.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/ba674fe68e95b86478683610ad7790df.xml b/LFtid1056/dat/ba674fe68e95b86478683610ad7790df.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/ba674fe68e95b86478683610ad7790df.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/c1c0d4bbf50a11e76c378ce5ac116f5f.xml b/LFtid1056/dat/c1c0d4bbf50a11e76c378ce5ac116f5f.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/c1c0d4bbf50a11e76c378ce5ac116f5f.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/c6ec71e6dcd9e9c2aae7eb5eddd59099.xml b/LFtid1056/dat/c6ec71e6dcd9e9c2aae7eb5eddd59099.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/c6ec71e6dcd9e9c2aae7eb5eddd59099.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/c8a4b43c08da8a44b3d08ee730dc5d56.xml b/LFtid1056/dat/c8a4b43c08da8a44b3d08ee730dc5d56.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/c8a4b43c08da8a44b3d08ee730dc5d56.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/c9a030d97e42865d4fc24b4424e87ad0.xml b/LFtid1056/dat/c9a030d97e42865d4fc24b4424e87ad0.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/c9a030d97e42865d4fc24b4424e87ad0.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/ca16b843d971cb760168c797e24e81f9.xml b/LFtid1056/dat/ca16b843d971cb760168c797e24e81f9.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/ca16b843d971cb760168c797e24e81f9.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/ca42aa3651b65244924374397fbffa80.xml b/LFtid1056/dat/ca42aa3651b65244924374397fbffa80.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/ca42aa3651b65244924374397fbffa80.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/caf9a220fe671f9e82d282c88edad459.xml b/LFtid1056/dat/caf9a220fe671f9e82d282c88edad459.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/caf9a220fe671f9e82d282c88edad459.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/cb5275b81d36cf6fc7069fafa121d734.xml b/LFtid1056/dat/cb5275b81d36cf6fc7069fafa121d734.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/cb5275b81d36cf6fc7069fafa121d734.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/d2526e08196f7dfdc4ca81c67264c0c1.xml b/LFtid1056/dat/d2526e08196f7dfdc4ca81c67264c0c1.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/d2526e08196f7dfdc4ca81c67264c0c1.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/dab107086ada2504be4f40a158858838.xml b/LFtid1056/dat/dab107086ada2504be4f40a158858838.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/dab107086ada2504be4f40a158858838.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/dab72e86a7b30990285976169c0dfb3f.xml b/LFtid1056/dat/dab72e86a7b30990285976169c0dfb3f.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/dab72e86a7b30990285976169c0dfb3f.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/dc0a7739bdeb18d6c82b493bcd49d5d3.xml b/LFtid1056/dat/dc0a7739bdeb18d6c82b493bcd49d5d3.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/dc0a7739bdeb18d6c82b493bcd49d5d3.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/dc9bef9ba55574c5e7d1d3c78afa2c45.xml b/LFtid1056/dat/dc9bef9ba55574c5e7d1d3c78afa2c45.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/dc9bef9ba55574c5e7d1d3c78afa2c45.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/deba4e29af5efbf756557661ec254ec3.xml b/LFtid1056/dat/deba4e29af5efbf756557661ec254ec3.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/deba4e29af5efbf756557661ec254ec3.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/e6585f5e6837be74ba04350f133340d9.xml b/LFtid1056/dat/e6585f5e6837be74ba04350f133340d9.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/e6585f5e6837be74ba04350f133340d9.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/eeaa3bdc02c4e50b48eb92716d5c14db.xml b/LFtid1056/dat/eeaa3bdc02c4e50b48eb92716d5c14db.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/eeaa3bdc02c4e50b48eb92716d5c14db.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/f0386b207f416a1bf7948d478087a0fb.xml b/LFtid1056/dat/f0386b207f416a1bf7948d478087a0fb.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/f0386b207f416a1bf7948d478087a0fb.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/fa1050bdce7efd63508e881536157058.xml b/LFtid1056/dat/fa1050bdce7efd63508e881536157058.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/fa1050bdce7efd63508e881536157058.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/fc205e2c998c64fc5afb8ec62b54129a.xml b/LFtid1056/dat/fc205e2c998c64fc5afb8ec62b54129a.xml new file mode 100644 index 0000000..0d01cc6 --- /dev/null +++ b/LFtid1056/dat/fc205e2c998c64fc5afb8ec62b54129a.xml @@ -0,0 +1 @@ +{"code":"A00555","message":"下载文件,文件服务器下载文件流为空","data":null} \ No newline at end of file diff --git a/LFtid1056/dat/ledger/20250807185343_ledger.txt b/LFtid1056/dat/ledger/20250807185343_ledger.txt new file mode 100644 index 0000000..16d5ae3 --- /dev/null +++ b/LFtid1056/dat/ledger/20250807185343_ledger.txt @@ -0,0 +1 @@ +{"code":"A0000","message":"根据前置ip获取对应的终端台账信息,成功","data":[{"id":"175427bfa6ed1de818464e43dd09e04f","ip":"192.168.1.242","devType":"PQS882_B4_MMS(4U4I)","org_name":null,"port":"102","stationName":null,"name":"南昌终端_242","subName":"南昌变电站","updateTime":"2025-08-07 14:58:03","manufacturer":"南京灿能","status":"0","series":"","devKey":"","processNo":2,"maxProcessNum":3,"monitorData":[{"id":"4067998c0327a624b83610879c7de4c6","name":"监测点3","lineNo":"3","voltageLevel":"10kV","ptType":"0","status":"0"},{"id":"74203b186428c1684aa450ad05257b06","name":"监测点1","lineNo":"1","voltageLevel":"10kV","ptType":"0","status":"0"},{"id":"777737a13b16cf860d65d9f71e54f858","name":"监测点4","lineNo":"4","voltageLevel":"10kV","ptType":"0","status":"0"},{"id":"e07c34b721ac9ccd62e03d796a2f7fa8","name":"监测点2","lineNo":"2","voltageLevel":"10kV","ptType":"0","status":"0"}]},{"id":"438a3bc6cb9c04c91d572973b5760d25","ip":"192.168.1.234","devType":"PQS_882B4","org_name":null,"port":"102","stationName":null,"name":"宜春终端_234","subName":"宜春变电站","updateTime":"2025-08-07 14:58:02","manufacturer":"浪拜迪","status":"0","series":"","devKey":"","processNo":1,"maxProcessNum":3,"monitorData":[{"id":"5f99b9ba4e563439ec8490a0c598da8d","name":"监测点1","lineNo":"1","voltageLevel":"110kV","ptType":"0","status":"0"}]},{"id":"8cb7a1abcd70b26716358267ea517a22","ip":"192.168.1.238","devType":"NPQS_682","org_name":null,"port":"102","stationName":null,"name":"赣州终端_238","subName":"赣州变电站","updateTime":"2025-08-07 14:58:03","manufacturer":"浪拜迪","status":"0","series":"","devKey":"","processNo":1,"maxProcessNum":3,"monitorData":[{"id":"1b9cece8b66b100a52c4a31f469e8e0a","name":"监测点1","lineNo":"1","voltageLevel":"220kV","ptType":"0","status":"0"},{"id":"6072c5deecdae5d1b4dd5c475517444b","name":"监测点2","lineNo":"2","voltageLevel":"220kV","ptType":"0","status":"0"}]},{"id":"ad60520f9294864f41ca48b5acee62d6","ip":"192.168.1.229","devType":"PQS882_B4_MMS(4U4I)","org_name":null,"port":"102","stationName":null,"name":"南昌终端_229","subName":"南昌变电站","updateTime":"2025-08-07 11:43:07","manufacturer":"南京灿能","status":"0","series":"","devKey":"","processNo":1,"maxProcessNum":3,"monitorData":[{"id":"683e77d95099a315fb777b16113e34ae","name":"监测点3","lineNo":"3","voltageLevel":"10kV","ptType":"0","status":"0"},{"id":"824ab9440f0c9c279c2fc2080e19d07a","name":"监测点2","lineNo":"2","voltageLevel":"10kV","ptType":"0","status":"0"},{"id":"d446071b8bd8dd493687bae4746c02e5","name":"监测点1","lineNo":"1","voltageLevel":"10kV","ptType":"1","status":"0"},{"id":"fde41900cbaef358c9a9e23960ee2593","name":"监测点4","lineNo":"4","voltageLevel":"10kV","ptType":"0","status":"0"}]},{"id":"e8d14ec6395262c4984f1f8152a9135b","ip":"192.168.1.230","devType":"NPQS_681","org_name":null,"port":"102","stationName":null,"name":"上饶终端","subName":"上饶变电站","updateTime":"2025-08-07 11:43:07","manufacturer":"北京四方","status":"0","series":"5nfaNZS5ukTZ3L4rQiMinA==","devKey":"g/4565/nRBWbqxo7gZ8JZdg4ozz2DutoY/MaCC1PMIw=","processNo":1,"maxProcessNum":3,"monitorData":[{"id":"401a696fe9918bb4cce7d9393d0d5df7","name":"上饶监测点1","lineNo":"1","voltageLevel":"750kV","ptType":"0","status":"0"}]},{"id":"f3a02c4a89e75fe0cc377088fd1cb2f1","ip":"192.168.1.240","devType":"NPQS_882B4","org_name":null,"port":"102","stationName":null,"name":"九江终端_240","subName":"九江变电站","updateTime":"2025-08-07 14:58:03","manufacturer":"浪拜迪","status":"0","series":"","devKey":"","processNo":1,"maxProcessNum":3,"monitorData":[{"id":"cfc481a71953f85a23fd448c3cffc884","name":"监测点1","lineNo":"1","voltageLevel":"35kV","ptType":"0","status":"0"}]}]} \ No newline at end of file diff --git a/LFtid1056/dealMsg.cpp b/LFtid1056/dealMsg.cpp index cfdcb3a..fb2cee9 100644 --- a/LFtid1056/dealMsg.cpp +++ b/LFtid1056/dealMsg.cpp @@ -991,12 +991,20 @@ void process_received_message(string mac, string id,const char* data, size_t len else if (udata[8] == static_cast(MsgResponseType::Response_NewNACK)) { std::cout << "set error" << mac << std::endl; // װ÷Ӧ𣬶ֵʧ + + //Ӧlnk20250828 + send_reply_to_cloud(static_cast(ResponseCode::BAD_REQUEST),id,static_cast(DeviceState::SET_FIXEDVALUE)); + // װöֵʧܣΪ״̬һ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } else { // װô쳣 // װöֵʧܣΪ״̬һ + + //Ӧlnk20250828 + send_reply_to_cloud(static_cast(ResponseCode::INTERNAL_ERROR),id,static_cast(DeviceState::SET_FIXEDVALUE)); + ClientManager::instance().change_device_state(id, DeviceState::IDLE); } break; diff --git a/LFtid1056/etc/Default_Config.xml b/LFtid1056/etc/Default_Config.xml new file mode 100644 index 0000000..308b7e0 --- /dev/null +++ b/LFtid1056/etc/Default_Config.xml @@ -0,0 +1,585 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LFtid1056/etc/runtime.cf b/LFtid1056/etc/runtime.cf new file mode 100644 index 0000000..ac7cf1f --- /dev/null +++ b/LFtid1056/etc/runtime.cf @@ -0,0 +1,6 @@ +# 文件名:runtime.cf +# 执行程序路径 ^ 可执行程序名 启动参数 ^ 重启特有参数 ^ 首次启动特有参数 ^ 程序首次启动前的延时秒数 ^ 重启是否忽略 ^ 首次启动是否忽略 +/home/pq/zwproject/LFtid1056/bin/ ^ cloud-front-test -s 3_3^ ^ ^ 1 ^ ^ +/home/pq/zwproject/LFtid1056/bin/ ^ cloud-front-test -s 2_3^ ^ ^ 1 ^ ^ +/home/pq/zwproject/LFtid1056/bin/ ^ cloud-front-test -s 1_3^ ^ ^ 1 ^ ^ +/home/pq/zwproject/LFtid1056/bin/ ^ fe_watchdog -m 8192 ^ ^ ^ 1 ^ IGNORE_RESTART ^ diff --git a/LFtid1056/main_thread.cpp b/LFtid1056/main_thread.cpp index 86f6b9f..dd11d02 100644 --- a/LFtid1056/main_thread.cpp +++ b/LFtid1056/main_thread.cpp @@ -153,7 +153,7 @@ void* client_manager_thread(void* arg) { printf("Started client connections\n"); - // + /*// std::vector points1 = { {"P001", "Main Voltage", "D001",1 ,1, 1, 1, 1,"0.38k",0}, {"P002", "Backup Voltage", "D001",2 ,1, 1, 1, 1,"0.38k",0} @@ -165,16 +165,16 @@ void* client_manager_thread(void* arg) { "D001", "Primary Device", "Model-X", "00-B7-8D-01-79-06", 1, points1,true } - }; + };*/ // 100װ //std::vector test_devices = generate_test_devices(100); //lnk̨˶ȡ豸 - //std::vector devices = GenerateDeviceInfoFromLedger(terminal_devlist);//lnk + std::vector devices = GenerateDeviceInfoFromLedger(terminal_devlist);//lnk //̨˴ӡ - //PrintDevices(devices); + PrintDevices(devices); // ͻ start_client_connect(devices); @@ -302,7 +302,7 @@ int main(int argc ,char** argv) {// std::cerr << "process param error,exit" << std::endl; return 1; } - //init_daemon(); + init_daemon(); srand(time(NULL)); // ʼ // ʼ߳ @@ -319,10 +319,10 @@ int main(int argc ,char** argv) {// cleanup_args(args); } - /*while(!INITFLAG){ + while(!INITFLAG){ std::this_thread::sleep_for(std::chrono::seconds(3)); std::cout << "waiting cloudfront initialize ..." << std::endl; - }*/ + } // ʼ߳ for (int i = 1; i < THREAD_CONNECTIONS; i++) { @@ -387,7 +387,7 @@ int main(int argc ,char** argv) {// } } - // + /*// std::vector points2 = { {"P101", "Generator Output", "D002",1 ,1, 1, 1, 1,"0.38k",0} }; @@ -398,7 +398,7 @@ int main(int argc ,char** argv) {// "D002", "Backup Device", "Model-Y", "00-B7-8D-A8-00-D6", 1, points2,true } - }; + };*/ // socket״̬ static int queue_monitor = 0; @@ -407,9 +407,9 @@ int main(int argc ,char** argv) {// printf("Message queue size: %zu\n", message_queue.size()); queue_monitor = 0; - for (const auto& device : devices) { + /*for (const auto& device : devices) { //ClientManager::instance().add_device(device); - } + }*/ /*std::vector test_devices = generate_test_devices(count); count++; From 9dc138a617e4e7b8a3df61fb18d1d11cbe1fcc6b Mon Sep 17 00:00:00 2001 From: lnk Date: Fri, 5 Sep 2025 16:28:26 +0800 Subject: [PATCH 2/2] finish dz function --- LFtid1056/cloudfront/code/cfg_parser.cpp | 210 +++++++++++++++++++---- LFtid1056/cloudfront/code/interface.cpp | 2 + LFtid1056/cloudfront/code/interface.h | 38 +++- LFtid1056/cloudfront/code/rocketmq.cpp | 30 +--- LFtid1056/cloudfront/code/worker.cpp | 210 ++++++++++++++++++++--- LFtid1056/dealMsg.cpp | 39 ++++- 6 files changed, 431 insertions(+), 98 deletions(-) diff --git a/LFtid1056/cloudfront/code/cfg_parser.cpp b/LFtid1056/cloudfront/code/cfg_parser.cpp index cb068cc..88fa405 100644 --- a/LFtid1056/cloudfront/code/cfg_parser.cpp +++ b/LFtid1056/cloudfront/code/cfg_parser.cpp @@ -2737,34 +2737,34 @@ bool compare_qvvr_and_file(const std::string& cfg_path, const std::vector &fabsf) { +bool save_internal_value(const std::string &dev_id, const std::vector &fabsf) { // 找到对应 terminal_dev std::lock_guard lock(ledgermtx); @@ -3474,6 +3474,12 @@ bool send_set_value_reply(const std::string &dev_id, unsigned char mp_index, con return false; } + //将dz_info存入监测点 + pMon->dz_info_list.clear(); + for (const auto &dz : dz_info) { + pMon->dz_info_list.push_back(dz); + } + // 4) 取该监测点的 set_values,严格按顺序用于 DZ_Value std::vector ordered_vals; ordered_vals.reserve(pMon->set_values.size()); @@ -3565,47 +3571,175 @@ bool send_set_value_reply(const std::string &dev_id, unsigned char mp_index, con return true; } -bool send_internal_value_reply(const std::string &dev_id, const std::vector &control_words) { +/////////////////////////////////////////////////////////////////////////////////////////////////////////回复内部定值响应读取 + + +bool send_internal_value_reply(const std::string &dev_id, const std::vector &control_words) +{ std::lock_guard lock(ledgermtx); // 1) 找终端 auto it = std::find_if(terminal_devlist.begin(), terminal_devlist.end(), [&](const terminal_dev &d) { return d.terminal_id == dev_id; }); if (it == terminal_devlist.end()) { - std::cerr << "[send_set_value_reply] device not found: " << dev_id << std::endl; + std::cerr << "[send_internal_value_reply] device not found: " << dev_id << std::endl; return false; } terminal_dev &dev = *it; - // 2) 校验状态:发送“定值读取结果”回复,应处于 READING_INTERFIXEDVALUE;isbusy == 1 - if (dev.isbusy != 1 || dev.busytype != static_cast(DeviceState::READING_INTERFIXEDVALUE)) { //定值读取 - std::cerr << "[send_set_value_reply] device not in READING_INTERFIXEDVALUE state." << std::endl; + // 2) 校验状态:发送“内部定值读取结果”回复,应处于 READING_INTERFIXEDVALUE;isbusy == 1 + if (dev.isbusy != 1 || dev.busytype != static_cast(DeviceState::READING_INTERFIXEDVALUE)) { + std::cerr << "[send_internal_value_reply] device not in READING_INTERFIXEDVALUE state." << std::endl; return false; } - // 5) 生成 JSON(结构严格贴合你给的样例) - nlohmann::json j; + //将control_words存入dev + dev.control_words.clear(); + for (const auto &cw : control_words) { + dev.control_words.push_back(cw); + } - // 顶层 + // -------------------- [新增] 建立 internal_values 与 dz_internal_info_list 的一一对应 -------------------- + // 说明:按索引次序一一对应(第 i 个 NameFixValue 对应 internal_values 的第 i 个) + // 若数量不同,按 min 对齐,忽略多出来的一边并告警。 + std::vector internal_vals; // [新增] + internal_vals.reserve(dev.internal_values.size()); // [新增] + for (float v : dev.internal_values) internal_vals.push_back(v); // [新增] + + const size_t n_dz = dev.dz_internal_info_list.size(); // [新增] + const size_t n_val = internal_vals.size(); // [新增] + const size_t n_use = std::min(n_dz, n_val); // [新增] + if (n_dz != n_val) { // [新增] + std::cerr << "[send_internal_value_reply] WARN: dz_internal_info_list size(" + << n_dz << ") != internal_values size(" << n_val + << "), will use min(" << n_use << ")." << std::endl; + } + // ------------------------------------------------------------------------------------------------------ + + // 3) 组包顶层 + nlohmann::json j; j["guid"] = dev.guid; - j["FrontIP"] = FRONT_IP; // 你的前置机 IP(项目已有常量/变量) - j["Node"] = g_front_seg_index; // 节点号(项目已有变量) + j["FrontIP"] = FRONT_IP; + j["Node"] = g_front_seg_index; j["Dev_mac"] = normalize_mac(dev.addr_str); - // Detail nlohmann::json detail; detail["Type"] = 0x2106; // 设备数据 - - // Msg nlohmann::json msg; - msg["DataType"] = 0x0D; //内部定值 + msg["DataType"] = 0x0D; // 内部定值 - // DataArray(对象数组):逐个填充,DZ_Value 严格按 set_values 顺序 - nlohmann::json dataArray = nlohmann::json::array(); + // 4) === 将 C# 的拼接逻辑移植为 DataArray === + // C# 变量对应关系: + // DevInfo.nDevIndex -> 这里用 1 + // DevInfo.strGuId -> 这里用 装置id + // DevInfo.controlwordlist -> 这里用参数 control_words(DZ_kzz_bit 含 kzz_bit/bit_enable) + // + // NameFixValue 列表:使用 dev.dz_internal_info_list + // + // 关键逻辑: + // - 遍历每个 NameFixValue,k 从 1 递增,nStep 每个定值递增 1 + // - 若 DataType == 1:将 Max/Min/Default 都 /100,并 property 输出一个空对象 [{}](保持与 C# 一致) + // - 否则:为该定值构建 property 位数组,范围 [nStep*16, (nStep+1)*16), + // 名称为空则提前结束本定值的 property;flag = (DefaultValue >> j) & 0x01 + // - //拼接逻辑 + nlohmann::json dataArray = nlohmann::json::array(); // [新增] - // 6) 入队发送 + int nStep = 0; // [新增] 每个 NameFixValue 递增 + int kSort = 1; // [新增] 排序号,从 1 开始 + + // 保护:dz_internal_info_list 是引用成员,确保不会因并发被改动(当前已在 ledgermtx 下) + //for (const auto& nf : dev.dz_internal_info_list) { // [新增] + for (size_t idxNF = 0; idxNF < n_use; ++idxNF) { // [修改] 使用 idxNF 控制索引 + const auto& nf = dev.dz_internal_info_list[idxNF]; + // 取字段 + const uint16_t dataType = nf.DataType; + const uint16_t minRaw = nf.MinValue; + const uint16_t maxRaw = nf.MaxValue; + const uint16_t defaultRaw = nf.DefaultValue; + const std::string unit = trim_cstr(nf.sDimension, sizeof(nf.sDimension)); + const std::string name = trim_cstr(nf.sFixValueName, sizeof(nf.sFixValueName)); + + // 取对应内部值 + const float internal_v_raw = internal_vals[idxNF]; // [新增] + const double internal_v_out = static_cast(internal_v_raw); // [新增] 直接转 double 输出,不缩放 + + // 构造一条记录 + nlohmann::json one; + one["cpu_no"] = 1; // [新增] C#: DevInfo.nDevIndex 填设备号,固定为1 + one["dev_type"] = dev_id; // [新增] C#: DevInfo.strGuId 填装置id + one["type"] = 90; // [新增] 固定 "90" + one["unit"] = unit; // [新增] + one["describe"] = name; // [新增] + one["sort"] = kSort; // [新增] + one["Internal_Value"] = internal_v_out; // [新增] 精确对应 internal_values 的值(含必要缩放) + + // 数值:DataType == 1 时缩放 /100 + if (dataType == 1) { // [新增] 缩放分支 + int ChangeMaxValue = static_cast(maxRaw) / 100; + int ChangeMinValue = static_cast(minRaw) / 100; + int ChangeDefaultValue = static_cast(defaultRaw) / 100; + + one["maxvalue"] = ChangeMaxValue; + one["minvalue"] = ChangeMinValue; + one["defaultvalue"] = ChangeDefaultValue; + one["value"] = ChangeDefaultValue; + + // C# 在该分支 property 写成 [{ }](一个空对象的数组) + nlohmann::json prop = nlohmann::json::array(); + prop.push_back(nlohmann::json::object()); // [{}] + one["property"] = std::move(prop); + } else { // [新增] 未缩放分支 + property 位描述 + one["maxvalue"] = static_cast(maxRaw); + one["minvalue"] = static_cast(minRaw); + one["defaultvalue"] = static_cast(defaultRaw); + one["value"] = static_cast(defaultRaw); + + // 构建 property:16 位窗口,从 nStep*16 到 (nStep+1)*16 - 1 + nlohmann::json prop = nlohmann::json::array(); + bool hasAny = false; + + const int begin = nStep * 16; + const int end = (nStep + 1) * 16; // 不含 end + + for (int idx = begin, jbit = 0; idx < end; ++idx, ++jbit) { + if (idx < 0 || static_cast(idx) >= control_words.size()) break; + + // 名称空则提前退出(仿 C#:temp=="" break) + const std::string cw_name = trim_cstr(control_words[idx].kzz_bit, sizeof(control_words[idx].kzz_bit)); + if (cw_name.empty()) { + // 注意:C# 如果 j==0 则设置了 flag2=1,仅用于逗号处理,这里不需要 + break; + } + + int flag = (defaultRaw >> jbit) & 0x01; // 取该位默认值 + nlohmann::json bitItem; + bitItem["type_num"] = jbit; + bitItem["bit0"] = ""; // 保持与 C# 一致 + bitItem["bit1"] = ""; + bitItem["describe"] = cw_name; + bitItem["flag"] = (flag ? "1" : "0"); // C# 用字符串 + prop.push_back(std::move(bitItem)); + hasAny = true; + } + + if (!hasAny) { + // 与 C# 对齐:如果一个都没有,就给 [{}] 以避免 "property":[] 的结构差异 + prop.push_back(nlohmann::json::object()); + } + one["property"] = std::move(prop); + } + + dataArray.push_back(std::move(one)); // [新增] + ++nStep; // [新增] 进入下一个 16 位窗口 + ++kSort; // [新增] + } + + msg["DataArray"] = std::move(dataArray); // [新增] + detail["Msg"] = std::move(msg); + j["Detail"] = std::move(detail); + + // 5) 入队发送(保持你的队列逻辑) queue_data_t connect_info; connect_info.strTopic = Topic_Reply_Topic; connect_info.strText = j.dump(); // 序列化为字符串 @@ -3618,15 +3752,15 @@ bool send_internal_value_reply(const std::string &dev_id, const std::vector 0) { dev.isbusy--; } if (dev.isbusy == 0) { dev.guid.clear(); dev.busytype = 0; - dev.internal_values.clear();//清理本次定值记录 - dev.dz_internal_info_list.clear();//清理本次定值描述记录 + dev.internal_values.clear(); // 清理本次定值记录 + dev.dz_internal_info_list.clear(); // 清理本次定值描述记录(注意:如果这是引用成员,确保其实际容器存在) } return true; diff --git a/LFtid1056/cloudfront/code/interface.cpp b/LFtid1056/cloudfront/code/interface.cpp index ba75ae3..cd2d288 100644 --- a/LFtid1056/cloudfront/code/interface.cpp +++ b/LFtid1056/cloudfront/code/interface.cpp @@ -757,6 +757,7 @@ int parse_device_cfg_web() dev.isbusy = 0; // [新增] 未进行业务 dev.busytimecount = 0; // [新增] 业务计时清零 dev.internal_values.clear(); // [新增] 内部定值清空,等后续业务真实填充 + dev.dz_internal_info_list.clear(); // [新增] 内部定值信息清空,等后续业务真实填充 // ------------------------------------------------------------------------------------ // ======= [新增] 对每个监测点做必要的内部结构初始化 ======= @@ -767,6 +768,7 @@ int parse_device_cfg_web() // 定值列表清理,等待后续配置/采集填充 mon.set_values.clear(); // [新增] + mon.dz_info_list.clear(); // [新增] } // ------------------------------------------------------------------------------------ diff --git a/LFtid1056/cloudfront/code/interface.h b/LFtid1056/cloudfront/code/interface.h index f91fdf3..7cb6b14 100644 --- a/LFtid1056/cloudfront/code/interface.h +++ b/LFtid1056/cloudfront/code/interface.h @@ -96,11 +96,13 @@ public: double CT1; // 电流变比1 double CT2; // 电流变比2 - qvvr_event qvvrevent; //暂态事件 + //暂态事件 + qvvr_event qvvrevent; //定值list std::list set_values; std::vector dz_info_list; //定值信息列表 + }; //终端台账 @@ -113,8 +115,8 @@ public: int busytimecount; //业务进行计时 //内部定值list - std::list internal_values; - std::vector &dz_internal_info_list; //内部定值信息列表 + std::list internal_values; + std::vector dz_internal_info_list; //内部定值信息列表 std::vector control_words; std::string terminal_id; @@ -515,7 +517,35 @@ void send_reply_to_cloud(int reply_code, const std::string& dev_id, int type); //查guid std::string find_guid_index_from_dev_id(const std::string& dev_id); -// +//内部定值响应 +bool send_internal_value_reply(const std::string &dev_id, const std::vector &control_words); + +//定值响应 +bool send_set_value_reply(const std::string &dev_id, unsigned char mp_index, const std::vector &dz_info); + +//保存内部定值描述 +bool save_internal_info(const std::string &dev_id, const std::vector &fixValueList); + +//保存内部定值数值 +bool save_internal_value(const std::string &dev_id, const std::vector &fabsf); + +//保存定值数值 +bool save_set_value(const std::string &dev_id, unsigned char mp_index, const std::vector &fabsf); + +//发送文件 +void SendFileWeb(const std::string& strUrl, const std::string& localpath, const std::string& cloudpath, std::string& wavepath); + +//小工具 +inline std::string trim_cstr(const char* s, size_t n) { + if (!s) return {}; + size_t end = 0; + while (end < n && s[end] != '\0') ++end; + std::string out(s, s + end); + while (!out.empty() && (out.back() == ' ' || out.back() == '\t' || out.back() == '\r' || out.back() == '\n')) + out.pop_back(); + return out; +} + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// extern int g_front_seg_index; extern std::string FRONT_IP; diff --git a/LFtid1056/cloudfront/code/rocketmq.cpp b/LFtid1056/cloudfront/code/rocketmq.cpp index caaf4e9..c93e361 100644 --- a/LFtid1056/cloudfront/code/rocketmq.cpp +++ b/LFtid1056/cloudfront/code/rocketmq.cpp @@ -429,7 +429,7 @@ std::string parseJsonMessageRC(const std::string& inputJson) { } } -bool parseJsonMessageRT(const std::string& body,std::string& devSeries,std::string& line,bool& realData,bool& soeData,int& limit){ +bool parseJsonMessageRT(const std::string& body,std::string& devSeries,ushort& line,bool& realData,bool& soeData,int& limit){ json root; try { root = json::parse(body); @@ -472,7 +472,7 @@ bool parseJsonMessageRT(const std::string& body,std::string& devSeries,std::stri try { devSeries = messageBody["devSeries"].get(); - line = messageBody["line"].get(); + line = messageBody["line"].get(); realData = messageBody["realData"].get(); soeData = messageBody["soeData"].get(); limit = messageBody["limit"].get(); @@ -859,7 +859,8 @@ rocketmq::ConsumeStatus myMessageCallbackrtdata(const rocketmq::MQMessageExt& ms } // 消息解析 - std::string devid, line; + std::string devid; + ushort line; bool realData = false, soeData = false; int limit = 0; @@ -870,33 +871,16 @@ rocketmq::ConsumeStatus myMessageCallbackrtdata(const rocketmq::MQMessageExt& ms } // 加锁访问台账 - int dev_index; - int mp_index; - if( !devid.empty() && !line.empty()){ - std::lock_guard lock(ledgermtx); - dev_index = find_dev_index_from_dev_id(devid); - mp_index = find_mp_index_from_mp_id(line); + if( !devid.empty() && line > 0){ + //不再使用文件触发方式,直接调用接口向终端发起请求 + ClientManager::instance().set_real_state_count(devid, 60, line);//一秒询问一次,询问60次,下一次同一个测点调用的话就会刷新 } else{ std::cerr << "rtdata is NULL." << std::endl; DIY_ERRORLOG("process","【ERROR】前置的%d号进程处理topic:%s_%s的补招触发消息失败,消息的json结构不正确", g_front_seg_index,FRONT_INST.c_str(), G_MQCONSUMER_TOPIC_RT.c_str()); - } - - - if (dev_index == -1 || mp_index == -1) { - std::cerr << "dev index or mp index is not found" << std::endl; return rocketmq::RECONSUME_LATER; } - // 写入 XML - /*if (!createXmlFile(dev_index, mp_index, realData, soeData, limit, "new")) { - DIY_ERRORLOG("process", "【ERROR】前置无法创建实时数据触发文件"); - std::cerr << "Failed to create the XML file." << std::endl; - return rocketmq::RECONSUME_LATER; - }*/ - //不再使用文件触发方式,直接调用接口向终端发起请求 - ClientManager::instance().set_real_state_count(devid, 60,mp_index);//一秒询问一次,询问60次 - return rocketmq::CONSUME_SUCCESS; } diff --git a/LFtid1056/cloudfront/code/worker.cpp b/LFtid1056/cloudfront/code/worker.cpp index 5a055f2..ce69d66 100644 --- a/LFtid1056/cloudfront/code/worker.cpp +++ b/LFtid1056/cloudfront/code/worker.cpp @@ -409,49 +409,203 @@ extern bool normalOutputEnabled; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////测试shell用的函数 void Worker::printLedgerinshell(const terminal_dev& dev, int fd) { + // —— 显示控制:最多打印的元素数量(防止过长)—— + constexpr size_t MAX_ITEMS = 5; // 可按需调整或删除限制 + std::ostringstream os; os << "\r\x1B[K------------------------------------\n"; - os << "\r\x1B[K|-- terminal_id: " << dev.terminal_id << "\n"; - os << "\r\x1B[K|-- terminal_name: " << dev.terminal_name << "\n"; - os << "\r\x1B[K|-- dev_ip: " << dev.addr_str << "\n"; - os << "\r\x1B[K|-- dev_port: " << dev.port << "\n"; - os << "\r\x1B[K|-- dev_type: " << dev.dev_type << "\n"; - os << "\r\x1B[K|-- dev_key: " << dev.dev_key << "\n"; - os << "\r\x1B[K|-- dev_series: " << dev.dev_series << "\n"; - os << "\r\x1B[K|-- dev_processNo: " << dev.processNo << "\n"; - os << "\r\x1B[K|-- maxProcessNum: " << dev.maxProcessNum << "\n"; - os << "\r\x1B[K|-- org_name: " << dev.org_name << "\n"; - os << "\r\x1B[K|-- maint_name: " << dev.maint_name << "\n"; - os << "\r\x1B[K|-- station_name: " << dev.station_name << "\n"; - os << "\r\x1B[K|-- tmnl_factory: " << dev.tmnl_factory << "\n"; - os << "\r\x1B[K|-- tmnl_status: " << dev.tmnl_status << "\n"; - os << "\r\x1B[K|-- timestamp: " << dev.timestamp << "\n"; + os << "\r\x1B[K|-- terminal_id : " << dev.terminal_id << "\n"; + os << "\r\x1B[K|-- terminal_name : " << dev.terminal_name << "\n"; + os << "\r\x1B[K|-- dev_ip : " << dev.addr_str << "\n"; + os << "\r\x1B[K|-- dev_port : " << dev.port << "\n"; + os << "\r\x1B[K|-- dev_type : " << dev.dev_type << "\n"; + os << "\r\x1B[K|-- dev_key : " << dev.dev_key << "\n"; + os << "\r\x1B[K|-- dev_series : " << dev.dev_series << "\n"; + os << "\r\x1B[K|-- dev_processNo : " << dev.processNo << "\n"; + os << "\r\x1B[K|-- maxProcessNum : " << dev.maxProcessNum << "\n"; + os << "\r\x1B[K|-- org_name : " << dev.org_name << "\n"; + os << "\r\x1B[K|-- maint_name : " << dev.maint_name << "\n"; + os << "\r\x1B[K|-- station_name : " << dev.station_name << "\n"; + os << "\r\x1B[K|-- tmnl_factory : " << dev.tmnl_factory << "\n"; + os << "\r\x1B[K|-- tmnl_status : " << dev.tmnl_status << "\n"; + os << "\r\x1B[K|-- timestamp : " << dev.timestamp << "\n"; + os << "\r\x1B[K|-- mac : " << dev.mac << "\n"; - os << "\r\x1B[K|-- mac: " << dev.mac << "\n"; + // ========================= 终端级 · 内部定值 ========================= + // internal_values(ushort 列表)与 dz_internal_info_list 一一对应,仅展示前 MAX_ITEMS 条 + os << "\r\x1B[K|-- Internal Values (" << dev.internal_values.size() << "):\n"; + { + size_t idx = 0; + for (auto itv = dev.internal_values.begin(); + itv != dev.internal_values.end() && idx < MAX_ITEMS; + ++itv, ++idx) { + os << "\r\x1B[K |-- [" << idx << "] value: " << static_cast(*itv) << "\n"; + } + if (dev.internal_values.size() > MAX_ITEMS) { + os << "\r\x1B[K |.. (+" << (dev.internal_values.size() - MAX_ITEMS) << " more)\n"; + } + } + // dz_internal_info_list(NameFixValue 描述,和 internal_values 对应) + os << "\r\x1B[K|-- Internal Value Descriptions (" << dev.dz_internal_info_list.size() << "):\n"; + { + const size_t n = dev.dz_internal_info_list.size(); + for (size_t i = 0; i < n && i < MAX_ITEMS; ++i) { + const auto& nf = dev.dz_internal_info_list[i]; + os << "\r\x1B[K |-- [" << i << "] " + << "Name=" << trim_cstr(nf.sFixValueName, sizeof(nf.sFixValueName)) + << ", Type=" << nf.DataType + << ", Unit=" << trim_cstr(nf.sDimension, sizeof(nf.sDimension)) + << ", Min=" << nf.MinValue + << ", Max=" << nf.MaxValue + << ", Default=" << nf.DefaultValue + << "\n"; + } + if (n > MAX_ITEMS) { + os << "\r\x1B[K |.. (+" << (n - MAX_ITEMS) << " more)\n"; + } + } + + // control_words(控制字描述) + os << "\r\x1B[K|-- Control Words (" << dev.control_words.size() << "):\n"; + { + const size_t n = dev.control_words.size(); + for (size_t i = 0; i < n && i < MAX_ITEMS; ++i) { + const DZ_kzz_bit& b = dev.control_words[i]; + os << "\r\x1B[K |-- [" << i << "] " + << "name=\"" << trim_cstr(b.kzz_bit, sizeof(b.kzz_bit)) << "\"" + << ", enable=" << static_cast(b.bit_enable) << "\n"; + } + if (n > MAX_ITEMS) { + os << "\r\x1B[K |.. (+" << (n - MAX_ITEMS) << " more)\n"; + } + } + + // ========================= 监测点级 · line ========================= for (size_t i = 0; i < dev.line.size(); ++i) { const auto& ld = dev.line[i]; if (ld.monitor_id.empty()) continue; + os << "\r\x1B[K|-- line[" << i << "]:\n"; - os << "\r\x1B[K |-- monitor_id: " << ld.monitor_id << "\n"; - os << "\r\x1B[K |-- monitor_name: " << ld.monitor_name << "\n"; - os << "\r\x1B[K |-- logical_device_seq: " << ld.logical_device_seq << "\n"; - os << "\r\x1B[K |-- terminal_id: " << ld.terminal_id << "\n"; - os << "\r\x1B[K |-- voltage_level: " << ld.voltage_level << "\n"; - os << "\r\x1B[K |-- terminal_connect: " << ld.terminal_connect << "\n"; - os << "\r\x1B[K |-- status: " << ld.status << "\n"; - os << "\r\x1B[K |-- timestamp: " << ld.timestamp << "\n"; + os << "\r\x1B[K |-- monitor_id : " << ld.monitor_id << "\n"; + os << "\r\x1B[K |-- monitor_name : " << ld.monitor_name << "\n"; + os << "\r\x1B[K |-- logical_device_seq : " << ld.logical_device_seq << "\n"; + os << "\r\x1B[K |-- terminal_id : " << ld.terminal_id << "\n"; + os << "\r\x1B[K |-- voltage_level : " << ld.voltage_level << "\n"; + os << "\r\x1B[K |-- terminal_connect : " << ld.terminal_connect << "\n"; + os << "\r\x1B[K |-- status : " << ld.status << "\n"; + os << "\r\x1B[K |-- timestamp : " << ld.timestamp << "\n"; + os << "\r\x1B[K |-- CT1=" << ld.CT1 << ", CT2=" << ld.CT2 + << ", PT1=" << ld.PT1 << ", PT2=" << ld.PT2 << "\n"; - os << "\r\x1B[K |-- CT1: " << ld.CT1 << "\n"; - os << "\r\x1B[K |-- CT2: " << ld.CT2 << "\n"; - os << "\r\x1B[K |-- PT1: " << ld.PT1 << "\n"; - os << "\r\x1B[K |-- PT2: " << ld.PT2 << "\n"; + // --- 监测点 · 定值(set_values) --- + os << "\r\x1B[K |-- Set Values (" << ld.set_values.size() << "):\n"; + { + size_t idx = 0; + for (auto it = ld.set_values.begin(); + it != ld.set_values.end() && idx < MAX_ITEMS; + ++it, ++idx) { + os << "\r\x1B[K |-- [" << idx << "] " << *it << "\n"; + } + if (ld.set_values.size() > MAX_ITEMS) { + os << "\r\x1B[K |.. (+" << (ld.set_values.size() - MAX_ITEMS) << " more)\n"; + } + } + // --- 监测点 · 定值描述文件(dz_info_list) --- + os << "\r\x1B[K |-- DZ Table (" << ld.dz_info_list.size() << "):\n"; + { + const size_t n = ld.dz_info_list.size(); + for (size_t j = 0; j < n && j < MAX_ITEMS; ++j) { + const DZ_TAB_STRUCT& z = ld.dz_info_list[j]; + os << "\r\x1B[K |-- [" << j << "] " + << "LN=" << z.LN_Num + << ", DZ=" << z.DZ_Num + << ", Name=" << trim_cstr(z.DZ_Name, sizeof(z.DZ_Name)) + << ", Type=" << z.DZ_Type + << ", Min=" << z.DZ_Min + << ", Max=" << z.DZ_Max + << ", Def=" << z.DZ_Default + << ", Unit=" << trim_cstr(z.DZ_UNIT, sizeof(z.DZ_UNIT)) + << "\n"; + } + if (n > MAX_ITEMS) { + os << "\r\x1B[K |.. (+" << (n - MAX_ITEMS) << " more)\n"; + } + } + + // --- 监测点 · 暂态事件(qvvrevent) --- + os << "\r\x1B[K |-- QVVR Event:\n"; + + // 1) 暂态事件列表 + os << "\r\x1B[K |-- Events (" << ld.qvvrevent.qvvrdata.size() << "):\n"; + { + const size_t n = ld.qvvrevent.qvvrdata.size(); + for (size_t k = 0; k < n && k < MAX_ITEMS; ++k) { + const qvvr_data& e = ld.qvvrevent.qvvrdata[k]; + os << "\r\x1B[K |-- [" << k << "] " + << "used=" << e.used_status + << ", type=" << e.QVVR_type + << ", time=" << static_cast(e.QVVR_time) + << ", per=" << e.QVVR_PerTime + << ", amp=" << e.QVVR_Amg + << ", phase="<< e.phase + << "\n"; + } + if (n > MAX_ITEMS) { + os << "\r\x1B[K |.. (+" << (n - MAX_ITEMS) << " more)\n"; + } + } + + // 2) 文件组列表 + os << "\r\x1B[K |-- File Groups (" << ld.qvvrevent.qvvrfile.size() << "):\n"; + { + const size_t n = ld.qvvrevent.qvvrfile.size(); + for (size_t g = 0; g < n && g < MAX_ITEMS; ++g) { + const qvvr_file& fg = ld.qvvrevent.qvvrfile[g]; + os << "\r\x1B[K |-- [" << g << "] " + << "used=" << fg.used_status + << ", tcount=" << fg.file_time_count + << ", downloaded=" << fg.is_download + << ", paired=" << fg.is_pair + << "\n"; + + // 文件名列表(file_name) + os << "\r\x1B[K |-- file_name (" << fg.file_name.size() << "):\n"; + { + size_t c = 0; + for (const auto& fn : fg.file_name) { + if (c++ >= MAX_ITEMS) break; + os << "\r\x1B[K |-- " << fn << "\n"; + } + if (fg.file_name.size() > MAX_ITEMS) { + os << "\r\x1B[K |.. (+" << (fg.file_name.size() - MAX_ITEMS) << " more)\n"; + } + } + + // 已下载列表(file_download) + os << "\r\x1B[K |-- file_download (" << fg.file_download.size() << "):\n"; + { + size_t c = 0; + for (const auto& fn : fg.file_download) { + if (c++ >= MAX_ITEMS) break; + os << "\r\x1B[K |-- " << fn << "\n"; + } + if (fg.file_download.size() > MAX_ITEMS) { + os << "\r\x1B[K |.. (+" << (fg.file_download.size() - MAX_ITEMS) << " more)\n"; + } + } + } + if (n > MAX_ITEMS) { + os << "\r\x1B[K |.. (+" << (n - MAX_ITEMS) << " more)\n"; + } + } } os << "\r\x1B[K------------------------------------\n"; sendStr(fd, os.str()); } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////打印所有的终端列表 void Worker::ledger(const std::string& terminal_id, int fd) { sendStr(fd, "\r\x1B[Kprint ledger in shell\n"); diff --git a/LFtid1056/dealMsg.cpp b/LFtid1056/dealMsg.cpp index fb2cee9..d2fc7b8 100644 --- a/LFtid1056/dealMsg.cpp +++ b/LFtid1056/dealMsg.cpp @@ -582,6 +582,7 @@ void process_received_message(string mac, string id,const char* data, size_t len } else { // װô쳣 + send_reply_to_cloud(static_cast(ResponseCode::INTERNAL_ERROR), id, static_cast(DeviceState::READING_REALSTAT)); // ʵʱݴ󣬵Ϊ״̬һ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } @@ -668,6 +669,10 @@ void process_received_message(string mac, string id,const char* data, size_t len else { std::cerr << "Failed to save file: " << file_path << ", Error: " << strerror(errno) << std::endl; + + // ļʧܣ֪ͨƶ + send_reply_to_cloud(static_cast(ResponseCode::BAD_REQUEST), + id, static_cast(DeviceState::READING_EVENTFILE)); } //ǰļϣΪдһļȴأһѾȴеȺˣɿ״ֱ̬ӾͻῪʼļع @@ -676,6 +681,7 @@ void process_received_message(string mac, string id,const char* data, size_t len } else { // װô쳣 + send_reply_to_cloud(static_cast(ResponseCode::INTERNAL_ERROR), id, static_cast(DeviceState::READING_EVENTFILE)); // ղļݴ󣬵Ϊ״̬һ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } @@ -719,6 +725,7 @@ void process_received_message(string mac, string id,const char* data, size_t len } else { // װô쳣 + send_reply_to_cloud(static_cast(ResponseCode::INTERNAL_ERROR), id, static_cast(DeviceState::READING_FILEMENU)); // Ŀ¼ݴ󣬵Ϊ״̬һ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } @@ -800,7 +807,7 @@ void process_received_message(string mac, string id,const char* data, size_t len //ʹýӿļlnk20250826 std::string filename; - //SendFileWeb(WEB_FILEUPLOAD, file_path, file_path, filename); + SendFileWeb(WEB_FILEUPLOAD, file_path, file_path, filename); std::cout << "File upload: " << filename << std::endl; } @@ -810,12 +817,13 @@ void process_received_message(string mac, string id,const char* data, size_t len } //ǰļϣΪдһļȴأһѾȴеȺˣɿ״ֱ̬ӾͻῪʼļع - ClientManager::instance().change_device_state(id, DeviceState::IDLE); + ClientManager::instance().change_device_state(id, DeviceState::READING_FILEDATA); } } else { // װô쳣 + send_reply_to_cloud(static_cast(ResponseCode::INTERNAL_ERROR), id, static_cast(DeviceState::READING_FILEDATA)); // ļݴ󣬵Ϊ״̬һ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } @@ -878,7 +886,7 @@ void process_received_message(string mac, string id,const char* data, size_t len } //洢ֵlnk20250827 - //save_internal_value(id, monitor_index, fList); + save_set_value(id, monitor_index, fList); //Զֵ޸Ĺ //ClientManager::instance().set_fixedvalue_action_to_device(id, monitor_index, fList); @@ -888,6 +896,8 @@ void process_received_message(string mac, string id,const char* data, size_t len } else { // װô쳣 + send_reply_to_cloud(static_cast(ResponseCode::INTERNAL_ERROR),id,static_cast(DeviceState::READING_FIXEDVALUE)); + // ȡֵ󣬵Ϊ״̬һ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } @@ -965,13 +975,15 @@ void process_received_message(string mac, string id,const char* data, size_t len // ȡ (һֽ) uint8_t monitor_index = parser.RecvData[0]; std::cout << "Monitor Index: " << static_cast(monitor_index) << std::endl; - //send_set_value_reply(id, monitor_index, dz_list); + send_set_value_reply(id, monitor_index, dz_list); //ֵȡϣΪУ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } else { // װô쳣 + send_reply_to_cloud(static_cast(ResponseCode::INTERNAL_ERROR),id,static_cast(DeviceState::READING_FIXEDVALUEDES)); + // ȡֵΪ״̬һ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } @@ -1044,7 +1056,7 @@ void process_received_message(string mac, string id,const char* data, size_t len } //洢ֵlnk20250827 - //save_internal_value(id, fList); + save_internal_value(id, fList); //ڲֵ޸IJ //ClientManager::instance().set_interfixedvalue_action_to_device(id, fList); @@ -1054,6 +1066,9 @@ void process_received_message(string mac, string id,const char* data, size_t len } else { // װô쳣 + + send_reply_to_cloud(static_cast(ResponseCode::INTERNAL_ERROR), id, static_cast(DeviceState::READING_INTERFIXEDVALUE)); + // ȡװڲֵʧܣΪ״̬һ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } @@ -1122,11 +1137,17 @@ void process_received_message(string mac, string id,const char* data, size_t len } } + //lnk20250905 + save_internal_info(id, fixValueList); + //ڲֵȡϣΪ״̬һ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } else { // װô쳣 + + send_reply_to_cloud(static_cast(ResponseCode::INTERNAL_ERROR), id, static_cast(DeviceState::READING_INTERFIXEDVALUEDES)); + // ȡװڲֵʧܣΪ״̬һ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } @@ -1182,11 +1203,14 @@ void process_received_message(string mac, string id,const char* data, size_t len << ", enable: " << static_cast(dz_info.bit_enable) << std::endl; } + send_internal_value_reply(id, control_words); + // ȡϣΪУ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } else { // װô쳣 + send_reply_to_cloud(static_cast(ResponseCode::INTERNAL_ERROR), id, static_cast(DeviceState::READING_CONTROLWORD)); // ȡװÿʧܣΪ״̬һ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } @@ -1197,6 +1221,8 @@ void process_received_message(string mac, string id,const char* data, size_t len if (udata[8] == static_cast(MsgResponseType::Response_NewACK)) { std::cout << "set success" << mac << std::endl; //ڲֵóɹΪУ + send_reply_to_cloud(static_cast(ResponseCode::OK), id, static_cast(DeviceState::SET_INTERFIXEDVALUE)); + ClientManager::instance().change_device_state(id, DeviceState::IDLE); } else if (udata[8] == static_cast(MsgResponseType::Response_NewNACK)) { @@ -1205,11 +1231,14 @@ void process_received_message(string mac, string id,const char* data, size_t len std::cout << "reason code: " << static_cast(udata[8]) << "-" << static_cast(udata[9]) << "-" << static_cast(udata[10]) << "-" << static_cast(udata[11]) << std::endl; // װ÷Ӧڲֵʧ + send_reply_to_cloud(static_cast(ResponseCode::BAD_REQUEST), id, static_cast(DeviceState::SET_INTERFIXEDVALUE)); + // װڲֵʧܣΪ״̬һ ClientManager::instance().change_device_state(id, DeviceState::IDLE); } else { // װô쳣 + send_reply_to_cloud(static_cast(ResponseCode::INTERNAL_ERROR), id, static_cast(DeviceState::SET_INTERFIXEDVALUE)); // װڲֵʧܣΪ״̬һ ClientManager::instance().change_device_state(id, DeviceState::IDLE); }