|
|
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")//西部仓库
|
|
|
{
|
|
|
//西部拣货规则类型:1:1-16 row(A layer)(1-16排A层);2:1-16 row(B,C,D layer)(1-16排B层);3:After row 16(16排之后);4:Multiple Goods(多件货);5:Others(其它)
|
|
|
//排
|
|
|
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 //东部仓库
|
|
|
{
|
|
|
//东部拣货规则类型:11:1-10 row(1-10排);12:After row 10(10排之后);13:Multiple Goods(多件货);14:Others(其它)
|
|
|
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")//西部仓库
|
|
|
{
|
|
|
//西部拣货规则类型:1:1-16 row(A layer)(1-16排A层);2:1-16 row(B,C,D layer)(1-16排B层);3:After row 16(16排之后);4:Multiple Goods(多件货);5:Others(其它)
|
|
|
//排
|
|
|
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 //东部仓库
|
|
|
{
|
|
|
//东部拣货规则类型:11:1-10 row(1-10排);12:After row 10(10排之后);13:Multiple Goods(多件货);14:Others(其它)
|
|
|
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);
|
|
|
//西部拣货规则类型:1:1-16 row(A layer)(1-16排A层);2:1-16 row(B,C,D layer)(1-16排B层);3:After row 16(16排之后);4:Multiple Goods(多件货);5:Others(其它)
|
|
|
//排
|
|
|
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 //东部仓库
|
|
|
{
|
|
|
//东部拣货规则类型:11:1-10 row(1-10排);12:After row 10(10排之后);13:Multiple Goods(多件货);14:Others(其它)
|
|
|
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;
|
|
|
}
|
|
|
}
|
|
|
}
|