using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using WMS.Core._02Entity; using WMS.Core.ServiceCore; using WMS.Info; using WMS.Util; namespace WMS.Core.APPBLL { public class MaterialBLL : AppCoreBLL { public ResInfo Entry(ScanCodeRequest reqData) { using (var ctx = SysDbCore.GetDbCtx()) { try { if (string.IsNullOrWhiteSpace(reqData?.LocationNo) || string.IsNullOrWhiteSpace(reqData.TrayNo)) throw SysExCore.ThrowFailException("参数不能为空"); ctx.BeginTran(); //获取当前点位信息 var location = GetPointInfo(reqData.LocationNo); if (location == null) throw SysExCore.ThrowFailException("请输入有效的位置码!"); if (location.F_type == (int)EPointType.YCK)//异常口处理逻辑 { var curTask = ctx.Queryable().Where(f => f.F_taskStatus < (int)ETaskStatus.TaskFinish && f.F_trayNo == reqData.TrayNo).First(); if (curTask == null) throw SysExCore.ThrowFailException("当前异常任务找不到对应的入库任务!"); ctx.Updateable().SetColumns(it => new WMS_TASK() { F_editTime = DateTime.Now, F_editUserNo = LoginUser.UserNo, F_posidFrom = reqData.LocationNo, F_posidcur = reqData.LocationNo, F_taskStatus = (int)ETaskStatus.NotIssued, F_posidNext = "1036" }).Where(w => w.F_taskNo == curTask.F_taskNo).ExecuteCommand(); ctx.CommitTran(); return SysExCore.GetResSucc("异常口任务生成成功"); ; } var trayLocation = new FxBaseLocationCore().GetLociotnByTrayNo(reqData.TrayNo); if (trayLocation != null && trayLocation.F_status != (int)EWareCellState.Empty) throw SysExCore.ThrowFailException("当前托盘号已存在货位数据"); var task = new WMS_TASK { F_addTime = DateTime.Now, F_addUserNo = LoginUser.UserNo, F_editTime = DateTime.Now, F_posidNext = GetFreePointInfoByType((int)EPointType.RKDFPHWDW).F_no, F_priority = (int)EPriority.NotUrgent, F_taskStatus = (int)ETaskStatus.NotIssued, F_taskType = (int)ETaskComType.InStock, F_orderType = (int)ETaskOrderType.EntryOrderTypeMaterial, F_posidFrom = reqData.LocationNo, F_posidcur = reqData.LocationNo, F_EquipmentType = (int)EEquipmentType.Convey, F_trayNo=reqData.TrayNo }; var entryOrder = new BILL_ENTRYORDER { F_no = SerialNumberProvider.Instance.OrderNumber("wms", "RK"), F_addTime = DateTime.Now, F_addUserNo = LoginUser.UserNo, F_locationNo = reqData.LocationNo, F_orderStatus = (int)EOrderState.New, F_orderType = (int)EEntryOrderType.EntryOrderTypeMaterial, F_trayNo = reqData.TrayNo, F_isBonded = reqData.TrayNo.StartsWith("B"), F_warehouseNo = SysSetCore.GetSysSet().DefaultWarehouseNo, }; task.F_orderNo = entryOrder.F_no; //if (location.F_type == (int)EPointType.YLCKJXK) //{ // #region 拣选入库 // var invs = ctx.Queryable().Where(i => i.F_trayNo == reqData.TrayNo && i.F_quantity > 0).ToList(); // if (!invs.Any()) // throw SysExCore.ThrowFailException("当前托盘信息为空!"); // invs.ForEach(inv => // { // ctx.Insertable(new BILL_ENTRYORDERLINEDETAIL // { // F_addTime = DateTime.Now, // F_addUserNo = LoginUser.UserNo, // F_batchNo = inv.F_batchNo, // F_matNo = inv.F_matNo, // F_matName = inv.F_matName, // F_matType = (int)EMatType.Mat, // F_quantity = inv.F_quantity, // F_pNo = entryOrder.F_no, // F_trayNo = inv.F_trayNo, // F_UID = inv.F_UID, // F_boxNo = inv.F_boxNo // }).ExecuteCommand(); // }); // entryOrder.F_totalOrderLines = invs.Count(); // entryOrder.F_memo = "拣选入库"; // #endregion //} //if (location.F_type == (int)EPointType.YLRKJXK) //{ #region 组盘入库 List lstInv = new List(); var fxMats = FxDbCore.GetData($"select ld_domain,ld_site,ld_loc,ld_part,ld_ref,ld_lot,ld_qty_oh from pub.ld_det where ld_domain='AFCN' and ld_site='SUZ' and ld_loc='{reqData.TrayNo}'"); if (fxMats.Count < 1) throw SysExCore.ThrowFailException($"未获取到托盘号{reqData.TrayNo}组盘信息"); fxMats.ToList().ForEach(orderLine => { var mat = CacheFacade.GetMatInfo(orderLine.ld_part, EMatType.Mat); ctx.Insertable(new BILL_ENTRYORDERLINEDETAIL { F_addTime = DateTime.Now, F_addUserNo = LoginUser.UserNo, F_batchNo = orderLine.ld_lot, F_matNo = orderLine.ld_part, F_matName = mat?.F_matName, F_matType = (int)EMatType.Mat, F_quantity = orderLine.ld_qty_oh, F_pNo = entryOrder.F_no, F_trayNo = reqData.TrayNo, F_UID = orderLine.ld_ref }).ExecuteCommand(); lstInv.Add(new BILL_INVENTORY { F_addTime = DateTime.Now, F_addUserNo = LoginUser.UserNo, F_editTime = DateTime.Now, F_matNo = orderLine.ld_part, F_matType = (int)EMatType.Mat, F_projectNo = mat.F_projectNo, F_quantity = orderLine.ld_qty_oh, F_batchNo = orderLine.ld_lot, F_uid = orderLine.ld_ref, F_unit = mat.F_unit, F_matName = mat?.F_matName, F_trayNo = reqData.TrayNo, F_warehouseNo = SysSetCore.GetSysSet().DefaultWarehouseNo }); }); #region 原料入库直接覆盖当前托盘库存,不存在则清理 var trayInv = ctx.Queryable().Where(a => a.F_trayNo == reqData.TrayNo).ToList(); if (trayInv.Any()) { trayInv.ForEach(inv => { if (!fxMats.Any(orderLine => inv.F_trayNo == orderLine.ld_loc && inv.F_uid == orderLine.ld_ref && inv.F_matNo == orderLine.ld_part && inv.F_batchNo == orderLine.ld_lot)) { ctx.Deleteable().Where(c => c.F_no == inv.F_no).ExecuteCommand(); ctx.Insertable(new BILL_INVENTORYTRANSACTION { F_addTime = DateTime.Now, F_addUserNo = LoginUser.UserNo, F_batchNo = inv.F_batchNo, F_boxNo = inv.F_boxNo, F_matName = inv.F_matName, F_matNo = inv.F_matNo, F_matType = inv.F_matType, F_sourceLockQty = inv.F_lockQty, F_targetLockQty = 0, F_memo = inv.F_memo, F_projectNo = inv.F_projectNo, F_sourceTrayNo = inv.F_trayNo, F_targetTrayNo = string.Empty, F_warehouseNo = inv.F_warehouseNo, F_UID = string.Empty, F_sourceQuantity = inv.F_quantity, F_targetQuantity = 0 }).ExecuteCommand(); } }); } #endregion #endregion entryOrder.F_totalOrderLines = fxMats.Count; //entryOrder.F_relatedOrderNo = string.Join(",", fxMats.Select(s => s.ld_ref)); UpdateInventory(lstInv, ctx); //} ctx.Insertable(entryOrder).ExecuteCommand(); var taskReturn = ctx.Insertable(task).ExecuteReturnEntity(); return SysExCore.GetResSucc("原料入库任务生成成功"); } catch (Exception ex) { ctx.RollbackTran(); throw ex; } } } public ResInfo StockOut(MatWorkOrderSubmitRequest req) { StockOutRequest stockOut = new StockOutRequest { F_no = req.IssNbr, F_priority = req.Priority, PickPort = string.Join(",", req.PickPort) }; FxStockOutOrderCore orderCore = new FxStockOutOrderCore(); orderCore.SoMatSave(stockOut, req.tranDs, LoginUser); return SysExCore.GetResSucc("原料出库任务生成成功"); } } }