public void TestGetInitials() { var s = "谭光洪"; var r = "TGH"; var t = PinyinHelper.GetInitials(s).ToUpper(); t.Should().Be(r); }
public JsonResult PersonEdit(PersonInfo person) { if (person == null) { return(Json(ErrorModel.InputError)); } var personBll = new PersonInfoBll(); // 验证工号重复性 var condition = person.Id > 0 ? $"WorkNo='{person.WorkNo}' AND Id<>{person.Id} AND IsDelete=0" : $"WorkNo='{person.WorkNo}' AND IsDelete=0"; if (personBll.Exists(condition)) { return(Json(ErrorModel.ExistSameItem)); } // 获取姓名的简拼 person.Spell = PinyinHelper.GetInitials(person.Name).ToLower(); person.UpdateTime = DateTime.Now; var dbUpdateType = person.Id > 0 ? DataUpdateType.Update : DataUpdateType.Insert; var success = false; if (person.Id > 0) { success = personBll.Update(person); } else { // 第一次录入时将密码设置为工号后四位 var password = person.WorkNo.Substring(person.WorkNo.Length - 5); // person.Password = password.GetMd5(); // @FrancisTan 修改于 2017-02-17 // 目的是为了统一密码的生成,保证一致性 person.Password = EncryptHelper.EncryptPassword(password); success = personBll.Insert(person).Id > 0; } if (success) { DataUpdateLog.SingleUpdate(typeof(PersonInfo).Name, (int)person.Id, dbUpdateType); return(Json(ErrorModel.OperateSuccess)); } return(Json(ErrorModel.OperateFailed)); }
/// <summary> /// 从给定行中的第四个单元格中提取出车站名称 /// 方法将会把提取出的名称的*号去除 /// 返回<see cref="BaseStation"></see>类型的实例 /// 如果第四个单元格中没有车站名称,则返回null /// </summary> /// <param name="row">将作为数据源的<see cref="IRow"/>对象</param> /// <returns><see cref="BaseStation"></see>类型的实例或者null</returns> private static BaseStation GetStation(IRow row) { var name = row.GetCell(_stationNameCellIndex).StringCellValue; if (string.IsNullOrEmpty(name)) { return(null); } name = name.Trim(); if (name.Contains("*")) { name = name.Replace("*", ""); } var pinyin = PinyinHelper.GetInitials(name).ToLower(); return(new BaseStation { StationName = name, SN = 0, Spell = pinyin, UpdateTime = DateTime.Now }); }
/// <summary> /// 按照"格式二"从指定的<see cref="ISheet"/>对象中提取信息 /// 并创建<see cref="TimeTable"/>对象集合返回 /// </summary> /// <param name="sheet">将作为数据源的<see cref="ISheet"/>对象</param> /// <returns><see cref="TimeTable"/>对象集合</returns> private static List <TimeTable> GetTimeTableOfStyleTwo(ISheet sheet) { // 从第二行中获取列车运行方向 var row = sheet.GetRow(1); var title = row.Cells[0].ToString(); // 从字符串"古店-集宁间上行列车时刻表"中提取"上行" var direction = title.Substring(title.IndexOf("行列车时刻表") - 1, 2); // 从第八行和第九行中提取所有车次 row = sheet.GetRow(7); var row9 = sheet.GetRow(8); var stationColNum = Regex.Replace(row.Cells[0].ToString(), @"\s", "") == "区间公里" ? 2 : 0; // 车站所在列的索引 var trainNos = new List <string>(); for (var i = stationColNum + 1; i < row.Cells.Count; i++) { // 车次列索引从车站后一列开始 var value = row.Cells[i].ToString().Trim(); var value1 = row9.Cells[i].ToString().Trim(); // 有的车次占了第八和第九两行 if (!string.IsNullOrEmpty(value)) { trainNos.Add(value + value1); } } // 从第一或者第三列中提取所有车站(有的表格车站在第三列,而有的在第一列) // 从第十行开始循环 var stations = new List <BaseStation>(); for (var i = 9; i < sheet.LastRowNum; i++) { row = sheet.GetRow(i); var txt = row.Cells[stationColNum].ToString(); if (!string.IsNullOrEmpty(txt)) { var name = txt.Trim(); var pinyin = PinyinHelper.GetInitials(name).ToLower(); stations.Add(new BaseStation { Spell = pinyin, StationName = name }); } } // 循环车次列表,生成列车时刻表集合 var startColNum = stationColNum + 1; var timeTables = new List <TimeTable>(); for (var trainNoIndex = 0; trainNoIndex < trainNos.Count; trainNoIndex++) { var timeTable = new TimeTable(); // 从第二或者第四列开始,逐列获取列车时刻表 var sort = 1; var stationIndex = 0; // 通过此索引从车站列表中获取与时刻表对应的车站 var colIndex = startColNum + trainNoIndex; // 随着车次索引的增加,相应的改变获取时刻表的单元格索引 for (var rowIndex = 9; rowIndex < sheet.LastRowNum; rowIndex++) { row = sheet.GetRow(rowIndex); var arrive = row.Cells[colIndex].ToString().Trim().Replace("...", ""); rowIndex++; row = sheet.GetRow(rowIndex); var start = row.Cells[colIndex].ToString().Trim().Replace("...", ""); // 出发或者到达时间任意一个不为空 // 则表明本车次将经过stationIndex所对应的车站 // 否则表示本车次不经过此车站,则不将此车站添加到 // 本车次对应的车站列表中 if (!string.IsNullOrEmpty(arrive) || !string.IsNullOrEmpty(start)) { arrive = TimeFormatter(arrive); start = TimeFormatter(start); timeTable.Stations.Add(stations[stationIndex]); timeTable.Moments.Add(new TrainMoment { ArriveTime = arrive, DepartTime = start, Sort = sort++ }); } stationIndex++; // 如果stationIndex已经超出了车站数量,则结束循环 if (stationIndex >= stations.Count) { break; } } // 重置索引和排序 stationIndex = 0; sort = 1; // 如果是上行车次,需要将车站及列车时刻反转 if (direction == "上行") { timeTable.Stations.Reverse(); timeTable.Moments.Reverse(); // 改变序号,并将出发及到达时间互换 sort = 1; timeTable.Moments.ForEach(item => { var temp = item.ArriveTime; item.ArriveTime = item.DepartTime; item.DepartTime = temp; item.Sort = sort++; }); } // 创建车次及线路对象 var firstStation = timeTable.Stations.First().StationName; var lastStation = timeTable.Stations.Last().StationName; timeTable.TrainNo = new TrainNo { Direction = direction, FullName = trainNos[trainNoIndex], FirstStation = firstStation, LastStation = lastStation, RunType = 2 }; timeTable.Line = new BaseLine { FirstStation = firstStation, LastStation = lastStation, LineName = $"{firstStation}-{lastStation}" }; timeTables.Add(timeTable); } return(timeTables); }