using iWareCommon.Common.Entity; using iWareCommon.Common.EnumType; using iWareCommon.Common.Service; using iWareCommon.Utils; using iWareDataCore.BASE.Dao; using iWareDataCore.BASE.Entity; using iWareDataCore.BASE.EnumType; using iWareDataCore.ORM; using iWareDataCore.Properties; using iWareDataCore.TASK.EnumType; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace iWareDataCore.BASE.Service { public class WebOrderService : CommonService { private static object Lock = new object(); private WebOrderService() : base(WebOrderDao.GetInstance()) { } private static WebOrderService Instance = null; /// /// 获取单例的方法 /// /// 用户服务的单例实体 public static WebOrderService GetInstance() { if (Instance == null) { lock (Lock) { if (Instance == null) { Instance = new WebOrderService(); } } } return Instance; } public List GetReqOrderDetail(int id, out string msg) { msg = ""; using (var dbModel = new DbModelCore()) { List detail = new List(); try { return dbModel.WebOrderDetail.Where(x => x.weborderid== id).ToList(); } catch (Exception ex) { msg = ex.Message; return detail; } } } public int DeleteRequest(int id, out string msg) { msg = ""; using (var dbModel = new DbModelCore()) { try { var webOrder = dbModel.WebOrder.FirstOrDefault(x => id == x.id); if (webOrder != null) { if(webOrder.statusflag==1) { msg = "此单据已下发,不能删除"; return -1; } string listNo = webOrder.listno; var webOrderDetail = dbModel.WebOrderDetail.Where(x => x.weborderid == id).ToList(); if (webOrderDetail != null && webOrderDetail.Count > 0) { webOrderDetail.ForEach(x => dbModel.WebOrderDetail.Remove(x)); } var inoutlist = dbModel.BASEInOutLists.FirstOrDefault(x => x.listno== listNo); if (inoutlist != null) { var inoutdetail = dbModel.BASEInOutListDetails.Where(x => x.inoutlistid == inoutlist.id).ToList(); if (inoutdetail!=null && inoutdetail.Count > 0) inoutdetail.ForEach(x => dbModel.BASEInOutListDetails.Remove(x)); dbModel.BASEInOutLists.Remove(inoutlist); } dbModel.WebOrder.Remove(webOrder); dbModel.SaveChanges(); return 1; } else { msg = "单据不存在"; return -1; } } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DeleteInOut", ex.Message); return 0; } } } public bool DoInOutWork(int id, out string msg) { msg = ""; List outMrl; using (var dbModel = new DbModelCore()) { try { bool checkResult = CheckWorkCanDo(dbModel, id, out outMrl, out msg); if (!checkResult) return checkResult; List addInOutDetail = new List(); var inoutdetails = InOutListDetailViewService.GetInstance().QueryByParam(new QueryParam { }, out msg); var placeMaterial = PlaceMaterialViewService.GetInstance().QueryByParam(new QueryParam { }, out msg); var webOrder = dbModel.WebOrder.FirstOrDefault(x => x.id == id); var webOrderDetail = dbModel.WebOrderDetail.Where(x => x.weborderid == id).ToList(); string busTypeName = ""; string listNo = webOrder.listno; if (webOrder.bustype == (int)EMainTaskType.入库任务) { busTypeName = "入库"; foreach (var cutInMaterial in outMrl) { if (placeMaterial.Select(x => x.MaterialId).Contains((int)cutInMaterial.materialid)) { msg = cutInMaterial.materialcode + "已存在立库中,不能添加到入库单明细中!"; break; } if (inoutdetails.Select(x => x.MaterialId).Contains((int)cutInMaterial.materialid)) { msg = cutInMaterial.materialcode + "已存在之前的入库单明细中,不能添加到当前入库单明细中!"; break; } } } else if (webOrder.bustype == (int)EMainTaskType.出库任务) { busTypeName = "出库"; foreach (var cutOutMaterial in outMrl) { if (inoutdetails.Select(x => x.MaterialId).Contains((int)cutOutMaterial.materialid)) { var inoutdeta = inoutdetails.FirstOrDefault(x => x.MaterialId == cutOutMaterial.materialid); if (inoutdeta.TypeName == "出库") { msg = cutOutMaterial.materialname + "已存在之前的出库单明细中,不能添加到当前出库单明细中!"; break; } } InOutListDetailEntity outdetail = new InOutListDetailEntity() { MaterialId = (int)cutOutMaterial.materialid, IsFinish = 0 }; addInOutDetail.Add(outdetail); } } if (!string.IsNullOrEmpty(msg)) return false; InOutListService.GetInstance().CreateListAndDetial( new InOutListEntity { ListNo = listNo, CreateTime = DateTime.Now, TypeName = busTypeName, Status = 0, Remark = "", InOutListDetail = addInOutDetail }, out msg); msg = "生成" + busTypeName + "单成功"; webOrder.statusflag = 1;//已下发 dbModel.SaveChanges(); return true; } catch (Exception ex) { msg = ex.Message; return false; } } } /// /// /// /// web单据Id /// 可以出库的物料 /// /// public bool CheckWorkOption(int id, out List canOutMrl,out string msg) { using (var dbModel = new DbModelCore()) { return CheckWorkCanDo(dbModel,id, out canOutMrl, out msg); } } /// /// 验证条件 /// /// web单据Id /// 业务类型 /// 可以出库的物料 /// /// private bool CheckWorkCanDo(DbModelCore dbModel,int id, out List canOutMrl, out string msg) { msg = ""; canOutMrl = new List(); try { var webOrder = dbModel.WebOrder.FirstOrDefault(x => x.id == id); if (webOrder != null) { if(webOrder.statusflag==1) { msg = "此单据已下发"; return false; } var details = dbModel.WebOrderDetail.Where(x => x.weborderid == id).ToList(); if (details.Count < 1) { msg = "推送单据明细为空"; return false; } if (webOrder.bustype == (int)EMainTaskType.入库任务) { int inCount = (int)details.Select(x => x.quantity).Sum(); var emptyPlaces = dbModel.BASEEmptyPlaceViews.Where(x => x.isexecute == (int)EYesOrNo.否 && x.islock == (int)EYesOrNo.否 && x.typeid == 4 && x.status == (int)EPlaceStatus.空库位).OrderBy(x => new { x.layer, x.col }).ToList(); if (inCount <= emptyPlaces.Count) { msg = "空库位充足"; return true; } else { msg = "空库位不足"; return false; } } else if (webOrder.bustype == (int)EMainTaskType.出库任务) { bool returnResult = true; foreach (var outItem in details) { var cutStorageMaterials = dbModel.MaterialPlaceView.Where(x => x.materialno == outItem.materialno && x.typeid==4).OrderBy(x => x.createtime).ToList(); if (outItem.quantity <= cutStorageMaterials.Count)//库存足够 { for (int i = 0; i < outItem.quantity; i++) { canOutMrl.Add(cutStorageMaterials[i]); } } else { msg = outItem.materialno + "库存不足"; returnResult = false; break; } } return returnResult; } else { msg = "业务类型不识别"; return false; } } else { msg = "单据不存在"; return false; } } catch (Exception ex) { msg = ex.Message; return false; } } } }