CSFramework WebApi 极速版后端开发框架(.NET8+EF.Core+多数据库支持)

CSFramework WebApi 极速版后端开发框架(.NET8+EF.Core+多数据库支持)
目录
极速版WebApi - 体系架构
前后端分离架构(Client+Server) - WebApi 模式

直连模式 - 标准三层架构 (Form + BLL +DAL)

极速版WebApi - VS2022解决方案


WebApi接口层(控制器,Controller)

WebApi 控制器 代码
关键点:
1、控制器的构造器实例化DAL层,控制器的Api接口调用DAL层接口。
2、DAL层代码共享。直连模式、WebApi模式是同一套代码。
C# 全选
/// <summary>
/// tb_DO控制器《客户发货单》
/// </summary>
[Route("api/[controller]/[action]")]
[OpenApiTag("DO控制器")]
public class tb_DOController : _BaseSignController
{
//数据访问层实例。
private dalDO _DAL;
public tb_DOController(IUserContext user)
{
_DAL = new dalDO(user.ToLoginer()); //实例化DAL
}
[HttpPost]
public async Task<BusinessData<res_DO, res_DOs>> GetDataByKey(QueryKey input)
{
return _DAL.GetDataByKey(input.Key);
}
[HttpPost]
public async Task<List<res_DO>> Query(req_DO input)
{
return _DAL.Query(input);
}
[HttpPost]
public async Task<bool> Delete(QueryKey input)
{
return _DAL.Delete(input.Key);
}
[HttpPost]
public async Task<SaveResult> Update(BusinessData<tb_DO, tb_DOs> data)
{
return _DAL.Update(data);
}
[HttpPost]
public async Task<BusinessDataList<res_DO, res_DOs>> QueryReportData(QueryBusinessBase input)
{
return _DAL.QueryReportData(input);
}
[HttpPost]
public async Task<bool> ApprovalBusiness(req_Approval input)
{
return _DAL.ApprovalBusiness(input);
}
[HttpPost]
public async Task<BusinessDataList<FuzzyDocMaster, FuzzyDocDetails>> QueryForSalesInvoice(QueryFuzzyDoc input)
{
return _DAL.QueryForSalesInvoice(input);
}
[HttpPost]
public async Task<BusinessDataList<FuzzyDocMaster, FuzzyDocDetails>> QueryForStockOut(QueryFuzzyDoc input)
{
return _DAL.QueryStockOut(input);
}
}
数据层(DAL)
接口方法

Delete 删除源码参考
C# 全选
/// <summary>
/// 删除业务单据
/// </summary>
public bool Delete(string docNo)
{
try
{
_Database.BeginTransaction();
var master = _Database.GetQueryable<tb_DO>().Where(w => w.DONO == docNo).FirstOrDefault();
var details = _Database.GetQueryable<tb_DOs>().Where(w => w.DONO == docNo).ToList();
//检查审核状态,审核的单不可删除操作
AssertApproval(master.FlagApp);
int count1 = _Database.Remove<tb_DO>(master);
int count2 = _Database.Remove<tb_DOs>(details);
_Database.CommitTransaction();
//数据日志
if (count1 > 0 || count2 > 0)
_Log.Log(DataLogType.delete, "DO - 删除成功", nameof(tb_DO), docNo, _Loginer.Account, master, details);
return count1 + count2 > 0;
}
catch (Exception e)
{
_Database.RollbackTransaction();
throw;
}
}
前端 BLL 层参考
C# 全选
/// <summary>
/// DO - 业务逻辑层
/// </summary>
public class bllDO : bllBaseBusiness<res_DO, res_DOs>
{
private IBridge_DO _Bridge;
/// <summary>
/// 构造器
/// </summary>
public bllDO()
{
_SummaryTableName = nameof(tb_DO);//表名
_KeyFieldName = nameof(tb_DO.DONO);//主键字段
_Bridge = this.CreateBridge();
}
/// <summary>
/// 创建策略接口实例
/// </summary>
/// <returns></returns>
private IBridge_DO CreateBridge()
{
//直连模式
if (BridgeFactory.IsADODirect)
return new dalDO(Core.Loginer.CurrentUser);
//WebApi模式
if (BridgeFactory.IsWebApi)
return new WebApi_DO();
throw new Exception(BridgeFactory.UNKNOW_BRIDGE_TYPE);
}
/// <summary>
///新增业务单据
/// </summary>
public override void NewBusiness()
{
this.CurrentBusiness = new BusinessData<res_DO, res_DOs>();
this.CurrentBusiness.Master = new res_DO();
this.CurrentBusiness.Details = new List<res_DOs>();
//新增状态:主表记录设置默认值
this.CurrentBusiness.Master.DONO = Globals.DEF_NO_TEXT;
this.CurrentBusiness.Master.DeliveryDay = DateTime.Today;
this.CurrentBusiness.Master.Currency = Globals.DEF_CURRENCY;//默认为本位币
this.CurrentBusiness.Master.CurrencyRate = Globals.DEF_CURRENCY_RATE;
this.CurrentBusiness.Master.PeriodId = PeriodHelper.CurrentPeriod;
this.CurrentBusiness.Master.FlagPeriod = "N";
this.CurrentBusiness.Master.DeliveryType = "GFSD";
this.CurrentBusiness.Master.DocUserId = Loginer.CurrentUser.Account;
this.CurrentBusiness.Master.FlagPeriod = "N";
this.CurrentBusiness.Master.PeriodId = PeriodHelper.GetPeriodId();
this.CurrentBusiness.Master.FlagApp = "N";
}
/// <summary>
/// 审核单据
/// </summary>
/// <param name="current">单据主表记录</param>
/// <returns></returns>
public override bool ApprovalBusiness(res_DO current)
{
var input = new req_Approval
{
DocNo = current.DONO,
Type = ApprovalType.Approval,
};
var result = _Bridge.ApprovalBusiness(input);
if (result)
{
current.FlagApp = "Y";
current.AppDate = DateTime.Now;
current.AppUser = Core.Loginer.CurrentUser.Account;
}
return result;
}
/// <summary>
/// 反审核单据。
/// </summary>
public override bool ApprovalBusinessUndo(res_DO current)
{
var input = new req_Approval
{
DocNo = current.DONO,
Type = ApprovalType.UnApproval,
};
var result = _Bridge.ApprovalBusiness(input);
if (result)
{
current.FlagApp = "N";
current.AppDate = null;
current.AppUser = null;
}
return result;
}
/// <summary>
/// 查询数据
/// </summary>
public List<res_DO> Query(req_DO input)
{
return _Bridge.Query(input);
}
/// <summary>
/// 获取单据
/// </summary>
public override BusinessData<res_DO, res_DOs> GetDataByKey(string docNo)
{
return _Bridge.GetDataByKey(docNo);
}
/// <summary>
/// 删除单据
/// </summary>
/// <param name="docNo">单据号码</param>
public override bool Delete(string docNo)
{
return _Bridge.Delete(docNo);
}
/// <summary>
/// 创建用于保存的临时数据
/// 逻辑:将界面操作的单据实体类转换为EF实体。
/// </summary>
/// <param name="formData">界面操作的单据实体</param>
public BusinessData<tb_DO, tb_DOs> CreateSaveData(BusinessData<res_DO, res_DOs> formData)
{
var data = new BusinessData<tb_DO, tb_DOs>
{
Master = ObjectHelper.Convert<tb_DO>(formData.Master),
Details = ObjectHelper.Convert<List<tb_DOs>>(formData.Details),
};
//
//其他逻辑处理
//
return data;
}
/// <summary>
/// 保存数据
/// </summary>
/// <param name="formData">界面操作的单据实体</param>
public override SaveResult Update(BusinessData<res_DO, res_DOs> formData)
{
//将界面操作的单据实体类转换为EF实体
var temp = this.CreateSaveData(formData);
return _Bridge.Update(temp);
}
/// <summary>
/// 保存数据
/// </summary>
/// <param name="data">EF单据实体</param>
public SaveResult Update(BusinessData<tb_DO, tb_DOs> data)
{
return _Bridge.Update(data);
}
public BusinessDataList<res_DO, res_DOs> QueryReportData(QueryBusinessBase input)
{
return _Bridge.QueryReportData(input);
}
public BusinessDataList<FuzzyDocMaster, FuzzyDocDetails> QueryForSalesInvoice(QueryFuzzyDoc input)
{
return _Bridge.QueryForSalesInvoice(input);
}
public BusinessDataList<FuzzyDocMaster, FuzzyDocDetails> QueryStockOut(QueryFuzzyDoc input)
{
return _Bridge.QueryStockOut(input);
}
}

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网





