| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370 | using Dm;using Npgsql.Replication.PgOutput;using OASystem.Domain.Entities.Financial;using OASystem.Domain.ViewModels.System;using System;using System.Collections.Generic;using System.Globalization;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml.Linq;namespace OASystem.Domain.ViewModels.Financial{    /// <summary>    /// 日付申请 View    /// </summary>    public class Fin_DailyFeePaymentView : Fin_DailyFeePayment    { }    public class Fin_DailyFeePaymentPageCount    {        /// <summary>        /// 总条数        /// </summary>        public int Count { get; set; }    }    /// <summary>    /// 日付申请 分页查询View    /// </summary>    public class Fin_DailyFeePaymentPageListView    {        /// <summary>        /// 是否选中        /// </summary>        public bool IsChecked { get; set; }        /// <summary>        /// 行号        /// </summary>        public int RowNumber { get; set; }        /// <summary>        /// Id        /// </summary>        public int Id { get; set; }        /// <summary>        /// 公司Id        /// </summary>        public int CompanyId { get; set; }        /// <summary>        /// 公司名称        /// </summary>        public string? CompanyName { get; set; }        /// <summary>        /// 费用描述        /// </summary>        public string? Instructions { get; set; }        /// <summary>        /// 费用总计        /// </summary>        public decimal? SumPrice { get; set; }        /// <summary>        /// 申请人Id        /// </summary>        public int CreateUserId { get; set; }        /// <summary>        /// 申请人姓名        /// </summary>        public string? CreateUser { get; set; }        /// <summary>        /// 申请时间        /// </summary>        public DateTime CreateTime { get; set; }        /// <summary>        /// 财务审核        /// </summary>        public int FAudit { get; set; }        /// <summary>        /// 财务 审核状态        /// </summary>        public string? FAuditDesc        {            get            {                string str = "未审核";                if (FAudit == 0) str = "未审核";                else if (FAudit == 1)                {                    str = "已通过";                    FAuditName = "朱成梅";                }                else if (FAudit == 2)                {                    str = "未通过";                    FAuditName = "朱成梅";                }                return str;            }        }        /// <summary>        /// 财务审核人姓名        /// </summary>        public string? FAuditName { get; set; } = "无";        /// <summary>        /// 总经理审核        /// </summary>        public int MAudit { get; set; }        /// <summary>        /// 总经理 审核状态        /// </summary>        public string? MAuditDesc        {            get            {                string str = "未审核";                if (MAudit == 0) str = "未审核";                else if (MAudit == 1) { str = "已通过"; MAuditName = "张海麟"; }                else if (MAudit == 2) { str = "未通过"; MAuditName = "张海麟"; }                return str;            }        }        /// <summary>        /// 总经理审核姓名        /// </summary>        public string? MAuditName { get; set; } = "无";        /// <summary>        /// 费用类型        /// </summary>        public int PriceTypeId { get; set; }        /// <summary>        /// 支付标识 0,1        /// </summary>        public int IsPay { get; set; }    }    /// <summary>    /// 日服申请 分页    /// </summary>    public class Fin_DailyFeePaymentPage    {        /// <summary>        /// 总条数        /// </summary>        public int? Rows { get; set; }        public List<Fin_DailyFeePaymentPageListView> Data { get; set; }    }    /// <summary>    /// 日付申请费用明细    /// </summary>    public class Fin_DailyFeePaymentContentInfolView    {        public int Id { get; set; }        /// <summary>        /// 费用名称        /// </summary>        public string PriceName { get; set; }        /// <summary>        /// 数量单价        /// </summary>        public decimal Quantity { get; set; }        /// <summary>        /// 费用单价        /// </summary>        public decimal Price { get; set; }        /// <summary>        /// 当前总计        /// </summary>        public decimal ItemTotal { get; set; }        /// <summary>        /// 备注        /// </summary>        public string Remark { get; set; }        /// <summary>        /// 备注描述        /// </summary>        public string RemaksDescription { get; set; }        /// <summary>        /// Excel备注描述        /// </summary>        public string ExcelRemaksDescription { get; set; }    }    public class Fin_DailyFeePaymentInfolView    {        public int Id { get; set; }        public int CompanyId { get; set; }        public int TransferTypeId { get; set; }        public int PriceTypeId { get; set; }        public string Instructions { get; set; }        public decimal SumPrice { get; set; }        public int CreateUserId { get; set; }        /// <summary>        /// 财务审核        /// </summary>        public int FAudit { get; set; }        public string FAuditDesc        {            get            {                string str = "未审核";                if (FAudit == 0) str = "未审核";                else if (FAudit == 1) str = "已通过";                else if (FAudit == 2) str = "未通过";                return str;            }        }        /// <summary>        /// 总经理审核        /// </summary>        public int MAudit { get; set; }        public string MAuditDesc        {            get            {                string str = "未审核";                if (MAudit == 0) str = "未审核";                else if (MAudit == 1) str = "已通过";                else if (MAudit == 2) str = "未通过";                return str;            }        }        public DateTime CreateTime { get; set; }        public List<Fin_DailyFeePaymentContentInfolView> FeeContents { get; set; }    }    /// <summary>    /// android 详情    /// </summary>    public class Fin_DailyFeePaymentInfoAndroidlView    {        public int Id { get; set; }        public int CompanyId { get; set; }        public int TransferTypeId { get; set; }        public int PriceTypeId { get; set; }        public string Instructions { get; set; }        public decimal SumPrice { get; set; }        public int CreateUserId { get; set; }        public List<Fin_DailyFeePaymentContentInfolView> FeeContents { get; set; }    }    /// <summary>    /// 费用类型    /// </summary>    public class Fin_DailyFeePaymentPagePriceTypeView    {        /// <summary>        /// 类型Id        /// </summary>        public int Id { get; set; }        /// <summary>        /// 名称        /// </summary>        public string Name { get; set; }    }    /// <summary>    /// 费用子类型    /// </summary>    public class Fin_DailyFeePaymentPagePriceSubTypeView    {        /// <summary>        /// 费用类型Id        /// </summary>        public int STid { get; set; }        /// <summary>        /// 子类型Id        /// </summary>        public int Id { get; set; }        /// <summary>        /// 子类型名称        /// </summary>        public string Name { get; set; }    }    /// <summary>    /// 费用类型数据源    /// </summary>    public class Fin_DailyFeePaymentPagePriceTypeDataView    {        /// <summary>        /// 费用类型        /// </summary>        public List<Fin_DailyFeePaymentPagePriceTypeView>? FeeTypeData { get; set; }        /// <summary>        /// 费用子类型        /// </summary>        public List<Fin_DailyFeePaymentPagePriceSubTypeView>? FeeSubTypeData { get; set; }        /// <summary>        /// 用户名称        /// </summary>        public List<UserNameView>? UserNameData { get; set; }        /// <summary>        /// 费用标识类型        /// </summary>        public List<Fin_DailyFeePaymentPagePriceTypeView>? FeeMarkTypeData { get; set; }        /// <summary>        /// 费用子类型        /// </summary>        public List<Fin_DailyFeePaymentPagePriceSubTypeView>? FeeMarkSubTypeData { get; set; }        /// <summary>        /// 公司名称        /// </summary>        public List<CompanyNameView>? CompanyNameData { get; set; }    }    /// <summary>    /// 类型数据源    /// </summary>    public class DailyFeePaymentDataSourceView : Fin_DailyFeePaymentPagePriceTypeView    {        public List<Fin_DailyFeePaymentPagePriceSubTypeView> SubDatas { get; set; }    }    public class tree_Fin_DailyFeePaymentPageListView : Fin_DailyFeePaymentPageListView    {        public List<Fin_DailyFeePaymentContentInfolView> childList { get; set; }        public string priceTypeStr { get; set; }        public int transferTypeId { get; set; }        public string transferTypeIdStr { get; set; }        /// <summary>        /// 公转:62,私转:63 --2024年4月9日 16:49:46 0,1        /// </summary>        public int transferParentId { get; set; }        public string transferParentIdStr { get; set; }    }    public class tree_Fin_DailyFeePaymentResult : tree_Fin_DailyFeePaymentPageListView    {        public decimal gz { get; set; } = 0M;        public decimal sz { get; set; } = 0M;        public List<tree_Fin_DailyFeePaymentPageListView> dataList { get; set; }    }    /// <summary>    /// 团组相关费用    /// </summary>    public class tree_Group_DailyFeePaymentResult    {        public decimal gz { get; set; } = 0M;        public decimal sz { get; set; } = 0M;        public List<tree_Group_DailyFeePaymentPageListView> dataList { get; set; }    }    /// <summary>    /// 团组相关费用 List    /// </summary>    public class tree_Group_DailyFeePaymentPageListView    {        public string Id { get; set; }        public string GroupName { get; set; }        /// <summary>        /// 费用所属公司Id        /// </summary>        public int CompanyId { get; set; }        /// <summary>        /// 费用所属公司        /// </summary>        public string ConpanyName { get; set; }        /// <summary>        /// 团组总计金额        /// </summary>        public decimal CNYTotalAmount { get; set; }        public List<Group_DailyFeePaymentContentInfolView> ChildList { get; set; }    }    public class CompanyInfo    {        public int Id { get; set; }        public string ConpanyName { get; set; }    }    public class Group_DailyFeePaymentContentInfolView    {        /// <summary>        /// 是否选中        /// </summary>        public bool IsChecked { get; set; }        public int Id { get; set; }        /// <summary>        /// 酒店费用子类 Id        /// </summary>        public int HotelSubId { get; set; } = -1;        /// <summary>        /// 支付方式        /// </summary>        public string PayType { get; set; }        /// <summary>        /// 转账标识        /// </summary>        public string TransferMark { get; set; }        /// <summary>        /// 序号        /// </summary>        public int RowNumber { get; set; }        /// <summary>        /// 申请人        /// </summary>        public string Applicant { get; set; }        /// <summary>        /// 申请时间        /// </summary>        public string ApplicantDt { get; set; }        /// <summary>        /// 收款方        /// </summary>        public string Payee { get; set; }        /// <summary>        /// 费用名称        /// </summary>        public string PriceName { get; set; }        /// <summary>        /// 费用所属模块        /// </summary>        public string ModuleName { get; set; }        /// <summary>        /// 付款币种        /// </summary>        public string PayCurrCode { get; set; }        /// <summary>        /// 付款金额        /// </summary>        public decimal PaymentAmount { get; set; }        /// <summary>        /// 付款汇率        /// </summary>        public decimal PayRate { get; set; }        /// <summary>        /// 小计人民币金额        /// </summary>        public decimal CNYSubTotalAmount { get; set; }        /// <summary>        /// 费用描述         /// </summary>        public string RemaksDescription { get; set; }        /// <summary>        /// 审核状态        /// 0 未审核 1已通过 2未通过 3 自动审核        /// </summary>        public int AuditStatus { get; set; }    }    public class PaymentRequestCheckedView    {        public List<int> GroupIds { get; set; }        public List<int> DailyPaymentIds { get; set; }        public List<int> HotelSubIds { get; set; }    }    #region 日付报表    [SqlSugar.SugarTable("Fin_DailyFeePayment")]    public class DailyFeePaymentRangeView    {        //public string ViewStr        //{        //    get        //    {        //        return $"{RowIndex}、【{CompanyName}】【{TransferType}】【{FeeType}】【{Instructions}】【{SumPrice.ToString("#0.00")}】【申请人:{Applicant}  申请时间:{ApplicantDt.ToString("yyyy-MM-dd HH:mm:ss")}】";        //    }        //}        public string ViewStr        {            get            {                return $"【{CompanyName}】【{TransferType}】【{FeeType}】【{Instructions}】【{SumPrice.ToString("#0.00")}】【申请人:{Applicant}  申请时间:{ApplicantDt.ToString("yyyy-MM-dd HH:mm:ss")}】";            }        }        [SugarColumn(IsIgnore = true)]//需要加上        public int RowIndex { get; set; } //行号 序号        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]        public int Id { get; set; }        public string Instructions { get; set; }        public int PriceTypeId { get; set; }        public string FeeType { get; set; }        public int TransferTypeId { get; set; }        public string TransferType { get; set; }        public decimal SumPrice { get; set; }        public DateTime FAuditDate { get; set; }        public DateTime MAuditDate { get; set; }        public int CompanyId { get; set; }        public string CompanyName { get; set; }        public int ApplicantId { get; set; }        public string Applicant { get; set; }        public DateTime ApplicantDt { get; set; }        [Navigate(NavigateType.OneToMany, nameof(DailyFeePaymentContentView.DFPId))]//BookA表中的studenId        public List<DailyFeePaymentContentView> Contents { get; set; }        //public string ContentStr { get; set; }    }    [SqlSugar.SugarTable("Fin_DailyFeePaymentContent")]    public class DailyFeePaymentContentView    {        //[SugarColumn(IsIgnore = true)]//需要加上        //public int RowIndex { get; set; } //行号 序号        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]        public int Id { get; set; }        public int DFPId { get; set; }        public string PriceName { get; set; }        public int Quantity { get; set; }        public decimal Price { get; set; }        public decimal ItemTotal { get; set; }        public string Remark { get; set; }        //public int IsDel { get; set; }        /// <summary>        /// 示例:费用名称:[2024.07.11招商信用卡还款]   单价:[20000.00]   数量:[1.00]   小计:[20000.00]   备注:[]        /// </summary>        //public string ViewStr        //{        //    get        //    {        //        return $"费用名称:[{PriceName}]   单价:[{Price.ToString("#0.00")}]   数量:[{Quantity.ToString("#0.00")}]   小计:[{ItemTotal.ToString("#0.00")}]   备注:[{Remark}]";        //    }        //}        //public string ViewSubStr { get; set; }    }    public class ExcelView : DailyFeePaymentRangeView    {        public string ContentStr { get; set; }    }    #endregion    #region 统计模块    #region YOY    public class StatisticsYOYView    {        public int Id { get; set; }        public DateTime VisitDate { get; set; }        public int Year { get; set; }        public int Month { get; set; }        /// <summary>        /// 销售额金额        /// </summary>        public decimal SaleAmount { get; set; }        /// <summary>        /// 机票金额        /// </summary>        public decimal AirTicketAmount { get; set; }        /// <summary>        /// op金额        /// </summary>        public decimal OPAmount { get; set; }        /// <summary>        /// 其他费用金额        /// </summary>        public decimal OtherCostAmount { get; set; }        /// <summary>        /// 签证金额        /// </summary>        public decimal VisaAmount { get; set; }        /// <summary>        /// 邀请公务金额        /// </summary>        public decimal OAAmount { get; set; }        /// <summary>        /// 保险金额        /// </summary>        public decimal InsureAmount { get; set; }        /// <summary>        /// 酒店金额        /// </summary>        public decimal HotelAmount { get; set; }        /// <summary>        /// 超支金额        /// </summary>        public decimal ExcessAmount { get; set; }        /// <summary>        /// 收款退还金额        /// </summary>        public decimal SKTHAmount { get; set; }        /// <summary>        /// 成本金额        /// </summary>        public decimal CostAmount        {            get            {                return AirTicketAmount + HotelAmount + InsureAmount + OAAmount + VisaAmount + OtherCostAmount + OPAmount + ExcessAmount;            }        }        /// <summary>        /// 毛利润        /// </summary>        public decimal GrossProfitAmount        {            get            {                return SaleAmount - SKTHAmount - CostAmount;            }        }    }    public class YOYReturnView    {        public int Year { get; set; }        public int Month { get; set; }        public decimal ThisAmount { get; set; }        public decimal LastAmount { get; set; }        public string Yoy { get; set; }        public List<int> ThisIds { get; set; }        public List<int> LastIds { get; set; }        /// <summary>        /// 构造函数        /// </summary>        /// <param name="year"></param>        /// <param name="month"></param>        /// <param name="thisAmount"></param>        /// <param name="lastAmount"></param>        /// <param name="thisIds"></param>        /// <param name="lastIds"></param>        public YOYReturnView(int year, int month, decimal thisAmount, decimal lastAmount, List<int> thisIds, List<int> lastIds)        {            this.Year = year;            this.Month = month;            this.ThisAmount = thisAmount;            this.LastAmount = lastAmount;            string _yoy = "0.00%";            if (lastAmount != 0)            {                _yoy = ((thisAmount - lastAmount) / lastAmount).ToString("#0.00") + "%";            }            this.Yoy = _yoy;            this.ThisIds = thisIds;            this.LastIds = lastIds;        }    }    #endregion    #region 国交数据统计 - 机票    public class StatisticsAirTicketView    {        public int DIId { get; set; }        public DmDateTime FlightsDate { get; set; }        public int Year { get; set; }        public int Month { get; set; }        public int CType { get; set; }        public string CTypeName { get; set; }        public string FlightsCity { get; set; }        public string FlightsCityName { get; set; }        public int ClientNum { get; set; }    }    public class AirTicketReturnView    {        public int Year { get; set; }        public int Month { get; set; }        /// <summary>        /// 票数        /// </summary>        public int Quantity { get; set; }        public List<AitTicketInfo> AitTicketInfos { get; set; }        public List<int> LinkGroupIds { get; set; }        /// <summary>        /// 构造函数        /// </summary>        /// <param name="year"></param>        /// <param name="month"></param>        /// <param name="quantity"></param>        /// <param name="linkGroupIds"></param>        public AirTicketReturnView(int year, int month, int quantity, List<AitTicketInfo> aitTicketInfos, List<int> linkGroupIds)        {            this.Year = year;            this.Month = month;            this.Quantity = quantity;            this.AitTicketInfos = aitTicketInfos;            this.LinkGroupIds = linkGroupIds;        }        /// <summary>        /// 构造函数        /// </summary>        /// <param name="year"></param>        /// <param name="month"></param>        /// <param name="quantity"></param>        /// <param name="linkGroupIds"></param>        public AirTicketReturnView(int year, int month, int quantity, List<int> linkGroupIds)        {            this.Year = year;            this.Month = month;            this.Quantity = quantity;            this.LinkGroupIds = linkGroupIds;        }    }    public class AirTicketCityReturnView : AirTicketReturnView    {        public List<AirTicketCityInfo> CityData { get; set; }        /// <summary>        /// 构造函数        /// </summary>        /// <param name="year"></param>        /// <param name="month"></param>        /// <param name="quantity"></param>        /// <param name="linkGroupIds"></param>        public AirTicketCityReturnView(int year, int month, int quantity, List<AirTicketCityInfo> cityData, List<int> linkGroupIds)            : base(year, month, quantity, linkGroupIds)        {            this.Year = year;            this.Month = month;            this.Quantity = quantity;            this.CityData = cityData;            this.LinkGroupIds = linkGroupIds;        }    }    public class AitTicketInfo    {        public int Id { get; set; }        public string GroupName { get; set; }        public int Quantity { get; set; }        public AitTicketInfo(int id, string groupName, int quantity)        {            this.Id = id;            this.GroupName = groupName;            this.Quantity = quantity;        }    }    public class AirTicketCityInfo    {        public string City { get; set; }        public int Quantity { get; set; }        public AirTicketCityInfo(string city, int quantity = 0)        {            City = city;            Quantity = quantity;        }    }    #endregion    #region 酒店    public class StatisticsHotelView    {        public int DIId { get; set; }        public string City { get; set; }        public string CityStr        {            get            {                return City.Replace(" ", "").ToUpper();            }        }        public string HotelName { get; set; }        public string BookinSite { get; set; }        public string CheckInDate { get; set; }        //public int Year { get; set; }        //public int Month { get; set; }        public string CheckOutDate { get; set; }        public int SingleRoomCount { get; set; }        public int DoubleRoomCount { get; set; }        public int SuiteRoomCount { get; set; }        public int OtherRoomCount { get; set; }        public int RoomNights        {            get            {                int nights = 0;                if (!string.IsNullOrEmpty(CheckInDate) && !string.IsNullOrEmpty(CheckOutDate))                {                    DateTime checkin, checkout;                    bool checkInBool = DateTime.TryParse(CheckInDate, out checkin);                    bool checkOutBool = DateTime.TryParse(CheckOutDate, out checkout);                    if (checkInBool && checkOutBool)                    {                        nights = (checkout - checkin).Days * RoomTotal;                    }                }                return nights;            }        }        public int RoomTotal        {            get            {                return SingleRoomCount + DoubleRoomCount + SuiteRoomCount + OtherRoomCount;            }        }        public StatisticsHotelView() { }        public StatisticsHotelView(int diid, string city, string hotelName, string bookingSite, string checkIn, string checkOut, int singleRoom, int doubleRoomCount, int suiteRoomCount, int otherRoomCount)        {            DIId = diid;            City = city;            BookinSite = bookingSite;            CheckInDate = checkIn;            CheckOutDate = checkOut;            SingleRoomCount = singleRoom;            DoubleRoomCount = doubleRoomCount;            SuiteRoomCount = suiteRoomCount;            OtherRoomCount = otherRoomCount;        }    }    public class HotelReturnView    {    }    #endregion    #region 商邀邀请    public class StatisticsInvitation    {        public int DIId { get; set; }        public string Country { get; set; }    }    #endregion    #region 团组相关    public class StatisticsGroupInfoEntity    {        public int Id { get; set; }        public DateTime VisitDate { get; set; }        public int Month { get; set; }        public string MonthName { get { return VisitDate.ToString("MMM", CultureInfo.GetCultureInfo("zh-CN")); } }        public int Quarter        {            get            {                int quarter = 0;                if (Month < 1 || Month > 12) return quarter;                if (Month >= 1 && Month <= 3) quarter = 1;                else if (Month >= 4 && Month <= 6) quarter = 2;                else if (Month >= 7 && Month <= 9) quarter = 3;                else if (Month >= 10 && Month <= 12) quarter = 4;                return quarter;            }        }        public string QuarterName        {            get            {                string quarterName = "-";                if (Month < 1 || Month > 12) return quarterName;                if (Month >= 1 && Month <= 3) quarterName = "第一季度";                else if (Month >= 4 && Month <= 6) quarterName = "第二季度";                else if (Month >= 7 && Month <= 9) quarterName = "第三季度";                else if (Month >= 10 && Month <= 12) quarterName = "第四季度";                return quarterName;            }        }        public int VisitPNumber { get; set; }    }    #endregion    #region OP    public class StatisticsOP    {        /*         * OP统计图(实际成本同比年/月)         *分块:如车费/导游费/导游交通/接送机费/司机工资/翻译费 	         *用于判断实际成本是否有增长【真实使用的时候估计是2025年和2024年对比,2023年的数据格式和数据量有问题】         *          * 车费:91	车费  982 车超时费         * 导游费:92 导游费  985 导游交通  1059 导游超时费用         * 司机费:979 司机工资             * 小费:980 司机小费 95 导游小费         * 接送机费:96 接送机费           * 餐费:93	客户午餐费用  981 司机餐补  983	导游餐补  988 客户早餐费用  989	客户晚餐费用           *       1074 早餐超支费用  1075 午餐超支费用  1076 晚餐超支费用         * 住补费:992 住补费用  984 导游房补         * 景点费:94 导游景点费  990	景点门票费  1085 景点门票超支费用         * 翻译费:994 翻译费  1073	翻译超时费         * 饮料/零食/水果费:991 饮料/零食/水果         * 其他费:97 其他费用  1071 其他额外费用         */        //车费        private static int[] _carFeeIds = new int[] {                                            91,   //车费                                            982,  //车超时费                                        };        //导游费        private static int[] _guideFeeIds = new int[] {                                                92,   //导游费                                                985,  //导游交通                                                1059, //导游超时费用                                            };        //司机费        private static int[] _driverFeeIds = new int[]{                                                979,  //司机工资                                            };        //小费        private static int[] _tipsFeeIds = new int[] {                                               980,  //司机小费                                               95,   //导游小费                                            };        //接送机费        private static int[] _airportTransferFeeIds = new int[] {                                                         96,  //接送机费                                                      };        //餐费        private static int[] _mealFeeIds = new[] {                                          93,  //客户午餐费用                                          981, //司机餐补                                          983, //导游餐补                                          988, //客户早餐费用                                          989, //客户晚餐费用                                          1074,//早餐超支费用                                          1075,//午餐超支费用                                          1076,//晚餐超支费用                                       };        //住补费        private static int[] _sububoFeeIds = new[] {                                         992,  //住补费用                                           984,  //导游房补                                       };        //景点费        private static int[] _scenicSpotFeeIds = new[] {                                        94,  //导游景点费                                          990, //景点门票费                                          1085,//景点门票超支费用                                       };        //翻译费        private static int[] _translationFeeIds = new[] {                                                994,  //翻译费                                                  1073, //翻译超时费                                               };        //饮料/零食/水果费        private static int[] _DSFFeeIds = new int[] {                                             991,  //饮料/零食/水果                                         };        //其他费        private static int[] _otherFeeIds = new int[] {                                                97,  //其他费用                                                  1071,//其他额外费用                                            };        public int Id { get; set; }        public int DiId { get; set; }        public DateTime PaymentTime { get; set; }        public int Year { get; set; }        public int Quarter { get; set; }        public int Month { get; set; }        public string Area { get; set; }        public string Country { get; set; }        public string City { get; set; }        public int ParentFeeId {            get            {                return int.TryParse(GetFeeParentInfo(FeeSubType, 1), out int id) ? id : 0;            }        }        public string ParentFeeName        {            get            {                return GetFeeParentInfo(FeeSubType, 2);            }        }        public string ParentFeeRemark { get; set; }        public int FeeType { get; set; }        public string FeeTypeName { get; set; }        public int FeeSubType { get; set; }        public string FeeSubTypeName { get; set; }        public decimal Price { get; set; }        /// <summary>        ///         /// </summary>        /// <param name="subFee"></param>        /// <param name="type">1 id 2 name 3 备注 </param>        /// <returns></returns>        private string GetFeeParentInfo(int subFee,int type)        {           int id = -1;           string name =string.Empty;           string remark = string.Empty;            // 车费:91 车费  982 车超时费            if (_carFeeIds.Contains(subFee))            {                id = 1;                name = "车费";                remark = "费用组成:车费、车超时费";            }            // 导游费:92 导游费  985 导游交通  1059 导游超时费用            if (_guideFeeIds.Contains(subFee))            {                id = 2;                remark = "费用组成:导游费、导游交通、导游超时费用";                name = "导游费";            }            // 司机费:979 司机工资            if (_driverFeeIds.Contains(subFee))            {                id = 3;                remark = "费用组成:司机工资";                name = "司机费";            }            // 小费:980 司机小费 95 导游小费            if (_tipsFeeIds.Contains(subFee))            {                id = 4;                remark = "费用组成:司机小费、导游小费";                name = "小费";            }            // 接送机费:96 接送机费            if (_airportTransferFeeIds.Contains(subFee))            {                id = 5;                remark = "费用组成:接送机费";                name = "接送机费";            }            // 餐费:93 客户午餐费用  981 司机餐补  983   导游餐补  988 客户早餐费用  989   客户晚餐费用            // 1074 早餐超支费用  1075 午餐超支费用  1076 晚餐超支费用            if (_mealFeeIds.Contains(subFee))            {                id = 6;                remark = "费用组成:客户早餐费用、客户午餐费用、客户晚餐费用、司机餐补、导游餐补、早餐超支费用、午餐超支费用、晚餐超支费用";                name = "餐费";            }            // 住补费:992 住补费用  984 导游房补            if (_sububoFeeIds.Contains(subFee))            {                id = 7;                remark = "费用组成:住补费用、导游房补";                name = "住补费";            }            // 景点费:94 导游景点费  990 景点门票费  1085 景点门票超支费用            if (_scenicSpotFeeIds.Contains(subFee))            {                id = 8;                remark = "费用组成:导游景点费、景点门票费、景点门票超支费用";                name = "景点费";            }            // 翻译费:994 翻译费  1073 翻译超时费            if (_translationFeeIds.Contains(subFee))            {                id = 9;                remark = "费用组成:翻译费、翻译超时费";                name = "翻译费";            }            // 饮料/ 零食 / 水果费:991 饮料 / 零食 / 水果            if (_DSFFeeIds.Contains(subFee))            {                id = 10;                remark = "费用组成:饮料/零食/水果费";                name = "饮料/零食/水果费";            }            // 其他费用:97 其他费用  1071 其他额外费用            if (_otherFeeIds.Contains(subFee))            {                id = 11;                remark = "费用组成:其他费用、其他额外费用";                name = "其他费用";            }            string returnStr = string.Empty;            if (type == 1) returnStr = id.ToString();            else if (type == 2) returnStr = name;            else if (type == 3) returnStr = remark;            return returnStr;        }                /// <summary>        ///         /// </summary>        public OPParentFeeInfo[] _OPParentFeeInfo = new OPParentFeeInfo[] {            new OPParentFeeInfo(1,"车费","费用组成:车费、车超时费"),            new OPParentFeeInfo(2,"导游费","费用组成:导游费、导游交通、导游超时费用"),            new OPParentFeeInfo(3,"司机费","费用组成:司机工资"),            new OPParentFeeInfo(4,"小费","费用组成:司机小费、导游小费"),            new OPParentFeeInfo(5,"接送机费","费用组成:客户早餐费用、客户午餐费用、客户晚餐费用、司机餐补、导游餐补、早餐超支费用、午餐超支费用、晚餐超支费用"),            new OPParentFeeInfo(6,"餐费","费用组成:车费、车超时费"),            new OPParentFeeInfo(7,"住补费","费用组成:住补费用、导游房补"),            new OPParentFeeInfo(8,"景点费","费用组成:导游景点费、景点门票费、景点门票超支费用"),            new OPParentFeeInfo(9,"翻译费","费用组成:翻译费、翻译超时费"),            new OPParentFeeInfo(10,"饮料/零食/水果费","费用组成:饮料/零食/水果费"),            new OPParentFeeInfo(11,"其他费用","费用组成:其他费用、其他额外费用"),        };    }        public class OPParentFeeInfo    {        public int Id { get; set; }        public string Name { get; set; }        public string Remark { get; set; }        public OPParentFeeInfo() { }        public OPParentFeeInfo(int id,string name ,string remark)         {            this.Id = id;            this.Name = name;            this.Remark = remark;        }    }    public class StatisticsOPYOY    {        public int FeeId { get; set; }        public string FeeName { get; set; }        /// <summary>        /// 本期        /// </summary>        public decimal CurrPeriodFee { get; set; }        /// <summary>        /// 同期        /// </summary>        public decimal SamePeriodFee { get; set; }        public decimal Yoy { get; set; }        public int CurrPeriodGroupTotal { get; set; }        public int SamePeriodGroupTotal { get; set; }        public StatisticsOPSubFeeYOY[] SubFeeData { get; set; }        public StatisticsOPYOY() { }        /// <summary>        /// 构造函数        /// </summary>        /// <param name="year"></param>        /// <param name="month"></param>        /// <param name="thisAmount"></param>        /// <param name="lastAmount"></param>        /// <param name="thisIds"></param>        /// <param name="lastIds"></param>        public StatisticsOPYOY(int feeId, string feeName, decimal currPeriodFee, decimal samePeriodFee,           int currPeriodGroupTotal ,int samePeriodGroupTotal, StatisticsOPSubFeeYOY[] subFeeData)        {            this.FeeId = feeId;            this.FeeName = feeName;            this.CurrPeriodFee = currPeriodFee;            this.SamePeriodFee = samePeriodFee;            decimal _yoy = 0.00M;            if (samePeriodFee != 0.00M)            {                _yoy = (currPeriodFee - samePeriodFee) / samePeriodFee;            }            this.Yoy = decimal.Parse(_yoy.ToString("0.##"));             this.CurrPeriodGroupTotal = currPeriodGroupTotal;            this.SamePeriodGroupTotal = samePeriodGroupTotal;            this.SubFeeData = subFeeData;        }    }    public class StatisticsOPSubFeeYOY : StatisticsOPYOY    {        public StatisticsOPCityYOY[] CityData { get; set; }        public StatisticsOPSubFeeYOY() { }        /// <summary>        /// 构造函数        /// </summary>        /// <param name="year"></param>        /// <param name="month"></param>        /// <param name="thisAmount"></param>        /// <param name="lastAmount"></param>        /// <param name="thisIds"></param>        /// <param name="lastIds"></param>        public StatisticsOPSubFeeYOY(int feeId, string feeName, decimal currPeriodFee, decimal samePeriodFee,           int currPeriodGroupTotal, int samePeriodGroupTotal, StatisticsOPCityYOY[] cityData)        {            this.FeeId = feeId;            this.FeeName = feeName;            this.CurrPeriodFee = currPeriodFee;            this.SamePeriodFee = samePeriodFee;            decimal _yoy = 0.00M;            if (samePeriodFee != 0.00M)            {                _yoy = (currPeriodFee - samePeriodFee) / samePeriodFee;            }            this.Yoy = decimal.Parse(_yoy.ToString("0.##"));            this.CurrPeriodGroupTotal = currPeriodGroupTotal;            this.SamePeriodGroupTotal = samePeriodGroupTotal;            this.CityData = cityData;        }    }    public class StatisticsOPCityYOY    {        public string CityName { get; set; }        public int CurrPeriodGroupTotal { get; set; }        public int SamePeriodGroupTotal { get; set; }        /// <summary>        /// 本期        /// </summary>        public decimal CurrPeriodFee { get; set; }        /// <summary>        /// 同期        /// </summary>        public decimal SamePeriodFee { get; set; }        public decimal Yoy { get; set; }        public StatisticsOPCityYOY() { }        public StatisticsOPCityYOY(string cityName, decimal currPeriodFee, decimal samePeriodFee,            int currPeriodGroupTotal,int samePeriodGroupTotal)         {            this.CityName = cityName;            this.CurrPeriodGroupTotal = currPeriodGroupTotal;            this.SamePeriodGroupTotal = samePeriodGroupTotal;            this.CurrPeriodFee = currPeriodFee;            this.SamePeriodFee = samePeriodFee;            string _yoy = "0.00";            if (samePeriodFee != 0)            {                _yoy = ((currPeriodFee - samePeriodFee) / samePeriodFee).ToString("0.##");            }            this.Yoy = decimal.TryParse(_yoy, out decimal yoy1) ? yoy1 : 0.00M;        }    }    public class StatisticsOPMonthYOY    {        public int MonthId { get; set; }        public string MonthName { get; set; }        public StatisticsOPYOY[] FeeDatas { get; set; }        public StatisticsOPMonthYOY() { }        public StatisticsOPMonthYOY(int monthId, string monthName, StatisticsOPYOY[] feeDatas)        {            MonthId = monthId;            MonthName = monthName;            FeeDatas = feeDatas;        }    }    #endregion    #endregion}
 |