MQはJsonパケットを分割してアップロードする

27520 ワード

     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;
                }
            }
        }