|
|
using BarcodeLib;
|
|
|
using BookingJieFeng.DB;
|
|
|
using BookingJieFeng.DB.Model;
|
|
|
using BookingJieFeng.Helper;
|
|
|
using BookingJieFeng.Models;
|
|
|
using DotNet4.Utilities;
|
|
|
using iText.Kernel.Font;
|
|
|
using iText.Kernel.Pdf;
|
|
|
using iText.Layout;
|
|
|
using iText.Layout.Element;
|
|
|
using log4net;
|
|
|
using Newtonsoft.Json;
|
|
|
using Newtonsoft.Json.Linq;
|
|
|
using Resources;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Configuration;
|
|
|
using System.Data;
|
|
|
using System.Data.SqlClient;
|
|
|
using System.Drawing;
|
|
|
using System.IO;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Web.Mvc;
|
|
|
|
|
|
namespace BookingJieFeng.Controllers
|
|
|
{
|
|
|
public class BookingController : BaseController
|
|
|
{
|
|
|
private static readonly string AttachUpDir = "UserUploads";
|
|
|
|
|
|
private BookingDB bookingDB = new BookingDB();
|
|
|
private JiefengDB jiefengDB = new JiefengDB();
|
|
|
private ILog log = LogManager.GetLogger("BookingController");
|
|
|
|
|
|
#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.RemainTimeClosing = string.Format("距离截单时间({0}):{1}天{2}小时", model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss"), ts.Days, ts.Hours);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
TimeSpan ts = DateTime.Now - model.CLOSEDOCDATE.Value;
|
|
|
ViewBag.RemainTimeClosing = string.Format("超过截单时间({0}):{1}天{2}小时", model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss"), 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");
|
|
|
}
|
|
|
|
|
|
var staOrderCancel = staLogs.FirstOrDefault(l => l.STATUS == OrderLogStatus.OrderCancel.ToString());
|
|
|
if (staOrderCancel != null)
|
|
|
{
|
|
|
ViewBag.StaOrderCancel = true;
|
|
|
ViewBag.StaOrderCancelTime = staOrderCancel.OP_TIME.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
}
|
|
|
|
|
|
//状态记录
|
|
|
var typeOrder = OpLogModule.Order.ToString();
|
|
|
var logList = bookingDB.Logs.AsNoTracking().Where(l => l.BillNO == ordno && l.Module == typeOrder).OrderBy(l => l.LogId).ToList();
|
|
|
var listDisplay = new List<LogListDisplayModel>();
|
|
|
for (int i = 0; i < logList.Count; i++)
|
|
|
{
|
|
|
var chgList = ChangeLogHelper.Compare(i == 0 ? new OP_LOG() { Module = OpLogModule.Order.ToString() } : logList[i - 1], logList[i]);
|
|
|
listDisplay.Add(new LogListDisplayModel
|
|
|
{
|
|
|
OpUserName = logList[i].OpUserName,
|
|
|
OpTime = logList[i].OpTime.ToString("yyyy-MM-dd HH:mm:ss"),
|
|
|
Type = logList[i].Type,
|
|
|
ChangeList = chgList,
|
|
|
OpCompanyName = logList[i].OpCompanyName,
|
|
|
Module = logList[i].Module
|
|
|
});
|
|
|
}
|
|
|
|
|
|
ViewBag.LogList = listDisplay;
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
viewModel = new OrderEditViewModel();
|
|
|
viewModel.MARKS = "N/M";
|
|
|
//viewModel.BLFRT = "FREIGHT PREPAID";
|
|
|
viewModel.NOBILL = "THREE";
|
|
|
viewModel.COPYNOBILLL = "ONE";
|
|
|
}
|
|
|
|
|
|
ViewBag.EmployeeJson = JsonConvert.SerializeObject(jiefengDB.Employee.Select(emp => new { name = emp.姓名 }).ToList());
|
|
|
ViewBag.Attach = bookingDB.Attaches.FirstOrDefault(a => a.RELATIVEID == ordno);
|
|
|
|
|
|
|
|
|
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;
|
|
|
viewModel.BSNO = model.BSNO;
|
|
|
viewModel.BusinessNO = string.Empty;
|
|
|
viewModel.YARD = string.Empty;
|
|
|
viewModel.YardContract = string.Empty;
|
|
|
viewModel.CLOSEDOCDATE = null;
|
|
|
viewModel.CLOSINGDATE = null;
|
|
|
viewModel.PONO = string.Empty;
|
|
|
viewModel.MBLNO = string.Empty;
|
|
|
|
|
|
|
|
|
ViewBag.EmployeeJson = JsonConvert.SerializeObject(jiefengDB.Employee.Select(emp => new { name = emp.姓名 }).ToList());
|
|
|
|
|
|
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.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();
|
|
|
|
|
|
NewOrderCode.Del(viewModel.ORDERNO);
|
|
|
|
|
|
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();
|
|
|
|
|
|
//DS6任务
|
|
|
if (isSubmit)
|
|
|
{
|
|
|
var names = jiefengDB.Employee.AsNoTracking().Where(e => e.网上订舱代码 == model.CARRIER).Select(e => e.姓名).ToList();
|
|
|
var strname = string.Join(",", names);
|
|
|
|
|
|
var sqlDs6 = $@"insert into t_op_task(任务编号,任务类型,任务来源,任务状态,任务说明,发起人,录入日期,任务开始时间,提单号,是否公共,任务相关人员,SEA编号,是否完成,备注)
|
|
|
values(newid(),'网上订舱','网上订舱','未开始','{CurrentCompany.INFO_CLIENT}订舱:{model.MBLNO};{model.PORTDISCHARGE};{model.DESTINATION}',
|
|
|
'DEMO-SA',GETDATE(),GETDATE(),'{model.MBLNO}',0,'{strname}','{model.ORDNO}',0,'')";
|
|
|
log.Debug(sqlDs6);
|
|
|
jiefengDB.Database.ExecuteSqlCommand(sqlDs6);
|
|
|
}
|
|
|
|
|
|
RespRedirect resp = new RespRedirect();
|
|
|
resp.Success = true;
|
|
|
resp.Message = isSubmit ? LangAll.MsgSubmitSuccess : LangAll.MsgSaveSuccess;
|
|
|
resp.Url = Url.Action("Order", new { ordno = model.ORDNO });
|
|
|
resp.Id = 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();
|
|
|
|
|
|
}
|
|
|
|
|
|
//删除DS6任务
|
|
|
var sqlDs6 = $@"delete t_op_task where 任务类型='网上订舱' and SEA编号='{ord.ORDNO}'";
|
|
|
log.Debug(sqlDs6);
|
|
|
jiefengDB.Database.ExecuteSqlCommand(sqlDs6);
|
|
|
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
//订舱提交后发邮件
|
|
|
[HttpGet]
|
|
|
public ActionResult SendMailAfterOrderSubmit(string ordno)
|
|
|
{
|
|
|
var model = bookingDB.Orders.First(o => o.ORDNO == ordno);
|
|
|
|
|
|
var mailAddr = CurrentUser.EMAIL;
|
|
|
var crm = jiefengDB.CrmClients.AsNoTracking().FirstOrDefault(c => c.客户简称 == CurrentCompany.INFO_CLIENT || c.客户简称 == model.CARRIER);
|
|
|
if (crm != null && !string.IsNullOrEmpty(crm.邮箱))
|
|
|
{
|
|
|
mailAddr += "," + crm.邮箱;
|
|
|
}
|
|
|
|
|
|
ViewBag.MailAddr = mailAddr;
|
|
|
|
|
|
var etd = model.ETD.HasValue ? model.ETD.Value.ToString("yyyy-MM-dd") : string.Empty;
|
|
|
ViewBag.Title = $"{CurrentCompany.COMPANY_NAME} 提交订舱:{model.ORDERNO}|{model.VESSEL}|{etd}|{model.CNTRTOTAL}|{model.PORTDISCHARGE}";
|
|
|
ViewBag.Body = $"订舱公司:{CurrentCompany.COMPANY_NAME}\r\n订舱编号:{model.ORDERNO}\r\nETD:{etd}\r\n船公司:{model.CARRIER}\r\n箱型箱量:{model.CNTRTOTAL}\r\n卸货港:{model.PORTDISCHARGE}\r\n操作人:{CurrentUser.NAME} {CurrentUser.MOBILE}";
|
|
|
|
|
|
return View("SendMailAfterSubmit");
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult SendMailAfterSubmit(string mailAddr, string title, string body)
|
|
|
{
|
|
|
RespCommon resp = new RespCommon();
|
|
|
OP_SEND_MAIL sendMail = new OP_SEND_MAIL();
|
|
|
sendMail.GID = Guid.NewGuid().ToString();
|
|
|
sendMail.SEND_TO = mailAddr;
|
|
|
sendMail.TITLE = title;
|
|
|
sendMail.BODY = body;
|
|
|
sendMail.CREATE_TIME = DateTime.Now;
|
|
|
sendMail.STATUS = SendMailStatus.Create.ToString();
|
|
|
bookingDB.SendMails.Add(sendMail);
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
resp.Success = true;
|
|
|
resp.Message = "发送成功";
|
|
|
return Json(resp);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 订舱列表(台账)
|
|
|
public ActionResult OrderList()
|
|
|
{
|
|
|
var colCfg = bookingDB.ConfigDatas.FirstOrDefault(c => c.Module == ConfigData.ModuleOrder && c.Category == ConfigData.CateListColumn && c.UserId == CurrentUser.GID);
|
|
|
if (colCfg != null)
|
|
|
{
|
|
|
ViewBag.ColumnConfigData = JsonConvert.DeserializeAnonymousType(colCfg.JsonData, new dynamic[] { new { colName = "", visible = false, sort = 0, width = 0 } }).OrderBy(c => Convert.ToInt32(c.sort)).ToList();
|
|
|
}
|
|
|
|
|
|
ViewBag.ColDic = GetColDicOrder();
|
|
|
|
|
|
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);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(req.BSSTATUS))
|
|
|
{
|
|
|
query = query.Where(o => o.BSSTATUS == req.BSSTATUS);
|
|
|
}
|
|
|
|
|
|
#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;
|
|
|
foreach (var item in dataList)
|
|
|
{
|
|
|
var c = bookingDB.Confirms.Count(cfm => cfm.ORDNO == item.ORDNO);
|
|
|
if (c > 0)
|
|
|
{
|
|
|
item.HasConfirm = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//截单数据
|
|
|
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.RemainTimeClosing = string.Format("距离截单时间({0}):{1}天{2}小时", model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss"), ts.Days, ts.Hours);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
TimeSpan ts = DateTime.Now - model.CLOSEDOCDATE.Value;
|
|
|
ViewBag.RemainTimeClosing = string.Format("超过截单时间({0}):{1}天{2}小时", model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss"), ts.Days, ts.Hours);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ViewBag.EmployeeJson = JsonConvert.SerializeObject(jiefengDB.Employee.Select(emp => new { name = emp.姓名 }).ToList());
|
|
|
|
|
|
return View(viewModel);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return Content(LangConfirm.MsgOrderNotConfirm);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return Content(LangAll.MsgInvalidParam);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public ActionResult ConfirmCopy(string srcSINO)
|
|
|
{
|
|
|
ConfirmEditViewModel viewModel = null;
|
|
|
if (!string.IsNullOrEmpty(srcSINO))
|
|
|
{
|
|
|
var model = bookingDB.Confirms.First(o => o.SINO == srcSINO);
|
|
|
viewModel = model.AsEditViewModel();
|
|
|
viewModel.SINO = string.Empty;
|
|
|
viewModel.CtrnList = bookingDB.Ctns.Where(c => c.ORDNO == srcSINO).AsConfirmEditViewModelList();
|
|
|
|
|
|
if (model.CLOSEDOCDATE.HasValue)
|
|
|
{
|
|
|
if (model.CLOSEDOCDATE.Value > DateTime.Now)
|
|
|
{
|
|
|
TimeSpan ts = model.CLOSEDOCDATE.Value - DateTime.Now;
|
|
|
ViewBag.RemainTimeClosing = string.Format("距离截单时间({0}):{1}天{2}小时", model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss"), ts.Days, ts.Hours);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
TimeSpan ts = DateTime.Now - model.CLOSEDOCDATE.Value;
|
|
|
ViewBag.RemainTimeClosing = string.Format("超过截单时间({0}):{1}天{2}小时", model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss"), ts.Days, ts.Hours);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (model.CLOSINGDATE.HasValue && model.CLOSINGDATE.Value < DateTime.Now)
|
|
|
{
|
|
|
ViewBag.ClosingDateExpire = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ViewBag.ClosingDateExpire = false;
|
|
|
}
|
|
|
|
|
|
ViewBag.EmployeeJson = JsonConvert.SerializeObject(jiefengDB.Employee.Select(emp => new { name = emp.姓名 }).ToList());
|
|
|
|
|
|
return View("Confirm", viewModel);
|
|
|
}
|
|
|
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.RemainTimeClosing = string.Format("距离截单时间({0}):{1}天{2}小时", model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss"), ts.Days, ts.Hours);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
TimeSpan ts = DateTime.Now - model.CLOSEDOCDATE.Value;
|
|
|
ViewBag.RemainTimeClosing = string.Format("超过截单时间({0}):{1}天{2}小时", model.CLOSEDOCDATE.Value.ToString("yyyy-MM-dd HH:mm:ss"), ts.Days, ts.Hours);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (model.CLOSINGDATE.HasValue && model.CLOSINGDATE.Value < DateTime.Now)
|
|
|
{
|
|
|
ViewBag.ClosingDateExpire = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ViewBag.ClosingDateExpire = false;
|
|
|
}
|
|
|
|
|
|
ViewBag.EmployeeJson = JsonConvert.SerializeObject(jiefengDB.Employee.Select(emp => new { name = emp.姓名 }).ToList());
|
|
|
|
|
|
//状态记录
|
|
|
var typeConfirm = OpLogModule.Confirm.ToString();
|
|
|
var logList = bookingDB.Logs.AsNoTracking().Where(l => l.BillNO == sino && l.Module == typeConfirm).OrderBy(l => l.LogId).ToList();
|
|
|
var listDisplay = new List<LogListDisplayModel>();
|
|
|
for (int i = 0; i < logList.Count; i++)
|
|
|
{
|
|
|
var chgList = ChangeLogHelper.Compare(i == 0 ? new OP_LOG() { Module = OpLogModule.Order.ToString() } : logList[i - 1], logList[i]);
|
|
|
listDisplay.Add(new LogListDisplayModel
|
|
|
{
|
|
|
OpUserName = logList[i].OpUserName,
|
|
|
OpTime = logList[i].OpTime.ToString("yyyy-MM-dd HH:mm:ss"),
|
|
|
Type = logList[i].Type,
|
|
|
ChangeList = chgList,
|
|
|
OpCompanyName = logList[i].OpCompanyName,
|
|
|
Module = logList[i].Module
|
|
|
});
|
|
|
}
|
|
|
|
|
|
ViewBag.LogList = listDisplay;
|
|
|
|
|
|
|
|
|
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;
|
|
|
if (string.IsNullOrWhiteSpace(viewModel.SINO))
|
|
|
{
|
|
|
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;
|
|
|
}
|
|
|
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 isSubmit = model.BSSTATUS == OrderConfirmStatus.Submit.ToString();
|
|
|
|
|
|
//2020-10-30:提交时,校验箱型箱量
|
|
|
if (isSubmit)
|
|
|
{
|
|
|
var hasErr = false;
|
|
|
var ctnOrder = bookingDB.Ctns.AsNoTracking().Where(c => c.ORDNO == model.ORDNO).ToList();
|
|
|
foreach (var ctn in ctnOrder)
|
|
|
{
|
|
|
var count = viewModel.CtrnList.Where(c => c.CTNALL == ctn.CTNALL).Count();
|
|
|
if (count > ctn.CTNNUM)
|
|
|
{
|
|
|
hasErr = true;
|
|
|
resp.Message += $"箱型{ctn.CTNALL}的箱量大于订舱时填写的值<br/>";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (hasErr)
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
return Json(resp);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
var otherCount = bookingDB.Confirms.Count(c => c.ORDNO == viewModel.ORDNO && c.SINO != viewModel.SINO);
|
|
|
var orderObj = bookingDB.Orders.First(o => o.ORDNO == viewModel.ORDNO);
|
|
|
|
|
|
//日志-提交
|
|
|
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;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//日志
|
|
|
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();
|
|
|
|
|
|
//DS6任务
|
|
|
if (isSubmit)
|
|
|
{
|
|
|
var names = jiefengDB.Employee.AsNoTracking().Where(e => e.网上订舱代码 == model.CARRIER).Select(e => e.姓名).ToList();
|
|
|
var strname = string.Join(",", names);
|
|
|
|
|
|
var sqlDs6 = $@"insert into t_op_task(任务编号,任务类型,任务来源,任务状态,任务说明,发起人,录入日期,任务开始时间,提单号,是否公共,任务相关人员,SEA编号,是否完成,备注)
|
|
|
values(newid(),'网上截单','网上订舱','未开始','{CurrentCompany.INFO_CLIENT}截单:{model.MBLNO};{model.PORTDISCHARGE};{model.DESTINATION}',
|
|
|
'DEMO-SA',GETDATE(),GETDATE(),'{model.MBLNO}',0,'{strname}','{model.SINO}',0,'')";
|
|
|
log.Debug(sqlDs6);
|
|
|
jiefengDB.Database.ExecuteSqlCommand(sqlDs6);
|
|
|
}
|
|
|
|
|
|
resp.Success = true;
|
|
|
resp.Message = isSubmit ? LangAll.MsgSubmitSuccess : LangAll.MsgSaveSuccess;
|
|
|
resp.Url = Url.Action("ConfirmEdit", new { sino = model.SINO });
|
|
|
resp.Id = 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();
|
|
|
|
|
|
//删除DS6任务
|
|
|
var sqlDs6 = $@"delete t_op_task where 任务类型='网上截单' and SEA编号='{ord.SINO}'";
|
|
|
log.Debug(sqlDs6);
|
|
|
jiefengDB.Database.ExecuteSqlCommand(sqlDs6);
|
|
|
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
//订舱提交后发邮件
|
|
|
[HttpGet]
|
|
|
public ActionResult SendMailAfterConfirmSubmit(string sino)
|
|
|
{
|
|
|
var model = bookingDB.Confirms.First(o => o.SINO == sino);
|
|
|
|
|
|
var mailAddr = CurrentUser.EMAIL;
|
|
|
var crm = jiefengDB.CrmClients.AsNoTracking().FirstOrDefault(c => c.客户简称 == CurrentCompany.INFO_CLIENT || c.客户简称 == model.CARRIER);
|
|
|
if (crm != null && !string.IsNullOrEmpty(crm.邮箱))
|
|
|
{
|
|
|
mailAddr += "," + crm.邮箱;
|
|
|
}
|
|
|
|
|
|
ViewBag.MailAddr = mailAddr;
|
|
|
|
|
|
var etd = model.ETD.HasValue ? model.ETD.Value.ToString("yyyy-MM-dd") : string.Empty;
|
|
|
ViewBag.Title = $"{CurrentCompany.COMPANY_NAME} 提交截单:{model.MBLNO}|{model.VESSEL}|{etd}|{model.CNTRTOTAL}|{model.PORTDISCHARGE}";
|
|
|
ViewBag.Body = $"订舱公司:{CurrentCompany.COMPANY_NAME}\r\n订舱编号:{model.ORDERNO}\r\n提单号:{model.MBLNO}\r\nETD:{etd}\r\n船公司:{model.CARRIER}\r\n箱型箱量:{model.CNTRTOTAL}\r\n卸货港:{model.PORTDISCHARGE}\r\n操作人:{CurrentUser.NAME} {CurrentUser.MOBILE}";
|
|
|
|
|
|
return View("SendMailAfterSubmit");
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 确认订舱列表
|
|
|
public ActionResult ConfirmList()
|
|
|
{
|
|
|
var colCfg = bookingDB.ConfigDatas.FirstOrDefault(c => c.Module == ConfigData.ModuleConfirm && c.Category == ConfigData.CateListColumn && c.UserId == CurrentUser.GID);
|
|
|
if (colCfg != null)
|
|
|
{
|
|
|
ViewBag.ColumnConfigData = JsonConvert.DeserializeAnonymousType(colCfg.JsonData, new dynamic[] { new { colName = "", visible = false, sort = 0, width = 0 } }).OrderBy(c => Convert.ToInt32(c.sort)).ToList();
|
|
|
}
|
|
|
|
|
|
ViewBag.ColDic = GetColDicConfirm();
|
|
|
|
|
|
var colCfgOrder = bookingDB.ConfigDatas.FirstOrDefault(c => c.Module == ConfigData.ModuleOrder && c.Category == ConfigData.CateListColumn && c.UserId == CurrentUser.GID);
|
|
|
if (colCfgOrder != null)
|
|
|
{
|
|
|
ViewBag.ColumnConfigDataOrder = JsonConvert.DeserializeAnonymousType(colCfgOrder.JsonData, new dynamic[] { new { colName = "", visible = false, sort = 0, width = 0 } }).OrderBy(c => Convert.ToInt32(c.sort)).ToList();
|
|
|
}
|
|
|
|
|
|
ViewBag.ColDicOrder = GetColDicOrder();
|
|
|
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(req.BSSTATUS))
|
|
|
{
|
|
|
query = query.Where(o => o.BSSTATUS == req.BSSTATUS);
|
|
|
}
|
|
|
|
|
|
#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 query = jiefengDB.OpSeaes.AsNoTracking().OrderByDescending(s => s.录入日期).Where(s => s.委托单位 == CurrentCompany.INFO_CLIENT);
|
|
|
if (!string.IsNullOrWhiteSpace(condition))
|
|
|
{
|
|
|
var obj = new { VESSEL = "", VOYNO = "", MBLNO = "", INVNO = "", BSNO = "" };
|
|
|
var jsonObj = JsonConvert.DeserializeAnonymousType(condition, obj);
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(jsonObj.VESSEL))
|
|
|
{
|
|
|
query = query.Where(s => s.船名.IndexOf(jsonObj.VESSEL) > -1);
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(jsonObj.VOYNO))
|
|
|
{
|
|
|
query = query.Where(s => s.航次.IndexOf(jsonObj.VOYNO) > -1);
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(jsonObj.MBLNO))
|
|
|
{
|
|
|
query = query.Where(s => s.主提单号 == jsonObj.MBLNO);
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(jsonObj.INVNO))
|
|
|
{
|
|
|
query = query.Where(s => s.发票号 == jsonObj.INVNO);
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(jsonObj.BSNO))
|
|
|
{
|
|
|
query = query.Where(s => s.编号 == jsonObj.BSNO);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var list = query.Skip(offset).Take(limit).ToList();
|
|
|
|
|
|
var resultList = new List<dynamic>();
|
|
|
list.ForEach(s =>
|
|
|
{
|
|
|
resultList.Add(new
|
|
|
{
|
|
|
BSNO = s.编号,
|
|
|
VESSEL = s.船名,
|
|
|
VOYNO = s.航次,
|
|
|
MBLNO = s.主提单号,
|
|
|
INVNO = s.发票号,
|
|
|
CUSTOMNO = s.报关单号,
|
|
|
CNTRTOTAL = s.集装箱,
|
|
|
ETD = s.开船日期.HasValue ? s.开船日期.Value.ToString("yyyy-MM-dd") : string.Empty,
|
|
|
ETA = s.预抵日期.HasValue ? s.预抵日期.Value.ToString("yyyy-MM-dd") : string.Empty,
|
|
|
YARD = s.场站,
|
|
|
AMOUNT_RMB = jiefengDB.OpChFee.Where(f => f.编号 == s.编号 && f.费用状态 == "审核通过" && f.类型 == "收" && f.客户名称 == CurrentCompany.INFO_CLIENT && f.币别 == "RMB").Sum(f => f.单价 * f.数量),
|
|
|
AMOUNT_USD = jiefengDB.OpChFee.Where(f => f.编号 == s.编号 && f.费用状态 == "审核通过" && f.类型 == "收" && f.客户名称 == CurrentCompany.INFO_CLIENT && f.币别 == "USD").Sum(f => f.单价 * f.数量)
|
|
|
});
|
|
|
});
|
|
|
|
|
|
int count = query.Count();
|
|
|
|
|
|
return Json(new { Data = resultList, Total = count });
|
|
|
}
|
|
|
|
|
|
[HttpGet]
|
|
|
public ActionResult OpFeeList(string BSNO)
|
|
|
{
|
|
|
ViewBag.BSNO = BSNO;
|
|
|
ViewBag.ClientName = ConfigurationManager.AppSettings["ClientName"];
|
|
|
ViewBag.ClientAddress = ConfigurationManager.AppSettings["ClientAddress"];
|
|
|
ViewBag.ClientTel = ConfigurationManager.AppSettings["ClientTel"];
|
|
|
ViewBag.ClientAccountRMB = ConfigurationManager.AppSettings["ClientAccountRMB"];
|
|
|
ViewBag.ClientAccountUSD = ConfigurationManager.AppSettings["ClientAccountUSD"];
|
|
|
return View();
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult OpFeeListData(string BSNO, string sort = "", string order = "")
|
|
|
{
|
|
|
var list = jiefengDB.OpChFee.Where(f => f.费用状态 == "审核通过" && f.类型 == "收" && f.编号 == BSNO && f.客户名称 == CurrentCompany.INFO_CLIENT).ToList();
|
|
|
|
|
|
var resultList = list.Select(f => new
|
|
|
{
|
|
|
FeeName = f.费用名称,
|
|
|
Unit = f.标准,
|
|
|
UnitPrice = f.单价,
|
|
|
Quantity = f.数量,
|
|
|
ExChangerate = f.汇率,
|
|
|
Amount = f.金额,
|
|
|
IsConfirm = f.IS_CONFIRM
|
|
|
});
|
|
|
|
|
|
return Json(new { Success = true, Data = resultList });
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult OpFeeConfirmData(string BSNO)
|
|
|
{
|
|
|
RespCommon resp = new RespCommon();
|
|
|
var list = jiefengDB.OpChFee.Where(f => f.费用状态 == "审核通过" && f.类型 == "收" && f.编号 == BSNO && f.客户名称 == CurrentCompany.INFO_CLIENT).ToList();
|
|
|
|
|
|
list.ForEach(f => f.IS_CONFIRM = "1");
|
|
|
jiefengDB.SaveChanges();
|
|
|
resp.Success = true;
|
|
|
resp.Message = "确认成功";
|
|
|
|
|
|
return Json(resp);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 其他
|
|
|
public ActionResult GetYardData(string ordno)
|
|
|
{
|
|
|
RespCtrnData resp = new RespCtrnData();
|
|
|
var order = bookingDB.Orders.FirstOrDefault(o => o.ORDNO == ordno);
|
|
|
if (order == null)
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = "未找到订舱信息";
|
|
|
}
|
|
|
else if (string.IsNullOrEmpty(order.BSNO))
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = "订舱信息中的BSNO为空";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
var opseae = jiefengDB.OpSeaes.FirstOrDefault(s => s.业务编号 == order.BSNO);
|
|
|
if (opseae == null)
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = "委托信息未找到";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
var client = jiefengDB.CrmClients.FirstOrDefault(c => c.场站 == true && c.客户简称 == opseae.场站);
|
|
|
if (client == null)
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = "client信息未找到";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
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=&webuserpass=&mblno=" + order.MBLNO + "&yardid=" + client.东胜代码 + "&isweb=0&custname=JieFeng&psw=JieFeng",
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
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)
|
|
|
{
|
|
|
resp.List = new List<OpCtnConfirmEditViewModel>();
|
|
|
foreach (DataRow row in dt.Rows)
|
|
|
{
|
|
|
OpCtnConfirmEditViewModel item = new OpCtnConfirmEditViewModel();
|
|
|
item.CTNALL = DataFromRowStr(row, "箱型");
|
|
|
item.CNTRNO = DataFromRowStr(row, "箱号");
|
|
|
item.SEALNO = DataFromRowStr(row, "封号");
|
|
|
item.PKGS = DataFromRowInt(row, "件数");
|
|
|
item.KINDPKGS = DataFromRowStr(row, "包装");
|
|
|
item.KGS = DataFromRowDecimal(row, "重量");
|
|
|
item.CBM = DataFromRowDecimal(row, "体积");
|
|
|
//item.TAREWEIGHT = DataFromRowDecimal(row, "皮重");
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
public class NewOrderCode {
|
|
|
private static List<string> OrderCodeList { get; set; }
|
|
|
|
|
|
private static void makesure() {
|
|
|
if (OrderCodeList == null) OrderCodeList = new List<string>();
|
|
|
}
|
|
|
|
|
|
public static void Add(string ORDERCODE) {
|
|
|
makesure();
|
|
|
if (!OrderCodeList.Exists(x => x == ORDERCODE)) {
|
|
|
OrderCodeList.Add(ORDERCODE);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static bool IsHave(string ORDERCODE)
|
|
|
{
|
|
|
makesure();
|
|
|
if (OrderCodeList.Exists(x => x == ORDERCODE))
|
|
|
{
|
|
|
return true;
|
|
|
}
|
|
|
else {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static void Del(string ORDERCODE) {
|
|
|
makesure();
|
|
|
if (OrderCodeList.Exists(x => x == ORDERCODE))
|
|
|
{
|
|
|
OrderCodeList.RemoveAll(x => x == ORDERCODE);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static string GetNew(string prefix, int curr) {
|
|
|
var code = prefix + (curr).ToString("0000");
|
|
|
if (IsHave(code))
|
|
|
{
|
|
|
curr++;
|
|
|
return GetNew(prefix, curr);
|
|
|
}
|
|
|
else {
|
|
|
Add(code);
|
|
|
return code;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private string GenOrderCode()
|
|
|
{
|
|
|
var codePrefix = ConfigurationManager.AppSettings["orderCodePrefix"];
|
|
|
var prefix = $"{codePrefix}{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));
|
|
|
}
|
|
|
curr++;
|
|
|
//var code = prefix + (curr).ToString("0000");
|
|
|
|
|
|
var code = NewOrderCode.GetNew(prefix, curr);
|
|
|
|
|
|
return code;
|
|
|
}
|
|
|
|
|
|
[HttpGet]
|
|
|
public ActionResult UpAttach(string ordno)
|
|
|
{
|
|
|
ViewBag.ORDNO = ordno;
|
|
|
return View();
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult UpAttachSave(string ordno)
|
|
|
{
|
|
|
RespCommon resp = new RespCommon();
|
|
|
if (Request.Files.Count > 0)
|
|
|
{
|
|
|
var listAtt = bookingDB.Attaches.Where(a => a.RELATIVEID == ordno).ToList();
|
|
|
if (listAtt.Count > 0)
|
|
|
{
|
|
|
listAtt.ForEach(a =>
|
|
|
{
|
|
|
bookingDB.Attaches.Remove(a);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
var attNew = new OP_ATTACH();
|
|
|
attNew.OP_TIME = DateTime.Now;
|
|
|
attNew.OP_USER = CurrentUser.NAME;
|
|
|
attNew.RELATIVEID = ordno;
|
|
|
attNew.TITLE = Path.GetFileNameWithoutExtension(Request.Files[0].FileName);
|
|
|
attNew.GID = Guid.NewGuid().ToString();
|
|
|
attNew.FILETYPE = Path.GetExtension(Request.Files[0].FileName);
|
|
|
|
|
|
string upDir = Server.MapPath($"~/{AttachUpDir}");
|
|
|
if (!Directory.Exists(upDir))
|
|
|
{
|
|
|
Directory.CreateDirectory(upDir);
|
|
|
}
|
|
|
|
|
|
var saveFilePath = Path.Combine(upDir, $"{attNew.GID}{attNew.FILETYPE}");
|
|
|
var recordFilePath = $"~/{AttachUpDir}/{attNew.GID}{attNew.FILETYPE}";
|
|
|
attNew.FILEPATH = recordFilePath;
|
|
|
Request.Files[0].SaveAs(saveFilePath);
|
|
|
bookingDB.Attaches.Add(attNew);
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
|
|
|
resp.Success = true;
|
|
|
resp.Message = "上传成功";
|
|
|
}
|
|
|
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
[HttpGet]
|
|
|
public ActionResult DownAttach(string attId)
|
|
|
{
|
|
|
var att = bookingDB.Attaches.FirstOrDefault(a => a.GID == attId);
|
|
|
if (att != null)
|
|
|
{
|
|
|
var filePath = Server.MapPath(att.FILEPATH);
|
|
|
if (System.IO.File.Exists(filePath))
|
|
|
{
|
|
|
return File(filePath, "application/octet-stream", att.TITLE);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return HttpNotFound();
|
|
|
}
|
|
|
|
|
|
[HttpPost, AllowAnonymousAttribute]
|
|
|
public ActionResult ModifyFromDS6(string json, string type = "order")
|
|
|
{
|
|
|
RespCommon resp = new RespCommon();
|
|
|
if (string.IsNullOrEmpty(json))
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = "无效json";
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
try
|
|
|
{
|
|
|
JObject jobj = JObject.Parse(json);
|
|
|
|
|
|
|
|
|
JToken jt = null;
|
|
|
if (type.ToLower() == "order")
|
|
|
{
|
|
|
if (jobj.TryGetValue("ORDNO", out jt))
|
|
|
{
|
|
|
var ordno = jt.ToString();
|
|
|
var ord = bookingDB.Orders.FirstOrDefault(o => o.ORDNO == ordno);
|
|
|
|
|
|
var propArr = ord.GetType().GetProperties();
|
|
|
|
|
|
var enumerator = jobj.GetEnumerator();
|
|
|
while (enumerator.MoveNext())
|
|
|
{
|
|
|
var prop = propArr.FirstOrDefault(p => p.Name.ToLower() == enumerator.Current.Key.ToLower());
|
|
|
if (prop != null)
|
|
|
{
|
|
|
var strVal = enumerator.Current.Value.ToString();
|
|
|
|
|
|
if (prop.PropertyType == typeof(string))
|
|
|
{
|
|
|
prop.SetValue(ord, strVal);
|
|
|
}
|
|
|
else if (prop.PropertyType == typeof(DateTime?))
|
|
|
{
|
|
|
DateTime dtTmp = DateTime.MinValue;
|
|
|
if (DateTime.TryParse(strVal, out dtTmp))
|
|
|
{
|
|
|
prop.SetValue(ord, dtTmp);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = $"字段 {prop.Name} 的值无效:{strVal}";
|
|
|
return Json(resp);
|
|
|
}
|
|
|
}
|
|
|
else if (prop.PropertyType == typeof(decimal?))
|
|
|
{
|
|
|
prop.SetValue(ord, Convert.ToDecimal(strVal));
|
|
|
}
|
|
|
else if (prop.PropertyType == typeof(int?))
|
|
|
{
|
|
|
prop.SetValue(ord, Convert.ToInt32(strVal));
|
|
|
}
|
|
|
else if (prop.PropertyType == typeof(bool?))
|
|
|
{
|
|
|
prop.SetValue(ord, Convert.ToBoolean(strVal));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var errors = bookingDB.GetValidationErrors();
|
|
|
|
|
|
var viewModel = ord.AsEditViewModel();
|
|
|
OP_LOG log = new OP_LOG();
|
|
|
log.OpTime = DateTime.Now;
|
|
|
log.OpUserId = "";
|
|
|
log.OpUserName = "东胜6";
|
|
|
log.OpCompanyId = "";
|
|
|
log.OpCompanyName = "";
|
|
|
log.Module = OpLogModule.Order.ToString();
|
|
|
log.Type = OpLogType.Save.ToString();
|
|
|
log.BillNO = ordno;
|
|
|
log.MBLNO = ord.MBLNO;
|
|
|
log.JsonValue = JsonConvert.SerializeObject(viewModel);
|
|
|
bookingDB.Logs.Add(log);
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
resp.Success = true;
|
|
|
resp.Message = "操作成功";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = "未找到ORDNO字段";
|
|
|
return Json(resp);
|
|
|
}
|
|
|
}
|
|
|
else if (type.ToLower() == "confirm")
|
|
|
{
|
|
|
if (jobj.TryGetValue("SINO", out jt))
|
|
|
{
|
|
|
var sino = jt.ToString();
|
|
|
var confirm = bookingDB.Confirms.FirstOrDefault(o => o.SINO == sino);
|
|
|
|
|
|
var propArr = confirm.GetType().GetProperties();
|
|
|
|
|
|
var enumerator = jobj.GetEnumerator();
|
|
|
while (enumerator.MoveNext())
|
|
|
{
|
|
|
var prop = propArr.FirstOrDefault(p => p.Name.ToLower() == enumerator.Current.Key.ToLower());
|
|
|
if (prop != null)
|
|
|
{
|
|
|
prop.SetValue(confirm, enumerator.Current.Value.ToString());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var viewModel = confirm.AsEditViewModel();
|
|
|
OP_LOG log = new OP_LOG();
|
|
|
log.OpTime = DateTime.Now;
|
|
|
log.OpUserId = "";
|
|
|
log.OpUserName = "东胜6";
|
|
|
log.OpCompanyId = "";
|
|
|
log.OpCompanyName = "";
|
|
|
log.Module = OpLogModule.Confirm.ToString();
|
|
|
log.Type = OpLogType.Save.ToString();
|
|
|
log.BillNO = sino;
|
|
|
log.MBLNO = confirm.MBLNO;
|
|
|
log.JsonValue = JsonConvert.SerializeObject(viewModel);
|
|
|
bookingDB.Logs.Add(log);
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
resp.Success = true;
|
|
|
resp.Message = "操作成功";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = "未找到SINO字段";
|
|
|
return Json(resp);
|
|
|
}
|
|
|
}
|
|
|
else if (type.ToLower() == "shipping")
|
|
|
{
|
|
|
//暂无需求
|
|
|
}
|
|
|
}
|
|
|
catch (JsonReaderException je)
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = "json格式不正确";
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = ex.Message;
|
|
|
}
|
|
|
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
//导入excel数据,从datatable获取一行的指定列的数据
|
|
|
private string DataFromRowStr(DataRow row, string name)
|
|
|
{
|
|
|
if (row.Table.Columns.Contains(name))
|
|
|
{
|
|
|
return row[name].ToString();
|
|
|
}
|
|
|
|
|
|
return string.Empty;
|
|
|
}
|
|
|
|
|
|
private int DataFromRowInt(DataRow row, string name)
|
|
|
{
|
|
|
if (row.Table.Columns.Contains(name))
|
|
|
{
|
|
|
if (int.TryParse(row[name].ToString(), out int rtn))
|
|
|
{
|
|
|
return rtn;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
private decimal DataFromRowDecimal(DataRow row, string name)
|
|
|
{
|
|
|
if (row.Table.Columns.Contains(name))
|
|
|
{
|
|
|
if (decimal.TryParse(row[name].ToString(), out decimal rtn))
|
|
|
{
|
|
|
return rtn;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
//箱型 Bootstrap Search Suggest (截单界面专用)
|
|
|
public ActionResult SuggestCTN(string keyword)
|
|
|
{
|
|
|
RespSuggest resp = new RespSuggest();
|
|
|
var paraObj = JsonConvert.DeserializeAnonymousType(keyword, new { ord = "", ctn = "" });
|
|
|
|
|
|
var query = bookingDB.Ctns.AsNoTracking().Where(o => o.ORDNO == paraObj.ord);
|
|
|
|
|
|
if (!string.IsNullOrEmpty(paraObj.ctn))
|
|
|
{
|
|
|
query = query.Where(c => c.CTNALL.Contains(paraObj.ctn));
|
|
|
|
|
|
}
|
|
|
|
|
|
resp.value = query.Select(x => new { CTNID = x.CTN_ID, CTN = x.CTNALL }).ToList();
|
|
|
|
|
|
resp.code = 200;
|
|
|
return Json(resp, JsonRequestBehavior.AllowGet);
|
|
|
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 舱单
|
|
|
|
|
|
|
|
|
[HttpGet]
|
|
|
public ActionResult Shipping(string sino)
|
|
|
{
|
|
|
ShippingEditViewModel viewModel = null;
|
|
|
if (!string.IsNullOrEmpty(sino))
|
|
|
{
|
|
|
var siobj = bookingDB.Confirms.FirstOrDefault(s => s.SINO == sino);
|
|
|
if (siobj == null)
|
|
|
{
|
|
|
return HttpNotFound();
|
|
|
}
|
|
|
|
|
|
viewModel = siobj.AsShippingEditViewModel();
|
|
|
|
|
|
#region 解析shipper、consignee、notifyparty
|
|
|
string[] arrShipper = siobj.SHIPPER.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
|
|
|
for (int line = 0; line < arrShipper.Length; line++)
|
|
|
{
|
|
|
if (line == 0)
|
|
|
{
|
|
|
viewModel.SHIPPERNAME = arrShipper[line];
|
|
|
}
|
|
|
else if (line == 1)
|
|
|
{
|
|
|
viewModel.SHIPPERADDR1 = arrShipper[line];
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
int idx = arrShipper[line].IndexOf("TEL:");
|
|
|
if (idx > -1)
|
|
|
{
|
|
|
int idxStart = idx + 4;
|
|
|
int idxEnd = arrShipper[line].LastIndexOf(' ');
|
|
|
int len = 0;
|
|
|
if (idxEnd == -1)
|
|
|
{
|
|
|
len = arrShipper[line].Length - idxStart;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
len = idxEnd - idxStart;
|
|
|
}
|
|
|
|
|
|
viewModel.SHIPPERTEL = arrShipper[line].Substring(idxStart, len);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
string[] arrConsignee = siobj.CONSIGNEE.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
|
|
|
for (int line = 0; line < arrConsignee.Length; line++)
|
|
|
{
|
|
|
if (line == 0)
|
|
|
{
|
|
|
viewModel.CONSIGNEENAME = arrConsignee[line];
|
|
|
}
|
|
|
else if (line == 1)
|
|
|
{
|
|
|
viewModel.CONSIGNEEADDR1 = arrConsignee[line];
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
int idx = arrConsignee[line].IndexOf("TEL:");
|
|
|
if (idx > -1)
|
|
|
{
|
|
|
int idxStart = idx + 4;
|
|
|
int idxEnd = arrConsignee[line].LastIndexOf(' ');
|
|
|
int len = 0;
|
|
|
if (idxEnd == -1)
|
|
|
{
|
|
|
len = arrConsignee[line].Length - idxStart;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
len = idxEnd - idxStart;
|
|
|
}
|
|
|
|
|
|
viewModel.CONSIGNEETEL = arrConsignee[line].Substring(idxStart, len);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
string[] arrNotifyparty = siobj.NOTIFYPARTY.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
|
|
|
for (int line = 0; line < arrNotifyparty.Length; line++)
|
|
|
{
|
|
|
if (line == 0)
|
|
|
{
|
|
|
viewModel.NOTIFYPARTYNAME = arrNotifyparty[line];
|
|
|
}
|
|
|
else if (line == 1)
|
|
|
{
|
|
|
viewModel.NOTIFYPARTYADDR1 = arrNotifyparty[line];
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
int idx = arrNotifyparty[line].IndexOf("TEL:");
|
|
|
if (idx > -1)
|
|
|
{
|
|
|
int idxStart = idx + 4;
|
|
|
int idxEnd = arrNotifyparty[line].LastIndexOf(' ');
|
|
|
int len = 0;
|
|
|
if (idxEnd == -1)
|
|
|
{
|
|
|
len = arrNotifyparty[line].Length - idxStart;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
len = idxEnd - idxStart;
|
|
|
}
|
|
|
|
|
|
viewModel.NOTIFYPARTYTEL = arrNotifyparty[line].Substring(idxStart, len);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
viewModel = new ShippingEditViewModel();
|
|
|
}
|
|
|
|
|
|
|
|
|
viewModel.BSSTATUS = ShippingStatus.Create.ToString();
|
|
|
viewModel.CtrnList = bookingDB.Ctns.Where(c => c.ORDNO == sino).AsShippingEditViewModelList();
|
|
|
|
|
|
|
|
|
return View(viewModel);
|
|
|
}
|
|
|
|
|
|
|
|
|
[HttpGet]
|
|
|
public ActionResult ShippingEdit(string shipid)
|
|
|
{
|
|
|
ShippingEditViewModel viewModel = null;
|
|
|
if (!string.IsNullOrEmpty(shipid))
|
|
|
{
|
|
|
var model = bookingDB.Shippings.First(o => o.SHIPPINGNO == shipid);
|
|
|
viewModel = model.AsEditViewModel();
|
|
|
viewModel.CtrnList = bookingDB.Ctns.Where(c => c.ORDNO == shipid).AsShippingEditViewModelList();
|
|
|
|
|
|
return View("Shipping", viewModel);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return Content(LangAll.MsgInvalidParam);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
[HttpGet]
|
|
|
public ActionResult ShippingCopy(string shipid, bool subFlag = false)
|
|
|
{
|
|
|
ShippingEditViewModel viewModel = null;
|
|
|
if (!string.IsNullOrEmpty(shipid))
|
|
|
{
|
|
|
var model = bookingDB.Shippings.First(o => o.SHIPPINGNO == shipid);
|
|
|
viewModel = model.AsEditViewModel();
|
|
|
viewModel.SHIPPINGNO = string.Empty;
|
|
|
viewModel.BSSTATUS = ShippingStatus.Create.ToString();
|
|
|
viewModel.SUB_FLAG = subFlag;
|
|
|
viewModel.CtrnList = bookingDB.Ctns.Where(c => c.ORDNO == shipid).AsShippingEditViewModelList();
|
|
|
|
|
|
return View("Shipping", viewModel);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return Content(LangAll.MsgInvalidParam);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
[HttpGet]
|
|
|
public ActionResult ShippingList()
|
|
|
{
|
|
|
var colCfg = bookingDB.ConfigDatas.FirstOrDefault(c => c.Module == ConfigData.ModuleShipping && c.Category == ConfigData.CateListColumn && c.UserId == CurrentUser.GID);
|
|
|
if (colCfg != null)
|
|
|
{
|
|
|
ViewBag.ColumnConfigData = JsonConvert.DeserializeAnonymousType(colCfg.JsonData, new dynamic[] { new { colName = "", visible = false, sort = 0, width = 0 } }).OrderBy(c => Convert.ToInt32(c.sort)).ToList();
|
|
|
}
|
|
|
|
|
|
ViewBag.ColDic = GetColDicShipping();
|
|
|
|
|
|
return View();
|
|
|
}
|
|
|
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult ShippingList(ReqShippingList req, int offset = 1, int limit = 10, string sort = "", string order = "asc")
|
|
|
{
|
|
|
var query = bookingDB.Shippings.Where(o => o.CORPID == CurrentCompany.GID);
|
|
|
|
|
|
#region 条件
|
|
|
if (!string.IsNullOrWhiteSpace(req.MBLNO))
|
|
|
{
|
|
|
query = query.Where(o => o.MBLNO == req.MBLNO);
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(req.HBLNO))
|
|
|
{
|
|
|
query = query.Where(o => o.HBLNO == req.HBLNO);
|
|
|
}
|
|
|
|
|
|
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;
|
|
|
|
|
|
var dataList = list.AsListViewModelList();
|
|
|
resp.DataList = dataList;
|
|
|
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult ShippingSave(ShippingEditViewModel viewModel)
|
|
|
{
|
|
|
RespRedirect resp = new RespRedirect();
|
|
|
|
|
|
#region 保存
|
|
|
|
|
|
OP_SEAE_SHIPPING model = null;
|
|
|
bool isNew = false;
|
|
|
if (string.IsNullOrWhiteSpace(viewModel.SHIPPINGNO))
|
|
|
{
|
|
|
isNew = true;
|
|
|
viewModel.SHIPPINGNO = 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;
|
|
|
}
|
|
|
bookingDB.Shippings.Add(model);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
model = bookingDB.Shippings.First(o => o.SHIPPINGNO == viewModel.SHIPPINGNO);
|
|
|
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.SHIPPINGNO).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.SHIPPINGNO;
|
|
|
bookingDB.Ctns.Add(saveModel);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
var strCtrnList = viewModel.CtrnList.Select(c => $"{c.CTNALL}*{c.CTNNUM}");
|
|
|
model.CNTRTOTAL = string.Join(" / ", strCtrnList);
|
|
|
model.PKGS = viewModel.CtrnList.Sum(c => c.PKGS);
|
|
|
model.KGS = viewModel.CtrnList.Sum(c => c.KGS);
|
|
|
model.CBM = viewModel.CtrnList.Sum(c => c.CBM);
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
var isSubmit = model.BSSTATUS == ShippingStatus.Submit.ToString();
|
|
|
if (isNew || (!isNew && !isSubmit))
|
|
|
{
|
|
|
//日志
|
|
|
LogHelper.Log(OpLogModule.Shipping, OpLogType.Save, model.SHIPPINGNO, model.MBLNO, JsonConvert.SerializeObject(viewModel));
|
|
|
}
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
//日志-提交
|
|
|
if (isSubmit)
|
|
|
{
|
|
|
LogHelper.Log(OpLogModule.Shipping, OpLogType.Submit, model.SHIPPINGNO, model.MBLNO, JsonConvert.SerializeObject(viewModel));
|
|
|
}
|
|
|
|
|
|
//提交时,发送邮件
|
|
|
if (isSubmit)
|
|
|
{
|
|
|
var recMail = ConfigurationManager.AppSettings["shippingRecEmail"];
|
|
|
if (!string.IsNullOrEmpty(recMail))
|
|
|
{
|
|
|
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 = recMail;
|
|
|
sendMail.TITLE = $"{CurrentCompany.COMPANY_NAME} 提交舱单:{model.MBLNO}|{etd}|{model.CNTRTOTAL}|{model.PORTDISCHARGE}";
|
|
|
sendMail.BODY = $"订舱公司:{CurrentCompany.COMPANY_NAME}\r\n主提单号:{model.MBLNO}\r\nETD:{etd}\r\n箱型箱量:{model.CNTRTOTAL}\r\n卸货港:{model.PORTDISCHARGE}\r\n操作人:{CurrentUser.NAME} {CurrentUser.MOBILE}";
|
|
|
sendMail.CREATE_TIME = DateTime.Now;
|
|
|
sendMail.STATUS = SendMailStatus.Create.ToString();
|
|
|
bookingDB.SendMails.Add(sendMail);
|
|
|
bookingDB.SaveChanges();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
//DS6任务
|
|
|
if (isSubmit)
|
|
|
{
|
|
|
var sqlDs6 = $@"insert into t_op_task(任务编号,任务类型,任务来源,任务状态,任务说明,发起人,录入日期,任务开始时间,提单号,是否公共,任务相关人员,SEA编号,是否完成,备注)
|
|
|
values(newid(),'网上舱单申报','网上订舱','未开始','{CurrentCompany.INFO_CLIENT}舱单申报:{model.MBLNO};{model.PORTDISCHARGE};{model.DESTINATION}',
|
|
|
'DEMO-SA',GETDATE(),GETDATE(),'{model.MBLNO}',0,'DEMO-SA','{model.SHIPPINGNO}',0,'')";
|
|
|
log.Debug(sqlDs6);
|
|
|
jiefengDB.Database.ExecuteSqlCommand(sqlDs6);
|
|
|
}
|
|
|
|
|
|
|
|
|
//舱单数据插入DS6
|
|
|
if (isSubmit)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
var opSeae = jiefengDB.OpSeaes.AsNoTracking().FirstOrDefault(o => o.主提单号 == model.MBLNO);
|
|
|
var rtn = jiefengDB.Database.SqlQuery<string>(@"DECLARE @return_value int,@str varchar(12)
|
|
|
EXEC @return_value = [dbo].[p_id]
|
|
|
@str = @str OUTPUT
|
|
|
SELECT @str as N'@str'
|
|
|
SELECT 'Return Value' = @return_value").First();
|
|
|
|
|
|
t_op_seae_edi edi = new t_op_seae_edi();
|
|
|
edi.编号 = rtn;
|
|
|
edi.EDI类型 = "CN";
|
|
|
edi.EDI状态 = "未发送";
|
|
|
edi.录入人 = CurrentUser.NAME;
|
|
|
edi.录入日期 = DateTime.Now;
|
|
|
edi.主提单号 = model.MBLNO;
|
|
|
edi.分提单号 = model.HBLNO;
|
|
|
edi.舱单来源 = "网上申报";
|
|
|
|
|
|
var crm = jiefengDB.CrmClients.FirstOrDefault(c => c.客户简称 == model.CARRIER);
|
|
|
edi.船公司代码 = crm == null ? string.Empty : crm.EDI代码;
|
|
|
if (opSeae != null)
|
|
|
{
|
|
|
edi.主编号 = opSeae.编号;
|
|
|
edi.业务编号 = opSeae.业务编号;
|
|
|
edi.备注 = opSeae.备注;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
edi.主编号 = string.Empty;
|
|
|
edi.业务编号 = string.Empty;
|
|
|
edi.备注 = string.Empty;
|
|
|
}
|
|
|
edi.发货人名称 = model.SHIPPERNAME;
|
|
|
edi.发货人地址1 = model.SHIPPERADDR1;
|
|
|
edi.发货人国家代码 = model.SHIPPERCOUNTRY;
|
|
|
edi.发货人电话 = model.SHIPPERTEL;
|
|
|
edi.收货人名称 = model.CONSIGNEENAME;
|
|
|
edi.收货人地址1 = model.CONSIGNEEADDR1;
|
|
|
edi.收货人国家代码 = model.CONSIGNEERCOUNTRY;
|
|
|
edi.收货人电话 = model.CONSIGNEETEL;
|
|
|
edi.通知人名称 = model.NOTIFYPARTYNAME;
|
|
|
edi.通知人地址1 = model.NOTIFYPARTYADDR1;
|
|
|
edi.通知人国家代码 = model.NOTIFYPARTYCOUNTRY;
|
|
|
edi.通知人电话 = model.NOTIFYPARTYTEL;
|
|
|
edi.装货港 = model.PORTLOAD;
|
|
|
edi.装港代码 = model.PORTLOADID;
|
|
|
edi.卸货代码 = model.PORTDISCHARGEID;
|
|
|
edi.卸货港 = model.PORTDISCHARGE;
|
|
|
edi.目的代码 = model.DESTINATIONID;
|
|
|
edi.目的地 = model.DESTINATION;
|
|
|
edi.运输条款 = model.SERVICE;
|
|
|
edi.唛头 = model.MARKS;
|
|
|
edi.货物描述 = model.DESCRIPTION;
|
|
|
edi.件数 = model.PKGS;
|
|
|
edi.包装 = model.KINDPKGS;
|
|
|
edi.重量 = model.KGS;
|
|
|
edi.尺码 = model.CBM;
|
|
|
edi.危险品分类 = model.DCLASS;
|
|
|
edi.危险品编号 = model.DUNNO;
|
|
|
edi.设置温度 = model.TEMPSET;
|
|
|
edi.冷藏通风量 = model.REEFERF;
|
|
|
edi.货物标识 = model.CARGOID;
|
|
|
//edi.船公司 = model.CARRIER;
|
|
|
edi.运输方式 = model.HSCODE;
|
|
|
edi.湿度 = model.HUMIDITY;
|
|
|
edi.船代 = model.CHUANDAI;
|
|
|
edi.订舱号码 = "";
|
|
|
edi.传输目的 = "A";
|
|
|
edi.装运类型 = "FCL";
|
|
|
edi.是否最后分票 = true;
|
|
|
edi.文件类型 = "Master";
|
|
|
jiefengDB.OpseaeEdis.Add(edi);
|
|
|
|
|
|
var ctnList = bookingDB.Ctns.Where(c => c.ORDNO == model.SHIPPINGNO).ToList();
|
|
|
foreach (var item in ctnList)
|
|
|
{
|
|
|
t_op_ctn_edi ctnEdi = new t_op_ctn_edi();
|
|
|
ctnEdi.数量 = item.CTNNUM.Value;
|
|
|
var ctn = jiefengDB.Ctns.AsNoTracking().FirstOrDefault(c => c.MSC代码 == item.CTNALL);
|
|
|
if (ctn != null)
|
|
|
{
|
|
|
ctnEdi.表现形式 = ctn.表现形式;
|
|
|
ctnEdi.代码 = ctn.代码;
|
|
|
ctnEdi.箱型 = ctn.箱型;
|
|
|
ctnEdi.尺寸 = ctn.尺寸;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ctnEdi.代码 = "";
|
|
|
ctnEdi.表现形式 = "";
|
|
|
ctnEdi.箱型 = "";
|
|
|
ctnEdi.尺寸 = "";
|
|
|
}
|
|
|
ctnEdi.TEU = item.TEU.Value;
|
|
|
|
|
|
ctnEdi.件数 = item.PKGS;
|
|
|
ctnEdi.包装 = item.KINDPKGS;
|
|
|
ctnEdi.重量 = item.KGS;
|
|
|
ctnEdi.尺码 = item.CBM;
|
|
|
ctnEdi.编号 = rtn;
|
|
|
ctnEdi.箱号 = item.CNTRNO;
|
|
|
ctnEdi.封号 = item.SEALNO;
|
|
|
|
|
|
jiefengDB.OpCtnEdis.Add(ctnEdi);
|
|
|
}
|
|
|
|
|
|
jiefengDB.SaveChanges();
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
var excep = ex;
|
|
|
while (excep != null)
|
|
|
{
|
|
|
log.Error(excep.Message);
|
|
|
log.Error(excep.StackTrace);
|
|
|
|
|
|
excep = excep.InnerException;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
resp.Success = true;
|
|
|
resp.Message = isSubmit ? LangAll.MsgSubmitSuccess : LangAll.MsgSaveSuccess;
|
|
|
resp.Url = Url.Action("ShippingEdit", new { shipid = model.SHIPPINGNO });
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
//导入舱单数据
|
|
|
[HttpPost]
|
|
|
public ActionResult ImportShippingFromExcel()
|
|
|
{
|
|
|
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)
|
|
|
{
|
|
|
foreach (DataRow row in dt.Rows)
|
|
|
{
|
|
|
var mblno = DataFromRowStr(row, "报关提单号");
|
|
|
var shipping = bookingDB.Shippings.FirstOrDefault(s => s.MBLNO == mblno);
|
|
|
if (shipping == null)
|
|
|
{
|
|
|
shipping = new OP_SEAE_SHIPPING();
|
|
|
shipping.SHIPPINGNO = Guid.NewGuid().ToString().Replace("-", "");
|
|
|
shipping.CREATETIME = DateTime.Now;
|
|
|
shipping.USERID = CurrentUser.GID;
|
|
|
shipping.CORPID = CurrentCompany.GID;
|
|
|
shipping.BSSTATUS = ShippingStatus.Create.ToString();
|
|
|
shipping.BSDATE = DateTime.Today;
|
|
|
|
|
|
bookingDB.Shippings.Add(shipping);
|
|
|
|
|
|
}
|
|
|
|
|
|
shipping.VESSEL = DataFromRowStr(row, "船名");
|
|
|
shipping.VOYNO = DataFromRowStr(row, "航次");
|
|
|
shipping.MBLNO = DataFromRowStr(row, "报关提单号");
|
|
|
shipping.CARRIER = DataFromRowStr(row, "船公司");
|
|
|
shipping.BLFRT = DataFromRowStr(row, "付款方式");
|
|
|
shipping.SERVICE = DataFromRowStr(row, "运输条款");
|
|
|
shipping.PORTLOAD = DataFromRowStr(row, "装货港");
|
|
|
shipping.PORTLOADID = DataFromRowStr(row, "装货港代码");
|
|
|
shipping.PORTDISCHARGE = DataFromRowStr(row, "卸货港");
|
|
|
shipping.PORTDISCHARGEID = DataFromRowStr(row, "卸货港代码");
|
|
|
shipping.DESTINATION = DataFromRowStr(row, "目的港");
|
|
|
shipping.DESTINATIONID = DataFromRowStr(row, "目的港代码");
|
|
|
shipping.SHIPPERNAME = DataFromRowStr(row, "发货人公司名");
|
|
|
shipping.SHIPPERADDR1 = DataFromRowStr(row, "发货人地址");
|
|
|
shipping.SHIPPERCOUNTRY = DataFromRowStr(row, "发货人国家代码");
|
|
|
shipping.SHIPPERTEL = DataFromRowStr(row, "发货人联系方式");
|
|
|
shipping.CONSIGNEENAME = DataFromRowStr(row, "收货人公司名");
|
|
|
shipping.CONSIGNEEADDR1 = DataFromRowStr(row, "收货人地址");
|
|
|
shipping.CONSIGNEERCOUNTRY = DataFromRowStr(row, "收货人国家代码");
|
|
|
shipping.CONSIGNEETEL = DataFromRowStr(row, "收货人联系方式");
|
|
|
shipping.NOTIFYPARTYNAME = DataFromRowStr(row, "通知人公司名");
|
|
|
shipping.NOTIFYPARTYADDR1 = DataFromRowStr(row, "通知人地址");
|
|
|
shipping.NOTIFYPARTYCOUNTRY = DataFromRowStr(row, "通知人国家代码");
|
|
|
shipping.NOTIFYPARTYTEL = DataFromRowStr(row, "通知人联系方式");
|
|
|
shipping.PKGS = DataFromRowInt(row, "件数");
|
|
|
shipping.KGS = DataFromRowDecimal(row, "重量");
|
|
|
shipping.CBM = DataFromRowDecimal(row, "体积");
|
|
|
shipping.DESCRIPTION = DataFromRowStr(row, "品名");
|
|
|
shipping.MARKS = DataFromRowStr(row, "唛头");
|
|
|
shipping.HSCODE = DataFromRowStr(row, "HSCODE");
|
|
|
|
|
|
OP_CTN ctn = new OP_CTN();
|
|
|
ctn.CTN_ID = Guid.NewGuid().ToString().Replace("-", "");
|
|
|
ctn.ORDNO = shipping.SHIPPINGNO;
|
|
|
ctn.CTNALL = DataFromRowStr(row, "箱型");
|
|
|
ctn.CNTRNO = DataFromRowStr(row, "箱号");
|
|
|
ctn.SEALNO = DataFromRowStr(row, "铅封号");
|
|
|
ctn.KINDPKGS = DataFromRowStr(row, "包装单位");
|
|
|
bookingDB.Ctns.Add(ctn);
|
|
|
|
|
|
}
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
resp.Success = true;
|
|
|
resp.Message = "导入成功!";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = "excel无数据!";
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = ex.Message;
|
|
|
}
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
//批量提交
|
|
|
[HttpPost]
|
|
|
public ActionResult SubmitBatch(string idStr)
|
|
|
{
|
|
|
RespCommon resp = new RespCommon();
|
|
|
var arr = idStr.Split(',');
|
|
|
var list = bookingDB.Shippings.Where(s => arr.Contains(s.SHIPPINGNO)).ToList();
|
|
|
#region 校验
|
|
|
StringBuilder builder = new StringBuilder();
|
|
|
var allValid = true;
|
|
|
foreach (var item in list)
|
|
|
{
|
|
|
var checkOk = true;
|
|
|
|
|
|
#region 基本信息
|
|
|
if (string.IsNullOrEmpty(item.MBLNO))
|
|
|
{
|
|
|
builder.AppendLine($"主提单号未填写");
|
|
|
checkOk = false;
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.CARRIER))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写船公司");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (!item.ETD.HasValue)
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写ETD");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.VESSEL))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写船名");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.VOYNO))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写航次");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.CHUANDAI))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写船代");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 发货人、收货人、通知人
|
|
|
if (string.IsNullOrEmpty(item.SHIPPERNAME))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写发货人");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.SHIPPERADDR1))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写发货人地址");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.SHIPPERCOUNTRY))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写发货人国家");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.SHIPPERTEL))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写发货人电话");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.CONSIGNEENAME))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写收货人");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.CONSIGNEEADDR1))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写收货人地址");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.CONSIGNEERCOUNTRY))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写收货人国家");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.CONSIGNEETEL))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写收货人电话");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.NOTIFYPARTYNAME))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写通知人");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.NOTIFYPARTYADDR1))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写通知人地址");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.NOTIFYPARTYCOUNTRY))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写通知人国家");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.NOTIFYPARTYTEL))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写通知人电话");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 港口信息
|
|
|
if (string.IsNullOrEmpty(item.PORTLOADID))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写装货港");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.PORTDISCHARGEID))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写卸货港");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.PLACERECEIPTID))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写收货地");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.DESTINATIONID))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写目的地");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 货物信息
|
|
|
if (string.IsNullOrEmpty(item.MARKS))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写唛头");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.DESCRIPTION))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写货描");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.CARGOID))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写货物标识");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(item.KINDPKGS))
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写包装");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (!item.PKGS.HasValue)
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写件数");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (!item.KGS.HasValue)
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写重量");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (!item.CBM.HasValue)
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写尺码");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
var ctrnCount = bookingDB.Ctns.AsNoTracking().Count(c => c.ORDNO == item.SHIPPINGNO);
|
|
|
if (ctrnCount == 0)
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单未填写箱信息");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
if (item.BSSTATUS != ShippingStatus.Create.ToString())
|
|
|
{
|
|
|
builder.AppendLine($"提单号为{item.MBLNO}的舱单当前状态不可提交");
|
|
|
checkOk = false;
|
|
|
}
|
|
|
|
|
|
|
|
|
if (checkOk)
|
|
|
{
|
|
|
item.BSSTATUS = ShippingStatus.Submit.ToString();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
allValid = false;
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
if (allValid)
|
|
|
{
|
|
|
bookingDB.SaveChanges();
|
|
|
resp.Success = true;
|
|
|
resp.Message = "操作成功";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
resp.Success = false;
|
|
|
resp.Message = builder.ToString().Replace("\r\n", "<br/>");
|
|
|
}
|
|
|
|
|
|
return Json(resp);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 签单条
|
|
|
[HttpGet]
|
|
|
public ActionResult SignList()
|
|
|
{
|
|
|
return View();
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult SignListData(int offset = 0, int limit = 10)
|
|
|
{
|
|
|
RespPageData resp = new RespPageData();
|
|
|
var query = jiefengDB.OpSeaeSignMain.Where(s => s.客户名称 == CurrentCompany.INFO_CLIENT);
|
|
|
resp.DataList = query.OrderByDescending(s => s.录入日期).Skip(offset).Take(limit).AsListViewModelList();
|
|
|
resp.Total = query.Count();
|
|
|
return Json(resp);
|
|
|
}
|
|
|
|
|
|
|
|
|
[HttpGet]
|
|
|
public ActionResult SignView(string signNO)
|
|
|
{
|
|
|
var signObj = jiefengDB.OpSeaeSignMain.FirstOrDefault(s => s.签单条编号 == signNO);
|
|
|
var detailList = jiefengDB.OpSeaeSignDetail.Where(d => d.签单条编号 == signNO).ToList();
|
|
|
var personList = from detail in detailList
|
|
|
join opseae in jiefengDB.OpSeaes on detail.编号 equals opseae.编号
|
|
|
join emp in jiefengDB.Employee on opseae.操作员 equals emp.姓名
|
|
|
select emp;
|
|
|
|
|
|
#region itext7
|
|
|
MemoryStream ms = new MemoryStream();
|
|
|
iText.Kernel.Font.PdfFont fontKai = PdfFontFactory.CreateFont("C:/Windows/Fonts/simkai.TTF", iText.IO.Font.PdfEncodings.IDENTITY_H, true);
|
|
|
iText.Kernel.Font.PdfFont fontSong = PdfFontFactory.CreateFont("C:/Windows/Fonts/STSONG.TTF", iText.IO.Font.PdfEncodings.IDENTITY_H, true);
|
|
|
iText.Kernel.Font.PdfFont fontHei = PdfFontFactory.CreateFont("C:/Windows/Fonts/simhei.TTF", iText.IO.Font.PdfEncodings.IDENTITY_H, true);
|
|
|
|
|
|
const int pageWidth = 842;
|
|
|
const int pageHeight = 595;
|
|
|
const int leftPadding = 40;
|
|
|
|
|
|
DocumentProperties docProp = new DocumentProperties();
|
|
|
PdfWriter writer = new PdfWriter(ms);
|
|
|
iText.Kernel.Pdf.PdfDocument pdf = new iText.Kernel.Pdf.PdfDocument(writer);
|
|
|
pdf.SetDefaultPageSize(new iText.Kernel.Geom.PageSize(pageWidth, pageHeight));
|
|
|
Document document = new Document(pdf);
|
|
|
|
|
|
//LOGO图片
|
|
|
var imgDataLogo = iText.IO.Image.ImageDataFactory.Create(Server.MapPath(@"~/content/img/jiefeng.jpg"));
|
|
|
iText.Layout.Element.Image imgLogo = new iText.Layout.Element.Image(imgDataLogo);
|
|
|
imgLogo.SetFixedPosition(leftPadding, pageHeight - 80);//左、上、右、下
|
|
|
imgLogo.SetWidth(120);
|
|
|
imgLogo.SetHeight(40);
|
|
|
document.Add(imgLogo);
|
|
|
|
|
|
#region 标题
|
|
|
Paragraph textHead = new Paragraph("山 东 捷 丰 国 际 储 运 有 限 公 司");
|
|
|
textHead.SetFont(fontKai);
|
|
|
textHead.SetFontSize(24);
|
|
|
textHead.SetFixedPosition(200, pageHeight - 70, pageWidth);
|
|
|
document.Add(textHead);
|
|
|
|
|
|
Paragraph textSubHead = new Paragraph("SMART INTERNATIONAL LOGISTICS CO.,LTD.");
|
|
|
textSubHead.SetFont(fontHei);
|
|
|
textSubHead.SetFontSize(18);
|
|
|
textSubHead.SetFixedPosition(235, pageHeight - 90, pageWidth);
|
|
|
document.Add(textSubHead);
|
|
|
|
|
|
Paragraph textSubHead2 = new Paragraph("青岛市南京路8号府都大厦12,13层 邮编:266071");
|
|
|
textSubHead2.SetFont(fontSong);
|
|
|
textSubHead2.SetFontSize(16);
|
|
|
textSubHead2.SetFixedPosition(230, pageHeight - 110, pageWidth);
|
|
|
//textSubHead2.SetUnderline();
|
|
|
document.Add(textSubHead2);
|
|
|
|
|
|
Paragraph line = new Paragraph("".PadLeft(115, '¯'));
|
|
|
line.SetFixedPosition(leftPadding, pageHeight - 130, pageWidth);
|
|
|
document.Add(line);
|
|
|
#endregion
|
|
|
|
|
|
#region 条码、签单表标题、作废日期
|
|
|
Paragraph textNO = new Paragraph("NO:");
|
|
|
textNO.SetFont(fontSong);
|
|
|
textNO.SetFontSize(14);
|
|
|
textNO.SetFixedPosition(leftPadding, pageHeight - 160, pageWidth);
|
|
|
document.Add(textNO);
|
|
|
|
|
|
var barcode = new Barcode()
|
|
|
{
|
|
|
IncludeLabel = true,
|
|
|
Alignment = AlignmentPositions.CENTER,
|
|
|
Width = 180,
|
|
|
Height = 55,
|
|
|
RotateFlipType = RotateFlipType.RotateNoneFlipNone,
|
|
|
BackColor = Color.White,
|
|
|
ForeColor = Color.Black,
|
|
|
LabelFont = new Font("Arial", 8)
|
|
|
};
|
|
|
var imgDataBarcode = iText.IO.Image.ImageDataFactory.Create(barcode.Encode(TYPE.CODE128B, signObj.签单条编号), null);
|
|
|
iText.Layout.Element.Image imgBarcode = new iText.Layout.Element.Image(imgDataBarcode);
|
|
|
imgBarcode.SetFixedPosition(leftPadding + 30, pageHeight - 190);
|
|
|
document.Add(imgBarcode);
|
|
|
|
|
|
|
|
|
Paragraph textTitle = new Paragraph("签 单 表");
|
|
|
textTitle.SetFont(fontSong);
|
|
|
textTitle.SetFontSize(24);
|
|
|
textTitle.SetBold();
|
|
|
textTitle.SetFixedPosition(350, pageHeight - 180, pageWidth);
|
|
|
document.Add(textTitle);
|
|
|
|
|
|
Paragraph textZuofei = new Paragraph($"作废日期:{(signObj.作废日期.HasValue ? signObj.作废日期.Value.ToString("yyyy-MM-dd") : "")}");
|
|
|
textZuofei.SetFont(fontSong);
|
|
|
textZuofei.SetFontSize(16);
|
|
|
textZuofei.SetBold();
|
|
|
textZuofei.SetUnderline();
|
|
|
textZuofei.SetFixedPosition(520, pageHeight - 175, pageWidth);
|
|
|
document.Add(textZuofei);
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 客户名称等
|
|
|
|
|
|
var empFirst = personList.FirstOrDefault();
|
|
|
|
|
|
Paragraph textCustomer = new Paragraph($"客户名称:{signObj.客户名称}\t客户类型:{signObj.客户类型}\t联系人:{empFirst.姓名 ?? string.Empty}\t联系电话:{empFirst.固定电话 ?? string.Empty}");
|
|
|
textCustomer.SetFont(fontSong);
|
|
|
textCustomer.SetFontSize(14);
|
|
|
textCustomer.SetFixedPosition(leftPadding, pageHeight - 225, pageWidth);
|
|
|
document.Add(textCustomer);
|
|
|
|
|
|
|
|
|
Paragraph textJiefei = new Paragraph(signObj.账期);
|
|
|
textJiefei.SetFont(fontKai);
|
|
|
textJiefei.SetFontSize(14);
|
|
|
textJiefei.SetFixedPosition(leftPadding, pageHeight - 250, pageWidth);
|
|
|
textJiefei.SetBold();
|
|
|
textJiefei.SetUnderline();
|
|
|
document.Add(textJiefei);
|
|
|
#endregion
|
|
|
|
|
|
#region 数据表
|
|
|
var cellStyle = new Style()
|
|
|
.SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER)
|
|
|
.SetVerticalAlignment(iText.Layout.Properties.VerticalAlignment.MIDDLE);
|
|
|
Table table = new Table(new float[] { 170, 170, 100, 100, 100, 100 });
|
|
|
string[] headers = new string[] { "提单号", "船名", "航次", "签单方式", "提单签入日期", "二次改单" };
|
|
|
foreach (string h in headers)
|
|
|
{
|
|
|
Paragraph head = new Paragraph(h);
|
|
|
head.SetFont(fontSong);
|
|
|
head.SetFontSize(15);
|
|
|
table.AddCell(new Cell()
|
|
|
.Add(head)
|
|
|
.AddStyle(cellStyle));
|
|
|
}
|
|
|
|
|
|
foreach (var detail in detailList)
|
|
|
{
|
|
|
table.AddCell(new Cell().Add(new Paragraph(detail.主提单号).SetFont(fontSong)).AddStyle(cellStyle));
|
|
|
table.AddCell(new Cell().Add(new Paragraph(detail.船名).SetFont(fontSong)).AddStyle(cellStyle));
|
|
|
table.AddCell(new Cell().Add(new Paragraph(detail.航次).SetFont(fontSong)).AddStyle(cellStyle));
|
|
|
table.AddCell(new Cell().Add(new Paragraph(detail.签单方式).SetFont(fontSong)).AddStyle(cellStyle));
|
|
|
table.AddCell(new Cell().Add(new Paragraph(detail.提单签入日期.HasValue ? detail.提单签入日期.Value.ToString("yyyy-MM-dd") : string.Empty)).AddStyle(cellStyle));
|
|
|
table.AddCell(new Cell().Add(new Paragraph(detail.二次改单 ?? string.Empty).SetFont(fontSong)).AddStyle(cellStyle));
|
|
|
|
|
|
}
|
|
|
|
|
|
table.SetMarginTop(230);
|
|
|
document.Add(table);
|
|
|
#endregion
|
|
|
|
|
|
#region 月结提示、签字等
|
|
|
Paragraph textTip = new Paragraph("如果您是我司月结客户,请务必在账期内付款,如有延误,会给您的签单造成不便,敬请谅解。");
|
|
|
textTip.SetFont(fontSong);
|
|
|
textTip.SetFontSize(14);
|
|
|
document.Add(textTip);
|
|
|
|
|
|
Paragraph textSign = new Paragraph("签字:");
|
|
|
textSign.SetFont(fontSong);
|
|
|
textSign.SetFontSize(14);
|
|
|
textSign.SetPaddingLeft(500);
|
|
|
document.Add(textSign);
|
|
|
|
|
|
Paragraph textTime = new Paragraph("时间:");
|
|
|
textTime.SetFont(fontSong);
|
|
|
textTime.SetFontSize(14);
|
|
|
textTime.SetPaddingLeft(500);
|
|
|
document.Add(textTime);
|
|
|
#endregion
|
|
|
|
|
|
document.Close();
|
|
|
pdf.Close();
|
|
|
writer.Close();
|
|
|
|
|
|
byte[] bs = ms.GetBuffer();
|
|
|
pdf.Close();
|
|
|
|
|
|
return File(bs, "application/pdf");
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 列配置
|
|
|
[HttpGet]
|
|
|
public ActionResult ColumnConfig(string module, string cate)
|
|
|
{
|
|
|
Dictionary<string, string> dicAllCol = null;
|
|
|
if (module == ConfigData.ModuleOrder)
|
|
|
{
|
|
|
dicAllCol = GetColDicOrder();
|
|
|
}
|
|
|
else if (module == ConfigData.ModuleConfirm)
|
|
|
{
|
|
|
dicAllCol = GetColDicConfirm();
|
|
|
}
|
|
|
else if (module == ConfigData.ModuleShipping)
|
|
|
{
|
|
|
dicAllCol = GetColDicShipping();
|
|
|
}
|
|
|
|
|
|
ViewBag.DicCol = dicAllCol;
|
|
|
|
|
|
ViewBag.Module = module;
|
|
|
var colCfg = bookingDB.ConfigDatas.FirstOrDefault(c => c.Module == module && c.Category == cate && c.UserId == CurrentUser.GID);
|
|
|
ViewBag.JsonData = colCfg == null ? null : colCfg.JsonData;
|
|
|
return View();
|
|
|
}
|
|
|
|
|
|
private Dictionary<string, string> GetColDicOrder()
|
|
|
{
|
|
|
Dictionary<string, string> dicAllCol = new Dictionary<string, string>();
|
|
|
dicAllCol.Add("CARRIER", "船公司");
|
|
|
dicAllCol.Add("CNTRTOTAL", "集装箱");
|
|
|
dicAllCol.Add("PORTDISCHARGE", "卸货港");
|
|
|
dicAllCol.Add("CONTRACTNO", "约号");
|
|
|
dicAllCol.Add("VESSEL", "船名");
|
|
|
dicAllCol.Add("VOYNO", "航次");
|
|
|
dicAllCol.Add("MBLNO", "提单号");
|
|
|
dicAllCol.Add("ETD", "开船日期");
|
|
|
dicAllCol.Add("DESTINATION", "目的地");
|
|
|
dicAllCol.Add("PONO", "PO NO.");
|
|
|
dicAllCol.Add("BusinessNO", "业务编号");
|
|
|
dicAllCol.Add("CLOSINGDATE", "截港日期");
|
|
|
dicAllCol.Add("CLOSEDOCDATE", "截单日期");
|
|
|
dicAllCol.Add("YARD", "场站");
|
|
|
dicAllCol.Add("YardContract", "场站联系人");
|
|
|
dicAllCol.Add("BSSTATUS_NAME", "状态");
|
|
|
dicAllCol.Add("SISTATUS_NAME", "截单状态");
|
|
|
return dicAllCol;
|
|
|
}
|
|
|
|
|
|
private Dictionary<string, string> GetColDicConfirm()
|
|
|
{
|
|
|
Dictionary<string, string> dicAllCol = new Dictionary<string, string>();
|
|
|
dicAllCol.Add("CARRIER", "船公司");
|
|
|
dicAllCol.Add("YARD", "场站");
|
|
|
dicAllCol.Add("CNTRTOTAL", "集装箱");
|
|
|
dicAllCol.Add("PORTLOAD", "装货港");
|
|
|
dicAllCol.Add("PORTDISCHARGE", "卸货港");
|
|
|
dicAllCol.Add("CONTRACTNO", "客户合同号");
|
|
|
dicAllCol.Add("VESSEL", "船名");
|
|
|
dicAllCol.Add("VOYNO", "航次");
|
|
|
dicAllCol.Add("MBLNO", "提单号");
|
|
|
dicAllCol.Add("ETD", "开船日期");
|
|
|
dicAllCol.Add("DESTINATION", "目的地");
|
|
|
dicAllCol.Add("PONO", "PO NO.");
|
|
|
dicAllCol.Add("BusinessNO", "业务编号");
|
|
|
dicAllCol.Add("BSSTATUS_NAME", "状态");
|
|
|
return dicAllCol;
|
|
|
}
|
|
|
|
|
|
private Dictionary<string, string> GetColDicShipping()
|
|
|
{
|
|
|
Dictionary<string, string> dicAllCol = new Dictionary<string, string>();
|
|
|
dicAllCol.Add("MBLNO", "主提单号");
|
|
|
dicAllCol.Add("HBLNO", "分提单号");
|
|
|
dicAllCol.Add("ETD", "开船日期");
|
|
|
dicAllCol.Add("CHUANDAI", "船代");
|
|
|
dicAllCol.Add("PORTLOAD", "装货港");
|
|
|
dicAllCol.Add("PORTDISCHARGE", "卸货港");
|
|
|
dicAllCol.Add("BSSTATUS_NAME", "状态");
|
|
|
dicAllCol.Add("SENDSTATUS", "发送状态");
|
|
|
return dicAllCol;
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
|
public ActionResult ColumnConfigSave(string module, string cate, string data)
|
|
|
{
|
|
|
RespCommon resp = new RespCommon();
|
|
|
var colCfg = bookingDB.ConfigDatas.FirstOrDefault(c => c.Module == module && c.Category == cate && c.UserId == CurrentUser.GID);
|
|
|
if (colCfg == null)
|
|
|
{
|
|
|
colCfg = new ConfigData();
|
|
|
colCfg.GID = Guid.NewGuid().ToString();
|
|
|
colCfg.UserId = CurrentUser.GID;
|
|
|
colCfg.CompId = CurrentCompany.GID;
|
|
|
colCfg.Module = module;
|
|
|
colCfg.Category = ConfigData.CateListColumn;
|
|
|
bookingDB.ConfigDatas.Add(colCfg);
|
|
|
}
|
|
|
colCfg.JsonData = data;
|
|
|
bookingDB.SaveChanges();
|
|
|
|
|
|
resp.Success = true;
|
|
|
resp.Message = "保存成功";
|
|
|
|
|
|
return Json(resp);
|
|
|
}
|
|
|
#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
|
|
|
}
|
|
|
} |