using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Enums; using APT.BaseData.Domain.IServices; using APT.BaseData.Domain.IServices.FM; using APT.Infrastructure.Core; using APT.MS.Domain.Entities.BS; using APT.MS.Domain.Entities.HM; using APT.MS.Domain.Entities.PF; using APT.MS.Domain.Enums; using APT.Utility; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Text.RegularExpressions; using APT.WebApi.Models; namespace APT.PP.WebApi.Controllers.Api.PP { [Route("api/PP/BS")] [TypeFilter(typeof(CustomActionFilterAttribute))] public partial class BSController : AuthorizeApiController { IFMNotificationTaskService NotificationTaskService { get; set; } IFMSyncLogDetailService SyncLogDetailService { get; set; } //IBSSafeCheckService SafeCheckService { get; set; }, IBSSafeCheckService safeCheckService IPFSysLogService SysLogService { get; set; } IBSOperateLogService BSOperateLogService { get; set; } //private readonly ILogger _logger = null; public BSController(IFMNotificationTaskService notificationTaskService, IPFSysLogService sysLogService, IFMSyncLogDetailService syncLogDetailService, IBSOperateLogService bsOperateLogService)//, ILogger logger { //SafeCheckService = safeCheckService; //_logger = logger; NotificationTaskService = notificationTaskService; SysLogService = sysLogService; SyncLogDetailService = syncLogDetailService; BSOperateLogService = bsOperateLogService; } /// /// 判断跑批时间是否符合 /// /// /// /// /// /// private bool ISTimeOK(DateTime? RUNSETTIME, DateTime dtNow, int minAdvance, int minLaster) { if (RUNSETTIME == null) { return false; } if (RUNSETTIME != null) { if (minAdvance != 0 || minLaster != 0) { //DateTime dtSetTime = Convert.ToDateTime(dtNow.ToString("yyyy") + RUNSETTIME.Value.ToString("-MM-dd HH:mm:ss")); DateTime dtSetTime = Convert.ToDateTime(dtNow.ToString("yyyy-MM-dd") + RUNSETTIME.Value.ToString(" HH:mm:ss")); if (minAdvance > 0 && minLaster > 0) { if (dtNow.AddMinutes(-1 * minAdvance) <= dtSetTime && dtSetTime <= dtNow.AddMinutes(minLaster)) { return true; } } else if (minAdvance > 0) { if (dtNow.AddMinutes(-1 * minAdvance) <= dtSetTime && dtSetTime <= dtNow) { //如果设置时间小于当前时间 并且 设置使劲按大于 当前时间大于当前时间往前偏移分钟数 return true; } } else { if (dtNow <= dtSetTime && dtSetTime <= dtNow.AddMinutes(minLaster)) { //如果 设置时间大于当前时间 并且设置时间小于当前时间往后偏移分钟数 return true; } } } else { if (RUNSETTIME.Value.ToString("HH:mm") == dtNow.ToString("HH:mm")) { return true; } } } return false; } /// /// 制定任务 根据安全检查 制定任务 触发跑批 给检查对象添加待办事项 /// /// /// [HttpPost, Route("CreateCheckPlanSet")] public JsonActionResult CreateCheckPlanSet([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { DateTime CURR_TASK_START_TIME = DateTime.Now; DateTime dtNow = DateTime.Now; var Parameter1 = filter.Parameter1; if (!string.IsNullOrEmpty(filter.Parameter1)) { try { //接收来自页面的参数 DateTime deParm = Convert.ToDateTime(filter.Parameter1); dtNow = deParm; } catch { } } filter.Parameter1 = " ENABLE_STATUS = false "; Expression> expression = e => e.IS_DELETED == false && e.ENABLE_STATUS == 0; List listPlanSet = this.GetOrderEntities(expression, filter, new string[] { "Nav_CheckType", "Nav_CheckTypeLevel.Nav_Enums", "Nav_ListSetObject", "Nav_ListSetDepObject", "Nav_ListDepOut", "Nav_ListArea" }).ToList(); List listPlanSetRund = new List(); if (listPlanSet.Count < 1) { return true;//没找到审批信息 } T_FM_USER User = GetEntity(e => e.CODE.StartsWith("admin") && e.ENABLE_STATUS == 0); if (User == null) { User = GetEntity(e => e.ID == listPlanSet[0].CREATER_ID.Value);//随便取一个不影响信息 } int min = 5;//按设置时间 可以提前5分钟执行跑批生成代办任务 #region 获取时间符合的设置 //5 单次 每天10, 每周20, 每月30, 每季40, for (int i = 0; i < listPlanSet.Count; i++) { //if (listPlanSet[i].CHECKTIME != null) //{ if (ISTimeOK(listPlanSet[i].RUNSETTIME, dtNow, min, min))//设置时间往前后各偏移 5 分钟 判断跑批 { switch (listPlanSet[i].PLANCHECKFREQUENCY) { case 5: #region 单次检查 时间对 月 日对才加入 if (!string.IsNullOrEmpty(listPlanSet[i].RUNDATA))//05-01,10-01 { List listMMdd = listPlanSet[i].RUNDATA.Split(",").ToList(); if (listPlanSet[i].RUNDATA.Contains("-")) { for (int j = 0; j < listMMdd.Count; j++) { try { if (!string.IsNullOrEmpty(listMMdd[j]) && (Convert.ToDateTime(dtNow.Year.ToString() + ("-") + listMMdd[j]) == Convert.ToDateTime(dtNow.ToString("yyyy-MM-dd")) || Convert.ToDateTime(dtNow.Year.ToString() + "-" + listMMdd[j]) == Convert.ToDateTime(dtNow.ToString("yyyy-M-d")))) { listPlanSetRund.Add(listPlanSet[i]); break; } } catch { } } } else if (listPlanSet[i].RUNDATA.Contains("/")) { for (int j = 0; j < listMMdd.Count; j++) { try { if (!string.IsNullOrEmpty(listMMdd[j]) && (Convert.ToDateTime(dtNow.Year.ToString("yyyy/") + listMMdd[j]) == Convert.ToDateTime(dtNow.ToString("yyyy/MM/dd")) || Convert.ToDateTime(dtNow.Year.ToString("yyyy/") + listMMdd[j]) == Convert.ToDateTime(dtNow.ToString("yyyy/M/d")))) { listPlanSetRund.Add(listPlanSet[i]); break; } } catch { } } } } #endregion break; case 10: //每日天执行 时间匹配就添加 此代码不同步到SPS if (listPlanSet[i].CHECKTIME.HasValue || listPlanSet[i].Nav_CheckTypeLevel.Nav_Enums.NAME != "班组级")//如果是特殊处理 或者不是班组级 { listPlanSetRund.Add(listPlanSet[i]);//如果是班组级 跳过(另外一个跑批) } break; case 20: if (listPlanSet[i].WEEKDATA != null && (int)dtNow.DayOfWeek == listPlanSet[i].WEEKDATA.Value) { //星期匹配 DateTime.Now.DayOfWeek Thursday (int)DateTime.Now.DayOfWeek 4 listPlanSetRund.Add(listPlanSet[i]); } break; case 30: if (listPlanSet[i].DATA != null && listPlanSet[i].DATA.Value == dtNow.Day) { //日匹配 (季度是季度第一月的某日 刚好也符合) listPlanSetRund.Add(listPlanSet[i]); } break; case 40: if (listPlanSet[i].DATA != null && listPlanSet[i].DATA.Value == dtNow.Day && (dtNow.Month == 1 || dtNow.Month == 4 || dtNow.Month == 7 || dtNow.Month == 10)) { //日匹配 (季度是季度第一月的某日 刚好也符合) listPlanSetRund.Add(listPlanSet[i]); } break; case 50: if (listPlanSet[i].DATA != null && listPlanSet[i].DATA.Value == dtNow.Day && (dtNow.Month == 1 || dtNow.Month == 7)) { //日匹配 (季度是季度第一月的某日 刚好也符合) listPlanSetRund.Add(listPlanSet[i]); } break; case 60: if (listPlanSet[i].DATA != null && listPlanSet[i].DATA.Value == dtNow.Day && dtNow.Month == 1) { //日匹配 (季度是季度第一月的某日 刚好也符合) listPlanSetRund.Add(listPlanSet[i]); } break; default: break; } } //} //else //{ // //只有每个季度执行的没有明确时间 // if (listPlanSet[i].PLANCHECKFREQUENCY == 40 && listPlanSet[i].DATA != null && listPlanSet[i].DATA.Value == dtNow.Day) // { // listPlanSetRund.Add(listPlanSet[i]); // } //} } #endregion if (listPlanSetRund.Count > 0) { T_PF_APPROVAL_ROLE modelRoleHead = null; T_PF_APPROVAL_ROLE modelRoleSafe = null; #region // 审批角色判断是否完善 //List listCheckObj = listPlanSetRund.Select(e => e.PLANCHECKOBJECT).Distinct().ToList(); //if (listCheckObj.Contains(5)) //{ // modelRoleHead = GetEntity(e => e.NAME.Contains("负责人")); // //if (modelRoleHead == null || modelRoleHead.ID == Guid.Empty) // //{ // // try // // { // // //没有找到安全员 //没有找到安全员 没用往下继续执行的必要 // 班组给班长发送待办 需要继续执行 // // SysLogService.AddLog(listPlanSetRund[0].ORG_ID.Value, User.ID, PFSysLogTypeEnum.SafeChecker, "BS002", "未找到审批角色【负责人】", null, null); // // } // // catch { } // //} //} //if (listCheckObj.Contains(10)) //{ // modelRoleSafe = GetEntity(e => e.NAME.Contains("安全员")); // //if (modelRoleSafe == null || modelRoleSafe.ID == Guid.Empty) // //{ // // try // // { // // //没有找到安全员 //没有找到安全员 没用往下继续执行的必要 // 班组给班长发送待办 需要继续执行 // // SysLogService.AddLog(listPlanSetRund[0].ORG_ID.Value, User.ID, PFSysLogTypeEnum.SafeChecker, "BS002", "未找到审批角色【安全员】", null, null); // // } // // catch { } // //} //} #endregion #region 跑批添加数据 DateTime dtFirst = Convert.ToDateTime(dtNow.ToString("yyyy-MM-dd 00:00:00")); // 系统生成10 用户主动创建20 今天 生成的 List listSafeCheck = this.GetOrderEntities(e => e.ENABLE_STATUS == 0 && e.CREACTTYPE == CREACTTYPEEnum.System && e.CREATE_TIME >= dtFirst, filter).ToList(); Guid CHECK_PLAN_SETL_ID = Guid.Empty; T_BS_SAFE_CHECK modelCheck = null; List listSafeCheckAdd = new List(); //需要插入数据库的安检记录 List listArea = new List(); T_BS_SAFE_CHECK_RISK_AREA modelArea = null; List listFMUserNotice = null;//每项设置的通知人员(中间表) List listDepartment = null; //KeywordFilter filterDepart = new KeywordFilter(); int DEPARTMENT_TYPE = 0;//部门类型 用于linq相接时存放 (中间值:防错) DateTime ChcekDateTime = dtFirst; DateTime dtTimeOut = DateTime.Now; string CHECK_TYPENAME_CODE = string.Empty;//拼音首字母 T_FM_SYNC_TASK task = null; bool isUpdate = false; T_FM_PERSON chargePerson = null; List listAreObject = null; //检查区域 var listAreObjectT = GetEntities(e => e.ORG_ID == listPlanSetRund[0].ORG_ID, null, null); if (listAreObjectT != null) { listAreObject = listAreObjectT.ToList(); } int CHECKOBJECT = 0; List listCheckObject = new List(); T_BS_PLAN_SET_OBJECT checkObject = null; T_BS_PLAN_SET_DEP_OBJECT checkDetObject = null; IEnumerable listDepIDOut = null; T_FM_DEPARTMENT depTemp = null; for (int i = 0; i < listPlanSetRund.Count; i++) { if (i == 0) { task = GetEntity(filter.Keyword); if (task != null) { task.CURR_TASK_START_TIME = CURR_TASK_START_TIME;//上次同步结束时间 task.UPDATE_SUCCES_TIME = DateTime.Now;//上次同步结束时间 task.SYNC_PARAM = "";//清空参数 } } listSafeCheckAdd = new List(); var noticeTitles = new List(); var noticeDataIds = new List(); var noticeUserIds = new List(); var noticeUserNames = new List(); CHECK_PLAN_SETL_ID = listPlanSetRund[i].ID; modelCheck = listSafeCheck.FirstOrDefault(e => e.PLAN_SET_ID == CHECK_PLAN_SETL_ID); if (modelCheck != null) { //有添加检查信息 continue; } listDepartment = new List(); listFMUserNotice = new List(); List listEndTime = new List(); if (listPlanSetRund[i].Nav_ListDepOut != null && listPlanSetRund[i].Nav_ListDepOut.Any()) listDepIDOut = listPlanSetRund[i].Nav_ListDepOut.Select(e => e.DEPARTMENT_ID); else listDepIDOut = null; #region 获取通知人员 if (listPlanSetRund[i].USER_ID_SEND.HasValue) { #region 新配置的 有指定特定人员 DateTime dtPlanSetEndTime = NotificationTaskService.GetTaskEndTime(FMTASKTYPE.BS_SafeCheck_Make, filter.OrgId.Value, dtNow, listPlanSetRund[i].PLANCHECKFREQUENCY, null); T_FM_USER noticeModel = GetEntity(listPlanSetRund[i].USER_ID_SEND.Value); if (noticeModel == null || noticeModel.IS_DELETED || noticeModel.ENABLE_STATUS == 1) { //找不到人 或者人状态不对 continue; } else { T_FM_DEPARTMENT modelDep = null; if (listPlanSetRund[i].Nav_ListSetDepObject != null && listPlanSetRund[i].Nav_ListSetDepObject.Any()) { foreach (var item in listPlanSetRund[i].Nav_ListSetDepObject) { if (modelDep == null && item.DEPARTMENT_ID.HasValue) modelDep = GetEntity(item.DEPARTMENT_ID.Value, "Nav_ProdutionUnit.Nav_Enums"); } } else { if (!noticeModel.DEPARTMENT_ID.HasValue) continue; modelDep = GetEntity(noticeModel.DEPARTMENT_ID.Value, "Nav_ProdutionUnit.Nav_Enums"); } if (modelDep == null) continue; listFMUserNotice.Add(noticeModel); listDepartment.Add(modelDep); listEndTime.Add(dtPlanSetEndTime);//添加结束时间 } #endregion } else { #region 根据通知对象 获取人员信息 负责人 5 安全员 10 班长 20 if (listPlanSetRund[i].PLANCHECKOBJECT == 5)//负责人 { //T_FM_DEPARTMENT 部门表 //导航属性:安全员":ICollection Nav_SafeUser //部门类型: [EnumName("HMLevleEnum")] int DEPARTMENT_TYPE //找到 公司 部门 车间 班组 级别 对应安全员 DEPARTMENT_TYPE = listPlanSetRund[i].Nav_CheckTypeLevel.Nav_Enums.VALUE;//检查等级 和部门等级匹配 //公司级 检查 给安环部发送通知 //其余等级的安全检查 针对生产部门 //需要做全检查的所有部门 List listDepartMent = null; Expression> expressionDepartMent = e => !e.IS_DELETED && e.ENABLE_STATUS == 0; if (listDepIDOut != null && listDepIDOut.Any()) expressionDepartMent = expressionDepartMent.And(e => !listDepIDOut.Contains(e.ID)); if (listPlanSetRund[i].Nav_CheckTypeLevel.Nav_Enums.VALUE == 3)//公司级 { //安环部 部门负责人 expressionDepartMent = expressionDepartMent.And(e => e.DEPARTMENT_STATUS == (int)FMDepartmentStatus.安全部门); listDepartMent = GetEntities(expressionDepartMent, null, "Nav_ProdutionUnit.Nav_Enums").ToList(); } else { //生产部门 expressionDepartMent = expressionDepartMent.And(e => e.DEPARTMENT_TYPE == DEPARTMENT_TYPE && e.DEPARTMENT_STATUS == (int)FMDepartmentStatus.生产部门); listDepartMent = GetEntities(expressionDepartMent, null, "Nav_ProdutionUnit.Nav_Enums").ToList(); } List ListDepartMentID = new List(); if (listDepartMent.Count > 0) { ListDepartMentID = listDepartMent.Select(e => e.ID).ToList(); } if (ListDepartMentID.Count < 1) { //没有找到部门 } //modelRoleSafe 公司级 公司级安全员 部门级 安全员 车间级安全员 车间级 安全员 //modelRoleSafe.DEPARTMENT_TYPE modelRoleHead = GetEntity(e => e.NAME.Contains("负责人") && e.DEPARTMENT_TYPE == DEPARTMENT_TYPE); if (modelRoleHead == null) { //try //{ // //部门未找到安全员 // SysLogService.AddLog(listPlanSetRund[0].ORG_ID.Value, User.ID, PFSysLogTypeEnum.SafeChecker, "BS002", "部门未找到到审批角色【负责人】", "DEPARTMENT_TYPE:【" + DEPARTMENT_TYPE.ToString() + "】", " T_BS_PLAN_SETID:【" + listPlanSetRund[i].ID + "】"); //} //catch { } continue; } //部门中审批角色:安全员 List listUSER = GetEntities(e => e.DEPARTMENT_ID.HasValue && ListDepartMentID.Contains(e.DEPARTMENT_ID.Value) && e.Nav_ApproveRole != null && e.Nav_ApproveRole.ID == modelRoleHead.ID, null, new string[] { "Nav_ApproveRole" }).ToList(); //&& e.Nav_ApproveRole.DEPARTMENT_TYPE == DEPARTMENT_TYPE 公司级的时候 安环部负责 //查找对应设置的部门/车间/班组 //List listDepartMent = this.GetOrderEntities(e => !e.IS_DELETED && e.DEPARTMENT_TYPE == DEPARTMENT_TYPE && e.ENABLE_STATUS == 0, null, new string[] { "Nav_SafeUser", "Nav_SafeUser.Nav_User" }).ToList(); #region //旧方法 //DateTime dtPlanSetEndTime = dtNow; //#region 获取 检查设置 最后时间 //switch (listPlanSetRund[i].PLANCHECKFREQUENCY) //{ // case 20: //每周 // //周一 1 周二 2 周日 0 // int weekDay = (int)dtNow.DayOfWeek; // //周一开始时间 // DateTime dtWeekDayStart = dtNow.Date.AddDays(-1 * (weekDay == 0 ? 6 : (weekDay - 1))); // //本周最后时间点 // dtPlanSetEndTime = dtWeekDayStart.AddDays(8).AddSeconds(-1); // break; // case 30: // //本月 最后一天 // dtPlanSetEndTime = Convert.ToDateTime(dtNow.Year + "-" + dtNow.Month + "-01 00:00:00").AddMonths(1).AddSeconds(-1);//本月最后时间 本月初一 加一月 减 减 1秒 // break; // case 40://每季度 本季度最后一天 // int month = dtNow.Month < 4 ? 4 : (dtNow.Month < 7 ? 7 : (dtNow.Month < 10 ? 10 : 1)); // if (month == 4 || month == 7 || month == 10) // { // dtPlanSetEndTime = Convert.ToDateTime(dtNow.Year + "-" + month + "-01 00:00:00").AddSeconds(-1); // } // else // { // dtPlanSetEndTime = Convert.ToDateTime((dtNow.Year + 1) + "-12-31 23:59:59"); // } // break; // default: // case 5: // case 10: // dtPlanSetEndTime = dtNow.Date.AddDays(1).AddSeconds(-1);//当天 // break; //} //#endregion #endregion DateTime dtPlanSetEndTime = NotificationTaskService.GetTaskEndTime(FMTASKTYPE.BS_SafeCheck_Make, filter.OrgId.Value, dtNow, listPlanSetRund[i].PLANCHECKFREQUENCY, null); for (int j = 0; j < listDepartMent.Count; j++) { T_FM_USER noticeModel = listUSER.Find(e => e.DEPARTMENT_ID == listDepartMent[j].ID);//如果部门有多个安全员 随机获取一个 if (noticeModel == null) { //try //{ // //部门未找到安全员 // SysLogService.AddLog(listPlanSetRund[0].ORG_ID.Value, User.ID, PFSysLogTypeEnum.SafeChecker, "BS002", "部门未找到到审批角色【负责人】", "T_FM_DEPARTMENTID:【" + listDepartMent[j].ID.ToString() + "】", " T_BS_PLAN_SETID:【" + listPlanSetRund[i].ID + "】"); //} //catch { } continue; //未设置安全员信息 } listFMUserNotice.Add(noticeModel); listDepartment.Add(listDepartMent[j]); listEndTime.Add(dtPlanSetEndTime);//添加结束时间 } } //找到对应的 添加代办 安全员 10 班长 20, else if (listPlanSetRund[i].PLANCHECKOBJECT == 10)//安全员(负责人) { if (listPlanSetRund == null) { //没有安全员 循环执行前已写日志 continue; } //T_FM_DEPARTMENT 部门表 //导航属性:安全员":ICollection Nav_SafeUser //部门类型: [EnumName("HMLevleEnum")] int DEPARTMENT_TYPE //找到 公司 部门 车间 班组 级别 对应安全员 DEPARTMENT_TYPE = listPlanSetRund[i].Nav_CheckTypeLevel.Nav_Enums.VALUE;//检查等级 和部门等级匹配 //公司级 检查 给安环部发送通知 //其余等级的安全检查 针对生产部门 //需要做全检查的所有部门 List listDepartMent = null; Expression> expressionDepartMent = e => !e.IS_DELETED && e.ENABLE_STATUS == 0; if (listDepIDOut != null && listDepIDOut.Any()) expressionDepartMent = expressionDepartMent.And(e => !listDepIDOut.Contains(e.ID)); if (listPlanSetRund[i].Nav_CheckTypeLevel.Nav_Enums.VALUE == 3)//公司级 { //安环部 部门负责人 expressionDepartMent = expressionDepartMent.And(e => e.DEPARTMENT_STATUS == (int)FMDepartmentStatus.安全部门); listDepartMent = GetEntities(expressionDepartMent, null, "Nav_ProdutionUnit.Nav_Enums").ToList(); } else { //生产部门 expressionDepartMent = expressionDepartMent.And(e => e.DEPARTMENT_TYPE == DEPARTMENT_TYPE && e.DEPARTMENT_STATUS == (int)FMDepartmentStatus.生产部门); listDepartMent = GetEntities(expressionDepartMent, null, "Nav_ProdutionUnit.Nav_Enums").ToList(); } List ListDepartMentID = new List(); if (listDepartMent.Count > 0) { ListDepartMentID = listDepartMent.Select(e => e.ID).ToList(); } if (ListDepartMentID.Count < 1) { //没有找到部门 } //modelRoleSafe 公司级 公司级安全员 部门级 安全员 车间级安全员 车间级 安全员 //modelRoleSafe.DEPARTMENT_TYPE modelRoleSafe = GetEntity(e => e.NAME.Contains("安全员") && e.DEPARTMENT_TYPE == DEPARTMENT_TYPE); if (modelRoleSafe == null) { //try //{ // //部门未找到安全员 // SysLogService.AddLog(listPlanSetRund[0].ORG_ID.Value, User.ID, PFSysLogTypeEnum.SafeChecker, "BS002", "部门未找到到审批角色【安全员】", "DEPARTMENT_TYPE:【" + DEPARTMENT_TYPE.ToString() + "】", " T_BS_PLAN_SETID:【" + listPlanSetRund[i].ID + "】"); //} //catch { } continue; } //部门中审批角色:安全员 List listUSER = GetEntities(e => e.DEPARTMENT_ID.HasValue && ListDepartMentID.Contains(e.DEPARTMENT_ID.Value) && e.Nav_ApproveRole != null && e.Nav_ApproveRole.ID == modelRoleSafe.ID, null, new string[] { "Nav_ApproveRole" }).ToList(); //&& e.Nav_ApproveRole.DEPARTMENT_TYPE == DEPARTMENT_TYPE 公司级的时候 安环部负责 //查找对应设置的部门/车间/班组 //List listDepartMent = this.GetOrderEntities(e => !e.IS_DELETED && e.DEPARTMENT_TYPE == DEPARTMENT_TYPE && e.ENABLE_STATUS == 0, null, new string[] { "Nav_SafeUser", "Nav_SafeUser.Nav_User" }).ToList(); #region //旧方法 //DateTime dtPlanSetEndTime = dtNow; //#region 获取 检查设置 最后时间 //// BSPLANCHECKFREQUENCYEnum //switch (listPlanSetRund[i].PLANCHECKFREQUENCY) //{ // case 20: //每周 // //周一 1 周二 2 周日 0 // int weekDay = (int)dtNow.DayOfWeek; // //周一开始时间 // DateTime dtWeekDayStart = dtNow.Date.AddDays(-1 * (weekDay == 0 ? 6 : (weekDay - 1))); // //本周最后时间点 // dtPlanSetEndTime = dtWeekDayStart.AddDays(8).AddSeconds(-1); // break; // case 30: // //本月 最后一天 // dtPlanSetEndTime = Convert.ToDateTime(dtNow.Year + "-" + dtNow.Month + "-01 00:00:00").AddMonths(1).AddSeconds(-1);//本月最后时间 本月初一 加一月 减 减 1秒 // break; // case 40://每季度 本季度最后一天 // int month = dtNow.Month < 4 ? 4 : (dtNow.Month < 7 ? 7 : (dtNow.Month < 10 ? 10 : 1)); // if (month == 4 || month == 7 || month == 10) // { // dtPlanSetEndTime = Convert.ToDateTime(dtNow.Year + "-" + month + "-01 00:00:00").AddSeconds(-1); // } // else // { // dtPlanSetEndTime = Convert.ToDateTime((dtNow.Year + 1) + "-12-31 23:59:59"); // } // break; // default: // case 5: // case 10: // dtPlanSetEndTime = dtNow.Date.AddDays(1).AddSeconds(-1);//当天 // break; //} //#endregion #endregion DateTime dtPlanSetEndTime = NotificationTaskService.GetTaskEndTime(FMTASKTYPE.BS_SafeCheck_Make, filter.OrgId.Value, dtNow, listPlanSetRund[i].PLANCHECKFREQUENCY, null); for (int j = 0; j < listDepartMent.Count; j++) { T_FM_USER noticeModel = listUSER.Find(e => e.DEPARTMENT_ID == listDepartMent[j].ID);//如果部门有多个安全员 随机获取一个 if (noticeModel == null) { //try //{ // //部门未找到安全员 // SysLogService.AddLog(listPlanSetRund[0].ORG_ID.Value, User.ID, PFSysLogTypeEnum.SafeChecker, "BS002", "部门未找到到审批角色【安全员】", "T_FM_DEPARTMENTID:【" + listDepartMent[j].ID.ToString() + "】", " T_BS_PLAN_SETID:【" + listPlanSetRund[i].ID + "】"); //} //catch { } continue; //未设置安全员信息 } listFMUserNotice.Add(noticeModel); listDepartment.Add(listDepartMent[j]); listEndTime.Add(dtPlanSetEndTime);//添加结束时间 } } else if (listPlanSetRund[i].PLANCHECKOBJECT == 20)//班长 { //此代码不同步到 SPS if (listPlanSetRund[i].CHECKTIME.HasValue) { IEnumerable listDepIDLimit = null; if (listPlanSetRund[i].Nav_ListSetDepObject != null && listPlanSetRund[i].Nav_ListSetDepObject.Any()) { listDepIDLimit = listPlanSetRund[i].Nav_ListSetDepObject.Where(e => e.DEPARTMENT_ID.HasValue).Select(e => e.DEPARTMENT_ID.Value); } IEnumerable listMineTypeEnums = null; if (listPlanSetRund[i].Nav_ListSetObject != null && listPlanSetRund[i].Nav_ListSetObject.Any()) { listMineTypeEnums = listPlanSetRund[i].Nav_ListSetObject.Select(e => (int)e.CHECKOBJECT); } //所有符合条件的班组组长 //Nav_ListSetObject //Nav_ListSetDepObject //找到 公司 部门 车间 班组 级别 对应安全员 DEPARTMENT_TYPE = listPlanSetRund[i].Nav_CheckTypeLevel.Nav_Enums.VALUE;//检查等级 和部门等级匹配 //需要做全检查的所有部门 List listDepartMent = null; Expression> expressionDepartMent = e => !e.IS_DELETED && e.ENABLE_STATUS == 0 && e.DEPARTMENT_TYPE == DEPARTMENT_TYPE && e.DEPARTMENT_STATUS == (int)FMDepartmentStatus.生产部门; if (listDepIDLimit != null && listDepIDLimit.Any()) { expressionDepartMent = expressionDepartMent.And(e => listDepIDLimit.Contains(e.ID)); } if (listMineTypeEnums != null && listMineTypeEnums.Any()) { expressionDepartMent = expressionDepartMent.And(e => e.Nav_ProdutionUnit.FirstOrDefault(e => listMineTypeEnums.Contains(e.Nav_Enums.VALUE)) != null); } if (listDepIDOut != null && listDepIDOut.Any()) { expressionDepartMent = expressionDepartMent.And(e => !listDepIDOut.Contains(e.ID)); } //生产部门 listDepartMent = GetEntities(expressionDepartMent, null, "Nav_ProdutionUnit.Nav_Enums").ToList(); if (listDepartMent == null || !listDepartMent.Any()) { continue; } IEnumerable ListUserID = null; if (listDepartMent.Count > 0) { ListUserID = listDepartMent.Where(e => e.USER_ID.HasValue).Select(e => e.USER_ID.Value); } if (ListUserID == null || !ListUserID.Any()) { continue; } List listUSER = GetEntities(e => ListUserID.Contains(e.ID), null, null).ToList(); DateTime deNowDateEnd = DateTime.Now.Date.AddDays(1).AddSeconds(-1);//今天最后1秒 foreach (var item in listUSER) { depTemp = listDepartMent.FirstOrDefault(e => e.ID == item.DEPARTMENT_ID); if (depTemp != null) { listDepartment.Add(depTemp); listFMUserNotice.Add(item);//班长 listEndTime.Add(deNowDateEnd); } } } else { //找到今天有上班的 班组 对应 班长 //排班 T_FM_DEPARTMENT_SCHEDULING 班组T_FM_TEAM 班长CHARGE_PERSON_ID 人员Nav_ChargePerson 用户Nav_User //listPlanSetRund[i].CHECKTIME "Nav_ProdutionUnit.Nav_Enums" List listTeamScheduling = null; string[] pathScheduling = { "Nav_DepartMent", "Nav_Team.Nav_ChargePerson.Nav_User.Nav_Department.Nav_Enums" };//, "Nav_Team.Nav_ChargePerson.Nav_DepartMent" Expression> expressionSC = e => e.ENABLE_STATUS == 0; if (listDepIDOut != null && listDepIDOut.Any()) { expressionSC = expressionSC.And(e => e.TEAM_ID.HasValue && e.Nav_Team.CHARGE_PERSON_ID.HasValue && e.Nav_Team.Nav_ChargePerson.Nav_User.DEPARTMENT_ID.HasValue && !listDepIDOut.Contains(e.Nav_Team.Nav_ChargePerson.Nav_User.DEPARTMENT_ID.Value)); } if (listPlanSetRund[i].CHECKTIME == null) { expressionSC = expressionSC.And(e => e.DATE_TIME == dtFirst && e.START_TIME != e.END_TIME); //没有检查时间 就当天 有排班 listTeamScheduling = this.GetOrderEntities(expressionSC, null, pathScheduling).ToList(); } else { //有检查时间 就检查时间有排班 ChcekDateTime = Convert.ToDateTime(dtFirst.ToString("yyyy-MM-dd") + listPlanSetRund[i].CHECKTIME.Value.ToString(" HH:mm:ss")); expressionSC = expressionSC.And(e => e.DATE_TIME == dtFirst && e.START_TIME <= ChcekDateTime && e.END_TIME >= ChcekDateTime); //e.Nav_DepartMent.DEPARTMENT_TYPE == 2 listTeamScheduling = this.GetOrderEntities(expressionSC, null, pathScheduling).ToList(); //listTeamScheduling = this.GetOrderEntities(e => e.ENABLE_STATUS == 0 && e.DATE_TIME == dtFirst && e.START_TIME != e.END_TIME && e.START_TIME.Date == dtFirst.Date, null, pathScheduling).ToList(); } if (listTeamScheduling != null && listTeamScheduling.Count > 0) { for (int j = 0; j < listTeamScheduling.Count; j++) { if (listTeamScheduling[j].Nav_Team.ENABLE_STATUS == 1) { continue;//是否触发任务 } chargePerson = listTeamScheduling[j].Nav_Team.Nav_ChargePerson;//班长 //listDepartment.Add(listTeamScheduling[j].Nav_DepartMent); listDepartment.Add(chargePerson.Nav_User.Nav_Department != null ? chargePerson.Nav_User.Nav_Department : listTeamScheduling[j].Nav_DepartMent); //班长所在部门 不然审批流不好找 BS034 //listDepartment.Add(listTeamScheduling[j].Nav_DepartMent != null ? listTeamScheduling[j].Nav_DepartMent : chargePerson.Nav_DepartMent); //班长所在部门 listFMUserNotice.Add(chargePerson.Nav_User);//班长 listEndTime.Add(listTeamScheduling[j].END_TIME);//默认当班结束时间 } } } } //else {//未找到通知对象 跳过 continue; } #endregion } if (listFMUserNotice.Count < 1) { //没有找到通知人员信息 continue; } #endregion //CHECK_TYPENAME_CODE = MkPinyinString(listPlanSetRund[i].Nav_CheckType.NAME) + listPlanSetRund[i].Nav_CheckTypeLevel.Nav_Enums.VALUE.ToString(); CHECK_TYPENAME_CODE = GetCheckCode(listPlanSetRund[i].Nav_CheckType.NAME, listPlanSetRund[i].Nav_CheckTypeLevel.Nav_Enums.VALUE); for (int j = 0; j < listFMUserNotice.Count; j++) { #region 获取生产单元 listCheckObject.Clear(); CHECKOBJECT = 0; foreach (var itemUnit in listDepartment[j].Nav_ProdutionUnit) { listCheckObject.Add(itemUnit.Nav_Enums.VALUE); } if (listCheckObject.Count < 1 && (listPlanSetRund[i].Nav_ListSetObject != null && listPlanSetRund[i].Nav_ListSetObject.Any())) { continue; } if (listPlanSetRund[i].Nav_ListSetObject != null && listPlanSetRund[i].Nav_ListSetObject.Any()) { checkObject = listPlanSetRund[i].Nav_ListSetObject.FirstOrDefault(e => listCheckObject.Contains((int)e.CHECKOBJECT)); if (checkObject == null) { //范围不符合 continue; } else { CHECKOBJECT = (int)checkObject.CHECKOBJECT; } } #endregion #region 过滤 检查范围 部门范围 if (listPlanSetRund[i].Nav_ListSetDepObject != null && listPlanSetRund[i].Nav_ListSetDepObject.Any()) { checkDetObject = listPlanSetRund[i].Nav_ListSetDepObject.FirstOrDefault(e => e.DEPARTMENT_ID.Value == listDepartment[j].ID); if (checkDetObject == null) continue; //有限制 不满足 else if (CHECKOBJECT == 0 && checkDetObject.CHECKOBJECT != BSMineTypeEnum.All) CHECKOBJECT = (int)checkDetObject.CHECKOBJECT; } if (CHECKOBJECT == 0 && listDepartment[j].MineType.HasValue) { CHECKOBJECT = listDepartment[j].MineType.Value; } if (listSafeCheckAdd.FirstOrDefault(e => e.PLAN_SET_ID.HasValue && e.PLAN_SET_ID == listPlanSetRund[i].ID && e.CHECKOBJECT.HasValue && e.CHECKOBJECT == CHECKOBJECT && e.USERID_DOPLAN == listFMUserNotice[j].ID) != null) { continue; } #endregion #region model 添加 //添加代办 T_BS_SAFE_CHECK modelRun = new T_BS_SAFE_CHECK(); modelRun.ID = Guid.NewGuid(); modelRun.ORG_ID = filter.GetOrgId(); modelRun.NAME = listPlanSetRund[i].Nav_CheckTypeLevel.Nav_Enums.NAME + listPlanSetRund[i].Nav_CheckType.NAME + "任务表" + (listPlanSetRund[i].PLANCHECKFREQUENCY == 10 ? dtNow.ToString("MMdd") : ""); //+ ((BSPLANCHECKFREQUENCYEnum)listPlanSetRund[i].PLANCHECKFREQUENCY).GetDescription() + ((listPlanSetRund[i].WEEKDATA != null && listPlanSetRund[i].WEEKDATA != 0) ? (((WEEKDATAEnum)listPlanSetRund[i].WEEKDATA).GetDescription()) : "") + ((listPlanSetRund[i].DATA.HasValue && listPlanSetRund[i].DATA != 0) ? listPlanSetRund[i].DATA.ToString() : "") + (listPlanSetRund[i].CHECKTIME.HasValue ? (listPlanSetRund[i].CHECKTIME.Value.ToString("HH:mm")) : "");//代办标题 公司级专业检查每季1日/每周星期一 10点 modelRun.CHECK_TYPE_ID = listPlanSetRund[i].CHECK_TYPE_ID.Value; modelRun.CHECK_TYPE_LEVEL_ID = listPlanSetRund[i].CHECK_TYPE_LEVEL_ID; //当天 //modelRun.CHECKTIME = listPlanSetRund[i].CHECKTIME.HasValue ? Convert.ToDateTime(dtNow.ToString("yyyy-MM-dd ") + listPlanSetRund[i].CHECKTIME.Value.ToString("HH:mm:ss")) : DateTime.Now; modelRun.CREATER_ID = listFMUserNotice[j].ID;//安全检查的创建人 就是通知人 modelRun.CHECKOBJECT = (int)BSMineTypeEnum.Mine;// CHECKOBJECT; modelRun.PLAN_SET_ID = listPlanSetRund[i].ID; modelRun.CREACTTYPE = CREACTTYPEEnum.System;// 10;//系统生成 modelRun.CODE = CHECK_TYPENAME_CODE + j.ToString();//mmss 因为审批流 CODE 长度20 减少长度 CHECK_TYPENAME_CODE 包含年月日 DateTime.Now.ToString("yyyyMMddHH") + //modelRun.STATUCHECK = (int)HMAuditStatusEnmu.已保存; modelRun.STATUCHECK = (int)HMAuditStatusEnmu.草稿; modelRun.USERID_DOPLAN = listFMUserNotice[j].ID;//制表人 modelRun.DEPARTMENTID = listDepartment[j].ID;//检查部门(公司/部门/车间/班组 ID) modelRun.LIMITDATETIME = listEndTime[0]; //[EnumName("HMAuditStatusEnmu")] //public int STATUCHECK { get; set; } if (modelRun.CODE.Length > 25) { modelRun.CODE = modelRun.CODE.Substring(0, 25); } if (listPlanSetRund[i].Nav_ListArea != null && listPlanSetRund[i].Nav_ListArea.Any()) { foreach (var item in listPlanSetRund[i].Nav_ListArea) { modelArea = new T_BS_SAFE_CHECK_RISK_AREA(); modelArea.ID = Guid.NewGuid(); modelArea.ORG_ID = filter.GetOrgId(); modelArea.SAFE_CHECK_ID = modelRun.ID; modelArea.RISK_AREA_ID = item.AREA_ID; modelArea.CREATER_ID = modelRun.CREATER_ID; listArea.Add(modelArea); } } listSafeCheckAdd.Add(modelRun); noticeDataIds.Add(modelRun.ID); noticeUserIds.Add(listFMUserNotice[j].ID); noticeUserNames.Add(listFMUserNotice[j].NAME); noticeTitles.Add(modelRun.NAME + "-制定");//每天的 加上日期 #endregion } ////超时时间设置 //if (listPlanSetRund[i].CHECKTIME.HasValue) //{ // dtTimeOut = Convert.ToDateTime(dtFirst.ToString("yyyy-MM-dd") + listPlanSetRund[i].CHECKTIME.Value.ToString(" HH:mm:ss")); //} //else //{ dtTimeOut = dtFirst.AddHours(12); //} //每次单独添加 因为超时时间不对 if (noticeTitles.Count > 0) { #region 安全检查数据 if (task != null) { task.UPDATE_SUCCES_TIME = DateTime.Now; } //给 T_FM_NOTIFICATION_TASK 添加实体 NotificationTaskService.SendNotificationTask(noticeTitles, noticeDataIds, filter.GetOrgId(), noticeUserIds, noticeUserNames, DateTime.Now, listEndTime, 0, "BS032", () => { if (listSafeCheckAdd.Any()) { this.BantchAddEntityNoCommit(listSafeCheckAdd); if (listArea != null && listArea.Any()) BantchAddEntityNoCommit(listArea); if (task != null && !isUpdate) { UpdateEntityNoCommit(task); isUpdate = true; } } }); #endregion #region AOP记录数据信息 if (HttpContext.Items.ContainsKey("Count")) { try { HttpContext.Items["Count"] = int.Parse(HttpContext.Items["Count"].ToString()) + listSafeCheckAdd.Count; } catch { } } else HttpContext.Items.Add("Count", listSafeCheckAdd.Count); SyncLogDetailService.InsertSyncLogDetail(HttpContext.Items, HttpContext.TraceIdentifier, filter.OrgId, listSafeCheckAdd.Count, Parameter1, SyncLogType.BSCreateCheckPlanSet); //NotificationTaskService.SendNotificationTask(noticeTitles, noticeDataIds, filter.GetOrgId(), noticeUserIds, noticeUserNames, DateTime.Now, dtTimeOut, 0, "BS032", () => //{ // if (listSafeCheckAdd.Any()) // { // this.BantchAddEntityNoCommit(listSafeCheckAdd); // } //}); #endregion } } #endregion } } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } /// /// 班组级每天检查 /// 班组 提前一个小时发送安全检查 /// /// /// [HttpPost, Route("CreateCheckPlanSetClass")] public JsonActionResult CreateCheckPlanSetClass([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { DateTime CURR_TASK_START_TIME = DateTime.Now; DateTime dtNow = DateTime.Now; var Parameter1 = filter.Parameter1; //SyncLogDetailService.InsertSyncLogDetail(HttpContext.Items, HttpContext.TraceIdentifier, filter.OrgId, 0, Parameter1, SyncLogType.BSCreateCheckPlanSet); if (!string.IsNullOrEmpty(filter.Parameter1)) { try { //接收来自页面的参数 DateTime deParm = Convert.ToDateTime(filter.Parameter1); dtNow = deParm; } catch { } } filter.Parameter1 = " ENABLE_STATUS = false "; Expression> expression = e => e.IS_DELETED == false && e.ENABLE_STATUS == 0 && e.PLANCHECKFREQUENCY == 10 && e.Nav_CheckTypeLevel.Nav_Enums.NAME == "班组级";//&&e.PLANCHECKFREQUENCY==10 每天 班组级 List listPlanSet = this.GetOrderEntities(expression, filter, new string[] { "Nav_CheckType", "Nav_CheckTypeLevel.Nav_Enums", "Nav_ListSetObject", "Nav_ListSetDepObject" }).ToList(); List listPlanSetRund = new List(); if (listPlanSet.Count < 1) { return true;//没找跑批信息 } //T_FM_USER User = GetEntity(e => e.CODE == "admin"); //if (User == null) //{ // User = GetEntity(e => e.ID == listPlanSet[0].CREATER_ID.Value);//随便取一个不影响信息 //} //int min = 15;//班组级检查 提前一个小时做跑批 #region 获取时间符合的设置 //5 单次 每天10, 每周20, 每月30, 每季40, for (int i = 0; i < listPlanSet.Count; i++) { //if (ISTimeOK(listPlanSet[i].RUNSETTIME, dtNow, min, min))//设置时间往前后各偏移 5 分钟 判断跑批 switch (listPlanSet[i].PLANCHECKFREQUENCY) { case 10: //每日天执行 时间匹配就添加 listPlanSetRund.Add(listPlanSet[i]); break; default: break; } } #endregion //时间不合适 过 if (listPlanSetRund.Count < 1) { return true; } DateTime dtNowDate = dtNow.Date; DateTime ChcekEndTime = dtNow.AddHours(1);//1个小时以内上班的 ////1个小时内要上班的排班 //string[] pathScheduling = { "Nav_Team.Nav_ChargePerson.Nav_User", "Nav_Team.Nav_Department" }; //listTeamScheduling = this.GetOrderEntities(e => e.ENABLE_STATUS == 0 && e.DATE_TIME.Date == e.START_TIME.Date && e.START_TIME != e.END_TIME && dtNow <= e.START_TIME && e.START_TIME <= ChcekEndTime, null, pathScheduling).ToList();//一个小时以内上班的排班 && e.DATE_TIME == dtNowDate 零点时 #region 隔离排班经常出现重复排班 //1个小时内要上班的排班 //string[] pathScheduling = { "Nav_ChargePerson.Nav_User.ID", "Nav_ChargePerson.Nav_User.NAME" };//报错 string[] pathScheduling = { "Nav_ChargePerson.Nav_User", "Nav_Department.Nav_ProdutionUnit.Nav_Enums" }; //var listDyTeamScheduling2 = this.GetOrderEntities(e => e.ENABLE_STATUS == 0 && e.DATE_TIME.Date == e.START_TIME.Date && e.START_TIME != e.END_TIME && dtNow <= e.START_TIME && e.START_TIME <= ChcekEndTime && e.TEAM_ID.HasValue, null).GroupBy(e => new { e.ENABLE_STATUS, e.DATE_TIME, e.START_TIME, e.END_TIME, e.TEAM_ID, e.ORG_ID }).ToList(); var listDyTeamScheduling = this.GetOrderEntities(e => e.ENABLE_STATUS == 0 && e.DATE_TIME.Date == e.START_TIME.Date && e.START_TIME != e.END_TIME && dtNow <= e.START_TIME && e.START_TIME <= ChcekEndTime && e.TEAM_ID.HasValue, null) .Select(e => new DEPARTMENT_SCHEDULING_TEMP { ENABLE_STATUS = e.ENABLE_STATUS, DATE_TIME = e.DATE_TIME, START_TIME = e.START_TIME, END_TIME = e.END_TIME, TEAM_ID = e.TEAM_ID, ORG_ID = e.ORG_ID, }). GroupBy(e => new { e.ENABLE_STATUS, e.DATE_TIME, e.START_TIME, e.END_TIME, e.TEAM_ID, e.ORG_ID }) .ToList();//一个小时以内上班的排班 && e.DATE_TIME == dtNowDate 零点时 //1小时内 没有排班开始 过 if (listDyTeamScheduling == null || !listDyTeamScheduling.Any()) { return true; } List listTeamScheduling = new List(); foreach (var item in listDyTeamScheduling) { listTeamScheduling.Add(new T_FM_DEPARTMENT_SCHEDULING() { ENABLE_STATUS = item.Key.ENABLE_STATUS, DATE_TIME = item.Key.DATE_TIME, START_TIME = item.Key.START_TIME, END_TIME = item.Key.END_TIME, TEAM_ID = item.Key.TEAM_ID, ORG_ID = item.Key.ORG_ID, }); } List listTeamID = listTeamScheduling.Select(e => e.TEAM_ID.Value).ToList(); var listTeam = GetEntities(e => listTeamID.Contains(e.ID), null, pathScheduling); //var listDepID = listTeamScheduling.Select(e => e.DEPARTMENT_ID); //var listDep = GetEntities(e => listDepID.Contains(e.ID),null); foreach (var item in listTeamScheduling) { item.Nav_Team = listTeam.FirstOrDefault(e => e.ID == item.TEAM_ID.Value); //item.Nav_DepartMent = listDep.FirstOrDefault(e => e.ID == item.DEPARTMENT_ID); } #endregion #region 数据校验 今天添加对应的跑批 List listPlanSetID = listPlanSetRund.Select(e => e.ID).ToList(); // 系统生成10 用户主动创建20 今天 生成的 //最小时间 List listSafeCheck = this.GetOrderEntities(e => e.ENABLE_STATUS == 0 && e.CREACTTYPE == CREACTTYPEEnum.System && e.CREATE_TIME >= dtNowDate && e.PLAN_SET_ID.HasValue && listPlanSetID.Contains(e.PLAN_SET_ID.Value), filter).OrderByDescending(e => e.CREATE_TIME).ToList(); #endregion #region 跑批添加数据 Guid CHECK_PLAN_SETL_ID = Guid.Empty; T_BS_SAFE_CHECK modelCheck = null; List listSafeCheckAdd = new List(); //需要插入数据库的安检记录 List listFMUserNotice = null;//每项设置的通知人员(中间表) List listDepartment = null; DateTime dtTimeOut = DateTime.Now; string CHECK_TYPENAME_CODE = string.Empty;//拼音首字母 T_FM_SYNC_TASK task = null; T_FM_USER chargeUser = null; List listAreObject = null; //检查区域 部门 范围 var listAreObjectT = GetEntities(e => e.ORG_ID == listPlanSetRund[0].ORG_ID, null, null); if (listAreObjectT != null) { listAreObject = listAreObjectT.ToList(); } task = GetEntity(filter.Keyword); if (task != null) { //不能新增去年的 task.CURR_TASK_START_TIME = CURR_TASK_START_TIME;//上次同步结束时间 task.UPDATE_SUCCES_TIME = DateTime.Now;//上次同步结束时间 task.SYNC_PARAM = "";//清空参数 } int CHECKOBJECT = 0; List listCheckObject = new List(); T_BS_PLAN_SET_OBJECT checkObject = null; T_BS_PLAN_SET_DEP_OBJECT checkDepObject = null; for (int i = 0; i < listPlanSetRund.Count; i++) { listSafeCheckAdd = new List(); var noticeTitles = new List(); var noticeDataIds = new List(); var noticeUserIds = new List(); var noticeUserNames = new List(); CHECK_PLAN_SETL_ID = listPlanSetRund[i].ID; //modelCheck = listSafeCheck.FirstOrDefault(e => e.PLAN_SET_ID == CHECK_PLAN_SETL_ID); //if (modelCheck != null) //{ // //有添加检查信息 // continue; //} listDepartment = new List(); listFMUserNotice = new List(); List listEndTime = new List(); List listStartTime = new List(); //班组级 只有 班长 if (listTeamScheduling != null && listTeamScheduling.Count > 0) { for (int j = 0; j < listTeamScheduling.Count; j++) { chargeUser = listTeamScheduling[j].Nav_Team.Nav_ChargePerson.Nav_User; if (listFMUserNotice.Contains(chargeUser)) { //如果一个人 任多个班 班长 //不重复发送 检查 continue; } listFMUserNotice.Add(chargeUser);//班长 listDepartment.Add(listTeamScheduling[j].Nav_Team.Nav_Department);//排班所在组织 (不然不好匹配检查库) listStartTime.Add(listTeamScheduling[j].START_TIME);//当班开始时间 if (listTeamScheduling[j].END_TIME < listTeamScheduling[j].START_TIME) { //处理 如果傍晚上班 凌晨下班 排班结束时间有误 listEndTime.Add(listTeamScheduling[j].END_TIME.AddDays(1));//默认当班结束时间 } else { listEndTime.Add(listTeamScheduling[j].END_TIME);//默认当班结束时间 } //chargePerson = listTeamScheduling[j].Nav_Team.Nav_ChargePerson;//班长 //listDepartment.Add(listTeamScheduling[j].Nav_DepartMent); //listDepartment.Add(chargePerson.Nav_User.Nav_Department != null ? chargePerson.Nav_User.Nav_Department : listTeamScheduling[j].Nav_DepartMent); //班长所在部门 不然审批流不好找 BS034 //listDepartment.Add(listTeamScheduling[j].Nav_DepartMent != null ? listTeamScheduling[j].Nav_DepartMent : chargePerson.Nav_DepartMent); //班长所在部门 } } //else {//未找到通知对象 跳过 continue; } if (listFMUserNotice.Count < 1) { //listPlanSetRund[i] //没有找到通知人员信息 continue; } //CHECK_TYPENAME_CODE = MkPinyinString(listPlanSetRund[i].Nav_CheckType.NAME) + listPlanSetRund[i].Nav_CheckTypeLevel.Nav_Enums.VALUE.ToString() + DateTime.Now.ToString("yyyyMMddHH"); CHECK_TYPENAME_CODE = GetCheckCode(listPlanSetRund[i].Nav_CheckType.NAME, listPlanSetRund[i].Nav_CheckTypeLevel.Nav_Enums.VALUE); string CheckName = string.Empty; for (int j = 0; j < listFMUserNotice.Count; j++) { CheckName = listPlanSetRund[i].Nav_CheckTypeLevel.Nav_Enums.NAME + listPlanSetRund[i].Nav_CheckType.NAME + "任务表" + (listPlanSetRund[i].PLANCHECKFREQUENCY == 10 ? listStartTime[j].ToString("MMdd") : ""); modelCheck = listSafeCheck.FirstOrDefault(e => e.PLAN_SET_ID == CHECK_PLAN_SETL_ID && e.USERID_DOPLAN == listFMUserNotice[j].ID && e.NAME == CheckName);//e.CREATE_TIME.HasValue && listStartTime[j].Date != e.CREATE_TIME.Value.Date 今天白班有上班 又 0点开始上班 if (modelCheck != null) { if (listStartTime[j].Date != dtNow.Date) { if (modelCheck.CREATE_TIME.HasValue && (dtNow - modelCheck.CREATE_TIME.Value).TotalHours < 2) continue; //如果时间差小于2个小时 也是 判断为重复(实际是1个班组工作时长 8 小时) else { DateTime dtCheck = dtNow.AddHours(-2); var listCheck = listSafeCheck.Where(e => e.PLAN_SET_ID == CHECK_PLAN_SETL_ID && e.USERID_DOPLAN == listFMUserNotice[j].ID && (e.CREATE_TIME.Value.Date == dtNow.Date || e.CREATE_TIME.Value >= dtCheck || e.NAME == CheckName)); if (listCheck != null && listCheck.Any()) { continue; } } } else { continue; //这个人 这个检查项目有添加过 } } #region 检查区域 获取 #region 新版 listCheckObject.Clear(); CHECKOBJECT = 0; foreach (var itemUnit in listDepartment[j].Nav_ProdutionUnit) { listCheckObject.Add(itemUnit.Nav_Enums.VALUE); } if (listCheckObject.Count < 1 && (listPlanSetRund[i].Nav_ListSetObject != null && listPlanSetRund[i].Nav_ListSetObject.Any())) { continue; } if (listPlanSetRund[i].Nav_ListSetObject != null && listPlanSetRund[i].Nav_ListSetObject.Any()) { checkObject = listPlanSetRund[i].Nav_ListSetObject.FirstOrDefault(e => listCheckObject.Contains((int)e.CHECKOBJECT)); if (checkObject == null) { //范围不符合 continue; } else { CHECKOBJECT = (int)checkObject.CHECKOBJECT; } } #endregion #region 旧版 //CHECKOBJECT = GetCHECKOBJECT(listDepartment[j], filter.OrgId.Value, listAreObject);// listFMUserNotice[j].ORG_ID.Value ////判断检查范围 如果不符合 就跳过 //if (listPlanSetRund[i].Nav_ListSetObject != null && listPlanSetRund[i].Nav_ListSetObject.Any()) //{ // checkObject = listPlanSetRund[i].Nav_ListSetObject.FirstOrDefault(e => (int)e.CHECKOBJECT == CHECKOBJECT); // if (checkObject == null) // { // //范围不符合 // continue; // } //} #endregion #endregion if (listPlanSetRund[i].Nav_ListSetDepObject != null && listPlanSetRund[i].Nav_ListSetDepObject.Any()) { checkDepObject = listPlanSetRund[i].Nav_ListSetDepObject.FirstOrDefault(e => e.DEPARTMENT_ID.HasValue && e.DEPARTMENT_ID.Value == listDepartment[j].ID); if (checkDepObject == null) { //范围不符合 continue; } //else //{ // CHECKOBJECT = (int)checkDepObject.CHECKOBJECT; //} } if (CHECKOBJECT == 0 && listDepartment[j].MineType.HasValue) { CHECKOBJECT = listDepartment[j].MineType.Value; } if (listSafeCheckAdd.FirstOrDefault(e => e.PLAN_SET_ID.HasValue && e.PLAN_SET_ID == listPlanSetRund[i].ID && e.CHECKOBJECT.HasValue && e.CHECKOBJECT == CHECKOBJECT && e.USERID_DOPLAN == listFMUserNotice[j].ID) != null) { continue; } //添加代办 T_BS_SAFE_CHECK modelRun = new T_BS_SAFE_CHECK(); modelRun.ID = Guid.NewGuid(); modelRun.ORG_ID = filter.GetOrgId(); modelRun.NAME = CheckName;// listPlanSetRund[i].Nav_CheckTypeLevel.Nav_Enums.NAME + listPlanSetRund[i].Nav_CheckType.NAME + "任务表" + (listPlanSetRund[i].PLANCHECKFREQUENCY == 10 ? listStartTime[j].ToString("MMdd") : ""); //23 点时 添加了零点的记录 //+ ((BSPLANCHECKFREQUENCYEnum)listPlanSetRund[i].PLANCHECKFREQUENCY).GetDescription() + ((listPlanSetRund[i].WEEKDATA != null && listPlanSetRund[i].WEEKDATA != 0) ? (((WEEKDATAEnum)listPlanSetRund[i].WEEKDATA).GetDescription()) : "") + ((listPlanSetRund[i].DATA.HasValue && listPlanSetRund[i].DATA != 0) ? listPlanSetRund[i].DATA.ToString() : "") + (listPlanSetRund[i].CHECKTIME.HasValue ? (listPlanSetRund[i].CHECKTIME.Value.ToString("HH:mm")) : "");//代办标题 公司级专业检查每季1日/每周星期一 10点 modelRun.CHECK_TYPE_ID = listPlanSetRund[i].CHECK_TYPE_ID.Value; modelRun.CHECK_TYPE_LEVEL_ID = listPlanSetRund[i].CHECK_TYPE_LEVEL_ID; //当天 //modelRun.CHECKTIME = listPlanSetRund[i].CHECKTIME.HasValue ? Convert.ToDateTime(dtNow.ToString("yyyy-MM-dd ") + listPlanSetRund[i].CHECKTIME.Value.ToString("HH:mm:ss")) : DateTime.Now; modelRun.CREATER_ID = listFMUserNotice[j].ID;//安全检查的创建人 就是通知人 modelRun.CHECKOBJECT = (int)BSMineTypeEnum.Mine;// CHECKOBJECT; modelRun.PLAN_SET_ID = listPlanSetRund[i].ID; modelRun.CREACTTYPE = CREACTTYPEEnum.System;// 10;//系统生成 modelRun.CODE = CHECK_TYPENAME_CODE + i.ToString() + j.ToString();//mmss 因为审批流 CODE 长度20 减少长度 modelRun.CREATE_TIME = dtNow;//添加时间 //modelRun.STATUCHECK = (int)HMAuditStatusEnmu.已保存; modelRun.STATUCHECK = (int)HMAuditStatusEnmu.草稿; modelRun.USERID_DOPLAN = listFMUserNotice[j].ID;//制表人 modelRun.DEPARTMENTID = listDepartment[j].ID;//检查部门(公司/部门/车间/班组 ID) modelRun.LIMITDATETIME = listEndTime[j]; //[EnumName("HMAuditStatusEnmu")] //public int STATUCHECK { get; set; } if (modelRun.CODE.Length > 25) { modelRun.CODE = modelRun.CODE.Substring(0, 25); } //人 部门ID 名称 listSafeCheckAdd.Add(modelRun); noticeDataIds.Add(modelRun.ID); noticeUserIds.Add(listFMUserNotice[j].ID); noticeUserNames.Add(listFMUserNotice[j].NAME); noticeTitles.Add(modelRun.NAME + "-制定");//每天的 加上日期 } ////超时时间设置 //if (listPlanSetRund[i].CHECKTIME.HasValue) //{ // dtTimeOut = Convert.ToDateTime(dtFirst.ToString("yyyy-MM-dd") + listPlanSetRund[i].CHECKTIME.Value.ToString(" HH:mm:ss")); //} //else //{ //dtTimeOut = dtNowDate.AddHours(12); //} //每次单独添加 因为超时时间不对 if (noticeTitles.Count > 0) { if (task != null) { task.UPDATE_SUCCES_TIME = DateTime.Now; } var listOperateLog = BSOperateLogService.GetListOperateLog(OPERATEPOINT_Enums.GotCheck, Guid.Empty, Guid.Empty, noticeDataIds, noticeUserIds, noticeUserNames, filter.OrgId, null, null); //给 T_FM_NOTIFICATION_TASK 添加实体 NotificationTaskService.SendNotificationTask(noticeTitles, noticeDataIds, filter.GetOrgId(), noticeUserIds, noticeUserNames, listStartTime, listEndTime, 0, "BS032", () => { if (listSafeCheckAdd.Any()) { this.BantchAddEntityNoCommit(listSafeCheckAdd); if (listOperateLog != null && listOperateLog.Any()) BantchSaveEntityNoCommit(listOperateLog); if (task != null) UpdateEntityNoCommit(task); } }); if (HttpContext.Items.ContainsKey("Count")) { try { HttpContext.Items["Count"] = int.Parse(HttpContext.Items["Count"].ToString()) + listSafeCheckAdd.Count; } catch { } } else HttpContext.Items.Add("Count", listSafeCheckAdd.Count); SyncLogDetailService.InsertSyncLogDetail(HttpContext.Items, HttpContext.TraceIdentifier, filter.OrgId, listSafeCheckAdd.Count, Parameter1, SyncLogType.BSCreateCheckPlanSetClass, null); } } #endregion } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } /// /// 获取安全检查 编号 /// /// /// /// private string GetCheckCode(string NAME, int LevelVal) { string codeResult = ""; codeResult = MkPinyinString(NAME); if (codeResult.Length > 4) { codeResult = codeResult.Substring(0, 4); } codeResult += LevelVal.ToString() + DateTime.Now.ToString("yyyyMMddHH"); return codeResult; } /// /// 给主要检查人发送检查登记表 /// /// /// [HttpPost, Route("BeginCheck")] public JsonActionResult BeginCheck([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { DateTime dtNow = DateTime.Now; if (!string.IsNullOrEmpty(filter.Parameter1)) { try { //接收来自页面的参数 DateTime deParm = Convert.ToDateTime(filter.Parameter1); dtNow = deParm; } catch { } } T_FM_SYNC_TASK task = GetEntity(filter.Keyword); DateTime dtMax = dtNow;//按设置时间 可以提前5分钟执行跑批生成代办任务 //秒 = 0,分 = 1,时 = 2,天 = 3, //DateTime dtMin = dtNow; switch (task.SYNC_UNIT) { case 0: dtMax = dtMax.AddSeconds(task.PERIODIC_TIME); //if (string.IsNullOrEmpty(filter.Parameter1)) // dtMin = dtNow.AddSeconds(-1 * task.PERIODIC_TIME); break; case 1: dtMax = dtMax.AddMinutes(task.PERIODIC_TIME); //if (string.IsNullOrEmpty(filter.Parameter1)) // dtMin = dtNow.AddMinutes(-1 * task.PERIODIC_TIME); break; case 2: dtMax = dtMax.AddHours(task.PERIODIC_TIME); //if (string.IsNullOrEmpty(filter.Parameter1)) // dtMin = dtNow.AddHours(-1 * task.PERIODIC_TIME); break; case 3: dtMax = dtMax.AddDays(task.PERIODIC_TIME); //if (string.IsNullOrEmpty(filter.Parameter1)) // dtMin = dtNow.AddDays(-1 * task.PERIODIC_TIME); break; default: break; } var checks = GetEntities(e => e.STATUSPLAN >= 5 && e.STATUSPLAN != 30 && e.STATUCHECK <= 10 && e.CHECKTIME.HasValue && e.CHECKTIME.Value < dtMax && e.STATECHECK == STATECHECK.WaitForCheck, null, null);//检查时间在检查范围内、并且未保存过 检查信息(后续再判断是否有发送过检查登记) //有设置 检查时间 只是保存 STATUCHECK 还是 0 别的操作也是 0 删除 if (checks == null || !checks.Any()) { //如果时间段内没有 return true; } List listCheckID = checks.Select(e => e.ID).ToList(); //var listDetail = GetEntities(e => listCheckID.Contains(e.SAFE_CHECK_ID), null, null); var listDetailUser = GetEntities(e => listCheckID.Contains(e.SAFE_CHECK_ID) && e.ISMAINCHECK, null, "Nav_User"); List listTaskBS057 = new List(); //DateTime dtTimeOut = DateTime.Now.Date.AddDays(1).AddSeconds(-1); DateTime? dtTimeOut = null; //每个条检查记录的人员信息 List listUserIDSend = new List(); List listUpdateDetailUser = new List();//检查人员是制表人 修改信息 //给发送【检查登记】表 foreach (var item in checks) { item.STATUCHECK = (int)HMAuditStatusEnmu.审批中; item.STATECHECK = STATECHECK.Draft; var listCheckUser = listDetailUser.Where(e => e.SAFE_CHECK_ID == item.ID); listUserIDSend.Clear();//清空 下次再好判断 string taskName = item.NAME.Replace("任务表", "记录表") + "-检查登记"; foreach (var itemU in listCheckUser) { if (itemU.USER_ID == item.USERID_DOPLAN) { //主要检查人 是制表人 //如果 主要检查人是制表人 检查明细信息修改 itemU.ISCHECK = true;//检查结果确认 itemU.CHECKTIME = DateTime.Now; listUpdateDetailUser.Add(itemU); } //发送待办 记录表-检查登记 if (listUserIDSend.Contains(itemU.USER_ID)) { continue; } else { dtTimeOut = NotificationTaskService.GetTaskEndTime(FMTASKTYPE.BS_SafeCheck, filter.OrgId.Value, dtNow, null, item.LIMITDATETIME); listUserIDSend.Add(itemU.USER_ID); listTaskBS057.Add(NotificationTaskService.InsertUserNoticeTaskModel(taskName, item.ID, item.ORG_ID, itemU.USER_ID, itemU.Nav_User.NAME, DateTime.Now, dtTimeOut.Value, 0, "BS057")); } } } if (task != null) { task.CURR_TASK_START_TIME = dtNow;//上次同步结束时间 task.UPDATE_SUCCES_TIME = DateTime.Now;//上次同步结束时间 task.SYNC_PARAM = "";//清空参数 } this.UnifiedCommit(() => { if (task != null)//跑批更新 UpdateEntityNoCommit(task); if (listTaskBS057.Count > 0)//检查登记 BantchSaveEntityNoCommit(listTaskBS057); if (listUpdateDetailUser.Count > 0)//检查人是主要负责人 BantchSaveEntityNoCommit(listUpdateDetailUser); BantchSaveEntityNoCommit(checks);//检查记录表单 STATUCHECK (int)HMAuditStatusEnmu.审批中; }); } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } /// /// 获取矿山类型 /// /// /// /// BSMineTypeEnum public int GetCHECKOBJECT(T_FM_DEPARTMENT modelDep, Guid OrgId, List listAreObject) { int CHECKOBJECT = 0; //查看配置信息 if (listAreObject != null && listAreObject.Count > 0) { var obj = listAreObject.Find(e => e.DEPARTMENTID == modelDep.ID); if (obj != null) { CHECKOBJECT = (int)obj.CHECKOBJECT; return CHECKOBJECT; } } if (OrgId == new Guid("D9871BA8-0EEC-9E4A-BB87-7D5A540D8913")) { //豫鹭 只有选矿 CHECKOBJECT = 10; } else { if (modelDep.NAME.Contains("选矿")) { CHECKOBJECT = 10; } else if (modelDep.NAME.Contains("尾矿")) { CHECKOBJECT = 20; } else if (modelDep.NAME.Contains("矿山")) { CHECKOBJECT = 30; } else if (modelDep.NAME.Contains("地下矿")) { CHECKOBJECT = 40; } else { if (modelDep.PARENT_ID != null) { modelDep = this.GetEntity(e => e.ID == modelDep.PARENT_ID); CHECKOBJECT = GetCHECKOBJECT(modelDep, modelDep.ORG_ID.Value, null); } } } return CHECKOBJECT; } /// /// 制定任务 根据安全检查 制定任务 触发跑批 给检查对象添加待办事项 /// /// /// [HttpPost, Route("CreateSubmitContentNotice")] [TypeFilter(typeof(CustomActionFilterAttribute))] public JsonActionResult CreateSubmitContentNotice([FromBody] KeywordFilter filter) { return SafeExecute(() => { try { DateTime dtNow = DateTime.Now; var run = this.GetEntity(filter.Keyword); //一开始 或者下次执行日期为今天 if ((run.CREATE_TIME.Value.Date <= dtNow.Date && run.EXECUTE_NUM == 0) || run.NEXT_START_TIME.Date <= dtNow.Date) { //执行跑批 run.NEXT_START_TIME = dtNow.AddDays(1); if (run.CREATE_TIME.Value.Date == dtNow.Date) { run.EXECUTE_NUM++; } //超期 每天提示整改落实人 //整改单 有整改落实人 但是整改责任人未签字 状态 小于 保存并通知或者延期申请,最后时间小于应该完成的时间 var listNotice = this.GetEntities(e => e.ACTUAL_DEAL_USER_ID.HasValue && e.Nav_SubmitContent != null && e.Nav_ListUserSign == null && (e.DEALSITUATION < (int)DealSituation.Notice || (e.DEALSITUATION == (int)DealSituation.Delay && e.Nav_SubmitContent.LastDateUser >= dtNow)), null, new string[] { "Nav_UserActualDeal", "Nav_ListUserSign", "Nav_SubmitContent" }); //var listNotice = this.GetEntities(e => e.ACTUAL_DEAL_USER_ID.HasValue && e.Nav_SubmitContent != null, null, new string[] { "Nav_UserActualDeal", "Nav_ListUserSign", "Nav_SubmitContent" }); Dictionary dicUserMaster = new Dictionary(); DateTime dtNowDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")); T_FM_USER modelMaster = null; List listPersonNotice = new List(); if (listNotice != null && listNotice.Count() > 0) { double totalDays = 0; int maxDays = 0; foreach (var item in listNotice) { totalDays = (item.Nav_SubmitContent.LastDateUser.Value - dtNow).TotalDays; switch (item.QUESTION_LEVEL) { case 10: maxDays = (int)BSDelayDaysNoticeEnum.重大; break; case 20: maxDays = (int)BSDelayDaysNoticeEnum.A; break; case 30: maxDays = (int)BSDelayDaysNoticeEnum.B; break; case 40: maxDays = (int)BSDelayDaysNoticeEnum.C; break; case 50: maxDays = (int)BSDelayDaysNoticeEnum.D; break; default: break; } if (totalDays > maxDays) { //通知整改责任人的领导 if (dicUserMaster.ContainsKey(item.ACTUAL_DEAL_USER_ID.Value)) { modelMaster = dicUserMaster[item.ACTUAL_DEAL_USER_ID.Value]; } else { //查找领导 if (item.Nav_UserActualDeal.DEPARTMENT_ID.HasValue) { //获取组织结构部门负责人 modelMaster = GetPersonMaster(item.Nav_UserActualDeal.DEPARTMENT_ID.Value); } if (modelMaster != null) { dicUserMaster.Add(item.ACTUAL_DEAL_USER_ID.Value, modelMaster); } } if (modelMaster == null) { //找不到领导 var notice = NotificationTaskService.InsertUserNoticeTaskModel("隐患整改超期单:【未找到上级】" + item.NAME, item.ID, item.ORG_ID, item.ACTUAL_DEAL_USER_ID.Value, item.Nav_UserActualDeal.NAME, dtNowDate, dtNowDate.AddDays(1).AddSeconds(-1), (int)FMNoticeTypeEnum.消息, "BS044_SHOWPRINTDOUT"); listPersonNotice.Add(notice); } else { //超期 给落实整改人的领导发送待办 var notice = NotificationTaskService.InsertUserNoticeTaskModel("隐患整改超期单【下属:" + item.Nav_UserActualDeal.NAME + "】:" + item.NAME, item.ID, item.ORG_ID, modelMaster.ID, modelMaster.NAME, dtNowDate, dtNowDate.AddDays(1).AddSeconds(-1), (int)FMNoticeTypeEnum.消息, "BS044_SHOWPRINTDOUT"); listPersonNotice.Add(notice); } } else { //通知 var notice = NotificationTaskService.InsertUserNoticeTaskModel("隐患整改超期单:" + item.NAME, item.ID, item.ORG_ID, item.ACTUAL_DEAL_USER_ID.Value, item.Nav_UserActualDeal.NAME, item.CREATE_TIME.Value, item.Nav_SubmitContent.LastDateUser.Value, (int)FMNoticeTypeEnum.消息, "BS044"); listPersonNotice.Add(notice); } } } this.UnifiedCommit(() => { UpdateEntityNoCommit(run); if (listPersonNotice.Count > 0) BantchSaveEntityNoCommit(listPersonNotice);//NoCommit }); } } catch (Exception ex) { if (!string.IsNullOrEmpty(ex.StackTrace)) throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); else throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); } return true; }); } /// /// 获取部门负责人(根据组织结构) /// /// /// public T_FM_USER GetPersonMaster(Guid DepartmentID) { T_FM_DEPARTMENT result = new T_FM_DEPARTMENT(); result = this.GetEntity(DepartmentID, new string[] { "Nav_User" }); if (result.Nav_User == null) { if (result.PARENT_ID.HasValue) { return GetPersonMaster(result.PARENT_ID.Value); } else { return null; } } else { return result.Nav_User; } } #region 获取汉字转换拼音 首字母 /// /// /// /// /// public string MkPinyinString(string HanZiStr, bool isMore = false) //获取汉字字符串的拼音首字母,含多音字 { int i, j, k, m; string tmpStr; string returnStr = ""; //返回最终结果的字符串 string[] tmpArr; for (i = 0; i < HanZiStr.Length; i++) { //处理汉字字符串,对每个汉字的首字母进行一次循环 tmpStr = GetPinyin((char)HanZiStr[i], isMore); //获取第i个汉字的拼音首字母,可能为1个或多个 if (tmpStr.Length > 0) { //汉字的拼音首字母存在的情况才进行操作 if (returnStr != "") { //不是第一个汉字 Regex regex = new Regex(","); tmpArr = regex.Split(returnStr); returnStr = ""; for (k = 0; k < tmpArr.Length; k++) { for (j = 0; j < tmpStr.Length; j++) //对返回的每个首字母进行拼接 { string charcode = tmpStr[j].ToString(); //取出第j个拼音字母 returnStr += tmpArr[k] + charcode + ","; } } if (returnStr != "") returnStr = returnStr.Substring(0, returnStr.Length - 1); } else { //构造第一个汉字返回结果 for (m = 0; m < tmpStr.Length - 1; m++) returnStr += tmpStr[m] + ","; returnStr += tmpStr[tmpStr.Length - 1]; } } } return returnStr; //返回处理结果字符串,以,分隔每个拼音组合 } private string GetPinyin(char HanZi, bool isMore) //获取单个汉字对应的拼音首字符字符串, { // 汉字拼音首字母列表 本列表包含了20902个汉字,收录的字符的Unicode编码范围为19968至40869 // string strChineseFirstPY = "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY"; //此处收录了375个多音字 string MultiPinyin = string.Empty; if (isMore) { MultiPinyin = "19969:DZ,19975:WM,19988:QJ,20048:YL,20056:SC,20060:NM,20094:QG,20127:QJ,20167:QC,20193:YG,20250:KH,20256:ZC,20282:SC,20285:QJG,20291:TD,20314:YD,20340:NE,20375:TD,20389:YJ,20391:CZ,20415:PB,20446:YS,20447:SQ,20504:TC,20608:KG,20854:QJ,20857:ZC,20911:PF,20504:TC,20608:KG,20854:QJ,20857:ZC,20911:PF,20985:AW,21032:PB,21048:XQ,21049:SC,21089:YS,21119:JC,21242:SB,21273:SC,21305:YP,21306:QO,21330:ZC,21333:SDC,21345:QK,21378:CA,21397:SC,21414:XS,21442:SC,21477:JG,21480:TD,21484:ZS,21494:YX,21505:YX,21512:HG,21523:XH,21537:PB,21542:PF,21549:KH,21571:E,21574:DA,21588:TD,21589:O,21618:ZC,21621:KHA,21632:ZJ,21654:KG,21679:LKG,21683:KH,21710:A,21719:YH,21734:WOE,21769:A,21780:WN,21804:XH,21834:A,21899:ZD,21903:RN,21908:WO,21939:ZC,21956:SA,21964:YA,21970:TD,22003:A,22031:JG,22040:XS,22060:ZC,22066:ZC,22079:MH,22129:XJ,22179:XA,22237:NJ,22244:TD,22280:JQ,22300:YH,22313:XW,22331:YQ,22343:YJ,22351:PH,22395:DC,22412:TD,22484:PB,22500:PB,22534:ZD,22549:DH,22561:PB,22612:TD,22771:KQ,22831:HB,22841:JG,22855:QJ,22865:XQ,23013:ML,23081:WM,23487:SX,23558:QJ,23561:YW,23586:YW,23614:YW,23615:SN,23631:PB,23646:ZS,23663:ZT,23673:YG,23762:TD,23769:ZS,23780:QJ,23884:QK,24055:XH,24113:DC,24162:ZC,24191:GA,24273:QJ,24324:NL,24377:TD,24378:QJ,24439:PF,24554:ZS,24683:TD,24694:WE,24733:LK,24925:TN,25094:ZG,25100:XQ,25103:XH,25153:PB,25170:PB,25179:KG,25203:PB,25240:ZS,25282:FB,25303:NA,25324:KG,25341:ZY,25373:WZ,25375:XJ,25384:A,25457:A,25528:SD,25530:SC,25552:TD,25774:ZC,25874:ZC,26044:YW,26080:WM,26292:PB,26333:PB,26355:ZY,26366:CZ,26397:ZC,26399:QJ,26415:ZS,26451:SB,26526:ZC,26552:JG,26561:TD,26588:JG,26597:CZ,26629:ZS,26638:YL,26646:XQ,26653:KG,26657:XJ,26727:HG,26894:ZC,26937:ZS,26946:ZC,26999:KJ,27099:KJ,27449:YQ,27481:XS,27542:ZS,27663:ZS,27748:TS,27784:SC,27788:ZD,27795:TD,27812:O,27850:PB,27852:MB,27895:SL,27898:PL,27973:QJ,27981:KH,27986:HX,27994:XJ,28044:YC,28065:WG,28177:SM,28267:QJ,28291:KH,28337:ZQ,28463:TL,28548:DC,28601:TD,28689:PB,28805:JG,28820:QG,28846:PB,28952:TD,28975:ZC,29100:A,29325:QJ,29575:SL,29602:FB,30010:TD,30044:CX,30058:PF,30091:YSP,30111:YN,30229:XJ,30427:SC,30465:SX,30631:YQ,30655:QJ,30684:QJG,30707:SD,30729:XH,30796:LG,30917:PB,31074:NM,31085:JZ,31109:SC,31181:ZC,31192:MLB,31293:JQ,31400:YX,31584:YJ,31896:ZN,31909:ZY,31995:XJ,32321:PF,32327:ZY,32418:HG,32420:XQ,32421:HG,32438:LG,32473:GJ,32488:TD,32521:QJ,32527:PB,32562:ZSQ,32564:JZ,32735:ZD,32793:PB,33071:PF,33098:XL,33100:YA,33152:PB,33261:CX,33324:BP,33333:TD,33406:YA,33426:WM,33432:PB,33445:JG,33486:ZN,33493:TS,33507:QJ,33540:QJ,33544:ZC,33564:XQ,33617:YT,33632:QJ,33636:XH,33637:YX,33694:WG,33705:PF,33728:YW,33882:SR,34067:WM,34074:YW,34121:QJ,34255:ZC,34259:XL,34425:JH,34430:XH,34485:KH,34503:YS,34532:HG,34552:XS,34558:YE,34593:ZL,34660:YQ,34892:XH,34928:SC,34999:QJ,35048:PB,35059:SC,35098:ZC,35203:TQ,35265:JX,35299:JX,35782:SZ,35828:YS,35830:E,35843:TD,35895:YG,35977:MH,36158:JG,36228:QJ,36426:XQ,36466:DC,36710:JC,36711:ZYG,36767:PB,36866:SK,36951:YW,37034:YX,37063:XH,37218:ZC,37325:ZC,38063:PB,38079:TD,38085:QY,38107:DC,38116:TD,38123:YD,38224:HG,38241:XTC,38271:ZC,38415:YE,38426:KH,38461:YD,38463:AE,38466:PB,38477:XJ,38518:YT,38551:WK,38585:ZC,38704:XS,38739:LJ,38761:GJ,38808:SQ,39048:JG,39049:XJ,39052:HG,39076:CZ,39271:XT,39534:TD,39552:TD,39584:PB,39647:SB,39730:LG,39748:TPB,40109:ZQ,40479:ND,40516:HG,40536:HG,40583:QJ,40765:YQ,40784:QJ,40840:YK,40863:QJG,"; } string resStr = ""; int i, j, uni; uni = (UInt16)HanZi; if (uni > 40869 || uni < 19968) return resStr; //返回该字符在Unicode字符集中的编码值 if (isMore) { i = MultiPinyin.IndexOf(uni.ToString()); } else { i = -1; } //检查是否是多音字,是按多音字处理,不是就直接在strChineseFirstPY字符串中找对应的首字母 if (i < 0) //获取非多音字汉字首字母 { resStr = strChineseFirstPY[uni - 19968].ToString(); } else { //获取多音字汉字首字母 j = MultiPinyin.IndexOf(",", i); resStr = MultiPinyin.Substring(i + 6, j - i - 6); } return resStr; } #endregion } class DEPARTMENT_SCHEDULING_TEMP { public int ENABLE_STATUS { get; set; } public DateTime DATE_TIME { get; set; } public DateTime START_TIME { get; set; } public DateTime END_TIME { get; set; } public Guid? TEAM_ID { get; set; } public Guid? ORG_ID { get; set; } } }