Files
wcs/WCS.BLL/Services/Service/StockTakingService.cs
2024-05-09 09:43:28 +08:00

957 lines
41 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.Data.SqlClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WCS.BLL.DbModels;
using WCS.BLL.Manager;
using WCS.BLL.Services.IService;
using WCS.DAL.Db;
using WCS.DAL.DbModels;
using WCS.Model;
using WCS.Model.ApiModel.InOutRecord;
using WCS.Model.ApiModel.Stocktaking;
namespace WCS.BLL.Services.Service
{
public class StockTakingService : IStockTakingService
{
#region SysStockTakingOrder
public async Task<ResponseBase> SysStockTakingOrder(SysStockTakingOrderRequest request)
{
//先判断盘点单据号是否已存在(避免前端多次提交后生成多个的情况)
var stocktakingOrder = await DbHelp.db.Queryable<StockTakingOrder>()
.Where(t => t.StocktakingOrderNumber == request.StocktakingOrderNumber)
.FirstAsync();
if (stocktakingOrder != null)
return new SysStockTakingOrderResponse()
{
Code = 201,
Message = $"操作失败:盘点单据{stocktakingOrder.StocktakingOrderNumber}已存在!"
};
else
{
//分成三类
switch (request.StocktakingOrderType)
{
case "shelfCodes":
return await SysStockTakingOrderByShelfCodes(request);
case "matCodes":
return await SysStockTakingOrderByMatCodes(request);
case "snList":
return await SysStockTakingOrderSnList(request);
default:
return new SysStockTakingOrderResponse()
{
Code = 201,
Message = $"操作失败:[{request.StocktakingOrderType}]不支持的操作!!"
};
}
}
}
public async Task<ResponseBase> SysStockTakingOrderByShelfCodes(SysStockTakingOrderRequest request)
{
//校验参数
if (request.List == null || request.List.Count == 0)
return new SysStockTakingOrderResponse()
{
Code = 201,
Message = $"操作失败:缺少必要参数"
};
//先判断是否有这些货架
var shelfs = ShelfManager.Shelves
.Where(t => request.List.Contains(t.ShelfCode))
.ToList();
if (shelfs.Count < request.List.Count)
{
foreach (var shelf in shelfs)
{
request.List.RemoveAll(t => t == shelf.ShelfCode);
}
return new SysStockTakingOrderResponse()
{
Code = 201,
Message = $"操作失败:货架[{string.Join(",", request.List)}]不存在!"
};
}
try
{
//获取库存数据 生成盘点单据
var inventoryDetails = await DbHelp.db.Queryable<InventoryDetail>()
.Includes(t => t.StoreInfo)
.Where(t => request.List.Contains(t.StoreInfo.ShelfCode))
.ToListAsync();
if (inventoryDetails == null || inventoryDetails.Count == 0)
{
return new SysStockTakingOrderResponse()
{
Code = 201,
Message = $"操作失败:未找到需要盘点的库存数据!"
};
}
await DbHelp.db.BeginTranAsync();
//盘点单据保存
var stockTakingOrder = new StockTakingOrder()
{
StocktakingOrderNumber = request.StocktakingOrderNumber,
StocktakingOrderSource = request.StocktakingOrderSource,
CreateUser = request.UserName
};
var stockTakingOrderId = await DbHelp.db.Insertable(stockTakingOrder).ExecuteReturnIdentityAsync();
stockTakingOrder.Id = stockTakingOrderId;
//盘点物料明细保存
foreach (var inventoryDetail in inventoryDetails)
{
var stockTakingOrderMatDetail = new StockTakingOrderMatDetail()
{
StocktakingOrderId = stockTakingOrderId,
StocktakingOrderNumber = request.StocktakingOrderNumber,
StoreId = inventoryDetail.StoreId,
StoreCode = inventoryDetail.StoreCode,
InventoryDetailId = inventoryDetail.Id,
MatSN = inventoryDetail.MatSN,
MatCode = inventoryDetail.MatCode,
MatName = inventoryDetail.MatName,
MatBatch = inventoryDetail.MatBatch,
MatSpec = inventoryDetail.MatSpec,
MatQty = inventoryDetail.MatQty,
MatCustomer = inventoryDetail.MatCustomer,
MatSupplier = inventoryDetail.MatSupplier,
IsStocktaking = false,
StocktakingQty = inventoryDetail.MatQty,
UpdateUser = request.UserName
};
await DbHelp.db.Insertable(stockTakingOrderMatDetail).ExecuteReturnIdentityAsync();
}
await DbHelp.db.CommitTranAsync();
return new SysStockTakingOrderResponse()
{
Data = new SysStockTakingOrderData() { StocktakingOrderNumber = request.StocktakingOrderNumber },
Code = 200,
Message = $"Success"
};
}
catch (Exception ex)
{
return new SysStockTakingOrderResponse()
{
Code = 201,
Message = $"操作失败:{ex.Message}"
};
}
}
public async Task<ResponseBase> SysStockTakingOrderByMatCodes(SysStockTakingOrderRequest request)
{
//校验参数
if (request.List == null || request.List.Count == 0)
return new SysStockTakingOrderResponse()
{
Code = 201,
Message = $"操作失败:缺少必要参数"
};
//获取库存数据 生成盘点单据
var inventoryDetails = await DbHelp.db.Queryable<InventoryDetail>()
.Where(t => request.List.Contains(t.MatCode))
.ToListAsync();
if (inventoryDetails == null || inventoryDetails.Count == 0)
{
return new SysStockTakingOrderResponse()
{
Code = 201,
Message = $"操作失败:未找到需要盘点的库存数据!"
};
}
try
{
await DbHelp.db.BeginTranAsync();
//盘点单据保存
var stockTakingOrder = new StockTakingOrder()
{
StocktakingOrderNumber = request.StocktakingOrderNumber,
StocktakingOrderSource = request.StocktakingOrderSource,
CreateUser = request.UserName
};
var stockTakingOrderId = await DbHelp.db.Insertable(stockTakingOrder).ExecuteReturnIdentityAsync();
stockTakingOrder.Id = stockTakingOrderId;
//盘点物料明细保存
foreach (var inventoryDetail in inventoryDetails)
{
var stockTakingOrderMatDetail = new StockTakingOrderMatDetail()
{
StocktakingOrderId = stockTakingOrderId,
StocktakingOrderNumber = request.StocktakingOrderNumber,
StoreId = inventoryDetail.StoreId,
StoreCode = inventoryDetail.StoreCode,
InventoryDetailId = inventoryDetail.Id,
MatSN = inventoryDetail.MatSN,
MatCode = inventoryDetail.MatCode,
MatName = inventoryDetail.MatName,
MatBatch = inventoryDetail.MatBatch,
MatSpec = inventoryDetail.MatSpec,
MatQty = inventoryDetail.MatQty,
MatCustomer = inventoryDetail.MatCustomer,
MatSupplier = inventoryDetail.MatSupplier,
IsStocktaking = false,
StocktakingQty = inventoryDetail.MatQty,
UpdateUser = request.UserName
};
await DbHelp.db.Insertable(stockTakingOrderMatDetail).ExecuteReturnIdentityAsync();
}
await DbHelp.db.CommitTranAsync();
return new SysStockTakingOrderResponse()
{
Data = new SysStockTakingOrderData() { StocktakingOrderNumber = request.StocktakingOrderNumber },
Code = 200,
Message = $"Success"
};
}
catch (Exception ex)
{
return new SysStockTakingOrderResponse()
{
Code = 201,
Message = $"操作失败:{ex.Message}"
};
}
}
public async Task<ResponseBase> SysStockTakingOrderSnList(SysStockTakingOrderRequest request)
{
//校验参数
if (request.List == null || request.List.Count == 0)
return new SysStockTakingOrderResponse()
{
Code = 201,
Message = $"操作失败:缺少必要参数"
};
//获取库存数据 生成盘点单据
var inventoryDetails = await DbHelp.db.Queryable<InventoryDetail>()
.Where(t => request.List.Contains(t.MatSN))
.ToListAsync();
if (inventoryDetails == null || inventoryDetails.Count == 0)
{
return new SysStockTakingOrderResponse()
{
Code = 201,
Message = $"操作失败:未找到需要盘点的库存数据!"
};
}
try
{
await DbHelp.db.BeginTranAsync();
//盘点单据保存
var stockTakingOrder = new StockTakingOrder()
{
StocktakingOrderNumber = request.StocktakingOrderNumber,
StocktakingOrderSource = request.StocktakingOrderSource,
CreateUser = request.UserName
};
var stockTakingOrderId = await DbHelp.db.Insertable(stockTakingOrder).ExecuteReturnIdentityAsync();
stockTakingOrder.Id = stockTakingOrderId;
//盘点物料明细保存
foreach (var inventoryDetail in inventoryDetails)
{
var stockTakingOrderMatDetail = new StockTakingOrderMatDetail()
{
StocktakingOrderId = stockTakingOrderId,
StocktakingOrderNumber = request.StocktakingOrderNumber,
StoreId = inventoryDetail.StoreId,
StoreCode = inventoryDetail.StoreCode,
InventoryDetailId = inventoryDetail.Id,
MatSN = inventoryDetail.MatSN,
MatCode = inventoryDetail.MatCode,
MatName = inventoryDetail.MatName,
MatBatch = inventoryDetail.MatBatch,
MatSpec = inventoryDetail.MatSpec,
MatQty = inventoryDetail.MatQty,
MatCustomer = inventoryDetail.MatCustomer,
MatSupplier = inventoryDetail.MatSupplier,
IsStocktaking = false,
StocktakingQty = inventoryDetail.MatQty,
UpdateUser = request.UserName
};
await DbHelp.db.Insertable(stockTakingOrderMatDetail).ExecuteReturnIdentityAsync();
}
await DbHelp.db.CommitTranAsync();
return new SysStockTakingOrderResponse()
{
Data = new SysStockTakingOrderData() { StocktakingOrderNumber = request.StocktakingOrderNumber },
Code = 200,
Message = $"Success"
};
}
catch (Exception ex)
{
return new SysStockTakingOrderResponse()
{
Code = 201,
Message = $"操作失败:{ex.Message}"
};
}
}
#endregion
public async Task<PageQueryResponse<StockTakingOrder>> getStockTakingOrders(GetStockTakingOrdersRequest request)
{
try
{
var recordsQueryable = DbHelp.db.Queryable<StockTakingOrder>()
.WhereIF(!string.IsNullOrEmpty(request.StocktakingOrderNumber), t => t.StocktakingOrderNumber.Contains(request.StocktakingOrderNumber))
.WhereIF(!string.IsNullOrEmpty(request.StocktakingOrderSource), t => t.StocktakingOrderSource != null && t.StocktakingOrderSource.Contains(request.StocktakingOrderSource));
switch (request.StocktakingOrderStatus)
{
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
default:
break;
}
var totalCount = await recordsQueryable.CountAsync();
var records = await recordsQueryable
.Skip((request.PageNumber - 1) * request.PageSize).Take(request.PageSize)
.Select<StockTakingOrder>()
.ToListAsync();
//生成序号
for (int i = 0; i < records.Count; i++)
{
records[i].RowNumber = (request.PageNumber - 1) * 10 + i + 1;
}
return new PageQueryResponse<StockTakingOrder>()
{
Code = 200,
Message = $"success",
Data = new PageQueryResponseData<StockTakingOrder>()
{
TotalCount = totalCount,
MaxPage = request.PageSize == 0 ? 0 : (int)Math.Ceiling((decimal)totalCount / request.PageSize),
Count = records.Count,
Lists = records.ToList()
}
};
}
catch (Exception ex)
{
return new PageQueryResponse<StockTakingOrder>()
{
Code = 300,
Message = $"操作失败:{ex.Message}",
};
}
}
public async Task<PageQueryResponse<StockTakingOrder>> getStockTakingOrdersByStatus(GetStockTakingOrdersRequest request)
{
try
{
var recordsQueryable = DbHelp.db.Queryable<StockTakingOrder>();
switch (request.StocktakingOrderStatus)
{
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
default:
break;
}
var records = await recordsQueryable
.OrderByDescending(t => t.CreateTime)
.Take(40)
.ToListAsync();
return new PageQueryResponse<StockTakingOrder>()
{
Code = 200,
Message = $"success",
Data = new PageQueryResponseData<StockTakingOrder>()
{
Lists = records.ToList()
}
};
}
catch (Exception ex)
{
return new PageQueryResponse<StockTakingOrder>()
{
Code = 300,
Message = $"操作失败:{ex.Message}",
};
}
}
public async Task<ResponseBase> getStockTakingOrderMatDetail(GetStockTakingOrderMatDetailRequest request)
{
#region
StockTakingOrder order = null;
if (request.StockTakingOrderId != 0)
{
order = await DbHelp.db.Queryable<StockTakingOrder>().Where(t => t.Id == request.StockTakingOrderId).FirstAsync();
if (order == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"查询失败不存在Id为{request.StockTakingOrderId}的盘点单!",
};
}
}
else if (!string.IsNullOrEmpty(request.StockTakingOrderNumber))
{
order = await DbHelp.db.Queryable<StockTakingOrder>().Where(t => t.StocktakingOrderNumber == request.StockTakingOrderNumber)
.FirstAsync();
if (order == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"查询失败:不存在单据号为{request.StockTakingOrderNumber}的盘点单!",
};
}
}
else
{
return new ResponseCommon()
{
Code = 201,
Message = $"查询失败:缺少必要参数!",
};
}
#endregion
//查询物料明细
var stockTakingOrderMatDetail = await DbHelp.db.Queryable<StockTakingOrderMatDetail>()
.Where(t => t.StocktakingOrderId == order.Id)
.ToListAsync();
//生成序号
for (int i = 0; i < stockTakingOrderMatDetail.Count; i++)
{
stockTakingOrderMatDetail[i].RowNumber = i + 1;
}
return new ResponseCommon<List<StockTakingOrderMatDetail>>()
{
Code = 200,
Message = "success",
Data = stockTakingOrderMatDetail
};
}
public async Task<ResponseBase> startStockTakingOrder(GetStockTakingOrderMatDetailRequest request)
{
try
{
#region
StockTakingOrder order = null;
if (request.StockTakingOrderId != 0)
{
order = await DbHelp.db.Queryable<StockTakingOrder>().Where(t => t.Id == request.StockTakingOrderId).FirstAsync();
if (order == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"操作失败不存在Id为{request.StockTakingOrderId}的盘点单!",
};
}
}
else if (!string.IsNullOrEmpty(request.StockTakingOrderNumber))
{
order = await DbHelp.db.Queryable<StockTakingOrder>().Where(t => t.StocktakingOrderNumber == request.StockTakingOrderNumber)
.FirstAsync();
if (order == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"操作失败:不存在单据号为{request.StockTakingOrderNumber}的盘点单!",
};
}
}
else
{
return new ResponseCommon()
{
Code = 201,
Message = $"操作失败:缺少必要参数!",
};
}
#endregion
#region
//查询物料明细
var stockTakingOrderMatDetails = await DbHelp.db.Queryable<StockTakingOrderMatDetail>()
.Where(t => t.StocktakingOrderId == order.Id)
//.Where(t => t.IsStocktaking == false)
.Includes(t => t.StoreInfo)
.ToListAsync();
if (stockTakingOrderMatDetails == null || stockTakingOrderMatDetails.Count == 0)
{
return new ResponseCommon()
{
Code = 201,
Message = $"盘点单据{order.StocktakingOrderNumber}物料已全部盘点!",
Data = null
};
}
#endregion
#region
var shelfIds = stockTakingOrderMatDetails.Select(t => t.StoreInfo.ShelfId)
.Distinct()
.ToList();
var shelfs = ShelfManager.Shelves.Where(t => shelfIds.Contains(t.ShelfId)).ToList(); ;
var outherModeShelfs = shelfs.Where(t => t.CurrentMode != HardWare.Mode.).Select(t => t.ShelfCode).ToList();
if (outherModeShelfs != null && outherModeShelfs.Count > 0)
{
return new ResponseCommon()
{
Code = 201,
Message = $"进入盘点模式失败:货架{string.Join("", outherModeShelfs)}不在待机模式",
Data = null
};
}
//对应的货架对应位置 进入盘点模式 亮灯
shelfs.ForEach(shelf =>
{
var matDetails = stockTakingOrderMatDetails.Where(t => t.StoreInfo.ShelfCode == shelf.ShelfCode)
.Distinct()
.ToList();
shelf.GoInStocktaking(matDetails, order);
shelf.OrderNumber = order.StocktakingOrderNumber;
});
//返回
return new ResponseCommon()
{
Code = 200,
Message = "Success",
Data = null
};
#endregion
}
catch (Exception ex)
{
await endStockTakingOrder(request);
return new ResponseCommon()
{
Code = 300,
Message = $"操作失败,{ex.Message}",
};
}
}
public async Task<ResponseBase> endStockTakingOrder(GetStockTakingOrderMatDetailRequest request)
{
try
{
#region
StockTakingOrder order = null;
if (request.StockTakingOrderId != 0)
{
order = await DbHelp.db.Queryable<StockTakingOrder>().Where(t => t.Id == request.StockTakingOrderId).FirstAsync();
if (order == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"操作失败不存在Id为{request.StockTakingOrderId}的盘点单!",
};
}
}
else if (!string.IsNullOrEmpty(request.StockTakingOrderNumber))
{
order = await DbHelp.db.Queryable<StockTakingOrder>().Where(t => t.StocktakingOrderNumber == request.StockTakingOrderNumber)
.FirstAsync();
if (order == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"操作失败:不存在单据号为{request.StockTakingOrderNumber}的盘点单!",
};
}
}
else
{
return new ResponseCommon()
{
Code = 201,
Message = $"操作失败:缺少必要参数!",
};
}
#endregion
#region
var shelfs = ShelfManager.Shelves.Where(t => t.CurrentMode == HardWare.Mode. && t.OrderNumber == order.StocktakingOrderNumber).ToList();
shelfs.ForEach(t =>
{
t.GoOutStocktaking();
});
#endregion
return new ResponseCommon()
{
Code = 200,
Message = $"success",
Data = shelfs.Select(t => t.ShelfCode).ToList(),
};
}
catch (Exception ex)
{
return new ResponseCommon()
{
Code = 300,
Message = $"操作失败,{ex.Message}",
};
}
}
public async Task<ResponseBase> queryMatInfoInStocktakingOrder(QueryMatInfoInStocktakingOrderRequest request)
{
//判断库存中是否有这个物料
var inventoryDetail = await DbHelp.db.Queryable<InventoryDetail>()
.LeftJoin<StoreInfo>((id, si) => id.StoreId == si.Id)
.Where((id, si) => id.MatSN == request.MatSN)
.Select((id, si) => si)
.FirstAsync();
if (inventoryDetail == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"库存中不存在物料[{request.MatSN}]",
};
}
//判断货架是否已进入盘点模式
var shelf = ShelfManager.Shelves
.Where(t => t.ShelfCode == inventoryDetail.ShelfCode)
.FirstOrDefault(); ;
if (shelf == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"货架{inventoryDetail.ShelfCode}不存在!",
};
}
else if (shelf.CurrentMode != HardWare.Mode.)
{
return new ResponseCommon()
{
Code = 201,
Message = $"货架{inventoryDetail.ShelfCode}不在盘点模式!",
};
}
var stockTakingOrder = await DbHelp.db.Queryable<StockTakingOrder>()
.Where(t => t.StocktakingOrderNumber == shelf.OrderNumber)
.FirstAsync();
if (stockTakingOrder == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"未找到对应盘点单据{shelf.OrderNumber}",
};
}
//返回具体的单据信息
var stockTakinbgOrder = await DbHelp.db.Queryable<StockTakingOrderMatDetail>()
.Where(t => t.StocktakingOrderId == stockTakingOrder.Id)
.Where(t => t.MatSN == request.MatSN)
.FirstAsync();
return new ResponseCommon<StockTakingOrderMatDetail>()
{
Code = 200,
Message = "success",
Data = stockTakinbgOrder
};
}
public async Task<ResponseBase> confirmStocktakingOrder(ConfirmStocktakingOrderRequest request)
{
try
{
//获取盘点物料明细
var stockTakingMatDetail = await DbHelp.db.Queryable<StockTakingOrderMatDetail>()
.Where(t => t.Id == request.Id)
.Includes(t => t.StoreInfo)
.FirstAsync();
if (stockTakingMatDetail == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"不存在的盘点明细",
};
}
DbHelp.db.BeginTran();
//修改盘点物料明细的数量
stockTakingMatDetail.StocktakingQty = request.Qty;
stockTakingMatDetail.IsStocktaking = true;
DbHelp.db.Updateable(stockTakingMatDetail)
.ExecuteCommand();
#region
//判断货架是否已进入盘点模式
var shelf = ShelfManager.Shelves
.Where(t => t.ShelfCode == stockTakingMatDetail.StoreInfo.ShelfCode)
.FirstOrDefault(); ;
if (shelf == null)
{
DbHelp.db.RollbackTran();
return new ResponseCommon()
{
Code = 201,
Message = $"货架{stockTakingMatDetail.StoreInfo.ShelfCode}不存在!",
};
}
else if (shelf.CurrentMode != HardWare.Mode.)
{
DbHelp.db.RollbackTran();
return new ResponseCommon()
{
Code = 201,
Message = $"货架{stockTakingMatDetail.StoreInfo.ShelfCode}不在盘点模式!",
};
}
if (shelf.OrderNumber != request.StocktakingOrderNumber)
{
return new ResponseCommon()
{
Code = 201,
Message = $"盘点单据{request.StocktakingOrderNumber}不在盘点模式!",
};
}
shelf.ConfirmStocktakingSingle(stockTakingMatDetail.StoreInfo.BoardId, stockTakingMatDetail.StoreInfo.LightNumber);
#endregion
DbHelp.db.CommitTran();
return new ResponseCommon()
{
Code = 200,
Message = $"success",
};
}
catch (Exception ex)
{
DbHelp.db.RollbackTran();
return new ResponseCommon()
{
Code = 201,
Message = $"确认盘点失败:{ex.Message}",
};
}
}
public async Task<ResponseBase> commitStockTakingOrder(GetStockTakingOrderMatDetailRequest request)
{
try
{
#region
StockTakingOrder order = null;
if (request.StockTakingOrderId != 0)
{
order = await DbHelp.db.Queryable<StockTakingOrder>().Where(t => t.Id == request.StockTakingOrderId).FirstAsync();
if (order == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"操作失败不存在Id为{request.StockTakingOrderId}的盘点单!",
};
}
}
else if (!string.IsNullOrEmpty(request.StockTakingOrderNumber))
{
order = await DbHelp.db.Queryable<StockTakingOrder>().Where(t => t.StocktakingOrderNumber == request.StockTakingOrderNumber)
.FirstAsync();
if (order == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"操作失败:不存在单据号为{request.StockTakingOrderNumber}的盘点单!",
};
}
}
else
{
return new ResponseCommon()
{
Code = 201,
Message = $"操作失败:缺少必要参数!",
};
}
#endregion
#region
if (order.StocktakingOrderStatus == StocktakingOrderStatus.)
{
return new ResponseCommon()
{
Code = 201,
Message = $"单据已提交,请勿重复提交!",
};
}
//else if (order.StocktakingOrderStatus != StocktakingOrderStatus.盘点完成)
//{
// return new ResponseCommon()
// {
// Code = 201,
// Message = $"单据未盘点完成!!!",
// };
//}
#endregion
#region
var stockTakingOrderMatDetails = await DbHelp.db.Queryable<StockTakingOrderMatDetail>()
.Where(t => t.StocktakingOrderId == order.Id && t.IsStocktaking)
.ToListAsync();
if (stockTakingOrderMatDetails == null || stockTakingOrderMatDetails.Count == 0)
{
return new ResponseCommon()
{
Code = 201,
Message = $"不存在已盘点的物料!",
};
}
#endregion
#region
try
{
DbHelp.db.BeginTran();
var inventoryDetailIds = stockTakingOrderMatDetails.Select(t => t.InventoryDetailId)
.ToList();
//查询对应的库存数据
var inventoryDetails = DbHelp.db.Queryable<InventoryDetail>()
.Where(t => inventoryDetailIds.Contains(t.Id))
.ToList();
inventoryDetails.ForEach(inventoryDetail =>
{
//对应的盘点明细
var stockTakingOrderMatDetail = stockTakingOrderMatDetails.Where(t => t.InventoryDetailId == inventoryDetail.Id).FirstOrDefault();
if (stockTakingOrderMatDetail == null)
{
//这个分支应该是不用管的哦
}
else
{
//比对数量变化
var changedQty = stockTakingOrderMatDetail.StocktakingQty - inventoryDetail.MatQty;
if (changedQty != 0)
{
//库存表修改数量
inventoryDetail.MatQty = stockTakingOrderMatDetail.StocktakingQty;
//出入库记录表生成记录
var inOutRecord = new InOutRecord()
{
StoreCode = inventoryDetail.StoreCode,
StoreId = inventoryDetail.StoreId,
MatSN = inventoryDetail.MatSN,
MatCode = inventoryDetail.MatCode,
MatName = inventoryDetail.MatName,
MatBatch = inventoryDetail.MatBatch,
MatQty = changedQty,
MatSpec = inventoryDetail.MatSpec,
MatCustomer = inventoryDetail.MatCustomer,
MatSupplier = inventoryDetail.MatSupplier,
Direction = DirectionEnum.,
OperateUser = request.UserName
};
DbHelp.db.Updateable(inventoryDetail).ExecuteCommand();
DbHelp.db.Insertable(inOutRecord).ExecuteCommand();
}
//数量相等的情况 暂时不用管 不动库存数据也不生成记录
else
{
}
}
});
order.StocktakingOrderStatus = StocktakingOrderStatus.;
DbHelp.db.Updateable(order).ExecuteCommand();
DbHelp.db.CommitTran();
}
catch (Exception ex)
{
DbHelp.db.RollbackTran();
return new ResponseCommon()
{
Code = 300,
Message = $"操作失败,{ex.Message}",
};
}
#endregion
return new ResponseCommon()
{
Code = 200,
Message = $"success",
};
}
catch (Exception ex)
{
return new ResponseCommon()
{
Code = 300,
Message = $"操作失败,{ex.Message}",
};
}
}
}
}