物料清单

This commit is contained in:
2023-04-21 09:13:41 +08:00
parent b8873eac2e
commit 76ca8e4984
11 changed files with 810 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
namespace Tnb.BasicData.Entitys
{
public static class DbName
{
public const string TIANYIMON = "tianyi_mom";
public const string TNBMON = "tnb_mom";
}
}

View File

@@ -0,0 +1,10 @@
namespace Tnb.BasicData.Entitys
{
public static class DicTypeKey
{
/// <summary>
/// 计量单位
/// </summary>
public const string MeasurementUnit = "MeasurementUnit";
}
}

View File

@@ -0,0 +1,37 @@
namespace Tnb.BasicData.Entitys.Dto
{
public class ParentMaterialTreeOutput
{
/// <summary>
/// 物料名称
/// </summary>
public string material_id { get; set; }
/// <summary>
/// 规格描述
/// </summary>
public string material_id_extras { get; set; }
/// <summary>
/// 物料id
/// </summary>
public string material_id_id { get; set; }
/// <summary>
/// 最小包装
/// </summary>
public decimal? material_id_minpacking { get; set; }
/// <summary>
/// 备注
/// </summary>
public string material_id_remark { get; set; }
/// <summary>
/// 单位
/// </summary>
public string material_id_unitid { get; set; }
/// <summary>
/// 是否有下级
/// </summary>
public bool hasChildren { get; set; }
}
}

View File

@@ -0,0 +1,17 @@
namespace Tnb.BasicData.Entitys.Dto
{
public class ParentMaterialTreeQueryInput
{
/// <summary>
/// 物料清单id
/// </summary>
public string parentMaterialId { get; set; }
/// <summary>
/// 物料id
/// </summary>
public string materialId { get; set; }
}
}

View File

@@ -0,0 +1,263 @@
using SqlSugar;
using Tnb.Common.Contracts;
namespace Tnb.BasicData.Entitys.Entity
{
///<summary>
///物料信息
///</summary>
[SugarTable("bas_material")]
public class BasMaterial : BaseEntity<string>
{
public BasMaterial(){
}
/// <summary>
/// Desc:主键
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey=true,ColumnName="id")]
public string Id {get;set;}
/// <summary>
/// Desc:物料代码
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(ColumnName="material_code")]
public string MaterialCode {get;set;}
/// <summary>
/// Desc:物料名称
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(ColumnName="material_name")]
public string MaterialName {get;set;}
/// <summary>
/// Desc:物料分类ID
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(ColumnName="categoryid")]
public string Categoryid {get;set;}
/// <summary>
/// Desc:单位ID,BAS_UNIT.ID
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(ColumnName="unitid")]
public string Unitid {get;set;}
/// <summary>
/// Desc:选择单位ID,BAS_UNIT.ID
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(ColumnName="pickunitid")]
public string Pickunitid {get;set;}
/// <summary>
/// Desc:单价
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="cost")]
public decimal? Cost {get;set;}
/// <summary>
/// Desc:毛重
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="grossweight")]
public decimal? Grossweight {get;set;}
/// <summary>
/// Desc:净重
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="netweight")]
public decimal? Netweight {get;set;}
/// <summary>
/// Desc:长
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="length")]
public decimal? Length {get;set;}
/// <summary>
/// Desc:宽
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="width")]
public decimal? Width {get;set;}
/// <summary>
/// Desc:高
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="high")]
public decimal? High {get;set;}
/// <summary>
/// Desc:体积
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="volumn")]
public decimal? Volumn {get;set;}
/// <summary>
/// Desc:是否免检
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="isexemption")]
public int? Isexemption {get;set;}
/// <summary>
/// Desc:安全库存
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="safeqty")]
public decimal? Safeqty {get;set;}
/// <summary>
/// Desc:保质期
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="qualityperiod")]
public int? Qualityperiod {get;set;}
/// <summary>
/// Desc:最小包装
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="minpacking")]
public decimal? Minpacking {get;set;}
/// <summary>
/// Desc:是否先进先出管控
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="fifo")]
public int? Fifo {get;set;}
/// <summary>
/// Desc:先进先出间隔天数,批次间隔天数
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="fifo_interval_days")]
public int? FifoIntervalDays {get;set;}
/// <summary>
/// Desc:所属组织ID
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="org_id")]
public string OrgId {get;set;}
/// <summary>
/// Desc:是否过期允许出库
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="expireout")]
public string Expireout {get;set;}
/// <summary>
/// Desc:物料规格型号
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="material_standard")]
public string MaterialStandard {get;set;}
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="create_time")]
public DateTime? CreateTime {get;set;}
/// <summary>
/// Desc:最后修改时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="modify_time")]
public DateTime? ModifyTime {get;set;}
/// <summary>
/// Desc:扩展字段
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="extras")]
public string Extras {get;set;}
/// <summary>
/// Desc:海关编码
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="fhscode")]
public string Fhscode {get;set;}
/// <summary>
/// Desc:附属性
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="attribute")]
public string Attribute {get;set;}
/// <summary>
/// Desc:管控类型: 批管控Lot 单管控KeyParts 非管控NoControl
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="controltype")]
public string Controltype {get;set;}
/// <summary>
/// Desc:备注
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="remark")]
public string Remark {get;set;}
/// <summary>
/// Desc:创建人员ID
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="create_id")]
public string CreateId {get;set;}
/// <summary>
/// Desc:最后修改人员ID
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="modify_id")]
public string ModifyId {get;set;}
}
}

View File

@@ -0,0 +1,113 @@
using SqlSugar;
using Tnb.Common.Contracts;
namespace Tnb.BasicData.Entitys.Entity
{
///<summary>
///物料单位
///</summary>
[SugarTable("bas_material_unit")]
public class BasMaterialUnit : BaseEntity<string>
{
public BasMaterialUnit(){
}
/// <summary>
/// Desc:主键
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey=true,ColumnName="id")]
public string Id {get;set;}
/// <summary>
/// Desc:物料IDBAS_MATERIAL.ID
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(ColumnName="material_id")]
public string MaterialId {get;set;}
/// <summary>
/// Desc:单位ID,BAS_UNIT.ID
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(ColumnName="unit_id")]
public string UnitId {get;set;}
/// <summary>
/// Desc:比例
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(ColumnName="relation_qty")]
public decimal RelationQty {get;set;}
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(ColumnName="create_time")]
public DateTime CreateTime {get;set;}
/// <summary>
/// Desc:修改时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="modify_time")]
public DateTime? ModifyTime {get;set;}
/// <summary>
/// Desc:扩展字段
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="extras")]
public string Extras {get;set;}
/// <summary>
/// Desc:所属组织ID
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="org_id")]
public string OrgId {get;set;}
/// <summary>
/// Desc:条码
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="bar_code")]
public string BarCode {get;set;}
/// <summary>
/// Desc:时间戳(用于并发控制)
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="timestamp")]
public string Timestamp {get;set;}
/// <summary>
/// Desc:创建用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="create_id")]
public string CreateId {get;set;}
/// <summary>
/// Desc:修改用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="modify_id")]
public string ModifyId {get;set;}
}
}

View File

@@ -0,0 +1,129 @@
using SqlSugar;
using Tnb.Common.Contracts;
namespace Tnb.BasicData.Entitys.Entity
{
///<summary>
///物料清单父表
///</summary>
[SugarTable("bas_parent_material")]
public class BasParentMaterial : BaseEntity<string>
{
public BasParentMaterial(){
}
/// <summary>
/// Desc:主键
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey=true,ColumnName="id")]
public string Id {get;set;}
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="create_time")]
public DateTime? CreateTime {get;set;}
/// <summary>
/// Desc:修改时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="modify_time")]
public DateTime? ModifyTime {get;set;}
/// <summary>
/// Desc:扩展字段
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="extras")]
public string Extras {get;set;}
/// <summary>
/// Desc:所属组织
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="org_id")]
public string OrgId {get;set;}
/// <summary>
/// Desc:成品物料编号/名称
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="material_id")]
public string MaterialId {get;set;}
/// <summary>
/// Desc:规格描述
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="descrip")]
public string Descrip {get;set;}
/// <summary>
/// Desc:数量
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="quantity")]
public string Quantity {get;set;}
/// <summary>
/// Desc:单位
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="unit")]
public string Unit {get;set;}
/// <summary>
/// Desc:状态
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="status")]
public string Status {get;set;}
/// <summary>
/// Desc:版本号
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="version")]
public string Version {get;set;}
/// <summary>
/// Desc:工艺路线
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="routing")]
public string Routing {get;set;}
/// <summary>
/// Desc:创建用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="create_id")]
public string CreateId {get;set;}
/// <summary>
/// Desc:修改用户
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="modify_id")]
public string ModifyId {get;set;}
}
}

View File

@@ -0,0 +1,121 @@
using SqlSugar;
using Tnb.Common.Contracts;
namespace Tnb.BasicData.Entitys.Entity
{
///<summary>
///物料清单子表
///</summary>
[SugarTable("bas_parent_material_items")]
public class BasParentMaterialItems : BaseEntity<string>
{
public BasParentMaterialItems(){
}
/// <summary>
/// Desc:主键
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey=true,ColumnName="id")]
public string Id {get;set;}
/// <summary>
/// Desc:扩展字段
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="extras")]
public string Extras {get;set;}
/// <summary>
/// Desc:父件物料ID
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="parent_material_id")]
public string ParentMaterialId {get;set;}
/// <summary>
/// Desc:物料编号/名称
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="material_id")]
public string MaterialId {get;set;}
/// <summary>
/// Desc:规格描述
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="descrip")]
public string Descrip {get;set;}
/// <summary>
/// Desc:单位
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="unit")]
public string Unit {get;set;}
/// <summary>
/// Desc:数量
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="quantity")]
public string Quantity {get;set;}
/// <summary>
/// Desc:损耗率
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="loss_rate")]
public string LossRate {get;set;}
/// <summary>
/// Desc:替代物料
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="substitute_material")]
public string SubstituteMaterial {get;set;}
/// <summary>
/// Desc:投料管控
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="feeding_control")]
public string FeedingControl {get;set;}
/// <summary>
/// Desc:需要称量
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="require_weight")]
public string RequireWeight {get;set;}
/// <summary>
/// Desc:版本号
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="version")]
public string Version {get;set;}
/// <summary>
/// Desc:工艺路线
/// Default:NULL::character varying
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="routing")]
public string Routing {get;set;}
}
}

View File

@@ -0,0 +1,96 @@
using JNPF.Common.Core.Manager;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.Systems.Entitys.System;
using JNPF.Systems.Interfaces.System;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.BasicData.Entitys;
using Tnb.BasicData.Entitys.Entity;
using Tnb.BasicData.Entitys.Dto;
namespace Tnb.BasicData
{
/// <summary>
/// 物料清单
/// </summary>
[ApiDescriptionSettings(Tag = "BasicData", Name = "ParentMaterial", Order = 701)]
[Route("api/basic/[controller]")]
public class ParentMaterialService : IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository<BasMaterial> _repository;
private readonly DataBaseManager _dbManager;
private readonly IDictionaryDataService _dictionaryDataService;
public ParentMaterialService(
ISqlSugarRepository<BasMaterial> repository,DataBaseManager dbManager,IDictionaryDataService dictionaryDataService)
{
_repository = repository;
_dbManager = dbManager;
_dictionaryDataService = dictionaryDataService;
}
/// <summary>
/// 获取物料清单树.
/// </summary>
/// <param name="input">获取物料清单树.</param>
/// <returns></returns>
[HttpPost("[action]")]
public async Task<dynamic> GetTree(ParentMaterialTreeQueryInput queryInput)
{
var db = _repository.AsSugarClient();
var dic = await _dictionaryDataService.GetDicByKey(DicTypeKey.MeasurementUnit);
var momDbLink = await _repository.AsSugarClient().Queryable<DbLinkEntity>().FirstAsync(x => x.FullName == DbName.TNBMON);
if (momDbLink != null)
{
db = _dbManager.ChangeDataBase(momDbLink);
}
if (string.IsNullOrEmpty(queryInput.materialId))
{
var data = await db.Queryable<BasParentMaterialItems>()
.LeftJoin<BasParentMaterial>((a,b)=>a.ParentMaterialId==b.Id)
.LeftJoin<BasMaterial>((a,b,c)=>a.MaterialId==c.Id)
.Where((a,b,c)=>a.ParentMaterialId==queryInput.parentMaterialId)
.Select((a,b,c)=>new ParentMaterialTreeOutput
{
material_id = c.MaterialName,
material_id_extras = c.Extras,
material_id_id=c.Id,
material_id_minpacking = c.Minpacking,
material_id_remark = c.Remark,
material_id_unitid = c.Unitid,
hasChildren = SqlFunc.Subqueryable<BasParentMaterial>().Where(x=>x.MaterialId==a.MaterialId).Any(),
}).Mapper(it =>
{
it.material_id_unitid = dic[it.material_id_unitid].ToString();
}).ToListAsync();
return data;
}
else
{
var data = await db.Queryable<BasParentMaterialItems>()
.LeftJoin<BasParentMaterial>((a,b)=>a.ParentMaterialId==b.Id)
.LeftJoin<BasMaterial>((a,b,c)=>a.MaterialId==c.Id)
.Where((a,b,c)=>b.MaterialId==queryInput.materialId && a.ParentMaterialId==b.Id)
.Select((a,b,c)=>new ParentMaterialTreeOutput
{
material_id = c.MaterialName,
material_id_extras = c.Extras,
material_id_id=c.Id,
material_id_minpacking = c.Minpacking,
material_id_remark = c.Remark,
material_id_unitid = c.Unitid,
hasChildren = SqlFunc.Subqueryable<BasParentMaterial>().Where(x=>x.MaterialId==a.MaterialId).Any(),
}).Mapper(it =>
{
it.material_id_unitid = dic[it.material_id_unitid].ToString();
}).ToListAsync();
return data;
}
}
}
}

View File

@@ -24,4 +24,11 @@ public interface IDictionaryDataService
/// <param name="id">主键id.</param>
/// <returns></returns>
Task<DictionaryDataEntity> GetInfo(string id);
/// <summary>
/// 根据key获取字典
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
Task<Dictionary<string, object>> GetDicByKey(string key);
}

View File

@@ -327,6 +327,15 @@ public class DictionaryDataService : IDictionaryDataService, IDynamicApiControll
{
return await _repository.GetFirstAsync(x => x.Id == id && x.DeleteMark == null);
}
public async Task<Dictionary<string, object>> GetDicByKey(string key)
{
return await _repository.AsSugarClient().Queryable<DictionaryDataEntity>()
.LeftJoin<DictionaryTypeEntity>((a, b) => a.DictionaryTypeId == b.Id)
.Where((a, b) => b.EnCode == key && b.DeleteMark == null)
.ToDictionaryAsync((it)=>it.EnCode,it=>it.FullName);
}
#endregion
#region PrivateMethod