/// <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, Bpm_WorkFlow t, bool result, UserInfo currUser, object[] otherParams = null)
        {
            string errMsg = string.Empty;

            if (result && operateType == ModelRecordOperateType.Del)
            {
                //删除流程结点
                CommonOperate.DeleteRecordsByExpression <Bpm_WorkNode>(x => x.Bpm_WorkFlowId == t.Id, out errMsg);
                //删除流程连线
                CommonOperate.DeleteRecordsByExpression <Bpm_WorkLine>(x => x.Bpm_WorkFlowId == t.Id, out errMsg);
            }
        }
 /// <summary>
 /// 释放分布式锁(基于DB方式)
 /// </summary>
 /// <param name="moduleFlag">模块标识,模块表名/类名</param>
 /// <param name="method_Flag">方法名标识</param>
 /// <returns></returns>
 public static string ReleaseDistDbLock(string moduleFlag, string method_Flag)
 {
     if (WebConfigHelper.GetAppSettingValue("EnabledDistributeLock") != "true") //未启用分布式锁
     {
         return(string.Empty);
     }
     lock (tempObjDistriLock)
     {
         string errMsg = string.Empty;
         CommonOperate.DeleteRecordsByExpression <Other_DistributedLock>(x => x.ModuleFlag == moduleFlag && x.Method_Flag == method_Flag, out errMsg);
         return(string.Empty);
     }
 }
 /// <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);
         }
     }
 }
Exemple #4
0
        /// <summary>
        /// 删除用户
        /// </summary>
        /// <param name="username">用户名</param>
        /// <returns></returns>
        public static string DelUser(string username)
        {
            string errMsg = string.Empty;

            if (ModelConfigHelper.ModelIsViewMode(typeof(Sys_User)))
            {
                errMsg = "用户管理模块为视图模块不允许删除!";
                return(errMsg);
            }
            Sys_User user = CommonOperate.GetEntity <Sys_User>(x => x.UserName == username && !x.IsDeleted && x.IsValid && x.IsActivated, string.Empty, out errMsg);

            if (user == null)
            {
                return("非法用户!");
            }
            bool rs = CommonOperate.DeleteRecordsByExpression <Sys_User>(x => x.UserName == username, out errMsg);

            if (rs) //用户删除成功后删除临时用户
            {
                CommonOperate.DeleteRecordsByExpression <Sys_TempUser>(x => x.FieldInfo1 == user.Id.ToString(), out errMsg);
            }
            return(errMsg);
        }
 /// <summary>
 /// 取分布式锁(基于DB方式)
 /// </summary>
 /// <param name="moduleFlag">模块标识,模块表名/类名</param>
 /// <param name="method_Flag">方法名标识</param>
 /// <param name="expirtime">自定义过期时间(秒)</param>
 /// <param name="des">锁描述</param>
 /// <returns></returns>
 public static string DistributeDbLock(string moduleFlag, string method_Flag, double?expirtime = null, string des = null)
 {
     try
     {
         if (WebConfigHelper.GetAppSettingValue("EnabledDistributeLock") != "true") //未启用分布式锁
         {
             return(string.Empty);
         }
         string hostname  = System.Net.Dns.GetHostName();            //当前服务器
         string processId = ApplicationObject.GetCurrentProcessId(); //当前进程
         string threadId  = ApplicationObject.GetCurrentThreadId();  //当前线程
         lock (tempObjDistriLock)
         {
             string       errMsg   = string.Empty;
             int          timeout  = 30; //30秒超时
             DateTime     initTime = DateTime.Now;
             DatabaseType dbType   = DatabaseType.MsSqlServer;
             string       connStr  = ModelConfigHelper.GetModelConnStr(typeof(Other_DistributedLock), out dbType, false);
             while ((DateTime.Now - initTime).TotalSeconds <= timeout)
             {
                 double updateTimesamp            = Globals.GetTimestamp(DateTime.Now);                                                                 //当前时间戳
                 double invalidTimesamp           = expirtime.HasValue && expirtime.Value > 0 ? updateTimesamp + expirtime.Value : updateTimesamp + 20; //过期时间戳
                 Other_DistributedLock methodLock = CommonOperate.GetEntity <Other_DistributedLock>(x => x.ModuleFlag == moduleFlag && x.Method_Flag == method_Flag && x.Invalid_Timesamp > updateTimesamp, null, out errMsg);
                 //锁存在,继续循环再取
                 if (methodLock != null)
                 {
                     Thread.Sleep(10);
                     continue;
                 }
                 //锁不存在,取得锁成功,插入锁标识
                 methodLock = new Other_DistributedLock()
                 {
                     ModuleFlag       = moduleFlag,
                     Method_Flag      = method_Flag,
                     Update_Timesamp  = updateTimesamp,
                     Invalid_Timesamp = invalidTimesamp,
                     Maching          = hostname,
                     ProcessId        = processId,
                     ThreadId         = threadId,
                     Des = des
                 };
                 TransactionTask tranAction = (conn) =>
                 {
                     CommonOperate.DeleteRecordsByExpression <Other_DistributedLock>(x => x.ModuleFlag == moduleFlag && x.Method_Flag == method_Flag, out errMsg, false, connStr, dbType, conn);
                     if (!string.IsNullOrEmpty(errMsg))
                     {
                         throw new Exception(errMsg);
                     }
                     CommonOperate.OperateRecord <Other_DistributedLock>(methodLock, ModelRecordOperateType.Add, out errMsg, null, false, false, connStr, dbType, conn);
                     if (!string.IsNullOrEmpty(errMsg))
                     {
                         throw new Exception(errMsg);
                     }
                 };
                 CommonOperate.TransactionHandle(tranAction, out errMsg, connStr, dbType);
                 //取锁成功
                 if (string.IsNullOrEmpty(errMsg))
                 {
                     return(string.Empty);
                 }
                 else
                 {
                     WritLockLog(moduleFlag, method_Flag, errMsg);
                 }
                 //取锁失败,继续循环取
                 Thread.Sleep(10);
             }
             return("获取分布式锁超时"); //取锁失败
         }
     }
     catch
     {
         return(string.Empty);
     }
 }
Exemple #6
0
 /// <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, OrgM_Emp t, bool result, UserInfo currUser, object[] otherParams = null)
 {
     if (result)
     {
         string errMsg      = string.Empty;
         string username    = OrgMOperate.GetUserNameByEmp(t);
         string userInitPwd = WebConfigHelper.GetAppSettingValue("UserInitPwd");
         if (string.IsNullOrEmpty(userInitPwd))
         {
             userInitPwd = "123456";
         }
         if (operateType == ModelRecordOperateType.Add)
         {
             if (!string.IsNullOrEmpty(username))
             {
                 UserOperate.AddUser(out errMsg, username, userInitPwd, null, t.Name);
             }
         }
         else if (operateType == ModelRecordOperateType.Edit)
         {
             if (!string.IsNullOrEmpty(username))
             {
                 Sys_User user = UserOperate.GetUser(username);
                 if (user != null) //用户已存在
                 {
                     UserOperate.UpdateUserAliasName(username, t.Name);
                 }
                 else //用户不存在
                 {
                     UserOperate.AddUser(out errMsg, username, userInitPwd, null, t.Name);
                 }
             }
         }
         else if (operateType == ModelRecordOperateType.Del)
         {
             if (!string.IsNullOrEmpty(username))
             {
                 UserOperate.DelUser(username); //删除账号
             }
             //删除员工同时删除员工岗位
             CommonOperate.DeleteRecordsByExpression <OrgM_EmpDeptDuty>(x => x.OrgM_EmpId == t.Id, out errMsg, t.IsDeleted);
         }
         if (operateType == ModelRecordOperateType.Add || operateType == ModelRecordOperateType.Edit)
         {
             //新增编辑时同时设置员工主职岗位
             if (t.DeptId.HasValue && t.DeptId.Value != Guid.Empty && t.DutyId.HasValue && t.DutyId.Value != Guid.Empty)
             {
                 OrgM_EmpDeptDuty empPosition = null;
                 if (operateType == ModelRecordOperateType.Edit)
                 {
                     empPosition = CommonOperate.GetEntity <OrgM_EmpDeptDuty>(x => x.OrgM_EmpId == t.Id && x.IsMainDuty == true, null, out errMsg);
                     if (empPosition != null)
                     {
                         empPosition.OrgM_DeptId    = t.DeptId.Value;
                         empPosition.OrgM_DutyId    = t.DutyId.Value;
                         empPosition.IsValid        = true;
                         empPosition.ModifyDate     = DateTime.Now;
                         empPosition.ModifyUserId   = currUser.UserId;
                         empPosition.ModifyUserName = currUser.EmpName;
                         CommonOperate.OperateRecord <OrgM_EmpDeptDuty>(empPosition, ModelRecordOperateType.Edit, out errMsg, null, false);
                         return;
                     }
                 }
                 Guid   moduleId = SystemOperate.GetModuleIdByModelType(typeof(OrgM_EmpDeptDuty));
                 string code     = SystemOperate.GetBillCode(moduleId);
                 empPosition = new OrgM_EmpDeptDuty()
                 {
                     Code           = code,
                     OrgM_DeptId    = t.DeptId.Value,
                     OrgM_DutyId    = t.DutyId.Value,
                     OrgM_EmpId     = t.Id,
                     IsMainDuty     = true,
                     IsValid        = true,
                     EffectiveDate  = DateTime.Now,
                     CreateDate     = DateTime.Now,
                     CreateUserId   = currUser.UserId,
                     CreateUserName = currUser.EmpName,
                     ModifyDate     = DateTime.Now,
                     ModifyUserId   = currUser.UserId,
                     ModifyUserName = currUser.EmpName
                 };
                 Guid rs = CommonOperate.OperateRecord <OrgM_EmpDeptDuty>(empPosition, ModelRecordOperateType.Add, out errMsg, null, false);
                 if (rs != Guid.Empty)
                 {
                     SystemOperate.UpdateBillCode(moduleId, code);
                 }
             }
         }
     }
 }
Exemple #7
0
 /// <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 { }
 }
Exemple #8
0
 /// <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, OrgM_Emp t, bool result, UserInfo currUser, object[] otherParams = null)
 {
     if (result)
     {
         string errMsg   = string.Empty;
         string username = OrgMOperate.GetUserNameByEmp(t);
         if (operateType == ModelRecordOperateType.Add)
         {
             if (!string.IsNullOrEmpty(username))
             {
                 UserOperate.AddUser(out errMsg, username, string.Format("{0}_123456", username), null, t.Name);
             }
         }
         else if (operateType == ModelRecordOperateType.Edit)
         {
             if (!string.IsNullOrEmpty(username))
             {
                 UserOperate.UpdateUserAliasName(username, t.Name);
             }
         }
         else if (operateType == ModelRecordOperateType.Del)
         {
             if (!string.IsNullOrEmpty(username))
             {
                 UserOperate.DelUser(username); //删除账号
             }
             //删除员工同时删除员工岗位
             CommonOperate.DeleteRecordsByExpression <OrgM_EmpDeptDuty>(x => x.OrgM_EmpId == t.Id, out errMsg, t.IsDeleted);
         }
         if (operateType == ModelRecordOperateType.Add || operateType == ModelRecordOperateType.Edit)
         {
             //新增编辑时同时设置员工主职岗位
             if (t.DeptId.HasValue && t.DeptId.Value != Guid.Empty && t.DutyId.HasValue && t.DutyId.Value != Guid.Empty)
             {
                 OrgM_EmpDeptDuty empPosition = null;
                 if (operateType == ModelRecordOperateType.Edit)
                 {
                     empPosition = CommonOperate.GetEntity <OrgM_EmpDeptDuty>(x => x.OrgM_EmpId == t.Id && x.IsMainDuty == true, null, out errMsg);
                     if (empPosition != null)
                     {
                         empPosition.OrgM_DeptId    = t.DeptId.Value;
                         empPosition.OrgM_DutyId    = t.DutyId.Value;
                         empPosition.IsValid        = true;
                         empPosition.ModifyDate     = DateTime.Now;
                         empPosition.ModifyUserId   = currUser.UserId;
                         empPosition.ModifyUserName = currUser.EmpName;
                         CommonOperate.OperateRecord <OrgM_EmpDeptDuty>(empPosition, ModelRecordOperateType.Edit, out errMsg, null, false);
                         return;
                     }
                 }
                 empPosition = new OrgM_EmpDeptDuty()
                 {
                     OrgM_DeptId    = t.DeptId.Value,
                     OrgM_DutyId    = t.DutyId.Value,
                     OrgM_EmpId     = t.Id,
                     IsMainDuty     = true,
                     IsValid        = true,
                     EffectiveDate  = DateTime.Now,
                     CreateDate     = DateTime.Now,
                     CreateUserId   = currUser.UserId,
                     CreateUserName = currUser.EmpName,
                     ModifyDate     = DateTime.Now,
                     ModifyUserId   = currUser.UserId,
                     ModifyUserName = currUser.EmpName
                 };
                 CommonOperate.OperateRecord <OrgM_EmpDeptDuty>(empPosition, ModelRecordOperateType.Add, out errMsg, null, false);
             }
         }
     }
 }