1.增加单灯出库查询物料接口
2.修改入库查询物料接口 3.货架出库单据计算物料重复问题修复 4.出库单据、盘点单据生成单据号修改为按 202406100001这种格式
This commit is contained in:
@ -11,8 +11,19 @@ namespace WCS.BLL.Config
|
||||
/// </summary>
|
||||
public class JsConfig
|
||||
{
|
||||
public List<string> ModuleCodePatterns { get; set; }
|
||||
public List<string>? ModuleCodePatterns { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 不同种类的物料分批次入库
|
||||
/// </summary>
|
||||
public bool IsSameMatCodeOut { get; set; }
|
||||
/// <summary>
|
||||
/// 是否接入WMS系统
|
||||
/// </summary>
|
||||
public bool IsAccessWMS { get; set; }
|
||||
/// <summary>
|
||||
/// WMS系统
|
||||
/// </summary>
|
||||
public string? WMSUrl { get; set; }
|
||||
}
|
||||
}
|
||||
|
50
WCS.BLL/DbModels/DocumentSerialNumber.cs
Normal file
50
WCS.BLL/DbModels/DocumentSerialNumber.cs
Normal file
@ -0,0 +1,50 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WCS.DAL.DbModels;
|
||||
using WCS.Model.ApiModel.InOutRecord;
|
||||
|
||||
namespace WCS.BLL.DbModels
|
||||
{
|
||||
/// <summary>
|
||||
/// 用于记录单据生成到哪个序号了
|
||||
/// </summary>
|
||||
[SugarTable("document_serial_number")]
|
||||
public class DocumentSerialNumber
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键 自增Id
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsNullable = false, IsIdentity = true)]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 单据类型
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "document_type", IsNullable = false, ColumnDescription = "单据类型 出库单据 = 1,\r\n盘点单据 = 2,")]
|
||||
public DocumentTypeEnum DocumentType { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 当前单据序号
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "current_serial_number", IsNullable = false, ColumnDescription = "当前单据序号")]
|
||||
public int CurrentSerialNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 日期
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "update_date", IsNullable = false, ColumnDescription = "更新日期")]
|
||||
public DateTime UpdateDate { get; set; }
|
||||
}
|
||||
|
||||
public enum DocumentTypeEnum
|
||||
{
|
||||
出库单据 = 1,
|
||||
盘点单据 = 2,
|
||||
}
|
||||
|
||||
}
|
@ -5,6 +5,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.DAL.Db;
|
||||
using WCS.DAL.Db.AuthDb;
|
||||
using WCS.DAL.DbModels;
|
||||
|
||||
namespace WCS.BLL.Manager
|
||||
@ -17,9 +18,31 @@ namespace WCS.BLL.Manager
|
||||
, typeof(InventoryDetail), typeof(OutOrder), typeof(OutOrderDetail), typeof(OutOrderMatDetail)
|
||||
, typeof(ShelfTypeInfo), typeof(MatBaseInfo), typeof(MatInfo)
|
||||
, typeof(StockTakingOrder), typeof(StockTakingOrderMatDetail), typeof(InOutRecord)
|
||||
, typeof(DocumentSerialNumber)
|
||||
);
|
||||
|
||||
DbHelp.dbLog.CodeFirst.InitTables(typeof(SystemApiLogRecord));
|
||||
|
||||
//初始化单据序列号数据
|
||||
if (!DbHelp.db.Queryable<DocumentSerialNumber>().Any())
|
||||
{
|
||||
var outDocumentSerialNumber = new DocumentSerialNumber()
|
||||
{
|
||||
DocumentType = DocumentTypeEnum.出库单据,
|
||||
UpdateDate = DateTime.Now,
|
||||
CurrentSerialNumber = 0
|
||||
};
|
||||
|
||||
var stockTakingDocumentSerialNumber = new DocumentSerialNumber()
|
||||
{
|
||||
DocumentType = DocumentTypeEnum.盘点单据,
|
||||
UpdateDate = DateTime.Now,
|
||||
CurrentSerialNumber = 0
|
||||
};
|
||||
|
||||
DbHelp.db.Insertable(outDocumentSerialNumber).ExecuteCommand();
|
||||
DbHelp.db.Insertable(stockTakingDocumentSerialNumber).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ namespace WCS.BLL.Services.IService
|
||||
public ResponseBase shelfGoInInStore(ShelfGoInInstoreRequest request);
|
||||
public ResponseBase shelfGoOutInStore(ShelfGoOutInStoreRequest request);
|
||||
public Task<ResponseBase> queryByMatSn(QueryByMatSnRequest request);
|
||||
public Task<ResponseBase> queryByMatSnOut(QueryByMatSnRequest request);
|
||||
public Task<ResponseBase> queryInstoreStatus(QueryByMatSnRequest request);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime;
|
||||
@ -120,8 +121,8 @@ namespace WCS.BLL.Services.Service
|
||||
{
|
||||
lock (stockTakingFlag)
|
||||
{
|
||||
Thread.Sleep(1);
|
||||
return "PD" + DateTime.Now.ToString("yyMMddHHmmssfff");
|
||||
var serialNumber = GetSerialNumber(DocumentTypeEnum.盘点单据);
|
||||
return "PD" + DateTime.Now.ToString("yyyyMMdd") + serialNumber.ToString().PadLeft(4, '0');
|
||||
}
|
||||
}
|
||||
|
||||
@ -129,9 +130,33 @@ namespace WCS.BLL.Services.Service
|
||||
{
|
||||
lock (stockTakingFlag)
|
||||
{
|
||||
Thread.Sleep(1);
|
||||
return "CK" + DateTime.Now.ToString("yyMMddHHmmssfff");
|
||||
var serialNumber = GetSerialNumber(DocumentTypeEnum.出库单据);
|
||||
return "CK" + DateTime.Now.ToString("yyyyMMdd") + serialNumber.ToString().PadLeft(4, '0');
|
||||
}
|
||||
}
|
||||
|
||||
public int GetSerialNumber(DocumentTypeEnum documentType)
|
||||
{
|
||||
var documentSerialNumber = DbHelp.db.Queryable<DocumentSerialNumber>()
|
||||
.Where(t => t.DocumentType == documentType)
|
||||
.First();
|
||||
if (documentSerialNumber != null)
|
||||
{
|
||||
//如果日期不是当天
|
||||
if (documentSerialNumber.UpdateDate.Date != DateTime.Now.Date)
|
||||
{
|
||||
documentSerialNumber.CurrentSerialNumber = 0;
|
||||
documentSerialNumber.UpdateDate = DateTime.Now;
|
||||
}
|
||||
var serialNumber = ++documentSerialNumber.CurrentSerialNumber;
|
||||
DbHelp.db.Updateable(documentSerialNumber).ExecuteCommand();
|
||||
return serialNumber;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -121,9 +121,23 @@ namespace WCS.BLL.Services.Service
|
||||
}
|
||||
|
||||
public async Task<ResponseBase> queryByMatSn(QueryByMatSnRequest request)
|
||||
{
|
||||
//判断物料是否已入库
|
||||
var inventory = await DbHelp.db.Queryable<InventoryDetail>().Where(t => t.MatSN == request.MatSn).FirstAsync();
|
||||
if (inventory != null)
|
||||
{
|
||||
return new ResponseCommon<MatInfo>()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"操作失败:物料{inventory.MatSN}已入库!库位为{inventory.StoreCode}",
|
||||
};
|
||||
}
|
||||
|
||||
IShelfBase shelf = null;
|
||||
if (!request.IsSingleLightIn)
|
||||
{
|
||||
//获取货架
|
||||
var shelf = ShelfManager.Shelves.Where(t => t.ShelfCode == request.ShelfCode).FirstOrDefault();
|
||||
shelf = ShelfManager.Shelves.Where(t => t.ShelfCode == request.ShelfCode).FirstOrDefault();
|
||||
if (shelf == null)//货架不存在
|
||||
{
|
||||
return new ResponseCommon<MatInfo>()
|
||||
@ -141,44 +155,26 @@ namespace WCS.BLL.Services.Service
|
||||
Message = $"操作失败:货架[{request.ShelfCode}]不在入库模式!\r\n当前为{shelf.CurrentMode}",
|
||||
};
|
||||
}
|
||||
//判断物料是否已入库
|
||||
var inventory = await DbHelp.db.Queryable<InventoryDetail>().Where(t => t.MatSN == request.MatSn).FirstAsync();
|
||||
if (inventory != null)
|
||||
{
|
||||
return new ResponseCommon<MatInfo>()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"操作失败:物料{inventory.MatSN}已入库,库位为{inventory.StoreCode}",
|
||||
};
|
||||
}
|
||||
|
||||
#region 获取物料数据 //调用接口或者直接查询数据库
|
||||
//TODO做成配置 调用接口
|
||||
if (1 != 1)
|
||||
if (LocalFile.Config.IsAccessWMS)
|
||||
{
|
||||
#region 调用Mes接口获取物料信息
|
||||
#region 调用WMS接口获取物料信息
|
||||
try
|
||||
{
|
||||
var body = new
|
||||
{
|
||||
materialBar = request.MatSn
|
||||
};
|
||||
//var Result = ApiHelp.GetDataFromHttp<ResponseCommon<List<queryByBarResponse>>>("http://192.168.2.23:9213/integrate/instock/queryBybar", body, "POST");
|
||||
var Result = new ResponseCommon<List<queryByBarResponse>>()
|
||||
{
|
||||
Code = 200,
|
||||
Data = new List<queryByBarResponse>() {new queryByBarResponse()
|
||||
{
|
||||
materialBar = request.MatSn,
|
||||
materialCode = "100200300",
|
||||
materialName = "电阻",
|
||||
materialQty = 1000,
|
||||
}
|
||||
}
|
||||
};
|
||||
var Result = ApiHelp.GetDataFromHttp<ResponseCommon<List<queryByBarResponse>>>("http://192.168.2.23:9213/integrate/instock/queryBybar", body, "POST");
|
||||
|
||||
//查询到物料信息
|
||||
if (Result != null && Result.Code == 200 && Result.Data != null && Result.Data.Count > 0)
|
||||
{
|
||||
var data = Result.Data.First();
|
||||
if (!request.IsSingleLightIn && shelf != null)
|
||||
shelf.InStoreData = new MatInfoResponse()
|
||||
{
|
||||
materialBar = data.materialBar,
|
||||
@ -240,13 +236,14 @@ namespace WCS.BLL.Services.Service
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
//查询数据库
|
||||
//查询数据库是否存在这个物料
|
||||
else
|
||||
{
|
||||
var matInfo = await DbHelp.db.Queryable<MatInfo>().Where(t => t.MatSn == request.MatSn).FirstAsync();
|
||||
if (matInfo != null)
|
||||
{
|
||||
//TODO 改成wcs的实体
|
||||
if (!request.IsSingleLightIn && shelf != null)
|
||||
shelf.InStoreData = new MatInfoResponse()
|
||||
{
|
||||
materialBar = matInfo.MatSn,
|
||||
@ -276,10 +273,47 @@ namespace WCS.BLL.Services.Service
|
||||
Message = $"不存在物料{request.MatSn}"
|
||||
};
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 单灯出库时查询物料信息 这里返回库存的数据
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<ResponseBase> queryByMatSnOut(QueryByMatSnRequest request)
|
||||
{
|
||||
//判断物料是否已入库
|
||||
var inventory = await DbHelp.db.Queryable<InventoryDetail>().Where(t => t.MatSN == request.MatSn).FirstAsync();
|
||||
if (inventory == null)
|
||||
{
|
||||
return new ResponseCommon<MatInfo>()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"操作失败:物料不在库存内,无法进行出库!",
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
return new ResponseCommon<MatInfo>()
|
||||
{
|
||||
Code = 200,
|
||||
Message = $"Success",
|
||||
Data = new MatInfo()
|
||||
{
|
||||
MatSn = inventory.MatSN,
|
||||
MatCode = inventory.MatCode,
|
||||
MatName = inventory.MatName,
|
||||
MatBatch = inventory.MatBatch,
|
||||
MatQty = inventory.MatQty,
|
||||
MatSpec = inventory.MatSpec,
|
||||
MatSupplier = inventory.MatSupplier,
|
||||
MatCustomer = inventory.MatCustomer,
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<ResponseBase> queryInstoreStatus(QueryByMatSnRequest request)
|
||||
{
|
||||
//获取货架
|
||||
|
@ -505,20 +505,7 @@ namespace WCS.BLL.Services.Service
|
||||
try
|
||||
{
|
||||
DbHelp.db.BeginTran();
|
||||
|
||||
////第一步 删除、解锁 放在上一次结束入库时操作
|
||||
//var outOrderMatDetails = DbHelp.db.Queryable<OutOrderMatDetail>()
|
||||
// .Where(t => t.OrderId == order.Id)
|
||||
// .ToList();
|
||||
//var inventoryIds = outOrderMatDetails.Select(t => t.Id).ToList();
|
||||
//var inventoryDetails = DbHelp.db.Queryable<InventoryDetail>()
|
||||
// .Where(t => inventoryIds.Contains(t.Id))
|
||||
// .ToList();
|
||||
//inventoryDetails.ForEach(t => { t.IsLocked = false; });
|
||||
//DbHelp.db.Deleteable(outOrderMatDetails).ExecuteCommand();
|
||||
//DbHelp.db.Updateable(inventoryDetails).ExecuteCommand();
|
||||
|
||||
//第一步 找到需求物料
|
||||
//第一步 物料需求表
|
||||
var outOrderDetails = DbHelp.db.Queryable<OutOrderDetail>()
|
||||
.Where(t => t.OrderId == order.Id)
|
||||
.ToList();
|
||||
@ -538,6 +525,7 @@ namespace WCS.BLL.Services.Service
|
||||
var matInventoryDetails = DbHelp.db.Queryable<InventoryDetail>()
|
||||
.Where(t => t.MatCode == outOrderDetail.MatCode)
|
||||
.WhereIF(!string.IsNullOrEmpty(outOrderDetail.MatBatch), t => t.MatBatch == outOrderDetail.MatBatch)
|
||||
.Where(t => t.IsLocked == false)//未锁定的物料
|
||||
.OrderBy(t => t.MatBatch)//先进先出
|
||||
.OrderBy(t => t.MatQty)//零散料先出
|
||||
.ToList();
|
||||
|
@ -11,5 +11,7 @@ namespace WCS.Model
|
||||
public string MatSn { get; set; } = string.Empty;
|
||||
public string ShelfCode { get; set; } = string.Empty;
|
||||
public string IpAddress { get; set; } = string.Empty;
|
||||
|
||||
public bool IsSingleLightIn { get; set; } = false;
|
||||
}
|
||||
}
|
||||
|
@ -92,6 +92,18 @@ namespace WebApi.Controllers
|
||||
return await _instoreService.queryByMatSn(request);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ɨ<><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[Route("queryByMatSnOut")]
|
||||
[HttpPost(Name = "queryByMatSnOut")]
|
||||
public async Task<ResponseBase> queryByMatSnOut(QueryByMatSnRequest request)
|
||||
{
|
||||
return await _instoreService.queryByMatSnOut(request);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <20><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>״̬
|
||||
/// </summary>
|
||||
|
@ -7,7 +7,6 @@ using WCS.Model;
|
||||
|
||||
namespace WebApi.Controllers
|
||||
{
|
||||
//[ServiceFilter(typeof(LogActionFilter))]
|
||||
[ApiController]
|
||||
[Route("[controller]")]
|
||||
public class OutstoreController : ControllerBase
|
||||
|
@ -117,7 +117,7 @@
|
||||
<DataGridTextColumn IsReadOnly="True" Header="单据状态" Binding="{Binding OrderStatus}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="单据执行状态" Binding="{Binding OutOrderExeStatus}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="单据同步类型" Binding="{Binding SyncType}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="创建时间" Binding="{Binding CreateTime}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="创建时间" Binding="{Binding CreateTime,StringFormat='yyyy-MM-dd HH:mm:ss'}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="创建人" Binding="{Binding CreateUser}"></DataGridTextColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
@ -114,7 +114,7 @@
|
||||
<DataGridTextColumn IsReadOnly="True" Header="盘点单据编号" Binding="{Binding StocktakingOrderNumber}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="盘点单据来源" Binding="{Binding StocktakingOrderSource}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="盘点单据状态" Binding="{Binding StocktakingOrderStatus}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="创建时间" Binding="{Binding CreateTime}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="创建时间" Binding="{Binding CreateTime,StringFormat='yyyy-MM-dd HH:mm:ss'}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="创建人" Binding="{Binding CreateUser}"></DataGridTextColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
Reference in New Issue
Block a user