| | |
| | | using Dm; |
| | | using Model.InterFaceModel; |
| | | using WMS.Entity.BllQualityEntity; |
| | | using Newtonsoft.Json; |
| | | using Utility.Tools; |
| | | using System.Reflection; |
| | | using System.IO; |
| | | |
| | | namespace WMS.BLL.BllPdaServer |
| | | { |
| | |
| | | { |
| | | private static readonly SqlSugarScope Db = DataContext.Db; |
| | | |
| | | #region 修改托盘绑定时入库单去除变为物料+数量 |
| | | |
| | | /// <summary> |
| | | /// 获取单据明细显示的物料 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public List<ArrivalNoticeDetailDto> GetArrivalNoticesInfo(ArrivalNoticeVm model) |
| | | { |
| | | try |
| | | { |
| | | //model.Type:单据类型 在这里代表前端页签类型:即标签页签:贴标物料; 数量页签:不贴表物料,原因:懒得加参数 |
| | | var data = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && m.Status != "3" && m.Status != "4").Select(m => m.ASNNo).ToList(); |
| | | var list = new List<ArrivalNoticeDetailDto>(); |
| | | if (model.Type.Contains("0"))//0贴标 |
| | | { |
| | | list = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && data.Contains(m.ASNNo) && !string.IsNullOrWhiteSpace(m.PackagNo)).Select(m => new ArrivalNoticeDetailDto()).ToList(); |
| | | } |
| | | else if (model.Type.Contains("1"))//1不贴标 |
| | | { |
| | | list = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && data.Contains(m.ASNNo) && string.IsNullOrWhiteSpace(m.PackagNo)).Select(m=>new ArrivalNoticeDetailDto()).ToList(); |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("页签类型参数错误"); |
| | | } |
| | | |
| | | List<ArrivalNoticeDetailDto> noticeList = new List<ArrivalNoticeDetailDto>(); |
| | | foreach (var item in list) |
| | | { |
| | | if (string.IsNullOrEmpty(item.LotNo)) |
| | | { |
| | | noticeList.Add(item); |
| | | } |
| | | else |
| | | { |
| | | string[] LotNoList = item.LotNo.Split(';'); |
| | | foreach (var item2 in LotNoList) |
| | | { |
| | | ArrivalNoticeDetailDto entry = new ArrivalNoticeDetailDto() |
| | | { |
| | | Id = item.Id, |
| | | ASNNo = item.ASNNo, |
| | | CompleteQty = item.CompleteQty, |
| | | CompleteTime = item.CompleteTime, |
| | | CreateTime = item.CreateTime, |
| | | Qty = item.Qty, |
| | | FactQty = item.FactQty, |
| | | LotNo = item2, |
| | | Money = item.Money, |
| | | PackagNo = item.PackagNo, |
| | | PackagName = item.PackagName, |
| | | Status = item.Status, |
| | | SkuNo = item.SkuNo, |
| | | SkuName = item.SkuName, |
| | | }; |
| | | |
| | | |
| | | noticeList.Add(entry); |
| | | } |
| | | } |
| | | } |
| | | //List<ArrivalNoticeDetailDto> list = new List<ArrivalNoticeDetailDto>(); |
| | | //foreach (var item in noticeList) |
| | | //{ |
| | | // string str = BySkuNoGetPackInfo(item.SkuNo); |
| | | // if (str == "存在") |
| | | // { |
| | | // list.Add(item); |
| | | // } |
| | | //} |
| | | |
| | | return noticeList; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | // 获取单据列表 |
| | | public List<ArrivalNoticeDto> GetArrivalNotices(ArrivalNoticeVm model) |
| | | public List<string> GetArrivalNotices(ArrivalNoticeVm model) |
| | | { |
| | | string sqlString = string.Empty; |
| | | try |
| | | { |
| | | // 未关单的单据 |
| | | sqlString = $"select * from BllArrivalNotice where Type in ({model.Type}) and Status != '3' and Status != '4' and IsDel='0' order by CreateTime;"; |
| | | var modelList = Db.Ado.SqlQuery<ArrivalNoticeDto>(sqlString); |
| | | //sqlString = $"select * from BllArrivalNotice where Type in ({model.Type}) and Status != '3' and Status != '4' and IsDel='0' order by CreateTime;"; |
| | | //var modelList = Db.Ado.SqlQuery<ArrivalNoticeDto>(sqlString); |
| | | |
| | | return modelList; |
| | | //model.Type:单据类型 在这里代表前端页签类型:即标签页签:贴标物料; 数量页签:不贴表物料,原因:懒得加参数 |
| | | var data = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && m.Status != "3" && m.Status != "4").Select(m=>m.ASNNo).ToList(); |
| | | var list = new List<string>(); |
| | | if (model.Type.Contains("0"))//0贴标 |
| | | { |
| | | list = Db.Queryable<BllArrivalNoticeDetail>().Where(m =>m.IsDel == "0" && data.Contains(m.ASNNo) && !string.IsNullOrWhiteSpace(m.PackagNo)).Select(m => m.ASNNo).Distinct().ToList(); |
| | | } |
| | | else if(model.Type.Contains("1"))//1不贴标 |
| | | { |
| | | list = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && data.Contains(m.ASNNo) && string.IsNullOrWhiteSpace(m.PackagNo)).Select(m=>m.ASNNo).Distinct().ToList(); |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("页签类型参数错误"); |
| | | } |
| | | |
| | | |
| | | return list; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | UpbindPalletNo = upBindPalletNo, |
| | | PalletNo2 = bindVms[0].PalletNo2, |
| | | PalletNo3 = bindVms[0].PalletNo3, |
| | | Qty = (int)bindVms[0].Qty, |
| | | Qty = bindVms[0].Qty, |
| | | LotNo = bindVms[0].LotNo, |
| | | LotText = bindVms[0].LotText, |
| | | SupplierLot = bindVms[0].SupplierLot, |
| | |
| | | return strMsg; |
| | | } |
| | | #endregion |
| | | var pallQty = 0;//托盘上数量 |
| | | decimal pallQty = 0;//托盘上数量 |
| | | var boxinfo2 = boxinfo.Where(w => w.SkuNo == noticeItem.SkuNo && w.LotNo == noticeItem.LotNo && w.PalletNo == model.PalletNo).ToList(); |
| | | if (boxinfo2.Count <= 0) |
| | | { |
| | |
| | | { |
| | | throw new Exception("-1:箱码信息不存在,请核查!"); |
| | | } |
| | | var bNum = 0;//数量 |
| | | decimal bNum = 0;//数量 |
| | | //验证箱码是否已绑定托盘 |
| | | foreach (var item in boxinfo) |
| | | { |
| | |
| | | } |
| | | |
| | | #region 产品组托 |
| | | |
| | | public void GetBoxInfoByFuMa(string boxNo,string url) |
| | | { |
| | | try |
| | | { |
| | | var list = new List<BllBoxInfo>(); |
| | | |
| | | var data = new { BoxNo = boxNo }; |
| | | var jsonData = JsonConvert.SerializeObject(data); |
| | | |
| | | #region 测试版本 |
| | | |
| | | //读取json文件,添加数据 |
| | | var ss = AppDomain.CurrentDomain.BaseDirectory; |
| | | string filePath = Path.Combine(ss, "CreateBoxInfo.json"); |
| | | string json = File.ReadAllText(filePath); |
| | | var person = JsonConvert.DeserializeObject<List<BllBoxInfo>>(json); |
| | | |
| | | var comTime = DateTime.Now; |
| | | //添加箱码信息表中 //暂时这些写--添加数据,后续需要和赋码系统对接后 根据明确返回的数据格式更改 |
| | | foreach (var item in person) |
| | | { |
| | | if (item.BoxNo!= boxNo) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | var sku = Db.Queryable<SysMaterials>().First(m=>m.IsDel =="0" && m.SkuNo == item.SkuNo); |
| | | if (sku == null) |
| | | { |
| | | continue; |
| | | } |
| | | var boxInfo = new BllBoxInfo() |
| | | { |
| | | ASNNo = "", |
| | | //ASNDetailNo = 0, |
| | | OrderCode = "", |
| | | //BindNo = 0, |
| | | BoxNo = item.BoxNo, |
| | | BoxNo2 = item.BoxNo2, |
| | | BoxNo3 = item.BoxNo3, |
| | | PalletNo = "", |
| | | Qty = item.Qty, |
| | | FullQty = item.FullQty, |
| | | Status = "0", |
| | | SkuNo = item.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | LotNo = item.LotNo, |
| | | LotText = item.LotText, |
| | | SupplierLot = item.SupplierLot, |
| | | ProductionTime = item.ProductionTime, |
| | | ExpirationTime = item.ExpirationTime, |
| | | //CompleteTime = comTime, |
| | | InspectMark = item.InspectMark, |
| | | BitBoxMark = item.BitBoxMark, |
| | | InspectStatus = item.InspectStatus, |
| | | Origin = "赋码", |
| | | Standard = item.Standard, |
| | | PackageStandard = item.PackageStandard, |
| | | StoreTime = item.StoreTime, |
| | | QtyOrd = item.QtyOrd, |
| | | QtyCount = item.QtyCount, |
| | | CreateUser = 0, |
| | | CreateTime = comTime, |
| | | }; |
| | | list.Add(boxInfo); |
| | | } |
| | | Db.Insertable(list).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | #region 正式版本 |
| | | |
| | | |
| | | ////程序正式发布后放开 |
| | | //var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | //var response = HttpHelper.DoPost(url, jsonData, "获取箱码信息", "赋码"); |
| | | //var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | ////解析返回数据 |
| | | //var fuMaModel = JsonConvert.DeserializeObject<FuMaModel>(response); |
| | | //if (fuMaModel.Success == 0) |
| | | //{ |
| | | |
| | | //} |
| | | //if (fuMaModel.Success == -1) |
| | | //{ |
| | | // throw new Exception($"赋码系统返回状态异常:{fuMaModel.Message}"); |
| | | //} |
| | | #endregion |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据箱码获取标签箱码信息 |
| | | /// </summary> |
| | |
| | | if (string.IsNullOrEmpty(model.BoxNo)) |
| | | { |
| | | throw new Exception("请扫描外箱条码!"); |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(model.ASNNo)) |
| | | { |
| | | var asnData = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == model.ASNNo); |
| | | if (asnData != null && (asnData.Type == "0" || asnData.Type == "3")) |
| | | { |
| | | var count = Db.Queryable<BllBoxInfo>().Count(m => m.IsDel == "0" && m.Status == "0" && m.BoxNo == model.BoxNo); |
| | | if (count == 0) |
| | | { |
| | | GetBoxInfoByFuMa(model.BoxNo, ""); //从赋码系统获取箱码信息 |
| | | } |
| | | } |
| | | |
| | | } |
| | | string sqlString = $@"SELECT |
| | | ASNNo, |
| | |
| | | AND BoxNo = '{model.BoxNo}' |
| | | GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo; "; |
| | | var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); |
| | | if (models == null) |
| | | if (models.Count == 0) |
| | | { |
| | | throw new Exception("箱码信息不存在!"); |
| | | } |
| | |
| | | |
| | | if (string.IsNullOrEmpty(model.AsnNo)) |
| | | { |
| | | throw new Exception("-1:单据号不可为空!"); |
| | | throw new Exception("-1:物料明细不可为空!"); |
| | | } |
| | | if (model.AsnDetailId == null || model.AsnDetailId == 0) |
| | | { |
| | | throw new Exception("-1:物料不可为空!"); |
| | | } |
| | | //if (model.AsnDetailId == null || model.AsnDetailId == 0) |
| | | //{ |
| | | // throw new Exception("-1:物料明细不可为空!"); |
| | | //} |
| | | if (string.IsNullOrEmpty(model.PalletNo)) |
| | | { |
| | | throw new Exception("-1:托盘号不可为空!"); |
| | | } |
| | | var detailId = model.AsnNo.Split("-"); |
| | | model.AsnDetailId = int.Parse(detailId[0]); |
| | | // 验证入库单明细是否存在 |
| | | var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailId); |
| | | if (detail == null) |
| | | { |
| | | throw new Exception("-1:当前物料未查询到单据,请核实!"); |
| | | } |
| | | model.AsnNo = detail.ASNNo; |
| | | //根据单据号获取入库单总单 |
| | | var notice = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == model.AsnNo); |
| | | var notice = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == detail.ASNNo); |
| | | if (notice.Status != "0" && notice.Status != "1" && notice.Status != "2") |
| | | { |
| | | throw new Exception("-1:该单据已关单!"); |
| | |
| | | else |
| | | { |
| | | //从物料名称-批次中取出批次 |
| | | int indexOfDash = model.LotNo.IndexOf("-"); |
| | | if (indexOfDash != -1) |
| | | var indexOfDash = model.LotNo.Split("-"); |
| | | var len = indexOfDash.Length; |
| | | if (len >= 1) |
| | | { |
| | | model.LotNo = model.LotNo.Substring(indexOfDash + 1); |
| | | model.LotNo =indexOfDash[len-1]; |
| | | } |
| | | else |
| | | { |
| | |
| | | { |
| | | throw new Exception("该托盘在库存已有信息,请核实!"); |
| | | } |
| | | // 验证入库单明细是否存在 |
| | | var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailId && m.ASNNo == model.AsnNo && m.LotNo.Contains(model.LotNo)); |
| | | if (detail == null) |
| | | { |
| | | throw new Exception("-1:当前物料及批次与单据无关联,请核实!"); |
| | | } |
| | | |
| | | #region 包装 |
| | | var package = Db.Queryable<SysPackag>().Where(m => m.IsDel == "0"); |
| | | var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo); |
| | |
| | | var boxGroup = boxInfoList.GroupBy(m => m.BoxNo).ToList(); |
| | | foreach (var g in boxGroup) |
| | | { |
| | | var boxFullQty = 0;//箱内总数量 |
| | | decimal boxFullQty = 0;//箱内总数量 |
| | | foreach (var box in g) |
| | | { |
| | | if (box.BindNo != null && box.BindNo != 0) |
| | |
| | | factQty += box.Qty; |
| | | boxFullQty += box.Qty; |
| | | } |
| | | if (boxFullQty > bNum) |
| | | { |
| | | throw new Exception($"绑定失败,{g.Key}箱码绑定数量大于该物品包装数量!"); |
| | | } |
| | | //if (boxFullQty > bNum) |
| | | //{ |
| | | // throw new Exception($"绑定失败,{g.Key}箱码绑定数量大于该物品包装数量!"); |
| | | //} |
| | | } |
| | | Db.Updateable(boxInfoList).ExecuteCommand(); |
| | | |
| | | // 更新托盘绑定表 |
| | | bind.Qty += factQty; |
| | | } |
| | | if (bind.FullQty < bind.Qty && isDeposit == 0 && isTextTable == 0) |
| | | { |
| | | throw new Exception("托盘绑定数量已超出该物料包装数量"); |
| | | } |
| | | //if (bind.FullQty < bind.Qty && isDeposit == 0 && isTextTable == 0) |
| | | //{ |
| | | // throw new Exception("托盘绑定数量已超出该物料包装数量"); |
| | | //} |
| | | |
| | | if (bind.FullQty == bind.Qty) |
| | | if (bind.FullQty <= bind.Qty) |
| | | { |
| | | bind.BitPalletMark = "0"; |
| | | } |
| | | if (bind.Qty > pNum && isDeposit == 0 && isTextTable == 0) |
| | | { |
| | | throw new Exception($"绑定失败,{bind.PalletNo}托盘绑定数量大于该物品托盘包装数量!"); |
| | | } |
| | | //if (bind.Qty > pNum && isDeposit == 0 && isTextTable == 0) |
| | | //{ |
| | | // throw new Exception($"绑定失败,{bind.PalletNo}托盘绑定数量大于该物品托盘包装数量!"); |
| | | //} |
| | | Db.Updateable(bind).Where(m => m.Id == bindId).ExecuteCommand(); |
| | | |
| | | // 更改入库单明细已组数量 |
| | |
| | | PackagNo = sku.PackagNo, |
| | | IsBale = bindInfo.IsBale, |
| | | IsBelt = bindInfo.IsBelt, |
| | | |
| | | Demo = bindInfo.Demo, |
| | | CreateUser = (int)model.CreateUser, |
| | | CreateTime = serverTime |
| | | }; |
| | |
| | | detailModel.SupplierName = notice.CustomerName;//供应商名称 |
| | | } |
| | | #region 维护质检结果 |
| | | |
| | | //获取该批次最终质检结果 |
| | | var quality = Db.Queryable<BllQualityInspect>().Where(a => a.LotNo == noticeDetail.LotNo && a.IsDel == "0").OrderByDescending(a => a.CreateTime).First(); |
| | | if (notice.Type == "3") |
| | | { |
| | | quality = Db.Queryable<BllQualityInspect>().Where(a => a.LotNo == noticeDetail.LotNo && a.ASNNo == notice.ASNNo && a.IsDel == "0").OrderByDescending(a => a.CreateTime).First(); |
| | | } |
| | | if (quality != null) |
| | | { |
| | | //修改合格不合格数量 |
| | |
| | | SendDate = serverTime, //发送时间 |
| | | BackDate = serverTime, //返回时间 |
| | | StartLocat = "",//起始位置 |
| | | EndLocat = "力诺平库",//目标位置 |
| | | EndLocat = model.LocatNo,//目标位置 |
| | | PalletNo = bindInfo.PalletNo,//托盘码 |
| | | IsSend = 0,//是否可再次下发 |
| | | IsCancel = 0,//是否可取消 |
| | |
| | | SkuName = item.SkuName, |
| | | Standard = sku.Standard, |
| | | ProductionTime = item.ProductionTime, |
| | | ExpirationTime = item.ExpirationTime, |
| | | SupplierLot = item.SupplierLot, |
| | | InspectMark = item.InspectMark, |
| | | BitBoxMark = item.BitBoxMark, |
| | |
| | | SendDate = DateTime.Now, //发送时间 |
| | | BackDate = DateTime.Now, //返回时间 |
| | | StartLocat = "",//起始位置 |
| | | EndLocat = "力诺平库",//目标位置 |
| | | EndLocat = model.LocatNo,//目标位置 |
| | | PalletNo = model.PalletNo,//托盘码 |
| | | IsSend = 0,//是否可再次下发 |
| | | IsCancel = 0,//是否可取消 |