using System; using System.Text; using System.Data.SqlClient; using System.Collections.Generic; using System.Data; using DSWeb.SoftMng.DBUtility; using Newtonsoft.Json.Linq; using DSWeb.Areas.MvcShipping.Comm; using DSWeb.MvcShipping.DAL.MsSysParamSet; using DSWeb.SoftMng.Model; using DSWeb.MvcShipping.DAL.MsOpApplyDAL; using DSWeb.MvcShipping.Models.MsOpApply; using HcUtility.Comm; using DSWeb.MvcShipping.DAL.MsSysBillNoSet; using HcUtility.Core; using DSWeb.Areas.MvcShipping.DB; using DSWeb.SoftMng.BLL; using System.Linq; using System.Threading; using DSWeb.Areas.CommMng.DAL; using Microsoft.Practices.EnterpriseLibrary.Data; using DSWeb.MvcShipping.DAL.MsOpReceiptDAL; using DSWeb.Areas.Import.DAL.ReceiptDoc; using DSWeb.MvcShipping.DAL.MsCodeOpMustField; using DSWeb.MvcShipping.DAL.MsCodeOpDef; // ReSharper disable once CheckNamespace namespace DSWeb.SoftMng.DAL { public class SingleCondition { public string starttime { get; set; } public string endtime { get; set; } public string CUSTOMNO { get; set; } public string MBLNO { get; set; } public string ies { get; set; } public string cdnType { get; set; } public string clearance { get; set; } public bool isSecondApply { get; set; } public bool withPdf { get; set; } public string USERID { get; set; } public string SHOWNAME { get; set; } public string COMPANYID { get; set; } public SingleCondition() { } public SingleCondition(string starttime, string endtime, string ies, string cdnType, string clearance, string isSecondApply, string withPdf, string USERID, string SHOWNAME, string COMPANYID) { this.starttime = starttime; this.endtime = endtime; this.ies = ies; this.cdnType = cdnType; this.clearance = clearance; if (isSecondApply == "0") this.isSecondApply = false; else this.isSecondApply = true; if (withPdf == "0") this.withPdf = false; else this.withPdf = true; this.USERID = USERID; this.SHOWNAME = SHOWNAME; this.COMPANYID = COMPANYID; } public void change(string starttime,string endtime, string ies, string clearance) { this.starttime = starttime; this.endtime = endtime; this.ies = ies; this.clearance = clearance; } public SingleCondition copy() { return new SingleCondition(starttime, endtime, ies, cdnType, clearance , isSecondApply ? "1" : "0" , withPdf ? "1" : "0" , USERID, SHOWNAME, COMPANYID) ; } } //读取 public partial class readDAL { const string _IURL = "http://47.104.90.170:9000/sw/download"; private static string getPortStr(string starttime = "", string endtime = "", string CUSTOMNO = "", string MBLNO = "", string ies = "", string cdnType = "", string clearance = "0",string startn="1",string endn="10") { string rtn = ""; JObject reqObj = new JObject(); /*网站代号(sw) 卡号 密码(md5加密后) 报关单号 进出口标志(只有两个值) I(大写i): 进口, E: 出口 是否结关(只有两个值) 1:是,0:否 */ var swcn = MsSysParamSetDAL.GetSysParamValue("OpApplySingle_User"); var swpw = MsSysParamSetDAL.GetSysParamValue("OpApplySingle_Pwd"); var yardid = "sw"; reqObj.Add("yardid", yardid); reqObj.Add("swcn", swcn); reqObj.Add("swpw", swpw); reqObj.Add("cdn", CUSTOMNO); reqObj.Add("billno", MBLNO); reqObj.Add("ies", ies); reqObj.Add("clearance", clearance);//未结关 reqObj.Add("starttime", starttime);// reqObj.Add("endtime", endtime);// reqObj.Add("startn", startn);// reqObj.Add("endn", endn);// //reqObj.Add("billno", "KMTCSIN2287541"); //reqObj.Add("ies", "I"); //reqObj.Add("clearance", "0"); var t_str = reqObj.ToString(Newtonsoft.Json.Formatting.None); BasicDataRefDAL.SaveLog(t_str, "", "单一窗口批量读取", "执行读取"); rtn = WebRequestHelper.DoPost(_IURL, t_str, 480000); BasicDataRefDAL.SaveLog(rtn, "", "单一窗口批量读取", "读取返回"); return rtn; } public static DecHead_WebModel getrtn(SingleCondition sc, string startn = "1", string endn = "10") { var rtn = getPortStr(sc.starttime, sc.endtime, "", "", sc.ies,sc.cdnType, sc.clearance, startn, endn); var _status = Newtonsoft.Json.JsonConvert.DeserializeObject<DecHead_status>(rtn).status; var result = new DecHead_WebModel(); if (_status == "1") { result = Newtonsoft.Json.JsonConvert.DeserializeObject<DecHead_WebModel>(rtn); } return result; } public static void getPortInfo_thread(SingleCondition SingleCondition) { Thread_getrtn getrtn = new Thread_getrtn(); //有参调用实例方法,ParameterizedThreadStart是一个委托,input为object,返回值为void Thread thread1 = new Thread(new ParameterizedThreadStart(getrtn.FuncSend)); thread1.Start(SingleCondition); } class Thread_getrtn { public void FuncSend(object o) { SingleCondition condition = o as SingleCondition; try { BasicDataRefDAL.SaveLog(condition, condition.USERID, "单一窗口批量读取", "开始"); doread(condition, 1, 10); //DecHead_WebModel DecHead = getrtn(condition); //if (DecHead.message != null) //{ // Dealrtn(DecHead, condition.USERID, condition.SHOWNAME, condition.COMPANYID); //} } catch (Exception e) { BasicDataRefDAL.SaveLog(e.Message, condition.USERID, "单一窗口批量读取", "错误"); } } } //20200409 每次读10个 如果读回来的不到10个,就停止 否则再读下面10个。 private static void doread(SingleCondition condition, int startn, int endn) { DecHead_WebModel DecHead = getrtn(condition, startn.ToString(), endn.ToString()); if (DecHead.message != null) { Dealrtn(DecHead, condition.USERID, condition.SHOWNAME, condition.COMPANYID,condition.clearance); if (!(DecHead.message.Count < 10)) { doread(condition, startn + 10, endn + 10); } } else { BasicDataRefDAL.SaveLog("status="+DecHead.status.ToString()+";message="+ DecHead.message.ToString(), condition.USERID, "单一窗口批量读取", "错误"); } } public static void Dealrtn(DecHead_WebModel PortReturn, string USERID, string SHOWNAME, string COMPANYID,string isclear="0") { BasicDataRefDAL.SaveLog(PortReturn, USERID, "单一窗口批量读取", "返回值处理"); try { if (PortReturn.message == null) return; foreach (var head in PortReturn.message) { if (head.data == null) continue; var preDecHeadVo = head.data.getdata(); if (string.IsNullOrWhiteSpace(preDecHeadVo.entryId)) { continue;//没有报关单号的不做处理 } var currCUSTOMNO = preDecHeadVo.entryId; //本地是否存在该业务 以报关单号为准 //根据报关单号寻找报关业务 看是否存在 var OPAPPLY = MsOpApplyDAL.GetData(" CUSTOMNO='" + currCUSTOMNO.Trim() + "'"); var needinsert = false;//需要新建 还是更新信息 if (string.IsNullOrWhiteSpace(OPAPPLY.CUSTOMNO)) { needinsert = true; } //20201021 根据查询条件[已结关]填入[已通关]。 OPAPPLY.ISCLEAR = isclear; var bsno = ""; var decheadGID = ""; if (needinsert) { //新建 op_apply saveinfo("insert", head, OPAPPLY, USERID, SHOWNAME, COMPANYID, isclear); } else { saveinfo("edit", head, OPAPPLY, USERID, SHOWNAME, COMPANYID, isclear); } } } catch(Exception e) { BasicDataRefDAL.SaveLog(e.Message, USERID, "单一窗口批量读取", "返回值处理错误"); } } //private static string CUSTNO { get; set; } //public static void setCUSTNO(string custno) { // CUSTNO = custno; //} //private static string getCUSTNO() { // //BasicDataRefDAL.SaveLog(CUSTNO, USERID, "单一窗口批量读取", "新业务编号"); // var result = ""; // result=CUSTNO.ToString(); // var _t_head = CUSTNO.Substring(0, CUSTNO.Length - 4); // var index = Convert.ToInt32(CUSTNO.Substring(CUSTNO.Length - 4, 4)); // index++; // var newindex = index.ToString(); // while (newindex.Length < 4) // { // newindex = "0" + newindex; // } // CUSTNO = _t_head + newindex; // return result; //} public static void saveinfo(string dealtype, MessageModel head, MsOpApply OPAPPLY,string USERID,string SHOWNAME,string COMPANYID,string ISCLEAR) { var mark = 0; try { DecHeadBLL bll = new DecHeadBLL(); ContainerBLL cbll = new ContainerBLL(); DecListBLL lbll = new DecListBLL(); if (dealtype == "insert") { OPAPPLY.DbOperationType = DbOperationType.DbotIns; OPAPPLY.ModelUIStatus = "I"; OPAPPLY.BSNO = Guid.NewGuid().ToString(); OPAPPLY.MASTERNO = OPAPPLY.BSNO; mark = 11; var _r = MsOpApplyDAL.getCUSTNO(OPAPPLY, USERID,SHOWNAME,COMPANYID); if (_r.Success) OPAPPLY.CUSTNO = _r.Data.ToString(); else { BasicDataRefDAL.SaveLog(_r.Message, USERID, "单一窗口批量读取", "获取单号出错"); return; } //OPAPPLY.CUSTNO = MsSysBillNoSetDAL.GetNewNo("报关业务", "委托编号", "0602", COMPANYID, System.DateTime.Now.ToString("yyyy-MM-dd")); mark = 12; //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存1.1"); } else { OPAPPLY.DbOperationType = DbOperationType.DbotUpd; OPAPPLY.ModelUIStatus = "E"; //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存1.2"); mark = 1; } var bsno = OPAPPLY.BSNO; var preDecHeadVo = head.data.getdata(); mark = 2; OPAPPLY.CUSTOMNO = preDecHeadVo.entryId; //根据报关单号 结尾0出口 结尾1进口 OPAPPLY.setbstype(); OPAPPLY.BSSTATUS = false; OPAPPLY.FEESTATUS = false; OPAPPLY.BSDATE = Convert.ToDateTime(preDecHeadVo.dDate); OPAPPLY.CUSTOMDATE = preDecHeadVo.dDate;//报关日期=申报日期 OPAPPLY.OPDATE = preDecHeadVo.dDate;//业务日期=申报日期 OPAPPLY.MBLNO = preDecHeadVo.billNo; //OPAPPLY.PORTLOAD = preDecHeadVo.despPortCode mark = 3; OPAPPLY.INPUTBY = SHOWNAME; OPAPPLY.CORPID = COMPANYID; OPAPPLY.TRADETYPE = preDecHeadVo.supvModeCddeName; OPAPPLY.ISDY = "1"; OPAPPLY.CUSCIQNO = preDecHeadVo.cusCiqNo; OPAPPLY.GOODSOURCE = preDecHeadVo.ciqDespCtryCodeName; OPAPPLY.EXPCUSTOMTYPE = preDecHeadVo.iEPortName; OPAPPLY.DESPPORT = preDecHeadVo.despPortCodeName; OPAPPLY.CONSIGNEE = preDecHeadVo.consigneeCname; OPAPPLY.ENTERP = preDecHeadVo.consignorCname; if (preDecHeadVo.ciqTrafMode == "3") OPAPPLY.BSTYPE = "5"; OPAPPLY.ISCLEAR = ISCLEAR; if (OPAPPLY.CUSTOMERNAME == "") OPAPPLY.CUSTOMERNAME = MsCodeOpDefDAL.GetData("BSTYPE='OP_APPLY' AND FIELDNAME='CUSTOMERNAME'", COMPANYID).DEFVALUE; var modb = new ModelObjectDB(); var tempresult = modb.Save(OPAPPLY); OPAPPLY.DbOperationType = DbOperationType.DbotUpd; OPAPPLY.ModelUIStatus = "E"; //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存2"); #region 单一窗口信息 var dealtype_detail = "edit"; var DecHead_Local = bll.GetModelList("BSNO='" + OPAPPLY.BSNO + "'").FirstOrDefault(); if (DecHead_Local == null) { DecHead_Local = new DecHead(); dealtype_detail = "insert"; } //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存3"); if (dealtype_detail == "insert") { DecHead_Local.GID = Guid.NewGuid().ToString(); DecHead_Local.BSNO = OPAPPLY.BSNO; preDecHeadVo.setvalue(DecHead_Local); bll.Add(DecHead_Local); //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存4.1"); } else { preDecHeadVo.setvalue(DecHead_Local); mark++; bll.Update(DecHead_Local); //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存4.2"); } #endregion #region 电子文档信息 var docdataList = ReceiptDocDAL.GetDocList("BSNO='" + bsno + "'"); //ReceiptContext receiptContext = new ReceiptContext(); foreach (var pdf in head.pdfFile) { //Receipt_Doc receipt = receiptContext.ReceiptDocs.FirstOrDefault(o => o.BSNO == bsno && o.URL == pdf.filename); var doc = docdataList.Find(x=>x.URL==pdf.filename); if (doc == null||doc.BSNO == "") { Database db = DatabaseFactory.CreateDatabase(); using (var conn = db.CreateConnection()) { conn.Open(); var tran = conn.BeginTransaction(); try { var cmdInsert = db.GetSqlStringCommand( @"insert into Receipt_Doc (GID,BSNO,URL,Driect_URL,MODIFIEDUSER,MODIFIEDTIME,RECEIPTTYPE,DOCUMENTATTACHEDCODE,DOCUMENTATTACHEDNO) values (@GID,@BSNO,@URL,@Driect_URL,@MODIFIEDUSER,@MODIFIEDTIME,@RECEIPTTYPE,@DOCUMENTATTACHEDCODE,@DOCUMENTATTACHEDNO) "); cmdInsert.Parameters.Clear(); db.AddInParameter(cmdInsert, "@GID", DbType.String, Guid.NewGuid().ToString()); db.AddInParameter(cmdInsert, "@BSNO", DbType.String, bsno); db.AddInParameter(cmdInsert, "@URL", DbType.String, pdf.filename); db.AddInParameter(cmdInsert, "@Driect_URL", DbType.String,pdf.path); db.AddInParameter(cmdInsert, "@MODIFIEDUSER", DbType.String, USERID); db.AddInParameter(cmdInsert, "@MODIFIEDTIME", DbType.String, DateTime.Now.ToString()); db.AddInParameter(cmdInsert, "@RECEIPTTYPE", DbType.String,""); db.AddInParameter(cmdInsert, "@DOCUMENTATTACHEDCODE", DbType.String, ""); db.AddInParameter(cmdInsert, "@DOCUMENTATTACHEDNO", DbType.String, ""); db.ExecuteNonQuery(cmdInsert, tran); tran.Commit(); } catch (Exception e) { BasicDataRefDAL.SaveLog(e.Message, USERID, "单一窗口批量读取", "保存错误" + e.Message); tran.Rollback(); } } } else { Database db = DatabaseFactory.CreateDatabase(); using (var conn = db.CreateConnection()) { conn.Open(); var tran = conn.BeginTransaction(); try { var cmdInsert = db.GetSqlStringCommand( @"update Receipt_Doc set URL=@URL,Driect_URL=@Driect_URL,MODIFIEDUSER=@MODIFIEDUSER,MODIFIEDTIME=@MODIFIEDTIME WHERE GID=@GID "); cmdInsert.Parameters.Clear(); db.AddInParameter(cmdInsert, "@GID", DbType.String, doc.GID); db.AddInParameter(cmdInsert, "@URL", DbType.String, pdf.filename); db.AddInParameter(cmdInsert, "@Driect_URL", DbType.String, pdf.path); db.AddInParameter(cmdInsert, "@MODIFIEDUSER", DbType.String, USERID); db.AddInParameter(cmdInsert, "@MODIFIEDTIME", DbType.String, DateTime.Now.ToString()); db.ExecuteNonQuery(cmdInsert, tran); tran.Commit(); } catch (Exception e) { BasicDataRefDAL.SaveLog(e.Message, USERID, "单一窗口批量读取", "保存错误" + e.Message); tran.Rollback(); } } } //if (receipt == null) //{ // receipt = new Receipt_Doc(); // receipt.GID = Guid.NewGuid().ToString(); // receipt.BSNO = bsno; // receipt.URL = pdf.filename; // receipt.Driect_URL = pdf.path; // receipt.MODIFIEDUSER = USERID; // receipt.MODIFIEDTIME = System.DateTime.Now; // receiptContext.ReceiptDocs.Add(receipt); //} //else //{ // receipt.URL = pdf.filename; // receipt.Driect_URL = pdf.path; // receipt.MODIFIEDUSER = USERID; // receipt.MODIFIEDTIME = System.DateTime.Now; //} //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存5"); //var _r = receiptContext.SaveChanges(); } mark = 7; #endregion #region 集装箱信息 var opapplyctnlist= MsOpApplyDAL.GetCtnBodyList("BSNO='" + OPAPPLY.BSNO + "'", ""); var containerlist = cbll.GetModelList("PID='" + DecHead_Local.GID + "'"); var portContainerlist = preDecHeadVo.getpreDecContainerVo(); mark = 71; if (portContainerlist.Count > 0) { Database db = DatabaseFactory.CreateDatabase(); using (var conn = db.CreateConnection()) { conn.Open(); mark = 72; foreach (var portContainer in portContainerlist) { var upd = false; foreach (var container in containerlist) { if (container.ContainerId.Trim() == portContainer.containerNo.Trim()) { upd = true; var updcontainer = portContainer.getContainerValue(container); cbll.Update(updcontainer); } } if (!upd) { var updcontainer = new Container(); updcontainer = portContainer.getContainerValue(updcontainer); updcontainer.GID = Guid.NewGuid().ToString(); updcontainer.PID = DecHead_Local.GID; cbll.Add(updcontainer); } var updapply = false; foreach (var container in opapplyctnlist) { if (container.CNTRNO.Trim() == portContainer.containerNo.Trim()) { updapply = true; } } if (!updapply) { var tran = conn.BeginTransaction(); try { var cmdInsert = db.GetSqlStringCommand(@"insert into op_ctn (CTN_ID,BSNO,CTNNUM,CNTRNO,CTNALL) values (NEWID()" + ",'" + OPAPPLY.BSNO + "',1,'" + portContainer.containerNo.Trim() + "','40GP')"); db.ExecuteNonQuery(cmdInsert, tran); tran.Commit(); } catch (Exception e) { BasicDataRefDAL.SaveLog(e.Message, USERID, "单一窗口批量读取", "保存错误" + e.Message); tran.Rollback(); } } } } } mark = 8; //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存6"); containerlist = cbll.GetModelList("PID='" + DecHead_Local.GID + "'"); mark = 9; #endregion #region 项信息 var declist_List = lbll.GetModelList(0, 99, "PID='" + DecHead_Local.GID + "'", String.Format("{0}", "gNo", "")); var port_decMergeListVoList = preDecHeadVo.getdecMergeListVo(); var curr = "USD"; decimal cargovalue = 0; if (port_decMergeListVoList.Count > 0) foreach (var port_decMergeListVo in port_decMergeListVoList) { var upd = false; foreach (var declist in declist_List) { if (declist.GNo.Trim() == port_decMergeListVo.gNo.Trim()) { upd = true; var upddeclist = port_decMergeListVo.getDecListValue(declist); lbll.Update(upddeclist); } } if (!upd) { var upddeclist = new DecList(); upddeclist = port_decMergeListVo.getDecListValue(upddeclist); upddeclist.GID = Guid.NewGuid().ToString(); upddeclist.PID = DecHead_Local.GID; lbll.Add(upddeclist); } try { cargovalue = cargovalue + Convert.ToDecimal(port_decMergeListVo.declTotal); curr = port_decMergeListVo.tradeCurr; } catch (Exception e) { BasicDataRefDAL.SaveLog(e.Message, USERID, "单一窗口批量读取", "保存错误" + e.Message); } } OPAPPLY.CARGOVALUE = cargovalue.ToString(); OPAPPLY.CURRENCY = curr; modb = new ModelObjectDB(); tempresult = modb.Save(OPAPPLY); mark = 10; var Declist = lbll.GetModelList(0, 99, "PID='" + DecHead_Local.GID + "'", String.Format("{0}", "gNo", "")); var count = lbll.GetRecordCount("PID='" + DecHead_Local.GID + "'"); //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存7"); mark = 11; #endregion } catch (Exception e) { BasicDataRefDAL.SaveLog(e.Message, USERID, "单一窗口批量读取", "保存错误"+ mark.ToString()); } } } public partial class readDAL_2 { const string _IURL_noPdf = "http://47.104.90.170:9000/sw/merge/detail"; /* * ### 单一窗口数据详情查询 API #### 请求的数据: 请求方式:POST url定义:http://47.104.90.170:9000/sw/merge/detail 请求参数:formdata | 参数 | 类型 | 是否必须传 | 描述 | | :---------: | :----: | :--------: | :----------------------------------------------------------: | | card | 字符串 | 是 | 卡号 | | pwd | 字符串 | 是 | 密码 | | ies | 字符串 | 是 | 进出口标志 (只有两个值) I (大写i) : 进口, E: 出口 | | clear | 布尔型 | 是 | 是否结关 (只有两个值) 1:是,0:否 | | cdnType | 字符串 | 是 | 报关单类型 (0: 一般报关单, 1: 转关提前报关单, <br />2: 备案清单, 3: 转关提前备案清单, 4: 出口二次转关) | | cdn | 字符串 | 否 | 报关单号 | | bill | 字符串 | 否 | 提单号 | | unicode | 字符串 | 否 | 统一编号 | | start | 字符串 | 否 | 查询开始日期 (2020-06-09) | | end | 字符串 | 否 | 查询结束日期 (2020-06-09) | | startNumber | 数值 | 否 | 查询数据开始数,如:1,11,21 | | endNumber | 数值 | 否 | 查询数据结束数,如:10,20,30 | */ const string _IURL_withPdf = "http://47.104.90.170:9000/sw/merge/downloads"; /* ### 单一窗口总数据详情和pdf查询 API #### 请求的数据: 请求方式:POST url定义:http://47.104.90.170:9000/sw/merge/downloads 请求参数:formdata | 参数 | 类型 | 是否必须传 | 描述 | | :---------: | :----: | :--------: | :-----------------------------------------------: | | card | 字符串 | 是 | 卡号 | | pwd | 字符串 | 是 | 密码 | | ies | 字符串 | 是 | 进出口标志 (只有两个值) I (大写i) : 进口, E: 出口 | | clear | 布尔型 | 是 | 是否结关 (只有两个值) 1:是,0:否 | | cdn | 字符串 | 否 | 报关单号 | | bill | 字符串 | 否 | 提单号 | | unicode | 字符串 | 否 | 统一编号 | | start | 字符串 | 否 | 查询开始日期 (2020-06-09) | | end | 字符串 | 否 | 查询结束日期 (2020-06-09) | | startNumber | 数值 | 否 | 查询数据开始数,如:1,11,21 | | endNumber | 数值 | 否 | 查询数据结束数,如:10,20,30 | > 注:startNumber和endNumber输入其他的数不一定是想要的结果 */ const string _IURL_secondapply_noPdf = "http://47.104.90.170:9000/sw/ts/detail"; /* ### 单一窗口两步申报数据详情查询 API #### 请求的数据: 请求方式:POST url定义:http://47.104.90.170:9000/sw/ts/detail 请求参数:formdata | 参数 | 类型 | 是否必须传 | 描述 | | :---------: | :----: | :--------: | :-------------------------------------: | | card | 字符串 | 是 | 卡号 | | pwd | 字符串 | 是 | 密码 | | cdnType | 字符串 | 是 | 报关单类型 (0: 一般报关单, 2: 备案清单) | | cdn | 字符串 | 否 | 报关单号 | | bill | 字符串 | 否 | 提单号 | | unicode | 字符串 | 否 | 统一编号 | | start | 字符串 | 否 | 查询开始日期 (2020-06-09) | | end | 字符串 | 否 | 查询结束日期 (2020-06-09) | | startNumber | 数值 | 否 | 查询数据开始数,如:1,11,21 | | endNumber | 数值 | 否 | 查询数据结束数,如:10,20,30 | */ const string _IURL_secondapply_withPdf = "http://47.104.90.170:9000/sw/ts/downloads"; /* ### 单一窗口两步申报数据详情和pdf查询 API #### 请求的数据: 请求方式:POST url定义:http://47.104.90.170:9000/sw/ts/download 请求参数:formdata | 参数 | 类型 | 是否必须传 | 描述 | | :---------: | :----: | :--------: | :-------------------------------------: | | card | 字符串 | 是 | 卡号 | | pwd | 字符串 | 是 | 密码 | | cdnType | 字符串 | 是 | 报关单类型 (0: 一般报关单, 2: 备案清单) | | cdn | 字符串 | 否 | 报关单号 | | bill | 字符串 | 否 | 提单号 | | unicode | 字符串 | 否 | 统一编号 | | start | 字符串 | 否 | 查询开始日期 (2020-06-09) | | end | 字符串 | 否 | 查询结束日期 (2020-06-09) | | startNumber | 数值 | 否 | 查询数据开始数,如:1,11,21 | | endNumber | 数值 | 否 | 查询数据结束数,如:10,20,30 | */ private static string getPortStr(SingleCondition sc,string startn = "1", string endn = "10") { string rtn = ""; JObject reqObj = new JObject(); /*网站代号(sw) 卡号 密码(md5加密后) 报关单号 进出口标志(只有两个值) I(大写i): 进口, E: 出口 是否结关(只有两个值) 1:是,0:否 */ var swcn = MsSysParamSetDAL.GetSysParamValue("OpApplySingle_User"); var swpw = MsSysParamSetDAL.GetSysParamValue("OpApplySingle_Pwd"); //var yardid = "sw"; //reqObj.Add("yardid", yardid); reqObj.Add("card", swcn); reqObj.Add("pwd", swpw); reqObj.Add("ies", sc.ies); reqObj.Add("clear", sc.clearance);//未结关 reqObj.Add("cdnType", sc.cdnType); //reqObj.Add("bill", sc.MBLNO); reqObj.Add("cdn", "");// reqObj.Add("bill", "");// reqObj.Add("unicode", "");// reqObj.Add("start", sc.starttime);// reqObj.Add("end", sc.endtime);// reqObj.Add("startNumber", startn);// reqObj.Add("endNumber", endn);// //reqObj.Add("billno", "KMTCSIN2287541"); //reqObj.Add("ies", "I"); //reqObj.Add("clearance", "0"); var t_str = reqObj.ToString(Newtonsoft.Json.Formatting.None); BasicDataRefDAL.SaveLog(t_str, "", "单一窗口批量读取_新", "执行读取"); if (!sc.isSecondApply) { if (sc.withPdf) rtn = WebRequestHelper.DoPost(_IURL_withPdf, t_str, 480000); else rtn = WebRequestHelper.DoPost(_IURL_noPdf, t_str, 480000); } else { if (sc.withPdf) rtn = WebRequestHelper.DoPost(_IURL_secondapply_withPdf, t_str, 480000); else rtn = WebRequestHelper.DoPost(_IURL_secondapply_noPdf, t_str, 480000); } BasicDataRefDAL.SaveLog(rtn, "", "单一窗口批量读取_新", "读取返回"); return rtn; } public static DecHead_WebModel getrtn(SingleCondition sc, string startn = "1", string endn = "10") { var rtn = getPortStr(sc, startn, endn); var _status = Newtonsoft.Json.JsonConvert.DeserializeObject<DecHead_status>(rtn).status; var result = new DecHead_WebModel(); if (_status == "1") { result = Newtonsoft.Json.JsonConvert.DeserializeObject<DecHead_WebModel>(rtn); } return result; } public static void getPortInfo_thread(SingleCondition SingleCondition) { Thread_getrtn getrtn = new Thread_getrtn(); //有参调用实例方法,ParameterizedThreadStart是一个委托,input为object,返回值为void Thread thread1 = new Thread(new ParameterizedThreadStart(getrtn.FuncSend)); thread1.Start(SingleCondition); } class Thread_getrtn { public void FuncSend(object o) { SingleCondition condition = o as SingleCondition; try { BasicDataRefDAL.SaveLog(condition, condition.USERID, "单一窗口批量读取", "开始"); doread(condition, 1, 10); //DecHead_WebModel DecHead = getrtn(condition); //if (DecHead.message != null) //{ // Dealrtn(DecHead, condition.USERID, condition.SHOWNAME, condition.COMPANYID); //} } catch (Exception e) { BasicDataRefDAL.SaveLog(e.Message, condition.USERID, "单一窗口批量读取", "错误"); } } } //20200409 每次读10个 如果读回来的不到10个,就停止 否则再读下面10个。 private static void doread(SingleCondition condition, int startn, int endn) { DecHead_WebModel DecHead = getrtn(condition, startn.ToString(), endn.ToString()); if (DecHead.message != null) { Dealrtn(DecHead, condition.USERID, condition.SHOWNAME, condition.COMPANYID, condition.clearance); if (!(DecHead.message.Count < 10)) { doread(condition, startn + 10, endn + 10); } } else { BasicDataRefDAL.SaveLog("status=" + DecHead.status.ToString() + ";message=" + DecHead.message.ToString(), condition.USERID, "单一窗口批量读取", "错误"); } } public static void Dealrtn(DecHead_WebModel PortReturn, string USERID, string SHOWNAME, string COMPANYID, string isclear = "0") { BasicDataRefDAL.SaveLog(PortReturn, USERID, "单一窗口批量读取", "返回值处理"); try { if (PortReturn.message == null) return; foreach (var head in PortReturn.message) { if (head.data == null) continue; var preDecHeadVo = head.data.getdata(); if (string.IsNullOrWhiteSpace(preDecHeadVo.entryId)) { continue;//没有报关单号的不做处理 } var currCUSTOMNO = preDecHeadVo.entryId; //本地是否存在该业务 以报关单号为准 //根据报关单号寻找报关业务 看是否存在 var OPAPPLY = MsOpApplyDAL.GetData(" CUSTOMNO='" + currCUSTOMNO.Trim() + "'"); var needinsert = false;//需要新建 还是更新信息 if (string.IsNullOrWhiteSpace(OPAPPLY.CUSTOMNO)) { needinsert = true; } //20201021 根据查询条件[已结关]填入[已通关]。 OPAPPLY.ISCLEAR = isclear; var bsno = ""; var decheadGID = ""; if (needinsert) { //新建 op_apply saveinfo("insert", head, OPAPPLY, USERID, SHOWNAME, COMPANYID, isclear); } else { saveinfo("edit", head, OPAPPLY, USERID, SHOWNAME, COMPANYID, isclear); } } } catch (Exception e) { BasicDataRefDAL.SaveLog(e.Message, USERID, "单一窗口批量读取", "返回值处理错误"); } } //private static string CUSTNO { get; set; } //public static void setCUSTNO(string custno) { // CUSTNO = custno; //} //private static string getCUSTNO() { // //BasicDataRefDAL.SaveLog(CUSTNO, USERID, "单一窗口批量读取", "新业务编号"); // var result = ""; // result=CUSTNO.ToString(); // var _t_head = CUSTNO.Substring(0, CUSTNO.Length - 4); // var index = Convert.ToInt32(CUSTNO.Substring(CUSTNO.Length - 4, 4)); // index++; // var newindex = index.ToString(); // while (newindex.Length < 4) // { // newindex = "0" + newindex; // } // CUSTNO = _t_head + newindex; // return result; //} public static void saveinfo(string dealtype, MessageModel head, MsOpApply OPAPPLY, string USERID, string SHOWNAME, string COMPANYID, string ISCLEAR) { var mark = 0; try { DecHeadBLL bll = new DecHeadBLL(); ContainerBLL cbll = new ContainerBLL(); DecListBLL lbll = new DecListBLL(); if (dealtype == "insert") { OPAPPLY.DbOperationType = DbOperationType.DbotIns; OPAPPLY.ModelUIStatus = "I"; OPAPPLY.BSNO = Guid.NewGuid().ToString(); OPAPPLY.MASTERNO = OPAPPLY.BSNO; mark = 11; var _r = MsOpApplyDAL.getCUSTNO(OPAPPLY, USERID, SHOWNAME, COMPANYID); if (_r.Success) OPAPPLY.CUSTNO = _r.Data.ToString(); else { BasicDataRefDAL.SaveLog(_r.Message, USERID, "单一窗口批量读取", "获取单号出错"); return; } //OPAPPLY.CUSTNO = MsSysBillNoSetDAL.GetNewNo("报关业务", "委托编号", "0602", COMPANYID, System.DateTime.Now.ToString("yyyy-MM-dd")); mark = 12; //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存1.1"); } else { OPAPPLY.DbOperationType = DbOperationType.DbotUpd; OPAPPLY.ModelUIStatus = "E"; //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存1.2"); mark = 1; } var bsno = OPAPPLY.BSNO; var preDecHeadVo = head.data.getdata(); mark = 2; OPAPPLY.CUSTOMNO = preDecHeadVo.entryId; //根据报关单号 结尾0出口 结尾1进口 OPAPPLY.setbstype(); OPAPPLY.BSSTATUS = false; OPAPPLY.FEESTATUS = false; OPAPPLY.BSDATE = Convert.ToDateTime(preDecHeadVo.dDate); OPAPPLY.CUSTOMDATE = preDecHeadVo.dDate;//报关日期=申报日期 OPAPPLY.OPDATE = preDecHeadVo.dDate;//业务日期=申报日期 OPAPPLY.MBLNO = preDecHeadVo.billNo; //OPAPPLY.PORTLOAD = preDecHeadVo.despPortCode mark = 3; OPAPPLY.INPUTBY = SHOWNAME; OPAPPLY.CORPID = COMPANYID; OPAPPLY.TRADETYPE = preDecHeadVo.supvModeCddeName; OPAPPLY.ISDY = "1"; OPAPPLY.CUSCIQNO = preDecHeadVo.cusCiqNo; OPAPPLY.GOODSOURCE = preDecHeadVo.ciqDespCtryCodeName; OPAPPLY.EXPCUSTOMTYPE = preDecHeadVo.iEPortName; OPAPPLY.DESPPORT = preDecHeadVo.despPortCodeName; OPAPPLY.CONSIGNEE = preDecHeadVo.consigneeCname; OPAPPLY.ENTERP = preDecHeadVo.consignorCname; if (preDecHeadVo.ciqTrafMode == "3") OPAPPLY.BSTYPE = "5"; OPAPPLY.ISCLEAR = ISCLEAR; if (OPAPPLY.CUSTOMERNAME == "") OPAPPLY.CUSTOMERNAME = MsCodeOpDefDAL.GetData("BSTYPE='OP_APPLY' AND FIELDNAME='CUSTOMERNAME'", COMPANYID).DEFVALUE; var modb = new ModelObjectDB(); var tempresult = modb.Save(OPAPPLY); OPAPPLY.DbOperationType = DbOperationType.DbotUpd; OPAPPLY.ModelUIStatus = "E"; //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存2"); #region 单一窗口信息 var dealtype_detail = "edit"; var DecHead_Local = bll.GetModelList("BSNO='" + OPAPPLY.BSNO + "'").FirstOrDefault(); if (DecHead_Local == null) { DecHead_Local = new DecHead(); dealtype_detail = "insert"; } //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存3"); if (dealtype_detail == "insert") { DecHead_Local.GID = Guid.NewGuid().ToString(); DecHead_Local.BSNO = OPAPPLY.BSNO; preDecHeadVo.setvalue(DecHead_Local); bll.Add(DecHead_Local); //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存4.1"); } else { preDecHeadVo.setvalue(DecHead_Local); mark++; bll.Update(DecHead_Local); //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存4.2"); } //20210707 境内收发货人 填入 op_apply.CUSTOMER(ENTERP) //!string.IsNullOrWhiteSpace(cnsnTradeScc) ? cnsnTradeScc : rcvgdTradeScc; OPAPPLY.ENTERP = DecHead_Local.TradeCoScc; //20210708 合同协议号 DecHead.ContrNo 填入 OPAPPLY.CONTRACTNO OPAPPLY.CONTRACTNO = DecHead_Local.ContrNo; #endregion #region 电子文档信息 var docdataList = ReceiptDocDAL.GetDocList("BSNO='" + bsno + "'"); //ReceiptContext receiptContext = new ReceiptContext(); foreach (var pdf in head.pdfFile) { //Receipt_Doc receipt = receiptContext.ReceiptDocs.FirstOrDefault(o => o.BSNO == bsno && o.URL == pdf.filename); var doc = docdataList.Find(x => x.URL == pdf.filename); if (doc == null || doc.BSNO == "") { Database db = DatabaseFactory.CreateDatabase(); using (var conn = db.CreateConnection()) { conn.Open(); var tran = conn.BeginTransaction(); try { var cmdInsert = db.GetSqlStringCommand( @"insert into Receipt_Doc (GID,BSNO,URL,Driect_URL,MODIFIEDUSER,MODIFIEDTIME,RECEIPTTYPE,DOCUMENTATTACHEDCODE,DOCUMENTATTACHEDNO) values (@GID,@BSNO,@URL,@Driect_URL,@MODIFIEDUSER,@MODIFIEDTIME,@RECEIPTTYPE,@DOCUMENTATTACHEDCODE,@DOCUMENTATTACHEDNO) "); cmdInsert.Parameters.Clear(); db.AddInParameter(cmdInsert, "@GID", DbType.String, Guid.NewGuid().ToString()); db.AddInParameter(cmdInsert, "@BSNO", DbType.String, bsno); db.AddInParameter(cmdInsert, "@URL", DbType.String, pdf.filename); db.AddInParameter(cmdInsert, "@Driect_URL", DbType.String, pdf.path); db.AddInParameter(cmdInsert, "@MODIFIEDUSER", DbType.String, USERID); db.AddInParameter(cmdInsert, "@MODIFIEDTIME", DbType.String, DateTime.Now.ToString()); db.AddInParameter(cmdInsert, "@RECEIPTTYPE", DbType.String, ""); db.AddInParameter(cmdInsert, "@DOCUMENTATTACHEDCODE", DbType.String, ""); db.AddInParameter(cmdInsert, "@DOCUMENTATTACHEDNO", DbType.String, ""); db.ExecuteNonQuery(cmdInsert, tran); tran.Commit(); } catch (Exception e) { BasicDataRefDAL.SaveLog(e.Message, USERID, "单一窗口批量读取", "保存错误" + e.Message); tran.Rollback(); } } } else { Database db = DatabaseFactory.CreateDatabase(); using (var conn = db.CreateConnection()) { conn.Open(); var tran = conn.BeginTransaction(); try { var cmdInsert = db.GetSqlStringCommand( @"update Receipt_Doc set URL=@URL,Driect_URL=@Driect_URL,MODIFIEDUSER=@MODIFIEDUSER,MODIFIEDTIME=@MODIFIEDTIME WHERE GID=@GID "); cmdInsert.Parameters.Clear(); db.AddInParameter(cmdInsert, "@GID", DbType.String, doc.GID); db.AddInParameter(cmdInsert, "@URL", DbType.String, pdf.filename); db.AddInParameter(cmdInsert, "@Driect_URL", DbType.String, pdf.path); db.AddInParameter(cmdInsert, "@MODIFIEDUSER", DbType.String, USERID); db.AddInParameter(cmdInsert, "@MODIFIEDTIME", DbType.String, DateTime.Now.ToString()); db.ExecuteNonQuery(cmdInsert, tran); tran.Commit(); } catch (Exception e) { BasicDataRefDAL.SaveLog(e.Message, USERID, "单一窗口批量读取", "保存错误" + e.Message); tran.Rollback(); } } } //if (receipt == null) //{ // receipt = new Receipt_Doc(); // receipt.GID = Guid.NewGuid().ToString(); // receipt.BSNO = bsno; // receipt.URL = pdf.filename; // receipt.Driect_URL = pdf.path; // receipt.MODIFIEDUSER = USERID; // receipt.MODIFIEDTIME = System.DateTime.Now; // receiptContext.ReceiptDocs.Add(receipt); //} //else //{ // receipt.URL = pdf.filename; // receipt.Driect_URL = pdf.path; // receipt.MODIFIEDUSER = USERID; // receipt.MODIFIEDTIME = System.DateTime.Now; //} //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存5"); //var _r = receiptContext.SaveChanges(); } mark = 7; #endregion #region 集装箱信息 var opapplyctnlist = MsOpApplyDAL.GetCtnBodyList("BSNO='" + OPAPPLY.BSNO + "'", ""); var containerlist = cbll.GetModelList("PID='" + DecHead_Local.GID + "'"); var portContainerlist = preDecHeadVo.getpreDecContainerVo(); mark = 71; if (portContainerlist.Count > 0) { Database db = DatabaseFactory.CreateDatabase(); using (var conn = db.CreateConnection()) { conn.Open(); mark = 72; foreach (var portContainer in portContainerlist) { var upd = false; foreach (var container in containerlist) { if (container.ContainerId.Trim() == portContainer.containerNo.Trim()) { upd = true; var updcontainer = portContainer.getContainerValue(container); cbll.Update(updcontainer); } } if (!upd) { var updcontainer = new Container(); updcontainer = portContainer.getContainerValue(updcontainer); updcontainer.GID = Guid.NewGuid().ToString(); updcontainer.PID = DecHead_Local.GID; cbll.Add(updcontainer); } var updapply = false; foreach (var container in opapplyctnlist) { if (container.CNTRNO.Trim() == portContainer.containerNo.Trim()) { updapply = true; } } if (!updapply) { var tran = conn.BeginTransaction(); try { var cmdInsert = db.GetSqlStringCommand(@"insert into op_ctn (CTN_ID,BSNO,CTNNUM,CNTRNO,CTNALL) values (NEWID()" + ",'" + OPAPPLY.BSNO + "',1,'" + portContainer.containerNo.Trim() + "','40GP')"); db.ExecuteNonQuery(cmdInsert, tran); tran.Commit(); } catch (Exception e) { BasicDataRefDAL.SaveLog(e.Message, USERID, "单一窗口批量读取", "保存错误" + e.Message); tran.Rollback(); } } } } } mark = 8; //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存6"); containerlist = cbll.GetModelList("PID='" + DecHead_Local.GID + "'"); mark = 9; #endregion #region 项信息 var declist_List = lbll.GetModelList(0, 99, "PID='" + DecHead_Local.GID + "'", String.Format("{0}", "gNo", "")); var port_decMergeListVoList = preDecHeadVo.getdecMergeListVo(); var curr = "USD"; decimal cargovalue = 0; if (port_decMergeListVoList.Count > 0) foreach (var port_decMergeListVo in port_decMergeListVoList) { var upd = false; foreach (var declist in declist_List) { if (declist.GNo.Trim() == port_decMergeListVo.gNo.Trim()) { upd = true; var upddeclist = port_decMergeListVo.getDecListValue(declist); lbll.Update(upddeclist); } } if (!upd) { var upddeclist = new DecList(); upddeclist = port_decMergeListVo.getDecListValue(upddeclist); upddeclist.GID = Guid.NewGuid().ToString(); upddeclist.PID = DecHead_Local.GID; lbll.Add(upddeclist); } try { cargovalue = cargovalue + Convert.ToDecimal(port_decMergeListVo.declTotal); curr = port_decMergeListVo.tradeCurr; } catch (Exception e) { BasicDataRefDAL.SaveLog(e.Message, USERID, "单一窗口批量读取", "保存错误" + e.Message); } } OPAPPLY.CARGOVALUE = cargovalue.ToString(); OPAPPLY.CURRENCY = curr; modb = new ModelObjectDB(); tempresult = modb.Save(OPAPPLY); mark = 10; var Declist = lbll.GetModelList(0, 99, "PID='" + DecHead_Local.GID + "'", String.Format("{0}", "gNo", "")); var count = lbll.GetRecordCount("PID='" + DecHead_Local.GID + "'"); //BasicDataRefDAL.SaveLog(OPAPPLY, USERID, "单一窗口批量读取", "保存7"); mark = 11; #endregion } catch (Exception e) { BasicDataRefDAL.SaveLog(e.Message, USERID, "单一窗口批量读取", "保存错误" + mark.ToString()); } } } }