| 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("原料出库任务生成成功");        }    }}
 |