/// <summary> /// 删除附件 /// </summary> /// <param name="attachIds">附件Id集合,多个以逗号分隔</param> /// <returns></returns> public ActionResult DeleteAttachment(string attachIds) { if (string.IsNullOrEmpty(attachIds)) { return(Json(new ReturnResult { Success = false, Message = "附件Id为空!" })); } if (_Request == null) { _Request = Request; } string[] token = attachIds.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (token.Length == 0) { return(Json(new ReturnResult { Success = false, Message = "附件Id为空!" })); } List <Guid> delIds = token.Select(x => x.ObjToGuid()).Where(x => x != Guid.Empty).ToList(); if (delIds == null || delIds.Count == 0) { return(Json(new ReturnResult { Success = false, Message = "附件Id为空!" })); } string errMsg = string.Empty; List <Sys_Attachment> tempAttachments = CommonOperate.GetEntities <Sys_Attachment>(out errMsg, x => delIds.Contains(x.Id), null, false); errMsg = SystemOperate.DeleteAttachment(tempAttachments); return(Json(new ReturnResult { Success = string.IsNullOrEmpty(errMsg), Message = errMsg })); }
/// <summary> /// 获取记录附件 /// </summary> /// <param name="recordId">记录ID</param> /// <returns></returns> public ActionResult GetAttachments(Guid recordId) { string errMsg = string.Empty; List <Sys_Attachment> attachments = CommonOperate.GetEntities <Sys_Attachment>(out errMsg, x => x.RecordId == recordId, null, false); return(Json(attachments)); }
/// <summary> /// 获取所有组织 /// </summary> /// <param name="expression">条件表达式</param> /// <returns></returns> public static List <Sys_Organization> GetAllOrgs(Expression <Func <Sys_Organization, bool> > expression = null) { string errMsg = string.Empty; Expression <Func <Sys_Organization, bool> > exp = x => !x.IsDeleted && !x.IsDraft; if (expression != null) { exp = ExpressionExtension.And <Sys_Organization>(exp, expression); } List <Sys_Organization> orgs = CommonOperate.GetEntities <Sys_Organization>(out errMsg, exp, null, false); if (orgs == null) { orgs = new List <Sys_Organization>(); } return(orgs); }
/// <summary> /// 获取所有用户 /// </summary> /// <param name="expression">条件表达式</param> /// <returns></returns> public static List <Sys_User> GetAllUsers(Expression <Func <Sys_User, bool> > expression = null) { string errMsg = string.Empty; Expression <Func <Sys_User, bool> > exp = x => x.IsValid && x.IsActivated && !x.IsDeleted && !x.IsDraft; if (expression != null) { exp = ExpressionExtension.And <Sys_User>(exp, expression); } List <Sys_User> users = CommonOperate.GetEntities <Sys_User>(out errMsg, exp, null, false); if (users == null) { users = new List <Sys_User>(); } return(users); }
/// <summary> /// 字段操作完成后 /// </summary> /// <param name="operateType">操作类型</param> /// <param name="t">字段对象</param> /// <param name="result">操作结果</param> /// <param name="currUser">当前用户</param> /// <param name="otherParams"></param> public void OperateCompeletedHandle(ModelRecordOperateType operateType, Sys_Field t, bool result, UserInfo currUser, object[] otherParams = null) { if (result) { string errMsg = string.Empty; if (operateType == ModelRecordOperateType.Edit) { if (!string.IsNullOrEmpty(t.Display)) //修改了字段显示名称 { List <Sys_GridField> gridFields = SystemOperate.GetAllGridFields(x => x.Sys_FieldId == t.Id); if (gridFields.Count > 0) { gridFields.ForEach(x => { x.Display = t.Display; }); CommonOperate.OperateRecords <Sys_GridField>(gridFields, ModelRecordOperateType.Edit, out errMsg, false); } List <Sys_FormField> formFields = CommonOperate.GetEntities <Sys_FormField>(out errMsg, x => x.Sys_FieldId == t.Id, null, false); if (formFields != null && formFields.Count > 0) { formFields.ForEach(x => { x.Display = t.Display; }); CommonOperate.OperateRecords <Sys_FormField>(formFields, ModelRecordOperateType.Edit, out errMsg, false); } Sys_Field tempField = SystemOperate.GetFieldById(t.Id); if (tempField.Sys_ModuleId.HasValue) { Sys_Module module = SystemOperate.GetModuleById(tempField.Sys_ModuleId.Value); if (module != null && !string.IsNullOrEmpty(module.TitleKeyDisplay)) { module.TitleKeyDisplay = tempField.Display; } } } } else if (operateType == ModelRecordOperateType.Del) { //字段信息删除后删除相应的表单字段和列表字段 //删除列表字段 Sys_Module gridFieldModule = SystemOperate.GetModuleByTableName(typeof(Sys_GridField).Name); CommonOperate.DeleteRecordsByExpression <Sys_GridField>(x => x.Sys_FieldId == t.Id, out errMsg, gridFieldModule.IsEnabledRecycle); //删除表单字段 Sys_Module formFieldModule = SystemOperate.GetModuleByTableName(typeof(Sys_FormField).Name); CommonOperate.DeleteRecordsByExpression <Sys_FormField>(x => x.Sys_FieldId == t.Id, out errMsg, formFieldModule.IsEnabledRecycle); } } }
/// <summary> /// 保存表单附件 /// </summary> /// <param name="moduleId">模块Id</param> /// <param name="id">记录Id</param> /// <param name="fileMsg">文件信息</param> /// <param name="isAdd">是否只是添加</param> /// <returns></returns> public ActionResult SaveFormAttach(Guid moduleId, Guid id, string fileMsg, bool isAdd = false) { if (string.IsNullOrEmpty(fileMsg)) { return(Json(new ReturnResult { Success = true, Message = string.Empty })); } if (_Request == null) { _Request = Request; } SetRequest(_Request); string errMsg = string.Empty; List <AttachFileInfo> addAttachs = null; try { string pathFlag = "\\"; if (WebConfigHelper.GetAppSettingValue("IsLinux") == "true") { pathFlag = "/"; } UserInfo currUser = GetCurrentUser(_Request); Guid? userId = currUser != null ? currUser.UserId : (Guid?)null; string userName = currUser != null ? currUser.UserName : string.Empty; Sys_Module module = SystemOperate.GetModuleById(moduleId); List <AttachFileInfo> attachInfo = JsonHelper.Deserialize <List <AttachFileInfo> >(HttpUtility.UrlDecode(fileMsg, Encoding.UTF8)); #region 除已经移除的附件 if (!isAdd) //非新增状态 { List <Guid> existIds = new List <Guid>(); if (attachInfo != null && attachInfo.Count > 0) { existIds = attachInfo.Select(x => x.Id.ObjToGuid()).Where(x => x != Guid.Empty).ToList(); } //对已删除的附件进行处理 List <Sys_Attachment> tempAttachments = CommonOperate.GetEntities <Sys_Attachment>(out errMsg, x => x.Sys_ModuleId == moduleId && x.RecordId == id, null, false); if (tempAttachments != null) { tempAttachments = tempAttachments.Where(x => !existIds.Contains(x.Id)).ToList(); } SystemOperate.DeleteAttachment(tempAttachments); } #endregion #region 添加附件 if (attachInfo != null && attachInfo.Count > 0) { addAttachs = new List <AttachFileInfo>(); //日期文件夹 string dateFolder = DateTime.Now.ToString("yyyyMM", DateTimeFormatInfo.InvariantInfo); //记录对应的titleKey值 string titleKeyValue = CommonOperate.GetModelTitleKeyValue(moduleId, id); List <Sys_Attachment> list = new List <Sys_Attachment>(); foreach (AttachFileInfo info in attachInfo) { if (string.IsNullOrEmpty(info.AttachFile)) { continue; } if (info.Id.ObjToGuid() != Guid.Empty) { continue; //原来的附件 } string oldAttchFile = _Request.RequestContext.HttpContext.Server.MapPath(info.AttachFile); //临时附件 string dir = string.Format("{0}Upload{3}Attachment{3}{1}{3}{2}", Globals.GetWebDir(), module.TableName, dateFolder, pathFlag); if (!Directory.Exists(dir)) //目录不存在则创建 { Directory.CreateDirectory(dir); } string newAttachFile = string.Format("{0}{4}{1}_{2}{3}", dir, Path.GetFileNameWithoutExtension(info.FileName), id, Path.GetExtension(info.FileName), pathFlag); try { System.IO.File.Copy(oldAttchFile, newAttachFile, true); //复制文件 } catch (Exception ex) { return(Json(new ReturnResult { Success = false, Message = ex.Message }, "text/plain")); } //文件复制完成后删除临时文件 try { System.IO.File.Delete(oldAttchFile); } catch { } string newPdfFile = string.Empty; //pdf文件 string newSwfFile = string.Empty; //swf文件 //可以转换成swf的进行转换 if (info.FileType.Equals(".doc") || info.FileType.Equals(".docx") || info.FileType.Equals(".xls") || info.FileType.Equals(".xlsx") || info.FileType.Equals(".ppt") || info.FileType.Equals(".pptx") || info.FileType.Equals(".pdf")) { newPdfFile = string.Format("{0}{2}{1}.pdf", dir, Path.GetFileNameWithoutExtension(newAttachFile), pathFlag); newSwfFile = string.Format("{0}{2}{1}.swf", dir, Path.GetFileNameWithoutExtension(newAttachFile), pathFlag); string exePath = _Request.RequestContext.HttpContext.Server.MapPath("~/bin/SWFTools/pdf2swf.exe"); string binPath = _Request.RequestContext.HttpContext.Server.MapPath("~/bin/"); string[] obj = new string[] { info.FileType, newAttachFile, newPdfFile, newSwfFile, exePath, binPath }; CreateSwfFile(obj); } //构造文件URL,保存为相对URL地址 string fileUrl = string.Format("Upload/Attachment/{0}/{1}/{2}", module.TableName, dateFolder, Path.GetFileName(newAttachFile)); string pdfUrl = string.IsNullOrEmpty(newPdfFile) ? string.Empty : newPdfFile.Replace(Globals.GetWebDir(), string.Empty).Replace("\\", "/"); string swfUrl = string.IsNullOrEmpty(newSwfFile) ? string.Empty : newSwfFile.Replace(Globals.GetWebDir(), string.Empty).Replace("\\", "/"); Guid attachiId = Guid.NewGuid(); info.Id = attachiId.ToString(); list.Add(new Sys_Attachment() { Id = attachiId, Sys_ModuleId = moduleId, Sys_ModuleName = module.Name, RecordId = id, RecordTitleKeyValue = titleKeyValue, FileName = info.FileName, FileType = info.FileType, FileSize = info.FileSize, FileUrl = fileUrl, PdfUrl = pdfUrl, SwfUrl = swfUrl, AttachType = info.AttachType, CreateDate = DateTime.Now, CreateUserId = userId, CreateUserName = userName, ModifyDate = DateTime.Now, ModifyUserId = userId, ModifyUserName = userName }); string tempUrl = "/" + fileUrl; if (!string.IsNullOrEmpty(swfUrl)) { tempUrl = string.Format("/Page/DocView.html?fn={0}&swfUrl={1}", HttpUtility.UrlEncode(info.FileName).Replace("+", "%20"), HttpUtility.UrlEncode(swfUrl).Replace("+", "%20")); } info.AttachFile = tempUrl; info.PdfFile = pdfUrl; info.SwfFile = swfUrl; addAttachs.Add(info); } if (list.Count > 0) { Guid attachModuleId = SystemOperate.GetModuleIdByName("附件信息"); bool rs = CommonOperate.OperateRecords(attachModuleId, list, ModelRecordOperateType.Add, out errMsg, false); if (!rs) { addAttachs = null; } } } #endregion } catch (Exception ex) { errMsg = ex.Message; } return(Json(new { Success = string.IsNullOrEmpty(errMsg), Message = errMsg, AddAttachs = addAttachs }, "text/plain")); }
/// <summary> /// 添加后台系统任务 /// </summary> /// <param name="obj"></param> /// <param name="e"></param> public static void SysBackgroundTaskAdd(object obj, EventArgs e) { if (WebConfigHelper.GetAppSettingValue("IsRunBgTask") == "true") { try { #region 重建索引 //重建索引任务 BackgroundTask reBuildIndexTask = new BackgroundTask((args) => { if (DateTime.Now.Hour == 4 && DateTime.Now.Minute == 0) { SystemOperate.RebuildAllTableIndex(); } return(true); }, null, false, 45, false); AutoProcessTask.AddTask(reBuildIndexTask); #endregion #region 迁移历史审批数据 //审批完成后的数据迁移到待办历史数据表中,针对审批是迁移失败的处理 BackgroundTask todoStatusHandleTask = new BackgroundTask((args) => { if ((DateTime.Now.Hour == 3 && DateTime.Now.Minute == 0) || (DateTime.Now.Hour == 12 && DateTime.Now.Minute == 40)) { //审批完成数据迁移异常处理 try { string errMsg = string.Empty; int refuseStatus = (int)WorkFlowStatusEnum.Refused; int overStatus = (int)WorkFlowStatusEnum.Over; int obsoStatus = (int)WorkFlowStatusEnum.Obsoleted; List <Bpm_WorkFlowInstance> flowInsts = CommonOperate.GetEntities <Bpm_WorkFlowInstance>(out errMsg, x => x.Status == refuseStatus || x.Status == overStatus || x.Status == obsoStatus, null, false); if (flowInsts != null && flowInsts.Count > 0) { foreach (Bpm_WorkFlowInstance flowInst in flowInsts) { BpmOperate.TransferWorkToDoHistory(flowInst, null); } } } catch { } } return(true); }, null, false, 45, false); AutoProcessTask.AddTask(todoStatusHandleTask); #endregion #region 附件在线预览生成 BackgroundTask attachOnlineViewHandleTask = new BackgroundTask((args) => { if (DateTime.Now.Hour == 4 && DateTime.Now.Minute == 0) { string attachWeb = WebConfigHelper.GetAppSettingValue("AttachmentWeb"); if (!string.IsNullOrEmpty(attachWeb)) { if (!attachWeb.EndsWith("/")) { attachWeb += "/"; } string apiUrl = attachWeb + "api/AnnexApi/ExecCreateSwfTask.html"; DataMutual dataMutal = new DataMutual(apiUrl); dataMutal.Start(null); } } return(true); }, null, false, 45, false); AutoProcessTask.AddTask(attachOnlineViewHandleTask); #endregion #region 基于DB的失效分布式锁释放 BackgroundTask dbLockReleaseHandleTask = new BackgroundTask((args) => { if (WebConfigHelper.GetAppSettingValue("EnabledDistributeLock") == "true") //启用分布式锁 { string errMsg = string.Empty; double nowTimesamp = Globals.GetTimestamp(DateTime.Now);//当前时间戳 CommonOperate.DeleteRecordsByExpression <Other_DistributedLock>(x => x.Invalid_Timesamp < nowTimesamp, out errMsg); } return(true); }, null, false, 60, false); AutoProcessTask.AddTask(dbLockReleaseHandleTask); #endregion } catch { } } try { InitFactory factory = InitFactory.GetInstance(); if (factory != null) { factory.AddBackgroundTask(); } } catch { } }