/// <summary> /// 格式化过虑条件,针对MC字段特殊处理 /// </summary> /// <param name="filter"></param> /// <returns></returns> public string BuilderFilter(string tableName, string filter) { if (string.IsNullOrWhiteSpace(filter)) { return(""); } StringBuilder sqlBuilder = new StringBuilder(); IEnumerable <FapColumn> cols = _dbContext.Columns(tableName); if (filter.IsPresent()) { JObject jsono = JObject.Parse(filter); if (jsono == null) { return(""); } string parentGroup = jsono.GetValue("groupOp").ToString();//AND、OR List <JObject> root = new List <JObject>(); root.Add(jsono); RecurseFilter(parentGroup, tableName, root, cols, sqlBuilder); } string result = sqlBuilder.ToString(); result = result.Trim().TrimEnd("AND".ToArray()).TrimEnd("OR".ToArray()); return(result); }
private (FapDynamicObject mainData, Dictionary <string, IEnumerable <FapDynamicObject> > childsData) BuilderData(string tableName, FormValueProvider formValueProviders) { var columnList = _dbContext.Columns(tableName); var mainDic = formValueProviders.GetKeysFromPrefix("mainData"); FapDynamicObject mainObject = new FapDynamicObject(columnList); foreach (var cell in mainDic) { mainObject.SetValue(cell.Key, formValueProviders.GetValue(cell.Value).FirstValue); } var childDicList = formValueProviders.GetKeysFromPrefix("childDataList"); Dictionary <string, IEnumerable <FapDynamicObject> > childDataDic = null; childDataDic = new Dictionary <string, IEnumerable <FapDynamicObject> >(); foreach (var row in childDicList) { IList <FapDynamicObject> list = new List <FapDynamicObject>(); var tables = formValueProviders.GetKeysFromPrefix(row.Value); string tn = formValueProviders.GetValue(tables["tn"]).FirstValue; var dicData = formValueProviders.GetKeysFromPrefix(tables["data"]); foreach (var data in dicData) { FapDynamicObject cData = new FapDynamicObject(_dbContext.Columns(tn)); foreach (var dataDic in formValueProviders.GetKeysFromPrefix(data.Value)) { cData.SetValue(dataDic.Key, formValueProviders.GetValue(dataDic.Value).FirstValue); } list.Add(cData); } childDataDic.TryAdd(tn, list); } return(mainObject, childDataDic); }
public bool DeleteDynamicLogic() { var emp = _dbContext.Get("FapUser", 31); dynamic empd = new FapDynamicObject(_dbContext.Columns("FapUser")); empd.Id = emp.Id; empd.Ts = emp.Ts; return(_dbContext.DeleteDynamicData(empd)); }
public void AddPayItem(string caseUid, string[] payItems) { if (payItems == null || payItems.Length < 1 || caseUid.IsMissing()) { return; } DynamicParameters param = new DynamicParameters(); param.Add("CaseUid", caseUid); var payCase = _dbContext.Get <PayCase>(caseUid); if (payCase.Unchanged == 1) { throw new FapException("已经存在发放记录,不能再调整薪资项"); } var items = _dbContext.Columns(PAYROLLCENTER).Where(f => f.ColProperty.EqualsWithIgnoreCase("3") || payItems.Contains(f.Fid)); IList <PayItem> list = new List <PayItem>(); foreach (var item in items) { list.Add(new PayItem { CaseUid = caseUid, ColumnUid = item.Fid, ItemSort = item.ColOrder, ShowAble = 1, ShowCard = 0, TransEnable = 0 }); } _dbContext.DeleteExec(nameof(PayItem), "CaseUid=@CaseUid", param); _dbContext.InsertBatchSql <PayItem>(list); }
public void InsertDynamic() { dynamic emp = new FapDynamicObject(_dbContext.Columns("FapUser")); emp.UserName = "******"; emp.UserCode = "jeke zhang"; emp.UserEmail = "*****@*****.**"; emp.UserPassword = "******"; long id = _dbContext.InsertDynamicData(emp); Assert.Equal(id, emp.Id); }
public static string ParsingFormulaMappingSql(IEnumerable <CfgEntityMapping> entityMappingList, string tableName, string colName, string sqlDesc, IDbContext dbContext) { sqlDesc = sqlDesc.ReplaceIgnoreCase("[引用]", "").TrimStart('(').TrimEnd(')'); string aimsTable = sqlDesc.Substring(0, sqlDesc.IndexOf("[")); string field = sqlDesc.Substring(sqlDesc.IndexOf("[") + 1).TrimEnd(']'); var entityMapping = entityMappingList.FirstOrDefault(m => m.AimsEntityMC == aimsTable); if (entityMapping != null) { var fieldCol = dbContext.Columns(entityMapping.AimsEntity).FirstOrDefault(c => c.ColComment == field); IEnumerable <Associate> associates = JsonConvert.DeserializeObject <IEnumerable <Associate> >(entityMapping.Associate); List <string> where = new List <string>(); foreach (var associate in associates) { where.Add($"{tableName}.{associate.OriCol}={entityMapping.AimsEntity}.{associate.AimsCol}"); } string innerJoin = $" inner join {entityMapping.AimsEntity} on {string.Join(" and ", where)}"; if (dbContext.DatabaseDialect == DatabaseDialectEnum.MSSQL) { return($"update {tableName} set {tableName}.{colName}={entityMapping.AimsEntity}.{fieldCol.ColName} from {tableName} {innerJoin} and {ValidWhere(entityMapping.AimsEntity)}"); } else if (dbContext.DatabaseDialect == DatabaseDialectEnum.MYSQL) { return($"update {tableName} {innerJoin} and {ValidWhere(entityMapping.AimsEntity)} set {tableName}.{colName}={entityMapping.AimsEntity}.{fieldCol.ColName}"); } return(string.Empty); } return(string.Empty); }
public string JobGroupOperation(string operation, string id, string parent, string text) { string result = "0"; if (operation == TreeNodeOper.DELETE_NODE) { int c = _dbContext.Count("FapJob", "JobGroup=@JobGroup", new DynamicParameters(new { JobGroup = id })); if (c == 0) { result = "" + _dbContext.Execute("delete from FapJobGroup where Fid=@Fid", new DynamicParameters(new { Fid = id })); } } else if (operation == TreeNodeOper.CREATE_NODE) { dynamic fdo = new FapDynamicObject(_dbContext.Columns("FapJobGroup")); fdo.Pid = id; fdo.JobGroupName = text; long rv = _dbContext.InsertDynamicData(fdo); result = fdo.Fid; } else if (operation == TreeNodeOper.RENAME_NODE) { result = "" + _dbContext.Execute("update FapJobGroup set JobGroupName=@JobGroupName where Fid=@Id", new DynamicParameters(new { JobGroupName = text, Id = id })); } else if (operation == TreeNodeOper.MOVE_NODE) { result = "" + _dbContext.Execute("update FapJobGroup set Pid=@Pid where Id=@Id", new DynamicParameters(new { Pid = parent, Id = id })); } else if (operation == "copy_node") { } return(result); }
public IEnumerable <FapColumn> GetMultiLanguageColumns(string tableName) { var fapColumns = _dbContext.Columns(tableName); foreach (var column in fapColumns) { column.ColComment = GetMultiLangValue(MultiLanguageOriginEnum.FapColumn, $"{column.TableName}_{column.ColName}"); } return(fapColumns); }
public PageDataResultView QueryPageDataResultView(JqGridPostData jqGridPostData) { Pageable pageable = AnalysisPostData(jqGridPostData); //queryOption.Where = AnalysisWhere(queryOption.Where); PageDataResultView result = QueryPagedDynamicData(); return(result); PageDataResultView QueryPagedDynamicData() { try { IEnumerable <FapColumn> fapColumns = _dbContext.Columns(jqGridPostData.QuerySet.TableName); PageInfo <dynamic> pi = _dbContext.QueryPage(pageable); //组装成DataResultView对象 PageDataResultView dataResultView = new PageDataResultView(); dataResultView.Data = pi.Items.ToFapDynamicObjectList(fapColumns); //当未获取数据的时候才获取默认值 //if (!dataObject.Data.Any()) //{ //wyf表单应用,表格暂时不用取默认值 //dataResultView.DefaultData = queryOption.Wraper.GetDefaultData(); //} dataResultView.DataJson = JsonConvert.SerializeObject(pi.Items); dataResultView.TotalCount = pi.TotalCount; dataResultView.CurrentPage = pi.CurrentPage; dataResultView.OrginData = pi.Items; dataResultView.DataListForJqGrid = pi.Items;// as IEnumerable<IDictionary<string, object>>; dataResultView.PageSize = pi.PageSize; //统计字段 dataResultView.StatFieldData = pi.StatFieldData; dataResultView.StatFieldDataJson = JsonConvert.SerializeObject(pi.StatFieldData); return(dataResultView); } catch (Exception) { throw; } } }
public void AnnualLeaveInit(string year, string startDate, string endDate) { DynamicParameters param = new DynamicParameters(); param.Add("Year", year); param.Add("StartDate", startDate); param.Add("EndDate", endDate); int isExist = _dbContext.Count(nameof(TmAnnualLeave), $"{nameof(TmAnnualLeave.Annual)}=@Year", param); if (isExist > 0) { Guard.Against.FapBusiness("已存在该年度年假,不能再生成!"); } //查找年假规则 var rules = _dbContext.QueryAll <TmAnnualLeaveRule>(); if (!rules.Any()) { Guard.Against.FapBusiness("没有找到年假生成规则,请在菜单[基础设置-年假规则]中设置年假规则"); } var cols = _dbContext.Columns("Employee"); IList <TmAnnualLeave> annualLeaveList = new List <TmAnnualLeave>(); foreach (var rule in rules) { if (rule.EmpConditionDesc.IsMissing()) { continue; } string sql = $"select {rule.Days} Days,Fid,DeptUid from Employee where {SqlUtils.ParsingSql(cols, rule.EmpConditionDesc, _dbContext.DatabaseDialect)}"; var emps = _dbContext.Query(sql); foreach (var emp in emps) { TmAnnualLeave annualLeave = new TmAnnualLeave() { Annual = year, EmpUid = emp.Fid, DeptUid = emp.DeptUid, StartDate = startDate, EndDate = endDate, CurrYearNum = emp.Days, LastYearLeft = 0, CurrRealNum = emp.Days, UsedNum = 0, RemainderNum = emp.Days, IsHandle = 0 }; annualLeaveList.Add(annualLeave); } } _dbContext.InsertBatchSql(annualLeaveList); }
public BaseForm SetQueryOption(QuerySet querySet) { _fapTable = _dbContext.Table(querySet.TableName); DynamicParameters parameters = new DynamicParameters(); querySet.Parameters.ForEach(q => parameters.Add(q.ParamKey, q.ParamValue)); var frmData = _dbContext.QueryFirstOrDefault(querySet.ToString(), parameters, true); _fapColumns = _dbContext.Columns(querySet.TableName); if (!querySet.QueryCols.EqualsWithIgnoreCase("*")) { var queryColList = querySet.QueryCols.ToLower().SplitComma(); _fapColumns = _dbContext.Columns(querySet.TableName).Where(c => queryColList.Contains(c.ColName.ToLower())); } if (frmData != null) { FormData = (frmData as IDictionary <string, object>).ToFapDynamicObject(_fapColumns); if (_formStatus != FormStatus.View) { _formStatus = FormStatus.Edit; } } else { FormData = _dbContext.GetDefualtData(querySet.TableName); _formStatus = FormStatus.Add; } if (_fapTable.TableFeature != null && _fapTable.TableFeature.Contains("BillFeature")) { IsDocument = true; } FidValue = FormData.Get("Fid").ToString(); if (_fapColumns.Any()) { SetFapClumns(querySet); } return(this); }
private bool CheckTansitionCondition(ProcessEntity processEntity, string condition) { dynamic bizData = processEntity.BizData; IDictionary <string, object> data = bizData as IDictionary <string, object>; string sql = SqlUtils.ParsingConditionSql(_dataAccessor.Columns(processEntity.BillTable), data, condition, _dataAccessor.DatabaseDialect); var o = _dataAccessor.QueryOriSql(sql); if (o.Any()) { return(true); } return(false); }
public XEditableForm SetQueryOption(QuerySet qs) { TableName = qs.TableName; DynamicParameters parameters = new DynamicParameters(); qs.Parameters.ForEach(q => parameters.Add(q.ParamKey, q.ParamValue)); FormData = _dbContext.QueryFirstOrDefault(qs.ToString(), parameters); _pkValue = FormData.Get("Fid"); var queryColList = qs.QueryCols.Split(','); IEnumerable <FapColumn> fapColumns = _dbContext.Columns(qs.TableName).Where(c => queryColList.Contains(c.ColName)); if (fapColumns.Any()) { SetFapClumns(fapColumns); } return(this); }
public IEnumerable <FapColumn> GetMultiLanguageColumns(string tableName) { var fapColumns = _dbContext.Columns(tableName); foreach (var column in fapColumns) { string label = GetMultiLangValue(MultiLanguageOriginEnum.FapColumn, $"{column.TableName}_{column.ColName}"); if (label.IsPresent()) { column.ColComment = label; } else { column.ColComment = column.ColComment; } } return(fapColumns); }
/// <summary> /// 根据邮件模板生成邮件内容 /// </summary> /// <param name="processInstance"></param> /// <param name="content"></param> /// <returns></returns> private string BuildeMessageContent(WfProcessInstance processInstance, string content) { if (content.Contains("${业务名称}")) { content = content.Replace("${业务名称}", processInstance.ProcessName); } if (content.Contains("${业务申请人}")) { content = content.Replace("${业务申请人}", processInstance.AppEmpName); } if (content.Contains("${业务申请时间}")) { content = content.Replace("${业务申请时间}", processInstance.StartTime); } dynamic bizData = _dataAccessor.Get(processInstance.BillTable, processInstance.BillUid, true); if (bizData == null) { return content; } IDictionary<string, object> dicBizData = bizData as IDictionary<string, object>; var bizCols = _dataAccessor.Columns(processInstance.BillTable); Regex regex = new Regex(FapPlatformConstants.VariablePattern, RegexOptions.IgnoreCase); var mat = regex.Matches(content); foreach (Match item in mat) { string fieldName = item.ToString().Substring(2, item.ToString().Length - 3); var col = bizCols.FirstOrDefault(c => c.ColComment == fieldName); if (col == null) continue; if (col.RefTable.IsPresent()) { content = content.Replace(item.ToString(), dicBizData[col.ColName + "MC"].ToStringOrEmpty()); } else { content = content.Replace(item.ToString(), dicBizData[col.ColName].ToStringOrEmpty()); } } return content; }
public Task BindModelAsync(ModelBindingContext bindingContext) { if (bindingContext == null) { throw new ArgumentNullException(nameof(bindingContext)); } // Try to fetch the value of the argument by name var valueProviderResult = bindingContext.ValueProvider.GetValue("tableName"); if (valueProviderResult == ValueProviderResult.None) { return(Task.CompletedTask); } IEnumerable <IValueProvider> valueProviders = bindingContext.ValueProvider as IEnumerable <IValueProvider>; var formValueProviders = valueProviders.OfType <FormValueProvider>(); if (formValueProviders == null) { return(Task.CompletedTask); } bindingContext.ModelState.SetModelValue("TableName", valueProviderResult); var value = valueProviderResult.FirstValue; // Check if the argument value is null or empty if (string.IsNullOrEmpty(value)) { return(Task.CompletedTask); } GridModel model = new GridModel(); model.TableName = value; IEnumerable <FapDynamicObject> RowList = new List <FapDynamicObject>(); var formValueProvider = formValueProviders.First(); model.Rows = GetRows(formValueProvider, _dbContext.Columns(value)); bindingContext.Result = ModelBindingResult.Success(model); return(Task.CompletedTask); }
public PageDataResultView QueryPageDataResultView(JqGridPostData jqGridPostData) { Pageable pageable = AnalysisPostData(jqGridPostData); //queryOption.Where = AnalysisWhere(queryOption.Where); PageDataResultView result = QueryPagedDynamicData(); return(result); PageDataResultView QueryPagedDynamicData() { try { IEnumerable <FapColumn> fapColumns = _dbContext.Columns(jqGridPostData.QuerySet.TableName); PageInfo <dynamic> pi = _dbContext.QueryPage(pageable); //组装成DataResultView对象 PageDataResultView dataResultView = new PageDataResultView(); dataResultView.Data = pi.Items.ToFapDynamicObjectList(fapColumns); dataResultView.DataJson = JsonConvert.SerializeObject(pi.Items); dataResultView.TotalCount = pi.TotalCount; dataResultView.CurrentPage = pi.CurrentPage; dataResultView.OrginData = pi.Items; dataResultView.DataListForJqGrid = pi.Items;//暂不启用加密设置 GetEncryptData(jqGridPostData.QuerySet.TableName, pi.Items as IEnumerable<IDictionary<string, object>>); dataResultView.PageSize = pi.PageSize; //统计字段 dataResultView.StatFieldData = pi.StatFieldData; dataResultView.StatFieldDataJson = JsonConvert.SerializeObject(pi.StatFieldData); return(dataResultView); } catch (Exception) { throw; } } }
public void UseInsPending(InsToDo insToDo) { //保险组 InsCase insCase = _dbContext.Get <InsCase>(insToDo.CaseUid); //员工 Employee employee = _dbContext.Get <Employee>(insToDo.EmpUid); //检查员工是否在保险组 var caseEmployee = _dbContext.QueryFirstOrDefault($"select * from {insCase.TableName} where EmpUid=@EmpUid", new DynamicParameters(new { EmpUid = employee.Fid })); if (caseEmployee != null) { if (employee.EmpStatus == EmployeeStatus.Former) { DeleteEmployeeFromInsCase(); } else { UpdateEmployeeToInsCase(); } } else if (employee.EmpStatus == EmployeeStatus.Current) { AddEmployeeToInsCase(); } MarkInsTodo(); void MarkInsTodo() { insToDo.OperDate = DateTimeUtils.CurrentDateTimeStr; insToDo.OperEmpUid = _applicationContext.EmpUid; insToDo.OperFlag = "1"; _dbContext.Update(insToDo); } void DeleteEmployeeFromInsCase() { string sql = $"delete from {insCase.TableName} where Fid=@Fid"; _dbContext.ExecuteOriginal(sql, new DynamicParameters(new { Fid = caseEmployee.Fid })); } void UpdateEmployeeToInsCase() { string sql = $"update {insCase.TableName} set EmpCode='{employee.EmpCode}',EmpCategory='{employee.EmpCategory}',DeptUid='{employee.DeptUid}' where Fid=@Fid"; _dbContext.ExecuteOriginal(sql, new DynamicParameters(new { Fid = caseEmployee.Fid })); } void AddEmployeeToInsCase() { FapDynamicObject caseEmp = new FapDynamicObject(_dbContext.Columns(insCase.TableName)); //将此人的放入薪资套 caseEmp.SetValue("EmpUid", employee.Fid); caseEmp.SetValue("EmpCode", employee.EmpCode); caseEmp.SetValue("EmpCategory", employee.EmpCategory); caseEmp.SetValue("DeptUid", employee.DeptUid); caseEmp.SetValue("InsCaseUid", insCase.Fid); caseEmp.SetValue("InsmentTimes", 1); caseEmp.SetValue("InsConfirm", 0); if (insCase.InsYM.IsPresent()) { caseEmp.SetValue("InsYM", insCase.InsYM); } else { caseEmp.SetValue("InsYM", insCase.InitYM); } _dbContext.InsertDynamicData(caseEmp); } }
/// <summary> /// 根据配置,执行单据回写业务表 /// </summary> /// <param name="tableName">单据表</param> /// <param name="fid">单据数据Fid</param> public void WriteBackToBusiness(string tableName, string fid) { //单据实体 IDictionary <string, object> billData = _dbContext.Get(tableName, fid, true) as IDictionary <string, object>; //业务实体 只有设置了映射才会有 FapDynamicObject fapBizData = null; IDictionary <string, object> dicBizData = null; string bizTableName = string.Empty; billData.TryGetValue("EffectiveTime", out object effectiveTime); if (effectiveTime != null && effectiveTime.ToString().IsPresent()) { DateTime effTime; if (DateTime.TryParse(effectiveTime.ToString(), out effTime)) { //生效时间大于当前时间 if (effTime > DateTime.Now) { return; } } } if (billData.ContainsKey("EffectiveState")) { //设置生效状态 billData["EffectiveState"] = 1; } var fapBillData = billData.ToFapDynamicObject(_dbContext.Columns(tableName)); if (billData.ContainsKey("EffectiveState")) { _dbContext.UpdateDynamicData(fapBillData); } DynamicParameters param = new DynamicParameters(); param.Add("TableName", tableName); IEnumerable <CfgBillWriteBackRule> rules = _dbContext.QueryWhere <CfgBillWriteBackRule>("DocEntityUid=@TableName", param); if (rules != null && rules.Any()) { foreach (var rule in rules) { bizTableName = rule.BizEntityUid; //获取单据实体数据 //没有关联字段,就是新增 if (rule.Association.IsMissing() && rule.FieldMapping.IsPresent()) { //获取mapping JArray mappings = JArray.Parse(rule.FieldMapping); if (mappings != null && mappings.Any()) { FapDynamicObject fdo = new FapDynamicObject(_dbContext.Columns(bizTableName)); foreach (JObject map in mappings) { //id存放字段的映射,billtablename.colname,biztablename.colname string id = map.GetValue("id").ToString(); string[] arryMap = id.Split(','); string billCol = arryMap[0].Split('.')[1]; string bizCol = arryMap[1].Split('.')[1]; billData.TryGetValue(billCol, out object bo); fdo.SetValue(bizCol, bo ?? ""); } //insert _dbContext.InsertDynamicData(fdo); //提醒到工资保险 NotifyPayroll(rule, fapBillData, fdo); NotifyInsurance(rule, fapBillData, fdo); } } else { //更新 string association = rule.Association; //获取关联字段值,这个是更新业务表的条件 billData.TryGetValue(association, out object fidValue); if (fidValue != null && rule.FieldMapping.IsPresent()) { JArray mappings = JArray.Parse(rule.FieldMapping); if (mappings != null && mappings.Any()) { //根据关联值获取业务值 dicBizData = _dbContext.Get(bizTableName, fidValue.ToString()) as IDictionary <string, object>; if (dicBizData != null) { fapBizData = dicBizData.ToFapDynamicObject(_dbContext.Columns(bizTableName)); //更新业务对象 foreach (JObject map in mappings) { //id存放字段的映射,billtablename.colname,biztablename.colname string id = map.GetValue("id").ToString(); string[] arryMap = id.Split(','); string billCol = arryMap[0].Split('.')[1]; string bizCol = arryMap[1].Split('.')[1]; billData.TryGetValue(billCol, out object bo); fapBizData.SetValue(bizCol, bo ?? ""); } //bizData.TableName = bizTableName; //update _dbContext.UpdateDynamicData(fapBizData); //提醒到工资保险 NotifyPayroll(rule, fapBillData, fapBizData); NotifyInsurance(rule, fapBillData, fapBizData); } else { //新增业务对象 FapDynamicObject fdo = new FapDynamicObject(_dbContext.Columns(bizTableName)); foreach (JObject map in mappings) { //id存放字段的映射,billtablename.colname,biztablename.colname string id = map.GetValue("id").ToString(); string[] arryMap = id.Split(','); string billCol = arryMap[0].Split('.')[1]; string bizCol = arryMap[1].Split('.')[1]; billData.TryGetValue(billCol, out object bo); fdo.SetValue(bizCol, bo ?? ""); } fdo.SetValue(FapDbConstants.FAPCOLUMN_FIELD_Fid, UUIDUtils.Fid); //insert _dbContext.InsertDynamicData(fdo); dicBizData = _dbContext.Get(bizTableName, fdo.Get(FapDbConstants.FAPCOLUMN_FIELD_Fid).ToString()) as IDictionary <string, object>; fapBizData = billData.ToFapDynamicObject(_dbContext.Columns(bizTableName)); //提醒到工资保险 NotifyPayroll(rule, fapBillData, fapBizData); NotifyInsurance(rule, fapBillData, fapBizData); } } } } //执行自定义update sql if (rule.CustomSql.IsPresent()) { string sql = GetFillSql(rule.CustomSql, billData, dicBizData, tableName, bizTableName); _dbContext.Execute(sql); } //回调类 if (rule.CallBackClass.IsPresent()) { try { Type type = System.Type.GetType(rule.CallBackClass); if (type != null && type.GetInterface("IBillWritebackService") != null) { IBillWritebackService wb = (IBillWritebackService)ActivatorUtilities.GetServiceOrCreateInstance(_serviceProvider, type); wb.Exec(fapBillData, fapBizData); } } catch (Exception ex) { _logger.LogError(ex.Message); } } } } }