成品即时库存

This commit is contained in:
18942506660
2024-10-16 11:03:45 +08:00
parent 06fcd26b5b
commit dfa59fc3bc
19 changed files with 996 additions and 3 deletions

View File

@@ -0,0 +1,101 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Threading.Tasks;
using WMS.Web.Core.Dto.OutStock;
using WMS.Web.Core.Dto.ProductInventory;
using WMS.Web.Core.Dto.SingleData;
using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Infrastructure;
using WMS.Web.Domain.IService.Public;
using WMS.Web.Domain.Services.Public;
using WMS.Web.Domain.Values;
using WMS.Web.Repositories;
using WMS.Web.Core;
using WMS.Web.Domain.IService;
using WMS.Web.Domain.Options;
using Google.Protobuf.WellKnownTypes;
using WMS.Web.Domain.Services;
using Microsoft.Extensions.Options;
using System.Linq;
namespace WMS.Web.Api.Controllers
{
/// <summary>
/// 成品仓即时库存
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class ProductInventoryController : ControllerBase
{
private readonly ILoginService _loginService;
private readonly IBasicsRepositories _basicsRepositories;
private readonly IProductInventoryRepositories _repositories;
private readonly QiniuOptions _option;
private readonly IExportExcelService _exportExcelService;
public ProductInventoryController(ILoginService loginService, IBasicsRepositories basicsRepositories,
IProductInventoryRepositories repositories, IOptions<QiniuOptions> option, IExportExcelService exportExcelServic) {
_loginService = loginService;
_basicsRepositories = basicsRepositories;
_repositories = repositories;
_option = option?.Value;
_exportExcelService = exportExcelServic;
}
/// <summary>
/// 获取仓库
/// </summary>
/// <param name="name">仓库模糊匹配 不必填</param>
/// <returns></returns>
[HttpGet]
[Route("GetUcStock")]
public async Task<ResultList<UcStockHeadOfficeResponse>> GetUcStock([FromQuery] string name)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultList<UcStockHeadOfficeResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync(name, loginInfo.UserInfo.CompanyId);
return ResultList<UcStockHeadOfficeResponse>.ReSuccess(r);
}
/// <summary>
/// 列表
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("GetList")]
public async Task<ResultPagedNumber2List<ProductInventoryQueryResponse>> GetPagedList([FromBody] ProductInventoryQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedNumber2List<ProductInventoryQueryResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
var (list, count, details) = await _repositories.GetListAsync(dto);
var result = ResultPagedNumber2List<ProductInventoryQueryResponse>.ReSuccess(list,count,details);
return result;
}
/// <summary>
/// 导出
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Export")]
public Task<Result<string>> Export([FromBody] OutStockQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null)
return Task.FromResult(Result<string>.ReFailure(ResultCodes.Token_Invalid_Error));
string fileName = FileDownLoadOrderType.ProductInventory.GetRemark() + loginInfo.UserInfo.CompanyId + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
string res = _option.Url + fileName;
Task.Run(async () =>
{
await _exportExcelService.ExportList<OutStockQueryInfoResponse, OutStockQueryRequest>(dto, fileName, loginInfo.UserInfo.StaffId, loginInfo.UserInfo.CompanyId, FileDownLoadOrderType.OutStock);
});
return Task.FromResult(Result<string>.ReSuccess(res));
}
}
}

View File

@@ -560,6 +560,32 @@
<param name="id"></param>
<returns></returns>
</member>
<member name="T:WMS.Web.Api.Controllers.ProductInventoryController">
<summary>
成品仓即时库存
</summary>
</member>
<member name="M:WMS.Web.Api.Controllers.ProductInventoryController.GetUcStock(System.String)">
<summary>
获取仓库
</summary>
<param name="name">仓库模糊匹配 不必填</param>
<returns></returns>
</member>
<member name="M:WMS.Web.Api.Controllers.ProductInventoryController.GetPagedList(WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryRequest)">
<summary>
列表
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Api.Controllers.ProductInventoryController.Export(WMS.Web.Core.Dto.OutStock.OutStockQueryRequest)">
<summary>
导出
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Api.Controllers.SerialNumberController.Get(System.String)">
<summary>
获取序列号信息

View File

@@ -5534,6 +5534,86 @@
每页条数 不传默认每页10 条
</summary>
</member>
<member name="T:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryRequest">
<summary>
成品即时库存列表
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryRequest.MaterialNumber">
<summary>
物料编码
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryRequest.StockCode">
<summary>
仓库编码
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryRequest.Customer">
<summary>
客户/店铺
</summary>
</member>
<member name="T:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryResponse">
<summary>
成品即时库存
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryResponse.Id">
<summary>
单据Id
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryResponse.Type">
<summary>
单据类型
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryResponse.MaterialNumber">
<summary>
物料编码
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryResponse.Specifications">
<summary>
物料规格型号
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryResponse.MaterialName">
<summary>
物料名称
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryResponse.Stock">
<summary>
仓库
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryResponse.Org">
<summary>
组织
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryResponse.Customer">
<summary>
客户/店铺
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryResponse.Batch">
<summary>
批号
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryResponse.Qty">
<summary>
可用量
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryResponse.BeforeQty">
<summary>
库存量
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.SendDataDto.CustomerCode">
<summary>
客户编码
@@ -5824,6 +5904,26 @@
仓库名称
</summary>
</member>
<member name="T:WMS.Web.Core.Dto.SingleData.UcStockHeadOfficeResponse">
<summary>
根据总公司查仓库
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.SingleData.UcStockHeadOfficeResponse.WarehouseCodeOfLingxing">
<summary>
领星仓库编码
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.SingleData.UcStockHeadOfficeResponse.WarehouseCodeOfJushuitan">
<summary>
聚水潭仓库编码
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.SingleData.UcStockHeadOfficeResponse.WarehouseUseTo">
<summary>
用途
</summary>
</member>
<member name="T:WMS.Web.Core.Dto.SingleData.UcStockResponse">
<summary>
仓库响应
@@ -6817,6 +6917,78 @@
</summary>
<returns></returns>
</member>
<member name="M:WMS.Web.Core.Internal.Results.ResultPagedNumber2List`1.#ctor">
<summary>
实体分页集合结果
</summary>
</member>
<member name="M:WMS.Web.Core.Internal.Results.ResultPagedNumber2List`1.#ctor(System.Collections.Generic.IList{`0},System.Int32,System.Collections.Generic.List{System.Decimal})">
<summary>
实体分页集合结果
</summary>
<param name="data">实体集合</param>
<param name="totalCount">总条数</param>
</member>
<member name="M:WMS.Web.Core.Internal.Results.ResultPagedNumber2List`1.#ctor(System.Collections.Generic.IList{`0},System.Int32,System.ValueTuple{System.Int32,System.String})">
<summary>
实体分页集合结果
</summary>
<param name="data"></param>
<param name="totalCount"></param>
<param name="result"></param>
</member>
<member name="P:WMS.Web.Core.Internal.Results.ResultPagedNumber2List`1.TotalCount">
<summary>
Total count of Items.
</summary>
</member>
<member name="P:WMS.Web.Core.Internal.Results.ResultPagedNumber2List`1.Details">
<summary>
总数量
</summary>
</member>
<member name="M:WMS.Web.Core.Internal.Results.ResultPagedNumber2List`1.ReSuccess(System.Collections.Generic.IList{`0},System.Int32,System.Collections.Generic.List{System.Decimal})">
<summary>
创建成功的返回消息
</summary>
<param name="data">实体集合</param>
<param name="totalCount">总条数</param>
<returns></returns>
</member>
<member name="M:WMS.Web.Core.Internal.Results.ResultPagedNumber2List`1.ReSuccess">
<summary>
创建成功的返回消息
</summary>
<returns></returns>
</member>
<member name="M:WMS.Web.Core.Internal.Results.ResultPagedNumber2List`1.ReFailure(System.String,System.Int32)">
<summary>
创建返回信息(返回处理失败)
</summary>
<param name="message">结果消息</param>
<param name="status">结果状态</param>
<returns></returns>
</member>
<member name="M:WMS.Web.Core.Internal.Results.ResultPagedNumber2List`1.ReFailure(System.ValueTuple{System.Int32,System.String})">
<summary>
创建返回信息(返回处理失败)
</summary>
<param name="result">结果消息</param>
<returns></returns>
</member>
<member name="M:WMS.Web.Core.Internal.Results.ResultPagedNumber2List`1.ReFailure(WMS.Web.Core.Internal.Results.Result)">
<summary>
创建返回信息(返回处理失败)
</summary>
<param name="result">结果</param>
<returns></returns>
</member>
<member name="M:WMS.Web.Core.Internal.Results.ResultPagedNumber2List`1.AsTask">
<summary>
转换为 task
</summary>
<returns></returns>
</member>
<member name="T:WMS.Web.Core.Internal.Results.ResultPagedNumberList`1">
<summary>
分页列表结果对象

View File

@@ -2075,6 +2075,56 @@
已出库数量
</summary>
</member>
<member name="T:WMS.Web.Domain.Entitys.ProductInventory">
<summary>
成品仓即时库存
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.ProductInventory.Id">
<summary>
主键 订单编号
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.ProductInventory.MaterialNumber">
<summary>
物料编码
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.ProductInventory.Type">
<summary>
单据类型
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.ProductInventory.OrgCode">
<summary>
组织编码
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.ProductInventory.StockCode">
<summary>
仓库
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.ProductInventory.Customer">
<summary>
客户/店铺
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.ProductInventory.Batch">
<summary>
批号
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.ProductInventory.Qty">
<summary>
可用量
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.ProductInventory.BeforeQty">
<summary>
库存量
</summary>
</member>
<member name="T:WMS.Web.Domain.Entitys.SendLog">
<summary>
短信和邮箱发送日志表
@@ -2676,6 +2726,12 @@
</summary>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.IBasicsRepositories.GetUcStockByHeadOfficeAsync(System.String,System.Int32)">
<summary>
获取仓库总公司
</summary>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.IBasicsRepositories.GetTransaction">
<summary>
获取事务 用来处理即时库存
@@ -3364,6 +3420,34 @@
<member name="M:WMS.Web.Domain.Infrastructure.IOutStockTaskRepositories.DeleteEntityList(System.Collections.Generic.List{System.Int32},System.Boolean)">
删除实体集合
</member>
<member name="T:WMS.Web.Domain.Infrastructure.IProductInventoryRepositories">
<summary>
成品仓即时库存
</summary>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.IProductInventoryRepositories.AddRange(System.Collections.Generic.List{WMS.Web.Domain.Entitys.ProductInventory},System.Boolean)">
<summary>
添加
</summary>
<param name="entitys"></param>
<param name="isTransaction"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.IProductInventoryRepositories.Delete(WMS.Web.Domain.Values.ProductInventoryType,System.Boolean)">
<summary>
删除
</summary>
<param name="isTransaction"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.IProductInventoryRepositories.GetListAsync(WMS.Web.Core.Dto.ProductInventory.ProductInventoryQueryRequest,System.Int32)">
<summary>
列表-分页
</summary>
<param name="dto"></param>
<param name="companyId"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.ISerialNumberOperateRepositories.AddRange(System.Collections.Generic.List{WMS.Web.Domain.Entitys.SerialNumberOperate},System.Boolean)">
<summary>
批量添加
@@ -6918,6 +7002,11 @@
出库信息
</summary>
</member>
<member name="F:WMS.Web.Domain.Values.FileDownLoadOrderType.ProductInventory">
<summary>
成品即时库存
</summary>
</member>
<member name="T:WMS.Web.Domain.Values.InstockStatus">
<summary>
入库状态
@@ -7163,6 +7252,26 @@
组装拆卸出库
</summary>
</member>
<member name="T:WMS.Web.Domain.Values.ProductInventoryType">
<summary>
成品即时库存类型
</summary>
</member>
<member name="F:WMS.Web.Domain.Values.ProductInventoryType.JinDie">
<summary>
金蝶
</summary>
</member>
<member name="F:WMS.Web.Domain.Values.ProductInventoryType.LingXing">
<summary>
领星
</summary>
</member>
<member name="F:WMS.Web.Domain.Values.ProductInventoryType.JushuiTan">
<summary>
聚水潭
</summary>
</member>
<member name="T:WMS.Web.Domain.Values.ResultCodes">
<summary>
错误提示信息
@@ -7713,6 +7822,11 @@
获取仓位详情根据仓位Codes集合和公司ID
</summary>
</member>
<member name="F:WMS.Web.Domain.Values.Single.SysConfigAction.GetWmsWarehouseByHeadOfficeAndNameAndCompany">
<summary>
获取仓库::根据总公司标记获取仓库
</summary>
</member>
<member name="T:WMS.Web.Domain.Values.SyncStatus">
<summary>
同步金蝶状态

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace WMS.Web.Core.Dto.ProductInventory
{
/// <summary>
/// 成品即时库存列表
/// </summary>
public class ProductInventoryQueryRequest : PaginationBaseRequestDto
{
/// <summary>
/// 物料编码
///</summary>
public string MaterialNumber { get; set; }
/// <summary>
/// 仓库编码
///</summary>
public string StockCode { get; set; }
/// <summary>
/// 客户/店铺
///</summary>
public string Customer { get; set; }
}
}

View File

@@ -0,0 +1,69 @@
using Npoi.Mapper.Attributes;
using System;
using System.Collections.Generic;
using System.Text;
namespace WMS.Web.Core.Dto.ProductInventory
{
/// <summary>
/// 成品即时库存
/// </summary>
public class ProductInventoryQueryResponse
{
/// <summary>
/// 单据Id
/// </summary>
[Ignore]
public int Id { get; set; }
/// <summary>
/// 单据类型
/// </summary>
[Ignore]
public string Type { get; set; }
/// <summary>
/// 物料编码
/// </summary>
[Column("物料编码")]
public string MaterialNumber { get; set; }
/// <summary>
/// 物料规格型号
/// </summary>
[Column("规格型号")]
public string Specifications { get; set; }
/// <summary>
/// 物料名称
/// </summary>
[Column("物料名称")]
public string MaterialName { get; set; }
/// <summary>
/// 仓库
///</summary>
[Column("仓库")]
public string Stock { get; set; }
/// <summary>
/// 组织
///</summary>
[Column("组织")]
public string Org { get; set; }
/// <summary>
/// 客户/店铺
///</summary>
[Column("客户/店铺")]
public string Customer { get; set; }
/// <summary>
/// 批号
///</summary>
[Column("批号")]
public string Batch { get; set; }
/// <summary>
/// 可用量
///</summary>
[Column("可用量")]
public decimal Qty { get; set; } = 0;
/// <summary>
/// 库存量
///</summary>
[Column("库存量")]
public decimal BeforeQty { get; set; } = 0;
}
}

View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
namespace WMS.Web.Core.Dto.SingleData
{
/// <summary>
/// 根据总公司查仓库
/// </summary>
public class UcStockHeadOfficeResponse: UcStockResponse
{
/// <summary>
/// 领星仓库编码
/// </summary>
public string WarehouseCodeOfLingxing { get; set; }
/// <summary>
/// 聚水潭仓库编码
/// </summary>
public string WarehouseCodeOfJushuitan { get; set; }
/// <summary>
/// 用途
/// </summary>
public int? WarehouseUseTo { get; set; }
}
}

View File

@@ -0,0 +1,114 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace WMS.Web.Core.Internal.Results
{
public class ResultPagedNumber2List<T> : ResultList<T>
{
/// <summary>
/// 实体分页集合结果
/// </summary>
public ResultPagedNumber2List()
{
}
/// <summary>
/// 实体分页集合结果
/// </summary>
/// <param name="data">实体集合</param>
/// <param name="totalCount">总条数</param>
public ResultPagedNumber2List(IList<T> data, int totalCount, List<decimal> details) : base(data)
{
TotalCount = totalCount;
Details = details;
}
/// <summary>
/// 实体分页集合结果
/// </summary>
/// <param name="data"></param>
/// <param name="totalCount"></param>
/// <param name="result"></param>
public ResultPagedNumber2List(IList<T> data, int totalCount, ValueTuple<int, string> result) : base(data, result)
{
TotalCount = totalCount;
}
/// <summary>
/// Total count of Items.
/// </summary>
public int TotalCount { get; set; }
/// <summary>
/// 总数量
/// </summary>
public List<decimal> Details { get; set; }
/// <summary>
/// 创建成功的返回消息
/// </summary>
/// <param name="data">实体集合</param>
/// <param name="totalCount">总条数</param>
/// <returns></returns>
public static ResultPagedNumber2List<T> ReSuccess(IList<T> data, int totalCount, List<decimal> details)
{
return new ResultPagedNumber2List<T>(data, totalCount, details);
}
/// <summary>
/// 创建成功的返回消息
/// </summary>
/// <returns></returns>
public new static ResultPagedNumber2List<T> ReSuccess()
{
return new ResultPagedNumber2List<T>(new List<T>(), 0, new List<decimal>());
}
/// <summary>
/// 创建返回信息(返回处理失败)
/// </summary>
/// <param name="message">结果消息</param>
/// <param name="status">结果状态</param>
/// <returns></returns>
public new static ResultPagedNumber2List<T> ReFailure(string message, int status)
{
var result = new ResultPagedNumber2List<T>();
result.To(message, status);
return result;
}
/// <summary>
/// 创建返回信息(返回处理失败)
/// </summary>
/// <param name="result">结果消息</param>
/// <returns></returns>
public new static ResultPagedNumber2List<T> ReFailure(ValueTuple<int, string> result)
{
var res = new ResultPagedNumber2List<T>();
res.To(result);
return res;
}
/// <summary>
/// 创建返回信息(返回处理失败)
/// </summary>
/// <param name="result">结果</param>
/// <returns></returns>
public new static ResultPagedNumber2List<T> ReFailure(Result result)
{
var re = new ResultPagedNumber2List<T>();
re.To(result);
return re;
}
/// <summary>
/// 转换为 task
/// </summary>
/// <returns></returns>
public new Task<ResultPagedNumber2List<T>> AsTask()
{
return Task.FromResult(this);
}
}
}

View File

@@ -0,0 +1,64 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
using WMS.Web.Core;
using WMS.Web.Domain.Values;
namespace WMS.Web.Domain.Entitys
{
/// <summary>
/// 成品仓即时库存
/// </summary>
[Serializable]
[Table("t_wms_product_inventory")]
public class ProductInventory : EntityBase
{
public ProductInventory() { }
/// <summary>
/// 主键 订单编号
/// </summary>
[Column("Id")]
public override int Id { get; set; }
/// <summary>
/// 物料编码
/// </summary>
[Column("MaterialNumber")]
public string MaterialNumber { get; set; }
/// <summary>
/// 单据类型
/// </summary>
[Column("Type")]
public ProductInventoryType Type { get; set; } = ProductInventoryType.JinDie;
/// <summary>
/// 组织编码
///</summary>
[Column("OrgCode")]
public string OrgCode { get; set; }
/// <summary>
/// 仓库
///</summary>
[Column("StockCode")]
public string StockCode { get; set; }
/// <summary>
/// 客户/店铺
///</summary>
[Column("Customer")]
public string Customer { get; set; }
/// <summary>
/// 批号
///</summary>
[Column("Batch")]
public string Batch { get; set; }
/// <summary>
/// 可用量
///</summary>
[Column("Qty")]
public decimal Qty { get; set; } = 0;
/// <summary>
/// 库存量
///</summary>
[Column("BeforeQty")]
public decimal BeforeQty { get; set; } = 0;
}
}

View File

@@ -71,6 +71,11 @@ namespace WMS.Web.Domain.Infrastructure
/// </summary>
/// <returns></returns>
Task<List<UcStockResponse>> GetUcStockAsync(string systemCode,string name, int companyId);
/// <summary>
/// 获取仓库总公司
/// </summary>
/// <returns></returns>
Task<List<UcStockHeadOfficeResponse>> GetUcStockByHeadOfficeAsync(string name, int companyId);
/// <summary>
/// 获取事务 用来处理即时库存

View File

@@ -0,0 +1,40 @@
using AutoMapper;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using WMS.Web.Core.Dto.Inventory;
using WMS.Web.Core.Dto.ProductInventory;
using WMS.Web.Domain.Entitys;
using WMS.Web.Domain.IService.Public;
using WMS.Web.Domain.Values;
namespace WMS.Web.Domain.Infrastructure
{
/// <summary>
/// 成品仓即时库存
/// </summary>
public interface IProductInventoryRepositories
{
/// <summary>
/// 添加
/// </summary>
/// <param name="entitys"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
Task<bool> AddRange(List<ProductInventory> entitys, bool isTransaction = true);
/// <summary>
/// 删除
/// </summary>
/// <param name="isTransaction"></param>
/// <returns></returns>
Task<bool> Delete(ProductInventoryType type, bool isTransaction = true);
/// <summary>
/// 列表-分页
/// </summary>
/// <param name="dto"></param>
/// <param name="companyId"></param>
/// <returns></returns>
Task<(List<ProductInventoryQueryResponse> list, int total, List<decimal> details)> GetListAsync(ProductInventoryQueryRequest dto, int companyId = 0);
}
}

View File

@@ -70,5 +70,11 @@ namespace WMS.Web.Domain.Values
/// </summary>
[EnumRemark("出库信息")]
OutStockTaskInfo = 12,
/// <summary>
/// 成品即时库存
/// </summary>
[EnumRemark("成品即时库存")]
ProductInventory = 13,
}
}

View File

@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Text;
using WMS.Web.Core;
namespace WMS.Web.Domain.Values
{
/// <summary>
/// 成品即时库存类型
/// </summary>
public enum ProductInventoryType
{
/// <summary>
/// 金蝶
/// </summary>
[EnumRemark("金蝶")]
JinDie = 0,
/// <summary>
/// 领星
/// </summary>
[EnumRemark("领星")]
LingXing = 1,
/// <summary>
/// 聚水潭
/// </summary>
[EnumRemark("聚水潭")]
JushuiTan = 2,
}
}

View File

@@ -211,5 +211,9 @@ namespace WMS.Web.Domain.Values.Single
/// 获取仓位详情根据仓位Codes集合和公司ID
/// </summary>
GetWmsSubWarehouseByCodesAndCompany = 48,
/// <summary>
/// 获取仓库::根据总公司标记获取仓库
/// </summary>
GetWmsWarehouseByHeadOfficeAndNameAndCompany = 49,
}
}

View File

@@ -168,7 +168,20 @@ namespace WMS.Web.Repositories
}
return true;
}
/// <summary>
/// 根据总公司获取仓位
/// </summary>
/// <param name="name"></param>
/// <param name="companyId"></param>
/// <returns></returns>
public async Task<List<UcStockHeadOfficeResponse>> GetUcStockByHeadOfficeAsync(string name, int companyId)
{
var result = await _singleDataService.GetSysConfigData<ResultList<UcStockHeadOfficeResponse>, SystemCodeRequest>
(new SystemCodeRequest("", name, companyId),
SysConfigAction.GetWmsWarehouseByHeadOfficeAndNameAndCompany);
if (!result.Success)
return null;
return result.Data.ToList();
}
}
}

View File

@@ -414,8 +414,16 @@ namespace WMS.Web.Repositories.Configuration
.SetValueComparer(valueComparer); ;
});
//成品即时库存
builder.Entity<ProductInventory>(ent =>
{
ent.ToTable("t_wms_product_inventory");
ent.HasKey(x => x.Id);
});
base.OnModelCreating(builder);
}
public DbSet<ProductInventory> ProductInventory { get; set; }
public DbSet<Materials> Materials { get; set; }
public DbSet<BoxMarkBillNo> BoxMarkBillNo { get; set; }
public DbSet<BoxMark> BoxMark { get; set; }

View File

@@ -81,7 +81,7 @@ namespace Microsoft.Extensions.DependencyInjection
services.AddTransient<IMaterialsRepositories, MaterialsRepositories>();
services.AddTransient<ISubscribeNotificationRepositories, SubscribeNotificationRepositories>();
services.AddTransient<IProductInventoryRepositories, ProductInventoryRepositories>();
}
}
}

View File

@@ -0,0 +1,177 @@
using AutoMapper;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WMS.Web.Core.Dto.Erp.Customer;
using WMS.Web.Core.Dto.Erp.Org;
using WMS.Web.Core.Dto.Erp;
using WMS.Web.Core.Dto.ProductInventory;
using WMS.Web.Domain.Entitys;
using WMS.Web.Domain.Infrastructure;
using WMS.Web.Domain.IService.Public;
using WMS.Web.Domain.Values;
using WMS.Web.Repositories.Configuration;
using WMS.Web.Core.Dto.OutStockTask;
using WMS.Web.Domain.Values.Single;
using WMS.Web.Core;
using NPOI.SS.Formula.Functions;
namespace WMS.Web.Repositories
{
/// <summary>
/// 成品仓即时库存
/// </summary>
public class ProductInventoryRepositories : IAllFielRepositories<ProductInventoryQueryRequest>, IProductInventoryRepositories
{
private readonly IMapper _mapper;
private readonly IServiceProvider _serviceProvider;
private readonly ILoginRepositories _loginRepositories;
private readonly IBasicsRepositories _basicsRepositories;
private readonly RepositoryDbContext _context;
private readonly IErpService _erpService;
private readonly ISingleDataService _singleDataService;
private readonly IErpBasicDataExtendService _erpBasicDataExtendService;
public ProductInventoryRepositories(RepositoryDbContext context,
IMapper mapper,
IErpService erpService,
IBasicsRepositories basicsRepositories,
ILoginRepositories loginRepositories,
IServiceProvider serviceProvider,
ISingleDataService singleDataService,
IErpBasicDataExtendService erpBasicDataExtendService)
{
_erpService = erpService;
_context = context;
_mapper = mapper;
_basicsRepositories = basicsRepositories;
_serviceProvider = serviceProvider;
_loginRepositories = loginRepositories;
_singleDataService = singleDataService;
_erpBasicDataExtendService = erpBasicDataExtendService;
}
public async Task<bool> AddRange(List<ProductInventory> entitys, bool isTransaction = true)
{
IDbContextTransaction _transaction = null;
if (isTransaction)
_transaction = _context.Database.BeginTransaction();
try
{
if (entitys != null && entitys.Count != 0)
{
await _context.ProductInventory.AddRangeAsync(entitys);
await _context.SaveChangesAsync();
}
if (_transaction != null)
_transaction.Commit();
return true;
}
catch
{
if (_transaction != null)
_transaction.Rollback();
return false;
}
}
public async Task<bool> Delete(ProductInventoryType type, bool isTransaction = true)
{
IDbContextTransaction _transaction = null;
if (isTransaction)
_transaction = _context.Database.BeginTransaction();
try
{
var list = await _context.ProductInventory.Where(w => w.Type == type).ToListAsync();
_context.RemoveRange(list);
if (_transaction != null)
_transaction.Commit();
return true;
}
catch
{
if (_transaction != null)
_transaction.Rollback();
return false;
}
}
public async Task<(List<ProductInventoryQueryResponse> list, int total, List<decimal> details)> GetListAsync(ProductInventoryQueryRequest dto, int companyId = 0)
{
if (companyId == 0)
companyId = _loginRepositories.CompanyId;
#region erp基础资料
List<string> mNumber = new List<string>();
var materials_result = await _erpService.BillQueryForMaterial();
List<ErpMaterialDto> materials = new List<ErpMaterialDto>();
if (materials_result.IsSuccess)
materials = materials_result.Data.ToList();
//物料集合;模糊查询后的物料集合
if (!string.IsNullOrEmpty(dto.MaterialNumber))
{
if (materials != null)
mNumber = materials.Where(w => w.MaterialNumber.Contains(dto.MaterialNumber)
|| w.MaterialName.Contains(dto.MaterialNumber)
|| w.Specifications.Contains(dto.MaterialNumber)
).Select(s => s.MaterialNumber).ToList();
}
//取组织
var org_result = await _erpService.BillQueryForOrg();
List<ErpOrgDto> orgs = new List<ErpOrgDto>();
if (org_result.IsSuccess)
orgs = org_result.Data.ToList();
#endregion
var query = _context.ProductInventory
.OrderByDescending(o => o.Id)
.Where(adv => 1 == 1);
if (!string.IsNullOrEmpty(dto.MaterialNumber))
query = query.Where(w => mNumber.Contains(w.MaterialNumber));
if (!string.IsNullOrEmpty(dto.Customer))
query = query.Where(w => dto.Customer.Contains(w.MaterialNumber));
if (!string.IsNullOrEmpty(dto.StockCode))
query = query.Where(w => dto.StockCode.Contains(w.StockCode));
//组装
int total = await query.CountAsync();
decimal qty = await query.SumAsync(s => s.Qty);
decimal beforeQty = await query.SumAsync(s => s.BeforeQty);
List<decimal> details = new List<decimal>();
details.Add(qty);
details.Add(beforeQty);
var list = await query.Select(s => new ProductInventoryQueryResponse()
{
#region dto组装
Id = s.Id,
Type = s.Type.GetRemark(),
Stock = _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, companyId, s.StockCode + s.OrgCode),
Org = _erpBasicDataExtendService.GetOrgName(orgs, s.OrgCode),
MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.MaterialNumber),
MaterialNumber = s.MaterialNumber,
Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.MaterialNumber),
Batch = s.Batch,
Customer = s.Customer,
Qty = s.Qty,
BeforeQty = s.BeforeQty
#endregion
}).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync();
return (list, total, details);
}
public async Task<(object obj, int total)> GetListField(ProductInventoryQueryRequest dto, int companyId)
{
var (list, count, qty) = await GetListAsync(dto, companyId);
return (list, count);
}
}
}