| | |
| | | using Model.ModelDto.PdaDto; |
| | | using Dm; |
| | | using Model.InterFaceModel; |
| | | using WMS.Entity.BllQualityEntity; |
| | | using Newtonsoft.Json; |
| | | using Utility.Tools; |
| | | using System.Reflection; |
| | | using System.IO; |
| | | using System.Security.Cryptography.X509Certificates; |
| | | using System.Net.WebSockets; |
| | | using WMS.BLL.SysServer; |
| | | |
| | | 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 !="2" && 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); |
| | | |
| | | //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) |
| | | { |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | //根据入库单号获取入库总单信息 |
| | | public List<BllArrivalNotice> GetArrivalNotice(ArrivalNoticeVm model) |
| | | { |
| | | string sqlString = string.Empty; |
| | | try |
| | | { |
| | | sqlString = $"select * from BllArrivalNotice where ASNNo = '{model.ASNNo}' and isdel='0' "; |
| | | var modelList = Db.Ado.SqlQuery<BllArrivalNotice>(sqlString); |
| | | |
| | | return modelList; |
| | | } |
| | |
| | | sqlString = $"select * from BllArrivalNoticeDetail where ASNNo = '{model.ASNNo}' and isdel='0' order by CreateTime;"; |
| | | var modelList = Db.Ado.SqlQuery<ArrivalNoticeDetailDto>(sqlString); |
| | | |
| | | return modelList; |
| | | List<ArrivalNoticeDetailDto> list = new List<ArrivalNoticeDetailDto>(); |
| | | foreach (var item in modelList) |
| | | { |
| | | string str = BySkuNoGetPackInfo(item.SkuNo); |
| | | if (str == "不存在") |
| | | { |
| | | list.Add(item); |
| | | } |
| | | } |
| | | |
| | | return list; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | |
| | | if (modelList.Count > 0) |
| | | { |
| | | var notice = Db.Queryable<BllArrivalNotice>().First(m=>m.IsDel == "0" && m.ASNNo == modelList[0].ASNNo); |
| | | modelList[0].UDF5 = notice.Demo; |
| | | return modelList[0]; |
| | | } |
| | | |
| | |
| | | else |
| | | { |
| | | sqlMsg = "-1:托盘号不存在!"; |
| | | } |
| | | |
| | | return sqlMsg; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 验证地码是否存在 |
| | | /// </summary> |
| | | /// <param name="locatNo">地码</param> |
| | | /// <returns>"":可使用 -1:不可使用(原因)</returns> |
| | | public string IsEnableLocatNo(string locatNo) |
| | | { |
| | | string sqlMsg = ""; |
| | | string sqlString = string.Empty; |
| | | try |
| | | { |
| | | sqlString = $"select * from SysStorageLocat where LocatNo = '{locatNo}' and WareHouseNo = 'W02' and isdel = '0';"; |
| | | var models = Db.Ado.SqlQuery<PalletBindVm>(sqlString); |
| | | |
| | | if (models.Count > 0) |
| | | { |
| | | if (models[0].Status != "0") |
| | | { |
| | | sqlMsg = "-1:此库位使用中,请在库内请核实!"; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | sqlMsg = "-1:库位不存在!"; |
| | | } |
| | | |
| | | return sqlMsg; |
| | |
| | | public string BindNullPallet(PalletBindVm model) |
| | | { |
| | | string strMsg = ""; |
| | | string type = model.BindType == "0" ? "PDA" : "叠托机"; |
| | | try |
| | | { |
| | | var datetime = Db.GetDate(); |
| | |
| | | LotText = "", |
| | | SupplierLot = "", |
| | | InspectStatus = "1", |
| | | Origin = "PDA", |
| | | Origin = type, |
| | | BoxNo = "", |
| | | BoxNo2 = "", |
| | | BoxNo3 = "", |
| | |
| | | } |
| | | } |
| | | |
| | | // 叠托机绑定空托盘 |
| | | public string BindNullPallets(PalletsBind model) |
| | | { |
| | | string strMsg = ""; |
| | | string type = model.BindType == "0" ? "PDA" : "叠托机"; |
| | | try |
| | | { |
| | | var datetime = Db.GetDate(); |
| | | |
| | | //获取托盘绑定信息 |
| | | string str = "select * from BllPalletBind where IsDel = '0' and PalletNo = @palletno and Status = '0' "; |
| | | List<PalletBindVm> list = Db.Ado.SqlQuery<PalletBindVm>(str, new |
| | | { |
| | | palletno = model.PalletNo //托盘号 |
| | | }); |
| | | //判断是否已绑定该托盘 |
| | | if (list.Count > 0) |
| | | { |
| | | strMsg = "-1:该托盘已被绑定!"; |
| | | return strMsg; |
| | | } |
| | | if (string.IsNullOrEmpty(model.PalletNo)) |
| | | { |
| | | strMsg = "-1:托盘号不可为空!"; |
| | | return strMsg; |
| | | } |
| | | if (model.Qty == null || model.Qty == 0) |
| | | { |
| | | strMsg = "-1:空托盘数量不可为空!"; |
| | | return strMsg; |
| | | } |
| | | //获取托盘信息 |
| | | var pallet = Db.Queryable<SysPallets>().First(a => a.IsDel == "0" && a.PalletNo == model.PalletNo); |
| | | |
| | | if (pallet == null) |
| | | { |
| | | strMsg = "-1:托盘信息为空!"; |
| | | return strMsg; |
| | | } |
| | | if (pallet.Status != "0") |
| | | { |
| | | strMsg = "-1:该托盘正在使用!"; |
| | | return strMsg; |
| | | } |
| | | |
| | | Db.BeginTran(); |
| | | |
| | | // 插入托盘绑定表 |
| | | var modelpb = new BllPalletBind |
| | | { |
| | | ASNNo = "", |
| | | ASNDetailNo = 0, |
| | | TaskNo = "", //任务号 |
| | | PalletNo = model.PalletNo, |
| | | Qty = (int)model.Qty, |
| | | Status = "0", //等待执行 |
| | | Type = "1", //0 物料托 1 空托 |
| | | LotNo = "", |
| | | LotText = "", |
| | | SupplierLot = "", |
| | | InspectMark = "0", //0 否 1 是 |
| | | BitPalletMark = "0", |
| | | IsBale = "0", |
| | | IsBelt = "0", |
| | | CreateTime = Db.GetDate() |
| | | }; |
| | | var id = Db.Insertable(modelpb).ExecuteReturnIdentity(); |
| | | |
| | | var modelbb = new BllBoxInfo |
| | | { |
| | | ASNNo = "", |
| | | ASNDetailNo = null, |
| | | BindNo = id, |
| | | PalletNo = model.PalletNo, |
| | | Status = "1", |
| | | CompleteTime = DateTime.Now, |
| | | Qty = (int)model.Qty, |
| | | FullQty = null, |
| | | SkuNo = "100099", |
| | | SkuName = "托盘", |
| | | LotNo = "", |
| | | LotText = "", |
| | | SupplierLot = "", |
| | | InspectStatus = "1", |
| | | Origin = type, |
| | | BoxNo = "", |
| | | BoxNo2 = "", |
| | | BoxNo3 = "", |
| | | InspectMark = "", |
| | | BitBoxMark = "0", |
| | | |
| | | CreateTime = datetime |
| | | }; |
| | | Db.Insertable(modelbb).ExecuteCommand(); |
| | | |
| | | |
| | | // 更改托盘使用状态 |
| | | string sqlStr = string.Empty; |
| | | sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{model.PalletNo}';"; |
| | | Db.Ado.ExecuteCommand(sqlStr); |
| | | Db.CommitTran(); |
| | | |
| | | // 插入操作日志 |
| | | new OperationASNServer().AddLogOperationAsn("PDA模块", "空托入库", model.PalletNo, "添加", $"在PDA上添加了空托盘跺", 1); |
| | | |
| | | return strMsg; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.Ado.RollbackTran(); |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 解绑空托盘 |
| | | /// </summary> |
| | |
| | | { |
| | | //获取任务信息 |
| | | var logtask = Db.Queryable<LogTask>().First(a => a.PalletNo == upBindPalletNo && a.IsDel == "0" && a.Status == "1"); |
| | | if (logtask == null) |
| | | if (logtask != null) |
| | | { |
| | | strMsg = "该托盘任务已完成 或未成功创建任务 请核实!"; |
| | | return strMsg; |
| | | } |
| | | string bindstr = "select * from BllPalletBind Where IsDel = @isdel and PalletNo = @palletno and ASNDetailNo = 0 and ASNNo = ''"; |
| | | string bindstr = "select * from BllPalletBind Where IsDel = @isdel and PalletNo = @palletno and ASNDetailNo = 0 and ASNNo = '' "; |
| | | //获取绑定托盘表信息 |
| | | List<PalletBindVm> bindVms = Db.Ado.SqlQuery<PalletBindVm>(bindstr, new |
| | | { |
| | |
| | | return strMsg; |
| | | } |
| | | //删除绑定托盘表信息 |
| | | string delstr = "delete from BllPalletBind Where PalletNo = @palletno"; |
| | | string delstr = "update BllPalletBind set IsDel = 1,UpdateUser = @UpdateUser,UpdateTime = @UpdateTime Where PalletNo = @palletno and Id =@Id "; |
| | | int i = Db.Ado.ExecuteCommand(delstr, new |
| | | { |
| | | palletno = upBindPalletNo |
| | | UpdateUser = createUser, |
| | | UpdateTime = DateTime.Now, |
| | | palletno = upBindPalletNo, |
| | | Id = bindVms[0].Id |
| | | }); |
| | | //修改托盘状态 |
| | | Db.BeginTran(); |
| | |
| | | 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, |
| | |
| | | box.IsDel = "1"; |
| | | Db.Updateable(box).ExecuteCommand(); |
| | | |
| | | //修改任务状态 |
| | | logtask.IsDel = "1"; |
| | | logtask.Status = "4"; //3 已取消 |
| | | logtask.UpdateUser = createUser; //取消人 |
| | | logtask.UpdateTime = DateTime.Now; //取消时间 |
| | | Db.Updateable(logtask).ExecuteCommand(); |
| | | ////修改任务状态 |
| | | //logtask.IsDel = "1"; |
| | | //logtask.Status = "4"; //3 已取消 |
| | | //logtask.UpdateUser = createUser; //取消人 |
| | | //logtask.UpdateTime = DateTime.Now; //取消时间 |
| | | //Db.Updateable(logtask).ExecuteCommand(); |
| | | //更改库存数量 |
| | | //string str = $"update DataStock set Qty = Qty - {(int)bindVms[0].Qty} Where SkuNo = '100099'"; |
| | | // 更改托盘使用状态 |
| | |
| | | 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) |
| | | { |
| | |
| | | /// </summary> |
| | | /// <param name="locatNo">储位编码</param> |
| | | /// <returns></returns> |
| | | public string CheckLocatNo(string locatNo) |
| | | public string CheckLocatNo(string locatNo) |
| | | { |
| | | try |
| | | { |
| | |
| | | { |
| | | throw new Exception("-1:箱码信息不存在,请核查!"); |
| | | } |
| | | var bNum = 0;//数量 |
| | | decimal bNum = 0;//数量 |
| | | //验证箱码是否已绑定托盘 |
| | | foreach (var item in boxinfo) |
| | | { |
| | |
| | | SupplierLot = "", |
| | | InspectMark = "0", |
| | | BitPalletMark = "1", |
| | | IsBale = "0", |
| | | IsBelt = "0", |
| | | IsBale = arrivalnotice.IsBale, |
| | | IsBelt = arrivalnotice.IsBelt, |
| | | CreateUser = userId |
| | | }; |
| | | // 插入托盘绑定表 |
| | |
| | | BitPalletMark = "1", |
| | | InspectStatus = sku.IsInspect,// 组盘的时候就要默认设定好是否合格 |
| | | PackagNo = sku.PackagNo, |
| | | IsBale = null, |
| | | IsBelt = null, |
| | | IsBale = arrivalnotice.IsBale, |
| | | IsBelt = arrivalnotice.IsBelt, |
| | | CreateUser = userId, |
| | | CreateTime = serverTime |
| | | }; |
| | |
| | | } |
| | | |
| | | #region 产品组托 |
| | | |
| | | public void GetBoxInfoByFuMa(string boxNo,string url,string fuMaTokenUrl,string levelType) |
| | | { |
| | | try |
| | | { |
| | | if (levelType == "0") |
| | | { |
| | | throw new Exception("未找到该物料的箱包装级别"); |
| | | } |
| | | if (levelType == "3") |
| | | { |
| | | throw new Exception("未调试该级别包装!"); |
| | | } |
| | | 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 token = new Token().GetFuMaToken(fuMaTokenUrl); |
| | | var getParentVal = levelType == "1" ? "true" : "false"; |
| | | var getChildrenVal = levelType == "2" ? "true" : "false"; |
| | | Dictionary<string, string> paramDic = new Dictionary<string, string> |
| | | { |
| | | { "Token", token }, //分配的令牌(变量) |
| | | { "Barcode", boxNo },//要查询的条码 |
| | | { "getParent", getParentVal },//是否查询父码 |
| | | { "getChildren", getChildrenVal } //是否查询子码 aaa |
| | | }; |
| | | |
| | | //程序正式发布后放开 |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | var response = HttpHelper.DoGet(url, "赋码", "获取箱码信息", paramDic); |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | //解析返回数据 |
| | | var fuMaModel = JsonConvert.DeserializeObject<FuMaGetBoxModel>(response); |
| | | if (fuMaModel.IsSuccess) |
| | | { |
| | | //赋码返回信息成功状态 |
| | | if (fuMaModel.Product == null || fuMaModel.Barcodes.Count == 0) |
| | | { |
| | | throw new Exception("产品信息或箱支信息为空"); |
| | | } |
| | | |
| | | if (levelType == "1") |
| | | { |
| | | if (fuMaModel.Barcodes.First().Barcode != boxNo) |
| | | { |
| | | throw new Exception("获取信息不一致"); |
| | | } |
| | | |
| | | var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == fuMaModel.MaterialNum); |
| | | if (sku == null) |
| | | { |
| | | throw new Exception("未查询到箱码中和赋码提供的物料信息一致的数据"); |
| | | } |
| | | var boxInfo = new BllBoxInfo() |
| | | { |
| | | ASNNo = "", |
| | | //ASNDetailNo = 0, |
| | | OrderCode = "", |
| | | //BindNo = 0, |
| | | BoxNo = fuMaModel.Barcodes.First().Barcode, |
| | | PalletNo = "", |
| | | Qty = fuMaModel.Barcodes.First().BoxItemQty, |
| | | FullQty = fuMaModel.BoxItemQty, |
| | | Status = "0", |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | LotNo = fuMaModel.Barcodes.First().BatchNo, |
| | | //LotText = "", |
| | | //SupplierLot = item.SupplierLot, |
| | | ProductionTime = DateTime.Parse(fuMaModel.Barcodes.First().ProductionDate), |
| | | ExpirationTime = DateTime.Parse(fuMaModel.Barcodes.First().ExpirationDate), |
| | | //CompleteTime = comTime, |
| | | InspectMark = "0", |
| | | BitBoxMark = fuMaModel.Barcodes.First().Status == "零箱" ? "1" : "0", |
| | | InspectStatus = "0", |
| | | Origin = "赋码", |
| | | Standard = fuMaModel.Product.Spec, |
| | | PackageStandard = fuMaModel.Product.PackageSpec, |
| | | //StoreTime = item.StoreTime, |
| | | //QtyOrd = item.QtyOrd, |
| | | //QtyCount = item.QtyCount, |
| | | CreateUser = 0, |
| | | CreateTime = comTime, |
| | | }; |
| | | list.Add(boxInfo); |
| | | } |
| | | else |
| | | { |
| | | foreach (var item in fuMaModel.Barcodes) |
| | | { |
| | | if (item.Barcode == boxNo) |
| | | { |
| | | continue; //获取支码时第一个码为父码 |
| | | } |
| | | |
| | | var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == fuMaModel.MaterialNum); |
| | | if (sku == null) |
| | | { |
| | | throw new Exception("未查询到箱码中和赋码提供的物料信息一致的数据"); |
| | | } |
| | | var boxInfo = new BllBoxInfo() |
| | | { |
| | | ASNNo = "", |
| | | //ASNDetailNo = 0, |
| | | OrderCode = "", |
| | | //BindNo = 0, |
| | | BoxNo = item.ParentBarcode, |
| | | BoxNo3 = item.Barcode, |
| | | PalletNo = "", |
| | | Qty = item.MinLevelCount, |
| | | FullQty = fuMaModel.BoxItemQty, |
| | | Status = "0", |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | LotNo = item.BatchNo, |
| | | //LotText = "", |
| | | //SupplierLot = item.SupplierLot, |
| | | ProductionTime = DateTime.Parse(item.ProductionDate), |
| | | ExpirationTime = DateTime.Parse(item.ExpirationDate), |
| | | //CompleteTime = comTime, |
| | | InspectMark = "0", |
| | | BitBoxMark = item.Status == "零箱" ? "1" : "0", |
| | | InspectStatus = "0", |
| | | Origin = "赋码", |
| | | Standard = fuMaModel.Product.AuthorizedNo, |
| | | PackageStandard = fuMaModel.Product.PackageSpec, |
| | | //StoreTime = item.StoreTime, |
| | | //QtyOrd = item.QtyOrd, |
| | | QtyCount = (int)fuMaModel.BoxItemQty, |
| | | CreateUser = 0, |
| | | CreateTime = comTime, |
| | | }; |
| | | list.Add(boxInfo); |
| | | } |
| | | } |
| | | |
| | | Db.Insertable(list).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | //赋码返回信息失败状态 |
| | | throw new Exception($"赋码系统返回状态异常:{fuMaModel.Message}"); |
| | | } |
| | | #endregion |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据箱码获取标签箱码信息 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model) |
| | | public List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model, string url, string fuMaTokenUrl) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(model.BoxNo)) |
| | | { |
| | | throw new Exception("请扫描外箱条码!"); |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(model.ASNNo)) |
| | | { |
| | | var detailId = model.ASNNo.Split("-")[0]; |
| | | var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m=>m.IsDel =="0" && m.Id == int.Parse(detailId)); |
| | | if (detail != null) |
| | | { |
| | | var asnData = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == detail.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) |
| | | { |
| | | //获取物料包装级别 |
| | | string level = "0"; |
| | | var levelType = Db.Queryable<SysPackag>().First(w => w.IsDel == "0" && w.PackagNo == detail.SkuNo); |
| | | if (levelType.L1Name == "箱") |
| | | { |
| | | level = "1"; |
| | | } |
| | | if (levelType.L2Name == "箱") |
| | | { |
| | | level = "2"; |
| | | } |
| | | if (levelType.L3Name == "箱") |
| | | { |
| | | level = "3"; |
| | | } |
| | | GetBoxInfoByFuMa(model.BoxNo, url, fuMaTokenUrl, level); //从赋码系统获取箱码信息 |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | 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("箱码信息不存在!"); |
| | | } |
| | |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据箱码获取标签最小追溯码信息 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public List<BoxInfoDto> GetBindBoxInfo2s(BoxInfoVm model, string url, string fuMaTokenUrl) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(model.BoxNo3)) |
| | | { |
| | | throw new Exception("请扫描最小追溯条码!"); |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(model.ASNNo)) |
| | | { |
| | | var detailId = model.ASNNo.Split("-")[0]; |
| | | var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == int.Parse(detailId)); |
| | | if (detail != null) |
| | | { |
| | | var asnData = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == detail.ASNNo); |
| | | if (asnData != null) |
| | | { |
| | | if (asnData.Type != "3") |
| | | { |
| | | throw new Exception("单据请选择退货入库单!"); |
| | | } |
| | | var count = Db.Queryable<BllBoxInfo>().Count(m => m.IsDel == "0" && m.Status == "0" && m.BoxNo3 == model.BoxNo3); |
| | | if (count == 0) |
| | | { |
| | | //优先WMS查找 |
| | | |
| | | var comDetail = Db.Queryable<BllBoxInfo>().First(m=>m.BoxNo3 == model.BoxNo3 && m.IsDel =="0" && m.Status =="2"); |
| | | if (comDetail!= null) |
| | | { |
| | | var boxInfo = new BllBoxInfo() |
| | | { |
| | | ASNNo = "", |
| | | //ASNDetailNo = 0, |
| | | OrderCode = "", |
| | | //BindNo = 0, |
| | | BoxNo = comDetail.BoxNo, |
| | | BoxNo2 = comDetail.BoxNo2, |
| | | BoxNo3 = comDetail.BoxNo3, |
| | | PalletNo = "", |
| | | Qty = comDetail.Qty, |
| | | FullQty = comDetail.FullQty, |
| | | Status = "0", |
| | | SkuNo = comDetail.SkuNo, |
| | | SkuName = comDetail.SkuName, |
| | | LotNo = comDetail.LotNo, |
| | | LotText = comDetail.LotText, |
| | | SupplierLot = comDetail.SupplierLot, |
| | | ProductionTime = comDetail.ProductionTime, |
| | | ExpirationTime = comDetail.ExpirationTime, |
| | | //CompleteTime = comTime, |
| | | InspectMark = comDetail.InspectMark, |
| | | BitBoxMark = "1", |
| | | InspectStatus = comDetail.InspectStatus, |
| | | Origin = "赋码", |
| | | Standard = comDetail.Standard, |
| | | PackageStandard = comDetail.PackageStandard, |
| | | StoreTime = comDetail.StoreTime, |
| | | QtyOrd = comDetail.QtyOrd, |
| | | QtyCount = comDetail.QtyCount, |
| | | CreateUser = 0, |
| | | CreateTime = DateTime.Now, |
| | | }; |
| | | Db.Insertable(boxInfo).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | GetBoxInfoByFuMa(model.BoxNo3, url, fuMaTokenUrl,"3"); //从赋码系统获取箱码信息 |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | string sqlString = $@"SELECT |
| | | ASNNo, |
| | | BoxNo, |
| | | SkuNo, |
| | | SkuName, |
| | | LotNo, |
| | | SUM(Qty) as Qty |
| | | FROM BllBoxInfo |
| | | WHERE IsDel = '0' |
| | | AND Status='0' |
| | | AND BoxNo3 = '{model.BoxNo3}' |
| | | GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo; "; |
| | | var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); |
| | | if (models.Count == 0) |
| | | { |
| | | throw new Exception("最小追溯码信息不存在!"); |
| | | } |
| | | return models; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | // 根据单据号获取单据明细列表 |
| | | public List<ArrivalNoticeDetailDto> GetBindArrivalNoticeDetails(ArrivalNoticeVm model) |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | return noticeList; |
| | | List<ArrivalNoticeDetailDto> list = new List<ArrivalNoticeDetailDto>(); |
| | | foreach (var item in noticeList) |
| | | { |
| | | string str = BySkuNoGetPackInfo(item.SkuNo); |
| | | if (str == "存在") |
| | | { |
| | | list.Add(item); |
| | | } |
| | | } |
| | | |
| | | return list; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | //根据物料获取是否存在包装信息 |
| | | public string BySkuNoGetPackInfo(string skuNo) |
| | | { |
| | | try |
| | | { |
| | | //获取物料信息 |
| | | var sku = Db.Queryable<SysMaterials>().First(a => a.IsDel == "0" && a.SkuNo == skuNo); |
| | | //判断物料信息是否为空 |
| | | if (!string.IsNullOrWhiteSpace(sku.PackagNo)) |
| | | { |
| | | return "存在"; |
| | | } |
| | | else |
| | | { |
| | | return "不存在"; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return ex.Message; |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | if (string.IsNullOrEmpty(model.AsnNo)) |
| | | { |
| | | throw new Exception("-1:单据号不可为空!"); |
| | | throw new Exception("-1:物料明细不可为空!"); |
| | | } |
| | | //根据单据号获取入库单总单 |
| | | var notice = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == model.AsnNo); |
| | | 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 == detail.ASNNo); |
| | | if (notice.Status != "0" && notice.Status != "1" && notice.Status != "2") |
| | | { |
| | | throw new Exception("-1:该单据已关单!"); |
| | | } |
| | | if (string.IsNullOrEmpty(model.LotNo)) |
| | | { |
| | |
| | | else |
| | | { |
| | | //从物料名称-批次中取出批次 |
| | | int indexOfDash = model.LotNo.IndexOf("-"); |
| | | if (indexOfDash != -1) |
| | | var indexOfDash = model.LotNo.Split("-"); |
| | | var len = indexOfDash.Length; |
| | | if (len == 3) |
| | | { |
| | | model.LotNo = model.LotNo.Substring(indexOfDash + 1); |
| | | model.LotNo =indexOfDash[len-1]; |
| | | } |
| | | else |
| | | { |
| | | model.LotNo = ""; |
| | | } |
| | | } |
| | | //判断物料数量是否为0 为0判断箱码信息 不为0继续 |
| | | if (model.SkuQty == 0) |
| | | if (model.TableType == 0) |
| | | { |
| | | if (string.IsNullOrEmpty(model.BoxNo)) |
| | | if (notice.Type != "3") |
| | | { |
| | | throw new Exception("-1:箱码信息不可为空!"); |
| | | if (string.IsNullOrEmpty(model.BoxNo)) |
| | | { |
| | | throw new Exception("-1:箱码信息不可为空!"); |
| | | } |
| | | if (model.IsContinue == "1") |
| | | { |
| | | if (string.IsNullOrWhiteSpace(model.TailBoxNo)) |
| | | { |
| | | throw new Exception("-1:开启连续组托时,尾箱码信息不可为空!"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (string.IsNullOrEmpty(model.BoxNo01)) |
| | | { |
| | | throw new Exception("-1:追溯码信息不可为空!"); |
| | | } |
| | | if (model.IsContinue == "1") |
| | | { |
| | | throw new Exception("-1:追溯码不可连续组托!"); |
| | | } |
| | | } |
| | | |
| | | if (model.IsContinue == "1") |
| | | |
| | | |
| | | } |
| | | int isTextTable = model.TableType; |
| | | int isDeposit = 0; |
| | | //判断总单单据是否为寄存单据 |
| | | if (notice.Type == "7") |
| | | { |
| | | isDeposit = 1; |
| | | } |
| | | if (isDeposit == 1) |
| | | { |
| | | //判断总单备注是否为空 |
| | | if (!string.IsNullOrWhiteSpace(notice.Demo)) |
| | | { |
| | | if (string.IsNullOrWhiteSpace(model.TailBoxNo)) |
| | | { |
| | | throw new Exception("-1:开启连续组托时,尾箱码信息不可为空!"); |
| | | } |
| | | //分割总单备注及托盘备注 |
| | | var noticeDemo = notice.Demo.Split('、'); //总单备注 |
| | | var palletDemo = model.Demo.Split('、'); //托盘备注 |
| | | |
| | | //循环托盘备注 |
| | | foreach (var itemPallet in palletDemo) |
| | | { |
| | | int isDemo = 0; |
| | | //循环总单备注 |
| | | foreach (var itemNotice in noticeDemo) |
| | | { |
| | | //判断是否有相同备注 |
| | | if (itemPallet == itemNotice) |
| | | { |
| | | isDemo = 1; |
| | | break; |
| | | } |
| | | } |
| | | if (isDemo == 0) |
| | | { |
| | | throw new Exception("-1:总单备注与托盘备注不符,请核实后重新绑定!"); |
| | | } |
| | | } |
| | | } |
| | | else if (string.IsNullOrWhiteSpace(notice.Demo)) |
| | | { |
| | | //判断托盘备注是否为空 |
| | | if (!string.IsNullOrWhiteSpace(model.Demo)) |
| | | { |
| | | throw new Exception("-1:请添加总单备注后输入托盘备注!"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | Db.BeginTran(); |
| | |
| | | } |
| | | //判断托盘是否在库外 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo); |
| | | if (stockDetail != null && !string.IsNullOrEmpty(stockDetail.WareHouseNo)) |
| | | if (stockDetail != null)// && !string.IsNullOrEmpty(stockDetail.WareHouseNo) |
| | | { |
| | | throw new Exception("该托盘未在库外,请核实!"); |
| | | 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 pack = package.First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo); |
| | | if (pack == null) |
| | | { |
| | | throw new Exception("-1:获取物料包装失败,请核实!"); |
| | | } |
| | | |
| | | var pNum = 0;//托盘物品数量 |
| | | var bNum = 0;//箱码物品数量 |
| | | if (pack.L5Num.HasValue) |
| | | |
| | | //判断是否为寄存物料 |
| | | if (isDeposit == 0 && isTextTable == 0) |
| | | { |
| | | pNum = (int)pack.L5Num; |
| | | bNum = (int)pack.L4Num; |
| | | } |
| | | else if (pack.L4Num.HasValue) |
| | | { |
| | | pNum = (int)pack.L4Num; |
| | | bNum = (int)pack.L3Num; |
| | | } |
| | | else if (pack.L3Num.HasValue) |
| | | { |
| | | pNum = (int)pack.L3Num; |
| | | bNum = (int)pack.L2Num; |
| | | } |
| | | else if (pack.L2Num.HasValue) |
| | | { |
| | | pNum = (int)pack.L2Num; |
| | | bNum = (int)pack.L1Num; |
| | | } |
| | | else if (pack.L1Num.HasValue) |
| | | { |
| | | pNum = (int)pack.L1Num; |
| | | bNum = (int)pack.L1Num; |
| | | } |
| | | if (pNum == 0 || bNum == 0) |
| | | { |
| | | throw new Exception($"绑定失败,{detail.SkuNo}物品包装未找到!"); |
| | | if (pack == null) |
| | | { |
| | | throw new Exception("-1:获取物料包装失败,请核实!"); |
| | | } |
| | | if (pack.L5Num.HasValue) |
| | | { |
| | | pNum = (int)pack.L5Num; |
| | | bNum = (int)pack.L4Num; |
| | | } |
| | | else if (pack.L4Num.HasValue) |
| | | { |
| | | pNum = (int)pack.L4Num; |
| | | bNum = (int)pack.L3Num; |
| | | } |
| | | else if (pack.L3Num.HasValue) |
| | | { |
| | | pNum = (int)pack.L3Num; |
| | | bNum = (int)pack.L2Num; |
| | | } |
| | | else if (pack.L2Num.HasValue) |
| | | { |
| | | pNum = (int)pack.L2Num; |
| | | bNum = (int)pack.L1Num; |
| | | } |
| | | else if (pack.L1Num.HasValue) |
| | | { |
| | | pNum = (int)pack.L1Num; |
| | | bNum = (int)pack.L1Num; |
| | | } |
| | | if (pNum == 0 || bNum == 0) |
| | | { |
| | | throw new Exception($"绑定失败,{detail.SkuNo}物品包装未找到!"); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | |
| | | } |
| | | } |
| | | #endregion |
| | | var bind = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.ASNDetailNo == model.AsnDetailId && m.PalletNo == model.PalletNo); |
| | | var bind = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.ASNDetailNo == model.AsnDetailId && m.PalletNo == model.PalletNo && m.Status != "2"); |
| | | var bindId = 0; |
| | | if (bind == null) |
| | | { |
| | | |
| | | DateTime proTime; |
| | | DateTime expTime; |
| | | DateTime sortTime; |
| | | var bl1 = DateTime.TryParse(detail.Lot1, out proTime); |
| | | var bl2 = DateTime.TryParse(detail.Lot2, out expTime); |
| | | |
| | | if (!bl1 && !string.IsNullOrWhiteSpace(detail.Lot1)) |
| | | { |
| | | throw new Exception("生产日期转换失败"); |
| | | } |
| | | |
| | | if (!bl2 && !string.IsNullOrWhiteSpace(detail.Lot2)) |
| | | { |
| | | throw new Exception("有效期转换失败"); |
| | | } |
| | | bind = new BllPalletBind |
| | | { |
| | | ASNNo = model.AsnNo, |
| | |
| | | Type = "0", |
| | | LotNo = model.LotNo, |
| | | LotText = detail.LotText, |
| | | SupplierLot = "", |
| | | SupplierLot = detail.SupplierLot, |
| | | InspectMark = "0", |
| | | BitPalletMark = "1", |
| | | IsBale = "0", |
| | | IsBelt = "0", |
| | | CreateUser = userId |
| | | IsBale = detail.IsBale, |
| | | IsBelt = detail.IsBelt, |
| | | CreateUser = userId, |
| | | Demo = model.Demo, |
| | | |
| | | }; |
| | | if (model.SkuQty > pNum) |
| | | |
| | | if (bl1) |
| | | { |
| | | throw new Exception($"绑定失败,{model.PalletNo}托盘绑定数量大于该物品托盘包装数量!"); |
| | | bind.ProductionTime = proTime; |
| | | } |
| | | if (bl2) |
| | | { |
| | | bind.ExpirationTime = expTime; |
| | | } |
| | | //if (model.TableType == 0 && isDeposit == 0 && isTextTable == 0) 不太理解这段代码的含义 |
| | | //{ |
| | | // throw new Exception($"绑定失败,{model.PalletNo}托盘绑定数量大于该物品托盘包装数量!"); |
| | | //} |
| | | // 插入托盘绑定表 |
| | | bindId = Db.Insertable(bind).ExecuteReturnIdentity(); |
| | | } |
| | |
| | | var boxInfoList = new List<BllBoxInfo>(); |
| | | if (model.SkuQty == 0) |
| | | { |
| | | //首箱 |
| | | var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == model.BoxNo && m.Status == "0").ToList(); |
| | | if (boxInfo.Count == 0) |
| | | if (notice.Type == "3") |
| | | { |
| | | throw new Exception("-1:箱码信息不存在!"); |
| | | } |
| | | boxInfoList.AddRange(boxInfo); |
| | | //是否连续组托 |
| | | if (model.IsContinue == "1") |
| | | { |
| | | //尾箱 |
| | | var boxInfo2 = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == model.TailBoxNo && m.Status == "0").ToList(); |
| | | if (boxInfo2.Count == 0) |
| | | //首箱 |
| | | var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo3 == model.BoxNo01 && m.Status == "0").ToList(); |
| | | if (boxInfo.Count == 0) |
| | | { |
| | | throw new Exception("-1:尾箱码信息不存在!"); |
| | | throw new Exception("-1:箱码信息不存在!"); |
| | | } |
| | | boxInfoList.AddRange(boxInfo2); |
| | | var sql = $"select * from BllBoxInfo where IsDel = '0' and Status = '0' and boxNo>'{model.BoxNo}' and boxNo<'{model.TailBoxNo}'; "; |
| | | var list = Db.Ado.SqlQuery<BllBoxInfo>(sql); |
| | | boxInfoList.AddRange(list); |
| | | msgStr += $"尾箱号为{model.TailBoxNo}"; |
| | | boxInfoList.AddRange(boxInfo); |
| | | } |
| | | else |
| | | { |
| | | //首箱 |
| | | var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == model.BoxNo && m.Status == "0").ToList(); |
| | | if (boxInfo.Count == 0) |
| | | { |
| | | throw new Exception("-1:箱码信息不存在!"); |
| | | } |
| | | boxInfoList.AddRange(boxInfo); |
| | | //是否连续组托 |
| | | if (model.IsContinue == "1") |
| | | { |
| | | //尾箱 |
| | | var boxInfo2 = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == model.TailBoxNo && m.Status == "0").ToList(); |
| | | if (boxInfo2.Count == 0) |
| | | { |
| | | throw new Exception("-1:尾箱码信息不存在!"); |
| | | } |
| | | boxInfoList.AddRange(boxInfo2); |
| | | var sql = $"select * from BllBoxInfo where IsDel = '0' and Status = '0' and boxNo>'{model.BoxNo}' and boxNo<'{model.TailBoxNo}'; "; |
| | | var list = Db.Ado.SqlQuery<BllBoxInfo>(sql); |
| | | boxInfoList.AddRange(list); |
| | | msgStr += $"尾箱号为{model.TailBoxNo}"; |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | |
| | | // 更改箱支关系表 |
| | | decimal factQty = 0.00m;//托盘总数量 |
| | | //成品组托 |
| | | if (model.SkuQty == 0) |
| | | if (isTextTable == 0) |
| | | { |
| | | 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) |
| | | { |
| | | 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) |
| | | { |
| | | 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(); |
| | | |
| | | // 更改入库单明细已组数量 |
| | |
| | | if (detail.Status == "0") |
| | | { |
| | | var sqlString2 = string.Empty; |
| | | sqlString2 += $"update BllArrivalNotice set Status = '1',CompleteTime= getDate() where ASNNo = '{model.AsnNo}' and Status ='0';"; |
| | | sqlString2 += $"update BllArrivalNoticeDetail set Status = '1',CompleteTime= getDate() where id = '{model.AsnDetailId}' and Status ='0';"; |
| | | sqlString2 += $"update BllArrivalNotice set Status = '1',UpdateTime= getDate(),UpdateUser = {userId} where ASNNo = '{model.AsnNo}' and Status ='0';"; |
| | | sqlString2 += $"update BllArrivalNoticeDetail set Status = '1',UpdateTime= getDate(),UpdateUser = {userId} where id = '{model.AsnDetailId}' and Status ='0';"; |
| | | Db.Ado.ExecuteCommand(sqlString2); |
| | | } |
| | | else if (detail.Status == "1") |
| | | { |
| | | var sqlString2 = string.Empty; |
| | | sqlString2 += $"update BllArrivalNotice set UpdateTime= getDate(),UpdateUser = {userId} where ASNNo = '{model.AsnNo}' and Status ='1';"; |
| | | sqlString2 += $"update BllArrivalNoticeDetail set UpdateTime= getDate(),UpdateUser = {userId} where id = '{model.AsnDetailId}' and Status ='1';"; |
| | | Db.Ado.ExecuteCommand(sqlString2); |
| | | } |
| | | |
| | |
| | | try |
| | | { |
| | | #region 验证信息 |
| | | if (string.IsNullOrEmpty(model.ASNNo)) |
| | | { |
| | | throw new Exception("入库单不能为空!"); |
| | | } |
| | | //if (string.IsNullOrEmpty(model.ASNNo)) |
| | | //{ |
| | | // throw new Exception("入库单不能为空!"); |
| | | //} |
| | | if (string.IsNullOrEmpty(model.PalletNo)) |
| | | { |
| | | throw new Exception("托盘条码不能为空!"); |
| | |
| | | #endregion |
| | | |
| | | #region 箱码信息 |
| | | var boxInfoList = Db.Queryable<BllBoxInfo>().Where(w => w.IsDel == "0" && w.ASNNo == model.ASNNo).ToList(); |
| | | var boxInfoList = Db.Queryable<BllBoxInfo>().Where(w => w.IsDel == "0" && w.ASNNo == model.ASNNo && w.PalletNo == model.PalletNo).ToList(); |
| | | // type 0:成品入库 1:采购入库 2:中间品入库 3:退货入库 4:车间余料退回入库 5:其它入库 6:代储入库 7:寄存入库 |
| | | if (notice.Type == "2" || notice.Type == "6" || notice.Type == "7") |
| | | { |
| | | // 不贴码物料 无需验证箱码信息 |
| | | } |
| | | else |
| | | else |
| | | { |
| | | //验证箱码信息是否存在 |
| | | if (boxInfoList.Count <= 0) |
| | |
| | | CreateUser = (int)model.CreateUser, |
| | | CreateTime = serverTime |
| | | }; |
| | | //维护库存货主信息 |
| | | if (notice.Type == "0" || notice.Type == "2" || notice.Type == "4" || notice.Type == "6" || notice.Type == "7")//0:成品入库,2:中间品入库,4:车间余料入库,6:代储入库,7:寄存入库 |
| | | { |
| | | stockModel.OwnerNo = notice.CustomerNo;//货主编码 |
| | | stockModel.OwnerName = notice.CustomerName;//货主名称 |
| | | } |
| | | //新增库存总信息 |
| | | Db.Insertable<DataStock>(stockModel).ExecuteCommand(); |
| | | } |
| | |
| | | PackagNo = sku.PackagNo, |
| | | IsBale = bindInfo.IsBale, |
| | | IsBelt = bindInfo.IsBelt, |
| | | Demo = bindInfo.Demo, |
| | | CreateUser = (int)model.CreateUser, |
| | | CreateTime = serverTime |
| | | }; |
| | | //维护库存明细货主/供应商信息 |
| | | if (notice.Type == "0" || notice.Type == "2" || notice.Type == "4" || notice.Type == "6" || notice.Type == "7")//0:成品入库,2:中间品入库,4:车间余料入库,6:代储入库,7:寄存入库 |
| | | { |
| | | detailModel.OwnerNo = notice.CustomerNo;//货主编码 |
| | | detailModel.OwnerName = notice.CustomerName;//货主名称 |
| | | } |
| | | else if (notice.Type == "1" || notice.Type == "5")//1:采购入库,2:其它入库 |
| | | { |
| | | detailModel.SupplierNo = notice.CustomerNo;//供应商编码 |
| | | 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) |
| | | { |
| | | //修改合格不合格数量 |
| | | if (quality.IsQualified == "1") //合格 |
| | | { |
| | | //增加合格数量 |
| | | quality.PassQty += detailModel.Qty; |
| | | detailModel.InspectStatus = "1"; |
| | | } |
| | | else if (quality.IsQualified == "0") //不合格 |
| | | { |
| | | //增加不合格数量 |
| | | quality.FailQty += detailModel.Qty; |
| | | detailModel.InspectStatus = "2"; |
| | | } |
| | | Db.Updateable(quality).ExecuteCommand(); //修改质检信息 |
| | | } |
| | | #endregion |
| | | stId = Db.Insertable<DataStockDetail>(detailModel).ExecuteReturnIdentity(); |
| | | |
| | | } |
| | | else |
| | | { |
| | |
| | | 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, |
| | | InspectStatus = item.InspectStatus, |
| | | //InspectTime = item., |
| | | UDF1 = item.StoreTime == null? "":((DateTime)item.StoreTime).ToString("yyyy-MM-dd"), |
| | | //InspectTime = item.StoreTime, |
| | | |
| | | IsDel = "0", |
| | | CreateUser = 0, |
| | |
| | | SendDate = DateTime.Now, //发送时间 |
| | | BackDate = DateTime.Now, //返回时间 |
| | | StartLocat = "",//起始位置 |
| | | EndLocat = "力诺平库",//目标位置 |
| | | EndLocat = model.LocatNo,//目标位置 |
| | | PalletNo = model.PalletNo,//托盘码 |
| | | IsSend = 0,//是否可再次下发 |
| | | IsCancel = 0,//是否可取消 |
| | | IsFinish = 0,//是否可完成 |
| | | Type = "0",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "2",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "0",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | OrderType = "3",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | Msg = "力诺平库的回库任务", |
| | | }; |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | |
| | | //修改储位信息 |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | |
| | | new OperationASNServer().AddLogOperationAsn("PDA模块", "平库入库", model.PalletNo, "完成", $"在PDA上完成单据号为:{model.ASNNo}的托盘码为:{model.PalletNo}的平库入库操作", (int)model.CreateUser); |
| | | |
| | | if (iscount == 1) |
| | | { |
| | | new OperationASNServer().AddLogOperationAsn("PDA模块", "平库入库", model.PalletNo, "完成", $"在PDA上完成托盘码为:{model.PalletNo}的平库回流入库操作", (int)model.CreateUser); |
| | | } |
| | | else |
| | | { |
| | | new OperationASNServer().AddLogOperationAsn("PDA模块", "平库入库", model.PalletNo, "完成", $"在PDA上完成单据号为:{model.ASNNo}的托盘码为:{model.PalletNo}的平库入库操作", (int)model.CreateUser); |
| | | } |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |