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/DSWeb/Areas/Dispatch/Controllers/DispatchController.cs

1396 lines
58 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using DSWeb.Areas.Dispatch.DB;
using DSWeb.Areas.Dispatch.Models;
using System.Web.Mvc;
using System.Linq;
using System.Configuration;
using DSWeb.Areas.Dispatch.Helper;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Web;
using System.Globalization;
using DSWeb.Dispatch.DAL;
using log4net;
using HcUtility.Comm;
using DSWeb.SoftMng.BLL;
using DSWeb.SoftMng.Model;
using DSWeb.SoftMng.Common;
using System.Net.Http;
using System.Text;
using System.Web.Http;
using Dingtalk;
using System.IO;
namespace DSWeb.Areas.Dispatch.Controllers
{
public class DispatchController : Controller
{
private static readonly string StateKeyRegist = "regist";
private static readonly string StateKeyDispatchList = "dispatchlist";
private static readonly string StateKeyGrabList = "grablist";
private static readonly string StateKeyFeeList = "feelist";
private static readonly string StateKeyRegistCust = "registCust";
private static readonly string StateKeyOpSeaeList = "opseaelist";
private static readonly string StateKeyStockList = "stocklist"; //虎鲸库存查询
private static readonly string StateKeyRegistCustHJ = "registCustHJ"; //虎鲸注册
private static string appid = ConfigurationManager.AppSettings["BeitongDispatchAppId"];
private static string appsecret = ConfigurationManager.AppSettings["secret"]; //string.Empty;
private static string dispatchServerUrl = ConfigurationManager.AppSettings["BeitongDispatchServerUrl"];
private ILog logger = LogManager.GetLogger("DispatchController");
private DataContext dataContext = new DataContext();
public DispatchController()
{
//var config = dataContext.MpConfigs.FirstOrDefault(c => c.AppId == appid);
//if (config == null)
//{
// throw new Exception($"未找到公众号ID: {appid}) 的配置记录,请配置后再试!");
//}
//appsecret = config.AppSecret;
}
#region 授权跳转
public ActionResult AuthRedirect(string code, string state)
{
try
{
var url = $"https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={appsecret}&code={code}&grant_type=authorization_code";
string rtnStr = WebRequestHelper.DoGet(url);
var obj = new { access_token = "", expires_in = 0, refresh_token = "", openid = "", scope = "" };
var jsonObj = JsonConvert.DeserializeAnonymousType(rtnStr, obj);
if (state == StateKeyRegist)
{
return Redirect($"{dispatchServerUrl}/Dispatch/Dispatch/DriverRegist?openid={jsonObj.openid}");
}
else if (state == StateKeyDispatchList)
{
return Redirect($"{dispatchServerUrl}/Dispatch/Dispatch/DispatchList?openid={jsonObj.openid}");
}
else if (state == StateKeyGrabList)
{
return Redirect($"{dispatchServerUrl}/Dispatch/Dispatch/GrabList?openid={jsonObj.openid}");
}
else if (state == StateKeyFeeList)
{
return Redirect($"{dispatchServerUrl}/Dispatch/Dispatch/FeeList?openid={jsonObj.openid}");
}
else if (state == StateKeyRegistCust)
{
return Redirect($"{dispatchServerUrl}/Dispatch/Dispatch/DispInfoClientRegist?openid={jsonObj.openid}");
}
else if (state == StateKeyRegistCustHJ)
{
return Redirect($"{dispatchServerUrl}/Dispatch/Stock/Regist?openid={jsonObj.openid}");
}
else if (state == StateKeyOpSeaeList)
{
return Redirect($"{dispatchServerUrl}/Dispatch/Dispatch/SaleOpSeaeList?openid={jsonObj.openid}");
}
else if (state == StateKeyStockList)
{
return Redirect($"{dispatchServerUrl}/Dispatch/Stock/StockTakeList?openid={jsonObj.openid}");
}
else
{
return Content($"非法请求");
}
}
catch (Exception ex)
{
return Content($"出错啦:{ex.Message}");
}
}
#endregion
#region 司机注册
public ActionResult DriverRegist(string openid)
{
if (!string.IsNullOrWhiteSpace(openid))
{
var driver = dataContext.Drivers.FirstOrDefault(d => d.OpenId == openid);
if (driver != null)
{
var driverModel = driver.AsDriverRegistViewModel();
ViewData["driver"] = driverModel;
ViewData["isAudit"] = driver.IsAudit;
}
else
{
ViewData["driver"] = new DriverRegistViewModel();
ViewData["isAudit"] = false; ;
}
ViewData["openid"] = openid;
ViewData["truckList"] = dataContext.InfoClients.Where(c => c.ISTRUCK == true).AsInfoClientTruckViewModelList();
return View();
}
else
{
return Content("非法请求_driver");
}
}
[System.Web.Mvc.HttpPost]
public JsonResult Regist(DriverRegistViewModel model)
{
RespCommon resp = new RespCommon();
if (!string.IsNullOrWhiteSpace(model.OpenId))
{
var driver = dataContext.Drivers.FirstOrDefault(d => d.OpenId == model.OpenId);
if (driver == null)
{
driver = model.AsDriverInfo();
dataContext.Drivers.Add(driver);
}
else
{
model.AsDriverInfo(driver);
}
dataContext.SaveChanges();
resp.Success = true;
resp.Message = "操作成功";
}
else
{
resp.Success = false;
resp.Message = "参数无效";
}
return Json(resp);
}
#endregion
#region 司机审核
public ActionResult DriverAuditList()
{
return View();
}
[System.Web.Mvc.HttpPost]
public JsonResult DriverAuditData(int offset, int limit, bool? isAudit)
{
RespDriverAuditList resp = new RespDriverAuditList();
if (isAudit.HasValue)
{
resp.Total = dataContext.Drivers.Where(d => d.IsAudit == isAudit.Value).Count();
resp.Data = dataContext.Drivers.Where(d => d.IsAudit == isAudit.Value).OrderBy(d => d.RegTime).Skip(offset).Take(limit).AsDriverAuditViewModelList();
}
else
{
resp.Total = dataContext.Drivers.Count();
resp.Data = dataContext.Drivers.OrderBy(d => d.RegTime).Skip(offset).Take(limit).AsDriverAuditViewModelList();
}
return Json(resp);
}
[System.Web.Mvc.HttpPost]
public JsonResult DriverAudit(string gid, string infoClient)
{
RespCommon resp = new RespCommon();
var driver = dataContext.Drivers.FirstOrDefault(d => d.GID == gid);
if (driver != null)
{
driver.InfoClient = infoClient;
driver.IsAudit = true;
}
dataContext.SaveChanges();
resp.Success = true;
resp.Message = "操作成功";
return Json(resp);
}
#endregion
#region 派车
public ActionResult DispatchList(string openid)
{
var driver = dataContext.Drivers.FirstOrDefault(d => d.OpenId == openid);
if (driver == null)
{
return RedirectToAction("DriverRegist", new { openid });
}
ViewData["openid"] = openid;
return View();
}
[System.Web.Mvc.HttpPost]
public JsonResult DispatchData(string openid, int page = 1, int pageSize = 10)
{
var query = from d in dataContext.Drivers
join t in dataContext.OpLetterTrucks on d.InfoClient equals t.TRUCK
join l in dataContext.OpLetters on t.LE_ID equals l.LE_ID
join s in dataContext.OpSeaes on t.BSNO equals s.BSNO
where d.IsAudit == true && d.OpenId == openid && t.TRUCKSTATUS == "已派车"
select new DispatchListViewModel
{
VESSEL = s.VESSEL,
VOYNO = s.VOYNO,
MBLNO = s.MBLNO,
CTNS = t.CTNS,
KGS = t.KGS,
TRUCKFEE = t.TRUCKFEE,
YARD = t.YARD,
FACTRYNAME = t.FACTRYNAME,
FACTRYADDR = t.FACTRYADDR,
FACTRYTIME = t.FACTRYTIME,
CLOSINGDATE = t.CLOSINGDATE,
LE_ID = t.LE_ID,
INPUTBY = l.INPUTBY,
HEAD_FMTEL = l.HEAD_FMTEL,
FeeSum = dataContext.ChFees.Where(f => f.BSNO == t.BSNO && f.CUSTOMERNAME == t.TRUCK && f.CARGO_GID == t.LE_ID && f.FEETYPE == 2 && (f.FEESTATUS == 0 || f.FEESTATUS == 8 || f.FEESTATUS == 9)).Sum(f => f.AMOUNT)
};
int count = query.Count();
List<DispatchListViewModel> list = query.OrderByDescending(x => x.FACTRYTIME).Skip((page - 1) * pageSize).Take(pageSize).ToList();
return Json(new { total = count, page, pageSize, list });
}
public ActionResult DispatchListMonth(string openid, string month)
{
var driver = dataContext.Drivers.FirstOrDefault(d => d.OpenId == openid);
if (driver == null)
{
return RedirectToAction("DriverRegist", new { openid });
}
ViewData["openid"] = openid;
ViewData["month"] = month;
return View();
}
[System.Web.Mvc.HttpPost]
public JsonResult DispatchDataMonth(string openid, string month, int page = 1, int pageSize = 10)
{
string strDateStart = string.Empty;
string strDateEnd = string.Empty;
if (!string.IsNullOrWhiteSpace(month))
{
DateTime dtMonth = DateTime.ParseExact(month, "yyyyMM", CultureInfo.InvariantCulture);
strDateStart = dtMonth.ToString("yyyy-MM-01 00:00:00");
strDateEnd = dtMonth.AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd 23:59:59");
}
else
{
return Json(new { total = 0, page, pageSize });
}
var query = from d in dataContext.Drivers
join t in dataContext.OpLetterTrucks on d.InfoClient equals t.TRUCK
join l in dataContext.OpLetters on t.LE_ID equals l.LE_ID
join s in dataContext.OpSeaes on t.BSNO equals s.BSNO
where d.IsAudit == true && d.OpenId == openid
select new DispatchListViewModel
{
VESSEL = s.VESSEL,
VOYNO = s.VOYNO,
MBLNO = s.MBLNO,
CTNS = t.CTNS,
KGS = t.KGS,
TRUCKFEE = t.TRUCKFEE,
YARD = t.YARD,
FACTRYNAME = t.FACTRYNAME,
FACTRYADDR = t.FACTRYADDR,
FACTRYTIME = t.FACTRYTIME,
CLOSINGDATE = t.CLOSINGDATE,
LE_ID = t.LE_ID,
INPUTBY = l.INPUTBY,
HEAD_FMTEL = l.HEAD_FMTEL,
FeeSum = dataContext.ChFees.Where(f => f.BSNO == t.BSNO && f.CUSTOMERNAME == t.TRUCK && f.CARGO_GID == t.LE_ID && f.FEETYPE == 2 && (f.FEESTATUS == 0 || f.FEESTATUS == 8 || f.FEESTATUS == 9)).Sum(f => f.AMOUNT),
NoDui = dataContext.ChFees.Count(f => f.BSNO == t.BSNO && f.CUSTOMERNAME == t.TRUCK && f.CARGO_GID == t.LE_ID && f.FEETYPE == 2 && (f.FEESTATUS == 0 || f.FEESTATUS == 8 || f.FEESTATUS == 9) && (!f.CUSTDUI.HasValue || !f.CUSTDUI.Value))
};
int count = query.Where(x => x.FACTRYTIME.CompareTo(strDateStart) >= 0 && x.FACTRYTIME.CompareTo(strDateEnd) <= 0).Count();
List<DispatchListViewModel> list = query.Where(x => x.FACTRYTIME.CompareTo(strDateStart) >= 0 && x.FACTRYTIME.CompareTo(strDateEnd) <= 0).OrderByDescending(x => x.FACTRYTIME).Skip((page - 1) * pageSize).Take(pageSize).ToList();
return Json(new { total = count, page, pageSize, list });
}
#region 派车详情
public ActionResult DispatchDetail(string leid, bool hideFee = true, string openid = null)
{
if (!string.IsNullOrEmpty(openid))
{
var lt = dataContext.OpLetterTrucks.AsNoTracking().FirstOrDefault(l => l.LE_ID == leid);
var dri = dataContext.Drivers.AsNoTracking().FirstOrDefault(d => d.OpenId == openid);
if (dri == null)
{
return Content("参数有误");
}
if (lt.TRUCK != dri.InfoClient)
{
return Content("无法查看派车信息");
}
}
var query = from t in dataContext.OpLetterTrucks
join l in dataContext.OpLetters on t.LE_ID equals l.LE_ID
join s in dataContext.OpSeaes on t.BSNO equals s.BSNO
where t.LE_ID == leid
select new DispatchDetailViewModel
{
VESSEL = s.VESSEL,
VOYNO = s.VOYNO,
MBLNO = s.MBLNO,
CTNS = t.CTNS,
KGS = t.KGS,
TRUCKFEE = t.TRUCKFEE,
YARD = t.YARD,
FACTRYNAME = t.FACTRYNAME,
FACTRYADDR = t.FACTRYADDR,
FACTRYTIME = t.FACTRYTIME,
CLOSINGDATE = t.CLOSINGDATE,
LE_ID = t.LE_ID,
TRUCKSTATUS = t.TRUCKSTATUS,
REMARK = t.REMARK,
INPUTBY = l.INPUTBY,
HEAD_FMTEL = l.HEAD_FMTEL
};
var obj = query.FirstOrDefault();
ViewData["Data"] = obj;
ViewData["LEID"] = leid;
ViewData["HideFee"] = hideFee;
//费用列表
var queryFee = from t in dataContext.OpLetterTrucks
join s in dataContext.ChFees on new { t.BSNO, Name = t.TRUCK, LEID = t.LE_ID } equals new { s.BSNO, Name = s.CUSTOMERNAME, LEID = s.CARGO_GID }
where t.LE_ID == leid && s.FEETYPE == 2 && (s.FEESTATUS == 0 || s.FEESTATUS == 8 || s.FEESTATUS == 9)
select new MpFeeListViewModel
{
FEENAME = s.FEENAME,
AMOUNT = s.AMOUNT,
UNITPRICE = s.UNITPRICE,
QUANTITY = s.QUANTITY,
REMARK = s.REMARK,
CUSTDUI = s.CUSTDUI,
CUSTDUI_STR = (s.CUSTDUI.HasValue && s.CUSTDUI.Value) ? "已核对" : "未核对"
};
var feeList = queryFee.ToList();
ViewData["FeeList"] = feeList;
ViewData["NoDuiCount"] = feeList.Count(f => !f.CUSTDUI.HasValue || f.CUSTDUI == false);
return View();
}
public ActionResult DispatchFeeList(string leid)
{
var opTruck = dataContext.OpLetterTrucks.First(t => t.LE_ID == leid);
ViewData["LEID"] = leid;
ViewData["TRUCKFEE"] = opTruck.TRUCKFEE;
var task = dataContext.OpTasks.FirstOrDefault(t => t.TASKNO == leid);
ViewData["ShowConfirm"] = task.TASKTYPE == "派车中";
return View();
}
//费用核对
public ActionResult FeeDuiForTruck(string leid)
{
RespCommon resp = new RespCommon();
var queryFee = from t in dataContext.OpLetterTrucks
join s in dataContext.ChFees on new { t.BSNO, Name = t.TRUCK, LEID = t.LE_ID } equals new { s.BSNO, Name = s.CUSTOMERNAME, LEID = s.CARGO_GID }
where t.LE_ID == leid && s.FEETYPE == 2 && (s.FEESTATUS == 0 || s.FEESTATUS == 8 || s.FEESTATUS == 9)
select s;
foreach (var item in queryFee)
{
item.CUSTDUI = true;
}
dataContext.SaveChanges();
resp.Success = true;
resp.Message = "操作成功";
return Json(resp);
}
//确认接单
public ActionResult DispatchConfirm(string leid)
{
RespCommon resp = new RespCommon();
var task = dataContext.OpTasks.FirstOrDefault(t => t.TASKNO == leid);
task.TASKTYPE = "已派车";
var opTruck = dataContext.OpLetterTrucks.First(t => t.LE_ID == leid);
opTruck.TRUCKSTATUS = "已派车";
dataContext.SaveChanges();
resp.Success = true;
resp.Message = "操作成功";
return Json(resp);
}
#endregion
#endregion
#region 费用账单
[System.Web.Mvc.HttpGet]
public ActionResult FeeList(string openid)
{
List<dynamic> listMonth = new List<dynamic>();
for (int i = 0; i > -24; i--)
{
DateTime dtTmp = DateTime.Today.AddMonths(i);
listMonth.Add(new { title = dtTmp.ToString("yyyy年MM月"), value = dtTmp.ToString("yyyyMM") });
}
ViewData["MonthList"] = JsonConvert.SerializeObject(listMonth);
ViewData["openid"] = openid;
return View();
}
[System.Web.Mvc.HttpPost]
public ActionResult FeeListData(string openid, string monthStart, string monthEnd)
{
DateTime dStart = DateTime.MinValue;
DateTime dEnd = DateTime.MinValue;
if (!DateTime.TryParseExact(monthStart, "yyyyMM", CultureInfo.InvariantCulture, DateTimeStyles.None, out dStart)) //默认当月
{
dStart = DateTime.Today.AddDays(-1 * DateTime.Today.Day + 1); //当月1日
}
if (!DateTime.TryParseExact(monthEnd, "yyyyMM", CultureInfo.InvariantCulture, DateTimeStyles.None, out dEnd)) //默认当月
{
dEnd = DateTime.Today.AddMonths(1).AddDays(-1 * DateTime.Today.Day); //月底
}
else
{
dEnd = dEnd.AddMonths(1).AddDays(-1); //月底
}
string strAllStart = dStart.ToString("yyyy-MM-dd 00:00:00");
string strAllEnd = dEnd.ToString("yyyy-MM-dd 23:59:59");
var query = from d in dataContext.Drivers
join t in dataContext.OpLetterTrucks on d.InfoClient equals t.TRUCK
join s in dataContext.ChFees on new { t.BSNO, Name = t.TRUCK, LEID = t.LE_ID } equals new { s.BSNO, Name = s.CUSTOMERNAME, LEID = s.CARGO_GID }
where d.OpenId == openid && s.FEETYPE == 2 && (s.FEESTATUS == 0 || s.FEESTATUS == 8 || s.FEESTATUS == 9) && t.FACTRYTIME.CompareTo(strAllStart) >= 0 && t.FACTRYTIME.CompareTo(strAllEnd) <= 0
orderby t.FACTRYTIME
select new
{
t.FACTRYTIME,
s.AMOUNT
};
var qList = query.ToList();
DateTime dtTmp = dStart;
List<dynamic> listData = new List<dynamic>();
while (dtTmp < dEnd)
{
string strFirst = dtTmp.ToString("yyyy-MM-01 00:00:00"); //月初
string strLast = dtTmp.AddMonths(1).AddDays(-1 * dtTmp.Day).ToString("yyyy-MM-dd 23:59:59"); //月底
decimal? sum = qList.Where(x => x.FACTRYTIME.CompareTo(strFirst) >= 0 && x.FACTRYTIME.CompareTo(strLast) <= 0).Sum(x => x.AMOUNT);
listData.Add(new
{
Month = dtTmp.ToString("yyyyMM"),
MonthStr = dtTmp.ToString("yyyy年MM月"),
Sum = sum.HasValue ? sum.Value : 0
});
dtTmp = dtTmp.AddMonths(1);
}
return Json(listData);
}
#endregion
#region 抢单
public ActionResult GrabList(string openid)
{
var driver = dataContext.Drivers.FirstOrDefault(d => d.OpenId == openid);
if (driver == null)
{
return RedirectToAction("DriverRegist", new { openid });
}
ViewData["openid"] = openid;
return View();
}
[System.Web.Mvc.HttpPost]
public ActionResult GrabData(string openid, int page = 1, int pageSize = 10)
{
var query = from d in dataContext.Drivers
join g in dataContext.Grabs on d.InfoClient equals g.InfoClient
join t in dataContext.OpLetterTrucks on g.LE_ID equals t.LE_ID
join s in dataContext.OpSeaes on t.BSNO equals s.BSNO
where t.TRUCKSTATUS == "已发单" && d.OpenId == openid && (dataContext.Grabs.Count(g1 => g1.LE_ID == g.LE_ID && g1.IsGrab == true)) == 0
select new DispatchDetailViewModel
{
VESSEL = s.VESSEL,
VOYNO = s.VOYNO,
MBLNO = s.MBLNO,
CTNS = t.CTNS,
KGS = t.KGS,
TRUCKFEE = t.TRUCKFEE,
YARD = t.YARD,
FACTRYNAME = t.FACTRYNAME,
FACTRYADDR = t.FACTRYADDR,
FACTRYTIME = t.FACTRYTIME,
CLOSINGDATE = t.CLOSINGDATE,
LE_ID = t.LE_ID
};
var count = query.Count();
var list = query.OrderBy(x => x.MBLNO).Skip((page - 1) * pageSize).Take(pageSize).ToList();
return Json(new { total = count, page, pageSize, list });
}
public ActionResult GrabDetail(string leid, string openid)
{
var query = from d in dataContext.Drivers
join g in dataContext.Grabs on d.InfoClient equals g.InfoClient
join t in dataContext.OpLetterTrucks on g.LE_ID equals t.LE_ID
join s in dataContext.OpSeaes on t.BSNO equals s.BSNO
where g.LE_ID == leid && d.OpenId == openid
select new DispatchGrabViewModel
{
VESSEL = s.VESSEL,
VOYNO = s.VOYNO,
MBLNO = s.MBLNO,
CTNS = t.CTNS,
KGS = t.KGS,
TRUCKFEE = t.TRUCKFEE,
YARD = t.YARD,
FACTRYNAME = t.FACTRYNAME,
FACTRYADDR = t.FACTRYADDR,
FACTRYTIME = t.FACTRYTIME,
CLOSINGDATE = t.CLOSINGDATE,
LE_ID = t.LE_ID,
TRUCKSTATUS = t.TRUCKSTATUS,
GrabId = g.GID
};
var obj = query.FirstOrDefault();
ViewData["Data"] = obj;
var driver = dataContext.Drivers.FirstOrDefault(d => d.OpenId == openid);
ViewData["grab"] = dataContext.Grabs.FirstOrDefault(g => g.LE_ID == leid && g.InfoClient == driver.InfoClient);
ViewData["grab_success"] = dataContext.Grabs.FirstOrDefault(g => g.LE_ID == leid && g.IsGrab == true);
return View();
}
[System.Web.Mvc.HttpPost]
public ActionResult GrabSubmit(string gid)
{
RespCommon resp = new RespCommon();
var grab = dataContext.Grabs.FirstOrDefault(g => g.GID == gid);
if (grab != null)
{
if (dataContext.Grabs.Count(g => g.LE_ID == grab.LE_ID && g.IsGrab == true) == 0)
{
grab.IsGrab = true;
grab.GrabTime = DateTime.Now;
var truck = dataContext.OpLetterTrucks.FirstOrDefault(t => t.LE_ID == grab.LE_ID);
truck.TRUCKSTATUS = "已派车";
truck.TRUCK = grab.InfoClient;
var letter = dataContext.OpLetters.FirstOrDefault(l => l.LE_ID == grab.LE_ID);
letter.HEAD_TO = grab.InfoClient;
var user = dataContext.Users.FirstOrDefault(u => u.GID == truck.INPUTBY);
var task = dataContext.OpTasks.FirstOrDefault(t => t.TASKNO == truck.LE_ID);
task.OP = user == null ? string.Empty : user.SHOWNAME;
task.ISPUBLIC = false;
task.TASKTYPE = "已派车";
task.ISCOMPLETE = 1;
task.COMPLETETIME = DateTime.Now;
task.TASKDESCRIP = "车队:" + truck.TRUCK;
#region 费用
if (truck.TRUCKFEE > 0 && truck.ISFEE != "1")
{
var fee = new ChFeeInfo();
fee.GID = Guid.NewGuid().ToString();
fee.BSNO = truck.BSNO;
fee.FEETYPE = 2;
fee.FEENAME = "陆运费";
fee.FEEDESCRIPTION = "";
fee.CUSTOMERTYPE = "车队";
fee.CUSTOMERNAME = truck.TRUCK;
fee.UNIT = "票";
fee.UNITPRICE = truck.TRUCKFEE;
fee.QUANTITY = 1;
fee.AMOUNT = truck.TRUCKFEE;
fee.CURRENCY = "RMB";
fee.EXCHANGERATE = 1;
fee.REASON = "";
fee.REMARK = "";
fee.COMMISSIONRATE = 0;
fee.ENTEROPERATOR = truck.INPUTBY;
fee.ENTERDATE = DateTime.Now;
fee.ISOPEN = false;
fee.ISADVANCEDPAY = false;
fee.SORT = 1;
fee.FEESTATUS = 1;
fee.FEEFRT = "PP";
fee.CARGO_GID = truck.LE_ID;
fee.TAXRATE = 0;
fee.NOTAXAMOUNT = truck.TRUCKFEE;
fee.ACCTAXRATE = 0;
fee.LINENUM = 1;
fee.TAXUNITPRICE = truck.TRUCKFEE;
fee.MODIFIEDUSER = truck.INPUTBY;
fee.MODIFIEDTIME = DateTime.Now;
fee.WMSOUTBSNO = "";
fee.PREAMOUNT = 0;
fee.ISINVOICE = false;
fee.INPUTMODE = "";
fee.LOCALCURR = "RMB";
fee.MANAGER = "";
fee.ISACC = false;
dataContext.ChFees.Add(fee);
}
if (truck.OTHERFEE.HasValue && truck.OTHERFEE > 0 && truck.ISFEE != "1")
{
var fee = new ChFeeInfo();
fee.GID = Guid.NewGuid().ToString();
fee.BSNO = truck.BSNO;
fee.FEETYPE = 2;
fee.FEENAME = "绩效及加班";
fee.FEEDESCRIPTION = "";
fee.CUSTOMERTYPE = "其他";
fee.CUSTOMERNAME = task.OP;
fee.UNIT = "票";
fee.UNITPRICE = truck.OTHERFEE.Value;
fee.QUANTITY = 1;
fee.AMOUNT = truck.OTHERFEE.Value;
fee.CURRENCY = "RMB";
fee.EXCHANGERATE = 1;
fee.REASON = "";
fee.REMARK = "";
fee.COMMISSIONRATE = 0;
fee.ENTEROPERATOR = truck.INPUTBY;
fee.ENTERDATE = DateTime.Now;
fee.ISOPEN = false;
fee.ISADVANCEDPAY = false;
fee.SORT = 1;
fee.FEESTATUS = 1;
fee.FEEFRT = "PP";
fee.CARGO_GID = truck.LE_ID;
fee.TAXRATE = 0;
fee.NOTAXAMOUNT = truck.OTHERFEE.Value;
fee.ACCTAXRATE = 0;
fee.LINENUM = 1;
fee.TAXUNITPRICE = truck.OTHERFEE.Value;
fee.MODIFIEDUSER = truck.INPUTBY;
fee.MODIFIEDTIME = DateTime.Now;
fee.WMSOUTBSNO = "";
fee.PREAMOUNT = 0;
fee.ISINVOICE = false;
fee.INPUTMODE = "";
fee.LOCALCURR = "RMB";
fee.MANAGER = "";
fee.ISACC = false;
dataContext.ChFees.Add(fee);
}
#endregion
truck.ISFEE = "1";
dataContext.SaveChanges();
resp.Success = true;
resp.Message = "抢单成功";
}
else
{
resp.Success = true;
resp.Message = "抢单失败";
}
}
else
{
resp.Success = false;
resp.Message = "未找到派单信息";
}
return Json(resp);
}
//在派车单里查看抢单列表
public ActionResult GrabViewListData(string leid, int start, int limit)
{
var list = dataContext.Grabs
.Where(g => g.LE_ID == leid)
.OrderBy(g => g.SendTime)
.Skip(start)
.Take(limit)
.AsGrabViewListViewModelList();
return Json(new { Success = true, Message = "查询成功", totalCount = list.Count, data = list }, JsonRequestBehavior.AllowGet);
}
#endregion
#region 其他
//倍通菜单
public ActionResult CreateMenu()
{
try
{
string token = string.Empty;
string errorMsg = string.Empty;
bool success = TokenHelper.GetMpToken(appid, out token, out errorMsg);
if (success)
{
var url = $"https://api.weixin.qq.com/cgi-bin/menu/create?access_token={token}";
string regRtnUrl = HttpUtility.UrlEncode($"{dispatchServerUrl}/Dispatch/Dispatch/AuthRedirect");
string regUrl = $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={regRtnUrl}&response_type=code&scope=snsapi_base&state={StateKeyRegist}#wechat_redirect";
string listUrl = $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={regRtnUrl}&response_type=code&scope=snsapi_base&state={StateKeyDispatchList}#wechat_redirect";
string listUrlGrab = $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={regRtnUrl}&response_type=code&scope=snsapi_base&state={StateKeyGrabList}#wechat_redirect";
string feeUrl = $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={regRtnUrl}&response_type=code&scope=snsapi_base&state={StateKeyFeeList}#wechat_redirect";
string regUrlCust = $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={regRtnUrl}&response_type=code&scope=snsapi_base&state={StateKeyRegistCust}#wechat_redirect";
string opseaeUrl = $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={regRtnUrl}&response_type=code&scope=snsapi_base&state={StateKeyOpSeaeList}#wechat_redirect";
var menuJson = new
{
button = new object[]
{
new
{
name="注册信息",
sub_button=new object[]
{
new
{
type="view",
name ="司机注册",
url =regUrl
},
new
{
type="view",
name ="客户注册",
url =regUrlCust
}
}
},
new
{
name="派车列表",
sub_button=new object[]
{
new
{
type="view",
name ="抢单列表",
url =listUrlGrab
},
new
{
type="view",
name ="派车列表",
url =listUrl
},
new
{
type="view",
name="费用账单",
url =feeUrl
}
}
},
new
{
type="view",
name="委托列表",
url =opseaeUrl
}
}
};
string jsonStr = JsonConvert.SerializeObject(menuJson);
string rtnStr = WebRequestHelper.DoPost(url, jsonStr);
return Content(rtnStr);
}
else
{
return Content($"获取token时出错{errorMsg}");
}
}
catch (Exception ex)
{
return Content($"error:{ex.Message}");
}
}
public ActionResult SendTemplateTest(string openid = "oHgaQ5no1pqAXeRZK3WcV2UzjHY4")
{
List<Tuple<string, string, string>> values = new List<Tuple<string, string, string>>();
values.Add(new Tuple<string, string, string>("TITLE", "收到新的派车消息,信息如下:", "#FF0000"));
values.Add(new Tuple<string, string, string>("XX", "OTG01256", ""));
values.Add(new Tuple<string, string, string>("DW", "1568KG", ""));
values.Add(new Tuple<string, string, string>("ZHSJ", DateTime.Today.ToString("yyyy-MM-dd"), ""));
values.Add(new Tuple<string, string, string>("JGSJ", DateTime.Today.AddDays(5).ToString("yyyy-MM-dd"), ""));
values.Add(new Tuple<string, string, string>("GCDZ", "市南区湛山街道", ""));
values.Add(new Tuple<string, string, string>("FOOTTER", "赶快点击去抢单吧~", "#0000FF"));
string mess = string.Empty;
bool success = TemplateMessageHelper.SendTemplateMessage(appid, "5zWCiYhS44naUs1dolJuMtAhzqvrfpdHUK6JQJdtkLw", values, openid, $"{dispatchServerUrl}/Dispatch/Dispatch/DispatchDetail?leid=123", out mess);
return Content($"{success} {mess}");
}
public ActionResult CreateMenuHJ()
{
try
{
logger.Debug("正在生产虎鲸微信menu");
string token = string.Empty;
string errorMsg = string.Empty;
bool success = TokenHelper.GetMpToken(appid, out token, out errorMsg);
if (success)
{
logger.Debug($"虎鲸token:{token}");
var url = $"https://api.weixin.qq.com/cgi-bin/menu/create?access_token={token}";
var url_del = $"https://api.weixin.qq.com/cgi-bin/menu/delete?access_token={token}";
string regRtnUrl = HttpUtility.UrlEncode($"{dispatchServerUrl}/Dispatch/Dispatch/AuthRedirect");
string stockUrl = $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={regRtnUrl}&response_type=code&scope=snsapi_base&state={StateKeyStockList}#wechat_redirect";
string regUrlCust = $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={regRtnUrl}&response_type=code&scope=snsapi_base&state={StateKeyRegistCustHJ}#wechat_redirect";
//string opseaeUrl = $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={regRtnUrl}&response_type=code&scope=snsapi_base&state={StateKeyOpSeaeList}#wechat_redirect";
var menuJson = new
{
button = new object[]
{
new
{
name="关于我们",
sub_button=new object[]
{
//new
//{
// type="view",
// name ="组织框架",
// url ="https://v.xiumi.us/stage/v5/3EOyB/146935898"
//},
//new
//{
// type="view",
// name ="部门职责",
// url ="https://v.xiumi.us/stage/v5/44tOy/147193130"
//},
new
{
type="view",
name ="公司介绍",
url ="https://v.xiumi.us/stage/v5/5ITnD/409265436"
},
//new
//{
// type="view",
// name ="仓库收费标准",
// url ="https://v.xiumi.us/board/v5/3EOyB/176410025"
//},
new
{
type="view",
name ="账号注册",
url =regUrlCust
}
}
},
new
{
name="相关政策",
sub_button=new object[]
{
new
{
type="view",
name ="海关政策",
url ="http://www.customs.gov.cn/customs/302249/302266/302267/index.html"
},
new
{
type="view",
name ="商务政策",
url ="http://www.mofcom.gov.cn/article/b/"
},
new
{
type="view",
name="船务信息",
url ="http://www.shippingchina.com"
}
}
},
new
{
name="在线查询",
sub_button=new object[]
{
new
{
type="view",
name ="舱单信息查询",
url ="http://query.customs.gov.cn/MNFTQ/"
},
new
{
type="view",
name ="通关状态查询",
url ="http://www.customs.gov.cn/customs/302427/302442/tgzt/index.html"
},
new
{
type="view",
name="国内物流查询",
url ="https://v.xiumi.us/stage/v5/3EOyB/162573181"
},
new
{
type="view",
name ="常见问题解答",
url ="https://v.xiumi.us/stage/v5/3EOyB/146990201"
},
new
{
type="view",
name="库存状况查询",
url = stockUrl
}
}
}
}
};
string jsonStr = JsonConvert.SerializeObject(menuJson);
logger.Debug("menu对象:");
logger.Debug(jsonStr);
//logger.Debug("准备删除原先menu:");
//string rtnStr = WebRequestHelper.DoPost(url_del,null);
//logger.Debug("准备menu返回:");
//logger.Debug(rtnStr);
string rtnStr = WebRequestHelper.DoPost(url, jsonStr);
return Content(rtnStr);
}
else
{
return Content($"获取token时出错{errorMsg}");
}
}
catch (Exception ex)
{
return Content($"error:{ex.Message}");
}
}
#region 筛选车队
[System.Web.Mvc.HttpGet]
public JsonResult GetTruckInfoClients(string keyword)
{
List<InfoClient> list = null;
if (string.IsNullOrWhiteSpace(keyword))
{
list = dataContext.InfoClients.Where(c => c.ISTRUCK == true).ToList();
}
else
{
list = dataContext.InfoClients.Where(c => c.ISTRUCK == true && (c.CODENAME.StartsWith(keyword) || c.SHORTNAME.IndexOf(keyword) > -1)).ToList();
}
return Json(new { value = list.AsInfoClientTruckViewModelList() }, JsonRequestBehavior.AllowGet);
}
#endregion
#endregion
[System.Web.Mvc.HttpPost]
public HttpResponseMessage DingdingCallback(string signature, string timestamp, string nonce)
{
//JeffSoft.Logger.Error("DingdingCallback Success:" + signature + "," + timestamp + "");
//第一部分
//这两句代码是为了接收body体中传入的加密json串
StreamReader sr = new StreamReader(Request.InputStream, Encoding.UTF8);
var strJson = new StringBuilder();
string line = null;
while (((line = sr.ReadLine())) != null)
{
strJson.Append(line);
}
//反序列化json串拿去加密字符串
var objRtn = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(strJson.ToString(), new { encrypt = ""});
string ever = objRtn.encrypt;
//实例化钉钉解密类构造参数为对应的 应用中的token、aes_key、AppKey值
DingTalkEncryptor dingTalkEncryptor = new DingTalkEncryptor("896caad7fcfd398abc6b333c6156c769", "MAiNC53WwilSzJYfvyNluAa6UHtV7PBMoeGnWOeBgXt", "dinglqafhlqtb8zreom5");
//定义字符串接收解密后的值
string text = dingTalkEncryptor.getDecryptMsg(signature, timestamp, nonce, ever);
//JeffSoft.Logger.Error("dingTalkEncryptor.getDecryptMsg:" + text + "");
var objRtn2 = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(text.ToString(), new { EventType = "" });
//取出事件类型字段
//JeffSoft.Logger.Error("DingdingCallback Success,EventType:" + EventType + "");
//第二部分
// { //判断事件类型是否是日程事件
if ("bpms_instance_change" == objRtn2.EventType)
{
var DingCallBackMsg = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(text.ToString(),new DingCallBackMsg());
var DDtitle = DingCallBackMsg.title;
var DDresult = DingCallBackMsg.result;
var mes = string.Format("bpms_instance_change Success,title:{0},result:{1}", DDtitle, DDresult);
//JeffSoft.Logger.Error(mes);
}
//第三部分
//返回加密字符串
var msg = dingTalkEncryptor.getEncryptedMap("success");
var msg_signature = msg["msg_signature"];
var encrypt = msg["encrypt"];
var timeStamp = msg["timeStamp"];
var nonce1 = msg["nonce"];
var v = new
{
msg_signature = msg["msg_signature"],
encrypt = msg["encrypt"],
timeStamp = msg["timeStamp"],
nonce = msg["nonce"],
};
//var obj = new { success = r };
// return Json(obj);
var data = JsonConvert.SerializeObject(v);
//返回json数
return new HttpResponseMessage()
{
Content = new StringContent(data, Encoding.UTF8, "application/json"),
};
}
public ActionResult OpStatusZc(string BSNO)
{
//var opstatus=dataContext.OpStatus.FirstOrDefault(t => t.BSNO ==BSNO)
var dataList = dataContext.OpStatus.Where(s => s.BSNO == BSNO && s.STATUS=="入库完成").AsOpStatusViewModelList();
var COMPTIME ="";
if (dataList.Count > 0)
{
COMPTIME = dataList[0].COMPTIME;
if (!string.IsNullOrEmpty(COMPTIME)) {
COMPTIME = Convert.ToDateTime(COMPTIME).ToString("yyyy-MM-dd");
}
}
var query = from s in dataContext.OpSeais
where s.BSNO == BSNO
select new DispatchOpStatusZcViewModel
{
VESSEL = s.VESSEL,
VOYNO = s.VOYNO,
MBLNO = s.MBLNO,
CUSTSERVICE = s.OP,
CNTRTOTAL = s.CNTRTOTAL,
BSDATE = s.BSDATE,
ETD = s.ETD,
CUSTOMDATE = s.CUSTOMDATE,
TIHUOTIME = s.TIHUOTIME,
STORAGENAME = s.STORAGENAME,
WMSDATE= COMPTIME,
GOODSNAME=s.GOODSNAME
};
var obj = query.FirstOrDefault();
ViewData["Data"] = obj;
return View();
}
#region 委托单位相关
#region 委托单位注册
[System.Web.Mvc.HttpGet]
public ActionResult DispInfoClientRegist(string openid)
{
if (!string.IsNullOrWhiteSpace(openid))
{
var infoClient = dataContext.DispInfoClients.FirstOrDefault(d => d.OpenId == openid);
if (infoClient != null)
{
var infoClientModel = infoClient.AsDispInfoClientRegistViewModel();
ViewData["infoClient"] = infoClientModel;
ViewData["isAudit"] = infoClient.IsAudit;
}
else
{
ViewData["infoClient"] = new DispInfoClientRegistViewModel();
ViewData["isAudit"] = false; ;
}
ViewData["openid"] = openid;
ViewData["controllerList"] = dataContext.InfoClients.Where(c => c.ISCONTROLLER == true).AsInfoClientTruckViewModelList();
return View();
}
else
{
return Content("非法请求!");
}
}
[System.Web.Mvc.HttpPost]
public JsonResult DispInfoClientRegist(DispInfoClientRegistViewModel model)
{
RespCommon resp = new RespCommon();
if (!string.IsNullOrWhiteSpace(model.OpenId))
{
var infoClient = dataContext.DispInfoClients.FirstOrDefault(d => d.OpenId == model.OpenId);
if (infoClient == null)
{
infoClient = model.AsDispInfoClientInfo();
infoClient.GID = Guid.NewGuid().ToString();
infoClient.InfoClient = string.Empty;
dataContext.DispInfoClients.Add(infoClient);
}
else
{
model.AsDispInfoClientInfo(infoClient);
}
dataContext.SaveChanges();
resp.Success = true;
resp.Message = "操作成功";
}
else
{
resp.Success = false;
resp.Message = "参数无效";
}
return Json(resp);
}
#endregion
#region 委托单位审核
public ActionResult DispInfoClientAuditList()
{
return View();
}
[System.Web.Mvc.HttpPost]
public JsonResult DispInfoClientAuditData(int offset, int limit, bool? isAudit)
{
RespDispInfoClientAuditList resp = new RespDispInfoClientAuditList();
if (isAudit.HasValue)
{
resp.Total = dataContext.DispInfoClients.Where(d => d.IsAudit == isAudit.Value).Count();
resp.Data = dataContext.DispInfoClients.Where(d => d.IsAudit == isAudit.Value).OrderBy(d => d.GID).Skip(offset).Take(limit).AsAuditViewModelList();
}
else
{
resp.Total = dataContext.DispInfoClients.Count();
resp.Data = dataContext.DispInfoClients.OrderBy(d => d.GID).Skip(offset).Take(limit).AsAuditViewModelList();
}
return Json(resp);
}
[System.Web.Mvc.HttpPost]
public JsonResult DispInfoClientAudit(string gid, string infoClient)
{
RespCommon resp = new RespCommon();
var driver = dataContext.DispInfoClients.FirstOrDefault(d => d.GID == gid);
if (driver != null)
{
driver.InfoClient = infoClient;
driver.IsAudit = true;
dataContext.SaveChanges();
}
resp.Success = true;
resp.Message = "操作成功";
return Json(resp);
}
[System.Web.Mvc.HttpPost]
public JsonResult DispInfoClientReject(string gid)
{
RespCommon resp = new RespCommon();
var driver = dataContext.DispInfoClients.FirstOrDefault(d => d.GID == gid);
if (driver != null)
{
driver.InfoClient = string.Empty;
driver.IsAudit = false;
dataContext.SaveChanges();
}
resp.Success = true;
resp.Message = "操作成功";
return Json(resp);
}
#endregion
#region 委托列表
public ActionResult SaleOpSeaeList(string openid)
{
var infoClient = dataContext.DispInfoClients.FirstOrDefault(d => d.OpenId == openid);
if (infoClient == null)
{
return RedirectToAction("DispInfoClientRegist", new { openid });
}
ViewData["openid"] = openid;
return View();
}
[System.Web.Mvc.HttpPost]
public JsonResult SaleOpSeaeListData(string openid, int page = 1, int pageSize = 10)
{
RespGetOpSeae resp = new RespGetOpSeae();
var infoClient = dataContext.DispInfoClients.FirstOrDefault(d => d.OpenId == openid);
var dataList = MsOpSeaeDAL.GetSaleDataList(infoClient.InfoClient, null, null, null);
var list = dataList.Skip((page - 1) * pageSize).Take(pageSize);
resp.Success = true;
resp.Message = "查询成功";
resp.Data = list.ToList();
resp.Total = dataList.Count;
return Json(resp);
}
#endregion
#region 委托详情
public ActionResult SaleOpSeaeDetail(string bsno)
{
ViewData["bsno"] = bsno;
return View();
}
public ActionResult SaleOpSeaeDetailData(string bsno)
{
var model = MsOpSeaeDAL.GetOneByBSNO(bsno);
var opseae = dataContext.OpSeaes.First(o => o.BSNO == bsno);
var dataList = MsChFeeDAL.GetShouldGetDataList(opseae.CUSTOMERNAME, bsno);
var staList = dataContext.OpStatus.Where(s => s.BSNO == bsno).AsOpStatusViewModelList();
var obj = new
{
model.BSNO,
model.VESSEL,
model.VOYNO,
model.MBLNO,
model.INVNO,
model.ETD,
model.ATD,
model.CNTRTOTAL,
model.KGS,
model.YARD,
model.CNTRSEALNO,
model.CUSTOMNO,
model.FACTORYADDR,
model.CARGODATE,
model.STA_ZXFC,
model.STA_HGFX,
FEE_LIST = dataList,
STATE_LIST = staList
};
return Json(obj);
}
#endregion
#endregion
}
//获取注册信息
public class RegPortController : Controller
{
#region 获取注册信息(用于在公司服务器接受注册查询请求)
public string GetSecCompany(string GID)
{
DBResult result = new DBResult();
var _GID = DSWeb.SoftMng.Common.Common.string_Decrypt(GID, "");
try
{
sys_secCompanyBLL cbll = new sys_secCompanyBLL();
sys_secCompany cmodel = cbll.GetModelList("GID='" + _GID + "'").FirstOrDefault();
result.setMessage(true, "");
result.Data = cmodel;
}
catch (Exception e)
{
result.SetErrorInfo(e.Message);
}
return DSWeb.TruckMng.Helper.JsonConvert.Serialize(result);
}
public string GetSecModel(string GID)
{
DBResult result = new DBResult();
var _GID = DSWeb.SoftMng.Common.Common.string_Decrypt(GID, "");
try
{
sys_secModuleBLL ServerModel = new sys_secModuleBLL();
List<sys_secModule> ServerModelList = ServerModel.GetModelList("PID='" + _GID + "'");
result.setMessage(true, "");
result.Data = ServerModelList.ToList();
}
catch (Exception e)
{
result.SetErrorInfo(e.Message);
}
return DSWeb.TruckMng.Helper.JsonConvert.Serialize(result);
}
#endregion
}
}