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.

973 lines
43 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 System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using DSWeb.Areas.MvcShipping.Models.MsOpStatusNew;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data;
using DSWeb.MvcShipping.Models.MsOpSeae;
using qingdaoport;
using Ivony.Html;
using Ivony.Html.Parser;
using System.Text.RegularExpressions;
namespace DSWeb.Areas.MvcShipping.DAL
{
public class MsOpStatusNewDAL
{
/// <summary>
/// 创建/更新 状态树主表
/// 海运出口保存时只产生主状态、不产生集装箱状态
/// </summary>
/// <param name="bsno"></param>
/// <param name="oper">操作人</param>
/// <returns></returns>
public bool SaveStatusTree ( string bsno ,string oper) {
//根据提单号获取Opseae数据
OpSeaeModel OpSeaeModel = GetOpSeae(bsno);
if (OpSeaeModel.BSNO==null)
{
return false;
}
//如果主题单号下已有状态树则执行更新操作
StringBuilder sb = new StringBuilder();
if (CheckOpSeaeHasStatusTree(bsno))
{
//更新状态树
sb.Append("update Op_StatusMain set ");
sb.Append("ChuanGongSi = '" + OpSeaeModel.ChuanGongSi+ "',");
sb.Append("ChuanMingHangCi = '" + OpSeaeModel.ChuanMingHangCi + "',");
sb.Append("ShiFaGang = '" + OpSeaeModel.ShiFaGang + "',");
sb.Append("MuDiGang = '" + OpSeaeModel.MuDiGang + "',");
sb.Append("MBLNO = '" + OpSeaeModel.MBLNO + "',");
sb.Append("XiangXingXiangLiang = '" + OpSeaeModel.XiangXingXiangLiang.Replace("'","''") + "',");
sb.Append("ETD = '" + OpSeaeModel.ETD + "',");
sb.Append("ETA = '" + OpSeaeModel.ETA + "'");
sb.Append(" where BSNO = '" + bsno + "'");
//删除之前的明细
DeleteStatusDetails(bsno);
}
else
{
//新建状态树
sb.Append(@"Insert into Op_StatusMain
(GID,BSNO,ChuanGongSi,ChuanMingHangCi,ShiFaGang,MuDiGang,MBLNO,XiangXingXiangLiang,ETD,ETA) ");
sb.Append("values (");
sb.Append("'"+Guid.NewGuid()+"',");
sb.Append("'" + OpSeaeModel.BSNO + "',");
sb.Append("'" + OpSeaeModel.ChuanGongSi + "',");
sb.Append("'" + OpSeaeModel.ChuanMingHangCi + "',");
sb.Append("'" + OpSeaeModel.ShiFaGang + "',");
sb.Append("'" + OpSeaeModel.MuDiGang + "',");
sb.Append("'" + OpSeaeModel.MBLNO + "',");
sb.Append("'" + OpSeaeModel.XiangXingXiangLiang.Replace("'", "''") + "',");
sb.Append("'" + OpSeaeModel.ETD + "',");
sb.Append("'" + OpSeaeModel.ETA + "'");
sb.Append(")");
}
Database db = DatabaseFactory.CreateDatabase();
int flag = db.ExecuteNonQuery(CommandType.Text,sb.ToString());
//主提单号为空时,状态更新为【已接单】
if (OpSeaeModel.MBLNO==""||OpSeaeModel.MBLNO==null)
{
UpdateMainStatus(OpSeaeModel.BSNO, 0,oper,OpSeaeModel.CreateTime);
}
else
{
//主提单号不为空时,状态更新为【已出号】
UpdateMainStatus(OpSeaeModel.BSNO, 3, oper);
}
return flag > 0;
}
/// <summary>
/// 更新状态节点-主表
/// </summary>
/// <param name="bsno">业务编号</param>
/// <param name="mblno">主提单号</param>
/// <param name="statusNode">0已结单 1:已发入货通知 2已订舱 3已出号 4已提单确认 5:费用已提交</param>
/// <param name="statusTime">状态完成时间</param>
/// <returns></returns>
public bool UpdateMainStatus (string bsno,int statusNode,string Oper,string statusTime="") {
StringBuilder sb = new StringBuilder();
string timeStr = statusTime==""?DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"):statusTime;
sb.Append("update Op_StatusMain ");
if (statusNode==0)
{
sb.Append(" set YiJieDanTime = '" + timeStr + "',");
sb.Append(" YiJieDanOp = '" + Oper + "'");
}
else if(statusNode==1)
{
sb.Append(" set YiFaRuHuoTongZhiTime = '" + timeStr + "',");
sb.Append(" YiFaRuHuoTongZhiOp = '" + Oper + "'");
}
else if (statusNode == 2)
{
sb.Append(" set YiDingCangTime = '" + timeStr + "',");
sb.Append(" YiDingCangOp = '" + Oper + "'");
}
else if (statusNode == 3)
{
sb.Append(" set YiChuHaoTime = '" + timeStr + "',");
sb.Append(" YiChuHaoOp = '" + Oper + "'");
}
else if (statusNode == 4)
{
sb.Append(" set YiTiDanQueRenTime = '" + timeStr + "',");
sb.Append(" YiTiDanQueRenOp = '" + Oper + "'");
}
else if (statusNode == 5)
{
sb.Append(" set FeiYongYiTiJiaoTime = '" + timeStr + "',");
sb.Append(" FeiYongYiTiJiaoOp = '" + Oper + "'");
}
sb.Append(" where BSNO = '" + bsno + "'");
Database db = DatabaseFactory.CreateDatabase();
int flag = db.ExecuteNonQuery(CommandType.Text, sb.ToString());
return flag > 0;
}
/// <summary>
/// 更新状态节点-青岛港码头
/// </summary>
/// <returns></returns>
public bool UpdateQdportStatus (OpSeaeQDPortDataModel model,string bsno) {
if (!checkOpSeaeQDPortDataModel(model))
{
return false;
}
//如果没有主表数据,创建主表数据
if (!CheckOpSeaeHasStatusTree(bsno))
{
SaveStatusTree(bsno, "System");
}
StringBuilder sb = new StringBuilder();
List<StatusDetails> listDetails = new List<StatusDetails>();
var mtxxList = model.mtxxList.Where(m => m.DQZTMC=="已装船").OrderBy(m => m.XH).ToList();
var ydbgList = model.ydbgList.OrderBy(m => m.XH).ToList();
var hgbgdfxList = model.bgdfxList.OrderBy(m => m.CONTA_ID).ToList();
var zzfxList = model.zzfxList.OrderBy(m => m.XH).ToList();
for (int i = 0; i < mtxxList.Count; i++)
{
StatusDetails sd = new StatusDetails();
sd.BSNO = bsno;
sd.MBLNO = mtxxList[i].TDH;
sd.XiangHao = mtxxList[i].XH;
sd.YunDiZhengChangMsg = ydbgList[i].HZMS;
sd.YunDiZhengChangTime =ydbgList.Count>0?ydbgList[i].HZSJ.ToString():"";
sd.YiRuZhaKouTime =mtxxList.Count>0?mtxxList[i].SJRGSJ.ToString():"";
sd.BaoGuanDanYiTongGuanFangXingTime =hgbgdfxList.Count>0?hgbgdfxList[i].R_DATE.ToString():"";
sd.CangDanYiZhuangZaiFangXingTime = zzfxList.Count>0?zzfxList[i].RDATE.ToString():"";
sd.YiZhuangChuanTime =mtxxList.Count>0?mtxxList[i].SJCGSJ.ToString():"";
listDetails.Add(sd);
}
foreach (var item in listDetails)
{
SaveStatusDetails(item, bsno);
}
string mblno = GetMBLNOWithBSNO(bsno);
string cgs = GetChuanGongSiWithMBLNO(mblno);
if (cgs=="达飞"|| cgs=="CMA" || cgs=="cma")
{
GetCMAData(mblno);
}
else if (cgs == "MAERSK") {
GetMaerskDetailsIntoDBWithMBLNO(mblno);
}
return true;
}
private bool SaveStatusDetails ( StatusDetails model,string bsno) {
StringBuilder sb = new StringBuilder();
if (CheckHasCtnWithBSNOAndCTNNO(bsno, model.XiangHao))
{
//如果同提单号下的该箱号已存在,对本条状态执行更新操作
sb.Append("update Op_StatusDetails set ");
sb.Append("CangDanJieShouShenBaoTime = '" + model.CangDanJieShouShenBaoTime + "', ");
sb.Append("YunDiZhengChangMsg = '" + model.YunDiZhengChangMsg + "', ");
sb.Append("YunDiZhengChangTime = '" + model.YunDiZhengChangTime + "', ");
sb.Append("YiRuZhaKouTime = '" + model.YiRuZhaKouTime + "', ");
sb.Append("BaoGuanDanYiTongGuanFangXingTime = '" + model.BaoGuanDanYiTongGuanFangXingTime + "', ");
sb.Append("CangDanYiZhuangZaiFangXingTime = '" + model.CangDanYiZhuangZaiFangXingTime + "', ");
sb.Append("YiZhuangChuanTime = '" + model.YiZhuangChuanTime + "' ");
sb.Append("where bsno = '" + bsno + "' and XiangHao = '" + model.XiangHao + "'");
}
else
{
//如果同提单号下的该箱号不存在,执行插入操作
sb.Append("insert into Op_StatusDetails ");
sb.Append("values(");
sb.Append("'" + Guid.NewGuid() + "',");
sb.Append("'" + model.BSNO + "',");
sb.Append("'" + model.MBLNO + "',");
sb.Append("'" + model.XiangHao + "',");
sb.Append("'" + model.YiTiXiangTime + "',");
sb.Append("'" + model.YiFanChangTime + "',");
sb.Append("'" + model.CangDanJieShouShenBaoTime + "',");
sb.Append("'" + model.YunDiZhengChangMsg + "',");
sb.Append("'" + model.YunDiZhengChangTime + "',");
sb.Append("'" + model.YiRuZhaKouTime + "',");
sb.Append("'" + model.BaoGuanDanYiTongGuanFangXingTime + "',");
sb.Append("'" + model.CangDanYiZhuangZaiFangXingTime + "',");
sb.Append("'" + model.YiZhuangChuanTime + "'");
sb.Append(")");
}
Database db = DatabaseFactory.CreateDatabase();
int flag = db.ExecuteNonQuery(CommandType.Text, sb.ToString());
return flag > 0;
}
/// <summary>
/// 获取状态数据
/// </summary>
/// <param name="strCondition"></param>
/// <returns></returns>
public static List<MsOpStatusNew> GetStatusData ( string mblno="" )
{
var strSql = new StringBuilder();
strSql.Append(@"select
os.ChuanGongSi,
os.ChuanMingHangCi,
os.ShiFaGang,
os.MuDiGang,
os.BSNO,
os.MBLNO,
os.XiangXingXiangLiang,
os.ETD,
os.ETA,
os.YiJieDanTime,
os.YiJieDanOp,
os.YiFaRuHuoTongZhiTime,
os.YiFaRuHuoTongZhiOp,
os.YiDingCangTime,
os.YiDingCangOp,
os.YiChuHaoTime,
os.YiChuHaoOp,
os.YiTiDanQueRenTime,
os.YiTiDanQueRenOp,
os.FeiYongYiTiJiaoTime,
os.FeiYongYiTiJiaoOp,
osd.XiangHao ,
osd.YiTiXiangTime ,
osd.YiFanChangTime ,
osd.CangDanJieShouShenBaoTime ,
osd.YunDiZhengChangMsg ,
osd.YunDiZhengChangTime ,
osd.YiRuZhaKouTime ,
osd.BaoGuanDanYiTongGuanFangXingTime ,
osd.CangDanYiZhuangZaiFangXingTime ,
osd.YiZhuangChuanTime
from Op_StatusMain os
LEFT JOIN Op_StatusDetails osd on os.bsno = osd.BSNO ");
if (mblno != "")
{
strSql.Append(" where os.mblno= '" + mblno + "'");
}
return SetStatusData(strSql);
}
private static List<MsOpStatusNew> SetStatusData ( StringBuilder strSql )
{
var list = new List<MsOpStatusNew>();
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
MsOpStatusNew s = new MsOpStatusNew();
//创建主状态模型
StatusMain sm = new StatusMain();
sm.ChuanGongSi = reader["ChuanGongSi"].ToString();
sm.ChuanMingHangCi = reader["ChuanMingHangCi"].ToString();
sm.ShiFaGang = reader["ShiFaGang"].ToString();
sm.MuDiGang = reader["MuDiGang"].ToString();
sm.BSNO = reader["BSNO"].ToString();
sm.MBLNO = reader["MBLNO"].ToString();
sm.XiangXingXiangLiang = reader["XiangXingXiangLiang"].ToString();
sm.ETD = reader["ETD"].ToString();
sm.ETA = reader["ETA"].ToString();
sm.YiJieDanTime = convertTimeStr(reader["YiJieDanTime"].ToString());
sm.YiJieDanOp = reader["YiJieDanOp"].ToString();
sm.YiFaRuHuoTongZhiTime = convertTimeStr(reader["YiFaRuHuoTongZhiTime"].ToString());
sm.YiFaRuHuoTongZhiOp = reader["YiFaRuHuoTongZhiOp"].ToString();
sm.YiDingCangTime = convertTimeStr(reader["YiDingCangTime"].ToString());
sm.YiDingCangOp = reader["YiDingCangOp"].ToString();
sm.YiChuHaoTime = convertTimeStr( reader["YiChuHaoTime"].ToString());
sm.YiChuHaoOp = reader["YiChuHaoOp"].ToString();
sm.YiTiDanQueRenTime = convertTimeStr( reader["YiTiDanQueRenTime"].ToString());
sm.YiTiDanQueRenOp = reader["YiTiDanQueRenOp"].ToString();
sm.FeiYongYiTiJiaoTime = convertTimeStr(reader["FeiYongYiTiJiaoTime"].ToString());
sm.FeiYongYiTiJiaoOp = reader["FeiYongYiTiJiaoOp"].ToString();
s.StatusMain = sm;
//创建明细状态模型
StatusDetails sd = new StatusDetails();
sd.XiangHao = reader["XiangHao"].ToString();
sd.YiTiXiangTime = convertTimeStr(reader["YiTiXiangTime"].ToString());
sd.YiFanChangTime = convertTimeStr( reader["YiFanChangTime"].ToString());
sd.CangDanJieShouShenBaoTime = convertTimeStr( reader["CangDanJieShouShenBaoTime"].ToString());
sd.YunDiZhengChangMsg = reader["YunDiZhengChangMsg"].ToString();
sd.YunDiZhengChangTime = convertTimeStr(reader["YunDiZhengChangTime"].ToString());
sd.YiRuZhaKouTime = convertTimeStr(reader["YiRuZhaKouTime"].ToString());
sd.BaoGuanDanYiTongGuanFangXingTime = convertTimeStr(reader["BaoGuanDanYiTongGuanFangXingTime"].ToString());
sd.CangDanYiZhuangZaiFangXingTime = convertTimeStr( reader["CangDanYiZhuangZaiFangXingTime"].ToString());
sd.YiZhuangChuanTime = convertTimeStr( reader["YiZhuangChuanTime"].ToString());
s.StatusDetails = sd;
list.Add(s);
}
reader.Close();
}
return list;
}
/// <summary>
/// 获取OpSeae信息
/// </summary>
/// <param name="mblno"></param>
/// <returns></returns>
private static OpSeaeModel GetOpSeae (string BSNO) {
string sql = @"select BSNO,MBLNO,CARRIER ChuanGongSi,MBLNO,VESSEL+'/'+VOYNO ChuanMingHangCi,
CNTRTOTAL XiangXingXiangLiang,PORTLOAD ShiFaGang,
PORTDISCHARGE MuDiGang,ETD,ETA,CreateTime,OP
from op_seae where BSNO = '" + BSNO + "'";
string sql2 = @" select CNTRNO XiangHao from op_ctn where bsno = '" + BSNO + "'";
OpSeaeModel model = new OpSeaeModel();
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, sql))
{
while (reader.Read())
{
model.BSNO = reader["BSNO"].ToString();
model.MBLNO = reader["MBLNO"].ToString();
model.ChuanGongSi = reader["ChuanGongSi"].ToString();
model.ChuanMingHangCi = reader["ChuanMingHangCi"].ToString();
model.XiangXingXiangLiang = reader["XiangXingXiangLiang"].ToString();
model.ShiFaGang = reader["ShiFaGang"].ToString();
model.MuDiGang = reader["MuDiGang"].ToString();
model.ETD = reader["ETD"].ToString();
model.ETA = reader["ETA"].ToString();
model.CreateTime = reader["CreateTime"].ToString();
model.Creator = reader["OP"].ToString();
}
reader.Close();
}
List<OpSeaeCtnModel> list = new List<OpSeaeCtnModel>();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, sql2))
{
while (reader.Read())
{
}
reader.Close();
}
model.CtnList = list;
return model;
}
/// <summary>
/// 判断是否已有状态树
/// </summary>
/// <param name="mblno"></param>
/// <returns></returns>
private static bool CheckOpSeaeHasStatusTree ( string bsno ) {
string sql = "select count (*) from Op_StatusMain where bsno = '" + bsno + "'";
Database db = DatabaseFactory.CreateDatabase();
int flag = Convert.ToInt32(db.ExecuteScalar(CommandType.Text,sql));
if (flag>0)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 判断是否已有明细状态
/// </summary>
/// <param name="mblno"></param>
/// <param name="xianghao"></param>
/// <returns></returns>
private static bool CheckHasCtnWithBSNOAndCTNNO (string bsno,string xianghao) {
string sql = "select count (*) from Op_StatusDetails where BSNO = '" + bsno + "' and XiangHao = '" + xianghao + "'";
Database db = DatabaseFactory.CreateDatabase();
int flag = Convert.ToInt32(db.ExecuteScalar(CommandType.Text, sql));
if (flag > 0)
{
return true;
}
else
{
return false;
}
}
public static string GetBSNOWithMBLNO ( string mblno ) {
string sql = "select bsno from op_seae where mblno = '"+mblno+"'";
Database db = DatabaseFactory.CreateDatabase();
string bsno = Convert.ToString(db.ExecuteScalar(CommandType.Text, sql));
return bsno;
}
public static string GetMBLNOWithBSNO ( string bsno )
{
string sql = "select mblno from op_seae where bsno = '" + bsno + "'";
Database db = DatabaseFactory.CreateDatabase();
string mblno = Convert.ToString(db.ExecuteScalar(CommandType.Text, sql));
return mblno;
}
private static string convertTimeStr ( string time ) {
if (time=="")
{
return "[未取到相关时间]";
}
else
{
return time;
}
}
private static bool checkOpSeaeQDPortDataModel ( OpSeaeQDPortDataModel model )
{
if (model==null||model.bgdfxList==null||model.mtxxList==null||model.wllhList==null||model.wlshList==null
||model.ydbgList==null||model.zxdList==null||model.zzfxList==null)
{
return false;
}
else
{
return true;
}
}
#region 船公司相关-CMA
public static bool GetCMAData (string mblno) {
if (mblno=="")
{
return false;
}
HttpHelper http = new HttpHelper();
string cmaUrl = "http://www.cma-cgm.com/ebusiness/tracking/search?SearchBy=BL&Reference="+mblno;
HttpItem item = new HttpItem()
{
URL = cmaUrl,//URL 必需项
Method = "get",//URL 可选项 默认为Get
};
HttpResult result1 = http.GetHtml(item);
string html = result1.Html;
IHtmlDocument document = new JumonyParser().Parse(html);
IEnumerable<IHtmlElement> result = document.Find("tbody[class=sep-horiz]");
//多箱
if (result.ToList().Count==0)
{
SaveCMAWithMultiData(document,mblno);
}
//单箱
else
{
SaveCMAWithSingleData(document,mblno);
}
return true;
}
private static void SaveCMAWithSingleData ( IHtmlDocument document,string mblno)
{
IEnumerable<IHtmlElement> result = document.Find("tbody[class=sep-horiz]");
List<string> ctnList = new List<string>();
List<string> msgList = new List<string>();
List<string> timeList = new List<string>();
IHtmlElement title = document.FindFirst("title");
string titlestr = title.InnerText();
string XiangHao = titlestr.Replace("Tracking details for Container", "").Trim();
foreach (var r in result)
{
//当前步骤获取
ctnList.Add(XiangHao);
//状态
IHtmlElement currtr = r.FindFirst("tr[class=date-current]");
IHtmlElement currstatus = currtr.FindFirst("td[data-move=status]");
string currstatusstr = currstatus.InnerText();
msgList.Add(currstatusstr);
//时间
IHtmlElement currstatustime = currtr.FindFirst("td[data-move=date]");
string currstatustimestr = currstatustime.InnerText();
try
{
string dt = DateTime.Parse(currstatustimestr).ToString("yyyy-MM-dd hh:mm");
timeList.Add(dt);
}
catch (Exception)
{
timeList.Add("");
}
}
//插入数据库
if (ctnList.Count > 0)
{
//删除
string delSql = "delete from Op_StatusCarrier where MBLNO = '" + mblno + "' and Carrier = 'CMA'";
Database db = DatabaseFactory.CreateDatabase();
db.ExecuteNonQuery(CommandType.Text, delSql);
StringBuilder sbValues = new StringBuilder();
for (int i = 0; i < ctnList.Count; i++)
{
sbValues.Append("(");
sbValues.Append("'" + Guid.NewGuid() + "',");
sbValues.Append("'CMA',");
sbValues.Append("'" + mblno + "',");
sbValues.Append("'" + ctnList[i] + "',");
sbValues.Append("'" + msgList[i] + "',");
sbValues.Append("'" + timeList[i] + "'");
sbValues.Append("),");
}
//插入
string valuestr = sbValues.ToString().Substring(0, sbValues.ToString().Length - 1);
StringBuilder insSb = new StringBuilder();
insSb.Append("insert into Op_StatusCarrier (GID,Carrier,MBLNO,XiangHao,StatusMsg,StatusTime) ");
insSb.Append("values" + valuestr);
string sql = insSb.ToString();
db.ExecuteNonQuery(CommandType.Text, sql);
}
GetCMADataDetailsInToDBWithDocumentForSingleData(document,mblno,XiangHao);
}
private static void SaveCMAWithMultiData ( IHtmlDocument document, string mblno )
{
IEnumerable<IHtmlElement> result = document.Find("tbody");
List<string> ctnList = new List<string>();
List<string> msgList = new List<string>();
List<string> timeList = new List<string>();
foreach (var r in result)
{
IEnumerable<IHtmlElement> tds1 = r.Find("td[data-ctnr=id]");
foreach (var td in tds1)
{
ctnList.Add(td.InnerText());
}
IEnumerable<IHtmlElement> tds2 = r.Find("td[data-ctnr=date]");
foreach (var td in tds2)
{
try
{
string dt = DateTime.Parse(td.InnerText()).ToString("yyyy-MM-dd hh:mm");
timeList.Add(dt);
}
catch (Exception)
{
timeList.Add("");
}
}
IEnumerable<IHtmlElement> tds3 = r.Find("td[data-ctnr=status]");
foreach (var td in tds3)
{
msgList.Add(td.InnerText());
}
}
//插入数据库
if (ctnList.Count > 0)
{
//删除
string delSql = "delete from Op_StatusCarrier where MBLNO = '" + mblno + "' and Carrier = 'CMA'";
Database db = DatabaseFactory.CreateDatabase();
db.ExecuteNonQuery(CommandType.Text, delSql);
StringBuilder sbValues = new StringBuilder();
for (int i = 0; i < ctnList.Count; i++)
{
sbValues.Append("(");
sbValues.Append("'" + Guid.NewGuid() + "',");
sbValues.Append("'CMA',");
sbValues.Append("'" + mblno + "',");
sbValues.Append("'" + ctnList[i] + "',");
sbValues.Append("'" + msgList[i] + "',");
sbValues.Append("'" + timeList[i] + "'");
sbValues.Append("),");
}
//插入
string valuestr = sbValues.ToString().Substring(0, sbValues.ToString().Length - 1);
StringBuilder insSb = new StringBuilder();
insSb.Append("insert into Op_StatusCarrier (GID,Carrier,MBLNO,XiangHao,StatusMsg,StatusTime) ");
insSb.Append("values" + valuestr);
string sql = insSb.ToString();
db.ExecuteNonQuery(CommandType.Text, sql);
//插入集装箱状态明细
foreach (var ctn in ctnList)
{
GetCMADataDetailsInToDBWithMBLNOAndXiangHaoForMultiData(mblno, ctn);
}
}
}
public static List<OpCMAStatus> GetCMADataFromDB(string mblno,string xianghao){
string sql = "select * from Op_StatusCarrier where Carrier = 'CMA' and MBLNO = '"+mblno+"' and XiangHao = '"+xianghao+"'";
Database db = DatabaseFactory.CreateDatabase();
List<OpCMAStatus> list = new List<OpCMAStatus>();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, sql))
{
while (reader.Read())
{
OpCMAStatus s = new OpCMAStatus();
s.MBLNO = reader["MBLNO"].ToString();
s.XiangHao = reader["XiangHao"].ToString();
s.StatusMsg = reader["StatusMsg"].ToString();
s.StatusTime = reader["StatusTime"].ToString();
list.Add(s);
}
}
return list;
}
public static List<OpCMAStatus> GetStatusDetailsDataFromDB ( string mblno, string xianghao )
{
string sql = "select * from Op_StatusCarrierDetails where MBLNO = '" + mblno + "' and XiangHao = '" + xianghao + "' order by StatusTime";
Database db = DatabaseFactory.CreateDatabase();
List<OpCMAStatus> list = new List<OpCMAStatus>();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, sql))
{
while (reader.Read())
{
OpCMAStatus s = new OpCMAStatus();
s.MBLNO = reader["MBLNO"].ToString();
s.XiangHao = reader["XiangHao"].ToString();
s.StatusMsg = reader["StatusMsg"].ToString();
s.StatusTime = reader["StatusTime"].ToString();
s.ChuanMing = reader["Vessel"].ToString();
s.HangCi = reader["Voyage"].ToString();
list.Add(s);
}
}
return list;
}
private static bool GetCMADataDetailsInToDBWithMBLNOAndXiangHaoForMultiData ( string mblno, string xianghao ) {
string urlstr = "http://www.cma-cgm.com/eBusiness/tracking/detail/"+xianghao+"?SearchCriteria=BL&SearchByReference="+mblno;
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
// URL = textBox1.Text,//URL 必需项
URL = urlstr,
Method = "get",//URL 可选项 默认为Get
};
HttpResult result1 = http.GetHtml(item);
string html = result1.Html;
IHtmlDocument document = new JumonyParser().Parse(html);
IEnumerable<IHtmlElement> result = document.Find("tbody[class=sep-horiz]");
List<string> statusList = new List<string>();
List<string> timeList = new List<string>();
List<string> locList = new List<string>();
List<string> vesselList = new List<string>();
List<string> voyageList = new List<string>();
foreach (var r in result)
{
//状态
IEnumerable<IHtmlElement> statusTd = r.Find("td[data-move=status]");
foreach (var status in statusTd)
{
statusList.Add(status.InnerText());
}
//时间
IEnumerable<IHtmlElement> timeTd = r.Find("td[data-move=date]");
foreach (var time in timeTd)
{
try
{
string dt = DateTime.Parse(time.InnerText()).ToString("yyyy-MM-dd hh:mm");
timeList.Add(dt);
}
catch (Exception)
{
timeList.Add("");
}
}
//位置
IEnumerable<IHtmlElement> locTd = r.Find("td[data-move=location]");
foreach (var loc in locTd)
{
locList.Add(loc.InnerText());
}
//船名
IEnumerable<IHtmlElement> vesselTd = r.Find("td[data-move=vessel]");
foreach (var vessel in vesselTd)
{
vesselList.Add(vessel.InnerText());
}
//航次
IEnumerable<IHtmlElement> voyageTd = r.Find("td[data-move=voyage]");
foreach (var voyage in voyageTd)
{
voyageList.Add(voyage.InnerText());
}
//数据库操作
if (statusList.Count>0)
{
//删除
string delSql = "delete from Op_StatusCarrierDetails where MBLNO = '" + mblno + "' and xianghao='"+xianghao+"'";
Database db = DatabaseFactory.CreateDatabase();
db.ExecuteNonQuery(CommandType.Text, delSql);
StringBuilder sbValues = new StringBuilder();
for (int i = 0; i < statusList.Count; i++)
{
sbValues.Append("(");
sbValues.Append("'" + Guid.NewGuid() + "',");
sbValues.Append("'"+mblno+"',");
sbValues.Append("'" + xianghao + "',");
sbValues.Append("'" + statusList[i] + "',");
sbValues.Append("'" + timeList[i] + "',");
sbValues.Append("'" + locList[i] + "',");
sbValues.Append("'" + vesselList[i] + "',");
sbValues.Append("'" + voyageList[i] + "'");
sbValues.Append("),");
}
//插入
string valuestr = sbValues.ToString().Substring(0, sbValues.ToString().Length - 1);
StringBuilder insSb = new StringBuilder();
insSb.Append("insert into Op_StatusCarrierDetails (GID,MBLNO,XIANGHAO,StatusMsg,StatusTime,LOC,Vessel,Voyage) ");
insSb.Append("values" + valuestr);
string sql = insSb.ToString();
db.ExecuteNonQuery(CommandType.Text, sql);
}
}
return true;
}
private static bool GetCMADataDetailsInToDBWithDocumentForSingleData ( IHtmlDocument document,string mblno,string xianghao )
{
IEnumerable<IHtmlElement> result = document.Find("tbody[class=sep-horiz]");
List<string> statusList = new List<string>();
List<string> timeList = new List<string>();
List<string> locList = new List<string>();
List<string> vesselList = new List<string>();
List<string> voyageList = new List<string>();
foreach (var r in result)
{
//状态
IEnumerable<IHtmlElement> statusTd = r.Find("td[data-move=status]");
foreach (var status in statusTd)
{
statusList.Add(status.InnerText());
}
//时间
IEnumerable<IHtmlElement> timeTd = r.Find("td[data-move=date]");
foreach (var time in timeTd)
{
try
{
string dt = DateTime.Parse(time.InnerText()).ToString("yyyy-MM-dd hh:mm");
timeList.Add(dt);
}
catch (Exception)
{
timeList.Add("");
}
}
//位置
IEnumerable<IHtmlElement> locTd = r.Find("td[data-move=location]");
foreach (var loc in locTd)
{
locList.Add(loc.InnerText());
}
//船名
IEnumerable<IHtmlElement> vesselTd = r.Find("td[data-move=vessel]");
foreach (var vessel in vesselTd)
{
vesselList.Add(vessel.InnerText());
}
//航次
IEnumerable<IHtmlElement> voyageTd = r.Find("td[data-move=voyage]");
foreach (var voyage in voyageTd)
{
voyageList.Add(voyage.InnerText());
}
//数据库操作
if (statusList.Count>0)
{
//删除
string delSql = "delete from Op_StatusCarrierDetails where MBLNO = '" + mblno + "' and xianghao = '"+xianghao+"'";
Database db = DatabaseFactory.CreateDatabase();
db.ExecuteNonQuery(CommandType.Text, delSql);
StringBuilder sbValues = new StringBuilder();
for (int i = 0; i < statusList.Count; i++)
{
sbValues.Append("(");
sbValues.Append("'" + Guid.NewGuid() + "',");
sbValues.Append("'"+mblno+"',");
sbValues.Append("'" + xianghao + "',");
sbValues.Append("'" + statusList[i] + "',");
sbValues.Append("'" + timeList[i] + "',");
sbValues.Append("'" + locList[i] + "',");
sbValues.Append("'" + vesselList[i] + "',");
sbValues.Append("'" + voyageList[i] + "'");
sbValues.Append("),");
}
//插入
string valuestr = sbValues.ToString().Substring(0, sbValues.ToString().Length - 1);
StringBuilder insSb = new StringBuilder();
insSb.Append("insert into Op_StatusCarrierDetails (GID,MBLNO,XIANGHAO,StatusMsg,StatusTime,LOC,Vessel,Voyage) ");
insSb.Append("values" + valuestr);
string sql = insSb.ToString();
db.ExecuteNonQuery(CommandType.Text, sql);
}
}
return true;
}
#endregion
#region 船公司相关-马士基
private static void GetMaerskDetailsIntoDBWithMBLNO ( string mblno ) {
string url = "https://my.maerskline.com/tracking/search?searchNumber="+mblno;
HttpItem item = new HttpItem()
{
URL = url,//URL 必需项
Method = "get"//URL 可选项 默认为Get
};
HttpHelper http = new HttpHelper();
HttpResult result1 = http.GetHtml(item);
string html = result1.Html;
IHtmlDocument document = new JumonyParser().Parse(html);
IEnumerable<IHtmlElement> result = document.Find("table[class=table table-striped cols20 schedule-table]");
foreach (var r in result)
{
string xianghao = r.FindFirst("span[class=tracking_container_id]").InnerText().Trim();
List<string> statusList = new List<string>();
List<string> timeList = new List<string>();
List<string> locList = new List<string>();
List<string> vesselList = new List<string>();
List<string> voyageList = new List<string>();
IEnumerable<IHtmlElement> details = r.NextElement().Find("table[class=row container-move past transport-plan-tbl cols20]");
foreach (var d in details)
{
string loc = d.PreviousElement().InnerText();
loc = loc == null ? "" : loc;
locList.Add(loc);
IEnumerable<IHtmlElement> tds = d.Find("td");
int index = 0;
foreach (var td in tds)
{
//时间
if (index==2)
{
string timestr = td.InnerText().Replace("\r\n"," ");
timestr = DateTime.Parse(timestr).ToString("yyyy-MM-dd HH:mm");
timeList.Add(timestr);
}
//状态、船名、航次
if (index==3)
{
string statusstr = td.InnerText().Replace("\r\n", " ");
string[] sArray = Regex.Split(statusstr, "Voyage No.:", RegexOptions.IgnoreCase);
if (sArray.Length >= 2)
{
string hangci = sArray[1].Trim();
string status = "Load on";
string chuanming = sArray[0].Replace("Load on", "").TrimStart().TrimEnd();
vesselList.Add(chuanming); ;
voyageList.Add(hangci);
statusList.Add(status);
}
else
{
vesselList.Add(""); ;
voyageList.Add("");
statusList.Add(sArray[0]);
}
}
index++;
}
}
//插入数据库
if (statusList.Count>0)
{
string delsql = "delete from Op_StatusCarrierDetails where mblno ='"+mblno+"' and xianghao = '"+xianghao+"'";
Database db = DatabaseFactory.CreateDatabase();
db.ExecuteNonQuery(CommandType.Text, delsql);
StringBuilder sbValues = new StringBuilder();
for (int i = 0; i < statusList.Count; i++)
{
sbValues.Append("(");
sbValues.Append("'" + Guid.NewGuid() + "',");
sbValues.Append("'" + mblno + "',");
sbValues.Append("'" + xianghao + "',");
sbValues.Append("'" + statusList[i] + "',");
sbValues.Append("'" + timeList[i] + "',");
sbValues.Append("'" + locList[i] + "',");
sbValues.Append("'" + vesselList[i] + "',");
sbValues.Append("'" + voyageList[i] + "'");
sbValues.Append("),");
}
//插入
string valuestr = sbValues.ToString().Substring(0, sbValues.ToString().Length - 1);
StringBuilder insSb = new StringBuilder();
insSb.Append("insert into Op_StatusCarrierDetails (GID,MBLNO,XIANGHAO,StatusMsg,StatusTime,LOC,Vessel,Voyage) ");
insSb.Append("values" + valuestr);
string sql = insSb.ToString();
db.ExecuteNonQuery(CommandType.Text, sql);
}
}
}
#endregion
private static bool DeleteStatusDetails(string bsno)
{
string sql = "delete from Op_StatusDetails where bsno = '"+bsno+"'";
Database db = DatabaseFactory.CreateDatabase();
bool rst= db.ExecuteNonQuery(CommandType.Text,sql)>0;
return rst;
}
private static string GetChuanGongSiWithMBLNO ( string mblno ) {
string sql = "select top 1 CARRIER from op_seae where mblno = '"+mblno+"'";
Database db = DatabaseFactory.CreateDatabase();
var cgs = db.ExecuteScalar(CommandType.Text,sql);
if (cgs==null)
{
return "";
}
else
{
return cgs.ToString();
}
}
}
}