| | |
| | | using Model.ModelDto.DataDto; |
| | | using System.Xml.Schema; |
| | | using ZXing.OneD; |
| | | using System.Threading.Tasks; |
| | | using System.Security.Policy; |
| | | using Newtonsoft.Json; |
| | | using Utility.Tools; |
| | | using Model.ModelDto.SysDto; |
| | | using Model.ModelVm.SysVm; |
| | | using System.Security.Cryptography.X509Certificates; |
| | | using AutoMapper.Configuration.Annotations; |
| | | |
| | | namespace WMS.BLL.BllPdaServer |
| | | { |
| | |
| | | #endregion |
| | | |
| | | #region 质检请验 |
| | | if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1") |
| | | if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1" && sku.IsControlled != "1") |
| | | { |
| | | var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == bind.LotNo && m.SupplierLot == bind.SupplierLot); |
| | | if (qualityRequest == null) |
| | |
| | | #endregion |
| | | |
| | | #region 质检请验 |
| | | if ((arrNotice.Type == "1" || arrNotice.Type == "4" || arrNotice.Type == "5") && sku.IsInspect != "1") |
| | | if ((arrNotice.Type == "1" || arrNotice.Type == "4" || arrNotice.Type == "5") && sku.IsInspect != "1" && sku.IsControlled != "1") |
| | | { |
| | | var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == bind.LotNo && m.SupplierLot == bind.SupplierLot); |
| | | if (qualityRequest == null) |
| | |
| | | #endregion |
| | | |
| | | #region 质检请验 |
| | | if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1") |
| | | if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1" && sku.IsControlled != "1") |
| | | { |
| | | var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == bind.LotNo && m.SupplierLot == bind.SupplierLot); |
| | | if (qualityRequest == null) |
| | |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model) |
| | | public List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model,string url) |
| | | { |
| | | try |
| | | { |
| | |
| | | { |
| | | throw new Exception("请扫描外箱条码!"); |
| | | } |
| | | string sqlString = $@"SELECT |
| | | ASNNo, |
| | | BoxNo, |
| | | SkuNo, |
| | | SkuName, |
| | | LotNo, |
| | | BitBoxMark, |
| | | SUM(Qty) as Qty |
| | | FROM BllBoxInfo |
| | | WHERE IsDel = '0' |
| | | AND Status='0' |
| | | AND BoxNo = '{model.BoxNo}' |
| | | GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; "; |
| | | var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); |
| | | |
| | | if (models.Count == 0) |
| | | if (string.IsNullOrWhiteSpace(model.ASNNo)) |
| | | { |
| | | throw new Exception("箱码信息不存在!"); |
| | | throw new Exception("请选择入库单号!"); |
| | | } |
| | | var noticeList = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && m.ASNNo == model.ASNNo).ToList(); |
| | | if (noticeList.Count != 1) |
| | | { |
| | | throw new Exception("入库单号重复!"); |
| | | } |
| | | var notice = noticeList.First(); |
| | | if (notice.Type == "0") //成品入库 |
| | | { |
| | | string sqlString = $@"SELECT |
| | | ASNNo, |
| | | BoxNo, |
| | | SkuNo, |
| | | SkuName, |
| | | LotNo, |
| | | BitBoxMark, |
| | | SUM(Qty) as Qty |
| | | FROM BllBoxInfo |
| | | WHERE IsDel = '0' |
| | | AND Status='0' |
| | | AND BoxNo = '{model.BoxNo}' |
| | | GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; "; |
| | | var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); |
| | | |
| | | return models; |
| | | if (models.Count != 0) |
| | | { |
| | | return models; |
| | | } |
| | | else |
| | | { |
| | | var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == model.BoxNo).ToList(); |
| | | |
| | | if (boxInfo.Count == 0) |
| | | { |
| | | models = GetFMBindBoxInfos(model.BoxNo, url); |
| | | return models; |
| | | } |
| | | else |
| | | { |
| | | if (boxInfo.Count(m => m.Status != "0") > 0) |
| | | { |
| | | throw new Exception("箱码信息状态不是等待执行"); |
| | | } |
| | | return models; |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | } |
| | | else if (notice.Type == "1" || notice.Type == "4") //采购入库 |
| | | { |
| | | string sqlString = $@"SELECT |
| | | ASNNo, |
| | | BoxNo, |
| | | SkuNo, |
| | | SkuName, |
| | | LotNo, |
| | | BitBoxMark, |
| | | SUM(Qty) as Qty |
| | | FROM BllBoxInfo |
| | | WHERE IsDel = '0' |
| | | AND Status='0' |
| | | AND BoxNo = '{model.BoxNo}' |
| | | GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; "; |
| | | var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); |
| | | |
| | | if (models.Count != 0) |
| | | { |
| | | return models; |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("没有查询到箱码信息"); |
| | | } |
| | | } |
| | | else if (notice.Type == "3") //退货入库 |
| | | { |
| | | string sqlString = $@"SELECT |
| | | ASNNo, |
| | | BoxNo, |
| | | SkuNo, |
| | | SkuName, |
| | | LotNo, |
| | | BitBoxMark, |
| | | SUM(Qty) as Qty |
| | | FROM BllBoxInfo |
| | | WHERE IsDel = '0' |
| | | AND Status='0' |
| | | AND BoxNo = '{model.BoxNo}' |
| | | GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; "; |
| | | var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); |
| | | |
| | | if (models.Count != 0) |
| | | { |
| | | return models; |
| | | } |
| | | else |
| | | { |
| | | sqlString = $@"SELECT |
| | | ASNNo, |
| | | BoxNo, |
| | | SkuNo, |
| | | SkuName, |
| | | LotNo, |
| | | BitBoxMark, |
| | | SUM(Qty) as Qty |
| | | FROM BllBoxInfo |
| | | WHERE IsDel = '0' |
| | | AND Status='0' |
| | | AND BoxNo2 = '{model.BoxNo}' |
| | | GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; "; |
| | | models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); |
| | | if (models.Count != 0) |
| | | { |
| | | return models; |
| | | } |
| | | else |
| | | { |
| | | sqlString = $@"SELECT |
| | | ASNNo, |
| | | BoxNo, |
| | | SkuNo, |
| | | SkuName, |
| | | LotNo, |
| | | BitBoxMark, |
| | | SUM(Qty) as Qty |
| | | FROM BllBoxInfo |
| | | WHERE IsDel = '0' |
| | | AND Status='0' |
| | | AND BoxNo3 = '{model.BoxNo}' |
| | | GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; "; |
| | | models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); |
| | | if (models.Count != 0) |
| | | { |
| | | return models; |
| | | } |
| | | } |
| | | } |
| | | |
| | | #region 获取最后一次出库拣货中的箱码信息 |
| | | |
| | | var comBox = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.BoxNo == model.BoxNo).GroupBy(m => m.ExportAllotId).Select(m => m.ExportAllotId).ToList(); |
| | | if (comBox.Count == 0) |
| | | { |
| | | comBox = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.BoxNo2 == model.BoxNo).GroupBy(m => m.ExportAllotId).Select(m => m.ExportAllotId).ToList(); |
| | | if (comBox.Count == 0) |
| | | { |
| | | comBox = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.BoxNo3 == model.BoxNo).GroupBy(m => m.ExportAllotId).Select(m => m.ExportAllotId).ToList(); |
| | | } |
| | | } |
| | | var i = 0;//循环次数 |
| | | DateTime time = DateTime.Now; |
| | | var allotId = 0; |
| | | foreach (var item in comBox) |
| | | { |
| | | var comBoxList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == item).OrderByDescending(m => m.CreateTime).First(); |
| | | if (i == 0) |
| | | { |
| | | time = comBoxList.CreateTime; |
| | | allotId = comBoxList.ExportAllotId; |
| | | } |
| | | else if (comBoxList.CreateTime > time) |
| | | { |
| | | time = comBoxList.CreateTime; |
| | | allotId = comBoxList.ExportAllotId; |
| | | } |
| | | i++; |
| | | } |
| | | if (allotId != 0) |
| | | { |
| | | var addComBox = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allotId).ToList(); |
| | | var addComList = addComBox.GroupBy(m => m.BoxNo).ToList(); |
| | | var sku = Db.Queryable<SysMaterials>().First(m => m.SkuNo == addComBox.First().SkuNo); |
| | | var pNum = 0; |
| | | var bNum = 0; |
| | | new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum); |
| | | var boxList = new List<BllBoxInfo>(); |
| | | foreach (var com in addComList) |
| | | { |
| | | //箱内总数和 |
| | | var qtySum = addComBox.Where(m => m.BoxNo == com.Key).Sum(m => m.CompleteQty); |
| | | var bitBox = "1"; |
| | | if (qtySum == bNum) |
| | | { |
| | | bitBox = "0"; |
| | | } |
| | | foreach (var item in com) |
| | | { |
| | | if (item.BoxNo != model.BoxNo) |
| | | { |
| | | if (item.BoxNo2 != model.BoxNo) |
| | | { |
| | | if (item.BoxNo3 != model.BoxNo) |
| | | { |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | var boxInfo = new BllBoxInfo() |
| | | { |
| | | BoxNo = item.BoxNo, |
| | | BoxNo2 = item.BoxNo2, |
| | | BoxNo3 = item.BoxNo3, |
| | | SkuNo = item.SkuNo, |
| | | SkuName = item.SkuName, |
| | | LotNo = item.LotNo, |
| | | LotText = item.LotText, |
| | | Qty = (decimal)item.CompleteQty, |
| | | FullQty = bNum, |
| | | //ProductionTime = , |
| | | //ExpirationTime = , |
| | | InspectMark = "0", |
| | | InspectStatus = "0", |
| | | BitBoxMark = bitBox, |
| | | Origin = "WMS", |
| | | Status = "0", |
| | | CreateUser = 0 |
| | | }; |
| | | boxList.Add(boxInfo); |
| | | } |
| | | |
| | | } |
| | | Db.Insertable(boxList).ExecuteCommand(); |
| | | |
| | | string sqlString2 = $@"SELECT |
| | | ASNNo, |
| | | BoxNo, |
| | | SkuNo, |
| | | SkuName, |
| | | LotNo, |
| | | BitBoxMark, |
| | | SUM(Qty) as Qty |
| | | FROM BllBoxInfo |
| | | WHERE IsDel = '0' |
| | | AND Status='0' |
| | | AND BoxNo = '{model.BoxNo}' |
| | | GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; "; |
| | | var models2 = Db.Ado.SqlQuery<BoxInfoDto>(sqlString2); |
| | | |
| | | if (models2.Count != 0) |
| | | { |
| | | return models2; |
| | | } |
| | | else |
| | | { |
| | | sqlString2 = $@"SELECT |
| | | ASNNo, |
| | | BoxNo, |
| | | SkuNo, |
| | | SkuName, |
| | | LotNo, |
| | | BitBoxMark, |
| | | SUM(Qty) as Qty |
| | | FROM BllBoxInfo |
| | | WHERE IsDel = '0' |
| | | AND Status='0' |
| | | AND BoxNo2 = '{model.BoxNo}' |
| | | GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; "; |
| | | models2 = Db.Ado.SqlQuery<BoxInfoDto>(sqlString2); |
| | | if (models2.Count != 0) |
| | | { |
| | | return models2; |
| | | } |
| | | else |
| | | { |
| | | sqlString2 = $@"SELECT |
| | | ASNNo, |
| | | BoxNo, |
| | | SkuNo, |
| | | SkuName, |
| | | LotNo, |
| | | BitBoxMark, |
| | | SUM(Qty) as Qty |
| | | FROM BllBoxInfo |
| | | WHERE IsDel = '0' |
| | | AND Status='0' |
| | | AND BoxNo3 = '{model.BoxNo}' |
| | | GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; "; |
| | | models2 = Db.Ado.SqlQuery<BoxInfoDto>(sqlString2); |
| | | if (models2.Count != 0) |
| | | { |
| | | return models2; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | throw new Exception("箱码信息不存在!"); |
| | | #endregion |
| | | |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("单据类型错误"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public List<BoxInfoDto> GetFMBindBoxInfos(string boxno) |
| | | public List<BoxInfoDto> GetFMBindBoxInfos(string boxno,string url) |
| | | { |
| | | try |
| | | { |
| | | #region 箱码请求接口,正式系统放开 |
| | | /*var jsonData = JsonConvert.SerializeObject(boxno); |
| | | var data = new |
| | | { |
| | | BoxCode = boxno |
| | | }; |
| | | var jsonData = JsonConvert.SerializeObject(data); |
| | | |
| | | var response = HttpHelper.DoPost(url, jsonData, "箱码信息请求", "FM"); |
| | | |
| | | var obj = JsonConvert.DeserializeObject<ErpModel>(response);//解析返回数据 |
| | | if (obj.Success != 0) |
| | | var obj = JsonConvert.DeserializeObject<FumaGetBoxModel>(response);//解析返回数据 |
| | | if (obj.Success != "0") |
| | | { |
| | | throw new Exception("请求失败" + obj.Message); |
| | | }*/ |
| | | } |
| | | #endregion |
| | | var sku = Db.Queryable<SysMaterials>().First(m => m.SkuNo == obj.Product.SkuNo); |
| | | var pNum = 0;//托盘物品数量 |
| | | var bNum = 0;//箱码物品数量 |
| | | if (sku == null) |
| | | { |
| | | throw new Exception($"未查询到物料{obj.Product.SkuNo}信息"); |
| | | } |
| | | new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum); |
| | | if (pNum == 0 || bNum == 0) |
| | | { |
| | | throw new Exception($"{sku.SkuNo}物品包装未找到!"); |
| | | } |
| | | |
| | | var boxList = new List<BllBoxInfo>(); |
| | | var comTime = DateTime.Now; |
| | | //添加箱码信息 |
| | | foreach (var box in obj.Product.BoxInfoList) |
| | | { |
| | | foreach (var box2 in box.BoxInfo2List) |
| | | { |
| | | foreach (var box3 in box2.BoxInfo3List) |
| | | { |
| | | var boxInfo = new BllBoxInfo() |
| | | { |
| | | BoxNo = box.BoxNo, |
| | | BoxNo2 = box2.BoxNo2, |
| | | BoxNo3 = box3.BoxNo3, |
| | | Qty = box3.Qty, |
| | | BitBoxMark = box.BitBoxMark, |
| | | |
| | | ASNNo = "", |
| | | //ASNDetailNo = noticeDetail.Id, |
| | | OrderCode = "",//notice.OrderCode |
| | | //BindNo = bindId, |
| | | //PalletNo = model.PallNo, |
| | | FullQty = bNum, |
| | | Status = "2", |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | LotNo = obj.Product.LotNo, |
| | | LotText = obj.Product.LotText, |
| | | ProductionTime = DateTime.Parse(obj.Product.ProductionTime), |
| | | ExpirationTime = DateTime.Parse(obj.Product.ExpirationTime), |
| | | //CompleteTime = "", |
| | | InspectMark = "0", |
| | | InspectStatus = "0", |
| | | Origin = "赋码", |
| | | CreateTime = comTime, |
| | | CreateUser = 0 |
| | | }; |
| | | boxList.Add(boxInfo); |
| | | } |
| | | |
| | | } |
| | | } |
| | | Db.Fastest<BllBoxInfo>().BulkCopy(boxList); |
| | | |
| | | |
| | | string sqlString = $@"SELECT |
| | | ASNNo, |
| | | BoxNo, |
| | |
| | | |
| | | }; |
| | | //获取状态是未组托的标签信息 |
| | | var models = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId ).GroupBy(m=> new { m.ProductionTime,m.ExpirationTime }).Select(m=>new { m.ProductionTime ,m.ExpirationTime}).OrderBy(m=>m.ProductionTime).ToList();//&& m.Status == "0" |
| | | var models = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId && m.Status == "0") |
| | | .GroupBy(m=> new { m.ProductionTime,m.ExpirationTime }) |
| | | .Select(m=>new { m.ProductionTime ,m.ExpirationTime}).OrderBy(m=>m.ProductionTime).ToList();//&& m.Status == "0" |
| | | foreach (var item in models) |
| | | { |
| | | var boxNoList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId && m.ProductionTime == item.ProductionTime).Select(m => m.BoxNo).ToList(); |
| | | var boxNoList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.Status == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId && m.ProductionTime == item.ProductionTime).Select(m => m.BoxNo).ToList(); |
| | | if (boxNoList.Count > 0) |
| | | { |
| | | data.BoxNoList = boxNoList; |
| | | data.Date1 = item.ProductionTime.ToString(); |
| | | data.Date2 = item.ExpirationTime.ToString(); |
| | | data.Date1 = item.ProductionTime == null ? "" : Convert.ToDateTime(item.ProductionTime).ToString("yyyy-MM-dd"); |
| | | data.Date2 = item.ExpirationTime == null ? "" : Convert.ToDateTime(item.ExpirationTime).ToString("yyyy-MM-dd"); |
| | | |
| | | break; |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 保存指定的储位 |
| | | /// </summary> |
| | | /// <param name="palletNo"></param> |
| | | /// <param name="locateNo"></param> |
| | | /// <param name="userId"></param> |
| | | /// <exception cref="Exception"></exception> |
| | | public void SaveAppointLocate(string palletNo, string locateNo, int userId) |
| | | { |
| | | try |
| | | { |
| | | //托盘库存信息 |
| | | var stockDetailList = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToList(); |
| | | if (stockDetailList.Count(m=> string.IsNullOrWhiteSpace(m.LocatNo)) > 0) |
| | | { |
| | | throw new Exception("托盘没有在平库储位上"); |
| | | } |
| | | //判断托盘的储位是否是平库 |
| | | var stockDetail = stockDetailList.First(); |
| | | var oldLocate = stockDetail.LocatNo; |
| | | var pingAreaStr = Db.Queryable<SysStorageArea>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W04" && m.AreaNo != "B06" && m.AreaNo != "B07").Select(m => m.AreaNo).ToList(); |
| | | var pingLocateInfo = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == oldLocate && pingAreaStr.Contains(m.AreaNo) && m.IsDel == "0"); |
| | | if (pingLocateInfo == null) |
| | | { |
| | | throw new Exception("当前托盘所在的储位没有在系统中找到信息"); |
| | | } |
| | | |
| | | var skuList = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToList(); |
| | | //验证物料是否有成品 |
| | | foreach (var item in stockDetailList) |
| | | { |
| | | var skuItem = skuList.First(m => m.SkuNo == item.SkuNo); |
| | | if (skuItem.Type == "2") |
| | | { |
| | | throw new Exception("成品物料请入成品库"); |
| | | } |
| | | } |
| | | //储位 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == locateNo); |
| | | if (locate == null) |
| | | { |
| | | throw new Exception("未查询到储位的信息"); |
| | | } |
| | | if (locate.WareHouseNo != "W02") |
| | | { |
| | | throw new Exception("只能指定立库的储位"); |
| | | } |
| | | if (locate.Status != "0" || locate.Flag != "0") |
| | | { |
| | | throw new Exception("该储位状态不是空储位或标志不是正常的"); |
| | | } |
| | | |
| | | |
| | | Db.BeginTran(); |
| | | try |
| | | { |
| | | var time = DateTime.Now; |
| | | //判断当前托盘是否存在绑定信息 |
| | | var task = Db.Queryable<LogTask>().First(m=> m.IsDel == "0" && m.PalletNo == palletNo && (m.Status == "0" || m.Status == "1") && m.OrderType == "0" && m.Type == "0"); |
| | | |
| | | var upShelf = Db.Queryable<BllPalletUpShelf>().First(m => m.IsDel == "0" && m.PalletNo == palletNo && (m.Status == "0" || m.Status == "1")); |
| | | if (task != null) |
| | | { |
| | | if (task.Status == "1") |
| | | { |
| | | throw new Exception("托盘正在执行任务,不可指定储位"); |
| | | } |
| | | if (task.Status == "0") |
| | | { |
| | | if (upShelf != null) |
| | | { |
| | | if (upShelf.Status == "1") |
| | | { |
| | | throw new Exception("托盘正在执行上架任务,不可指定储位"); |
| | | } |
| | | if (upShelf.Status == "0") |
| | | { |
| | | if (locate.LocatNo == task.EndLocat) |
| | | { |
| | | throw new Exception("已指定储位,无需重复指定"); |
| | | } |
| | | //重新指定储位 |
| | | task.EndLocat = locate.LocatNo; |
| | | task.EndRoadway = locate.RoadwayNo; |
| | | upShelf.LocatNo = locate.LocatNo; |
| | | upShelf.RoadwayNo = locate.RoadwayNo; |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | Db.Updateable(upShelf).ExecuteCommand(); |
| | | new OperationASNServer().AddLogOperationAsn("PDA模块", "指定储位", palletNo, "编辑", $"指定了储位:{locate.LocatNo}、托盘码:{palletNo}的信息", userId); |
| | | Db.CommitTran(); |
| | | return; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("查询出任务但没有上架记录,信息错误"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 添加入库日志记录 |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var addTask = new LogTask //入库任务 |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | SendDate = DateTime.Now, //发送时间 |
| | | //BackDate = DateTime.Now, //返回时间 |
| | | StartRoadway = "", // 起始巷道 |
| | | StartLocat = oldLocate,//起始位置 |
| | | EndLocat = locate.LocatNo,//目标位置 |
| | | EndRoadway = locate.RoadwayNo, // 目标巷道 |
| | | PalletNo = palletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "0",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "0",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | Msg = $"{oldLocate}到=>>{locate.LocatNo}的入库任务", //关键信息 |
| | | |
| | | }; |
| | | Db.Insertable(addTask).ExecuteCommand(); |
| | | |
| | | //添加托盘上架记录 |
| | | var upShelfAdd = new BllPalletUpShelf() |
| | | { |
| | | TaskNo = addTask.TaskNo, |
| | | TraceNo = "", |
| | | PalletNo = palletNo, |
| | | SkuNo = stockDetail.SkuNo, |
| | | SkuName = stockDetail.SkuName, |
| | | LotNo = stockDetail.LotNo, |
| | | Status = "0", |
| | | |
| | | WareHouseNo = locate.WareHouseNo, |
| | | RoadwayNo = locate.RoadwayNo, |
| | | AreaNo = locate.AreaNo, |
| | | LocatNo = locate.LocatNo, |
| | | |
| | | CreateUser = 0, |
| | | }; |
| | | Db.Insertable(upShelfAdd).ExecuteCommand(); |
| | | |
| | | locate.Status = "2"; |
| | | |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | |
| | | new OperationASNServer().AddLogOperationAsn("PDA模块", "指定储位", palletNo, "编辑", $"指定了储位:{locate.LocatNo}、托盘码:{palletNo}的信息", userId); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据箱码获取标签箱码信息(车间入库-获取WMS生成的箱信息) |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public List<BoxInfoDto> GetWmsBoxInfos(string boxNo) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(boxNo)) |
| | | { |
| | | throw new Exception("请扫描外箱条码!"); |
| | | } |
| | | |
| | | string sqlString = $@"SELECT BoxNo, SkuNo, SkuName, LotNo, BitBoxMark, SUM(Qty) as Qty FROM BllBoxInfo |
| | | WHERE IsDel = '0' and Status='0' and BoxNo = '{boxNo}' |
| | | GROUP BY BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; "; |
| | | var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); |
| | | |
| | | if (models.Count != 0) |
| | | { |
| | | return models; |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("没有查询到箱码信息"); |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | |
| | | public void ChejianIn(string palletNo,string boxNo,decimal qty,string areaNo,int userId) |
| | | { |
| | | try |
| | | { |
| | | #region MyRegion |
| | | |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘号不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(boxNo)) |
| | | { |
| | | throw new Exception("箱号不能为空"); |
| | | } |
| | | if (qty<=0) |
| | | { |
| | | throw new Exception("数量不能小等0"); |
| | | } |
| | | var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo).ToList(); |
| | | if (boxInfo.Count == 0) |
| | | { |
| | | throw new Exception("未查询到当前箱号信息"); |
| | | } |
| | | var boxInfoOne = boxInfo.First(); |
| | | var pall = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (pall == null) |
| | | { |
| | | throw new Exception("未查询到当前托盘信息"); |
| | | } |
| | | #endregion |
| | | |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | //当前时间 |
| | | var comTime = DateTime.Now; |
| | | |
| | | #region 包装 |
| | | |
| | | var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == boxInfoOne.SkuNo); |
| | | var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo); |
| | | |
| | | var pNum = 0;//托盘物品数量 |
| | | var bNum = 0;//箱码物品数量 |
| | | |
| | | //公共方法获取包装数量 |
| | | new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum); |
| | | |
| | | #endregion |
| | | |
| | | var msgStr = $"箱号为{boxNo}"; |
| | | var boxInfoList = new List<BllBoxInfo>(); |
| | | |
| | | |
| | | boxInfoList.AddRange(boxInfo); |
| | | |
| | | #region 库存明细 |
| | | |
| | | var area = Db.Queryable<SysStorageArea>().First(m => m.IsDel == "0" && m.AreaNo == areaNo); |
| | | if (area == null) |
| | | { |
| | | throw new Exception("入库区域不能为空"); |
| | | } |
| | | |
| | | var tags = "0"; |
| | | |
| | | // 判断库存明细是否已有此托盘信息 |
| | | var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo== boxInfoOne.SkuNo && m.LotNo == boxInfoOne.LotNo && m.PalletNo == palletNo); |
| | | var sdId1 = 0; |
| | | if (sd1 != null) |
| | | { |
| | | if (sd1.AreaNo!= areaNo) |
| | | { |
| | | throw new Exception("选择的区域与库存不同"); |
| | | } |
| | | sdId1 = sd1.Id; |
| | | // 库存已存在 更新数据 |
| | | sd1.Qty += qty; |
| | | sd1.CompleteTime = comTime; |
| | | sd1.UpdateUser = userId; |
| | | sd1.UpdateTime = comTime; |
| | | |
| | | Db.Updateable(sd1).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | var sd2 = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo && m.IsDel == "0" && !string.IsNullOrWhiteSpace(m.AreaNo)); |
| | | if (sd2.Count(m=>m.AreaNo!= areaNo) > 0) |
| | | { |
| | | throw new Exception("当前托盘位置与选择的不同,请核实"); |
| | | } |
| | | // 库存不存在 插入数据 |
| | | sd1 = new DataStockDetail() |
| | | { |
| | | ASNNo = "", |
| | | LotNo = boxInfoOne.LotNo, |
| | | LotText = boxInfoOne.LotText, |
| | | SupplierLot = boxInfoOne.SupplierLot, |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | Standard = sku.Standard, |
| | | Qty = qty, |
| | | LockQty = 0, |
| | | FrozenQty = 0, |
| | | InspectQty = 0, |
| | | WareHouseNo = area.WareHouseNo,//所属仓库 |
| | | RoadwayNo = "",//所属巷道 |
| | | AreaNo = area.AreaNo,//所属区域 |
| | | LocatNo = "",//储位地址 |
| | | PalletNo = palletNo, |
| | | PalletTags = tags, |
| | | CompleteTime = comTime, |
| | | ProductionTime = boxInfoOne.ProductionTime, |
| | | ExpirationTime = boxInfoOne.ExpirationTime, |
| | | Status = "0", |
| | | InspectMark = boxInfoOne.InspectMark, |
| | | InspectStatus = sku.IsInspect, |
| | | BitPalletMark = "1", |
| | | PackagNo = sku.PackagNo, |
| | | |
| | | IsDel = "0", |
| | | CreateUser = 0, |
| | | CreateTime = comTime |
| | | }; |
| | | |
| | | //添加库存明细 |
| | | sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity(); |
| | | } |
| | | #endregion |
| | | |
| | | // 更改箱支关系表 |
| | | decimal factQty = 0.00m;//托盘总数量 |
| | | |
| | | |
| | | //标签组托 |
| | | var boxGroup = boxInfo.GroupBy(m => m.BoxNo).ToList(); |
| | | foreach (var g in boxGroup) |
| | | { |
| | | decimal boxFullQty = 0;//箱内总数量 |
| | | foreach (var box in g) |
| | | { |
| | | if (box.BindNo != null && box.BindNo != 0) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | |
| | | box.PalletNo = palletNo; |
| | | box.Status = "2"; |
| | | |
| | | box.CompleteTime = comTime; |
| | | box.UpdateTime = comTime; |
| | | box.UpdateUser = userId; |
| | | |
| | | //box.Qty = box.Qty; |
| | | //box.BitBoxMark = box.Qty == box.FullQty ? "0" : "1"; |
| | | |
| | | factQty += box.Qty; |
| | | boxFullQty += box.Qty; |
| | | |
| | | #region 库存箱码明细 |
| | | var box2 = new DataBoxInfo() |
| | | { |
| | | StockDetailId = sdId1, |
| | | BoxNo = box.BoxNo, |
| | | BoxNo2 = box.BoxNo2, |
| | | BoxNo3 = box.BoxNo3, |
| | | PalletNo = box.PalletNo, |
| | | PalletNo2 = box.PalletNo2, |
| | | PalletNo3 = box.PalletNo3, |
| | | Qty = box.Qty, |
| | | FullQty = box.FullQty, |
| | | Status = "2",//0:未组托 1:已组托 2:已入库 3:已出库 4:已分配 5:已拣货 |
| | | LotNo = box.LotNo, |
| | | LotText = box.LotText, |
| | | SkuNo = box.SkuNo, |
| | | SkuName = box.SkuName, |
| | | Standard = sku.Standard, |
| | | ProductionTime = box.ProductionTime, |
| | | SupplierLot = box.SupplierLot, |
| | | InspectStatus = sku.IsInspect, |
| | | InspectMark = box.InspectMark, |
| | | BitBoxMark = box.BitBoxMark, |
| | | ExpirationTime = box.ExpirationTime, |
| | | |
| | | CreateUser = 0, |
| | | CreateTime = comTime |
| | | }; |
| | | //添加库存箱码明细 |
| | | Db.Insertable(box2).ExecuteCommand(); |
| | | #endregion |
| | | } |
| | | if (boxFullQty > bNum) |
| | | { |
| | | throw new Exception($"绑定失败,{g.Key}箱码绑定数量大于该物品包装数量!"); |
| | | } |
| | | } |
| | | //更改箱支关系表信息 |
| | | Db.Updateable(boxInfoList).ExecuteCommand(); |
| | | |
| | | |
| | | #region 库存 |
| | | var dataStock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == boxInfoOne.LotNo); |
| | | if (dataStock != null) |
| | | { |
| | | dataStock.Qty += factQty; |
| | | Db.Updateable(dataStock).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | var stock = new DataStock() |
| | | { |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | Standard = sku.Standard, |
| | | LotNo = boxInfoOne.LotNo, |
| | | LotText = boxInfoOne.LotText, |
| | | Qty = qty, |
| | | LockQty = 0, |
| | | FrozenQty = 0, |
| | | IsSampling = "0", |
| | | IsDel = "0", |
| | | CreateUser = userId, |
| | | CreateTime = comTime |
| | | }; |
| | | Db.Insertable(stock).ExecuteCommand(); |
| | | } |
| | | #endregion |
| | | |
| | | // 更改托盘使用状态 |
| | | var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';"; |
| | | ////添加托盘记录表数据 |
| | | //sqlStr += $"insert into LogPalletTrack values('{palletNo}','{boxNo}','组盘','0',getDate(),{userId},NULL,NULL);"; |
| | | //Db.Ado.ExecuteCommand(sqlStr); |
| | | new OperationASNServer().AddLogOperationAsn("PDA模块", "车间入库", boxNo, "添加", $"添加了托盘码为:{palletNo}、{msgStr}的入库信息", userId); |
| | | |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 车间绑定托盘 不贴标物料 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <param name="userId"></param> |
| | | /// <exception cref="Exception"></exception> |
| | | public void ChejianQtyIn(string palletNo, string skuNo, string lotNo, decimal qty, string areaNo, int userId) |
| | | { |
| | | try |
| | | { |
| | | #region MyRegion |
| | | |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘号不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(skuNo)) |
| | | { |
| | | throw new Exception("物料不能为空"); |
| | | } |
| | | if (qty <= 0) |
| | | { |
| | | throw new Exception("数量不能小等0"); |
| | | } |
| | | var skuInfo = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == skuNo); |
| | | if (skuInfo == null) |
| | | { |
| | | throw new Exception("未查询到物料信息"); |
| | | } |
| | | var pall = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (pall == null) |
| | | { |
| | | throw new Exception("未查询到当前托盘信息"); |
| | | } |
| | | #endregion |
| | | |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | //当前时间 |
| | | var comTime = DateTime.Now; |
| | | |
| | | #region 包装 |
| | | |
| | | var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == skuInfo.PackagNo); |
| | | |
| | | var pNum = 0;//托盘物品数量 |
| | | var bNum = 0;//箱码物品数量 |
| | | |
| | | //公共方法获取包装数量 |
| | | new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum); |
| | | |
| | | #endregion |
| | | |
| | | |
| | | |
| | | #region 库存明细 |
| | | |
| | | var area = Db.Queryable<SysStorageArea>().First(m => m.IsDel == "0" && m.AreaNo == areaNo); |
| | | if (area == null) |
| | | { |
| | | throw new Exception("入库区域不能为空"); |
| | | } |
| | | |
| | | var tags = "0"; |
| | | |
| | | // 判断库存明细是否已有此托盘信息 |
| | | var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo == skuNo && m.LotNo == lotNo && m.PalletNo == palletNo); |
| | | var sdId1 = 0; |
| | | if (sd1 != null) |
| | | { |
| | | if (sd1.AreaNo != areaNo) |
| | | { |
| | | throw new Exception("选择的区域与库存不同"); |
| | | } |
| | | sdId1 = sd1.Id; |
| | | // 库存已存在 更新数据 |
| | | sd1.Qty += qty; |
| | | sd1.CompleteTime = comTime; |
| | | sd1.UpdateUser = userId; |
| | | sd1.UpdateTime = comTime; |
| | | if (sd1.Qty >= pNum) |
| | | { |
| | | sd1.BitPalletMark = "0"; |
| | | } |
| | | Db.Updateable(sd1).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | // 库存不存在 插入数据 |
| | | sd1 = new DataStockDetail() |
| | | { |
| | | LotNo = lotNo, |
| | | SupplierLot = "", |
| | | SkuNo = skuInfo.SkuNo, |
| | | SkuName = skuInfo.SkuName, |
| | | Standard = skuInfo.Standard, |
| | | Qty = qty, |
| | | LockQty = 0, |
| | | FrozenQty = 0, |
| | | InspectQty = 0, |
| | | WareHouseNo = area.WareHouseNo,//所属仓库 |
| | | RoadwayNo = "",//所属巷道 |
| | | AreaNo = area.AreaNo,//所属区域 |
| | | LocatNo = "",//储位地址 |
| | | PalletNo = palletNo, |
| | | PalletTags = tags, |
| | | CompleteTime = comTime, |
| | | //ProductionTime = boxInfoOne.ProductionTime, |
| | | //ExpirationTime = boxInfoOne.ExpirationTime, |
| | | Status = "0", |
| | | InspectMark = "0", |
| | | InspectStatus = "1", |
| | | BitPalletMark = qty >= pNum ?"0" :"1", |
| | | PackagNo = skuInfo.PackagNo, |
| | | |
| | | IsDel = "0", |
| | | CreateUser = 0, |
| | | CreateTime = comTime |
| | | }; |
| | | |
| | | //添加库存明细 |
| | | sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity(); |
| | | } |
| | | #endregion |
| | | |
| | | // 更改箱支关系表 |
| | | decimal factQty = 0.00m;//托盘总数量 |
| | | |
| | | |
| | | #region 库存 |
| | | var dataStock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == skuInfo.SkuNo && m.LotNo == lotNo); |
| | | if (dataStock != null) |
| | | { |
| | | dataStock.Qty += factQty; |
| | | Db.Updateable(dataStock).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | var stock = new DataStock() |
| | | { |
| | | SkuNo = skuInfo.SkuNo, |
| | | SkuName = skuInfo.SkuName, |
| | | Standard = skuInfo.Standard, |
| | | LotNo = lotNo, |
| | | LotText = "", |
| | | Qty = qty, |
| | | LockQty = 0, |
| | | FrozenQty = 0, |
| | | IsSampling = "0", |
| | | IsDel = "0", |
| | | CreateUser = userId, |
| | | CreateTime = comTime |
| | | }; |
| | | Db.Insertable(stock).ExecuteCommand(); |
| | | } |
| | | #endregion |
| | | |
| | | // 更改托盘使用状态 |
| | | var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';"; |
| | | ////添加托盘记录表数据 |
| | | //sqlStr += $"insert into LogPalletTrack values('{palletNo}','{boxNo}','组盘','0',getDate(),{userId},NULL,NULL);"; |
| | | Db.Ado.ExecuteCommand(sqlStr); |
| | | new OperationASNServer().AddLogOperationAsn("PDA模块", "车间入库", skuNo, "添加", $"添加了托盘码为:{palletNo}的入库信息", userId); |
| | | |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | // 获取单据列表 |
| | | public List<ArrivalNoticeDto> GetArrivalNotices(ArrivalNoticeVm model) |
| | | { |
| | |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | // 根据箱码或托盘号获取箱支信息 liudl |
| | | public List<BoxInfoDto> GetBoxInfos(BoxInfoVm model) |
| | |
| | | }; |
| | | var id = Db.Insertable(modelpb).ExecuteReturnIdentity(); |
| | | |
| | | var modelbb = new BllBoxInfo |
| | | { |
| | | ASNNo = "", |
| | | ASNDetailNo = null, |
| | | BindNo = id, |
| | | PalletNo = model.PalletNo, |
| | | PalletNo2 = model.PalletNo2, |
| | | PalletNo3 = model.PalletNo3, |
| | | Status = "2", |
| | | CompleteTime = DateTime.Now, |
| | | Qty = (int)model.Qty, |
| | | FullQty = pNum, |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.PackagNo, |
| | | LotNo = "", |
| | | LotText = "", |
| | | SupplierLot = "", |
| | | InspectStatus = sku.IsInspect, |
| | | Origin = "PDA", |
| | | BoxNo = "", |
| | | BoxNo2 = "", |
| | | BoxNo3 = "", |
| | | InspectMark = "", |
| | | BitBoxMark = "0", |
| | | //var modelbb = new BllBoxInfo |
| | | //{ |
| | | // ASNNo = "", |
| | | // ASNDetailNo = null, |
| | | // BindNo = id, |
| | | // PalletNo = model.PalletNo, |
| | | // PalletNo2 = model.PalletNo2, |
| | | // PalletNo3 = model.PalletNo3, |
| | | // Status = "2", |
| | | // CompleteTime = DateTime.Now, |
| | | // Qty = (int)model.Qty, |
| | | // FullQty = pNum, |
| | | // SkuNo = sku.SkuNo, |
| | | // SkuName = sku.SkuName, |
| | | // LotNo = "", |
| | | // LotText = "", |
| | | // SupplierLot = "", |
| | | // InspectStatus = sku.IsInspect, |
| | | // Origin = "PDA", |
| | | // BoxNo = "", |
| | | // BoxNo2 = "", |
| | | // BoxNo3 = "", |
| | | // InspectMark = "", |
| | | // BitBoxMark = "0", |
| | | |
| | | CreateUser = (int)model.CreateUser, |
| | | CreateTime = datetime |
| | | }; |
| | | Db.Insertable(modelbb).ExecuteCommand(); |
| | | // CreateUser = (int)model.CreateUser, |
| | | // CreateTime = datetime |
| | | //}; |
| | | //Db.Insertable(modelbb).ExecuteCommand(); |
| | | |
| | | //添加库存 |
| | | |
| | |
| | | |
| | | #region 库存箱码明细 |
| | | |
| | | var box2 = new DataBoxInfo() |
| | | { |
| | | StockDetailId = sdId1, |
| | | BindNo = modelpb.Id, |
| | | BoxNo = modelbb.BoxNo, |
| | | BoxNo2 = modelbb.BoxNo2, |
| | | BoxNo3 = modelbb.BoxNo3, |
| | | PalletNo = modelbb.PalletNo, |
| | | PalletNo2 = modelbb.PalletNo2, |
| | | PalletNo3 = modelbb.PalletNo3, |
| | | Qty = modelbb.Qty, |
| | | FullQty = modelbb.FullQty, |
| | | Status = "2", |
| | | LotNo = modelbb.LotNo, |
| | | LotText = modelbb.LotText, |
| | | SkuNo = modelbb.SkuNo, |
| | | SkuName = modelbb.SkuName, |
| | | Standard = sku.Standard, |
| | | ProductionTime = modelbb.ProductionTime, |
| | | SupplierLot = modelbb.SupplierLot, |
| | | InspectStatus = sku.IsInspect, |
| | | InspectMark = modelbb.InspectMark, |
| | | BitBoxMark = modelbb.BitBoxMark, |
| | | ExpirationTime = modelbb.ExpirationTime, |
| | | //var box2 = new DataBoxInfo() |
| | | //{ |
| | | // StockDetailId = sdId1, |
| | | // BindNo = modelpb.Id, |
| | | // BoxNo = modelbb.BoxNo, |
| | | // BoxNo2 = modelbb.BoxNo2, |
| | | // BoxNo3 = modelbb.BoxNo3, |
| | | // PalletNo = modelbb.PalletNo, |
| | | // PalletNo2 = modelbb.PalletNo2, |
| | | // PalletNo3 = modelbb.PalletNo3, |
| | | // Qty = modelbb.Qty, |
| | | // FullQty = modelbb.FullQty, |
| | | // Status = "2", |
| | | // LotNo = modelbb.LotNo, |
| | | // LotText = modelbb.LotText, |
| | | // SkuNo = modelbb.SkuNo, |
| | | // SkuName = modelbb.SkuName, |
| | | // Standard = sku.Standard, |
| | | // ProductionTime = modelbb.ProductionTime, |
| | | // SupplierLot = modelbb.SupplierLot, |
| | | // InspectStatus = sku.IsInspect, |
| | | // InspectMark = modelbb.InspectMark, |
| | | // BitBoxMark = modelbb.BitBoxMark, |
| | | // ExpirationTime = modelbb.ExpirationTime, |
| | | |
| | | CreateUser = 0, |
| | | CreateTime = datetime |
| | | }; |
| | | Db.Insertable(box2).ExecuteCommand(); |
| | | // CreateUser = 0, |
| | | // CreateTime = datetime |
| | | //}; |
| | | //Db.Insertable(box2).ExecuteCommand(); |
| | | #endregion |
| | | |
| | | #region 库存 |
| | |
| | | #endregion |
| | | |
| | | #region 质检请验 |
| | | if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1") |
| | | if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1" && sku.IsControlled != "1") |
| | | { |
| | | var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == bind.LotNo && m.SupplierLot == bind.SupplierLot); |
| | | if (qualityRequest == null) |
| | |
| | | //修改库存明细信息 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | //获取拣货信息 |
| | | var alotr = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.PalletNo == model.PalletNo && a.Status == "4"); |
| | | if (alotr != null) |
| | | { |
| | | alotr.Status = "5"; //5 已完成 |
| | | alotr.UpdateUser = model.CreateUser; //修改人 |
| | | alotr.UpdateTime = serverTime; //修改时间 |
| | | //修改拣货信息 |
| | | Db.Updateable(alotr).ExecuteCommand(); |
| | | } |
| | | |
| | | #region 任务及组托信息 |
| | | //创建任务信息 |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | |
| | | var upShelf = new BllPalletUpShelf() |
| | | { |
| | | TaskNo = exTask.TaskNo, |
| | | TraceNo = bindInfo.ASNNo, |
| | | PalletNo = bindInfo.PalletNo, |
| | | TraceNo = bindInfo== null? "": bindInfo.ASNNo, |
| | | PalletNo = model.PalletNo, |
| | | SkuNo = palletupinfo.SkuNo, |
| | | SkuName = palletupinfo.SkuName, |
| | | LotNo = palletupinfo.LotNo, |
| | | Status = "2", |
| | | LocatNo = model.LocatNo, |
| | | WareHouseNo = bindInfo.WareHouseNo, |
| | | RoadwayNo = bindInfo.RoadwayNo, |
| | | WareHouseNo = storageLocat.WareHouseNo, |
| | | RoadwayNo = storageLocat.RoadwayNo, |
| | | AreaNo = storageLocat.AreaNo, |
| | | |
| | | CreateUser = 0, |
| | |
| | | |
| | | #endregion |
| | | |
| | | #region 线边标签 |
| | | /// <summary> |
| | | /// 根据物料编码、名称获取物料信息 |
| | | /// </summary> |
| | | /// <param name="model">编码 名称</param> |
| | | /// <returns>物料详细信息</returns> |
| | | public MaterialsDto GetSkuInfo(GetMaterialsVm model) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(model.SkuNo) && string.IsNullOrEmpty(model.SkuName)) |
| | | { |
| | | throw new Exception("请输入物料编码或物料名称!"); |
| | | } |
| | | |
| | | var skuModels = Db.Queryable<SysMaterials>().Where(m => (m.SkuNo == model.SkuNo || m.SkuName == model.SkuName) && m.IsDel == "0").Select< MaterialsDto>().ToList(); |
| | | if (skuModels.Count <= 0) |
| | | { |
| | | throw new Exception("物料不存在!"); |
| | | } |
| | | |
| | | return skuModels.First(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw ex; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 生成条码标签 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public List<BllBoxInfo> AddLabels(LabelsVm model) |
| | | { |
| | | try |
| | | { |
| | | if (decimal.TryParse(model.SkuNum, out decimal skuQty)) |
| | | { |
| | | if (skuQty <= 0) |
| | | { |
| | | throw new Exception("箱内数量不能小于等于0"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("箱内数量请输入数字!"); |
| | | } |
| | | |
| | | // 验证物料信息是否存在 |
| | | var skuModels = Db.Queryable<SysMaterials>().Where(m => (m.SkuNo == model.SkuNo || m.SkuName == model.SkuName) && m.IsDel == "0").Select<MaterialsDto>().ToList(); |
| | | if (skuModels.Count <= 0) |
| | | { |
| | | throw new Exception("物料不存在!"); |
| | | } |
| | | |
| | | |
| | | #region |
| | | var skuModel = skuModels.First(); |
| | | var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == skuModel.PackagNo); |
| | | if (pack == null) |
| | | { |
| | | throw new Exception("未查询到当前物料的包装信息"); |
| | | } |
| | | |
| | | var packStr = ""; |
| | | if (!string.IsNullOrWhiteSpace(pack.L1Name)) |
| | | { |
| | | packStr += pack.L1Num + "/" + pack.L1Name; |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(pack.L2Name)) |
| | | { |
| | | packStr += "-" + pack.L2Num + "/" + pack.L2Name; |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(pack.L3Name)) |
| | | { |
| | | packStr += "-" + pack.L3Num + "/" + pack.L3Name; |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(pack.L4Name)) |
| | | { |
| | | packStr += "-" + pack.L4Num + "/" + pack.L4Name; |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(pack.L5Name)) |
| | | { |
| | | packStr += "-" + pack.L5Num + "/" + pack.L5Name; |
| | | } |
| | | #endregion |
| | | |
| | | #region 包装查询 |
| | | |
| | | var bNum = 0;//箱物品数量 |
| | | var zNum = 0;//支物品数量 |
| | | var packLevel = 0; |
| | | |
| | | if (pack.L2Num.HasValue) |
| | | { |
| | | if (pack.L2Name != "托") |
| | | { |
| | | packLevel = 1;//JC34项目只有一级标签 |
| | | bNum = Convert.ToInt32(pack.L2Num); |
| | | } |
| | | } |
| | | if (pack.L1Num.HasValue) |
| | | { |
| | | if (packLevel == 0) |
| | | { |
| | | packLevel = 1; |
| | | bNum = Convert.ToInt32(pack.L1Num); |
| | | } |
| | | zNum = Convert.ToInt32(pack.L1Num); |
| | | } |
| | | |
| | | if (packLevel < 1)//包装等级小于1,按照1级标签打印 |
| | | { |
| | | throw new Exception("包装信息有误,小于一级"); |
| | | } |
| | | |
| | | if (skuQty > bNum * 5) |
| | | { |
| | | throw new Exception("箱内数量大于包装5倍,不可打印"); |
| | | } |
| | | #endregion |
| | | var modelList = new List<BllBoxInfo>(); |
| | | var label = Db.Queryable<BllBoxInfo>().Where(m => m.LotNo == model.LotNo && m.SkuNo == model.SkuNo && m.IsDel == "0").ToList(); |
| | | |
| | | Db.BeginTran(); |
| | | if (packLevel == 1) |
| | | { |
| | | #region 一级包装 |
| | | int labelNum = 1; |
| | | labelNum = int.Parse(Math.Ceiling(skuQty / bNum).ToString());//标签数量 |
| | | |
| | | |
| | | #region 获取/生成批次号 |
| | | string maxLotNoStr = ""; //批次号 |
| | | string maxBoxCode = ""; //箱码号 |
| | | |
| | | maxLotNoStr = model.LotNo; |
| | | maxBoxCode = label.Where(m => m.LotNo == maxLotNoStr).Max(a => a.BoxNo); |
| | | #endregion |
| | | |
| | | for (int i = 1; i <= labelNum; i++) |
| | | { |
| | | decimal boxQty = 0; |
| | | if (i == labelNum) |
| | | { |
| | | // 最后一个条码 |
| | | var s = bNum * (i - 1); |
| | | if (bNum > skuQty - s) |
| | | { |
| | | boxQty = skuQty - s;// 数量 |
| | | } |
| | | else |
| | | { |
| | | boxQty = bNum;// 数量 |
| | | } |
| | | } |
| | | else |
| | | { |
| | | boxQty = bNum; // 数量 |
| | | } |
| | | |
| | | //获取箱码 |
| | | if (string.IsNullOrWhiteSpace(maxBoxCode)) |
| | | { |
| | | var str = "B" + maxLotNoStr + "000001"; //批号+ 流水 B 230201 0001 000001 |
| | | maxBoxCode = str; |
| | | } |
| | | else |
| | | { |
| | | maxBoxCode = maxBoxCode.Substring(0, maxBoxCode.Length - 6) + (int.Parse(maxBoxCode.Substring(maxBoxCode.Length - 6, 6)) + 1).ToString().PadLeft(6, '0'); |
| | | } |
| | | |
| | | // 将条码保存到原料条码表 |
| | | var labelModel = new BllBoxInfo() |
| | | { |
| | | BoxNo = maxBoxCode, |
| | | Qty = boxQty, |
| | | FullQty = bNum, |
| | | Status = "0", |
| | | SkuNo = model.SkuNo, |
| | | SkuName = model.SkuName, |
| | | LotNo = maxLotNoStr, |
| | | Standard = skuModel.Standard, |
| | | PackageStandard = packStr, |
| | | InspectMark = "0", |
| | | BitBoxMark = bNum > boxQty ? "1" : "0", |
| | | InspectStatus = "0", |
| | | |
| | | ProductionTime = DateTime.Parse(model.TimeFrom), |
| | | StoreTime = DateTime.Parse(model.TimeEnd), |
| | | ExpirationTime = DateTime.Parse(model.TimeEnd), |
| | | |
| | | Origin = "WMS生成", |
| | | CreateUser = (int)model.userId, |
| | | CreateTime = DateTime.Now, |
| | | }; |
| | | |
| | | Db.Insertable(labelModel).ExecuteCommand(); |
| | | modelList.Add(labelModel); |
| | | } |
| | | |
| | | #endregion |
| | | } |
| | | else //(packLevel == 2) |
| | | { |
| | | #region 二级包装 |
| | | |
| | | if (skuQty > bNum * 5) |
| | | { |
| | | throw new Exception("箱内数量大于包装5倍,不可打印"); |
| | | } |
| | | |
| | | var qty2 = skuQty; |
| | | int labelNum2 = 1; //生产箱条码数量 |
| | | |
| | | labelNum2 = int.Parse(Math.Ceiling(qty2 / bNum).ToString()); |
| | | |
| | | var ss = bNum / zNum; //每箱支标签数量 |
| | | var labelNumZ2 = Math.Ceiling((decimal)ss); |
| | | |
| | | #region 获取/生成批次号 |
| | | |
| | | string maxCodestr2 = ""; //批次 |
| | | string maxboxcode2 = ""; //箱码 |
| | | string maxboxcode3 = ""; //支码 |
| | | |
| | | maxCodestr2 = model.LotNo; |
| | | maxboxcode2 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo); |
| | | maxboxcode3 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo3);//支号 |
| | | #endregion |
| | | |
| | | for (int i = 1; i <= labelNum2; i++)//箱码标签 |
| | | { |
| | | //箱内数量 |
| | | decimal boxQty = 0; |
| | | if (i == labelNum2) |
| | | { |
| | | // 最后一个条码 |
| | | var s = bNum * (i - 1); |
| | | if (bNum > qty2 - s) |
| | | { |
| | | boxQty = qty2 - s;// 数量 |
| | | } |
| | | else |
| | | { |
| | | boxQty = bNum;// 数量 |
| | | } |
| | | } |
| | | else |
| | | { |
| | | boxQty = bNum; // 数量 |
| | | } |
| | | |
| | | //获取箱码 |
| | | if (string.IsNullOrWhiteSpace(maxboxcode2)) |
| | | { |
| | | maxboxcode2 = "B" + maxCodestr2 + "000001"; // 箱号 批号+第几箱 |
| | | } |
| | | else |
| | | { |
| | | maxboxcode2 = maxboxcode2.Substring(0, 11) + (int.Parse(maxboxcode2.Substring(11, 6)) + 1).ToString().PadLeft(6, '0'); |
| | | } |
| | | //获取箱内支标签数量 |
| | | if (i == labelNum2) |
| | | { |
| | | var isGo2 = false; |
| | | var sl = 0; |
| | | for (int j = 1; j <= labelNumZ2; j++) |
| | | { |
| | | if (isGo2) |
| | | { |
| | | break; |
| | | } |
| | | var s = bNum * (i - 1); |
| | | var s2 = zNum * (j - 1); |
| | | if (zNum >= qty2 - s - s2) |
| | | { |
| | | isGo2 = true; |
| | | } |
| | | sl++; |
| | | } |
| | | labelNumZ2 = sl; |
| | | } |
| | | |
| | | for (int j = 1; j <= labelNumZ2; j++)//最小单位标签 |
| | | { |
| | | |
| | | decimal d = zNum; |
| | | if (i == labelNum2) |
| | | { |
| | | var s = bNum * (i - 1); |
| | | var s2 = zNum * (j - 1); |
| | | if (zNum >= qty2 - s - s2) |
| | | { |
| | | d = qty2 - s - s2; // 数量 |
| | | } |
| | | } |
| | | |
| | | if (string.IsNullOrWhiteSpace(maxboxcode3)) |
| | | { |
| | | maxboxcode3 = "Z" + maxCodestr2 + "0001"; // 支号 批号+第几箱 |
| | | } |
| | | else |
| | | { |
| | | maxboxcode3 = maxboxcode3.Substring(0, 11) + (int.Parse(maxboxcode3.Substring(11, 4)) + 1).ToString().PadLeft(4, '0'); |
| | | } |
| | | |
| | | // 将条码保存到原料条码表 |
| | | var labelModel = new BllBoxInfo() |
| | | { |
| | | BoxNo = maxboxcode2, |
| | | BoxNo3 = maxboxcode3, |
| | | Qty = d, |
| | | FullQty = bNum, |
| | | Status = "0", |
| | | SkuNo = model.SkuNo, |
| | | SkuName = skuModel.SkuName, |
| | | LotNo = maxCodestr2, |
| | | Standard = skuModel.Standard, |
| | | PackageStandard = packStr, |
| | | InspectMark = "0", |
| | | BitBoxMark = bNum > boxQty ? "1" : "0", |
| | | InspectStatus = "0", |
| | | |
| | | ProductionTime = DateTime.Parse(model.TimeFrom), |
| | | StoreTime = DateTime.Parse(model.TimeEnd), |
| | | ExpirationTime = DateTime.Parse(model.TimeEnd), |
| | | |
| | | Origin = "WMS生成", |
| | | CreateUser = (int)model.userId, |
| | | CreateTime = DateTime.Now, |
| | | }; |
| | | |
| | | Db.Insertable(labelModel).ExecuteCommand(); |
| | | modelList.Add(labelModel); |
| | | } |
| | | } |
| | | #endregion |
| | | } |
| | | Db.CommitTran(); |
| | | |
| | | return modelList; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | } |
| | | } |