/// <summary> /// 创建【拣料单】 /// </summary> /// <param name="db"></param> /// <param name="billPickFact">拣料单</param> /// <param name="details">拣料明细</param> /// <returns></returns> public static void AddMaterialOut(SpareEntities db, TB_BILL billPickFact, List <TB_OUT> details) { { //校验单据状态是否为新建 if (billPickFact.State != (int)BillState.New) { throw new WmsException(ResultCode.DataStateError, billPickFact.BillNum, "状态错误,不应为:" + billPickFact.State); } if (string.IsNullOrEmpty(billPickFact.BillNum)) { SetBillNum(billPickFact); //设置单据编号 details.ForEach(p => p.BillNum = billPickFact.BillNum); //设置明细编号 NotifyController.AddNotify(db, billPickFact.OperName, NotifyType.MaterialOut, billPickFact.BillNum, ""); } else { var dbOutList = db.TB_OUT.Where(p => p.BillNum == billPickFact.BillNum).ToList(); foreach (var det in dbOutList) { if (details.FirstOrDefault(p => p.UID == det.UID) == null) { SpareOutController.RemaveDetail(db, det); } } NotifyController.AddNotify(db, billPickFact.OperName, NotifyType.MaterialOutUpdate, billPickFact.BillNum, ""); } BillController.AddOrUpdate(db, billPickFact); //添加【原料拣料单】单据 SpareOutController.AddOrUpdateList(db, details); //更新【实际拣料单】明细 EntitiesFactory.SaveDb(db); } }
/// <summary> /// 添加【其它出库单】 /// </summary> /// <param name="db"></param> /// <param name="bill">其它出库单</param> /// <param name="details">其它出库明细</param> /// <returns></returns> public static void AddOtherOut(SpareEntities db, TB_BILL bill, List <TB_OTHER_OUT> details) { { SetBillNum(bill); //设置单据编号 details.ForEach(p => p.BillNum = bill.BillNum); //设置明细编号 BillController.AddOrUpdate(db, bill); //添加单据 foreach (var detail in details) { OtherOutController.AddOrUpdate(db, detail); //添加明细 } var subBillType = (SubBillType)bill.SubBillType; switch (subBillType) { //出库 case SubBillType.OtherOut: //其它出库 // case SubBillType.ReturnToSupplier: //原料退货 case SubBillType.InventoryLoss: //盘亏 case SubBillType.ScrapDestroy: //报废销毁 var detailsOut = details.Select(detail => detail.ToStockDetailOut(bill)).ToList(); StockDetailController.ListOut(db, bill, detailsOut); //更新【库存主表】【库存明细】出库 break; default: throw new WmsException(ResultCode.Exception, bill.BillNum, "单据二级类型错误"); } NotifyController.AddNotify(db, bill.OperName, NotifyType.OtherOutApprove, bill.BillNum, ""); } }
/// <summary> /// 添加移库单,原料入库,成品入库,原料发货,成品出库,其它移库等等都当做移库处理,以SubBillType进行区分 /// </summary> /// <param name="db"></param> /// <param name="bill"></param> /// <param name="details"></param> /// <returns></returns> public static void AddStockMove(SpareEntities db, TB_BILL bill, List <TB_STOCK_MOVE> details) { SetBillNum(bill); //设置单据编号 details.ForEach(p => p.BillNum = bill.BillNum); //设置明细编号 BillController.AddOrUpdate(db, bill); //添加【移库单】单据 StockMoveController.AddList(db, details); //添加【移库单】明细 StockDetailController.ListMove(db, bill, details); //更新【库存主表】【库存明细】 NotifyController.AddNotify(db, bill.OperName, NotifyType.StockMoveApprove, bill.BillNum, ""); }
/// <summary> /// 添加【其它出入库单】 /// </summary> /// <param name="db"></param> /// <param name="bill">其它出入库单</param> /// <param name="details">其它出入库明细</param> /// <returns></returns> public static void AddOtherIn(SpareEntities db, TB_BILL bill, List <TB_OTHER_IN> details) { { SetBillNum(bill); //设置单据编号 details.ForEach(p => p.BillNum = bill.BillNum); //设置明细编号 BillController.AddOrUpdate(db, bill); //添加单据 foreach (var detail in details) { OtherInController.AddOrUpdate(db, detail); //添加明细 } var subBillType = (SubBillType)bill.SubBillType; switch (subBillType) { //出库 case SubBillType.OtherOut: //其它出库 // case SubBillType.ReturnToSupplier: //原料退货 case SubBillType.InventoryLoss: //盘亏 case SubBillType.ScrapDestroy: //报废销毁 // var detailsOut = details.Select(detail => detail.ToStockDetailOut(bill)).ToList(); // StockDetailController.ListOut(db, bill, detailsOut); //更新【库存主表】【库存明细】出库 // break; //入库 case SubBillType.OtherIn: //其它入库 // case SubBillType.ProductReturn: //成品退货 case SubBillType.InventoryProfit: //盘盈 var detailsIn = details.Select(detail => detail.ToStockDetailIn(bill)).ToList(); StockDetailController.ListIn(db, bill, detailsIn); //更新【库存主表】【库存明细】入库 break; case SubBillType.ProductUndecide: //隔离 case SubBillType.ProductScrap: //报废 // var detailsMove = details.Select(p => p.ToStockMove()).ToList(); // StockDetailController.ListMove(db, bill, detailsMove); //更新【库存主表】【库存明细】 break; default: throw new WmsException(ResultCode.Exception, bill.BillNum, "单据二级类型错误"); } NotifyController.AddNotify(db, bill.OperName, NotifyType.OtherInApprove, bill.BillNum, ""); } }
/// <summary> /// 执行【领用申请单】,生成【领用单】 /// </summary> /// <param name="db"></param> /// <param name="billAsk">申请单</param> /// <param name="details">申请明细</param> /// <returns></returns> public static string HandleMaterialAsk(SpareEntities db, TB_BILL billAsk, List <TB_ASK> details) { try { //校验【领用单】状态是否为批准 if (billAsk.State != (int)BillState.Approve) { return("申请单状态错误,不应为:" + billAsk.State); } var partPickList = new List <TB_OUT>(); foreach (var detail in details) { var pList = SpareOutController.GetList(db, detail); if (pList.Count == 0 || pList.Sum(p => p.OutQty) < detail.Qty) { return("库存不足,生成领用单失败!"); } partPickList.AddRange(pList); } var billPick = new TB_BILL { BillNum = "", SourceBillNum = billAsk.BillNum, BillType = (int)BillType.MaterialDeliver, SubBillType = (int)billAsk.SubBillType, BillTime = DateTime.Now, OperName = billAsk.OperName, SplyId = billAsk.SplyId, State = (int)BillState.New, Remark = "", }; SetBillNum(billPick); partPickList.ForEach(p => p.BillNum = billPick.BillNum); BillController.AddOrUpdate(db, billPick); SpareOutController.AddList(db, partPickList); BillController.UpdateState(db, billAsk, BillState.Handling); //更新【叫料单】状态为:执行中 NotifyController.AddNotify(db, billPick.OperName, NotifyType.MaterialOut, billAsk.BillNum, ""); return("OK"); } catch (Exception ex) { BillController.UpdateState(db, billAsk, BillState.Failed); billAsk.Remark = ex.ToString(); return(ex.ToString()); } }
public static void AddMaterialReturn(SpareEntities db, TB_BILL bill, List <TB_RETURN> details) { BillController.AddOrUpdate(db, bill); //添加单据 foreach (var detail in details) { var dbReturns = SpareReturnController.GetList(db, bill.BillNum).ToList(); foreach (var sparereturn in dbReturns) { if (details.FirstOrDefault(p => p.UID == sparereturn.UID) == null) { SpareReturnController.RemaveDetail(db, sparereturn); } } SpareReturnController.AddOrUpdate(db, detail);//添加或修改【领用归还单】明细 } NotifyController.AddNotify(db, bill.OperName, NotifyType.SpareReturnUpdate, bill.BillNum, ""); }
/// <summary> /// 根据【领用出库单】,生成【领用还回单】 /// </summary> /// <param name="db"></param> /// <param name="billAsk">申请单</param> /// <param name="details">申请明细</param> /// <returns></returns> public static string HandleMaterialReturn(SpareEntities db, TB_BILL billOut, List <TB_OUT> details) { try { //校验【领用单】状态是否为批准 if (billOut.State != (int)BillState.Finished) { return("申请单状态错误,不应为:" + billOut.State); } if (billOut.SubBillType != (int)SubBillType.SpareLoan) { return("非借出单,不能进行还回操作!"); } var partPickList = new List <TB_RETURN>(); foreach (var detail in details) { var pList = SpareReturnController.OutToReturnList(detail); partPickList.Add(pList); } var billPick = new TB_BILL { BillNum = "", SourceBillNum = billOut.BillNum, BillType = (int)BillType.SpareReturn, SubBillType = (int)SubBillType.SpareReturn, BillTime = DateTime.Now, OperName = billOut.OperName, SplyId = billOut.SplyId, State = (int)BillState.New, Remark = "", }; SetBillNum(billPick); partPickList.ForEach(p => p.BillNum = billPick.BillNum); BillController.AddOrUpdate(db, billPick); SpareReturnController.AddList(db, partPickList); NotifyController.AddNotify(db, billPick.OperName, NotifyType.SpareReturn, billPick.BillNum, ""); return("OK"); } catch (Exception ex) { BillController.UpdateState(db, billOut, BillState.Failed); billOut.Remark = ex.ToString(); return(ex.ToString()); } }
/// <summary> /// 添加【叫料单】 /// </summary> /// <param name="db"></param> /// <param name="bill">叫料单</param> /// <param name="details">叫料明细</param> /// <returns></returns> public static void AddMaterialAsk(SpareEntities db, TB_BILL bill, List <TB_ASK> details) { if (bill.BillNum == null) { SetBillNum(bill); //设置单据编号 details.ForEach(p => p.BillNum = bill.BillNum); //设置明细编号 NotifyController.AddNotify(db, bill.OperName, NotifyType.MaterialAskUpdate, bill.BillNum, ""); //添加【叫料提醒单】 } else { NotifyController.AddNotify(db, bill.OperName, NotifyType.MaterialAsk, bill.BillNum, ""); //添加【叫料提醒单】 } BillController.AddOrUpdate(db, bill); //添加【生产叫料单】单据 foreach (var detail in details) { SpareAskController.AddOrUpdate(db, detail);//添加或修改【生产叫料单】明细 } }
/// <summary> /// 添加【原料收货单】 /// </summary> /// <param name="db"></param> /// <param name="billList">原料收货单列表</param> /// <param name="detailList">原料收货明细列表</param> /// <returns></returns> public static void AddMaterialIn(SpareEntities db, List <TB_BILL> billList, List <TB_IN> detailList) { { foreach (var bill in billList) { SetBillNum(bill); //设置单据编号 detailList.ForEach(p => p.BillNum = bill.BillNum); //设置明细编号 BillController.AddOrUpdate(db, bill); //添加【原料收货单】单据 SpareInController.AddList(db, detailList); //添加【原料收货单】明细 var stockDetails = detailList.Select(detail => detail.ToStockDetailIn(bill)).ToList(); StockDetailController.ListIn(db, bill, stockDetails); //更新【库存主表】【库存明细】 } EntitiesFactory.SaveDb(db); } }