C/S架构软件开发平台 - 旗舰版V6.0 - 工厂管理(多工厂模式)
目录
1、前言
应客户要求,CSFrameworkV6旗舰版提供多工厂数据支持。
同一个账套数据库要能存储多个工厂的资料。
多工厂支持
多工厂模式应用在一个账套中,是指一个独立的账套数据库中存储多个工厂的数据。
功能特点:
- 提供工厂管理与维护界面
- 登录界面选择工厂
- 业务数据,或特定基础资料数据使用工厂编码标识(FactoryId)隔离
- 设置用户的工厂权限
- 一个用户支持一个或多个工厂
- 查看或操作拥有权限的工厂数据
- 主界面切换工厂
多账套支持
多工厂与多账套本质区别:
- 多工厂:是指一个独立的数据库账套存储多个工厂的数据
- 多账套:数据按集团公司或工厂隔离,一个公司或一个工厂建立一个独立的数据库
参考:https://www.cscode.net/archive/newdoc/cs-210903193558082-57.html
2、工厂管理
界面
系统管理 -> 工厂管理
工厂模型(tb_Factory)
C# 全选
[Table("tb_Factory")]
public class tb_Factory
{
#region 所有字段属性
/// <summary>
/// 自增字段
/// </summary>
[Key, Column(Order = 1)]
public String isid { get; set; }
/// <summary>
/// 工厂编码
/// </summary>
public String FactoryId { get; set; }
/// <summary>
/// 工厂名称
/// </summary>
public String FactoryName { get; set; }
/// <summary>
/// 联系人
/// </summary>
public String OwnerName { get; set; }
/// <summary>
/// 联系人电话
/// </summary>
public String OwnerPhone { get; set; }
/// <summary>
/// 地址
/// </summary>
public String Address { get; set; }
/// <summary>
/// 办公室电话
/// </summary>
public String OfficeTel { get; set; }
/// <summary>
/// 使用
/// </summary>
public String FlagUse { get; set; }
/// <summary>
/// 备注
/// </summary>
public String Remark { get; set; }
/// <summary>
/// 创建日期
/// </summary>
public DateTime? CreationDate { get; set; }
/// <summary>
/// 创建人
/// </summary>
public String CreatedBy { get; set; }
/// <summary>
/// 最后修改
/// </summary>
public DateTime? LastUpdateDate { get; set; }
/// <summary>
/// 最后修改人
/// </summary>
public String LastUpdatedBy { get; set; }
#endregion
}
3、用户管理界面分配工厂权限
功能特点
- 用户管理界面增加工厂选择。
- tb_MyUser表增加Factories VARCHAR(500)字段,表示当前用户拥有的一个或多个工厂的权限。勾选的工厂在登录界面可以选择。
- tb_MyUser模型增加Factories属性
- DataDictCache增加工厂缓存数据
界面
4、登录界面
选择一个工厂,然后登录。
功能特点
- 增加工厂选择组件
- 用户登录逻辑要判断当前用户是否拥有工厂权限
- 若登录成功,缓存FactoryId、FactoryIDs作为全局变量使用
界面
5、主界面切换工厂
功能特点
- 提供下拉菜单按钮切换工厂
- 变更缓存(Loginer.CurrnetUser.FactoryId)
界面
当前工厂:宁德工厂
切换到湖州工厂:
6、数据隔离
功能特点
- 资料表添加 FactoryId VARCHAR(50) 字段
- 查询条件添加工厂选择组件,显示当前用户拥有权限的工厂列表
- 支持选择一个或多个工厂,调用查询接口返回工厂数据
- 默认设置当前登录的工厂编码
- 查询结果表格显示工厂信息
界面
参考CSFrameworkV6.1《销售报价单》。
工厂查询条件(支持选择一个或多个工厂)
查询数据:
报价单号:QO202300000010,报价单详情:
7、代码参考
代码文件:frmQO.cs
绑定工厂组件数据源
C# 全选
DataBinderTools.BoundFactory(txt_FactoryId);
DataBinderTools.BoundFactory(lue_FactoryId, false);
DataBinderTools.BoundFactory(txtFactoryId.Properties, false);
清空查询条件按钮事件
C# 全选
private void btnEmpty_Click(object sender, EventArgs e)
{
//注意:忽略工厂编码txt_FactoryId被清空
base.ClearContainerEditorText(pnlSearch, txt_FactoryId);
}
筛选工厂数据
获取工厂查询条件的值,如:C01,C02
C# 全选
FactoryIDs = txt_FactoryId.EditValue.ToStringEx(),
代码文件:dalQO.cs
C# 全选
/// <summary>
/// 查询销售报价单
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public List<res_tb_QO> Query(req_QO input)
{
var q = _Database.GetQueryable<tb_QO>();
//查询工厂
if (!String.IsNullOrWhiteSpace(input.FactoryIDs))
{
var list = input.FactoryIDs.SplitToList();//C01,C02 转换为 List<String>
q = q.Where(w => list.Contains(w.FactoryId));
}
//省略代码......
}
新增模式,自动设置工厂编码的值
文件位置:bll_QO.cs
C# 全选
this.CurrentBusiness.Master.FactoryId = Core.Loginer.CurrentUser.FactoryId;
编辑模式,工厂编码不可修改(设为只读)
C# 全选
txtFactoryId.Properties.ReadOnly = true;
工厂缓存数据
文件位置:DataDictCache.cs
C# 全选
/// <summary>
/// 工厂缓存数据
/// </summary>
public List<tb_Factory> Factories
{
get
{
Func<List<tb_Factory>> action = delegate ()
{
return new bll_Factory().GetLookupData();
};
return InitCache<tb_Factory>(action);
}
}
Loginer 登录用户实例
文件位置:CSFrameworkV6.Core.Loginer.cs
C# 全选
/// <summary>
/// 当前登录的工厂编码
/// </summary>
public string FactoryId { get; set; }
/// <summary>
/// 当前用户拥有的工厂编码
/// </summary>
public string FactoryIDs { get; set; }
功能说明
- 用户登录成功,系统给2个属性赋值
- 应用场景:var factoryId = Core.Loginer.CurrentUser.FactoryId
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
CSFrameworkV6 C/S框架网