/// <summary> /// 数据上报,只上报BIZANDREP.status为1的数据 /// </summary> /// <param name="qx"></param> public void DataSubmit(QXType qx, ExcuteTaskType et) { if (qx == QXType.None) { return; } //ShowDialogForm sdf = null; try { switch (qx) { case QXType.QY: db = new Database("qysubmit"); qxdm = "371423"; break; case QXType.QH: db = new Database("qhsubmit"); qxdm = "371425"; break; case QXType.PY: db = new Database("pysubmit"); qxdm = "371426"; break; case QXType.XJ: db = new Database("xjsubmit"); qxdm = "371427"; break; default: break; } sjdb = new Database("sjsubmit"); int istatus = (int)STATUSType.DefaultValue; string qrySQL = @"select * from RNANDCN t where exists (select * from BIZANDREP s where s.qxdm='" + qxdm + "' and s.status=" + istatus + " and s.ywh=t.ywh) and t.qxdm='" + qxdm + "' "; //List<BIZANDREP> lstBAR = curContext.GetList<BIZANDREP>(" where qxdm='" + qxdm + "' and status=" + istatus + "").ToList(); List <RNANDCN> lstRC = sjdb.Fetch <RNANDCN>(qrySQL); // SJbaseHelper.ConvertToList<RNANDCN>(SJbaseHelper.ExecuteDataReader(SJprovider, qrySQL)).ToList(); // SJprovider.Close(); if (!string.IsNullOrEmpty(lcqxdm)) { if (lstRC != null) { string qrySQL2 = @"select * from RNANDCN t where exists (select * from BIZANDREP s where s.qxdm='" + lcqxdm + "' and s.status=" + istatus + " and s.ywh=t.ywh) and t.qxdm='" + lcqxdm + "' "; List <RNANDCN> lstRC2 = sjdb.Fetch <RNANDCN>(qrySQL); //SJbaseHelper.ConvertToList<RNANDCN>(SJbaseHelper.ExecuteDataReader(SJprovider, qrySQL2)).ToList(); // SJprovider.Close(); if (lstRC2 != null) { lstRC.AddRange(lstRC2); } } } CheckBusinessTables cbt = XMLHelper.DeserializeByXmlFilePath <CheckBusinessTables>(SystemHandler.CheckBusinessTablesXMLFilePath); if (lstRC != null && lstRC.Count > 0) { int totalMain = lstRC.Count; if (et == ExcuteTaskType.Show) { //sdf = new ShowDialogForm("提示", "正在生成上报数据...", "请稍候"); //sdf.SetProgress(totalMain); } foreach (var rc in lstRC) { Head hd = null; string xmlPath = ""; try { // BusinessTypeClass btc = cbt.Business.Where(p => rc.JRYWBM.Equals(p.BusinessCode)).FirstOrDefault(); if (et == ExcuteTaskType.Show) { } //sdf.SetMessage("正在生成业务号:" + rc.YWH + " 报文数据"); if (btc != null) { List <TableClass> lstTables = btc.检查表.Where(p => p.是否必选).ToList(); if (lstTables != null) { hd = HeadHandler.Instance.ConstructHead(rc); List <dynamic> lstEntitys = new List <dynamic>(); dynamic entity = null; Assembly pAssembly = Assembly.LoadFrom(SystemHandler.assPath); foreach (var item in lstTables) { entity = pAssembly.CreateInstance("BDCSubmit.Business.SubmitModel." + item.表名); if (et == ExcuteTaskType.Show) { } //sdf.SetContentEX("正在生成表:" + item.表名 + "数据"); lstEntitys.AddRange(GetSJInstance(item.表名, rc, db)); } //生成xml //1 XElement ele = XMLHelper.CreateBizEX <dynamic>(hd, lstEntitys); //2 XElement root = XElement.Load(SystemHandler.configFilePath); //3 List <City> lstCity = SystemHandler.Instance.GetGeneralCitys(); City city = lstCity.Where(p => qxdm.Equals(p.CityCode)).FirstOrDefault(); if (city != null) { string BizMsgPath = city.BizMsgPath; if (!string.IsNullOrEmpty(BizMsgPath) && Directory.Exists(BizMsgPath)) { xmlPath = BizMsgPath + "/" + "Biz" + hd.BizMsgID + ".xml"; ele.Save(xmlPath); HeadHandler.Instance.CreateMsgWithSignature(xmlPath); //每次修改完,这要重新保存一下 //修改市级 BIZANDREP.STATUS值 BIZANDREP bar = sjdb.Fetch <BIZANDREP>(" where qxdm='" + qxdm + "' and ywh='" + rc.YWH + "'").FirstOrDefault(); bar.STATUS = (int)STATUSType.Submiting; bar.BIZFILEPATH = xmlPath; bar.BIZMSGID = hd.BizMsgID; sjdb.Update(bar); //修改区县 BIZANDREP.STATUS值 BIZANDREP qxbar = db.Fetch <BIZANDREP>(" where qxdm='" + qxdm + "' and ywh='" + rc.YWH + "'").FirstOrDefault(); if (qxbar != null) { qxbar.STATUS = (int)STATUSType.Submiting; qxbar.BIZMSGID = hd.BizMsgID; db.Update(qxbar); } if (et == ExcuteTaskType.Show) { } //sdf.SetMessageEX("生成业务号:" + rc.YWH + " 报文数据完成"); } } } } } catch (Exception ex) { try { //删除生成的报文 if (!string.IsNullOrEmpty(xmlPath) && File.Exists(xmlPath)) { File.Delete(xmlPath); } // } catch { throw ex; } } } } } catch (Exception ex) { throw ex; } finally { //if (sdf != null) //{ // sdf.Close(); sdf.Dispose(); //} } }
/// <summary> /// 数据检查(只检查RNANDCN表中SFSB值为0的数据) /// </summary> /// <param name="qx">区县枚举</param> /// <param name="et">任务显示或隐藏枚举</param> public void CheckTables(QXType qx, ExcuteTaskType et) { if (qx == QXType.None) { return; } //ShowDialogForm sdf = null; try { switch (qx) { case QXType.QY: db = new Database("qysubmit"); qxdm = "371423"; break; case QXType.QH: db = new Database("qhsubmit"); qxdm = "371425"; break; case QXType.PY: db = new Database("pysubmit"); qxdm = "371426"; break; case QXType.XJ: db = new Database("xjsubmit"); qxdm = "371427"; break; default: break; } int isfsb = (int)SFSBType.DefaultValue; // 是否非上报 0为非上报 CheckBusinessTables cbt = XMLHelper.DeserializeByXmlFilePath <CheckBusinessTables>(SystemHandler.CheckBusinessTablesXMLFilePath); List <RNANDCN> lstRC = db.Fetch <RNANDCN>(" where qxdm='" + qxdm + "' and sfsb=" + isfsb + "").ToList(); //读取配置文件中,设置生成报文Data必填字段 if (!string.IsNullOrEmpty(lcqxdm)) { if (lstRC != null) { List <RNANDCN> lstRC2 = db.Fetch <RNANDCN>(" where qxdm='" + lcqxdm + "' and sfsb=" + isfsb + "").ToList(); if (lstRC2 != null) { lstRC.AddRange(lstRC2); } } } if (lstRC != null && lstRC.Count > 0) { int totalMain = lstRC.Count; if (et == ExcuteTaskType.Show) { //sdf = new ShowDialogForm("提示", "正在检查数据...", "请稍候"); //sdf.SetProgress(totalMain); } int countMain = 1; foreach (var rc in lstRC) { try { BusinessTypeClass btc = cbt.Business.Where(p => rc.JRYWBM.Equals(p.BusinessCode)).FirstOrDefault(); if (et == ExcuteTaskType.Show) { } //sdf.SetMessage("正在检查业务号:" + rc.YWH + "。(" + countMain + "/" + totalMain + ")"); if (btc != null) { List <TableClass> lstTables = btc.检查表.Where(p => p.是否必选).ToList(); if (lstTables != null) { int countSub = 1; int totalSub = lstTables.Count; if (et == ExcuteTaskType.Show) { } //sdf.SetProgressSub(totalSub); foreach (var item in lstTables) { int count = 0; if (et == ExcuteTaskType.Show) { } //sdf.SetContentSub("正在检查表:" + item.表名 + "。(" + countSub + "/" + totalSub + ")"); count = GetDataCounts(item.表名, rc); if (count == 0) { if (string.IsNullOrEmpty(rc.CHECKMESSAGE)) { rc.CHECKMESSAGE = item.表名 + "无数据"; } else { rc.CHECKMESSAGE += ";" + item.表名 + "无数据"; } } countSub++; } if (string.IsNullOrEmpty(rc.CHECKMESSAGE)) { rc.SFSB = 1; } else { rc.SFSB = 2; } db.Update(rc); } } else { if (string.IsNullOrEmpty(rc.CHECKMESSAGE)) { rc.CHECKMESSAGE = rc.JRYWBM + "不规范,请检查"; } else { rc.CHECKMESSAGE += ";" + rc.JRYWBM + "不规范,请检查"; } if (string.IsNullOrEmpty(rc.CHECKMESSAGE)) { rc.SFSB = 1; } else { rc.SFSB = 2; } db.Update(rc); } countMain++; } catch (Exception ex) { throw ex; } } } } catch (Exception ex) { throw ex; } finally { //if (sdf != null) //{ // sdf.Close(); // sdf.Dispose(); //} } }
/// <summary> /// 数据同步(只同步RNANDCN表中SFSB值为1(数据检查通过)的数据) /// </summary> /// <param name="qx"></param> public void DataExchange(QXType qx, ExcuteTaskType et) { if (qx == QXType.None) { return; } //ShowDialogForm sdf = null; try { switch (qx) { case QXType.QY: db = new Database("qysubmit"); qxdm = "371423"; break; case QXType.QH: db = new Database("qhsubmit"); qxdm = "371425"; break; case QXType.PY: db = new Database("pysubmit"); qxdm = "371426"; break; case QXType.XJ: db = new Database("xjsubmit"); qxdm = "371427"; break; default: break; } int isfsb = (int)SFSBType.CheckSuccess; CheckBusinessTables cbt = XMLHelper.DeserializeByXmlFilePath <CheckBusinessTables>(SystemHandler.CheckBusinessTablesXMLFilePath); //查询通过检查的数据,才进行同步 List <RNANDCN> lstRC = db.Fetch <RNANDCN>(" where qxdm='" + qxdm + "' and sfsb=" + isfsb + "").ToList(); if (!string.IsNullOrEmpty(lcqxdm)) { if (lstRC != null) { List <RNANDCN> lstRC2 = db.Fetch <RNANDCN>(" where qxdm='" + lcqxdm + "' and sfsb=" + isfsb + "").ToList(); if (lstRC2 != null) { lstRC.AddRange(lstRC2); } } } if (lstRC != null && lstRC.Count > 0) { int count = 1, total = lstRC.Count; if (et == ExcuteTaskType.Show) { //sdf = new ShowDialogForm("提示", "正在同步数据...", "请稍候"); //sdf.SetProgress(total); } foreach (var rc in lstRC) { BusinessTypeClass btc = cbt.Business.Where(p => rc.JRYWBM.Equals(p.BusinessCode)).FirstOrDefault(); List <TableClass> lstTables = btc.检查表.Where(p => p.是否必选).ToList(); string strExchangeErr = ""; try { sjdb = new Database("sjsubmit"); RNANDCN newRC = new RNANDCN(); //CopySameField(rc, newRC); newRC = rc; newRC.SFSB = (int)SFSBType.ExchangeSuccess; //市级库新增RNANDCN int count1 = sjdb.Fetch <RNANDCN>(" where YWH='" + newRC.YWH + "' and QXDM='" + newRC.QXDM + "'").Count; if (count1 == 0) { sjdb.Insert("RNANDCN", "PID", false, newRC); } else { RNANDCN sjRC = sjdb.Fetch <RNANDCN>(" where YWH='" + newRC.YWH + "' and QXDM='" + newRC.QXDM + "'").FirstOrDefault(); if (sjRC != null) { //CopySameField(sjRC, newRC); sjRC = newRC; sjRC.SFSB = newRC.SFSB; sjdb.Update(sjRC); } } //市级库生成BizAndRep BIZANDREP bar = new BIZANDREP(); bar.PID = Guid.NewGuid().ToString("N"); bar.YWH = rc.YWH; bar.STATUS = (int)STATUSType.DefaultValue; bar.QXDM = rc.QXDM; bar.CREATETIME = DateTime.Now; int count2 = sjdb.Fetch <BIZANDREP>(" where YWH='" + bar.YWH + "' and QXDM='" + bar.QXDM + "'").Count; if (count2 == 0) { sjdb.Insert("BIZANDREP", "PID", false, bar); } else { BIZANDREP sjBar = sjdb.Fetch <BIZANDREP>(" where YWH='" + bar.YWH + "' and QXDM='" + bar.QXDM + "'").FirstOrDefault(); if (sjBar != null) { sjBar.YWH = rc.YWH; sjBar.STATUS = bar.STATUS; sjdb.Update(sjBar); } } //县级库生成BizAndRep //curContext.BeginTransaction(); int count3 = db.Fetch <BIZANDREP>(" where YWH='" + bar.YWH + "'").Count; if (count3 == 0) { db.Insert("BIZANDREP", "PID", false, bar); } else { BIZANDREP xjBar = db.Fetch <BIZANDREP>(" where YWH='" + bar.YWH + "'").FirstOrDefault(); if (xjBar != null) { xjBar.STATUS = bar.STATUS; db.Update(xjBar); } } bool isError = false; foreach (var item in lstTables) { List <dynamic> lstobj = GetNewInstance(item.表名, rc, db); if (lstobj != null && lstobj.Count > 0) { foreach (var sjobj in lstobj) { //if (true) //sjdb.Update(sjobj); sjdb.Insert(item.表名, "PID", false, sjobj); //else //{ // //UpdateSJobjInTransaction(sjobj); // sjdb.Update(sjobj); //} } } //如果正常按程序执行,执行数据同步的数据肯定是通过数据检查的 //但万一有数据取不到的,写入CHECKMESSAGE else { if (string.IsNullOrEmpty(rc.CHECKMESSAGE)) { rc.CHECKMESSAGE = "业务号:" + rc.YWH + "向市局同步失败,原因:" + item.表名 + "未取到数据"; } else { rc.CHECKMESSAGE += ";" + rc.YWH + "向市局同步失败,原因:" + item.表名 + "未取到数据"; } rc.SFSB = (int)SFSBType.CheckFailure; db.Update(rc); // modify by cfl 2018年4月19日 isError = true; break; } } if (isError) { continue; } //更新区县库RNANDCN状态 rc.SFSB = (int)SFSBType.ExchangeSuccess; db.Update(rc); if (et == ExcuteTaskType.Show) { } //sdf.SetMessage("业务号:" + rc.YWH + "相关数据同步成功。(" + count + "/" + total + ")"); } catch (Exception ex) { try { strExchangeErr = ex.Message; rc.SFSB = (int)SFSBType.ExchangeFailure; if (string.IsNullOrEmpty(rc.CHECKMESSAGE)) { rc.CHECKMESSAGE = "业务号:" + rc.YWH + "向市局同步失败,原因:" + strExchangeErr; } else { rc.CHECKMESSAGE += ";" + rc.YWH + "向市局同步失败,原因:" + strExchangeErr; } db.Update(rc); if (et == ExcuteTaskType.Show) { } //sdf.SetMessage("业务号:" + rc.YWH + "相关数据向市局同步失败。(" + count + "/" + total + ")"); } catch { throw ex; } } count++; } } } catch (Exception ex) { throw ex; } finally { //if (sdf != null) //{ // sdf.Close(); // sdf.Dispose(); //} } }