#region using System; using System.Data; using CSFrameworkV5.Business.BLL_Permission; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using CSFrameworkV5.DataAccess; using CSFrameworkV5.Interfaces; using CSFrameworkV5.Models; using CSFrameworkV5.WebRef.CommonService; #endregion ///*************************************************************************/ ///* ///* 文件名 :bllBaseBusiness.cs ///* 程序说明 : 业务单据逻辑层基类 ///* 原创作者 :www.csframework.com ///* ///* Copyright 2006-2021 C/S框架网 www.csframework.com ///**************************************************************************/ namespace CSFrameworkV5.Business { /// /// 业务单据的业务逻辑层基类. 实现ILogSupportable接口(修改日志功能) /// public abstract class bllBaseBusiness : bllBase { protected string _CurrentAppNAME = string.Empty; /// /// 当前正在处理的业务数据 /// protected DataSet _CurrentBusiness; /// /// 业务单据的主键 /// protected string _KeyFieldName = string.Empty; /// /// 业务单据的主表名称 /// protected string _SummaryTableName = string.Empty; /// /// 标记是否保存数据操作日志 /// protected bool _WriteDataLog = false; /// /// 当前正在处理的业务数据. 第1个表为主表, /// public DataTableCollection BusinessTables => _CurrentBusiness.Tables; /// /// 当前正在处理的业务数据 /// public DataSet CurrentBusiness { get => _CurrentBusiness; set => _CurrentBusiness = value; } /// /// 数据源,该表只有一条记录,用于绑定[数据修改]页面的文本框的数据源。 /// public DataTable DataBinder { get { if (_CurrentBusiness == null || _CurrentBusiness.Tables.Count == 0) return null; return _CurrentBusiness.Tables[0]; } } /// /// 当前绑定数据源的第一条记录 /// public DataRow DataBindRow { get { var dt = DataBinder; if (dt == null || dt.Rows.Count == 0) return null; return dt.Rows[0]; } } /// /// 业务单据的主键字段名 /// public string KeyFieldName { get => _KeyFieldName; set => _KeyFieldName = value; } /// /// 业务单据的主表名称 /// public string SummaryTableName { get => _SummaryTableName; set => _SummaryTableName = value; } /// /// 审核/批准 /// /// 业务主表的当前记录 public virtual bool ApprovalBusiness(DataRow summaryRow) { var P = new QueryApproval { DBID = Loginer.CurrentUser.DBID, TableName = _SummaryTableName, KeyFieldName = _KeyFieldName, KeyValue = ConvertEx.ToString(summaryRow[_KeyFieldName]), //主键(单号) AppUser = Loginer.CurrentUser.Account, AppDate = DateTime.Now, FlagApp = "Y" }; //基类预设使用Common类提供的审核方法 var ok = BridgeFactory.CreateCommonDataBridge().ApprovalBusiness(P); if (ok) { summaryRow[CommonFields.AppDate] = DateTime.Now; summaryRow[CommonFields.AppUser] = Loginer.CurrentUser.Account; summaryRow[CommonFields.FlagApp] = "Y"; } return ok; } /// /// 反审核/批准 /// /// 业务主表的当前记录 public virtual bool ApprovalBusinessUndo(DataRow summaryRow) { var P = new QueryApproval { DBID = Loginer.CurrentUser.DBID, TableName = _SummaryTableName, KeyFieldName = _KeyFieldName, KeyValue = ConvertEx.ToString(summaryRow[_KeyFieldName]), AppUser = Loginer.CurrentUser.Account, AppDate = DateTime.Now, FlagApp = "N" }; //基类预设使用Common类提供的审核方法 var ok = BridgeFactory.CreateCommonDataBridge().ApprovalBusiness(P); if (ok) { summaryRow[CommonFields.AppDate] = DBNull.Value; summaryRow[CommonFields.AppUser] = DBNull.Value; summaryRow[CommonFields.FlagApp] = "N"; } return ok; } /// /// 取消 审核/批准 /// /// 业务主表的当前记录 protected virtual void ClearAppInfo(DataRow summaryRow) { if (summaryRow.Table.Columns[CommonFields.FlagApp] != null) summaryRow[CommonFields.FlagApp] = DBNull.Value; if (summaryRow.Table.Columns[CommonFields.AppUser] != null) summaryRow[CommonFields.AppUser] = DBNull.Value; if (summaryRow.Table.Columns[CommonFields.AppDate] != null) summaryRow[CommonFields.AppDate] = DBNull.Value; } /// /// 创建业务单据附件管理的数据层桥接实例 /// /// private IBridge_AttachFile CreateAttachFileBridge() { if (BridgeFactory.IsADODirect) return new dalAttachFile(Loginer.CurrentUser); if (BridgeFactory.IsWCFBridge) return new WCF_AttachFile(); throw new CustomException( "UNKNOW_BRIDGE_TYPE:CreateAttachFileBridge()"); } /// /// 创建用于保存的临时数据 /// /// 原始数据 /// public abstract DataSet CreateSaveData(DataSet sourceData); /// /// 删除业务数据 /// /// 主键值 /// public abstract bool Delete(string keyValue); /// /// 获取单据附件数据 /// /// 单据号码 /// public virtual DataTable GetAttachedFiles(string docNo) { DataTable attachedFiles; //跟据单号下载附件数据 var bridge = CreateAttachFileBridge(); attachedFiles = bridge.GetData(docNo).Copy(); attachedFiles.TableName = tb_AttachFile.__TableName; if (_CurrentBusiness != null) { //附件数据作为业务单据的一张明细表 if (_CurrentBusiness.Tables[tb_AttachFile.__TableName] != null) _CurrentBusiness.Tables.Remove(tb_AttachFile.__TableName); _CurrentBusiness.Tables.Add(attachedFiles); } return attachedFiles; } /// /// 由指定单号下载业务数据 /// /// 单据号码(主键值) /// 是否更新当前业务对象的数据引用 /// 返回DataSet public abstract DataSet GetDataByKey(string keyValue, bool resetCurrent); /// /// 检查业务主表的当前记录是否已审核 /// /// 业务主表的当前记录 /// public virtual bool IsApproved(DataRow summaryRow) { if (summaryRow == null) return false; if (summaryRow.Table.Columns[CommonFields.FlagApp] == null) return false; //无此字段,预设为未审核 //判断Flag=Y,AppUser<>"" return ConvertEx.ToString(summaryRow[CommonFields.FlagApp]) .ToUpper() == "Y" && ConvertEx.ToString(summaryRow[CommonFields.AppUser]) .ToUpper() != ""; } /// /// 比较当前用户与制单人是否一致,或者是上级关系 /// /// 业务主表的当前记录 /// public virtual bool IsOwnerChange(DataRow summaryRow) { //管理员可修改 if (Loginer.CurrentUser.IsAdmin()) return true; //无此字段,可修改 if (summaryRow.Table.Columns[CommonFields.CreatedBy] == null) return true; var user = ConvertEx.ToString(summaryRow[CommonFields.CreatedBy]); //取制单人 //比较当前用户与制单人是否一致 var isSelf = user.ToUpper() == Loginer.CurrentUser.Account.ToUpper(); if (isSelf) return true; //本人 var isOwner = new bllPermission().IsOwner(user, Loginer.CurrentUser.Account); return isOwner; //是否上级 } public DataTable GetReports(string ReportsName) { var bridge = BridgeFactory.CreateCommonDataBridge(); return bridge.GetReports(ReportsName); } /// /// 新增业务数据 /// public abstract void NewBusiness(); /// /// 发送手机短信或Email通知用户 /// public virtual void NotifyUser() { //发送手机短信或Email } /// /// 保存附件 /// /// 附件数据 public void SaveAttachedFile(DataTable storage) { var temp = storage.GetChanges(); //获取修改的记录 if (temp != null) //有新增或修改附件,保存数据 { var bridge = BridgeFactory.CreateDataDictBridge(typeof(tb_AttachFile)); var ds = new DataSet(); ds.Tables.Add(temp); bridge.Update(ds); } } /// /// 保存业务数据 /// /// 业务数据 /// 返回保存状态 public abstract SaveResult Update(DataSet saveData); /// /// 更新业务单据明细表的公用字段数据 /// /// 明细表 protected virtual void UpdateCommonFieldsValue(DataTable detail) { var time = CommonData.ServerTime; foreach (DataRow row in detail.Rows) { if (row.RowState == DataRowState.Deleted) continue; if (row.RowState == DataRowState.Added) { if (row.Table.Columns[CommonFields.CreatedBy] != null) row[CommonFields.CreatedBy] = Loginer.CurrentUser.Account; if (row.Table.Columns[CommonFields.CreationDate] != null) row[CommonFields.CreationDate] = time; } //每次提交都要更新最后修改日期和修改人员 if (row.Table.Columns[CommonFields.LastUpdatedBy] != null) row[CommonFields.LastUpdatedBy] = Loginer.CurrentUser.Account; if (row.Table.Columns[CommonFields.LastUpdateDate] != null) row[CommonFields.LastUpdateDate] = time; } } } }