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.

448 lines
17 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.CommMng.DAL;
using DSWeb.Areas.MvcShipping.Comm;
using DSWeb.Areas.MvcShipping.DB;
using DSWeb.Areas.MvcShipping.Helper;
using DSWeb.Areas.MvcShipping.Job;
using DSWeb.Areas.MvcShipping.Models.MsOpSeaeRunBill;
using DSWeb.MvcShipping.Comm.Cookie;
using DSWeb.MvcShipping.DAL.MsOpSeaeRunBill;
using log4net;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Dynamic;
using System.Linq;
using System.Runtime.Caching;
using System.Web;
using System.Web.Mvc;
namespace DSWeb.MvcShipping.Controllers
{
public class MsOpSeaeRunBillController : Controller
{
private ILog logger = LogManager.GetLogger("MsOpSeaeRunBillController");
private RunBillContext runBillContext = new RunBillContext();
//新建
public ActionResult Create(string strBSNO)
{
ViewData["StrBSNO"] = strBSNO;
string BSNO = strBSNO.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).First();
var opseae = runBillContext.OpSeaes.First(s => s.BSNO == BSNO);
var info = runBillContext.InfoClients.SingleOrDefault(i => i.SHORTNAME == opseae.CUSTOMERNAME);
OpSeaeRunBill runBill = new OpSeaeRunBill();
runBill.CUSTOMERNAME = opseae.CUSTOMERNAME;
runBill.CARRIER = opseae.CARRIER;
runBill.FORWARDER = opseae.FORWARDER;
runBill.ADDR = info.ADDR;
runBill.STATUS = OpSeaeRunBillStatus.Create.ToString();
ViewData["Bill"] = JsonConvert.SerializeObject(runBill.AsEditViewModel());
return View("edit");
}
//编辑
public ActionResult Edit(string gid)
{
ViewData["GID"] = gid;
var bsnoList = runBillContext.OpSeaeRunBillItems.Where(b => b.ParentId == gid).Select(b => b.BSNO).ToList();
ViewData["StrBSNO"] = string.Join(",", bsnoList);
ViewData["Bill"] = JsonConvert.SerializeObject(runBillContext.OpSeaeRunBills.First(b => b.GID == gid).AsEditViewModel());
return View();
}
//获取客户的联系人、电话、地址等信息
public JsonResult GetCustomerInfo(string shortName)
{
var info = runBillContext.InfoClients.SingleOrDefault(i => i.SHORTNAME == shortName);
if (info != null)
{
return Json(info);
}
return null;
}
//根据bsno字符串获取opseae列表信息
public JsonResult GetOpseadList(string strBSNO)
{
string[] arrBSNO = strBSNO.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var list = runBillContext.OpSeaes.Where(s => arrBSNO.Contains(s.BSNO)).ToList();
return Json(new { Success = true, Message = "", data = list, totalCount = list.Count });
}
//保存
public JsonResult Save(string data, string strBSNO)
{
var viewModel = JsonConvert.DeserializeObject<RunBillEditViewModel>(data);
OpSeaeRunBill saveModel = null;
if (!string.IsNullOrEmpty(viewModel.GID))
{
saveModel = runBillContext.OpSeaeRunBills.First(b => b.GID == viewModel.GID);
viewModel.AsModel(saveModel);
runBillContext.OpSeaeRunBillItems.RemoveRange(runBillContext.OpSeaeRunBillItems.Where(i => i.ParentId == viewModel.GID));
}
else
{
saveModel = viewModel.AsModel();
saveModel.GID = Guid.NewGuid().ToString();
saveModel.CREATETIME = DateTime.Now;
saveModel.CREATEUSER = Convert.ToString(Session["USERID"]);
saveModel.CREATEUSERNAME = Convert.ToString(Session["SHOWNAME"]);
saveModel.BillNO = PubSysDAL.GetBillNo("0700");
if (string.IsNullOrWhiteSpace(saveModel.STATUS))
{
saveModel.STATUS = OpSeaeRunBillStatus.Create.ToString();
}
runBillContext.OpSeaeRunBills.Add(saveModel);
}
//判断时间区间
if (saveModel.RUNTIME.HasValue)
{
int hour = saveModel.RUNTIME.Value.Hour;
if (hour <= 12)
{
saveModel.TimeSpan = "上午";
}
else
{
saveModel.TimeSpan = "下午";
}
}
string[] arrBSNO = strBSNO.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
foreach (var bsno in arrBSNO)
{
OpSeaeRunBillItem item = new OpSeaeRunBillItem();
item.GID = Guid.NewGuid().ToString();
item.BSNO = bsno;
item.ParentId = saveModel.GID;
runBillContext.OpSeaeRunBillItems.Add(item);
}
runBillContext.SaveChanges();
//推送
if (saveModel.STATUS == OpSeaeRunBillStatus.Dispatch.ToString())
{
var user = runBillContext.Users.FirstOrDefault(u => u.GID == saveModel.USERID);
if (!string.IsNullOrWhiteSpace(user.WeChatAccount))
{
WorkWeixinSendHelper.SendNotifyToUser(user.WeChatAccount, $"/MvcShipping/MsOpseaeRunBill/WxUserRedirect?userId={user.WeChatAccount}");
}
}
return Json(new { Success = true, Message = "保存成功", Data = saveModel.AsEditViewModel() });
}
//删除
public JsonResult Delete(string data) {
var viewModel = JsonConvert.DeserializeObject<RunBillEditViewModel>(data);
OpSeaeRunBill delModel = null;
delModel = runBillContext.OpSeaeRunBills.First(b => b.GID == viewModel.GID);
if (delModel.STATUS != OpSeaeRunBillStatus.Create.ToString())
{
return Json(new { Success = false, Message = "只能删除“创建”状态的跑单信息", Data = "" });
}
viewModel.AsModel(delModel);
runBillContext.OpSeaeRunBillItems.RemoveRange(runBillContext.OpSeaeRunBillItems.Where(i => i.ParentId == viewModel.GID));
runBillContext.OpSeaeRunBills.RemoveRange(runBillContext.OpSeaeRunBills.Where(i => i.GID == viewModel.GID));
runBillContext.SaveChanges();
return Json(new { Success = true, Message = "删除成功", Data = "" });
}
//列表页
public ActionResult Index()
{
return View();
}
//获取跑单列表数据
public JsonResult GetDataList(string condition, int start, int limit, int pageSize, string sort = null)
{
limit = start + pageSize;
var sessionInfo = new { USERID = Convert.ToString(Session["USERID"]), SHOWNAME = Convert.ToString(Session["SHOWNAME"]), COMPANYID = Convert.ToString(Session["COMPANYID"]) };
var count = runBillContext.Database.SqlQuery<int>(MsOpSeaeRunBillDAL.GetDataCountSql(condition, Convert.ToString(Session["USERID"]), Convert.ToString(Session["SHOWNAME"]), Convert.ToString(Session["COMPANYID"]))).First();
var list = runBillContext.Database.SqlQuery<OpSeaeRunBill>(MsOpSeaeRunBillDAL.GetDataListSql(condition, Convert.ToString(Session["USERID"]), Convert.ToString(Session["SHOWNAME"]), Convert.ToString(Session["COMPANYID"]), sort, start, limit));
return Json(new { Success = true, Message = "查询成功", totalCount = count, data = list.AsListViewModelList() }, JsonRequestBehavior.AllowGet);
}
//确认接单
public JsonResult AcceptBill(string strGID)
{
string[] arrGID = strGID.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var uid = Convert.ToString(Session["USERID"]);
var staDispatch = OpSeaeRunBillStatus.Dispatch.ToString();
var list = runBillContext.OpSeaeRunBills.Where(s => s.STATUS == staDispatch && arrGID.Contains(s.GID)).ToList();
list.ForEach(b =>
{
b.ACCEPTTIME = DateTime.Now;
b.STATUS = OpSeaeRunBillStatus.Accept.ToString();
});
runBillContext.SaveChanges();
return Json(new { Success = true, Message = "操作成功" });
}
//转单
public JsonResult ChangeDispatch(string strGID, string userid, string username)
{
string[] arrGID = strGID.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var uid = Convert.ToString(Session["USERID"]);
var staComplete = OpSeaeRunBillStatus.Complete.ToString();
var list = runBillContext.OpSeaeRunBills.Where(s => s.STATUS != staComplete && arrGID.Contains(s.GID)).ToList();
var user = runBillContext.Users.FirstOrDefault(u => u.GID == userid);
if (list.Count == 0)
{
return Json(new { Success = false, Message = "没有可供操作的已选数据" });
}
list.ForEach(b =>
{
b.USERID = userid;
b.USERNAME = username;
b.TRANSFERTIME = DateTime.Now;
b.TRANSFERUSER = Convert.ToString(Session["USERID"]);
});
runBillContext.SaveChanges();
logger.Debug("跑单转单,准备推送通知");
if (!string.IsNullOrWhiteSpace(user.WeChatAccount))
{
WorkWeixinSendHelper.SendNotifyToUser(user.WeChatAccount, $"/MvcShipping/MsOpseaeRunBill/WxUserRedirect?userId={user.WeChatAccount}");
logger.Debug("推送通知:" + user.WeChatAccount);
}
if (list.Count == 1)
{
return Json(new { Success = true, Message = "操作成功", Data = list[0].AsEditViewModel() });
}
else
{
return Json(new { Success = true, Message = "操作成功" });
}
}
//转单
public JsonResult CancelChangeDispatch(string strGID)
{
string[] arrGID = strGID.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var uid = Convert.ToString(Session["USERID"]);
var staComplete = OpSeaeRunBillStatus.Complete.ToString();
var list = runBillContext.OpSeaeRunBills.Where(s => s.STATUS != staComplete && arrGID.Contains(s.GID)).ToList();
if (list.Count == 0)
{
return Json(new { Success = false, Message = "没有可供操作的已选数据" });
}
list.ForEach(b =>
{
b.USERID = b.TRANSFERUSER;
var user = runBillContext.Users.FirstOrDefault(u => u.GID == b.TRANSFERUSER);
b.USERNAME = user.SHOWNAME;
b.TRANSFERTIME = DateTime.Now;
b.TRANSFERUSER = Convert.ToString(Session["USERID"]);
});
runBillContext.SaveChanges();
if (list.Count == 1)
{
return Json(new { Success = true, Message = "操作成功", Data = list[0].AsEditViewModel() });
}
else
{
return Json(new { Success = true, Message = "操作成功" });
}
}
//派单
public JsonResult DispatchBill(string strGID)
{
string[] arrGID = strGID.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var uid = Convert.ToString(Session["USERID"]);
var staComplete = OpSeaeRunBillStatus.Complete.ToString();
var list = runBillContext.OpSeaeRunBills.Where(s => s.STATUS != staComplete && arrGID.Contains(s.GID)).ToList();
if (list.Count == 0)
{
return Json(new { Success = false, Message = "没有可供操作的已选数据" });
}
list.ForEach(b =>
{
b.STATUS = OpSeaeRunBillStatus.Dispatch.ToString();
});
runBillContext.SaveChanges();
//推送消息
logger.Debug("跑单派单,准备推送通知");
string[] arrUser = list.Select(b => "'" + b.USERID + "'").Distinct().ToArray();
string strUserIds = string.Join(",", arrUser);
var users = runBillContext.Database.SqlQuery<VUser>($"select * from vw_user where userid in ({strUserIds})").ToList();
logger.Debug($"推送用户数量:{users.Count}");
foreach (var u in users)
{
logger.Debug($"推送给用户:{u.WeChatAccount}");
if (!string.IsNullOrWhiteSpace(u.WeChatAccount))
{
WorkWeixinSendHelper.SendNotifyToUser(u.WeChatAccount, $"/MvcShipping/MsOpseaeRunBill/WxUserRedirect?userId={u.WeChatAccount}");
}
}
if (list.Count == 1)
{
return Json(new { Success = true, Message = "操作成功", Data = list[0].AsEditViewModel() });
}
else
{
return Json(new { Success = true, Message = "操作成功" });
}
}
//跑单完成
public JsonResult CompleteBill(string strGID)
{
string[] arrGID = strGID.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var uid = Convert.ToString(Session["USERID"]);
var staAccept = OpSeaeRunBillStatus.Accept.ToString();
var list = runBillContext.OpSeaeRunBills.Where(s => s.STATUS == staAccept && arrGID.Contains(s.GID)).ToList();
list.ForEach(b =>
{
b.COMPLETETIME = DateTime.Now;
b.STATUS = OpSeaeRunBillStatus.Complete.ToString();
});
runBillContext.SaveChanges();
return Json(new { Success = true, Message = "操作成功" });
}
public ActionResult TokenShow()
{
var c = MemoryCache.Default.Contains(WechatWorkTokenJob.WorkWeixinAccessTokenStoreKey);
if (c)
{
return Content($"{c}, {MemoryCache.Default[WechatWorkTokenJob.WorkWeixinAccessTokenStoreKey].ToString()}");
}
else
{
return Content($"{c}");
}
}
#region 企业号
//跳转
public ActionResult WxRedirect(string code, string state)
{
if (!MemoryCache.Default.Contains(WechatWorkTokenJob.WorkWeixinAccessTokenStoreKey))
{
return Content("token失效请联系管理员");
}
string token = MemoryCache.Default[WechatWorkTokenJob.WorkWeixinAccessTokenStoreKey].ToString();
string resp = WebRequestHelper.DoGet($"https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={token}&code={code}");
var jsonObj = JsonConvert.DeserializeAnonymousType(resp, new
{
errcode = 0,
errmsg = "",
UserId = ""
});
if (jsonObj.errcode == 0)
{
return WxUserRedirect(jsonObj.UserId);
}
else
{
return Content("获取用户信息失败,请重试");
}
}
public ActionResult WxUserRedirect(string userId)
{
var user = runBillContext.Database.SqlQuery<VUser>("select * from vw_user where wechataccount=@uid", new SqlParameter("uid", userId)).FirstOrDefault();
if (user != null)
{
//获取用户信息存储到session
Session["USERID"] = user.userid;
Session["SHOWNAME"] = user.SHOWNAME;
Session["COMPANYID"] = user.COMPANYID;
return RedirectToAction("WxRunBillList");
}
else
{
return Content($"未找到用户:{userId},请联系管理员");
}
}
//跑单列表
public ActionResult WxRunBillList()
{
return View();
}
//跑单详情
public ActionResult WxRunBillDetail(string gid)
{
ViewData["gid"] = gid;
return View();
}
public ActionResult WxRunBillDetailData(string gid)
{
var bill = runBillContext.OpSeaeRunBills.FirstOrDefault(b => b.GID == gid);
if (bill != null)
{
var query = from a in runBillContext.OpSeaeRunBillItems
join s in runBillContext.OpSeaes on a.BSNO equals s.BSNO
where a.ParentId == gid
select s;
return Json(new
{
Success = true,
Bill = bill.AsListViewModel(),
Items = query.ToList(),
IsDispatch = bill.STATUS == OpSeaeRunBillStatus.Dispatch.ToString(),
IsAccept = bill.STATUS == OpSeaeRunBillStatus.Accept.ToString(),
IsTransfer = bill.STATUS != OpSeaeRunBillStatus.Complete.ToString()
});
}
else
{
return Json(new { Success = false });
}
}
public ActionResult WxRunBillTransfer(string gid)
{
ViewData["gid"] = gid;
return View();
}
#endregion
}
}