using System;
using System.Collections.Generic;
using System.Linq;
using EasyBL.WebApi.Message;
using Entity.Sugar;
using SqlSugar;
using SqlSugar.Base;
using Newtonsoft.Json.Linq;
using EasyBL;
using System.Text.RegularExpressions;

namespace TestAP.Helper
{
    public class ConvertData
    {
        public Dictionary<string, int> dicSucceccCount = new Dictionary<string, int>();
        public string StartDate { get; set; } = string.Empty;
        public string EndDate { get; set; } = string.Empty;
        //出口帳款
        public bool ExcExport { get; set; } = false;
        //退運出口帳款
        public bool ExcExportReturn { get; set; } = false;
        //進口帳款
        public bool ExcImport { get; set; } = false;
        //退運進口帳款
        public bool ExcImportReturn { get; set; } = false;
        //其他帳款
        public bool ExcOther { get; set; } = false;
        //退運其他帳款
        //其他(駒驛)帳款
        public bool ExcOtherTG { get; set; } = false;
        //退運其他(駒驛)帳款
        //展覽
        public bool ExcExhibtion { get; set; } = false;
        //客戶
        public bool ExcCustomer { get; set; } = false;
        //特定帳款號碼
        public List<string> BillsNo { get; set; } = new List<string>();
        //特定專案號碼
        public List<string> ExhibtionsNo { get; set; } = new List<string>();
        //特定客戶號碼
        public List<string> CustomersNo { get; set; } = new List<string>();

        public Dictionary<string, int> StartConvert(out string o_sMsg)
        {
            string sMsg = null;
            o_sMsg = null;

            ResponseMessage rm = null;

            try
            {

                rm = SugarBase.ExecTran(db =>
                {
                    do
                    {
                        if (string.IsNullOrEmpty(StartDate))
                        {
                            sMsg = "請設定StartDate";
                            break;
                        }

                        if (string.IsNullOrEmpty(EndDate))
                        {
                            sMsg = "請設定EndDate";
                            break;
                        }

                        Console.WriteLine("轉換進口資料開始...");

                        sMsg = Import(StartDate, EndDate, db);

                        if (sMsg != null)
                        {
                            break;
                        }

                        Console.WriteLine("轉換進口資料結束...");

                        Console.WriteLine("轉換出口資料開始...");

                        sMsg = Export(StartDate, EndDate, db);

                        if (sMsg != null)
                        {
                            break;
                        }

                        Console.WriteLine("轉換出口資料結束...");

                        Console.WriteLine("轉換其他資料開始...");

                        sMsg = Other(StartDate, EndDate, db);

                        if (sMsg != null)
                        {
                            break;
                        }

                        Console.WriteLine("轉換其他資料結束...");

                        Console.WriteLine("轉換其他(駒驛)資料開始...");

                        sMsg = OtherTG(StartDate, EndDate, db);

                        if (sMsg != null)
                        {
                            break;
                        }

                        Console.WriteLine("轉換其他(駒驛)資料結束...");

                        Console.WriteLine("轉換專案(展覽)資料開始...");

                        sMsg = Exhibition(StartDate, EndDate, db);

                        if (sMsg != null)
                        {
                            break;
                        }

                        Console.WriteLine("轉換專案(展覽)資料結束...");

                        Console.WriteLine("轉換客戶資料開始...");

                        sMsg = Customer(StartDate, EndDate, db);

                        if (sMsg != null)
                        {
                            break;
                        }

                        Console.WriteLine("轉換客戶資料結束...");

                    } while (false);

                    if (sMsg != null)
                    {
                        db.Ado.RollbackTran();
                    }

                    return rm;
                }

                );

            }
            catch (Exception ex)
            {
                sMsg = ex.Message;
            }

            if (sMsg != null)
            {
                o_sMsg = sMsg;
            }

            return dicSucceccCount;
        }

        public string Import(string sStartDate, string sEndDate, SqlSugarClient db)
        {
            string sMsg = null;
            DateTime dtSettingStartDate = Convert.ToDateTime(sStartDate);
            DateTime dtSettingEnd = Convert.ToDateTime(sEndDate);

            #region 進口

            var data1 = db.Queryable<OTB_OPM_ImportExhibition>()
            .Where(x => x.ModifyDate <= SqlFunc.ToDate(sEndDate) && x.ModifyDate >= SqlFunc.ToDate(sStartDate))
            .ToList();


            foreach (OTB_OPM_ImportExhibition import in data1)
            {
                if (ExcImport || BillsNo.Any())
                {
                    //解析bill
                    if (!string.IsNullOrEmpty(import.Bills))
                    {
                        JArray ja = JArray.Parse(import.Bills);

                        if (ja.Count > 0)
                        {
                            var sdb = new SimpleClient<OTB_OPM_ImportExhibition>(db);
                            var oOpm = sdb.GetById(import.ImportBillNO);
                            if (oOpm == null)
                            {
                                sMsg = $"進口單號:{ import.ImportBillNO } => 系統找不到對應的基本資料,請核查!";
                                break;
                            }

                            foreach (JObject jo in ja.OfType<JObject>())
                            {
                                string sBillNo = GetObjectValue(jo, "BillNO");
                                string sAuditVal = GetObjectValue(jo, "AuditVal");
                                string sBillCheckDate = GetObjectValue(jo, "BillCheckDate");
                                string sPayer = GetObjectValue(jo, "Payer");
                                string sUrl = @"ExhibitionImport_Upd|?Action=Upd&GoTab=3&ImportBillNO=" + oOpm.ImportBillNO + @"&BillNO=" + sBillNo;

                                if (BillsNo.Any() && !BillsNo.Contains(sBillNo))
                                {
                                    continue;
                                }

                                DateTime dtCreateDate;
                                if (DateTime.TryParse(sBillCheckDate, out dtCreateDate))
                                {
                                    if (dtCreateDate <= dtSettingEnd && dtCreateDate >= dtSettingStartDate)
                                    {
                                        var oPayer = new OTB_CRM_Customers();
                                        if (!string.IsNullOrEmpty(sPayer))
                                        {
                                            oPayer = db.Queryable<OTB_CRM_Customers>().Single(it => it.guid == sPayer);
                                            if (oPayer == null)
                                            {
                                                sMsg = $"進口單號:{ import.ImportBillNO } => 系統找不到付款人資訊";
                                                break;
                                            }
                                        }

                                        //狀態4(已銷帳)/6(已作廢)當成已審核拋轉
                                        if (sAuditVal == "2" || sAuditVal == "4" || sAuditVal == "6")
                                        {
                                            #region 審核

                                            var oBillsAdd = new OTB_OPM_Bills
                                            {
                                                OrgID = import.OrgID,
                                                BillNO = sBillNo, //帳款號碼(1)
                                                CheckDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")),//對帳日期(2)
                                                BillType = @"20",//帳別(收付)(3)
                                                CustomerCode = oPayer.CustomerNO //客戶供應商代號(4)
                                            };

                                            var sResponsiblePerson = oOpm.ResponsiblePerson.Split('.')[0];
                                            oBillsAdd.ResponsiblePersonCode = Common.CutByteString(sResponsiblePerson, 11); //業務員代號(5)
                                            oBillsAdd.ResponsiblePersonFullCode = oOpm.ResponsiblePerson; //業務員全代號
                                            oBillsAdd.LastGetBillDate = @""; //最近收付日(6)
                                            oBillsAdd.LastGetBillNO = @""; //最近收付單號(7)
                                            oBillsAdd.TaxType = decimal.Parse(GetObjectValue(jo, "TaxSum").Replace(@",", @"")) > 0 ? @"5" : @"6";//稅別(8)
                                            oBillsAdd.NOTaxAmount = GetObjectValue(jo, "AmountSum"); //未稅金額(9)
                                            oBillsAdd.BillAmount = GetObjectValue(jo, "AmountTaxSum"); //帳款金額(10)
                                            oBillsAdd.PaymentAmount = @"0"; //收付金額(11)
                                            oBillsAdd.Allowance = @"0"; //折讓金額(12)
                                            oBillsAdd.DebtAmount = @"0"; //呆帳金額(13)
                                            oBillsAdd.ExchangeAmount = @"0"; //匯兌損益金額(14)
                                            oBillsAdd.Settle = @"N"; //結清否(15)
                                            oBillsAdd.InvoiceStartNumber = @""; //發票號碼(起)(16)
                                            oBillsAdd.InvoiceEndNumber = @"";//發票號碼(迄)(17)
                                            oBillsAdd.Category = @"";//傳票類別(18)
                                            oBillsAdd.OrderNo = @"";//訂單單號(19)
                                            oBillsAdd.ClosingNote = @"N"; //結帳註記(20)
                                            oBillsAdd.GeneralInvoiceNumber = @""; //立帳總帳傳票號碼(21)
                                            oBillsAdd.GeneralSerialNumber = @""; //立帳總帳傳票序號(22)
                                            oBillsAdd.Remark1 = @""; //備註一(30C)(23)
                                            oBillsAdd.AccountSource = @"0"; //帳款來源(24)
                                            oBillsAdd.UpdateDate = @""; //更新日期(25)
                                            oBillsAdd.UpdatePersonnel = @""; //更新人員(26)
                                            oBillsAdd.DepartmentSiteNumber = oOpm.DepartmentID; //部門\ 工地編號(27)
                                            if (!string.IsNullOrWhiteSpace(oOpm.ExhibitionNO))
                                            {
                                                var oExhibition = db.Queryable<OTB_OPM_Exhibition>().Single(it => it.SN == oOpm.ExhibitionNO.ObjToInt());
                                                oBillsAdd.ProjectNumber = oExhibition == null ? @"" : oExhibition.ExhibitionCode; //專案\ 項目編號(28)
                                            }
                                            else
                                            {
                                                oBillsAdd.ProjectNumber = @""; //專案\ 項目編號(28)
                                            }
                                            oBillsAdd.TransferBNotes = @""; //轉B 帳註記(29)
                                            oBillsAdd.ABNumber = @""; //A|B 帳唯一流水號(30)
                                            oBillsAdd.EnterNumber = @""; //進銷單號(31)
                                            var sCurrency = GetObjectValue(jo, "Currency");
                                            if (import.OrgID == "SG")
                                            {
                                                if (sCurrency == "RMB")
                                                {
                                                    sCurrency = "";
                                                }
                                            }
                                            else
                                            {
                                                if (sCurrency == "NTD")
                                                {
                                                    sCurrency = "";
                                                }
                                            }
                                            oBillsAdd.ForeignCurrencyCode = sCurrency; //外幣代號(32)
                                            var sExchangeRate = GetObjectValue(jo, "ExchangeRate");
                                            oBillsAdd.ExchangeRate = sExchangeRate; //匯率(33)
                                            oBillsAdd.ForeignAmount = (decimal.Parse(GetObjectValue(jo, "AmountTaxSum")) * decimal.Parse(sExchangeRate == @"" ? @"1" : sExchangeRate)).ToString(); //外幣金額(34)
                                            oBillsAdd.PayAmount = @"0"; //收付沖抵金額(35)
                                            oBillsAdd.RefundAmount = @"0"; //退款金額(36)
                                            oBillsAdd.PaymentTerms = @""; //收付條件(37)
                                            oBillsAdd.AccountDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")); //帳款日期(38)
                                            oBillsAdd.DCreditCardNumber = @""; //預設信用卡號(39)
                                            oBillsAdd.ClosingDate = @""; //結帳日期(40)
                                            oBillsAdd.CusField1 = @""; //自定義欄位一(41)
                                            oBillsAdd.CusField2 = @""; //自定義欄位二(42)
                                            oBillsAdd.CusField3 = @""; //自定義欄位三(43)
                                            oBillsAdd.CusField4 = @""; //自定義欄位四(44)
                                            oBillsAdd.CusField5 = @""; //自定義欄位五(45)
                                            oBillsAdd.CusField6 = @"0"; //自定義欄位六(46)
                                            oBillsAdd.CusField7 = @"0"; //自定義欄位七(47)
                                            oBillsAdd.CusField8 = @"0"; //自定義欄位八(48)
                                            oBillsAdd.CusField9 = @"0"; //自定義欄位九(49)
                                            oBillsAdd.CusField10 = @"0";  //自定義欄位十(50)
                                            oBillsAdd.CusField11 = @""; //自定義欄位十一(51)
                                            oBillsAdd.CusField12 = @""; //自定義欄位十二(52)
                                            oBillsAdd.Remark2 = @""; //備註二(M)(53)
                                            oBillsAdd.TWNOTaxAmount = GetObjectValue(jo, "AmountSum"); //台幣未稅金額(54)
                                            oBillsAdd.TWAmount = GetObjectValue(jo, "AmountTaxSum"); //台幣帳款金額(55)
                                            oBillsAdd.CreateUser = import.ModifyUser;
                                            oBillsAdd.CreateDate = ((DateTime)import.ModifyDate).ToString(@"yyyy/MM/dd HH:mm:ss");
                                            oBillsAdd.BillFirstCheckDate = string.IsNullOrEmpty(GetObjectValue(jo, "BillFirstCheckDate")) ? DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss") : GetObjectValue(jo, "BillFirstCheckDate");
                                            oBillsAdd.Advance = GetObjectValue(jo, "Advance"); //預收
                                            oBillsAdd.TaxSum = GetObjectValue(jo, "TaxSum"); //稅額
                                            oBillsAdd.TotalReceivable = GetObjectValue(jo, "TotalReceivable"); //總應收
                                            oBillsAdd.IsRetn = string.IsNullOrEmpty(GetObjectValue(jo, "IsRetn")) ? @"N" : GetObjectValue(jo, "IsRetn"); //是否為退運
                                            oBillsAdd.Url = sUrl; //Url
                                            db.Insertable(oBillsAdd).ExecuteCommand();

                                            if (dicSucceccCount.Keys.Contains("進口審核"))
                                            {
                                                dicSucceccCount["進口審核"] = dicSucceccCount["進口審核"] + 1;
                                            }
                                            else
                                            {
                                                dicSucceccCount.Add("進口審核", 1);
                                            }

                                            #endregion
                                        }
                                        else if (sAuditVal == "5")
                                        {
                                            #region 過帳

                                            var oBillsAdd = new OTB_OPM_Bills
                                            {
                                                OrgID = import.OrgID,
                                                BillNO = sBillNo, //帳款號碼(1)
                                                CheckDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")),//對帳日期(2)
                                                BillType = @"20",//帳別(收付)(3)
                                                CustomerCode = oPayer.CustomerNO //客戶供應商代號(4)
                                            };
                                            var sResponsiblePerson = oOpm.ResponsiblePerson.Split('.')[0];
                                            oBillsAdd.ResponsiblePersonCode = Common.CutByteString(sResponsiblePerson, 11); //業務員代號(5)
                                            oBillsAdd.ResponsiblePersonFullCode = oOpm.ResponsiblePerson; //業務員全代號
                                            oBillsAdd.LastGetBillDate = @""; //最近收付日(6)
                                            oBillsAdd.LastGetBillNO = @""; //最近收付單號(7)
                                            oBillsAdd.TaxType = decimal.Parse(GetObjectValue(jo, "TaxSum").Replace(@",", @"")) > 0 ? @"5" : @"6";//稅別(8)
                                            oBillsAdd.NOTaxAmount = GetObjectValue(jo, "AmountSum"); //未稅金額(9)
                                            oBillsAdd.BillAmount = GetObjectValue(jo, "AmountTaxSum"); //帳款金額(10)
                                            oBillsAdd.PaymentAmount = @"0"; //收付金額(11)
                                            oBillsAdd.Allowance = @"0"; //折讓金額(12)
                                            oBillsAdd.DebtAmount = @"0"; //呆帳金額(13)
                                            oBillsAdd.ExchangeAmount = @"0"; //匯兌損益金額(14)
                                            oBillsAdd.Settle = @"N"; //結清否(15)
                                            oBillsAdd.InvoiceStartNumber = GetObjectValue(jo, "InvoiceNumber"); //發票號碼(起)(16)
                                            oBillsAdd.InvoiceEndNumber = GetObjectValue(jo, "InvoiceNumber");//發票號碼(迄)(17)
                                            oBillsAdd.Category = @"";//傳票類別(18)
                                            oBillsAdd.OrderNo = @"";//訂單單號(19)
                                            oBillsAdd.ClosingNote = @"N"; //結帳註記(20)
                                            oBillsAdd.GeneralInvoiceNumber = @""; //立帳總帳傳票號碼(21)
                                            oBillsAdd.GeneralSerialNumber = @""; //立帳總帳傳票序號(22)
                                            oBillsAdd.Remark1 = @""; //備註一(30C)(23)
                                            oBillsAdd.AccountSource = @"0"; //帳款來源(24)
                                            oBillsAdd.UpdateDate = @""; //更新日期(25)
                                            oBillsAdd.UpdatePersonnel = @""; //更新人員(26)
                                            oBillsAdd.DepartmentSiteNumber = oOpm.DepartmentID; //部門\ 工地編號(27)
                                            if (!string.IsNullOrWhiteSpace(oOpm.ExhibitionNO))
                                            {
                                                var oExhibition = db.Queryable<OTB_OPM_Exhibition>().Single(it => it.SN == oOpm.ExhibitionNO.ObjToInt());
                                                oBillsAdd.ProjectNumber = oExhibition == null ? @"" : oExhibition.ExhibitionCode; //專案\ 項目編號(28)
                                            }
                                            else
                                            {
                                                oBillsAdd.ProjectNumber = @""; //專案\ 項目編號(28)
                                            }
                                            oBillsAdd.TransferBNotes = @""; //轉B 帳註記(29)
                                            oBillsAdd.ABNumber = @""; //A|B 帳唯一流水號(30)
                                            oBillsAdd.EnterNumber = @""; //進銷單號(31)
                                            var sCurrency = GetObjectValue(jo, "Currency");
                                            if (import.OrgID == "SG")
                                            {
                                                if (sCurrency == "RMB")
                                                {
                                                    sCurrency = "";
                                                }
                                            }
                                            else
                                            {
                                                if (sCurrency == "NTD")
                                                {
                                                    sCurrency = "";
                                                }
                                            }
                                            oBillsAdd.ForeignCurrencyCode = sCurrency; //外幣代號(32)
                                            var sExchangeRate = GetObjectValue(jo, "ExchangeRate");
                                            oBillsAdd.ExchangeRate = sExchangeRate; //匯率(33)
                                            oBillsAdd.ForeignAmount = (decimal.Parse(GetObjectValue(jo, "AmountTaxSum")) * decimal.Parse(sExchangeRate == @"" ? @"1" : sExchangeRate)).ToString(); //外幣金額(34)
                                            oBillsAdd.PayAmount = @"0"; //收付沖抵金額(35)
                                            oBillsAdd.RefundAmount = @"0"; //退款金額(36)
                                            oBillsAdd.PaymentTerms = @""; //收付條件(37)
                                            oBillsAdd.AccountDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")); //帳款日期(38)
                                            oBillsAdd.DCreditCardNumber = @""; //預設信用卡號(39)
                                            oBillsAdd.ClosingDate = @""; //結帳日期(40)
                                            oBillsAdd.CusField1 = @""; //自定義欄位一(41)
                                            oBillsAdd.CusField2 = @""; //自定義欄位二(42)
                                            oBillsAdd.CusField3 = @""; //自定義欄位三(43)
                                            oBillsAdd.CusField4 = @""; //自定義欄位四(44)
                                            oBillsAdd.CusField5 = @""; //自定義欄位五(45)
                                            oBillsAdd.CusField6 = @"0"; //自定義欄位六(46)
                                            oBillsAdd.CusField7 = @"0"; //自定義欄位七(47)
                                            oBillsAdd.CusField8 = @"0"; //自定義欄位八(48)
                                            oBillsAdd.CusField9 = @"0"; //自定義欄位九(49)
                                            oBillsAdd.CusField10 = @"0";  //自定義欄位十(50)
                                            oBillsAdd.CusField11 = @""; //自定義欄位十一(51)
                                            oBillsAdd.CusField12 = @""; //自定義欄位十二(52)
                                            oBillsAdd.Remark2 = @""; //備註二(M)(53)
                                            oBillsAdd.TWNOTaxAmount = GetObjectValue(jo, "AmountSum"); //台幣未稅金額(54)
                                            oBillsAdd.TWAmount = GetObjectValue(jo, "AmountTaxSum"); //台幣帳款金額(55)
                                            oBillsAdd.CreateUser = import.ModifyUser;
                                            oBillsAdd.CreateDate = ((DateTime)import.ModifyDate).ToString(@"yyyy/MM/dd HH:mm:ss");
                                            oBillsAdd.BillFirstCheckDate = string.IsNullOrEmpty(GetObjectValue(jo, "BillFirstCheckDate")) ? DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss") : GetObjectValue(jo, "BillFirstCheckDate");
                                            oBillsAdd.Advance = GetObjectValue(jo, "Advance"); //預收
                                            oBillsAdd.TaxSum = GetObjectValue(jo, "TaxSum"); //稅額
                                            oBillsAdd.TotalReceivable = GetObjectValue(jo, "TotalReceivable"); //總應收
                                            oBillsAdd.IsRetn = string.IsNullOrEmpty(GetObjectValue(jo, "IsRetn")) ? @"N" : GetObjectValue(jo, "IsRetn"); //是否為退運
                                            oBillsAdd.Url = sUrl; //Url
                                            db.Insertable(oBillsAdd).ExecuteCommand();

                                            if (dicSucceccCount.Keys.Contains("進口過帳"))
                                            {
                                                dicSucceccCount["進口過帳"] = dicSucceccCount["進口過帳"] + 1;
                                            }
                                            else
                                            {
                                                dicSucceccCount.Add("進口過帳", 1);
                                            }

                                            #endregion
                                        }
                                    }
                                }
                            }

                        }

                    }
                }

                if (ExcImportReturn || BillsNo.Any())
                {
                    //解析ReturnBill
                    JArray ja = JArray.Parse(import.ReturnBills);

                    if (ja.Count > 0)
                    {
                        var sdb = new SimpleClient<OTB_OPM_ImportExhibition>(db);
                        var oOpm = sdb.GetById(import.ImportBillNO);
                        if (oOpm == null)
                        {
                            sMsg = $"退運進口單號:{ import.ImportBillNO } => 系統找不到對應的基本資料,請核查!";
                            break;
                        }

                        foreach (JObject joH in ja.OfType<JObject>())
                        {
                            JArray ja1 = JArray.Parse(GetObjectValue(joH, "Bills"));

                            if (ja1.Count > 0)
                            {
                                foreach (JObject jo in ja1.OfType<JObject>())
                                {
                                    string sBillNo = GetObjectValue(jo, "BillNO");
                                    string sAuditVal = GetObjectValue(jo, "AuditVal");
                                    string sBillCheckDate = GetObjectValue(jo, "BillCheckDate");
                                    string sPayer = GetObjectValue(jo, "Payer");
                                    string sUrl = @"ExhibitionImport_Upd|?Action=Upd&GoTab=5&ImportBillNO=" + oOpm.ImportBillNO + @"&BillNO=" + sBillNo;

                                    if (BillsNo.Any() && !BillsNo.Contains(sBillNo))
                                    {
                                        continue;
                                    }

                                    DateTime dtCreateDate;
                                    if (DateTime.TryParse(sBillCheckDate, out dtCreateDate))
                                    {
                                        if (dtCreateDate <= dtSettingEnd && dtCreateDate >= dtSettingStartDate)
                                        {
                                            var oPayer = new OTB_CRM_Customers();
                                            if (!string.IsNullOrEmpty(sPayer))
                                            {
                                                oPayer = db.Queryable<OTB_CRM_Customers>().Single(it => it.guid == sPayer);
                                                if (oPayer == null)
                                                {
                                                    sMsg = $"退運進口單號:{ import.ImportBillNO } => 系統找不到付款人資訊";
                                                    break;
                                                }
                                            }

                                            //狀態4(已銷帳)/6(已作廢)當成已審核拋轉
                                            if (sAuditVal == "2" || sAuditVal == "4" || sAuditVal == "6")
                                            {
                                                #region 審核

                                                var oBillsAdd = new OTB_OPM_Bills
                                                {
                                                    OrgID = import.OrgID,
                                                    BillNO = sBillNo, //帳款號碼(1)
                                                    CheckDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")),//對帳日期(2)
                                                    BillType = @"20",//帳別(收付)(3)
                                                    CustomerCode = oPayer.CustomerNO //客戶供應商代號(4)
                                                };

                                                var sResponsiblePerson = oOpm.ResponsiblePerson.Split('.')[0];
                                                oBillsAdd.ResponsiblePersonCode = Common.CutByteString(sResponsiblePerson, 11); //業務員代號(5)
                                                oBillsAdd.ResponsiblePersonFullCode = oOpm.ResponsiblePerson; //業務員全代號
                                                oBillsAdd.LastGetBillDate = @""; //最近收付日(6)
                                                oBillsAdd.LastGetBillNO = @""; //最近收付單號(7)
                                                oBillsAdd.TaxType = decimal.Parse(GetObjectValue(jo, "TaxSum").Replace(@",", @"")) > 0 ? @"5" : @"6";//稅別(8)
                                                oBillsAdd.NOTaxAmount = GetObjectValue(jo, "AmountSum"); //未稅金額(9)
                                                oBillsAdd.BillAmount = GetObjectValue(jo, "AmountTaxSum"); //帳款金額(10)
                                                oBillsAdd.PaymentAmount = @"0"; //收付金額(11)
                                                oBillsAdd.Allowance = @"0"; //折讓金額(12)
                                                oBillsAdd.DebtAmount = @"0"; //呆帳金額(13)
                                                oBillsAdd.ExchangeAmount = @"0"; //匯兌損益金額(14)
                                                oBillsAdd.Settle = @"N"; //結清否(15)
                                                oBillsAdd.InvoiceStartNumber = @""; //發票號碼(起)(16)
                                                oBillsAdd.InvoiceEndNumber = @"";//發票號碼(迄)(17)
                                                oBillsAdd.Category = @"";//傳票類別(18)
                                                oBillsAdd.OrderNo = @"";//訂單單號(19)
                                                oBillsAdd.ClosingNote = @"N"; //結帳註記(20)
                                                oBillsAdd.GeneralInvoiceNumber = @""; //立帳總帳傳票號碼(21)
                                                oBillsAdd.GeneralSerialNumber = @""; //立帳總帳傳票序號(22)
                                                oBillsAdd.Remark1 = @""; //備註一(30C)(23)
                                                oBillsAdd.AccountSource = @"0"; //帳款來源(24)
                                                oBillsAdd.UpdateDate = @""; //更新日期(25)
                                                oBillsAdd.UpdatePersonnel = @""; //更新人員(26)
                                                oBillsAdd.DepartmentSiteNumber = oOpm.DepartmentID; //部門\ 工地編號(27)
                                                if (!string.IsNullOrWhiteSpace(oOpm.ExhibitionNO))
                                                {
                                                    var oExhibition = db.Queryable<OTB_OPM_Exhibition>().Single(it => it.SN == oOpm.ExhibitionNO.ObjToInt());
                                                    oBillsAdd.ProjectNumber = oExhibition == null ? @"" : oExhibition.ExhibitionCode; //專案\ 項目編號(28)
                                                }
                                                else
                                                {
                                                    oBillsAdd.ProjectNumber = @""; //專案\ 項目編號(28)
                                                }
                                                oBillsAdd.TransferBNotes = @""; //轉B 帳註記(29)
                                                oBillsAdd.ABNumber = @""; //A|B 帳唯一流水號(30)
                                                oBillsAdd.EnterNumber = @""; //進銷單號(31)
                                                var sCurrency = GetObjectValue(jo, "Currency");
                                                if (import.OrgID == "SG")
                                                {
                                                    if (sCurrency == "RMB")
                                                    {
                                                        sCurrency = "";
                                                    }
                                                }
                                                else
                                                {
                                                    if (sCurrency == "NTD")
                                                    {
                                                        sCurrency = "";
                                                    }
                                                }
                                                oBillsAdd.ForeignCurrencyCode = sCurrency; //外幣代號(32)
                                                var sExchangeRate = GetObjectValue(jo, "ExchangeRate");
                                                oBillsAdd.ExchangeRate = sExchangeRate; //匯率(33)
                                                oBillsAdd.ForeignAmount = (decimal.Parse(GetObjectValue(jo, "AmountTaxSum")) * decimal.Parse(sExchangeRate == @"" ? @"1" : sExchangeRate)).ToString(); //外幣金額(34)
                                                oBillsAdd.PayAmount = @"0"; //收付沖抵金額(35)
                                                oBillsAdd.RefundAmount = @"0"; //退款金額(36)
                                                oBillsAdd.PaymentTerms = @""; //收付條件(37)
                                                oBillsAdd.AccountDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")); //帳款日期(38)
                                                oBillsAdd.DCreditCardNumber = @""; //預設信用卡號(39)
                                                oBillsAdd.ClosingDate = @""; //結帳日期(40)
                                                oBillsAdd.CusField1 = @""; //自定義欄位一(41)
                                                oBillsAdd.CusField2 = @""; //自定義欄位二(42)
                                                oBillsAdd.CusField3 = @""; //自定義欄位三(43)
                                                oBillsAdd.CusField4 = @""; //自定義欄位四(44)
                                                oBillsAdd.CusField5 = @""; //自定義欄位五(45)
                                                oBillsAdd.CusField6 = @"0"; //自定義欄位六(46)
                                                oBillsAdd.CusField7 = @"0"; //自定義欄位七(47)
                                                oBillsAdd.CusField8 = @"0"; //自定義欄位八(48)
                                                oBillsAdd.CusField9 = @"0"; //自定義欄位九(49)
                                                oBillsAdd.CusField10 = @"0";  //自定義欄位十(50)
                                                oBillsAdd.CusField11 = @""; //自定義欄位十一(51)
                                                oBillsAdd.CusField12 = @""; //自定義欄位十二(52)
                                                oBillsAdd.Remark2 = @""; //備註二(M)(53)
                                                oBillsAdd.TWNOTaxAmount = GetObjectValue(jo, "AmountSum"); //台幣未稅金額(54)
                                                oBillsAdd.TWAmount = GetObjectValue(jo, "AmountTaxSum"); //台幣帳款金額(55)
                                                oBillsAdd.CreateUser = import.ModifyUser;
                                                oBillsAdd.CreateDate = ((DateTime)import.ModifyDate).ToString(@"yyyy/MM/dd HH:mm:ss");
                                                oBillsAdd.BillFirstCheckDate = string.IsNullOrEmpty(GetObjectValue(jo, "BillFirstCheckDate")) ? DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss") : GetObjectValue(jo, "BillFirstCheckDate");
                                                oBillsAdd.Advance = GetObjectValue(jo, "Advance"); //預收
                                                oBillsAdd.TaxSum = GetObjectValue(jo, "TaxSum"); //稅額
                                                oBillsAdd.TotalReceivable = GetObjectValue(jo, "TotalReceivable"); //總應收
                                                oBillsAdd.IsRetn = string.IsNullOrEmpty(GetObjectValue(jo, "IsRetn")) ? @"N" : GetObjectValue(jo, "IsRetn"); //是否為退運
                                                oBillsAdd.Url = sUrl; //Url
                                                db.Insertable(oBillsAdd).ExecuteCommand();

                                                if (dicSucceccCount.Keys.Contains("退運進口審核"))
                                                {
                                                    dicSucceccCount["退運進口審核"] = dicSucceccCount["退運進口審核"] + 1;
                                                }
                                                else
                                                {
                                                    dicSucceccCount.Add("退運進口審核", 1);
                                                }

                                                #endregion
                                            }
                                            else if (sAuditVal == "5")
                                            {
                                                #region 過帳

                                                var oBillsAdd = new OTB_OPM_Bills
                                                {
                                                    OrgID = import.OrgID,
                                                    BillNO = sBillNo, //帳款號碼(1)
                                                    CheckDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")),//對帳日期(2)
                                                    BillType = @"20",//帳別(收付)(3)
                                                    CustomerCode = oPayer.CustomerNO //客戶供應商代號(4)
                                                };
                                                var sResponsiblePerson = oOpm.ResponsiblePerson.Split('.')[0];
                                                oBillsAdd.ResponsiblePersonCode = Common.CutByteString(sResponsiblePerson, 11); //業務員代號(5)
                                                oBillsAdd.ResponsiblePersonFullCode = oOpm.ResponsiblePerson; //業務員全代號
                                                oBillsAdd.LastGetBillDate = @""; //最近收付日(6)
                                                oBillsAdd.LastGetBillNO = @""; //最近收付單號(7)
                                                oBillsAdd.TaxType = decimal.Parse(GetObjectValue(jo, "TaxSum").Replace(@",", @"")) > 0 ? @"5" : @"6";//稅別(8)
                                                oBillsAdd.NOTaxAmount = GetObjectValue(jo, "AmountSum"); //未稅金額(9)
                                                oBillsAdd.BillAmount = GetObjectValue(jo, "AmountTaxSum"); //帳款金額(10)
                                                oBillsAdd.PaymentAmount = @"0"; //收付金額(11)
                                                oBillsAdd.Allowance = @"0"; //折讓金額(12)
                                                oBillsAdd.DebtAmount = @"0"; //呆帳金額(13)
                                                oBillsAdd.ExchangeAmount = @"0"; //匯兌損益金額(14)
                                                oBillsAdd.Settle = @"N"; //結清否(15)
                                                oBillsAdd.InvoiceStartNumber = GetObjectValue(jo, "InvoiceNumber"); //發票號碼(起)(16)
                                                oBillsAdd.InvoiceEndNumber = GetObjectValue(jo, "InvoiceNumber");//發票號碼(迄)(17)
                                                oBillsAdd.Category = @"";//傳票類別(18)
                                                oBillsAdd.OrderNo = @"";//訂單單號(19)
                                                oBillsAdd.ClosingNote = @"N"; //結帳註記(20)
                                                oBillsAdd.GeneralInvoiceNumber = @""; //立帳總帳傳票號碼(21)
                                                oBillsAdd.GeneralSerialNumber = @""; //立帳總帳傳票序號(22)
                                                oBillsAdd.Remark1 = @""; //備註一(30C)(23)
                                                oBillsAdd.AccountSource = @"0"; //帳款來源(24)
                                                oBillsAdd.UpdateDate = @""; //更新日期(25)
                                                oBillsAdd.UpdatePersonnel = @""; //更新人員(26)
                                                oBillsAdd.DepartmentSiteNumber = oOpm.DepartmentID; //部門\ 工地編號(27)
                                                if (!string.IsNullOrWhiteSpace(oOpm.ExhibitionNO))
                                                {
                                                    var oExhibition = db.Queryable<OTB_OPM_Exhibition>().Single(it => it.SN == oOpm.ExhibitionNO.ObjToInt());
                                                    oBillsAdd.ProjectNumber = oExhibition == null ? @"" : oExhibition.ExhibitionCode; //專案\ 項目編號(28)
                                                }
                                                else
                                                {
                                                    oBillsAdd.ProjectNumber = @""; //專案\ 項目編號(28)
                                                }
                                                oBillsAdd.TransferBNotes = @""; //轉B 帳註記(29)
                                                oBillsAdd.ABNumber = @""; //A|B 帳唯一流水號(30)
                                                oBillsAdd.EnterNumber = @""; //進銷單號(31)
                                                var sCurrency = GetObjectValue(jo, "Currency");
                                                if (import.OrgID == "SG")
                                                {
                                                    if (sCurrency == "RMB")
                                                    {
                                                        sCurrency = "";
                                                    }
                                                }
                                                else
                                                {
                                                    if (sCurrency == "NTD")
                                                    {
                                                        sCurrency = "";
                                                    }
                                                }
                                                oBillsAdd.ForeignCurrencyCode = sCurrency; //外幣代號(32)
                                                var sExchangeRate = GetObjectValue(jo, "ExchangeRate");
                                                oBillsAdd.ExchangeRate = sExchangeRate; //匯率(33)
                                                oBillsAdd.ForeignAmount = (decimal.Parse(GetObjectValue(jo, "AmountTaxSum")) * decimal.Parse(sExchangeRate == @"" ? @"1" : sExchangeRate)).ToString(); //外幣金額(34)
                                                oBillsAdd.PayAmount = @"0"; //收付沖抵金額(35)
                                                oBillsAdd.RefundAmount = @"0"; //退款金額(36)
                                                oBillsAdd.PaymentTerms = @""; //收付條件(37)
                                                oBillsAdd.AccountDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")); //帳款日期(38)
                                                oBillsAdd.DCreditCardNumber = @""; //預設信用卡號(39)
                                                oBillsAdd.ClosingDate = @""; //結帳日期(40)
                                                oBillsAdd.CusField1 = @""; //自定義欄位一(41)
                                                oBillsAdd.CusField2 = @""; //自定義欄位二(42)
                                                oBillsAdd.CusField3 = @""; //自定義欄位三(43)
                                                oBillsAdd.CusField4 = @""; //自定義欄位四(44)
                                                oBillsAdd.CusField5 = @""; //自定義欄位五(45)
                                                oBillsAdd.CusField6 = @"0"; //自定義欄位六(46)
                                                oBillsAdd.CusField7 = @"0"; //自定義欄位七(47)
                                                oBillsAdd.CusField8 = @"0"; //自定義欄位八(48)
                                                oBillsAdd.CusField9 = @"0"; //自定義欄位九(49)
                                                oBillsAdd.CusField10 = @"0";  //自定義欄位十(50)
                                                oBillsAdd.CusField11 = @""; //自定義欄位十一(51)
                                                oBillsAdd.CusField12 = @""; //自定義欄位十二(52)
                                                oBillsAdd.Remark2 = @""; //備註二(M)(53)
                                                oBillsAdd.TWNOTaxAmount = GetObjectValue(jo, "AmountSum"); //台幣未稅金額(54)
                                                oBillsAdd.TWAmount = GetObjectValue(jo, "AmountTaxSum"); //台幣帳款金額(55)
                                                oBillsAdd.CreateUser = import.ModifyUser;
                                                oBillsAdd.CreateDate = ((DateTime)import.ModifyDate).ToString(@"yyyy/MM/dd HH:mm:ss");
                                                oBillsAdd.BillFirstCheckDate = string.IsNullOrEmpty(GetObjectValue(jo, "BillFirstCheckDate")) ? DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss") : GetObjectValue(jo, "BillFirstCheckDate");
                                                oBillsAdd.Advance = GetObjectValue(jo, "Advance"); //預收
                                                oBillsAdd.TaxSum = GetObjectValue(jo, "TaxSum"); //稅額
                                                oBillsAdd.TotalReceivable = GetObjectValue(jo, "TotalReceivable"); //總應收
                                                oBillsAdd.IsRetn = string.IsNullOrEmpty(GetObjectValue(jo, "IsRetn")) ? @"N" : GetObjectValue(jo, "IsRetn"); //是否為退運
                                                oBillsAdd.Url = sUrl; //Url
                                                db.Insertable(oBillsAdd).ExecuteCommand();

                                                if (dicSucceccCount.Keys.Contains("退運進口過帳"))
                                                {
                                                    dicSucceccCount["退運進口過帳"] = dicSucceccCount["退運進口過帳"] + 1;
                                                }
                                                else
                                                {
                                                    dicSucceccCount.Add("退運進口過帳", 1);
                                                }

                                                #endregion
                                            }
                                        }
                                    }
                                }
                            }
                        }

                    }
                }

            }

            #endregion

            return sMsg;
        }

        public string Export(string sStartDate, string sEndDate, SqlSugarClient db)
        {
            string sMsg = null;
            DateTime dtSettingStartDate = Convert.ToDateTime(sStartDate);
            DateTime dtSettingEnd = Convert.ToDateTime(sEndDate);

            #region 出口

            var data2 = db.Queryable<OTB_OPM_ExportExhibition>()
            .Where(x => x.ModifyDate <= SqlFunc.ToDate(sEndDate) && x.ModifyDate >= SqlFunc.ToDate(sStartDate))
            .ToList();


            foreach (OTB_OPM_ExportExhibition export in data2)
            {
                if (ExcExport || BillsNo.Any())
                {
                    //解析bill
                    if (!string.IsNullOrEmpty(export.Bills))
                    {
                        JArray ja = JArray.Parse(export.Bills);

                        if (ja.Count > 0)
                        {
                            var sdb = new SimpleClient<OTB_OPM_ExportExhibition>(db);
                            var oOpm = sdb.GetById(export.ExportBillNO);
                            if (oOpm == null)
                            {
                                sMsg = $"出口單號:{ export.ExportBillNO } => 系統找不到對應的基本資料,請核查!";
                                break;
                            }

                            foreach (JObject jo in ja.OfType<JObject>())
                            {
                                string sBillNo = GetObjectValue(jo, "BillNO");
                                string sAuditVal = GetObjectValue(jo, "AuditVal");
                                string sBillCheckDate = GetObjectValue(jo, "BillCheckDate");
                                string sPayer = GetObjectValue(jo, "Payer");
                                string sUrl = @"ExhibitionExport_Upd|?Action=Upd&GoTab=3&ExportBillNO=" + oOpm.ExportBillNO + @"&BillNO=" + sBillNo;
                                DateTime dtCreateDate;

                                if (BillsNo.Any() && !BillsNo.Contains(sBillNo))
                                {
                                    continue;
                                }

                                if (DateTime.TryParse(sBillCheckDate, out dtCreateDate))
                                {
                                    if (dtCreateDate <= dtSettingEnd && dtCreateDate >= dtSettingStartDate)
                                    {
                                        var oPayer = new OTB_CRM_Customers();
                                        if (!string.IsNullOrEmpty(sPayer))
                                        {
                                            oPayer = db.Queryable<OTB_CRM_Customers>().Single(it => it.guid == sPayer);
                                            if (oPayer == null)
                                            {
                                                sMsg = $"出口單號:{ export.ExportBillNO } => 系統找不到付款人資訊";
                                                break;
                                            }
                                        }

                                        //狀態4(已銷帳)/6(已作廢)當成已審核拋轉
                                        if (sAuditVal == "2" || sAuditVal == "4" || sAuditVal == "6")
                                        {
                                            #region 審核

                                            var oBillsAdd = new OTB_OPM_Bills
                                            {
                                                OrgID = export.OrgID,
                                                BillNO = sBillNo, //帳款號碼(1)
                                                CheckDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")),//對帳日期(2)
                                                BillType = @"20",//帳別(收付)(3)
                                                CustomerCode = oPayer.CustomerNO //客戶供應商代號(4)
                                            };

                                            var sResponsiblePerson = oOpm.ResponsiblePerson.Split('.')[0];
                                            oBillsAdd.ResponsiblePersonCode = Common.CutByteString(sResponsiblePerson, 11); //業務員代號(5)
                                            oBillsAdd.ResponsiblePersonFullCode = oOpm.ResponsiblePerson; //業務員全代號
                                            oBillsAdd.LastGetBillDate = @""; //最近收付日(6)
                                            oBillsAdd.LastGetBillNO = @""; //最近收付單號(7)
                                            oBillsAdd.TaxType = decimal.Parse(GetObjectValue(jo, "TaxSum").Replace(@",", @"")) > 0 ? @"5" : @"6";//稅別(8)
                                            oBillsAdd.NOTaxAmount = GetObjectValue(jo, "AmountSum"); //未稅金額(9)
                                            oBillsAdd.BillAmount = GetObjectValue(jo, "AmountTaxSum"); //帳款金額(10)
                                            oBillsAdd.PaymentAmount = @"0"; //收付金額(11)
                                            oBillsAdd.Allowance = @"0"; //折讓金額(12)
                                            oBillsAdd.DebtAmount = @"0"; //呆帳金額(13)
                                            oBillsAdd.ExchangeAmount = @"0"; //匯兌損益金額(14)
                                            oBillsAdd.Settle = @"N"; //結清否(15)
                                            oBillsAdd.InvoiceStartNumber = @""; //發票號碼(起)(16)
                                            oBillsAdd.InvoiceEndNumber = @"";//發票號碼(迄)(17)
                                            oBillsAdd.Category = @"";//傳票類別(18)
                                            oBillsAdd.OrderNo = @"";//訂單單號(19)
                                            oBillsAdd.ClosingNote = @"N"; //結帳註記(20)
                                            oBillsAdd.GeneralInvoiceNumber = @""; //立帳總帳傳票號碼(21)
                                            oBillsAdd.GeneralSerialNumber = @""; //立帳總帳傳票序號(22)
                                            oBillsAdd.Remark1 = @""; //備註一(30C)(23)
                                            oBillsAdd.AccountSource = @"0"; //帳款來源(24)
                                            oBillsAdd.UpdateDate = @""; //更新日期(25)
                                            oBillsAdd.UpdatePersonnel = @""; //更新人員(26)
                                            oBillsAdd.DepartmentSiteNumber = oOpm.DepartmentID; //部門\ 工地編號(27)
                                            if (!string.IsNullOrWhiteSpace(oOpm.ExhibitionNO))
                                            {
                                                var oExhibition = db.Queryable<OTB_OPM_Exhibition>().Single(it => it.SN == oOpm.ExhibitionNO.ObjToInt());
                                                oBillsAdd.ProjectNumber = oExhibition == null ? @"" : oExhibition.ExhibitionCode; //專案\ 項目編號(28)
                                            }
                                            else
                                            {
                                                oBillsAdd.ProjectNumber = @""; //專案\ 項目編號(28)
                                            }
                                            oBillsAdd.TransferBNotes = @""; //轉B 帳註記(29)
                                            oBillsAdd.ABNumber = @""; //A|B 帳唯一流水號(30)
                                            oBillsAdd.EnterNumber = @""; //進銷單號(31)
                                            var sCurrency = GetObjectValue(jo, "Currency");
                                            if (export.OrgID == "SG")
                                            {
                                                if (sCurrency == "RMB")
                                                {
                                                    sCurrency = "";
                                                }
                                            }
                                            else
                                            {
                                                if (sCurrency == "NTD")
                                                {
                                                    sCurrency = "";
                                                }
                                            }
                                            oBillsAdd.ForeignCurrencyCode = sCurrency; //外幣代號(32)
                                            var sExchangeRate = GetObjectValue(jo, "ExchangeRate");
                                            oBillsAdd.ExchangeRate = sExchangeRate; //匯率(33)
                                            oBillsAdd.ForeignAmount = (decimal.Parse(GetObjectValue(jo, "AmountTaxSum")) * decimal.Parse(sExchangeRate == @"" ? @"1" : sExchangeRate)).ToString(); //外幣金額(34)
                                            oBillsAdd.PayAmount = @"0"; //收付沖抵金額(35)
                                            oBillsAdd.RefundAmount = @"0"; //退款金額(36)
                                            oBillsAdd.PaymentTerms = @""; //收付條件(37)
                                            oBillsAdd.AccountDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")); //帳款日期(38)
                                            oBillsAdd.DCreditCardNumber = @""; //預設信用卡號(39)
                                            oBillsAdd.ClosingDate = @""; //結帳日期(40)
                                            oBillsAdd.CusField1 = @""; //自定義欄位一(41)
                                            oBillsAdd.CusField2 = @""; //自定義欄位二(42)
                                            oBillsAdd.CusField3 = @""; //自定義欄位三(43)
                                            oBillsAdd.CusField4 = @""; //自定義欄位四(44)
                                            oBillsAdd.CusField5 = @""; //自定義欄位五(45)
                                            oBillsAdd.CusField6 = @"0"; //自定義欄位六(46)
                                            oBillsAdd.CusField7 = @"0"; //自定義欄位七(47)
                                            oBillsAdd.CusField8 = @"0"; //自定義欄位八(48)
                                            oBillsAdd.CusField9 = @"0"; //自定義欄位九(49)
                                            oBillsAdd.CusField10 = @"0";  //自定義欄位十(50)
                                            oBillsAdd.CusField11 = @""; //自定義欄位十一(51)
                                            oBillsAdd.CusField12 = @""; //自定義欄位十二(52)
                                            oBillsAdd.Remark2 = @""; //備註二(M)(53)
                                            oBillsAdd.TWNOTaxAmount = GetObjectValue(jo, "AmountSum"); //台幣未稅金額(54)
                                            oBillsAdd.TWAmount = GetObjectValue(jo, "AmountTaxSum"); //台幣帳款金額(55)
                                            oBillsAdd.CreateUser = export.ModifyUser;
                                            oBillsAdd.CreateDate = ((DateTime)export.ModifyDate).ToString(@"yyyy/MM/dd HH:mm:ss");
                                            oBillsAdd.BillFirstCheckDate = string.IsNullOrEmpty(GetObjectValue(jo, "BillFirstCheckDate")) ? DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss") : GetObjectValue(jo, "BillFirstCheckDate");
                                            oBillsAdd.Advance = GetObjectValue(jo, "Advance"); //預收
                                            oBillsAdd.TaxSum = GetObjectValue(jo, "TaxSum"); //稅額
                                            oBillsAdd.TotalReceivable = GetObjectValue(jo, "TotalReceivable"); //總應收
                                            oBillsAdd.IsRetn = string.IsNullOrEmpty(GetObjectValue(jo, "IsRetn")) ? @"N" : GetObjectValue(jo, "IsRetn"); //是否為退運
                                            oBillsAdd.Url = sUrl; //Url
                                            db.Insertable(oBillsAdd).ExecuteCommand();

                                            if (dicSucceccCount.Keys.Contains("出口審核"))
                                            {
                                                dicSucceccCount["出口審核"] = dicSucceccCount["出口審核"] + 1;
                                            }
                                            else
                                            {
                                                dicSucceccCount.Add("出口審核", 1);
                                            }

                                            #endregion
                                        }
                                        else if (sAuditVal == "5")
                                        {
                                            #region 過帳

                                            var oBillsAdd = new OTB_OPM_Bills
                                            {
                                                OrgID = export.OrgID,
                                                BillNO = sBillNo, //帳款號碼(1)
                                                CheckDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")),//對帳日期(2)
                                                BillType = @"20",//帳別(收付)(3)
                                                CustomerCode = oPayer.CustomerNO //客戶供應商代號(4)
                                            };
                                            var sResponsiblePerson = oOpm.ResponsiblePerson.Split('.')[0];
                                            oBillsAdd.ResponsiblePersonCode = Common.CutByteString(sResponsiblePerson, 11); //業務員代號(5)
                                            oBillsAdd.ResponsiblePersonFullCode = oOpm.ResponsiblePerson; //業務員全代號
                                            oBillsAdd.LastGetBillDate = @""; //最近收付日(6)
                                            oBillsAdd.LastGetBillNO = @""; //最近收付單號(7)
                                            oBillsAdd.TaxType = decimal.Parse(GetObjectValue(jo, "TaxSum").Replace(@",", @"")) > 0 ? @"5" : @"6";//稅別(8)
                                            oBillsAdd.NOTaxAmount = GetObjectValue(jo, "AmountSum"); //未稅金額(9)
                                            oBillsAdd.BillAmount = GetObjectValue(jo, "AmountTaxSum"); //帳款金額(10)
                                            oBillsAdd.PaymentAmount = @"0"; //收付金額(11)
                                            oBillsAdd.Allowance = @"0"; //折讓金額(12)
                                            oBillsAdd.DebtAmount = @"0"; //呆帳金額(13)
                                            oBillsAdd.ExchangeAmount = @"0"; //匯兌損益金額(14)
                                            oBillsAdd.Settle = @"N"; //結清否(15)
                                            oBillsAdd.InvoiceStartNumber = GetObjectValue(jo, "InvoiceNumber"); //發票號碼(起)(16)
                                            oBillsAdd.InvoiceEndNumber = GetObjectValue(jo, "InvoiceNumber");//發票號碼(迄)(17)
                                            oBillsAdd.Category = @"";//傳票類別(18)
                                            oBillsAdd.OrderNo = @"";//訂單單號(19)
                                            oBillsAdd.ClosingNote = @"N"; //結帳註記(20)
                                            oBillsAdd.GeneralInvoiceNumber = @""; //立帳總帳傳票號碼(21)
                                            oBillsAdd.GeneralSerialNumber = @""; //立帳總帳傳票序號(22)
                                            oBillsAdd.Remark1 = @""; //備註一(30C)(23)
                                            oBillsAdd.AccountSource = @"0"; //帳款來源(24)
                                            oBillsAdd.UpdateDate = @""; //更新日期(25)
                                            oBillsAdd.UpdatePersonnel = @""; //更新人員(26)
                                            oBillsAdd.DepartmentSiteNumber = oOpm.DepartmentID; //部門\ 工地編號(27)
                                            if (!string.IsNullOrWhiteSpace(oOpm.ExhibitionNO))
                                            {
                                                var oExhibition = db.Queryable<OTB_OPM_Exhibition>().Single(it => it.SN == oOpm.ExhibitionNO.ObjToInt());
                                                oBillsAdd.ProjectNumber = oExhibition == null ? @"" : oExhibition.ExhibitionCode; //專案\ 項目編號(28)
                                            }
                                            else
                                            {
                                                oBillsAdd.ProjectNumber = @""; //專案\ 項目編號(28)
                                            }
                                            oBillsAdd.TransferBNotes = @""; //轉B 帳註記(29)
                                            oBillsAdd.ABNumber = @""; //A|B 帳唯一流水號(30)
                                            oBillsAdd.EnterNumber = @""; //進銷單號(31)
                                            var sCurrency = GetObjectValue(jo, "Currency");
                                            if (export.OrgID == "SG")
                                            {
                                                if (sCurrency == "RMB")
                                                {
                                                    sCurrency = "";
                                                }
                                            }
                                            else
                                            {
                                                if (sCurrency == "NTD")
                                                {
                                                    sCurrency = "";
                                                }
                                            }
                                            oBillsAdd.ForeignCurrencyCode = sCurrency; //外幣代號(32)
                                            var sExchangeRate = GetObjectValue(jo, "ExchangeRate");
                                            oBillsAdd.ExchangeRate = sExchangeRate; //匯率(33)
                                            oBillsAdd.ForeignAmount = (decimal.Parse(GetObjectValue(jo, "AmountTaxSum")) * decimal.Parse(sExchangeRate == @"" ? @"1" : sExchangeRate)).ToString(); //外幣金額(34)
                                            oBillsAdd.PayAmount = @"0"; //收付沖抵金額(35)
                                            oBillsAdd.RefundAmount = @"0"; //退款金額(36)
                                            oBillsAdd.PaymentTerms = @""; //收付條件(37)
                                            oBillsAdd.AccountDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")); //帳款日期(38)
                                            oBillsAdd.DCreditCardNumber = @""; //預設信用卡號(39)
                                            oBillsAdd.ClosingDate = @""; //結帳日期(40)
                                            oBillsAdd.CusField1 = @""; //自定義欄位一(41)
                                            oBillsAdd.CusField2 = @""; //自定義欄位二(42)
                                            oBillsAdd.CusField3 = @""; //自定義欄位三(43)
                                            oBillsAdd.CusField4 = @""; //自定義欄位四(44)
                                            oBillsAdd.CusField5 = @""; //自定義欄位五(45)
                                            oBillsAdd.CusField6 = @"0"; //自定義欄位六(46)
                                            oBillsAdd.CusField7 = @"0"; //自定義欄位七(47)
                                            oBillsAdd.CusField8 = @"0"; //自定義欄位八(48)
                                            oBillsAdd.CusField9 = @"0"; //自定義欄位九(49)
                                            oBillsAdd.CusField10 = @"0";  //自定義欄位十(50)
                                            oBillsAdd.CusField11 = @""; //自定義欄位十一(51)
                                            oBillsAdd.CusField12 = @""; //自定義欄位十二(52)
                                            oBillsAdd.Remark2 = @""; //備註二(M)(53)
                                            oBillsAdd.TWNOTaxAmount = GetObjectValue(jo, "AmountSum"); //台幣未稅金額(54)
                                            oBillsAdd.TWAmount = GetObjectValue(jo, "AmountTaxSum"); //台幣帳款金額(55)
                                            oBillsAdd.CreateUser = export.ModifyUser;
                                            oBillsAdd.CreateDate = ((DateTime)export.ModifyDate).ToString(@"yyyy/MM/dd HH:mm:ss");
                                            oBillsAdd.BillFirstCheckDate = string.IsNullOrEmpty(GetObjectValue(jo, "BillFirstCheckDate")) ? DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss") : GetObjectValue(jo, "BillFirstCheckDate");
                                            oBillsAdd.Advance = GetObjectValue(jo, "Advance"); //預收
                                            oBillsAdd.TaxSum = GetObjectValue(jo, "TaxSum"); //稅額
                                            oBillsAdd.TotalReceivable = GetObjectValue(jo, "TotalReceivable"); //總應收
                                            oBillsAdd.IsRetn = string.IsNullOrEmpty(GetObjectValue(jo, "IsRetn")) ? @"N" : GetObjectValue(jo, "IsRetn"); //是否為退運
                                            oBillsAdd.Url = sUrl; //Url
                                            db.Insertable(oBillsAdd).ExecuteCommand();

                                            if (dicSucceccCount.Keys.Contains("出口過帳"))
                                            {
                                                dicSucceccCount["出口過帳"] = dicSucceccCount["出口過帳"] + 1;
                                            }
                                            else
                                            {
                                                dicSucceccCount.Add("出口過帳", 1);
                                            }

                                            #endregion
                                        }
                                    }
                                }
                            }

                        }
                    }
                }

                if (ExcExportReturn || BillsNo.Any())
                {
                    //解析ReturnBill
                    JArray ja = JArray.Parse(export.ReturnBills);

                    if (ja.Count > 0)
                    {
                        var sdb = new SimpleClient<OTB_OPM_ExportExhibition>(db);
                        var oOpm = sdb.GetById(export.ExportBillNO);
                        if (oOpm == null)
                        {
                            sMsg = $"退運出口單號:{ export.ExportBillNO } => 系統找不到對應的基本資料,請核查!";
                            break;
                        }

                        foreach (JObject joH in ja.OfType<JObject>())
                        {
                            JArray ja1 = JArray.Parse(GetObjectValue(joH, "Bills"));

                            if (ja1.Count > 0)
                            {
                                foreach (JObject jo in ja1.OfType<JObject>())
                                {
                                    string sBillNo = GetObjectValue(jo, "BillNO");
                                    string sAuditVal = GetObjectValue(jo, "AuditVal");
                                    string sBillCheckDate = GetObjectValue(jo, "BillCheckDate");
                                    string sPayer = GetObjectValue(jo, "Payer");
                                    string sUrl = @"ExhibitionExport_Upd|?Action=Upd&GoTab=5&ExportBillNO=" + oOpm.ExportBillNO + @"&BillNO=" + sBillNo;
                                    DateTime dtCreateDate;

                                    if (BillsNo.Any() && !BillsNo.Contains(sBillNo))
                                    {
                                        continue;
                                    }

                                    if (DateTime.TryParse(sBillCheckDate, out dtCreateDate))
                                    {
                                        if (dtCreateDate <= dtSettingEnd && dtCreateDate >= dtSettingStartDate)
                                        {
                                            var oPayer = new OTB_CRM_Customers();
                                            if (!string.IsNullOrEmpty(sPayer))
                                            {
                                                oPayer = db.Queryable<OTB_CRM_Customers>().Single(it => it.guid == sPayer);
                                                if (oPayer == null)
                                                {
                                                    sMsg = $"退運出口單號:{ export.ExportBillNO } => 系統找不到付款人資訊";
                                                    break;
                                                }
                                            }

                                            //狀態4(已銷帳)/6(已作廢)當成已審核拋轉
                                            if (sAuditVal == "2" || sAuditVal == "4" || sAuditVal == "6")
                                            {
                                                #region 審核

                                                var oBillsAdd = new OTB_OPM_Bills
                                                {
                                                    OrgID = export.OrgID,
                                                    BillNO = sBillNo, //帳款號碼(1)
                                                    CheckDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")),//對帳日期(2)
                                                    BillType = @"20",//帳別(收付)(3)
                                                    CustomerCode = oPayer.CustomerNO //客戶供應商代號(4)
                                                };

                                                var sResponsiblePerson = oOpm.ResponsiblePerson.Split('.')[0];
                                                oBillsAdd.ResponsiblePersonCode = Common.CutByteString(sResponsiblePerson, 11); //業務員代號(5)
                                                oBillsAdd.ResponsiblePersonFullCode = oOpm.ResponsiblePerson; //業務員全代號
                                                oBillsAdd.LastGetBillDate = @""; //最近收付日(6)
                                                oBillsAdd.LastGetBillNO = @""; //最近收付單號(7)
                                                oBillsAdd.TaxType = decimal.Parse(GetObjectValue(jo, "TaxSum").Replace(@",", @"")) > 0 ? @"5" : @"6";//稅別(8)
                                                oBillsAdd.NOTaxAmount = GetObjectValue(jo, "AmountSum"); //未稅金額(9)
                                                oBillsAdd.BillAmount = GetObjectValue(jo, "AmountTaxSum"); //帳款金額(10)
                                                oBillsAdd.PaymentAmount = @"0"; //收付金額(11)
                                                oBillsAdd.Allowance = @"0"; //折讓金額(12)
                                                oBillsAdd.DebtAmount = @"0"; //呆帳金額(13)
                                                oBillsAdd.ExchangeAmount = @"0"; //匯兌損益金額(14)
                                                oBillsAdd.Settle = @"N"; //結清否(15)
                                                oBillsAdd.InvoiceStartNumber = @""; //發票號碼(起)(16)
                                                oBillsAdd.InvoiceEndNumber = @"";//發票號碼(迄)(17)
                                                oBillsAdd.Category = @"";//傳票類別(18)
                                                oBillsAdd.OrderNo = @"";//訂單單號(19)
                                                oBillsAdd.ClosingNote = @"N"; //結帳註記(20)
                                                oBillsAdd.GeneralInvoiceNumber = @""; //立帳總帳傳票號碼(21)
                                                oBillsAdd.GeneralSerialNumber = @""; //立帳總帳傳票序號(22)
                                                oBillsAdd.Remark1 = @""; //備註一(30C)(23)
                                                oBillsAdd.AccountSource = @"0"; //帳款來源(24)
                                                oBillsAdd.UpdateDate = @""; //更新日期(25)
                                                oBillsAdd.UpdatePersonnel = @""; //更新人員(26)
                                                oBillsAdd.DepartmentSiteNumber = oOpm.DepartmentID; //部門\ 工地編號(27)
                                                if (!string.IsNullOrWhiteSpace(oOpm.ExhibitionNO))
                                                {
                                                    var oExhibition = db.Queryable<OTB_OPM_Exhibition>().Single(it => it.SN == oOpm.ExhibitionNO.ObjToInt());
                                                    oBillsAdd.ProjectNumber = oExhibition == null ? @"" : oExhibition.ExhibitionCode; //專案\ 項目編號(28)
                                                }
                                                else
                                                {
                                                    oBillsAdd.ProjectNumber = @""; //專案\ 項目編號(28)
                                                }
                                                oBillsAdd.TransferBNotes = @""; //轉B 帳註記(29)
                                                oBillsAdd.ABNumber = @""; //A|B 帳唯一流水號(30)
                                                oBillsAdd.EnterNumber = @""; //進銷單號(31)
                                                var sCurrency = GetObjectValue(jo, "Currency");
                                                if (export.OrgID == "SG")
                                                {
                                                    if (sCurrency == "RMB")
                                                    {
                                                        sCurrency = "";
                                                    }
                                                }
                                                else
                                                {
                                                    if (sCurrency == "NTD")
                                                    {
                                                        sCurrency = "";
                                                    }
                                                }
                                                oBillsAdd.ForeignCurrencyCode = sCurrency; //外幣代號(32)
                                                var sExchangeRate = GetObjectValue(jo, "ExchangeRate");
                                                oBillsAdd.ExchangeRate = sExchangeRate; //匯率(33)
                                                oBillsAdd.ForeignAmount = (decimal.Parse(GetObjectValue(jo, "AmountTaxSum")) * decimal.Parse(sExchangeRate == @"" ? @"1" : sExchangeRate)).ToString(); //外幣金額(34)
                                                oBillsAdd.PayAmount = @"0"; //收付沖抵金額(35)
                                                oBillsAdd.RefundAmount = @"0"; //退款金額(36)
                                                oBillsAdd.PaymentTerms = @""; //收付條件(37)
                                                oBillsAdd.AccountDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")); //帳款日期(38)
                                                oBillsAdd.DCreditCardNumber = @""; //預設信用卡號(39)
                                                oBillsAdd.ClosingDate = @""; //結帳日期(40)
                                                oBillsAdd.CusField1 = @""; //自定義欄位一(41)
                                                oBillsAdd.CusField2 = @""; //自定義欄位二(42)
                                                oBillsAdd.CusField3 = @""; //自定義欄位三(43)
                                                oBillsAdd.CusField4 = @""; //自定義欄位四(44)
                                                oBillsAdd.CusField5 = @""; //自定義欄位五(45)
                                                oBillsAdd.CusField6 = @"0"; //自定義欄位六(46)
                                                oBillsAdd.CusField7 = @"0"; //自定義欄位七(47)
                                                oBillsAdd.CusField8 = @"0"; //自定義欄位八(48)
                                                oBillsAdd.CusField9 = @"0"; //自定義欄位九(49)
                                                oBillsAdd.CusField10 = @"0";  //自定義欄位十(50)
                                                oBillsAdd.CusField11 = @""; //自定義欄位十一(51)
                                                oBillsAdd.CusField12 = @""; //自定義欄位十二(52)
                                                oBillsAdd.Remark2 = @""; //備註二(M)(53)
                                                oBillsAdd.TWNOTaxAmount = GetObjectValue(jo, "AmountSum"); //台幣未稅金額(54)
                                                oBillsAdd.TWAmount = GetObjectValue(jo, "AmountTaxSum"); //台幣帳款金額(55)
                                                oBillsAdd.CreateUser = export.ModifyUser;
                                                oBillsAdd.CreateDate = ((DateTime)export.ModifyDate).ToString(@"yyyy/MM/dd HH:mm:ss");
                                                oBillsAdd.BillFirstCheckDate = string.IsNullOrEmpty(GetObjectValue(jo, "BillFirstCheckDate")) ? DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss") : GetObjectValue(jo, "BillFirstCheckDate");
                                                oBillsAdd.Advance = GetObjectValue(jo, "Advance"); //預收
                                                oBillsAdd.TaxSum = GetObjectValue(jo, "TaxSum"); //稅額
                                                oBillsAdd.TotalReceivable = GetObjectValue(jo, "TotalReceivable"); //總應收
                                                oBillsAdd.IsRetn = string.IsNullOrEmpty(GetObjectValue(jo, "IsRetn")) ? @"N" : GetObjectValue(jo, "IsRetn"); //是否為退運
                                                oBillsAdd.Url = sUrl; //Url
                                                db.Insertable(oBillsAdd).ExecuteCommand();

                                                if (dicSucceccCount.Keys.Contains("退運出口審核"))
                                                {
                                                    dicSucceccCount["退運出口審核"] = dicSucceccCount["退運出口審核"] + 1;
                                                }
                                                else
                                                {
                                                    dicSucceccCount.Add("退運出口審核", 1);
                                                }

                                                #endregion
                                            }
                                            else if (sAuditVal == "5")
                                            {
                                                #region 過帳

                                                var oBillsAdd = new OTB_OPM_Bills
                                                {
                                                    OrgID = export.OrgID,
                                                    BillNO = sBillNo, //帳款號碼(1)
                                                    CheckDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")),//對帳日期(2)
                                                    BillType = @"20",//帳別(收付)(3)
                                                    CustomerCode = oPayer.CustomerNO //客戶供應商代號(4)
                                                };
                                                var sResponsiblePerson = oOpm.ResponsiblePerson.Split('.')[0];
                                                oBillsAdd.ResponsiblePersonCode = Common.CutByteString(sResponsiblePerson, 11); //業務員代號(5)
                                                oBillsAdd.ResponsiblePersonFullCode = oOpm.ResponsiblePerson; //業務員全代號
                                                oBillsAdd.LastGetBillDate = @""; //最近收付日(6)
                                                oBillsAdd.LastGetBillNO = @""; //最近收付單號(7)
                                                oBillsAdd.TaxType = decimal.Parse(GetObjectValue(jo, "TaxSum").Replace(@",", @"")) > 0 ? @"5" : @"6";//稅別(8)
                                                oBillsAdd.NOTaxAmount = GetObjectValue(jo, "AmountSum"); //未稅金額(9)
                                                oBillsAdd.BillAmount = GetObjectValue(jo, "AmountTaxSum"); //帳款金額(10)
                                                oBillsAdd.PaymentAmount = @"0"; //收付金額(11)
                                                oBillsAdd.Allowance = @"0"; //折讓金額(12)
                                                oBillsAdd.DebtAmount = @"0"; //呆帳金額(13)
                                                oBillsAdd.ExchangeAmount = @"0"; //匯兌損益金額(14)
                                                oBillsAdd.Settle = @"N"; //結清否(15)
                                                oBillsAdd.InvoiceStartNumber = GetObjectValue(jo, "InvoiceNumber"); //發票號碼(起)(16)
                                                oBillsAdd.InvoiceEndNumber = GetObjectValue(jo, "InvoiceNumber");//發票號碼(迄)(17)
                                                oBillsAdd.Category = @"";//傳票類別(18)
                                                oBillsAdd.OrderNo = @"";//訂單單號(19)
                                                oBillsAdd.ClosingNote = @"N"; //結帳註記(20)
                                                oBillsAdd.GeneralInvoiceNumber = @""; //立帳總帳傳票號碼(21)
                                                oBillsAdd.GeneralSerialNumber = @""; //立帳總帳傳票序號(22)
                                                oBillsAdd.Remark1 = @""; //備註一(30C)(23)
                                                oBillsAdd.AccountSource = @"0"; //帳款來源(24)
                                                oBillsAdd.UpdateDate = @""; //更新日期(25)
                                                oBillsAdd.UpdatePersonnel = @""; //更新人員(26)
                                                oBillsAdd.DepartmentSiteNumber = oOpm.DepartmentID; //部門\ 工地編號(27)
                                                if (!string.IsNullOrWhiteSpace(oOpm.ExhibitionNO))
                                                {
                                                    var oExhibition = db.Queryable<OTB_OPM_Exhibition>().Single(it => it.SN == oOpm.ExhibitionNO.ObjToInt());
                                                    oBillsAdd.ProjectNumber = oExhibition == null ? @"" : oExhibition.ExhibitionCode; //專案\ 項目編號(28)
                                                }
                                                else
                                                {
                                                    oBillsAdd.ProjectNumber = @""; //專案\ 項目編號(28)
                                                }
                                                oBillsAdd.TransferBNotes = @""; //轉B 帳註記(29)
                                                oBillsAdd.ABNumber = @""; //A|B 帳唯一流水號(30)
                                                oBillsAdd.EnterNumber = @""; //進銷單號(31)
                                                var sCurrency = GetObjectValue(jo, "Currency");
                                                if (export.OrgID == "SG")
                                                {
                                                    if (sCurrency == "RMB")
                                                    {
                                                        sCurrency = "";
                                                    }
                                                }
                                                else
                                                {
                                                    if (sCurrency == "NTD")
                                                    {
                                                        sCurrency = "";
                                                    }
                                                }
                                                oBillsAdd.ForeignCurrencyCode = sCurrency; //外幣代號(32)
                                                var sExchangeRate = GetObjectValue(jo, "ExchangeRate");
                                                oBillsAdd.ExchangeRate = sExchangeRate; //匯率(33)
                                                oBillsAdd.ForeignAmount = (decimal.Parse(GetObjectValue(jo, "AmountTaxSum")) * decimal.Parse(sExchangeRate == @"" ? @"1" : sExchangeRate)).ToString(); //外幣金額(34)
                                                oBillsAdd.PayAmount = @"0"; //收付沖抵金額(35)
                                                oBillsAdd.RefundAmount = @"0"; //退款金額(36)
                                                oBillsAdd.PaymentTerms = @""; //收付條件(37)
                                                oBillsAdd.AccountDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")); //帳款日期(38)
                                                oBillsAdd.DCreditCardNumber = @""; //預設信用卡號(39)
                                                oBillsAdd.ClosingDate = @""; //結帳日期(40)
                                                oBillsAdd.CusField1 = @""; //自定義欄位一(41)
                                                oBillsAdd.CusField2 = @""; //自定義欄位二(42)
                                                oBillsAdd.CusField3 = @""; //自定義欄位三(43)
                                                oBillsAdd.CusField4 = @""; //自定義欄位四(44)
                                                oBillsAdd.CusField5 = @""; //自定義欄位五(45)
                                                oBillsAdd.CusField6 = @"0"; //自定義欄位六(46)
                                                oBillsAdd.CusField7 = @"0"; //自定義欄位七(47)
                                                oBillsAdd.CusField8 = @"0"; //自定義欄位八(48)
                                                oBillsAdd.CusField9 = @"0"; //自定義欄位九(49)
                                                oBillsAdd.CusField10 = @"0";  //自定義欄位十(50)
                                                oBillsAdd.CusField11 = @""; //自定義欄位十一(51)
                                                oBillsAdd.CusField12 = @""; //自定義欄位十二(52)
                                                oBillsAdd.Remark2 = @""; //備註二(M)(53)
                                                oBillsAdd.TWNOTaxAmount = GetObjectValue(jo, "AmountSum"); //台幣未稅金額(54)
                                                oBillsAdd.TWAmount = GetObjectValue(jo, "AmountTaxSum"); //台幣帳款金額(55)
                                                oBillsAdd.CreateUser = export.ModifyUser;
                                                oBillsAdd.CreateDate = ((DateTime)export.ModifyDate).ToString(@"yyyy/MM/dd HH:mm:ss");
                                                oBillsAdd.BillFirstCheckDate = string.IsNullOrEmpty(GetObjectValue(jo, "BillFirstCheckDate")) ? DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss") : GetObjectValue(jo, "BillFirstCheckDate");
                                                oBillsAdd.Advance = GetObjectValue(jo, "Advance"); //預收
                                                oBillsAdd.TaxSum = GetObjectValue(jo, "TaxSum"); //稅額
                                                oBillsAdd.TotalReceivable = GetObjectValue(jo, "TotalReceivable"); //總應收
                                                oBillsAdd.IsRetn = string.IsNullOrEmpty(GetObjectValue(jo, "IsRetn")) ? @"N" : GetObjectValue(jo, "IsRetn"); //是否為退運
                                                oBillsAdd.Url = sUrl; //Url
                                                db.Insertable(oBillsAdd).ExecuteCommand();

                                                if (dicSucceccCount.Keys.Contains("退運出口過帳"))
                                                {
                                                    dicSucceccCount["退運出口過帳"] = dicSucceccCount["退運出口過帳"] + 1;
                                                }
                                                else
                                                {
                                                    dicSucceccCount.Add("退運出口過帳", 1);
                                                }

                                                #endregion
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            #endregion

            return sMsg;
        }

        public string Other(string sStartDate, string sEndDate, SqlSugarClient db)
        {
            string sMsg = null;
            DateTime dtSettingStartDate = Convert.ToDateTime(sStartDate);
            DateTime dtSettingEnd = Convert.ToDateTime(sEndDate);

            if (ExcOther || BillsNo.Any())
            {

                #region 其他

                var data3 = db.Queryable<OTB_OPM_OtherExhibition>()
                .Where(x => x.ModifyDate <= SqlFunc.ToDate(sEndDate) && x.ModifyDate >= SqlFunc.ToDate(sStartDate))
                .ToList();

                foreach (OTB_OPM_OtherExhibition other in data3)
                {
                    //解析bill
                    if (!string.IsNullOrEmpty(other.Bills))
                    {
                        JArray ja = JArray.Parse(other.Bills);

                        if (ja.Count > 0)
                        {
                            var sdb = new SimpleClient<OTB_OPM_OtherExhibition>(db);
                            var oOpm = sdb.GetById(other.Guid);
                            if (oOpm == null)
                            {
                                sMsg = $"其他GUID:{ other.Guid } => 系統找不到對應的基本資料,請核查!";
                                break;
                            }

                            foreach (JObject jo in ja.OfType<JObject>())
                            {
                                string sBillNo = GetObjectValue(jo, "BillNO");
                                string sAuditVal = GetObjectValue(jo, "AuditVal");
                                string sBillCheckDate = GetObjectValue(jo, "BillCheckDate");
                                string sPayer = GetObjectValue(jo, "Payer");
                                string sUrl = @"OtherBusiness_Upd|?Action=Upd&GoTab=2&ExportBillNO=" + oOpm.Guid + @"&BillNO=" + sBillNo;
                                DateTime dtCreateDate;

                                if (BillsNo.Any() && !BillsNo.Contains(sBillNo))
                                {
                                    continue;
                                }

                                if (DateTime.TryParse(sBillCheckDate, out dtCreateDate))
                                {
                                    if (dtCreateDate <= dtSettingEnd && dtCreateDate >= dtSettingStartDate)
                                    {
                                        var oPayer = new OTB_CRM_Customers();
                                        if (!string.IsNullOrEmpty(sPayer))
                                        {
                                            oPayer = db.Queryable<OTB_CRM_Customers>().Single(it => it.guid == sPayer);
                                            if (oPayer == null)
                                            {
                                                sMsg = $"其他GUID:{ other.Guid } => 系統找不到付款人資訊";
                                                break;
                                            }
                                        }

                                        //狀態4(已銷帳)/6(已作廢)當成已審核拋轉
                                        if (sAuditVal == "2" || sAuditVal == "4" || sAuditVal == "6")
                                        {
                                            #region 審核

                                            var oBillsAdd = new OTB_OPM_Bills
                                            {
                                                OrgID = other.OrgID,
                                                BillNO = sBillNo, //帳款號碼(1)
                                                CheckDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")),//對帳日期(2)
                                                BillType = @"20",//帳別(收付)(3)
                                                CustomerCode = oPayer.CustomerNO //客戶供應商代號(4)
                                            };

                                            var sResponsiblePerson = oOpm.ResponsiblePerson.Split('.')[0];
                                            oBillsAdd.ResponsiblePersonCode = Common.CutByteString(sResponsiblePerson, 11); //業務員代號(5)
                                            oBillsAdd.ResponsiblePersonFullCode = oOpm.ResponsiblePerson; //業務員全代號
                                            oBillsAdd.LastGetBillDate = @""; //最近收付日(6)
                                            oBillsAdd.LastGetBillNO = @""; //最近收付單號(7)
                                            oBillsAdd.TaxType = decimal.Parse(GetObjectValue(jo, "TaxSum").Replace(@",", @"")) > 0 ? @"5" : @"6";//稅別(8)
                                            oBillsAdd.NOTaxAmount = GetObjectValue(jo, "AmountSum"); //未稅金額(9)
                                            oBillsAdd.BillAmount = GetObjectValue(jo, "AmountTaxSum"); //帳款金額(10)
                                            oBillsAdd.PaymentAmount = @"0"; //收付金額(11)
                                            oBillsAdd.Allowance = @"0"; //折讓金額(12)
                                            oBillsAdd.DebtAmount = @"0"; //呆帳金額(13)
                                            oBillsAdd.ExchangeAmount = @"0"; //匯兌損益金額(14)
                                            oBillsAdd.Settle = @"N"; //結清否(15)
                                            oBillsAdd.InvoiceStartNumber = @""; //發票號碼(起)(16)
                                            oBillsAdd.InvoiceEndNumber = @"";//發票號碼(迄)(17)
                                            oBillsAdd.Category = @"";//傳票類別(18)
                                            oBillsAdd.OrderNo = @"";//訂單單號(19)
                                            oBillsAdd.ClosingNote = @"N"; //結帳註記(20)
                                            oBillsAdd.GeneralInvoiceNumber = @""; //立帳總帳傳票號碼(21)
                                            oBillsAdd.GeneralSerialNumber = @""; //立帳總帳傳票序號(22)
                                            oBillsAdd.Remark1 = @""; //備註一(30C)(23)
                                            oBillsAdd.AccountSource = @"0"; //帳款來源(24)
                                            oBillsAdd.UpdateDate = @""; //更新日期(25)
                                            oBillsAdd.UpdatePersonnel = @""; //更新人員(26)
                                            oBillsAdd.DepartmentSiteNumber = oOpm.DepartmentID; //部門\ 工地編號(27)
                                            if (!string.IsNullOrWhiteSpace(oOpm.ExhibitionNO))
                                            {
                                                var oExhibition = db.Queryable<OTB_OPM_Exhibition>().Single(it => it.SN == oOpm.ExhibitionNO.ObjToInt());
                                                oBillsAdd.ProjectNumber = oExhibition == null ? @"" : oExhibition.ExhibitionCode; //專案\ 項目編號(28)
                                            }
                                            else
                                            {
                                                oBillsAdd.ProjectNumber = @""; //專案\ 項目編號(28)
                                            }
                                            oBillsAdd.TransferBNotes = @""; //轉B 帳註記(29)
                                            oBillsAdd.ABNumber = @""; //A|B 帳唯一流水號(30)
                                            oBillsAdd.EnterNumber = @""; //進銷單號(31)
                                            var sCurrency = GetObjectValue(jo, "Currency");
                                            if (other.OrgID == "SG")
                                            {
                                                if (sCurrency == "RMB")
                                                {
                                                    sCurrency = "";
                                                }
                                            }
                                            else
                                            {
                                                if (sCurrency == "NTD")
                                                {
                                                    sCurrency = "";
                                                }
                                            }
                                            oBillsAdd.ForeignCurrencyCode = sCurrency; //外幣代號(32)
                                            var sExchangeRate = GetObjectValue(jo, "ExchangeRate");
                                            oBillsAdd.ExchangeRate = sExchangeRate; //匯率(33)
                                            oBillsAdd.ForeignAmount = (decimal.Parse(GetObjectValue(jo, "AmountTaxSum")) * decimal.Parse(sExchangeRate == @"" ? @"1" : sExchangeRate)).ToString(); //外幣金額(34)
                                            oBillsAdd.PayAmount = @"0"; //收付沖抵金額(35)
                                            oBillsAdd.RefundAmount = @"0"; //退款金額(36)
                                            oBillsAdd.PaymentTerms = @""; //收付條件(37)
                                            oBillsAdd.AccountDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")); //帳款日期(38)
                                            oBillsAdd.DCreditCardNumber = @""; //預設信用卡號(39)
                                            oBillsAdd.ClosingDate = @""; //結帳日期(40)
                                            oBillsAdd.CusField1 = @""; //自定義欄位一(41)
                                            oBillsAdd.CusField2 = @""; //自定義欄位二(42)
                                            oBillsAdd.CusField3 = @""; //自定義欄位三(43)
                                            oBillsAdd.CusField4 = @""; //自定義欄位四(44)
                                            oBillsAdd.CusField5 = @""; //自定義欄位五(45)
                                            oBillsAdd.CusField6 = @"0"; //自定義欄位六(46)
                                            oBillsAdd.CusField7 = @"0"; //自定義欄位七(47)
                                            oBillsAdd.CusField8 = @"0"; //自定義欄位八(48)
                                            oBillsAdd.CusField9 = @"0"; //自定義欄位九(49)
                                            oBillsAdd.CusField10 = @"0";  //自定義欄位十(50)
                                            oBillsAdd.CusField11 = @""; //自定義欄位十一(51)
                                            oBillsAdd.CusField12 = @""; //自定義欄位十二(52)
                                            oBillsAdd.Remark2 = @""; //備註二(M)(53)
                                            oBillsAdd.TWNOTaxAmount = GetObjectValue(jo, "AmountSum"); //台幣未稅金額(54)
                                            oBillsAdd.TWAmount = GetObjectValue(jo, "AmountTaxSum"); //台幣帳款金額(55)
                                            oBillsAdd.CreateUser = other.ModifyUser;
                                            oBillsAdd.CreateDate = ((DateTime)other.ModifyDate).ToString(@"yyyy/MM/dd HH:mm:ss");
                                            oBillsAdd.BillFirstCheckDate = string.IsNullOrEmpty(GetObjectValue(jo, "BillFirstCheckDate")) ? DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss") : GetObjectValue(jo, "BillFirstCheckDate");
                                            oBillsAdd.Advance = GetObjectValue(jo, "Advance"); //預收
                                            oBillsAdd.TaxSum = GetObjectValue(jo, "TaxSum"); //稅額
                                            oBillsAdd.TotalReceivable = GetObjectValue(jo, "TotalReceivable"); //總應收
                                            oBillsAdd.IsRetn = string.IsNullOrEmpty(GetObjectValue(jo, "IsRetn")) ? @"N" : GetObjectValue(jo, "IsRetn"); //是否為退運
                                            oBillsAdd.Url = sUrl; //Url
                                            db.Insertable(oBillsAdd).ExecuteCommand();

                                            if (dicSucceccCount.Keys.Contains("其他審核"))
                                            {
                                                dicSucceccCount["其他審核"] = dicSucceccCount["其他審核"] + 1;
                                            }
                                            else
                                            {
                                                dicSucceccCount.Add("其他審核", 1);
                                            }

                                            #endregion
                                        }
                                        else if (sAuditVal == "5")
                                        {
                                            #region 過帳

                                            var oBillsAdd = new OTB_OPM_Bills
                                            {
                                                OrgID = other.OrgID,
                                                BillNO = sBillNo, //帳款號碼(1)
                                                CheckDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")),//對帳日期(2)
                                                BillType = @"20",//帳別(收付)(3)
                                                CustomerCode = oPayer.CustomerNO //客戶供應商代號(4)
                                            };
                                            var sResponsiblePerson = oOpm.ResponsiblePerson.Split('.')[0];
                                            oBillsAdd.ResponsiblePersonCode = Common.CutByteString(sResponsiblePerson, 11); //業務員代號(5)
                                            oBillsAdd.ResponsiblePersonFullCode = oOpm.ResponsiblePerson; //業務員全代號
                                            oBillsAdd.LastGetBillDate = @""; //最近收付日(6)
                                            oBillsAdd.LastGetBillNO = @""; //最近收付單號(7)
                                            oBillsAdd.TaxType = decimal.Parse(GetObjectValue(jo, "TaxSum").Replace(@",", @"")) > 0 ? @"5" : @"6";//稅別(8)
                                            oBillsAdd.NOTaxAmount = GetObjectValue(jo, "AmountSum"); //未稅金額(9)
                                            oBillsAdd.BillAmount = GetObjectValue(jo, "AmountTaxSum"); //帳款金額(10)
                                            oBillsAdd.PaymentAmount = @"0"; //收付金額(11)
                                            oBillsAdd.Allowance = @"0"; //折讓金額(12)
                                            oBillsAdd.DebtAmount = @"0"; //呆帳金額(13)
                                            oBillsAdd.ExchangeAmount = @"0"; //匯兌損益金額(14)
                                            oBillsAdd.Settle = @"N"; //結清否(15)
                                            oBillsAdd.InvoiceStartNumber = GetObjectValue(jo, "InvoiceNumber"); //發票號碼(起)(16)
                                            oBillsAdd.InvoiceEndNumber = GetObjectValue(jo, "InvoiceNumber");//發票號碼(迄)(17)
                                            oBillsAdd.Category = @"";//傳票類別(18)
                                            oBillsAdd.OrderNo = @"";//訂單單號(19)
                                            oBillsAdd.ClosingNote = @"N"; //結帳註記(20)
                                            oBillsAdd.GeneralInvoiceNumber = @""; //立帳總帳傳票號碼(21)
                                            oBillsAdd.GeneralSerialNumber = @""; //立帳總帳傳票序號(22)
                                            oBillsAdd.Remark1 = @""; //備註一(30C)(23)
                                            oBillsAdd.AccountSource = @"0"; //帳款來源(24)
                                            oBillsAdd.UpdateDate = @""; //更新日期(25)
                                            oBillsAdd.UpdatePersonnel = @""; //更新人員(26)
                                            oBillsAdd.DepartmentSiteNumber = oOpm.DepartmentID; //部門\ 工地編號(27)
                                            if (!string.IsNullOrWhiteSpace(oOpm.ExhibitionNO))
                                            {
                                                var oExhibition = db.Queryable<OTB_OPM_Exhibition>().Single(it => it.SN == oOpm.ExhibitionNO.ObjToInt());
                                                oBillsAdd.ProjectNumber = oExhibition == null ? @"" : oExhibition.ExhibitionCode; //專案\ 項目編號(28)
                                            }
                                            else
                                            {
                                                oBillsAdd.ProjectNumber = @""; //專案\ 項目編號(28)
                                            }
                                            oBillsAdd.TransferBNotes = @""; //轉B 帳註記(29)
                                            oBillsAdd.ABNumber = @""; //A|B 帳唯一流水號(30)
                                            oBillsAdd.EnterNumber = @""; //進銷單號(31)
                                            var sCurrency = GetObjectValue(jo, "Currency");
                                            if (other.OrgID == "SG")
                                            {
                                                if (sCurrency == "RMB")
                                                {
                                                    sCurrency = "";
                                                }
                                            }
                                            else
                                            {
                                                if (sCurrency == "NTD")
                                                {
                                                    sCurrency = "";
                                                }
                                            }
                                            oBillsAdd.ForeignCurrencyCode = sCurrency; //外幣代號(32)
                                            var sExchangeRate = GetObjectValue(jo, "ExchangeRate");
                                            oBillsAdd.ExchangeRate = sExchangeRate; //匯率(33)
                                            oBillsAdd.ForeignAmount = (decimal.Parse(GetObjectValue(jo, "AmountTaxSum")) * decimal.Parse(sExchangeRate == @"" ? @"1" : sExchangeRate)).ToString(); //外幣金額(34)
                                            oBillsAdd.PayAmount = @"0"; //收付沖抵金額(35)
                                            oBillsAdd.RefundAmount = @"0"; //退款金額(36)
                                            oBillsAdd.PaymentTerms = @""; //收付條件(37)
                                            oBillsAdd.AccountDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")); //帳款日期(38)
                                            oBillsAdd.DCreditCardNumber = @""; //預設信用卡號(39)
                                            oBillsAdd.ClosingDate = @""; //結帳日期(40)
                                            oBillsAdd.CusField1 = @""; //自定義欄位一(41)
                                            oBillsAdd.CusField2 = @""; //自定義欄位二(42)
                                            oBillsAdd.CusField3 = @""; //自定義欄位三(43)
                                            oBillsAdd.CusField4 = @""; //自定義欄位四(44)
                                            oBillsAdd.CusField5 = @""; //自定義欄位五(45)
                                            oBillsAdd.CusField6 = @"0"; //自定義欄位六(46)
                                            oBillsAdd.CusField7 = @"0"; //自定義欄位七(47)
                                            oBillsAdd.CusField8 = @"0"; //自定義欄位八(48)
                                            oBillsAdd.CusField9 = @"0"; //自定義欄位九(49)
                                            oBillsAdd.CusField10 = @"0";  //自定義欄位十(50)
                                            oBillsAdd.CusField11 = @""; //自定義欄位十一(51)
                                            oBillsAdd.CusField12 = @""; //自定義欄位十二(52)
                                            oBillsAdd.Remark2 = @""; //備註二(M)(53)
                                            oBillsAdd.TWNOTaxAmount = GetObjectValue(jo, "AmountSum"); //台幣未稅金額(54)
                                            oBillsAdd.TWAmount = GetObjectValue(jo, "AmountTaxSum"); //台幣帳款金額(55)
                                            oBillsAdd.CreateUser = other.ModifyUser;
                                            oBillsAdd.CreateDate = ((DateTime)other.ModifyDate).ToString(@"yyyy/MM/dd HH:mm:ss");
                                            oBillsAdd.BillFirstCheckDate = string.IsNullOrEmpty(GetObjectValue(jo, "BillFirstCheckDate")) ? DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss") : GetObjectValue(jo, "BillFirstCheckDate");
                                            oBillsAdd.Advance = GetObjectValue(jo, "Advance"); //預收
                                            oBillsAdd.TaxSum = GetObjectValue(jo, "TaxSum"); //稅額
                                            oBillsAdd.TotalReceivable = GetObjectValue(jo, "TotalReceivable"); //總應收
                                            oBillsAdd.IsRetn = string.IsNullOrEmpty(GetObjectValue(jo, "IsRetn")) ? @"N" : GetObjectValue(jo, "IsRetn"); //是否為退運
                                            oBillsAdd.Url = sUrl; //Url
                                            db.Insertable(oBillsAdd).ExecuteCommand();

                                            if (dicSucceccCount.Keys.Contains("其他過帳"))
                                            {
                                                dicSucceccCount["其他過帳"] = dicSucceccCount["其他過帳"] + 1;
                                            }
                                            else
                                            {
                                                dicSucceccCount.Add("其他過帳", 1);
                                            }

                                            #endregion
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                #endregion

            }

            return sMsg;
        }

        public string OtherTG(string sStartDate, string sEndDate, SqlSugarClient db)
        {
            string sMsg = null;
            DateTime dtSettingStartDate = Convert.ToDateTime(sStartDate);
            DateTime dtSettingEnd = Convert.ToDateTime(sEndDate);

            if (ExcOtherTG || BillsNo.Any())
            {

                #region 其他(駒驛)

                var data6 = db.Queryable<OTB_OPM_OtherExhibitionTG>()
                .Where(x => x.ModifyDate <= SqlFunc.ToDate(sEndDate) && x.ModifyDate >= SqlFunc.ToDate(sStartDate))
                .ToList();

                foreach (OTB_OPM_OtherExhibitionTG OtherTG in data6)
                {
                    //解析bill
                    if (!string.IsNullOrEmpty(OtherTG.Bills))
                    {
                        JArray ja = JArray.Parse(OtherTG.Bills);

                        if (ja.Count > 0)
                        {
                            var sdb = new SimpleClient<OTB_OPM_OtherExhibitionTG>(db);
                            var oOpm = sdb.GetById(OtherTG.Guid);
                            if (oOpm == null)
                            {
                                sMsg = $"其他(駒驛)GUID:{ OtherTG.Guid } => 系統找不到對應的基本資料,請核查!";
                                break;
                            }

                            foreach (JObject jo in ja.OfType<JObject>())
                            {
                                string sBillNo = GetObjectValue(jo, "BillNO");
                                string sAuditVal = GetObjectValue(jo, "AuditVal");
                                string sBillCheckDate = GetObjectValue(jo, "BillCheckDate");
                                string sPayer = GetObjectValue(jo, "Payer");
                                string sUrl = @"OtherExhibitionTG_Upd|?Action=Upd&GoTab=3&Guid=" + oOpm.Guid + @"&BillNO=" + sBillNo;
                                DateTime dtCreateDate;

                                if (BillsNo.Any() && !BillsNo.Contains(sBillNo))
                                {
                                    continue;
                                }

                                var oPayer = new OTB_CRM_Customers();
                                if (!string.IsNullOrEmpty(sPayer))
                                {
                                    oPayer = db.Queryable<OTB_CRM_Customers>().Single(it => it.guid == sPayer);
                                    if (oPayer == null)
                                    {
                                        sMsg = $"其他(駒驛)GUID:{ OtherTG.Guid } => 系統找不到付款人資訊";
                                        break;
                                    }
                                }

                                //狀態4(已銷帳)/6(已作廢)當成已審核拋轉
                                if (sAuditVal == "2" || sAuditVal == "4" || sAuditVal == "6")
                                {
                                    #region 審核

                                    var oBillsAdd = new OTB_OPM_Bills
                                    {
                                        OrgID = OtherTG.OrgID,
                                        BillNO = sBillNo, //帳款號碼(1)
                                        CheckDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")),//對帳日期(2)
                                        BillType = @"20",//帳別(收付)(3)
                                        CustomerCode = oPayer.CustomerNO //客戶供應商代號(4)
                                    };

                                    var sResponsiblePerson = oOpm.ResponsiblePerson.Split('.')[0];
                                    oBillsAdd.ResponsiblePersonCode = Common.CutByteString(sResponsiblePerson, 11); //業務員代號(5)
                                    oBillsAdd.ResponsiblePersonFullCode = oOpm.ResponsiblePerson; //業務員全代號
                                    oBillsAdd.LastGetBillDate = @""; //最近收付日(6)
                                    oBillsAdd.LastGetBillNO = @""; //最近收付單號(7)
                                    oBillsAdd.TaxType = decimal.Parse(GetObjectValue(jo, "TaxSum").Replace(@",", @"")) > 0 ? @"5" : @"6";//稅別(8)
                                    oBillsAdd.NOTaxAmount = GetObjectValue(jo, "AmountSum"); //未稅金額(9)
                                    oBillsAdd.BillAmount = GetObjectValue(jo, "AmountTaxSum"); //帳款金額(10)
                                    oBillsAdd.PaymentAmount = @"0"; //收付金額(11)
                                    oBillsAdd.Allowance = @"0"; //折讓金額(12)
                                    oBillsAdd.DebtAmount = @"0"; //呆帳金額(13)
                                    oBillsAdd.ExchangeAmount = @"0"; //匯兌損益金額(14)
                                    oBillsAdd.Settle = @"N"; //結清否(15)
                                    oBillsAdd.InvoiceStartNumber = @""; //發票號碼(起)(16)
                                    oBillsAdd.InvoiceEndNumber = @"";//發票號碼(迄)(17)
                                    oBillsAdd.Category = @"";//傳票類別(18)
                                    oBillsAdd.OrderNo = @"";//訂單單號(19)
                                    oBillsAdd.ClosingNote = @"N"; //結帳註記(20)
                                    oBillsAdd.GeneralInvoiceNumber = @""; //立帳總帳傳票號碼(21)
                                    oBillsAdd.GeneralSerialNumber = @""; //立帳總帳傳票序號(22)
                                    oBillsAdd.Remark1 = @""; //備註一(30C)(23)
                                    oBillsAdd.AccountSource = @"0"; //帳款來源(24)
                                    oBillsAdd.UpdateDate = @""; //更新日期(25)
                                    oBillsAdd.UpdatePersonnel = @""; //更新人員(26)
                                    oBillsAdd.DepartmentSiteNumber = oOpm.DepartmentID; //部門\ 工地編號(27)
                                    if (!string.IsNullOrWhiteSpace(oOpm.ExhibitionNO))
                                    {
                                        var oExhibition = db.Queryable<OTB_OPM_Exhibition>().Single(it => it.SN == oOpm.ExhibitionNO.ObjToInt());
                                        oBillsAdd.ProjectNumber = oExhibition == null ? @"" : oExhibition.ExhibitionCode; //專案\ 項目編號(28)
                                    }
                                    else
                                    {
                                        oBillsAdd.ProjectNumber = @""; //專案\ 項目編號(28)
                                    }
                                    oBillsAdd.TransferBNotes = @""; //轉B 帳註記(29)
                                    oBillsAdd.ABNumber = @""; //A|B 帳唯一流水號(30)
                                    oBillsAdd.EnterNumber = @""; //進銷單號(31)
                                    var sCurrency = GetObjectValue(jo, "Currency");
                                    if (OtherTG.OrgID == "SG")
                                    {
                                        if (sCurrency == "RMB")
                                        {
                                            sCurrency = "";
                                        }
                                    }
                                    else
                                    {
                                        if (sCurrency == "NTD")
                                        {
                                            sCurrency = "";
                                        }
                                    }
                                    oBillsAdd.ForeignCurrencyCode = sCurrency; //外幣代號(32)
                                    var sExchangeRate = GetObjectValue(jo, "ExchangeRate");
                                    oBillsAdd.ExchangeRate = sExchangeRate; //匯率(33)
                                    oBillsAdd.ForeignAmount = (decimal.Parse(GetObjectValue(jo, "AmountTaxSum")) * decimal.Parse(sExchangeRate == @"" ? @"1" : sExchangeRate)).ToString(); //外幣金額(34)
                                    oBillsAdd.PayAmount = @"0"; //收付沖抵金額(35)
                                    oBillsAdd.RefundAmount = @"0"; //退款金額(36)
                                    oBillsAdd.PaymentTerms = @""; //收付條件(37)
                                    oBillsAdd.AccountDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")); //帳款日期(38)
                                    oBillsAdd.DCreditCardNumber = @""; //預設信用卡號(39)
                                    oBillsAdd.ClosingDate = @""; //結帳日期(40)
                                    oBillsAdd.CusField1 = @""; //自定義欄位一(41)
                                    oBillsAdd.CusField2 = @""; //自定義欄位二(42)
                                    oBillsAdd.CusField3 = @""; //自定義欄位三(43)
                                    oBillsAdd.CusField4 = @""; //自定義欄位四(44)
                                    oBillsAdd.CusField5 = @""; //自定義欄位五(45)
                                    oBillsAdd.CusField6 = @"0"; //自定義欄位六(46)
                                    oBillsAdd.CusField7 = @"0"; //自定義欄位七(47)
                                    oBillsAdd.CusField8 = @"0"; //自定義欄位八(48)
                                    oBillsAdd.CusField9 = @"0"; //自定義欄位九(49)
                                    oBillsAdd.CusField10 = @"0";  //自定義欄位十(50)
                                    oBillsAdd.CusField11 = @""; //自定義欄位十一(51)
                                    oBillsAdd.CusField12 = @""; //自定義欄位十二(52)
                                    oBillsAdd.Remark2 = @""; //備註二(M)(53)
                                    oBillsAdd.TWNOTaxAmount = GetObjectValue(jo, "AmountSum"); //台幣未稅金額(54)
                                    oBillsAdd.TWAmount = GetObjectValue(jo, "AmountTaxSum"); //台幣帳款金額(55)
                                    oBillsAdd.CreateUser = OtherTG.ModifyUser;
                                    oBillsAdd.CreateDate = ((DateTime)OtherTG.ModifyDate).ToString(@"yyyy/MM/dd HH:mm:ss");
                                    oBillsAdd.BillFirstCheckDate = string.IsNullOrEmpty(GetObjectValue(jo, "BillFirstCheckDate")) ? DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss") : GetObjectValue(jo, "BillFirstCheckDate");
                                    oBillsAdd.Advance = GetObjectValue(jo, "Advance"); //預收
                                    oBillsAdd.TaxSum = GetObjectValue(jo, "TaxSum"); //稅額
                                    oBillsAdd.TotalReceivable = GetObjectValue(jo, "TotalReceivable"); //總應收
                                    oBillsAdd.IsRetn = string.IsNullOrEmpty(GetObjectValue(jo, "IsRetn")) ? @"N" : GetObjectValue(jo, "IsRetn"); //是否為退運
                                    oBillsAdd.Url = sUrl; //Url
                                    db.Insertable(oBillsAdd).ExecuteCommand();

                                    if (dicSucceccCount.Keys.Contains("其他(駒驛)審核"))
                                    {
                                        dicSucceccCount["其他(駒驛)審核"] = dicSucceccCount["其他(駒驛)審核"] + 1;
                                    }
                                    else
                                    {
                                        dicSucceccCount.Add("其他(駒驛)審核", 1);
                                    }

                                    #endregion
                                }
                                else if (sAuditVal == "5")
                                {
                                    #region 過帳

                                    var oBillsAdd = new OTB_OPM_Bills
                                    {
                                        OrgID = OtherTG.OrgID,
                                        BillNO = sBillNo, //帳款號碼(1)
                                        CheckDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")),//對帳日期(2)
                                        BillType = @"20",//帳別(收付)(3)
                                        CustomerCode = oPayer.CustomerNO //客戶供應商代號(4)
                                    };
                                    var sResponsiblePerson = oOpm.ResponsiblePerson.Split('.')[0];
                                    oBillsAdd.ResponsiblePersonCode = Common.CutByteString(sResponsiblePerson, 11); //業務員代號(5)
                                    oBillsAdd.ResponsiblePersonFullCode = oOpm.ResponsiblePerson; //業務員全代號
                                    oBillsAdd.LastGetBillDate = @""; //最近收付日(6)
                                    oBillsAdd.LastGetBillNO = @""; //最近收付單號(7)
                                    oBillsAdd.TaxType = decimal.Parse(GetObjectValue(jo, "TaxSum").Replace(@",", @"")) > 0 ? @"5" : @"6";//稅別(8)
                                    oBillsAdd.NOTaxAmount = GetObjectValue(jo, "AmountSum"); //未稅金額(9)
                                    oBillsAdd.BillAmount = GetObjectValue(jo, "AmountTaxSum"); //帳款金額(10)
                                    oBillsAdd.PaymentAmount = @"0"; //收付金額(11)
                                    oBillsAdd.Allowance = @"0"; //折讓金額(12)
                                    oBillsAdd.DebtAmount = @"0"; //呆帳金額(13)
                                    oBillsAdd.ExchangeAmount = @"0"; //匯兌損益金額(14)
                                    oBillsAdd.Settle = @"N"; //結清否(15)
                                    oBillsAdd.InvoiceStartNumber = GetObjectValue(jo, "InvoiceNumber"); //發票號碼(起)(16)
                                    oBillsAdd.InvoiceEndNumber = GetObjectValue(jo, "InvoiceNumber");//發票號碼(迄)(17)
                                    oBillsAdd.Category = @"";//傳票類別(18)
                                    oBillsAdd.OrderNo = @"";//訂單單號(19)
                                    oBillsAdd.ClosingNote = @"N"; //結帳註記(20)
                                    oBillsAdd.GeneralInvoiceNumber = @""; //立帳總帳傳票號碼(21)
                                    oBillsAdd.GeneralSerialNumber = @""; //立帳總帳傳票序號(22)
                                    oBillsAdd.Remark1 = @""; //備註一(30C)(23)
                                    oBillsAdd.AccountSource = @"0"; //帳款來源(24)
                                    oBillsAdd.UpdateDate = @""; //更新日期(25)
                                    oBillsAdd.UpdatePersonnel = @""; //更新人員(26)
                                    oBillsAdd.DepartmentSiteNumber = oOpm.DepartmentID; //部門\ 工地編號(27)
                                    if (!string.IsNullOrWhiteSpace(oOpm.ExhibitionNO))
                                    {
                                        var oExhibition = db.Queryable<OTB_OPM_Exhibition>().Single(it => it.SN == oOpm.ExhibitionNO.ObjToInt());
                                        oBillsAdd.ProjectNumber = oExhibition == null ? @"" : oExhibition.ExhibitionCode; //專案\ 項目編號(28)
                                    }
                                    else
                                    {
                                        oBillsAdd.ProjectNumber = @""; //專案\ 項目編號(28)
                                    }
                                    oBillsAdd.TransferBNotes = @""; //轉B 帳註記(29)
                                    oBillsAdd.ABNumber = @""; //A|B 帳唯一流水號(30)
                                    oBillsAdd.EnterNumber = @""; //進銷單號(31)
                                    var sCurrency = GetObjectValue(jo, "Currency");
                                    if (OtherTG.OrgID == "SG")
                                    {
                                        if (sCurrency == "RMB")
                                        {
                                            sCurrency = "";
                                        }
                                    }
                                    else
                                    {
                                        if (sCurrency == "NTD")
                                        {
                                            sCurrency = "";
                                        }
                                    }
                                    oBillsAdd.ForeignCurrencyCode = sCurrency; //外幣代號(32)
                                    var sExchangeRate = GetObjectValue(jo, "ExchangeRate");
                                    oBillsAdd.ExchangeRate = sExchangeRate; //匯率(33)
                                    oBillsAdd.ForeignAmount = (decimal.Parse(GetObjectValue(jo, "AmountTaxSum")) * decimal.Parse(sExchangeRate == @"" ? @"1" : sExchangeRate)).ToString(); //外幣金額(34)
                                    oBillsAdd.PayAmount = @"0"; //收付沖抵金額(35)
                                    oBillsAdd.RefundAmount = @"0"; //退款金額(36)
                                    oBillsAdd.PaymentTerms = @""; //收付條件(37)
                                    oBillsAdd.AccountDate = Common.FnToTWDate(GetObjectValue(jo, "BillFirstCheckDate")); //帳款日期(38)
                                    oBillsAdd.DCreditCardNumber = @""; //預設信用卡號(39)
                                    oBillsAdd.ClosingDate = @""; //結帳日期(40)
                                    oBillsAdd.CusField1 = @""; //自定義欄位一(41)
                                    oBillsAdd.CusField2 = @""; //自定義欄位二(42)
                                    oBillsAdd.CusField3 = @""; //自定義欄位三(43)
                                    oBillsAdd.CusField4 = @""; //自定義欄位四(44)
                                    oBillsAdd.CusField5 = @""; //自定義欄位五(45)
                                    oBillsAdd.CusField6 = @"0"; //自定義欄位六(46)
                                    oBillsAdd.CusField7 = @"0"; //自定義欄位七(47)
                                    oBillsAdd.CusField8 = @"0"; //自定義欄位八(48)
                                    oBillsAdd.CusField9 = @"0"; //自定義欄位九(49)
                                    oBillsAdd.CusField10 = @"0";  //自定義欄位十(50)
                                    oBillsAdd.CusField11 = @""; //自定義欄位十一(51)
                                    oBillsAdd.CusField12 = @""; //自定義欄位十二(52)
                                    oBillsAdd.Remark2 = @""; //備註二(M)(53)
                                    oBillsAdd.TWNOTaxAmount = GetObjectValue(jo, "AmountSum"); //台幣未稅金額(54)
                                    oBillsAdd.TWAmount = GetObjectValue(jo, "AmountTaxSum"); //台幣帳款金額(55)
                                    oBillsAdd.CreateUser = OtherTG.ModifyUser;
                                    oBillsAdd.CreateDate = ((DateTime)OtherTG.ModifyDate).ToString(@"yyyy/MM/dd HH:mm:ss");
                                    oBillsAdd.BillFirstCheckDate = string.IsNullOrEmpty(GetObjectValue(jo, "BillFirstCheckDate")) ? DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss") : GetObjectValue(jo, "BillFirstCheckDate");
                                    oBillsAdd.Advance = GetObjectValue(jo, "Advance"); //預收
                                    oBillsAdd.TaxSum = GetObjectValue(jo, "TaxSum"); //稅額
                                    oBillsAdd.TotalReceivable = GetObjectValue(jo, "TotalReceivable"); //總應收
                                    oBillsAdd.IsRetn = string.IsNullOrEmpty(GetObjectValue(jo, "IsRetn")) ? @"N" : GetObjectValue(jo, "IsRetn"); //是否為退運
                                    oBillsAdd.Url = sUrl; //Url
                                    db.Insertable(oBillsAdd).ExecuteCommand();

                                    if (dicSucceccCount.Keys.Contains("其他(駒驛)過帳"))
                                    {
                                        dicSucceccCount["其他(駒驛)過帳"] = dicSucceccCount["其他(駒驛)過帳"] + 1;
                                    }
                                    else
                                    {
                                        dicSucceccCount.Add("其他(駒驛)過帳", 1);
                                    }

                                    #endregion
                                }
                            }
                        }
                    }
                }

                #endregion

            }

            return sMsg;
        }

        public string Exhibition(string sStartDate, string sEndDate, SqlSugarClient db, bool ReturnBills = false)
        {
            string sMsg = null;

            if (ExcExhibtion || ExhibtionsNo.Any())
            {

                #region 專案(展覽)

                var data4 = db.Queryable<OTB_OPM_Exhibition>()
                .Where(x => x.CreateDate <= SqlFunc.ToDate(sEndDate) && x.CreateDate >= SqlFunc.ToDate(sStartDate) && x.IsTransfer == "Y")
                .ToList();

                foreach (OTB_OPM_Exhibition exhibition in data4)
                {
                    if (ExhibtionsNo.Any() && !ExhibtionsNo.Contains(exhibition.ExhibitionCode))
                    {
                        continue;
                    }

                    var oExhibitionsTransferUpd = new OTB_OPM_ExhibitionsTransfer
                    {
                        OrgID = exhibition.OrgID,
                        PrjNO = exhibition.ExhibitionCode,
                        PrjName = Common.CutByteString(exhibition.ExhibitioShotName_TW, 60)
                    };
                    var sCreateUser = exhibition.CreateUser.Split('.')[0];
                    oExhibitionsTransferUpd.PrjCharger = Common.CutByteString(sCreateUser, 11);
                    oExhibitionsTransferUpd.EndDate = @"";
                    db.Insertable(oExhibitionsTransferUpd).ExecuteCommand();

                    if (dicSucceccCount.Keys.Contains("專案(展覽)"))
                    {
                        dicSucceccCount["專案(展覽)"] = dicSucceccCount["專案(展覽)"] + 1;
                    }
                    else
                    {
                        dicSucceccCount.Add("專案(展覽)", 1);
                    }
                }

                #endregion

            }

            return sMsg;
        }

        public string Customer(string sStartDate, string sEndDate, SqlSugarClient db, bool ReturnBills = false)
        {
            string sMsg = null;

            if (ExcCustomer || ExhibtionsNo.Any())
            {

                #region 客戶

                var data5 = db.Queryable<OTB_CRM_Customers>()
                .Where(x => x.CreateDate <= SqlFunc.ToDate(sEndDate) && x.CreateDate >= SqlFunc.ToDate(sStartDate) && x.IsAudit == "Y")
                .ToList();

                foreach (OTB_CRM_Customers cus in data5)
                {
                    var sdb = new SimpleClient<OTB_CRM_Customers>(db);
                    var customer = sdb.GetById(cus.guid);

                    if (customer == null)
                    {
                        sMsg = $"客戶GUID:{ cus.guid }系統找不到對應的客戶資料,請核查!";
                        break;
                    }

                    if (ExhibtionsNo.Any() && !ExhibtionsNo.Contains(customer.CustomerNO))
                    {
                        continue;
                    }

                    var oCustomersTransferAdd = new OTB_CRM_CustomersTransfer();
                    oCustomersTransferAdd.OrgID = customer.OrgID;
                    oCustomersTransferAdd.Feild01 = customer.CustomerNO;
                    oCustomersTransferAdd.Feild02 = @"0";
                    oCustomersTransferAdd.Feild03 = Common.CutByteString(customer.CustomerShotCName, 12);
                    oCustomersTransferAdd.Feild04 = Common.CutByteString(customer.CustomerCName == @"" ? customer.CustomerEName : customer.CustomerCName, 60);
                    oCustomersTransferAdd.Feild05 = @"";
                    oCustomersTransferAdd.Feild06 = @"";
                    oCustomersTransferAdd.Feild07 = customer.UniCode;
                    oCustomersTransferAdd.Feild08 = @"";
                    oCustomersTransferAdd.Feild09 = @"";
                    oCustomersTransferAdd.Feild10 = Common.CutByteString(customer.InvoiceAddress, 60);
                    oCustomersTransferAdd.Feild11 = Common.CutByteString(customer.Address, 60);
                    oCustomersTransferAdd.Feild12 = @"";
                    oCustomersTransferAdd.Feild13 = @"";
                    oCustomersTransferAdd.Feild14 = Common.CutByteString(customer.Telephone, 20);
                    oCustomersTransferAdd.Feild15 = @"";
                    oCustomersTransferAdd.Feild16 = Common.CutByteString(customer.FAX, 20);
                    oCustomersTransferAdd.Feild17 = @"";
                    oCustomersTransferAdd.Feild18 = @"";
                    oCustomersTransferAdd.Feild19 = @"";
                    oCustomersTransferAdd.Feild20 = @"";
                    oCustomersTransferAdd.Feild21 = @"";
                    oCustomersTransferAdd.Feild22 = @"";
                    oCustomersTransferAdd.Feild23 = Common.CutByteString(customer.Memo, 30);
                    oCustomersTransferAdd.Feild24 = @"100";
                    oCustomersTransferAdd.Feild25 = @"";
                    oCustomersTransferAdd.Feild26 = @"";
                    oCustomersTransferAdd.Feild27 = @"100";
                    oCustomersTransferAdd.Feild28 = @"";
                    oCustomersTransferAdd.Feild29 = Common.CutByteString(customer.CreateUser.Split('.')[0], 11);
                    oCustomersTransferAdd.Feild30 = @"";
                    oCustomersTransferAdd.Feild31 = @"";
                    oCustomersTransferAdd.Feild32 = @"";
                    oCustomersTransferAdd.Feild33 = @"";
                    oCustomersTransferAdd.Feild34 = @"";
                    oCustomersTransferAdd.Feild35 = @"";
                    oCustomersTransferAdd.Feild36 = @"";
                    oCustomersTransferAdd.Feild37 = @"B,C".IndexOf(customer.TransactionType) > -1 ? @"6" : @"5";
                    oCustomersTransferAdd.Feild38 = @"2";
                    oCustomersTransferAdd.Feild39 = @"";
                    oCustomersTransferAdd.Feild40 = @"";
                    oCustomersTransferAdd.Feild41 = @"1";
                    oCustomersTransferAdd.Feild42 = @"";
                    oCustomersTransferAdd.Feild43 = @"";
                    oCustomersTransferAdd.Feild44 = @"";
                    oCustomersTransferAdd.Feild45 = @"";
                    oCustomersTransferAdd.Feild46 = @"";
                    oCustomersTransferAdd.Feild47 = @"";
                    oCustomersTransferAdd.Feild48 = @"";
                    oCustomersTransferAdd.Feild49 = @"";
                    oCustomersTransferAdd.Feild50 = @"";
                    oCustomersTransferAdd.Feild51 = @"";
                    oCustomersTransferAdd.Feild52 = @"";
                    oCustomersTransferAdd.Feild53 = @"";
                    oCustomersTransferAdd.Feild54 = @"";
                    oCustomersTransferAdd.Feild55 = @"";
                    oCustomersTransferAdd.Feild56 = @"";
                    oCustomersTransferAdd.Feild57 = @"";
                    oCustomersTransferAdd.Feild58 = customer.CustomerNO;
                    oCustomersTransferAdd.Feild59 = @"";
                    oCustomersTransferAdd.Feild60 = @"";
                    oCustomersTransferAdd.Feild61 = @"";
                    oCustomersTransferAdd.Feild62 = @"";
                    oCustomersTransferAdd.Feild63 = @"";
                    oCustomersTransferAdd.Feild64 = @"";
                    oCustomersTransferAdd.Feild65 = @"";
                    oCustomersTransferAdd.Feild66 = @"";
                    oCustomersTransferAdd.Feild67 = @"";
                    oCustomersTransferAdd.Feild68 = @"";
                    oCustomersTransferAdd.Feild69 = @"";
                    oCustomersTransferAdd.Feild70 = @"";
                    oCustomersTransferAdd.Feild71 = @"";
                    oCustomersTransferAdd.Feild72 = @"";
                    oCustomersTransferAdd.Feild73 = @"";
                    oCustomersTransferAdd.Feild74 = @"";
                    oCustomersTransferAdd.Feild75 = @"";
                    oCustomersTransferAdd.Feild76 = @"";
                    oCustomersTransferAdd.Feild77 = @"";
                    oCustomersTransferAdd.Feild78 = @"";
                    oCustomersTransferAdd.Feild79 = @"";
                    oCustomersTransferAdd.Feild80 = @"";
                    oCustomersTransferAdd.Feild81 = @"";
                    oCustomersTransferAdd.Feild82 = Common.CutByteString(customer.CustomerEName, 120);
                    var sAddress = customer.Address;
                    var cn = new Regex(@"[一-龥]+");//正则表达式 表示汉字范围
                    if (cn.IsMatch(sAddress))
                    {
                        sAddress = @"";
                    }
                    oCustomersTransferAdd.Feild83 = Common.CutByteString(sAddress, 240);
                    oCustomersTransferAdd.Feild84 = @"";
                    oCustomersTransferAdd.Feild85 = @"";
                    oCustomersTransferAdd.Feild86 = @"";
                    oCustomersTransferAdd.Feild87 = @"";
                    oCustomersTransferAdd.Feild88 = @"";
                    oCustomersTransferAdd.Feild89 = @"";
                    oCustomersTransferAdd.Feild90 = @"";
                    oCustomersTransferAdd.Feild91 = @"0";
                    oCustomersTransferAdd.Feild92 = @"0";
                    oCustomersTransferAdd.Feild93 = @"";
                    oCustomersTransferAdd.Feild94 = @"";
                    oCustomersTransferAdd.Feild95 = @"";
                    oCustomersTransferAdd.Feild96 = @"";
                    oCustomersTransferAdd.Feild97 = @"";
                    oCustomersTransferAdd.Feild98 = @"";
                    oCustomersTransferAdd.Feild99 = @"";
                    db.Insertable(oCustomersTransferAdd).ExecuteCommand();

                    if (dicSucceccCount.Keys.Contains("客戶"))
                    {
                        dicSucceccCount["客戶"] = dicSucceccCount["客戶"] + 1;
                    }
                    else
                    {
                        dicSucceccCount.Add("客戶", 1);
                    }

                }

                #endregion

            }

            return sMsg;
        }


        public string GetObjectValue(JObject i_oJObject, string i_sColumn)
        {
            string sReturnValue = string.Empty;

            if (i_oJObject[i_sColumn] != null)
            {
                sReturnValue = i_oJObject[i_sColumn].ToString();
            }

            return sReturnValue;
        }

        public bool StringConvertBool(string i_sValue)
        {
            bool blReturn = false;

            bool.TryParse((i_sValue as string ?? string.Empty), out blReturn);

            return blReturn;
        }
    }
}