|
|
using BookingWeb.DB;
|
|
|
using BookingWeb.DB.Model;
|
|
|
using BookingWeb.Helper;
|
|
|
using BookingWeb.Models;
|
|
|
using DotNet4.Utilities;
|
|
|
using Newtonsoft.Json;
|
|
|
using Resources;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Configuration;
|
|
|
using System.Data;
|
|
|
using System.IO;
|
|
|
using System.Linq;
|
|
|
using System.Net;
|
|
|
using System.Text;
|
|
|
using System.Web;
|
|
|
using System.Web.Caching;
|
|
|
using System.Web.Mvc;
|
|
|
|
|
|
namespace BookingWeb.Controllers
|
|
|
{
|
|
|
public class BookingController : BaseController
|
|
|
{
|
|
|
private BookingDB bookingDB = new BookingDB();
|
|
|
private InfoDB infoDB = new InfoDB();
|
|
|
|
|
|
#region 订舱
|
|
|
public ActionResult Order(string ordno)
|
|
|
{
|
|
|
var indentified = CurrentCompany.IDENTIFICATION_STATE == UserIdentiState.Indentified.ToString();
|
|
|
|
|
|
if (!indentified)
|
|
|
{
|
|
|
ViewBag.IsAdmin = CurrentCompany.GID == CurrentUser.GID;
|
|
|
return View("CannotBooking");
|
|
|
}
|
|
|
|
|
|
OrderEditViewModel viewModel = null;
|
|
|
if (!string.IsNullOrEmpty(ordno))
|
|
|
{
|
|
|
var model = bookingDB.Orders.FirstOrDefault(o => o.ORDNO == ordno);
|
|
|
if (model == null)
|
|
|
{
|
|
|
return Content(LangAll.MsgViewDataNotExist);
|
|
|
}
|
|
|
viewModel = model.AsEditViewModel();
|
|
|
viewModel.CtrnList = bookingDB.Ctns.Where(c => c.ORDNO == ordno).AsOrderEditViewModelList();
|
|
|
|
|
|
if (model.CLOSEDOCDATE.HasValue)
|
|
|
{
|
|
|
if (model.CLOSEDOCDATE.Value > DateTime.Now)
|
|
|
{
|
|
|
TimeSpan ts = model.CLOSEDOCDATE.Value - DateTime.Now;
|
|
|
ViewBag.CLOSEDOCDATE = model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
ViewBag.RemainTimeClosing = string.Format(LangOrder.MsgRemainClosingShow, ts.Days, ts.Hours);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
TimeSpan ts = DateTime.Now - model.CLOSEDOCDATE.Value;
|
|
|
ViewBag.CLOSEDOCDATE = model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
ViewBag.RemainTimeClosing = string.Format(LangOrder.MsgExpireClosingShow, ts.Days, ts.Hours);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (model.BSSTATUS == OrderStatus.Confirm.ToString() &&
|
|
|
model.SISTATUS != OrderConfirmStatus.Confirm.ToString())
|
|
|
{
|
|
|
ViewBag.ShowConfirmBtn = true;
|
|
|
}
|
|
|
|
|
|
//状态日志
|
|
|
var staLogs = bookingDB.StatusLogs.Where(l => l.RELATIVE_ID == viewModel.ORDNO);
|
|
|
var staOrderSave = staLogs.FirstOrDefault(l => l.STATUS == OrderLogStatus.OrderSave.ToString());
|
|
|
if (staOrderSave != null)
|
|
|
{
|
|
|
ViewBag.StaOrderSave = true;
|
|
|
ViewBag.StaOrderSaveTime = staOrderSave.OP_TIME.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
}
|
|
|
|
|
|
var staOrderSubmit = staLogs.FirstOrDefault(l => l.STATUS == OrderLogStatus.OrderSubmit.ToString());
|
|
|
if (staOrderSubmit != null)
|
|
|
{
|
|
|
ViewBag.StaOrderSubmit = true;
|
|
|
ViewBag.StaOrderSubmitTime = staOrderSubmit.OP_TIME.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
}
|
|
|
|
|
|
var staOrderConfirm = staLogs.FirstOrDefault(l => l.STATUS == OrderLogStatus.OrderConfirm.ToString());
|
|
|
if (staOrderConfirm != null)
|
|
|
{
|
|
|
ViewBag.StaOrderConfirm = true;
|
|
|
ViewBag.StaOrderConfirmTime = staOrderConfirm.OP_TIME.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
}
|
|
|
|
|
|
var staConfirmSave = staLogs.FirstOrDefault(l => l.STATUS == OrderLogStatus.ConfirmSave.ToString());
|
|
|
if (staConfirmSave != null)
|
|
|
{
|
|
|
ViewBag.StaConfirmSave = true;
|
|
|
ViewBag.StaConfirmSaveTime = staConfirmSave.OP_TIME.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
}
|
|
|
|
|
|
var staConfirmSubmit = staLogs.FirstOrDefault(l => l.STATUS == OrderLogStatus.ConfirmSubmit.ToString());
|
|
|
if (staConfirmSubmit != null)
|
|
|
{
|
|
|
ViewBag.StaConfirmSubmit = true;
|
|
|
ViewBag.StaConfirmSubmitTime = staConfirmSubmit.OP_TIME.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
}
|
|
|
|
|
|
var staConfirmConfirm = staLogs.FirstOrDefault(l => l.STATUS == OrderLogStatus.ConfirmConfirm.ToString());
|
|
|
if (staConfirmConfirm != null)
|
|
|
{
|
|
|
ViewBag.StaConfirmConfirm = true;
|
|
|
ViewBag.StaConfirmConfirmTime = staConfirmConfirm.OP_TIME.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
viewModel = new OrderEditViewModel();
|
|
|
viewModel.MARKS = "N.M";
|
|
|
viewModel.BLFRT = "FREIGHT PREPAID";
|
|
|
viewModel.NOBILL = "THREE";
|
|
|
viewModel.COPYNOBILLL = "ONE";
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return View(viewModel);
|
|
|
}
|
|
|
|
|
|
public ActionResult Copy(string srcORDNO)
|
|
|
{
|
|
|
var model = bookingDB.Orders.First(o => o.ORDNO == srcORDNO);
|
|
|
OrderEditViewModel viewModel = model.AsEditViewModel();
|
|
|
viewModel.CtrnList = bookingDB.Ctns.Where(c => c.ORDNO == srcORDNO).AsOrderEditViewModelList();
|
|
|
viewModel.ORDNO = string.Empty;
|
|
|
viewModel.BSSTATUS = OrderStatus.Create.ToString();
|
|
|
viewModel.ORDERNO = string.Empty;
|
|
|
|
|
|
|
|
|
return View("Order", viewModel);
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult OrderSave(OrderEditViewModel viewModel)
|
|
|
{
|
|
|
OP_SEAE_ORDER model = null;
|
|
|
bool isNew = false;
|
|
|
if (string.IsNullOrWhiteSpace(viewModel.ORDNO))
|
|
|
{
|
|
|
isNew = true;
|
|
|
viewModel.ORDNO = Guid.NewGuid().ToString();
|
|
|
viewModel.ORDERNO = GenOrderCode();
|
|
|
model = viewModel.AsModel();
|
|
|
model.CORPID = CurrentCompany.GID;
|
|
|
model.USERID = CurrentUser.GID;
|
|
|
//model.BSSTATUS = OrderStatus.Create.ToString();
|
|
|
model.BSDATE = DateTime.Today;
|
|
|
model.SISTATUS = OrderConfirmStatus.None.ToString();
|
|
|
model.CREATETIME = DateTime.Now;
|
|
|
model.INPUTBY = CurrentUser.NAME;
|
|
|
if (model.MODIFYTIME == DateTime.MinValue)
|
|
|
{
|
|
|
model.MODIFYTIME = null;
|
|
|
}
|
|
|
bookingDB.Orders.Add(model);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
model = bookingDB.Orders.First(o => o.ORDNO == viewModel.ORDNO);
|
|
|
if (model.MODIFYTIME != null && model.MODIFYTIME.Value.Ticks != viewModel.MODIFYTIME)
|
|
|
{
|
|
|
return Json(new RespCommon() { Success = false, Message = LangAll.MsgDataSaveByOther });
|
|
|
}
|
|
|
viewModel.AsModel(model);
|
|
|
model.MODIFYTIME = DateTime.Now;
|
|
|
|
|
|
}
|
|
|
|
|
|
bookingDB.Ctns.RemoveRange(bookingDB.Ctns.Where(c => c.ORDNO == viewModel.ORDNO));
|
|
|
var ctrns = viewModel.CtrnList.AsModelList();
|
|
|
ctrns.ForEach(c =>
|
|
|
{
|
|
|
c.CTN_ID = Guid.NewGuid().ToString();
|
|
|
c.ORDNO = viewModel.ORDNO;
|
|
|
bookingDB.Ctns.Add(c);
|
|
|
});
|
|
|
|
|
|
var strCtrnList = viewModel.CtrnList.Select(c => $"{c.CTNALL}*{c.CTNNUM}");
|
|
|
model.CNTRTOTAL = string.Join(" / ", strCtrnList);
|
|
|
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
var isSubmit = model.BSSTATUS == OrderStatus.Submit.ToString();
|
|
|
if (isNew || (!isNew && !isSubmit))
|
|
|
{
|
|
|
//日志-保存
|
|
|
LogHelper.Log(OpLogModule.Order, OpLogType.Save, model.ORDNO, model.MBLNO, JsonConvert.SerializeObject(viewModel));
|
|
|
|
|
|
//状态日志-保存
|
|
|
string strSaveSta = OrderLogStatus.OrderSave.ToString();
|
|
|
var staLog = bookingDB.StatusLogs.FirstOrDefault(sl => sl.RELATIVE_ID == viewModel.ORDNO && sl.STATUS == strSaveSta);
|
|
|
if (staLog == null)
|
|
|
{
|
|
|
staLog = new OP_STATUS_LOG();
|
|
|
staLog.GID = Guid.NewGuid().ToString();
|
|
|
staLog.RELATIVE_ID = viewModel.ORDNO;
|
|
|
staLog.STATUS = strSaveSta;
|
|
|
bookingDB.StatusLogs.Add(staLog);
|
|
|
}
|
|
|
|
|
|
staLog.OP_TIME = DateTime.Now;
|
|
|
staLog.OP_USER = CurrentUser.NAME;
|
|
|
}
|
|
|
|
|
|
|
|
|
//日志-提交
|
|
|
if (isSubmit)
|
|
|
{
|
|
|
string strSubmitSta = OrderLogStatus.OrderSubmit.ToString();
|
|
|
LogHelper.Log(OpLogModule.Order, OpLogType.Submit, model.ORDNO, model.MBLNO, JsonConvert.SerializeObject(viewModel));
|
|
|
|
|
|
//状态日志-提交
|
|
|
var staLog = new OP_STATUS_LOG();
|
|
|
staLog.GID = Guid.NewGuid().ToString();
|
|
|
staLog.OP_TIME = DateTime.Now;
|
|
|
staLog.OP_USER = CurrentUser.NAME;
|
|
|
staLog.RELATIVE_ID = viewModel.ORDNO;
|
|
|
staLog.STATUS = strSubmitSta;
|
|
|
bookingDB.StatusLogs.Add(staLog);
|
|
|
}
|
|
|
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
//提交时,发送邮件
|
|
|
if (isSubmit)
|
|
|
{
|
|
|
var client = bookingDB.Clients.First(c => c.GID == CurrentCompany.CLIENT_ID);
|
|
|
if (!string.IsNullOrEmpty(client.EMAIL))
|
|
|
{
|
|
|
var etd = model.ETD.HasValue ? model.ETD.Value.ToString("yyyy-MM-dd") : string.Empty;
|
|
|
OP_SEND_MAIL sendMail = new OP_SEND_MAIL();
|
|
|
sendMail.GID = Guid.NewGuid().ToString();
|
|
|
sendMail.SEND_TO = client.EMAIL;
|
|
|
sendMail.TITLE = $"{CurrentCompany.COMPANY_NAME} 提交订舱:{model.ORDERNO}|{model.VESSEL}|{etd}|{model.CNTRTOTAL}|{model.PORTDISCHARGE}";
|
|
|
sendMail.BODY = $"订舱公司:{CurrentCompany.COMPANY_NAME}\r\n订舱编号:{model.ORDERNO}\r\nETD:{etd}\r\n船公司:{model.VESSEL}\r\n箱型箱量:{model.CNTRTOTAL}\r\n卸货港:{model.PORTDISCHARGE}\r\n操作人:{CurrentUser.NAME} {CurrentUser.MOBILE}";
|
|
|
sendMail.CREATE_TIME = DateTime.Now;
|
|
|
sendMail.STATUS = SendMailStatus.Create.ToString();
|
|
|
sendMail.CLIENT_ID = CurrentCompany.CLIENT_ID;
|
|
|
bookingDB.SendMails.Add(sendMail);
|
|
|
bookingDB.SaveChanges();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
RespRedirect resp = new RespRedirect();
|
|
|
resp.Success = true;
|
|
|
resp.Message = isSubmit ? LangAll.MsgSubmitSuccess : LangAll.MsgSaveSuccess;
|
|
|
resp.Url = Url.Action("Order", new { ordno = model.ORDNO });
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult CancelSubmit(string ordno)
|
|
|
{
|
|
|
RespCommon resp = new RespCommon();
|
|
|
var ord = bookingDB.Orders.First(o => o.ORDNO == ordno);
|
|
|
if (ord.BSSTATUS == OrderStatus.Submit.ToString())
|
|
|
{
|
|
|
ord.BSSTATUS = OrderStatus.Create.ToString();
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
//日志
|
|
|
var viewModel = ord.AsEditViewModel();
|
|
|
viewModel.CtrnList = bookingDB.Ctns.Where(c => c.ORDNO == ordno).AsOrderEditViewModelList();
|
|
|
LogHelper.Log(OpLogModule.Order, OpLogType.Cancel, ordno, ord.MBLNO, JsonConvert.SerializeObject(viewModel));
|
|
|
|
|
|
//状态日志
|
|
|
string strSubmitSta = OrderLogStatus.OrderSubmit.ToString();
|
|
|
var staLog = bookingDB.StatusLogs.FirstOrDefault(sl => sl.RELATIVE_ID == viewModel.ORDNO && sl.STATUS == strSubmitSta);
|
|
|
if (staLog != null)
|
|
|
{
|
|
|
bookingDB.StatusLogs.Remove(staLog);
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
}
|
|
|
|
|
|
resp.Success = true;
|
|
|
resp.Message = Resources.LangAll.MsgOptSuccess;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = LangOrder.MsgCannotCancelStatus;
|
|
|
}
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult OrderDelete(string ordno)
|
|
|
{
|
|
|
RespCommon resp = new RespCommon();
|
|
|
var ord = bookingDB.Orders.First(o => o.ORDNO == ordno);
|
|
|
if (ord != null && (ord.BSSTATUS == OrderStatus.Create.ToString() || ord.BSSTATUS == OrderStatus.Back.ToString()))
|
|
|
{
|
|
|
bookingDB.Orders.Remove(ord);
|
|
|
bookingDB.Ctns.RemoveRange(bookingDB.Ctns.Where(c => c.ORDNO == ordno));
|
|
|
bookingDB.StatusLogs.RemoveRange(bookingDB.StatusLogs.Where(c => c.RELATIVE_ID == ordno));
|
|
|
bookingDB.Logs.RemoveRange(bookingDB.Logs.Where(c => c.BillNO == ordno));
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
resp.Success = true;
|
|
|
resp.Message = LangAll.MsgOptSuccess;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = LangAll.MsgOptFail;
|
|
|
}
|
|
|
return Json(resp);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 订舱列表(台账)
|
|
|
public ActionResult OrderList()
|
|
|
{
|
|
|
return View();
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult OrderListData(ReqOrderList req, int offset = 1, int limit = 10, string sort = "", string order = "asc")
|
|
|
{
|
|
|
var query = bookingDB.Orders.Where(o => o.CORPID == CurrentCompany.GID);
|
|
|
if (!string.IsNullOrWhiteSpace(req.MBLNO))
|
|
|
{
|
|
|
query = query.Where(o => o.MBLNO == req.MBLNO);
|
|
|
}
|
|
|
|
|
|
#region 条件
|
|
|
if (!string.IsNullOrWhiteSpace(req.ETD_START))
|
|
|
{
|
|
|
var dtStart = DateTime.Parse(req.ETD_START);
|
|
|
query = query.Where(o => o.ETD >= dtStart);
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(req.ETD_END))
|
|
|
{
|
|
|
var dtEnd = DateTime.Parse(req.ETD_END);
|
|
|
query = query.Where(o => o.ETD >= dtEnd);
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(req.VESSEL))
|
|
|
{
|
|
|
req.VESSEL = req.VESSEL.ToLower();
|
|
|
query = query.Where(o => o.VESSEL.ToLower().IndexOf(req.VESSEL) > -1);
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(req.VOYNO))
|
|
|
{
|
|
|
req.VOYNO = req.VOYNO.ToLower();
|
|
|
query = query.Where(o => o.VOYNO.ToLower().IndexOf(req.VOYNO) > -1);
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(req.SISTATUS))
|
|
|
{
|
|
|
if (req.SISTATUS == "NOT")
|
|
|
{
|
|
|
var strSiStaNone = OrderConfirmStatus.None.ToString();
|
|
|
var strSiStaCreate = OrderConfirmStatus.Create.ToString();
|
|
|
query = query.Where(o => o.SISTATUS == strSiStaNone || o.SISTATUS == strSiStaCreate);
|
|
|
}
|
|
|
else if (req.SISTATUS == "YES")
|
|
|
{
|
|
|
var strSiStaSubmit = OrderConfirmStatus.Submit.ToString();
|
|
|
var strSiStaConfirm = OrderConfirmStatus.Confirm.ToString();
|
|
|
query = query.Where(o => o.SISTATUS == strSiStaSubmit || o.SISTATUS == strSiStaConfirm);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 排序
|
|
|
if (!string.IsNullOrWhiteSpace(sort) && !string.IsNullOrWhiteSpace(order))
|
|
|
{
|
|
|
if (order.ToLower() == "asc")
|
|
|
{
|
|
|
if (sort.ToUpper() == "CARRIER")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.CARRIER);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "YARD")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.YARD);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "CNTRTOTAL")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.CNTRTOTAL);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "PORTLOAD")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.PORTLOAD);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "PORTDISCHARGE")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.PORTDISCHARGE);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "CONTRACTNO")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.CONTRACTNO);
|
|
|
}
|
|
|
|
|
|
else if (sort.ToUpper() == "VESSEL")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.VESSEL);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "VOYNO")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.VOYNO);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "MBLNO")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.MBLNO);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "ETD")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.ETD);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "BSSTATUS_NAME")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.BSSTATUS);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.CREATETIME);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (sort.ToUpper() == "SHIPPER")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.SHIPPER);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "YARD")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.YARD);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "CNTRTOTAL")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.CNTRTOTAL);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "PORTLOAD")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.PORTLOAD);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "PORTDISCHARGE")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.PORTDISCHARGE);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "CONTRACTNO")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.CONTRACTNO);
|
|
|
}
|
|
|
|
|
|
else if (sort.ToUpper() == "VESSEL")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.VESSEL);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "VOYNO")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.VOYNO);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "MBLNO")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.MBLNO);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "ETD")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.ETD);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "BSSTATUS_NAME")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.BSSTATUS);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.CREATETIME);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.CREATETIME);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
int count = query.Count();
|
|
|
var list = query.Skip(offset).Take(limit).ToList();
|
|
|
|
|
|
RespPageData resp = new RespPageData();
|
|
|
resp.Total = count;
|
|
|
|
|
|
var dataList = list.AsListViewModelList();
|
|
|
resp.DataList = dataList;
|
|
|
|
|
|
//截单数据
|
|
|
dataList.ForEach(x => x.ConfirmList = bookingDB.Confirms.Where(c => c.ORDNO == x.ORDNO).AsListViewModelList());
|
|
|
|
|
|
return Json(resp);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 截单
|
|
|
public ActionResult Confirm(string ordno)
|
|
|
{
|
|
|
ConfirmEditViewModel viewModel = null;
|
|
|
if (!string.IsNullOrEmpty(ordno))
|
|
|
{
|
|
|
var model = bookingDB.Orders.First(o => o.ORDNO == ordno);
|
|
|
if (model.BSSTATUS == OrderStatus.Confirm.ToString())
|
|
|
{
|
|
|
viewModel = model.AsConfirmEditViewModel();
|
|
|
viewModel.BSSTATUS = OrderConfirmStatus.Create.ToString();
|
|
|
//viewModel.CtrnList = bookingDB.Ctns.Where(c => c.ORDNO == ordno).AsConfirmEditViewModelList();
|
|
|
|
|
|
if (model.CLOSEDOCDATE.HasValue)
|
|
|
{
|
|
|
if (model.CLOSEDOCDATE.Value > DateTime.Now)
|
|
|
{
|
|
|
TimeSpan ts = model.CLOSEDOCDATE.Value - DateTime.Now;
|
|
|
ViewBag.CLOSEDOCDATE = model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
ViewBag.RemainTimeClosing = string.Format(LangOrder.MsgRemainClosingShow, ts.Days, ts.Hours);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
TimeSpan ts = DateTime.Now - model.CLOSEDOCDATE.Value;
|
|
|
ViewBag.CLOSEDOCDATE = model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
ViewBag.RemainTimeClosing = string.Format(LangOrder.MsgExpireClosingShow, ts.Days, ts.Hours);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return View(viewModel);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return Content(LangConfirm.MsgOrderNotConfirm);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return Content(LangAll.MsgInvalidParam);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public ActionResult ConfirmEdit(string sino)
|
|
|
{
|
|
|
ConfirmEditViewModel viewModel = null;
|
|
|
if (!string.IsNullOrEmpty(sino))
|
|
|
{
|
|
|
var model = bookingDB.Confirms.First(o => o.SINO == sino);
|
|
|
viewModel = model.AsEditViewModel();
|
|
|
viewModel.CtrnList = bookingDB.Ctns.Where(c => c.ORDNO == sino).AsConfirmEditViewModelList();
|
|
|
|
|
|
if (model.CLOSEDOCDATE.HasValue)
|
|
|
{
|
|
|
if (model.CLOSEDOCDATE.Value > DateTime.Now)
|
|
|
{
|
|
|
TimeSpan ts = model.CLOSEDOCDATE.Value - DateTime.Now;
|
|
|
ViewBag.CLOSEDOCDATE = model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
ViewBag.RemainTimeClosing = string.Format(LangOrder.MsgRemainClosingShow, ts.Days, ts.Hours);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
TimeSpan ts = DateTime.Now - model.CLOSEDOCDATE.Value;
|
|
|
ViewBag.CLOSEDOCDATE = model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
ViewBag.RemainTimeClosing = string.Format(LangOrder.MsgExpireClosingShow, ts.Days, ts.Hours);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (model.CLOSEDOCDATE.HasValue && model.CLOSEDOCDATE.Value < DateTime.Now)
|
|
|
{
|
|
|
ViewBag.ClosingDateExpire = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ViewBag.ClosingDateExpire = false;
|
|
|
}
|
|
|
|
|
|
return View("Confirm", viewModel);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return Content(LangAll.MsgInvalidParam);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult ConfirmSave(ConfirmEditViewModel viewModel)
|
|
|
{
|
|
|
RespRedirect resp = new RespRedirect();
|
|
|
|
|
|
#region 保存
|
|
|
if (!string.IsNullOrEmpty(viewModel.MBLNO))
|
|
|
{
|
|
|
var obj = bookingDB.Confirms.FirstOrDefault(c => c.MBLNO == viewModel.MBLNO);
|
|
|
if (obj != null && obj.SINO != viewModel.SINO)
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = LangConfirm.ValidInputMBLNO_REPEAT;
|
|
|
return Json(resp);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
OP_SEAE_SI model = null;
|
|
|
bool isNew = false;
|
|
|
if (string.IsNullOrWhiteSpace(viewModel.SINO))
|
|
|
{
|
|
|
isNew = true;
|
|
|
|
|
|
var order = bookingDB.Orders.First(o => o.ORDNO == viewModel.ORDNO);
|
|
|
|
|
|
viewModel.SINO = Guid.NewGuid().ToString();
|
|
|
model = viewModel.AsModel();
|
|
|
model.CORPID = CurrentCompany.GID;
|
|
|
model.USERID = CurrentUser.GID;
|
|
|
//model.BSSTATUS = OrderConfirmStatus.Create.ToString();
|
|
|
model.BSDATE = DateTime.Today;
|
|
|
model.CREATETIME = DateTime.Now;
|
|
|
model.INPUTBY = CurrentUser.NAME;
|
|
|
if (model.MODIFYTIME == DateTime.MinValue)
|
|
|
{
|
|
|
model.MODIFYTIME = null;
|
|
|
}
|
|
|
model.CLOSEDOCDATE = order.CLOSEDOCDATE;
|
|
|
bookingDB.Confirms.Add(model);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
model = bookingDB.Confirms.First(o => o.SINO == viewModel.SINO);
|
|
|
if (model.MODIFYTIME != null && model.MODIFYTIME.Value.Ticks != viewModel.MODIFYTIME)
|
|
|
{
|
|
|
return Json(new RespCommon() { Success = false, Message = LangAll.MsgDataSaveByOther });
|
|
|
}
|
|
|
viewModel.AsModel(model);
|
|
|
model.MODIFYTIME = DateTime.Now;
|
|
|
|
|
|
}
|
|
|
|
|
|
var dbCtnList = bookingDB.Ctns.Where(c => c.ORDNO == viewModel.SINO).ToList(); ;
|
|
|
dbCtnList.ForEach(dbCtn =>
|
|
|
{
|
|
|
if (viewModel.CtrnList.FirstOrDefault(c => c.CTN_ID == dbCtn.CTN_ID) == null)
|
|
|
{
|
|
|
bookingDB.Ctns.Remove(dbCtn);
|
|
|
}
|
|
|
});
|
|
|
viewModel.CtrnList.ForEach(ctn =>
|
|
|
{
|
|
|
ctn.CTNNUM = 1;//截单的箱量固定为1
|
|
|
|
|
|
//计算teu
|
|
|
var tmpStr = ctn.CTNALL.Substring(0, 2);
|
|
|
if (tmpStr == "20")
|
|
|
{
|
|
|
ctn.TEU = ctn.CTNNUM;
|
|
|
}
|
|
|
else if (tmpStr == "40" || tmpStr == "45")
|
|
|
{
|
|
|
ctn.TEU = ctn.CTNNUM * 2;
|
|
|
}
|
|
|
|
|
|
var dbCtn = dbCtnList.FirstOrDefault(c => c.CTN_ID == ctn.CTN_ID);
|
|
|
if (dbCtn != null)
|
|
|
{
|
|
|
ctn.AsModel(dbCtn);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
var saveModel = ctn.AsModel();
|
|
|
saveModel.CTN_ID = Guid.NewGuid().ToString();
|
|
|
saveModel.ORDNO = viewModel.SINO;
|
|
|
bookingDB.Ctns.Add(saveModel);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
var strCtrnList = viewModel.CtrnList.Select(c => $"{c.CTNALL}*{c.CTNNUM}");
|
|
|
model.CNTRTOTAL = string.Join(" / ", strCtrnList);
|
|
|
|
|
|
var otherCount = bookingDB.Confirms.Count(c => c.ORDNO == viewModel.ORDNO && c.SINO != viewModel.SINO);
|
|
|
var orderObj = bookingDB.Orders.First(o => o.ORDNO == viewModel.ORDNO);
|
|
|
var isSubmit = model.BSSTATUS == OrderConfirmStatus.Submit.ToString();
|
|
|
if (isNew || (!isNew && !isSubmit))
|
|
|
{
|
|
|
//日志
|
|
|
LogHelper.Log(OpLogModule.Confirm, OpLogType.Save, model.SINO, model.MBLNO, JsonConvert.SerializeObject(viewModel));
|
|
|
|
|
|
//状态日志
|
|
|
string strSaveSta = OrderLogStatus.ConfirmSave.ToString();
|
|
|
if (otherCount == 0) //没有其他截单
|
|
|
{
|
|
|
var staLog = bookingDB.StatusLogs.FirstOrDefault(sl => sl.RELATIVE_ID == viewModel.ORDNO && sl.STATUS == strSaveSta);
|
|
|
if (staLog == null)
|
|
|
{
|
|
|
staLog = new OP_STATUS_LOG();
|
|
|
staLog.GID = Guid.NewGuid().ToString();
|
|
|
staLog.RELATIVE_ID = viewModel.ORDNO;
|
|
|
staLog.STATUS = strSaveSta;
|
|
|
bookingDB.StatusLogs.Add(staLog);
|
|
|
|
|
|
orderObj.SISTATUS = OrderConfirmStatus.Create.ToString();
|
|
|
}
|
|
|
|
|
|
staLog.OP_TIME = DateTime.Now;
|
|
|
staLog.OP_USER = CurrentUser.NAME;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
var staLog = bookingDB.StatusLogs.FirstOrDefault(sl => sl.RELATIVE_ID == viewModel.ORDNO && sl.STATUS == strSaveSta);
|
|
|
if (staLog == null)
|
|
|
{
|
|
|
staLog = new OP_STATUS_LOG();
|
|
|
staLog.GID = Guid.NewGuid().ToString();
|
|
|
staLog.RELATIVE_ID = viewModel.ORDNO;
|
|
|
staLog.STATUS = strSaveSta;
|
|
|
bookingDB.StatusLogs.Add(staLog);
|
|
|
}
|
|
|
|
|
|
staLog.OP_TIME = DateTime.Now;
|
|
|
staLog.OP_USER = CurrentUser.NAME;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
//日志-提交
|
|
|
if (isSubmit)
|
|
|
{
|
|
|
LogHelper.Log(OpLogModule.Confirm, OpLogType.Submit, model.SINO, model.MBLNO, JsonConvert.SerializeObject(viewModel));
|
|
|
|
|
|
string strSubmitSta = OrderLogStatus.ConfirmSubmit.ToString();
|
|
|
if (otherCount == 0) //没有其他截单
|
|
|
{
|
|
|
OP_STATUS_LOG staLog = new OP_STATUS_LOG();
|
|
|
staLog.GID = Guid.NewGuid().ToString();
|
|
|
staLog.RELATIVE_ID = viewModel.ORDNO;
|
|
|
staLog.STATUS = strSubmitSta;
|
|
|
staLog.OP_TIME = DateTime.Now;
|
|
|
staLog.OP_USER = CurrentUser.NAME;
|
|
|
bookingDB.StatusLogs.Add(staLog);
|
|
|
|
|
|
orderObj.SISTATUS = OrderConfirmStatus.Submit.ToString();
|
|
|
model.SUBMITDATE = DateTime.Now;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
string strConfirmStatusSave = OrderConfirmStatus.Create.ToString();
|
|
|
string strConfirmStatusReject = OrderConfirmStatus.Reject.ToString();
|
|
|
var otherNoSubmitCount = bookingDB.Confirms.Count(c => c.ORDNO == viewModel.ORDNO && c.SINO != viewModel.SINO && (c.BSSTATUS == strConfirmStatusSave || c.BSSTATUS == strConfirmStatusReject));
|
|
|
if (otherNoSubmitCount == 0) //没有未提交的其他截单
|
|
|
{
|
|
|
var staLog = bookingDB.StatusLogs.FirstOrDefault(sl => sl.RELATIVE_ID == viewModel.ORDNO && sl.STATUS == strSubmitSta);
|
|
|
if (staLog == null)
|
|
|
{
|
|
|
staLog = new OP_STATUS_LOG();
|
|
|
staLog.GID = Guid.NewGuid().ToString();
|
|
|
staLog.RELATIVE_ID = viewModel.ORDNO;
|
|
|
staLog.STATUS = strSubmitSta;
|
|
|
staLog.OP_TIME = DateTime.Now;
|
|
|
staLog.OP_USER = CurrentUser.NAME;
|
|
|
bookingDB.StatusLogs.Add(staLog);
|
|
|
}
|
|
|
|
|
|
staLog.OP_TIME = DateTime.Now;
|
|
|
staLog.OP_USER = CurrentUser.NAME;
|
|
|
|
|
|
orderObj.SISTATUS = OrderConfirmStatus.Submit.ToString();
|
|
|
model.SUBMITDATE = DateTime.Now;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
model.SUBMITDATE = DateTime.Now;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
bookingDB.SaveChanges();
|
|
|
}
|
|
|
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
//提交时,发送邮件
|
|
|
if (isSubmit)
|
|
|
{
|
|
|
if (!string.IsNullOrEmpty(orderObj.EMAIL))
|
|
|
{
|
|
|
var etd = model.ETD.HasValue ? model.ETD.Value.ToString("yyyy-MM-dd") : string.Empty;
|
|
|
OP_SEND_MAIL sendMail = new OP_SEND_MAIL();
|
|
|
sendMail.GID = Guid.NewGuid().ToString();
|
|
|
sendMail.SEND_TO = orderObj.EMAIL;
|
|
|
sendMail.TITLE = $"{CurrentCompany.COMPANY_NAME} 提交截单:{model.MBLNO}|{model.VESSEL}|{etd}|{model.CNTRTOTAL}|{model.PORTDISCHARGE}";
|
|
|
sendMail.BODY = $"订舱公司:{CurrentCompany.COMPANY_NAME}\r\n订舱编号:{model.ORDERNO}\r\n提单号:{model.MBLNO}\r\nETD:{etd}\r\n船公司:{model.VESSEL}\r\n箱型箱量:{model.CNTRTOTAL}\r\n卸货港:{model.PORTDISCHARGE}\r\n操作人:{CurrentUser.NAME} {CurrentUser.MOBILE}";
|
|
|
sendMail.CREATE_TIME = DateTime.Now;
|
|
|
sendMail.STATUS = SendMailStatus.Create.ToString();
|
|
|
sendMail.CLIENT_ID = CurrentCompany.CLIENT_ID;
|
|
|
bookingDB.SendMails.Add(sendMail);
|
|
|
bookingDB.SaveChanges();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
resp.Success = true;
|
|
|
if (isSubmit)
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(orderObj.EMAIL))
|
|
|
{
|
|
|
resp.Message = LangConfirm.MsgConfirmSuccessMailNotSend;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
resp.Message = LangAll.MsgSubmitSuccess;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
resp.Message = LangAll.MsgSaveSuccess;
|
|
|
}
|
|
|
resp.Url = Url.Action("ConfirmEdit", new { sino = model.SINO });
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult ConfirmCancel(string sino)
|
|
|
{
|
|
|
RespCommon resp = new RespCommon();
|
|
|
var ord = bookingDB.Confirms.First(o => o.SINO == sino);
|
|
|
if (ord.BSSTATUS == OrderConfirmStatus.Submit.ToString())
|
|
|
{
|
|
|
string strConfirmStatusConfirm = OrderConfirmStatus.Confirm.ToString();
|
|
|
var confirmCount = bookingDB.Confirms.Count(c => c.BSSTATUS == strConfirmStatusConfirm && c.ORDNO == ord.ORDNO);
|
|
|
if (confirmCount > 0) //存在已确认的截单,不允许取消
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = LangConfirm.MsgCannotCancelWithConfirm;
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
ord.BSSTATUS = OrderConfirmStatus.Create.ToString();
|
|
|
|
|
|
var orderObj = bookingDB.Orders.First(o => o.ORDNO == ord.ORDNO);
|
|
|
orderObj.SISTATUS = OrderConfirmStatus.Create.ToString();
|
|
|
|
|
|
//日志
|
|
|
var viewModel = ord.AsEditViewModel();
|
|
|
viewModel.CtrnList = bookingDB.Ctns.Where(c => c.ORDNO == sino).AsConfirmEditViewModelList();
|
|
|
LogHelper.Log(OpLogModule.Confirm, OpLogType.Cancel, sino, ord.MBLNO, JsonConvert.SerializeObject(viewModel));
|
|
|
|
|
|
string strSubmitSta = OrderLogStatus.ConfirmSubmit.ToString();
|
|
|
var staLog = bookingDB.StatusLogs.FirstOrDefault(sl => sl.RELATIVE_ID == viewModel.ORDNO && sl.STATUS == strSubmitSta);
|
|
|
if (staLog != null)
|
|
|
{
|
|
|
bookingDB.StatusLogs.Remove(staLog);
|
|
|
}
|
|
|
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
resp.Success = true;
|
|
|
resp.Message = LangAll.MsgOptSuccess;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = LangConfirm.MsgCannotCancelStatus;
|
|
|
}
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult ConfirmDelete(string sino)
|
|
|
{
|
|
|
RespCommon resp = new RespCommon();
|
|
|
var confirm = bookingDB.Confirms.First(o => o.SINO == sino);
|
|
|
string strSaveSta = OrderLogStatus.ConfirmSave.ToString();
|
|
|
if (confirm != null && (confirm.BSSTATUS == OrderConfirmStatus.Create.ToString() || confirm.BSSTATUS == OrderConfirmStatus.Reject.ToString()))
|
|
|
{
|
|
|
var otherCount = bookingDB.Confirms.Count(c => c.ORDNO == confirm.ORDNO && c.SINO != confirm.SINO);
|
|
|
if (otherCount == 0) //没有其他截单
|
|
|
{
|
|
|
bookingDB.Confirms.Remove(confirm);
|
|
|
bookingDB.Ctns.RemoveRange(bookingDB.Ctns.Where(c => c.ORDNO == confirm.SINO));
|
|
|
bookingDB.Logs.RemoveRange(bookingDB.Logs.Where(c => c.BillNO == confirm.SINO));
|
|
|
|
|
|
var staLog = bookingDB.StatusLogs.FirstOrDefault(sl => sl.RELATIVE_ID == confirm.ORDNO && sl.STATUS == strSaveSta);
|
|
|
if (staLog != null)
|
|
|
{
|
|
|
bookingDB.StatusLogs.Remove(staLog);
|
|
|
}
|
|
|
|
|
|
var orderObj = bookingDB.Orders.First(o => o.ORDNO == confirm.ORDNO);
|
|
|
orderObj.SISTATUS = OrderConfirmStatus.None.ToString();
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
string strConfirmStatusSubmit = OrderConfirmStatus.Submit.ToString();
|
|
|
var otherSubmitCount = bookingDB.Confirms.Count(c => c.ORDNO == confirm.ORDNO && c.BSSTATUS == strConfirmStatusSubmit && c.SINO != confirm.SINO);
|
|
|
if (otherSubmitCount > 0) //存在其他已提交的截单,不允许删除
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = LangConfirm.MsgCannotDeleteWithSubmit;
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
bookingDB.Confirms.Remove(confirm);
|
|
|
bookingDB.Ctns.RemoveRange(bookingDB.Ctns.Where(c => c.ORDNO == confirm.SINO));
|
|
|
bookingDB.Logs.RemoveRange(bookingDB.Logs.Where(c => c.BillNO == confirm.SINO));
|
|
|
}
|
|
|
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
resp.Success = true;
|
|
|
resp.Message = LangAll.MsgOptSuccess;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = LangAll.MsgOptFail;
|
|
|
}
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 确认订舱列表
|
|
|
public ActionResult ConfirmList()
|
|
|
{
|
|
|
return View();
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult ConfirmListData(ReqConfirmList req, int offset = 1, int limit = 10, string sort = "", string order = "asc")
|
|
|
{
|
|
|
var query = bookingDB.Confirms.Where(o => o.CORPID == CurrentCompany.GID);
|
|
|
if (!string.IsNullOrWhiteSpace(req.MBLNO))
|
|
|
{
|
|
|
query = query.Where(o => o.MBLNO == req.MBLNO);
|
|
|
}
|
|
|
|
|
|
#region 条件
|
|
|
if (!string.IsNullOrWhiteSpace(req.ETD_START))
|
|
|
{
|
|
|
var dtStart = DateTime.Parse(req.ETD_START);
|
|
|
query = query.Where(o => o.ETD >= dtStart);
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(req.ETD_END))
|
|
|
{
|
|
|
var dtEnd = DateTime.Parse(req.ETD_END);
|
|
|
query = query.Where(o => o.ETD >= dtEnd);
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(req.VESSEL))
|
|
|
{
|
|
|
req.VESSEL = req.VESSEL.ToLower();
|
|
|
query = query.Where(o => o.VESSEL.ToLower().IndexOf(req.VESSEL) > -1);
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(req.VOYNO))
|
|
|
{
|
|
|
req.VOYNO = req.VOYNO.ToLower();
|
|
|
query = query.Where(o => o.VOYNO.ToLower().IndexOf(req.VOYNO) > -1);
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 排序
|
|
|
if (!string.IsNullOrWhiteSpace(sort) && !string.IsNullOrWhiteSpace(order))
|
|
|
{
|
|
|
if (order.ToLower() == "asc")
|
|
|
{
|
|
|
if (sort.ToUpper() == "CARRIER")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.CARRIER);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "YARD")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.YARD);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "CNTRTOTAL")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.CNTRTOTAL);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "PORTLOAD")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.PORTLOAD);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "PORTDISCHARGE")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.PORTDISCHARGE);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "CONTRACTNO")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.CONTRACTNO);
|
|
|
}
|
|
|
|
|
|
else if (sort.ToUpper() == "VESSEL")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.VESSEL);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "VOYNO")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.VOYNO);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "MBLNO")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.MBLNO);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "ETD")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.ETD);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "BSSTATUS_NAME")
|
|
|
{
|
|
|
query = query.OrderBy(o => o.BSSTATUS);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.CREATETIME);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (sort.ToUpper() == "SHIPPER")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.SHIPPER);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "YARD")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.YARD);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "CNTRTOTAL")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.CNTRTOTAL);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "PORTLOAD")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.PORTLOAD);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "PORTDISCHARGE")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.PORTDISCHARGE);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "CONTRACTNO")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.CONTRACTNO);
|
|
|
}
|
|
|
|
|
|
else if (sort.ToUpper() == "VESSEL")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.VESSEL);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "VOYNO")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.VOYNO);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "MBLNO")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.MBLNO);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "ETD")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.ETD);
|
|
|
}
|
|
|
else if (sort.ToUpper() == "BSSTATUS_NAME")
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.BSSTATUS);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.CREATETIME);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
query = query.OrderByDescending(o => o.CREATETIME);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
int count = query.Count();
|
|
|
var list = query.Skip(offset).Take(limit).ToList();
|
|
|
|
|
|
RespPageData resp = new RespPageData();
|
|
|
resp.Total = count;
|
|
|
resp.DataList = list.AsListViewModelList();
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult ConfirmListByOrder(string ordno)
|
|
|
{
|
|
|
var list = bookingDB.Confirms.Where(c => c.ORDNO == ordno).AsListViewModelList();
|
|
|
return Json(list);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 多品名维护
|
|
|
[HttpGet]
|
|
|
public ActionResult CtnDetail(string sino)
|
|
|
{
|
|
|
var list = bookingDB.Ctns.Where(c => c.ORDNO == sino).ToList().AsCtnListDetailViewModelList();
|
|
|
list.ForEach(c =>
|
|
|
{
|
|
|
c.DetailList = bookingDB.CtnDetails.Where(d => d.CTN_ID == c.CTN_ID).AsEditViewModelList();
|
|
|
});
|
|
|
ViewBag.CtnList = list;
|
|
|
|
|
|
var siObj = bookingDB.Confirms.First(c => c.SINO == sino);
|
|
|
ViewBag.SiObject = JsonConvert.SerializeObject(new { siObj.HSCODE, siObj.MARKS, siObj.DESCRIPTION });
|
|
|
ViewBag.HSCODE = siObj.HSCODE;
|
|
|
ViewBag.MARKS = siObj.MARKS;
|
|
|
ViewBag.DESCRIPTION = siObj.DESCRIPTION;
|
|
|
return View();
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult SaveDetailData(List<OpCtnListDetailViewModel> list)
|
|
|
{
|
|
|
RespCommon resp = new RespCommon();
|
|
|
foreach (var ctn in list)
|
|
|
{
|
|
|
bookingDB.CtnDetails.RemoveRange(bookingDB.CtnDetails.Where(d => d.CTN_ID == ctn.CTN_ID));
|
|
|
foreach (var detail in ctn.DetailList)
|
|
|
{
|
|
|
var model = detail.AsModel();
|
|
|
model.GID = Guid.NewGuid().ToString();
|
|
|
model.CTN_ID = ctn.CTN_ID;
|
|
|
bookingDB.CtnDetails.Add(model);
|
|
|
}
|
|
|
}
|
|
|
bookingDB.SaveChanges();
|
|
|
resp.Success = true;
|
|
|
resp.Message = LangAll.MsgSaveSuccess;
|
|
|
return Json(resp);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 费用
|
|
|
[HttpGet]
|
|
|
public ActionResult OpSeaeList()
|
|
|
{
|
|
|
return View();
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult OpSeaeList(string condition, int offset = 0, int limit = 20)
|
|
|
{
|
|
|
var client = bookingDB.Clients.First(c => c.GID == CurrentCompany.CLIENT_ID);
|
|
|
var json = new { GID = "", CODENAME = "", SHORTNAME = CurrentCompany.INFO_CLIENT, LOGINNAME = "" };
|
|
|
var secKey = ConfigurationManager.AppSettings["dispatchApiEncryptKey"];
|
|
|
var encryData = EncryptHandler.Encrypt(secKey, JsonConvert.SerializeObject(json));
|
|
|
|
|
|
HttpHelper http = new HttpHelper();
|
|
|
WebHeaderCollection header = new WebHeaderCollection();
|
|
|
header.Add("UserData", encryData);
|
|
|
HttpItem item = new HttpItem()
|
|
|
{
|
|
|
URL = $"{client.URL}/dispatch/main/GetSaleOpSeaeList?start={offset}&limit={limit}&condition={condition}&sort=&order=&hasNoFee=false",//URL
|
|
|
Encoding = null,//编码格式(utf-8,gb2312,gbk) 可选项 默认类会自动识别
|
|
|
Host = client.URL.Replace("http://", ""),
|
|
|
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
|
|
|
Accept = "gzip, deflate",// 可选项有默认值
|
|
|
ContentType = "application/x-www-form-urlencoded",
|
|
|
Method = "GET",//URL 可选项 默认为Get
|
|
|
Header = header
|
|
|
};
|
|
|
HttpResult resulthtml = http.GetHtml(item);
|
|
|
return Content(resulthtml.Html);
|
|
|
}
|
|
|
|
|
|
[HttpGet]
|
|
|
public ActionResult OpFeeList(string BSNO)
|
|
|
{
|
|
|
var client = bookingDB.Clients.First(c => c.GID == CurrentCompany.CLIENT_ID);
|
|
|
ViewBag.BSNO = BSNO;
|
|
|
ViewBag.Client = client;
|
|
|
return View();
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult OpFeeListData(string BSNO, string sort = "", string order = "")
|
|
|
{
|
|
|
var client = bookingDB.Clients.First(c => c.GID == CurrentCompany.CLIENT_ID);
|
|
|
var json = new { GID = "", CODENAME = "", SHORTNAME = CurrentCompany.INFO_CLIENT, LOGINNAME = "" };
|
|
|
var secKey = ConfigurationManager.AppSettings["dispatchApiEncryptKey"];
|
|
|
var encryData = EncryptHandler.Encrypt(secKey, JsonConvert.SerializeObject(json));
|
|
|
|
|
|
HttpHelper http = new HttpHelper();
|
|
|
WebHeaderCollection header = new WebHeaderCollection();
|
|
|
header.Add("UserData", encryData);
|
|
|
HttpItem item = new HttpItem()
|
|
|
{
|
|
|
URL = $"{client.URL}/dispatch/main/GetFeeList?BSNO={BSNO}&sort=&order=",//URL
|
|
|
Encoding = null,//编码格式(utf-8,gb2312,gbk) 可选项 默认类会自动识别
|
|
|
Host = client.URL.Replace("http://", ""),
|
|
|
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
|
|
|
Accept = "gzip, deflate",// 可选项有默认值
|
|
|
ContentType = "application/x-www-form-urlencoded",
|
|
|
Method = "GET",//URL 可选项 默认为Get
|
|
|
Header = header
|
|
|
};
|
|
|
HttpResult resulthtml = http.GetHtml(item);
|
|
|
return Content(resulthtml.Html);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 其他
|
|
|
public ActionResult GetYardData(string mblno, string yardname)
|
|
|
{
|
|
|
RespCtrnData resp = new RespCtrnData();
|
|
|
var yard = infoDB.Yards.FirstOrDefault(y => y.SHORTNAME == yardname);
|
|
|
if (yard == null)
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = LangConfirm.MsgNotFoundYard;
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(yard.YARDCODE))
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = LangConfirm.MsgYardCodeNull;
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
|
|
|
HttpHelper http = new HttpHelper();
|
|
|
HttpItem item = new HttpItem()
|
|
|
{
|
|
|
URL = "http://47.104.90.170:5000/query",//URL 必需项
|
|
|
Encoding = null,//编码格式(utf-8,gb2312,gbk) 可选项 默认类会自动识别
|
|
|
Host = "47.104.90.170:5000",
|
|
|
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
|
|
|
Accept = "gzip, deflate",// 可选项有默认值
|
|
|
ContentType = "application/x-www-form-urlencoded",
|
|
|
Postdata = "webusername=" + (yard.LOGINNAME ?? "") + "&webuserpass=" + (yard.PASSWORD ?? "") + "&mblno=" + mblno + "&yardid=" + yard.YARDCODE + "&isweb=0&custname=QDDS&psw=QDDS",
|
|
|
Method = "POST",//URL 可选项 默认为Get
|
|
|
};
|
|
|
HttpResult resulthtml = http.GetHtml(item);
|
|
|
var datahtml = resulthtml.Html;
|
|
|
|
|
|
var objRtn = JsonConvert.DeserializeAnonymousType(datahtml, new { status = "" });
|
|
|
if (objRtn.status == "1")
|
|
|
{
|
|
|
var objRtn2 = JsonConvert.DeserializeObject<YardDataJsonModel>(datahtml);
|
|
|
resp.List = objRtn2.message.Select(x => new OpCtnConfirmEditViewModel
|
|
|
{
|
|
|
CNTRNO = x.CNTRNO,
|
|
|
SEALNO = x.SEALNO,
|
|
|
CTNALL = x.CTNALL,
|
|
|
CTNNUM = x.XiangLiang,
|
|
|
TAREWEIGHT = x.TAREWEIGHT,
|
|
|
KINDPKGS = x.KINDPKGS,
|
|
|
CBM = x.CBM,
|
|
|
PKGS = x.PKGS,
|
|
|
KGS = x.KGS
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
resp.Success = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
var objRtn2 = JsonConvert.DeserializeAnonymousType(datahtml, new { status = "", message = "" });
|
|
|
resp.Success = false;
|
|
|
resp.Message = objRtn2.message;
|
|
|
}
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
public ActionResult CtrnFromExcel()
|
|
|
{
|
|
|
RespCtrnData resp = new RespCtrnData();
|
|
|
if (Request.Files.Count == 0)
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = LangAll.MsgInvalidParam;
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
try
|
|
|
{
|
|
|
var excelfile = Request.Files[0];
|
|
|
string strMsg;
|
|
|
string ext = Path.GetExtension(excelfile.FileName).ToLower();
|
|
|
if (ext != ".xls" && ext != ".xlsx")
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = LangAll.MsgInvalidParam;
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
DataTable dt = ExcelHelper.ExcelToDatatable(excelfile.InputStream, ext, out strMsg);
|
|
|
if (!string.IsNullOrEmpty(strMsg))
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = strMsg;
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
if (dt.Rows.Count > 0)
|
|
|
{
|
|
|
string[] cols = new string[] { "箱型", "箱号", "封号", "件数", "包装", "毛重", "尺码", "皮重" };
|
|
|
resp.List = new List<OpCtnConfirmEditViewModel>();
|
|
|
foreach (DataRow row in dt.Rows)
|
|
|
{
|
|
|
OpCtnConfirmEditViewModel item = new OpCtnConfirmEditViewModel();
|
|
|
item.CTNALL = row["箱型"].ToString();
|
|
|
item.CNTRNO = row["箱号"].ToString();
|
|
|
item.SEALNO = row["封号"].ToString();
|
|
|
item.PKGS = Convert.ToInt32(row["件数"].ToString());
|
|
|
item.KINDPKGS = row["包装"].ToString();
|
|
|
item.KGS = Convert.ToDecimal(row["毛重"].ToString());
|
|
|
item.CBM = Convert.ToDecimal(row["尺码"].ToString());
|
|
|
item.TAREWEIGHT = Convert.ToDecimal(row["皮重"].ToString());
|
|
|
resp.List.Add(item);
|
|
|
}
|
|
|
|
|
|
resp.Success = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = "excel无数据!";
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = ex.Message;
|
|
|
}
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
private string GenOrderCode()
|
|
|
{
|
|
|
var client = bookingDB.Clients.First(c => c.GID == CurrentCompany.CLIENT_ID);
|
|
|
|
|
|
var prefix = $"{client.CODE}{DateTime.Today.ToString("yyyyMMdd")}";
|
|
|
var maxNO = bookingDB.Orders.Where(o => o.CORPID == CurrentCompany.GID && o.ORDERNO.StartsWith(prefix)).Max(o => o.ORDERNO);
|
|
|
int curr = 0;
|
|
|
if (maxNO != null)
|
|
|
{
|
|
|
curr = int.Parse(maxNO.Substring(maxNO.Length - 4));
|
|
|
}
|
|
|
|
|
|
var code = prefix + (curr + 1).ToString("0000");
|
|
|
return code;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 测试
|
|
|
|
|
|
|
|
|
//[HttpGet]
|
|
|
//public ActionResult SetOrderConfirm(string ordno)
|
|
|
//{
|
|
|
// bookingDB.Orders.First(o => o.ORDNO == ordno).BSSTATUS = OrderConfirmStatus.Confirm.ToString();
|
|
|
// bookingDB.SaveChanges();
|
|
|
// return Content("1");
|
|
|
//}
|
|
|
#endregion
|
|
|
}
|
|
|
} |