private static Boolean SetWorkProcessInfo(string billNo) { Boolean ret = false; ProduceData produceData = LibProduceCache.Default.GetProduceData(billNo); if (produceData != null) { foreach (DataRow curRow in produceData.WorkOrder.Tables[3].Rows) { ret = true; DataRow parentRow = produceData.WorkOrder.Tables[2].Rows.Find(new object[] { curRow["BILLNO"], curRow["PARENTROWID"] }); if (!LibSysUtils.ToBoolean(parentRow["NEEDGATHER"])) { continue; } string workstationId = LibSysUtils.ToString(curRow["WORKSTATIONID"]); if (!_ProductScheduling.WsRelWorkOrder.ContainsKey(workstationId)) { _ProductScheduling.WsRelWorkOrder.Add(workstationId, new List <string>() { billNo }); } if (!_ProductScheduling.WsRelWorkOrder[workstationId].Contains(billNo)) { _ProductScheduling.WsRelWorkOrder[workstationId].Add(billNo); } if (produceData.FirstWorkProcessNo.Contains(LibSysUtils.ToInt32(parentRow["WORKPROCESSNO"])) && !_ProductScheduling.FirstWs.Contains(workstationId)) { _ProductScheduling.FirstWs.Add(workstationId); } } } return(ret); }
protected override void AfterCommintData() { base.AfterCommintData(); if (!this.ManagerMessage.IsThrow) { List <AxCRL.Core.Mail.LibMailParam> list = new List <AxCRL.Core.Mail.LibMailParam>(); foreach (DataRow curRow in this.DataSet.Tables[0].Rows) { if (curRow.RowState == DataRowState.Modified) { if (LibSysUtils.ToBoolean(curRow["ISUSE"]) && !LibSysUtils.ToBoolean(curRow["ISUSE", DataRowVersion.Original])) { AxCRL.Core.Mail.LibMailParam param = new AxCRL.Core.Mail.LibMailParam(); param.Content = string.Format("您的账号 {0} 已开通。", curRow["USERID"]); param.MailKind = AxCRL.Core.Mail.LibMailKind.Info; param.Subject = "智慧工厂账号开通"; param.To = new List <string>() { LibSysUtils.ToString(curRow["PERSONID"]) }; list.Add(param); } } } if (list.Count > 0) { ThreadPool.QueueUserWorkItem(LibMailHelper.SendMail, list); } } }
/// <summary> /// 获取用户可访问的站点 /// </summary> /// <param name="userHandle"></param> /// <returns></returns> public List <LinkSiteInfo> GetLinkSites(string userHandle) { // 判断userHandle存不存在 LibHandle handle = LibHandleCache.Default.GetCurrentHandle(userHandle); if (handle == null) { throw new Exception("用户句柄无效"); } List <LinkSiteInfo> linkSiteInfoList = new List <LinkSiteInfo>(); string sql = string.Format("select B.SITEID, B.SITENAME, B.SHORTNAME, B.SITEURL, B.SVCURL, B.ISSLAVE,B.ISSENDTO from AXPUSERSITE A join AXPLINKSITE B on A.SITEID = B.SITEID where A.USERID = {0}", LibStringBuilder.GetQuotString(handle.UserId)); LibDataAccess dataAccess = new LibDataAccess(); using (IDataReader reader = dataAccess.ExecuteDataReader(sql)) { while (reader.Read()) { var siteInfo = new LinkSiteInfo() { SiteId = LibSysUtils.ToString(reader["SITEID"]), SiteName = LibSysUtils.ToString(reader["SITENAME"]), ShortName = LibSysUtils.ToString(reader["SHORTNAME"]), SiteUrl = LibSysUtils.ToString(reader["SITEURL"]), SvcUrl = LibSysUtils.ToString(reader["SVCURL"]), IsSlave = LibSysUtils.ToBoolean(reader["ISSLAVE"]), IsSendTo = LibSysUtils.ToBoolean(reader["ISSENDTO"]), }; linkSiteInfoList.Add(siteInfo); } } return(linkSiteInfoList); }
protected override void BeforeUpdate() { base.BeforeUpdate(); HashSet <string> hasSet = new HashSet <string>(); foreach (DataRow curRow in this.DataSet.Tables[1].Rows) { if (curRow.RowState == DataRowState.Deleted) { continue; } DataRow[] subRows = curRow.GetChildRows("AXPPERMISSIONGROUPDETAIL_AXPOPERATEPOWER", DataRowVersion.Current); int mark = 0; foreach (DataRow subRow in subRows) { if (LibSysUtils.ToBoolean(subRow["CANUSE"])) { mark += LibSysUtils.ToInt32(subRow["OPERATEPOWERID"]); } } curRow["OPERATEMARK"] = mark; string progId = LibSysUtils.ToString(curRow["PROGID"]); if (hasSet.Contains(progId)) { this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("行{0}的功能标识重复", curRow["ROWNO"])); } else { hasSet.Add(progId); } } }
/// <summary> /// 获得单据业务流配置下跟当前功能单据数据相匹配的业务流配置明细 /// </summary> /// <param name="billMasterRow">功能单据 主表行数据</param> /// <param name="billProgId">功能单据 功能标识</param> /// <returns>返回业务流配置明细</returns> private List <BusinessInfo> GetBusinessInfo(DataRow billMasterRow, string billProgId) { //传输信息字典【使用条件--业务流配置明细】 Dictionary <string, List <BusinessInfo> > businessInfoDic = new Dictionary <string, List <BusinessInfo> >(); //单据业务流配置:axp.BusinessFlowConfig SqlBuilder sqlBuilder = new SqlBuilder(this.ProgId); //获取单据业务流配置下当前功能单据的业务流配置明细【使用条件,接收人代码,接收人名称,微信,发微信,电话,发短信】 string sql = sqlBuilder.GetQuerySql(0, "B.USECONDITION,C.PERSONID,C.PERSONNAME,C.WECHAT,C.SENDWECHAT,C.PHONENO,C.NEEDSMS", string.Format("A.PROGID={0}", LibStringBuilder.GetQuotString(billProgId)), "B.USECONDITION"); using (IDataReader reader = this.DataAccess.ExecuteDataReader(sql)) { while (reader.Read()) { //单据业务流配置下当前功能单据 单据业务流配置规则配置 使用条件 string useCondition = LibSysUtils.ToString(reader["USECONDITION"]); if (!businessInfoDic.ContainsKey(useCondition)) { businessInfoDic.Add(useCondition, new List <BusinessInfo>()); } BusinessInfo info = new BusinessInfo(); info.PersonId = LibSysUtils.ToString(reader["PERSONID"]); info.PersonName = LibSysUtils.ToString(reader["PERSONNAME"]); info.WeChat = LibSysUtils.ToString(reader["WECHAT"]); info.SendWeChat = LibSysUtils.ToBoolean(reader["SENDWECHAT"]); info.PhoneNo = LibSysUtils.ToString(reader["PHONENO"]); info.NeedSMS = LibSysUtils.ToBoolean(reader["NEEDSMS"]); businessInfoDic[useCondition].Add(info); } } //遍历字典找到使用条件跟当前功能单据数据相匹配的业务流配置明细 List <BusinessInfo> curBusinessInfo = null; foreach (var item in businessInfoDic) { if (string.IsNullOrEmpty(item.Key)) { continue; } if (LibParseHelper.Parse(item.Key, new List <DataRow>() { billMasterRow })) { curBusinessInfo = item.Value; break; } } //若未找到符合当前功能单据数据相匹配的业务流配置明细,则取默认的无条件的业务流配置明细 if (curBusinessInfo == null && businessInfoDic.ContainsKey(string.Empty)) { curBusinessInfo = businessInfoDic[string.Empty]; } return(curBusinessInfo); }
private static bool ParseCore(string condition, List <DataRow> dataRowList, List <Dictionary <string, object> > dataList) { bool result = false; Memory memory = new Memory(); //匹配类似表达式"[A.QTY]>=10 && ([A.MaterialId]=='13212321' || ([A.RANGEID]=='AAA' && [A.SSID]=='9999')) && (([A.DD]=='xxx' || [A.DD]=='xxx1' || [A.DD]=='xxx2') || [A.ZZ]>=0)"; string pattern = @"[[][A-Z]\.\w+[]]"; MatchCollection matchList = Regex.Matches(condition, pattern); HashSet <string> temp = new HashSet <string>(); foreach (var item in matchList) { string field = item.ToString(); if (temp.Contains(field)) { continue; } temp.Add(field); string copyField = field; field = field.Remove(0, 1); field = field.Remove(field.Length - 1, 1); int tableIndex = (int)field[0] - (int)'A'; string fieldName = field.Substring(2, field.Length - 2); object value = null; if (dataRowList != null) { if (dataRowList.Count < tableIndex + 1) { return(result); } if (!dataRowList[tableIndex].Table.Columns.Contains(fieldName)) { return(result); } value = dataRowList[tableIndex][fieldName]; } else if (dataList != null) { if (dataList.Count < tableIndex + 1) { return(result); } if (!dataList[tableIndex].ContainsKey(fieldName)) { return(result); } value = dataList[tableIndex][fieldName]; } memory.AddObject(fieldName, value); condition = condition.Replace(copyField, fieldName); } Script.Execute("if(" + condition + "){ret=true;}else{ret=false;}", memory); result = LibSysUtils.ToBoolean(memory["ret"].value); return(result); }
/// <summary> /// 获取用户可访问的下级站点代码列表 /// </summary> /// <param name="userId"></param> /// <returns>站点代码与站点信息的字典</returns> public static Dictionary <string, LinkSiteInfo> GetCanLoginSlaveSites(string userId) { if (string.IsNullOrEmpty(userId)) { return(null); } Dictionary <string, LinkSiteInfo> siteIds = new Dictionary <string, LinkSiteInfo>(); try { if (ExistLinkSiteTable == false || ExistUserLinkSiteTable == false) { return(null); } string sql = string.Format("select distinct B.* from AXPUSERSITE A " + " left join AXPLINKSITE B on A.SITEID = B.SITEID" + " where A.USERID = {0} and ISSLAVE = 1", LibStringBuilder.GetQuotString(userId)); LibDataAccess dataAccess = new LibDataAccess(); string name = string.Empty; string id = string.Empty; using (IDataReader reader = dataAccess.ExecuteDataReader(sql)) { while (reader.Read()) { id = LibSysUtils.ToString(reader["SITEID"]); name = LibSysUtils.ToString(reader["SHORTNAME"]); if (string.IsNullOrEmpty(id) == false) { siteIds[id] = new LinkSiteInfo() { SiteId = id, SiteName = LibSysUtils.ToString(reader["SITENAME"]), ShortName = LibSysUtils.ToString(reader["SHORTNAME"]), SiteUrl = LibSysUtils.ToString(reader["SITEURL"]), SvcUrl = LibSysUtils.ToString(reader["SVCURL"]), IsSlave = LibSysUtils.ToBoolean(reader["ISSLAVE"]), IsSendTo = LibSysUtils.ToBoolean(reader["ISSENDTO"]), }; } } } } catch { //to do log } return(siteIds); }
private LibBusinessTask GetBusinessTask(string taskId) { SqlBuilder sqlBuilder = new SqlBuilder("axp.ScheduleTask"); string sql = sqlBuilder.GetQuerySql(0, "A.TASKID,A.PROGID,A.BUSINESSTASKID,A.CALENDARID,A.ISJUSTWORKDAY,A.INTERVALTIME,A.EXECDATE,A.REPEATDATEMARK,A.EXECCONDITION,A.TITLE,A.MAINCONTENT,B.EXECTIME", string.Format("A.TASKID={0}", LibStringBuilder.GetQuotString(taskId)), "B.EXECTIME"); LibDataAccess dataAccess = new LibDataAccess(); LibBusinessTask task = null; using (IDataReader reader = dataAccess.ExecuteDataReader(sql)) { while (reader.Read()) { if (task == null) { task = new LibBusinessTask(); task.BusinessTaskId = LibSysUtils.ToString(reader["BUSINESSTASKID"]); task.CalendarId = LibSysUtils.ToString(reader["CALENDARID"]); task.ExecCondition = LibSysUtils.ToString(reader["ExecCondition"]); task.ExecDate = LibSysUtils.ToInt32(reader["EXECDATE"]); task.IntervalTime = LibSysUtils.ToInt32(reader["INTERVALTIME"]); task.IsJustWorkDay = LibSysUtils.ToBoolean(reader["ISJUSTWORKDAY"]); task.ProgId = LibSysUtils.ToString(reader["PROGID"]); task.Title = LibSysUtils.ToString(reader["TITLE"]); task.MainContent = LibSysUtils.ToString(reader["MAINCONTENT"]); task.RepeatDateMark = LibSysUtils.ToInt32(reader["REPEATDATEMARK"]); task.TaskId = taskId; } task.ExecTime.Add(LibSysUtils.ToInt32(reader["EXECTIME"])); } } sql = string.Format("select distinct A.TASKID,A.PERSONID,D.DEPTID,C.USERID from AXPSCHEDULETASKPERSON A " + "inner join AXPSCHEDULETASK B on B.TASKID=A.TASKID left join COMPERSON D on D.PERSONID=A.PERSONID inner join AXPUSER C on C.PERSONID=A.PERSONID " + "where B.TASKID={0}", LibStringBuilder.GetQuotString(taskId)); using (IDataReader reader = dataAccess.ExecuteDataReader(sql, false)) { while (reader.Read()) { task.Liaison.Add(new LibBusinessTaskLiaison() { PersonId = LibSysUtils.ToString(reader["PERSONID"]), DeptId = LibSysUtils.ToString(reader["DEPTID"]), UserId = LibSysUtils.ToString(reader["USERID"]) }); } } return(task); }
private LibBusinessTask AddTask() { LibBusinessTask task = new LibBusinessTask(); DataRow masterRow = this.DataSet.Tables[0].Rows[0]; task.BusinessTaskId = LibSysUtils.ToString(masterRow["BUSINESSTASKID"]); task.CalendarId = LibSysUtils.ToString(masterRow["CALENDARID"]); task.ExecCondition = LibSysUtils.ToString(masterRow["ExecCondition"]); task.ExecDate = LibSysUtils.ToInt32(masterRow["EXECDATE"]); task.IntervalTime = LibSysUtils.ToInt32(masterRow["INTERVALTIME"]); task.IsJustWorkDay = LibSysUtils.ToBoolean(masterRow["ISJUSTWORKDAY"]); task.ProgId = LibSysUtils.ToString(masterRow["PROGID"]); task.Title = LibSysUtils.ToString(masterRow["TITLE"]); task.MainContent = LibSysUtils.ToString(masterRow["MAINCONTENT"]); task.RepeatDateMark = LibSysUtils.ToInt32(masterRow["REPEATDATEMARK"]); task.TaskId = LibSysUtils.ToString(masterRow["TASKID"]); foreach (DataRow curRow in this.DataSet.Tables[1].Rows) { if (curRow.RowState == DataRowState.Deleted) { continue; } task.ExecTime.Add(LibSysUtils.ToInt32(curRow["EXECTIME"])); } string sql = string.Format("select distinct A.TASKID,A.PERSONID,D.DEPTID,C.USERID from AXPSCHEDULETASKPERSON A " + "inner join AXPSCHEDULETASK B on B.TASKID=A.TASKID left join COMPERSON D on D.PERSONID=A.PERSONID inner join AXPUSER C on C.PERSONID=A.PERSONID " + "where B.TASKID={0}", LibStringBuilder.GetQuotString(task.TaskId)); using (IDataReader reader = this.DataAccess.ExecuteDataReader(sql, false)) { while (reader.Read()) { task.Liaison.Add(new LibBusinessTaskLiaison() { PersonId = LibSysUtils.ToString(reader["PERSONID"]), DeptId = LibSysUtils.ToString(reader["DEPTID"]), UserId = LibSysUtils.ToString(reader["USERID"]) }); } } LibBusinessTaskCache.Default.AddCacheItem(task); return(task); }
public void ExecuteDataTables(DataSet dataSet, string storedProcedureName, params object[] parameterValues) { if (this.Transaction.Running) { using (IDataReader reader = dataBase.ExecuteReader(this.Transaction.SqlTransaction, storedProcedureName, parameterValues)) { bool isVirtual = false; int index = 0; do { do { isVirtual = LibSysUtils.ToBoolean(dataSet.Tables[index].ExtendedProperties[TableProperty.IsVirtual]); if (!isVirtual) { ReadTable(reader, dataSet.Tables[index]); } index++; }while (isVirtual); } while (reader.NextResult()); } } else { using (IDataReader reader = dataBase.ExecuteReader(storedProcedureName, parameterValues)) { bool isVirtual = false; int index = 0; do { do { isVirtual = LibSysUtils.ToBoolean(dataSet.Tables[index].ExtendedProperties[TableProperty.IsVirtual]); if (!isVirtual) { ReadTable(reader, dataSet.Tables[index]); } index++; }while (isVirtual); } while (reader.NextResult()); } } }
/// <summary> /// 单点登录。 /// 1.检查当前本站点系统账户中是否存在userId,如果否则不予登录 /// 2.使用userId、loginToken等访问sso管理站点的CheckSSOLoginState方法检验是否已经SSO登录过。 /// 如果未登录过则不予登录。 /// 3.判断当前站点中userId是否已经登录过,如果是则使用对应的LibHandle信息返回,否则则新构造LibHande并返回。 /// </summary> ///<param name="ssoInfo">单点登录信息</param> /// <returns></returns> public LoginInfo SSOLogin(SSOInfo ssoInfo) { LoginInfo loginInfo = new LoginInfo() { IsUsed = true, IsOverUser = false }; SqlBuilder builder = new SqlBuilder("axp.User"); string sql = builder.GetQuerySql(0, "A.PERSONID,A.PERSONNAME,A.ROLEID,A.WALLPAPER,A.WALLPAPERSTRETCH", string.Format("A.USERID={0} And A.ISUSE=1", LibStringBuilder.GetQuotString(ssoInfo.UserId))); LibDataAccess dataAccess = new LibDataAccess(); string roleId = string.Empty; using (IDataReader reader = dataAccess.ExecuteDataReader(sql)) { if (reader.Read()) { loginInfo.PersonId = LibSysUtils.ToString(reader[0]); loginInfo.PersonName = LibSysUtils.ToString(reader[1]); roleId = LibSysUtils.ToString(reader[2]); loginInfo.Wallpaper = LibSysUtils.ToString(reader[3]); loginInfo.Stretch = LibSysUtils.ToBoolean(reader[4]); loginInfo.IsUsed = false; } else { return(loginInfo); } } if (CheckToken(ssoInfo)) { // 授权成功 LibHandle handle = LibHandleCache.Default.IsExistsHandle(LibHandeleType.PC, ssoInfo.UserId); if (handle == null) { handle = LibHandleCache.Default.GetHandle(string.Empty, LibHandeleType.PC, ssoInfo.UserId, loginInfo.PersonId, loginInfo.PersonName, roleId); } loginInfo.Handle = handle.Handle; return(loginInfo); } return(loginInfo); }
/// <summary> /// 将同步数据的配置更新到数据库 /// </summary> /// <param name="dt"></param> public static void UpdateSyncDataSetting(DataTable dt) { if (dt == null || ExistAxpSyncDataInfo == false || ExistLinkSiteTable == false) { return; } List <string> sqlList = new List <string>(); string setting = string.Empty; foreach (DataRow row in dt.Rows) { setting = LibSysUtils.ToString(row["SETTINGID"]); if (string.IsNullOrEmpty(setting)) { continue; } sqlList.Add(string.Format("update AXPSYNCDATASETTING set ISSYNCTO = {0} where SETTINGID = {1}", LibSysUtils.ToBoolean(row["ISSYNCTO"]) ? 1 : 0, LibStringBuilder.GetQuotString(setting))); } LibDataAccess dataAccess = new LibDataAccess(); dataAccess.ExecuteNonQuery(sqlList); }
/// <summary> /// 一般站点登录SSO管理站点(SSO管理站点才有用,前端不需要访问) /// </summary> /// <param name="userId">用户名</param> /// <param name="pwd">密码</param> /// <returns></returns> public string GetTokenByUserId(string userId, string pwd) { if (!EnvProvider.Default.IsSSOManageSite) { return(string.Empty); } LoginInfo loginInfo = new LoginInfo(); SqlBuilder builder = new SqlBuilder("axp.User"); string sql = builder.GetQuerySql(0, "A.PERSONID,A.PERSONNAME,A.ROLEID,A.WALLPAPER,A.WALLPAPERSTRETCH", string.Format("A.USERID={0} And A.USERPASSWORD={1} And A.ISUSE=1", LibStringBuilder.GetQuotString(userId), LibStringBuilder.GetQuotString(pwd))); LibDataAccess dataAccess = new LibDataAccess(); string roleId = string.Empty; bool exists = false; using (IDataReader reader = dataAccess.ExecuteDataReader(sql)) { if (reader.Read()) { loginInfo.PersonId = LibSysUtils.ToString(reader[0]); loginInfo.PersonName = LibSysUtils.ToString(reader[1]); roleId = LibSysUtils.ToString(reader[2]); loginInfo.Wallpaper = LibSysUtils.ToString(reader[3]); loginInfo.Stretch = LibSysUtils.ToBoolean(reader[4]); exists = true; } } if (exists) { LibHandle handle = LibHandleCache.Default.IsExistsHandle(LibHandeleType.PC, userId); if (handle != null) { return(handle.GetToCheckToken()); } handle = LibHandleCache.Default.GetHandle(string.Empty, LibHandeleType.PC, userId, loginInfo.PersonId, loginInfo.PersonName, roleId); return(handle.Token); } return(string.Empty); }
protected override void BeforeUpdate() { base.BeforeUpdate(); DataRow masterRow = this.DataSet.Tables[0].Rows[0]; #region 操作权限标识设置 HashSet <string> hasSet = new HashSet <string>(); foreach (DataRow curRow in this.DataSet.Tables[1].Rows) { if (curRow.RowState == DataRowState.Deleted) { continue; } DataRow[] subRows = curRow.GetChildRows(DmDirectoryBcfTemplate.PermissionDetailSubRelationName, DataRowVersion.Current); int mark = 0; foreach (DataRow subRow in subRows) { if (LibSysUtils.ToBoolean(subRow["CANUSE"])) { mark += LibSysUtils.ToInt32(subRow["OPERATEPOWERID"]); } } curRow["OPERATEMARK"] = mark; string type_BelongID = string.Format("{0}_{1}", LibSysUtils.ToInt32(curRow["BELONGTYPE"]), LibSysUtils.ToString(curRow["BELONGID"])); if (hasSet.Contains(type_BelongID)) { this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("权限行{0}的拥有者重复。", curRow["ROWNO"])); } else { hasSet.Add(type_BelongID); } } #endregion try { if (masterRow.RowState == DataRowState.Added) { //添加前设置目录文件夹对应的文件夹名称 string dirName = Guid.NewGuid().ToString().ToUpper(); //新的文件夹名称,用于对应新创建的文件夹 masterRow["DIRPATH"] = dirName; //保存对应的文件夹路径 #region 检查管理权限 //根据权限设置,确定是否采用前台传递的目录数据。虽然根据权限设置前端控制不显示相关页面,但需要防止前端伪造数据。 DirTypeEnum dirType = (DirTypeEnum)LibSysUtils.ToInt32(masterRow["DIRTYPE"]); string parentDirId = LibSysUtils.ToString(masterRow["PARENTDIRID"]); if (dirType == DirTypeEnum.Public && string.IsNullOrEmpty(parentDirId) == false) { //公共目录才进行检查。如果父目录为空,则应为超级管理员创建也不用检查。 if (DMPermissionControl.Default.HasPermission(this.Handle, parentDirId, string.Empty, DMFuncPermissionEnum.Manage) == false) { //新增时如果对父目录没有管理权限,则设置了目录权限也没用。 this.DataSet.Tables[2].RejectChanges(); this.DataSet.Tables[1].RejectChanges(); } } #endregion } else { string dirId = LibSysUtils.ToString(masterRow["DIRID"]); #region 检查管理权限 //根据权限设置,确定是否采用前台传递的目录数据。虽然根据权限设置前端控制不显示相关页面,但需要防止前端伪造数据。 DirTypeEnum dirType = (DirTypeEnum)LibSysUtils.ToInt32(masterRow["DIRTYPE"]); if (dirType == DirTypeEnum.Public) { //公共目录才进行检查。 if (DMPermissionControl.Default.HasPermission(this.Handle, dirId, string.Empty, DMFuncPermissionEnum.Manage) == false) { //修改时如果对目录没有管理权限,则设置了目录权限也没用。 this.DataSet.Tables[2].RejectChanges(); this.DataSet.Tables[1].RejectChanges(); } } #endregion string oldParentID = LibSysUtils.ToString(masterRow["PARENTDIRID", DataRowVersion.Original]); string currentParentID = LibSysUtils.ToString(masterRow["PARENTDIRID"]); if (oldParentID.Equals(currentParentID) == false) { DirLinkAddress dirLink = new DirLinkAddress(LibSysUtils.ToString(masterRow["DIRID", DataRowVersion.Original]), this.DataAccess); if (dirLink.SubDirIdList.Contains(currentParentID)) { this.ManagerMessage.AddMessage(LibMessageKind.Error, "不能将子目录设置为父目录!"); return; } _OldDirPath = string.Empty; //如果是修改的,则记录修改前的SavePath string path = DMCommonMethod.GetDMRootPath((DirTypeEnum)LibSysUtils.ToInt32(masterRow["DIRTYPE"])); //string path = Path.Combine(EnvProvider.Default.DocumentsPath, (LibSysUtils.ToInt32(masterRow["DIRTYPE"]) == 0 ? "" : "my"));//根据是否为私有类型在路径下增加my string relativePath = dirLink.DirSavePath; _OldDirPath = Path.Combine(path, relativePath); } } } catch (Exception exp) { this.ManagerMessage.AddMessage(LibMessageKind.Error, "保存目录失败,原因:" + exp.Message); throw exp; } }
public void ExportRadXMLData(string filePath, DataSet dataSet, HashSet <int> tableIndex = null, bool dbField = false) { Stopwatch watch = new Stopwatch(); watch.Start(); #region 文件名,路径 string templateFile = System.IO.Path.Combine(AxCRL.Comm.Runtime.EnvProvider.Default.RuningPath, "TempData", "ExcelModel", "List.xml"); String bodyXML = File.ReadAllText(templateFile, Encoding.UTF8); #endregion StringBuilder names = new StringBuilder(""); StringBuilder Worksheet = new StringBuilder(""); for (int index = 0; index < dataSet.Tables.Count; index++) { StringBuilder headCols = new StringBuilder(""); StringBuilder rows = new StringBuilder(""); if (tableIndex != null && !tableIndex.Contains(index)) { continue; } System.Data.DataTable dt = dataSet.Tables[index]; string tableName = string.Empty; if (dbField) { tableName = dt.TableName; } else { if (dt.ExtendedProperties.ContainsKey(TableProperty.DisplayText)) { tableName = LibSysUtils.ToString(dt.ExtendedProperties[TableProperty.DisplayText]); } else { tableName = dt.TableName; } } names.AppendLine(String.Format("<NamedRange ss:Name=\"{0}\" ss:RefersTo=\"={0}!R1C1:R{1}C{2}\"/>", tableName, (dt.Rows.Count + 1).ToString(), dt.Columns.Count.ToString())); //如果存在文本列名相同时则需要此结构 Dictionary <string, int> sameColDic = null; if (!dbField) { sameColDic = new Dictionary <string, int>(); } #region 填充表头 foreach (DataColumn col in dt.Columns) { string name = dbField ? col.ColumnName : string.IsNullOrEmpty(col.Caption) ? col.ColumnName : col.Caption; if (sameColDic.ContainsKey(name)) { sameColDic[name]++; name += sameColDic[name].ToString(); } else { sameColDic.Add(name, 0); } headCols.Append(String.Format("<Cell><Data ss:Type=\"String\">{0}</Data><NamedCell ss:Name=\"{1}\"/></Cell>\r\n", name, tableName)); } #endregion #region 表格具体内容 string type = string.Empty; object value = string.Empty; foreach (DataRow curRow in dt.Rows) { if (curRow.RowState == DataRowState.Deleted) { continue; } StringBuilder builder = new StringBuilder(); #region 填充行的格式 rows.Append("<Row>\r\n"); for (int i = 0; i < dt.Columns.Count; i++) { string style = string.Empty; #region 填充的值和类型 DataColumn col = dt.Columns[i]; LibDataType dataType = (LibDataType)col.ExtendedProperties[FieldProperty.DataType]; LibControlType ctrlType = (LibControlType)col.ExtendedProperties[FieldProperty.ControlType]; switch (dataType) { case LibDataType.Text: case LibDataType.NText: case LibDataType.Binary: case LibDataType.Int64: if (dataType == LibDataType.Int64 && ctrlType == LibControlType.DateTime) { long dateTime = LibSysUtils.ToInt64(curRow[col]); if (dateTime != 0) { type = "DateTime"; style = string.Format(" ss:StyleID=\"s23\""); value = LibDateUtils.LibDateToDateTime(dateTime).ToString("yyyy-MM-ddTHH:mm:ss"); } else { type = "String"; value = string.Empty; } } else { type = "String"; value = curRow[col]; } break; case LibDataType.Int32: case LibDataType.Numeric: case LibDataType.Float: case LibDataType.Double: case LibDataType.Byte: if (dataType == LibDataType.Int32 && ctrlType == LibControlType.Date) { int date = LibSysUtils.ToInt32(curRow[col]); if (date != 0) { type = "DateTime"; value = string.Format("{0}T00:00:00.000", LibDateUtils.LibDateToDateTime(date).ToString("yyyy-MM-dd")); style = string.Format(" ss:StyleID=\"s23\""); } else { type = "String"; value = string.Empty; } } else if (dataType == LibDataType.Int32 && ctrlType == LibControlType.HourMinute) { type = "Number"; string time = LibSysUtils.ToString(curRow[col]); switch (time.Length) { case 1: time = "000" + time + "00"; break; case 2: time = "00" + time + "00"; break; case 3: time = "0" + time + "00"; break; case 4: time = time + "00"; break; default: time = time + "00"; break; } time = "20150101" + time; value = LibStringBuilder.GetQuotObject(LibDateUtils.LibDateToDateTime(LibSysUtils.ToInt64(time)).ToString("HH:mm")); } else if (dataType == LibDataType.Numeric) { type = "Number"; style = string.Format(" ss:StyleID=\"s24\""); value = curRow[col]; } else { type = "Number"; value = curRow[col]; } break; case LibDataType.Boolean: type = "Number"; value = LibSysUtils.ToBoolean(curRow[col.ColumnName]) ? 1 : 0; break; } #endregion rows.Append(string.Format("<Cell{3}><Data ss:Type=\"{0}\">{1}</Data><NamedCell ss:Name=\"{2}\"/></Cell>\r\n", type, value, tableName, style)); } rows.Append("</Row>\r\n"); #endregion } #endregion #region 构建表格模板 Worksheet.AppendLine(string.Format("<Worksheet ss:Name=\"{0}\">\n<Table ss:ExpandedColumnCount=\"{1}\" ss:ExpandedRowCount=\"{2}\" x:FullColumns=\"1\" x:FullRows=\"1\" ss:DefaultRowHeight=\"12\">", tableName, dt.Columns.Count.ToString(), (dt.Rows.Count + 1).ToString())); Worksheet.AppendLine(string.Format(@"<Row> {0} </Row> {1} </Table>", headCols.ToString(), rows.ToString())); Worksheet.AppendLine("<WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">"); Worksheet.AppendLine("<PageSetup>"); Worksheet.AppendLine("<Header x:Data=\"&A\"/>"); Worksheet.AppendLine("<Footer x:Data=\"Page &P\"/>"); Worksheet.AppendLine(@"</PageSetup> <Selected/> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet>"); #endregion } #region 将数据替换到模板中 DateTime datetime = DateTime.Now; bodyXML = bodyXML.Replace("{##Author##}", "Administrator"); bodyXML = bodyXML.Replace("{##Created##}", datetime.ToString()); bodyXML = bodyXML.Replace("{##Names##}", names.ToString()); bodyXML = bodyXML.Replace("{##Worksheet##}", Worksheet.ToString()); #endregion try { string path = filePath; using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create)) { using (System.IO.StreamWriter sw = new System.IO.StreamWriter(fs)) { sw.Write(bodyXML); } } watch.Stop(); string time = watch.ElapsedMilliseconds.ToString(); } catch (Exception ex) { throw ex; } }
public void ExportToExcel(string filePath, DataSet dataSet, HashSet <int> tableIndex = null, bool dbField = false) { try { IList <string> dmlSqlList = new List <string>(); IList <string> sqlList = new List <string>(); for (int index = 0; index < dataSet.Tables.Count; index++) { if (tableIndex != null && !tableIndex.Contains(index)) { continue; } System.Data.DataTable table = dataSet.Tables[index]; //如果存在文本列名相同时则需要此结构 Dictionary <string, int> sameColDic = null; if (!dbField) { sameColDic = new Dictionary <string, int>(); } string columnStr = string.Empty; StringBuilder columnDefineBuilder = new StringBuilder(); StringBuilder columnBuilder = new StringBuilder(); foreach (DataColumn col in table.Columns) { string name = dbField ? col.ColumnName : string.IsNullOrEmpty(col.Caption) ? col.ColumnName : col.Caption; if (sameColDic.ContainsKey(name)) { sameColDic[name]++; name += sameColDic[name].ToString(); } else { sameColDic.Add(name, 0); } columnBuilder.AppendFormat("{0},", name); LibDataType dataType = (LibDataType)col.ExtendedProperties[FieldProperty.DataType]; switch (dataType) { case LibDataType.Text: case LibDataType.NText: //columnDefineBuilder.AppendFormat("{0} String,", name); columnDefineBuilder.AppendFormat("{0} memo,", name); break; case LibDataType.Int32: LibControlType ctrlType = (LibControlType)col.ExtendedProperties[FieldProperty.ControlType]; if (ctrlType == LibControlType.Date) { columnDefineBuilder.AppendFormat("{0} Date,", name); } else if (ctrlType == LibControlType.HourMinute) { columnDefineBuilder.AppendFormat("{0} String,", name); } else { columnDefineBuilder.AppendFormat("{0} Integer,", name); } break; case LibDataType.Int64: ctrlType = (LibControlType)col.ExtendedProperties[FieldProperty.ControlType]; if (ctrlType == LibControlType.DateTime) { columnDefineBuilder.AppendFormat("{0} DateTime,", name); } else { columnDefineBuilder.AppendFormat("{0} Long,", name); } break; case LibDataType.Numeric: columnDefineBuilder.AppendFormat("{0} Currency,", name); break; case LibDataType.Float: columnDefineBuilder.AppendFormat("{0} Single,", name); break; case LibDataType.Double: columnDefineBuilder.AppendFormat("{0} Double,", name); break; case LibDataType.Byte: columnDefineBuilder.AppendFormat("{0} Integer,", name); break; case LibDataType.Boolean: columnDefineBuilder.AppendFormat("{0} Integer,", name); break; case LibDataType.Binary: columnDefineBuilder.AppendFormat("{0} memo,", name); break; } } if (columnBuilder.Length > 0) { columnBuilder.Remove(columnBuilder.Length - 1, 1); columnDefineBuilder.Remove(columnDefineBuilder.Length - 1, 1); } columnStr = columnBuilder.ToString(); string tableName = string.Empty; if (dbField) { tableName = table.TableName; } else { if (table.ExtendedProperties.ContainsKey(TableProperty.DisplayText)) { tableName = LibSysUtils.ToString(table.ExtendedProperties[TableProperty.DisplayText]); } else { tableName = table.TableName; } } dmlSqlList.Add(string.Format("CREATE TABLE {0} ({1})", tableName, columnDefineBuilder.ToString())); foreach (DataRow curRow in table.Rows) { if (curRow.RowState == DataRowState.Deleted) { continue; } StringBuilder builder = new StringBuilder(); for (int i = 0; i < table.Columns.Count; i++) { DataColumn col = table.Columns[i]; LibDataType dataType = (LibDataType)col.ExtendedProperties[FieldProperty.DataType]; LibControlType ctrlType = (LibControlType)col.ExtendedProperties[FieldProperty.ControlType]; switch (dataType) { case LibDataType.Text: case LibDataType.NText: case LibDataType.Binary: case LibDataType.Int64: if (dataType == LibDataType.Int64 && ctrlType == LibControlType.DateTime) { long dateTime = LibSysUtils.ToInt64(curRow[col]); if (dateTime != 0) { builder.AppendFormat("{0},", LibStringBuilder.GetQuotObject(LibDateUtils.LibDateToDateTime(dateTime).ToString("yyyy-MM-dd HH:mm:ss"))); } else { builder.Append("null,"); } } else { builder.AppendFormat("{0},", LibStringBuilder.GetQuotObject(curRow[col])); } break; case LibDataType.Int32: case LibDataType.Numeric: case LibDataType.Float: case LibDataType.Double: case LibDataType.Byte: if (dataType == LibDataType.Int32 && ctrlType == LibControlType.Date) { int date = LibSysUtils.ToInt32(curRow[col]); if (date != 0) { builder.AppendFormat("{0},", LibStringBuilder.GetQuotObject(LibDateUtils.LibDateToDateTime(date).ToLongDateString())); } else { builder.Append("null,"); } } else if (dataType == LibDataType.Int32 && ctrlType == LibControlType.HourMinute) { string time = LibSysUtils.ToString(curRow[col]); switch (time.Length) { case 1: time = "000" + time + "00"; break; case 2: time = "00" + time + "00"; break; case 3: time = "0" + time + "00"; break; case 4: time = time + "00"; break; default: time = time + "00"; break; } time = "20150101" + time; builder.AppendFormat("{0},", LibStringBuilder.GetQuotObject(LibDateUtils.LibDateToDateTime(LibSysUtils.ToInt64(time)).ToString("HH:mm"))); } else { builder.AppendFormat("{0},", curRow[col]); } break; case LibDataType.Boolean: builder.AppendFormat("{0},", LibSysUtils.ToBoolean(curRow[col.ColumnName]) ? 1 : 0); break; } } if (builder.Length > 0) { builder.Remove(builder.Length - 1, 1); } sqlList.Add(string.Format("insert into {0}({1}) values({2})", tableName, columnBuilder, builder.ToString())); } } string connStr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='{0}'; Extended Properties='Excel 8.0;HDR=Yes;IMEX=2,ReadOnly=False'", filePath); using (OleDbConnection conn = new OleDbConnection(connStr)) { conn.Open(); try { foreach (string sql in dmlSqlList) { using (OleDbCommand command = new OleDbCommand(sql, conn)) { command.ExecuteNonQuery(); } } foreach (string sql in sqlList) { using (OleDbCommand command = new OleDbCommand(sql, conn)) { command.ExecuteNonQuery(); } } } finally { conn.Close(); } } } catch (Exception ex) { string path = System.IO.Path.Combine(AxCRL.Comm.Runtime.EnvProvider.Default.MainPath, "Output", "Error", "Excel", string.Format("{0}.txt", DateTime.Now.Ticks)); using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create)) { using (System.IO.StreamWriter sw = new System.IO.StreamWriter(fs)) { sw.Write(ex); } } throw; } }
public static void CheckRuleData(LibBcfData bcf) { bool isCodingRule = bcf.ProgId == "com.CodingRule"; string totalLenName = isCodingRule ? "CODINGRULELENGTH" : "BARCODELENGTH"; DataRow masterRow = bcf.DataSet.Tables[0].Rows[0]; int barcodeLength = 0; bool hasDy = false; bool hasSerialNum = false; int maxRowNo = 0; int serialNumRowNo = 0; foreach (DataRow curRow in bcf.DataSet.Tables[1].Rows) { if (curRow.RowState == DataRowState.Deleted) { continue; } int rowNo = LibSysUtils.ToInt32(curRow["ROWNO"]); if (maxRowNo < rowNo) { maxRowNo = rowNo; } int sectionLength = LibSysUtils.ToInt32(curRow["SECTIONLENGTH"]); DataRow[] childRows = curRow.GetChildRows(bcf.DataSet.Relations[1]); bool hasDetail = false; BarcodeRuleSectionType type = (BarcodeRuleSectionType)LibSysUtils.ToInt32(curRow["SECTIONTYPE"]); if (type == BarcodeRuleSectionType.Dynamic) { if (!hasDy) { hasDy = true; } if (string.IsNullOrEmpty(LibSysUtils.ToString(curRow["FIELDNAME"]))) { bcf.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("行{0}设定为动态段,字段名不能为空。", rowNo)); } foreach (DataRow subRow in childRows) { if (subRow.RowState == DataRowState.Deleted) { continue; } if (!hasDetail) { hasDetail = true; } int sectionValueLen = LibSysUtils.ToString(subRow["SECTIONVALUE"]).Length; if (sectionLength != sectionValueLen) { bcf.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("行{0}的编码段长度为{1},子行{2}的编码值长度为{3}。长度须相等。", rowNo, sectionLength, LibSysUtils.ToInt32(subRow["ROWNO"]), sectionValueLen)); } } } else { if (!string.IsNullOrEmpty(LibSysUtils.ToString(curRow["FIELDNAME"]))) { bcf.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("行{0}非动态段,字段名不能有值。", rowNo)); } if (LibSysUtils.ToBoolean(curRow["DYRULEDETAIL"])) { bcf.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("行{0}非动态段,不能有动态规则明细。", rowNo)); } } switch (type) { case BarcodeRuleSectionType.SerialNum: if (hasSerialNum) { bcf.ManagerMessage.AddMessage(LibMessageKind.Error, "编码规则明细里不能同时设置多笔流水号。"); } else { hasSerialNum = true; } serialNumRowNo = rowNo; if (sectionLength < 3) { bcf.ManagerMessage.AddMessage(LibMessageKind.Warn, "流水码的编码长度建议最少大于3"); } break; case BarcodeRuleSectionType.DateL: if (sectionLength != 8) { curRow["SECTIONLENGTH"] = 8; } break; case BarcodeRuleSectionType.DateL1: if (sectionLength != 8) { curRow["SECTIONLENGTH"] = 4; } break; case BarcodeRuleSectionType.DateS: case BarcodeRuleSectionType.DateS1: case BarcodeRuleSectionType.DateAB: if (sectionLength != 6) { curRow["SECTIONLENGTH"] = 6; } break; case BarcodeRuleSectionType.DateL16: if (sectionLength != 7) { curRow["SECTIONLENGTH"] = 7; } break; case BarcodeRuleSectionType.DateS16: if (sectionLength != 5) { curRow["SECTIONLENGTH"] = 5; } break; default: break; } if (LibSysUtils.ToBoolean(curRow["DYRULEDETAIL"]) != hasDetail) { curRow["DYRULEDETAIL"] = hasDetail; } barcodeLength += LibSysUtils.ToInt32(curRow["SECTIONLENGTH"]); } if (!hasSerialNum) { bcf.ManagerMessage.AddMessage(LibMessageKind.Error, "编码规则明细里需存在一笔流水号。"); } else if (serialNumRowNo != maxRowNo) { bcf.ManagerMessage.AddMessage(LibMessageKind.Error, "编码规则明细里的流水号必须是最后一笔数据。"); } if (hasDy && string.IsNullOrEmpty(LibSysUtils.ToString(masterRow["PROGID"]))) { bcf.ManagerMessage.AddMessage(LibMessageKind.Error, "编码规则明细存在动态段,表头功能字段不能为空。"); } if (LibSysUtils.ToInt32(masterRow[totalLenName]) != barcodeLength) { masterRow[totalLenName] = barcodeLength; } }
protected override void BeforeUpdate() { DataRow masterRow = this.DataSet.Tables[0].Rows[0]; bool isWorkSaturday = LibSysUtils.ToBoolean(masterRow["ISWORKSATURDAY"]); bool isWorkSunday = LibSysUtils.ToBoolean(masterRow["ISWORKSUNDAY"]); foreach (DataRow curRow in this.DataSet.Tables[1].Rows) { if (curRow.RowState == DataRowState.Deleted) { continue; } int workMark = 0; int workDayCount = 0; int year = LibSysUtils.ToInt32(curRow["YEAR"]); int month = LibSysUtils.ToInt32(curRow["MONTH"]); int days = DateTime.DaysInMonth(year, month); Dictionary <int, bool> specialDic = new Dictionary <int, bool>(); DataRow[] childRows = curRow.GetChildRows("COMCALENDARDETAIL_COMHOLIDAYDETAIL"); foreach (DataRow subRow in childRows) { int dayNum = LibDateUtils.LibDateToDateTime(LibSysUtils.ToInt32(subRow["HOLIDAYDATE"])).Day; specialDic.Add(dayNum, LibSysUtils.ToBoolean(subRow["ISWORK"])); } for (int i = 0; i < days; i++) { int date = i + 1; if (specialDic.ContainsKey(date)) { if (specialDic[date]) { workMark += (int)Math.Pow(2, i); workDayCount++; } continue; } DayOfWeek week = new DateTime(year, month, i + 1).DayOfWeek; if (week != DayOfWeek.Saturday && week != DayOfWeek.Sunday) { workMark += (int)Math.Pow(2, i); workDayCount++; } else { if ((week == DayOfWeek.Saturday && isWorkSaturday == true) || (week == DayOfWeek.Sunday && isWorkSunday == true)) { workMark += (int)Math.Pow(2, i); workDayCount++; } } } curRow.BeginEdit(); try { curRow["WEEKDAY"] = workDayCount; curRow["NONWORKDAY"] = days - workDayCount; curRow["WORKMARK"] = workMark; } finally { curRow.EndEdit(); } } }
/// <summary> /// 单据业务流配置 保存前验证【不能出现相同的功能配置;不能出现相同的使用条件;相同的使用条件中不能出现相同的人;发短信或发微信时,接收人的电话或微信须存在】 /// </summary> protected override void BeforeUpdate() { DataRow masterRow = this.DataSet.Tables[0].Rows[0]; // 不能出现相同的功能配置 string sql = string.Format("select PROGID from AXPBUSINESSFLOWCONFIG where BUSINESSFLOWCONFIGID<>{0} and PROGID={1}", LibStringBuilder.GetQuotObject(masterRow["BUSINESSFLOWCONFIGID"]), LibStringBuilder.GetQuotObject(masterRow["PROGID"])); if (!string.IsNullOrEmpty(LibSysUtils.ToString(this.DataAccess.ExecuteScalar(sql)))) { this.ManagerMessage.AddMessage(LibMessageKind.Error, "当前功能已存在单据业务流配置主数据,不能重复建立"); } //不能出现相同的使用条件;相同的使用条件中不能出现相同的人;发短信或发微信时,接收人的电话或微信须存在 List <string> conditionList = new List <string>(); DataTable subTable = this.DataSet.Tables[1]; foreach (DataRow curRow in subTable.Rows) { if (curRow.RowState == DataRowState.Deleted) { continue; } //不能出现相同的使用条件 string useCondition = LibSysUtils.ToString(curRow["USECONDITION"]); if (conditionList.Contains(useCondition)) { this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("单据业务流配置规则中行标识{0}的使用条件存在重复", LibSysUtils.ToInt32(curRow["ROW_ID"]))); } else { conditionList.Add(useCondition); } #region 相同的使用条件中不能出现相同的人;发短信或发微信时,接收人的电话或微信须存在 List <string> personList = new List <string>(); DataRow[] childRows = curRow.GetChildRows(this.DataSet.Relations[1]); if (childRows != null) { foreach (DataRow childRow in childRows) { if (childRow.RowState == DataRowState.Deleted) { continue; } //相同的使用条件中不能出现相同的人 string personId = LibSysUtils.ToString(childRow["PERSONID"]); if (personList.Contains(personId)) { this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("单据业务流配置规则中行标识{0}下业务流配置明细中行标识{1}的接收人存在重复", LibSysUtils.ToInt32(childRow["PARENTROWID"]), LibSysUtils.ToInt32(childRow["ROW_ID"]))); } else { personList.Add(personId); } //发短信或发微信时,接收人的电话或微信须存在 string phoneNo = LibSysUtils.ToString(childRow["PHONENO"]); string weChat = LibSysUtils.ToString(childRow["WECHAT"]); bool needSms = LibSysUtils.ToBoolean(childRow["NEEDSMS"]); bool sendWeChat = LibSysUtils.ToBoolean(childRow["SENDWECHAT"]); if (string.IsNullOrWhiteSpace(weChat) && sendWeChat) { this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("单据业务流配置规则中行标识{0}下业务流配置明细中行标识{1}的接收人的微信不存在,无法发微信", LibSysUtils.ToInt32(childRow["PARENTROWID"]), LibSysUtils.ToInt32(childRow["ROW_ID"]))); } if (string.IsNullOrWhiteSpace(phoneNo) && needSms) { this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("单据业务流配置规则中行标识{0}下业务流配置明细中行标识{1}的接收人的电话不存在,无法发短信", LibSysUtils.ToInt32(childRow["PARENTROWID"]), LibSysUtils.ToInt32(childRow["ROW_ID"]))); } } } #endregion } }
private static void InitBusinessTask() { Dictionary <string, LibBusinessTask> taskList = new Dictionary <string, LibBusinessTask>(); int currentDate = LibDateUtils.GetCurrentDate(); SqlBuilder sqlBuilder = new SqlBuilder("axp.ScheduleTask"); string sql = sqlBuilder.GetQuerySql(0, "A.TASKID,A.PROGID,A.BUSINESSTASKID,A.CALENDARID,A.ISJUSTWORKDAY,A.INTERVALTIME,A.EXECDATE,A.REPEATDATEMARK,A.EXECCONDITION,A.TITLE,A.MAINCONTENT,B.EXECTIME", string.Format("A.CURRENTSTATE=2 and (A.VALIDITYSTARTDATE <= {0} and (A.VALIDITYENDDATE>{0} or A.VALIDITYENDDATE = 0))", currentDate), "A.TASKID,B.EXECTIME"); LibDataAccess dataAccess = new LibDataAccess(); using (IDataReader reader = dataAccess.ExecuteDataReader(sql, false)) { while (reader.Read()) { string taskId = LibSysUtils.ToString(reader["TASKID"]); int execTime = LibSysUtils.ToInt32(reader["EXECTIME"]); if (taskList.ContainsKey(taskId)) { if (execTime > 0) { taskList[taskId].ExecTime.Add(execTime); } } else { LibBusinessTask task = new LibBusinessTask(); task.BusinessTaskId = LibSysUtils.ToString(reader["BUSINESSTASKID"]); task.CalendarId = LibSysUtils.ToString(reader["CALENDARID"]); task.ExecCondition = LibSysUtils.ToString(reader["ExecCondition"]); task.ExecDate = LibSysUtils.ToInt32(reader["EXECDATE"]); task.IntervalTime = LibSysUtils.ToInt32(reader["INTERVALTIME"]); task.IsJustWorkDay = LibSysUtils.ToBoolean(reader["ISJUSTWORKDAY"]); task.ProgId = LibSysUtils.ToString(reader["PROGID"]); task.Title = LibSysUtils.ToString(reader["TITLE"]); task.MainContent = LibSysUtils.ToString(reader["MAINCONTENT"]); task.RepeatDateMark = LibSysUtils.ToInt32(reader["REPEATDATEMARK"]); task.TaskId = taskId; if (execTime > 0) { task.ExecTime.Add(execTime); } taskList.Add(taskId, task); } } } sql = string.Format("select distinct A.TASKID,A.PERSONID,D.DEPTID,C.USERID from AXPSCHEDULETASKPERSON A " + "inner join AXPSCHEDULETASK B on B.TASKID=A.TASKID left join COMPERSON D on D.PERSONID=A.PERSONID inner join AXPUSER C on C.PERSONID=A.PERSONID " + "where B.CURRENTSTATE=2 and (B.VALIDITYSTARTDATE <= {0} and (B.VALIDITYENDDATE>{0} or B.VALIDITYENDDATE = 0))", currentDate); using (IDataReader reader = dataAccess.ExecuteDataReader(sql, false)) { while (reader.Read()) { string taskId = LibSysUtils.ToString(reader["TASKID"]); if (taskList.ContainsKey(taskId)) { taskList[taskId].Liaison.Add(new LibBusinessTaskLiaison() { PersonId = LibSysUtils.ToString(reader["PERSONID"]), DeptId = LibSysUtils.ToString(reader["DEPTID"]), UserId = LibSysUtils.ToString(reader["USERID"]) }); } } } foreach (var item in taskList) { _Default.Set(item.Key, item.Value); } }
private string GetFieldInfo(DataColumn col, bool addQuto = false) { string fieldStr = string.Empty; string name = col.ColumnName; int size = col.MaxLength; string defaultStr = string.Empty; //string constraint = string.Format("CONSTRAINT NN_{0}_{1} NOT NULL", shortTableName, name); LibDataType libDataType = (LibDataType)col.ExtendedProperties[FieldProperty.DataType]; switch (libDataType) { case LibDataType.Text: if (!string.IsNullOrEmpty(LibSysUtils.ToString(col.DefaultValue))) { defaultStr = string.Format(" DEFAULT '{0}'", addQuto ? string.Format("'{0}'", col.DefaultValue) : col.DefaultValue); //外层execute immediate已经有一个单引号,所以这里是有2个单引号转义 } fieldStr = string.Format("{0} {1}({2}){3}", name, LibOracleSchema.VARCHAR, size, defaultStr); break; case LibDataType.NText: if (!string.IsNullOrEmpty(LibSysUtils.ToString(col.DefaultValue))) { defaultStr = string.Format(" DEFAULT '{0}'", addQuto ? string.Format("'{0}'", col.DefaultValue) : col.DefaultValue); } fieldStr = string.Format("{0} {1}({2}){3}", name, LibOracleSchema.NVARCHAR, size, defaultStr); break; case LibDataType.Int32: defaultStr = string.Format(" DEFAULT {0}", col.DefaultValue); fieldStr = string.Format("{0} {1}{2}", name, LibOracleSchema.INT, defaultStr); break; case LibDataType.Int64: defaultStr = string.Format(" DEFAULT {0}", col.DefaultValue); fieldStr = string.Format("{0} {1}{2}", name, LibOracleSchema.BIGINT, defaultStr); break; case LibDataType.Numeric: defaultStr = string.Format(" DEFAULT {0}", col.DefaultValue); fieldStr = string.Format("{0} {1}{2}", name, LibOracleSchema.DECIMAL, defaultStr); break; case LibDataType.Float: case LibDataType.Double: defaultStr = string.Format(" DEFAULT {0}", col.DefaultValue); fieldStr = string.Format("{0} {1}{2}", name, LibOracleSchema.FLOAT, defaultStr); break; case LibDataType.Byte: defaultStr = string.Format(" DEFAULT {0}", col.DefaultValue); fieldStr = string.Format("{0} {1}{2}", name, LibOracleSchema.TINYINT, defaultStr); break; case LibDataType.Boolean: if (LibSysUtils.ToBoolean(col.DefaultValue)) { defaultStr = " DEFAULT 1"; } else { defaultStr = " DEFAULT 0"; } fieldStr = string.Format("{0} {1}{2}", name, LibOracleSchema.BIT, defaultStr); break; case LibDataType.Binary: if (!string.IsNullOrEmpty(LibSysUtils.ToString(col.DefaultValue))) { defaultStr = string.Format(" DEFAULT '{0}'", addQuto ? string.Format("'{0}'", col.DefaultValue) : col.DefaultValue); } fieldStr = string.Format("{0} {1}{2}", name, LibOracleSchema.BINARY, defaultStr); break; default: break; } return(fieldStr); }
protected override void BeforeUpdate() { base.BeforeUpdate(); DataRow masterRow = this.DataSet.Tables[0].Rows[0]; bool isJustWorkDay = LibSysUtils.ToBoolean(masterRow["ISJUSTWORKDAY"]); if (isJustWorkDay && string.IsNullOrEmpty(LibSysUtils.ToString(masterRow["CALENDARID"]))) { this.ManagerMessage.AddMessage(LibMessageKind.Error, "勾选仅工作日时,行事历不能为空。"); } int repeatDateMark = 0; if (LibSysUtils.ToBoolean(masterRow["ISMONDAY"])) { repeatDateMark += (int)Math.Pow(2, 0); } if (LibSysUtils.ToBoolean(masterRow["ISTUESDAY"])) { repeatDateMark += (int)Math.Pow(2, 1); } if (LibSysUtils.ToBoolean(masterRow["ISWEDNESDAY"])) { repeatDateMark += (int)Math.Pow(2, 2); } if (LibSysUtils.ToBoolean(masterRow["ISTHURSDAY"])) { repeatDateMark += (int)Math.Pow(2, 3); } if (LibSysUtils.ToBoolean(masterRow["ISFRIDAY"])) { repeatDateMark += (int)Math.Pow(2, 4); } if (LibSysUtils.ToBoolean(masterRow["ISSATURDAY"])) { repeatDateMark += (int)Math.Pow(2, 5); } if (LibSysUtils.ToBoolean(masterRow["ISSUNDAY"])) { repeatDateMark += (int)Math.Pow(2, 6); } masterRow["REPEATDATEMARK"] = repeatDateMark; int execDate = LibSysUtils.ToInt32(masterRow["EXECDATE"]); if (repeatDateMark != 0 && execDate != 0) { this.ManagerMessage.AddMessage(LibMessageKind.Error, "指定执行日期,就不能勾选相关重复执行日期。"); } if (isJustWorkDay && execDate != 0) { this.ManagerMessage.AddMessage(LibMessageKind.Error, "指定执行日期,就不能勾选仅工作日执行。"); } if (repeatDateMark == 0 && execDate == 0) { this.ManagerMessage.AddMessage(LibMessageKind.Error, "未指定执行日期。"); } HashSet <int> timeHashSet = new HashSet <int>(); foreach (DataRow curRow in this.DataSet.Tables[1].Rows) { if (curRow.RowState == DataRowState.Deleted) { continue; } int execTime = LibSysUtils.ToInt32(curRow["EXECTIME"]); if (timeHashSet.Contains(execTime)) { this.ManagerMessage.AddMessage(LibMessageKind.Error, "存在多个相同的执行时间点。"); break; } else { timeHashSet.Add(execTime); } } int intervalTime = LibSysUtils.ToInt32(masterRow["INTERVALTIME"]); if (intervalTime == 0) { if (timeHashSet.Count == 0) { this.ManagerMessage.AddMessage(LibMessageKind.Error, "需指定执行时间点。"); } } else { if (timeHashSet.Count > 0) { this.ManagerMessage.AddMessage(LibMessageKind.Error, "已指定了执行时间点,不能同时指定间隔时间。"); } } }
/// <summary> /// 获取站点代码对应的子站点信息。如果站点代码为空则表示获取所有子站点信息 /// </summary> /// <param name="siteIds">站点代码列表</param> /// <param name="checkNeedSendTo"></param> /// <returns>站点代码与站点信息的字典</returns> public static Dictionary <string, LinkSiteInfo> GetLinkSites(string[] siteIds = null, bool checkNeedSendTo = false) { string siteIdStr = string.Empty; if (siteIds != null && siteIds.Length > 0) { foreach (string siteId in siteIds) { if (string.IsNullOrEmpty(siteId)) { continue; } siteIdStr += LibStringBuilder.GetQuotString(siteId) + ","; } if (string.IsNullOrEmpty(siteIdStr) == false) { siteIdStr = siteIdStr.Substring(0, siteIdStr.Length - 1); } } Dictionary <string, LinkSiteInfo> siteInfos = new Dictionary <string, LinkSiteInfo>(); try { if (ExistLinkSiteTable == false || ExistUserLinkSiteTable == false) { return(null); } string sql = string.Format("select * from AXPLINKSITE "); if (string.IsNullOrEmpty(siteIdStr) == false) { sql += " where SITEID in (" + siteIdStr + ")"; } LibDataAccess dataAccess = new LibDataAccess(); string name = string.Empty; string id = string.Empty; using (IDataReader reader = dataAccess.ExecuteDataReader(sql)) { while (reader.Read()) { id = LibSysUtils.ToString(reader["SITEID"]); name = LibSysUtils.ToString(reader["SHORTNAME"]); if (string.IsNullOrEmpty(id) == false) { siteInfos[id] = new LinkSiteInfo() { SiteId = id, SiteName = LibSysUtils.ToString(reader["SITENAME"]), ShortName = LibSysUtils.ToString(reader["SHORTNAME"]), SiteUrl = LibSysUtils.ToString(reader["SITEURL"]), SvcUrl = LibSysUtils.ToString(reader["SVCURL"]), IsSlave = LibSysUtils.ToBoolean(reader["ISSLAVE"]), IsSendTo = LibSysUtils.ToBoolean(reader["ISSENDTO"]), }; } } } } catch { //to do log } if (checkNeedSendTo) { if (siteInfos != null && siteInfos.Count > 0) { siteInfos = (from item in siteInfos.Values where item.IsSendTo select item).ToDictionary(t => t.SiteId, t => t);//筛选需要同步到的站点 } } return(siteInfos); }
private void SetTableInfo(DataTable table) { if (table.ExtendedProperties.ContainsKey(TableProperty.UsingApproveRow)) { UsingApproveRow = (bool)table.ExtendedProperties[TableProperty.UsingApproveRow]; } if (table.ExtendedProperties.ContainsKey(TableProperty.UsingAttachment)) { UsingAttachment = (bool)table.ExtendedProperties[TableProperty.UsingAttachment]; } if (table.ParentRelations != null && table.ParentRelations.Count > 0) { string parentName = table.ParentRelations[0].ParentTable.TableName; for (int i = 0; i < table.DataSet.Tables.Count; i++) { if (string.Compare(table.DataSet.Tables[i].TableName, parentName, true) == 0) { this.ParentIndex = i; break; } } } this.Pk = this.GetPk(table); StringBuilder builder = new StringBuilder(); StringBuilder newRowObj = new StringBuilder(); StringBuilder tempBuilder = new StringBuilder(); int r = 0; foreach (DataColumn item in table.Columns) { if (!_UsingRowNo && item.ColumnName == "ROWNO") { _UsingRowNo = true; } if (!_UsingRowId && item.ColumnName == "ROW_ID") { _UsingRowId = true; } if (!this.IsDynamic) { if (item.ExtendedProperties.ContainsKey(FieldProperty.IsDynamic)) { this.IsDynamic = (bool)item.ExtendedProperties[FieldProperty.IsDynamic]; } } if (item.ExtendedProperties.ContainsKey(FieldProperty.SubTableIndex)) { SubTableMap.Add(item.ColumnName, (int)item.ExtendedProperties[FieldProperty.SubTableIndex]); } tempBuilder.AppendFormat("name:'{0}'", item.ColumnName); LibDataType dateType = (LibDataType)item.ExtendedProperties[FieldProperty.DataType]; switch (dateType) { case LibDataType.Text: case LibDataType.NText: newRowObj.AppendFormat("{0}:'{1}',", item.ColumnName, LibSysUtils.ToString(item.DefaultValue)); break; case LibDataType.Int32: tempBuilder.Append(",type:'number'"); newRowObj.AppendFormat("{0}:{1},", item.ColumnName, LibSysUtils.ToInt32(item.DefaultValue)); break; case LibDataType.Int64: tempBuilder.Append(",type:'number'"); newRowObj.AppendFormat("{0}:{1},", item.ColumnName, LibSysUtils.ToInt64(item.DefaultValue)); break; case LibDataType.Numeric: tempBuilder.Append(",type:'number'"); newRowObj.AppendFormat("{0}:{1},", item.ColumnName, LibSysUtils.ToDecimal(item.DefaultValue)); break; case LibDataType.Float: tempBuilder.Append(",type:'number'"); newRowObj.AppendFormat("{0}:{1},", item.ColumnName, LibSysUtils.ToSingle(item.DefaultValue)); break; case LibDataType.Double: tempBuilder.Append(",type:'number'"); newRowObj.AppendFormat("{0}:{1},", item.ColumnName, LibSysUtils.ToDouble(item.DefaultValue)); break; case LibDataType.Byte: tempBuilder.Append(",type:'number'"); newRowObj.AppendFormat("{0}:{1},", item.ColumnName, LibSysUtils.ToByte(item.DefaultValue)); break; case LibDataType.Boolean: tempBuilder.Append(",type:'boolean'"); newRowObj.AppendFormat("{0}:{1},", item.ColumnName, LibSysUtils.ToBoolean(item.DefaultValue) ? "true" : "false"); break; case LibDataType.Binary: newRowObj.AppendFormat("{0}:'{1}',", item.ColumnName, LibSysUtils.ToString(item.DefaultValue)); break; } if (r == 0) { builder.Append("{" + tempBuilder.ToString() + "}"); } else { builder.Append(",{" + tempBuilder.ToString() + "}"); } r++; tempBuilder.Length = 0; } newRowObj.Remove(newRowObj.Length - 1, 1); this.Fields = string.Format("[{0}]", builder.ToString()); this.NewRowObj = "{" + newRowObj.ToString() + "}"; }
public Dictionary <string, object> GetPrintTemplateJs(string billNo, string printTplNo, int printTplRowId, int printTplSubRowId) { List <LabelTemplateRule> LabelTemplateRuleList = new List <LabelTemplateRule>(); StringBuilder builder = new StringBuilder(), builderVal = new StringBuilder(); SqlBuilder sqlBuilder = new SqlBuilder("axp.PrintTpl"); string printTplJs = string.Empty, sql = string.Empty; Dictionary <string, object> dic = new Dictionary <string, object>(), billValueDic = new Dictionary <string, object>(); builder.Append(sqlBuilder.GetQuerySql(2, "C.TPLJS", string.Format(" C.PRINTTPLID = {0} AND C.PARENTROWID = {1} AND C.ROW_ID = {2} ", LibStringBuilder.GetQuotString(printTplNo), printTplRowId, printTplSubRowId))); using (IDataReader reader = this.DataAccess.ExecuteDataReader(builder.ToString())) { while (reader.Read()) { printTplJs = LibSysUtils.ToString(reader["TPLJS"]); } } builder.Clear(); builder.Append(sqlBuilder.GetQuerySql(3, "D.FIELDNAME,D.TABLEINDEX,D.TPLPARAM", string.Format(" D.PRINTTPLID = {0} AND D.GRANDFATHERROWID = {1} AND D.PARENTROWID= {2} ", LibStringBuilder.GetQuotString(printTplNo), printTplRowId, printTplSubRowId))); Dictionary <string, PropertyCollection> fieldCollection = new Dictionary <string, PropertyCollection>(); using (IDataReader reader = this.DataAccess.ExecuteDataReader(builder.ToString())) { while (reader.Read()) { LabelTemplateRule labelTemplateRule = new LabelTemplateRule(); labelTemplateRule.FieldName = LibSysUtils.ToString(reader["FIELDNAME"]); labelTemplateRule.TableIndex = LibSysUtils.ToInt32(reader["TABLEINDEX"]); labelTemplateRule.Tplparam = LibSysUtils.ToString(reader["TPLPARAM"]); LabelTemplateRuleList.Add(labelTemplateRule); builderVal.AppendFormat("{0}.{1},", (char)(labelTemplateRule.TableIndex + (int)'A'), labelTemplateRule.FieldName); if (!fieldCollection.ContainsKey(labelTemplateRule.FieldName)) { fieldCollection.Add(labelTemplateRule.FieldName, this.DataSet.Tables[labelTemplateRule.TableIndex].Columns[labelTemplateRule.FieldName].ExtendedProperties); } } } if (builderVal.Length > 0) { builderVal.Remove(builderVal.Length - 1, 1); sql = new SqlBuilder(this.ProgId).GetQuerySql(0, builderVal.ToString(), string.Format(" A.BILLNO={0} ", LibStringBuilder.GetQuotString(billNo))); using (IDataReader reader = this.DataAccess.ExecuteDataReader(sql, true)) { if (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) { string name = reader.GetName(i); PropertyCollection propertyList = fieldCollection[name]; LibControlType controlType = (LibControlType)propertyList[FieldProperty.ControlType]; switch (controlType) { case LibControlType.TextOption: billValueDic.Add(name, ((string[])propertyList[FieldProperty.Option])[LibSysUtils.ToInt32(reader[i])]); break; case LibControlType.YesNo: if (LibSysUtils.ToBoolean(reader[i])) { billValueDic.Add(name, "是"); } else { billValueDic.Add(name, "否"); } break; case LibControlType.Date: int date = LibSysUtils.ToInt32(reader[i]); if (date == 0) { billValueDic.Add(name, string.Empty); } else { billValueDic.Add(name, LibDateUtils.LibDateToDateTime(date).ToLongDateString()); } break; case LibControlType.DateTime: long dateTime = LibSysUtils.ToInt64(reader[i]); if (dateTime == 0) { billValueDic.Add(name, string.Empty); } else { billValueDic.Add(name, LibDateUtils.LibDateToDateTime(dateTime).ToLocalTime()); } break; case LibControlType.Rate: double rate = LibSysUtils.ToDouble(reader[i]); billValueDic.Add(name, string.Format("{0}%", rate * 100)); break; case LibControlType.KeyValueOption: billValueDic.Add(name, ((LibTextOptionCollection)propertyList[FieldProperty.KeyValueOption])[LibSysUtils.ToInt32(reader[i])].Value); break; default: billValueDic.Add(name, reader[i]); break; } } } } } dic.Add("TemplateJs", printTplJs); dic.Add("LabelTemplateRuleList", LabelTemplateRuleList); dic.Add("BillValueDic", billValueDic); return(dic); }
public LoginInfo Login(string userId, string password, bool quitOther = false) { LoginInfo loginInfo = new LoginInfo(); SqlBuilder builder = new SqlBuilder("axp.User"); string sql = builder.GetQuerySql(0, "A.PERSONID,A.PERSONNAME,A.ROLEID,A.WALLPAPER,A.WALLPAPERSTRETCH", string.Format("A.USERID={0} And A.USERPASSWORD={1} And A.ISUSE=1", LibStringBuilder.GetQuotString(userId), LibStringBuilder.GetQuotString(password))); LibDataAccess dataAccess = new LibDataAccess(); string roleId = string.Empty; bool exists = false; using (IDataReader reader = dataAccess.ExecuteDataReader(sql)) { if (reader.Read()) { loginInfo.PersonId = LibSysUtils.ToString(reader[0]); loginInfo.PersonName = LibSysUtils.ToString(reader[1]); roleId = LibSysUtils.ToString(reader[2]); loginInfo.Wallpaper = LibSysUtils.ToString(reader[3]); loginInfo.Stretch = LibSysUtils.ToBoolean(reader[4]); exists = true; } } if (exists) { LibHandle handle = LibHandleCache.Default.IsExistsHandle(LibHandeleType.PC, userId); if (handle != null) { if (quitOther) { LibHandleCache.Default.RemoveHandle(handle.Handle); } else { loginInfo.IsUsed = true; } } if (!loginInfo.IsUsed) { long currentCount = LibHandleCache.Default.GetCount(); long maxUserCount = (long)LibHandleCache.Default.MaxUserCount; if (maxUserCount != -1 && maxUserCount < currentCount) { loginInfo.IsOverUser = true; } else { string loginIp = string.Empty; //Zhangkj20161219 增加LoginIp System.ServiceModel.OperationContext context = System.ServiceModel.OperationContext.Current; //对于非WCF的访问context为null if (context != null) { System.ServiceModel.Channels.MessageProperties properties = context.IncomingMessageProperties; System.ServiceModel.Channels.RemoteEndpointMessageProperty endpoint = properties[System.ServiceModel.Channels.RemoteEndpointMessageProperty.Name] as System.ServiceModel.Channels.RemoteEndpointMessageProperty; loginIp = endpoint.Address + ":" + endpoint.Port.ToString(); } //创建新的Handle handle = LibHandleCache.Default.GetHandle(string.Empty, LibHandeleType.PC, userId, loginInfo.PersonId, loginInfo.PersonName, roleId, loginIp); if (handle != null) { loginInfo.Handle = handle.Handle; } } } } return(loginInfo); }
/// <summary> /// 异常报告单单据类型 保存前验证【不能出现相同的使用条件;相同的使用条件中不能出现相同的人;发短信或发微信时,接收人的电话或微信须存在;不被异常报告单引用】 /// </summary> protected override void BeforeUpdate() { base.BeforeUpdate(); #region 当异常报告单单据类型变更时,确保原始的异常报告单单据类型不被异常报告单引用 DataRow masterRow = this.DataSet.Tables[0].Rows[0]; if (masterRow.HasVersion(DataRowVersion.Original)) { string typeId = LibSysUtils.ToString(masterRow["TYPEID", DataRowVersion.Original]); if (LibSysUtils.ToString(masterRow["TYPEID"]).CompareTo(typeId) != 0) { string sql = string.Format("SELECT COUNT(BILLNO) FROM COMABNORMALREPORT WHERE TYPEID={0}", LibStringBuilder.GetQuotString(typeId)); int count = LibSysUtils.ToInt32(this.DataAccess.ExecuteScalar(sql)); if (count > 0) { this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("异常报告单单据类型{0}在异常报告单被引用,无法修改", typeId)); } } } #endregion #region 消息传递流程明细表中不能出现相同的使用条件;相同的使用条件中不能出现相同的人;发短信或发微信时,接收人的电话或微信须存在; List <string> conditionList = new List <string>(); DataTable subTable = this.DataSet.Tables[1]; foreach (DataRow curRow in subTable.Rows) { if (curRow.RowState == DataRowState.Deleted) { continue; } //不能出现相同的使用条件 string useCondition = LibSysUtils.ToString(curRow["USECONDITION"]); if (conditionList.Contains(useCondition)) { this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("消息传递流程规则配置中行标识{0}的使用条件存在重复", LibSysUtils.ToInt32(curRow["ROW_ID"]))); } else { conditionList.Add(useCondition); } #region 相同的使用条件中不能出现相同的人;发短信或发微信时,接收人的电话或微信须存在 List <string> personList = new List <string>(); DataRow[] childRows = curRow.GetChildRows(this.DataSet.Relations[1]); if (childRows != null) { foreach (DataRow childRow in childRows) { if (childRow.RowState == DataRowState.Deleted) { continue; } //相同的使用条件中不能出现相同的人 string personId = LibSysUtils.ToString(childRow["PERSONID"]); if (personList.Contains(personId)) { this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("消息传递流程规则中行标识{0}下消息传递流程明细中行标识{1}的接收人存在重复", LibSysUtils.ToInt32(childRow["PARENTROWID"]), LibSysUtils.ToInt32(childRow["ROW_ID"]))); } else { personList.Add(personId); } //发短信或发微信时,接收人的电话或微信须存在 string phoneNo = LibSysUtils.ToString(childRow["PHONENO"]); string weChat = LibSysUtils.ToString(childRow["WECHAT"]); bool needSms = LibSysUtils.ToBoolean(childRow["NEEDSMS"]); bool sendWeChat = LibSysUtils.ToBoolean(childRow["SENDWECHAT"]); if (string.IsNullOrWhiteSpace(weChat) && sendWeChat) { this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("消息传递流程规则中行标识{0}下消息传递流程明细中行标识{1}的接收人的微信不存在,无法发微信", LibSysUtils.ToInt32(childRow["PARENTROWID"]), LibSysUtils.ToInt32(childRow["ROW_ID"]))); } if (string.IsNullOrWhiteSpace(phoneNo) && needSms) { this.ManagerMessage.AddMessage(LibMessageKind.Error, string.Format("消息传递流程规则中行标识{0}下消息传递流程明细中行标识{1}的接收人的电话不存在,无法发短信", LibSysUtils.ToInt32(childRow["PARENTROWID"]), LibSysUtils.ToInt32(childRow["ROW_ID"]))); } } } #endregion } #endregion }
public UpLoadFileResult UpLoadFile1(HttpPostedFile file, string progId = "") { UpLoadFileResult upLoadFileResult = new UpLoadFileResult(); bool isLocalHost = true; string fileName = LibDateUtils.Now().Ticks.ToString(); fileName = file.FileName.Replace(file.FileName.Substring(0, file.FileName.LastIndexOf('.')), fileName); string filePath = Path.Combine(EnvProvider.Default.RuningPath, "TempData", "ImportData", fileName); string url = Path.Combine("\\TempData", "ImportData", fileName); #region 对应实体图片路径 if (!string.IsNullOrEmpty(progId)) { string sql = string.Format(" SELECT Url,LocalHost FROM ComImagePath WHERE Progid='{0}' ", progId); DataSet dataSet = new LibDataAccess().ExecuteDataSet(sql); if (dataSet != null && dataSet.Tables.Count > 0 && dataSet.Tables[0].Rows.Count > 0) { DataRow dr = dataSet.Tables[0].Rows[0]; isLocalHost = LibSysUtils.ToBoolean(dr["LocalHost"]); url = LibSysUtils.Combine(LibSysUtils.ToString(dr["Url"]), fileName); filePath = LibSysUtils.Combine(EnvProvider.Default.RuningPath, url); } } #endregion #region 新增图片实体 LibEntryParam entryParam = new LibEntryParam(); DataSet dataset = null; LibBcfData bcfData = (LibBcfData)LibBcfSystem.Default.GetBcfInstance("KanTime.Picture"); dataset = bcfData.AddNew(entryParam); #region 填充数据 dataset.EnforceConstraints = false; try { #region 表头 DataRow masterRow = dataset.Tables[0].Rows[0]; masterRow.BeginEdit(); masterRow["Name"] = fileName; masterRow["Url"] = url; masterRow.EndEdit(); #endregion #region 明细 //dataset.Tables[1].BeginLoadData(); //dataset.Tables[1].EndLoadData(); #endregion } finally { dataset.EnforceConstraints = true; } dataset = bcfData.InnerSave(BillAction.AddNew, null, dataset); if (bcfData.ManagerMessage.IsThrow) { StringBuilder strMsg = new StringBuilder(); foreach (var item in bcfData.ManagerMessage.MessageList) { strMsg.AppendFormat("{0}", item.Message); } throw new Exception(strMsg.ToString()); } #endregion #endregion file.SaveAs(filePath); #region 返回本机或外网地址 if (isLocalHost) { upLoadFileResult.FileName = url; } else { upLoadFileResult.FileName = LibSysUtils.Combine(EnvProvider.Default.UploadHostName, url); } #endregion upLoadFileResult.success = true; return(upLoadFileResult); }
public LibRolePermission GetCacheItem(string roleId) { LibRolePermission rolePermission = null; object lockItem = lockObjDic.GetOrAdd(roleId, new object()); lock (lockItem) { rolePermission = this.Get <LibRolePermission>(roleId); if (rolePermission == null) { rolePermission = new LibRolePermission(); rolePermission.RoleId = roleId; string sql = string.Format("select distinct A.ISUNLIMITED,B.PERMISSIONGROUPID from AXPROLE A left join AXPROLEDETAIL B on B.ROLEID=A.ROLEID where A.ROLEID={0} and ISVALIDITY=1", LibStringBuilder.GetQuotString(roleId)); LibDataAccess dataAccess = new LibDataAccess(); List <string> groupList = new List <string>(); using (IDataReader reader = dataAccess.ExecuteDataReader(sql, false)) { int count = 0; while (reader.Read()) { if (count == 0) { rolePermission.IsUnlimited = LibSysUtils.ToBoolean(reader["ISUNLIMITED"]); } string groupId = LibSysUtils.ToString(reader["PERMISSIONGROUPID"]); if (!string.IsNullOrEmpty(groupId)) { groupList.Add(groupId); } count++; } } if (!rolePermission.IsUnlimited) { foreach (string groupId in groupList) { LibPermissionGroup group = LibPermissionGroupCache.Default.GetCacheItem(groupId); if (group != null) { foreach (var item in group.PermissionDic) { if (rolePermission.PermissionDic.ContainsKey(item.Key)) { //进行宽松的权限控制 LibPermission curPermission = rolePermission.PermissionDic[item.Key]; //处理清单浏览条件 if (!string.IsNullOrEmpty(curPermission.ShowCondition) && string.IsNullOrEmpty(item.Value.ShowCondition)) { curPermission.ShowCondition = string.Empty; } else if (!string.IsNullOrEmpty(curPermission.ShowCondition) && !string.IsNullOrEmpty(item.Value.ShowCondition)) { if (curPermission.ShowCondition.CompareTo(item.Value.ShowCondition) != 0) { curPermission.ShowCondition = string.Format("{0} or {1}", curPermission.ShowCondition, item.Value.ShowCondition); MergeQueryField(item.Key, curPermission, item.Value); } } //处理按钮权限 if (curPermission.NoUseButton.Count > 0 && item.Value.NoUseButton.Count == 0) { curPermission.NoUseButton.Clear(); } else if (curPermission.NoUseButton.Count > 0 && item.Value.NoUseButton.Count > 0) { List <string> removeList = new List <string>(); foreach (string buttonId in curPermission.NoUseButton) { if (!item.Value.NoUseButton.Contains(buttonId)) { removeList.Add(buttonId); } } foreach (var buttonId in removeList) { curPermission.NoUseButton.Remove(buttonId); } } //处理操作权限 if (curPermission.OperateMark != item.Value.OperateMark) { curPermission.OperateMark |= item.Value.OperateMark; } //处理字段权限 if (curPermission.FieldPowerDic.Count > 0 && item.Value.FieldPowerDic.Count == 0) { curPermission.FieldPowerDic.Clear(); } else if (curPermission.FieldPowerDic.Count > 0 && item.Value.FieldPowerDic.Count > 0) { List <int> remove = new List <int>(); foreach (var subItem in curPermission.FieldPowerDic) { if (item.Value.FieldPowerDic.ContainsKey(subItem.Key)) { Dictionary <string, FieldPower> otherFieldPower = item.Value.FieldPowerDic[subItem.Key]; List <string> subRemove = new List <string>(); foreach (var fieldPowerItem in subItem.Value) { if (otherFieldPower.ContainsKey(fieldPowerItem.Key)) { FieldPower other = otherFieldPower[fieldPowerItem.Key]; if (fieldPowerItem.Value.PowerOption == FieldPowerOption.CannotBrowse) { if (other.PowerOption == FieldPowerOption.CannotModify) { fieldPowerItem.Value.PowerOption = other.PowerOption; fieldPowerItem.Value.Condition = other.Condition; } else { fieldPowerItem.Value.Condition = string.Format("{0} && {1}", fieldPowerItem.Value.Condition, other.Condition); } } else if (other.PowerOption == FieldPowerOption.CannotModify) { fieldPowerItem.Value.Condition = string.Format("{0} && {1}", fieldPowerItem.Value.Condition, other.Condition); } } else { subRemove.Add(fieldPowerItem.Key); } } foreach (string fieldName in subRemove) { subItem.Value.Remove(fieldName); } } else { remove.Add(subItem.Key); } } foreach (var tableIndex in remove) { curPermission.FieldPowerDic.Remove(tableIndex); } } } else { rolePermission.PermissionDic[item.Key] = (LibPermission)item.Value.Clone(); } } } } } //CacheItemPolicy policy = new CacheItemPolicy(); //policy.SlidingExpiration = new TimeSpan(0, 180, 0); //180分钟内不访问自动剔除 this.Set(roleId, rolePermission, new TimeSpan(0, 180, 0)); } } return(rolePermission); }
public LoginInfo AppLogin(string userId, string password, string clientId, int clientType, bool quitOther = false) { LoginInfo loginInfo = new LoginInfo(); //检查是否具有 AXPUSERAPP数据表,用于判定是否支持移动端App登录 LibSqlModel sqlModel = LibSqlModelCache.Default.GetSqlModel("axp.User"); bool hasAXPUSERAPP = false; if (sqlModel != null && sqlModel.Tables.Count > 1 && sqlModel.Tables[1].TableName.Equals("AXPUSERAPP")) { hasAXPUSERAPP = true; } if (hasAXPUSERAPP == false) { return(loginInfo);//如果没有需要的相关字段则直接返回 } SqlBuilder builder = new SqlBuilder("axp.User"); string sql = string.Format(@"SELECT A.PERSONID, A.ROLEID, A.WALLPAPER,A.WALLPAPERSTRETCH,B.PERSONNAME,B.PHONENO,B.CORNET,B.HEADPORTRAIT,B.MAIL FROM AXPUSER A LEFT JOIN COMPERSON B ON B.PERSONID=A.PERSONID WHERE A.USERID={0} and A.USERPASSWORD={1} AND A.ISUSE=1", LibStringBuilder.GetQuotString(userId), LibStringBuilder.GetQuotString(password)); //builder.GetQuerySql(0, "A.PERSONID,A.PERSONNAME,A.PHONENO,A.CORNET,A.HEADPORTRAIT,A.MAIL,A.ROLEID,A.WALLPAPER,A.WALLPAPERSTRETCH", string.Format("A.USERID={0} And A.USERPASSWORD={1} And A.ISUSE=1", LibStringBuilder.GetQuotString(userId), LibStringBuilder.GetQuotString(password))); LibDataAccess dataAccess = new LibDataAccess(); string roleId = string.Empty; bool exists = false; using (IDataReader reader = dataAccess.ExecuteDataReader(sql)) { if (reader.Read()) { loginInfo.PersonId = LibSysUtils.ToString(reader["PERSONID"]); loginInfo.PersonName = LibSysUtils.ToString(reader["PERSONNAME"]); roleId = LibSysUtils.ToString(reader["ROLEID"]); loginInfo.Wallpaper = LibSysUtils.ToString(reader["WALLPAPER"]); loginInfo.Stretch = LibSysUtils.ToBoolean(reader["WALLPAPERSTRETCH"]); //20170214 施卢威 增加头像 Email 短号信息 loginInfo.Headportrait = LibSysUtils.ToString(reader["HEADPORTRAIT"]); loginInfo.UserEMail = LibSysUtils.ToString(reader["MAIL"]); loginInfo.Cornet = LibSysUtils.ToString(reader["CORNET"]); loginInfo.UserPhone = LibSysUtils.ToString(reader["PHONENO"]); exists = true; } } if (exists) { #region 帐号与登录设备关联 string appSql = string.Empty; //查询帐号是否已有设备标识 int isAPPClient = LibSysUtils.ToInt32(dataAccess.ExecuteScalar(string.Format("SELECT COUNT(*) from AXPUSERAPP WHERE USERID = '{0}' and CLIENTTYPE={1}", userId, clientType))); if (isAPPClient > 0) { //更新设备标识信息 appSql = string.Format("UPDATE AXPUSERAPP SET CLIENTID={1} WHERE USERID={0} AND CLIENTTYPE={2}", LibStringBuilder.GetQuotString(userId), LibStringBuilder.GetQuotString(clientId), clientType); } else { int curMaxRowId = LibSysUtils.ToInt32(dataAccess.ExecuteScalar(string.Format("SELECT Max(ROW_ID) from AXPUSERAPP WHERE USERID='{0}'", userId))); //插入账户对应的App设备标识信息。 appSql = string.Format("insert into AXPUSERAPP(USERID,ROW_ID,ROWNO,CLIENTTYPE,CLIENTID) values('{0}',{1},{2},{3},'{4}')", userId, curMaxRowId + 1, curMaxRowId + 1, clientType, clientId, 1); } dataAccess.ExecuteNonQuery(appSql); #endregion LibHandle handle = LibHandleCache.Default.IsExistsHandle(LibHandeleType.PC, userId); if (handle != null) { if (quitOther) { LibHandleCache.Default.RemoveHandle(handle.Handle); } else { loginInfo.IsUsed = true; } } if (!loginInfo.IsUsed) { long currentCount = LibHandleCache.Default.GetCount(); long maxUserCount = (long)LibHandleCache.Default.MaxUserCount; if (maxUserCount != -1 && maxUserCount < currentCount) { loginInfo.IsOverUser = true; } else { string loginIp = string.Empty; //Zhangkj20161219 增加LoginIp System.ServiceModel.OperationContext context = System.ServiceModel.OperationContext.Current; //对于非WCF的访问context为null if (context != null) { System.ServiceModel.Channels.MessageProperties properties = context.IncomingMessageProperties; System.ServiceModel.Channels.RemoteEndpointMessageProperty endpoint = properties[System.ServiceModel.Channels.RemoteEndpointMessageProperty.Name] as System.ServiceModel.Channels.RemoteEndpointMessageProperty; loginIp = endpoint.Address + ":" + endpoint.Port.ToString(); handle = LibHandleCache.Default.GetHandle(string.Empty, LibHandeleType.PC, userId, loginInfo.PersonId, loginInfo.PersonName, roleId, loginIp); } else { handle = LibHandleCache.Default.GetHandle(string.Empty, LibHandeleType.PC, userId, loginInfo.PersonId, loginInfo.PersonName, roleId); } //创建新的Handle if (handle != null) { loginInfo.Handle = handle.Handle; } } } } return(loginInfo); }