Forráskód Böngészése

处理电子身份证和监护人完善,

CrazyIter_Bin 3 éve
szülő
commit
127b774534

+ 4 - 0
TEAMModelOS.SDK/Models/Cosmos/Student/Student.cs

@@ -30,6 +30,10 @@ namespace TEAMModelOS.SDK.Models
         /// 性别 m( male,男) f (female 女)  n(secret 保密) 
         /// </summary>
         public string gender { get; set; }
+        /// <summary>
+        /// 电子学生证
+        /// </summary>
+        public string imei { get; set; }
         //补充留级信息
         //0在校,1留级,2退学 3毕业
         public int status { get; set; } = 0;

+ 2 - 1
TEAMModelOS.SDK/Models/Service/GroupListService.cs

@@ -553,7 +553,8 @@ namespace TEAMModelOS.SDK
                         }
                         string insql = string.Join(",", classes.Select(x => $"'{x}'"));
                         //搜寻没有关联学生的行政班
-                        await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<GroupListDto>(queryText: $"select   c.id,c.code,c.name,c.no,c.periodId,c.scope,c.school,c.creatorId,c.type,c.year,c.tcount,c.scount,c.teacher.id as leader from c where c.id in ({insql})",
+                        await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<GroupListDto>(queryText: 
+                            $"select   c.id,c.code,c.name,c.no,c.periodId,c.scope,c.school,c.creatorId,c.type,c.year,c.tcount,c.scount,c.teacher.id as leader from c where c.id in ({insql})",
                                 requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Class-{school}") }))
                         {
                             ///行政班(学生搜寻classId动态返回)class

+ 109 - 15
TEAMModelOS.SDK/Models/Service/StudentService.cs

@@ -478,7 +478,7 @@ namespace TEAMModelOS.SDK
         /// <param name="schoolId"></param>
         /// <param name="students"></param>
         /// <returns></returns>
-        private static (Dictionary<string, (string name, string no, int year, string salt, string pw, string classNo, string className, string periodId, int classYear, string guardian, string gName, string gPhone)> studs,
+        private static (Dictionary<string, (string name, string no, int year, string salt, string pw, string classNo, string className, string periodId, int classYear, string guardian, string gName, string gPhone,string imei, List<StudentGuardian> guardians)> studs,
             Dictionary<string, (string className, string periodId, int year, string no)> classInfo,
             Dictionary<string, List<(string id, string no)>> classStudNo,
             List<string> errorYear,
@@ -487,8 +487,8 @@ namespace TEAMModelOS.SDK
             //批量匯入 檢查輸入數據 確認座號 確認教室(創建教室) 確認學生存不存在或是要不要更新
 
             //存放輸入的學生資訊 key:stud id value:學生詳細資料
-            Dictionary<string, (string name, string no, int year, string salt, string pw, string classNo, string className, string periodId, int classYear,   string guardian, string gName, string gPhone) > dicStuds =
-                new Dictionary<string, (string name, string no, int year, string salt, string pw, string classNo, string className, string periodId, int classYear, string guardian, string gName, string gPhone)>();
+            Dictionary<string, (string name, string no, int year, string salt, string pw, string classNo, string className, string periodId, int classYear,   string guardian, string gName, string gPhone, string imei, List<StudentGuardian> guardians) > dicStuds =
+                new Dictionary<string, (string name, string no, int year, string salt, string pw, string classNo, string className, string periodId, int classYear, string guardian, string gName, string gPhone, string imei, List<StudentGuardian> guardians)>();
 
             //存放教室資訊用 key:classNo value:className
             Dictionary<string, (string className, string periodId, int year, string classNo)> dicClassInfo = new Dictionary<string, (string className, string periodId, int year, string classNo)>();
@@ -524,7 +524,7 @@ namespace TEAMModelOS.SDK
                         dicStuds.Remove(id);
                     }
 
-                    (string name, string no, int year, string salt, string pw, string classNo, string className, string periodId, int classYear,string guardian,string gName,string gPhone) studentInfo = (null, null, 0, null, null, null, null, null, 0,null,null, null);
+                    (string name, string no, int year, string salt, string pw, string classNo, string className, string periodId, int classYear, string guardian, string gName, string gPhone, string imei, List<StudentGuardian> guardians) studentInfo = (null, null, 0, null, null, null, null, null, 0, null, null, null, null, null) ;
 
                     if (student.TryGetProperty("name", out var tmpName) && !string.IsNullOrWhiteSpace(tmpName.GetString())) studentInfo.name = tmpName.GetString();
 
@@ -576,7 +576,7 @@ namespace TEAMModelOS.SDK
                             { dicClassInfo.Add($"{studentInfo.periodId}_{year}_{tmpClassNo.GetString()}", (tmpClassName.GetString(), studentInfo.periodId, year, tmpClassNo.GetString())); }
                         }
                     }
-
+                    ///导入的时候
                     if (student.TryGetProperty("guardian", out var guardian) && !string.IsNullOrWhiteSpace($"{guardian}")) {
                         studentInfo.guardian =$"{guardian}";
                         student.TryGetProperty("gName", out var gName);
@@ -584,6 +584,12 @@ namespace TEAMModelOS.SDK
                         studentInfo.gName = $"{gName}";
                         studentInfo.gPhone = $"{gPhone}";
                     }
+                    //更新的时候
+                    if (student.TryGetProperty("guardians", out var _guardians) && _guardians.ValueKind.Equals(JsonValueKind.Array)) {
+                        List<StudentGuardian> guardians = _guardians.Deserialize<List<StudentGuardian>>();
+                        studentInfo.guardians = guardians;
+                    }
+                    if (student.TryGetProperty("imei", out var tmpImei) && !string.IsNullOrWhiteSpace($"{tmpImei}")) studentInfo.imei = tmpImei.GetString();
                     //將最後結果加到字典內
                     dicStuds.Add(id, studentInfo);
                 }
@@ -780,6 +786,14 @@ namespace TEAMModelOS.SDK
                         tmpStudInfo.gradeId = classNoId[stud.Value.classNo + "_" + stud.Value.classYear].gradeId;
                         tmpStudInfo.periodId = classNoId[stud.Value.classNo + "_" + stud.Value.classYear].periodId;
                     }
+
+                    if (!string.IsNullOrWhiteSpace(stud.Value.imei))
+                    {
+                        writerNew.WriteString("imei", stud.Value.imei);
+                    }
+                    else {
+                        writerNew.WriteNull("imei");
+                    }
                     if (string.IsNullOrWhiteSpace(stud.Value.no))
                     {
                         writerNew.WriteNull("no");
@@ -802,7 +816,7 @@ namespace TEAMModelOS.SDK
                         writerNew.WriteEndObject();
                         writerNew.WriteEndArray();
                     }
-
+                    
                     writerNew.WriteEndObject();
                     writerNew.Flush();
 
@@ -842,6 +856,10 @@ namespace TEAMModelOS.SDK
                             {
                                 student.periodId = stud.Value.periodId;
                             }
+                            if (!string.IsNullOrWhiteSpace(stud.Value.imei))
+                            {
+                                student.imei = stud.Value.imei;
+                            }
                             if (!isUpPwDone)
                             {
                                 student.pw = stud.Value.pw;
@@ -861,8 +879,10 @@ namespace TEAMModelOS.SDK
                                     student.guardians.Add(new StudentGuardian { mobile = stud.Value.gPhone, name = stud.Value.gName, relation = stud.Value.guardian });
                                 }
                             }
+                            if (stud.Value.guardians.IsNotEmpty()) {
+                                student.guardians=stud.Value.guardians;
+                            }
                             await cosmosContainer.ReplaceItemAsync(student, stud.Key, new PartitionKey($"Base-{schoolId}"));
-
                         }
                         catch (CosmosException ex)
                         {
@@ -933,7 +953,8 @@ namespace TEAMModelOS.SDK
                 writer.WriteNull("mail");
                 writer.WriteNull("mobile");
                 writer.WriteNull("country");
-             
+                if (string.IsNullOrWhiteSpace(studCreateInfo.imei)) writer.WriteNull("imei");
+                else writer.WriteString("periodId", studCreateInfo.imei);
                 //Password,若沒給則使用學號當密碼
                 string salt = Utils.CreatSaltString(8);
                 string hashPw = string.IsNullOrWhiteSpace(studCreateInfo.pw)
@@ -956,7 +977,27 @@ namespace TEAMModelOS.SDK
                 }
                 writer.WriteNull("groupId");
                 writer.WriteNull("groupName");
+                if (studCreateInfo.guardians.IsNotEmpty())
+                {
+                    writer.WriteStartArray("guardians");
 
+                    foreach (var guardian in studCreateInfo.guardians)
+                    {
+                        writer.WriteStartObject();
+                        writer.WriteString("relation", guardian.relation);
+                        writer.WriteString("name", guardian.name);
+                        writer.WriteString("mobile", guardian.mobile);
+                        writer.WriteEndObject();
+                    }
+                    writer.WriteEndArray();
+                }
+                else
+                {
+                    writer.WriteStartArray("guardians");
+                    writer.WriteStartObject();
+                    writer.WriteEndObject();
+                    writer.WriteEndArray();
+                }
                 writer.WriteEndObject();
                 writer.Flush();
 
@@ -1701,7 +1742,7 @@ namespace TEAMModelOS.SDK
 
                 //Key:id Value:學生基本資訊
                 var studentInfos
-                    = new Dictionary<string, (string salt, string pw, string name, int year, string picture, string gender, string mail, string mobile, string classId, string no, string periodId, string irs)>();
+                    = new Dictionary<string, (string salt, string pw, string name, int year, string picture, string gender, string mail, string mobile, string classId, string no, string periodId, string irs,string imei, List<StudentGuardian> guardians)>();
                 //用於進行座號是否重複查詢時使用
                 var classStuds
                     = new Dictionary<string, List<(string id, string salt, string pw, string name, int year, string picture, string gender, string mail, string mobile, string classId, string no, string periodId)>>();
@@ -1736,8 +1777,9 @@ namespace TEAMModelOS.SDK
                                    classId = null,
                                    periodId = null,
                                    irs = null,
+                                   imei = null,
                                    no = null;
-
+                            List<StudentGuardian> guardians = null;
                             int year = 0;
                             //有給pw欄位才進行處理
                             if (student.TryGetProperty("pw", out var tmpPw))
@@ -1764,13 +1806,17 @@ namespace TEAMModelOS.SDK
                             if (student.TryGetProperty("year", out var tmpYear)) year = tmpYear.GetInt32();
                             if (student.TryGetProperty("periodId", out var tmpperiodId)) periodId = tmpperiodId.GetString();
                             if (student.TryGetProperty("irs", out var tmpIrs)) irs = tmpIrs.GetString();
+                            if (student.TryGetProperty("imei", out var tmpImei)) imei = tmpImei.GetString();
                             if (student.TryGetProperty("classId", out var tmpclassId)) classId = tmpclassId.GetString();
                             else
                             {
                                 errorClassId.Add(id.GetString());
                                 continue;
                             }
-
+                            if (student.TryGetProperty("guardians", out var _guardians) && _guardians.ValueKind.Equals(JsonValueKind.Array) ) 
+                            {
+                                guardians = _guardians.Deserialize<List<StudentGuardian>>();
+                            }
                             //如果有給該欄位,且是給空的,代表要清空
                             if (student.TryGetProperty("no", out var tmpNo)) no = tmpNo.GetString();
 
@@ -1797,7 +1843,7 @@ namespace TEAMModelOS.SDK
                                 }
 
                                 //picture,mail,mobile暫不支持批量更新
-                                studentInfos.Add(id.GetString(), (salt, pw, name, year, null, gender, null, null, classId, no, periodId, irs));
+                                studentInfos.Add(id.GetString(), (salt, pw, name, year, null, gender, null, null, classId, no, periodId, irs,imei, guardians));
 
                                 //先將id加進去後面再做刪除動作
                                 nonexistentIds.Add(id.GetString());
@@ -1887,8 +1933,8 @@ namespace TEAMModelOS.SDK
                                     account.TryGetProperty("irs", out JsonElement irsjson);
                                     string irs = $"{irsjson}";
                                     //用來記錄最後更改完的資料
-                                    (string salt, string pw, string name, int year, string picture, string gender, string mail, string mobile, string classId, string no, string periodId, string irs) tmpData
-                                     = (studentInfos[id].salt, studentInfos[id].pw, studentInfos[id].name, studentInfos[id].year, studentInfos[id].picture, studentInfos[id].gender, studentInfos[id].mail, studentInfos[id].mobile, studentInfos[id].classId, studentInfos[id].no, studentInfos[id].periodId, studentInfos[id].irs);
+                                    (string salt, string pw, string name, int year, string picture, string gender, string mail, string mobile, string classId, string no, string periodId, string irs , List<StudentGuardian> guardians) tmpData
+                                     = (studentInfos[id].salt, studentInfos[id].pw, studentInfos[id].name, studentInfos[id].year, studentInfos[id].picture, studentInfos[id].gender, studentInfos[id].mail, studentInfos[id].mobile, studentInfos[id].classId, studentInfos[id].no, studentInfos[id].periodId, studentInfos[id].irs, studentInfos[id]. guardians);
 
                                     bool isUpPwDone = false;
                                     bool isWrong = false;
@@ -2027,6 +2073,23 @@ namespace TEAMModelOS.SDK
                                                     writer.WriteString("irs", studentInfos[id].irs);
                                                 }
                                                 break;
+                                            case bool _ when element.Name.Equals("imei", StringComparison.Ordinal):
+                                                //移除座號的話會給空的
+                                                if (studentInfos[id].imei != null && studentInfos[id].imei.Length == 0)
+                                                {
+                                                    writer.WriteNull("imei");
+                                                    tmpData.irs = null;
+                                                }
+                                                else if (string.IsNullOrWhiteSpace(studentInfos[id].imei))
+                                                {
+                                                    element.WriteTo(writer);
+                                                    tmpData.irs = element.Value.GetString();
+                                                }
+                                                else
+                                                {
+                                                    writer.WriteString("imei", studentInfos[id].imei);
+                                                }
+                                                break;
                                             case bool _ when element.Name.StartsWith("_", StringComparison.Ordinal):
                                                 break;
                                             default:
@@ -2045,12 +2108,38 @@ namespace TEAMModelOS.SDK
                                     {
                                         writer.WriteString("irs", studentInfos[id].irs);
                                     }
+                                    if (!account.TryGetProperty("imei", out JsonElement _imei) || _imei.ValueKind.Equals(JsonValueKind.Undefined))
+                                    {
+                                        writer.WriteString("imei", studentInfos[id].imei);
+                                    }
                                     //若密碼和鹽沒有更新,就把舊的資料寫回去
                                     if (!isUpPwDone)
                                     {
                                         writer.WriteString("salt", account.GetProperty("salt").GetString());
                                         writer.WriteString("pw", account.GetProperty("pw").GetString());
                                     }
+                                    if (studentInfos[id].guardians.IsNotEmpty())
+                                    {
+                                        writer.WriteStartArray("guardians");
+                                     
+                                        foreach (var guardian in studentInfos[id].guardians) {
+                                            writer.WriteStartObject();
+                                            writer.WriteString("relation", guardian.relation);
+                                            writer.WriteString("name", guardian.name);
+                                            writer.WriteString("mobile", guardian.mobile);
+                                            writer.WriteString("mail", guardian.mail);
+                                            writer.WriteString("picture", guardian.picture);
+                                            writer.WriteString("tmdid", guardian.tmdid);
+                                            writer.WriteEndObject();
+                                        }
+                                        writer.WriteEndArray();
+                                    }
+                                    else {
+                                        writer.WriteStartArray("guardians");
+                                        writer.WriteStartObject();
+                                        writer.WriteEndObject();
+                                        writer.WriteEndArray();
+                                    }
                                     writer.WriteEndObject();
                                     writer.Flush();
 
@@ -2229,7 +2318,7 @@ namespace TEAMModelOS.SDK
 
         public struct studCreateInfo
         {
-            public studCreateInfo(string id, string name, string gender, int year, string pw, string classId, string no, string periodId)
+            public studCreateInfo(string id, string name, string gender, int year, string pw, string classId, string no, string periodId,string imei, List<StudentGuardian> guardians)
             {
                 this.id = id;
                 this.name = name;
@@ -2239,6 +2328,9 @@ namespace TEAMModelOS.SDK
                 this.classId = classId;
                 this.no = no;
                 this.periodId = periodId;
+                this.imei = imei;
+                this.guardians = guardians;
+
             }
             public string id { get; }
             public string name { get; }
@@ -2248,6 +2340,8 @@ namespace TEAMModelOS.SDK
             public string classId { get; }
             public string no { get; }
             public string periodId { get; set; }
+            public string imei { get; set; }
+            public List<StudentGuardian> guardians { get; set; }
         }
     }
 }

+ 7 - 2
TEAMModelOS/Controllers/Student/StudentController.cs

@@ -88,7 +88,8 @@ namespace TEAMModelOS.Controllers
                         while (importStuds.MoveNext())
                         {
                             JsonElement currStud = importStuds.Current;
-                            string id = null, name = null, pw = null, no = null, classId = null, periodId = null;
+                            string id = null, name = null, pw = null, no = null, classId = null, periodId = null, imei = null ;
+                            List<StudentGuardian> guardians = null;
                             int year = 0;
                             //讀取輸入的資料
                             if (!currStud.TryGetProperty("id", out var tmpId) || !currStud.TryGetProperty("name", out var tmpName)) continue;
@@ -98,12 +99,16 @@ namespace TEAMModelOS.Controllers
                             if (currStud.TryGetProperty("year", out var tmpYear)) year = tmpYear.GetInt32();
                             if (currStud.TryGetProperty("no", out var tmpNo)) no = tmpNo.GetString();
                             if (currStud.TryGetProperty("classId", out var tmpClassId)) classId = tmpClassId.GetString();
+                            if (currStud.TryGetProperty("imei", out var tmpImei)) imei = $"{tmpImei}";
+                            if (currStud.TryGetProperty("guardians", out var tmpGuardians)) {
+                                guardians = tmpGuardians.Deserialize<List<StudentGuardian>>();
+                            }
                             //要檢查座號使否已被使用
                             var existNo = await StudentService.checkStudNo(_azureCosmos, _dingDing, _option, schoolId.GetString(), classId, new List<string>() { id });
                             if (existNo.Count != 0) return this.Ok(new { code = $"Base-{schoolId.GetString()}", existNo = existNo.Select(o => o.id).ToList() });
                             if (currStud.TryGetProperty("periodId", out var tempPeriodId)) periodId = tempPeriodId.GetString();
                             //建立學生
-                            studCreateInfo studCreateInfo = new studCreateInfo(id, name, "M", year, pw, classId, no, periodId);
+                            studCreateInfo studCreateInfo = new studCreateInfo(id, name, "M", year, pw, classId, no, periodId,imei,guardians);
                             var isCreateSuc = await createStudent(_azureCosmos, _dingDing, _option, schoolId.GetString(), studCreateInfo);
 
                             if (isCreateSuc)