This commit is contained in:
yang.lee
2023-12-11 13:53:04 +08:00
12 changed files with 1150 additions and 2 deletions

View File

@@ -0,0 +1,370 @@
namespace Tnb.BasicData.Entities.Dto
{
public class ErpBasMaterialInput
{
public ErpBasMaterial bas_material { get; set; }
public List<ErpBasMaterialUnit> bas_material_units { get; set; } = new List<ErpBasMaterialUnit>();
// public List<ErpBasMaterialIntoFactorySpecifications> bas_material_into_factory_specificationses { get; set; } = new List<ErpBasMaterialIntoFactorySpecifications>();
//
// public List<ErpBasSubstitutionMaterial> bas_substitution_materials { get; set; } = new List<ErpBasSubstitutionMaterial>();
//
// public List<ErpBasMaterialSendWarehouse> bas_material_send_warehouses { get; set; } = new List<ErpBasMaterialSendWarehouse>();
//
// public List<ErpBasMaterialInboundWh> bas_material_inbound_whs { get; set; } = new List<ErpBasMaterialInboundWh>();
}
public class ErpBasMaterial
{
/// <summary>
/// 物料代码
/// </summary>
public string code { get; set; } = string.Empty;
/// <summary>
/// 物料名称
/// </summary>
public string name { get; set; } = string.Empty;
/// <summary>
/// 物料分类ID
/// </summary>
public string category_id { get; set; } = string.Empty;
/// <summary>
/// 单位ID
/// </summary>
public string unit_id { get; set; } = string.Empty;
// /// <summary>
// /// 单价
// /// </summary>
// public decimal? cost { get; set; }
//
// /// <summary>
// /// 毛重
// /// </summary>
// public decimal? grossweight { get; set; }
//
// /// <summary>
// /// 净重
// /// </summary>
// public decimal? netweight { get; set; }
//
// /// <summary>
// /// 长
// /// </summary>
// public decimal? length { get; set; }
//
// /// <summary>
// /// 宽
// /// </summary>
// public decimal? width { get; set; }
//
// /// <summary>
// /// 高
// /// </summary>
// public decimal? high { get; set; }
//
// /// <summary>
// /// 体积
// /// </summary>
// public decimal? volumn { get; set; }
//
// /// <summary>
// /// 是否免检
// /// </summary>
// public int? isexemption { get; set; }
/// <summary>
/// 安全库存
/// </summary>
public decimal? safeqty { get; set; }
/// <summary>
/// 保质期
/// </summary>
public int? qualityperiod { get; set; }
// /// <summary>
// /// 是否过期允许出库
// /// </summary>
// public string? expireout { get; set; }
/// <summary>
/// 最小包装
/// </summary>
public decimal? minpacking { get; set; }
/// <summary>
/// 是否先进先出管控
/// </summary>
public string? fifo { get; set; }
// /// <summary>
// /// 先进先出间隔天数,批次间隔天数
// /// </summary>
// public int? fifo_interval_days { get; set; }
/// <summary>
/// 物料规格型号
/// </summary>
public string? material_standard { get; set; }
// /// <summary>
// /// 海关编码
// /// </summary>
// public string? fhscode { get; set; }
// /// <summary>
// /// 附属性
// /// </summary>
// public string? attribute { get; set; }
// /// <summary>
// /// 管控类型: 批管控Lot 单管控KeyParts 非管控NoControl
// /// </summary>
// public string? controltype { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? remark { get; set; }
// /// <summary>
// /// 创建用户
// /// </summary>
// public string? create_id { get; set; }
/// <summary>
/// 创建用户
/// </summary>
public string? create_count { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? create_time { get; set; }
// /// <summary>
// /// 修改用户
// /// </summary>
// public string? modify_id { get; set; }
/// <summary>
/// 修改用户
/// </summary>
public string? modify_count { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime? modify_time { get; set; }
// /// <summary>
// /// 扩展字段
// /// </summary>
// public string? extras { get; set; }
/// <summary>
/// 状态
/// </summary>
public string? state { get; set; }
/// <summary>
/// 物料属性
/// </summary>
public string? material_property { get; set; }
/// <summary>
/// 标签
/// </summary>
public string? label { get; set; }
/// <summary>
/// 描述
/// </summary>
public string? descrip { get; set; }
/// <summary>
/// 批次管理
/// </summary>
public int? is_batch_enabled { get; set; }
/// <summary>
/// 标签管理
/// </summary>
public int? is_label_enabled { get; set; }
// /// <summary>
// /// 附件
// /// </summary>
// public string? attachment { get; set; }
/// <summary>
/// 先进先出 0否 1是
/// </summary>
public int? first_in_out { get; set; }
/// <summary>
/// 存储有效期(天)
/// </summary>
public int? storage_valid_day { get; set; }
/// <summary>
/// 预警提前期(天)
/// </summary>
public int? early_warn_day { get; set; }
/// <summary>
/// 安全库存
/// </summary>
public int? safe_stock { get; set; }
/// <summary>
/// 安全库存包含状态
/// </summary>
public string? safe_stock_stauts { get; set; }
/// <summary>
/// 发料仓库id
/// </summary>
public string? send_warehouse_id { get; set; }
/// <summary>
/// 入厂单位id
/// </summary>
public string? into_factory_unit_id { get; set; }
/// <summary>
/// 投料单位
/// </summary>
public string? material_in_unit_id { get; set; }
/// <summary>
/// 产出单位
/// </summary>
public string? material_out_unit_id { get; set; }
/// <summary>
/// 请料方式 1按计划排程请料 2自行管控
/// </summary>
public string? material_request_method { get; set; }
/// <summary>
/// 是否包含入库数
/// </summary>
public int? is_contain_into_num { get; set; }
/// <summary>
/// 是否创建子工单
/// </summary>
public string? is_create_sub_work_order { get; set; }
/// <summary>
/// 保质期
/// </summary>
public int? quality_guarantee_period { get; set; }
/// <summary>
/// DI编码
/// </summary>
public string? di { get; set; }
}
public class ErpBasMaterialUnit
{
/// <summary>
/// 主单位数量
/// </summary>
public string? number_of_primary_unit { get; set; }
/// <summary>
/// 辅助单位数量
/// </summary>
public string? number_of_auxiliary_unit { get; set; }
/// <summary>
/// 辅助单位
/// </summary>
public string auxiliary_unit_id { get; set; } = string.Empty;
}
public class ErpBasMaterialIntoFactorySpecifications
{
/// <summary>
/// 单位id
/// </summary>
public string unit_id { get; set; } = string.Empty;
/// <summary>
/// 数量
/// </summary>
public decimal num { get; set; }
}
public class ErpBasSubstitutionMaterial
{
/// <summary>
/// 替代料编号
/// </summary>
public string sub_material_code { get; set; } = string.Empty;
/// <summary>
/// 替代比例如1一个物料可以用一个替代料代替
/// </summary>
public decimal proportion { get; set; }
}
public class ErpBasMaterialSendWarehouse
{
/// <summary>
/// 仓库编号
/// </summary>
public string? wh_code { get; set; }
/// <summary>
/// 最大库存
/// </summary>
public int? max_stock { get; set; }
/// <summary>
/// 最小库存
/// </summary>
public int? min_stock { get; set; }
/// <summary>
/// 安全库存
/// </summary>
public int? safe_stock { get; set; }
}
public class ErpBasMaterialInboundWh
{
/// <summary>
/// 仓库编号
/// </summary>
public string? wh_code { get; set; }
/// <summary>
/// 最大库存
/// </summary>
public int? max_stock { get; set; }
/// <summary>
/// 最小库存
/// </summary>
public int? min_stock { get; set; }
/// <summary>
/// 安全库存
/// </summary>
public int? safe_stock { get; set; }
}
}

View File

@@ -263,5 +263,10 @@ public partial class BasMaterial : BaseEntity<string>
/// DI编码
/// </summary>
public string? di { get; set; }
/// <summary>
/// 删除标志
/// </summary>
public int? deleted { get; set; }
}

View File

@@ -5,7 +5,7 @@ using SqlSugar;
namespace Tnb.BasicData.Entities;
/// <summary>
/// 物料入规格
/// 物料入规格
/// </summary>
[SugarTable("bas_material_into_factory_specifications")]
public partial class BasMaterialIntoFactorySpecifications : BaseEntity<string>

View File

@@ -6,10 +6,13 @@ using JNPF.Common.Security;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using JNPF.Systems.Entitys.Permission;
using JNPF.Systems.Entitys.System;
using JNPF.Systems.Interfaces.System;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using SQLitePCL;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.BasicData.Entities.Dto;
@@ -275,5 +278,185 @@ namespace Tnb.BasicData
return ids;
}
/// <summary>
/// 物料新增修改接口
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<dynamic> CreateCreateOrUpdateMaterial(ErpBasMaterialInput input)
{
var db = _repository.AsSugarClient();
if (input == null)
{
throw Oops.Bah("参数为空");
}
if (input.bas_material == null)
{
throw Oops.Bah("物料信息为空");
}
if (!string.IsNullOrEmpty(input.bas_material.code))
{
throw Oops.Bah("物料编号为空");
}
if (!string.IsNullOrEmpty(input.bas_material.name))
{
throw Oops.Bah("物料名称为空");
}
DbResult<bool> result = await db.Ado.UseTranAsync(async () =>
{
BasMaterial basMaterial = input.bas_material.Adapt<BasMaterial>();
if (!await db.Queryable<BasMaterial>().AnyAsync(x => x.code == input.bas_material.code))
{
basMaterial.id = SnowflakeIdHelper.NextId();
}
if (!string.IsNullOrEmpty(input.bas_material.create_count))
{
UserEntity userEntity = await db.Queryable<UserEntity>().FirstAsync(x=>x.Account==input.bas_material.create_count);
if (userEntity == null)
{
throw Oops.Bah($"未找到用户{input.bas_material.create_count}");
}
basMaterial.create_id = userEntity?.Id;
}
if (!string.IsNullOrEmpty(input.bas_material.modify_count))
{
UserEntity userEntity = await db.Queryable<UserEntity>().FirstAsync(x=>x.Account==input.bas_material.modify_count);
if (userEntity == null)
{
throw Oops.Bah($"未找到用户{input.bas_material.modify_count}");
}
basMaterial.modify_id = userEntity?.Id;
}
List<BasMaterialUnit> basMaterialUnits = new List<BasMaterialUnit>();
// List<BasMaterialIntoFactorySpecifications> basMaterialIntoFactorySpecificationsList = new List<BasMaterialIntoFactorySpecifications>();
// List<BasSubstitutionMaterial> basSubstitutionMaterials = new List<BasSubstitutionMaterial>();
// List<BasMaterialSendWarehouse> basMaterialSendWarehouses = new List<BasMaterialSendWarehouse>();
// List<BasMaterialInboundWh> basMaterialInboundWhs = new List<BasMaterialInboundWh>();
if (input.bas_material_units != null && input.bas_material_units.Count > 0)
{
foreach(var item in input.bas_material_units)
{
BasMaterialUnit basMaterialUnit = item.Adapt<BasMaterialUnit>();
basMaterialUnit.id = SnowflakeIdHelper.NextId();
basMaterialUnit.material_id = basMaterial.id;
basMaterialUnits.Add(basMaterialUnit);
}
}
// if (input.bas_material_into_factory_specificationses != null && input.bas_material_into_factory_specificationses.Count > 0)
// {
// foreach(var item in input.bas_material_into_factory_specificationses)
// {
// BasMaterialIntoFactorySpecifications basMaterialIntoFactorySpecifications = item.Adapt<BasMaterialIntoFactorySpecifications>();
// basMaterialIntoFactorySpecifications.id = SnowflakeIdHelper.NextId();
// basMaterialIntoFactorySpecifications.material_id = basMaterial.id;
// basMaterialIntoFactorySpecificationsList.Add(basMaterialIntoFactorySpecifications);
// }
// }
//
// if (input.bas_substitution_materials != null && input.bas_substitution_materials.Count > 0)
// {
// foreach(var item in input.bas_substitution_materials)
// {
// BasSubstitutionMaterial basSubstitutionMaterial = item.Adapt<BasSubstitutionMaterial>();
// basSubstitutionMaterial.id = SnowflakeIdHelper.NextId();
// basSubstitutionMaterial.material_id = basMaterial.id;
// BasMaterial subBasMaterial = await db.Queryable<BasMaterial>().FirstAsync(x=>x.code==item.sub_material_code);
// if (subBasMaterial == null)
// {
// throw Oops.Bah($"未找到替代物料{item.sub_material_code}");
// }
// basSubstitutionMaterial.sub_material_id = subBasMaterial?.id ?? item.sub_material_code;
// basSubstitutionMaterials.Add(basSubstitutionMaterial);
// }
// }
//
// if (input.bas_material_send_warehouses != null && input.bas_material_send_warehouses.Count > 0)
// {
// foreach(var item in input.bas_material_send_warehouses)
// {
// BasMaterialSendWarehouse basMaterialSendWarehouse = item.Adapt<BasMaterialSendWarehouse>();
// basMaterialSendWarehouse.id = SnowflakeIdHelper.NextId();
// basMaterialSendWarehouse.material_id = basMaterial.id;
// BasWarehouse basWarehouse = await db.Queryable<BasWarehouse>().FirstAsync(x=>x.whcode==item.wh_code);
// if (basWarehouse == null)
// {
// throw Oops.Bah($"发料仓库未找到仓库{item.wh_code}");
// }
// basMaterialSendWarehouse.wh_id = basWarehouse?.id ?? item.wh_code;
// basMaterialSendWarehouses.Add(basMaterialSendWarehouse);
// }
// }
//
// if (input.bas_material_inbound_whs != null && input.bas_material_inbound_whs.Count > 0)
// {
// foreach(var item in input.bas_material_inbound_whs)
// {
// BasMaterialInboundWh basMaterialInboundWh = item.Adapt<BasMaterialInboundWh>();
// basMaterialInboundWh.id = SnowflakeIdHelper.NextId();
// basMaterialInboundWh.material_id = basMaterial.id;
// BasWarehouse basWarehouse = await db.Queryable<BasWarehouse>().FirstAsync(x=>x.whcode==item.wh_code);
// if (basWarehouse == null)
// {
// throw Oops.Bah($"入库仓库未找到仓库{item.wh_code}");
// }
// basMaterialInboundWh.wh_id = basWarehouse?.id ?? item.wh_code;
// basMaterialInboundWhs.Add(basMaterialInboundWh);
// }
// }
if (!await db.Queryable<BasMaterial>().AnyAsync(x => x.code == input.bas_material.code))
{
await db.Insertable<BasMaterial>(basMaterial).ExecuteCommandAsync();
}
else
{
await db.Updateable<BasMaterial>(basMaterial).ExecuteCommandAsync();
}
// var x= await db.Storageable(basMaterial).ToStorageAsync();
// await x.AsInsertable.ExecuteCommandAsync();//不存在插入
// await x.AsUpdateable.ExecuteCommandAsync();//存在更新
if (basMaterialUnits.Count > 0)
{
await db.Deleteable<BasMaterialUnit>().Where(x=>x.material_id==basMaterial.id).ExecuteCommandAsync();
await db.Insertable<BasMaterialUnit>(basMaterialUnits).ExecuteCommandAsync();
}
// if (basMaterialIntoFactorySpecificationsList.Count > 0)
// {
// await db.Deleteable<BasMaterialIntoFactorySpecifications>().Where(x=>x.material_id==basMaterial.id).ExecuteCommandAsync();
// await db.Insertable<BasMaterialIntoFactorySpecifications>(basMaterialIntoFactorySpecificationsList).ExecuteCommandAsync();
// }
//
// if (basSubstitutionMaterials.Count > 0)
// {
// await db.Deleteable<BasSubstitutionMaterial>().Where(x=>x.material_id==basMaterial.id).ExecuteCommandAsync();
// await db.Insertable<BasSubstitutionMaterial>(basSubstitutionMaterials).ExecuteCommandAsync();
// }
//
// if (basMaterialSendWarehouses.Count > 0)
// {
// await db.Deleteable<BasMaterialSendWarehouse>().Where(x=>x.material_id==basMaterial.id).ExecuteCommandAsync();
// await db.Insertable<BasMaterialSendWarehouse>(basMaterialSendWarehouses).ExecuteCommandAsync();
// }
//
// if (basMaterialInboundWhs.Count > 0)
// {
// await db.Deleteable<BasMaterialInboundWh>().Where(x=>x.material_id==basMaterial.id).ExecuteCommandAsync();
// await db.Insertable<BasMaterialInboundWh>(basMaterialInboundWhs).ExecuteCommandAsync();
// }
});
return !result.IsSuccess ? throw Oops.Oh(result.ErrorMessage) : "保存成功";
}
}
}