123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- 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<WMS_TASK>().Where(f => f.F_taskStatus < (int)ETaskStatus.TaskFinish && f.F_trayNo == reqData.TrayNo).First();
- if (curTask == null)
- throw SysExCore.ThrowFailException("当前异常任务找不到对应的入库任务!");
- ctx.Updateable<WMS_TASK>().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<BILL_INVENTORY>().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<BILL_INVENTORY> lstInv = new List<BILL_INVENTORY>();
- var fxMats = FxDbCore.GetData<FX_ld_det>($"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<BILL_INVENTORY>().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<BILL_INVENTORY>().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("原料出库任务生成成功");
- }
- }
- }
|