物料签收

This commit is contained in:
2023-06-16 11:42:54 +08:00
parent f527a02d75
commit 1a0df13ec4
8 changed files with 364 additions and 1 deletions

View File

@@ -0,0 +1,59 @@
namespace Tnb.ProductionMgr.Entities.Dto
{
public class MaterialReceiptInput
{
public string id { get; set; }
/// <summary>
/// 工位id
/// </summary>
public string station_id { get; set; } = string.Empty;
/// <summary>
/// 任务单id
/// </summary>
public string? mo_task_id { get; set; }
/// <summary>
/// 工序id
/// </summary>
public string? process_id { get; set; }
/// <summary>
/// 设备id
/// </summary>
public string? equip_id { get; set; }
/// <summary>
/// 车间id
/// </summary>
public string? workshop_id { get; set; }
/// <summary>
/// 载具id
/// </summary>
public string? carry_id { get; set; }
/// <summary>
/// 产线id
/// </summary>
public string? workline_id { get; set; }
/// <summary>
/// 二维码信息
/// </summary>
public string? carry_code { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? remark { get; set; }
/// <summary>
/// 生产bom工序id
/// </summary>
public string? mbom_process_id { get; set; }
public List<Dictionary<string,string>> details { get; set; }
}
}

View File

@@ -0,0 +1,42 @@
using JNPF.Common.Contracts;
using JNPF.Common.Security;
using SqlSugar;
namespace Tnb.ProductionMgr.Entities;
/// <summary>
/// 物料签收子表
/// </summary>
[SugarTable("prd_material_receipt_d")]
public partial class PrdMaterialReceiptD : BaseEntity<string>
{
public PrdMaterialReceiptD()
{
id = SnowflakeIdHelper.NextId();
}
/// <summary>
/// 物料签收id
/// </summary>
public string material_receipt_id { get; set; } = string.Empty;
/// <summary>
/// 物料id
/// </summary>
public string material_id { get; set; } = string.Empty;
/// <summary>
/// 数量
/// </summary>
public int num { get; set; }
/// <summary>
/// 批次
/// </summary>
public string? batch { get; set; }
/// <summary>
/// 单位id
/// </summary>
public string? unit_id { get; set; }
}

View File

@@ -0,0 +1,92 @@
using JNPF.Common.Contracts;
using JNPF.Common.Security;
using SqlSugar;
namespace Tnb.ProductionMgr.Entities;
/// <summary>
/// 物料签收主表
/// </summary>
[SugarTable("prd_material_receipt_h")]
public partial class PrdMaterialReceiptH : BaseEntity<string>
{
public PrdMaterialReceiptH()
{
id = SnowflakeIdHelper.NextId();
}
/// <summary>
/// 工位id
/// </summary>
public string station_id { get; set; } = string.Empty;
/// <summary>
/// 任务单id
/// </summary>
public string? mo_task_id { get; set; }
/// <summary>
/// 工序id
/// </summary>
public string? process_id { get; set; }
/// <summary>
/// 设备id
/// </summary>
public string? equip_id { get; set; }
/// <summary>
/// 车间id
/// </summary>
public string? workshop_id { get; set; }
/// <summary>
/// 载具id
/// </summary>
public string? carry_id { get; set; }
/// <summary>
/// 产线id
/// </summary>
public string? workline_id { get; set; }
/// <summary>
/// 创建用户
/// </summary>
public string? create_id { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? create_time { get; set; }
/// <summary>
/// 二维码信息
/// </summary>
public string? carry_code { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? remark { get; set; }
/// <summary>
/// 流程引擎Id
/// </summary>
public string? f_flowid { get; set; }
/// <summary>
/// 流程任务Id
/// </summary>
public string? f_flowtaskid { get; set; }
/// <summary>
/// 所属组织
/// </summary>
public string? org_id { get; set; }
/// <summary>
/// 生产bom工序id
/// </summary>
public string? mbom_process_id { get; set; }
}

View File

@@ -0,0 +1,19 @@
using Tnb.ProductionMgr.Entities.Dto;
namespace Tnb.ProductionMgr.Interfaces
{
/// <summary>
/// 物料签收服务接口
/// </summary>
public interface IPrdMaterialReceiptService
{
/// <summary>
/// 根据铁片二维码获取信息
/// </summary>
/// <param name="qrCode"></param>
/// <returns></returns>
public Task<dynamic> GetInfoByQrCode(string qrCode);
public Task<dynamic> SaveData(MaterialReceiptInput input);
}
}

View File

@@ -0,0 +1,129 @@
using JNPF.Common.Core.Manager;
using JNPF.Common.Enums;
using JNPF.Common.Security;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using Microsoft.AspNetCore.Mvc;
using Microsoft.ClearScript.Util.Web;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.ProductionMgr.Entities;
using Tnb.ProductionMgr.Entities.Dto;
using Tnb.ProductionMgr.Entities.Dto.PrdManage;
using Tnb.ProductionMgr.Interfaces;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Dto;
namespace Tnb.ProductionMgr
{
/// <summary>
/// 业务实现:物料签收
/// </summary>
[ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)]
[Route("api/[area]/[controller]/[action]")]
public class PrdMaterialReceiptService : IPrdMaterialReceiptService, IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository<PrdMo> _repository;
private readonly IUserManager _userManager;
public PrdMaterialReceiptService(
ISqlSugarRepository<PrdMo> repository,
IUserManager userManager
)
{
_repository = repository;
_userManager = userManager;
}
[HttpPost]
public async Task<dynamic> GetInfoByQrCode(string qrCode)
{
var db = _repository.AsSugarClient();
var result = await db.Queryable<WmsCarryH>()
.Where((a) => a.carry_code == qrCode)
.Select(a => new
{
carry_id = a.id,
carry_name = a.carry_name,
children = SqlFunc.Subqueryable<WmsCarryCode>()
.LeftJoin<BasMaterial>((b,c)=>b.material_id==c.id)
.Where((b,c)=>a.id==b.carry_id).ToList((b,c)=>new CarryCodeDetailOutput()
{
unit_id = c.unit_id,
barcode = b.barcode,
code_batch = b.code_batch,
codeqty = b.codeqty,
material_id = b.material_id,
material_code = c.code,
material_name = c.name
})
}).FirstAsync();
return result;
}
[HttpPost]
public async Task<dynamic> SaveData(MaterialReceiptInput input)
{
var db = _repository.AsSugarClient();
DbResult<bool> result = await db.Ado.UseTranAsync(async () =>
{
var moTask = await db.Queryable<PrdMoTask>().FirstAsync(x => x.id == input.mo_task_id);
var inputMaterials = await db.Queryable<BasMbomInput>()
.Where(x => x.mbom_id == moTask.bom_id && x.mbom_process_id == input.mbom_process_id)
.Select(x=>x.material_id)
.ToListAsync();
PrdMaterialReceiptH prdMaterialReceiptH = new PrdMaterialReceiptH()
{
station_id = input.station_id,
mo_task_id = input.mo_task_id,
process_id = input.process_id,
equip_id = input.equip_id,
workshop_id = input.workshop_id,
carry_id = input.carry_id,
workline_id = input.workline_id,
carry_code = input.carry_code,
remark = input.remark,
mbom_process_id = input.mbom_process_id,
create_id = _userManager.UserId,
create_time = DateTime.Now,
org_id = _userManager.GetUserInfo().Result.organizeId
};
List<PrdMaterialReceiptD> list = new List<PrdMaterialReceiptD>();
if (input.details != null && input.details.Count > 0)
{
foreach (var item in input.details)
{
if(!inputMaterials.Contains(item["material_id"]))
throw new Exception("该物料不是生产bom投入物料不能签收");
list.Add(new PrdMaterialReceiptD
{
material_receipt_id = prdMaterialReceiptH.id,
material_id = item["material_id"],
num = Convert.ToInt32(item["num"]),
batch = item["batch"],
unit_id = item["unit_id"],
});
}
}
else
{
throw new Exception("没有签收物料");
}
await db.Insertable<PrdMaterialReceiptH>(prdMaterialReceiptH).ExecuteCommandAsync();
await db.Insertable<PrdMaterialReceiptD>(list).ExecuteCommandAsync();
});
if(!result.IsSuccess) throw Oops.Oh(result.ErrorMessage);
return result.IsSuccess ? "签收成功" : result.ErrorMessage;
}
}
}

View File

@@ -12,6 +12,7 @@
<ProjectReference Include="..\..\BasicData\Tnb.BasicData.Interfaces\Tnb.BasicData.Interfaces.csproj" />
<ProjectReference Include="..\..\EquipMgr\Tnb.EquipMgr.Interfaces\Tnb.EquipMgr.Interfaces.csproj" />
<ProjectReference Include="..\..\visualdev\Tnb.VisualDev.Engine\Tnb.VisualDev.Engine.csproj" />
<ProjectReference Include="..\..\WarehouseMgr\Tnb.WarehouseMgr.Entities\Tnb.WarehouseMgr.Entities.csproj" />
<ProjectReference Include="..\Tnb.ProductionMgr.Interfaces\Tnb.ProductionMgr.Interfaces.csproj" />
</ItemGroup>