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.
ERP/TradeManageNew/PostGoodServiceNew.asmx.cs

3120 lines
136 KiB
C#

2 months ago
using Aspose.Pdf.Operators;
using NetLibrary;
using NetLibrary.Data;
using NetLibrary.Log;
using NetLibrary.ReportPrint;
using Newtonsoft.Json;
using NPOI.HSSF.Model;
using NPOI.HSSF.Record.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Script.Serialization;
using System.Web.Script.Services;
using System.Web.Services;
using System.Web.UI.WebControls;
using TradeManage;
using TradeManageNew.OrderPost;
using TradeModel;
using ZXing.Common;
using ZXing;
using ZXing.QrCode.Internal;
using static System.Runtime.CompilerServices.RuntimeHelpers;
using System.Drawing.Imaging;
using System.Net.Http.Headers;
using System.Net.Http;
using System.Net;
using System.Web.UI;
using TradeManageNew.RateWebReference;
using System.Web.UI.WebControls.Expressions;
using System.Text;
using Org.BouncyCastle.Math.EC;
using System.Diagnostics;
namespace TradeManageNew
{
/// <summary>
/// PostGoodServiceNew 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
[System.Web.Script.Services.ScriptService]
public class PostGoodServiceNew : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
#region 获取仓库订单发货信息表数量
[WebMethod(EnableSession = true)]
public JsonModel<List<OrderPostInfo>> GetOrderPostInfoList(string searchCode, int searchType,string wareHouse, int postState,int printState,DateTime? sDate,DateTime? eDate, int PageSize, int PageIndex)
{
PagesNew.Login(base.Session);
var rmodel = new JsonModel<List<OrderPostInfo>>();
int rowCount = 0;
rmodel.DataSource = DataNew.GetOrderPostInfoDatas(searchCode, searchType, wareHouse, postState, printState, sDate, eDate, PageSize, PageIndex, out rowCount);
rmodel.RowCount = rowCount;
return rmodel;
}
[WebMethod(EnableSession = true)]
public APIReturnModel SaveOrderPostInfo(OrderPostInfo md)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
DataNew.SaveOrderPostInfo(md);
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch(Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
[WebMethod(EnableSession = true)]
public APIReturnModel DeleteOrderPostInfo(int id)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
DataNew.DeleteOrderPostInfo(id);
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
[WebMethod(EnableSession = true)]
public APIReturnModel DeleteOrderPostInfoForIDs(string ids)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
ids = ids.TrimEnd(',');
DataNew.DeleteOrderPostInfoForIDs(ids);
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
/// <summary>
/// 导入发货订单
/// </summary>
/// <param name="fileName"></param>
/// <param name="wareHouse"></param>
/// <param name="ipDate"></param>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public string ImportShipOrderDatas(string fileName,string wareHouse,DateTime ipDate)
{
PagesNew.Login(base.Session);
try
{
if (string.IsNullOrEmpty(fileName)) return "要导入的文件路径不能为空";
string ServerFileName = AppDomain.CurrentDomain.BaseDirectory + fileName;
if (!System.IO.File.Exists(ServerFileName)) return "要导入的文件路径不存在";
MicrosoftExcel excel = new MicrosoftExcel();
DataTable tb = excel.ImportExcel(ServerFileName);
var orders = new List<OrderPostInfo>();
for (int i = 0; i < tb.Rows.Count; i++)
{
if (string.IsNullOrEmpty(tb.Rows[i][0].ToString()))
{
return "第" + (i + 1).ToString() + "行的OrderCode为空";
}
if (string.IsNullOrEmpty(tb.Rows[i][1].ToString()))
{
return "第" + (i + 1).ToString() + "行的SKU为空";
}
if (string.IsNullOrEmpty(tb.Rows[i][3].ToString()))
{
return "第" + (i + 1).ToString() + "行的Qty为空";
}
if (string.IsNullOrEmpty(tb.Rows[i][4].ToString()))
{
return "第" + (i + 1).ToString() + "行的Location为空";
}
if (string.IsNullOrEmpty(tb.Rows[i][5].ToString()))
{
return "第" + (i + 1).ToString() + "行的TrackCode为空";
}
var md = new OrderPostInfo()
{
ID = 0,
WareHouse = wareHouse,
PostDate = ipDate.Date,
OrderCode = tb.Rows[i][0].ToString().Trim(),
SKU = tb.Rows[i][1].ToString().Trim(),
NewSKU = tb.Rows[i][2].ToString().Trim(),
Qty = Convert.ToInt32(tb.Rows[i][3].ToString()),
LocationCode = tb.Rows[i][4].ToString().Trim(),
TrackCode = tb.Rows[i][5].ToString().Trim(),
PostQty = 0,
PostState = 0,
PrintState = 0,
Remark = tb.Rows[i][6].ToString(),
};
orders.Add(md);
}
if(orders!=null && orders.Count > 0)
{
foreach(var order in orders)
{
DataNew.SaveOrderPostInfo(order);
}
}
}
catch (Exception ex)
{
return "Error:" + ex.Message;
}
return "Success";
}
/// <summary>
/// 选择发货订单生成拣货单
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel MakePickGoodListForIds(string ids,string wareHouse)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
//当前操作用户权限限定,只能美国仓库员工导出自己仓库的数据
var userId = Convert.ToInt32(Session["UserId"]);
//var userInfo = DataNew.GetUserInfoByUserId(userId);
//if (userInfo == null)
//{
// rmodel.Code = 0;
// rmodel.Message = "User Data Error";
// return rmodel;
//}
//else
//{
// if (userInfo.DeptId != 30 || userInfo.State != 1 || string.IsNullOrEmpty(userInfo.WorkDesc))
// {
// rmodel.Code = 0;
// rmodel.Message = "no permission";
// return rmodel;
// }
// var _warehouse = userInfo.WorkDesc == "东仓" ? "E" : "W";
// if (_warehouse != wareHouse)
// {
// rmodel.Code = 0;
// rmodel.Message = "Unable to export data from other warehouses";
// return rmodel;
// }
//}
var ops = DataNew.GetOrderPostInfoListByIds(ids.TrimEnd(','), wareHouse);
if (ops == null)
{
rmodel.Code = 0;
rmodel.Message = "Not Find Datas";
return rmodel;
}
var singleOPs = new List<OrderPostInfo>();//单个订单只用一种商品
var moreOPs = new List<OrderPostInfo>();//单个订单有多种商品,需要单独放到最后,一起拣货
foreach (var op in ops)
{
var _op = ops.Where(r => r.OrderCode == op.OrderCode && r.ID != op.ID).FirstOrDefault();
if (_op == null)
{
singleOPs.Add(op);
}
else
{
moreOPs.Add(op);
}
}
var exportPickGoods = new List<ShipOrderPickGoods>();
//获取仓库所有的拣货类型以及拣货人员
var pickUsers = DataNew.GetStorePostionPickers(wareHouse);
if (singleOPs != null)
{
var singlePickGoods = singleOPs.GroupBy(r => new { r.SKU, r.NewSKU, r.LocationCode }).Select(g => new ShipOrderPickGoods { NewSKU = g.Key.NewSKU, SKU = g.Key.SKU, LocationCode = g.Key.LocationCode, Qty = g.Sum(r => r.Qty) }).OrderBy(n => n.LocationCode).ToList();
if (wareHouse == "W")//西部仓库
{
//西部拣货规则类型11-16 row(A layer)(1-16排A层)21-16 row(B,C,D layer)(1-16排B层)3After row 1616排之后4Multiple Goods多件货5Others其它
//排
var pai = new List<string>() { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16" };
//层
var ceng = new List<string>() { "B", "C", "D" };
foreach (var spg in singlePickGoods)
{
if (spg.LocationCode == "TestLocation") //每天测试专用库位,分配给指定人员,只在西部仓库测试
{
spg.PickUserId = 238;
continue;
}
int num = 0;
int pickType = 0;//拣货类型
if (string.IsNullOrEmpty(spg.LocationCode))
{
//spg.PickUserId = 103;//Eddie
pickType = 5;
}
else if (spg.LocationCode.ToUpper().StartsWith("000A"))
{
//000开头A层 Jose
pickType = 1;
}
else if (spg.LocationCode.ToUpper().StartsWith("000B") || spg.LocationCode.ToUpper().StartsWith("000C") || spg.LocationCode.ToUpper().StartsWith("000D"))
{
//000开头B/C/D层 Silvestre
pickType = 2;
}
else if (pai.Contains(spg.LocationCode.Substring(0, 2)) && spg.LocationCode.Substring(2, 1) == "A")
{
//1-16排并且是A层(第一层)
//spg.PickUserId = 164;//Jose
pickType = 1;
}
else if (pai.Contains(spg.LocationCode.Substring(0, 2)) && ceng.Contains(spg.LocationCode.Substring(2, 1)))
{
//1-16排并且是BCD层(2,3,4层)
//spg.PickUserId = 165;//Silvestre
pickType = 2;
}
else if (int.TryParse(spg.LocationCode.Substring(0, 2), out num) && num > 16)
{
//17排以及之后表示地面由Ricardo负责
//spg.PickUserId = 166;//由Ricardo
pickType = 3;
}
else
{
//spg.PickUserId = 103;//Eddie
pickType = 5;
}
var _pickUser = pickUsers.Where(r => r.PickType == pickType).FirstOrDefault();
if (_pickUser != null)
{
spg.PickUserId = _pickUser.PickUserId;
}
else
{
rmodel.Code = 0;
rmodel.Message = "Not Find Pick Type Datas";
return rmodel;
}
}
}
else //东部仓库
{
//东部拣货规则类型111-10 row1-10排12After row 1010排之后13Multiple Goods多件货14Others其它
foreach (var spg in singlePickGoods)
{
int pickType = 0;//拣货类型
int num = 0;
if (spg.LocationCode.StartsWith("E-") && spg.LocationCode.Length == 7 && int.TryParse(spg.LocationCode.Substring(2, 2), out num) && num <= 10)
{
//1-10排
pickType = 11;
}
else if (spg.LocationCode.StartsWith("E-") && spg.LocationCode.Length == 7 && int.TryParse(spg.LocationCode.Substring(2, 2), out num) && num > 10)
{
//10排之后
pickType = 12;
}
else
{
//其它
pickType = 14;
}
var _pickUser = pickUsers.Where(r => r.PickType == pickType).FirstOrDefault();
if (_pickUser != null)
{
spg.PickUserId = _pickUser.PickUserId;
}
else
{
rmodel.Code = 0;
rmodel.Message = "Not Find Pick Type Datas";
return rmodel;
}
}
}
exportPickGoods.AddRange(singlePickGoods);
}
if (moreOPs != null)
{
if (wareHouse == "W") //同一个订单多种商品的西部统一分配给一个人拣货
{
var _pickUser = pickUsers.Where(r => r.PickType == 4).FirstOrDefault();//找到多件货的拣货人员
if (_pickUser == null)
{
rmodel.Code = 0;
rmodel.Message = "Not Find Pick Type Datas";
return rmodel;
}
var morePickGoods = moreOPs.GroupBy(r => new { r.SKU, r.NewSKU, r.LocationCode }).Select(g => new ShipOrderPickGoods { NewSKU = g.Key.NewSKU, SKU = g.Key.SKU, LocationCode = g.Key.LocationCode, Qty = g.Sum(r => r.Qty), PickUserId = _pickUser.PickUserId }).OrderBy(n => n.LocationCode);
exportPickGoods.AddRange(morePickGoods);
}
else //东部分配给
{
var _pickUser = pickUsers.Where(r => r.PickType == 13).FirstOrDefault();//找到多件货的拣货人员
if (_pickUser == null)
{
rmodel.Code = 0;
rmodel.Message = "Not Find Pick Type Datas";
return rmodel;
}
var morePickGoods = moreOPs.GroupBy(r => new { r.SKU, r.NewSKU, r.LocationCode }).Select(g => new ShipOrderPickGoods { NewSKU = g.Key.NewSKU, SKU = g.Key.SKU, LocationCode = g.Key.LocationCode, Qty = g.Sum(r => r.Qty), PickUserId = _pickUser.PickUserId }).OrderBy(n => n.LocationCode);
exportPickGoods.AddRange(morePickGoods);
}
}
//左连匹配用户名
var users = DataNew.GetListUserSelect();
var exportPickGoodsNew = from a in exportPickGoods
join b in users on a.PickUserId equals b.UserId into Temp
from c in Temp.DefaultIfEmpty()
orderby a.PickUserId
select new ShipOrderPickGoods { SKU = a.SKU, NewSKU = a.NewSKU, Qty = a.Qty, LocationCode = a.LocationCode, PickUserId = a.PickUserId, PickUserName = Temp.Select(r => r.Name).FirstOrDefault() };
if (exportPickGoodsNew != null)
{
DataTable tb = new DataTable();
tb.Columns.Add("NEWSKU", Type.GetType("System.String"));
tb.Columns.Add("SKU", Type.GetType("System.String"));
tb.Columns.Add("QTY", Type.GetType("System.Int32"));
tb.Columns.Add("LOCATION", Type.GetType("System.String"));
tb.Columns.Add("UserName", Type.GetType("System.String"));
//拣货日期
var usaTime = DateTime.Now;
foreach (var ep in exportPickGoodsNew)
{
var packGoodCode1 = "";
var packGoodCode2 = "";
var packCode = DataNew.GetGoodsPackCodeBySKU(ep.SKU);
if (packCode != null)
{
//if (!string.IsNullOrEmpty(packCode.GoodsCode) && !string.IsNullOrEmpty(packCode.TypeCode))
//{
// if (packCode.GoodsCode.Contains("-"))
// {
// var goodCodes = packCode.GoodsCode.Split('-');
// packGoodCode1 = (goodCodes[0].Length >= 6 ? goodCodes[0] : goodCodes[1]) + (packCode.TypeCode.StartsWith("000") ? packCode.TypeCode.Substring(packCode.TypeCode.Length - 3, 3) : packCode.TypeCode) + (packCode.BoxRate.HasValue ? packCode.BoxRate.Value.ToString("000") : "001");
// }
// else
// {
// packGoodCode1 = packCode.GoodsCode + (packCode.TypeCode.StartsWith("000") ? packCode.TypeCode.Substring(packCode.TypeCode.Length - 3, 3) : packCode.TypeCode) + (packCode.BoxRate.HasValue ? packCode.BoxRate.Value.ToString("000") : "001");
// }
//}
//if (!string.IsNullOrEmpty(packCode.GoodsOldCode) && !string.IsNullOrEmpty(packCode.TypeCode))
//{
// if (packCode.GoodsOldCode.Contains("-"))
// {
// var goodCodes = packCode.GoodsOldCode.Split('-');
// packGoodCode2 = (goodCodes[0].Length >= 6 ? goodCodes[0] : goodCodes[1]) + (packCode.TypeCode.StartsWith("000") ? packCode.TypeCode.Substring(packCode.TypeCode.Length - 3, 3) : packCode.TypeCode) + (packCode.BoxRate.HasValue ? packCode.BoxRate.Value.ToString("000") : "001");
// }
// else
// {
// packGoodCode2 = packCode.GoodsOldCode + (packCode.TypeCode.StartsWith("000") ? packCode.TypeCode.Substring(packCode.TypeCode.Length - 3, 3) : packCode.TypeCode) + (packCode.BoxRate.HasValue ? packCode.BoxRate.Value.ToString("000") : "001");
// }
//}
packGoodCode1 = packCode.Barcode;
}
DataRow row = tb.NewRow();
row["NEWSKU"] = ep.NewSKU;
row["SKU"] = ep.SKU;
row["QTY"] = ep.Qty;
row["LOCATION"] = ep.LocationCode;
row["UserName"] = ep.PickUserName;
tb.Rows.Add(row);
//保存拣货单数据
var pickGd = new PickGoodsInfo()
{
InDate = usaTime.Date,
WareHouse = wareHouse,
NewSKU = ep.NewSKU,
SKU = ep.SKU,
PickQty = ep.Qty,
ScanQty = 0,
LocationCode = ep.LocationCode,
PickUserId = ep.PickUserId,
PackGoodCode = packGoodCode1,
PackGoodCode2 = packGoodCode2,
};
DataNew.SavePickGoodsInfoData(pickGd);
}
TableColumnCollection listColumns = new TableColumnCollection();
listColumns.Add("NEWSKU", "NEW SKU", DbType.String, "");
listColumns.Add("SKU", "SKU", DbType.String, "");
listColumns.Add("QTY", "QTY", DbType.Int32, "");
listColumns.Add("LOCATION", "LOCATION", DbType.String, "");
listColumns.Add("UserName", "UserName", DbType.String, "");
MicrosoftExcel obj2 = new MicrosoftExcel();
var filePath = obj2.Export(tb, listColumns);
var trayMaxVolume = DataNew.GetTrayMaxVolumeDatas(wareHouse);
var trayVolume = trayMaxVolume == null ? 0.6m : trayMaxVolume.MaxVolume;//无数据默认0.6m³
var pickUserIds = exportPickGoodsNew.Select(r => r.PickUserId.Value).Distinct();
foreach (var pickUserId in pickUserIds)
{
//获取每个人拣货的总立方
var solid = DataNew.GetUserPickGoodsTotalSolid(usaTime, pickUserId);
if (solid <= 0)
continue;
//假设每个托盘的拣货立方是0.6m³,计算出每个人总共需要的托盘数,在计算出来的托盘数上,冗余一倍
var trayCount = (int)Math.Ceiling(solid / trayVolume) * 2;//计算的托盘数向上取整,再*2
//新增拣货用户的托盘码
for (int i = 0; i < trayCount; i++)
{
var mde = new TrayInfo()
{
InDate = usaTime,
WareHouse = wareHouse,
PrintState = 0,
TrayUserId = pickUserId,
};
DataNew.AddTrayInfo(mde);
}
}
//订单生成拣货列表之后,将状态改为打印中状态
DataNew.UpdateOrderPostInfoToPrinting(string.Join(",", ops.Select(r => r.ID)));
rmodel.Code = 1;
rmodel.Message = filePath;
return rmodel;
}
else
{
rmodel.Code = 0;
rmodel.Message = "Not Find Datas";
return rmodel;
}
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Error:" + ex.Message;
return rmodel;
}
}
/// <summary>
/// 根据搜索条件查询数据生成拣货单(已弃用)
/// </summary>
/// <param name="searchCode"></param>
/// <param name="searchType"></param>
/// <param name="wareHouse"></param>
/// <param name="postState"></param>
/// <param name="printState"></param>
/// <param name="sDate"></param>
/// <param name="eDate"></param>
/// <param name="isFG">是否覆盖生成拣货单</param>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel MakePickGoodListForAllDatas(string searchCode, int searchType, string wareHouse, int postState, int printState, DateTime? sDate, DateTime? eDate,int isFG)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
//当前操作用户权限限定,只能美国仓库员工导出自己仓库的数据
var userId = Convert.ToInt32(Session["UserId"]);
//var userInfo = DataNew.GetUserInfoByUserId(userId);
//if (userInfo == null)
//{
// rmodel.Code = 0;
// rmodel.Message = "User Data Error";
// return rmodel;
//}
//else
//{
// if (userInfo.DeptId != 30 || userInfo.State != 1 || string.IsNullOrEmpty(userInfo.WorkDesc))
// {
// rmodel.Code = 0;
// rmodel.Message = "no permission";
// return rmodel;
// }
// var _warehouse = userInfo.WorkDesc == "东仓" ? "E" : "W";
// if (_warehouse != wareHouse)
// {
// rmodel.Code = 0;
// rmodel.Message = "Unable to export data from other warehouses";
// return rmodel;
// }
//}
var ops = DataNew.GetOrderPostInfoDatasBySearch(searchCode, searchType, wareHouse, postState, printState, sDate, eDate);
var singleOPs = new List<OrderPostInfo>();//单个订单只有一种商品,并且数量多个时,在同一拣货库位
var moreOPs = new List<OrderPostInfo>();//单个订单有多种商品,需要单独放到最后,一起拣货
if (ops == null)
{
rmodel.Code = 0;
rmodel.Message = "Not Find Datas";
return rmodel;
}
#region 检查所有的发货订单的面单地址和SKU信息是否完整
var orderCodes =ops.Select(r=>r.OrderCode).Distinct().ToList();
foreach(var orderCode in orderCodes)
{
var tracks = DataNew.GetDT_TrackCodeApplyNewsByOrderCode(orderCode);
if (tracks==null)
{
rmodel.Code = 0;
rmodel.Message = "订单号:" + orderCode + "未找到发货面单信息,请检查";
return rmodel;
}
foreach(var track in tracks)
{
if (string.IsNullOrEmpty(track.LabelUrl) || !track.LabelUrl.Contains(track.TrackCode))
{
rmodel.Code = 0;
rmodel.Message = "订单号:" + orderCode + ",跟踪码:"+track.TrackCode+" 面单文件地址为空或者与跟踪码不一致,请重新上传此面单";
return rmodel;
}
else if (string.IsNullOrEmpty(track.SKU))
{
rmodel.Code = 0;
rmodel.Message = "订单号:" + orderCode + ",跟踪码:" + track.TrackCode + " 货物SKU信息为空请检查";
return rmodel;
}
}
}
#endregion
foreach (var op in ops)
{
var _op = ops.Where(r => r.OrderCode == op.OrderCode && r.ID != op.ID).FirstOrDefault();
if (_op == null)
{
singleOPs.Add(op);
}
else
{
moreOPs.Add(op);
}
}
var exportPickGoods = new List<ShipOrderPickGoods>();
//获取仓库所有的拣货类型以及拣货人员
var pickUsers = DataNew.GetStorePostionPickers(wareHouse);
if (singleOPs != null)
{
var singlePickGoods = singleOPs.GroupBy(r => new { r.SKU, r.NewSKU, r.LocationCode }).Select(g => new ShipOrderPickGoods { NewSKU = g.Key.NewSKU, SKU = g.Key.SKU, LocationCode = g.Key.LocationCode, Qty = g.Sum(r => r.Qty) }).OrderBy(n => n.LocationCode).ToList();
if (wareHouse == "W")//西部仓库
{
//西部拣货规则类型11-16 row(A layer)(1-16排A层)21-16 row(B,C,D layer)(1-16排B层)3After row 1616排之后4Multiple Goods多件货5Others其它
//排
var pai = new List<string>() { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16" };
//层
var ceng = new List<string>() { "B", "C", "D" };
foreach (var spg in singlePickGoods)
{
if(spg.LocationCode == "TestLocation") //每天测试专用库位,分配给指定人员,只在西部仓库测试
{
spg.PickUserId =238;
continue;
}
int num = 0;
int pickType = 0;//拣货类型
if (string.IsNullOrEmpty(spg.LocationCode))
{
//spg.PickUserId = 103;//Eddie
pickType = 5;
}
else if (spg.LocationCode.ToUpper().StartsWith("000A"))
{
//000开头A层 Jose
pickType = 1;
}
else if(spg.LocationCode.ToUpper().StartsWith("000B") || spg.LocationCode.ToUpper().StartsWith("000C") || spg.LocationCode.ToUpper().StartsWith("000D"))
{
//000开头B/C/D层 Silvestre
pickType = 2;
}
else if(pai.Contains(spg.LocationCode.Substring(0,2)) && spg.LocationCode.Substring(2, 1) == "A")
{
//1-16排并且是A层(第一层)
//spg.PickUserId = 164;//Jose
pickType = 1;
}
else if(pai.Contains(spg.LocationCode.Substring(0, 2)) && ceng.Contains(spg.LocationCode.Substring(2, 1)))
{
//1-16排并且是BCD层(2,3,4层)
//spg.PickUserId = 165;//Silvestre
pickType = 2;
}
else if(int.TryParse(spg.LocationCode.Substring(0, 2),out num) && num > 16)
{
//17排以及之后表示地面由Ricardo负责
//spg.PickUserId = 166;//由Ricardo
pickType = 3;
}
else
{
//spg.PickUserId = 103;//Eddie
pickType = 5;
}
var _pickUser = pickUsers.Where(r => r.PickType == pickType).FirstOrDefault();
if (_pickUser != null)
{
spg.PickUserId = _pickUser.PickUserId;
}
else
{
rmodel.Code = 0;
rmodel.Message = "Not Find Pick Type Datas";
return rmodel;
}
}
}
else //东部仓库
{
//东部拣货规则类型111-10 row1-10排12After row 1010排之后13Multiple Goods多件货14Others其它
foreach(var spg in singlePickGoods)
{
int pickType = 0;//拣货类型
int num = 0;
if(spg.LocationCode.StartsWith("E-") && spg.LocationCode.Length==7 && int.TryParse(spg.LocationCode.Substring(2, 2), out num) && num <= 10)
{
//1-10排
pickType = 11;
}
else if(spg.LocationCode.StartsWith("E-") && spg.LocationCode.Length == 7 && int.TryParse(spg.LocationCode.Substring(2, 2), out num) && num > 10)
{
//10排之后
pickType = 12;
}
else
{
//其它
pickType = 14;
}
var _pickUser = pickUsers.Where(r => r.PickType == pickType).FirstOrDefault();
if (_pickUser != null)
{
spg.PickUserId = _pickUser.PickUserId;
}
else
{
rmodel.Code = 0;
rmodel.Message = "Not Find Pick Type Datas";
return rmodel;
}
}
}
exportPickGoods.AddRange(singlePickGoods);
}
if (moreOPs != null)
{
if(wareHouse == "W") //同一个订单多种商品的西部统一分配给一个人拣货
{
var _pickUser = pickUsers.Where(r => r.PickType == 4).FirstOrDefault();//找到多件货的拣货人员
if (_pickUser == null)
{
rmodel.Code = 0;
rmodel.Message = "Not Find Pick Type Datas";
return rmodel;
}
var morePickGoods = moreOPs.GroupBy(r => new { r.SKU, r.NewSKU, r.LocationCode }).Select(g => new ShipOrderPickGoods { NewSKU = g.Key.NewSKU, SKU = g.Key.SKU, LocationCode = g.Key.LocationCode, Qty = g.Sum(r => r.Qty), PickUserId = _pickUser.PickUserId }).OrderBy(n => n.LocationCode);
exportPickGoods.AddRange(morePickGoods);
}
else //东部分配给
{
var _pickUser = pickUsers.Where(r => r.PickType == 13).FirstOrDefault();//找到多件货的拣货人员
if (_pickUser == null)
{
rmodel.Code = 0;
rmodel.Message = "Not Find Pick Type Datas";
return rmodel;
}
var morePickGoods = moreOPs.GroupBy(r => new { r.SKU, r.NewSKU, r.LocationCode }).Select(g => new ShipOrderPickGoods { NewSKU = g.Key.NewSKU, SKU = g.Key.SKU, LocationCode = g.Key.LocationCode, Qty = g.Sum(r => r.Qty), PickUserId = _pickUser.PickUserId }).OrderBy(n => n.LocationCode);
exportPickGoods.AddRange(morePickGoods);
}
}
//左连匹配用户名
var users = DataNew.GetListUserSelect();
var exportPickGoodsNew = from a in exportPickGoods
join b in users on a.PickUserId equals b.UserId into Temp
from c in Temp.DefaultIfEmpty()
orderby a.PickUserId
select new ShipOrderPickGoods { SKU = a.SKU, NewSKU = a.NewSKU, Qty = a.Qty, LocationCode = a.LocationCode, PickUserId = a.PickUserId, PickUserName = Temp.Select(r => r.Name).FirstOrDefault() };
if (isFG == 1)//覆盖生成,删除仓库当天生成的所有拣货单
{
DataNew.DeleteAllPickGoodsList(wareHouse);
}
if (exportPickGoodsNew != null)
{
DataTable tb = new DataTable();
tb.Columns.Add("NEWSKU", Type.GetType("System.String"));
tb.Columns.Add("SKU", Type.GetType("System.String"));
tb.Columns.Add("QTY", Type.GetType("System.Int32"));
tb.Columns.Add("LOCATION", Type.GetType("System.String"));
tb.Columns.Add("UserName", Type.GetType("System.String"));
//拣货日期
var usaTime = DateTime.Now;
foreach (var ep in exportPickGoodsNew)
{
var packGoodCode1 = "";
var packGoodCode2 = "";
var packCode=DataNew.GetGoodsPackCodeBySKU(ep.SKU);
if (packCode != null)
{
//if (!string.IsNullOrEmpty(packCode.GoodsCode) && !string.IsNullOrEmpty(packCode.TypeCode))
//{
// if (packCode.GoodsCode.Contains("-"))
// {
// var goodCodes = packCode.GoodsCode.Split('-');
// packGoodCode1 = (goodCodes[0].Length >= 6 ? goodCodes[0] : goodCodes[1]) + (packCode.TypeCode.StartsWith("000") ? packCode.TypeCode.Substring(packCode.TypeCode.Length - 3, 3) : packCode.TypeCode) + (packCode.BoxRate.HasValue ? packCode.BoxRate.Value.ToString("000") : "001");
// }
// else
// {
// packGoodCode1 = packCode.GoodsCode + (packCode.TypeCode.StartsWith("000") ? packCode.TypeCode.Substring(packCode.TypeCode.Length - 3, 3) : packCode.TypeCode) + (packCode.BoxRate.HasValue ? packCode.BoxRate.Value.ToString("000") : "001");
// }
//}
//if (!string.IsNullOrEmpty(packCode.GoodsOldCode) && !string.IsNullOrEmpty(packCode.TypeCode))
//{
// if (packCode.GoodsOldCode.Contains("-"))
// {
// var goodCodes = packCode.GoodsOldCode.Split('-');
// packGoodCode2 = (goodCodes[0].Length >= 6 ? goodCodes[0] : goodCodes[1]) + (packCode.TypeCode.StartsWith("000") ? packCode.TypeCode.Substring(packCode.TypeCode.Length - 3, 3) : packCode.TypeCode) + (packCode.BoxRate.HasValue ? packCode.BoxRate.Value.ToString("000") : "001");
// }
// else
// {
// packGoodCode2 = packCode.GoodsOldCode + (packCode.TypeCode.StartsWith("000") ? packCode.TypeCode.Substring(packCode.TypeCode.Length - 3, 3) : packCode.TypeCode) + (packCode.BoxRate.HasValue ? packCode.BoxRate.Value.ToString("000") : "001");
// }
//}
packGoodCode1 = packCode.Barcode;
}
DataRow row = tb.NewRow();
row["NEWSKU"] = ep.NewSKU;
row["SKU"] = ep.SKU;
row["QTY"] = ep.Qty;
row["LOCATION"] = ep.LocationCode;
row["UserName"] = ep.PickUserName;
tb.Rows.Add(row);
//保存拣货单数据
var pickGd = new PickGoodsInfo()
{
InDate = usaTime.Date,
WareHouse = wareHouse,
NewSKU = ep.NewSKU,
SKU = ep.SKU,
PickQty = ep.Qty,
ScanQty = 0,
LocationCode = ep.LocationCode,
PickUserId = ep.PickUserId,
PackGoodCode=packGoodCode1,
PackGoodCode2=packGoodCode2,
};
DataNew.SavePickGoodsInfoData(pickGd);
}
TableColumnCollection listColumns = new TableColumnCollection();
listColumns.Add("NEWSKU", "NEW SKU", DbType.String, "");
listColumns.Add("SKU", "SKU", DbType.String, "");
listColumns.Add("QTY", "QTY", DbType.Int32, "");
listColumns.Add("LOCATION", "LOCATION", DbType.String, "");
listColumns.Add("UserName", "UserName", DbType.String, "");
MicrosoftExcel obj2 = new MicrosoftExcel();
var filePath = obj2.Export(tb, listColumns);
var trayMaxVolume = DataNew.GetTrayMaxVolumeDatas(wareHouse);
var trayVolume = trayMaxVolume == null ? 0.6m : trayMaxVolume.MaxVolume;//无数据默认0.6m³
var pickUserIds = exportPickGoodsNew.Select(r => r.PickUserId.Value).Distinct();
foreach ( var pickUserId in pickUserIds)
{
//获取每个人拣货的总立方
var solid = DataNew.GetUserPickGoodsTotalSolid(usaTime, pickUserId);
if (solid <= 0)
continue;
//假设每个托盘的拣货立方是0.6m³,计算出每个人总共需要的托盘数,在计算出来的托盘数上,冗余一倍
var trayCount =(int)Math.Ceiling(solid / trayVolume) * 2;//计算的托盘数向上取整,再*2
//新增拣货用户的托盘码
for(int i = 0; i < trayCount; i++)
{
var mde = new TrayInfo()
{
InDate = usaTime,
WareHouse = wareHouse,
PrintState = 0,
TrayUserId = pickUserId,
};
DataNew.AddTrayInfo(mde);
}
}
//订单生成拣货列表之后,将状态改为打印中状态
DataNew.UpdateOrderPostInfoToPrinting(string.Join(",", ops.Select(r => r.ID)));
rmodel.Code = 1;
rmodel.Message = filePath;
return rmodel;
}
else
{
rmodel.Code = 0;
rmodel.Message = "Not Find Datas";
return rmodel;
}
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Error:" + ex.Message;
return rmodel;
}
}
/// <summary>
/// 根据搜索条件查询数据生成拣货单
/// </summary>
/// <param name="searchCode"></param>
/// <param name="searchType"></param>
/// <param name="wareHouse"></param>
/// <param name="postState"></param>
/// <param name="printState"></param>
/// <param name="sDate"></param>
/// <param name="eDate"></param>
/// <param name="isFG">是否覆盖生成拣货单</param>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel MakePickGoodListForAllDatasNew(string searchCode, int searchType, string wareHouse, int postState, int printState, DateTime? sDate, DateTime? eDate, int isFG)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
//当前操作用户权限限定,只能美国仓库员工导出自己仓库的数据
var userId = Convert.ToInt32(Session["UserId"]);
var ops = DataNew.GetOrderPostInfoDatasBySearch(searchCode, searchType, wareHouse, postState, printState, sDate, eDate);
var singleOPs = new List<OrderPostInfo>();//单个订单只有一种商品
var moreOPs = new List<OrderPostInfo>();//单个订单有多种商品,需要单独放到最后,一起拣货
var sameGoodOPs=new List<OrderPostInfo>();//同一个订单,同一种商品,多个数量,分配在不同库位
if (ops == null)
{
rmodel.Code = 0;
rmodel.Message = "Not Find Datas";
return rmodel;
}
#region 检查所有的发货订单的面单地址和SKU信息是否完整
var _corderCodes = ops.Select(r => r.OrderCode).Distinct().ToList();
foreach (var orderCode in _corderCodes)
{
var tracks = DataNew.GetDT_TrackCodeApplyNewsByOrderCode(orderCode);
if (tracks == null)
{
rmodel.Code = 0;
rmodel.Message = "订单号:" + orderCode + "未找到发货面单信息,请检查";
return rmodel;
}
foreach (var track in tracks)
{
if (string.IsNullOrEmpty(track.LabelUrl) || !track.LabelUrl.Contains(track.TrackCode))
{
rmodel.Code = 0;
rmodel.Message = "订单号:" + orderCode + ",跟踪码:" + track.TrackCode + " 面单文件地址为空或者与跟踪码不一致,请重新上传此面单";
return rmodel;
}
else if (string.IsNullOrEmpty(track.SKU))
{
rmodel.Code = 0;
rmodel.Message = "订单号:" + orderCode + ",跟踪码:" + track.TrackCode + " 货物SKU信息为空请检查";
return rmodel;
}
}
}
#endregion
foreach (var op in ops)
{
//查找是否存在订单号相同SKU不同的订单如果存在则说明这个订单包含多种商品
var _op = ops.Where(r => r.OrderCode == op.OrderCode && r.SKU!=op.SKU && r.ID != op.ID).FirstOrDefault();
if (_op == null)
{
//同一个订单相同的SKU并且在不同的库位
var _op2 = ops.Where(r => r.OrderCode == op.OrderCode && r.SKU == op.SKU && r.LocationCode != op.LocationCode && r.ID != op.ID).FirstOrDefault();
if (_op2 != null)
{
sameGoodOPs.Add(op);
}
else
{
singleOPs.Add(op);
}
}
else
{
moreOPs.Add(op);
}
}
var exportPickGoods = new List<ShipOrderPickGoods>();
//获取仓库所有的拣货类型以及拣货人员
var pickUsers = DataNew.GetStorePostionPickers(wareHouse);
//西部拣货规则类型11-16 row(A layer)(1-16排A层)21-16 row(B,C,D layer)(1-16排B层)3After row 1616排之后4Multiple Goods多件货5Others其它
//排
var pai = new List<string>() { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16" };
//层
var ceng = new List<string>() { "B", "C", "D" };
if (singleOPs != null)
{
var singlePickGoods = singleOPs.GroupBy(r => new { r.SKU, r.NewSKU, r.LocationCode }).Select(g => new ShipOrderPickGoods { NewSKU = g.Key.NewSKU, SKU = g.Key.SKU, LocationCode = g.Key.LocationCode, Qty = g.Sum(r => r.Qty) }).OrderBy(n => n.LocationCode).ToList();
if (wareHouse == "W")//西部仓库
{
foreach (var spg in singlePickGoods)
{
if (spg.LocationCode == "TestLocation") //每天测试专用库位,分配给指定人员,只在西部仓库测试
{
spg.PickUserId = 238;
continue;
}
int num = 0;
int pickType = 0;//拣货类型
if (string.IsNullOrEmpty(spg.LocationCode))
{
//spg.PickUserId = 103;//Eddie
pickType = 5;
}
else if (spg.LocationCode.ToUpper().StartsWith("000A"))
{
//000开头A层 Jose
pickType = 1;
}
else if (spg.LocationCode.ToUpper().StartsWith("000B") || spg.LocationCode.ToUpper().StartsWith("000C") || spg.LocationCode.ToUpper().StartsWith("000D"))
{
//000开头B/C/D层 Silvestre
pickType = 2;
}
else if (pai.Contains(spg.LocationCode.Substring(0, 2)) && spg.LocationCode.Substring(2, 1) == "A")
{
//0-16排并且是A层(第一层)
//spg.PickUserId = 164;//Jose
pickType = 1;
}
else if (pai.Contains(spg.LocationCode.Substring(0, 2)) && ceng.Contains(spg.LocationCode.Substring(2, 1)))
{
//0-16排并且是BCD层(2,3,4层)
//spg.PickUserId = 165;//Silvestre
pickType = 2;
}
else if (int.TryParse(spg.LocationCode.Substring(0, 2), out num) && num > 16)
{
//17排以及之后表示地面由Ricardo负责
//spg.PickUserId = 166;//由Ricardo
pickType = 3;
}
else
{
//spg.PickUserId = 103;//Eddie
pickType = 5;
}
var _pickUser = pickUsers.Where(r => r.PickType == pickType).FirstOrDefault();
if (_pickUser != null)
{
spg.PickUserId = _pickUser.PickUserId;
}
else
{
rmodel.Code = 0;
rmodel.Message = "Not Find Pick Type Datas";
return rmodel;
}
}
}
else //东部仓库
{
//东部拣货规则类型111-10 row1-10排12After row 1010排之后13Multiple Goods多件货14Others其它
foreach (var spg in singlePickGoods)
{
int pickType = 0;//拣货类型
int num = 0;
if (spg.LocationCode.StartsWith("E-") && spg.LocationCode.Length == 7 && int.TryParse(spg.LocationCode.Substring(2, 2), out num) && num <= 10)
{
//1-10排
pickType = 11;
}
else if (spg.LocationCode.StartsWith("E-") && spg.LocationCode.Length == 7 && int.TryParse(spg.LocationCode.Substring(2, 2), out num) && num > 10)
{
//10排之后
pickType = 12;
}
else
{
//其它
pickType = 14;
}
var _pickUser = pickUsers.Where(r => r.PickType == pickType).FirstOrDefault();
if (_pickUser != null)
{
spg.PickUserId = _pickUser.PickUserId;
}
else
{
rmodel.Code = 0;
rmodel.Message = "Not Find Pick Type Datas";
return rmodel;
}
}
}
exportPickGoods.AddRange(singlePickGoods);
}
if (moreOPs != null)
{
if (wareHouse == "W") //同一个订单多种商品的西部统一分配给一个人拣货
{
var _pickUser = pickUsers.Where(r => r.PickType == 4).FirstOrDefault();//找到多件货的拣货人员
if (_pickUser == null)
{
rmodel.Code = 0;
rmodel.Message = "Not Find Pick Type Datas";
return rmodel;
}
var morePickGoods = moreOPs.GroupBy(r => new { r.SKU, r.NewSKU, r.LocationCode }).Select(g => new ShipOrderPickGoods { NewSKU = g.Key.NewSKU, SKU = g.Key.SKU, LocationCode = g.Key.LocationCode, Qty = g.Sum(r => r.Qty), PickUserId = _pickUser.PickUserId }).OrderBy(n => n.LocationCode);
exportPickGoods.AddRange(morePickGoods);
}
else //东部分配给
{
var _pickUser = pickUsers.Where(r => r.PickType == 13).FirstOrDefault();//找到多件货的拣货人员
if (_pickUser == null)
{
rmodel.Code = 0;
rmodel.Message = "Not Find Pick Type Datas";
return rmodel;
}
var morePickGoods = moreOPs.GroupBy(r => new { r.SKU, r.NewSKU, r.LocationCode }).Select(g => new ShipOrderPickGoods { NewSKU = g.Key.NewSKU, SKU = g.Key.SKU, LocationCode = g.Key.LocationCode, Qty = g.Sum(r => r.Qty), PickUserId = _pickUser.PickUserId }).OrderBy(n => n.LocationCode);
exportPickGoods.AddRange(morePickGoods);
}
}
if (sameGoodOPs != null)
{
//已经判断过的订单
var orderCodes = new List<string>();
var samePickGoods = new List<ShipOrderPickGoods>();
sameGoodOPs = sameGoodOPs.OrderBy(r => r.OrderCode).ToList();
if (wareHouse == "W")//西部仓库
{
foreach(var sg in sameGoodOPs)
{
//已经判断过了订单直接跳过
if (orderCodes.Contains(sg.OrderCode))
continue;
//获取到该订单号的所有拣货数据
var smOrders = sameGoodOPs.Where(r => r.OrderCode == sg.OrderCode).ToList();
//逐个判断拣货库位属于哪个拣货人员
int isEddie = 0, isJose = 0, isSilvestre = 0, isRicardo = 0;
foreach (var or in smOrders)
{
int num = 0;
if (string.IsNullOrEmpty(or.LocationCode))
{
//spg.PickUserId = 103;//Eddie
isEddie = 1;
}
else if (or.LocationCode.ToUpper().StartsWith("000A"))
{
//000开头A层 Jose
isJose = 1;
}
else if (or.LocationCode.ToUpper().StartsWith("000B") || or.LocationCode.ToUpper().StartsWith("000C") || or.LocationCode.ToUpper().StartsWith("000D"))
{
//000开头B/C/D层 Silvestre
isSilvestre = 1;
}
else if (pai.Contains(or.LocationCode.Substring(0, 2)) && or.LocationCode.Substring(2, 1) == "A")
{
//0-16排并且是A层(第一层)
//spg.PickUserId = 164;//Jose
isJose = 1;
}
else if (pai.Contains(or.LocationCode.Substring(0, 2)) && ceng.Contains(or.LocationCode.Substring(2, 1)))
{
//0-16排并且是BCD层(2,3,4层)
//spg.PickUserId = 165;//Silvestre
isSilvestre = 1;
}
else if (int.TryParse(or.LocationCode.Substring(0, 2), out num) && num > 16)
{
//17排以及之后表示地面由Ricardo负责
//spg.PickUserId = 166;//由Ricardo
isRicardo = 1;
}
else
{
//spg.PickUserId = 103;//Eddie
isEddie = 1;
}
}
//最后归属的拣货人默认是Eddie
//有BCD层的优先分配给Silvestre,其次Eddie,Ricardo,Jose
int lastPickUserid = 103;//Eddie
if (isSilvestre == 1)
lastPickUserid = 165;//Silvestre
else if (isEddie == 1)
lastPickUserid = 103;//Eddie
else if (isRicardo == 1)
lastPickUserid = 166;//Ricardo
else if (isJose == 1)
lastPickUserid = 164;//Jose
foreach (var or in smOrders)
{
var shorpg = new ShipOrderPickGoods()
{
NewSKU = or.NewSKU,
SKU = or.SKU,
Qty = or.Qty,
LocationCode = or.LocationCode,
PickUserId = lastPickUserid
};
samePickGoods.Add(shorpg);
}
orderCodes.Add(sg.OrderCode);
}
exportPickGoods.AddRange(samePickGoods);
}
else //东部仓库
{
foreach(var sg in sameGoodOPs)
{
//已经判断过了订单直接跳过
if (orderCodes.Contains(sg.OrderCode))
continue;
//获取到该订单号的所有拣货数据
var smOrders = sameGoodOPs.Where(r => r.OrderCode == sg.OrderCode).ToList();
int isNicolas = 0; int isGabi = 0;
foreach (var or in smOrders)
{
int num = 0;
if (or.LocationCode.StartsWith("E-") && or.LocationCode.Length == 7 && int.TryParse(or.LocationCode.Substring(2, 2), out num) && num <= 10)
{
//1-10排
isGabi = 1;
}
else if (or.LocationCode.StartsWith("E-") && or.LocationCode.Length == 7 && int.TryParse(or.LocationCode.Substring(2, 2), out num) && num > 10)
{
//10排之后
isNicolas = 1;
}
else
{
//其它
isNicolas = 1;
}
}
int lastPickUserid = 176;//Nicolas
if (isNicolas == 1)
lastPickUserid = 176;
else if (isGabi == 1)
lastPickUserid = 220;
foreach (var or in smOrders)
{
var shorpg = new ShipOrderPickGoods()
{
NewSKU = or.NewSKU,
SKU = or.SKU,
Qty = or.Qty,
LocationCode = or.LocationCode,
PickUserId = lastPickUserid
};
samePickGoods.Add(shorpg);
}
orderCodes.Add(sg.OrderCode);
}
exportPickGoods.AddRange(samePickGoods);
}
}
//把三种情况获取的值进行分组汇总
var _exportPickGoods = exportPickGoods.GroupBy(r => new { r.SKU, r.NewSKU, r.LocationCode, r.PickUserId }).Select(g => new ShipOrderPickGoods { SKU = g.Key.SKU, NewSKU = g.Key.NewSKU, LocationCode = g.Key.LocationCode, PickUserId = g.Key.PickUserId, Qty = g.Sum(r => r.Qty) }).ToList();
//左连匹配用户名
var users = DataNew.GetListUserSelect();
var exportPickGoodsNew = from a in _exportPickGoods
join b in users on a.PickUserId equals b.UserId into Temp
from c in Temp.DefaultIfEmpty()
orderby a.PickUserId
select new ShipOrderPickGoods { SKU = a.SKU, NewSKU = a.NewSKU, Qty = a.Qty, LocationCode = a.LocationCode, PickUserId = a.PickUserId, PickUserName = Temp.Select(r => r.Name).FirstOrDefault() };
if (isFG == 1)//覆盖生成,删除仓库当天生成的所有拣货单
{
DataNew.DeleteAllPickGoodsList(wareHouse);
}
if (exportPickGoodsNew != null)
{
DataTable tb = new DataTable();
tb.Columns.Add("NEWSKU", Type.GetType("System.String"));
tb.Columns.Add("SKU", Type.GetType("System.String"));
tb.Columns.Add("QTY", Type.GetType("System.Int32"));
tb.Columns.Add("LOCATION", Type.GetType("System.String"));
tb.Columns.Add("UserName", Type.GetType("System.String"));
//拣货日期
var usaTime = DateTime.Now;
foreach (var ep in exportPickGoodsNew)
{
var packGoodCode1 = "";
var packGoodCode2 = "";
var packCode = DataNew.GetGoodsPackCodeBySKU(ep.SKU);
if (packCode != null)
{
packGoodCode1 = packCode.Barcode;
}
DataRow row = tb.NewRow();
row["NEWSKU"] = ep.NewSKU;
row["SKU"] = ep.SKU;
row["QTY"] = ep.Qty;
row["LOCATION"] = ep.LocationCode;
row["UserName"] = ep.PickUserName;
tb.Rows.Add(row);
//保存拣货单数据
var pickGd = new PickGoodsInfo()
{
InDate = usaTime.Date,
WareHouse = wareHouse,
NewSKU = ep.NewSKU,
SKU = ep.SKU,
PickQty = ep.Qty,
ScanQty = 0,
LocationCode = ep.LocationCode,
PickUserId = ep.PickUserId,
PackGoodCode = packGoodCode1,
PackGoodCode2 = packGoodCode2,
};
DataNew.SavePickGoodsInfoData(pickGd);
}
TableColumnCollection listColumns = new TableColumnCollection();
listColumns.Add("NEWSKU", "NEW SKU", DbType.String, "");
listColumns.Add("SKU", "SKU", DbType.String, "");
listColumns.Add("QTY", "QTY", DbType.Int32, "");
listColumns.Add("LOCATION", "LOCATION", DbType.String, "");
listColumns.Add("UserName", "UserName", DbType.String, "");
MicrosoftExcel obj2 = new MicrosoftExcel();
var filePath = obj2.Export(tb, listColumns);
var trayMaxVolume = DataNew.GetTrayMaxVolumeDatas(wareHouse);
var trayVolume = trayMaxVolume == null ? 0.6m : trayMaxVolume.MaxVolume;//无数据默认0.6m³
var pickUserIds = exportPickGoodsNew.Select(r => r.PickUserId.Value).Distinct();
foreach (var pickUserId in pickUserIds)
{
//获取每个人拣货的总立方
var solid = DataNew.GetUserPickGoodsTotalSolid(usaTime, pickUserId);
if (solid <= 0)
continue;
//假设每个托盘的拣货立方是0.6m³,计算出每个人总共需要的托盘数,在计算出来的托盘数上,冗余一倍
var trayCount = (int)Math.Ceiling(solid / trayVolume) * 2;//计算的托盘数向上取整,再*2
//新增拣货用户的托盘码
for (int i = 0; i < trayCount; i++)
{
var mde = new TrayInfo()
{
InDate = usaTime,
WareHouse = wareHouse,
PrintState = 0,
TrayUserId = pickUserId,
};
DataNew.AddTrayInfo(mde);
}
}
//订单生成拣货列表之后,将状态改为打印中状态
DataNew.UpdateOrderPostInfoToPrinting(string.Join(",", ops.Select(r => r.ID)));
rmodel.Code = 1;
rmodel.Message = filePath;
return rmodel;
}
else
{
rmodel.Code = 0;
rmodel.Message = "Not Find Datas";
return rmodel;
}
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Error:" + ex.Message;
return rmodel;
}
}
/// <summary>
/// 导出temu平台订单的跟踪码图片并且按照sku+仓库+库位重命名
/// </summary>
/// <param name="wareHouse"></param>
/// <param name="sDate"></param>
/// <param name="eDate"></param>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel DownLoadTemuTrackCodeImg(string wareHouse, DateTime? sDate, DateTime? eDate)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
var ops = DataNew.GetTemuOrderPostInfoDatasBySearch(wareHouse, sDate, eDate);
if (ops == null)
{
rmodel.Code = 0;
rmodel.Message = "Not Find Datas";
return rmodel;
}
#region 检查所有的发货订单的面单地址和SKU信息是否完整
var _corderCodes = ops.Select(r => r.OrderCode).Distinct().ToList();
foreach (var orderCode in _corderCodes)
{
var tracks = DataNew.GetDT_TrackCodeApplyNewsByOrderCode(orderCode);
if (tracks == null)
{
rmodel.Code = 0;
rmodel.Message = "订单号:" + orderCode + "未找到发货面单信息,请检查";
return rmodel;
}
foreach (var track in tracks)
{
if (string.IsNullOrEmpty(track.LabelUrl) || !track.LabelUrl.Contains(track.TrackCode))
{
rmodel.Code = 0;
rmodel.Message = "订单号:" + orderCode + ",跟踪码:" + track.TrackCode + " 面单文件地址为空或者与跟踪码不一致,请重新上传此面单";
return rmodel;
}
else if (string.IsNullOrEmpty(track.SKU))
{
rmodel.Code = 0;
rmodel.Message = "订单号:" + orderCode + ",跟踪码:" + track.TrackCode + " 货物SKU信息为空请检查";
return rmodel;
}
}
}
#endregion
var path = System.AppDomain.CurrentDomain.BaseDirectory + "ServerCookies/";
var fileName = wareHouse + DateTime.Now.ToString("MMdd");
//如果文件夹已经存在,删除文件夹以及文件
var filePath = path + fileName;
if (Directory.Exists(filePath))
{
string[] files = Directory.GetFiles(filePath);//获取文件夹中所有文件
foreach (string file in files)
{
File.Delete(file);
}
Directory.Delete(filePath, true);
}
//创建文件夹
Directory.CreateDirectory(filePath);
var sdOPs = new List<string>();
foreach(var op in ops)
{
//同一个订单号,存在多条数据,说明这个订单里面包含多个商品或者商品在不同库位,需要人工手动处理订单重命名
var _Op = ops.Where(r => r.OrderCode == op.OrderCode && r.ID != op.ID).FirstOrDefault();
if (_Op != null)
{
sdOPs.Add(_Op.OrderCode);
continue;
}
var trackCodes = DataNew.GetTemuTrackCodeFileDatas(op.OrderCode);
if (trackCodes == null)
{
throw new Exception("订单号:" + op.OrderCode + "未找到发货面单信息,请检查");
}
foreach(var track in trackCodes)
{
if (string.IsNullOrEmpty(track.LabelUrl) || !track.LabelUrl.Contains(track.TrackCode))
{
throw new Exception("订单号:" + op.OrderCode + ",跟踪码:" + track.TrackCode + " 面单文件地址为空或者与跟踪码不一致,请重新上传此面单");
}
else if (string.IsNullOrEmpty(track.SKU))
{
throw new Exception("订单号:" + op.OrderCode + ",跟踪码:" + track.TrackCode + " 货物SKU信息为空请检查");
}
var trackFile = System.AppDomain.CurrentDomain.BaseDirectory + "attached/";
if (track.ExpressName.ToUpper().Contains("FEDEX"))
{
trackFile += "fedex/" + track.LabelUrl;
}
else if (track.ExpressName.ToUpper().Contains("UPS"))
{
trackFile += "ups/" + track.LabelUrl;
}
else if (track.ExpressName.ToUpper().Contains("USPS"))
{
trackFile += "usps/" + track.LabelUrl;
}
else if (track.ExpressName.Contains("客户自提"))
{
trackFile += "khzt/" + track.LabelUrl;
}
if (!File.Exists(trackFile))
{
throw new Exception("订单号:" + op.OrderCode + ",跟踪码:" + track.TrackCode + " 面单文件不存在,请重新上传");
}
//文件后缀名
var fileExtion = track.LabelUrl.Substring(track.LabelUrl.LastIndexOf('.'));
//重命名sku+库位
var newTrackFileName = track.SKU + "+" + op.LocationCode;
var lastTrackFileName = "";//最后保存的重命名文件地址
int _index = 0;
while (true)
{
//重命名之后的完整文件地址
var newFilePath = filePath + "/" + newTrackFileName + (_index == 0 ? "" : ("(" + _index.ToString())) + fileExtion;
//判断最后的完整的重命名地址是否重复,重复的话数字加1
if (File.Exists(newFilePath))
{
_index++;
continue;
}
else
{
lastTrackFileName = newFilePath;
break;
}
}
File.Copy(trackFile, lastTrackFileName);//把面单文件复制到导出的目标文件夹
}
}
//压缩文件夹地址
var zipFilePath = filePath + ".zip";
if (File.Exists(zipFilePath))
File.Delete(zipFilePath);
System.IO.Compression.ZipFile.CreateFromDirectory(filePath, zipFilePath);
if (Directory.Exists(filePath))
{
string[] files = Directory.GetFiles(filePath);//获取文件夹中所有文件
foreach (string file in files)
{
File.Delete(file);
}
Directory.Delete(filePath, true);
}
rmodel.Code = 1;
rmodel.Message = (sdOPs != null && sdOPs.Count > 0) ? ("订单号:" + string.Join(",", sdOPs.Distinct()) + "请手动生成") : "";
rmodel.Datas = "ServerCookies/" + fileName + ".zip";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Error:" + ex.Message;
}
return rmodel;
}
[WebMethod(EnableSession = true)]
public JsonModel<List<TrayInfo>> GetTrayInfoDatas(int userId, DateTime? inDate, string searchCode, string wareHouse, int state, int PageIndex, int PageSize)
{
PagesNew.Login(base.Session);
var rmodel=new JsonModel<List<TrayInfo>>();
var _userid = Convert.ToInt32(Session["UserId"]);
if (_userid == 103)
{
wareHouse = "W";
}
else if (_userid == 176)
{
wareHouse="E";
}
int rowCount = 0;
rmodel.DataSource = DataNew.GetTrayInfoDatas(inDate, userId,_userid, searchCode, wareHouse, state, PageIndex, PageSize, out rowCount);
rmodel.RowCount = rowCount;
return rmodel;
}
[WebMethod(EnableSession = true)]
public APIReturnModel SaveTrayInfoData(TrayInfo md)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
DataNew.SaveTrayInfo(md);
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
[WebMethod(EnableSession = true)]
public APIReturnModel DeleteTrayInfo(int id)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
var userid = Convert.ToInt32(Session["UserId"]);
if (userid != 1)
{
rmodel.Code = 0;
rmodel.Message = "No deletion permission";
return rmodel;
}
try
{
DataNew.DeleteTrayInfo(id);
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
[WebMethod(EnableSession = true)]
public APIReturnModel UpdateTrayInfo(int id)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
DataNew.UpdateTrayInfo(id);
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
[WebMethod(EnableSession = true)]
public APIReturnModel AddTrayInfo(int count,int userid)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
//var userid = Convert.ToInt32(Session["UserId"]);
var userInfo=DataNew.GetUserInfoByUserId(userid);
if(userInfo==null || (userInfo.WorkDesc!="东仓" && userInfo.WorkDesc != "西仓"))
{
rmodel.Code = 0;
rmodel.Message = "No permission to add code";
return rmodel;
}
var warehouse = userInfo.WorkDesc == "东仓" ? "E" : "W";
try
{
for (var i = 0; i < count; i++)
{
var mde = new TrayInfo()
{
InDate = DateTime.Now.AddHours(-12).Date,
WareHouse = warehouse,
PrintState = 0,
TrayUserId = userid,
};
DataNew.AddTrayInfo(mde);
}
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
[WebMethod(EnableSession = true)]
public JsonModel<List<StorePostionPicker>> GetStorePostionPickerDatas(string wareHouse, int PageIndex, int PageSize)
{
PagesNew.Login(base.Session);
var rmodel = new JsonModel<List<StorePostionPicker>>();
int rowCount = 0;
rmodel.DataSource = DataNew.GetPositionPickerDatas(wareHouse, PageIndex, PageSize, out rowCount);
rmodel.RowCount = rowCount;
return rmodel;
}
[WebMethod(EnableSession = true)]
public APIReturnModel SavePositionPickerData(StorePostionPicker md)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
var code = DataNew.SavePositionPicker(md);
if (code == 0)
{
rmodel.Code = 0;
rmodel.Message = "Data already exists";
}
else
{
rmodel.Code = 1;
rmodel.Message = "Success";
}
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
[WebMethod(EnableSession = true)]
public APIReturnModel DeletePositionPickerData(int id)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
DataNew.DeletePositionPicker(id);
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
/// <summary>
/// 获取拣货单数据
/// </summary>
/// <param name="inDate"></param>
/// <param name="sku"></param>
/// <param name="wareHouse"></param>
/// <param name="userid"></param>
/// <param name="PageIndex"></param>
/// <param name="PageSize"></param>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public JsonModel<List<PickGoodsInfo>> GetPickGoodsInfoDatas(DateTime? inDate, string sku, string wareHouse, int userid, int PageIndex, int PageSize)
{
PagesNew.Login(base.Session);
var rmodel = new JsonModel<List<PickGoodsInfo>>();
int rowCount = 0;
rmodel.DataSource = DataNew.GetPickGoodsInfosData(inDate, wareHouse, sku,userid, PageIndex, PageSize, out rowCount);
rmodel.RowCount = rowCount;
return rmodel;
}
/// <summary>
/// 删除拣货单数据
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel DeletePickGoodsInfoDatas(string ids)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
DataNew.DeletePickGoodsInfoForIds(ids.TrimEnd(','));
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch(Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Delete Fail:" + ex.Message;
}
return rmodel;
}
/// <summary>
/// 获取拣货工信息
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public List<JC_UserInfo> GetPickUserDatas()
{
PagesNew.Login(base.Session);
return DataNew.GetPickUserDatas();
}
/// <summary>
/// 扫码托盘码时,获取托盘拣货打印数据
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public JsonModel<List<TrayGoodsDetailModel>> GetTrayGoodsDetailPrintDatas(string trayCode)
{
PagesNew.Login(base.Session);
var userid = Convert.ToInt32(Session["UserId"]);
var rmodel = new JsonModel<List<TrayGoodsDetailModel>>();
if(userid!=103 && userid != 176 && userid!=238)
{
rmodel.DataSource = null;
rmodel.RowCount = -1;
return rmodel;
}
var rdatas = DataNew.GetTrayGoodsDetailPrintDatas(trayCode);
rmodel.DataSource = rdatas;
rmodel.RowCount = rdatas != null ? rdatas.Count : 0;
//var pUserid = DataNew.GetTrayCodeBelongUserid(trayCode);
//if((pUserid==0 || userid != pUserid) && userid!=103 && userid!=176)//当前扫描的托盘码不属于该用户
//{
// rmodel.DataSource = null;
// rmodel.RowCount = -1;
//}
//else
//{
// var rdatas = DataNew.GetTrayGoodsDetailPrintDatas(trayCode);
// rmodel.DataSource = rdatas;
// rmodel.RowCount = rdatas != null ? rdatas.Count : 0;
//}
return rmodel;
}
/// <summary>
/// 扫码托盘码时,获取托盘拣货打印数据
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel GetPrintedTrayGoodsDetailDatas(string trayCode)
{
PagesNew.Login(base.Session);
var userid = Convert.ToInt32(Session["UserId"]);
var rmodel = new APIReturnModel();
var pUserid = DataNew.GetTrayCodeBelongUserid(trayCode);
if (userid!=103 && userid!=176)//当前扫描的托盘码不属于该用户
{
rmodel.Code = 0;
rmodel.Message = "Your account can not print tracking code ";
}
else
{
var rdatas = DataNew.GetTrayGoodsDetailPrintDatas(trayCode);
if (rdatas != null)
{
if (rdatas.Where(r => r.PickQty > r.PrintQty).Count() > 0)
{
rmodel.Code = 0;
rmodel.Message = "Print Not Completed";
rmodel.Datas = rdatas;
}
else
{
rmodel.Code = 1;
rmodel.Message = "Print Completed";
rmodel.Datas = rdatas;
}
}
else
{
rmodel.Code = 0;
rmodel.Message = "No Datas";
rmodel.Datas = null;
}
}
return rmodel;
}
/// <summary>
/// 扫码托盘码时,获取托盘拣货打印数据
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public JsonModel<List<TrayGoodsDetailModel>> GetTrayGoodsDetailPrintDatasByTrayCodes(string trayCodes)
{
PagesNew.Login(base.Session);
var rmodel = new JsonModel<List<TrayGoodsDetailModel>>();
try
{
var userid = Convert.ToInt32(Session["UserId"]);
var rdatas = new List<TrayGoodsDetailModel>();
var tcodes = trayCodes.Split(',');
foreach (var tcode in tcodes)
{
//var pUserid = DataNew.GetTrayCodeBelongUserid(tcode);
//if (pUserid == 0 || userid != pUserid)//当前扫描的托盘码不属于该用户
//{
// continue;
//}
//else
//{
// var _rdatas = DataNew.GetTrayGoodsDetailPrintDatas(tcode);
// if (_rdatas != null)
// rdatas.AddRange(_rdatas);
//}
var _rdatas = DataNew.GetTrayGoodsDetailPrintDatas(tcode);
if (_rdatas != null)
rdatas.AddRange(_rdatas);
}
rmodel.DataSource = rdatas;
rmodel.RowCount = rdatas != null ? rdatas.Count : 0;
}
catch (Exception ex)
{
rmodel.DataSource = null;
rmodel.RowCount = -1;
}
return rmodel;
}
/// <summary>
/// 把拣货单内的数据转给其他人
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel TransferPickGoodsInfoDatasToUser(string ids,int userid)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
if (!string.IsNullOrEmpty(ids))
{
var _ids = ids.TrimEnd(',').Split(',');
foreach(var id in _ids)
{
var md = DataNew.GetPickGoodsInfoModelById(Convert.ToInt32(id));
if (md != null)
DataNew.TransferPickGoodsInfoDataToUserNew(md, userid);
}
}
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Transfer Fail:" + ex.Message;
}
return rmodel;
}
/// <summary>
/// 匹配订单跟踪码
/// </summary>
/// <param name="tpgs">已扫描的SKU需要进行匹配拣货列表以及面单</param>
/// <param name="tgoods">已扫描的托盘码中的拣货数据</param>
/// <returns></returns>
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public MatchTrackingCodeReturnModel MatchOrderTrackingCode(List<MatchScanGoodsModel> tpgs,List<TrayGoodsDetailModel> tgoods,DateTime nowDate)
{
ErrorFollow.TraceWrite("匹配面单开始tpgs:", JsonConvert.SerializeObject(tpgs), "");
PagesNew.Login(base.Session);
var rmodel = new MatchTrackingCodeReturnModel();
try
{
var userid = Convert.ToInt32(Session["UserId"]);
var userInfo = DataNew.GetUserInfoByUserId(userid);
var wareHouse = userInfo.WorkDesc == "东仓" ? "E" : "W";//判断当前用户属于哪个仓库
if (tpgs == null || tpgs.Count == 0 || tgoods == null || tgoods.Count == 0)
{
rmodel.Code = 0;
rmodel.Msg = "no datas";
rmodel.Obj = null;
return rmodel;
}
//将同样的SKU数量汇总
var matchGds = tpgs.GroupBy(r => r.SKU).Select(g => new { sku = g.Key, qty = g.Sum(r => r.ScanQty) }).ToList();
//已匹配的托盘商品数据
var matchTrayGoods = new List<MatchTrayGoodsDetailModel>();
//循环需要匹配的列表逐个去匹配已扫描托盘中的数据当匹配不到相同的SKU或者数量不对时返回错误提示
foreach (var gd in matchGds)
{
var matQty = gd.qty;//需要匹配的数量
foreach (var tg in tgoods)
{
if (tg.SKU != gd.sku || tg.PrintQty >= tg.PickQty)
continue;
else if (tg.PrintQty + matQty <= tg.PickQty)
{
var mtg = new MatchTrayGoodsDetailModel()
{
ID = tg.ID,
TrayCode = tg.TrayCode,
SKU = tg.SKU,
WareHouse = tg.WareHouse,
LocationCode = tg.LocationCode,
MatchQty = matQty
};
matchTrayGoods.Add(mtg);
tg.PrintQty += matQty;//加上已匹配的数量
matQty = 0;//需要匹配的数量全部匹配了
break;
}
else if (tg.PrintQty + matQty > tg.PickQty)
{
var canQty = tg.PickQty - tg.PrintQty;//该条数据可以用来匹配的数量
var mtg = new MatchTrayGoodsDetailModel()
{
ID = tg.ID,
TrayCode = tg.TrayCode,
SKU = tg.SKU,
WareHouse = tg.WareHouse,
LocationCode = tg.LocationCode,
MatchQty = canQty.Value
};
matchTrayGoods.Add(mtg);
tg.PrintQty = tg.PickQty;//该条数据已经被全部匹配占用了
matQty -= canQty.Value;//需要匹配数量-该条数据可以匹配的数量
}
}
//当需要匹配的数量<=0时直接进行下一条数据的匹配
if (matQty <= 0)
continue;
else //表格中所有数据都匹配一遍之后,还剩余匹配数量,说明已扫码存在的现有托盘中能够匹配的数量不够
{
rmodel.Code = 0;
rmodel.Msg = gd.sku + " scanning quantity is " + gd.qty + ", there is not enough quantity in the pallet";
rmodel.Obj = null;
return rmodel;
}
}
//已匹配的托盘商品数据为空不能在扫描的托盘中匹配到SKU
if (matchTrayGoods == null)
{
rmodel.Code = 0;
rmodel.Msg = "Scanned SKU cannot match data";
rmodel.Obj = null;
return rmodel;
}
//获取到此次所有需要匹配的SKU以及数量
var filt = "";
var filtHE = new List<string>();
var skusArr = new List<string>();
var skus = "";
foreach (var gd in matchGds)
{
filt += " and b.sku like '%" + gd.qty.ToString() + "x" + gd.sku + "%'";
filtHE.Add(gd.qty.ToString() + "x" + gd.sku);
//skus += gd.qty.ToString() + "x" + gd.sku + " ";
skusArr.Add(gd.qty.ToString() + "x" + gd.sku);
}
//skus = skus.TrimStart().TrimEnd();
skus = string.Join(" ", skusArr);
filt += " and (Len(LTRIM(RTRIM(b.sku)))=" + string.Join("+", filtHE).Length + " or Len( LTRIM(RTRIM(b.sku))) =" + skus.Length + ")";//去除头尾空格比较长度或者合并订单符合各个SKU"+"拼接的条件
//去匹配符合的快递单,只匹配当天的订单 //DT_TrackCodeApply中匹配包含这些商品和对应数量的跟踪码
var magd = DataNew.MatchGoodsTrackingCode(filt, wareHouse, nowDate);
//货物编码存在新老码的情况,如果当前的编码没有匹配到,切换另外一个编码匹配
if (magd == null)
{
var filt2 = "";
var filtHE2 = new List<string>();
var skusArr2 = new List<string>();
var skus2 = "";
foreach (var gd in matchGds) //循环每个SKU 去得到另一个编码
{
var goodCode = DataNew.GetGoodsCodeBySKU(gd.sku);
if (string.IsNullOrEmpty(goodCode)) //没有另一个编码还是用之前的sku
{
filt2 += " and b.sku like '%" + gd.qty.ToString() + "x" + gd.sku + "%'";
filtHE2.Add(gd.qty.ToString() + "x" + gd.sku);
skusArr2.Add(gd.qty.ToString() + "x" + gd.sku);
}
else
{
filt2 += " and b.sku like '%" + gd.qty.ToString() + "x" + goodCode + "%'";
filtHE2.Add(gd.qty.ToString() + "x" + goodCode);
skusArr2.Add(gd.qty.ToString() + "x" + goodCode);
}
}
skus2 = string.Join(" ", skusArr2);
filt2 += " and (Len(LTRIM(RTRIM(b.sku)))=" + string.Join("+", filtHE2).Length + " or Len( LTRIM(RTRIM(b.sku))) =" + skus2.Length + ")";//去除头尾空格比较长度或者合并订单符合各个SKU"+"拼接的条件
magd = DataNew.MatchGoodsTrackingCode(filt2, wareHouse, nowDate);
}
if (magd != null)
{
//if (magd.ExpressName.ToUpper().Contains("FEDEX"))
//{
// magd.LabelUrl = "../attached/fedex/" + magd.LabelUrl;
//}
//else if (magd.ExpressName.ToUpper().Contains("UPS"))
//{
// magd.LabelUrl = "../attached/ups/" + magd.LabelUrl;
//}
//else if (magd.ExpressName.ToUpper().Contains("USPS"))
//{
// magd.LabelUrl = "../attached/usps/" + magd.LabelUrl;
//}
//else if (magd.ExpressName.Contains("客户自提"))
//{
// magd.LabelUrl = "../attached/khzt/" + magd.LabelUrl;
//}
if (magd.ExpressName.ToUpper().Contains("FEDEX"))
{
magd.LabelUrl = "https://www.kferp.net/attached/fedex/" + magd.LabelUrl;
}
else if (magd.ExpressName.ToUpper().Contains("UPS"))
{
magd.LabelUrl = "https://www.kferp.net/attached/ups/" + magd.LabelUrl;
}
else if (magd.ExpressName.ToUpper().Contains("USPS"))
{
magd.LabelUrl = "https://www.kferp.net/attached/usps/" + magd.LabelUrl;
}
else if (magd.ExpressName.Contains("客户自提"))
{
magd.LabelUrl = "https://www.kferp.net/attached/khzt/" + magd.LabelUrl;
}
magd.matchTrayGoods = matchTrayGoods;
rmodel.Code = 1;
rmodel.Msg = "Match Success,Tracking Code:" + magd.TrackCode;
rmodel.Obj = magd;
ErrorFollow.TraceWrite("匹配面单成功,面单信息:", "MatchOrderTrackingCode", JsonConvert.SerializeObject(rmodel));
return rmodel;
}
else //没有完整匹配到跟踪码,推荐可能想要匹配的跟踪码
{
var filt2 = " and (";
int _index = 1;
foreach (var gd in matchGds)
{
if (_index == 1)
filt2 += " b.SKU like '%" + gd.sku + "%'";
else
filt2 += " Or b.SKU like '%" + gd.sku + "%'";
_index++;
}
filt2 += " )";
//只匹配当天的订单
var tjMaGds = DataNew.MatchGoodsTrackingCodeTJ(filt2, wareHouse,nowDate);
if (tjMaGds == null)//没有适合推荐的跟踪码
{
rmodel.Code = 0;
rmodel.Msg = "Tracking Code non-existent";
rmodel.Obj = null;
ErrorFollow.TraceWrite("推荐匹配面单,推荐面单信息:", "MatchOrderTrackingCode", "无推荐面单");
return rmodel;
}
else
{
var tjMsg = "You may want to print these Tracking Codes:";
foreach (var tjm in tjMaGds)
{
tjMsg += " " + tjm.TrackCode + ":" + tjm.QtySKU + "; ";
}
rmodel.Code = 0;
rmodel.Msg = tjMsg;
rmodel.Obj = null;
ErrorFollow.TraceWrite("推荐匹配面单,推荐面单信息:", "MatchOrderTrackingCode", JsonConvert.SerializeObject(rmodel));
return rmodel;
}
}
}
catch(Exception ex)
{
rmodel.Code = 0;
rmodel.Msg = "Error:" + ex.Message;
rmodel.Obj = null;
ErrorFollow.TraceWrite("推荐匹配面单失败:", "MatchOrderTrackingCode", ex.Message);
return rmodel;
}
}
/// <summary>
/// 打印匹配好的面单
/// </summary>
/// <param name="obj"></param>
[WebMethod(EnableSession = true)]
public APIReturnModel PrintOrderTrackingCode(MatchTrackingCodeModel obj)
{
PagesNew.Login(base.Session);
var userid = Convert.ToInt32(Session["UserId"]);
var rmodel=new APIReturnModel();
if(obj==null || obj.matchTrayGoods == null)
{
rmodel.Code = 0;
rmodel.Message = "print fail, datas error";
return rmodel;
}
else
{
//将打印匹配的商品保存到托盘商品已打印表中
foreach(var item in obj.matchTrayGoods)
{
var pg = new TrayPrintGoodsInfo()
{
TrayCode = item.TrayCode,
SKU = item.SKU,
WareHouse = item.WareHouse,
LocationCode = item.LocationCode,
PrintQty = item.MatchQty,
PrintUserId = userid,
TrackingCode=obj.TrackCode
};
DataNew.SaveTrayPrintGoodsInfo(pg);
}
//更新订单发货OrderPostInfo表的发货数量以及发货状态
foreach (var item in obj.matchTrayGoods)
{
//当前已匹配发货的商品去订单发货表中逐一匹配,修改状态
var opgs = DataNew.GetOrderPostInfoDatasForPrint(obj.OrderCode, item.SKU);
if (opgs != null)
{
var postQty = item.MatchQty;//需要发货的数量
foreach(var opg in opgs)
{
if (postQty <= 0)
break;
if (postQty < opg.Qty - opg.PostQty)
{
opg.PostQty += postQty;
opg.PostState = 1;
opg.PrintState = 1;
postQty = 0;
break;
}
else if (postQty == (opg.Qty - opg.PostQty))
{
opg.PostQty = +postQty;
opg.PostState = 2;
opg.PrintState = 2;
postQty = 0;
break;
}
else if (postQty > (opg.Qty - opg.PostQty))
{
opg.PostQty = opg.Qty;
opg.PostState = 2;
opg.PrintState = 2;
postQty = postQty - (opg.Qty.Value - opg.PostQty.Value);
continue;
}
DataNew.UpdateOrderPostInfo(opg);
}
}
}
rmodel.Code = 1;
rmodel.Message = "success";
return rmodel;
}
}
#endregion
/// <summary>
/// 打印面单,并且修改面单中包含的OrderPostInfo表的商品数据
/// </summary>
/// <param name="imgurl"></param>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel PrintMDImg(MatchTrackingCodeModel obj)
{
PagesNew.Login(base.Session);
ErrorFollow.TraceWrite("打印面单成功回调开始", "PrintMDImg", JsonConvert.SerializeObject(obj));
var userid = Convert.ToInt32(Session["UserId"]);
var rmodel = new APIReturnModel();
//imgurl = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + imgurl.Replace("..", "");
try
{
#region 连接打印机打印快递面单
//using (var webClient = new System.Net.WebClient())
//{
// byte[] imageData = webClient.DownloadData(imgurl);
// using (var ms = new System.IO.MemoryStream(imageData))
// {
// using (var image = System.Drawing.Image.FromStream(ms))
// {
// PrintDocument pd = new PrintDocument();
// pd.PrinterSettings.PrinterName = printer;// "HP LaserJet MFP M437-M443 PCL6";设置打印机名称
// //pd.DefaultPageSettings.PaperSize = new PaperSize("Custom", 800, 1200);//设置打印尺寸
// pd.PrintPage += (sender, e) =>
// {
// e.Graphics.DrawImage(image, 0, 0, pd.DefaultPageSettings.PrintableArea.Width, pd.DefaultPageSettings.PrintableArea.Height);
// };
// pd.Print();
// }
// }
//}
#endregion
#region 快递面单打印成功后,更新相关数据
if (obj == null || obj.matchTrayGoods == null)
{
rmodel.Code = 0;
rmodel.Message = "print fail, datas error";
return rmodel;
}
else
{
//快递面单打印成功后,将这条数据标记为已打印状态,以及关联的跟踪码面单数据也需要更改为打印状态
DataNew.UpdateTrackCodeApplyPrintState(obj.TrackCodeApplyID.Value);
ErrorFollow.TraceWrite("打印面单成功回调中,面单状态改为打印", "PrintMDImg", "面单ID" + obj.TrackCodeApplyID.Value.ToString());
//将打印匹配的商品保存到托盘商品已打印表中
foreach (var item in obj.matchTrayGoods)
{
var pg = new TrayPrintGoodsInfo()
{
TrayCode = item.TrayCode,
SKU = item.SKU,
WareHouse = item.WareHouse,
LocationCode = item.LocationCode,
PrintQty = item.MatchQty,
PrintUserId = userid,
TrackingCode = obj.TrackCode
};
DataNew.SaveTrayPrintGoodsInfo(pg);
}
//更新订单发货OrderPostInfo表的发货数量以及发货状态
foreach (var item in obj.matchTrayGoods)
{
//当前已匹配发货的商品去订单发货表中逐一匹配,修改状态
var opgs = DataNew.GetOrderPostInfoDatasForPrint(obj.OrderCode, item.SKU);
if (opgs != null)
{
var postQty = item.MatchQty;//需要发货的数量
foreach (var opg in opgs)
{
if (postQty <= 0)
break;
if (postQty < opg.Qty - opg.PostQty) //需要发货数量<此订单发货表数据还需要发货数量时,还是正在打印以及部分发货中状态
{
opg.PostQty += postQty;
opg.PostState = 1;
opg.PrintState = 1;
postQty = 0;
}
else if (postQty == (opg.Qty - opg.PostQty))//需要发货数量=此订单发货表数据还需要发货数量时,打印完成以及全部发货状态状态
{
opg.PostQty += postQty;
opg.PostState = 2;
opg.PrintState = 2;
postQty = 0;
}
else if (postQty > (opg.Qty - opg.PostQty))//需要发货数量>此订单发货表数据还需要发货数量时,打印完成以及全部发货状态状态,并且继续匹配下一条数据
{
opg.PostQty = opg.Qty;
opg.PostState = 2;
opg.PrintState = 2;
postQty = postQty - (opg.Qty.Value - opg.PostQty.Value);
}
DataNew.UpdateOrderPostInfo(opg);
if (postQty > 0)
continue;
else
break;
}
}
}
rmodel.Code = 1;
rmodel.Message = "success";
}
ErrorFollow.TraceWrite("打印面单成功回调结束", "PrintMDImg", JsonConvert.SerializeObject(obj));
#endregion
}
catch (Exception ex)
{
//即使上面改发货数量失败,也要将面单打印状态改变
//快递面单打印成功后,将这条数据标记为已打印状态
DataNew.UpdateTrackCodeApplyPrintState(obj.TrackCodeApplyID.Value);
ErrorFollow.TraceWrite("打印面单回调失败", "PrintMDImg", ex.Message);
rmodel.Code = 0;
rmodel.Message = ex.Message;
}
return rmodel;
}
/// <summary>
/// 获取当前电脑已连接的打印机名称
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public List<string> GetUsablePrinters()
{
List<string> PrintsList = new List<string>();
foreach (string sPrint in System.Drawing.Printing.PrinterSettings.InstalledPrinters)//获取计算机安装所有打印机的名称
{
PrintsList.Add(sPrint);
}
return PrintsList;
}
/// <summary>
/// 上传快递面单图片
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void UploadTrackCodeImages()
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
var httpRequest = System.Web.HttpContext.Current.Request;
var context = System.Web.HttpContext.Current;
try
{
int errorCount = 0;
string errorMsg = "";
if (httpRequest.Files.Count > 0)
{
for(int i = 0; i < httpRequest.Files.Count; i++)
{
var file = httpRequest.Files[i];
var fileName = file.FileName;
var trackCode = fileName.Split('.')[0];
if (string.IsNullOrEmpty(trackCode))
{
errorCount++;
errorMsg += fileName + "; ";
continue;
}
var trackName=DataNew.GetTrackCodePostName(trackCode);
if (trackName != null)
{
var imgPath = System.AppDomain.CurrentDomain.BaseDirectory+"attached/";
if (trackName.ToUpper().Contains("FEDEX"))
{
imgPath += "fedex/" + fileName;
}
else if (trackName.ToUpper().Contains("UPS"))
{
imgPath += "ups/" + fileName;
}
else if (trackName.ToUpper().Contains("USPS"))
{
imgPath += "usps/" + fileName;
}
else if (trackName.Contains("客户自提"))
{
imgPath += "khzt/" + fileName;
}
else
{
errorCount++;
errorMsg += fileName + "; ";
continue;
}
if (File.Exists(imgPath))
{
// 文件存在,删除文件
File.Delete(imgPath);
}
file.SaveAs(imgPath);
DataNew.UpdateTrackCodeImage(trackCode, fileName);
}
else
{
errorCount++;
errorMsg += fileName + "; ";
}
}
}
if (errorCount > 0)
{
rmodel.Code = 0;
rmodel.Message = errorCount + " failed uploads:" + errorMsg;
}
else
{
rmodel.Code = 1;
rmodel.Message = "success";
}
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = ex.Message;
}
var serializer = new JavaScriptSerializer();
// 设置响应的内容类型为 JSON
context.Response.ContentType = "application/json";
context.Response.Write(serializer.Serialize(rmodel));
context.Response.End();
}
/// <summary>
/// 获取托盘条形码
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public byte[] GetPalletBarcodeImg(string code)
{
BarcodeWriter barcodeWriter = new BarcodeWriter
{
Format = BarcodeFormat.CODE_128,
Options = new EncodingOptions
{
Height = 100,
Width = 300
}
};
Bitmap barcodeBitmap = barcodeWriter.Write(code);
using (MemoryStream stream = new MemoryStream())
{
barcodeBitmap.Save(stream, ImageFormat.Png);
byte[] byteArray = stream.ToArray();
return byteArray;
//HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
//response.Content = new ByteArrayContent(byteArray);
//response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
//return response; // 返回生成的条形码图片
}
}
/// <summary>
/// 获取退货条形码
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public JsonModel<List<OrderReturnBarcode>> GetOrderReturnBarcodeDatas(int searchType,string search,int printState,int PageSize, int PageIndex)
{
PagesNew.Login(base.Session);
var rmodel=new JsonModel<List<OrderReturnBarcode>>();
int rowCount = 0;
rmodel.DataSource = DataNew.GetOrderReturnBarcodeList(search, searchType, printState, PageIndex, PageSize, out rowCount);
rmodel.RowCount = rowCount;
return rmodel;
}
/// <summary>
/// 保存退货条形码
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel SaveOrderReturnBarcode(OrderReturnBarcode md)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
DataNew.SaveOrderReturnBarcodeDatas(md);
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex) {
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
/// <summary>
/// 删除退货条形码
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel DeleteOrderReturnBarcode(int id)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
DataNew.DeleteOrderReturnBarcodeDatas(id);
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
/// <summary>
/// 更新退货条形码为打印状态
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel UpdateOrderReturnBarcodePrint(int id)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
DataNew.UpdateOrderReturnBarcodePrintState(id);
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
/// <summary>
/// 获取退货条形码
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public byte[] GetOrderReturnBarcodeImg(string code)
{
BarcodeWriter barcodeWriter = new BarcodeWriter
{
Format = BarcodeFormat.CODE_128,
Options = new EncodingOptions
{
Height = 100,
Width = 300
}
};
Bitmap barcodeBitmap = barcodeWriter.Write(code);
using (MemoryStream stream = new MemoryStream())
{
barcodeBitmap.Save(stream, ImageFormat.Png);
byte[] byteArray = stream.ToArray();
return byteArray;
}
}
[WebMethod(EnableSession = true)]
public APIReturnModel SendPrintImgToPrintAPP(string imgPath)
{
imgPath = "http://localhost:53137/attached/fedex/270299558951.pdf";
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
using (HttpClient client = new HttpClient())
{
var apiUrl = "http://localhost:8090/api/home/PrintTrackingCode?imgPath=" + imgPath;
HttpResponseMessage response = client.GetAsync(apiUrl).Result;
if (response.IsSuccessStatusCode)
{
string responseBody = response.Content.ReadAsStringAsync().Result;
var robj=JsonConvert.DeserializeObject<PrintAPPReturnModel>(responseBody);
if (robj.Code == 1)
{
rmodel.Code = 1;
rmodel.Message = "Success";
}
else
{
rmodel.Code = 0;
rmodel.Message = robj.Msg;
}
return rmodel;
}
else
{
rmodel.Code = 0;
rmodel.Message = "Fail";
return rmodel;
}
}
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
/// <summary>
/// 获取跟踪码关联数据
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public JsonModel<List<TrackCodeRelation>> GetTrackCodeRelationDatas(string search, int PageSize, int PageIndex)
{
PagesNew.Login(base.Session);
var rmodel = new JsonModel<List<TrackCodeRelation>>();
int rowCount = 0;
rmodel.DataSource = DataNew.GetTrackCodeRelations(search, PageIndex, PageSize, out rowCount);
rmodel.RowCount = rowCount;
return rmodel;
}
/// <summary>
/// 保存跟踪码关联数据
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel SaveTrackCodeRelation(TrackCodeRelation md)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
DataNew.SaveTrackCodeRelation(md);
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
/// <summary>
/// 删除TrackCodeRelation
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel DeleteTrackCodeRelation(int id)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
DataNew.DeleteTrackCodeRelation(id);
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = "Fail:" + ex.Message;
}
return rmodel;
}
/// <summary>
/// 获取仓库未打印的面单数据
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel GetWareHouseUnPrintedDatas(DateTime date)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
var userid = Convert.ToInt32(Session["UserId"]);
var userInfo = DataNew.GetUserInfoByUserId(userid);
if (userid != 1 && userInfo.WorkDesc != "东仓" && userInfo.WorkDesc != "西仓")
{
rmodel.Code = 0;
rmodel.Message = "You don't have permission to view";
return rmodel;
}
var warehouse = "";
if (userInfo.WorkDesc == "东仓")
{
warehouse = "E";
}
else if (userInfo.WorkDesc == "西仓")
{
warehouse = "W";
}
var datas = DataNew.GetWareHouseNoPrintedDatas(warehouse, date);
rmodel.Code = 1;
rmodel.Message = "Success";
rmodel.Datas = datas;
}
catch(Exception ex)
{
rmodel.Code = 0;
rmodel.Message = ex.Message;
}
return rmodel;
}
/// <summary>
/// 获取仓库未打印的面单数据
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel GetWareHouseUnPrintedDatasIndex(string wareHouse, DateTime date)
{
PagesNew.Login(base.Session);
var rmodel = new APIReturnModel();
try
{
var datas = DataNew.GetWareHouseNoPrintedDatas(wareHouse, date);
rmodel.Code = 1;
rmodel.Message = "Success";
rmodel.Datas = datas;
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = ex.Message;
}
return rmodel;
}
/// <summary>
/// 获取仓库未打印的面单数据
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel SyncERPOrderListToWMS(DateTime sDate,DateTime eDate)
{
var rmodel = new APIReturnModel();
try
{
DataNew.SyncERPOrderToWMS(sDate, eDate);
rmodel.Code = 1;
rmodel.Message = "Success";
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = ex.Message;
}
return rmodel;
}
/// <summary>
/// 获取需要同步到WMS的订单(接口提供给WMS调用)
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel SyncERPOrderListToWMSNew(DateTime sDate, DateTime eDate)
{
var rmodel = new APIReturnModel();
try
{
var orders = DataNew.GetSyncToWMSOrderDatas(sDate, eDate);
if(orders == null || orders.Count<=0)
{
rmodel.Code = 1;
rmodel.Message = "暂无需要同步的订单";
rmodel.Datas = null;
return rmodel;
}
var datas = new List<SyncToWMSOrderModel>();
//循环订单
foreach (var order in orders)
{
var _order = DataNew.GetOrderModelNew2(order.OrderId);
if (_order == null)
continue;
order.PlatId = _order.PlatId;
order.ShopName = _order.ShopName;
order.OrderCode = _order.OrderCode;
order.PlatOrderCode= _order.PlatOrderCode;
order.OrderDate=_order.OrderDate;
order.InDate = _order.InDate;
order.RevName = _order.RevName;
order.RevCountry = _order.RevCountry;
order.RevAddr = _order.RevAddr;
order.RevPhone = _order.RevPhone;
order.RevMoblie = _order.RevMoblie;
order.RevMail = _order.RevMail;
order.RevFax = _order.RevFax;
order.RevPostCode = _order.RevPostCode;
order.SendInfo= _order.SendInfo;
order.ErrorInfo = _order.ErrorInfo;
order.BuyRemark = _order.BuyRemark;
order.LeaveWord = _order.LeaveWord;
order.TrackCode = _order.TrackCode;
order.RevProvince = _order.RevProvince;
order.RevCity = _order.RevCity;
order.RevArea = _order.RevArea;
var ogoods = DataNew.GetSyncToWMSOrderGoodsDatas(order.OrderId);
if (ogoods == null)
continue;
order.OrderGoods = ogoods;
var temuGoods = DataNew.GetSyncToWMSTemuOrderGoodsDatas(order.OrderCode);
order.TemuOrderGoods = temuGoods;
datas.Add(order);
}
rmodel.Code = 1;
rmodel.Message = "成功";
rmodel.Datas=datas;
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = ex.Message;
}
return rmodel;
}
/// <summary>
/// 获取需要同步到WMS的订单(接口提供给WMS调用) xsx 20241115因迁移服务器参照原接口添加后续禁止链接服务器串表查询
/// </summary>
/// <returns></returns>
[WebMethod(EnableSession = true)]
public APIReturnModel SyncERPOrderListToWMSNew_New(DateTime sDate, DateTime eDate)
{
var rmodel = new APIReturnModel();
try
{
var orders = DataNew.GetSyncToWMSOrderDatas_New(sDate, eDate);
if (orders == null || orders.Count <= 0)
{
rmodel.Code = 1;
rmodel.Message = "暂无需要同步的订单";
rmodel.Datas = null;
return rmodel;
}
var datas = new List<SyncToWMSOrderModel>();
//循环订单
foreach (var order in orders)
{
var _order = DataNew.GetOrderModelNew2(order.OrderId);
if (_order == null)
continue;
order.PlatId = _order.PlatId;
order.ShopName = _order.ShopName;
order.OrderCode = _order.OrderCode;
order.PlatOrderCode = _order.PlatOrderCode;
order.OrderDate = _order.OrderDate;
order.InDate = _order.InDate;
order.RevName = _order.RevName;
order.RevCountry = _order.RevCountry;
order.RevAddr = _order.RevAddr;
order.RevPhone = _order.RevPhone;
order.RevMoblie = _order.RevMoblie;
order.RevMail = _order.RevMail;
order.RevFax = _order.RevFax;
order.RevPostCode = _order.RevPostCode;
order.SendInfo = _order.SendInfo;
order.ErrorInfo = _order.ErrorInfo;
order.BuyRemark = _order.BuyRemark;
order.LeaveWord = _order.LeaveWord;
order.TrackCode = _order.TrackCode;
order.RevProvince = _order.RevProvince;
order.RevCity = _order.RevCity;
order.RevArea = _order.RevArea;
var ogoods = DataNew.GetSyncToWMSOrderGoodsDatas(order.OrderId);
if (ogoods == null)
continue;
order.OrderGoods = ogoods;
var temuGoods = DataNew.GetSyncToWMSTemuOrderGoodsDatas(order.OrderCode);
order.TemuOrderGoods = temuGoods;
datas.Add(order);
}
rmodel.Code = 1;
rmodel.Message = "成功";
rmodel.Datas = datas;
}
catch (Exception ex)
{
rmodel.Code = 0;
rmodel.Message = ex.Message;
}
return rmodel;
}
}
}