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

249 lines
13 KiB

using EasyBL.WebApi.Message;
using Entity;
using Entity.Sugar;
using Entity.ViewModels;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
using SqlSugar.Base;
using System;
using System.Collections.Generic;
using System.Data;
namespace EasyBL.WEBAPP.WSM
{
public class PackingOrder_QryService : ServiceBase
{
#region 預約記錄分頁查詢
/// <summary>
/// 預約記錄分頁查詢
/// </summary>
/// <param name="i_crm"></param>
/// <returns></returns>
public ResponseMessage QueryPage(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.GetIntance();
try
{
do
{
var pml = new PageModel
{
PageIndex = _fetchInt(i_crm, @"pageIndex"),
PageSize = _fetchInt(i_crm, @"pageSize")
};
var iPageCount = 0;
var sSortField = _fetchString(i_crm, @"sortField");
var sSortOrder = _fetchString(i_crm, @"sortOrder");
var sMuseumMumber = _fetchString(i_crm, @"MuseumMumber");
var sSearchWords = _fetchString(i_crm, @"SearchWords");
var sAppointDateTimeStart = _fetchString(i_crm, @"AppointDateTimeStart");
var sAppointDateTimeEnd = _fetchString(i_crm, @"AppointDateTimeEnd");
var sApproachTime = _fetchString(i_crm, @"ApproachTime");
var sExitTime = _fetchString(i_crm, @"ExitTime");
var bExcel = _fetchBool(i_crm, @"Excel");
var rAppointDateTimeStart = new DateTime();
var rAppointDateTimeEnd = new DateTime();
var rApproachTime = new DateTime();
var rExitTime = new DateTime();
if (!string.IsNullOrEmpty(sAppointDateTimeStart))
{
rAppointDateTimeStart = SqlFunc.ToDate(sAppointDateTimeStart);
}
if (!string.IsNullOrEmpty(sAppointDateTimeEnd))
{
rAppointDateTimeEnd = SqlFunc.ToDate(sAppointDateTimeEnd).AddDays(1);
}
if (!string.IsNullOrEmpty(sApproachTime))
{
rApproachTime = SqlFunc.ToDate(sApproachTime);
}
if (!string.IsNullOrEmpty(sExitTime))
{
rExitTime = SqlFunc.ToDate(sExitTime).AddDays(1);
}
pml.DataList = db.Queryable<OTB_WSM_PackingOrder, OTB_OPM_Exhibition, OTB_CRM_ImportCustomers>
((t1, t2, t3) =>
new object[] {
JoinType.Left, t1.OrgID == t2.OrgID && t1.ExhibitionNO == t2.SN.ToString(),
JoinType.Left, t1.OrgID == t3.OrgID && t1.ExhibitionNO == t3.ExhibitionNO.ToString() && t1.CustomerId == t3.guid
}
)
.Where((t1, t2, t3) => t1.OrgID == i_crm.ORIGID && t1.MuseumMumber.Contains(sMuseumMumber))
.Where((t1, t2, t3) => t1.CompName.Contains(sSearchWords) || t1.AppointNO.Contains(sSearchWords) || t1.AppointUser.Contains(sSearchWords) || t1.AppointTel.Contains(sSearchWords) || t1.AppointEmail.Contains(sSearchWords) || t1.Contactor.Contains(sSearchWords) || t1.ContactTel.Contains(sSearchWords) || t1.PackingInfo.Contains(sSearchWords) || t2.Exhibitioname_TW.Contains(sSearchWords) || t2.Exhibitioname_EN.Contains(sSearchWords))
.WhereIF(!string.IsNullOrEmpty(sAppointDateTimeStart), (t1, t2, t3) => t1.CreateDate >= rAppointDateTimeStart.Date)
.WhereIF(!string.IsNullOrEmpty(sAppointDateTimeEnd), (t1, t2, t3) => t1.CreateDate <= rAppointDateTimeEnd.Date)
.WhereIF(!string.IsNullOrEmpty(sApproachTime), (t1, t2, t3) => t1.ExitTime >= rApproachTime.Date)
.WhereIF(!string.IsNullOrEmpty(sExitTime), (t1, t2, t3) => t1.ApproachTime <= rExitTime.Date)
.Select((t1, t2, t3) => new View_WSM_PackingOrder
{
AppointNO = t1.AppointNO,
OrgID = t1.OrgID,
ExhibitionNO = t1.ExhibitionNO,
CompName = t1.CompName,
MuseumMumber = t1.MuseumMumber,
AppointUser = t1.AppointUser,
AppointTel = t1.AppointTel,
AppointEmail = t1.AppointEmail,
Contactor = t1.Contactor,
ContactTel = t1.ContactTel,
ApproachTime = t1.ApproachTime,
ExitTime = t1.ExitTime,
PackingInfo = t1.PackingInfo,
Total = t1.Total,
Memo = t1.Memo,
CreateUser = t1.CreateUser,
CreateDate = t1.CreateDate,
CustomerId = t1.CustomerId,
OtherId = t1.OtherId,
AppointDateTime = t1.AppointDateTime,
IsKeyMode = t1.IsKeyMode,
OtherIdFrom = t1.OtherIdFrom,
Exhibitioname_TW = t2.Exhibitioname_TW,
Exhibitioname_EN = t2.Exhibitioname_EN,
IsFormal = SqlFunc.IIF(t3.IsFormal == null, false, t3.IsFormal)
})
.MergeTable()
.OrderBy(sSortField, sSortOrder)
.ToPageList(pml.PageIndex, pml.PageSize, ref iPageCount);
pml.Total = iPageCount;
rm = new SuccessResponseMessage(null, i_crm);
if (bExcel)
{
const string sFileName = "駒驛預約記錄";
var oHeader = new Dictionary<string, string>
{
{ "Exhibitioname_TW", "展覽名稱" },
{ "MuseumMumber", "攤位編號" },
{ "CompName", "公司名稱" },
{ "Field0", "攤位數" },
{ "Contactor", "聯絡人1" },
{ "ContactTel", "電話" },
{ "Field1", "進場日期" },
{ "Field2", "進場時間" },
{ "Field3", "退場日期" },
{ "Field4", "退場日期" },
{ "Field5", "件數" },
{ "Field6", "總重" },
{ "Field7", "長" },
{ "Field8", "寬" },
{ "Field9", "高" },
{ "Field10", "CBM" },
{ "Field11", "包裝" },
{ "Field12", "備註" },
};
var dt_new = new DataTable();
dt_new.Columns.Add("Exhibitioname_TW");
dt_new.Columns.Add("MuseumMumber");
dt_new.Columns.Add("CompName");
dt_new.Columns.Add("Field0");
dt_new.Columns.Add("Contactor");
dt_new.Columns.Add("ContactTel");
dt_new.Columns.Add("Field1");
dt_new.Columns.Add("Field2");
dt_new.Columns.Add("Field3");
dt_new.Columns.Add("Field4");
dt_new.Columns.Add("Field5");
dt_new.Columns.Add("Field6");
dt_new.Columns.Add("Field7");
dt_new.Columns.Add("Field8");
dt_new.Columns.Add("Field9");
dt_new.Columns.Add("Field10");
dt_new.Columns.Add("Field11");
dt_new.Columns.Add("Field12");
var listMerge = new List<Dictionary<string, int>>();
var oExpoType_TW = new Map { { "01", "裸機" }, { "02", "木箱" }, { "03", "散貨" }, { "04", "打板" }, { "05", "其他" } };
var iPackingChildIndex = 0;
var saPackingOrder = pml.DataList as List<View_WSM_PackingOrder>;
foreach (var item in saPackingOrder)
{
var iPackingIndex = iPackingChildIndex;
var jaPackingInfo = (JArray)JsonConvert.DeserializeObject(item.PackingInfo);
if (jaPackingInfo.Count > 0)
{
foreach (JObject packinfo in jaPackingInfo)
{
var row_new = dt_new.NewRow();
var sExpoType = packinfo["ExpoType"].ToString();
var sExpoLen = packinfo["ExpoLen"].ToString();
var sExpoWidth = packinfo["ExpoWidth"].ToString();
var sExpoHeight = packinfo["ExpoHeight"].ToString();
var sExpoWeight = packinfo["ExpoWeight"].ToString();
var sExpoNumber = packinfo["ExpoNumber"].ToString();
row_new["Exhibitioname_TW"] = item.Exhibitioname_TW;
row_new["CompName"] = item.CompName;
row_new["ContactTel"] = item.ContactTel;
row_new["Field12"] = item.Memo;
row_new["MuseumMumber"] = item.MuseumMumber;
row_new["Field0"] = "";
row_new["Contactor"] = item.Contactor;
row_new["Field1"] = Convert.ToDateTime(item.ApproachTime).ToString("yyyy/MM/dd");
row_new["Field2"] = Convert.ToDateTime(item.ApproachTime).ToString("HH:mm");
row_new["Field3"] = Convert.ToDateTime(item.ExitTime).ToString("yyyy/MM/dd");
row_new["Field4"] = Convert.ToDateTime(item.ExitTime).ToString("HH:mm");
row_new["Field5"] = sExpoNumber;
row_new["Field6"] = sExpoWeight;
row_new["Field7"] = sExpoLen;
row_new["Field8"] = sExpoWidth;
row_new["Field9"] = sExpoHeight;
row_new["Field10"] = Math.Round(Convert.ToDecimal(sExpoLen) * Convert.ToDecimal(sExpoWidth) * Convert.ToDecimal(sExpoHeight) / Convert.ToDecimal("1000000"), 2);
row_new["Field11"] = oExpoType_TW[sExpoType].ToString();
dt_new.Rows.Add(row_new);
iPackingChildIndex++;
}
if (jaPackingInfo.Count > 1)
{
for (var i = 0; i < 10; i++)
{
var dicMerge = new Dictionary<string, int>
{
{ "FirstRow", iPackingIndex + 3 },
{ "FirstCol", i },
{ "RowCount", jaPackingInfo.Count },
{ "ColCount", 1 }
};
listMerge.Add(dicMerge);
}
}
}
}
var dicAlain = ExcelService.GetExportAlain(oHeader, "MuseumMumber,Contactor,Field0,Field1,Field2,Field3,Field4,Field5,Field6,Field7,Field8,Field9,Field10,Field11");
var bOk = new ExcelService().CreateExcelByTb(dt_new, out string sPath, oHeader, dicAlain, listMerge, sFileName);
rm.DATA.Add(BLWording.REL, sPath);
}
else
{
rm.DATA.Add(BLWording.REL, pml);
}
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, "EasyBL.WEBAPP.WSM.PackingOrder_QryService", "", "QueryPage(預約記錄分頁查詢)", "", "", "");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion 預約記錄分頁查詢
}
}