Ver código fonte

Merge branch 'develop5.0-tmd' of http://52.130.252.100:10000/TEAMMODEL/TEAMModelOS into develop5.0-tmd

XW 3 anos atrás
pai
commit
31bb23793e

+ 15 - 0
TEAMModeBI/Controllers/BISchool/BatchAreaController.cs

@@ -468,6 +468,21 @@ namespace TEAMModeBI.Controllers.BISchool
                 if (!jsonElement.TryGetProperty("tmdId", out JsonElement _tmdId)) return BadRequest();
                 if (!jsonElement.TryGetProperty("tmdName", out JsonElement _tmdName)) return BadRequest();
 
+                //保存操作记录
+                BIOperateLog bIOperateLog = new BIOperateLog
+                {
+                    PartitionKey = "BILogging",
+                    RowKey = "BIOperate",
+                    tmdId = $"{_tmdId}",
+                    tmdName = $"{_tmdName}",
+                    operateDescribe = $"{_tmdName}操作切换能力点",
+                    visitApi = "dd/cut-standard",
+                    operateTime = DateTime.Now
+                };
+
+                //await _azureStorage.GetBlobServiceClient("BIOperateLog")
+                await _azureStorage.Save<BIOperateLog>(bIOperateLog);
+
                 var cosmosClient = _azureCosmos.GetCosmosClient();
 
                 List<string> abilityIds = new List<string>();  //册别的ID集合

+ 1 - 1
TEAMModelFunction/MonitorServicesBus.cs

@@ -502,7 +502,7 @@ namespace TEAMModelFunction
             var client = _azureCosmos.GetCosmosClient();
             try
             {
-                await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-名单成员变更-GroupChange\n{msg}", GroupNames.成都开发測試群組);
+                //await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-名单成员变更-GroupChange\n{msg}", GroupNames.成都开发測試群組);
                 var jsonMsg = JsonDocument.Parse(msg);
                 GroupChange groupChange = msg.ToObject<GroupChange>();
                 //名单变动修改学生课程关联信息

+ 42 - 0
TEAMModelOS.SDK/Models/Cosmos/BI/BIOperateLog.cs

@@ -0,0 +1,42 @@
+using Microsoft.Azure.Cosmos.Table;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using TEAMModelOS.SDK.Context.Attributes.Azure;
+
+namespace TEAMModelOS.SDK.Models.Cosmos.BI
+{
+    [TableName(Name = "BIOperateLog")]
+    public class BIOperateLog: TableEntity
+    {
+        /// <summary>
+        /// 醍摩豆ID
+        /// </summary>
+        public string tmdId { get; set; }
+
+        /// <summary>
+        /// 醍摩豆名称
+        /// </summary>
+        public string tmdName { get; set; }
+
+        /// <summary>
+        /// 操作描述
+        /// </summary>
+        public string operateDescribe { get; set; }
+
+        /// <summary>
+        /// 访问的Api
+        /// </summary>
+        public string visitApi { get; set; }
+
+        /// <summary>
+        /// 操作时间
+        /// </summary>
+        public DateTime operateTime { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public long id { get; set; } = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+    }
+}

+ 6 - 5
TEAMModelOS.SDK/Models/Service/StatisticsService.cs

@@ -468,13 +468,14 @@ namespace TEAMModelOS.SDK
                 if (activities.IsNotEmpty())
                 {
                     insql = $" where  c.id in ({string.Join(",", activities.Select(o => $"'{o.id}'"))})";
+                    await foreach (var item in client.GetContainer("TEAMModelOS", "Common")
+                    .GetItemQueryIterator<Study>(queryText: $"select value(c) from c {insql} and c.owner<>'area'   ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Study-{_school}") }))
+                    {
+                        studies.Add(item);
+                    }
 
                 }
-                await foreach (var item in client.GetContainer("TEAMModelOS", "Common")
-                .GetItemQueryIterator<Study>(queryText: $"select value(c) from c {insql} and c.owner<>'area'   ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Study-{_school}") }))
-                {
-                    studies.Add(item);
-                }
+                
             }
            
             List<StudyRecord> studyRecords = new List<StudyRecord>();

+ 8 - 1
TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.less

@@ -225,7 +225,9 @@
 
 // CourseClassroom.less
 .item-tools{
-    opacity:0;
+    // opacity:0;
+    display: none;
+    color: #2d8cf0;
 }
 .qr-code-wrap {
     position: fixed;
@@ -412,4 +414,9 @@
 }
 .system-classroom-table{
     width: 100%;
+}
+.reset-no-btn{
+    display: inline-block;
+    margin-left: 10px;
+    cursor: pointer;
 }

+ 52 - 12
TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.vue

@@ -104,21 +104,15 @@
                                         <PersonalPhoto :name="row.name || ''" :picture="row.picture" />
                                     </template>
                                     <template slot-scope="{ row,index }" slot="no">
-                                        <span>{{row.no || '--'}}</span>
+                                        <span :style="{color:row.no ? '#303030':'red'}">{{row.no || $t('cusMgt.notSet')}}</span>
                                     </template>
                                     <template slot-scope="{ row }" slot="type">
                                         <span>{{row.type === 2 ? $t('cusMgt.schoolType') : $t('cusMgt.tmIDType')}}</span>
                                     </template>
-                                    <template slot-scope="{ row ,index}" slot="action">
-                                        <div class="item-tools" v-if="$access.can('admin.*|student-upd')">
-                                            <Icon type="md-create" size="18" color="white" @click="resetNo(index)" :title="$t('schoolBaseInfo.editSeat')" />
-                                            <Icon type="md-remove-circle" size="18" color="white" style="margin-left:10px" @click="removeStudent(index)" :title="$t('schoolBaseInfo.delStuBtn')" />
-                                        </div>
-                                    </template>
                                     <template slot-scope="{ row,index }" slot="irs">
                                         <span v-show="editIndex !== index" :style="{color:row.irs ? '#303030':'red'}">{{row.irs || $t('cusMgt.notSet')}}</span>
                                         <InputNumber :min="0" v-model="editIrs" v-show="editIndex == index" style="width: 60px;"></InputNumber>
-                                        <Icon type="md-checkmark" v-show="editIndex == index" @click="confirmSetNo()" class="reset-no-btn" />
+                                        <Icon type="md-checkmark" v-show="editIndex == index" @click="confirmSetNo(row,index)" class="reset-no-btn" />
                                         <Icon type="md-close" v-show="editIndex == index" @click="cancelSetNo()" class="reset-no-btn" />
                                     </template>
                                     <template slot-scope="{ row, index }" slot="groupId">
@@ -127,6 +121,12 @@
                                     <template slot-scope="{ row, index }" slot="groupName">
                                         <span>{{row.groupName ? row.groupName : '--'}}</span>
                                     </template>
+                                    <template slot-scope="{ row,index }" slot="action">
+                                        <div class="item-tools">
+                                            <Icon type="md-create" size="18" style="cursor:pointer;margin-left:10px" :title="$t('schoolBaseInfo.noSetLabel')" @click="setNo(row,index)" />
+                                            <!-- <Icon type="md-trash" size="18" style="cursor:pointer;margin-left:10px" :title="$t('schoolBaseInfo.noSetLabel')" @click="setNo(row,index)" /> -->
+                                        </div>
+                                    </template>
                                 </Table>
                             </vuescroll>
                         </div>
@@ -350,7 +350,7 @@ export default {
             }
         }
         return {
-            editIrs: -1,
+            editIrs: null,
             setIrsStatus: false,
             editIndex: -1,
             removeListStatus: false,
@@ -480,6 +480,11 @@ export default {
                     align: 'center',
                     sortable: true
                 },
+                {
+                    title: ' ',
+                    slot: 'action',
+                    align: 'center'
+                }
             ],
             recordList: [
                 {
@@ -521,7 +526,41 @@ export default {
         }
     },
     methods: {
-
+        confirmSetNo(row, rowIndex) {
+            //检查irs重复
+            let irsRep = this.students.some((item, index) => {
+                return index != rowIndex && item.irs == this.editIrs
+            })
+            if (irsRep) {
+                this.$Message.warning(this.$t('schoolBaseInfo.irsRep'))
+                return
+            }
+            this.editIndex = -1
+            let schoolId = this.$store.state.userInfo.schoolCode
+            row.irs = this.editIrs + ''
+            let data = [row]
+            this.tableLoading = true
+            this.$api.stuAccount.saveAllStudent(schoolId, data).then(
+                res => {
+                    this.$Message.success(this.$t('schoolBaseInfo.updOk'))
+                },
+                err => {
+                    this.$Message.error(this.$t('schoolBaseInfo.updErr'))
+                }
+            ).finally(() => {
+                this.tableLoading = false
+            })
+        },
+        cancelSetNo() {
+            this.editIrs = null
+            this.editIndex = -1
+        },
+        setNo(row, index) {
+            this.editIrs = row.irs
+            this.editIndex = index
+            this.resetNoBef = row.no
+            this.resetIRSBef = row.irs
+        },
         toListMode() {
             this.getCourseList()
             this.isShowSchd = !this.isShowSchd
@@ -1501,7 +1540,6 @@ export default {
             )
         },
         getRecordList() {
-            console.log('读取课堂记录')
             let privateSas = {}
             let blobInfo = this.$store.state.user.userProfile
             privateSas.sas = '?' + blobInfo.blob_sas
@@ -1513,7 +1551,6 @@ export default {
             }).then(
                 res => {
                     let recordList = res.map(item => `${item}Announce.json`)
-                    console.log('课堂记录', recordList)
                 },
                 err => {
                     console.log(err)
@@ -1683,6 +1720,9 @@ export default {
 @import "./MyCourse.less";
 </style>
 <style>
+.ivu-table-row-hover .item-tools {
+    display: inline-block;
+}
 .cus-list-tab .ivu-tabs-bar {
     height: 45px;
 }

+ 13 - 0
TEAMModelOS/ClientApp/src/view/teachermgmt/components/group/Group.less

@@ -186,4 +186,17 @@
     top: 16px;
     size: 16px;
     display: none;
+}
+.edit-group-name{
+    font-size: 12px;
+    color: #2d8cf0;
+    cursor: pointer;
+    position: absolute;
+    margin-top: 4px;
+    margin-left: 5px;
+}
+.rename-input{
+    width: 80%;
+    margin: 30px auto;
+    display: block;
 }

+ 46 - 7
TEAMModelOS/ClientApp/src/view/teachermgmt/components/group/Group.vue

@@ -6,8 +6,11 @@
                     <div class="group-info-wrap">
                         <div class="group-img-start" :style="{backgroundImage:`radial-gradient(${colorList[index % 9]},#fff)`}">
                         </div>
-                        <div style="text-align:center">
-                            <h6 class="group-name">{{item.name}}</h6>
+                        <div style="text-align:center;z-index: 99;">
+                            <h6 class="group-name">
+                                {{item.name}}
+                                <span class="edit-group-name" @click="rename(item.name,index)">修改</span>
+                            </h6>
                             <p class="group-info">
                                 {{$t('teachermgmt.peopleNum')}}
                                 {{item.members.length}}
@@ -29,8 +32,8 @@
                                 <div class="student-info-item" v-for="(teaItem,index) in item.members" :key="index">
                                     <PersonalPhoto :name="teaItem.name" :picture="teaItem.picture"></PersonalPhoto>
                                     <p class="teacher-name">{{`${teaItem.name}(${teaItem.id})`}}</p>
-                                    <Icon type="md-remove-circle" class="remove-member-icon" @click="delMember(item.id,teaItem.id)" :title="$t('teachermgmt.rmvTch')"/>
-                                    <Icon type="md-checkmark" class="remove-member-icon" style="right:30px" @click="setLeader(item.id,teaItem.id)" :title="$t('teachermgmt.setLeader')"/>
+                                    <Icon type="md-remove-circle" class="remove-member-icon" @click="delMember(item.id,teaItem.id)" :title="$t('teachermgmt.rmvTch')" />
+                                    <Icon type="md-checkmark" class="remove-member-icon" style="right:30px" @click="setLeader(item.id,teaItem.id)" :title="$t('teachermgmt.setLeader')" />
                                 </div>
                                 <EmptyData :textContent="$t('teachermgmt.noTeacher')" style="opacity:0.5" v-if="item.members.length == 0"></EmptyData>
                             </Draggable>
@@ -54,6 +57,9 @@
                 </template>
             </Table>
         </Modal>
+        <Modal v-model="editNameStatus" title="修改组名" :closable="false" :loading="modalLoading" @on-ok="confirmRename">
+            <Input v-model="editName" placeholder="修改组名..." class="rename-input" />
+        </Modal>
     </div>
 </template>
 <script>
@@ -66,6 +72,10 @@ export default {
     },
     data() {
         return {
+            modalLoading: true,
+            editNameStatus: false,
+            editName: '',
+            editIndex: -1,
             options: {
                 bar: {
                     opacity: 0.2
@@ -125,6 +135,35 @@ export default {
         }),
     },
     methods: {
+        confirmRename() {
+            if (!this.editName) {
+                this.$Message.warning('请输入组名')
+                this.modalLoading = false
+                setTimeout(() => {
+                    this.modalLoading = true
+                })
+            } else {
+                this.groupList[this.editIndex].name = this.editName
+                this.$api.common.upsertGroupInfo(this.groupList[this.editIndex]).then(
+                    res => {
+                        this.$Message.success('修改成功')
+                    },
+                    err => {
+                        this.$Message.error('修改失败')
+                    }
+                ).finally(() => {
+                    this.editNameStatus = false
+                })
+            }
+        },
+        /**
+         * 修改组名
+         */
+        rename(name, index) {
+            this.editName = name
+            this.editIndex = index
+            this.editNameStatus = true
+        },
         setLeader(groupId, teaId) {
             let gIndex = this.groupList.findIndex(item => {
                 return item.id == groupId
@@ -190,9 +229,9 @@ export default {
             this.$api.common.getGroupListInfo(params).then(
                 res => {
                     if (res && res.groups) {
-                        res.groups.forEach(group=>{
-                            group.members.forEach(teacher=>{
-                                if(teacher.tag === 'leader'){
+                        res.groups.forEach(group => {
+                            group.members.forEach(teacher => {
+                                if (teacher.tag === 'leader') {
                                     group.leader = teacher.name
                                 }
                             })

+ 93 - 77
TEAMModelOS/Controllers/Third/ScController.cs

@@ -207,109 +207,125 @@ namespace TEAMModelOS.Controllers.Third
         [AllowAnonymous]
         public async Task<IActionResult> Sso([FromQuery] ScSSO sso,string path)
         {
-           var HostName = HttpContext.GetHostName();
+            var HostName = HttpContext.GetHostName();
             if (path.Equals("sc"))
             {
                 path = $"scpjx";
             }
-            else {
+            else
+            {
                 path = $"sc{path}";
             }
+
             //var rurl = new StringBuilder($"https://{_option.HostName}/sso");
             var rurl = new StringBuilder($"https://{HostName}/sso");
-            string parmas = $"Pxid={sso.Pxid}&Webid={sso.Webid}&tid={sso.tid}&time={sso.time}";
-            if (Md5Hash.GetMd5String(parmas).Equals($"{sso.Encrypt}"))
-            {
-                //四川研训平台跳转隐式登录/或者绑定IES平台接入规范
+            try {
               
-                long ssotime = long.Parse($"{sso.time}");
-                long nowtime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
-                if (nowtime - ssotime > 60 * 10)//10分钟有效期
+                string parmas = $"Pxid={sso.Pxid}&Webid={sso.Webid}&tid={sso.tid}&time={sso.time}";
+                if (Md5Hash.GetMd5String(parmas).Equals($"{sso.Encrypt}"))
                 {
-                    //  return Ok(new { status = 2, msg = "登录超时!" });
+                    //四川研训平台跳转隐式登录/或者绑定IES平台接入规范
+
+                    long ssotime = long.Parse($"{sso.time}");
+                    long nowtime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
+                    if (nowtime - ssotime > 60 * 10)//10分钟有效期
+                    {
+                        //  return Ok(new { status = 2, msg = "登录超时!" });
+                    }
                 }
-            }
-            else
-            {
-                return Redirect(rurl.Append($"?status=1").ToString());
-            }
-            string setsql = $"select  value(c) from c where contains(c.accessConfig,'{path}')  && contains(c.accessConfig,'scsyxpt') ";
-            AreaSetting setting = null;
-            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<AreaSetting>(queryText: setsql,
-                requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AreaSetting") }))
-            {
-                setting = item;
-                break;
-            }
-            if (setting != null && string.IsNullOrEmpty(setting.accessConfig)) {
-                return Redirect(rurl.Append($"?status=1").ToString());
-            }
-            //string accessConfig = "{\"homeworkType\":[\"pdf\"],\"submitType\":[\"pdf\",\"mp4\"],\"path\":\"scpjx\",\"config\":\"scsyxpt\",\"passKey\":\"VgEQfEjwzfvFn8my\",\"trainComID\":\"2065\",\"privateKey\":\"4DB15444DEEDBB28B718ACB09217B5FC\",\"url\":\"http://testscts.scedu.com.cn/webservice/EduService.asmx/RequestService\"}";
-            string accessConfig = setting.accessConfig;
-            Dictionary<string, object> dict = new Dictionary<string, object> { { "accessConfig", accessConfig }, { "pxid",sso.Pxid },{ "tid",sso.tid} };
-            (int status,string json ) =await  _httpTrigger.RequestHttpTrigger(dict, _option.Location, "GetSingleTeacherByProject");
-            if (status == 200) {
-                ScTeacher scTeacher= json.ToObject<ScTeacher>( new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
-                if (scTeacher != null && scTeacher.PXID.Equals(sso.Pxid) && scTeacher.TID.Equals(sso.tid)) {
-                    
+                else
+                {
+                    return Redirect(rurl.Append($"?status=1").ToString());
                 }
-            }
-            Teacher teacher = null;
-            //四川研训平台跳转隐式登录/或者绑定IES平台接入规范
-            //string sql = $"SELECT distinct value(c) FROM c join A1 in  c.binds where A1.pxid='{sso.Pxid}' and A1.webid='{sso.Webid}' and A1.tid='{sso.tid}'";
-            string sql = $"SELECT distinct value(c) FROM c join A1 in  c.binds where  A1.source='{sso.Webid}' and A1.userid='{sso.tid}'";
-            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sql,
-                requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
-            {
-                teacher = item;
-                break;
-            }
-            if (teacher == null)
-            {
-                return Redirect(rurl.Append($"?status=4&param={sso.ToJsonString()}&type={type}&bindurl=sc/bind").ToString());
-            }
-            else
-            {
-                var url = _configuration.GetValue<string>("HaBookAuth:CoreAPI");
-                var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
-                var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
-                var location = _option.Location;
-                (int code, string content) = await _accountHttpService.Implicit(clientID, clientSecret, location, $"{url}/oauth2/implicit",
-                    new Dictionary<string, string>()
+                string setsql = $"select  value(c) from c where contains(c.accessConfig,'{path}')  and contains(c.accessConfig,'scsyxpt') ";
+                AreaSetting setting = null;
+                await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<AreaSetting>(queryText: setsql,
+                    requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AreaSetting") }))
+                {
+                    setting = item;
+                    break;
+                }
+                if (setting != null && string.IsNullOrEmpty(setting.accessConfig))
+                {
+                    return Redirect(rurl.Append($"?status=1").ToString());
+                }
+                //string accessConfig = "{\"homeworkType\":[\"pdf\"],\"submitType\":[\"pdf\",\"mp4\"],\"path\":\"scpjx\",\"config\":\"scsyxpt\",\"passKey\":\"VgEQfEjwzfvFn8my\",\"trainComID\":\"2065\",\"privateKey\":\"4DB15444DEEDBB28B718ACB09217B5FC\",\"url\":\"http://testscts.scedu.com.cn/webservice/EduService.asmx/RequestService\"}";
+                string accessConfig = setting.accessConfig;
+                Dictionary<string, object> dict = new Dictionary<string, object> { { "accessConfig", accessConfig }, { "pxid", sso.Pxid }, { "tid", sso.tid } };
+                (int status, string json) = await _httpTrigger.RequestHttpTrigger(dict, _option.Location, "GetSingleTeacherByProject");
+                if (status == 200)
+                {
+                    ScTeacher scTeacher = json.ToObject<ScTeacher>(new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
+                    await _dingDing.SendBotMsg($"OS,{_option.Location}\n省平台教师信息:\n{scTeacher.ToJsonString()}",GroupNames.成都开发測試群組);
+                    if (scTeacher != null && scTeacher.PXID.Equals(sso.Pxid) && scTeacher.TID.Equals(sso.tid))
                     {
+
+                    }
+                }
+                Teacher teacher = null;
+                //四川研训平台跳转隐式登录/或者绑定IES平台接入规范
+                //string sql = $"SELECT distinct value(c) FROM c join A1 in  c.binds where A1.pxid='{sso.Pxid}' and A1.webid='{sso.Webid}' and A1.tid='{sso.tid}'";
+                string sql = $"SELECT distinct value(c) FROM c join A1 in  c.binds where  A1.source='{sso.Webid}' and A1.userid='{sso.tid}'";
+                await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sql,
+                    requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
+                {
+                    teacher = item;
+                    break;
+                }
+                if (teacher == null)
+                {
+                    return Redirect(rurl.Append($"?status=4&param={sso.ToJsonString()}&type={type}&bindurl=sc/bind").ToString());
+                }
+                else
+                {
+                    var url = _configuration.GetValue<string>("HaBookAuth:CoreAPI");
+                    var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
+                    var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
+                    var location = _option.Location;
+                    (int code, string content) = await _accountHttpService.Implicit(clientID, clientSecret, location, $"{url}/oauth2/implicit",
+                        new Dictionary<string, string>()
+                        {
                         { "grant_type", "implicit" },
                         { "client_id",clientID },
                         { "account",teacher.id },
                         { "nonce",Guid.NewGuid().ToString()}
-                    });
-                TmdidImplicit implicit_token = new TmdidImplicit();
-                if (!string.IsNullOrEmpty(content) && code==200)
-                {
-                    implicit_token = content.ToObject<TmdidImplicit>();
-                    var bind = teacher.binds.Find(x => x.userid.Equals(sso.tid) && x.source.Equals(sso.Webid));
-                    if (bind != null) {
-                        if (bind.pxid != null)
+                        });
+                    TmdidImplicit implicit_token = new TmdidImplicit();
+                    if (!string.IsNullOrEmpty(content) && code == 200)
+                    {
+                        implicit_token = content.ToObject<TmdidImplicit>();
+                        var bind = teacher.binds.Find(x => x.userid.Equals(sso.tid) && x.source.Equals(sso.Webid));
+                        if (bind != null)
                         {
-                            if (bind.pxid.Add(sso.Pxid))
+                            if (bind.pxid != null)
+                            {
+                                if (bind.pxid.Add(sso.Pxid))
+                                {
+                                    await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
+                                }
+                            }
+                            else
                             {
+                                bind.pxid = new HashSet<string> { sso.Pxid };
                                 await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
                             }
                         }
-                        else {
-                            bind.pxid = new HashSet<string> { sso.Pxid };
+                        return Redirect(rurl.Append($"?status=200&id_token={implicit_token.id_token}&access_token={implicit_token.access_token}&expires_in={implicit_token.expires_in}&token_type={implicit_token.token_type}").ToString());
+                    }
+                    else
+                    {
+                        //绑定失效
+                        if (teacher.binds.IsNotEmpty())
+                        {
+                            teacher.binds.RemoveAll(x => x.userid.Equals(sso.tid) && x.source.Equals(sso.Webid));
                             await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
                         }
+                        return Redirect(rurl.Append($"?status=4&param={sso.ToJsonString()}&type={type}&bindurl=sc/bind").ToString());
                     }
-                    return Redirect(rurl.Append($"?status=200&id_token={implicit_token.id_token}&access_token={implicit_token.access_token}&expires_in={implicit_token.expires_in}&token_type={implicit_token.token_type}").ToString());
-                }
-                else {
-                    //绑定失效
-                    if (teacher.binds.IsNotEmpty()) {
-                        teacher.binds.RemoveAll(x => x.userid.Equals(sso.tid) && x.source.Equals(sso.Webid));
-                        await  _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher,teacher.id,new PartitionKey(teacher.code));
-                    }
-                    return Redirect(rurl.Append($"?status=4&param={sso.ToJsonString()}&type={type}&bindurl=sc/bind").ToString());
                 }
+            } catch (Exception ex) {
+                await _dingDing.SendBotMsg($"OS,{_option.Location}-\n{sso.ToJsonString()} \npath:{path}\n{ex.StackTrace}\n{ex.Message}", GroupNames.醍摩豆服務運維群組);
+                return Redirect(rurl.Append($"?status=1").ToString());
             }
         }
         /// <summary>

+ 6 - 1
TEAMModelOS/Controllers/XTest/TestController.cs

@@ -55,7 +55,7 @@ namespace TEAMModelOS.Controllers
             "傣族","纳西族","哈尼族","拉祜族","佤族","傈僳族","独龙族","怒族","白族","普米族","固族","哈萨克族","土族","撒拉族","景颇族","族"
         };
         public static List<string> schooRemoveStr = new List<string>() {"(",")", "(",")","省", "市", "校区", "区", "州", "县", "旗", "盟", "自治",
-            "第","年制","学校","高等","分校","分园","附属","校园","镇","村","乡","街","路","部"
+            "第","学校","校园","镇","村","乡","街","路","部"
         };
         public static List<KeyValuePair<string, string>> areaRemoveStr = new List<KeyValuePair<string, string>>{
             new KeyValuePair<string, string>("新区", ""),
@@ -82,6 +82,11 @@ namespace TEAMModelOS.Controllers
             new KeyValuePair<string, string>("专科", "专") ,
             new KeyValuePair<string, string>("外国语", "外") ,
             new KeyValuePair<string, string>("实验", "验") ,
+            new KeyValuePair<string, string>("年制", "制") ,
+            new KeyValuePair<string, string>("高等", "等") ,
+            new KeyValuePair<string, string>("分校", "分") ,
+            new KeyValuePair<string, string>("分园", "分") ,
+            new KeyValuePair<string, string>("附属", "附") ,
         };
         public static List<KeyValuePair<string, string>> proReplaceStr = new List<KeyValuePair<string, string>> {
             new KeyValuePair<string, string>("北京","京") ,

+ 3 - 3
TEAMModelOS/TEAMModelOS.csproj

@@ -38,9 +38,9 @@
     <SpaRoot>ClientApp\</SpaRoot>
     <DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
     <UserSecretsId>078b5d89-7d90-4f6a-88fc-7d96025990a8</UserSecretsId>
-    <Version>5.2112.3</Version>
-    <AssemblyVersion>5.2112.3.1</AssemblyVersion>
-    <FileVersion>5.2112.3.1</FileVersion>
+    <Version>5.2112.6</Version>
+    <AssemblyVersion>5.2112.6.1</AssemblyVersion>
+    <FileVersion>5.2112.6.1</FileVersion>
     <Description>TEAMModelOS(IES5)</Description>
     <PackageReleaseNotes>版本说明</PackageReleaseNotes>
   </PropertyGroup>