diff --git a/Admin.NET/Admin.NET.Application/Entity/DistributorInvoice.cs b/Admin.NET/Admin.NET.Application/Entity/DistributorInvoice.cs
new file mode 100644
index 0000000..c2230d7
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Entity/DistributorInvoice.cs
@@ -0,0 +1,46 @@
+using Admin.NET.Core;
+namespace Admin.NET.Application.Entity;
+
+///
+/// 分销出库
+///
+[SugarTable("DistributorInvoice","分销出库")]
+public class DistributorInvoice : EntityTenant
+{
+ ///
+ /// 仓库ID
+ ///
+ [SugarColumn(ColumnName = "WarehouseId", ColumnDescription = "仓库ID")]
+ public long? WarehouseId { get; set; }
+
+ ///
+ /// 目标仓库ID
+ ///
+ [SugarColumn(ColumnName = "TargetWarehouseId", ColumnDescription = "目标仓库ID")]
+ public long? TargetWarehouseId { get; set; }
+
+ ///
+ /// 分销商ID
+ ///
+ [SugarColumn(ColumnName = "DistributorId", ColumnDescription = "分销商ID")]
+ public long? DistributorId { get; set; }
+
+ ///
+ /// 分销商
+ ///
+ [SugarColumn(ColumnName = "Distributor", ColumnDescription = "分销商", Length = 32)]
+ public string? Distributor { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ [SugarColumn(ColumnName = "StartDate", ColumnDescription = "业务日期")]
+ public DateTime? StartDate { get; set; }
+
+ ///
+ /// 备注
+ ///
+ [SugarColumn(ColumnName = "Remarks", ColumnDescription = "备注", Length = 32)]
+ public string? Remarks { get; set; }
+
+}
diff --git a/Admin.NET/Admin.NET.Application/Entity/Invoice.cs b/Admin.NET/Admin.NET.Application/Entity/Invoice.cs
index f50918f..37d57e9 100644
--- a/Admin.NET/Admin.NET.Application/Entity/Invoice.cs
+++ b/Admin.NET/Admin.NET.Application/Entity/Invoice.cs
@@ -4,7 +4,7 @@ namespace Admin.NET.Application.Entity;
///
/// 发货通知单
///
-[SugarTable("Invoice","发货通知单")]
+[SugarTable("invoice","发货通知单")]
public class Invoice : EntityTenant
{
///
@@ -22,18 +22,21 @@ public class Invoice : EntityTenant
///
/// 业务类型
///
+ [Required]
[SugarColumn(ColumnName = "BusinessType", ColumnDescription = "业务类型", Length = 32)]
public string BusinessType { get; set; }
///
/// 客户
///
+ [Required]
[SugarColumn(ColumnName = "Custom", ColumnDescription = "客户", Length = 32)]
public string Custom { get; set; }
///
/// 仓库
///
+ [Required]
[SugarColumn(ColumnName = "Warehouse", ColumnDescription = "仓库", Length = 32)]
public string Warehouse { get; set; }
@@ -97,4 +100,10 @@ public class Invoice : EntityTenant
[SugarColumn(ColumnName = "SendOutExpand", ColumnDescription = "发货拓展", Length = 32)]
public string? SendOutExpand { get; set; }
+ ///
+ /// 仓库ID
+ ///
+ [SugarColumn(ColumnName = "WarehouseId", ColumnDescription = "仓库ID")]
+ public long? WarehouseId { get; set; }
+
}
diff --git a/Admin.NET/Admin.NET.Application/Entity/Outbound.cs b/Admin.NET/Admin.NET.Application/Entity/Outbound.cs
index 40c07d2..bef9fcb 100644
--- a/Admin.NET/Admin.NET.Application/Entity/Outbound.cs
+++ b/Admin.NET/Admin.NET.Application/Entity/Outbound.cs
@@ -4,7 +4,7 @@ namespace Admin.NET.Application.Entity;
///
/// 出库单
///
-[SugarTable("Outbound","出库单")]
+[SugarTable("outbound","出库单")]
public class Outbound : EntityTenant
{
///
@@ -16,15 +16,10 @@ public class Outbound : EntityTenant
///
/// 来源单号
///
+ [Required]
[SugarColumn(ColumnName = "SourceCodeNum", ColumnDescription = "来源单号", Length = 32)]
public string SourceCodeNum { get; set; }
- ///
- /// 业务日期
- ///
- [SugarColumn(ColumnName = "StartDate", ColumnDescription = "业务日期", Length = 32)]
- public string? StartDate { get; set; }
-
///
/// 状态
///
@@ -40,15 +35,10 @@ public class Outbound : EntityTenant
///
/// 收货单位
///
+ [Required]
[SugarColumn(ColumnName = "Consignee", ColumnDescription = "收货单位", Length = 32)]
public string Consignee { get; set; }
- ///
- /// 仓库
- ///
- [SugarColumn(ColumnName = "Warehouse", ColumnDescription = "仓库")]
- public string? Warehouse { get; set; }
-
///
/// 审核人ID
///
@@ -67,4 +57,22 @@ public class Outbound : EntityTenant
[SugarColumn(ColumnName = "OutboundExpandString", ColumnDescription = "出库单字符串拓展字段", Length = 64)]
public string? OutboundExpandString { get; set; }
+ ///
+ /// 仓库
+ ///
+ [SugarColumn(ColumnName = "Warehouse", ColumnDescription = "仓库", Length = 255)]
+ public string? Warehouse { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ [SugarColumn(ColumnName = "StartDate", ColumnDescription = "业务日期")]
+ public DateTime? StartDate { get; set; }
+
+ ///
+ /// 仓库ID
+ ///
+ [SugarColumn(ColumnName = "WarehouseId", ColumnDescription = "仓库ID")]
+ public long? WarehouseId { get; set; }
+
}
diff --git a/Admin.NET/Admin.NET.Application/Entity/OutboundDetail.cs b/Admin.NET/Admin.NET.Application/Entity/OutboundDetail.cs
new file mode 100644
index 0000000..b4a4d7c
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Entity/OutboundDetail.cs
@@ -0,0 +1,23 @@
+using Admin.NET.Core;
+namespace Admin.NET.Application.Entity;
+
+///
+/// 出库详细
+///
+[SugarTable("OutboundDetail","出库详细")]
+public class OutboundDetail : EntityBaseId
+{
+ ///
+ /// 出库单ID
+ ///
+ [SugarColumn(ColumnName = "OutboundId", ColumnDescription = "出库单ID")]
+ public long? OutboundId { get; set; }
+
+ ///
+ /// 条码ID列表
+ ///
+ [SugarColumn(ColumnName = "CodeTableIds", ColumnDescription = "条码ID列表", ColumnDataType = StaticConfig.CodeFirst_BigString)]
+ [Required]
+ public string? CodeTableIds { get; set; }
+
+}
diff --git a/Admin.NET/Admin.NET.Application/Entity/PrintCodeDetail.cs b/Admin.NET/Admin.NET.Application/Entity/PrintCodeDetail.cs
index 0a887da..2c87e72 100644
--- a/Admin.NET/Admin.NET.Application/Entity/PrintCodeDetail.cs
+++ b/Admin.NET/Admin.NET.Application/Entity/PrintCodeDetail.cs
@@ -4,7 +4,7 @@ namespace Admin.NET.Application.Entity;
///
/// 打印条码详情
///
-[SugarTable("PrintCodeDetail","打印条码详情")]
+[SugarTable("printcodedetail","打印条码详情")]
public class PrintCodeDetail : EntityBase
{
///
@@ -97,4 +97,10 @@ public class PrintCodeDetail : EntityBase
[SugarColumn(ColumnName = "FatherId", ColumnDescription = "父节点ID")]
public long? FatherId { get; set; }
+ ///
+ /// 物料ID
+ ///
+ [SugarColumn(ColumnName = "MaterialsId", ColumnDescription = "物料ID")]
+ public long? MaterialsId { get; set; }
+
}
diff --git a/Admin.NET/Admin.NET.Application/Entity/WarehouseTransfer.cs b/Admin.NET/Admin.NET.Application/Entity/WarehouseTransfer.cs
new file mode 100644
index 0000000..6480e56
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Entity/WarehouseTransfer.cs
@@ -0,0 +1,34 @@
+using Admin.NET.Core;
+namespace Admin.NET.Application.Entity;
+
+///
+/// 调库出库
+///
+[SugarTable("warehousetransfer","调库出库")]
+public class WarehouseTransfer : EntityTenant
+{
+ ///
+ /// 原仓库ID
+ ///
+ [SugarColumn(ColumnName = "WarehouseId", ColumnDescription = "原仓库ID")]
+ public long? WarehouseId { get; set; }
+
+ ///
+ /// 目标仓库ID
+ ///
+ [SugarColumn(ColumnName = "TargetWarehouseId", ColumnDescription = "目标仓库ID")]
+ public long? TargetWarehouseId { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ [SugarColumn(ColumnName = "StartDate", ColumnDescription = "业务日期")]
+ public DateTime? StartDate { get; set; }
+
+ ///
+ /// 备注
+ ///
+ [SugarColumn(ColumnName = "Remarks", ColumnDescription = "备注", Length = 32)]
+ public string? Remarks { get; set; }
+
+}
diff --git a/Admin.NET/Admin.NET.Application/Service/Distributor/DistributorService.cs b/Admin.NET/Admin.NET.Application/Service/Distributor/DistributorService.cs
index 17ebe34..ebc27eb 100644
--- a/Admin.NET/Admin.NET.Application/Service/Distributor/DistributorService.cs
+++ b/Admin.NET/Admin.NET.Application/Service/Distributor/DistributorService.cs
@@ -114,10 +114,12 @@ public class DistributorService : IDynamicApiController, ITransient
[ApiDescriptionSettings(Name = "List")]
public async Task> List()
{
- return await _rep.AsQueryable().Where(a => !a.IsDelete).Select().ToListAsync();
+ return await _rep.AsQueryable().Select().Where(a => !a.IsDelete).ToListAsync();
}
+
+
}
diff --git a/Admin.NET/Admin.NET.Application/Service/DistributorInvoice/DistributorInvoiceService.cs b/Admin.NET/Admin.NET.Application/Service/DistributorInvoice/DistributorInvoiceService.cs
new file mode 100644
index 0000000..9faab6c
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Service/DistributorInvoice/DistributorInvoiceService.cs
@@ -0,0 +1,286 @@
+using Admin.NET.Core.Service;
+using Admin.NET.Application.Const;
+using Admin.NET.Application.Entity;
+using Microsoft.AspNetCore.Http;
+namespace Admin.NET.Application;
+///
+/// 分销出库服务
+///
+[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)]
+public class DistributorInvoiceService : IDynamicApiController, ITransient
+{
+ private readonly SqlSugarRepository _rep;
+ private readonly PrintCodeDetailService _codeDetailService;
+ private readonly ProductRetrospectService _productRetrospect;
+ private readonly ReportTableService _reportTableService;
+ private readonly OutboundService _outboundService;
+ private readonly OutboundDetailService _outboundDetailService;
+ private readonly UserManager _userManager;
+ public DistributorInvoiceService(SqlSugarRepository rep,
+ UserManager userManager,
+ PrintCodeDetailService codeDetailService,
+ ReportTableService reportTableService,
+ OutboundService outboundService,
+ OutboundDetailService outboundDetailService,
+ ProductRetrospectService productRetrospect)
+ {
+ _rep = rep;
+ _userManager = userManager;
+ _codeDetailService = codeDetailService;
+ _productRetrospect = productRetrospect;
+ _reportTableService = reportTableService;
+ _outboundService = outboundService;
+ _outboundDetailService = outboundDetailService;
+ }
+
+ ///
+ /// 分页查询分销出库
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "Page")]
+ public async Task> Page(DistributorInvoiceInput input)
+ {
+ var query = _rep.AsQueryable().Where(a => !a.IsDelete)
+ .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
+ u.Distributor.Contains(input.SearchKey.Trim())
+ || u.Remarks.Contains(input.SearchKey.Trim())
+ )
+ .WhereIF(input.WarehouseId>0, u => u.WarehouseId == input.WarehouseId)
+ .WhereIF(input.TargetWarehouseId>0, u => u.TargetWarehouseId == input.TargetWarehouseId)
+ .WhereIF(input.DistributorId>0, u => u.DistributorId == input.DistributorId)
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Distributor), u => u.Distributor.Contains(input.Distributor.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Remarks), u => u.Remarks.Contains(input.Remarks.Trim()))
+ .Select();
+ if(input.StartDateRange != null && input.StartDateRange.Count >0)
+ {
+ DateTime? start= input.StartDateRange[0];
+ query = query.WhereIF(start.HasValue, u => u.StartDate > start);
+ if (input.StartDateRange.Count >1 && input.StartDateRange[1].HasValue)
+ {
+ var end = input.StartDateRange[1].Value.AddDays(1);
+ query = query.Where(u => u.StartDate < end);
+ }
+ }
+ return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+ }
+
+ ///
+ /// 增加分销出库
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "Add")]
+ public async Task Add(AddDistributorInvoiceInput input)
+ {
+ var entity = input.Adapt();
+ await _rep.InsertAsync(entity);
+ return entity.Id;
+ }
+
+ ///
+ /// 删除分销出库
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "Delete")]
+ public async Task Delete(DeleteDistributorInvoiceInput input)
+ {
+ var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+ await _rep.FakeDeleteAsync(entity); //假删除
+ //await _rep.DeleteAsync(entity); //真删除
+ }
+
+ ///
+ /// 更新分销出库
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "Update")]
+ public async Task Update(UpdateDistributorInvoiceInput input)
+ {
+ var entity = input.Adapt();
+ await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+ }
+
+ ///
+ /// 获取分销出库
+ ///
+ ///
+ ///
+ [HttpGet]
+ [ApiDescriptionSettings(Name = "Detail")]
+ public async Task Detail([FromQuery] QueryByIdDistributorInvoiceInput input)
+ {
+ return await _rep.GetFirstAsync(u => u.Id == input.Id);
+ }
+
+ ///
+ /// 获取分销出库列表
+ ///
+ ///
+ ///
+ [HttpGet]
+ [ApiDescriptionSettings(Name = "List")]
+ public async Task> List()
+ {
+ return await _rep.AsQueryable().Select().Where(a => !a.IsDelete).ToListAsync();
+ }
+
+
+ ///
+ /// 商品出货
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "ShipmentProduct")]
+ public async Task ShipmentProduct(AddProductCodeInput input)
+ {
+ if (input == null || input.WarehousingTableId == null || input.CodeDatas == null || input.CodeDatas.Count == 0)
+ {
+ throw Oops.Oh(ErrorCodeEnum.xg1002);
+ }
+
+
+ var invoice = await Detail(new QueryByIdDistributorInvoiceInput() { Id = input.WarehousingTableId.Value });
+ if (invoice == null)
+ {
+ throw Oops.Oh(ErrorCodeEnum.xg1002);
+ }
+ var codes = string.IsNullOrEmpty(input.CodeDatas[0].BarCode) ? input.CodeDatas.ConvertAll(a => a.QrCode) : input.CodeDatas.ConvertAll(a => a.BarCode);
+ var details = (await _codeDetailService.List()).FindAll(a => !string.IsNullOrEmpty(a.FatherCode));
+ var repeatCodes = details.Where(a => !a.IsDelete && codes.Any(b => b == a.Code)).ToList();
+ if (repeatCodes == null || repeatCodes.Count < 1)
+ {
+ throw Oops.Oh(ErrorCodeEnum.xg1002);
+ }
+
+ var userId = _userManager.UserId;
+ var userName = _userManager.RealName;
+ var addOutbound = new AddOutboundInput()
+ {
+ //BusinessType = invoice.BusinessType,
+ //CodeNum = invoice.CodeNum,
+ //Consignee = invoice.Consignee,
+ CreateTime = invoice.CreateTime,
+ CreateUserId = userId,
+ CreateUserName = userName,
+ SourceCodeNum = invoice.Id.ToString(),
+ StartDate = invoice.StartDate,
+ State = 0,
+ //Warehouse = invoice.Warehouse,
+ WarehouseId = invoice.WarehouseId,
+ TenantId = invoice.TenantId,
+ };
+ var outbound = await _outboundService.Add(addOutbound);
+
+
+ var codeIds = new List();
+ var list = new List();
+ foreach (var c1 in repeatCodes)
+ {
+ codeIds.Add(c1.Id);
+ c1.WarehouseID = null;
+ //c1.FatherCode = null;
+ //c1.FatherId = null;
+ await _codeDetailService.UpdateByEntity(c1.Adapt());
+ list.Add(c1);
+ var child1 = details.Find(a => a.FatherCode == c1.Code);
+ if (child1 != null)
+ {
+ child1.WarehouseID = null;
+ await _codeDetailService.UpdateByEntity(child1.Adapt());
+ list.Add(child1);
+
+ var child2 = details.Find(a => a.FatherCode == c1.Code);
+ if (child2 != null)
+ {
+ child2.WarehouseID = null;
+ await _codeDetailService.UpdateByEntity(child2.Adapt());
+ list.Add(child2);
+
+ var child3 = details.Find(a => a.FatherCode == c1.Code);
+ if (child3 != null)
+ {
+ child3.WarehouseID = null;
+ await _codeDetailService.UpdateByEntity(child3.Adapt());
+ list.Add(child3);
+
+ var child4 = details.Find(a => a.FatherCode == c1.Code);
+ if (child4 != null)
+ {
+ child4.WarehouseID = null;
+ await _codeDetailService.UpdateByEntity(child4.Adapt());
+ list.Add(child4);
+ }
+ }
+ }
+ }
+
+ }
+
+ var addOutboundDetail = new AddOutboundDetailInput() { CodeTableIds = string.Join(",", codeIds), OutboundId = outbound };
+ await _outboundDetailService.Add(addOutboundDetail);
+
+ foreach (var item in list)
+ {
+ var report = await GetReport(item.ReportTableId);
+ var retrospect1 = new AddProductRetrospectInput()
+ {
+ 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 reportDic = new Dictionary();
+ private async Task GetReport(long? reportId)
+ {
+ if (reportId == null)
+ {
+ return new ReportTable();
+ }
+ if (reportDic.ContainsKey(reportId.Value))
+ {
+ return reportDic[reportId.Value];
+ }
+ var report = await _reportTableService.GetBySource(reportId);
+ if (report == null)
+ {
+ return new ReportTable();
+ }
+ else
+ {
+ return report;
+ }
+ }
+
+}
+
diff --git a/Admin.NET/Admin.NET.Application/Service/DistributorInvoice/Dto/DistributorInvoiceDto.cs b/Admin.NET/Admin.NET.Application/Service/DistributorInvoice/Dto/DistributorInvoiceDto.cs
new file mode 100644
index 0000000..2183f0f
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Service/DistributorInvoice/Dto/DistributorInvoiceDto.cs
@@ -0,0 +1,83 @@
+namespace Admin.NET.Application;
+
+ ///
+ /// 分销出库输出参数
+ ///
+ public class DistributorInvoiceDto
+ {
+ ///
+ /// 主键Id
+ ///
+ public long Id { get; set; }
+
+ ///
+ /// 仓库ID
+ ///
+ public long? WarehouseId { get; set; }
+
+ ///
+ /// 目标仓库ID
+ ///
+ public long? TargetWarehouseId { get; set; }
+
+ ///
+ /// 分销商ID
+ ///
+ public long? DistributorId { get; set; }
+
+ ///
+ /// 分销商
+ ///
+ public string? Distributor { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ public DateTime? StartDate { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string? Remarks { get; set; }
+
+ ///
+ /// 租户Id
+ ///
+ public long? TenantId { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ public DateTime? UpdateTime { get; set; }
+
+ ///
+ /// 创建者Id
+ ///
+ public long? CreateUserId { get; set; }
+
+ ///
+ /// 创建者姓名
+ ///
+ public string? CreateUserName { get; set; }
+
+ ///
+ /// 修改者Id
+ ///
+ public long? UpdateUserId { get; set; }
+
+ ///
+ /// 修改者姓名
+ ///
+ public string? UpdateUserName { get; set; }
+
+ ///
+ /// 软删除
+ ///
+ public bool IsDelete { get; set; }
+
+ }
diff --git a/Admin.NET/Admin.NET.Application/Service/DistributorInvoice/Dto/DistributorInvoiceInput.cs b/Admin.NET/Admin.NET.Application/Service/DistributorInvoice/Dto/DistributorInvoiceInput.cs
new file mode 100644
index 0000000..a1453ed
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Service/DistributorInvoice/Dto/DistributorInvoiceInput.cs
@@ -0,0 +1,168 @@
+using Admin.NET.Core;
+using System.ComponentModel.DataAnnotations;
+
+namespace Admin.NET.Application;
+
+ ///
+ /// 分销出库基础输入参数
+ ///
+ public class DistributorInvoiceBaseInput
+ {
+ ///
+ /// 仓库ID
+ ///
+ public virtual long? WarehouseId { get; set; }
+
+ ///
+ /// 目标仓库ID
+ ///
+ public virtual long? TargetWarehouseId { get; set; }
+
+ ///
+ /// 分销商ID
+ ///
+ public virtual long? DistributorId { get; set; }
+
+ ///
+ /// 分销商
+ ///
+ public virtual string? Distributor { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ public virtual DateTime? StartDate { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public virtual string? Remarks { get; set; }
+
+ ///
+ /// 租户Id
+ ///
+ public virtual long? TenantId { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public virtual DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ public virtual DateTime? UpdateTime { get; set; }
+
+ ///
+ /// 创建者Id
+ ///
+ public virtual long? CreateUserId { get; set; }
+
+ ///
+ /// 创建者姓名
+ ///
+ public virtual string? CreateUserName { get; set; }
+
+ ///
+ /// 修改者Id
+ ///
+ public virtual long? UpdateUserId { get; set; }
+
+ ///
+ /// 修改者姓名
+ ///
+ public virtual string? UpdateUserName { get; set; }
+
+ ///
+ /// 软删除
+ ///
+ public virtual bool IsDelete { get; set; }
+
+ }
+
+ ///
+ /// 分销出库分页查询输入参数
+ ///
+ public class DistributorInvoiceInput : BasePageInput
+ {
+ ///
+ /// 关键字查询
+ ///
+ public string? SearchKey { get; set; }
+
+ ///
+ /// 仓库ID
+ ///
+ public long? WarehouseId { get; set; }
+
+ ///
+ /// 目标仓库ID
+ ///
+ public long? TargetWarehouseId { get; set; }
+
+ ///
+ /// 分销商ID
+ ///
+ public long? DistributorId { get; set; }
+
+ ///
+ /// 分销商
+ ///
+ public string? Distributor { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ public DateTime? StartDate { get; set; }
+
+ ///
+ /// 业务日期范围
+ ///
+ public List StartDateRange { get; set; }
+ ///
+ /// 备注
+ ///
+ public string? Remarks { get; set; }
+
+ }
+
+ ///
+ /// 分销出库增加输入参数
+ ///
+ public class AddDistributorInvoiceInput : DistributorInvoiceBaseInput
+ {
+ ///
+ /// 软删除
+ ///
+ [Required(ErrorMessage = "软删除不能为空")]
+ public override bool IsDelete { get; set; }
+
+ }
+
+ ///
+ /// 分销出库删除输入参数
+ ///
+ public class DeleteDistributorInvoiceInput : BaseIdInput
+ {
+ }
+
+ ///
+ /// 分销出库更新输入参数
+ ///
+ public class UpdateDistributorInvoiceInput : DistributorInvoiceBaseInput
+ {
+ ///
+ /// 主键Id
+ ///
+ [Required(ErrorMessage = "主键Id不能为空")]
+ public long Id { get; set; }
+
+ }
+
+ ///
+ /// 分销出库主键查询输入参数
+ ///
+ public class QueryByIdDistributorInvoiceInput : DeleteDistributorInvoiceInput
+ {
+
+ }
diff --git a/Admin.NET/Admin.NET.Application/Service/DistributorInvoice/Dto/DistributorInvoiceOutput.cs b/Admin.NET/Admin.NET.Application/Service/DistributorInvoice/Dto/DistributorInvoiceOutput.cs
new file mode 100644
index 0000000..a414f5d
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Service/DistributorInvoice/Dto/DistributorInvoiceOutput.cs
@@ -0,0 +1,85 @@
+namespace Admin.NET.Application;
+
+///
+/// 分销出库输出参数
+///
+public class DistributorInvoiceOutput
+{
+ ///
+ /// 主键Id
+ ///
+ public long Id { get; set; }
+
+ ///
+ /// 仓库ID
+ ///
+ public long? WarehouseId { get; set; }
+
+ ///
+ /// 目标仓库ID
+ ///
+ public long? TargetWarehouseId { get; set; }
+
+ ///
+ /// 分销商ID
+ ///
+ public long? DistributorId { get; set; }
+
+ ///
+ /// 分销商
+ ///
+ public string? Distributor { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ public DateTime? StartDate { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string? Remarks { get; set; }
+
+ ///
+ /// 租户Id
+ ///
+ public long? TenantId { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ public DateTime? UpdateTime { get; set; }
+
+ ///
+ /// 创建者Id
+ ///
+ public long? CreateUserId { get; set; }
+
+ ///
+ /// 创建者姓名
+ ///
+ public string? CreateUserName { get; set; }
+
+ ///
+ /// 修改者Id
+ ///
+ public long? UpdateUserId { get; set; }
+
+ ///
+ /// 修改者姓名
+ ///
+ public string? UpdateUserName { get; set; }
+
+ ///
+ /// 软删除
+ ///
+ public bool IsDelete { get; set; }
+
+ }
+
+
diff --git a/Admin.NET/Admin.NET.Application/Service/Invoice/Dto/InvoiceDto.cs b/Admin.NET/Admin.NET.Application/Service/Invoice/Dto/InvoiceDto.cs
index ac5ed65..506300c 100644
--- a/Admin.NET/Admin.NET.Application/Service/Invoice/Dto/InvoiceDto.cs
+++ b/Admin.NET/Admin.NET.Application/Service/Invoice/Dto/InvoiceDto.cs
@@ -1,128 +1,134 @@
namespace Admin.NET.Application;
+///
+/// 发货通知单输出参数
+///
+public class InvoiceDto
+{
///
- /// 发货通知单输出参数
+ /// 主键Id
///
- public class InvoiceDto
- {
- ///
- /// 主键Id
- ///
- public long Id { get; set; }
-
- ///
- /// 单号
- ///
- public string? CodeNum { get; set; }
-
- ///
- /// 业务日期
- ///
- public DateTime? StartDate { get; set; }
-
- ///
- /// 业务类型
- ///
- public string BusinessType { get; set; }
-
- ///
- /// 客户
- ///
- public string Custom { get; set; }
-
- ///
- /// 仓库
- ///
- public string Warehouse { get; set; }
-
- ///
- /// 部门
- ///
- public string? Department { get; set; }
-
- ///
- /// 车牌号
- ///
- public string? CarNumber { get; set; }
-
- ///
- /// 停车位
- ///
- public string? ParkingSpace { get; set; }
-
- ///
- /// 业务员
- ///
- public string? Salesman { get; set; }
-
- ///
- /// 收货单位
- ///
- public string? Consignee { get; set; }
-
- ///
- /// 交货日期
- ///
- public DateTime? DeliveryDate { get; set; }
-
- ///
- /// 交货地址
- ///
- public string? DeliveryAddress { get; set; }
-
- ///
- /// 备注
- ///
- public string? Remarks { get; set; }
-
- ///
- /// 方案客户拓展
- ///
- public string? CustomExpand { get; set; }
-
- ///
- /// 发货拓展
- ///
- public string? SendOutExpand { get; set; }
-
- ///
- /// 租户Id
- ///
- public long? TenantId { get; set; }
-
- ///
- /// 创建时间
- ///
- public DateTime? CreateTime { get; set; }
-
- ///
- /// 更新时间
- ///
- public DateTime? UpdateTime { get; set; }
-
- ///
- /// 创建者Id
- ///
- public long? CreateUserId { get; set; }
-
- ///
- /// 创建者姓名
- ///
- public string? CreateUserName { get; set; }
-
- ///
- /// 修改者Id
- ///
- public long? UpdateUserId { get; set; }
-
- ///
- /// 修改者姓名
- ///
- public string? UpdateUserName { get; set; }
-
- ///
- /// 软删除
- ///
- public bool IsDelete { get; set; }
-
- }
+ public long Id { get; set; }
+
+ ///
+ /// 单号
+ ///
+ public string? CodeNum { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ public DateTime? StartDate { get; set; }
+
+ ///
+ /// 业务类型
+ ///
+ public string BusinessType { get; set; }
+
+ ///
+ /// 客户
+ ///
+ public string Custom { get; set; }
+
+ ///
+ /// 仓库
+ ///
+ public string Warehouse { get; set; }
+
+
+ ///
+ /// 仓库ID
+ ///
+ public long? WarehouseId { get; set; }
+
+ ///
+ /// 部门
+ ///
+ public string? Department { get; set; }
+
+ ///
+ /// 车牌号
+ ///
+ public string? CarNumber { get; set; }
+
+ ///
+ /// 停车位
+ ///
+ public string? ParkingSpace { get; set; }
+
+ ///
+ /// 业务员
+ ///
+ public string? Salesman { get; set; }
+
+ ///
+ /// 收货单位
+ ///
+ public string? Consignee { get; set; }
+
+ ///
+ /// 交货日期
+ ///
+ public DateTime? DeliveryDate { get; set; }
+
+ ///
+ /// 交货地址
+ ///
+ public string? DeliveryAddress { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string? Remarks { get; set; }
+
+ ///
+ /// 方案客户拓展
+ ///
+ public string? CustomExpand { get; set; }
+
+ ///
+ /// 发货拓展
+ ///
+ public string? SendOutExpand { get; set; }
+
+ ///
+ /// 租户Id
+ ///
+ public long? TenantId { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ public DateTime? UpdateTime { get; set; }
+
+ ///
+ /// 创建者Id
+ ///
+ public long? CreateUserId { get; set; }
+
+ ///
+ /// 创建者姓名
+ ///
+ public string? CreateUserName { get; set; }
+
+ ///
+ /// 修改者Id
+ ///
+ public long? UpdateUserId { get; set; }
+
+ ///
+ /// 修改者姓名
+ ///
+ public string? UpdateUserName { get; set; }
+
+ ///
+ /// 软删除
+ ///
+ public bool IsDelete { get; set; }
+
+}
diff --git a/Admin.NET/Admin.NET.Application/Service/Invoice/Dto/InvoiceInput.cs b/Admin.NET/Admin.NET.Application/Service/Invoice/Dto/InvoiceInput.cs
index e2e26f4..d7ed7c9 100644
--- a/Admin.NET/Admin.NET.Application/Service/Invoice/Dto/InvoiceInput.cs
+++ b/Admin.NET/Admin.NET.Application/Service/Invoice/Dto/InvoiceInput.cs
@@ -3,263 +3,273 @@ using System.ComponentModel.DataAnnotations;
namespace Admin.NET.Application;
+///
+/// 发货通知单基础输入参数
+///
+public class InvoiceBaseInput
+{
///
- /// 发货通知单基础输入参数
+ /// 单号
///
- public class InvoiceBaseInput
- {
- ///
- /// 单号
- ///
- public virtual string? CodeNum { get; set; }
-
- ///
- /// 业务日期
- ///
- public virtual DateTime? StartDate { get; set; }
-
- ///
- /// 业务类型
- ///
- public virtual string BusinessType { get; set; }
-
- ///
- /// 客户
- ///
- public virtual string Custom { get; set; }
-
- ///
- /// 仓库
- ///
- public virtual string Warehouse { get; set; }
-
- ///
- /// 部门
- ///
- public virtual string? Department { get; set; }
-
- ///
- /// 车牌号
- ///
- public virtual string? CarNumber { get; set; }
-
- ///
- /// 停车位
- ///
- public virtual string? ParkingSpace { get; set; }
-
- ///
- /// 业务员
- ///
- public virtual string? Salesman { get; set; }
-
- ///
- /// 收货单位
- ///
- public virtual string? Consignee { get; set; }
-
- ///
- /// 交货日期
- ///
- public virtual DateTime? DeliveryDate { get; set; }
-
- ///
- /// 交货地址
- ///
- public virtual string? DeliveryAddress { get; set; }
-
- ///
- /// 备注
- ///
- public virtual string? Remarks { get; set; }
-
- ///
- /// 方案客户拓展
- ///
- public virtual string? CustomExpand { get; set; }
-
- ///
- /// 发货拓展
- ///
- public virtual string? SendOutExpand { get; set; }
-
- ///
- /// 租户Id
- ///
- public virtual long? TenantId { get; set; }
-
- ///
- /// 创建时间
- ///
- public virtual DateTime? CreateTime { get; set; }
-
- ///
- /// 更新时间
- ///
- public virtual DateTime? UpdateTime { get; set; }
-
- ///
- /// 创建者Id
- ///
- public virtual long? CreateUserId { get; set; }
-
- ///
- /// 创建者姓名
- ///
- public virtual string? CreateUserName { get; set; }
-
- ///
- /// 修改者Id
- ///
- public virtual long? UpdateUserId { get; set; }
-
- ///
- /// 修改者姓名
- ///
- public virtual string? UpdateUserName { get; set; }
-
- ///
- /// 软删除
- ///
- public virtual bool IsDelete { get; set; }
-
- }
+ public virtual string? CodeNum { get; set; }
///
- /// 发货通知单分页查询输入参数
+ /// 业务日期
///
- public class InvoiceInput : BasePageInput
- {
- ///
- /// 关键字查询
- ///
- public string? SearchKey { get; set; }
-
- ///
- /// 单号
- ///
- public string? CodeNum { get; set; }
-
- ///
- /// 业务日期
- ///
- public DateTime? StartDate { get; set; }
-
- ///
- /// 业务日期范围
- ///
- public List StartDateRange { get; set; }
- ///
- /// 业务类型
- ///
- public string? BusinessType { get; set; }
-
- ///
- /// 客户
- ///
- public string? Custom { get; set; }
-
- ///
- /// 仓库
- ///
- public string? Warehouse { get; set; }
-
- ///
- /// 部门
- ///
- public string? Department { get; set; }
-
- ///
- /// 车牌号
- ///
- public string? CarNumber { get; set; }
-
- ///
- /// 停车位
- ///
- public string? ParkingSpace { get; set; }
-
- ///
- /// 业务员
- ///
- public string? Salesman { get; set; }
-
- ///
- /// 收货单位
- ///
- public string? Consignee { get; set; }
-
- ///
- /// 交货日期
- ///
- public DateTime? DeliveryDate { get; set; }
-
- ///
- /// 交货日期范围
- ///
- public List DeliveryDateRange { get; set; }
- ///
- /// 交货地址
- ///
- public string? DeliveryAddress { get; set; }
-
- }
+ public virtual DateTime? StartDate { get; set; }
///
- /// 发货通知单增加输入参数
+ /// 业务类型
///
- public class AddInvoiceInput : InvoiceBaseInput
- {
- ///
- /// 业务类型
- ///
- [Required(ErrorMessage = "业务类型不能为空")]
- public override string BusinessType { get; set; }
-
- ///
- /// 客户
- ///
- [Required(ErrorMessage = "客户不能为空")]
- public override string Custom { get; set; }
-
- ///
- /// 仓库
- ///
- [Required(ErrorMessage = "仓库不能为空")]
- public override string Warehouse { get; set; }
-
- ///
- /// 软删除
- ///
- [Required(ErrorMessage = "软删除不能为空")]
- public override bool IsDelete { get; set; }
-
- }
+ public virtual string BusinessType { get; set; }
///
- /// 发货通知单删除输入参数
+ /// 客户
///
- public class DeleteInvoiceInput : BaseIdInput
- {
- }
+ public virtual string Custom { get; set; }
///
- /// 发货通知单更新输入参数
+ /// 仓库
///
- public class UpdateInvoiceInput : InvoiceBaseInput
- {
- ///
- /// 主键Id
- ///
- [Required(ErrorMessage = "主键Id不能为空")]
- public long Id { get; set; }
-
- }
+ public virtual string Warehouse { get; set; }
///
- /// 发货通知单主键查询输入参数
+ /// 仓库ID
///
- public class QueryByIdInvoiceInput : DeleteInvoiceInput
- {
+ public long? WarehouseId { get; set; }
- }
+ ///
+ /// 部门
+ ///
+ public virtual string? Department { get; set; }
+
+ ///
+ /// 车牌号
+ ///
+ public virtual string? CarNumber { get; set; }
+
+ ///
+ /// 停车位
+ ///
+ public virtual string? ParkingSpace { get; set; }
+
+ ///
+ /// 业务员
+ ///
+ public virtual string? Salesman { get; set; }
+
+ ///
+ /// 收货单位
+ ///
+ public virtual string? Consignee { get; set; }
+
+ ///
+ /// 交货日期
+ ///
+ public virtual DateTime? DeliveryDate { get; set; }
+
+ ///
+ /// 交货地址
+ ///
+ public virtual string? DeliveryAddress { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public virtual string? Remarks { get; set; }
+
+ ///
+ /// 方案客户拓展
+ ///
+ public virtual string? CustomExpand { get; set; }
+
+ ///
+ /// 发货拓展
+ ///
+ public virtual string? SendOutExpand { get; set; }
+
+ ///
+ /// 租户Id
+ ///
+ public virtual long? TenantId { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public virtual DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ public virtual DateTime? UpdateTime { get; set; }
+
+ ///
+ /// 创建者Id
+ ///
+ public virtual long? CreateUserId { get; set; }
+
+ ///
+ /// 创建者姓名
+ ///
+ public virtual string? CreateUserName { get; set; }
+
+ ///
+ /// 修改者Id
+ ///
+ public virtual long? UpdateUserId { get; set; }
+
+ ///
+ /// 修改者姓名
+ ///
+ public virtual string? UpdateUserName { get; set; }
+
+ ///
+ /// 软删除
+ ///
+ public virtual bool IsDelete { get; set; }
+
+}
+
+///
+/// 发货通知单分页查询输入参数
+///
+public class InvoiceInput : BasePageInput
+{
+ ///
+ /// 关键字查询
+ ///
+ public string? SearchKey { get; set; }
+
+ ///
+ /// 单号
+ ///
+ public string? CodeNum { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ public DateTime? StartDate { get; set; }
+
+ ///
+ /// 业务日期范围
+ ///
+ public List StartDateRange { get; set; }
+ ///
+ /// 业务类型
+ ///
+ public string? BusinessType { get; set; }
+
+ ///
+ /// 客户
+ ///
+ public string? Custom { get; set; }
+
+ ///
+ /// 仓库
+ ///
+ public string? Warehouse { get; set; }
+
+ ///
+ /// 仓库ID
+ ///
+ public long? WarehouseId { get; set; }
+
+ ///
+ /// 部门
+ ///
+ public string? Department { get; set; }
+
+ ///
+ /// 车牌号
+ ///
+ public string? CarNumber { get; set; }
+
+ ///
+ /// 停车位
+ ///
+ public string? ParkingSpace { get; set; }
+
+ ///
+ /// 业务员
+ ///
+ public string? Salesman { get; set; }
+
+ ///
+ /// 收货单位
+ ///
+ public string? Consignee { get; set; }
+
+ ///
+ /// 交货日期
+ ///
+ public DateTime? DeliveryDate { get; set; }
+
+ ///
+ /// 交货日期范围
+ ///
+ public List DeliveryDateRange { get; set; }
+ ///
+ /// 交货地址
+ ///
+ public string? DeliveryAddress { get; set; }
+
+}
+
+///
+/// 发货通知单增加输入参数
+///
+public class AddInvoiceInput : InvoiceBaseInput
+{
+ ///
+ /// 业务类型
+ ///
+ [Required(ErrorMessage = "业务类型不能为空")]
+ public override string BusinessType { get; set; }
+
+ ///
+ /// 客户
+ ///
+ [Required(ErrorMessage = "客户不能为空")]
+ public override string Custom { get; set; }
+
+ ///
+ /// 仓库
+ ///
+ [Required(ErrorMessage = "仓库不能为空")]
+ public override string Warehouse { get; set; }
+
+ ///
+ /// 软删除
+ ///
+ [Required(ErrorMessage = "软删除不能为空")]
+ public override bool IsDelete { get; set; }
+
+}
+
+///
+/// 发货通知单删除输入参数
+///
+public class DeleteInvoiceInput : BaseIdInput
+{
+}
+
+///
+/// 发货通知单更新输入参数
+///
+public class UpdateInvoiceInput : InvoiceBaseInput
+{
+ ///
+ /// 主键Id
+ ///
+ [Required(ErrorMessage = "主键Id不能为空")]
+ public long Id { get; set; }
+
+}
+
+///
+/// 发货通知单主键查询输入参数
+///
+public class QueryByIdInvoiceInput : DeleteInvoiceInput
+{
+
+}
diff --git a/Admin.NET/Admin.NET.Application/Service/Invoice/Dto/InvoiceOutput.cs b/Admin.NET/Admin.NET.Application/Service/Invoice/Dto/InvoiceOutput.cs
index 04d9b41..eab0523 100644
--- a/Admin.NET/Admin.NET.Application/Service/Invoice/Dto/InvoiceOutput.cs
+++ b/Admin.NET/Admin.NET.Application/Service/Invoice/Dto/InvoiceOutput.cs
@@ -34,7 +34,12 @@ public class InvoiceOutput
/// 仓库
///
public string Warehouse { get; set; }
-
+
+ ///
+ /// 仓库ID
+ ///
+ public long? WarehouseId { get; set; }
+
///
/// 部门
///
diff --git a/Admin.NET/Admin.NET.Application/Service/Invoice/InvoiceService.cs b/Admin.NET/Admin.NET.Application/Service/Invoice/InvoiceService.cs
index 0a590bd..46f9470 100644
--- a/Admin.NET/Admin.NET.Application/Service/Invoice/InvoiceService.cs
+++ b/Admin.NET/Admin.NET.Application/Service/Invoice/InvoiceService.cs
@@ -2,6 +2,8 @@
using Admin.NET.Application.Const;
using Admin.NET.Application.Entity;
using Microsoft.AspNetCore.Http;
+using NewLife.Reflection;
+
namespace Admin.NET.Application;
///
/// 发货通知单服务
@@ -10,27 +12,27 @@ namespace Admin.NET.Application;
public class InvoiceService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _rep;
- private readonly MaterialsService _materialsService;
- private readonly SysUnitService _sysUnitService;
private readonly PrintCodeDetailService _codeDetailService;
private readonly ProductRetrospectService _productRetrospect;
private readonly ReportTableService _reportTableService;
+ private readonly OutboundService _outboundService;
+ private readonly OutboundDetailService _outboundDetailService;
private readonly UserManager _userManager;
public InvoiceService(SqlSugarRepository rep,
UserManager userManager,
- MaterialsService materialsService,
- SysUnitService sysUnitService,
PrintCodeDetailService codeDetailService,
ReportTableService reportTableService,
+ OutboundService outboundService,
+ OutboundDetailService outboundDetailService,
ProductRetrospectService productRetrospect)
{
_rep = rep;
_userManager = userManager;
- _materialsService = materialsService;
- _sysUnitService = sysUnitService;
_codeDetailService = codeDetailService;
_productRetrospect = productRetrospect;
_reportTableService = reportTableService;
+ _outboundService = outboundService;
+ _outboundDetailService = outboundDetailService;
}
///
@@ -168,50 +170,117 @@ public class InvoiceService : IDynamicApiController, ITransient
throw Oops.Oh(ErrorCodeEnum.xg1002);
}
- var repeatCodes = await _codeDetailService.GetRepeat(input.CodeDatas);
-
+
var invoice = await Detail(new QueryByIdInvoiceInput() { Id = input.WarehousingTableId.Value });
if (invoice == null)
{
throw Oops.Oh(ErrorCodeEnum.xg1002);
}
+ var codes = string.IsNullOrEmpty(input.CodeDatas[0].BarCode) ? input.CodeDatas.ConvertAll(a => a.QrCode) : input.CodeDatas.ConvertAll(a => a.BarCode);
+ var details = (await _codeDetailService.List()).FindAll(a => !string.IsNullOrEmpty(a.FatherCode));
+ var repeatCodes = details.Where(a => !a.IsDelete && codes.Any(b => b == a.Code)).ToList();
+ if (repeatCodes == null || repeatCodes.Count < 1)
+ {
+ throw Oops.Oh(ErrorCodeEnum.xg1002);
+ }
+
+ var userId = _userManager.UserId;
+ var userName = _userManager.RealName;
+ var addOutbound = new AddOutboundInput()
+ {
+ BusinessType = invoice.BusinessType,
+ CodeNum = invoice.CodeNum,
+ Consignee = invoice.Consignee,
+ CreateTime = invoice.CreateTime,
+ CreateUserId = userId,
+ CreateUserName = userName,
+ SourceCodeNum = invoice.Id.ToString(),
+ StartDate = invoice.StartDate,
+ State = 0,
+ Warehouse = invoice.Warehouse,
+ WarehouseId = invoice.WarehouseId,
+ TenantId = invoice.TenantId,
+ };
+ var outbound = await _outboundService.Add(addOutbound);
+ var codeIds = new List();
+ var list = new List();
+ foreach (var c1 in repeatCodes)
+ {
+ codeIds.Add(c1.Id);
+ c1.WarehouseID = null;
+ //c1.FatherCode = null;
+ //c1.FatherId = null;
+ await _codeDetailService.UpdateByEntity(c1.Adapt());
+ list.Add(c1);
+ var child1 = details.Find(a => a.FatherCode == c1.Code);
+ if (child1!=null)
+ {
+ child1.WarehouseID = null;
+ await _codeDetailService.UpdateByEntity(child1.Adapt());
+ list.Add(child1);
- //var units = await _sysUnitService.ListByGroupId(materials.UnitGroupId);
- //var baseUnit = units.FirstOrDefault().Name;
- //var userId = _userManager.UserId;
- //var userName = _userManager.RealName;
- //var topDatas = input.CodeDatas.FindAll(a => string.IsNullOrEmpty(a.FatherCode));
+ var child2 = details.Find(a => a.FatherCode == c1.Code);
+ if (child2 != null)
+ {
+ child2.WarehouseID = null;
+ await _codeDetailService.UpdateByEntity(child2.Adapt());
+ list.Add(child2);
- //foreach (var dic in list)
- //{
- // var item = dic.Key;
- // var retrospect1 = new AddProductRetrospectInput()
- // {
- // BaseCount = item.BaseCount,
- // BaseUnit = baseUnit,
- // Batch = warehousing.Batch,
- // BusinessType = "生产任务单",
- // CodeType = item.CodeName,
- // Department = warehousing.ProductionLine,
- // //WarehouseID = input.WarehouseId,
- // WarehousingDate = DateTime.Now,
- // Count = 1,
- // CreateTime = DateTime.Now,
- // ScanCodeTime = DateTime.Now,
- // CreateUserId = userId,
- // CreateUserName = userName,
- // MaterialsId = dic.Value,
- // OddNumber = warehousing.OddNumber,
- // Receipt = "汇报单",
- // SourceId = warehousing.Id,
- // Unit = item.Unit,
- // Name = materials.Name,
- // Code = item.Code
- // };//Destination = warehousing.Supplier,
- // await _productRetrospect.Add(retrospect1);
- //}
+ var child3 = details.Find(a => a.FatherCode == c1.Code);
+ if (child3 != null)
+ {
+ child3.WarehouseID = null;
+ await _codeDetailService.UpdateByEntity(child3.Adapt());
+ list.Add(child3);
+
+ var child4 = details.Find(a => a.FatherCode == c1.Code);
+ if (child4 != null)
+ {
+ child4.WarehouseID = null;
+ await _codeDetailService.UpdateByEntity(child4.Adapt());
+ list.Add(child4);
+ }
+ }
+ }
+ }
+
+ }
+
+ var addOutboundDetail = new AddOutboundDetailInput() { CodeTableIds = string.Join(",", codeIds), OutboundId = outbound };
+ await _outboundDetailService.Add(addOutboundDetail);
+
+ foreach (var item in list)
+ {
+ var report = await GetReport(item.ReportTableId);
+ var retrospect1 = new AddProductRetrospectInput()
+ {
+ 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);
+ }
//var report = await _reportTableService.GetBySource(input.WarehousingTableId);
//if (report == null)
@@ -222,8 +291,27 @@ public class InvoiceService : IDynamicApiController, ITransient
}
-
-
+ static Dictionary reportDic = new Dictionary();
+ private async Task GetReport(long? reportId)
+ {
+ if (reportId == null)
+ {
+ return new ReportTable();
+ }
+ if (reportDic.ContainsKey(reportId.Value))
+ {
+ return reportDic[reportId.Value];
+ }
+ var report = await _reportTableService.GetBySource(reportId);
+ if (report == null)
+ {
+ return new ReportTable();
+ }
+ else
+ {
+ return report;
+ }
+ }
}
diff --git a/Admin.NET/Admin.NET.Application/Service/Outbound/Dto/OutboundDto.cs b/Admin.NET/Admin.NET.Application/Service/Outbound/Dto/OutboundDto.cs
index d9a5378..b9deac8 100644
--- a/Admin.NET/Admin.NET.Application/Service/Outbound/Dto/OutboundDto.cs
+++ b/Admin.NET/Admin.NET.Application/Service/Outbound/Dto/OutboundDto.cs
@@ -1,103 +1,107 @@
namespace Admin.NET.Application;
+///
+/// 出库单输出参数
+///
+public class OutboundDto
+{
///
- /// 出库单输出参数
+ /// 主键Id
///
- public class OutboundDto
- {
- ///
- /// 主键Id
- ///
- public long Id { get; set; }
-
- ///
- /// 单号
- ///
- public string? CodeNum { get; set; }
-
- ///
- /// 来源单号
- ///
- public string SourceCodeNum { get; set; }
-
- ///
- /// 业务日期
- ///
- public string? StartDate { get; set; }
-
- ///
- /// 状态
- ///
- public int? State { get; set; }
-
- ///
- /// 业务类型
- ///
- public string? BusinessType { get; set; }
-
- ///
- /// 收货单位
- ///
- public string Consignee { get; set; }
-
- ///
- /// 审核人ID
- ///
- public long? ExaminerId { get; set; }
-
- ///
- /// 出库单整型拓展字段
- ///
- public int? OutboundExpandInt { get; set; }
-
- ///
- /// 出库单字符串拓展字段
- ///
- public string? OutboundExpandString { get; set; }
-
- ///
- /// 租户Id
- ///
- public long? TenantId { get; set; }
-
- ///
- /// 创建时间
- ///
- public DateTime? CreateTime { get; set; }
-
- ///
- /// 更新时间
- ///
- public DateTime? UpdateTime { get; set; }
-
- ///
- /// 创建者Id
- ///
- public long? CreateUserId { get; set; }
-
- ///
- /// 创建者姓名
- ///
- public string? CreateUserName { get; set; }
-
- ///
- /// 修改者Id
- ///
- public long? UpdateUserId { get; set; }
-
- ///
- /// 修改者姓名
- ///
- public string? UpdateUserName { get; set; }
-
- ///
- /// 软删除
- ///
- public bool IsDelete { get; set; }
-
- ///
- /// 仓库
- ///
- public string? Warehouse { get; set; }
-
- }
+ public long Id { get; set; }
+
+ ///
+ /// 单号
+ ///
+ public string? CodeNum { get; set; }
+
+ ///
+ /// 来源单号
+ ///
+ public string SourceCodeNum { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ public DateTime? StartDate { get; set; }
+
+ ///
+ /// 状态
+ ///
+ public int? State { get; set; }
+
+ ///
+ /// 业务类型
+ ///
+ public string? BusinessType { get; set; }
+
+ ///
+ /// 收货单位
+ ///
+ public string Consignee { get; set; }
+
+ ///
+ /// 审核人ID
+ ///
+ public long? ExaminerId { get; set; }
+
+ ///
+ /// 出库单整型拓展字段
+ ///
+ public int? OutboundExpandInt { get; set; }
+
+ ///
+ /// 出库单字符串拓展字段
+ ///
+ public string? OutboundExpandString { get; set; }
+
+ ///
+ /// 租户Id
+ ///
+ public long? TenantId { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ public DateTime? UpdateTime { get; set; }
+
+ ///
+ /// 创建者Id
+ ///
+ public long? CreateUserId { get; set; }
+
+ ///
+ /// 创建者姓名
+ ///
+ public string? CreateUserName { get; set; }
+
+ ///
+ /// 修改者Id
+ ///
+ public long? UpdateUserId { get; set; }
+
+ ///
+ /// 修改者姓名
+ ///
+ public string? UpdateUserName { get; set; }
+
+ ///
+ /// 软删除
+ ///
+ public bool IsDelete { get; set; }
+
+ ///
+ /// 仓库
+ ///
+ public string? Warehouse { get; set; }
+
+ ///
+ /// 仓库ID
+ ///
+ public long? WarehouseId { get; set; }
+}
diff --git a/Admin.NET/Admin.NET.Application/Service/Outbound/Dto/OutboundInput.cs b/Admin.NET/Admin.NET.Application/Service/Outbound/Dto/OutboundInput.cs
index 2b2930d..539ca64 100644
--- a/Admin.NET/Admin.NET.Application/Service/Outbound/Dto/OutboundInput.cs
+++ b/Admin.NET/Admin.NET.Application/Service/Outbound/Dto/OutboundInput.cs
@@ -3,198 +3,202 @@ using System.ComponentModel.DataAnnotations;
namespace Admin.NET.Application;
+///
+/// 出库单基础输入参数
+///
+public class OutboundBaseInput
+{
///
- /// 出库单基础输入参数
+ /// 单号
///
- public class OutboundBaseInput
- {
- ///
- /// 单号
- ///
- public virtual string? CodeNum { get; set; }
-
- ///
- /// 来源单号
- ///
- public virtual string SourceCodeNum { get; set; }
-
- ///
- /// 业务日期
- ///
- public virtual string? StartDate { get; set; }
-
- ///
- /// 状态
- ///
- public virtual int? State { get; set; }
-
- ///
- /// 业务类型
- ///
- public virtual string? BusinessType { get; set; }
-
- ///
- /// 收货单位
- ///
- public virtual string Consignee { get; set; }
-
- ///
- /// 审核人ID
- ///
- public virtual long? ExaminerId { get; set; }
-
- ///
- /// 出库单整型拓展字段
- ///
- public virtual int? OutboundExpandInt { get; set; }
-
- ///
- /// 出库单字符串拓展字段
- ///
- public virtual string? OutboundExpandString { get; set; }
-
- ///
- /// 租户Id
- ///
- public virtual long? TenantId { get; set; }
-
- ///
- /// 创建时间
- ///
- public virtual DateTime? CreateTime { get; set; }
-
- ///
- /// 更新时间
- ///
- public virtual DateTime? UpdateTime { get; set; }
-
- ///
- /// 创建者Id
- ///
- public virtual long? CreateUserId { get; set; }
-
- ///
- /// 创建者姓名
- ///
- public virtual string? CreateUserName { get; set; }
-
- ///
- /// 修改者Id
- ///
- public virtual long? UpdateUserId { get; set; }
-
- ///
- /// 修改者姓名
- ///
- public virtual string? UpdateUserName { get; set; }
-
- ///
- /// 软删除
- ///
- public virtual bool IsDelete { get; set; }
-
- ///
- /// 仓库
- ///
- public virtual string? Warehouse { get; set; }
-
- }
+ public virtual string? CodeNum { get; set; }
///
- /// 出库单分页查询输入参数
+ /// 来源单号
///
- public class OutboundInput : BasePageInput
- {
- ///
- /// 关键字查询
- ///
- public string? SearchKey { get; set; }
-
- ///
- /// 单号
- ///
- public string? CodeNum { get; set; }
-
- ///
- /// 来源单号
- ///
- public string? SourceCodeNum { get; set; }
-
- ///
- /// 业务日期
- ///
- public string? StartDate { get; set; }
-
- ///
- /// 状态
- ///
- public int? State { get; set; }
-
- ///
- /// 业务类型
- ///
- public string? BusinessType { get; set; }
-
- ///
- /// 收货单位
- ///
- public string? Consignee { get; set; }
-
- ///
- /// 审核人ID
- ///
- public long? ExaminerId { get; set; }
- }
+ public virtual string SourceCodeNum { get; set; }
///
- /// 出库单增加输入参数
+ /// 业务日期
///
- public class AddOutboundInput : OutboundBaseInput
- {
- ///
- /// 来源单号
- ///
- [Required(ErrorMessage = "来源单号不能为空")]
- public override string SourceCodeNum { get; set; }
-
- ///
- /// 收货单位
- ///
- [Required(ErrorMessage = "收货单位不能为空")]
- public override string Consignee { get; set; }
-
- ///
- /// 软删除
- ///
- [Required(ErrorMessage = "软删除不能为空")]
- public override bool IsDelete { get; set; }
-
- }
+ public virtual DateTime? StartDate { get; set; }
///
- /// 出库单删除输入参数
+ /// 状态
///
- public class DeleteOutboundInput : BaseIdInput
- {
- }
+ public virtual int? State { get; set; }
///
- /// 出库单更新输入参数
+ /// 业务类型
///
- public class UpdateOutboundInput : OutboundBaseInput
- {
- ///
- /// 主键Id
- ///
- [Required(ErrorMessage = "主键Id不能为空")]
- public long Id { get; set; }
-
- }
+ public virtual string? BusinessType { get; set; }
///
- /// 出库单主键查询输入参数
+ /// 收货单位
///
- public class QueryByIdOutboundInput : DeleteOutboundInput
- {
+ public virtual string Consignee { get; set; }
- }
+ ///
+ /// 审核人ID
+ ///
+ public virtual long? ExaminerId { get; set; }
+
+ ///
+ /// 出库单整型拓展字段
+ ///
+ public virtual int? OutboundExpandInt { get; set; }
+
+ ///
+ /// 出库单字符串拓展字段
+ ///
+ public virtual string? OutboundExpandString { get; set; }
+
+ ///
+ /// 租户Id
+ ///
+ public virtual long? TenantId { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public virtual DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ public virtual DateTime? UpdateTime { get; set; }
+
+ ///
+ /// 创建者Id
+ ///
+ public virtual long? CreateUserId { get; set; }
+
+ ///
+ /// 创建者姓名
+ ///
+ public virtual string? CreateUserName { get; set; }
+
+ ///
+ /// 修改者Id
+ ///
+ public virtual long? UpdateUserId { get; set; }
+
+ ///
+ /// 修改者姓名
+ ///
+ public virtual string? UpdateUserName { get; set; }
+
+ ///
+ /// 软删除
+ ///
+ public virtual bool IsDelete { get; set; }
+
+ ///
+ /// 仓库
+ ///
+ public virtual string? Warehouse { get; set; }
+
+ ///
+ /// 仓库ID
+ ///
+ public long? WarehouseId { get; set; }
+}
+
+///
+/// 出库单分页查询输入参数
+///
+public class OutboundInput : BasePageInput
+{
+ ///
+ /// 关键字查询
+ ///
+ public string? SearchKey { get; set; }
+
+ ///
+ /// 单号
+ ///
+ public string? CodeNum { get; set; }
+
+ ///
+ /// 来源单号
+ ///
+ public string? SourceCodeNum { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ public DateTime? StartDate { get; set; }
+
+ ///
+ /// 状态
+ ///
+ public int? State { get; set; }
+
+ ///
+ /// 业务类型
+ ///
+ public string? BusinessType { get; set; }
+
+ ///
+ /// 收货单位
+ ///
+ public string? Consignee { get; set; }
+
+ ///
+ /// 审核人ID
+ ///
+ public long? ExaminerId { get; set; }
+}
+
+///
+/// 出库单增加输入参数
+///
+public class AddOutboundInput : OutboundBaseInput
+{
+ ///
+ /// 来源单号
+ ///
+ [Required(ErrorMessage = "来源单号不能为空")]
+ public override string SourceCodeNum { get; set; }
+
+ ///
+ /// 收货单位
+ ///
+ [Required(ErrorMessage = "收货单位不能为空")]
+ public override string Consignee { get; set; }
+
+ ///
+ /// 软删除
+ ///
+ [Required(ErrorMessage = "软删除不能为空")]
+ public override bool IsDelete { get; set; }
+
+}
+
+///
+/// 出库单删除输入参数
+///
+public class DeleteOutboundInput : BaseIdInput
+{
+}
+
+///
+/// 出库单更新输入参数
+///
+public class UpdateOutboundInput : OutboundBaseInput
+{
+ ///
+ /// 主键Id
+ ///
+ [Required(ErrorMessage = "主键Id不能为空")]
+ public long Id { get; set; }
+
+}
+
+///
+/// 出库单主键查询输入参数
+///
+public class QueryByIdOutboundInput : DeleteOutboundInput
+{
+
+}
diff --git a/Admin.NET/Admin.NET.Application/Service/Outbound/Dto/OutboundOutput.cs b/Admin.NET/Admin.NET.Application/Service/Outbound/Dto/OutboundOutput.cs
index 7458f22..65ecf59 100644
--- a/Admin.NET/Admin.NET.Application/Service/Outbound/Dto/OutboundOutput.cs
+++ b/Admin.NET/Admin.NET.Application/Service/Outbound/Dto/OutboundOutput.cs
@@ -9,97 +9,102 @@ public class OutboundOutput
/// 主键Id
///
public long Id { get; set; }
-
+
///
/// 单号
///
public string? CodeNum { get; set; }
-
+
///
/// 来源单号
///
public string SourceCodeNum { get; set; }
-
+
///
/// 业务日期
///
- public string? StartDate { get; set; }
-
+ public DateTime? StartDate { get; set; }
+
///
/// 状态
///
public int? State { get; set; }
-
+
///
/// 业务类型
///
public string? BusinessType { get; set; }
-
+
///
/// 收货单位
///
public string Consignee { get; set; }
-
+
///
/// 审核人ID
///
public long? ExaminerId { get; set; }
-
+
///
/// 出库单整型拓展字段
///
public int? OutboundExpandInt { get; set; }
-
+
///
/// 出库单字符串拓展字段
///
public string? OutboundExpandString { get; set; }
-
+
///
/// 租户Id
///
public long? TenantId { get; set; }
-
+
///
/// 创建时间
///
public DateTime? CreateTime { get; set; }
-
+
///
/// 更新时间
///
public DateTime? UpdateTime { get; set; }
-
+
///
/// 创建者Id
///
public long? CreateUserId { get; set; }
-
+
///
/// 创建者姓名
///
public string? CreateUserName { get; set; }
-
+
///
/// 修改者Id
///
public long? UpdateUserId { get; set; }
-
+
///
/// 修改者姓名
///
public string? UpdateUserName { get; set; }
-
+
///
/// 软删除
///
public bool IsDelete { get; set; }
-
+
///
/// 仓库
///
public string? Warehouse { get; set; }
-
- }
-
+
+ ///
+ /// 仓库ID
+ ///
+ public long? WarehouseId { get; set; }
+
+}
+
diff --git a/Admin.NET/Admin.NET.Application/Service/Outbound/OutboundService.cs b/Admin.NET/Admin.NET.Application/Service/Outbound/OutboundService.cs
index 6d2da8a..600b00e 100644
--- a/Admin.NET/Admin.NET.Application/Service/Outbound/OutboundService.cs
+++ b/Admin.NET/Admin.NET.Application/Service/Outbound/OutboundService.cs
@@ -2,6 +2,8 @@
using Admin.NET.Application.Const;
using Admin.NET.Application.Entity;
using Microsoft.AspNetCore.Http;
+using Nest;
+
namespace Admin.NET.Application;
///
/// 出库单服务
@@ -10,9 +12,13 @@ namespace Admin.NET.Application;
public class OutboundService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _rep;
- public OutboundService(SqlSugarRepository rep)
+ private readonly OutboundDetailService _outboundDetailService;
+ private readonly PrintCodeDetailService _codeDetailService;
+ public OutboundService(SqlSugarRepository rep, OutboundDetailService outboundDetailService, PrintCodeDetailService codeDetailService)
{
_rep = rep;
+ _outboundDetailService = outboundDetailService;
+ _codeDetailService = codeDetailService;
}
///
@@ -28,13 +34,11 @@ public class OutboundService : IDynamicApiController, ITransient
.WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
u.CodeNum.Contains(input.SearchKey.Trim())
|| u.SourceCodeNum.Contains(input.SearchKey.Trim())
- || u.StartDate.Contains(input.SearchKey.Trim())
|| u.BusinessType.Contains(input.SearchKey.Trim())
|| u.Consignee.Contains(input.SearchKey.Trim())
)
.WhereIF(!string.IsNullOrWhiteSpace(input.CodeNum), u => u.CodeNum.Contains(input.CodeNum.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.SourceCodeNum), u => u.SourceCodeNum.Contains(input.SourceCodeNum.Trim()))
- .WhereIF(!string.IsNullOrWhiteSpace(input.StartDate), u => u.StartDate.Contains(input.StartDate.Trim()))
.WhereIF(input.State>0, u => u.State == input.State)
.WhereIF(!string.IsNullOrWhiteSpace(input.BusinessType), u => u.BusinessType.Contains(input.BusinessType.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Consignee), u => u.Consignee.Contains(input.Consignee.Trim()))
@@ -108,7 +112,74 @@ public class OutboundService : IDynamicApiController, ITransient
return await _rep.AsQueryable().Where(a => !a.IsDelete).Select().ToListAsync();
}
+ ///
+ /// 获取出库单
+ ///
+ ///
+ ///
+ [HttpGet]
+ [ApiDescriptionSettings(Name = "GetOutboundDetail")]
+ public async Task> GetOutboundDetail([FromQuery] QueryByIdOutboundInput input)
+ {
+ var outbound = await _outboundDetailService.GetByOutboundId(input.Id);
+ if (string.IsNullOrEmpty(outbound.CodeTableIds))
+ {
+ throw Oops.Oh(ErrorCodeEnum.xg1002);
+ }
+ var result = new List();
+ var details = await _codeDetailService.List();
+ if (details == null || details.Count < 1)
+ {
+ return result;
+ }
+ var ids = outbound.CodeTableIds.Split(',').Select(a => Convert.ToInt64(a)).ToList();
+ //var printDetails = details.FindAll(a => ids.Contains(a.Id));
+ //if (printDetails.Count < 1)
+ //{
+ // return result;
+ //}
+ var father = details.FindAll(a => ids.Contains(a.Id));
+ foreach (var item in father)
+ {
+ var treeData1 = item.Adapt();
+ var list1 = details.FindAll(a => a.FatherId == item.Id);
+ if (list1.Count > 0)
+ {
+ treeData1.Children = new List();
+ treeData1.HasChildren = false;
+ foreach (var dt in list1)
+ {
+ var list2 = details.FindAll(a => a.FatherId == dt.Id);
+ var treeData2 = dt.Adapt();
+ if (list2.Count > 0)
+ {
+ treeData2.Children = new List();
+ treeData2.HasChildren = false;
+ foreach (var dt3 in list2)
+ {
+ var list3 = details.FindAll(a => a.FatherId == dt3.Id);
+ var treeData3 = dt3.Adapt();
+ if (list3.Count > 0)
+ {
+ treeData3.Children = new List();
+ treeData3.HasChildren = false;
+ foreach (var dt4 in list3)
+ {
+ var treeData4 = dt4.Adapt();
+ treeData3.Children.Add(treeData4);
+ }
+ }
+ treeData2.Children.Add(treeData3);
+ }
+ }
+ treeData1.Children.Add(treeData2);
+ }
+ }
+ result.Add(treeData1);
+ }
+ return result;
+ }
diff --git a/Admin.NET/Admin.NET.Application/Service/OutboundDetail/Dto/OutboundDetailDto.cs b/Admin.NET/Admin.NET.Application/Service/OutboundDetail/Dto/OutboundDetailDto.cs
new file mode 100644
index 0000000..1e03cdf
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Service/OutboundDetail/Dto/OutboundDetailDto.cs
@@ -0,0 +1,23 @@
+namespace Admin.NET.Application;
+
+ ///
+ /// 出库详细输出参数
+ ///
+ public class OutboundDetailDto
+ {
+ ///
+ /// 主键Id
+ ///
+ public long Id { get; set; }
+
+ ///
+ /// 出库单ID
+ ///
+ public long? OutboundId { get; set; }
+
+ ///
+ /// 条码ID列表
+ ///
+ public string? CodeTableIds { get; set; }
+
+ }
diff --git a/Admin.NET/Admin.NET.Application/Service/OutboundDetail/Dto/OutboundDetailInput.cs b/Admin.NET/Admin.NET.Application/Service/OutboundDetail/Dto/OutboundDetailInput.cs
new file mode 100644
index 0000000..054cd9b
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Service/OutboundDetail/Dto/OutboundDetailInput.cs
@@ -0,0 +1,78 @@
+using Admin.NET.Core;
+using System.ComponentModel.DataAnnotations;
+
+namespace Admin.NET.Application;
+
+ ///
+ /// 出库详细基础输入参数
+ ///
+ public class OutboundDetailBaseInput
+ {
+ ///
+ /// 出库单ID
+ ///
+ public virtual long? OutboundId { get; set; }
+
+ ///
+ /// 条码ID列表
+ ///
+ public virtual string? CodeTableIds { get; set; }
+
+ }
+
+ ///
+ /// 出库详细分页查询输入参数
+ ///
+ public class OutboundDetailInput : BasePageInput
+ {
+ ///
+ /// 关键字查询
+ ///
+ public string? SearchKey { get; set; }
+
+ ///
+ /// 出库单ID
+ ///
+ public long? OutboundId { get; set; }
+
+ ///
+ /// 条码ID列表
+ ///
+ public string? CodeTableIds { get; set; }
+
+ }
+
+ ///
+ /// 出库详细增加输入参数
+ ///
+ public class AddOutboundDetailInput : OutboundDetailBaseInput
+ {
+ }
+
+ ///
+ /// 出库详细删除输入参数
+ ///
+ public class DeleteOutboundDetailInput : BaseIdInput
+ {
+ }
+
+ ///
+ /// 出库详细更新输入参数
+ ///
+ public class UpdateOutboundDetailInput : OutboundDetailBaseInput
+ {
+ ///
+ /// 主键Id
+ ///
+ [Required(ErrorMessage = "主键Id不能为空")]
+ public long Id { get; set; }
+
+ }
+
+ ///
+ /// 出库详细主键查询输入参数
+ ///
+ public class QueryByIdOutboundDetailInput : DeleteOutboundDetailInput
+ {
+
+ }
diff --git a/Admin.NET/Admin.NET.Application/Service/OutboundDetail/Dto/OutboundDetailOutput.cs b/Admin.NET/Admin.NET.Application/Service/OutboundDetail/Dto/OutboundDetailOutput.cs
new file mode 100644
index 0000000..4457321
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Service/OutboundDetail/Dto/OutboundDetailOutput.cs
@@ -0,0 +1,25 @@
+namespace Admin.NET.Application;
+
+///
+/// 出库详细输出参数
+///
+public class OutboundDetailOutput
+{
+ ///
+ /// 主键Id
+ ///
+ public long Id { get; set; }
+
+ ///
+ /// 出库单ID
+ ///
+ public long? OutboundId { get; set; }
+
+ ///
+ /// 条码ID列表
+ ///
+ public string? CodeTableIds { get; set; }
+
+ }
+
+
diff --git a/Admin.NET/Admin.NET.Application/Service/OutboundDetail/OutboundDetailService.cs b/Admin.NET/Admin.NET.Application/Service/OutboundDetail/OutboundDetailService.cs
new file mode 100644
index 0000000..c71c8c1
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Service/OutboundDetail/OutboundDetailService.cs
@@ -0,0 +1,117 @@
+using Admin.NET.Core.Service;
+using Admin.NET.Application.Const;
+using Admin.NET.Application.Entity;
+using Microsoft.AspNetCore.Http;
+namespace Admin.NET.Application;
+///
+/// 出库详细服务
+///
+[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)]
+public class OutboundDetailService : IDynamicApiController, ITransient
+{
+ private readonly SqlSugarRepository _rep;
+ public OutboundDetailService(SqlSugarRepository rep)
+ {
+ _rep = rep;
+ }
+
+ ///
+ /// 分页查询出库详细
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "Page")]
+ public async Task> Page(OutboundDetailInput input)
+ {
+ var query = _rep.AsQueryable()
+ .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
+ u.CodeTableIds.Contains(input.SearchKey.Trim())
+ )
+ .WhereIF(input.OutboundId>0, u => u.OutboundId == input.OutboundId)
+ .WhereIF(!string.IsNullOrWhiteSpace(input.CodeTableIds), u => u.CodeTableIds.Contains(input.CodeTableIds.Trim()))
+ .Select();
+ return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+ }
+
+ ///
+ /// 增加出库详细
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "Add")]
+ public async Task Add(AddOutboundDetailInput input)
+ {
+ var entity = input.Adapt();
+ await _rep.InsertAsync(entity);
+ return entity.Id;
+ }
+
+ ///
+ /// 删除出库详细
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "Delete")]
+ public async Task Delete(DeleteOutboundDetailInput input)
+ {
+ var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+ //await _rep.FakeDeleteAsync(entity); //假删除
+ await _rep.DeleteAsync(entity); //真删除
+ }
+
+ ///
+ /// 更新出库详细
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "Update")]
+ public async Task Update(UpdateOutboundDetailInput input)
+ {
+ var entity = input.Adapt();
+ await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+ }
+
+ ///
+ /// 获取出库详细
+ ///
+ ///
+ ///
+ [HttpGet]
+ [ApiDescriptionSettings(Name = "Detail")]
+ public async Task Detail([FromQuery] QueryByIdOutboundDetailInput input)
+ {
+ return await _rep.GetFirstAsync(u => u.Id == input.Id);
+ }
+
+ ///
+ /// 获取出库详细列表
+ ///
+ ///
+ ///
+ [HttpGet]
+ [ApiDescriptionSettings(Name = "List")]
+ public async Task> List()
+ {
+ return await _rep.AsQueryable().Select().ToListAsync();
+ }
+
+ ///
+ /// 获取出库详细
+ ///
+ ///
+ ///
+ [HttpGet]
+ [ApiDescriptionSettings(Name = "GetByOutboundId")]
+ public async Task GetByOutboundId(long? outboundId)
+ {
+ return await _rep.GetFirstAsync(u => u.OutboundId == outboundId);
+ }
+
+
+
+}
+
diff --git a/Admin.NET/Admin.NET.Application/Service/PrintCodeDetail/Dto/PrintCodeDetailOutput.cs b/Admin.NET/Admin.NET.Application/Service/PrintCodeDetail/Dto/PrintCodeDetailOutput.cs
index 0e2b06f..6d58d34 100644
--- a/Admin.NET/Admin.NET.Application/Service/PrintCodeDetail/Dto/PrintCodeDetailOutput.cs
+++ b/Admin.NET/Admin.NET.Application/Service/PrintCodeDetail/Dto/PrintCodeDetailOutput.cs
@@ -70,6 +70,11 @@ public class PrintCodeDetailOutput
///
public long? FatherId { get; set; }
+ ///
+ /// 物料ID
+ ///
+ public long? MaterialsId { get; set; }
+
///
/// 打码时间
///
diff --git a/Admin.NET/Admin.NET.Application/Service/WarehouseDetails/WarehouseDetailsService.cs b/Admin.NET/Admin.NET.Application/Service/WarehouseDetails/WarehouseDetailsService.cs
index 59f8cd3..3e1d89c 100644
--- a/Admin.NET/Admin.NET.Application/Service/WarehouseDetails/WarehouseDetailsService.cs
+++ b/Admin.NET/Admin.NET.Application/Service/WarehouseDetails/WarehouseDetailsService.cs
@@ -10,9 +10,18 @@ namespace Admin.NET.Application;
public class WarehouseDetailsService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _rep;
- public WarehouseDetailsService(SqlSugarRepository rep)
+ private readonly PrintCodeDetailService _codeDetailService;
+ private readonly MaterialsService _materialsService;
+ private readonly SysUnitService _sysUnitService;
+ public WarehouseDetailsService(SqlSugarRepository rep,
+ PrintCodeDetailService codeDetailService,
+ MaterialsService materialsService,
+ SysUnitService sysUnitService)
{
_rep = rep;
+ _codeDetailService = codeDetailService;
+ _materialsService = materialsService;
+ _sysUnitService = sysUnitService;
}
///
@@ -153,6 +162,21 @@ public class WarehouseDetailsService : IDynamicApiController, ITransient
return await _rep.AsQueryable().Select().ToListAsync();
}
+ ///
+ /// 获取仓库库存
+ ///
+ ///
+ ///
+ [HttpGet]
+ [ApiDescriptionSettings(Name = "GetInventory")]
+ public async Task GetInventory([FromQuery] QueryByIdWarehousingInput input)
+ {
+ var codeDetails = await _codeDetailService.List();
+ var warehousingCodes = codeDetails.FindAll(a => a.WarehouseID == null || a.WarehouseID < 1);
+
+
+ throw new NotImplementedException();
+ }
}
diff --git a/Admin.NET/Admin.NET.Application/Service/WarehouseTransfer/Dto/WarehouseTransferDto.cs b/Admin.NET/Admin.NET.Application/Service/WarehouseTransfer/Dto/WarehouseTransferDto.cs
new file mode 100644
index 0000000..44a40ca
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Service/WarehouseTransfer/Dto/WarehouseTransferDto.cs
@@ -0,0 +1,73 @@
+namespace Admin.NET.Application;
+
+ ///
+ /// 调库出库输出参数
+ ///
+ public class WarehouseTransferDto
+ {
+ ///
+ /// 主键Id
+ ///
+ public long Id { get; set; }
+
+ ///
+ /// 原仓库ID
+ ///
+ public long? WarehouseId { get; set; }
+
+ ///
+ /// 目标仓库ID
+ ///
+ public long? TargetWarehouseId { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ public DateTime? StartDate { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string? Remarks { get; set; }
+
+ ///
+ /// 租户Id
+ ///
+ public long? TenantId { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ public DateTime? UpdateTime { get; set; }
+
+ ///
+ /// 创建者Id
+ ///
+ public long? CreateUserId { get; set; }
+
+ ///
+ /// 创建者姓名
+ ///
+ public string? CreateUserName { get; set; }
+
+ ///
+ /// 修改者Id
+ ///
+ public long? UpdateUserId { get; set; }
+
+ ///
+ /// 修改者姓名
+ ///
+ public string? UpdateUserName { get; set; }
+
+ ///
+ /// 软删除
+ ///
+ public bool IsDelete { get; set; }
+
+ }
diff --git a/Admin.NET/Admin.NET.Application/Service/WarehouseTransfer/Dto/WarehouseTransferInput.cs b/Admin.NET/Admin.NET.Application/Service/WarehouseTransfer/Dto/WarehouseTransferInput.cs
new file mode 100644
index 0000000..6353c33
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Service/WarehouseTransfer/Dto/WarehouseTransferInput.cs
@@ -0,0 +1,148 @@
+using Admin.NET.Core;
+using System.ComponentModel.DataAnnotations;
+
+namespace Admin.NET.Application;
+
+ ///
+ /// 调库出库基础输入参数
+ ///
+ public class WarehouseTransferBaseInput
+ {
+ ///
+ /// 原仓库ID
+ ///
+ public virtual long? WarehouseId { get; set; }
+
+ ///
+ /// 目标仓库ID
+ ///
+ public virtual long? TargetWarehouseId { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ public virtual DateTime? StartDate { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public virtual string? Remarks { get; set; }
+
+ ///
+ /// 租户Id
+ ///
+ public virtual long? TenantId { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public virtual DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ public virtual DateTime? UpdateTime { get; set; }
+
+ ///
+ /// 创建者Id
+ ///
+ public virtual long? CreateUserId { get; set; }
+
+ ///
+ /// 创建者姓名
+ ///
+ public virtual string? CreateUserName { get; set; }
+
+ ///
+ /// 修改者Id
+ ///
+ public virtual long? UpdateUserId { get; set; }
+
+ ///
+ /// 修改者姓名
+ ///
+ public virtual string? UpdateUserName { get; set; }
+
+ ///
+ /// 软删除
+ ///
+ public virtual bool IsDelete { get; set; }
+
+ }
+
+ ///
+ /// 调库出库分页查询输入参数
+ ///
+ public class WarehouseTransferInput : BasePageInput
+ {
+ ///
+ /// 关键字查询
+ ///
+ public string? SearchKey { get; set; }
+
+ ///
+ /// 原仓库ID
+ ///
+ public long? WarehouseId { get; set; }
+
+ ///
+ /// 目标仓库ID
+ ///
+ public long? TargetWarehouseId { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ public DateTime? StartDate { get; set; }
+
+ ///
+ /// 业务日期范围
+ ///
+ public List StartDateRange { get; set; }
+ ///
+ /// 备注
+ ///
+ public string? Remarks { get; set; }
+
+ }
+
+ ///
+ /// 调库出库增加输入参数
+ ///
+ public class AddWarehouseTransferInput : WarehouseTransferBaseInput
+ {
+ ///
+ /// 软删除
+ ///
+ [Required(ErrorMessage = "软删除不能为空")]
+ public override bool IsDelete { get; set; }
+
+ }
+
+ ///
+ /// 调库出库删除输入参数
+ ///
+ public class DeleteWarehouseTransferInput : BaseIdInput
+ {
+ }
+
+ ///
+ /// 调库出库更新输入参数
+ ///
+ public class UpdateWarehouseTransferInput : WarehouseTransferBaseInput
+ {
+ ///
+ /// 主键Id
+ ///
+ [Required(ErrorMessage = "主键Id不能为空")]
+ public long Id { get; set; }
+
+ }
+
+ ///
+ /// 调库出库主键查询输入参数
+ ///
+ public class QueryByIdWarehouseTransferInput : DeleteWarehouseTransferInput
+ {
+
+ }
diff --git a/Admin.NET/Admin.NET.Application/Service/WarehouseTransfer/Dto/WarehouseTransferOutput.cs b/Admin.NET/Admin.NET.Application/Service/WarehouseTransfer/Dto/WarehouseTransferOutput.cs
new file mode 100644
index 0000000..9fbf1e0
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Service/WarehouseTransfer/Dto/WarehouseTransferOutput.cs
@@ -0,0 +1,75 @@
+namespace Admin.NET.Application;
+
+///
+/// 调库出库输出参数
+///
+public class WarehouseTransferOutput
+{
+ ///
+ /// 主键Id
+ ///
+ public long Id { get; set; }
+
+ ///
+ /// 原仓库ID
+ ///
+ public long? WarehouseId { get; set; }
+
+ ///
+ /// 目标仓库ID
+ ///
+ public long? TargetWarehouseId { get; set; }
+
+ ///
+ /// 业务日期
+ ///
+ public DateTime? StartDate { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string? Remarks { get; set; }
+
+ ///
+ /// 租户Id
+ ///
+ public long? TenantId { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ public DateTime? UpdateTime { get; set; }
+
+ ///
+ /// 创建者Id
+ ///
+ public long? CreateUserId { get; set; }
+
+ ///
+ /// 创建者姓名
+ ///
+ public string? CreateUserName { get; set; }
+
+ ///
+ /// 修改者Id
+ ///
+ public long? UpdateUserId { get; set; }
+
+ ///
+ /// 修改者姓名
+ ///
+ public string? UpdateUserName { get; set; }
+
+ ///
+ /// 软删除
+ ///
+ public bool IsDelete { get; set; }
+
+ }
+
+
diff --git a/Admin.NET/Admin.NET.Application/Service/WarehouseTransfer/WarehouseTransferService.cs b/Admin.NET/Admin.NET.Application/Service/WarehouseTransfer/WarehouseTransferService.cs
new file mode 100644
index 0000000..9b2cf8e
--- /dev/null
+++ b/Admin.NET/Admin.NET.Application/Service/WarehouseTransfer/WarehouseTransferService.cs
@@ -0,0 +1,284 @@
+using Admin.NET.Core.Service;
+using Admin.NET.Application.Const;
+using Admin.NET.Application.Entity;
+using Microsoft.AspNetCore.Http;
+namespace Admin.NET.Application;
+///
+/// 调库出库服务
+///
+[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)]
+public class WarehouseTransferService : IDynamicApiController, ITransient
+{
+ private readonly SqlSugarRepository _rep;
+ private readonly PrintCodeDetailService _codeDetailService;
+ private readonly ProductRetrospectService _productRetrospect;
+ private readonly ReportTableService _reportTableService;
+ private readonly OutboundService _outboundService;
+ private readonly OutboundDetailService _outboundDetailService;
+ private readonly UserManager _userManager;
+ public WarehouseTransferService(SqlSugarRepository rep,
+ UserManager userManager,
+ PrintCodeDetailService codeDetailService,
+ ReportTableService reportTableService,
+ OutboundService outboundService,
+ OutboundDetailService outboundDetailService,
+ ProductRetrospectService productRetrospect)
+ {
+ _rep = rep;
+ _userManager = userManager;
+ _codeDetailService = codeDetailService;
+ _productRetrospect = productRetrospect;
+ _reportTableService = reportTableService;
+ _outboundService = outboundService;
+ _outboundDetailService = outboundDetailService;
+ }
+
+ ///
+ /// 分页查询调库出库
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "Page")]
+ public async Task> Page(WarehouseTransferInput input)
+ {
+ var query = _rep.AsQueryable().Where(a => !a.IsDelete)
+ .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
+ u.Remarks.Contains(input.SearchKey.Trim())
+ )
+ .WhereIF(input.WarehouseId>0, u => u.WarehouseId == input.WarehouseId)
+ .WhereIF(input.TargetWarehouseId>0, u => u.TargetWarehouseId == input.TargetWarehouseId)
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Remarks), u => u.Remarks.Contains(input.Remarks.Trim()))
+ .Select();
+ if(input.StartDateRange != null && input.StartDateRange.Count >0)
+ {
+ DateTime? start= input.StartDateRange[0];
+ query = query.WhereIF(start.HasValue, u => u.StartDate > start);
+ if (input.StartDateRange.Count >1 && input.StartDateRange[1].HasValue)
+ {
+ var end = input.StartDateRange[1].Value.AddDays(1);
+ query = query.Where(u => u.StartDate < end);
+ }
+ }
+ return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+ }
+
+ ///
+ /// 增加调库出库
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "Add")]
+ public async Task Add(AddWarehouseTransferInput input)
+ {
+ var entity = input.Adapt();
+ await _rep.InsertAsync(entity);
+ return entity.Id;
+ }
+
+ ///
+ /// 删除调库出库
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "Delete")]
+ public async Task Delete(DeleteWarehouseTransferInput input)
+ {
+ var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+ await _rep.FakeDeleteAsync(entity); //假删除
+ //await _rep.DeleteAsync(entity); //真删除
+ }
+
+ ///
+ /// 更新调库出库
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "Update")]
+ public async Task Update(UpdateWarehouseTransferInput input)
+ {
+ var entity = input.Adapt();
+ await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+ }
+
+ ///
+ /// 获取调库出库
+ ///
+ ///
+ ///
+ [HttpGet]
+ [ApiDescriptionSettings(Name = "Detail")]
+ public async Task Detail([FromQuery] QueryByIdWarehouseTransferInput input)
+ {
+ return await _rep.GetFirstAsync(u => u.Id == input.Id);
+ }
+
+ ///
+ /// 获取调库出库列表
+ ///
+ ///
+ ///
+ [HttpGet]
+ [ApiDescriptionSettings(Name = "List")]
+ public async Task> List()
+ {
+ return await _rep.AsQueryable().Select().Where(a => !a.IsDelete).ToListAsync();
+ }
+
+
+ ///
+ /// 商品出货
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ApiDescriptionSettings(Name = "ShipmentProduct")]
+ public async Task ShipmentProduct(AddProductCodeInput input)
+ {
+ if (input == null || input.WarehousingTableId == null || input.CodeDatas == null || input.CodeDatas.Count == 0)
+ {
+ throw Oops.Oh(ErrorCodeEnum.xg1002);
+ }
+
+
+ var invoice = await Detail(new QueryByIdWarehouseTransferInput() { Id = input.WarehousingTableId.Value });
+ if (invoice == null)
+ {
+ throw Oops.Oh(ErrorCodeEnum.xg1002);
+ }
+ var codes = string.IsNullOrEmpty(input.CodeDatas[0].BarCode) ? input.CodeDatas.ConvertAll(a => a.QrCode) : input.CodeDatas.ConvertAll(a => a.BarCode);
+ var details = (await _codeDetailService.List()).FindAll(a => !string.IsNullOrEmpty(a.FatherCode));
+ var repeatCodes = details.Where(a => !a.IsDelete && codes.Any(b => b == a.Code)).ToList();
+ if (repeatCodes == null || repeatCodes.Count < 1)
+ {
+ throw Oops.Oh(ErrorCodeEnum.xg1002);
+ }
+
+ var userId = _userManager.UserId;
+ var userName = _userManager.RealName;
+ var addOutbound = new AddOutboundInput()
+ {
+ //BusinessType = invoice.BusinessType,
+ //CodeNum = invoice.CodeNum,
+ //Consignee = invoice.Consignee,
+ CreateTime = invoice.CreateTime,
+ CreateUserId = userId,
+ CreateUserName = userName,
+ SourceCodeNum = invoice.Id.ToString(),
+ StartDate = invoice.StartDate,
+ State = 0,
+ //Warehouse = invoice.Warehouse,
+ WarehouseId = invoice.WarehouseId,
+ TenantId = invoice.TenantId,
+ };
+ var outbound = await _outboundService.Add(addOutbound);
+
+
+ var codeIds = new List();
+ var list = new List();
+ foreach (var c1 in repeatCodes)
+ {
+ codeIds.Add(c1.Id);
+ c1.WarehouseID = null;
+ //c1.FatherCode = null;
+ //c1.FatherId = null;
+ await _codeDetailService.UpdateByEntity(c1.Adapt());
+ list.Add(c1);
+ var child1 = details.Find(a => a.FatherCode == c1.Code);
+ if (child1 != null)
+ {
+ child1.WarehouseID = null;
+ await _codeDetailService.UpdateByEntity(child1.Adapt());
+ list.Add(child1);
+
+ var child2 = details.Find(a => a.FatherCode == c1.Code);
+ if (child2 != null)
+ {
+ child2.WarehouseID = null;
+ await _codeDetailService.UpdateByEntity(child2.Adapt());
+ list.Add(child2);
+
+ var child3 = details.Find(a => a.FatherCode == c1.Code);
+ if (child3 != null)
+ {
+ child3.WarehouseID = null;
+ await _codeDetailService.UpdateByEntity(child3.Adapt());
+ list.Add(child3);
+
+ var child4 = details.Find(a => a.FatherCode == c1.Code);
+ if (child4 != null)
+ {
+ child4.WarehouseID = null;
+ await _codeDetailService.UpdateByEntity(child4.Adapt());
+ list.Add(child4);
+ }
+ }
+ }
+ }
+
+ }
+
+ var addOutboundDetail = new AddOutboundDetailInput() { CodeTableIds = string.Join(",", codeIds), OutboundId = outbound };
+ await _outboundDetailService.Add(addOutboundDetail);
+
+ foreach (var item in list)
+ {
+ var report = await GetReport(item.ReportTableId);
+ var retrospect1 = new AddProductRetrospectInput()
+ {
+ 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 reportDic = new Dictionary();
+ private async Task GetReport(long? reportId)
+ {
+ if (reportId == null)
+ {
+ return new ReportTable();
+ }
+ if (reportDic.ContainsKey(reportId.Value))
+ {
+ return reportDic[reportId.Value];
+ }
+ var report = await _reportTableService.GetBySource(reportId);
+ if (report == null)
+ {
+ return new ReportTable();
+ }
+ else
+ {
+ return report;
+ }
+ }
+
+
+}
+
diff --git a/Admin.NET/Admin.NET.Application/Service/Warehousing/WarehousingService.cs b/Admin.NET/Admin.NET.Application/Service/Warehousing/WarehousingService.cs
index 8860658..0a41207 100644
--- a/Admin.NET/Admin.NET.Application/Service/Warehousing/WarehousingService.cs
+++ b/Admin.NET/Admin.NET.Application/Service/Warehousing/WarehousingService.cs
@@ -105,7 +105,6 @@ public class WarehousingService : IDynamicApiController, ITransient
///
/// 获取入库单列表
///
- ///
///
[HttpGet]
[ApiDescriptionSettings(Name = "List")]
@@ -116,7 +115,5 @@ public class WarehousingService : IDynamicApiController, ITransient
-
-
}
diff --git a/Web/.env.development b/Web/.env.development
index d854af8..78ced16 100644
--- a/Web/.env.development
+++ b/Web/.env.development
@@ -2,4 +2,4 @@
ENV = development
# 本地环境接口地址http://localhost:5005 http://139.199.191.197:9005
-VITE_API_URL = http://139.199.191.197:9005
\ No newline at end of file
+VITE_API_URL = http://localhost:5005
\ No newline at end of file
diff --git a/Web/src/api/main/distributor.ts b/Web/src/api/main/distributor.ts
index 495413e..cfadab2 100644
--- a/Web/src/api/main/distributor.ts
+++ b/Web/src/api/main/distributor.ts
@@ -5,6 +5,7 @@ enum Api {
UpdateDistributor = '/api/distributor/update',
PageDistributor = '/api/distributor/page',
DetailDistributor = '/api/distributor/detail',
+ ListDistributor = '/api/distributor/list',
}
// 增加分销商
@@ -39,6 +40,14 @@ export const pageDistributor = (params?: any) =>
data: params,
});
+// 列表分销商
+export const listDistributor = () =>
+ request({
+ url: Api.ListDistributor,
+ method: 'get',
+ data: { },
+ });
+
// 详情分销商
export const detailDistributor = (id: any) =>
request({
diff --git a/Web/src/api/main/distributorInvoice.ts b/Web/src/api/main/distributorInvoice.ts
new file mode 100644
index 0000000..ab10974
--- /dev/null
+++ b/Web/src/api/main/distributorInvoice.ts
@@ -0,0 +1,59 @@
+import request from '/@/utils/request';
+enum Api {
+ AddDistributorInvoice = '/api/distributorInvoice/add',
+ DeleteDistributorInvoice = '/api/distributorInvoice/delete',
+ UpdateDistributorInvoice = '/api/distributorInvoice/update',
+ PageDistributorInvoice = '/api/distributorInvoice/page',
+ DetailDistributorInvoice = '/api/distributorInvoice/detail',
+ ListDistributorInvoice = '/api/distributorInvoice/list',
+}
+
+// 增加分销出库
+export const addDistributorInvoice = (params?: any) =>
+ request({
+ url: Api.AddDistributorInvoice,
+ method: 'post',
+ data: params,
+ });
+
+// 删除分销出库
+export const deleteDistributorInvoice = (params?: any) =>
+ request({
+ url: Api.DeleteDistributorInvoice,
+ method: 'post',
+ data: params,
+ });
+
+// 编辑分销出库
+export const updateDistributorInvoice = (params?: any) =>
+ request({
+ url: Api.UpdateDistributorInvoice,
+ method: 'post',
+ data: params,
+ });
+
+// 分页查询分销出库
+export const pageDistributorInvoice = (params?: any) =>
+ request({
+ url: Api.PageDistributorInvoice,
+ method: 'post',
+ data: params,
+ });
+
+// 列表分销出库
+export const listDistributorInvoice = () =>
+ request({
+ url: Api.ListDistributorInvoice,
+ method: 'get',
+ data: { },
+ });
+
+// 详情分销出库
+export const detailDistributorInvoice = (id: any) =>
+ request({
+ url: Api.DetailDistributorInvoice,
+ method: 'get',
+ data: { id },
+ });
+
+
diff --git a/Web/src/api/main/warehouseTransfer.ts b/Web/src/api/main/warehouseTransfer.ts
new file mode 100644
index 0000000..7626c30
--- /dev/null
+++ b/Web/src/api/main/warehouseTransfer.ts
@@ -0,0 +1,59 @@
+import request from '/@/utils/request';
+enum Api {
+ AddWarehouseTransfer = '/api/warehouseTransfer/add',
+ DeleteWarehouseTransfer = '/api/warehouseTransfer/delete',
+ UpdateWarehouseTransfer = '/api/warehouseTransfer/update',
+ PageWarehouseTransfer = '/api/warehouseTransfer/page',
+ DetailWarehouseTransfer = '/api/warehouseTransfer/detail',
+ ListWarehouseTransfer = '/api/warehouseTransfer/list',
+}
+
+// 增加调库出库
+export const addWarehouseTransfer = (params?: any) =>
+ request({
+ url: Api.AddWarehouseTransfer,
+ method: 'post',
+ data: params,
+ });
+
+// 删除调库出库
+export const deleteWarehouseTransfer = (params?: any) =>
+ request({
+ url: Api.DeleteWarehouseTransfer,
+ method: 'post',
+ data: params,
+ });
+
+// 编辑调库出库
+export const updateWarehouseTransfer = (params?: any) =>
+ request({
+ url: Api.UpdateWarehouseTransfer,
+ method: 'post',
+ data: params,
+ });
+
+// 分页查询调库出库
+export const pageWarehouseTransfer = (params?: any) =>
+ request({
+ url: Api.PageWarehouseTransfer,
+ method: 'post',
+ data: params,
+ });
+
+// 列表调库出库
+export const listWarehouseTransfer = () =>
+ request({
+ url: Api.ListWarehouseTransfer,
+ method: 'get',
+ data: { },
+ });
+
+// 详情调库出库
+export const detailWarehouseTransfer = (id: any) =>
+ request({
+ url: Api.DetailWarehouseTransfer,
+ method: 'get',
+ data: { id },
+ });
+
+
diff --git a/Web/src/views/distributionManagement/distributorInvoice/component/editDialog.vue b/Web/src/views/distributionManagement/distributorInvoice/component/editDialog.vue
new file mode 100644
index 0000000..5112947
--- /dev/null
+++ b/Web/src/views/distributionManagement/distributorInvoice/component/editDialog.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+ {{ props.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Web/src/views/distributionManagement/distributorInvoice/index.vue b/Web/src/views/distributionManagement/distributorInvoice/index.vue
new file mode 100644
index 0000000..4dc094d
--- /dev/null
+++ b/Web/src/views/distributionManagement/distributorInvoice/index.vue
@@ -0,0 +1,212 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+ queryParams = {}"> 重置
+ 高级查询
+ 隐藏
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Web/src/views/inventoryManagement/warehouseTransfer/component/editDialog.vue b/Web/src/views/inventoryManagement/warehouseTransfer/component/editDialog.vue
new file mode 100644
index 0000000..2a8c698
--- /dev/null
+++ b/Web/src/views/inventoryManagement/warehouseTransfer/component/editDialog.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+ {{ props.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Web/src/views/inventoryManagement/warehouseTransfer/index.vue b/Web/src/views/inventoryManagement/warehouseTransfer/index.vue
new file mode 100644
index 0000000..46049de
--- /dev/null
+++ b/Web/src/views/inventoryManagement/warehouseTransfer/index.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+ queryParams = {}"> 重置
+ 高级查询
+ 隐藏
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Web/src/views/warehouseManagement/warehousingStatistics/index.vue b/Web/src/views/warehouseManagement/warehousingStatistics/index.vue
index 11e6318..fc2b655 100644
--- a/Web/src/views/warehouseManagement/warehousingStatistics/index.vue
+++ b/Web/src/views/warehouseManagement/warehousingStatistics/index.vue
@@ -183,8 +183,6 @@
import { ref } from "vue";
import { ElMessageBox, ElMessage } from "element-plus";
import { auth } from '/@/utils/authFunction';
- import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
- import { formatDate } from '/@/utils/formatTime';
import printDialog from '/@/views/labelPrinting/print/component/hiprint/preview.vue'