#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;
}
}
}
}