#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
|
{
|
/// <summary>
|
/// 业务单据的业务逻辑层基类. 实现ILogSupportable接口(修改日志功能)
|
/// </summary>
|
public abstract class bllBaseBusiness : bllBase
|
{
|
protected string _CurrentAppNAME = string.Empty;
|
|
/// <summary>
|
/// 当前正在处理的业务数据
|
/// </summary>
|
protected DataSet _CurrentBusiness;
|
|
/// <summary>
|
/// 业务单据的主键
|
/// </summary>
|
protected string _KeyFieldName = string.Empty;
|
|
/// <summary>
|
/// 业务单据的主表名称
|
/// </summary>
|
protected string _SummaryTableName = string.Empty;
|
|
/// <summary>
|
/// 标记是否保存数据操作日志
|
/// </summary>
|
protected bool _WriteDataLog = false;
|
|
/// <summary>
|
/// 当前正在处理的业务数据. 第1个表为主表,
|
/// </summary>
|
public DataTableCollection BusinessTables => _CurrentBusiness.Tables;
|
|
/// <summary>
|
/// 当前正在处理的业务数据
|
/// </summary>
|
public DataSet CurrentBusiness
|
{
|
get => _CurrentBusiness;
|
set => _CurrentBusiness = value;
|
}
|
|
/// <summary>
|
/// 数据源,该表只有一条记录,用于绑定[数据修改]页面的文本框的数据源。
|
/// </summary>
|
public DataTable DataBinder
|
{
|
get
|
{
|
if (_CurrentBusiness == null ||
|
_CurrentBusiness.Tables.Count == 0) return null;
|
|
return _CurrentBusiness.Tables[0];
|
}
|
}
|
|
/// <summary>
|
/// 当前绑定数据源的第一条记录
|
/// </summary>
|
public DataRow DataBindRow
|
{
|
get
|
{
|
var dt = DataBinder;
|
if (dt == null || dt.Rows.Count == 0) return null;
|
|
return dt.Rows[0];
|
}
|
}
|
|
/// <summary>
|
/// 业务单据的主键字段名
|
/// </summary>
|
public string KeyFieldName
|
{
|
get => _KeyFieldName;
|
set => _KeyFieldName = value;
|
}
|
|
/// <summary>
|
/// 业务单据的主表名称
|
/// </summary>
|
public string SummaryTableName
|
{
|
get => _SummaryTableName;
|
set => _SummaryTableName = value;
|
}
|
|
/// <summary>
|
/// 审核/批准
|
/// </summary>
|
/// <param name="summaryRow">业务主表的当前记录</param>
|
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;
|
}
|
|
/// <summary>
|
/// 反审核/批准
|
/// </summary>
|
/// <param name="summaryRow">业务主表的当前记录</param>
|
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;
|
}
|
|
/// <summary>
|
/// 取消 审核/批准
|
/// </summary>
|
/// <param name="summaryRow">业务主表的当前记录</param>
|
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;
|
}
|
|
/// <summary>
|
/// 创建业务单据附件管理的数据层桥接实例
|
/// </summary>
|
/// <returns></returns>
|
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()");
|
}
|
|
/// <summary>
|
/// 创建用于保存的临时数据
|
/// </summary>
|
/// <param name="sourceData">原始数据</param>
|
/// <returns></returns>
|
public abstract DataSet CreateSaveData(DataSet sourceData);
|
|
/// <summary>
|
/// 删除业务数据
|
/// </summary>
|
/// <param name="keyValue">主键值</param>
|
/// <returns></returns>
|
public abstract bool Delete(string keyValue);
|
|
/// <summary>
|
/// 获取单据附件数据
|
/// </summary>
|
/// <param name="docNo">单据号码</param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 由指定单号下载业务数据
|
/// </summary>
|
/// <param name="keyValue">单据号码(主键值)</param>
|
/// <param name="resetCurrent">是否更新当前业务对象的数据引用</param>
|
/// <returns>返回DataSet</returns>
|
public abstract DataSet
|
GetDataByKey(string keyValue, bool resetCurrent);
|
|
/// <summary>
|
/// 检查业务主表的当前记录是否已审核
|
/// </summary>
|
/// <param name="summaryRow">业务主表的当前记录</param>
|
/// <returns></returns>
|
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() != "";
|
}
|
|
/// <summary>
|
/// 比较当前用户与制单人是否一致,或者是上级关系
|
/// </summary>
|
/// <param name="summaryRow">业务主表的当前记录</param>
|
/// <returns></returns>
|
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);
|
}
|
|
/// <summary>
|
/// 新增业务数据
|
/// </summary>
|
public abstract void NewBusiness();
|
|
/// <summary>
|
/// 发送手机短信或Email通知用户
|
/// </summary>
|
public virtual void NotifyUser()
|
{
|
//发送手机短信或Email
|
}
|
|
/// <summary>
|
/// 保存附件
|
/// </summary>
|
/// <param name="storage">附件数据</param>
|
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);
|
}
|
}
|
|
/// <summary>
|
/// 保存业务数据
|
/// </summary>
|
/// <param name="saveData">业务数据</param>
|
/// <returns>返回保存状态</returns>
|
public abstract SaveResult Update(DataSet saveData);
|
|
/// <summary>
|
/// 更新业务单据明细表的公用字段数据
|
/// </summary>
|
/// <param name="detail">明细表</param>
|
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;
|
}
|
}
|
}
|
}
|