using WmsMobileServe.Annotation; using WmsMobileServe.ApiClient.Mes; using WmsMobileServe.ApiClient.Mes.Dto; using WmsMobileServe.ApiServe.Mobile.Dto; using WmsMobileServe.ApiServe.Mobile.Vo; using WmsMobileServe.DataBase.Base.Dao; using WmsMobileServe.DataBase.Base.Po; using WmsMobileServe.Utils; namespace WmsMobileServe.ApiServe.Mobile.Service; [Component] public class StockInService(MesApiClient mesApiClient, TOnGoodsShelfDao onGoodsShelfDao, TMiStockDao miStockDao, CuxWmsPoLinesItfDao cuxWmsPoLinesItfDao, TRKWareNOticeTabDao wareNoticeTabDao) { /// /// 空载具入库 /// /// /// public MobileApiResponse EmptyVehicleIn(EmptyVehicleInReq request) { if (string.IsNullOrEmpty(request.VehicleNo)) return MobileApiResponse.Fail("传入的载具号为空"); /* 检验载具是否有入库任务 */ var stackInRasks = onGoodsShelfDao.SelectWithVehicleNo(request.VehicleNo); if(stackInRasks == default) return MobileApiResponse.Fail("数据服务异常,请稍后再试"); if(stackInRasks.Count > 0) return MobileApiResponse.Fail(string.Format("该载具号:{0} 存在入库任务,请核实后再试", request.VehicleNo)); /* 检验载具是否在库存中 */ var stocks = miStockDao.SelectWithVehicleNo(request.VehicleNo); if (stocks == default) return MobileApiResponse.Fail("数据服务异常,请稍后再试"); if (stocks.Count > 0) return MobileApiResponse.Fail(string.Format("该载具号:{0} 仍在库中,请核实后再试", request.VehicleNo)); /* 构建空载具信息插入数据库 */ TOnGoodsShelf onGoodsShelf = new() { LotId = UUIDUtils.GetNewUUID2(), GoodsId = "000000", ProviderId = "景旺", LocationId = "", StoNum = 1, AccNum = 1, ShelfNum = 1, StockNum = 0, OnDate = DateTime.Now, OnShelfUserId = "Mobile_Android", StorageId = "-", StorageAreaId = "-", UpGoodsId = UUIDUtils.GetNewUUID2(), GoodsTypeId = "0", StorageMode = "空托入库", ProdictionDate = DateTime.Now, Ctl = request.VehicleNo, BarCode = "-", CustomerId = "景旺", GoodsName = "空载具", Status = "0", Unit = "-", TaskType = "1", GoodsMeasureId = UUIDUtils.GetNewUUID2(), PackingNum = 1, DamageNum = 1, Remark = "" }; var insertResult = onGoodsShelfDao.Insert(onGoodsShelf); if (insertResult > 0) return MobileApiResponse.Success(string.Format("空载具:{0} 产生入库任务成功", request.VehicleNo)); return MobileApiResponse.Fail(string.Format("空载具:{0} 产生入库任务失败,数据无法插入", request.VehicleNo)); } /// /// 获取箱子号对应的信息 /// /// /// public MobileApiResponse GetGoodsDetail(string? boxNo) { if (string.IsNullOrEmpty(boxNo)) return MobileApiResponse.Fail("无法识别的箱子号"); /* -------------- 测试 --------------------------- */ //GetGoodsDetailResp mesGoodsDetailTest = new() //{ // BoxNo = boxNo, // NumPerBox = 1, // GoodsNum = 23, // PacketNum = 44, // OtherNum = 12, // GoodsId = "000", // SaleOrderNo = "sa123", // PacketLevel = "1", // Cycle = "20天", // CustomSaleOrderNo = "Csale1122", // MinorWarehouseId = "99", // GoodsDesc = "测试物料", //}; //return MobileApiResponse.Success(data: mesGoodsDetailTest); /* -------------- 测试结束 --------------------------- */ var response = mesApiClient.GetOutBoxInfo(boxNo); if (!response.IsSend) return MobileApiResponse.Fail(string.Format("请求MES货物物料信息失败,异常信息:{0}", response.Exception?.Message)); string? responseData = response.ResponseMsg; if (string.IsNullOrEmpty(responseData)) return MobileApiResponse.Fail(string.Format("MES返回的信息无法识别,信息:{0}", responseData)); var responseDto = XmlUtils.Deserialize(responseData); if (responseDto == null) return MobileApiResponse.Fail(string.Format("MES返回的信息无法解析,信息:{0}", responseData)); string mesData = responseDto.Data ?? ""; string[] dataDetail = mesData.Split(':'); if (dataDetail.Length < 2) return MobileApiResponse.Fail(string.Format("MES返回的信息格式不正确,信息:{0}", responseData)); if (dataDetail[0] != "Succ") return MobileApiResponse.Fail(string.Format("MES返回箱子错误,信息:{0}", responseData)); string goodsInfo = dataDetail[1]; string[] goodsDetails = goodsInfo.Split("|"); if (goodsDetails.Length < 12) return MobileApiResponse.Fail(string.Format("MES返回的箱子信息参数数量不足,信息:{0}", goodsDetails)); if(goodsDetails[0] != boxNo) return MobileApiResponse.Fail(string.Format("MES返回的箱子号和扫描的箱子号不一致,返回的箱号:{0}", goodsDetails[0])); string numPerBox = goodsDetails[1]; // 每包数量 string goodsNum = goodsDetails[2]; // 包装数量 string packetNum = goodsDetails[3]; // 包数量 string otherNum = goodsDetails[4]; // 零包数量 if(numPerBox.IsNotDecimal() || goodsNum.IsNotDecimal() || packetNum.IsNotDecimal() || otherNum.IsNotDecimal()) return MobileApiResponse.Fail(string.Format("MES返回的箱子信息内的数量存在不是数字情况,信息:{0}", goodsDetails)); GetGoodsDetailResp mesGoodsDetail = new() { BoxNo = dataDetail[0], NumPerBox = numPerBox.ToDecimal(), GoodsNum = goodsNum.ToDecimal(), PacketNum = packetNum.ToDecimal(), OtherNum = otherNum.ToDecimal(), GoodsId = dataDetail[5], SaleOrderNo = dataDetail[6], PacketLevel = dataDetail[7], Cycle = dataDetail[8], CustomSaleOrderNo = dataDetail[9], MinorWarehouseId = dataDetail[10], GoodsDesc = dataDetail[11], }; return MobileApiResponse.Success(data: mesGoodsDetail); } /// /// 根据订单行和物料号 /// /// /// public MobileApiResponse GetCanUseGoods(GetCanUseGoodsRequest request) { if (string.IsNullOrEmpty(request.OrderId) || string.IsNullOrEmpty(request.GoodsId) || !request.GoodsId.IsNumber()) return MobileApiResponse.Fail("传入的参数不正确"); List? wareNoticeTabs = wareNoticeTabDao.SelectWithOrderIdAndGoodsId(request.OrderId, request.GoodsId); if(wareNoticeTabs == default) return MobileApiResponse.Fail("数据服务异常,请稍后再试"); if(wareNoticeTabs.Count < 1) return MobileApiResponse.Fail("该入库单行和物料无入库单数据"); foreach(var cus in wareNoticeTabs) { if(cus.PrintSts == "0") return MobileApiResponse.Success("查询成功", cus); } return MobileApiResponse.Fail("无可入库的数量或数量不足,请检查采购单可入库数量"); } // -------------------- 冷冻仓 /// /// 码盘入库 /// /// /// public MobileApiResponse BindingVehicleIn(BindingVehicleInRequest request) { if(string.IsNullOrEmpty(request.VehicleNo)) return MobileApiResponse.Fail("载具号为空"); var goods = request.Goods; if (goods == null || goods.Count < 1) return MobileApiResponse.Fail("传入的数据为空"); List onGoodsShelfs = []; foreach (var item in goods) { if (string.IsNullOrEmpty(item.ProductData)) item.ProductData = "19970102"; /* 构建空载具信息插入数据库 */ TOnGoodsShelf onGoodsShelf = new() { LotId = UUIDUtils.GetNewUUID2(), GoodsId = item.ItemId, ProviderId = item.Segment1, LocationId = "", StoNum = 1, AccNum = 1, ShelfNum = Convert.ToInt32(item.Quantity), StockNum = 0, OnDate = DateTime.Now, OnShelfUserId = "Mobile_Android", StorageId = "-", StorageAreaId = item.Area, UpGoodsId = UUIDUtils.GetNewUUID2(), GoodsTypeId = item.GoodsTypeId, StorageMode = "码盘入库", ProdictionDate = new DateTime(Convert.ToInt32(item.ProductData.Substring(0, 4)), Convert.ToInt32(item.ProductData.Substring(4, 2)), Convert.ToInt32(item.ProductData.Substring(6, 2))), Ctl = request.VehicleNo, BarCode = item.SendOrderId, CustomerId = item.PruBatch, GoodsName = item.GoodsName, WGH = item.Weight, BAOZHIQI = "", Status = "0", PRODUCLOTID = item.LineLocationId, Unit = item.Unit, TaskType = request.InArea, GoodsMeasureId = item.Batch, PackingNum = 1, DamageNum = 1, Remark = "", PoHeaderId = item.PoHeaderId, PoLineId = item.PoLineId, }; onGoodsShelfs.Add(onGoodsShelf); } bool createTask = wareNoticeTabDao.UpdateStatusAndInsertInTask("1", onGoodsShelfs, request.VehicleNo); //var insertResult = onGoodsShelfDao.Insert([.. onGoodsShelfs]); if (createTask) return MobileApiResponse.Success(string.Format("空载具:{0} 产生入库任务成功", request.VehicleNo)); return MobileApiResponse.Fail(string.Format("空载具:{0} 产生入库任务失败,数据无法插入", request.VehicleNo)); } /// /// MES 码盘入库 /// /// /// public MobileApiResponse BindingVehicleInMes(BindingVehicleInReq request) { if (string.IsNullOrEmpty(request.VehicleNo) || request.BindingGoodsDetails == default) return MobileApiResponse.Fail("传入的数据无法识别"); if (request.BindingGoodsDetails.Count < 1) return MobileApiResponse.Fail("传入的数据为空"); /* 检验载具是否有入库任务 */ var stackInRasks = onGoodsShelfDao.SelectWithVehicleNo(request.VehicleNo); if (stackInRasks == default) return MobileApiResponse.Fail("数据服务异常,请稍后再试"); if (stackInRasks.Count > 0) return MobileApiResponse.Fail(string.Format("该载具号:{0} 存在入库任务,请核实后再试", request.VehicleNo)); /* 检验载具是否在库存中 */ var stocks = miStockDao.SelectWithVehicleNo(request.VehicleNo); if (stocks == default) return MobileApiResponse.Fail("数据服务异常,请稍后再试"); if (stocks.Count > 0) return MobileApiResponse.Fail(string.Format("该载具号:{0} 仍在库中,请核实后再试", request.VehicleNo)); /* 构建入库任务 */ List onGoodsShelves = []; // 需要入库的任务 foreach (var item in request.BindingGoodsDetails) { onGoodsShelves.Add(new() { LotId = UUIDUtils.GetNewUUID2(), GoodsId = item.GoodsId, ProviderId = item.SaleOrderNo, LocationId = "", StoNum = item.OtherNum, AccNum = item.NumPerBox, ShelfNum = item.GoodsNum, StockNum = item.PacketNum, OnDate = DateTime.Now, OnShelfUserId = "Mobile_Android", StorageId = "-", StorageAreaId = item.MinorWarehouseId, UpGoodsId = UUIDUtils.GetNewUUID2(), GoodsTypeId = item.PacketLevel, StorageMode = "MES码盘入库", ProdictionDate = DateTime.Now, Ctl = request.VehicleNo, BarCode = item.BoxNo, CustomerId = item.CustomSaleOrderNo, GoodsName = item.GoodsDesc, Status = "0", Unit = "-", TaskType = request.TaskType.ToString(), GoodsMeasureId = item.SaleOrderNo, PackingNum = 1, DamageNum = 1, ScaleUnit = item.Cycle, Remark = "" }); } var insertResult = onGoodsShelfDao.Insert([.. onGoodsShelves]); if (insertResult > 0) return MobileApiResponse.Success(string.Format("载具:{0} 产生入库任务成功", request.VehicleNo)); return MobileApiResponse.Fail(string.Format("载具:{0} 产生入库任务失败,数据无法插入", request.VehicleNo)); } /// /// 获取EBS待码盘信息 /// /// public MobileApiResponse> GetCuxData() { List? cuxWmsPoLinesItfs = cuxWmsPoLinesItfDao.SelectWithStatus(0); if (cuxWmsPoLinesItfs == default) return MobileApiResponse>.Fail(); return MobileApiResponse>.Success(data: cuxWmsPoLinesItfs); } /// /// Ebs 码盘入库 /// /// /// public MobileApiResponse BindingVehicleInEbsOld(BindingVehicleInEbsOldReq request) { if (string.IsNullOrEmpty(request.VehicleNo) || request.BindingGoodsDetails == default) return MobileApiResponse.Fail("传入的数据无法识别"); if (request.BindingGoodsDetails.Count < 1) return MobileApiResponse.Fail("传入的数据为空"); /* 检验载具是否有入库任务 */ var stackInRasks = onGoodsShelfDao.SelectWithVehicleNo(request.VehicleNo); if (stackInRasks == default) return MobileApiResponse.Fail("数据服务异常,请稍后再试"); if (stackInRasks.Count > 0) return MobileApiResponse.Fail(string.Format("该载具号:{0} 存在入库任务,请核实后再试", request.VehicleNo)); /* 检验载具是否在库存中 */ var stocks = miStockDao.SelectWithVehicleNo(request.VehicleNo); if (stocks == default) return MobileApiResponse.Fail("数据服务异常,请稍后再试"); if (stocks.Count > 0) return MobileApiResponse.Fail(string.Format("该载具号:{0} 仍在库中,请核实后再试", request.VehicleNo)); /* 构建入库任务 */ List onGoodsShelves = []; // 需要入库的任务 List<(string? PoHeaderId, string? PoLineId, string? LineLocationId)> orders = []; foreach (var item in request.BindingGoodsDetails) { onGoodsShelves.Add(new() { LotId = UUIDUtils.GetNewUUID2(), GoodsId = item.GoodsId, ProviderId = item.SaleOrderNo, LocationId = "", StoNum = item.OtherNum, AccNum = item.NumPerBox, ShelfNum = item.GoodsNum, StockNum = item.PacketNum, OnDate = DateTime.Now, OnShelfUserId = "Mobile_Android", StorageId = "-", StorageAreaId = item.MinorWarehouseId, UpGoodsId = UUIDUtils.GetNewUUID2(), GoodsTypeId = item.PacketLevel, StorageMode = "EBS码盘入库", ProdictionDate = DateTime.Now, Ctl = request.VehicleNo, BarCode = item.BoxNo, CustomerId = item.CustomSaleOrderNo, GoodsName = item.GoodsDesc, Status = "0", Unit = "-", TaskType = request.TaskType.ToString(), GoodsMeasureId = item.SaleOrderNo, PackingNum = 1, DamageNum = 1, ScaleUnit = item.Cycle, Remark = "" }); orders.Add((item.PoHeaderId, item.PoLineId, item.LineLocationId)); } // 插入数据,更新状态 var insertResult = onGoodsShelfDao.InsertWithCux(onGoodsShelves, orders); if (insertResult) return MobileApiResponse.Success(string.Format("载具:{0} 产生入库任务成功", request.VehicleNo)); return MobileApiResponse.Fail(string.Format("载具:{0} 产生入库任务失败,数据无法插入", request.VehicleNo)); } /// /// Ebs 码盘入库 /// /// /// public MobileApiResponse BindingVehicleInEbs(BindingVehicleInEbsReq request) { if (string.IsNullOrEmpty(request.VehicleNo) || request.BindingGoodsDetails == default) return MobileApiResponse.Fail("传入的数据无法识别"); if (request.BindingGoodsDetails.Count < 1) return MobileApiResponse.Fail("传入的数据为空"); /* 检验载具是否有入库任务 */ var stackInRasks = onGoodsShelfDao.SelectWithVehicleNo(request.VehicleNo); if (stackInRasks == default) return MobileApiResponse.Fail("数据服务异常,请稍后再试"); if (stackInRasks.Count > 0) return MobileApiResponse.Fail(string.Format("该载具号:{0} 存在入库任务,请核实后再试", request.VehicleNo)); /* 检验载具是否在库存中 */ var stocks = miStockDao.SelectWithVehicleNo(request.VehicleNo); if (stocks == default) return MobileApiResponse.Fail("数据服务异常,请稍后再试"); if (stocks.Count > 0) return MobileApiResponse.Fail(string.Format("该载具号:{0} 仍在库中,请核实后再试", request.VehicleNo)); /* 检查入库单中是否有该任务 */ //foreach (var item in request.BindingGoodsDetails) //{ // List cuxWmsPos = cuxWmsPoLinesItfDao. //} // /* 构建入库任务 */ // List onGoodsShelves = []; // 需要入库的任务 //List<(string? PoHeaderId, string? PoLineId, string? LineLocationId)> orders = []; //foreach (var item in request.BindingGoodsDetails) //{ // onGoodsShelves.Add(new() // { // LotId = UUIDUtils.GetNewUUID2(), // GoodsId = item.GoodsId, // ProviderId = item.SaleOrderNo, // LocationId = "", // StoNum = item.OtherNum, // AccNum = item.NumPerBox, // ShelfNum = item.GoodsNum, // StockNum = item.PacketNum, // OnDate = DateTime.Now, // OnShelfUserId = "Mobile_Android", // StorageId = "-", // StorageAreaId = item.MinorWarehouseId, // UpGoodsId = UUIDUtils.GetNewUUID2(), // GoodsTypeId = item.PacketLevel, // StorageMode = "EBS码盘入库", // ProdictionDate = DateTime.Now, // Ctl = request.VehicleNo, // BarCode = item.BoxNo, // CustomerId = item.CustomSaleOrderNo, // GoodsName = item.GoodsDesc, // Status = "0", // Unit = "-", // TaskType = request.TaskType.ToString(), // GoodsMeasureId = item.SaleOrderNo, // PackingNum = 1, // DamageNum = 1, // ScaleUnit = item.Cycle, // Remark = "" // }); // orders.Add((item.PoHeaderId, item.PoLineId, item.LineLocationId)); //} // 插入数据,更新状态 //var insertResult = onGoodsShelfDao.InsertWithCux(onGoodsShelves, orders); //if (insertResult) return MobileApiResponse.Success(string.Format("载具:{0} 产生入库任务成功", request.VehicleNo)); return MobileApiResponse.Fail(string.Format("载具:{0} 产生入库任务失败,数据无法插入", request.VehicleNo)); } }