提交代码
This commit is contained in:
@ -64,6 +64,7 @@ namespace WCS.BLL.Services.Service
|
||||
Message = $"货架进入入库模式失败:{string.Join(",", shelf.ExceptionMessages)}",
|
||||
Data = null
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
public ResponseBase shelfGoOutInStore(ShelfGoOutInStoreRequest request)
|
||||
@ -78,15 +79,23 @@ namespace WCS.BLL.Services.Service
|
||||
Message = $"退出入库模式失败:货架[{request.ShelfCode}]不存在!",
|
||||
};
|
||||
}
|
||||
//TO DO 判断扫码枪 是否被其他扫码枪所占用 如果占用 直接退出入库模式 不发指令
|
||||
//两个扫码枪互相占用入库会有问题
|
||||
|
||||
//判断扫码枪 是否被其他扫码枪所占用 如果占用 直接退出入库模式 不发指令
|
||||
shelf.GoOutInstore();
|
||||
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 200,
|
||||
Message = $"货架[{request.ShelfCode}]已退出入库模式!",
|
||||
};
|
||||
if (shelf.ExceptionMessages == null || shelf.ExceptionMessages.Count == 0)
|
||||
//已退出
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 200,
|
||||
Message = $"货架[{request.ShelfCode}]已退出入库模式!",
|
||||
};
|
||||
else
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 200,
|
||||
Message = $"货架[{request.ShelfCode}]已退出入库模式!{string.Join(",", shelf.ExceptionMessages)}",
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<ResponseBase> queryByMatSn(QueryByMatSnRequest request)
|
||||
@ -120,8 +129,8 @@ namespace WCS.BLL.Services.Service
|
||||
Message = $"操作失败:物料{inventory.MatSN}已入库,库位为{inventory.StoreCode}",
|
||||
};
|
||||
}
|
||||
#region 获取物料数据
|
||||
//调用接口或者直接查询数据库
|
||||
#region 获取物料数据 //调用接口或者直接查询数据库
|
||||
//调用接口
|
||||
if (1 != 1)
|
||||
{
|
||||
|
||||
|
@ -4,11 +4,14 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TouchSocket.Sockets;
|
||||
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.OutStore;
|
||||
|
||||
namespace WCS.BLL.Services.Service
|
||||
{
|
||||
@ -55,8 +58,10 @@ namespace WCS.BLL.Services.Service
|
||||
OrderId = order.Id,
|
||||
OrderNumber = order.OrderNumber,
|
||||
MatCode = item.MatCode,
|
||||
MatName = item.MatName,
|
||||
MatBatch = item.MatBatch,
|
||||
ReqQty = item.ReqQty,
|
||||
OutQty = 0,
|
||||
CreateUser = request.UserName
|
||||
};
|
||||
await DbHelp.db.Insertable(orderDetail).ExecuteCommandAsync();
|
||||
@ -202,18 +207,31 @@ namespace WCS.BLL.Services.Service
|
||||
public async Task<ResponseBase> GetOutOrderList(GetOutOrderListRequest request)
|
||||
{
|
||||
//直接查询
|
||||
var outOrderList = await DbHelp.db.Queryable<OutOrder>()
|
||||
.WhereIF(!string.IsNullOrEmpty(request.OrderNumber), t => t.OrderNumber.Contains(request.OrderNumber))
|
||||
.Skip((request.PageNumber - 1) * request.PageSize).Take(request.PageSize)
|
||||
.ToListAsync();
|
||||
var recordsQueryable = DbHelp.db.Queryable<OutOrder>()
|
||||
.WhereIF(!string.IsNullOrEmpty(request.OrderNumber), t => t.OrderNumber.Contains(request.OrderNumber))
|
||||
.WhereIF(!string.IsNullOrEmpty(request.OrderSource), t => t.OrderSource.Contains(request.OrderSource))
|
||||
.WhereIF(!string.IsNullOrEmpty(request.OrderType), t => t.OrderType.Contains(request.OrderType));
|
||||
|
||||
var totalCount = await recordsQueryable.CountAsync();
|
||||
var records = await recordsQueryable
|
||||
.Skip((request.PageNumber - 1) * request.PageSize).Take(request.PageSize)
|
||||
.ToListAsync();
|
||||
//生成序号
|
||||
for (int i = 0; i < records.Count; i++)
|
||||
{
|
||||
records[i].RowNumber = (request.PageNumber - 1) * 10 + i + 1;
|
||||
}
|
||||
|
||||
return new PageQueryResponse<OutOrder>()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "success",
|
||||
Message = $"success",
|
||||
Data = new PageQueryResponseData<OutOrder>()
|
||||
{
|
||||
Lists = outOrderList,
|
||||
Count = outOrderList.Count
|
||||
TotalCount = totalCount,
|
||||
MaxPage = request.PageSize == 0 ? 0 : (int)Math.Ceiling((decimal)totalCount / request.PageSize),
|
||||
Count = records.Count,
|
||||
Lists = records.ToList()
|
||||
}
|
||||
};
|
||||
}
|
||||
@ -235,7 +253,7 @@ namespace WCS.BLL.Services.Service
|
||||
};
|
||||
}
|
||||
}
|
||||
else if (string.IsNullOrEmpty(request.OrderNumber))
|
||||
else if (!string.IsNullOrEmpty(request.OrderNumber))
|
||||
{
|
||||
outOrder = await DbHelp.db.Queryable<OutOrder>().Where(t => t.OrderNumber == request.OrderNumber)
|
||||
.FirstAsync();
|
||||
@ -262,29 +280,84 @@ namespace WCS.BLL.Services.Service
|
||||
var orderDetailTask = DbHelp.db.Queryable<OutOrderDetail>()
|
||||
.Where(t => t.OrderId == outOrder.Id)
|
||||
.ToListAsync();
|
||||
var orderDetail = await orderDetailTask;
|
||||
//生成序号
|
||||
for (int i = 0; i < orderDetail.Count; i++)
|
||||
{
|
||||
orderDetail[i].RowNumber = i + 1;
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
return new ResponseCommon<List<OutOrderDetail>>()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "Success",
|
||||
Data = orderDetail
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<ResponseBase> GetOutOrderMatDetail(GetOutOrderDetailRequest request)
|
||||
{
|
||||
OutOrder outOrder = null;
|
||||
|
||||
#region 查询出库单
|
||||
if (request.OrderId != 0)
|
||||
{
|
||||
outOrder = await DbHelp.db.Queryable<OutOrder>().Where(t => t.Id == request.OrderId).FirstAsync();
|
||||
if (outOrder == null)
|
||||
{
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"查询失败:不存在Id为{request.OrderId}的出库单!",
|
||||
};
|
||||
}
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(request.OrderNumber))
|
||||
{
|
||||
outOrder = await DbHelp.db.Queryable<OutOrder>().Where(t => t.OrderNumber == request.OrderNumber)
|
||||
.FirstAsync();
|
||||
if (outOrder == null)
|
||||
{
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"查询失败:不存在单据号为{request.OrderNumber}的出库单!",
|
||||
};
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"查询失败:缺少必要参数!",
|
||||
};
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 出库物料明细
|
||||
var orderMatDetailTask = DbHelp.db.Queryable<OutOrderMatDetail>()
|
||||
.Where(t => t.OrderId == outOrder.Id)
|
||||
.ToListAsync();
|
||||
var orderMatDetail = await orderMatDetailTask;
|
||||
//生成序号
|
||||
for (int i = 0; i < orderMatDetail.Count; i++)
|
||||
{
|
||||
orderMatDetail[i].RowNumber = i + 1;
|
||||
}
|
||||
#endregion
|
||||
|
||||
var orderDetail = await orderDetailTask;
|
||||
var orderMatDetail = await orderMatDetailTask;
|
||||
return new ResponseCommon()
|
||||
|
||||
return new ResponseCommon<List<OutOrderMatDetail>>
|
||||
{
|
||||
Code = 200,
|
||||
Message = "Success",
|
||||
Data = new
|
||||
{
|
||||
OrderDetailLists = orderDetail,
|
||||
OrderMatDetailLists = orderMatDetail,
|
||||
}
|
||||
Data = orderMatDetail
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
private string GenerateOrderNumber()
|
||||
{
|
||||
var orderNumber = "PD" + DateTime.Now.ToString("yyyyMMddHHmmss");
|
||||
@ -303,26 +376,60 @@ namespace WCS.BLL.Services.Service
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 201,
|
||||
Message = "不存在对应的出库单据!",
|
||||
Message = $"不存在对应的出库单据{request.OrderNumber}!",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
//获取出库单据明细
|
||||
//TO DO 如果是按物料编码出库 需要计算物料明细保存并进行锁定
|
||||
|
||||
//如果是按物料编码出库 需要计算物料明细、并进行物料锁定
|
||||
if (order.SyncType == SyncTypeEnum.ByMatCode)
|
||||
{
|
||||
|
||||
var result = CaculateOutOrderMatDetails(order);
|
||||
if (result.Code != 200)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
//分组 按物料找到对应的货架
|
||||
//获取需要出库的物料明细
|
||||
var outOrderMatDetails = DbHelp.db.Queryable<OutOrderMatDetail>()
|
||||
.Where(t => t.OrderId == order.Id)
|
||||
.Where(t => t.IsSended == false)
|
||||
.Includes(t => t.StoreInfo)
|
||||
.ToList();
|
||||
if (outOrderMatDetails == null || outOrderMatDetails.Count == 0)
|
||||
{
|
||||
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"出库单据{request.OrderNumber}物料已全部出库!",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
//按货架分组 按物料找到对应的货架
|
||||
var shelfIds = outOrderMatDetails.Select(t => t.StoreInfo.ShelfId)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
var shelfs = ShelfManager.Shelves.Where(t => shelfIds.Contains(t.ShelfId)).ToList(); ;
|
||||
|
||||
//对应的货架进入出库模式 亮灯
|
||||
var outherModeShelfs = shelfs.Where(t => t.CurentMode != 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 = outOrderMatDetails.Where(t => t.StoreInfo.ShelfCode == shelf.ShelfCode)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
shelf.GoInOutstore(matDetails,order);
|
||||
});
|
||||
|
||||
//返回
|
||||
return new ResponseCommon()
|
||||
@ -333,17 +440,188 @@ namespace WCS.BLL.Services.Service
|
||||
};
|
||||
}
|
||||
|
||||
private ResponseBase CaculateOutOrderMatDetails(OutOrder order)
|
||||
{
|
||||
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();
|
||||
if (outOrderDetails == null || outOrderDetails.Count == 0)
|
||||
{
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"计算物料失败,{order.OrderNumber}没有单据明细!"
|
||||
};
|
||||
}
|
||||
//第二步 开始计算物料
|
||||
List<OutOrderMatDetail> outOrderMatDetails = new List<OutOrderMatDetail>();
|
||||
foreach (var outOrderDetail in outOrderDetails)
|
||||
{
|
||||
//2.1筛选 满足 图号 批次的库存
|
||||
var matInventoryDetails = DbHelp.db.Queryable<InventoryDetail>()
|
||||
.Where(t => t.MatCode == outOrderDetail.MatCode)
|
||||
.WhereIF(!string.IsNullOrEmpty(outOrderDetail.MatBatch), t => t.MatBatch == outOrderDetail.MatBatch)
|
||||
.OrderBy(t => t.MatBatch)//先进先出
|
||||
.OrderBy(t => t.MatQty)//零散料先出
|
||||
.ToList();
|
||||
|
||||
//2.2按照搜索出来的库存和当前未出的数量 计算需要出的SN
|
||||
for (int i = 0; i < matInventoryDetails.Count && outOrderDetail.ReqQty - outOrderDetail.OutQty > 0; i++)
|
||||
{
|
||||
if (outOrderDetail.ReqQty - outOrderDetail.OutQty <= matInventoryDetails[i].MatQty)
|
||||
{
|
||||
outOrderMatDetails.Add(new OutOrderMatDetail()
|
||||
{
|
||||
OrderId = outOrderDetail.Id,
|
||||
OrderNumber = outOrderDetail.OrderNumber,
|
||||
OutOrderDetailId = outOrderDetail.Id,
|
||||
InventoryDetailId = matInventoryDetails[i].Id,
|
||||
StoreId = matInventoryDetails[i].StoreId,
|
||||
StoreCode = matInventoryDetails[i].StoreCode,
|
||||
MatSN = matInventoryDetails[i].MatSN,
|
||||
MatCode = matInventoryDetails[i].MatCode,
|
||||
MatName = matInventoryDetails[i].MatName,
|
||||
MatSpec = matInventoryDetails[i].MatSpec,
|
||||
MatBatch = matInventoryDetails[i].MatBatch,
|
||||
MatQty = matInventoryDetails[i].MatQty,
|
||||
MatSupplier = matInventoryDetails[i].MatSupplier,
|
||||
MatCustomer = matInventoryDetails[i].MatCustomer,
|
||||
IsSended = false,
|
||||
CreateUser = "待定",
|
||||
});
|
||||
outOrderDetail.ReqQty = 0;
|
||||
|
||||
matInventoryDetails[i].IsLocked = true;
|
||||
DbHelp.db.Updateable(matInventoryDetails[i]).ExecuteCommand();
|
||||
}
|
||||
else
|
||||
{
|
||||
outOrderDetail.ReqQty = outOrderDetail.ReqQty - matInventoryDetails[i].MatQty;
|
||||
|
||||
outOrderMatDetails.Add(new OutOrderMatDetail()
|
||||
{
|
||||
OrderId = outOrderDetail.Id,
|
||||
OrderNumber = outOrderDetail.OrderNumber,
|
||||
OutOrderDetailId = outOrderDetail.Id,
|
||||
InventoryDetailId = matInventoryDetails[i].Id,
|
||||
StoreId = matInventoryDetails[i].StoreId,
|
||||
StoreCode = matInventoryDetails[i].StoreCode,
|
||||
MatSN = matInventoryDetails[i].MatSN,
|
||||
MatCode = matInventoryDetails[i].MatCode,
|
||||
MatName = matInventoryDetails[i].MatName,
|
||||
MatSpec = matInventoryDetails[i].MatSpec,
|
||||
MatBatch = matInventoryDetails[i].MatBatch,
|
||||
MatQty = matInventoryDetails[i].MatQty,
|
||||
MatSupplier = matInventoryDetails[i].MatSupplier,
|
||||
MatCustomer = matInventoryDetails[i].MatCustomer,
|
||||
IsSended = false,
|
||||
CreateUser = "待定",
|
||||
});
|
||||
|
||||
matInventoryDetails[i].IsLocked = true;
|
||||
DbHelp.db.Updateable(matInventoryDetails[i]).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
}
|
||||
DbHelp.db.Insertable(outOrderMatDetails).ExecuteCommand();
|
||||
DbHelp.db.CommitTran();
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 200,
|
||||
Message = $"Success"
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
DbHelp.db.RollbackTran();
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 300,
|
||||
Message = $"发生异常:{ex.Message}"
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private ResponseBase CancelOutOrderMatDetails(OutOrder order)
|
||||
{
|
||||
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();
|
||||
DbHelp.db.CommitTran();
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 200,
|
||||
Message = $"Success"
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
DbHelp.db.RollbackTran();
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 300,
|
||||
Message = $"发生异常:{ex.Message}"
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<ResponseBase> GoOutOutstore(GetOutOrderDetailRequest request)
|
||||
{
|
||||
//获取出库单
|
||||
var order = await DbHelp.db.Queryable<OutOrder>()
|
||||
.WhereIF(request.OrderId != 0, t => t.Id == request.OrderId)
|
||||
.WhereIF(!string.IsNullOrEmpty(request.OrderNumber), t => t.OrderNumber == request.OrderNumber)
|
||||
.FirstAsync();
|
||||
if (order == null)
|
||||
{
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"不存在对应的出库单据{request.OrderNumber}!",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
|
||||
//找到正在出对应出库单的货架
|
||||
var shelves = ShelfManager.Shelves.Where(t => t.OrderNumber == request.OrderNumber)
|
||||
.ToList();
|
||||
|
||||
//退出出库模式
|
||||
shelves.ForEach(t =>
|
||||
{
|
||||
t.GoOutOutstore();
|
||||
});
|
||||
|
||||
//解锁物料 删除物料明细
|
||||
CancelOutOrderMatDetails(order);
|
||||
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 200,
|
||||
|
@ -236,5 +236,43 @@ namespace WCS.BLL.Services.Service
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
Task<PageQueryResponse<ShelfInfo>> IStoreInfoService.GetShelves(GetShelvesRequest request)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
Task<ResponseCommon<object>> IStoreInfoService.addOrUpdateShelfInfo(AddShelfInfoRequest<ShelfInfo> request)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
async Task<ResponseCommon<object>> IStoreInfoService.GenerateStoreInfo()
|
||||
{
|
||||
var shelfInfo = await DbHelp.db.Queryable<ShelfInfo>().Where(t => t.ShelfCode == "C04-1").FirstAsync();
|
||||
var ModuleInfos = await DbHelp.db.Queryable<ModuleInfo>().Where(t => t.ShelfId == shelfInfo.Id).ToListAsync();
|
||||
ModuleInfos.ForEach(moduleInfo =>
|
||||
{
|
||||
for (int i = 1; i <= moduleInfo.LightCount; i++)
|
||||
{
|
||||
var storeInfo = new StoreInfo()
|
||||
{
|
||||
StoreCode = moduleInfo.ModuleCode + "-" + i.ToString(),
|
||||
ModuleId = moduleInfo.Id,
|
||||
ModuleCode = moduleInfo.ModuleCode,
|
||||
ShelfId = shelfInfo.Id,
|
||||
ShelfCode = shelfInfo.ShelfCode,
|
||||
BoardId = moduleInfo.BoardId,
|
||||
LightNumber = i,
|
||||
Priority = 1,
|
||||
CurrentMatSn = string.Empty,
|
||||
};
|
||||
DbHelp.db.Insertable(storeInfo).ExecuteCommand();
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
return new ResponseCommon<object>() { Message = "111"};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user