main
liangzongpeng 2024-07-02 11:23:29 +08:00
parent 57f0699959
commit 39f87ba916
17 changed files with 722 additions and 251 deletions

View File

@ -24,21 +24,21 @@ public class Invoice : EntityTenant
/// </summary> /// </summary>
[Required] [Required]
[SugarColumn(ColumnName = "BusinessType", ColumnDescription = "业务类型", Length = 32)] [SugarColumn(ColumnName = "BusinessType", ColumnDescription = "业务类型", Length = 32)]
public string BusinessType { get; set; } public string? BusinessType { get; set; }
/// <summary> /// <summary>
/// 客户 /// 客户
/// </summary> /// </summary>
[Required] [Required]
[SugarColumn(ColumnName = "Custom", ColumnDescription = "客户", Length = 32)] [SugarColumn(ColumnName = "Custom", ColumnDescription = "客户", Length = 32)]
public string Custom { get; set; } public string? Custom { get; set; }
/// <summary> /// <summary>
/// 仓库 /// 仓库
/// </summary> /// </summary>
[Required] [Required]
[SugarColumn(ColumnName = "Warehouse", ColumnDescription = "仓库", Length = 32)] [SugarColumn(ColumnName = "Warehouse", ColumnDescription = "仓库", Length = 32)]
public string Warehouse { get; set; } public string? Warehouse { get; set; }
/// <summary> /// <summary>
/// 部门 /// 部门

View File

@ -0,0 +1,40 @@
using Admin.NET.Core;
namespace Admin.NET.Application.Entity;
/// <summary>
/// 物料列表
/// </summary>
[SugarTable("MaterialList","物料列表")]
public class MaterialList : EntityBaseId
{
/// <summary>
/// 物料ID
/// </summary>
[SugarColumn(ColumnName = "MaterialsId", ColumnDescription = "物料ID")]
public long? MaterialsId { get; set; }
/// <summary>
/// 单位
/// </summary>
[SugarColumn(ColumnName = "Unit", ColumnDescription = "单位", Length = 32)]
public string? Unit { get; set; }
/// <summary>
/// 数量
/// </summary>
[SugarColumn(ColumnName = "Count", ColumnDescription = "数量")]
public int? Count { get; set; }
/// <summary>
/// 来源ID
/// </summary>
[SugarColumn(ColumnName = "SourceId", ColumnDescription = "来源ID")]
public long? SourceId { get; set; }
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnName = "Remarks", ColumnDescription = "备注", Length = 32)]
public string? Remarks { get; set; }
}

View File

@ -21,17 +21,17 @@ public class InvoiceBaseInput
/// <summary> /// <summary>
/// 业务类型 /// 业务类型
/// </summary> /// </summary>
public virtual string BusinessType { get; set; } public virtual string? BusinessType { get; set; }
/// <summary> /// <summary>
/// 客户 /// 客户
/// </summary> /// </summary>
public virtual string Custom { get; set; } public virtual string? Custom { get; set; }
/// <summary> /// <summary>
/// 仓库 /// 仓库
/// </summary> /// </summary>
public virtual string Warehouse { get; set; } public virtual string? Warehouse { get; set; }
/// <summary> /// <summary>
/// 仓库ID /// 仓库ID
@ -220,30 +220,16 @@ public class InvoiceInput : BasePageInput
/// </summary> /// </summary>
public class AddInvoiceInput : InvoiceBaseInput public class AddInvoiceInput : InvoiceBaseInput
{ {
/// <summary>
/// 业务类型
/// </summary>
[Required(ErrorMessage = "业务类型不能为空")]
public override string BusinessType { get; set; }
/// <summary>
/// 客户
/// </summary>
[Required(ErrorMessage = "客户不能为空")]
public override string Custom { get; set; }
/// <summary>
/// 仓库
/// </summary>
[Required(ErrorMessage = "仓库不能为空")]
public override string Warehouse { get; set; }
/// <summary> /// <summary>
/// 软删除 /// 软删除
/// </summary> /// </summary>
[Required(ErrorMessage = "软删除不能为空")]
public override bool IsDelete { get; set; } public override bool IsDelete { get; set; }
/// <summary>
/// 物料列表
/// </summary>
public List<AddMaterialListInput> TableData { get; set; }
} }
/// <summary> /// <summary>
@ -264,6 +250,10 @@ public class UpdateInvoiceInput : InvoiceBaseInput
[Required(ErrorMessage = "主键Id不能为空")] [Required(ErrorMessage = "主键Id不能为空")]
public long Id { get; set; } public long Id { get; set; }
/// <summary>
/// 物料列表
/// </summary>
public List<AddMaterialListInput> TableData { get; set; }
} }
/// <summary> /// <summary>

View File

@ -3,6 +3,7 @@ using Admin.NET.Application.Const;
using Admin.NET.Application.Entity; using Admin.NET.Application.Entity;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using NewLife.Reflection; using NewLife.Reflection;
using Nest;
namespace Admin.NET.Application; namespace Admin.NET.Application;
/// <summary> /// <summary>
@ -18,13 +19,15 @@ public class InvoiceService : IDynamicApiController, ITransient
private readonly OutboundService _outboundService; private readonly OutboundService _outboundService;
private readonly OutboundDetailService _outboundDetailService; private readonly OutboundDetailService _outboundDetailService;
private readonly UserManager _userManager; private readonly UserManager _userManager;
private readonly MaterialListService _materialListService;
public InvoiceService(SqlSugarRepository<Invoice> rep, public InvoiceService(SqlSugarRepository<Invoice> rep,
UserManager userManager, UserManager userManager,
PrintCodeDetailService codeDetailService, PrintCodeDetailService codeDetailService,
ReportTableService reportTableService, ReportTableService reportTableService,
OutboundService outboundService, OutboundService outboundService,
OutboundDetailService outboundDetailService, OutboundDetailService outboundDetailService,
ProductRetrospectService productRetrospect) ProductRetrospectService productRetrospect,
MaterialListService materialListService)
{ {
_rep = rep; _rep = rep;
_userManager = userManager; _userManager = userManager;
@ -33,6 +36,7 @@ public class InvoiceService : IDynamicApiController, ITransient
_reportTableService = reportTableService; _reportTableService = reportTableService;
_outboundService = outboundService; _outboundService = outboundService;
_outboundDetailService = outboundDetailService; _outboundDetailService = outboundDetailService;
_materialListService = materialListService;
} }
/// <summary> /// <summary>
@ -102,7 +106,16 @@ public class InvoiceService : IDynamicApiController, ITransient
{ {
var entity = input.Adapt<Invoice>(); var entity = input.Adapt<Invoice>();
await _rep.InsertAsync(entity); await _rep.InsertAsync(entity);
return entity.Id; var id = entity.Id;
if (input.TableData!=null&&input.TableData.Count>0)
{
foreach (var item in input.TableData)
{
item.SourceId = id;
await _materialListService.Add(item);
}
}
return id;
} }
/// <summary> /// <summary>
@ -130,6 +143,22 @@ public class InvoiceService : IDynamicApiController, ITransient
{ {
var entity = input.Adapt<Invoice>(); var entity = input.Adapt<Invoice>();
await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
if (input.TableData != null && input.TableData.Count > 0)
{
var list = await _materialListService.ListBySourceId(input.Id);
if (list!=null)
{
for (int i = 0; i < list.Count; i++)
{
await _materialListService.Delete(new DeleteMaterialListInput() { Id = list[i].Id });
}
}
foreach (var item in input.TableData)
{
item.SourceId = input.Id;
await _materialListService.Add(item);
}
}
} }
/// <summary> /// <summary>
@ -254,32 +283,34 @@ public class InvoiceService : IDynamicApiController, ITransient
foreach (var item in list) foreach (var item in list)
{ {
var report = await GetReport(item.ReportTableId); var report = await GetReport(item.ReportTableId);
var retrospect1 = new AddProductRetrospectInput() //var retrospect1 = new AddProductRetrospectInput()
{ //{
BaseCount = item.BaseCount, // BaseCount = item.BaseCount,
BaseUnit = item.BaseUnit, // BaseUnit = item.BaseUnit,
//Batch = report.Batch, // //Batch = report.Batch,
BusinessType = report.ProductType, // BusinessType = report.ProductType,
CodeType = item.CodeName, // CodeType = item.CodeName,
Location=addOutbound.Consignee, // Location=addOutbound.Consignee,
Department = report.ProductionLine, // Department = report.ProductionLine,
//WarehouseID = input.WarehouseId, // //WarehouseID = input.WarehouseId,
WarehousingDate = DateTime.Now, // WarehousingDate = DateTime.Now,
Count = 1, // Count = 1,
CreateTime = DateTime.Now, // CreateTime = DateTime.Now,
ScanCodeTime = DateTime.Now, // ScanCodeTime = DateTime.Now,
CreateUserId = userId, // CreateUserId = userId,
CreateUserName = userName, // CreateUserName = userName,
MaterialsId = report.MaterialsId, // MaterialsId = report.MaterialsId,
OddNumber = report.OddNumber, // OddNumber = report.OddNumber,
Receipt = "发货通知单", // Receipt = "发货通知单",
SourceId = outbound, // SourceId = outbound,
Unit = item.Unit, // Unit = item.Unit,
Name = item.CodeName, // Name = item.CodeName,
Code = item.Code, // Code = item.Code,
Destination = invoice.Consignee // Destination = invoice.Consignee
}; //};
await _productRetrospect.Add(retrospect1); //await _productRetrospect.Add(retrospect1);
await _productRetrospect.AddRetrospect(item.Adapt<PrintCodeDetail>(), report, "发货通知单", addOutbound.Consignee, outbound, input.WarehousingTableId);
} }
//var report = await _reportTableService.GetBySource(input.WarehousingTableId); //var report = await _reportTableService.GetBySource(input.WarehousingTableId);
@ -313,5 +344,16 @@ public class InvoiceService : IDynamicApiController, ITransient
} }
} }
/// <summary>
/// 获取物料列表列表
/// </summary>
/// <returns></returns>
[HttpGet]
[ApiDescriptionSettings(Name = "MaterialListById")]
public async Task<List<MaterialListOutput>> MaterialListById(long? id)
{
return await _materialListService.ListBySourceId(id);
}
} }

View File

@ -0,0 +1,38 @@
namespace Admin.NET.Application;
/// <summary>
/// 物料列表输出参数
/// </summary>
public class MaterialListDto
{
/// <summary>
/// 主键Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 物料ID
/// </summary>
public long? MaterialsId { get; set; }
/// <summary>
/// 单位
/// </summary>
public string? Unit { get; set; }
/// <summary>
/// 数量
/// </summary>
public int? Count { get; set; }
/// <summary>
/// 来源ID
/// </summary>
public long? SourceId { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? Remarks { get; set; }
}

View File

@ -0,0 +1,108 @@
using Admin.NET.Core;
using System.ComponentModel.DataAnnotations;
namespace Admin.NET.Application;
/// <summary>
/// 物料列表基础输入参数
/// </summary>
public class MaterialListBaseInput
{
/// <summary>
/// 物料ID
/// </summary>
public virtual long? MaterialsId { get; set; }
/// <summary>
/// 单位
/// </summary>
public virtual string? Unit { get; set; }
/// <summary>
/// 数量
/// </summary>
public virtual int? Count { get; set; }
/// <summary>
/// 来源ID
/// </summary>
public virtual long? SourceId { get; set; }
/// <summary>
/// 备注
/// </summary>
public virtual string? Remarks { get; set; }
}
/// <summary>
/// 物料列表分页查询输入参数
/// </summary>
public class MaterialListInput : BasePageInput
{
/// <summary>
/// 关键字查询
/// </summary>
public string? SearchKey { get; set; }
/// <summary>
/// 物料ID
/// </summary>
public long? MaterialsId { get; set; }
/// <summary>
/// 单位
/// </summary>
public string? Unit { get; set; }
/// <summary>
/// 数量
/// </summary>
public int? Count { get; set; }
/// <summary>
/// 来源ID
/// </summary>
public long? SourceId { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? Remarks { get; set; }
}
/// <summary>
/// 物料列表增加输入参数
/// </summary>
public class AddMaterialListInput : MaterialListBaseInput
{
}
/// <summary>
/// 物料列表删除输入参数
/// </summary>
public class DeleteMaterialListInput : BaseIdInput
{
}
/// <summary>
/// 物料列表更新输入参数
/// </summary>
public class UpdateMaterialListInput : MaterialListBaseInput
{
/// <summary>
/// 主键Id
/// </summary>
[Required(ErrorMessage = "主键Id不能为空")]
public long Id { get; set; }
}
/// <summary>
/// 物料列表主键查询输入参数
/// </summary>
public class QueryByIdMaterialListInput : DeleteMaterialListInput
{
}

View File

@ -0,0 +1,40 @@
namespace Admin.NET.Application;
/// <summary>
/// 物料列表输出参数
/// </summary>
public class MaterialListOutput
{
/// <summary>
/// 主键Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 物料ID
/// </summary>
public long? MaterialsId { get; set; }
/// <summary>
/// 单位
/// </summary>
public string? Unit { get; set; }
/// <summary>
/// 数量
/// </summary>
public int? Count { get; set; }
/// <summary>
/// 来源ID
/// </summary>
public long? SourceId { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? Remarks { get; set; }
}

View File

@ -0,0 +1,120 @@
using Admin.NET.Core.Service;
using Admin.NET.Application.Const;
using Admin.NET.Application.Entity;
using Microsoft.AspNetCore.Http;
namespace Admin.NET.Application;
/// <summary>
/// 物料列表服务
/// </summary>
[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)]
public class MaterialListService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository<MaterialList> _rep;
public MaterialListService(SqlSugarRepository<MaterialList> rep)
{
_rep = rep;
}
/// <summary>
/// 分页查询物料列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
[ApiDescriptionSettings(Name = "Page")]
public async Task<SqlSugarPagedList<MaterialListOutput>> Page(MaterialListInput input)
{
var query = _rep.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
u.Unit.Contains(input.SearchKey.Trim())
|| u.Remarks.Contains(input.SearchKey.Trim())
)
.WhereIF(input.MaterialsId>0, u => u.MaterialsId == input.MaterialsId)
.WhereIF(!string.IsNullOrWhiteSpace(input.Unit), u => u.Unit.Contains(input.Unit.Trim()))
.WhereIF(input.Count>0, u => u.Count == input.Count)
.WhereIF(input.SourceId>0, u => u.SourceId == input.SourceId)
.WhereIF(!string.IsNullOrWhiteSpace(input.Remarks), u => u.Remarks.Contains(input.Remarks.Trim()))
.Select<MaterialListOutput>();
return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
}
/// <summary>
/// 增加物料列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
[ApiDescriptionSettings(Name = "Add")]
public async Task<long> Add(AddMaterialListInput input)
{
var entity = input.Adapt<MaterialList>();
await _rep.InsertAsync(entity);
return entity.Id;
}
/// <summary>
/// 删除物料列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
[ApiDescriptionSettings(Name = "Delete")]
public async Task Delete(DeleteMaterialListInput input)
{
var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
//await _rep.FakeDeleteAsync(entity); //假删除
await _rep.DeleteAsync(entity); //真删除
}
/// <summary>
/// 更新物料列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
[ApiDescriptionSettings(Name = "Update")]
public async Task Update(UpdateMaterialListInput input)
{
var entity = input.Adapt<MaterialList>();
await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
}
/// <summary>
/// 获取物料列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet]
[ApiDescriptionSettings(Name = "Detail")]
public async Task<MaterialList> Detail([FromQuery] QueryByIdMaterialListInput input)
{
return await _rep.GetFirstAsync(u => u.Id == input.Id);
}
/// <summary>
/// 获取物料列表列表
/// </summary>
/// <returns></returns>
[HttpGet]
[ApiDescriptionSettings(Name = "List")]
public async Task<List<MaterialListOutput>> List()
{
return await _rep.AsQueryable().Select<MaterialListOutput>().ToListAsync();
}
/// <summary>
/// 获取物料列表列表
/// </summary>
/// <returns></returns>
[HttpGet]
[ApiDescriptionSettings(Name = "ListBySourceId")]
public async Task<List<MaterialListOutput>> ListBySourceId(long? sourceId)
{
return await _rep.AsQueryable().WhereIF(sourceId > 0, u => u.SourceId == sourceId).Select<MaterialListOutput>().ToListAsync();
}
}

View File

@ -163,5 +163,6 @@ public class PrintCodeDetailService : IDynamicApiController, ITransient
{ {
return await _rep.GetFirstAsync(a => a.Code == productCode); return await _rep.GetFirstAsync(a => a.Code == productCode);
} }
} }

View File

@ -151,6 +151,7 @@ public class ProductRetrospectService : IDynamicApiController, ITransient
return await _rep.AsQueryable().Select<ProductRetrospectOutput>().Where(a => !a.IsDelete).ToListAsync(); return await _rep.AsQueryable().Select<ProductRetrospectOutput>().Where(a => !a.IsDelete).ToListAsync();
} }
/// <summary> /// <summary>
/// 获取商品追溯列表 /// 获取商品追溯列表
/// </summary> /// </summary>
@ -163,7 +164,42 @@ public class ProductRetrospectService : IDynamicApiController, ITransient
return await _rep.AsQueryable().Where(u => !u.IsDelete && u.Code == productCode).Select<ProductRetrospectOutput>().ToListAsync(); return await _rep.AsQueryable().Where(u => !u.IsDelete && u.Code == productCode).Select<ProductRetrospectOutput>().ToListAsync();
} }
public async Task AddRetrospect(PrintCodeDetail item ,ReportTable report,string receipt, string location ,long? sourceId)
/// <summary>
/// 查询打印条码状态
/// </summary>
/// <param name="productCode"></param>
/// <returns></returns>
[HttpGet]
[ApiDescriptionSettings(Name = "CheckCodeStatus")]
public async Task<int> CheckCodeStatus(string? productCode)
{
var codeEnt = await _rep.AsQueryable().Where(u => !u.IsDelete && u.Code == productCode).Select<ProductRetrospectOutput>().ToListAsync();
if (codeEnt == null || codeEnt.Count<1)
{
return 0;
}
var last = codeEnt.OrderBy(a => a.WarehousingDate).FirstOrDefault();
var receipt = last.Receipt == null ? "" : last.Receipt;
if (receipt.Contains("汇报单"))
{
return 1;
}
else if (receipt.Contains("仓库"))
{
return 2;
}
else if (receipt.Contains("发货"))
{
return 3;
}
else if (receipt.Contains("分销"))
{
return 3;
}
return 3;
}
public async Task AddRetrospect(PrintCodeDetail item ,ReportTable report,string receipt, string location ,long? sourceId,long? warehousingId)
{ {
var userId = _userManager.UserId; var userId = _userManager.UserId;
var userName = _userManager.RealName; var userName = _userManager.RealName;
@ -176,7 +212,7 @@ public class ProductRetrospectService : IDynamicApiController, ITransient
CodeType = item.CodeName, CodeType = item.CodeName,
Location = location, Location = location,
Department = report.ProductionLine, Department = report.ProductionLine,
//WarehouseID = input.WarehouseId, WarehouseID = warehousingId,
WarehousingDate = DateTime.Now, WarehousingDate = DateTime.Now,
Count = 1, Count = 1,
CreateTime = DateTime.Now, CreateTime = DateTime.Now,

View File

@ -190,6 +190,40 @@ public class ReportDetailTableService : IDynamicApiController, ITransient
var userId = _userManager.UserId; var userId = _userManager.UserId;
var userName = _userManager.RealName; var userName = _userManager.RealName;
var topDatas = input.CodeDatas.FindAll(a => string.IsNullOrEmpty(a.FatherCode)); var topDatas = input.CodeDatas.FindAll(a => string.IsNullOrEmpty(a.FatherCode));
long reprotId = 0;
var report = await _reportTableService.GetBySource(input.WarehousingTableId);
if (report == null)
{
var newReport = new AddReportTableInput()
{
CreateTime = DateTime.Now,
IsDelete = false,
OddNumber = warehousing.OddNumber,
State = 0,
MaterialsId = warehousing.MaterialsId,
SourceId = input.WarehousingTableId,
ProductType = warehousing.ProductType,
ProductionLine = warehousing.ProductionLine,
BaseProductCount = repeatCodes.Count,
ProductCount = repeatCodes.Count,
Batch = warehousing.Batch,
CodeNum = materials.CodeNum,
Name = materials.Name,
CreateUserId = userId,
CreateUserName = userName,
StartDate = DateTime.Now,
SourceNumber = warehousing.SourceNumber,
Unit = warehousing.Unit,
Remarks = warehousing.Remarks
};
reprotId = await _reportTableService.Add(newReport);
}
else
{
reprotId = report.Id;
}
Dictionary<AddPrintCodeDetailInput, long> list = new Dictionary<AddPrintCodeDetailInput, long>(); Dictionary<AddPrintCodeDetailInput, long> list = new Dictionary<AddPrintCodeDetailInput, long>();
foreach (var item in topDatas) foreach (var item in topDatas)
{ {
@ -199,7 +233,7 @@ public class ReportDetailTableService : IDynamicApiController, ITransient
var detail = new AddPrintCodeDetailInput() var detail = new AddPrintCodeDetailInput()
{ {
ReportTableId = input.WarehousingTableId, ReportTableId = reprotId,
Code = code, Code = code,
CodeName = codeType, CodeName = codeType,
ChildCount = unit.ChildUnitCount, ChildCount = unit.ChildUnitCount,
@ -221,7 +255,7 @@ public class ReportDetailTableService : IDynamicApiController, ITransient
var unit2 = units.Find(a => a.Name == child.PackageName); var unit2 = units.Find(a => a.Name == child.PackageName);
var detail2 = new AddPrintCodeDetailInput() var detail2 = new AddPrintCodeDetailInput()
{ {
ReportTableId = input.WarehousingTableId, ReportTableId = reprotId,
Code = code2, Code = code2,
CodeName = codeType, CodeName = codeType,
ChildCount = unit2.ChildUnitCount, ChildCount = unit2.ChildUnitCount,
@ -245,7 +279,7 @@ public class ReportDetailTableService : IDynamicApiController, ITransient
var unit3 = units.Find(a => a.Name == child3.PackageName); var unit3 = units.Find(a => a.Name == child3.PackageName);
var detail3 = new AddPrintCodeDetailInput() var detail3 = new AddPrintCodeDetailInput()
{ {
ReportTableId = input.WarehousingTableId, ReportTableId = reprotId,
Code = code3, Code = code3,
CodeName = codeType, CodeName = codeType,
ChildCount = unit3.ChildUnitCount, ChildCount = unit3.ChildUnitCount,
@ -270,7 +304,7 @@ public class ReportDetailTableService : IDynamicApiController, ITransient
var unit4 = units.Find(a => a.Name == child4.PackageName); var unit4 = units.Find(a => a.Name == child4.PackageName);
var detail4 = new AddPrintCodeDetailInput() var detail4 = new AddPrintCodeDetailInput()
{ {
ReportTableId = input.WarehousingTableId, ReportTableId = reprotId,
Code = code4, Code = code4,
CodeName = codeType, CodeName = codeType,
ChildCount = unit4.ChildUnitCount, ChildCount = unit4.ChildUnitCount,
@ -295,7 +329,7 @@ public class ReportDetailTableService : IDynamicApiController, ITransient
var unit5 = units.Find(a => a.Name == child5.PackageName); var unit5 = units.Find(a => a.Name == child5.PackageName);
var detail5 = new AddPrintCodeDetailInput() var detail5 = new AddPrintCodeDetailInput()
{ {
ReportTableId = input.WarehousingTableId, ReportTableId = reprotId,
Code = code5, Code = code5,
CodeName = codeType, CodeName = codeType,
ChildCount = unit5.ChildUnitCount, ChildCount = unit5.ChildUnitCount,
@ -348,14 +382,7 @@ public class ReportDetailTableService : IDynamicApiController, ITransient
await _productRetrospect.Add(retrospect1); await _productRetrospect.Add(retrospect1);
} }
var report = await _reportTableService.GetBySource(input.WarehousingTableId);
if (report == null)
{
var newReport = new AddReportTableInput() { CreateTime = DateTime.Now, IsDelete = false, OddNumber = warehousing.OddNumber, State = 0, MaterialsId = warehousing.MaterialsId, SourceId = input.WarehousingTableId, ProductType = warehousing.ProductType, ProductionLine = warehousing.ProductionLine };
var addReport = await _reportTableService.Add(newReport);
}
//var details = await _warehouseDetails.List(); //var details = await _warehouseDetails.List();
//if (details != null && details.Any(a => a.MaterialsId == warehousing.MaterialsId && a.Unit == warehousing.Unit)) //if (details != null && details.Any(a => a.MaterialsId == warehousing.MaterialsId && a.Unit == warehousing.Unit))
//{ //{

View File

@ -229,4 +229,5 @@ public class UpdateReportTableInput : ReportTableBaseInput
public class QueryByIdReportTableInput : DeleteReportTableInput public class QueryByIdReportTableInput : DeleteReportTableInput
{ {
public string? Code { get; set; } public string? Code { get; set; }
public long? SourceId { get; set; }
} }

View File

@ -117,7 +117,7 @@ public class ReportTableService : IDynamicApiController, ITransient
item.ReportTableId = entity.Id; item.ReportTableId = entity.Id;
var ent = item.Adapt<PrintCodeDetail>(); var ent = item.Adapt<PrintCodeDetail>();
await _codeDetailService.UpdateByEntity(ent); await _codeDetailService.UpdateByEntity(ent);
await _productRetrospectService.AddRetrospect(ent, entity, "汇报单", entity.ProductionLine, entity.Id); await _productRetrospectService.AddRetrospect(ent, entity, "汇报单", entity.ProductionLine, entity.Id, null);
} }
} }
@ -162,7 +162,7 @@ public class ReportTableService : IDynamicApiController, ITransient
[ApiDescriptionSettings(Name = "Detail")] [ApiDescriptionSettings(Name = "Detail")]
public async Task<ReportTable> Detail([FromQuery] QueryByIdReportTableInput input) public async Task<ReportTable> Detail([FromQuery] QueryByIdReportTableInput input)
{ {
return await _rep.GetFirstAsync(u => u.Id == input.Id); return await _rep.GetFirstAsync(u => u.Id == input.Id || (input.SourceId > 0 && u.SourceId == input.SourceId));
} }
/// <summary> /// <summary>
@ -261,9 +261,9 @@ public class ReportTableService : IDynamicApiController, ITransient
{ {
throw new ArgumentNullException(nameof(unitGroup)); throw new ArgumentNullException(nameof(unitGroup));
} }
var unit = units.Find(a => a.Name == input.Name); var unit = units.Find(a => a.Name == input.Package);
if (unit == null) if (unit == null)
throw new ArgumentNullException(nameof(unitGroup)); throw new ArgumentNullException(nameof(unit));
var newReport = new AddPrintRecordsInput() { CreateTime = DateTime.Now, Unit = input.Package, Name = input.Name, IsDelete = false, Batch = input.Batch, ProductDate = input.ProductDate, LoseDate = input.LoseDate, ProductCount = input.PrintDatas?.Count, MaterialsId = input.MaterialsId }; var newReport = new AddPrintRecordsInput() { CreateTime = DateTime.Now, Unit = input.Package, Name = input.Name, IsDelete = false, Batch = input.Batch, ProductDate = input.ProductDate, LoseDate = input.LoseDate, ProductCount = input.PrintDatas?.Count, MaterialsId = input.MaterialsId };
var addReport = await _printRecordsService.Add(newReport); var addReport = await _printRecordsService.Add(newReport);
@ -292,6 +292,7 @@ public class ReportTableService : IDynamicApiController, ITransient
BaseUnit = baseUnit, BaseUnit = baseUnit,
PrintCodeTime = DateTime.Now, PrintCodeTime = DateTime.Now,
CreateUserId = userId, CreateUserId = userId,
MaterialsId = input.MaterialsId,
CreateUserName = userName CreateUserName = userName
}; };
var detailId = await _codeDetailService.Add(detail); var detailId = await _codeDetailService.Add(detail);
@ -307,7 +308,7 @@ public class ReportTableService : IDynamicApiController, ITransient
foreach (var dt in printDatas) foreach (var dt in printDatas)
{ {
var code2 = CodeHelper.GetCode(dt.BarCode, dt.QrCode); var code2 = CodeHelper.GetCode(dt.BarCode, dt.QrCode);
var detail2 = new AddPrintCodeDetailInput() { TempListId = addReport, FatherCode = code, FatherId = detailId, Code = code2, ChildCount = currUnit.ChildUnitCount, CodeName = codeType, Count = 1, Unit = currUnit.Name, BaseCount = currUnit.Rate, BaseUnit = baseUnit, PrintCodeTime = DateTime.Now, CreateUserId = userId, CreateUserName = userName }; var detail2 = new AddPrintCodeDetailInput() { TempListId = addReport, FatherCode = code, FatherId = detailId, MaterialsId = input.MaterialsId, Code = code2, ChildCount = currUnit.ChildUnitCount, CodeName = codeType, Count = 1, Unit = currUnit.Name, BaseCount = currUnit.Rate, BaseUnit = baseUnit, PrintCodeTime = DateTime.Now, CreateUserId = userId, CreateUserName = userName };
var detailId2 = await _codeDetailService.Add(detail2); var detailId2 = await _codeDetailService.Add(detail2);
var treeData2 = detail2.Adapt<PrintCodeTreeData>(); var treeData2 = detail2.Adapt<PrintCodeTreeData>();
if (tempUnits.Count > 1) if (tempUnits.Count > 1)
@ -318,7 +319,7 @@ public class ReportTableService : IDynamicApiController, ITransient
foreach (var dt3 in printDatas3) foreach (var dt3 in printDatas3)
{ {
var code3 = CodeHelper.GetCode(dt3.BarCode, dt3.QrCode); var code3 = CodeHelper.GetCode(dt3.BarCode, dt3.QrCode);
var detail3 = new AddPrintCodeDetailInput() { TempListId = addReport, FatherCode = code2, FatherId = detailId2, Code = code3, ChildCount = currUnit3.ChildUnitCount, CodeName = codeType, Count = 1, Unit = currUnit3.Name, BaseCount = currUnit3.Rate, BaseUnit = baseUnit, PrintCodeTime = DateTime.Now, CreateUserId = userId, CreateUserName = userName }; var detail3 = new AddPrintCodeDetailInput() { TempListId = addReport, FatherCode = code2, FatherId = detailId2, MaterialsId = input.MaterialsId, Code = code3, ChildCount = currUnit3.ChildUnitCount, CodeName = codeType, Count = 1, Unit = currUnit3.Name, BaseCount = currUnit3.Rate, BaseUnit = baseUnit, PrintCodeTime = DateTime.Now, CreateUserId = userId, CreateUserName = userName };
var detailId3 = await _codeDetailService.Add(detail3); var detailId3 = await _codeDetailService.Add(detail3);
var treeData3 = detail3.Adapt<PrintCodeTreeData>(); var treeData3 = detail3.Adapt<PrintCodeTreeData>();
if (tempUnits.Count > 2) if (tempUnits.Count > 2)
@ -329,7 +330,7 @@ public class ReportTableService : IDynamicApiController, ITransient
foreach (var dt4 in printDatas4) foreach (var dt4 in printDatas4)
{ {
var code4 = CodeHelper.GetCode(dt4.BarCode, dt4.QrCode); var code4 = CodeHelper.GetCode(dt4.BarCode, dt4.QrCode);
var detail4 = new AddPrintCodeDetailInput() { TempListId = addReport, FatherCode = code3, FatherId = detailId3, Code = code4, ChildCount = currUnit4.ChildUnitCount, CodeName = codeType, Count = 1, Unit = currUnit4.Name, BaseCount = currUnit4.Rate, BaseUnit = baseUnit, PrintCodeTime = DateTime.Now, CreateUserId = userId, CreateUserName = userName }; var detail4 = new AddPrintCodeDetailInput() { TempListId = addReport, FatherCode = code3, FatherId = detailId3, MaterialsId = input.MaterialsId, Code = code4, ChildCount = currUnit4.ChildUnitCount, CodeName = codeType, Count = 1, Unit = currUnit4.Name, BaseCount = currUnit4.Rate, BaseUnit = baseUnit, PrintCodeTime = DateTime.Now, CreateUserId = userId, CreateUserName = userName };
var treeData4 = detail4.Adapt<PrintCodeTreeData>(); var treeData4 = detail4.Adapt<PrintCodeTreeData>();
treeData3.Children.Add(treeData4); treeData3.Children.Add(treeData4);
} }

View File

@ -2,6 +2,8 @@
using Admin.NET.Application.Const; using Admin.NET.Application.Const;
using Admin.NET.Application.Entity; using Admin.NET.Application.Entity;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using SqlSugar;
namespace Admin.NET.Application; namespace Admin.NET.Application;
/// <summary> /// <summary>
/// 调库出库服务 /// 调库出库服务
@ -130,7 +132,7 @@ public class WarehouseTransferService : IDynamicApiController, ITransient
/// <summary> /// <summary>
/// 商品出货 /// 商品调库
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
@ -227,34 +229,8 @@ public class WarehouseTransferService : IDynamicApiController, ITransient
foreach (var item in list) foreach (var item in list)
{ {
var report = await GetReport(item.ReportTableId); var report = await GetReport(item.ReportTableId);
var retrospect1 = new AddProductRetrospectInput() await _productRetrospect.AddRetrospect(item.Adapt<PrintCodeDetail>(), report, "调库出库单", "", item.ReportTableId, input.WarehousingTableId);
{
BaseCount = item.BaseCount,
BaseUnit = item.BaseUnit,
//Batch = report.Batch,
BusinessType = report.ProductType,
CodeType = item.CodeName,
Location = addOutbound.Consignee,
Department = report.ProductionLine,
//WarehouseID = input.WarehouseId,
WarehousingDate = DateTime.Now,
Count = 1,
CreateTime = DateTime.Now,
ScanCodeTime = DateTime.Now,
CreateUserId = userId,
CreateUserName = userName,
MaterialsId = report.MaterialsId,
OddNumber = report.OddNumber,
Receipt = "调库出库单",
SourceId = outbound,
Unit = item.Unit,
Name = item.CodeName,
Code = item.Code,
//Destination = invoice.Consignee
};
await _productRetrospect.Add(retrospect1);
} }
} }
static Dictionary<long, ReportTable> reportDic = new Dictionary<long, ReportTable>(); static Dictionary<long, ReportTable> reportDic = new Dictionary<long, ReportTable>();

View File

@ -2,6 +2,8 @@
using Admin.NET.Application.Const; using Admin.NET.Application.Const;
using Admin.NET.Application.Entity; using Admin.NET.Application.Entity;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Mapster;
namespace Admin.NET.Application; namespace Admin.NET.Application;
/// <summary> /// <summary>
/// 入库统计服务 /// 入库统计服务
@ -13,12 +15,12 @@ public class WarehousingStatisticsService : IDynamicApiController, ITransient
private readonly WarehouseDetailsService _warehouseDetails; private readonly WarehouseDetailsService _warehouseDetails;
private readonly MaterialsService _materialsService; private readonly MaterialsService _materialsService;
private readonly SysUnitService _sysUnitService; private readonly SysUnitService _sysUnitService;
private readonly MaterialClassifyService _materialClassifyService;
private readonly PrintCodeDetailService _codeDetailService; private readonly PrintCodeDetailService _codeDetailService;
private readonly ProductRetrospectService _productRetrospect; private readonly ProductRetrospectService _productRetrospect;
//private readonly ProductWarehousingService _productWarehousing;
private readonly ReportDetailTableService _reportDetailTable; private readonly ReportDetailTableService _reportDetailTable;
private readonly UserManager _userManager; private readonly UserManager _userManager;
private readonly ReportTableService _reportTableService;
private readonly WarehouseService _warehouseService;
public WarehousingStatisticsService(SqlSugarRepository<WarehousingStatistics> rep, public WarehousingStatisticsService(SqlSugarRepository<WarehousingStatistics> rep,
UserManager userManager, UserManager userManager,
@ -27,8 +29,9 @@ public class WarehousingStatisticsService : IDynamicApiController, ITransient
SysUnitService sysUnitService, SysUnitService sysUnitService,
PrintCodeDetailService codeDetailService, PrintCodeDetailService codeDetailService,
ProductRetrospectService productRetrospect, ProductRetrospectService productRetrospect,
MaterialClassifyService materialClassifyService, ReportDetailTableService reportDetailTable,
ReportDetailTableService reportDetailTable) ReportTableService reportTableService,
WarehouseService warehouseService)
{ {
_rep = rep; _rep = rep;
_userManager = userManager; _userManager = userManager;
@ -37,9 +40,9 @@ public class WarehousingStatisticsService : IDynamicApiController, ITransient
_sysUnitService = sysUnitService; _sysUnitService = sysUnitService;
_codeDetailService = codeDetailService; _codeDetailService = codeDetailService;
_productRetrospect = productRetrospect; _productRetrospect = productRetrospect;
_materialClassifyService = materialClassifyService;
//_productWarehousing = productWarehousing;
_reportDetailTable = reportDetailTable; _reportDetailTable = reportDetailTable;
_reportTableService = reportTableService;
_warehouseService = warehouseService;
} }
/// <summary> /// <summary>
@ -176,7 +179,9 @@ public class WarehousingStatisticsService : IDynamicApiController, ITransient
var details = await _warehouseDetails.List(); var details = await _warehouseDetails.List();
var userId = _userManager.UserId; var userId = _userManager.UserId;
var userName = _userManager.RealName; var userName = _userManager.RealName;
ReportDetailTable reportTable = null; ReportTable reportTable = null;
var warehouse = await _warehouseService.Detail(new QueryByIdWarehouseInput() { Id = input.WarehouseId.Value });
var warehouseName = warehouse == null ? "" : warehouse.Name;
foreach (var item in input.CodeDatas) foreach (var item in input.CodeDatas)
{ {
var product = await _codeDetailService.GetByProductCode(item); var product = await _codeDetailService.GetByProductCode(item);
@ -185,16 +190,44 @@ public class WarehousingStatisticsService : IDynamicApiController, ITransient
continue; continue;
} }
//product.WarehouseID = input.WarehouseId; //product.WarehouseID = input.WarehouseId;
reportTable = await _reportDetailTable.Detail(new QueryByIdReportDetailTableInput() { Id = product.ReportTableId.Value }); reportTable = await _reportTableService.Detail(new QueryByIdReportTableInput() { Id = product.ReportTableId.Value,SourceId=product.ReportTableId });
if (reportTable==null)
{
var table = await _reportDetailTable.Detail(new QueryByIdReportDetailTableInput() { Id = product.ReportTableId.Value });
if (table!=null)
{
reportTable = new ReportTable()
{
BaseProductCount = table.BaseProductCount,
Batch = table.Batch,
CodeNum = table.CodeNum,
CreateTime = table.CreateTime,
CreateUser = table.CreateUser,
CreateUserId = table.CreateUserId,
CreateUserName = table.CreateUserName,
MaterialsId = table.MaterialsId,
OddNumber = table.OddNumber,
ProductCount = table.ProductCount,
ProductionLine = table.ProductionLine,
ProductType = table.ProductType,
SourceNumber = table.SourceNumber,
StartDate = table.ProductDate,
Unit = table.Unit,
Remarks = table.Remarks
};
}
}
if (reportTable!=null) if (reportTable!=null)
{ {
var materials = await _materialsService.GetById(reportTable.MaterialsId); var materials = await _materialsService.GetById(reportTable.MaterialsId);
if (materials == null) if (materials == null)
continue; continue;
var units = await _sysUnitService.ListByGroupId(materials.UnitGroupId); var units = await _sysUnitService.ListByGroupId(materials.UnitGroupId);
var baseUnit = units.LastOrDefault().Name; var baseUnit = units.FirstOrDefault().Name;
var unit = units.Find(a => a.Name == reportTable.Unit); var unit = units.Find(a => a.Name == reportTable.Unit);
if (unit == null)
unit = units.FirstOrDefault();
if (details != null && details.Any(a => a.MaterialsId == reportTable.MaterialsId && a.Unit == reportTable.Unit)) if (details != null && details.Any(a => a.MaterialsId == reportTable.MaterialsId && a.Unit == reportTable.Unit))
{ {
@ -214,36 +247,11 @@ public class WarehousingStatisticsService : IDynamicApiController, ITransient
newEnt.BaseCount = unit.Rate; newEnt.BaseCount = unit.Rate;
newEnt.WarehouseId = input.WarehouseId; newEnt.WarehouseId = input.WarehouseId;
newEnt.GoodCode = item; newEnt.GoodCode = item;
newEnt.MaterialsNum = reportTable.ProductCodeNum; newEnt.MaterialsNum = materials.CodeNum;
var addId = await _warehouseDetails.Add(newEnt); var addId = await _warehouseDetails.Add(newEnt);
} }
await _productRetrospect.AddRetrospect(product, reportTable, "入库单", warehouseName, reportTable.Id, input.WarehouseId);
var retrospect1 = new AddProductRetrospectInput()
{
BaseCount = unit.Rate,
BaseUnit = baseUnit,
Batch = reportTable.Batch,
BusinessType = "入库单",
CodeType = input.WarehousingType,
Department = reportTable.ProductionLine,
//WarehouseID = input.WarehouseId,
WarehousingDate = DateTime.Now,
Count = 1,
CreateTime = DateTime.Now,
ScanCodeTime = DateTime.Now,
CreateUserId = userId,
CreateUserName = userName,
MaterialsId = reportTable.MaterialsId,
OddNumber = reportTable.OddNumber,
Receipt = "汇报单",
SourceId = reportTable.Id,
Unit = unit.Name,
Name = materials.Name,
Code = item
};//Destination = warehousing.Supplier,
await _productRetrospect.Add(retrospect1);
var childs = codeDetails.FindAll(a => a.FatherCode == item); var childs = codeDetails.FindAll(a => a.FatherCode == item);
if (childs.Count>0) if (childs.Count>0)
@ -251,30 +259,7 @@ public class WarehousingStatisticsService : IDynamicApiController, ITransient
var currentUnit = units.FirstOrDefault(a => a.Name == childs.FirstOrDefault().Unit); var currentUnit = units.FirstOrDefault(a => a.Name == childs.FirstOrDefault().Unit);
foreach (var c1 in childs) foreach (var c1 in childs)
{ {
var retrospect2 = new AddProductRetrospectInput() await _productRetrospect.AddRetrospect(c1.Adapt<PrintCodeDetail>(), reportTable, "入库单", warehouseName, reportTable.Id, input.WarehouseId);
{
BaseCount = currentUnit.Rate,
BaseUnit = baseUnit,
Batch = reportTable.Batch,
BusinessType = "入库单",
CodeType = input.WarehousingType,
Department = reportTable.ProductionLine,
//WarehouseID = input.WarehouseId,
WarehousingDate = DateTime.Now,
Count = 1,
CreateTime = DateTime.Now,
ScanCodeTime = DateTime.Now,
CreateUserId = userId,
CreateUserName = userName,
MaterialsId = reportTable.MaterialsId,
OddNumber = reportTable.OddNumber,
Receipt = "汇报单",
SourceId = reportTable.Id,
Unit = currentUnit.Name,
Name = materials.Name,
Code = c1.Code
};//Destination = warehousing.Supplier,
await _productRetrospect.Add(retrospect2);
var childs3 = codeDetails.FindAll(a => a.FatherCode == c1.Code); var childs3 = codeDetails.FindAll(a => a.FatherCode == c1.Code);
if (childs3.Count > 0) if (childs3.Count > 0)
@ -282,61 +267,14 @@ public class WarehousingStatisticsService : IDynamicApiController, ITransient
var currentUnit3 = units.FirstOrDefault(a => a.Name == childs3.FirstOrDefault().Unit); var currentUnit3 = units.FirstOrDefault(a => a.Name == childs3.FirstOrDefault().Unit);
foreach (var c3 in childs3) foreach (var c3 in childs3)
{ {
var retrospect3 = new AddProductRetrospectInput() await _productRetrospect.AddRetrospect(c3.Adapt<PrintCodeDetail>(), reportTable, "入库单", warehouseName, reportTable.Id, input.WarehouseId);
{
BaseCount = currentUnit3.Rate,
BaseUnit = baseUnit,
Batch = reportTable.Batch,
BusinessType = "入库单",
CodeType = input.WarehousingType,
Department = reportTable.ProductionLine,
//WarehouseID = input.WarehouseId,
WarehousingDate = DateTime.Now,
Count = 1,
CreateTime = DateTime.Now,
ScanCodeTime = DateTime.Now,
CreateUserId = userId,
CreateUserName = userName,
MaterialsId = reportTable.MaterialsId,
OddNumber = reportTable.OddNumber,
Receipt = "汇报单",
SourceId = reportTable.Id,
Unit = currentUnit3.Name,
Name = materials.Name,
Code = c3.Code
};//Destination = warehousing.Supplier,
await _productRetrospect.Add(retrospect3);
var childs4 = codeDetails.FindAll(a => a.FatherCode == c3.Code); var childs4 = codeDetails.FindAll(a => a.FatherCode == c3.Code);
if (childs4.Count > 0) if (childs4.Count > 0)
{ {
var currentUnit4 = units.FirstOrDefault(a => a.Name == childs4.FirstOrDefault().Unit); var currentUnit4 = units.FirstOrDefault(a => a.Name == childs4.FirstOrDefault().Unit);
foreach (var c4 in childs4) foreach (var c4 in childs4)
{ {
var retrospect4 = new AddProductRetrospectInput() await _productRetrospect.AddRetrospect(c4.Adapt<PrintCodeDetail>(), reportTable, "入库单", warehouseName, reportTable.Id, input.WarehouseId);
{
BaseCount = currentUnit4.Rate,
BaseUnit = baseUnit,
Batch = reportTable.Batch,
BusinessType = "入库单",
CodeType = input.WarehousingType,
Department = reportTable.ProductionLine,
//WarehouseID = input.WarehouseId,
WarehousingDate = DateTime.Now,
Count = 1,
CreateTime = DateTime.Now,
ScanCodeTime = DateTime.Now,
CreateUserId = userId,
CreateUserName = userName,
MaterialsId = reportTable.MaterialsId,
OddNumber = reportTable.OddNumber,
Receipt = "汇报单",
SourceId = reportTable.Id,
Unit = currentUnit4.Name,
Name = materials.Name,
Code = c4.Code
};//Destination = warehousing.Supplier,
await _productRetrospect.Add(retrospect4);
} }
} }
@ -348,34 +286,11 @@ public class WarehousingStatisticsService : IDynamicApiController, ITransient
} }
//var warehousing = await Detail(new QueryByIdReportDetailTableInput() { Id = input.WarehousingTableId.Value });
//if (warehousing == null)
//{
// throw Oops.Oh(ErrorCodeEnum.xg1002);
//}
//var details = await _warehouseDetails.List();
//if (details != null && details.Any(a => a.MaterialsId == warehousing.MaterialsId && a.Unit == warehousing.Unit))
//{
// var unit = units.Find(a => a.Name == warehousing.Unit);
// var detail = details.Find(a => a.MaterialsId == warehousing.MaterialsId && a.Unit == warehousing.Unit);
// detail.Count += warehousing.Count;
// if (unit != null)
// {
// detail.BaseCount = detail.Count * unit.Rate;
// }
// await _warehouseDetails.UpdateByEntity(detail.Adapt<WarehouseDetails>());
//}
//else
//{
// var newEnt = warehousing.Adapt<AddWarehouseDetailsInput>();
// newEnt.SourceId = warehousing.Id;
// var addId = await _warehouseDetails.Add(newEnt);
//}
var newDetail = reportTable.Adapt<AddWarehousingStatisticsInput>(); var newDetail = reportTable.Adapt<AddWarehousingStatisticsInput>();
newDetail.SourceId = reportTable.Id; if (reportTable!=null)
{
newDetail.SourceId = reportTable?.Id;
}
await Add(newDetail); await Add(newDetail);
} }

View File

@ -6,6 +6,7 @@ enum Api {
PageMaterials = '/api/materials/page', PageMaterials = '/api/materials/page',
DetailMaterials = '/api/materials/detail', DetailMaterials = '/api/materials/detail',
ListMaterials = '/api/materials/list', ListMaterials = '/api/materials/list',
MtListBySourceId = '/api/materialList/listBySourceId'
} }
// 增加物料 // 增加物料
@ -56,3 +57,11 @@ export const listMaterials = () =>
data: { }, data: { },
}); });
// 附带的物料列表
export const materialListBySourceId = (sourceId: any) =>
request({
url: Api.MtListBySourceId,
method: 'get',
data: { sourceId },
});

View File

@ -1,13 +1,13 @@
<template> <template>
<div class="invoice-container"> <div class="invoice-container">
<el-dialog v-model="isShowDialog" :width="800" draggable=""> <el-dialog v-model="isShowDialog" :width="860" draggable="">
<template #header> <template #header>
<div style="color: #fff"> <div style="color: #fff">
<!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>--> <!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>-->
<span>{{ props.title }}</span> <span>{{ props.title }}</span>
</div> </div>
</template> </template>
<el-form :model="ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules"> <el-form :model="ruleForm" ref="ruleFormRef" label-width="auto" >
<el-row :gutter="35"> <el-row :gutter="35">
<el-form-item v-show="false"> <el-form-item v-show="false">
<el-input v-model="ruleForm.id" /> <el-input v-model="ruleForm.id" />
@ -23,7 +23,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="业务类型" prop="businessType"> <el-form-item label="业务类型" prop="businessType" :rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
<el-select v-model="ruleForm.businessType" placeholder="请选择" clearable> <el-select v-model="ruleForm.businessType" placeholder="请选择" clearable>
<el-option label="销售出库" value="销售出库" /> <el-option label="销售出库" value="销售出库" />
<el-option label="其他出库" value="其他出库" /> <el-option label="其他出库" value="其他出库" />
@ -39,9 +39,9 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="仓库" prop="warehouse" :rules="[{ required: true, message: '仓库不能为空', trigger: 'blur' }]"> <el-form-item label="仓库" prop="warehouseId" :rules="[{ required: true, message: '仓库不能为空', trigger: 'blur' }]">
<el-select v-model="ruleForm.warehouse" placeholder="请选择" clearable > <el-select v-model="ruleForm.warehouseId" placeholder="请选择" clearable @change="warehouseChange">
<el-option :label="item.name" :value="item.name" v-for="item, index in warehouses" <el-option :label="item.name" :value="item.id" v-for="item, index in warehouses"
:key="index" /> :key="index" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -97,6 +97,52 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-card class="full-table" shadow="hover" style="margin-top: 5px">
<el-table
:data="ruleForm.tableData"
style="width: 100%"
v-loading="loading"
tooltip-effect="light"
row-key="id"
border="">
<el-table-column prop="materialsId" label="物料" width="180" align="center">
<template #default="scope">
<el-select v-model="scope.row.materialsId" placeholder="请选择" autocomplete="off" controls-position="right" clearable @change="materialsChange">
<el-option :label="item.name" :value="item.id" v-for="item, index in materials" :key="index" />
</el-select>
</template>
</el-table-column>
<el-table-column prop="unit" label="单位" width="120" show-overflow-tooltip="" >
<template #default="scope">
<el-select v-model="scope.row.unit" placeholder="请选择" clearable autocomplete="off" >
<el-option :label="item.name" :value="item.name" v-for="item, index in units" :key="index" />
</el-select>
</template>
</el-table-column>
<el-table-column prop="count" label="数量" width="100" show-overflow-tooltip="" >
<template #default="scope">
<el-input-number v-model="scope.row.count" autocomplete="off" controls-position="right"/>
</template>
</el-table-column>
<el-table-column prop="remarks" label="备注" width="140" show-overflow-tooltip="" >
<template #default="scope">
<el-input v-model="scope.row.remarks" autocomplete="off" />
</template>
</el-table-column>
<el-table-column label="操作" width="140" align="center" fixed="right" show-overflow-tooltip="" >
<template #default="scope">
<el-button link type="primary" icon="el-icon-delete" @click.prevent="handleColDelete(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div style="text-align: left; margin-top: 10px">
<el-button icon="ele-Plus" @click="addColumn"></el-button>
</div>
</el-card>
</el-form> </el-form>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
@ -114,7 +160,7 @@
} }
</style> </style>
<script lang="ts" setup> <script lang="ts" setup>
import { ref,onMounted } from "vue"; import { ref, onMounted, reactive } from 'vue';
import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils'; import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import type { FormRules } from "element-plus"; import type { FormRules } from "element-plus";
@ -122,6 +168,9 @@
import { listWarehouse } from '/@/api/main/warehouse'; import { listWarehouse } from '/@/api/main/warehouse';
import { listSupplier } from '/@/api/main/supplier'; import { listSupplier } from '/@/api/main/supplier';
import { listCustom } from '/@/api/main/custom'; import { listCustom } from '/@/api/main/custom';
import { listMaterials, detailMaterials, materialListBySourceId } from '/@/api/main/materials';
import { listUnitGroup } from '/@/api/main/unit';
import { getCurrentDate } from '/@/utils/formatTime';
// //
var props = defineProps({ var props = defineProps({
@ -138,23 +187,36 @@
const warehouses = ref<any>([]); const warehouses = ref<any>([]);
const suppliers = ref<any>([]); const suppliers = ref<any>([]);
const customs = ref<any>([]); const customs = ref<any>([]);
const loading = ref(false);
var colIndex = 0;
const materials = ref<any>([]);
const units = ref<any>([]);
const tableData = ref<any>([]);
// //
const rules = ref<FormRules>({ const rules = ref<FormRules>({
businessType: [{required: true, message: '请输入业务类型!', trigger: 'blur',},], // businessType: [{required: true, message: '', trigger: 'blur',},],
custom: [{required: true, message: '请输入客户!', trigger: 'blur',},], // custom: [{required: true, message: '', trigger: 'blur',},],
warehouse: [{required: true, message: '请输入仓库!', trigger: 'blur',},], // warehouse: [{required: true, message: '', trigger: 'blur',},],
}); });
// //
const openDialog = async (row: any) => { const openDialog = async (row: any) => {
// ruleForm.value = JSON.parse(JSON.stringify(row)); // ruleForm = JSON.parse(JSON.stringify(row));
// detail // detail
let rowData = JSON.parse(JSON.stringify(row)); let rowData = JSON.parse(JSON.stringify(row));
if (rowData.id) if (rowData.id)
{
ruleForm.value = (await detailInvoice(rowData.id)).data.result; ruleForm.value = (await detailInvoice(rowData.id)).data.result;
ruleForm.value.tableData = (await materialListBySourceId(rowData.id)).data.result;
}
else else
{
ruleForm.value = rowData; ruleForm.value = rowData;
ruleForm.value.codeNum = getCurrentDate();
}
materials.value = (await listMaterials()).data.result;
isShowDialog.value = true; isShowDialog.value = true;
}; };
@ -173,6 +235,7 @@
const submit = async () => { const submit = async () => {
ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => { ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
if (isValid) { if (isValid) {
console.log('true');
let values = ruleForm.value; let values = ruleForm.value;
if (ruleForm.value.id == undefined || ruleForm.value.id == null || ruleForm.value.id == "" || ruleForm.value.id == 0) { if (ruleForm.value.id == undefined || ruleForm.value.id == null || ruleForm.value.id == "" || ruleForm.value.id == 0) {
await addInvoice(values); await addInvoice(values);
@ -181,6 +244,7 @@
} }
closeDialog(); closeDialog();
} else { } else {
console.log('flase');
ElMessage({ ElMessage({
message: `表单有${Object.keys(fields).length}处验证失败,请修改后再提交`, message: `表单有${Object.keys(fields).length}处验证失败,请修改后再提交`,
type: "error", type: "error",
@ -189,11 +253,37 @@
}); });
}; };
/**
* 物料值变更
* @param clearBindUserId 是否清空
*/
const materialsChange = async (value : any) => {
//ruleForm.value.materialsId=value.id;
let material = (await detailMaterials(value)).data.result;
//console.log(material);
if(material.id){
var res = await listUnitGroup(material.unitGroupId ?? 0);
units.value = res.data.result ?? [];
}
};
//
function addColumn() {
//console.log('object');
tableData.value.push({
materialsId: 0,
unit: '箱',
count:1,
remarks: '',
sourceId:0,
index: tableData.value.length+1,
});
ruleForm.value.tableData = tableData.value;
colIndex++;
}
// //
onMounted(async () => { onMounted(async () => {
@ -202,6 +292,43 @@
customs.value = (await listCustom()).data.result; customs.value = (await listCustom()).data.result;
}); });
const warehouseChange = async (value : any) => {
//ruleForm.value.materialsId=value.id;
let dir = warehouses.value.find((item) => item.id === value);
// console.log(dir.name);
ruleForm.value.warehouse = dir.name;
};
function handleColDelete(index: number) {
tableData.value.splice(index, 1);
ruleForm.value.tableData = tableData.value;
}
//
function handleColUp(record: any, index: number) {
if (record) {
var data1 = ChangeExForArray(index, index - 1, ruleForm.value.tableData);
return data1;
}
}
//
function handleColDown(record: any, index: number) {
if (record) {
return ChangeExForArray(index, index + 1, ruleForm.value.tableData);
}
//console.log(record);
}
function ChangeExForArray(index1: number, index2: number, array: Array<any>) {
//console.log(array);
let temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
return array;
}
// //
defineExpose({ openDialog }); defineExpose({ openDialog });
</script> </script>