数据库设计

This commit is contained in:
hehaibing-1996
2025-01-10 08:19:15 +08:00
parent 8d81b36f73
commit 425eece097
16 changed files with 777 additions and 407 deletions

View File

@ -0,0 +1,100 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WCS.DAL.DbModels;
namespace WCS.BLL.DbModels
{
/// <summary>
/// 当前库存存量表
/// </summary>
[SugarTable("wcs_agv_task")]
public class AgvTask
{
/// <summary>
/// 主键 自增Id
/// </summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsNullable = false, IsIdentity = true)]
public int Id { get; set; }
#region
/// <summary>
/// 请求任务时的任务号 需要保证唯一性
/// </summary>
[SugarColumn(ColumnName = "request_code", Length = 64, IsNullable = false, ColumnDescription = "请求任务时的任务号 需要保证唯一性")]
public string RequestCode { get; set; } = Guid.NewGuid().ToString();
/// <summary>
/// 任务类型
/// </summary>
[SugarColumn(ColumnName = "task_type", Length = 64, IsNullable = false, ColumnDescription = "任务类型")]
public string TaskType { get; set; } = string.Empty;
/// <summary>
/// 货架ID
/// </summary>
[SugarColumn(ColumnName = "start_location_id", IsNullable = true, ColumnDescription = "起点位置ID")]
public int StratLocationId { get; set; } = 0;
/// <summary>
/// 起点位置编码
/// </summary>
[SugarColumn(ColumnName = "start_location_code", Length = 64, IsNullable = true, ColumnDescription = "起点位置编码")]
public string StartLocationCode { get; set; } = string.Empty ;
/// <summary>
/// 货架ID
/// </summary>
[SugarColumn(ColumnName = "end_location_id", IsNullable = true, ColumnDescription = "终点位置ID")]
public int EndLocationId { get; set; } = 0;
/// <summary>
/// 终点位置编码
/// </summary>
[SugarColumn(ColumnName = "end_location_code", Length = 64, IsNullable = true, ColumnDescription = "终点位置编码")]
public string EndLocationCode { get; set; } = string.Empty;
/// <summary>
/// AGV编号
/// </summary>
[SugarColumn(ColumnName = "agv_code", Length = 64, IsNullable = true, ColumnDescription = "AGV编号")]
public string AgvCode { get; set; } = string.Empty;
/// <summary>
/// 任务发起人
/// </summary>
[SugarColumn(ColumnName = "create_user", IsNullable = true, Length = 64, ColumnDescription = "任务发起人")]
public string? CreateUser { get; set; }
/// <summary>
/// 任务创建时间
/// </summary>
[SugarColumn(ColumnName = "create_time", IsNullable = true, ColumnDescription = "任务创建时间")]
public DateTime? CreateTime { get; set; } = DateTime.Now;
#endregion
/// <summary>
/// 序号
/// </summary>
[SugarColumn(IsIgnore = true)]
public int RowNumber { get; set; }
/// <summary>
/// 是否已经选择
/// </summary>
[SugarColumn(IsIgnore = true)]
public bool IsSelected { get; set; }
}
//1-已创建2-正在执行5-取消完成9-已结束, 10-被打断
public enum TaskStatusEnum
{
= 1,
= 2,
= 5,
= 9,
= 10,
}
}

View File

@ -0,0 +1,86 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WCS.BLL.HardWare;
namespace WCS.DAL.DbModels
{
[SugarTable("wcs_location_info")]
public class LocationInfo
{
/// <summary>
/// 主键 自增Id
/// </summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsNullable = false, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 位置编码
/// </summary>
[SugarColumn(ColumnName = "location_code", Length = 64, IsNullable = false, ColumnDescription = "位置编码")]
public string LocationCode { get; set; }
/// <summary>
/// 位置区域
/// </summary>
[SugarColumn(ColumnName = "location_area", Length = 64, IsNullable = false, ColumnDescription = "位置区域")]
public string LocationArea { get; set; }
/// <summary>
/// RCS库位编号
/// </summary>
[SugarColumn(ColumnName = "rcs_store_code", Length = 64, IsNullable = true, ColumnDescription = "RCS库位编号")]
public string RcsStoreCode { get; set; }
/// <summary>
/// 可放置货架类型
/// </summary>
[SugarColumn(ColumnName = "allow_shelf_types", Length = 512, IsNullable = true, ColumnDescription = "可放置货架类型")]
public string AllowShelfTypes { get; set; }
/// <summary>
/// 更新人
/// </summary>
[SugarColumn(ColumnName = "modify_user", Length = 128, IsNullable = true, ColumnDescription = "更新人")]
public string ModifyUser { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnName = "modify_time", IsNullable = false, ColumnDescription = "更新时间")]
public DateTime ModifyTime { get; set; } = DateTime.Now;
/// <summary>
/// 是否启用
/// </summary>
[SugarColumn(ColumnName = "is_enable", IsNullable = false, ColumnDescription = "是否启用")]
public bool IsEnable { get; set; } = true;
[SugarColumn(IsIgnore = true)]
public string IsEnableStr
{
get
{
if (IsEnable)
return "启用";
else
return "禁用";
}
}
/// <summary>
/// 序号
/// </summary>
[SugarColumn(IsIgnore = true)]
public int RowNumber { get; set; }
/// <summary>
/// 是否已经选择
/// </summary>
[SugarColumn(IsIgnore = true)]
public bool IsSelected { get; set; }
}
}

View File

@ -13,73 +13,49 @@ namespace WCS.BLL.DbModels
[SugarTable("wcs_mat_base_info")] [SugarTable("wcs_mat_base_info")]
public partial class MatBaseInfo public partial class MatBaseInfo
{ {
/// <summary> /// <summary>
/// Desc: /// ID
/// Default: /// </summary>
/// Nullable:False
/// </summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsNullable = false, IsIdentity = true)] [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsNullable = false, IsIdentity = true)]
public int Id { get; set; } public int Id { get; set; }
/// <summary> /// <summary>
/// 物料编码 /// 物料编码
/// </summary> /// </summary>
[SugarColumn(ColumnName = "mat_code", Length = 100, IsNullable = false, ColumnDescription = "物料编")] [SugarColumn(ColumnName = "mat_code", Length = 128, IsNullable = false, ColumnDescription = "物料编")]
public string MatCode { get; set; } public string MatCode { get; set; }
/// <summary> /// <summary>
/// 物料名称 /// 物料名称
/// </summary> /// </summary>
[SugarColumn(ColumnName = "mat_name", Length = 150, IsNullable = false, ColumnDescription = "物料名称")] [SugarColumn(ColumnName = "mat_name", Length = 128, IsNullable = false, ColumnDescription = "物料名称")]
public string MatName { get; set; } public string MatName { get; set; }
/// <summary> /// <summary>
/// 物料规格 /// 物料规格
/// </summary> /// </summary>
[SugarColumn(ColumnName = "mat_spec", Length = 150, IsNullable = true, ColumnDescription = "物料规格")] [SugarColumn(ColumnName = "mat_spec", Length = 128, IsNullable = true, ColumnDescription = "物料规格")]
public string? MatSpec { get; set; } public string? MatSpec { get; set; }
/// <summary> /// <summary>
/// Desc:物料单位 /// 物料单位
/// Default:
/// Nullable:True
/// </summary> /// </summary>
[SugarColumn(ColumnName = "mat_unit", Length = 100, IsNullable = true, ColumnDescription = "物料单位")] [SugarColumn(ColumnName = "mat_unit", Length = 64, IsNullable = true, ColumnDescription = "物料单位")]
public string? MatUnit { get; set; } public string? MatUnit { get; set; }
/// <summary>
/// 物料批次
/// </summary>
[SugarColumn(ColumnName = "mat_batch", Length = 150, IsNullable = true, ColumnDescription = "物料批次")]
public string? MatBatch { get; set; }
/// <summary> /// <summary>
/// 物料供应商 /// 物料供应商
/// </summary> /// </summary>
[SugarColumn(ColumnName = "mat_supplier", Length = 150, IsNullable = true, ColumnDescription = "物料供应商")] [SugarColumn(ColumnName = "mat_supplier", Length = 128, IsNullable = true, ColumnDescription = "物料供应商")]
public string? MatSupplier { get; set; } public string? MatSupplier { get; set; }
/// <summary> /// <summary>
/// 物料客户 /// 物料客户
/// </summary> /// </summary>
[SugarColumn(ColumnName = "mat_customer", Length = 150, IsNullable = true, ColumnDescription = "物料客户")] [SugarColumn(ColumnName = "mat_customer", Length = 128, IsNullable = true, ColumnDescription = "物料客户")]
public string? MatCustomer { get; set; } public string? MatCustomer { get; set; }
/// <summary>
/// 默认数量
/// </summary>
[SugarColumn(ColumnName = "default_qty", IsNullable = false, ColumnDescription = "默认数量")]
public int DefaultQty { get; set; } = 1000;
/// <summary>
/// 默认盘数
/// </summary>
[SugarColumn(ColumnName = "default_count", IsNullable = false, ColumnDescription = "默认盘数")]
public int DefaultCount { get; set; } = 100;
/// <summary>
/// 当前序列号
/// </summary>
[SugarColumn(ColumnName = "serial_number", IsNullable = false, DefaultValue = "0", ColumnDescription = "默认盘数")]
public int SerialNumber { get; set; } = 0;
/// <summary> /// <summary>
/// Desc:更新人 /// Desc:更新人

View File

@ -0,0 +1,117 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WCS.DAL.DbModels;
namespace WCS.BLL.DbModels
{
/// <summary>
/// 当前库存存量表
/// </summary>
[SugarTable("wcs_mat_detail_current_info")]
public class MatDetailCurrentInfo
{
/// <summary>
/// 主键 自增Id
/// </summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsNullable = false, IsIdentity = true)]
public int Id { get; set; }
#region
/// <summary>
/// 货架ID
/// </summary>
[SugarColumn(ColumnName = "shelf_id", IsNullable = false, ColumnDescription = "货架ID")]
public int ShlefId { get; set; }
/// <summary>
/// 货架编码 对应二维码
/// </summary>
[SugarColumn(ColumnName = "shelf_code", Length = 64, IsNullable = false, ColumnDescription = "货架编码")]
public string ShelfCode { get; set; }
/// <summary>
/// 货架类型
/// </summary>
[SugarColumn(ColumnName = "shelf_type", Length = 64, IsNullable = true, ColumnDescription = "货架类型")]
public string ShelfType { get; set; }
/// <summary>
/// 货架区域
/// </summary>
[SugarColumn(ColumnName = "shelf_area", Length = 64, IsNullable = true, ColumnDescription = "货架区域")]
public string ShelfArea { get; set; }
#endregion
#region
/// <summary>
/// 物料编码
/// </summary>
[SugarColumn(ColumnName = "mat_code", Length = 100, IsNullable = true, ColumnDescription = "物料编号")]
public string MatCode { get; set; }
/// <summary>
/// 物料名称
/// </summary>
[SugarColumn(ColumnName = "mat_name", Length = 150, IsNullable = true, ColumnDescription = "物料名称")]
public string MatName { get; set; }
/// <summary>
/// 物料规格
/// </summary>
[SugarColumn(ColumnName = "mat_spec", Length = 150, IsNullable = true, ColumnDescription = "物料规格")]
public string MatSpec { get; set; }
/// <summary>
/// 物料数量
/// </summary>
[SugarColumn(ColumnName = "mat_qty", IsNullable = false, ColumnDescription = "物料数量")]
public int MatQty { get; set; }
/// <summary>
/// 物料供应商
/// </summary>
[SugarColumn(ColumnName = "mat_supplier", Length = 128, IsNullable = true, ColumnDescription = "物料供应商")]
public string? MatSupplier { get; set; }
/// <summary>
/// 物料客户
/// </summary>
[SugarColumn(ColumnName = "mat_customer", Length = 128, IsNullable = true, ColumnDescription = "物料客户")]
public string? MatCustomer { get; set; }
#endregion
/// <summary>
/// 站位编号 用于物料批量绑定时区分是哪个工位绑定的明细
/// </summary>
[SugarColumn(ColumnName = "station_code", Length = 64, IsNullable = true, ColumnDescription = "站位编号")]
public string StationCode { get; set; }
/// <summary>
/// 更新人
/// </summary>
[SugarColumn(ColumnName = "modify_user", IsNullable = true, Length = 50, ColumnDescription = "更新人")]
public string? ModifyUser { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnName = "modify_time", IsNullable = true, ColumnDescription = "更新时间")]
public DateTime? ModifyTime { get; set; } = DateTime.Now;
/// <summary>
/// 序号
/// </summary>
[SugarColumn(IsIgnore = true)]
public int RowNumber { get; set; }
/// <summary>
/// 是否已经选择
/// </summary>
[SugarColumn(IsIgnore = true)]
public bool IsSelected { get; set; }
}
}

View File

@ -0,0 +1,130 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WCS.DAL.DbModels;
namespace WCS.BLL.DbModels
{
/// <summary>
/// 当前库存盘点表
/// </summary>
[SugarTable("wcs_mat_detail_history_info")]
public class MatDetailHistoryInfo
{
/// <summary>
/// 主键 自增Id
/// </summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsNullable = false, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 货架库存明细当前的ID
/// </summary>
[SugarColumn(ColumnName = "mat_detail_current_id", IsNullable = false, ColumnDescription = "库存明细当前的ID")]
public int MatDetailCurrentId { get; set; }
#region
/// <summary>
/// 货架ID
/// </summary>
[SugarColumn(ColumnName = "shelf_id", IsNullable = false, ColumnDescription = "货架ID")]
public int ShlefId { get; set; }
/// <summary>
/// 货架编码 对应二维码
/// </summary>
[SugarColumn(ColumnName = "shelf_code", Length = 64, IsNullable = false, ColumnDescription = "货架编码")]
public string ShelfCode { get; set; }
/// <summary>
/// 货架类型
/// </summary>
[SugarColumn(ColumnName = "shelf_type", Length = 64, IsNullable = true, ColumnDescription = "货架类型")]
public string ShelfType { get; set; }
/// <summary>
/// 货架区域
/// </summary>
[SugarColumn(ColumnName = "shelf_area", Length = 64, IsNullable = true, ColumnDescription = "货架区域")]
public string ShelfArea { get; set; }
#endregion
#region
/// <summary>
/// 物料编码
/// </summary>
[SugarColumn(ColumnName = "mat_code", Length = 100, IsNullable = true, ColumnDescription = "物料编号")]
public string MatCode { get; set; }
/// <summary>
/// 物料名称
/// </summary>
[SugarColumn(ColumnName = "mat_name", Length = 150, IsNullable = true, ColumnDescription = "物料名称")]
public string MatName { get; set; }
/// <summary>
/// 物料规格
/// </summary>
[SugarColumn(ColumnName = "mat_spec", Length = 150, IsNullable = true, ColumnDescription = "物料规格")]
public string MatSpec { get; set; }
/// <summary>
/// 物料数量(更新前物料数量)
/// </summary>
[SugarColumn(ColumnName = "before_qty", IsNullable = false, ColumnDescription = "物料数量(更新前物料数量)")]
public int BeforeQty { get; set; }
/// <summary>
/// 物料数量(更新后物料数量)
/// </summary>
[SugarColumn(ColumnName = "after_qty", IsNullable = false, ColumnDescription = "物料数量(更新后物料数量)")]
public int AfterQty { get; set; }
/// <summary>
/// 物料供应商
/// </summary>
[SugarColumn(ColumnName = "mat_supplier", Length = 128, IsNullable = true, ColumnDescription = "物料供应商")]
public string? MatSupplier { get; set; }
/// <summary>
/// 物料客户
/// </summary>
[SugarColumn(ColumnName = "mat_customer", Length = 128, IsNullable = true, ColumnDescription = "物料客户")]
public string? MatCustomer { get; set; }
#endregion
/// <summary>
/// 更新人
/// </summary>
[SugarColumn(ColumnName = "modify_user", IsNullable = true, Length = 50, ColumnDescription = "更新人")]
public string? ModifyUser { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnName = "modify_time", IsNullable = false, ColumnDescription = "更新时间")]
public DateTime? ModifyTime { get; set; } = DateTime.Now;
/// <summary>
/// 是否已删除
/// </summary>
[SugarColumn(ColumnName = "is_delete", IsNullable = false, ColumnDescription = "是否已删除")]
public bool IsDelete { get; set; } = false;
/// <summary>
/// 序号
/// </summary>
[SugarColumn(IsIgnore = true)]
public int RowNumber { get; set; }
/// <summary>
/// 是否已经选择
/// </summary>
[SugarColumn(IsIgnore = true)]
public bool IsSelected { get; set; }
}
}

View File

@ -0,0 +1,135 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WCS.DAL.DbModels;
namespace WCS.BLL.DbModels
{
/// <summary>
/// 当前库存盘点表
/// </summary>
[SugarTable("wcs_mat_detail_stocktaking_info")]
public class MatDetailStocktakingInfo
{
/// <summary>
/// 主键 自增Id
/// </summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsNullable = false, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 货架库存明细当前的ID
/// </summary>
[SugarColumn(ColumnName = "mat_detail_current_id", IsNullable = false, ColumnDescription = "库存明细当前的ID")]
public int MatDetailCurrentId { get; set; }
#region
/// <summary>
/// 货架ID
/// </summary>
[SugarColumn(ColumnName = "shelf_id", IsNullable = false, ColumnDescription = "货架ID")]
public int ShlefId { get; set; }
/// <summary>
/// 货架编码 对应二维码
/// </summary>
[SugarColumn(ColumnName = "shelf_code", Length = 64, IsNullable = false, ColumnDescription = "货架编码")]
public string ShelfCode { get; set; }
/// <summary>
/// 货架类型
/// </summary>
[SugarColumn(ColumnName = "shelf_type", Length = 64, IsNullable = true, ColumnDescription = "货架类型")]
public string ShelfType { get; set; }
/// <summary>
/// 货架区域
/// </summary>
[SugarColumn(ColumnName = "shelf_area", Length = 64, IsNullable = true, ColumnDescription = "货架区域")]
public string ShelfArea { get; set; }
#endregion
#region
/// <summary>
/// 物料编码
/// </summary>
[SugarColumn(ColumnName = "mat_code", Length = 100, IsNullable = true, ColumnDescription = "物料编号")]
public string MatCode { get; set; }
/// <summary>
/// 物料名称
/// </summary>
[SugarColumn(ColumnName = "mat_name", Length = 150, IsNullable = true, ColumnDescription = "物料名称")]
public string MatName { get; set; }
/// <summary>
/// 物料规格
/// </summary>
[SugarColumn(ColumnName = "mat_spec", Length = 150, IsNullable = true, ColumnDescription = "物料规格")]
public string MatSpec { get; set; }
/// <summary>
/// 物料数量(原始数量)
/// </summary>
[SugarColumn(ColumnName = "mat_qty", IsNullable = false, ColumnDescription = "物料数量(原始数量)")]
public int MatQty { get; set; }
/// <summary>
/// 物料数量(盘点数量)
/// </summary>
[SugarColumn(ColumnName = "stocktaking_qty", IsNullable = false, ColumnDescription = "物料数量(盘点数量)")]
public int StocktakingQty { get; set; }
/// <summary>
/// 物料供应商
/// </summary>
[SugarColumn(ColumnName = "mat_supplier", Length = 128, IsNullable = true, ColumnDescription = "物料供应商")]
public string? MatSupplier { get; set; }
/// <summary>
/// 物料客户
/// </summary>
[SugarColumn(ColumnName = "mat_customer", Length = 128, IsNullable = true, ColumnDescription = "物料客户")]
public string? MatCustomer { get; set; }
#endregion
/// <summary>
/// 盘点人
/// </summary>
[SugarColumn(ColumnName = "stocktaking_user", IsNullable = false, Length = 50, ColumnDescription = "盘点人")]
public string? StocktakingUser { get; set; }
/// <summary>
/// 盘点时间
/// </summary>
[SugarColumn(ColumnName = "stocktaking_time", IsNullable = false, ColumnDescription = "盘点时间")]
public DateTime? StocktakingTime { get; set; } = DateTime.Now;
/// <summary>
/// 盘点状态
/// </summary>
[SugarColumn(ColumnName = "stocktaking_status", IsNullable = false, ColumnDescription = "盘点状态")]
public StocktakingStatusEnum StocktakingStatus { get; set; } = StocktakingStatusEnum.;
/// <summary>
/// 序号
/// </summary>
[SugarColumn(IsIgnore = true)]
public int RowNumber { get; set; }
/// <summary>
/// 是否已经选择
/// </summary>
[SugarColumn(IsIgnore = true)]
public bool IsSelected { get; set; }
}
public enum StocktakingStatusEnum
{
= 0,
= 1,
}
}

View File

@ -0,0 +1,118 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WCS.BLL.HardWare;
namespace WCS.DAL.DbModels
{
[SugarTable("wcs_shelf_info")]
public class ShelfInfo
{
/// <summary>
/// 主键 自增Id
/// </summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsNullable = false, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 货架编码 对应二维码
/// </summary>
[SugarColumn(ColumnName = "shelf_code", Length = 64, IsNullable = false, ColumnDescription = "货架编码")]
public string ShelfCode { get; set; }
/// <summary>
/// 货架类型
/// </summary>
[SugarColumn(ColumnName = "shelf_type", Length = 64, IsNullable = true, ColumnDescription = "货架类型")]
public string ShelfType { get; set; }
/// <summary>
/// 货架状态 货架当前的状态空货架/非空货架
/// </summary>
[SugarColumn(ColumnName = "shelf_status", IsNullable = true, ColumnDescription = "货架状态")]
public ShelfStatusEnum ShelfStatus { get; set; } = ShelfStatusEnum.;
/// <summary>
/// 货架区域
/// </summary>
[SugarColumn(ColumnName = "shelf_area", Length = 64, IsNullable = true, ColumnDescription = "货架区域")]
public string ShelfArea { get; set; }
/// <summary>
/// 货架尺寸
/// </summary>
[SugarColumn(ColumnName = "shelf_size", Length = 256, IsNullable = true, ColumnDescription = "货架尺寸")]
public string ShelfSize { get; set; }
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnName = "remark", Length = 128, IsNullable = true, ColumnDescription = "备注")]
public string Remark { get; set; }
#region
/// <summary>
/// 当前位置ID
/// </summary>
[SugarColumn(ColumnName = "current_location_id", IsNullable = true, ColumnDescription = "当前位置ID")]
public int CurrentLocationId { get; set; } = 0;
/// <summary>
/// 当前位置编码
/// </summary>
[SugarColumn(ColumnName = "current_location_code", Length = 64, IsNullable = true, ColumnDescription = "当前位置编码")]
public string CurrentLocaiotnCode { get; set; } = string.Empty;
#endregion
/// <summary>
/// 更新人
/// </summary>
[SugarColumn(ColumnName = "modify_user", Length = 128, IsNullable = true, ColumnDescription = "更新人")]
public string ModifyUser { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnName = "modify_time", IsNullable = false, ColumnDescription = "更新时间")]
public DateTime ModifyTime { get; set; } = DateTime.Now;
/// <summary>
/// 是否启用
/// </summary>
[SugarColumn(ColumnName = "is_enable", IsNullable = false, ColumnDescription = "是否启用")]
public bool IsEnable { get; set; } = true;
[SugarColumn(IsIgnore = true)]
public string IsEnableStr
{
get
{
if (IsEnable)
return "启用";
else
return "禁用";
}
}
/// <summary>
/// 序号
/// </summary>
[SugarColumn(IsIgnore = true)]
public int RowNumber { get; set; }
/// <summary>
/// 是否已经选择
/// </summary>
[SugarColumn(IsIgnore = true)]
public bool IsSelected { get; set; }
}
public enum ShelfStatusEnum
{
= 0,
= 1,
}
}

View File

@ -1,99 +0,0 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WCS.BLL.HardWare;
namespace WCS.DAL.DbModels
{
[SugarTable("wcs_shelf_info")]
public class ShelfInfo
{
/// <summary>
/// 主键 自增Id
/// </summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsNullable = false, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 货架编码
/// </summary>
[SugarColumn(ColumnName = "shelf_code", Length = 50, IsNullable = false, ColumnDescription = "货架编码")]
public string ShelfCode { get; set; }
/// <summary>
/// 货架类型名称
/// </summary>
[SugarColumn(ColumnName = "shelf_type", Length = 50, IsNullable = false, ColumnDescription = "货架类型")]
public string ShelfType { get; set; }
/// <summary>
/// 货架行数
/// </summary>
[SugarColumn(ColumnName = "row_counts", IsNullable = false, ColumnDescription = "货架行数")]
public int Rowcounts { get; set; }
/// <summary>
/// 货架列数
/// </summary>
[SugarColumn(ColumnName = "column_counts", IsNullable = false, ColumnDescription = "货架列数")]
public int Columncounts { get; set; }
/// <summary>
/// 货架对应警示灯的Id
/// </summary>
[SugarColumn(ColumnName = "light_id", IsNullable = false, ColumnDescription = "货架对应警示灯的Id")]
public int LightId { get; set; }
/// <summary>
/// 货架对应Can模块的Ip
/// </summary>
[SugarColumn(ColumnName = "client_ip", Length = 50, IsNullable = false, ColumnDescription = "货架对应Can模块的Ip")]
public string ClientIp { get; set; }
/// <summary>
/// 连接Can模块的端口号
/// </summary>
[SugarColumn(ColumnName = "port", Length = 50, IsNullable = true, ColumnDescription = "连接Can模块的端口号")]
public string Port { get; set; }
/// <summary>
/// 货架对应后端的Ip
/// </summary>
[SugarColumn(ColumnName = "server_ip", Length = 50, IsNullable = false, ColumnDescription = "货架对应后端服务的Ip")]
public string ServerIp { get; set; }
/// <summary>
/// 货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)
/// </summary>
[SugarColumn(ColumnName = "group_name", Length = 50, IsNullable = false, ColumnDescription = "货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)")]
public string GroupName { get; set; }
/// <summary>
/// 是否串联绑定
/// </summary>
[SugarColumn(ColumnName = "is_bind", IsNullable = false, ColumnDescription = "是否串联绑定")]
public bool IsBind { get; set; }
/// <summary>
/// 串联绑定后的大货架编码
/// </summary>
[SugarColumn(ColumnName = "Bind_shelf_code", IsNullable = true, ColumnDescription = "串联绑定后的大货架编码")]
public string? BigShelfCode { get; set; } = string.Empty;
/// <summary>
/// 序号
/// </summary>
[SugarColumn(IsIgnore = true)]
public int RowNumber { get; set; }
/// <summary>
/// 是否已经选择
/// </summary>
[SugarColumn(IsIgnore = true)]
public bool IsSelected { get; set; }
}
}

View File

@ -16,13 +16,7 @@ namespace WCS.BLL.HardWare
{ {
public SingleLightShelf(ShelfInfo shelfInfo) public SingleLightShelf(ShelfInfo shelfInfo)
{ {
ShelfId = shelfInfo.Id;
ShelfCode = shelfInfo.ShelfCode;
RowCounts = shelfInfo.Rowcounts;
ColumnCounts = shelfInfo.Columncounts;
SetCurrentMode(Mode.);
ClientIp = shelfInfo.ClientIp;
LightId = shelfInfo.LightId;
} }
public int ShelfId { get; set; } public int ShelfId { get; set; }

View File

@ -19,14 +19,8 @@ namespace WCS.BLL.HardWare
{ {
public SmartShelf(ShelfInfo shelfInfo) public SmartShelf(ShelfInfo shelfInfo)
{ {
ShelfId = shelfInfo.Id; //ShelfId = shelfInfo.Id;
ShelfCode = shelfInfo.ShelfCode;
RowCounts = shelfInfo.Rowcounts;
ColumnCounts = shelfInfo.Columncounts;
SetCurrentMode(Mode.);
ClientIp = shelfInfo.ClientIp;
LightId = shelfInfo.LightId;
WarningLight = new WarningLight() { LightId = shelfInfo.LightId };
} }

View File

@ -23,9 +23,7 @@ namespace WCS.BLL.Manager
{ {
Logs.Write("【InitShelves】开始", LogsType.StartBoot); Logs.Write("【InitShelves】开始", LogsType.StartBoot);
var shelvesInDbQueryable = DbHelp.db.Queryable<ShelfInfo>(); var shelvesInDbQueryable = DbHelp.db.Queryable<ShelfInfo>();
if (LocalFile.Config.IsMx)
shelvesInDbQueryable = shelvesInDbQueryable.Where(t => t.GroupName == LocalFile.Config.GroupName);
var shelvesInDb = shelvesInDbQueryable.ToList(); var shelvesInDb = shelvesInDbQueryable.ToList();
foreach (var shelfInDb in shelvesInDb) foreach (var shelfInDb in shelvesInDb)
{ {

View File

@ -23,169 +23,7 @@ namespace WCS.BLL.Manager
/// </summary> /// </summary>
public static List<TCPClient> TCPClients = new List<TCPClient>(); public static List<TCPClient> TCPClients = new List<TCPClient>();
public static void InitTcpClient()
{
Logs.Write("【InitTcpClient】开始", LogsType.StartBoot);
var clientsInDB = DbHelp.db.Queryable<ShelfInfo>()
.WhereIF(!string.IsNullOrEmpty(LocalFile.Config.GroupName), t => t.GroupName == LocalFile.Config.GroupName)
.Select(t => new
{
IP = t.ClientIp,
ShelfTypeName = t.ShelfType,
Port = t.Port,
})
.Distinct()
.ToList();
Logs.Write($"【InitTcpClient】需要连接的服务端地址如下\r\n{string.Join(";", clientsInDB)}", LogsType.StartBoot);
foreach (var cleientInDB in clientsInDB)
{
Task.Run(() =>
{
var tcpCleint = new TCPClient(cleientInDB.IP, cleientInDB.Port, cleientInDB.ShelfTypeName);
tcpCleint.tcpClient.Received += (client, e) =>
{
var clientIpHost = client.IP + ":" + client.Port;
var TcpCleint = TCPClientManager.GetTCPClientByIPHost(clientIpHost);
if (TcpCleint == null)
{
return EasyTask.CompletedTask;
}
var data = e.ByteBlock.Buffer.Take((int)e.ByteBlock.Length).ToArray();
Logs.Write($"【接收{clientIpHost}】{BitConverter.ToString(data)}", LogsType.Instructions);
e.ByteBlock.Clear();
var len = data.Length;
if (tcpCleint.ShelfTypeName == "信息化货架")
{
Logs.Write($"【信息化货架开始处理接收数据】{BitConverter.ToString(data)}", LogsType.InstructionsProcess);
Helper.ReturnDataProcess(TcpCleint, data);
Logs.Write($"【信息化货架完成处理接收数据】{BitConverter.ToString(data)}", LogsType.InstructionsProcess);
return EasyTask.CompletedTask;
}
if (tcpCleint.ShelfTypeName == "液晶货架")
{
Logs.Write($"【液晶货架开始处理接收数据】{BitConverter.ToString(data)}", LogsType.InstructionsProcess);
//Helper.ReturnDataProcess(TcpCleint, data);
Logs.Write($"【液晶货架完成处理接收数据】{BitConverter.ToString(data)}", LogsType.InstructionsProcess);
return EasyTask.CompletedTask;
}
for (int index = 0; index < data.Length - TcpCleint.PreFixLength; index++)
{
//协议拆包 通过前缀校验是否为完整数据包
var prefixInData = data.Skip(index).Take(TcpCleint.PreFixLength);
var isEqual = prefixInData.SequenceEqual(TcpCleint.Prefix);
if (isEqual)
{
var dataTemp = data.Skip(index).Take(TcpCleint.PreFixLength + TcpCleint.DataLength).ToArray();
if (dataTemp.Length < TcpCleint.PreFixLength + TcpCleint.DataLength)//拆包后不满足一条指令的长度
{
continue;
}
Logs.Write($"【处理单条指令 开始】{BitConverter.ToString(dataTemp)}", LogsType.InstructionsProcess);
index += (TcpCleint.PreFixLength + TcpCleint.DataLength - 1);//每次循环index会+1 所以这里-1
//获取板子ID
var boardId = (dataTemp[TcpCleint.PreFixLength + 0] << 8) + dataTemp[TcpCleint.PreFixLength + 1];
var lightNumber = Convert.ToInt32(dataTemp[TcpCleint.PreFixLength + 3]);
//报警灯 返回来就修改对应的灯的颜色
if (dataTemp[TcpCleint.PreFixLength + 2] == 0x20)
{
var shelf = ShelfManager.Shelves.Where(t => t.ClientIp == clientIpHost)
.Where(t => t.LightId == boardId)
.FirstOrDefault();
var smartShelf = shelf as SmartShelf;
smartShelf?.WarningLightProcess(dataTemp, boardId, lightNumber);
}
//!= 0x20 货架类型协议返回
else
{
var shelf = ShelfManager.Shelves
.Where(t => t.ClientIp == clientIpHost)
.Where(t => t.ModuleIds != null && t.ModuleIds.Contains(boardId))
.FirstOrDefault();
var smartShelf = shelf as SmartShelf;
smartShelf?.ProtocolProcess(dataTemp, boardId, lightNumber);
}
Logs.Write($"【处理单条指令 结束】{BitConverter.ToString(dataTemp)}", LogsType.InstructionsProcess);
}
}
return EasyTask.CompletedTask;
};
//配置首次连接后复位操作
tcpCleint.tcpClient.Connected += (client, e) =>
{
Logs.Write($"【TcpClient】{client.IP}完成连接,端口号{client.Port}", LogsType.StartBoot);
var clientIpHost = client.IP + ":" + client.Port;
var TcpCleint = TCPClientManager.GetTCPClientByIPHost(clientIpHost);
if (TcpCleint == null)
{
return EasyTask.CompletedTask;
}
//首次连接
if (TcpCleint.IsFirstConnected == false)
{
Logs.Write($"【InitTcpClient】{clientIpHost}完成首次连接", LogsType.StartBoot);
Console.WriteLine($"【InitTcpClient】{clientIpHost}完成首次连接");
InitStatus(TcpCleint);
TcpCleint.IsFirstConnected = true;
//获取剩余未完成连接的tcp
var noFirstConnectedTcps = TCPClientManager.TCPClients.Where(t => t.IsFirstConnected == false)
.Select(t => t.RemoteIPHost)
.ToList();
Logs.Write($"【InitTcpClient】剩余未完成连接的TCP为{string.Join(";", noFirstConnectedTcps)}", LogsType.StartBoot);
}
return EasyTask.CompletedTask;
};
lock (TCPClients)//避免添加失败的情况
{
TCPClients.Add(tcpCleint);
}
tcpCleint.Connect();
});
}
//启动线程监听所有TCP是否已经完成首次连接
Task.Run(() =>
{
while (true)
{
try
{
Thread.Sleep(1000);
var noFirstConnectedClients = TCPClientManager.TCPClients.Where(t => t.IsFirstConnected == false)
.ToList();
if (noFirstConnectedClients.Count == 0)
{
break;
}
else
{
Console.WriteLine($"存在tcp未完成首次连接继续重连");
noFirstConnectedClients.ForEach(t =>
{
t.ReConnectAsync();
});
}
}
catch (Exception ex)
{
}
}
});
Logs.Write("【InitTcpClient】完成 后台继续连接", LogsType.StartBoot);
}
//后台启动时给所有板子、警示灯发送复位操作 保持状态一致 //后台启动时给所有板子、警示灯发送复位操作 保持状态一致
public static void InitStatus() public static void InitStatus()
@ -217,10 +55,7 @@ namespace WCS.BLL.Manager
//后台启动时给所有板子、警示灯发送复位操作 保持状态一致 //后台启动时给所有板子、警示灯发送复位操作 保持状态一致
public static void InitStatus(TCPClient tcpClient) public static void InitStatus(TCPClient tcpClient)
{ {
var shelfInfo = DbHelp.db.Queryable<ShelfInfo>().Where(t => t.ClientIp == tcpClient.RemoteIPHost).ToList();
if (shelfInfo.Count != 0)
{
}
Task.Run(() => Task.Run(() =>
{ {

View File

@ -53,67 +53,72 @@ namespace WCS.BLL.Services.Service
Data = null Data = null
}; };
} }
return new ResponseCommon<List<MatInfo>>()
//生成条码
lock (matFlag)
{ {
try Code = 201,
{ Message = $"生成失败:该物料已被禁用",
DbHelp.db.BeginTran(); Data = null
var startNumber = ++matBaseInfo.SerialNumber; };
var matInfoList = new List<MatInfo>(); ////生成条码
for (var i = 0; i < request.TotalCount; i++) //lock (matFlag)
{ //{
var matInfo = new MatInfo() // try
{ // {
MatSn = GetMatSn(matBaseInfo, startNumber + i), // DbHelp.db.BeginTran();
MatCode = matBaseInfo.MatCode, // var startNumber = ++matBaseInfo.SerialNumber;
MatName = matBaseInfo.MatName, // var matInfoList = new List<MatInfo>();
MatBatch = request.MatBatch, // for (var i = 0; i < request.TotalCount; i++)
MatSpec = matBaseInfo.MatSpec, // {
MatUnit = matBaseInfo.MatUnit, // var matInfo = new MatInfo()
MatSupplier = matBaseInfo.MatSupplier, // {
// MatSn = GetMatSn(matBaseInfo, startNumber + i),
// MatCode = matBaseInfo.MatCode,
// MatName = matBaseInfo.MatName,
// MatBatch = request.MatBatch,
// MatSpec = matBaseInfo.MatSpec,
// MatUnit = matBaseInfo.MatUnit,
// MatSupplier = matBaseInfo.MatSupplier,
MatCustomer = matBaseInfo.MatCustomer, // MatCustomer = matBaseInfo.MatCustomer,
MatQty = request.MatQty, // MatQty = request.MatQty,
ModifyUser = request.UserName // ModifyUser = request.UserName
}; // };
matInfo.Id = DbHelp.db.Insertable(matInfo).ExecuteReturnIdentity(); // matInfo.Id = DbHelp.db.Insertable(matInfo).ExecuteReturnIdentity();
matInfoList.Add(matInfo); // matInfoList.Add(matInfo);
} // }
matBaseInfo.SerialNumber = startNumber + request.TotalCount; // matBaseInfo.SerialNumber = startNumber + request.TotalCount;
DbHelp.db.Updateable(matBaseInfo).ExecuteCommand(); // DbHelp.db.Updateable(matBaseInfo).ExecuteCommand();
DbHelp.db.CommitTran(); // DbHelp.db.CommitTran();
return new ResponseCommon<List<MatInfo>>() // return new ResponseCommon<List<MatInfo>>()
{ // {
Code = 200, // Code = 200,
Message = "success", // Message = "success",
Data = matInfoList // Data = matInfoList
}; // };
} // }
catch (Exception ex) // catch (Exception ex)
{ // {
DbHelp.db.RollbackTran(); // DbHelp.db.RollbackTran();
return new ResponseCommon<List<MatInfo>>() // return new ResponseCommon<List<MatInfo>>()
{ // {
Code = 201, // Code = 201,
Message = $"生成失败:{ex.Message}", // Message = $"生成失败:{ex.Message}",
Data = null // Data = null
}; // };
} // }
} //}
} }
private string GetMatSn(MatBaseInfo matBaseInfo, int serialNumber) private string GetMatSn(MatBaseInfo matBaseInfo, int serialNumber)
{ {
var gongshi = "=A1&\"-\"&A2&A3"; //var gongshi = "=A1&\"-\"&A2&A3";
Dictionary<string, string> keyValuePairs = new Dictionary<string, string>(); //Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
keyValuePairs.Add("A1", matBaseInfo.MatCode); //keyValuePairs.Add("A1", matBaseInfo.MatCode);
keyValuePairs.Add("A2", string.IsNullOrEmpty(matBaseInfo.MatBatch) ? "" : matBaseInfo.MatBatch); //keyValuePairs.Add("A2", string.IsNullOrEmpty(matBaseInfo.MatBatch) ? "" : matBaseInfo.MatBatch);
keyValuePairs.Add("A3", serialNumber.ToString().PadLeft(6, '0')); //keyValuePairs.Add("A3", serialNumber.ToString().PadLeft(6, '0'));
var matSn = PnHelp.Jx(gongshi, keyValuePairs); //var matSn = PnHelp.Jx(gongshi, keyValuePairs);
return matSn; return string.Empty;
} }
public async Task<string> generateStockTakingNumber() public async Task<string> generateStockTakingNumber()
@ -229,17 +234,17 @@ namespace WCS.BLL.Services.Service
if (matBaseInfo != null) if (matBaseInfo != null)
{ {
//存在此物料的情况下 判断当前的数量 //存在此物料的情况下 判断当前的数量
if (request.CurrentSerilNumber != matBaseInfo.SerialNumber + 1) //if (request.CurrentSerilNumber != matBaseInfo.SerialNumber + 1)
{ //{
return new ResponseBase<MatInfo>() // return new ResponseBase<MatInfo>()
{ // {
Code = 201, // Code = 201,
Message = "操作失败:当前物料流水号冲突!请重新扫码!", // Message = "操作失败:当前物料流水号冲突!请重新扫码!",
Data = null // Data = null
}; // };
} //}
//流水号不冲突 //流水号不冲突
else //else
{ {
var matInfoList = new List<MatInfo>(); var matInfoList = new List<MatInfo>();
@ -249,7 +254,7 @@ namespace WCS.BLL.Services.Service
for (int i = 0; i < request.TotalPan; i++) for (int i = 0; i < request.TotalPan; i++)
{ {
//保存matBaseInfo //保存matBaseInfo
matBaseInfo.SerialNumber++; //matBaseInfo.SerialNumber++;
//保存条码信息 //保存条码信息
var matInfo = new MatInfo() var matInfo = new MatInfo()

View File

@ -19,11 +19,8 @@ namespace WCS.BLL.Services.Service
{ {
//直接获取数据库数据 分组进行返回 //直接获取数据库数据 分组进行返回
var data = await DbHelp.db.Queryable<ShelfInfo>() var data = await DbHelp.db.Queryable<ShelfInfo>()
.Where(t => !string.IsNullOrEmpty(t.BigShelfCode))
.Select(t => new GetShelfServerResponseItem() .Select(t => new GetShelfServerResponseItem()
{ {
BigShelfCode = t.BigShelfCode,
ServerIp = t.ServerIp,
}) })
.Distinct() .Distinct()
.ToListAsync(); .ToListAsync();

View File

@ -30,7 +30,7 @@ namespace WCS.BLL.Services.Service
try try
{ {
var recordsQueryable = DbHelp.db.Queryable<ShelfInfo>() var recordsQueryable = DbHelp.db.Queryable<ShelfInfo>()
.WhereIF(!string.IsNullOrEmpty(request.ShelfCode), t => t.ShelfCode.Contains(request.ShelfCode)); ;
var totalCount = await recordsQueryable.CountAsync(); var totalCount = await recordsQueryable.CountAsync();
var records = await recordsQueryable var records = await recordsQueryable
@ -69,7 +69,6 @@ namespace WCS.BLL.Services.Service
try try
{ {
var shelfnfo = await DbHelp.db.Queryable<ShelfInfo>() var shelfnfo = await DbHelp.db.Queryable<ShelfInfo>()
.Where(t => t.ShelfCode == request.ShelfInfo.ShelfCode)
.FirstAsync(); .FirstAsync();
//修改货架信息 //修改货架信息
if (request.AddOrUpdate == AddOrUpdate.Update) if (request.AddOrUpdate == AddOrUpdate.Update)
@ -84,7 +83,7 @@ namespace WCS.BLL.Services.Service
return new ResponseCommon<Object> return new ResponseCommon<Object>
{ {
Code = 201, Code = 201,
Message = $"更新货架信息失败:货架{request.ShelfInfo.ShelfCode}不存在!", Message = $"更新货架信息失败:货架不存在!",
Data = null Data = null
}; };
} }
@ -93,20 +92,12 @@ namespace WCS.BLL.Services.Service
return new ResponseCommon<Object> return new ResponseCommon<Object>
{ {
Code = 201, Code = 201,
Message = $"更新货架信息失败:已存在货架编码{request.ShelfInfo.ShelfCode}", Message = $"更新货架信息失败:已存在货架编码!",
Data = null Data = null
}; };
} }
else else
{ {
shelfnfo.ShelfCode = request.ShelfInfo.ShelfCode;
shelfnfo.Rowcounts = request.ShelfInfo.Rowcounts;
shelfnfo.Columncounts = request.ShelfInfo.Columncounts;
shelfnfo.LightId = request.ShelfInfo.LightId;
shelfnfo.ClientIp = request.ShelfInfo.ClientIp;
shelfnfo.GroupName = request.ShelfInfo.GroupName;
shelfnfo.IsBind = request.ShelfInfo.IsBind;
shelfnfo.BigShelfCode = request.ShelfInfo.BigShelfCode;
var rowNum = await DbHelp.db.Updateable(shelfnfo).ExecuteCommandAsync(); var rowNum = await DbHelp.db.Updateable(shelfnfo).ExecuteCommandAsync();
if (rowNum == 0) if (rowNum == 0)
@ -136,7 +127,7 @@ namespace WCS.BLL.Services.Service
return new ResponseCommon<Object> return new ResponseCommon<Object>
{ {
Code = 201, Code = 201,
Message = $"货架信息失败:货架{request.ShelfInfo.ShelfCode}已存在!", Message = $"货架信息失败:货架已存在!",
Data = null Data = null
}; };
} }
@ -144,14 +135,7 @@ namespace WCS.BLL.Services.Service
{ {
var newShelfInfo = new ShelfInfo() var newShelfInfo = new ShelfInfo()
{ {
ShelfCode = request.ShelfInfo.ShelfCode,
Rowcounts = request.ShelfInfo.Rowcounts,
Columncounts = request.ShelfInfo.Columncounts,
LightId = request.ShelfInfo.LightId,
ClientIp = request.ShelfInfo.ClientIp,
GroupName = request.ShelfInfo.GroupName,
IsBind = request.ShelfInfo.IsBind,
BigShelfCode = request.ShelfInfo.BigShelfCode,
}; };
var rowNum = await DbHelp.db.Insertable(newShelfInfo).ExecuteCommandAsync(); var rowNum = await DbHelp.db.Insertable(newShelfInfo).ExecuteCommandAsync();
if (rowNum == 0) if (rowNum == 0)