Browse Source

Merge branch 'master' of http://git.ius.plus/Project-Wing/WingCloudServer

Jeremy 2 years ago
parent
commit
c8f6f398f7
7 changed files with 443 additions and 282 deletions
  1. 16 9
      src/Program.cs
  2. 274 180
      src/Settings/ExamInfo.json
  3. 102 0
      src/WingApplication.cs
  4. 47 0
      src/WingApplicationBuilder.cs
  5. 3 34
      src/WingServer.cs
  6. 0 58
      src/WingServerCreator.cs
  7. 1 1
      src/appsettings.json

+ 16 - 9
src/Program.cs

@@ -1,20 +1,27 @@
 using System;
 using System.IO;
-using System.Reflection;
-using System.Runtime.Loader;
 
 namespace WingCloudServer
 {
     class Program
     {
         static void Main(string[] args)
-        {
-            AssemblyLoadContext.Default.Resolving += (a,b)=>{
-                //自定义依赖文件存放路径
-                var dependenciesPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Dependencies");
-                return Assembly.LoadFrom(Path.Combine(dependenciesPath, $"{b.Name}.dll"));
-            };
-            WingServerCreator.Create();
+        {        
+            try
+            {
+                var wingApplicationBuilder = new WingApplicationBuilder(args);
+                var app = wingApplicationBuilder.Build();
+                app.Run();   
+            }
+            catch(Exception ex)
+            {
+                Console.WriteLine($"Unhandled application exception:{ex}");
+                string readStr = Console.ReadLine();
+                while (readStr.ToUpper() != "Q")
+                {
+                    readStr = Console.ReadLine();
+                }
+            }                                                 
         }
     }
 }

+ 274 - 180
src/Settings/ExamInfo.json

@@ -1,200 +1,294 @@
 {
-    "General": {
-        "Version": "1.0"
+    "General":{
+        "Version":"1.0"
     },
-    "ExamInfo": {
-        "BaseInfo": {
-            "Operator": {
-                "Type": "string",
-                "ShowType": "text",
-                "Required": false,
-                "Desc": "OperatorDesc"
-            },
-            "AttendingDoctor": {
-                "Type": "string",
-                "ShowType": "text",
-                "Required": false,
-                "Desc": "AttendingDoctorDesc"
-            },
-            "RefDr": {
-                "Type": "string",
-                "ShowType": "text",
-                "Required": false,
-                "Desc": "RefDrDesc"
+    "ExamInfo":{
+        "BaseInfo":{
+            "Operator":{
+                "Type":"string",
+                "ShowType":"text",
+                "Required":false,
+                "Desc":"OperatorDesc"
+            },
+            "AttendingDoctor":{
+                "Type":"string",
+                "ShowType":"text",
+                "Required":false,
+                "Desc":"AttendingDoctorDesc"
+            },
+            "RefDr":{
+                "Type":"string",
+                "ShowType":"text",
+                "Required":false,
+                "Desc":"RefDrDesc"
             }
         },
-        "Routine": {
-            "Weight": {
-                "Type": "double",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "WeightDesc"
-            },
-            "Height": {
-                "Type": "double",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "HeightDesc"
+        "Routine":{
+            "Weight":{
+                "Type":"double",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"WeightDesc",
+                "Unit":"kg"
+            },
+            "Height":{
+                "Type":"double",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"HeightDesc",
+                "Unit":"cm"
+            },
+            "BSA":{
+                "Type":"double",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"BSADesc",
+                "Unit":"m2",
+                "Formula":"0.007184*(Weight^0.425)*(Height^0.725)"
+            },
+            "BMI":{
+                "Type":"double",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"HeightDesc",
+                "Unit":"kg/m2",
+                "Formula":"Weight/(Height*Height)"
             }
         },
-        "Obstetrics": {
-            "AB": {
-                "Type": "int",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "ABDesc"
-            },
-            "Ectopic": {
-                "Type": "string",
-                "ShowType": "input",
-                "Required": false,
-                "Desc": "EctopicDesc"
-            },
-            "Gravida": {
-                "Type": "int",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "GravidaDesc"
-            },
-            "LMP": {
-                "Type": "DateTime",
-                "ShowType": "DateTime",
-                "Required": false,
-                "Desc": "LMPDesc"
-            },
-            "Para": {
-                "Type": "int",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "ParaDesc"
-            },
-            "LastExamDate": {
-                "Type": "DateTime",
-                "ShowType": "DateTime",
-                "Required": false,
-                "Desc": "LastExamDateDesc"
-            },
-            "LGA": {
-                "Type": "int",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "LGADesc"
-            },
-            "IVF": {
-                "Type": "DateTime",
-                "ShowType": "DateTime",
-                "Required": false,
-                "Desc": "IVFDesc"
-            },
-            "OospermForm": {
-                "Type": "DateTime",
-                "ShowType": "DateTime",
-                "Required": false,
-                "Desc": "OospermFormDesc"
-            },
-            "BBT": {
-                "Type": "DateTime",
-                "ShowType": "DateTime",
-                "Required": false,
-                "Desc": "BBTDesc"
-            },
-            "FetusNumber": {
-                "Type": "int",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "FetusNumberDesc"
-            },
-            "EstimateDueDate": {
-                "Type": "DateTime",
-                "ShowType": "DateTime",
-                "Required": false,
-                "Desc": "EstimateDueDateDesc"
-            },
-            "GestationalAge": {
-                "Type": "int",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "GestationalAgeDesc"
-            },
-            "GestationalAgeOrigin": {
-                "Type": "enum",
-                "SHOWType": "select",
-                "Required": false,
-                "DefaultValue": "",
-                "Desc": "GestationalAgeOriginDesc",
-                "Source": [
+        "Obstetrics":{
+            "GestationalAgeOrigin":{
+                "Type":"enum",
+                "ShowType":"select",
+                "Required":false,
+                "DefaultValue":"",
+                "Desc":"GestationalAgeOriginDesc",
+                "Source":[
                     "GestationalAge",
                     "IVF",
                     "OospermForm",
                     "BBT",
                     "LMP"
-                ]
+                ],
+                "MethodName":"GetRecordDateAsync",
+                "APIUnionRequired":"GestationalAgeOrigin"
+            },
+            "LastExamDate":{
+                "Type":"DateTime",
+                "ShowType":"DateTime",
+                "Required":false,
+                "Desc":"LastExamDateDesc",
+                "IsShow":"GestationalAgeOrigin.GestationalAge",
+                "MethodName":"GetRecordDateAsync",
+                "APIUnionRequired":"LastExamDate,LGA"
+            },
+            "LGA":{
+                "Type":"int",
+                "ShowType":"WeekAndDay",
+                "Required":false,
+                "Desc":"LGADesc",
+                "IsShow":"GestationalAgeOrigin.GestationalAge",
+                "MethodName":"GetRecordDateAsync",
+                "APIUnionRequired":"LGA,LastExamDate"
+            },
+            "IVF":{
+                "Type":"DateTime",
+                "ShowType":"DateTime",
+                "Required":false,
+                "Desc":"IVFDesc",
+                "IsShow":"GestationalAgeOrigin.IVF",
+                "MethodName":"GetRecordDateAsync",
+                "APIUnionRequired":"IVF"
+            },
+            "OospermForm":{
+                "Type":"DateTime",
+                "ShowType":"DateTime",
+                "Required":false,
+                "Desc":"OospermFormDesc",
+                "IsShow":"GestationalAgeOrigin.OospermForm",
+                "MethodName":"GetRecordDateAsync",
+                "APIUnionRequired":"OospermForm"
+            },
+            "BBT":{
+                "Type":"DateTime",
+                "ShowType":"DateTime",
+                "Required":false,
+                "Desc":"BBTDesc",
+                "IsShow":"GestationalAgeOrigin.BBT",
+                "MethodName":"GetRecordDateAsync",
+                "APIUnionRequired":"BBT"
+            },
+            "LMP":{
+                "Type":"DateTime",
+                "ShowType":"DateTime",
+                "Required":false,
+                "Desc":"LMPDesc",
+                "IsShow":"GestationalAgeOrigin.LMP",
+                "MethodName":"GetRecordDateAsync",
+                "APIUnionRequired":"LMP"
+            },
+            "GestationalAge":{
+                "Type":"int",
+                "ShowType":"WeekAndDay",
+                "Required":false,
+                "Desc":"GestationalAgeDesc",
+                "MethodName":"GetRecordDateAsync",
+                "APIUnionRequired":"GestationalAge"
+            },
+            "EstimateDueDate":{
+                "Type":"DateTime",
+                "ShowType":"DateTime",
+                "Required":false,
+                "Desc":"EstimateDueDateDesc",
+                "MethodName":"GetRecordDateAsync",
+                "APIUnionRequired":"EstimateDueDate"
+            },
+            "FetusNumber":{
+                "Type":"int",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"FetusNumberDesc"
+            },
+            "Gravida":{
+                "Type":"int",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"GravidaDesc"
+            },
+            "Para":{
+                "Type":"int",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"ParaDesc"
+            },
+            "AB":{
+                "Type":"int",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"ABDesc"
+            },
+            "Ectopic":{
+                "Type":"string",
+                "ShowType":"input",
+                "Required":false,
+                "Desc":"EctopicDesc"
             }
         },
-        "Gynaecology": {
-            "AB": {
-                "Type": "int",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "ABDesc"
-            },
-            "Ectopic": {
-                "Type": "string",
-                "ShowType": "input",
-                "Required": false,
-                "Desc": "EctopicDesc"
-            },
-            "Gravida": {
-                "Type": "int",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "GravidaDesc"
-            },
-            "LMP": {
-                "Type": "DateTime",
-                "ShowType": "DateTime",
-                "Required": false,
-                "Desc": "LMPDesc"
-            },
-            "Para": {
-                "Type": "int",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "ParaDesc"
+        "Gynaecology":{
+            "AB":{
+                "Type":"int",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"ABDesc"
+            },
+            "Ectopic":{
+                "Type":"string",
+                "ShowType":"input",
+                "Required":false,
+                "Desc":"EctopicDesc"
+            },
+            "Gravida":{
+                "Type":"int",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"GravidaDesc"
+            },
+            "LMP":{
+                "Type":"DateTime",
+                "ShowType":"DateTime",
+                "Required":false,
+                "Desc":"LMPDesc"
+            },
+            "Para":{
+                "Type":"int",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"ParaDesc"
             }
         },
-        "Urology": {
-            "PPSACoefficient": {
-                "Type": "double",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "UrologyDesc"
-            },
-            "PSA": {
-                "Type": "double",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "PSADesc"
+        "Urology":{
+            "PPSACoefficient":{
+                "Type":"double",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"UrologyDesc"
+            },
+            "PSA":{
+                "Type":"double",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"PSADesc"
             }
         },
-        "Heart": {
-            "HighPR": {
-                "Type": "int",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "HighPRDesc"
-            },
-            "LowPR": {
-                "Type": "int",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "LowPRDesc"
-            },
-            "HR": {
-                "Type": "int",
-                "ShowType": "number",
-                "Required": false,
-                "Desc": "HRDesc"
+        "Heart":{
+            "HighPR":{
+                "Type":"int",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"HighPRDesc",
+                "Unit":"mmHg"
+            },
+            "LowPR":{
+                "Type":"int",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"LowPRDesc",
+                "Unit":"mmHg"
+            },
+            "HR":{
+                "Type":"int",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"HRDesc",
+                "Unit":"bpm"
+            }
+        }
+    },
+    "AnimalExamInfo":{
+        "BaseInfo":{
+            "Operator":{
+                "Type":"string",
+                "ShowType":"text",
+                "Required":false,
+                "Desc":"OperatorDesc"
+            },
+            "AttendingDoctor":{
+                "Type":"string",
+                "ShowType":"text",
+                "Required":false,
+                "Desc":"AttendingDoctorDesc"
+            },
+            "RefDr":{
+                "Type":"string",
+                "ShowType":"text",
+                "Required":false,
+                "Desc":"RefDrDesc"
+            }
+        },
+        "Routine":{
+            "Weight":{
+                "Type":"double",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"WeightDesc",
+                "Unit":"kg"
+            },
+            "Height":{
+                "Type":"double",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"HeightDesc",
+                "Unit":"cm"
+            },
+            "BSA":{
+                "Type":"double",
+                "ShowType":"number",
+                "Required":false,
+                "Desc":"BSADesc",
+                "Unit":"m2",
+                "Formula":{
+                    "Canidae":"0.007184*(Weight^0.425)*(Height^0.725)",
+                    "Felidae":"0.1*Weight^0.667"
+                }
             }
         }
     }

+ 102 - 0
src/WingApplication.cs

@@ -0,0 +1,102 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using JsonRpcLite.InProcess;
+using JsonRpcLite.Network;
+using JsonRpcLite.Rpc;
+using WingServerCommon.Service;
+using WingServerCommon.Log;
+using WingServerCommon.Config;
+using WingServerCommon.Config.Parameters;
+
+namespace WingCloudServer
+{
+    internal class WingApplication
+    {
+        private WingServer _server;       
+        public WingApplication()
+        {
+           InitilizeLogger();   
+
+           LoadResources();
+        }
+
+        void InitilizeLogger()
+        {
+             var logEngine = new ServerLoggerEngine();
+            var debugMode = ConfigurationManager.LogSettings.DebugMode;
+            Logger.Debug = debugMode;
+            Logger.RegisterEngine(logEngine);
+            Logger.WriteLineInfo("The first log info");
+            Logger.WriteLineDebug($"Log is set to debug model {debugMode}");
+            
+            JsonRpcLite.Log.Logger.DebugMode = debugMode;
+            JsonRpcLite.Log.Logger.Writer = new JsonRpcLiteLogWriter();      
+        }
+
+        void LoadResources()
+        {
+            //TODO load some grobal settings 
+            /// language resources
+            /// others
+        }
+
+        /// <summary>
+        /// Start server to load all service
+        /// </summary>
+        internal void Run()
+        {    
+            try
+            {
+                _server = new WingServer(ConfigurationManager.Host);
+                _server.Start();    
+
+                Logger.WriteLineInfo($"Server listening on {ConfigurationManager.Host} .");
+
+                string readStr = Console.ReadLine();
+                while (readStr.ToUpper() != "Q")
+                {
+                    readStr = Console.ReadLine();
+                }
+                _server.Stop();       
+
+            }   
+            catch(Exception ex)
+            {
+                Logger.WriteLineError($"App run exception:{ex}");
+            }               
+        }                
+
+        /// <summary>
+        /// JsonRpcLite Log Writer implementation
+        /// </summary>    
+        private class JsonRpcLiteLogWriter : JsonRpcLite.Log.ILogWriter
+        {
+            public void WriteDebug(string message)
+            {
+                Logger.WriteLineDebug(message);
+            }
+
+            public void WriteError(string message)
+            {
+                Logger.WriteLineError(message);
+            }
+
+            public void WriteInfo(string message)
+            {
+                Logger.WriteLineInfo(message);
+            }
+
+            public void WriteVerbose(string message)
+            {
+                Logger.WriteLineVerbose(message);
+            }
+
+            public void WriteWarning(string message)
+            {
+                Logger.WriteLineWarn(message);
+            }
+        }
+    }
+}

+ 47 - 0
src/WingApplicationBuilder.cs

@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using System.Linq;
+using JsonRpcLite.InProcess;
+using JsonRpcLite.Network;
+using JsonRpcLite.Rpc;
+using WingServerCommon.Service;
+using WingServerCommon.Log;
+using WingServerCommon.Config;
+using WingServerCommon.Config.Parameters;
+using System.Runtime.Loader;
+using WingCloudServer.Loader;
+
+namespace WingCloudServer
+{
+    internal class WingApplicationBuilder
+    {       
+        public WingApplicationBuilder(string[] args)
+        {  
+            //TODO args ?  when to use                     
+        }
+
+        /// <summary>
+        /// Start server to load all service
+        /// </summary>
+        internal WingApplication Build()
+        {           
+            //=========================================================================//
+            /// TODO workaround fixed, we need  a better solution
+            AssemblyLoadContext.Default.Resolving += (a,b)=>{
+                //自定义依赖文件存放路径
+                var dependenciesPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Dependencies");
+                return Assembly.LoadFrom(Path.Combine(dependenciesPath, $"{b.Name}.dll"));
+            };
+            //=========================================================================//         
+
+            //启动短信服务 //TODO Why we need sms tool in server ? or move to sms service ?
+            ProcessStarter.StartTool("Sms.Tool"); //Should be actived by deploy service in the future
+            Logger.WriteLineInfo($"Process Sms.Tool started!");    
+
+            var app = new WingApplication();
+            return app;             
+        } 
+    }
+}

+ 3 - 34
src/WingServer.cs

@@ -17,17 +17,14 @@ namespace WingCloudServer
         private JsonRpcServer _rpcHttpServer;
         private JsonRpcServer _rpcInProcessServer;
         private JsonRpcInProcessEngine _inProcessEngine;
-        public WingServer(int port)
+        public WingServer(string host)
         {
-            JsonRpcLite.Log.Logger.DebugMode = Logger.Debug;
-            JsonRpcLite.Log.Logger.Writer = new JsonRpcLiteLogWrite();
-
             _rpcInProcessServer = new JsonRpcServer();
             _inProcessEngine = new JsonRpcInProcessEngine();
             _rpcInProcessServer.UseEngine(_inProcessEngine);
 
             _rpcHttpServer = new JsonRpcServer();
-            var jsonRpcHttpServerEngine = new JsonRpcHttpServerEngine($"http://*:{port}/");
+            var jsonRpcHttpServerEngine = new JsonRpcHttpServerEngine(host);
             _rpcHttpServer.UseEngine(jsonRpcHttpServerEngine);
         }
 
@@ -268,34 +265,6 @@ namespace WingCloudServer
             {
                 Logger.WriteLineError($"InitSkiaSharp error:{ex}");
             }
-        }
-
-        private class JsonRpcLiteLogWrite : JsonRpcLite.Log.ILogWriter
-        {
-            public void WriteDebug(string message)
-            {
-                Logger.WriteLineDebug(message);
-            }
-
-            public void WriteError(string message)
-            {
-                Logger.WriteLineError(message);
-            }
-
-            public void WriteInfo(string message)
-            {
-                Logger.WriteLineInfo(message);
-            }
-
-            public void WriteVerbose(string message)
-            {
-                Logger.WriteLineVerbose(message);
-            }
-
-            public void WriteWarning(string message)
-            {
-                Logger.WriteLineWarn(message);
-            }
-        }
+        }       
     }
 }

+ 0 - 58
src/WingServerCreator.cs

@@ -1,58 +0,0 @@
-using System;
-using WingServerCommon.Log;
-using WingServerCommon.Config;
-using WingCloudServer.Loader;
-
-namespace WingCloudServer
-{
-    internal class WingServerCreator
-    {
-        private static WingServer _wingServer;
-        private WingServerCreator(){}
-        public static void Create()
-        {
-            var logEngine = new ServerLoggerEngine();
-            var debugMode = ConfigurationManager.LogSettings.DebugMode;
-            Logger.Debug = debugMode;
-            Logger.RegisterEngine(logEngine);
-
-            Logger.WriteLineDebug($"Log is set to debug model {debugMode}");
-
-            if (!StartServer())
-            {
-                Console.WriteLine("The server is abnormal, please reboot server!");
-                //Task.Delay(5000).Wait();
-            }
-        }
-        private static bool StartServer()
-        {
-            try
-            {
-                Logger.WriteLineInfo($"Starting Server");
-
-                //启动短信服务
-                ProcessStarter.StartTool("Sms.Tool"); //Should be actived by deploy service in the future
-                Logger.WriteLineInfo($"Process Sms.Tool started!");
-
-                var rpcServerPort = ConfigurationManager.ServerGatewayPort;
-                _wingServer = new WingServer(rpcServerPort);
-                _wingServer.Start();
-
-                Logger.WriteLineInfo($"Server is running on port {rpcServerPort}!");
-
-                string readStr = Console.ReadLine();
-                while (readStr.ToUpper() != "Q")
-                {
-                    readStr = Console.ReadLine();
-                }
-                _wingServer.Stop();
-                return true;
-            }
-            catch (Exception ex)
-            {
-                Logger.WriteLineError($"Applaction exception {ex} exit,reboot now!");
-                return false;
-            }
-        }
-    }          
-}

+ 1 - 1
src/appsettings.json

@@ -3,7 +3,7 @@
     "Version":"1.0.0.0"
   },
   "Gateway":{
-    "port": 80
+    "Host": "http://*:80/"
   },
   "Log":{
     "Level": "info",