using NetLibrary.Common.Configuration; using NetLibrary.Log; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Web; using static TradeManageNew.OuterService.ShageService; namespace TradeManageNew.OuterService { /// /// ShipGoodsService 的摘要说明 /// public class ShipGoodsService : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string UserCode = context.Request.QueryString["UserCode"]; string Method = context.Request.QueryString["Method"]; string Ver = context.Request.QueryString["Ver"]; SyncDataModel md = new SyncDataModel(); md.Result = ""; string content2 = ""; try { StreamReader sr = new StreamReader(context.Request.InputStream); string ResponseContent = sr.ReadToEnd(); ErrorFollow.TraceWrite("协议", "", ResponseContent); if (string.IsNullOrEmpty(UserCode) == true || string.IsNullOrEmpty(Method) == true || string.IsNullOrEmpty(Ver) == true) { md.Code = "101"; md.Result = "缺少参数或者参数不正确,请确保有如下UserCode,Method,Ver参数"; content2 = JsonConvert.SerializeObject(md); context.Response.Write(content2); return; } if (Ver == "1.0") { if (string.IsNullOrEmpty(ResponseContent) == true) { md.Code = "104"; md.Result = "提交数据不能为空"; content2 = JsonConvert.SerializeObject(md); context.Response.Write(content2); return; } if (Method == "GetTrayInfos") //获取美国日期当天有效的托盘码 { TrayData model = JsonConvert.DeserializeObject(ResponseContent); if(model!=null) { var trayInfos = DataNew.GetTrayInfo(model.InDate, model.UserId, model.WareHouse, model.PrintState); if (trayInfos!=null) { md.Code = "100"; md.Result = "Success"; md.Data = JsonConvert.SerializeObject(trayInfos); } else { md.Code = "400"; md.Result = "No Valid Pallet Code,Please Add"; md.Data = null; } } else { md.Code = "400"; md.Result = "Data transmission error"; md.Data = null; } } else if (Method == "AddTrayInfo")//添加托盘码 { AddTrayData model = JsonConvert.DeserializeObject(ResponseContent); if (model!=null) { for(var i = 0; i < model.Count; i++) { var mde = new TrayInfo() { InDate = DateTime.Now.AddHours(-12).Date, WareHouse = model.WareHouse, PrintState = 0, TrayUserId = model.UserId, }; DataNew.AddTrayInfo(mde); } md.Code = "100"; md.Result = "Success"; md.Data = null; } else { md.Code = "400"; md.Result = "Data transmission error"; md.Data = null; } } else if (Method == "UpdateTrayInfo") //更新托盘码为已打印状态 { var model = JsonConvert.DeserializeObject(ResponseContent); if (model!=null) { DataNew.UpdateTrayInfo(model.ID); md.Code = "100"; md.Result = "Success"; md.Data = null; } else { md.Code = "400"; md.Result = "Data transmission error"; md.Data = null; } } else if (Method == "GetPickGoodsInfo")//获取用户需要拣货的商品 { var pickData= JsonConvert.DeserializeObject(ResponseContent); if (pickData != null) { var pickGoods = new List(); if (pickData.UserId == 165) { pickGoods = DataNew.GetPickGoodsInfo2(pickData.UserId, pickData.InDate); } else { pickGoods = DataNew.GetPickGoodsInfo(pickData.UserId, pickData.InDate); } md.Code = "100"; md.Result = "Success"; md.Data = JsonConvert.SerializeObject(pickGoods); } else { md.Code = "400"; md.Result = "Data transmission error"; md.Data = null; } } else if (Method == "VerifyTrayCode") //验证托盘码是否有效 { var model = JsonConvert.DeserializeObject(ResponseContent); //先判断此托盘码是否属于当前拣货工 var trayInfo = DataNew.GetTrayCodeInfo(model.TrayCode); if (trayInfo == null || trayInfo.TrayUserId != model.UserId) { md.Code = "400"; md.Result = "This pallet code does not belong to you"; md.Data = null; } else if (trayInfo.InDate.Date != model.InDate.Date) { md.Code = "400"; md.Result = "The pallet code has expired, please add a new pallet code"; md.Data = null; } else { md.Code = "100"; md.Result = ""; md.Data = null; } } else if (Method == "SaveTrayGoods") //托盘拣货完成,保存托盘拣货数据 { SaveTrayGoodsModel model = JsonConvert.DeserializeObject(ResponseContent); if (model != null && model.TrayGoodsData!=null && model.TrayGoodsData.Count > 0) { //先判断此托盘码是否属于当前拣货工 var trayInfo = DataNew.GetTrayCodeInfo(model.TrayCode); if(trayInfo==null || trayInfo.TrayUserId != model.UserId) { md.Code = "400"; md.Result = "This pallet code does not belong to you"; md.Data = null; } else if (trayInfo.InDate.Date != model.InDate.Date) { md.Code = "400"; md.Result = "The pallet code has expired, please add a new pallet code"; md.Data = null; } else { var errorMsg = ""; //先检验托盘所有商品是否符合拣货商品 foreach (var tg in model.TrayGoodsData) { //根据sku和库位判断 var pgoods = DataNew.GetPickGoodsInfoById(tg.PickGoodsId); if (pgoods != null) { //扫描数量大于发货数量 if (pgoods.ScanQty + tg.PickQty > pgoods.PickQty) { errorMsg = "SKU:" + tg.SKU + ",LocationCode:" + tg.LocationCode + ", Scanned quantity greater than shipped quantity"; break; } } else { errorMsg = "SKU:" + tg.SKU + ",LocationCode:" + tg.LocationCode + ", non-existent"; break; } } if (!string.IsNullOrEmpty(errorMsg)) { md.Code = "400"; md.Result = errorMsg; md.Data = null; } else { //检验通过之后,逐条保存扫描记录 foreach (var tg in model.TrayGoodsData) { var mde = new TrayPickGoodsInfo() { TrayCode = model.TrayCode, SKU = tg.SKU, WareHouse = tg.WareHouse, LocationCode = tg.LocationCode, PickQty = tg.PickQty, PickUserId = model.UserId, PickGoodsInfo_Id = tg.PickGoodsId, NewSKU=tg.NewSKU, PackGoodCode = tg.PackGoodCode, PackGoodCode2=tg.PackGoodCode2, }; DataNew.SaveTrayGoodsInfo(mde); } md.Code = "100"; md.Result = "Success"; md.Data = null; } } } else { md.Code = "400"; md.Result = "Data transmission error"; md.Data = null; } } else if (Method == "GetUserPickTrayList") //获取到拣货工当天已生成托盘 { var model = JsonConvert.DeserializeObject(ResponseContent); if (model != null) { var trays = DataNew.GetUserPickTrayList(model.UserId, model.InDate); md.Code = "100"; md.Result = "Success"; md.Data = (trays != null && trays.Count > 0) ? JsonConvert.SerializeObject(trays) : null; } else { md.Code = "400"; md.Result = "Data transmission error"; md.Data = null; } } else if (Method == "GetTrayGoodsInfoList") //获取到托盘中的所有商品信息 { var model = JsonConvert.DeserializeObject(ResponseContent); if (model!=null && !string.IsNullOrEmpty(model.TrayCode)) { var goods = DataNew.GetTrayPickGoodsInfoList(model.TrayCode); md.Code = "100"; md.Result = "Success"; md.Data = (goods != null && goods.Count > 0) ? JsonConvert.SerializeObject(goods) : null; } else { md.Code = "400"; md.Result = "Data transmission error"; md.Data = null; } } else if (Method == "DeleteTrayGoodsInfo") //删除已生成的托盘内的商品 { var model = JsonConvert.DeserializeObject(ResponseContent); if (model != null && !string.IsNullOrEmpty(model.IDs)) { DataNew.DeleteTrayPickGoodsInfo(model.IDs); md.Code = "100"; md.Result = "Success"; md.Data = null; } else { md.Code = "400"; md.Result = "Data transmission error"; md.Data = null; } } else if (Method == "GetPostReturnDetail") //扫描退货跟踪码获取退货详情 { var model = JsonConvert.DeserializeObject(ResponseContent); if (model != null && !string.IsNullOrEmpty(model.Code)) { //解析判断扫描的退货单快递跟踪码 model.Code = model.Code.Replace("\u0002", "").Replace("\n", ""); string Code2 = model.Code; if (model.Code.Length > 26 && model.Code.Substring(8, 2) == "92") { model.Code = model.Code.Substring(10); } else if (model.Code.Length > 20 && model.Code.Substring(0, 2) == "92") { model.Code = model.Code.Substring(2); } else if (model.Code.Length > 20 && model.Code.Substring(0, 2) == "94") { model.Code = model.Code; } else if (model.Code.Length > 12) { model.Code = model.Code.Substring(model.Code.Length - 12); } var returnDTs = new List(); returnDTs = DataNew.GetDT_OrderReturnDatas(model.Code, Code2); if(returnDTs!=null && returnDTs.Count > 0) { md.Code = "100"; md.Result = "Success"; md.Data = JsonConvert.SerializeObject(returnDTs); } else { var rd = new DT_OrderReturn(); rd.tracking_id = model.Code; returnDTs=new List(); returnDTs.Add(rd); md.Code = "100"; md.Result = "Success"; md.Data = JsonConvert.SerializeObject(returnDTs); } } else { md.Code = "400"; md.Result = "Data transmission error"; md.Data = null; } } else if (Method == "SavePostReturnDetail") //保存扫描退货跟踪码退货详情信息 { var model= JsonConvert.DeserializeObject>(ResponseContent); if (model!=null) { var skuQty = new List(); var locations = new List(); var returnIds = new List(); foreach(var item in model) { if (!string.IsNullOrEmpty(item.SKU)) { skuQty.Add(item.ReturnQty.ToString() + "x" + item.SKU); } if (!string.IsNullOrEmpty(item.LocationCode)) { locations.Add(item.LocationCode); } if (item.DT_OrderReturn_id.HasValue && item.DT_OrderReturn_id.Value!=0) { returnIds.Add(item.DT_OrderReturn_id.Value.ToString()); } } var rd = new OrderReturnBarcode(); rd.TrackingCode = model.First().TrackingCode; rd.TrackingCode2 = model.First().TrackingCode2; rd.SKUAndQty = skuQty != null ? string.Join(",", skuQty) : ""; rd.LocationCode = locations != null ? string.Join(",", locations) : ""; rd.DT_OrderReturn_id = returnIds != null ? string.Join(",", returnIds) : ""; rd.ScanUserId=model.First().ScanUserId; var count= DataNew.SaveDT_OrderReturnDatas(rd); if (count == 0) { md.Code = "400"; md.Result = "Data already exists"; md.Data = null; } else { md.Code = "100"; md.Result = "Success"; md.Data = null; } } else { md.Code = "400"; md.Result = "Data transmission error"; md.Data = null; } } else if(Method== "GetOrderReturnBarcodeDetail")//获取退货条形码数据详情 { var model = JsonConvert.DeserializeObject(ResponseContent); if (model!=null && !string.IsNullOrEmpty(model.Code)) { var data = DataNew.GetOrderReturnBarcodeDatas(model.Code); if (data != null) { md.Code = "100"; md.Result = "Success"; md.Data = JsonConvert.SerializeObject(data); } else { md.Code = "400"; md.Result = "Data not exist"; md.Data = null; } } else { md.Code = "400"; md.Result = "Data transmission error"; md.Data = null; } } else if (Method == "GetPdaVersion") //获取PDA当前版本号 { var version= ConfigurationManager.AppSettings["PDAversion"]; if (!string.IsNullOrEmpty(version)) { var data = new { code = version, url = "https://www.kferp.net/attached/WMS1.0.0.apk" }; md.Code = "100"; md.Result = "Success"; md.Data = JsonConvert.SerializeObject(data); } else { md.Code = "400"; md.Result = "Version code is null"; md.Data = null; } } } } catch (Exception ex) { md.Code = "104"; md.Result = ex.Message; } content2 = JsonConvert.SerializeObject(md); ErrorFollow.TraceWrite("返回值", "", content2); context.Response.Write(content2); } public bool IsReusable { get { return false; } } public class SaveTrayGoodsModel { public int UserId { get; set; } public string TrayCode { get; set; } public DateTime InDate { get; set; } public List TrayGoodsData { get; set; } } public class TrayGoodsData { public int PickGoodsId { get; set; } public string WareHouse { get; set; } public string SKU { get; set; } /// /// 库位 /// public string LocationCode { get; set; } /// /// 拣货数量 /// public int PickQty { get; set; } public string NewSKU { get; set; } public string PackGoodCode { get; set; } public string PackGoodCode2 { get; set; } } public class PickData { public int UserId { get; set; } public DateTime InDate { get; set; } } public class TrayData { public int UserId { get; set; } public string WareHouse { get; set; } public int PrintState { get; set; } public DateTime InDate { get; set; } } public class AddTrayData { public int UserId { get; set; } /// /// 添加数量 /// public int Count { get; set; } /// /// 所属仓库 /// public string WareHouse { get; set; } } public class UpdateTrayData { public int ID { get; set; } } public class GetData { public string TrayCode { get; set; } public string IDs { get; set; } } public class VerifyData { public int UserId { get; set; } public string TrayCode { get; set; } public DateTime InDate { get; set; } } public class ScanData { public string Code { get; set; } } public class SavePostReturnModel { public string TrackingCode { get; set; } public string TrackingCode2 { get; set; } public string SKU { get; set; } public int? ReturnQty { get; set; } public string LocationCode { get; set; } public int? DT_OrderReturn_id { get; set; } public int? ScanUserId { get; set; } } } }