| | |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public bool ErpAddExportNotice(SoInfo model) |
| | | public void HttpAddExportNotice(SoInfo model) |
| | | { |
| | | try |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | stocks = stockList.Where(m=> m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList(); |
| | | |
| | | stocks = stockList.Where(m => m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList(); |
| | | |
| | | foreach (var demo in stocks) |
| | | { |
| | | if (q1 >= d.Qty) |
| | |
| | | continue; |
| | | } |
| | | var q2 = demo.Qty - demo.LockQty - demo.FrozenQty; |
| | | |
| | | |
| | | if (q2 > d.Qty - q1) |
| | | { |
| | | q1 += d.Qty - q1; |
| | |
| | | else |
| | | { |
| | | q1 += q2; |
| | | dic.Add(demo.Id,q2); |
| | | dic.Add(demo.Id, q2); |
| | | } |
| | | |
| | | |
| | | } |
| | | if (d.Qty >= q1) |
| | | { |
| | |
| | | throw new Exception($"总库存中出库物料信息:{d.SkuNo} 库存数量不足"); |
| | | } |
| | | } |
| | | |
| | | |
| | | foreach (var s in dic) |
| | | { |
| | | var st = stockList.First(a => a.Id == s.Key); |
| | |
| | | CreateUser = 0, |
| | | }; |
| | | list.Add(item); |
| | | |
| | | |
| | | st.LockQty += s.Value;//锁定数量 |
| | | var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty }) |
| | | .ExecuteCommand(); |
| | | } |
| | | |
| | | |
| | | } |
| | | var notice = new BllExportNotice() |
| | | { |
| | | SONo = billNo, |
| | | Type = model.SoType, |
| | | Status = "0", |
| | | Origin = "WMS", |
| | | Origin = model.Origin, |
| | | CustomerNo = model.Customer, |
| | | CustomerName = customer.CustomerName, |
| | | LogisticsId = logisticsId, |
| | |
| | | |
| | | if (n <= 0 || m <= 0) |
| | | { |
| | | Db.RollbackTran(); |
| | | return false; |
| | | throw new Exception("入库单或明细添加保存失败"); |
| | | } |
| | | Db.CommitTran(); |
| | | return true; |
| | | |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | |
| | | .LeftJoin<SysUserInfor>((a, b, c, d, e) => a.CheckUser == e.Id) |
| | | .Select((a, b, c, d, e) => new ExportNoticeDto() |
| | | { |
| | | Id = a.Id, |
| | | SONo = a.SONo, |
| | | Type = a.Type, |
| | | Status = a.Status, |
| | | Origin = a.Origin, |
| | | CustomerNo = a.CustomerNo, |
| | | CustomerName = a.CustomerName, |
| | | LotNo = a.LotNo, |
| | | LotText = a.LotText, |
| | | SupplierLot = a.SupplierLot, |
| | | LogisticsId = a.LogisticsId, |
| | | //Id = a.Id, |
| | | //SONo = a.SONo, |
| | | //Type = a.Type, |
| | | //Status = a.Status, |
| | | //Origin = a.Origin, |
| | | //CustomerNo = a.CustomerNo, |
| | | //CustomerName = a.CustomerName, |
| | | //LotNo = a.LotNo, |
| | | //LotText = a.LotText, |
| | | //SupplierLot = a.SupplierLot, |
| | | //LogisticsId = a.LogisticsId, |
| | | LogisticsName = b.CarrierName, |
| | | IsWave = a.IsWave, |
| | | WaveNo = a.WaveNo, |
| | | IsDespatch = a.IsDespatch, |
| | | Demo = a.Demo, |
| | | //IsWave = a.IsWave, |
| | | //WaveNo = a.WaveNo, |
| | | //IsDespatch = a.IsDespatch, |
| | | //Demo = a.Demo, |
| | | |
| | | CreateUserName = c.RealName, |
| | | UpdateUserName = c.RealName, |
| | | CreateTime = a.CreateTime, |
| | | UpdateTime = a.UpdateTime, |
| | | //CreateTime = a.CreateTime, |
| | | //UpdateTime = a.UpdateTime, |
| | | |
| | | CheckUserName = e.RealName, |
| | | CheckTime = a.CheckTime |
| | | }) |
| | | //CheckTime = a.CheckTime |
| | | },true) |
| | | .OrderByDescending(a => a.CreateTime) |
| | | .ToOffsetPage(page, limit, ref total); |
| | | count = total; |
| | |
| | | throw new Exception("未查到对应出库类型的物料"); |
| | | } |
| | | |
| | | if (type!="8") |
| | | if (type != "8") |
| | | { |
| | | skuList = skuList.Where(m => m != "100088").ToList(); |
| | | } |
| | |
| | | .AndIF(!string.IsNullOrWhiteSpace(inspectStatus), it => inspectStatus.Contains(it.InspectStatus)) |
| | | .And(m => skuList.Contains(m.SkuNo)) |
| | | .AndIF(type == "6", m => m.OwnerNo == ownerNo)//代储出库需要关联货主 |
| | | .AndIF(type == "2", m=> string.IsNullOrWhiteSpace(m.OwnerNo)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(msg), it => (it.SkuNo.Contains(msg) || it.SkuName.Contains(msg) || it.LotNo.Contains(msg))) |
| | | .And(it => (it.Qty - it.LockQty - it.FrozenQty) > 0) |
| | | .And(it => (it.Status == "0" || it.Status == "1")) |
| | |
| | | SkuName = it.SkuName, |
| | | LotNo = it.LotNo, |
| | | Standard = it.Standard, |
| | | Qty = type == "4" ? it.Qty : it.Qty - it.LockQty - it.FrozenQty |
| | | //Qty = type == "4" ? it.Qty : it.Qty - it.LockQty - it.FrozenQty, |
| | | Qty = it.Qty - it.LockQty - it.FrozenQty, |
| | | |
| | | }).ToList(); |
| | | |
| | |
| | | //} |
| | | //if (d.Qty >= q1) |
| | | //{ |
| | | stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); |
| | | stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); |
| | | // if (stocks.Count == 0) |
| | | // { |
| | | // throw new Exception($"总库存中出库物料信息:{d.SkuNo}库存数量不足"); |
| | |
| | | // throw new Exception($"总库存中出库物料信息:{d.SkuNo} 库存数量不足"); |
| | | //} |
| | | } |
| | | |
| | | |
| | | var item = new BllExportNoticeDetail() |
| | | { |
| | | SONo = billNo, |
| | |
| | | }; |
| | | list.Add(item); |
| | | |
| | | |
| | | |
| | | stocks.First().LockQty += d.Qty;//锁定数量 |
| | | var i = Db.Updateable(stocks.First()).UpdateColumns(it => new { it.LockQty }) |
| | | .ExecuteCommand(); |
| | |
| | | |
| | | try |
| | | { |
| | | //var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | //response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); |
| | | //var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | //////解析返回数据 |
| | | //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); |
| | | //if (wcsModel.StatusCode == 0) |
| | | //{ |
| | | // //更改任务的发送返回时间// |
| | | // new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | // str += "下发成功"; |
| | | //} |
| | | //if (wcsModel.StatusCode == -1) |
| | | //{ |
| | | // new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); |
| | | // throw new Exception(wcsModel.Msg); |
| | | //} |
| | | var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); |
| | | if (wcsModel.StatusCode == 0) |
| | | { |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | str += "下发成功"; |
| | | } |
| | | if (wcsModel.StatusCode == -1) |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); |
| | | throw new Exception(wcsModel.Msg); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | |
| | | |
| | | //重新下发出库任务 |
| | | public OutCommandDto AgainSendSoTask(string taskNo, int userId, string url) |
| | | public OutCommandDto AgainSendSoTask(string taskNo, string Receiver, int userId, string url) |
| | | { |
| | | try |
| | | { |
| | |
| | | { |
| | | //程序正式发布后放开 |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | var response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); |
| | | var response = HttpHelper.DoPost(url, jsonData, Receiver == "WCS" ? "下发给WCS出库命令" : "下发给AGV出库命令", "WCS"); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | ////解析返回数据 |
| | | var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); |
| | | if (wcsModel.StatusCode == 0) |
| | | if (Receiver == "WCS") |
| | | { |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list, time1, time2); |
| | | ////解析返回数据 |
| | | var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); |
| | | if (wcsModel.StatusCode == 0) |
| | | { |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list, time1, time2); |
| | | |
| | | } |
| | | if (wcsModel.StatusCode == -1) |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list, time1, time2, wcsModel.Msg); |
| | | throw new Exception($"wcs返回状态异常:{wcsModel.Msg}"); |
| | | } |
| | | } |
| | | if (wcsModel.StatusCode == -1) |
| | | else if (Receiver == "AGV") |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list, time1, time2, wcsModel.Msg); |
| | | throw new Exception($"wcs返回状态异常:{wcsModel.Msg}"); |
| | | ////解析返回数据 |
| | | var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response); |
| | | if (agvModel.Code == "0") |
| | | { |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list, time1, time2); |
| | | |
| | | } |
| | | if (agvModel.Code == "1") |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list, time1, time2, agvModel.Message); |
| | | throw new Exception($"agv返回状态异常:{agvModel.Message}"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | { |
| | | throw new Exception("未查询到任务信息"); |
| | | } |
| | | //获取对应库位信息 |
| | | var startlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat); |
| | | if (startlocat == null) |
| | | { |
| | | throw new Exception("未查询到储位信息"); |
| | | } |
| | | startlocat.Status = "0";//修改分配信息状态 |
| | | //获取储位信息 |
| | | var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat); |
| | | //获取移库任d务对应目标储位信息 |
| | | SysStorageLocat endlocat = new SysStorageLocat(); |
| | | if (task.Type == "2") |
| | | { |
| | | endlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.EndLocat); |
| | | if (endlocat == null) |
| | | { |
| | | throw new Exception("未查询到目标储位信息"); |
| | | } |
| | | } |
| | | if (locat == null) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception("未查询到储位信息,请核实!"); |
| | | } |
| | | locat.Status = "1"; //有物品 |
| | | Db.Updateable(locat).ExecuteCommand(); |
| | | if (endlocat != null) |
| | | { |
| | | endlocat.Status = "0"; //空储位 0 |
| | | Db.Updateable(endlocat).ExecuteCommand(); |
| | | } |
| | | |
| | | //修改任务 |
| | | task.IsSuccess = 1; |
| | | task.IsSend = 0; |
| | |
| | | |
| | | noticeDetail.FactQty -= item.Qty; //修改出库单明细的下架数量 |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | | //获取储位信息 |
| | | var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat); |
| | | //获取移库任务对应目标储位信息 |
| | | SysStorageLocat endlocat = new SysStorageLocat(); |
| | | if (task.Type == "2") |
| | | { |
| | | endlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W03" && a.LocatNo == task.EndLocat); |
| | | if (endlocat == null) |
| | | { |
| | | throw new Exception("未查询到目标储位信息"); |
| | | } |
| | | } |
| | | if (locat == null) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception("未查询到储位信息,请核实!"); |
| | | } |
| | | locat.Status = "1"; //有物品 |
| | | Db.Updateable(locat).ExecuteCommand(); |
| | | if (endlocat != null) |
| | | { |
| | | endlocat.Status = "0"; //空储位 0 |
| | | Db.Updateable(endlocat).ExecuteCommand(); |
| | | } |
| | | |
| | | if (noticeDetail.FactQty == 0) |
| | | { |
| | |
| | | throw new Exception("库存不足,无可出库库存"); |
| | | } |
| | | //0:成品出库、1:领料出库、2:抽检出库、3:物料取样出库、4:不合格品出库、5:中间品出库、6:代储出库、7:其他出库、8:寄存出库 |
| | | if (notice.Type == "0" || notice.Type == "1" )//成品、原辅料出库 |
| | | if (notice.Type == "0" || notice.Type == "1")//成品、原辅料出库 |
| | | { |
| | | stockDetail = stockDetail.Where(m => m.InspectStatus == "1").ToList(); |
| | | } |
| | | else if (notice.Type == "3" )//取样出库 |
| | | else if (notice.Type == "3")//取样出库 |
| | | { |
| | | stockDetail = stockDetail.Where(m => m.InspectStatus == "0").ToList(); |
| | | } |
| | |
| | | else if (notice.Type == "4")//不合格出库 |
| | | { |
| | | stockDetail = stockDetail.Where(m => m.InspectStatus == "2").ToList(); |
| | | } |
| | | } |
| | | |
| | | #region 包装信息 |
| | | |
| | | var pack = packList.FirstOrDefault(p => p.PackagNo == detail.PackagNo); |
| | | if (pack == null) |
| | | { |
| | | throw new Exception("未查询到物料包装"); |
| | | } |
| | | var pNum = 0;//托盘物品数量 |
| | | var bNum = 0;//箱物品数量 |
| | | if (pack.L5Num.HasValue) |
| | | if (pack != null) |
| | | { |
| | | pNum = Convert.ToInt32(pack.L5Num); |
| | | bNum = Convert.ToInt32(pack.L4Num); |
| | | //throw new Exception("未查询到物料包装"); |
| | | if (pack.L5Num.HasValue) |
| | | { |
| | | pNum = Convert.ToInt32(pack.L5Num); |
| | | bNum = Convert.ToInt32(pack.L4Num); |
| | | } |
| | | else if (pack.L4Num.HasValue) |
| | | { |
| | | pNum = Convert.ToInt32(pack.L4Num); |
| | | bNum = Convert.ToInt32(pack.L3Num); |
| | | } |
| | | else if (pack.L3Num.HasValue) |
| | | { |
| | | pNum = Convert.ToInt32(pack.L3Num); |
| | | bNum = Convert.ToInt32(pack.L2Num); |
| | | } |
| | | else if (pack.L2Num.HasValue) |
| | | { |
| | | pNum = Convert.ToInt32(pack.L2Num); |
| | | bNum = Convert.ToInt32(pack.L1Num); |
| | | } |
| | | else if (pack.L1Num.HasValue) |
| | | { |
| | | pNum = Convert.ToInt32(pack.L1Num); |
| | | bNum = Convert.ToInt32(pack.L1Num); |
| | | } |
| | | } |
| | | else if (pack.L4Num.HasValue) |
| | | { |
| | | pNum = Convert.ToInt32(pack.L4Num); |
| | | bNum = Convert.ToInt32(pack.L3Num); |
| | | } |
| | | else if (pack.L3Num.HasValue) |
| | | { |
| | | pNum = Convert.ToInt32(pack.L3Num); |
| | | bNum = Convert.ToInt32(pack.L2Num); |
| | | } |
| | | else if (pack.L2Num.HasValue) |
| | | { |
| | | pNum = Convert.ToInt32(pack.L2Num); |
| | | bNum = Convert.ToInt32(pack.L1Num); |
| | | } |
| | | else if (pack.L1Num.HasValue) |
| | | { |
| | | pNum = Convert.ToInt32(pack.L1Num); |
| | | bNum = Convert.ToInt32(pack.L1Num); |
| | | } |
| | | if (pNum == 0) |
| | | { |
| | | throw new Exception("未查询到物料包装托箱关系信息"); |
| | | } |
| | | |
| | | |
| | | //if (pNum == 0) |
| | | //{ |
| | | // throw new Exception("未查询到物料包装托箱关系信息"); |
| | | //} |
| | | #endregion |
| | | //取合适库存商品 |
| | | Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//托出库物品数 |
| | |
| | | // { |
| | | // d.LotNo = ""; |
| | | // } |
| | | |
| | | |
| | | //} |
| | | } |
| | | notice.Status = "0"; |
| | |
| | | //var stockz = Db.Queryable<DataStock>().First(d => d.IsDel == "0" && d.SkuNo == detail.SkuNo && d.LotNo == detail.LotNo); |
| | | |
| | | var allotList = new List<BllExportAllot>(); |
| | | var outQtys = 0; |
| | | decimal outQtys = 0; |
| | | foreach (var st in model.StockList) |
| | | { |
| | | var stock = stockList.First(a => a.Id == st.StockId); |
| | |
| | | bl.Qty += st.Qty; |
| | | Db.Updateable(bl).ExecuteCommand(); |
| | | } |
| | | |
| | | |
| | | //库存明细 |
| | | stock.LockQty += st.Qty; |
| | | stock.Status = stock.LockQty == stock.Qty ? "2" : "1"; |