Explorar el Código

#IQRV #comment [Javascript] 初始化页面实现

gifur hace 4 años
padre
commit
31b2c1cfa3

+ 2 - 0
Module/mod_DeviceControl/CMakeLists.txt

@@ -23,6 +23,8 @@ target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})
 target_include_directories(${MODULE_NAME} PRIVATE 
 ${CMAKE_CURRENT_SOURCE_DIR}
 ${OTHER_LIB_BASE_DIR}/libpublicFun
+${MODULE_BASE_DIR}/mod_CenterSetting
+${MODULE_BASE_DIR}/mod_Initializer
 )
 
 deploy_module(${MODULE_PREFIX} ${MODULE_NAME})

+ 116 - 9
Module/mod_DeviceControl/mod_DeviceControl.cpp

@@ -13,6 +13,17 @@
 #include "fileutil.h"
 #include "iniutil.h"
 
+#include "CenterSetting_client_g.h"	
+using namespace CenterSetting;
+
+#include "Initializer_client_g.h"
+using namespace Initializer;
+
+#define DEPLOYSTATE_NOTINIT 0
+#define DEPLOYSTATE_DONE 1
+#define DEPLOYSTATE_FAILED 2
+
+
 void CDeviceControlServerSession::Handle_USB(SpReqAnsContext<DeviceControlService_USB_Req, DeviceControlService_USB_Ans>::Pointer ctx)
 {
     LOG_FUNCTION();
@@ -164,7 +175,14 @@ void CDeviceControlEntity::TestConnectivity(SpReqAnsContext<DeviceControlService
 
 void CDeviceControlEntity::DeployTerminal(SpReqAnsContext<DeviceControlService_DeployTerminal_Req, DeviceControlService_DeployTerminal_Ans>::Pointer ctx)
 {
-    ErrorCodeEnum result(Error_Unexpect);
+
+    LOG_FUNCTION();
+
+    ErrorCodeEnum result(Error_Succeed);
+    int tmpResult = 0;
+    CSimpleStringA tmpMsg(true);
+
+    Dbg("%d", ctx->Req.currStep);
 
     switch (ctx->Req.currStep) {
     case DeployStep_Begin:
@@ -194,9 +212,6 @@ void CDeviceControlEntity::DeployTerminal(SpReqAnsContext<DeviceControlService_D
                 result = Error_MisMatched;
             } else {
                 ctx->Ans.nextStep = DeployStep_FetchCenterSettings;
-                int tmpResult = 0;
-                CSimpleStringA tmpMsg(true);
-                
 
                 ErrorCodeEnum ec(Error_Succeed);
                 CSmartPointer<IConfigInfo> pConfig;
@@ -209,7 +224,7 @@ void CDeviceControlEntity::DeployTerminal(SpReqAnsContext<DeviceControlService_D
                     const ErrorCodeEnum ec2 = pConfig->WriteConfigValue("TerminalDeploy", "ServerIP", serverIP);
                     const ErrorCodeEnum ec3 = pConfig->WriteConfigValueInt("TerminalDeploy", "CurrStep", ctx->Req.currStep);
                     if (!ec0 && !ec1 && !ec2 && !ec3) {
-                        ec = pConfig->WriteConfigValueInt("TerminalDeploy", "CurrState", 1);
+                        ec = pConfig->WriteConfigValueInt("TerminalDeploy", "CurrState", DEPLOYSTATE_DONE);
                         Dbg("record step: %s", SpStrError(ec));
                     } else {
                         Dbg("record failed: %s, %s, %s, %s", SpStrError(ec), SpStrError(ec1), SpStrError(ec2), SpStrError(ec3));
@@ -273,7 +288,7 @@ void CDeviceControlEntity::DeployTerminal(SpReqAnsContext<DeviceControlService_D
                                 fileutil_delete_file(strRootTmpFile);
 
                                 pConfig->WriteConfigValueInt("TerminalDeploy", "CurrStep", DeployStep_FetchCenterSettings);
-                                pConfig->WriteConfigValueInt("TerminalDeploy", "CurrState", 0);
+                                pConfig->WriteConfigValueInt("TerminalDeploy", "CurrState", DEPLOYSTATE_NOTINIT);
 
                             } else {
                                 tmpMsg = "找不到匹配的备选文件,请确认安装包完整性并尝试重新安装";
@@ -284,6 +299,8 @@ void CDeviceControlEntity::DeployTerminal(SpReqAnsContext<DeviceControlService_D
 
                 } while (false);
 
+                ctx->Ans.param2 = serverIP;
+
                 ctx->Ans.result = tmpResult;
                 ctx->Ans.message = tmpMsg;
             }
@@ -297,10 +314,100 @@ void CDeviceControlEntity::DeployTerminal(SpReqAnsContext<DeviceControlService_D
     }
     break;
     case DeployStep_FetchCenterSettings:
-        result = Error_NotImpl;
+    {
+        const CSimpleStringA& serverIP = ctx->Req.param3;
+        const int nPort = ctx->Req.param1;
+
+        if (serverIP.IsNullOrEmpty() || nPort <= 0) {
+            result = Error_Param;
+            break;
+        }
+
+        ErrorCodeEnum ec(Error_Succeed);
+        CSmartPointer<IConfigInfo> pConfig;
+        GetFunction()->OpenConfig(Config_Cache, pConfig);
+
+        Dbg("to connect centersetting...%s::%d", serverIP.GetData(),  nPort);
+        auto pCenterSettingClient = new CenterSettingService_ClientBase(this);
+        ec = pCenterSettingClient->Connect();
+        if (ec != Error_Succeed) {
+            tmpMsg = CSimpleStringA::Format("连接集中配置模块失败: %s", SpStrError(ec));
+            pCenterSettingClient->SafeDelete();
+            Dbg("connect to centersetting failed: %s", SpStrError(ec));
+            tmpResult = ec;
+        } else {
+            CenterSettingService_Download_Req req = {};
+            req.strAddr = serverIP;
+            req.nPort = nPort;
+            CenterSettingService_Download_Ans ans = {};
+            /**TODO(Gifur@10/14/2021): 未知行内还是行外的情况 */
+            Dbg("to download...");
+            ec = pCenterSettingClient->Download(req, ans, 10000);
+            if (ec != Error_Succeed) {
+                tmpMsg = CSimpleStringA::Format("集中配置模块调用失败: %s", SpStrError(ec));
+                tmpResult = ec;
+                Dbg("to download failed: %s", SpStrError(ec));
+            } else {
+                pConfig->WriteConfigValueInt("TerminalDeploy", "CurrStep", DeployStep_AccessAuthorize);
+                pConfig->WriteConfigValueInt("TerminalDeploy", "CurrState", DEPLOYSTATE_NOTINIT);
+            }
+            pCenterSettingClient->GetFunction()->CloseSession();
+        }
+        
+        ctx->Ans.param2 = serverIP;
+
+        ctx->Ans.result = tmpResult;
+        ctx->Ans.message = tmpMsg;
+    }
         break;
     case DeployStep_AccessAuthorize:
-        result = Error_NotImpl;
+    {
+        const CSimpleStringA& serverIP = ctx->Req.param3;
+        const int nPort = ctx->Req.param1;
+
+        if (serverIP.IsNullOrEmpty() || nPort <= 0) {
+            result = Error_Param;
+            break;
+        }
+
+        ErrorCodeEnum ec(Error_Succeed);
+        CSmartPointer<IConfigInfo> pConfig;
+        GetFunction()->OpenConfig(Config_Cache, pConfig);
+
+        Dbg("to connect initializer...%s::%d", serverIP.GetData(), nPort);
+        auto pClient = new InitializerService_ClientBase(this);
+        ec = pClient->Connect();
+        if (ec != Error_Succeed) {
+            tmpMsg = CSimpleStringA::Format("连接初始化模块失败: %s", SpStrError(ec));
+            pClient->SafeDelete();
+            Dbg("connect to initializer module failed: %s", SpStrError(ec));
+            tmpResult = ec;
+        } else {
+            InitializerService_InitializeNew_Req req = {};
+            req.strAuthServer = serverIP;
+            req.nAuthPort = nPort;
+            req.strUserID = "admin";
+            req.strPassword = "88888888";
+
+            InitializerService_InitializeNew_Ans ans = {};
+            Dbg("to initializer...");
+            ec = pClient->InitializeNew(req, ans, 30000);
+            if (ec != Error_Succeed) {
+                tmpMsg = CSimpleStringA::Format("初始化调用失败: %s", SpStrError(ec));
+                tmpResult = ec;
+                Dbg("to initialize failed: %s", SpStrError(ec));
+            } else {
+                pConfig->WriteConfigValueInt("TerminalDeploy", "CurrStep", DeployStep_MediaConfig);
+                pConfig->WriteConfigValueInt("TerminalDeploy", "CurrState", DEPLOYSTATE_NOTINIT);
+            }
+            pClient->GetFunction()->CloseSession();
+        }
+
+        ctx->Ans.param2 = serverIP;
+
+        ctx->Ans.result = tmpResult;
+        ctx->Ans.message = tmpMsg;
+    }
         break;
     case DeployStep_MediaConfig:
         result = Error_NotImpl;
@@ -309,7 +416,7 @@ void CDeviceControlEntity::DeployTerminal(SpReqAnsContext<DeviceControlService_D
         result = Error_NotImpl;
         break;
     default:
-        result = Error_NotSupport;
+        result = Error_MisMatched;
         break;
     }
     ctx->Answer(result);

+ 63 - 5
addin/res/ManagerDesktop/guide.html

@@ -184,7 +184,7 @@
                                     </div>
                                 </div>
                                 <div class="pull-left input_normal text-left">
-                                    <input id="guide_server_ip" type="text" autocomplete="off"
+                                    <input id="guide_sync_centersetting_server_ip_content" type="text" autocomplete="off"
                                         onfocus="showInputBorder(this)" onblur="hideInputBorder(this)"
                                         oncontextmenu="return false;" maxlength="16" value="55.14.131.137">
                                 </div>
@@ -195,22 +195,22 @@
                                     <div class="text-left guide_error hide" id="text_guide_sync_centersetting_ip_tips"></div>
                                 </div>
                             </div>
-                            <div class="clearboth" style="padding-top:30px;" id="guide_sync_centersetting_port">
+                            <div class="clearboth" style="padding-top:30px;" id="guide_sync_centersetting_port_text">
                                 <div class="pull-left" style="width:330px;">
                                     <div class="text-right guide_input_label">端口号
                                     </div>
                                 </div>
                                 <div class="pull-left input_normal text-left">
-                                    <input id="guide_sync_centersetting_port" type="text" autocomplete="off" placeholder=""
+                                    <input id="guide_sync_centersetting_port_content" type="text" autocomplete="off" placeholder=""
                                         onfocus="showInputBorder(this)" onblur="hideInputBorder(this)"
-                                        oncontextmenu="return false;" maxlength="4" value="1024">
+                                        oncontextmenu="return false;" maxlength="4" value="6024">
                                 </div>
                             </div>
                             <div id="guide_sync_centersetting_port_tips" class="clearboth">
                                 <div class="pull-left" style="width:330px;">&nbsp;</div>
                                 <div class="pull-left">
                                     <div class="text-left guide_input_descript" id="text_guide_sync_centersetting_port_tips">
-                                        分行集中配置下载端口通常为:6024
+                                        分行集中配置下载端口通常为:1024
                                     </div>
                                 </div>
                             </div>
@@ -228,6 +228,64 @@
                 </div>
             </div>
             <div class="clearboth"></div>
+            <div id="guide_access_authorize_page" style="margin: 0px auto; width: 1000px; padding-top: 133px; display: none;">
+                <div id="guide_access_authorize_content" style="margin:0 auto;position:absolute;">
+                    <div class="guide_table_top">&nbsp;</div>
+                    <div class="margin_bottom_box2 color_background_white" style="min-height:556px;">
+                        <div style="padding-top:20px;height:48px;" class="border_bottom" align="center">
+                            <div class="guide_sub_tip" style="font-size:18px;">终端认证</div>
+                        </div>
+                        <div id="access_authorize_content" style="max-height: 510px; width: 998px;">
+                            <div class="clearboth" style="padding-top:30px;" id="guide_access_authorize_server_ip">
+                                <div class="pull-left" style="width:330px;">
+                                    <div class="text-right guide_input_label">分行服务 IP
+                                    </div>
+                                </div>
+                                <div class="pull-left input_normal text-left">
+                                    <input id="guide_access_authorize_server_ip_content" type="text" autocomplete="off"
+                                        onfocus="showInputBorder(this)" onblur="hideInputBorder(this)"
+                                        oncontextmenu="return false;" maxlength="16" value="55.14.131.137">
+                                </div>
+                            </div>
+                            <div id="guide_access_authorize_ip_tips" class="clearboth">
+                                <div class="pull-left" style="width:330px;">&nbsp;</div>
+                                <div class="pull-left">
+                                    <div class="text-left guide_error hide" id="text_guide_access_authorize_ip_tips"></div>
+                                </div>
+                            </div>
+                            <div class="clearboth" style="padding-top:30px;" id="guide_access_authorize_port_text">
+                                <div class="pull-left" style="width:330px;">
+                                    <div class="text-right guide_input_label">端口号
+                                    </div>
+                                </div>
+                                <div class="pull-left input_normal text-left">
+                                    <input id="guide_access_authorize_port_content" type="text" autocomplete="off" placeholder=""
+                                        onfocus="showInputBorder(this)" onblur="hideInputBorder(this)"
+                                        oncontextmenu="return false;" maxlength="4" value="6031">
+                                </div>
+                            </div>
+                            <div id="guide_access_authorize_port_tips" class="clearboth">
+                                <div class="pull-left" style="width:330px;">&nbsp;</div>
+                                <div class="pull-left">
+                                    <div class="text-left guide_input_descript" id="text_guide_access_authorize_port_tips">
+                                        分行终端初始化端口通常为:1031
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="clearboth" style="height:30px;"></div>
+                            <div id="captive_access_authorize_btns">
+                                <div id="guide_access_authorize_btns" class="clearboth" align="center">
+                                    <div id="guide_access_authorize_next"
+                                        style="position: relative;" class="btn_normal_long">
+                                        下载</div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="guide_table_bottom">&nbsp;</div>
+                </div>
+            </div>
+            <div class="clearboth"></div>
         </div>
         <div style="height:142px;">&nbsp;</div>
     </div>

+ 21 - 21
addin/res/ManagerDesktop/js/errorCodeEnum.js

@@ -119,35 +119,35 @@ function ErrorCodeStringfy(val) {
             output = 'Error_Null';
             break;
         case ErrorCodeEnum.Error_Param:
-        output = 'Error_Param';
-        break;
+            output = 'Error_Param';
+            break;
         case ErrorCodeEnum.Error_Overflow:
-        output = 'Error_Overflow';
-        break;
+            output = 'Error_Overflow';
+            break;
         case ErrorCodeEnum.Error_TooSmallBuffer:
-        output = 'Error_TooSmallBuffer';
-        break;
+            output = 'Error_TooSmallBuffer';
+            break;
         case ErrorCodeEnum.Error_NotIntegrated:
-        output = 'Error_NotIntegrated';
-        break;
+            output = 'Error_NotIntegrated';
+            break;
         case ErrorCodeEnum.Error_CheckSum:
-        output = 'Error_CheckSum';
-        break;
+            output = 'Error_CheckSum';
+            break;
         case ErrorCodeEnum.Error_MisMatched:
-        output = 'Error_MisMatched';
-        break;
+            output = 'Error_MisMatched';
+            break;
         case ErrorCodeEnum.Error_TargetBeing:
-        output = 'Error_TargetBeing';
-        break;
+            output = 'Error_TargetBeing';
+            break;
         case ErrorCodeEnum.Error_NoTarget:
-        output = 'Error_NoTarget';
-        break;
+            output = 'Error_NoTarget';
+            break;
         case ErrorCodeEnum.Error_NoDefine:
-        output = 'Error_NoDefine';
-        break;
+            output = 'Error_NoDefine';
+            break;
         case ErrorCodeEnum.Error_NotImpl:
-        output = 'Error_NotImpl';
-        break;
+            output = 'Error_NotImpl';
+            break;
         case ErrorCodeEnum.Error_NotExist:
         output = 'Error_NotExist';
         break;
@@ -353,7 +353,7 @@ function ErrorCodeStringfy(val) {
         output = 'Error_IgnoreAll';
         break;
         default:
-        output = 'unkonwn: ' + val;
+        output = 'Unkonwn: ' + val;
         break;
     }
     return output;

+ 79 - 0
addin/res/ManagerDesktop/js/guide.js

@@ -64,6 +64,44 @@ function IPConnectableTest(ip)
     });
 }
 
+function DeployTerminalWithIPAndPort(server_ip, port, access_flag)
+{
+    let req = new Request();
+    if(!access_flag) {
+        req.currStep = CONST.DeployStep_FetchCenterSettings;
+        req.preStep = CONST.DeployStep_GetTerminalInfo;
+        req.nextStep = CONST.DeployStep_AccessAuthorize;
+    } else {
+        req.currStep = CONST.DeployStep_AccessAuthorize;
+        req.preStep = CONST.DeployStep_FetchCenterSettings;
+        req.nextStep = CONST.DeployStep_MediaConfig;
+    }
+
+    req.param1 = parseInt(port, 10);
+    req.param2 = 0;
+    req.param3 = server_ip;
+    req.param4 = '';
+    req.param5 = '';
+    req.array1 = [0];
+    req.array2 = [''];
+
+    utilStartSubmitDialog();
+    RVC.DeviceControlEntityCtrl.DeployTerminal(req, function(ret) {
+        utilStopSubmitDialog();
+        if(ret.errorCode === 0) {
+            let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
+            if(result.result == 0) {
+                utilStartAlertDialog("操作成功");
+            } else {
+                utilStartAlertDialog("操作失败:[" + result.result + "] " + result.message);
+            }
+        } else {
+            RVC.DeviceControlEntityCtrl.commErrorCallback(ret);
+        }
+    });
+}
+
+
 function InitTemrinalAbout(server_ip, new_terminalno, vendorName)
 {
     let req = new Request();
@@ -94,6 +132,30 @@ function InitTemrinalAbout(server_ip, new_terminalno, vendorName)
     });
 }
 
+function PreDeployTerminalWithIPAndPort(server_ip, port, access_flag)
+{
+    if(!isValidIpAddress(server_ip)) {
+        utilStartAlertDialog("无效IP格式");
+        return;
+    }
+    if(!check_port(port)) {
+        utilStartAlertDialog("无效端口号");
+        return;
+    }
+    
+    DeployTerminalWithIPAndPort(server_ip, port, access_flag);
+}
+
+function DownloadCenterSetting(ip, port)
+{
+    PreDeployTerminalWithIPAndPort(ip, port, false);
+}
+
+function AuthorizeTerminal(ip, port)
+{
+    PreDeployTerminalWithIPAndPort(ip, port, true);
+}
+
 $(document).on('click', '#guide_initparam_ip_check #ip_connect_check', function(){
     var ip = $('#guide_server_ip').val();
     console.log('ip: ' + ip);
@@ -122,6 +184,23 @@ $(document).on('click', '#guide_initparam_next', function() {
 
 });
 
+
+$(document).on('click', '#guide_sync_centersetting_next', function() {
+
+    const ip = $('#guide_sync_centersetting_server_ip_content').val();
+    var port = $('#guide_sync_centersetting_port_content').val();
+
+    DownloadCenterSetting(ip, port);
+});
+$(document).on('click', '#guide_access_authorize_next', function() {
+
+    const ip = $('#guide_access_authorize_server_ip_content').val();
+    var port = $('#guide_access_authorize_port_content').val();
+
+    AuthorizeTerminal(ip, port);
+});
+
+
 $(function () {
 
     RVC.GuideController = RVC.Object.extend({

+ 24 - 0
addin/res/ManagerDesktop/js/page/centersettings.js

@@ -18,6 +18,30 @@ function centersettingsGenPage() {
 
 var centersettingsController = (function() {
 
+    RVC.CenterSettingEntity = RVC.EntityController.extend({
+        entityName: 'CenterSetting',
+        className: 'CenterSettingService',
+        methodID: {
+            Download: 0,
+            GetSyncInfo: 1
+        },
+        methodSignature: {
+            Download: -101852141,
+            GetSyncInfo: 1338819403
+        },
+
+        Download: function(req, callback) {
+            this.webSocketInvokeEx(req, 
+                ({id:this.methodID.Download, sig:this.methodSignature.Download}),
+                 callback);
+        },
+        GetSyncInfo: function(req, callback) {
+            this.webSocketInvokeEx(req, 
+                ({id:this.methodID.GetSyncInfo, sig:this.methodSignature.GetSyncInfo}),
+                 callback);
+        }
+    });
+
     function initPage() {
 
     }