You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

578 lines
25 KiB
C#

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
{
/// <summary>
/// ShipGoodsService 的摘要说明
/// </summary>
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<TrayData>(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<AddTrayData>(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<UpdateTrayData>(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<PickData>(ResponseContent);
if (pickData != null)
{
var pickGoods = new List<PickGoodsInfo>();
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<VerifyData>(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<SaveTrayGoodsModel>(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<PickData>(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<GetData>(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<GetData>(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<ScanData>(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<DT_OrderReturn>();
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<DT_OrderReturn>();
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<List<SavePostReturnModel>>(ResponseContent);
if (model!=null)
{
var skuQty = new List<string>();
var locations = new List<string>();
var returnIds = new List<string>();
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<ScanData>(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> TrayGoodsData { get; set; }
}
public class TrayGoodsData
{
public int PickGoodsId { get; set; }
public string WareHouse { get; set; }
public string SKU { get; set; }
/// <summary>
/// 库位
/// </summary>
public string LocationCode { get; set; }
/// <summary>
/// 拣货数量
/// </summary>
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; }
/// <summary>
/// 添加数量
/// </summary>
public int Count { get; set; }
/// <summary>
/// 所属仓库
/// </summary>
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; }
}
}
}