public void TestGetInitials()
        {
            var s = "谭光洪";
            var r = "TGH";
            var t = PinyinHelper.GetInitials(s).ToUpper();

            t.Should().Be(r);
        }
Exemple #2
0
        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);
        }