using System; using System.Collections.Generic; using System.Data; using System.Data.Entity.Validation; using System.IO; using System.Linq; using System.Reflection; using System.Web.Mvc; using DSWeb.Areas.CommMng.DAL; using Microsoft.Office.Interop.Excel; using NPOI.SS.Formula.Functions; using System.Data.Entity; using System.Text; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using System.Net.Http; using System.Net.Http.Headers; using DSWeb.Common.Helper; using System.Net; using DSWeb.MvcShipping.Helper; using JsonConvert = Newtonsoft.Json.JsonConvert; using Microsoft.Practices.EnterpriseLibrary.Data; using DSWeb.EntityDA; using System.Threading; using DSWeb.MvcShipping.DAL.DsSendmail; using DSWeb.Common.DbContexts.Model; using DSWeb.Common.DbContexts; using log4net; using DSWeb.Common.DB; using System.Threading.Tasks; using DSWeb.Common.Model; using System.Runtime.Caching; namespace DSWeb.MvcShipping.Controllers { /// /// 拼箱申请单 /// public class MsFormRequisitionController : Controller { #region 拼箱申请单 private OpSeaePxDbContenxt context = new OpSeaePxDbContenxt(); private delegate string FuncHandle(string str, string url, int timeout); private string SendId; private OpSeaePx SendUpd; private DSWeb.Common.DbContexts.Model.CustFee CustAdd; private DSWeb.Common.DbContexts.Model.CustBalance BalanceUpd; private ILog logger = LogManager.GetLogger("MsFormRequisitionController"); public ActionResult StandingBook() { var a = BasicDataRefDAL.GetVesselList(""); ViewData["ShipName"] = BasicDataRefDAL.GetVesselList(""); var pxCom = context.ComNameInfo.Select(p => p).Where(p => p.ISPXCOMPANY != 0).ToList(); ViewData["pxCom"] = pxCom.Select(p => p.COMNAME).ToList(); return View(); } [HttpGet] //public JsonResult GetPageTab(int start, int limit, string sort, string condition) public JsonResult GetPageTab(PxTableClass vlass, int offset = 1, int limit = 12) { try { string userid = Convert.ToString(Session["USERID"]); var str = GetRangDAStr("index", userid, Convert.ToString(Session["SHOWNAME"]), Convert.ToString(Session["COMPANYID"])); if (userid == "" || userid == null) { var jsonRespose2 = new JsonResponse { Success = false, Message = "登陆状态失效,请重新登陆进行操作!" }; return Json(new { Success = false, Message = "登陆状态失效,请重新登陆进行操作!", totalCount = 0, data = 0 }, JsonRequestBehavior.AllowGet); } int count = 0; StringBuilder sqlStr = new StringBuilder("select *,(select COMNAME from [user] where GID=op_seae_px.LuRuRenId) as COMNAME from op_seae_px where 1=1"); if (!string.IsNullOrEmpty(vlass.ShangPinBianMa)) { sqlStr.Append(" and (select COUNT(ShangPinBianMa) from op_seae_px_details where PXID=op_seae_px.GID and ShangPinBianMa like '%" + vlass.ShangPinBianMa + "%')>0"); ; } if (!string.IsNullOrEmpty(vlass.MBLNO)) { sqlStr.Append(" and MBLNO like '%" + vlass.MBLNO + "%'"); } if (!string.IsNullOrEmpty(vlass.ShenBaoZhuangTai)) { sqlStr.Append(" and ShenBaoZhuangTai='" + vlass.ShenBaoZhuangTai + "'"); } if (!string.IsNullOrEmpty(vlass.CangKuMingCheng)) { sqlStr.Append(" and CangKuMingCheng='" + vlass.CangKuMingCheng + "'"); } if (!string.IsNullOrEmpty(vlass.ChuanMing)) { sqlStr.Append(" and ChuanMing like '%" + vlass.ChuanMing + "%'"); } if (!string.IsNullOrEmpty(vlass.HangCi)) { sqlStr.Append(" and HangCi='" + vlass.HangCi + "'"); } if (!string.IsNullOrEmpty(vlass.LuRuRiQi.ToString())) { sqlStr.Append(" and LuRuRiQi>='" + vlass.LuRuRiQi + "'"); } if (!string.IsNullOrEmpty(vlass.Dao.ToString())) { sqlStr.Append(" and LuRuRiQi<='" + vlass.Dao + "'"); } if (!string.IsNullOrEmpty(vlass.PXCOMNAME)) { sqlStr.Append(" and PXCOMNAME='" + vlass.PXCOMNAME + "'"); } if (!string.IsNullOrEmpty(vlass.LuRuRen)) { sqlStr.Append(" and LuRuRen='" + vlass.LuRuRen + "'"); } if (!string.IsNullOrEmpty(str)) { sqlStr.Append("and " + str); } sqlStr.Append(" order by LuRuRiQi desc"); var lists = context.OpSeaePxs.SqlQuery(sqlStr.ToString()).Skip(offset).Take(limit).OrderByDescending(p => p.LuRuRiQi).ToList(); var counts = context.OpSeaePxs.SqlQuery(sqlStr.ToString()).Count(); //var listAll=list.Select<> var json = new { total = counts, rows = lists, Offset = offset }; return Json(json, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.ErrorFormat("GetPageTab" + ex); return Json(new { total = 1, rows = ex }, JsonRequestBehavior.AllowGet); } } [HttpGet] public ActionResult GetSendDatas(string idstr) { AsyncCallback callback = new AsyncCallback(MethodCompleted); FuncHandle fh = new FuncHandle(DoPost); IAsyncResult ar = fh.BeginInvoke(idstr, "http://47.104.90.170:9000/qdpxd/upload", 90000, callback, fh); return Json("", JsonRequestBehavior.AllowGet); //Thread thead = new Thread(()=>GetSendDatas(idstr)); //thead.Start(); //return Json("", JsonRequestBehavior.AllowGet); } private void MethodCompleted(IAsyncResult asyncResult) { lock (this) { if (asyncResult == null) return; var msg = (asyncResult.AsyncState as FuncHandle).EndInvoke(asyncResult); var data = (JObject)JsonConvert.DeserializeObject(msg); context = new OpSeaePxDbContenxt(); if (Convert.ToInt32(data["status"]) > 0) { SendUpd.ShenBaoZhuangTai = "发送成功"; OpSeaePxTips tips = new OpSeaePxTips(); tips.GID = getGUID(); tips.PXID = SendUpd.Gid; tips.PXSTATUS = SendUpd.ShenBaoZhuangTai; tips.@operator = SendUpd.LuRuRen; tips.optime = DateTime.Now; tips.remark = data["message"].ToString(); context.OpSeaePxTips.Add(tips); context.Entry(SendUpd).State = System.Data.Entity.EntityState.Modified; CustAdd.GID = Guid.NewGuid().ToString().Replace("-", ""); context.CustFee.Add(CustAdd); context.Entry(BalanceUpd).State = System.Data.Entity.EntityState.Modified; } else { OpSeaePxTips tips = new OpSeaePxTips(); tips.GID = getGUID(); tips.PXID = SendUpd.Gid; tips.PXSTATUS = "发送失败"; tips.@operator = SendUpd.LuRuRen; tips.optime = DateTime.Now; tips.remark = data["message"].ToString(); context.OpSeaePxTips.Add(tips); OpSeaePx send = context.OpSeaePx.Select(p => p).Where(p => p.Gid.Equals(SendId)).ToList().FirstOrDefault(); send.ShenBaoZhuangTai = "发送失败"; context.Entry(send).State = System.Data.Entity.EntityState.Modified; } var state = context.SaveChanges(); } } [HttpGet] public ActionResult GetSendData(string idstr) { try { string userid = Convert.ToString(Session["USERID"]); if (userid == "" || userid == null) { var jsonRespose2 = new JsonResponse { Success = false, Message = "登陆状态失效,请重新登陆进行操作!" }; return Json(new { status = 0, message = "登陆状态失效,请重新登陆进行操作!" }, JsonRequestBehavior.AllowGet); } var idArr = idstr.Substring(0, idstr.Length - 1); var arry = idArr.Split(','); JObject sendObj = new JObject(); string sql = "select op_seae_px.GID as PGID,op_seae_px.ChuanMing,op_seae_px.HangCi,op_seae_px.CangKuMingCheng,op_seae_px.TiJi,op_seae_px.MBLNO,op_seae_px.JianShu,op_seae_px_details.GID,op_seae_px_details.ShangPinBianMa,op_seae_px_details.ShangPinMingCheng,op_seae_px_details.ShenBaoShuLiang,MaoZhong,COMNAME_INFO.ISPXCOMPANY,COMNAME_INFO.PXCOMACCOUNT,COMNAME_INFO.PXCOMPASSWORD,COMNAME_INFO.EPortCardNO from op_seae_px join op_seae_px_details on op_seae_px.GID=op_seae_px_details.PXID left join COMNAME_INFO on op_seae_px.PXCOMNAME=COMNAME_INFO.COMNAME where op_seae_px.GID in (" + idArr + ")"; var liss = context.PxAndDelat.SqlQuery(sql).ToList(); var com = Convert.ToString(Session["COMNAME"]); //string Url = "http://47.104.90.170:9000/qdpxd/upload"; var money = context.CustBalance.Where(b => b.COMNAME == com).FirstOrDefault(); var price = context.CustPrice.Where(p => p.COMNAME == com && p.BSTYPE == 2 && p.SENDTYPE == 0).OrderByDescending(p => p.UPDATETIME).FirstOrDefault(); if (price == null) { return Json(new { status = 0, message = "单价模板未配置,请联系管理员添加!" }, JsonRequestBehavior.AllowGet); } decimal unitPrice = price.PRICE; if (money.Balance < (unitPrice * arry.Count()) || money == null) { return Json(new { status = 0, message = "余额不足!" }, JsonRequestBehavior.AllowGet); } var date = context.SysParamSet.Where(p => p.GID == "B97B49D4-14E7-4ED7-8F42-D8D1FF47E67F").FirstOrDefault(); if (date == null) { return Json(new { status = 0, message = "请联系管理员设置拼箱申请单参数!" }, JsonRequestBehavior.AllowGet); } string rtn = ""; JObject SendData; var tu = ""; var state = 0; bool ts = Convert.ToInt32(date.PARAMVALUE) > 0 ? true : false; foreach (var item in arry) { var a = item.Substring(1, (item.Length - 2)); List lis = liss.Select(p => p).Where(p => p.PGID == a).ToList(); if (lis.Count < 1) { return Json(new { status = 0, message = "请录入HS编码,一个提单号下可有多个" }, JsonRequestBehavior.AllowGet); } #region 2021-3-8修改:改用户名、密码方式为卡号方式 #region 原逻辑,用户名密码方式 sendObj.Add("yardid", new JValue("qdpxd")); if (string.IsNullOrEmpty(lis[0].PXCOMACCOUNT) || string.IsNullOrEmpty(lis[0].PXCOMPASSWORD) || lis[0].ISPXCOMPANY == 0) { var pxCurrentLogin = context.ComNameInfo.Where(p => p.COMNAME == com && p.ISPXCOMPANY != null).ToList(); if (pxCurrentLogin.Count < 1 || string.IsNullOrEmpty(pxCurrentLogin[0].PXCOMACCOUNT) || string.IsNullOrEmpty(pxCurrentLogin[0].PXCOMPASSWORD)) { var pxAdm = context.ComNameInfo.Select(p => p).Where(p => p.COMNAME == "青岛东胜伟业软件有限公司" && p.ISPXCOMPANY != null).ToList(); if (pxAdm.Count < 1 || string.IsNullOrEmpty(pxAdm[0].PXCOMACCOUNT) || string.IsNullOrEmpty(pxAdm[0].PXCOMPASSWORD)) { return Json(new { status = 0, message = "请先联系业务人员配置拼箱平台账号信息!" }, JsonRequestBehavior.AllowGet); } else { sendObj.Add("username", new JValue(pxAdm[0].PXCOMACCOUNT)); sendObj.Add("password", new JValue(pxAdm[0].PXCOMPASSWORD)); } } else { sendObj.Add("username", new JValue(pxCurrentLogin[0].PXCOMACCOUNT)); sendObj.Add("password", new JValue(pxCurrentLogin[0].PXCOMPASSWORD)); } } else { sendObj.Add("username", new JValue(lis[0].PXCOMACCOUNT)); sendObj.Add("password", new JValue(lis[0].PXCOMPASSWORD)); } #endregion #region 新逻辑:卡号方式 //if (string.IsNullOrEmpty(lis[0].EPortCardNO) || lis[0].ISPXCOMPANY == 0) //{ // var pxCurrentLogin = context.ComNameInfo.Where(p => p.COMNAME == com && p.ISPXCOMPANY != null).ToList(); // if (pxCurrentLogin.Count < 1 || string.IsNullOrEmpty(pxCurrentLogin[0].EPortCardNO)) // { // var pxAdm = context.ComNameInfo.Select(p => p).Where(p => p.COMNAME == "青岛东胜伟业软件有限公司" && p.ISPXCOMPANY != null).ToList(); // if (pxAdm.Count < 1 || string.IsNullOrEmpty(pxAdm[0].EPortCardNO)) // { // return Json(new { status = 0, message = "请先联系业务人员配置拼箱平台卡号信息!" }, JsonRequestBehavior.AllowGet); // } // else // { // sendObj.Add("username", new JValue(pxAdm[0].EPortCardNO)); // } // } // else // { // sendObj.Add("username", new JValue(pxCurrentLogin[0].EPortCardNO)); // } //} //else //{ // sendObj.Add("username", new JValue(lis[0].EPortCardNO)); //} #endregion #endregion JArray jarrTemps = new JArray(); var q = 0; foreach (var items in lis) { tu = items.MBLNO; JObject jobjCtn = new JObject(); //if (i != 0) //{ // data += ","; //} q++; if (string.IsNullOrEmpty(items.MBLNO)) { return Json(new { status = 0, message = "提单号不能为空!" }, JsonRequestBehavior.AllowGet); } if (string.IsNullOrEmpty(items.ChuanMing)) { return Json(new { status = 0, message = "提单号" + items.MBLNO + "的船名不能为空!" }, JsonRequestBehavior.AllowGet); } if (string.IsNullOrEmpty(items.CangKuMingCheng)) { return Json(new { status = 0, message = "提单号" + items.MBLNO + "的仓库名称不能为空!" }, JsonRequestBehavior.AllowGet); } if (string.IsNullOrEmpty(items.HangCi)) { return Json(new { status = 0, message = "提单号" + items.MBLNO + "的航次不能为空!" }, JsonRequestBehavior.AllowGet); } if (items.JianShu == 0) { return Json(new { status = 0, message = "提单号" + items.MBLNO + "的件数不能为空!" }, JsonRequestBehavior.AllowGet); } if (items.MaoZhong == 0) { return Json(new { status = 0, message = "提单号" + items.MBLNO + "的重量不能为空!" }, JsonRequestBehavior.AllowGet); } if (items.TiJi == 0) { return Json(new { status = 0, message = "提单号" + items.MBLNO + "的尺码不能为空!" }, JsonRequestBehavior.AllowGet); } if (string.IsNullOrEmpty(items.ShangPinBianMa)) { return Json(new { status = 0, message = "提单号" + items.MBLNO + "的商品编码不能为空!" }, JsonRequestBehavior.AllowGet); } if (string.IsNullOrEmpty(items.ShangPinMingCheng)) { return Json(new { status = 0, message = "提单号" + items.MBLNO + ",商品编码" + items.ShangPinBianMa + "的商品名称不能为空!" }, JsonRequestBehavior.AllowGet); } if (items.ShenBaoShuLiang == 0) { return Json(new { status = 0, message = "提单号" + items.MBLNO + ",商品编码" + items.ShangPinBianMa + "的申报数量不能为空!" }, JsonRequestBehavior.AllowGet); } jobjCtn.Add("Vessel", new JValue(items.ChuanMing)); jobjCtn.Add("Voyage", new JValue(items.HangCi)); jobjCtn.Add("mblno", new JValue(items.MBLNO.Trim())); jobjCtn.Add("PCode", new JValue(items.ShangPinBianMa.Length > 8 ? items.ShangPinBianMa.Substring(0, 8) : items.ShangPinBianMa)); jobjCtn.Add("PName", new JValue(items.ShangPinMingCheng.Replace(',', ','))); jobjCtn.Add("Count", new JValue(Convert.ToDouble(items.ShenBaoShuLiang).ToString())); jobjCtn.Add("StoreName", new JValue(items.CangKuMingCheng)); if (q != lis.Count()) { jobjCtn.Add("noc", new JValue("0.001")); jobjCtn.Add("GrossWeight", new JValue("0.001")); jobjCtn.Add("Volume", new JValue("0.001")); } else { jobjCtn.Add("noc", new JValue(Convert.ToDouble((items.JianShu - (lis.Count() - 1) * (decimal)0.001)).ToString())); jobjCtn.Add("GrossWeight", new JValue(Convert.ToDouble((items.MaoZhong - (lis.Count() - 1) * (decimal)0.001)).ToString())); jobjCtn.Add("Volume", new JValue(Convert.ToDouble((items.TiJi - (lis.Count() - 1) * (decimal)0.001)).ToString())); } //data += @"{'Vessel': '" + item.ChuanMing + "','Voyage': '" + item.HangCi + "','mblno': '" + item.MBLNO + "','PCode': '" + item.ShangPinBianMa + "','PName': '" + item.ShangPinMingCheng + "','Count': '" + item.ShenBaoShuLiang + "','StoreName': '" + item.CangKuMingCheng + "','noc': '" + item.JianShu + "','GrossWeight': '" + item.MaoZhong + "','Volume': '" + item.TiJi + "'}"; //i = 1; jarrTemps.Add(jobjCtn); } sendObj.Add("ts", new JValue(ts)); sendObj.Add("bslist", jarrTemps); var b = sendObj.ToString(); logger.Debug($"拼箱申请单发送:{b}"); SendData = (JObject)JsonConvert.DeserializeObject(rtn); //if (Convert.ToInt32(SendData["status"]) > 0) //{ context = new OpSeaePxDbContenxt(); SendId = item.ToString().Substring(1, item.Length - 2); var t = item.ToString().Substring(1, item.Length - 2); OpSeaePx send = context.OpSeaePx.Select(p => p).Where(p => p.Gid.Equals(t)).ToList().FirstOrDefault(); send.ShenBaoZhuangTai = "已发送"; send.SendTim = DateTime.Now; SendUpd = send; context.Entry(send).State = System.Data.Entity.EntityState.Modified; DSWeb.Common.DbContexts.Model.CustFee custFee = new DSWeb.Common.DbContexts.Model.CustFee(); custFee.GID = Guid.NewGuid().ToString().Replace("-", ""); custFee.BSNO = t; custFee.MBLNO = send.MBLNO; custFee.PRICE = unitPrice; custFee.CREATETIME = DateTime.Now; custFee.SENDTIME = DateTime.Now; custFee.BSTYPE = 2; custFee.BEIZHU = ""; custFee.SENDTYPE = 0; custFee.VESSEL = send.ChuanMing; custFee.VOYNO = send.HangCi; //custFee.SENDUSER = user.SHOWNAME; //custFee.SENDCOM = user.COMNAME; //custFee.COMNAME = user.COMNAME; //custFee.SENDUSERID = user.GID; //custFee.LURURENID = user.GID; custFee.SENDCOM = com; custFee.SENDUSER = Convert.ToString(Session["SHOWNAME"]); custFee.SENDUSERID = Convert.ToString(Session["USERID"]); custFee.LURURENID = Convert.ToString(Session["USERID"]); custFee.LURUREN = Convert.ToString(Session["SHOWNAME"]); custFee.CANGKU = send.CangKuMingCheng; custFee.PKGS = (float)send.JianShu; custFee.KGS = (float)send.MaoZhong; custFee.COMNAME = com; CustAdd = custFee; //context.CustFee.Add(custFee); money.Balance -= unitPrice; BalanceUpd = money; //context.Entry(money).State = System.Data.Entity.EntityState.Modified; OpSeaePxTips tips = new OpSeaePxTips(); tips.GID = getGUID(); tips.PXID = send.Gid; tips.PXSTATUS = send.ShenBaoZhuangTai; tips.@operator = Convert.ToString(Session["SHOWNAME"]); tips.optime = DateTime.Now; tips.remark = "发送业务"; context.OpSeaePxTips.Add(tips); state = context.SaveChanges(); AsyncCallback callback = new AsyncCallback(MethodCompleted); FuncHandle fh = new FuncHandle(DoPost); var strJsonSend = sendObj.ToString(); logger.Debug($"拼箱申请单发送,GID:{tips.GID},内容:{strJsonSend}"); //IAsyncResult ar = fh.BeginInvoke(strJsonSend, "http://47.104.90.170:9000/qdpxd/card/upload", 90000, callback, fh); IAsyncResult ar = fh.BeginInvoke(strJsonSend, "http://47.104.90.170:9000/qdpxd/upload", 90000, callback, fh); jarrTemps = new JArray(); sendObj = new JObject(); //return Json(new { status = 1, message = "提单号" + tu + "发送失败" }, JsonRequestBehavior.AllowGet); //} //else //{ // context = new OpSeaePxDbContenxt(); // var t = item.ToString().Substring(1, item.Length - 2); // OpSeaePx send = context.OpSeaePx.Select(p => p).Where(p => p.Gid.Equals(t)).ToList().FirstOrDefault(); // send.SendState = "发送失败"; // context.Entry(send).State = System.Data.Entity.EntityState.Modified; // context.SaveChanges(); // return Json(new { status = 0, message = "提单号" + tu + "发送失败," + SendData["message"] }); //} } SendPXEmil(userid, liss); //if (state > 0) //{ // return Json(new { status = 1, message = "" }); //} return Json(new { status = 1, message = "服务器错误,请稍后重试" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.ErrorFormat("GetSendData" + ex); return Json(new { status = 0, message = ex.ToString() }, JsonRequestBehavior.AllowGet); } } #region 发送拼箱申请单,2022-4-21重写 //原逻辑好像支持多个,新逻辑按衣国豪要求,只能发送一个 [HttpPost] public ActionResult SendPinXiangData(string idstr) { RespCommonData resp = new RespCommonData(); var userid = Session["USERID"].ToString(); var comname = Session["COMNAME"].ToString(); var username = Session["SHOWNAME"].ToString(); if (string.IsNullOrEmpty(userid)) { resp.Success = false; resp.Message = "登陆状态失效,请重新登陆进行操作!"; return Json(resp); } //判断公司钱包账户和单价设置 var balance = context.CustBalance.AsNoTracking().FirstOrDefault(b => b.COMNAME == comname); var price = context.CustPrice.AsNoTracking().OrderByDescending(p => p.UPDATETIME).FirstOrDefault(p => p.COMNAME == comname && p.BSTYPE == 2 && p.SENDTYPE == 0); if (price == null) { resp.Success = false; resp.Message = "单价模板未配置,请联系管理员添加!"; return Json(resp); } decimal unitPrice = price.PRICE; if (balance.Balance < unitPrice || balance == null) { resp.Success = false; resp.Message = "余额不足!"; return Json(resp); } //拼箱申请单暂存参数 var pIsSave = context.SysParamSet.AsNoTracking().FirstOrDefault(p => p.PARAMNAME == "ISSTAGINGARE"); if (pIsSave == null) { resp.Success = false; resp.Message = "请联系管理员设置拼箱申请单是否暂存参数!"; return Json(resp); } var isSave = pIsSave.PARAMVALUE == "0" ? false : true; //拼箱申请单发送爬虫的url地址 var spiderUrl = context.SysParamSet.AsNoTracking().FirstOrDefault(p => p.PARAMNAME == "pPxSendSpiderUrl"); if (spiderUrl == null || string.IsNullOrEmpty(spiderUrl.PARAMVALUE)) { resp.Success = false; resp.Message = "拼箱申请单发送爬虫的url地址未正确配置!"; return Json(resp); } //拼箱申请单发送爬虫的userkey和secret var spiderSpiderUserId = context.SysParamSet.AsNoTracking().FirstOrDefault(p => p.PARAMNAME == "pPinXiangSpiderUserId"); var spiderSpiderUserSecret = context.SysParamSet.AsNoTracking().FirstOrDefault(p => p.PARAMNAME == "pPinXiangSpiderUserSecret"); if (spiderSpiderUserId == null || string.IsNullOrEmpty(spiderSpiderUserId.PARAMVALUE) || spiderSpiderUserSecret == null || string.IsNullOrEmpty(spiderSpiderUserSecret.PARAMVALUE)) { resp.Success = false; resp.Message = "拼箱申请单发送爬虫的user key和secret未正确配置!"; return Json(resp); } var pxModel = context.OpSeaePx.AsNoTracking().Where(x => x.Gid == idstr).First(); var pxDetails = context.OpSeaeDetalis.AsNoTracking().Where(x => x.PXID == idstr).ToList(); if (pxDetails.Count == 0) { resp.Success = false; resp.Message = "请录入商品明细!"; return Json(resp); } #region 构建发送的json var jobjSend = new JObject(); jobjSend.Add("user_key", spiderSpiderUserId.PARAMVALUE); jobjSend.Add("user_secret", spiderSpiderUserSecret.PARAMVALUE); //操作方式 var cnInfo = context.ComNameInfo.AsNoTracking().FirstOrDefault(x => x.COMNAME == comname); var cnInfoDS = context.ComNameInfo.AsNoTracking().FirstOrDefault(x => x.COMNAME == "青岛东胜伟业软件有限公司"); if (cnInfo == null || cnInfo.ISPXCOMPANY == 0) { jobjSend.Add("uid", cnInfoDS.PXCOMACCOUNT);//卡号 jobjSend.Add("psw", cnInfoDS.PXCOMPASSWORD);//卡密 } else { jobjSend.Add("uid", cnInfo.PXCOMACCOUNT);//卡号 jobjSend.Add("psw", cnInfo.PXCOMPASSWORD);//卡密 } jobjSend.Add("operate", isSave ? "0" : "1");//操作方式 0:暂存, 1:发送 jobjSend.Add("warehouse_name", pxModel.CangKuMingCheng);//仓库 jobjSend.Add("vessel", pxModel.ChuanMing);//船名 jobjSend.Add("voyage", pxModel.HangCi.ToUpper());//航次(字母大写) jobjSend.Add("bno", pxModel.MBLNO);//单号 jobjSend.Add("pieces", pxModel.JianShu);//件数 jobjSend.Add("heavy", pxModel.MaoZhong);//重量 jobjSend.Add("foot", pxModel.TiJi);//尺码 var jarr = new JArray(); jobjSend.Add("infos", jarr);//明细数据 foreach (var detail in pxDetails) { var jobj = new JObject(); jobj.Add("hs_code", detail.ShangPinBianMa); jobj.Add("product_name", detail.ShangPinMingCheng); jobj.Add("declare_num", detail.ShenBaoShuLiang); jarr.Add(jobj); } var strJson = JsonConvert.SerializeObject(jobjSend); #endregion var threadId = Guid.NewGuid().ToString(); resp.Success = true; resp.Message = ""; resp.Data = threadId; MemoryCache.Default.Add(new CacheItem(threadId, JsonConvert.SerializeObject(new RespCommon() { Success = true, Code = 100 })), new CacheItemPolicy() { AbsoluteExpiration = DateTime.Now.AddMinutes(3) }); Task.Run(() => { logger.Debug($"发送拼箱申请单{spiderUrl.PARAMVALUE}:\n{strJson}"); string postRtn = string.Empty; var pinxiangModel = context.OpSeaePx.Where(x => x.Gid == idstr).First(); try { postRtn = WebRequestHelper.DoPost(spiderUrl.PARAMVALUE, strJson, timeout: 180000); logger.Debug($"发送拼箱申请单返回:\n{postRtn}"); var rtnObj = JsonConvert.DeserializeAnonymousType(postRtn, new { code = 0, msg = "" }); if (rtnObj.code == 200) { pinxiangModel.ShenBaoZhuangTai = "发送成功"; pinxiangModel.SendTim = DateTime.Now; OpSeaePxTips tips = new OpSeaePxTips(); tips.GID = Guid.NewGuid().ToString(); tips.PXID = pinxiangModel.Gid; tips.PXSTATUS = pinxiangModel.ShenBaoZhuangTai; tips.@operator = pinxiangModel.LuRuRen; tips.optime = DateTime.Now; tips.remark = rtnObj.msg; context.OpSeaePxTips.Add(tips); DSWeb.Common.DbContexts.Model.CustFee custFee = new DSWeb.Common.DbContexts.Model.CustFee(); custFee.GID = Guid.NewGuid().ToString().Replace("-", ""); custFee.BSNO = pinxiangModel.Gid; custFee.MBLNO = pinxiangModel.MBLNO; custFee.PRICE = unitPrice; custFee.CREATETIME = DateTime.Now; custFee.SENDTIME = DateTime.Now; custFee.BSTYPE = 2; custFee.BEIZHU = ""; custFee.SENDTYPE = 0; custFee.VESSEL = pinxiangModel.ChuanMing; custFee.VOYNO = pinxiangModel.HangCi; custFee.SENDCOM = comname; custFee.SENDUSER = username; custFee.SENDUSERID = userid; custFee.LURURENID = userid; custFee.LURUREN = username; custFee.CANGKU = pinxiangModel.CangKuMingCheng; custFee.PKGS = (float)pinxiangModel.JianShu; custFee.KGS = (float)pinxiangModel.MaoZhong; custFee.COMNAME = comname; custFee.COMID = context.Users.Where(x => x.GID == userid).Select(x => x.CompId).FirstOrDefault(); context.CustFee.Add(custFee); var bal = context.CustBalance.FirstOrDefault(b => b.COMNAME == comname); bal.Balance -= unitPrice; #region 新加逻辑 var url = context.SysParamSet.AsNoTracking().FirstOrDefault(p => p.PARAMNAME == "pPxSendSpiderStatusUrl"); var jobjSend1 = new JObject(); jobjSend1.Add("user_key", spiderSpiderUserId.PARAMVALUE); jobjSend1.Add("user_secret", spiderSpiderUserSecret.PARAMVALUE); jobjSend1.Add("bno", pinxiangModel.MBLNO.ToString()); var strJson1 = JsonConvert.SerializeObject(jobjSend1); var data = WebRequestHelper.DoPost(url.PARAMVALUE, strJson1, timeout: 180000); JObject jobjRtn = JObject.Parse(data); if (jobjRtn != null) { if (jobjRtn["code"].ToString() == "200") { logger.Debug(pinxiangModel.MBLNO.ToString() + "调取成功"); Dictionary dic1 = new Dictionary(); var depot_status = jobjRtn["msg"]["depot_status"].ToString(); var depot_time = jobjRtn["msg"]["depot_time"].ToString(); if (!string.IsNullOrEmpty(depot_time)) { dic1.Add(depot_status, Convert.ToDateTime(depot_time)); } var order_status = jobjRtn["msg"]["order_status"].ToString(); var order_time = jobjRtn["msg"]["order_time"].ToString(); if (!string.IsNullOrEmpty(order_time)) { dic1.Add(order_status, Convert.ToDateTime(order_time)); } var release_status = jobjRtn["msg"]["release_status"].ToString(); var release_time = jobjRtn["msg"]["release_time"].ToString(); if (!string.IsNullOrEmpty(release_time)) { dic1.Add(release_status, Convert.ToDateTime(release_time)); } var shipto_status = jobjRtn["msg"]["shipto_status"].ToString(); var shipto_time = jobjRtn["msg"]["shipto_time"].ToString(); if (!string.IsNullOrEmpty(shipto_time)) { dic1.Add(shipto_status, Convert.ToDateTime(shipto_time)); } var sluice_status = jobjRtn["msg"]["sluice_status"].ToString(); var sluice_time = jobjRtn["msg"]["sluice_time"].ToString(); if (!string.IsNullOrEmpty(sluice_time)) { dic1.Add(sluice_status, Convert.ToDateTime(sluice_time)); } var oplist = context.OpSeaePxTips.Where(p => p.PXID == pinxiangModel.Gid).ToList(); var dic = dic1.OrderBy(x => x.Value).ToList(); foreach (var itc in dic) { if (oplist.Where(x => x.PXSTATUS == itc.Key).ToList().Count == 0) { OpSeaePxTips tips1 = new OpSeaePxTips(); tips1.GID = Guid.NewGuid().ToString(); tips1.PXID = pinxiangModel.Gid; tips1.PXSTATUS = itc.Key; tips1.@operator = pinxiangModel.LuRuRen; tips1.optime = DateTime.Now; tips1.remark = itc.Key; context.OpSeaePxTips.Add(tips1); pinxiangModel.ReceiptState = itc.Key; pinxiangModel.ReceiptTim = itc.Value; } } context.Entry(pinxiangModel).State = System.Data.Entity.EntityState.Modified; } } #endregion } else { pinxiangModel.ShenBaoZhuangTai = "发送失败"; OpSeaePxTips tips = new OpSeaePxTips(); tips.GID = Guid.NewGuid().ToString(); tips.PXID = pinxiangModel.Gid; tips.PXSTATUS = "发送失败"; tips.@operator = pinxiangModel.LuRuRen; tips.optime = DateTime.Now; tips.remark = rtnObj.msg; context.OpSeaePxTips.Add(tips); } if (MemoryCache.Default.Contains(threadId)) { var result = JsonConvert.DeserializeObject(MemoryCache.Default[threadId].ToString()); if (rtnObj.code == 200) { result.Code = 0; result.Message = "发送成功"; } else { result.Code = 10; result.Message = rtnObj.msg; } MemoryCache.Default[threadId] = JsonConvert.SerializeObject(result); } } catch (Exception ex) { logger.Error(ex); pinxiangModel.ShenBaoZhuangTai = "发送失败"; OpSeaePxTips tips = new OpSeaePxTips(); tips.GID = Guid.NewGuid().ToString(); tips.PXID = pinxiangModel.Gid; tips.PXSTATUS = "发送失败"; tips.@operator = pinxiangModel.LuRuRen; tips.optime = DateTime.Now; tips.remark = ex.Message; context.OpSeaePxTips.Add(tips); if (MemoryCache.Default.Contains(threadId)) { var result = JsonConvert.DeserializeObject(MemoryCache.Default[threadId].ToString()); resp.Code = 500; resp.Message = ex.Message; MemoryCache.Default[threadId] = JsonConvert.SerializeObject(result); } } context.SaveChanges(); }); return Json(resp); } public static bool IsDateTime(string StrSource) { return System.Text.RegularExpressions.Regex.IsMatch(StrSource, @"^(((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d)$ "); } //异步获取发送结果 [HttpGet] public ActionResult GetThreadResult(string threadId) { RespCommon resp = new RespCommon(); if (MemoryCache.Default.Contains(threadId)) { resp = JsonConvert.DeserializeObject(MemoryCache.Default[threadId].ToString()); } else { resp.Success = false; resp.Code = -1; } return Json(resp, JsonRequestBehavior.AllowGet); } #endregion public ActionResult GetSendState() { //var url = "http://47.104.90.170:9000/qdpxd/status"; JObject sendobj = new JObject(); return Content(""); } /// /// 查看余额 /// /// /// /// public bool Debit(string com, int sum) { var msg = true; var money = context.CustBalance.Where(b => b.COMNAME == com).FirstOrDefault(); var price = context.CustPrice.Where(p => p.COMNAME == com && p.BSTYPE == 2).OrderByDescending(p => p.UPDATETIME).ToList(); if (money.Balance < (price[0].PRICE * sum) || money == null) { msg = false; } if (price == null) { msg = false; } return msg; } [HttpGet] public JsonResult DropPx(string str) { try { var idstr = str.Substring(0, str.Length - 1); var idArr = idstr.Split(','); foreach (var item in idArr) { var lisTips = context.OpSeaePxTips.Where(p => p.PXID == item).ToList(); foreach (var me in lisTips) { context.Entry(me).State = System.Data.Entity.EntityState.Deleted; } OpSeaePx op = new OpSeaePx() { Gid = item }; context.Entry(op).State = System.Data.Entity.EntityState.Deleted; var lis = context.OpSeaeDetalis.Select(p => new { p.GID, p.PXID }).Where(p => p.PXID == item).ToList().Select(p => new OpSeaeDetalis { GID = p.GID }); foreach (var ix in lis) { OpSeaeDetalis det = new OpSeaeDetalis { GID = ix.GID }; context.Entry(det).State = System.Data.Entity.EntityState.Deleted; } } int state = context.SaveChanges(); return Json(state, JsonRequestBehavior.AllowGet); } catch (Exception ex) { logger.ErrorFormat("DropPx" + ex); return Json(0, JsonRequestBehavior.AllowGet); } } [HttpPost] public ActionResult Import() { try { string userid = Convert.ToString(Session["USERID"]); if (userid == "" || userid == null) { var jsonRespose2 = new JsonResponse { Success = false, Message = "登陆状态失效,请重新登陆进行操作!" }; return new ContentResult() { Content = Helper.JsonConvert.Serialize(jsonRespose2) }; } System.Web.HttpFileCollection _file = System.Web.HttpContext.Current.Request.Files; var code = 0; if (_file.Count > 0) { long size = _file[0].ContentLength; string type = _file[0].ContentType; string name = _file[0].FileName; string _tp = Path.GetExtension(name); Stream stream = _file[0].InputStream; string savaName = DateTime.Now.ToString("yyyyMMddHHssmm") + _tp; //保存文件 string filepath = "../../Areas/MvcShipping/Contens/" + savaName; string path = Server.MapPath(filepath); if (!Directory.Exists(Server.MapPath("../../Areas/MvcShipping/Contens"))) { Directory.CreateDirectory(Server.MapPath("../../Areas/MvcShipping/Contens/")); } _file[0].SaveAs(path); string dirpath = Server.MapPath("../../Areas/MvcShipping/Contens/"); code = ReadFileToLis(path, savaName, dirpath); } if (code > 0) { return Content("模板导入成功"); } if (code == -1) { return Content("提单号已存在,请检查!"); } return Content("模板导入失败"); } catch (Exception ex) { logger.ErrorFormat("Import" + ex); return Content("模板导入失败," + ex + ""); } } [HttpPost] public ActionResult EditDet(OpSeaePx seae, string Gids) { try { string userid = Convert.ToString(Session["USERID"]); if (userid == "" || userid == null) { var jsonRespose2 = new JsonResponse { Success = false, Message = "登陆状态失效,请重新登陆进行操作!" }; return new ContentResult() { Content = Helper.JsonConvert.Serialize(jsonRespose2) }; } var state = 0; if (!string.IsNullOrEmpty(Gids)) { var oldData = context.OpSeaePx.Where(p => p.Gid == seae.Gid).First(); if (string.IsNullOrEmpty(seae.CangKuMingCheng)) { seae.CangKuMingCheng = oldData.CangKuMingCheng; } if (string.IsNullOrEmpty(seae.Corpid)) { seae.Corpid = oldData.Corpid; } if (string.IsNullOrEmpty(seae.GuanQuDaiMa)) { seae.GuanQuDaiMa = oldData.GuanQuDaiMa; } if (string.IsNullOrEmpty(seae.LuRuRenId)) { seae.LuRuRenId = oldData.LuRuRenId; } if (string.IsNullOrEmpty(seae.ShenBaoZhuangTai)) { seae.ShenBaoZhuangTai = oldData.ShenBaoZhuangTai; } if (string.IsNullOrEmpty(seae.PXCOMNAME)) { seae.PXCOMNAME = oldData.PXCOMNAME; } seae.LuRuRen = oldData.LuRuRen; seae.LuRuRenId = oldData.LuRuRenId; seae.Corpid = oldData.Corpid; seae.LuRuRiQi = oldData.LuRuRiQi; context = new OpSeaePxDbContenxt(); context.Entry(seae).State = System.Data.Entity.EntityState.Modified; state = context.SaveChanges(); } else { var c = context.OpSeaePx.Where(p => p.MBLNO == seae.MBLNO).Count(); if (c > 0) { var cdc = new CommonDataContext(); var inputuser = cdc.Users.Where(x => x.GID == seae.LuRuRenId).ToList(); //return Content("平台中已存在提单号" + seae.MBLNO + ",请检查"); return Content("提单号" + seae.MBLNO + "已存在,录入公司:" + inputuser[0].COMNAME + ",录入人:" + seae.LuRuRen + "."); } context = new OpSeaePxDbContenxt(); seae.Gid = seae.Gid; seae.GuanQuDaiMa = "黄岛海关"; if (string.IsNullOrEmpty(seae.ShenBaoZhuangTai)) { seae.ShenBaoZhuangTai = "已录入"; } seae.YeWuLeiXing = "出口拼箱"; seae.LuRuRen = Convert.ToString(Session["SHOWNAME"]); seae.LuRuRenId = Convert.ToString(Session["USERID"]); seae.LuRuRiQi = DateTime.Now; seae.Corpid = Convert.ToString(Session["COMPANYID"]); seae.TiJi = Math.Round(seae.TiJi, 4); seae.MaoZhong = Math.Round(seae.MaoZhong, 4); context = new OpSeaePxDbContenxt(); OpSeaePxTips tips = new OpSeaePxTips(); tips.GID = getGUID(); tips.PXID = seae.Gid; tips.PXSTATUS = seae.ShenBaoZhuangTai; tips.@operator = seae.LuRuRen; tips.optime = DateTime.Now; tips.remark = "创建业务"; context.OpSeaePxTips.Add(tips); context.OpSeaePx.Add(seae); state = context.SaveChanges(); } if (state > 0) { return Content("操作成功"); } else { return Content("操作失败"); } } catch (DbEntityValidationException ex) { logger.ErrorFormat("EditDet" + ex); return Content("操作失败"); } } public ActionResult EditBook(string Gid, string MBLNO = null, string PXCOMNAME = null, string CangKuMingCheng = null, string ChuanMing = null, string HangCi = null, string JianShu = null, string MaoZhong = null, string TiJi = null, string BeiZhu = null) { string userid = Convert.ToString(Session["USERID"]); if (userid == "" || userid == null) { var jsonRespose2 = new JsonResponse { Success = false, Message = "登陆状态失效,请重新登陆进行操作!" }; return new ContentResult() { Content = Helper.JsonConvert.Serialize(jsonRespose2) }; } ViewData["ShipName"] = BasicDataRefDAL.GetVesselList(""); var pxCom = context.ComNameInfo.Select(p => p).Where(p => p.ISPXCOMPANY != 0).ToList(); ViewData["pxCom"] = pxCom.Select(p => p.COMNAME).ToList(); var lrr = context.Users.Select(p => p.SHOWNAME).ToList(); ViewData["lrr"] = lrr; ViewData["ckm"] = new List { "中创", "外运", "大亚", "捷运", "万嘉", "邦达", "五洲" }; if (Gid == "" || Gid == null) { ViewData["Gid"] = getGUID(); ViewData["MBLNO"] = ""; ViewData["PXCOMNAME"] = PXCOMNAME == null || PXCOMNAME == "null" ? "" : PXCOMNAME; ViewData["CangKuMingCheng"] = CangKuMingCheng == null || CangKuMingCheng == "null" ? "" : CangKuMingCheng == "" ? "" : CangKuMingCheng; ViewData["ChuanMing"] = ChuanMing == null || ChuanMing == "null" ? "" : ChuanMing; ViewData["HangCi"] = HangCi == null || HangCi == "null" ? "" : HangCi; ViewData["JianShu"] = JianShu == null || JianShu == "null" ? "" : JianShu; ViewData["MaoZhong"] = MaoZhong == null || MaoZhong == "null" ? "" : MaoZhong; ViewData["TiJi"] = TiJi == null || TiJi == "null" ? "" : TiJi; ViewData["LuRuRen"] = Convert.ToString(Session["SHOWNAME"]); ViewData["LuRuRiQi"] = DateTime.Now; ViewData["BeiZhu"] = BeiZhu == null || BeiZhu == "null" ? "" : BeiZhu; ViewData["ShenBaoZhuangTai"] = "已录入"; ViewData["opseaedeli"] = new List(); } else { ViewData["Gid"] = Gid; var lis = context.OpSeaePx.Where(p => p.Gid == Gid).FirstOrDefault(); ViewData["MBLNO"] = lis.MBLNO; ViewData["CangKuMingCheng"] = lis.CangKuMingCheng == null ? "" : lis.CangKuMingCheng; ViewData["ChuanMing"] = lis.ChuanMing; ViewData["HangCi"] = lis.HangCi; ViewData["JianShu"] = lis.JianShu; ViewData["MaoZhong"] = lis.MaoZhong; ViewData["TiJi"] = lis.TiJi; ViewData["LuRuRen"] = lis.LuRuRen; ViewData["LuRuRiQi"] = lis.LuRuRiQi; ViewData["BeiZhu"] = lis.BeiZhu; ViewData["ShenBaoZhuangTai"] = lis.ShenBaoZhuangTai; ViewData["PXCOMNAME"] = lis.PXCOMNAME == null ? "" : lis.PXCOMNAME; ViewData["opseaedeli"] = context.OpSeaeDetalis.Where(p => p.PXID == Gid).OrderBy(p => p.XuHao).ToList(); } return View(); } [HttpGet] public int DropBook(string IdStr) { try { string id = IdStr.Substring(0, IdStr.Length - 1); var idarr = id.Split(','); foreach (var ix in idarr) { OpSeaeDetalis det = new OpSeaeDetalis { GID = ix }; context.Entry(det).State = System.Data.Entity.EntityState.Deleted; } return context.SaveChanges(); } catch (Exception ex) { logger.ErrorFormat("DropBook" + ex); return 0; } } [HttpPost] public ActionResult AddOrEditCell(string PxId, string Gid, string Code, string Name, string Counts, string Unit) { try { var state = 0; if (string.IsNullOrEmpty(Gid)) { OpSeaeDetalis deta = new OpSeaeDetalis(); deta.PXID = PxId; deta.ShangPinBianMa = Code; deta.ShangPinMingCheng = Name; deta.ShenBaoShuLiang = Convert.ToDecimal(Counts); deta.GID = getGUID(); deta.FaDingDanWei = Unit; deta.XuHao = context.OpSeaeDetalis.Where(p => p.PXID == PxId).Count() + 1; context = new OpSeaePxDbContenxt(); context.OpSeaeDetalis.Add(deta); state = context.SaveChanges(); } else { OpSeaeDetalis deta = new OpSeaeDetalis(); deta.PXID = PxId; deta.GID = Gid; deta.ShangPinBianMa = Code; deta.ShangPinMingCheng = Name; deta.ShenBaoShuLiang = Convert.ToDecimal(Counts); deta.FaDingDanWei = Unit; deta.XuHao = context.OpSeaeDetalis.Where(p => p.PXID == PxId).Count() + 1; context = new OpSeaePxDbContenxt(); context.Entry(deta).State = System.Data.Entity.EntityState.Modified; state = context.SaveChanges(); } if (state > 0) { return Content("操作成功"); } else { return Content("操作失败"); } } catch (Exception ex) { logger.ErrorFormat("AddOrEditCell" + ex); return Content("操作失败," + ex); } } public string DoPost(string json, string url, int timeout = 90000) { string responseString = "";//post返回的结果 ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, err) => { return true; }; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); req.Method = "POST"; if (!string.IsNullOrWhiteSpace(json)) { byte[] postBytes = Encoding.UTF8.GetBytes(json); req.ContentType = "application/json; charset=utf-8"; req.ContentLength = Encoding.UTF8.GetByteCount(json); Stream stream = req.GetRequestStream(); stream.Write(postBytes, 0, postBytes.Length); req.Timeout = 90000; stream.Close(); } else { req.ContentLength = 0; } var response = req.GetResponse(); Stream streamResponse = response.GetResponseStream(); StreamReader streamRead = new StreamReader(streamResponse); responseString = streamRead.ReadToEnd(); response.Close(); streamRead.Close(); return responseString; } private int ReadFileToLis(string path, string Name, string dirpath) { List enlist = new List(); // 转换后的集合 OpSeaePx seaepx = new OpSeaePx(); try { using (FileStream fs = System.IO.File.OpenRead(path)) { string fileEX = Path.GetExtension(path).ToLower(); NPOI.SS.UserModel.IWorkbook workbook; if (fileEX == ".xlsx") { workbook = new NPOI.XSSF.UserModel.XSSFWorkbook(fs); } else if (fileEX == ".xls") { workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(fs); } else { return 0; } NPOI.SS.UserModel.ISheet sheet = (NPOI.SS.UserModel.ISheet)workbook.GetSheetAt(0); var t = 1; for (int i = 1; i < sheet.LastRowNum; i++) { if (sheet.GetRow(i) == null) { break; } var a = sheet.GetRow(i); if (a.Cells[0].ToString() == "拼箱库名称") { if (string.IsNullOrEmpty(a.Cells[1].ToString())) { return 0; } seaepx.Gid = getGUID(); seaepx.CangKuMingCheng = a.Cells[1].ToString(); seaepx.ChuanMing = a.Cells[3].ToString(); seaepx.HangCi = a.Cells[5].ToString(); seaepx.MBLNO = a.Cells[7].ToString(); seaepx.GuanQuDaiMa = "黄岛海关"; seaepx.YeWuLeiXing = "出口拼箱"; seaepx.LuRuRiQi = DateTime.Now; seaepx.LuRuRen = Convert.ToString(Session["SHOWNAME"]); seaepx.LuRuRenId = Convert.ToString(Session["USERID"]); seaepx.Corpid = Convert.ToString(Session["COMPANYID"]); //seaepx.LuRuRen = "衣国豪"; //seaepx.LuRuRenId = "d85fd590-d9f6-4410-93a1-f6fac77b606e"; //seaepx.Corpid = "Comcab2d43f60454327af30a131fc1d3abd"; } else if (a.Cells[0].ToString() == "仓库联系人") { } else if (a.Cells[0].ToString() == "本票合计总数") { seaepx.JianShu = Convert.ToDecimal(a.Cells[2].ToString()); seaepx.MaoZhong = Convert.ToDecimal(a.Cells[5].ToString()); seaepx.TiJi = Convert.ToDecimal(a.Cells[8].ToString()); seaepx.ShenBaoZhuangTai = "已录入"; seaepx.BeiZhu = ""; break; } else { if (string.IsNullOrEmpty(a.Cells[1].ToString())) { continue; } OpSeaeDetalis detalis = new OpSeaeDetalis(); detalis.XuHao = t; detalis.GID = getGUID(); detalis.PXID = seaepx.Gid; detalis.ShangPinBianMa = a.Cells[1].ToString(); detalis.ShangPinMingCheng = a.Cells[3].ToString(); detalis.ShenBaoShuLiang = Convert.ToDecimal(a.Cells[5].ToString()); var u = context.SeaePxHscode.Where(p => p.HSCODE == detalis.ShangPinBianMa).FirstOrDefault(); detalis.FaDingDanWei = u.UNIT; detalis.PeiZaiShuLiang = 0; detalis.RuKuShuLiang = 0; t = t + 1; enlist.Add(detalis); } } } int state = 0; if (seaepx != null && enlist != null) { state = ImportDb(seaepx, enlist); } return state; } catch (Exception ex) { logger.ErrorFormat("ReadFileToLis" + ex); return 0; } finally { DropFile(dirpath); }; } private int ImportDb(OpSeaePx seaepx, List enlist) { try { if (context.OpSeaePx.Where(p => p.MBLNO == seaepx.MBLNO).Count() > 0) { return -1; } OpSeaePxTips tips = new OpSeaePxTips(); tips.GID = getGUID(); tips.PXID = seaepx.Gid; tips.PXSTATUS = seaepx.ShenBaoZhuangTai; tips.@operator = seaepx.LuRuRen; tips.optime = DateTime.Now; tips.remark = "创建业务"; context.OpSeaePxTips.Add(tips); context.OpSeaePx.Add(seaepx); foreach (var item in enlist) { context.OpSeaeDetalis.Add(item); } var code = context.SaveChanges(); return code; } catch (DbEntityValidationException ex) { logger.ErrorFormat("ImportDb" + ex); return 0; } } private void DropFile(string path) { try { DirectoryInfo dir = new DirectoryInfo(path); FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录 foreach (FileSystemInfo i in fileinfo) { if (i is DirectoryInfo) //判断是否文件夹 { DirectoryInfo subdir = new DirectoryInfo(i.FullName); subdir.Delete(true); } else { System.IO.File.Delete(i.FullName); } } } catch (Exception e) { logger.ErrorFormat("DropFile" + e); } } [HttpGet] public ActionResult GetCodeMessage(string code) { try { var lis = context.SeaePxHscode.Select(p => p).Where(p => p.HSCODE == code).FirstOrDefault(); if (lis == null) { lis = context.SeaePxHscode.Select(p => p).Where(p => p.HSCODE.Contains(code)).FirstOrDefault(); lis.NAME = ""; } return Json(new { state = 1, name = lis.NAME, unit = lis.UNIT }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { state = 0, name = "error", unit = ex.Message }, JsonRequestBehavior.AllowGet); } } [HttpGet] public ActionResult GetLog(string idstr) { try { var lis = context.OpSeaePxTips.Where(p => p.PXID == idstr).OrderByDescending(p => p.optime).ToList(); return Json(new { data = lis, state = 1 }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { data = ex.ToString(), state = 1 }, JsonRequestBehavior.AllowGet); } } private string getGUID() { System.Guid guid = new Guid(); guid = Guid.NewGuid(); string str = guid.ToString(); return str; } public static string GetRangDAStr(string tb, string userid, string username, string companyid, int type = 0) { string str = ""; var strSql = new StringBuilder(); strSql.Append("SELECT "); strSql.Append(" VISIBLERANGE,OPERATERANGE "); strSql.Append(" from VW_User_Authority "); strSql.Append(" where [NAME]='modPXList' and USERID='" + userid + "' and ISDELETE=0"); string visiblerange = "4"; string operaterange = "4"; Microsoft.Practices.EnterpriseLibrary.Data.Database db = DatabaseFactory.CreateDatabase(); using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString())) { while (reader.Read()) { visiblerange = Convert.ToString(reader["VISIBLERANGE"]); operaterange = Convert.ToString(reader["OPERATERANGE"]); break; } reader.Close(); } if (visiblerange == "4") { str = "1=2"; } else if (visiblerange == "3") { str = " (lururenid ='" + userid + "')"; } else if (visiblerange == "2") { if (tb == "index") { var rangeDa = new RangeDA(); var deptname = rangeDa.GetDEPTNAME(userid); var userstr = new StringBuilder(); userstr.Append(" select SHOWNAME from [user] where GID in (select USERID from user_company where COMPANYID='" + companyid + "') and GID in (select userid from user_baseinfo where DEPTNAME='" + deptname + "')"); Microsoft.Practices.EnterpriseLibrary.Data.Database userdb = DatabaseFactory.CreateDatabase(); using (IDataReader reader = userdb.ExecuteReader(CommandType.Text, userstr.ToString())) { str = ""; while (reader.Read()) { if (str == "") { str = " (INPUTBY='" + Convert.ToString(reader["SHOWNAME"]) + "'"; } else { str = str + " or INPUTBY='" + Convert.ToString(reader["SHOWNAME"]) + "'"; }; } str = str + ")"; reader.Close(); } } else { str = " UPPER(Corpid)='" + companyid + "'"; } } else if (visiblerange == "1") { str = " gid in (select gid from op_seae_px where lururenid in (select userid from [user_company] where companyid = '" + companyid + "'))"; //str = " UPPER(Corpid)='" + companyid + "'"; } else if (visiblerange == "7") { str = " gid in (select gid from op_seae_px where lururenid in (select gid from [user] where COMNAME = (select COMNAME from [user] where GID='" + userid + "')))"; } return str; } public static bool SendPXEmil(string userid, List headList, int optype = 0) { try { string showname = ""; string comname = ""; string email = ""; string tel = ""; string sql = @"select u.SHOWNAME,u.COMNAME,ub.EMAIL1,ub.MOBILE from [User] u left join user_baseinfo ub on u.GID = ub.USERID where u.GID= '" + userid + "'"; Microsoft.Practices.EnterpriseLibrary.Data.Database db = DatabaseFactory.CreateDatabase(); using (IDataReader reader = db.ExecuteReader(CommandType.Text, sql)) { while (reader.Read()) { showname = reader[0].ToString(); comname = reader[1].ToString(); email = reader[2].ToString(); tel = reader[3].ToString(); } } string strtype = ""; if (optype == 0) { strtype = "新增"; } else if (optype == 1) { strtype = "修改"; } else if (optype == 2) { strtype = "删除"; } else { strtype = "-"; } var mailtopic = "拼箱申请单发送-" + comname; string mailbodyP1 = ""; string ids = ""; foreach (var item in headList) { ids += "'" + item.GID + "',"; mailbodyP1 += "提单号:" + item.MBLNO + "\r\n" + "发送类型:" + strtype + "\r\n" + "仓库:" + item.CangKuMingCheng + "\r\n"; } var mailbody = "公司名称:" + comname + "\r\n" + "申请人:" + showname + "\r\n" + "邮箱:" + email + "\r\n" + "电话:" + tel + "\r\n" + mailbodyP1; //string toNames = "frank,lee"; SendEmail se = new SendEmail("dongshengsoft@dongshengsoft.com", "dongshengcangdan@h8j.top", "", "", mailtopic, mailbody, false); // SendEmail se = new SendEmail("dev001@dongshengsoft.com", "admin@dongshengsoft.com", "", "", mailtopic, mailbody, false); //string filePath = path; //se.Attachments(filePath); se.SetSmtp("dongshengcangdan@h8j.top", "A1B2C3ds040201", "smtpdm.aliyun.com", 80, false, System.Net.Mail.MailPriority.Normal); //必须在所有参数设置完后调用此方法 return true; } catch (Exception ex) { return false; throw; } } #endregion } public class ShipAndStore { public string ShipName { get; set; } public string StoreName { get; set; } } public class PxTableClass { public string GID { get; set; } public string ShenBaoZhuangTai { get; set; } public string MBLNO { get; set; } public string CangKuMingCheng { get; set; } public string ChuanMing { get; set; } public string HangCi { get; set; } public decimal JianShu { get; set; } public decimal MaoZhong { get; set; } public decimal TiJi { get; set; } public string LuRuRen { get; set; } public string LuRuRenId { get; set; } public DateTime? LuRuRiQi { get; set; } public DateTime? Dao { get; set; } public string COMNAME { get; set; } public string PXCOMNAME { get; set; } public string BeiZhu { get; set; } public string ShangPinBianMa { get; set; } } public static class GetRecript { public static void UpdSendState() { OpSeaePxDbContenxt context = new OpSeaePxDbContenxt(); var yytoday = Convert.ToDateTime(DateTime.Now.AddDays(-2)); var lis = context.OpSeaePx.Where(p => p.ShenBaoZhuangTai == "发送成功" && p.ReceiptState != "已审批通过" && p.SendTim > yytoday).ToList(); var url = "http://47.104.90.170:9000/qdpxd/status"; foreach (var item in lis) { var data = DoPosts(item.MBLNO.ToString(), url); var sendData = (JObject)JsonConvert.DeserializeObject(data); if (sendData != null) { if (Convert.ToInt32(sendData["status"]) > 0) { if (item.ReceiptState != sendData["message"]["order_status"].ToString()) { OpSeaePxTips tips = new OpSeaePxTips(); tips.GID = getGUID(); tips.PXID = item.Gid; tips.PXSTATUS = sendData["message"]["order_status"].ToString(); tips.@operator = item.LuRuRen; tips.optime = DateTime.Now; if (sendData["message"]["order_status"].ToString() == "已保存") { tips.remark = "拼箱系统已接收"; } if (sendData["message"]["order_status"].ToString() == "已暂存") { tips.remark = "业务已暂存"; } if (sendData["message"]["order_status"].ToString() == "已审批通过") { tips.remark = "仓库已审核"; } context.OpSeaePxTips.Add(tips); } item.ReceiptState = sendData["message"]["order_status"].ToString(); var s = IsDateTime(Convert.ToString(sendData["message"]["order_date"].ToString())); if (s) { item.ReceiptTim = Convert.ToDateTime(sendData["message"]["order_date"].ToString()); } else { item.ReceiptTim = Convert.ToDateTime(DateTime.Now.ToString()); } context.Entry(item).State = System.Data.Entity.EntityState.Modified; } } } context.SaveChanges(); } public static bool IsDateTime(string StrSource) { return System.Text.RegularExpressions.Regex.IsMatch(StrSource, @"^(((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d)$ "); } private static string getGUID() { System.Guid guid = new Guid(); guid = Guid.NewGuid(); string str = guid.ToString(); return str; } public static string DoPost(string json, string url, int timeout = 90000) { string responseString = "";//post返回的结果 ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, err) => { return true; }; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); req.Method = "POST"; if (!string.IsNullOrWhiteSpace(json)) { byte[] postBytes = Encoding.UTF8.GetBytes(json); req.ContentType = "application/json; charset=utf-8"; req.ContentLength = Encoding.UTF8.GetByteCount(json); Stream stream = req.GetRequestStream(); stream.Write(postBytes, 0, postBytes.Length); req.Timeout = 90000; stream.Close(); } else { req.ContentLength = 0; } var response = req.GetResponse(); Stream streamResponse = response.GetResponseStream(); StreamReader streamRead = new StreamReader(streamResponse); responseString = streamRead.ReadToEnd(); response.Close(); streamRead.Close(); return responseString; } private static string DoPosts(string json, string url, int timeout = 90000) { string responseString = "";//post返回的结果 ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, err) => { return true; }; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); req.Method = "POST"; if (!string.IsNullOrWhiteSpace(json)) { byte[] postBytes = Encoding.UTF8.GetBytes(json); req.ContentType = "application/x-www-form-urlencoded"; string ss = System.Web.HttpUtility.UrlEncode("mblno") + "=" + System.Web.HttpUtility.UrlEncode(json); byte[] postData = Encoding.UTF8.GetBytes(ss); req.ContentLength = postData.Length; Stream stream = req.GetRequestStream(); stream.Write(postData, 0, postData.Length); req.Timeout = 90000; stream.Close(); } else { req.ContentLength = 0; } var response = req.GetResponse(); Stream streamResponse = response.GetResponseStream(); StreamReader streamRead = new StreamReader(streamResponse); responseString = streamRead.ReadToEnd(); response.Close(); streamRead.Close(); return responseString; } } }