Pārlūkot izejas kodu

Закончен испорт

21IS02 6 mēneši atpakaļ
vecāks
revīzija
2ba87909d9

+ 6 - 0
src/DontHarm.sln

@@ -5,6 +5,8 @@ VisualStudioVersion = 17.5.33516.290
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DontHarmDesktop", "DontHarmDesktop\DontHarmDesktop.csproj", "{A57BB27A-2EF5-450A-97C5-F0BF85C14CB0}"
 EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DontHarmImport", "DontHarmImport\DontHarmImport.csproj", "{1D8B065B-16BC-45A8-BBC5-907DFC9E9FBA}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -15,6 +17,10 @@ Global
 		{A57BB27A-2EF5-450A-97C5-F0BF85C14CB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{A57BB27A-2EF5-450A-97C5-F0BF85C14CB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{A57BB27A-2EF5-450A-97C5-F0BF85C14CB0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1D8B065B-16BC-45A8-BBC5-907DFC9E9FBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1D8B065B-16BC-45A8-BBC5-907DFC9E9FBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1D8B065B-16BC-45A8-BBC5-907DFC9E9FBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{1D8B065B-16BC-45A8-BBC5-907DFC9E9FBA}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 4 - 0
src/DontHarmDesktop/DontHarmDesktop.csproj.user

@@ -3,4 +3,8 @@
   <PropertyGroup>
     <ProjectView>ProjectFiles</ProjectView>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
+    <StartArguments>
+    </StartArguments>
+  </PropertyGroup>
 </Project>

+ 53 - 9
src/DontHarmImport/Program.cs

@@ -1,16 +1,32 @@
 // Программа генерации кода SQL для импорта данных
 // Вызывается через консоль, например DontHarmImport.exe <путь к файлу услуг> <путь к файлу пользователей>
 
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Json;
 using System.Text;
+using System.Text.Json;
 
 namespace DontHarmImport
 {
-    internal class Program
+    /// <summary>
+    /// JSON представление в файле users.csv
+    /// </summary>
+    [DataContractAttribute]
+    class Service
+    {
+        [DataMember()]
+        public int code { get; set; }
+    }
+
+    class Program
     {
         static void Main(string[] args)
         {
             var scrServices = ImportServices(args[0]);
             var scrUsers = ImportUsers(args[1]);
+
+            Console.WriteLine(scrServices);
+            Console.WriteLine(scrUsers);
         }
 
         static string ImportServices(string path)
@@ -55,19 +71,47 @@ namespace DontHarmImport
                     continue;
                 }
 
-                var parts = line.Split(";");
-                var nameParts = parts[1].Split(",");
-                var login = parts[2];
-                var password = parts[3];
+                var parts       = line.Split(";");
+                var nameParts   = parts[1].Split(" ");
+                var login       = parts[2];
+                var password    = parts[3];
+                var userType    = parts[7];
+                var surname     = nameParts[1];
+                var name        = nameParts[0];
+                var servicesRaw = parts[6];
 
+                // Создание пользователя
                 script.AppendLine(
                     string.Format(
-                        "INSERT INTO services (name, price, code) VALUES ('{0}', {1}, {2});",
-                        parts[1],
-                        parts[2],
-                        parts[0]
+                        "INSERT INTO users (role,login,password,surname,name) VALUES ({0}, '{1}', '{2}', '{3}', '{4}')",
+                        userType,
+                        login,
+                        password,
+                        surname,
+                        name
                     )
                 );
+
+                // Выбор id этого пользователя
+                script.AppendLine("SELECT @inserted_row_id = SCOPE_IDENTITY();");
+
+                // Добавление услуг пользователя
+                string jsonServices = servicesRaw.Substring(1, servicesRaw.Length - 2);
+                using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonServices)))
+                {
+                    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<Service>));
+                    List<Service> result = (List<Service>)serializer.ReadObject(stream);
+
+                    foreach (var service in result)
+                    {
+                        script.AppendLine(
+                            string.Format(
+                                "INTO employee_services (service_id, user_id) VALUES ((SELECT id FROM services WHERE code={0}), @inserted_row_id);",
+                                service.code
+                            )
+                        );
+                    }
+                }
             }
 
             return script.ToString();

+ 8 - 0
src/DontHarmImport/Properties/launchSettings.json

@@ -0,0 +1,8 @@
+{
+  "profiles": {
+    "DontHarmImport": {
+      "commandName": "Project",
+      "commandLineArgs": "C:\\Users\\user\\source\\DontHarm\\tools\\services_import\\services.csv\r\nC:\\Users\\user\\source\\DontHarm\\tools\\users_import\\users.csv"
+    }
+  }
+}