You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DS7/BookingWeb/Controllers/BookingController.cs

1438 lines
57 KiB
C#

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