public async Task Add(WageInputDto input)
        {
            if (input.StartTime > input.EndTime)
            {
                throw new HttpResponseException(new HttpResponseMessage()
                {
                    Content = new StringContent(JsonConvert.SerializeObject(new ResponseApi()
                    {
                        Code = EExceptionType.Implement, Message = "开始时间不能大于结束时间"
                    }))
                });
            }

            var data = await db.Wages.SingleOrDefaultAsync(m => m.StartTime <= input.StartTime && m.EndTime >= input.EndTime && m.UserId == input.UserId && !m.IsDelete);

            if (data != null)
            {
                throw new HttpResponseException(new HttpResponseMessage()
                {
                    Content = new StringContent(JsonConvert.SerializeObject(new ResponseApi()
                    {
                        Code = EExceptionType.Implement, Message = "该用户本月已添加工资记录"
                    }))
                });
            }

            if (!await db.UserDetails.AnyAsync(m => m.Id == input.UserId && !m.IsDelete))
            {
                throw new HttpResponseException(new HttpResponseMessage()
                {
                    Content = new StringContent(JsonConvert.SerializeObject(new ResponseApi()
                    {
                        Code = EExceptionType.Implement, Message = "该用户不存在"
                    }))
                });
            }

            db.Wages.Add(new Wage()
            {
                Id                       = IdentityManager.NewId(),
                StartTime                = input.StartTime,
                EndTime                  = input.EndTime,
                BasePay                  = input.BasePay,
                BonusPaidIn              = input.BonusPaidIn,
                ConfidentialSalary       = input.ConfidentialSalary,
                Desc                     = input.Desc,
                EducationSalary          = input.EducationSalary,
                EndowmentInsurance       = input.EndowmentInsurance,
                GrossPay                 = input.GrossPay,
                LargeInsurance           = input.LargeInsurance,
                MedicalInsurance         = input.MedicalInsurance,
                MeritPay                 = input.MeritPay,
                OtherSum                 = input.OtherSum,
                OvertimeExpenses         = input.OvertimeExpenses,
                PaidWages                = input.PaidWages,
                PostSalary               = input.PostSalary,
                SeniorityPay             = input.SeniorityPay,
                TaxDeductible            = input.TaxDeductible,
                TotalManagementSystem    = input.TotalManagementSystem,
                TrafficAndMealSupplement = input.TrafficAndMealSupplement,
                UnemploymentInsurance    = input.UnemploymentInsurance,
                UserId                   = input.UserId,
                WagesPayable             = input.WagesPayable,
                IsDelete                 = false
            });

            if (await db.SaveChangesAsync() <= 0)
            {
                throw new HttpResponseException(new HttpResponseMessage()
                {
                    Content = new StringContent(JsonConvert.SerializeObject(new ResponseApi()
                    {
                        Code = EExceptionType.Implement, Message = "添加失败"
                    }))
                });
            }
        }
        public async Task Update(WageInputDto input)
        {
            var data = await db.Wages.SingleOrDefaultAsync(m => m.Id == input.WageId && !m.IsDelete);

            if (data == null)
            {
                throw new HttpResponseException(new HttpResponseMessage()
                {
                    Content = new StringContent(JsonConvert.SerializeObject(new ResponseApi()
                    {
                        Code = EExceptionType.Implement, Message = "工资记录不存在"
                    }))
                });
            }

            if (!await db.UserDetails.Include(m => m.User).AnyAsync(m => m.Id == input.UserId && !m.IsDelete))
            {
                throw new HttpResponseException(new HttpResponseMessage()
                {
                    Content = new StringContent(JsonConvert.SerializeObject(new ResponseApi()
                    {
                        Code = EExceptionType.Implement, Message = "该用户不存在"
                    }))
                });
            }

            var user = await db.UserDetails.Include(m => m.User).SingleOrDefaultAsync(m => m.Id == input.SignId && !m.IsDelete);

            if (user == null)
            {
                throw new HttpResponseException(new HttpResponseMessage()
                {
                    Content = new StringContent(JsonConvert.SerializeObject(new ResponseApi()
                    {
                        Code = EExceptionType.Implement, Message = "签字人无效"
                    }))
                });
            }

            data.GrossPay                 = input.GrossPay;
            data.LargeInsurance           = input.LargeInsurance;
            data.MedicalInsurance         = input.MedicalInsurance;
            data.MeritPay                 = input.MeritPay;
            data.OtherSum                 = input.OtherSum;
            data.OvertimeExpenses         = input.OvertimeExpenses;
            data.PaidWages                = input.PaidWages;
            data.PostSalary               = input.PostSalary;
            data.SeniorityPay             = input.SeniorityPay;
            data.SignId                   = input.SignId;
            data.StartTime                = input.StartTime;
            data.TaxDeductible            = input.TaxDeductible;
            data.TotalManagementSystem    = input.TotalManagementSystem;
            data.TrafficAndMealSupplement = input.TrafficAndMealSupplement;
            data.UnemploymentInsurance    = input.UnemploymentInsurance;
            data.UserId                   = input.UserId;
            data.WagesPayable             = input.WagesPayable;
            data.EndowmentInsurance       = input.EndowmentInsurance;
            data.EndTime                  = input.EndTime;
            data.EducationSalary          = input.EducationSalary;
            data.Desc = input.Desc;
            data.ConfidentialSalary = input.ConfidentialSalary;
            data.BonusPaidIn        = input.BonusPaidIn;
            data.BasePay            = input.BasePay;

            if (await db.SaveChangesAsync() <= 0)
            {
                throw new HttpResponseException(new HttpResponseMessage()
                {
                    Content = new StringContent(JsonConvert.SerializeObject(new ResponseApi()
                    {
                        Code = EExceptionType.Implement, Message = "更新失败"
                    }))
                });
            }
        }