private void addChildDesignInput(S_D_Input child, S_D_Input parent, List <S_D_Input> synData, StringBuilder sb) { if (string.IsNullOrEmpty(child.ID)) { child.ID = GuidHelper.CreateGuid(); } if (string.IsNullOrEmpty(child.ParentID)) { child.ParentID = parent.ID; } if (string.IsNullOrEmpty(child.FullID)) { child.FullID = parent.FullID + "." + child.ID; } if (string.IsNullOrEmpty(child.ProjectInfoID)) { child.ProjectInfoID = parent.ProjectInfoID; } if (child.SortIndex == 0) { child.SortIndex = synData.Count(a => a.ParentID == parent.ID) + 1; } if (!synData.Exists(a => a.ID == child.ID)) { synData.Add(child); } var param = new DesignInputRequestData(); param.Id = child.ID; param.name = child.Name; param.FullID = child.FullID; param.parentId = child.ParentID; param.ProjectInfoID = child.ProjectInfoID; param.sort = child.SortIndex; param.type = 8; var queueSql = string.Format(this.SaveQueueSqlTmp, SynType.Save.ToString(), "S_D_Input", child.ID, child.Type , DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), JsonHelper.ToJson <DesignInputRequestData>(param).Replace("'", "''") , this.BaseServerUrl + "folder/edit"); sb.AppendLine(queueSql); }
public void CreateDesignInputQueue() { var sourceSql = @"select m.* from S_D_Input m left join S_I_ProjectInfo p on p.ID = m.ProjectInfoID where 1=1"; var synProjectMode = ConfigurationManager.AppSettings["SynProjectMode"] != null ? ConfigurationManager.AppSettings["SynProjectMode"].ToString() : string.Empty; if (!string.IsNullOrEmpty(synProjectMode)) { sourceSql += "and ModeCode in ('" + synProjectMode.Replace(",", "','") + "') "; } //取最近的同步记录时间,到当前时间的差异数据 var synData = this.SQLHelperInterface.ExecuteList <S_D_Input>("select * from S_D_Input where 1=1 "); var lastSynTime = synData.Max(a => a.SynTime); if (lastSynTime != null) { //判断同步增量数据 还是 所有数据 var startDate = Convert.ToDateTime(lastSynTime).ToString(); var endDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); sourceSql += " and m.ModifyDate >='" + startDate + "' and m.ModifyDate <='" + endDate + "'"; } #region Remove var removeSb = new StringBuilder(); var removeUrl = this.BaseServerUrl + "folder/delete"; var alldtSql = @"select m.ID from S_D_Input m left join S_I_ProjectInfo p on p.ID = m.ProjectInfoID where 1=1"; if (!string.IsNullOrEmpty(synProjectMode)) { alldtSql += "and ModeCode in ('" + synProjectMode.Replace(",", "','") + "') "; } var alldt = this.SQLHelpeProject.ExecuteDataTable(alldtSql); var allIDs = new List <string>(); foreach (DataRow item in alldt.Rows) { allIDs.Add(item["ID"].ToString()); } var removeList = synData.Where(a => !allIDs.Contains(a.ID) && a.Type == DesignInputType.Actual.ToString() && a.State == DataState.Normal.ToString()).ToList(); foreach (var item in removeList) { var queueSql = string.Format(this.SaveQueueSqlTmp, SynType.Remove.ToString(), "S_D_Input", item.ID, item.Type , DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), JsonHelper.ToJson <DeleteRequestData>(new DeleteRequestData() { id = item.ID }), string.Format(removeUrl, item.Type == "Major" ? "Plan" : "Exchange")); removeSb.AppendLine(queueSql); } if (removeSb.Length > 0) { this.SQLHelperInterface.ExecuteNonQuery(removeSb.ToString()); } #endregion #region Edit var saveUrl = this.BaseServerUrl + "folder/edit"; var saveSb = new StringBuilder(); var sourceDt = this.SQLHelpeProject.ExecuteDataTable(sourceSql); foreach (DataRow row in sourceDt.Rows) { var dic = DataHelper.DataRowToDic(row); var ID = dic.GetValue("ID"); var projectInfoID = dic.GetValue("ProjectInfoID"); var catagory = dic.GetValue("Catagory"); var inputType = dic.GetValue("InputType"); var name = dic.GetValue("InfoName"); var sortIndex = dic.GetValue("SortIndex"); if (!synData.Any(a => a.ProjectInfoID == projectInfoID)) { var initVirtualSql = initVirtualDesignInput(projectInfoID, sourceDt, synData); saveSb.AppendLine(initVirtualSql); } //设置参数 var root = synData.FirstOrDefault(a => a.ProjectInfoID == projectInfoID && a.Code == "Root"); var typeInput = synData.FirstOrDefault(a => a.ProjectInfoID == projectInfoID && a.Type == DesignInputType.Virtual.ToString() && a.Name == inputType && a.Code == catagory); if (typeInput == null) { var catagoryInput = synData.FirstOrDefault(a => a.ParentID == root.ID && a.Code == catagory); if (catagoryInput == null) { catagoryInput = new S_D_Input() { Code = catagory, Name = catagory, Type = DesignInputType.Virtual.ToString() }; //只可能是新增专业,缺专业对应目录 var majorEnum = GlobalData.MajorList.FirstOrDefault(a => a.Code == catagory); if (majorEnum == null) { continue; } catagoryInput.Name = majorEnum.Name; addChildDesignInput(catagoryInput, root, synData, saveSb); } typeInput = new S_D_Input() { Code = catagory, Name = inputType, Type = DesignInputType.Virtual.ToString() }; addChildDesignInput(typeInput, catagoryInput, synData, saveSb); } var input = new S_D_Input() { ID = ID, Code = catagory, Name = name, SortIndex = string.IsNullOrEmpty(sortIndex) ? 0 : Convert.ToInt32(sortIndex), Type = DesignInputType.Actual.ToString() }; addChildDesignInput(input, typeInput, synData, saveSb); } if (saveSb.Length > 0) { this.SQLHelperInterface.ExecuteNonQuery(saveSb.ToString()); } #endregion }