MQ 分拆Json数据包然后上传

     public void UploadInsurHistory()
        {
            using (IDbConnection connection = ConnConfig.DmsConnection)
            {
                IDbTransaction trans = connection.BeginTransaction();
                try
                {
                    InsuranceBuyAccess gateway = new InsuranceBuyAccess(trans);
                    CommonDataGateway commonDataGateway = new CommonDataGateway(trans);

                    //1、检测系统参数UploadFlag != '0',就不上传
                    string uploadFlag = commonDataGateway.GetSettingValue("Repair", "UploadFlag");
                    if (uploadFlag != "0")
                    {
                        return;
                    }

                    //2、修正数据,将交强险、商业险到期日为 "0001-01-01"的数据到期日置为 NULL
                    gateway.ModifyDueDate();

                    //3、保险历史数据上传,每500条作为一个Json
                    DataSet dcsDS = gateway.GetAllInsuranceData();

                    JsonDCS mainJson = new JsonDCS();
                    mainJson.ver = 1;
                    mainJson.bl = "S.I.INSURANCEBUY";
                    mainJson.sbl = new ArrayList();

                    DCSHeader dcsHeader = new DCSHeader();
                    dcsHeader.bl = "S.I.INSURANCEBUY";
                    dcsHeader.ver = 1;

                    //一次性将历史数据写入一个Json之中
                    if (dcsDS.Tables[0].Rows.Count > 0)
                    {
                        JsonDCS insuranceBuyJson = new JsonDCS();
                        insuranceBuyJson.ver = 1;
                        insuranceBuyJson.bl = "S.I.INSURANCEBUY.INSURANCEBUY_I0";
                        insuranceBuyJson.cols = new string[]{"FrameNo","BuyDate","InsurerCode","InsuranceType","InsuranceBuyDate","InsuranceMaturityDate","SalesType","Remark","BizNo","TrafficNo",
                 "CommercialNo","CustomerNo","CoverageType","SaleChannel","IsChange","HandlePerson","NextPerson","CustOrigin","CommercialStartDate","CommercialEndDate",
                 "Insured","Tel","TrafficFee","TrafficDiscount","CommercialFee","CommercialDiscount","TotalFee","Deleted","InputPerson","InputTime","OpFlag"};

                        insuranceBuyJson.data = new object[dcsDS.Tables[0].Rows.Count][];
                        for (int i = 0; i < dcsDS.Tables[0].Rows.Count; i++)
                        {
                            insuranceBuyJson.data[i] = new object[] { dcsDS.Tables[0].Rows[i]["FRAMENO"], CanHelper.ToDate(dcsDS.Tables[0].Rows[i]["BUYDATE"]), dcsDS.Tables[0].Rows[i]["INSURERCODE"],
                                dcsDS.Tables[0].Rows[i]["INSURANCETYPE"], CanHelper.ToDate(dcsDS.Tables[0].Rows[i]["INSURANCEBUYDATE"]), CanHelper.ToDate(dcsDS.Tables[0].Rows[i]["INSURANCEMATURITYDATE"]),
                                dcsDS.Tables[0].Rows[i]["SALESTYPE"], dcsDS.Tables[0].Rows[i]["REMARK"], dcsDS.Tables[0].Rows[i]["BIZNO"],
                                dcsDS.Tables[0].Rows[i]["TRAFFICNO"], dcsDS.Tables[0].Rows[i]["COMMERCIALNO"], dcsDS.Tables[0].Rows[i]["CUSTOMERNO"],
                                dcsDS.Tables[0].Rows[i]["COVERAGETYPE"], dcsDS.Tables[0].Rows[i]["SALECHANNEL"], dcsDS.Tables[0].Rows[i]["ISCHANGE"],
                                dcsDS.Tables[0].Rows[i]["HANDLEPERSON"], dcsDS.Tables[0].Rows[i]["NEXTPERSON"], dcsDS.Tables[0].Rows[i]["CUSTORIGIN"],
                                CanHelper.ToDate(dcsDS.Tables[0].Rows[i]["COMMERCIALSTARTDATE"]), CanHelper.ToDate(dcsDS.Tables[0].Rows[i]["COMMERCIALENDDATE"]), dcsDS.Tables[0].Rows[i]["INSURED"],
                                dcsDS.Tables[0].Rows[i]["TEL"], dcsDS.Tables[0].Rows[i]["TRAFFICFEE"], dcsDS.Tables[0].Rows[i]["TRAFFICDISCOUNT"],
                                dcsDS.Tables[0].Rows[i]["COMMERCIALFEE"], dcsDS.Tables[0].Rows[i]["COMMERCIALDISCOUNT"], dcsDS.Tables[0].Rows[i]["TOTALFEE"],
                                dcsDS.Tables[0].Rows[i]["DELETED"], dcsDS.Tables[0].Rows[i]["INPUTPERSON"], dcsDS.Tables[0].Rows[i]["INPUTTIME"],"U"};
                        }

                        mainJson.sbl.Add(insuranceBuyJson);
                    }

                    //分解Json传送数据
                    if (mainJson.sbl.Count > 0)
                    {
                        int rowCount = ((JsonDCS) mainJson.sbl[0]).data.Length;
                        if (mainJson.sbl != null && mainJson.sbl[0] != null && rowCount > 500) //大于500行的分包发送
                        {
                            //childCount 分解的后需要传送的Json数目
                            int childCount = rowCount / 500;
                            if (rowCount % 500 != 0)
                            {
                                childCount++;
                            }
                            JsonDCS subJson = (JsonDCS) mainJson.sbl[0];
                            for (int i = 1; i < childCount + 1; i++)
                            {
                                JsonDCS childMainJson = new JsonDCS();
                                childMainJson.bl = "S.I.INSURANCEBUY";
                                childMainJson.ver = 1;
                                childMainJson.sbl = new ArrayList();

                                JsonDCS childJson = new JsonDCS();
                                childJson.bl = "S.I.INSURANCEBUY.INSURANCEBUY_I0";
                                childJson.ver = 1;
                                childJson.cols = new string[]{"FrameNo","BuyDate","InsurerCode","InsuranceType","InsuranceBuyDate","InsuranceMaturityDate","SalesType","Remark","BizNo","TrafficNo",
                 "CommercialNo","CustomerNo","CoverageType","SaleChannel","IsChange","HandlePerson","NextPerson","CustOrigin","CommercialStartDate","CommercialEndDate",
                 "Insured","Tel","TrafficFee","TrafficDiscount","CommercialFee","CommercialDiscount","TotalFee","Deleted","InputPerson","InputTime","OpFlag"};

                                childJson.data = new object[500][];
                                if (i == childCount)
                                {
                                    childJson.data = new object[rowCount - ((i - 1) * 500)][];
                                }
                                for (int j = 0; j < 500; j++)
                                {
                                    if (j + (i - 1) * 500 == rowCount)
                                    {
                                        break;
                                    }
                                    else
                                    {
                                        childJson.data[j] = subJson.data[j + (i - 1) * 500];
                                    }
                                }
                                childMainJson.sbl.Add(childJson);
                                gateway.CacheData(mainJson, dcsHeader);
                            }
                        }
                        else
                        {
                            gateway.CacheData(mainJson, dcsHeader);
                        }

                        //4、设置系统参数UploadFlag = '1'
                        commonDataGateway.UpdateStringValue("1", "Repair", "UploadFlag");

                        trans.Commit();
                    }
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw ex;
                }
            }
        }

 

posted @ 2015-04-05 11:48  沙耶  阅读(1385)  评论(0编辑  收藏  举报