|
|
|
|
|
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 string 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);
|
|
|
return data;
|
|
|
//返回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
|
|
|
}
|
|
|
} |