Browse Source

Merge branch 'develop' of http://132.232.92.186:3000/XinXiBu/OA2023 into develop

yuanrf 1 year ago
parent
commit
a9336b56c6

+ 7 - 1
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -420,7 +420,7 @@ namespace OASystem.API.Controllers
                     }
                     else
                     {
-                        salary = salary = (PayrollComputation.ConvertToDecimal(salary / pm_WageSheet.WorkDays) * pm_WageSheet.RegularDays) + pm_WageSheet.Mealsupplement;
+                        salary = PayrollComputation.ConvertToDecimal(salary / pm_WageSheet.WorkDays * pm_WageSheet.RegularDays + pm_WageSheet.Mealsupplement);
                     }    
                 }
 
@@ -578,6 +578,12 @@ namespace OASystem.API.Controllers
 
             List<Pm_WageSheet> wageSheets = new List<Pm_WageSheet>();
             Pm_WageSheet wageSheet = _mapper.Map<Pm_WageSheet>(dto);
+            Pm_WageSheet wageSheet1 = await _wageSheetRep._sqlSugar.Queryable<Pm_WageSheet>().Where(it => it.UserId == dto.UserId && it.YearMonth == dto.YearMonth && it.StartDate == dto.StartDate && it.EndDate == dto.EndDate).FirstAsync();
+            if (wageSheet1 != null )
+            {
+                wageSheet.Id = wageSheet1.Id;
+            }
+
             wageSheets.Add(wageSheet);
             //获取OA系统内所有用户
             var nameData = await _usersRep.GetUserNameList(1);

+ 477 - 46
OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

@@ -208,8 +208,6 @@ namespace OASystem.API.OAMethodLib
                         List<CheckInDataInfo> checkInData2 = new List<CheckInDataInfo>();
                         checkInData2 = checkInDatas.Where(it => it.exception_type.Equals("未打卡")).ToList();
                         
-
-
                         #region 迟到 早退 旷工
 
                         int user_cd_zt_num = 0; //早退/迟到 次数 10分钟内 2次以内不记处罚 三次及以上50一次
@@ -296,7 +294,7 @@ namespace OASystem.API.OAMethodLib
                                         day_deduction = ConvertToDecimal(day_miner_unit * 6); //3小时
                                         meal_deduction += 10.00M;  //餐补扣款
                                         absenteeism_deduction += day_deduction; //矿工半日
-                                        beLate_belate_ex.Reason = thisDtStr + " 上午(09:00)缺卡/未打卡视为午旷工(3小时)";
+                                        beLate_belate_ex.Reason = thisDtStr + " 上午(09:00)缺卡/未打卡视为午旷工(3小时)";
                                     }
                                     else
                                     {
@@ -541,11 +539,11 @@ namespace OASystem.API.OAMethodLib
                                         Date_range date_Range = attendance.date_range;
 
                                         //筛选 不在工作日内的假勤申请
-                                        if (startDt >= date_Range.new_begin_dt || Convert.ToDateTime( date_Range.new_end_dt.ToString("yyyy-MM-dd")) > endDt)
+                                        if ( Convert.ToDateTime(date_Range.new_begin_dt) < startDt  || Convert.ToDateTime(date_Range.new_end_dt.ToString("yyyy-MM-dd")) > endDt)
                                         {
                                             continue;
                                         }
-                                       
+
                                         string leave_starttime = date_Range.new_begin_dt.ToString("HH:mm");
                                         string leave_endtime = date_Range.new_end_dt.ToString("HH:mm");
 
@@ -560,47 +558,141 @@ namespace OASystem.API.OAMethodLib
                                         string endTime = string.Empty;
                                         string startTime1 = string.Empty;
                                         string endTime1 = string.Empty;
+                                        Slice_info slice_info = new Slice_info();
+                                        //2事假;3病假;
+                                        if (leaveTypeId == 2 || leaveTypeId ==3)
+                                        {
+                                            slice_info = vacation.attendance.slice_info;
+                                        }
+
+                                        DateTime date_Range_new_begin_dt = date_Range.new_begin_dt;
+                                        DateTime date_Range_new_end_dt = date_Range.new_end_dt;
+
                                         //计算请假类型扣款金额
                                         decimal new_duration = 0.00M;
                                         if (date_Range.type == "halfday")
                                         {
                                             new_duration = Convert.ToDecimal(date_Range.new_duration) / 86400.00M;
                                             unit = "天";
-                                            startTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " 09:00";
-                                            endTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " 18:00";
-                                            if (new_duration == 1)
+                                            startTime = date_Range_new_begin_dt.ToString("yyyy-MM-dd") + " 09:00";
+                                            endTime = date_Range_new_end_dt.ToString("yyyy-MM-dd") + " 18:00";
+
+                                            if (new_duration >= 0.50M)
                                             {
-                                                startTime1 = "09:00:00";
-                                                endTime1 = "18:00:00";
+                                                if (slice_info != null)
+                                                {
+                                                    if (slice_info.day_items != null)
+                                                    {
+                                                        if (slice_info.day_items.Count > 1)
+                                                        {
+
+                                                            date_Range_new_begin_dt = slice_info.day_items[0].daytimeDt;
+                                                            date_Range_new_end_dt = slice_info.day_items[slice_info.day_items.Count - 1].daytimeDt;
+
+                                                            decimal startTime11 = slice_info.day_items[0].duration;
+                                                            decimal startTime11_11 = startTime11 / 3600.00M;
+                                                            decimal endTime11 = slice_info.day_items[slice_info.day_items.Count - 1].duration;
+                                                            decimal endTime11_11 = endTime11 / 3600.00M;
+                                                            if (startTime11_11 == 3.00M)
+                                                            {
+                                                                startTime1 = "09:00";
+                                                            }
+                                                            else if (startTime11_11 == 4.50M)
+                                                            {
+                                                                startTime1 = "12:00";
+                                                            }
+                                                            else if (startTime11_11 == 7.50M)
+                                                            {
+                                                                startTime1 = "09:00";
+                                                            }
+
+                                                            if (endTime11_11 == 3.00M)
+                                                            {
+                                                                endTime1 = "12:00";
+                                                            }
+                                                            else if (endTime11_11 == 4.50M)
+                                                            {
+                                                                endTime1 = "18:00";
+                                                            }
+                                                            else if (endTime11_11 == 7.50M)
+                                                            {
+                                                                endTime1 = "18:00";
+                                                            }
+
+                                                        }
+                                                        else
+                                                        {
+                                                            decimal qjLongTime = slice_info.duration / 3600.00M;
+                                                            if (qjLongTime == 4.50M)
+                                                            {
+                                                                startTime1 = "12:00";
+                                                                endTime1 = "18:00:00";
+                                                            }
+                                                            else if (qjLongTime == 3.00M)
+                                                            {
+                                                                startTime1 = "09:00";
+                                                                endTime1 = "12:00:00";
+                                                            }
+                                                            else if (qjLongTime % 7.50M == 0)
+                                                            {
+                                                                startTime1 = "09:00";
+                                                                endTime1 = "18:00:00";
+                                                            }
+                                                        }
+                                                    }
+                                                    else
+                                                    {
+                                                        if (new_duration % 1 == 0)
+                                                        {
+                                                            startTime1 = "09:00";
+                                                            endTime1 = "18:00";
+                                                        }
+                                                    }
+                                                }
+                                                else
+                                                {
+                                                    if (new_duration % 1 == 0)
+                                                    {
+                                                        startTime1 = "09:00";
+                                                        endTime1 = "18:00";
+                                                    }
+                                                }
+                                            
                                             }
                                             else
                                             {
-                                                startTime1 = date_Range.new_begin_dt.ToString("HH:mm:ss");
-                                                endTime1 = date_Range.new_end_dt.ToString("HH:mm:ss");
+                                                if (new_duration % 1 == 0)
+                                                {
+                                                    startTime1 = "09:00";
+                                                    endTime1 = "18:00";
+                                                }
+                                                else
+                                                {
+                                                    startTime1 = date_Range_new_begin_dt.ToString("HH:mm:ss");
+                                                    endTime1 = date_Range_new_end_dt.ToString("HH:mm:ss");
+                                                }
                                             }
-
-                                            
                                         }
                                         else if (date_Range.type == "hour")
                                         {
                                             new_duration = Convert.ToDecimal(date_Range.new_duration) / 3600.00M;
                                             unit = "小时";
-                                            startTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd HH:mm:ss");
-                                            endTime = date_Range.new_end_dt.ToString("yyyy-MM-dd HH:mm:ss");
-                                            startTime1 = date_Range.new_begin_dt.ToString("HH:mm:ss");
-                                            endTime1 = date_Range.new_end_dt.ToString("HH:mm:ss");
+                                            startTime = date_Range_new_begin_dt.ToString("yyyy-MM-dd HH:mm:ss");
+                                            endTime = date_Range_new_end_dt.ToString("yyyy-MM-dd HH:mm:ss");
+                                            startTime1 = date_Range_new_begin_dt.ToString("HH:mm:ss");
+                                            endTime1 = date_Range_new_end_dt.ToString("HH:mm:ss");
                                         }
 
                                         LeaveDetails leaveDetails1 = new LeaveDetails()
                                         {
                                             TypeId = leaveType,
                                             TypeName = typeName,
-                                            StartDt = Convert.ToDateTime(date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " " + startTime1),
-                                            EndDt = Convert.ToDateTime(date_Range.new_end_dt.ToString("yyyy-MM-dd") + " " + endTime1),
+                                            StartDt = Convert.ToDateTime(date_Range_new_begin_dt.ToString("yyyy-MM-dd") + " " + startTime1),
+                                            EndDt = Convert.ToDateTime(date_Range_new_end_dt.ToString("yyyy-MM-dd") + " " + endTime1),
                                             DtType = date_Range.type,
                                             Unit = unit,
                                             New_Duration = new_duration,
-                                            ApplyDt = Convert.ToDateTime(sp_item.apply_time_dt.ToString("yyyy-MM-dd HH:mm:ss"))
+                                            SliceInfo = slice_info
                                         };
                                         leaveDetails.Add(leaveDetails1);
                                     }
@@ -634,6 +726,8 @@ namespace OASystem.API.OAMethodLib
 
                             if (leaveDetails.Count > 0)
                             {
+                                leaveDetails = leaveDetails.OrderBy(it => it.StartDt).OrderBy(it => it.EndDt).ToList();
+
                                 foreach (LeaveDetails leave_item in leaveDetails)
                                 {
                                     decimal leave_meals = 0.00M;
@@ -642,19 +736,24 @@ namespace OASystem.API.OAMethodLib
                                     int leaveType = leave_item.TypeId;
                                     decimal new_duration = leave_item.New_Duration;
                                     //计算餐补 假勤类型扣款
-                                    CalculateTypeFee(leaveDetails,leaveType, leave_item.DtType, leave_item.StartDt, leave_item.EndDt, amountPayable, work_days,
+                                    CalculateTypeFee1(leaveDetails,leaveType, leave_item.DtType, leave_item.StartDt, leave_item.EndDt, amountPayable, work_days,
                                         new_duration,out leave_meals, out thisTypeDeduction);
+                                    if (leave_meals != 0)
+                                    {
+                                        leave_item.IsDeduction = true;
+                                    }
+
 
                                     #region 累计类型扣款
                                     //1年假;2事假;3病假;4调休假;5婚假;6产假;7陪产假;8其他;9丧假
 
-                                    if (leaveType == 2) //调休假
+                                    if (leaveType == 2) //
                                     {
                                         personalLeaveTotal += thisTypeDeduction;
                                     }
                                     else if (leaveType == 3) //病假
                                     {
-                                        sickLeaveTotal = thisTypeDeduction;
+                                        sickLeaveTotal += thisTypeDeduction;
                                     }
 
                                     #endregion
@@ -916,12 +1015,11 @@ namespace OASystem.API.OAMethodLib
                                         //出差扣款
                                         decimal cckk = 0.00M;
 
-                                        int days = (int)(Convert.ToDateTime( date_Range.new_end_dt.ToString("yyyy-MM-dd")) -
-                                                         Convert.ToDateTime(date_Range.new_begin_dt.ToString("yyyy-MM-dd"))).TotalDays;
+                                        int days = (int)(Convert.ToDateTime(date_Range.new_end_dt.ToString("yyyy-MM-dd")) -
+                                                         Convert.ToDateTime(date_Range.new_begin_dt.ToString("yyyy-MM-dd"))).TotalDays + 1;
 
                                         
-
-                                        for (int i = 0; i <= days; i++)
+                                        for (int i = 0; i < days; i++)
                                         {
                                             DateTime thisDt = date_Range.new_begin_dt.AddDays(i);
                                             
@@ -936,7 +1034,6 @@ namespace OASystem.API.OAMethodLib
                                             }
 
                                             //处理结束时间 是否在当天工作时间内
-
                                             if (i == days - 1)
                                             {
                                                 string ccStartTime = date_Range.new_end_dt.ToString("HH:mm:ss");
@@ -1179,6 +1276,264 @@ namespace OASystem.API.OAMethodLib
 
         /// <summary>
         /// 计算类型费用
+        /// 病假 事假 计算 按天计算
+        /// </summary>
+        /// <param name="leaveType">
+        /// 1年假;2事假;3病假;4调休假;5婚假;6产假;7陪产假;8其他;9丧假
+        /// </param>
+        /// <param name="date_Range_type">
+        /// halfday 全天
+        /// hour  小时
+        /// </param>
+        /// <param name="startTime"></param>
+        /// <param name="endTime"></param>
+        /// <param name="duration"></param>
+        /// <param name="mealDeduction"></param>
+        /// <param name="typeDeduction"></param>
+        public static void CalculateTypeFee1(List<LeaveDetails> leaveDetails, int leaveType, string date_Range_type, DateTime startTime, DateTime endTime,
+            decimal amountPayable, int work_days, decimal duration, out decimal mealDeduction, out decimal typeDeduction)
+        {
+            typeDeduction = 0;
+            mealDeduction = 0;
+            decimal personalkLeave_dailywage_day = amountPayable / work_days; //日薪 = 事假日薪 *计算方式:日平均工资 = 当月应发工资 /当月应出勤天数。
+
+            //半小时单位
+            decimal halfHour = 7.50M / 0.50M;
+
+            switch (leaveType)
+            {
+                case 1: //年假
+
+                    if (date_Range_type == "halfday")
+                    {
+                        if (duration >= 0.5M && duration <= 1M) //一天
+                        {
+                            var njItem = leaveDetails.Where(it => it.StartDt.ToString("yyyy-MM-dd") == startTime.ToString("yyyy-MM-dd") &&
+                                                      it.EndDt.ToString("yyyy-MM-dd") == endTime.ToString("yyyy-MM-dd")).ToList();
+                            if (njItem.Count > 1)
+                            {
+                                if (njItem[0].StartDt == startTime)
+                                {
+                                    mealDeduction = 10; //餐补扣款
+                                }
+                            }
+                            else
+                            {
+                                mealDeduction = 10; //餐补扣款 
+                            }
+                        }
+                        else // 多天
+                        {
+                            var njManyDaysItem = leaveDetails.Where(it => it.StartDt.ToString("yyyy-MM-dd") == startTime.ToString("yyyy-MM-dd")).ToList();
+                            if (njManyDaysItem.Count > 1)
+                            {
+                                var njManyDaysItem1 = njManyDaysItem.Where(it => it.StartDt != startTime).ToList();
+                                if (njManyDaysItem1.Count > 0)
+                                {
+                                    if (njManyDaysItem1[0].Unit.Equals("天"))
+                                    {
+                                        mealDeduction = 10 * Math.Floor(duration);
+                                    }
+                                    else if (njManyDaysItem1[0].Unit.Equals("小时") && njManyDaysItem1[0].New_Duration >= 3)
+                                    {
+                                        mealDeduction = 10 * Math.Floor(duration);
+                                    }
+                                    else
+                                    {
+                                        mealDeduction = 10 * Math.Ceiling(duration);
+                                    }
+                                }
+                            }
+                            else
+                            {
+                                mealDeduction = 10 * Math.Ceiling(duration);
+                            }
+                        }
+                    }
+
+                    break;
+                case 2: //2事假
+                    // 事假日薪 *计算方式:日平均工资 = 当月应发工资 /当月应出勤天数。 
+                    decimal personalkLeave_dailywage_halfhour = personalkLeave_dailywage_day / 7.50M; //事假单位 0.5小时
+                   
+                    if (date_Range_type == "halfday")
+                    {
+                        #region 处理当天是否扣除餐补
+                        string formatDt_begin = startTime.ToString("yyyy-MM-dd");
+                        List<LeaveDetails> leaveDetails1 = leaveDetails.Where(it => it.IsDeduction && it.EndDt.ToString("yyyy-MM-dd") == formatDt_begin).ToList();
+                        if (leaveDetails1.Count > 0) mealDeduction = 10.00M * Math.Floor(duration); //餐补扣款 
+                        else mealDeduction = 10.00M * Math.Ceiling(duration); //餐补扣款 
+                        #endregion
+
+                        if (duration % 1 == 0) //整天
+                        {
+                            typeDeduction = ConvertToDecimal(personalkLeave_dailywage_day * duration);
+                        }
+                        else //多含 半天 另外处理
+                        {
+                            decimal sj_wholeDay = Math.Floor(duration); //整天
+                            decimal sj_halfDay = duration % 1; //半天
+
+                            if (duration % 1 > 0)
+                            {
+                                typeDeduction = (personalkLeave_dailywage_day / 2.00M) * (duration / 0.50M);
+                                
+                            }
+                            else
+                            {
+                                typeDeduction = (personalkLeave_dailywage_day / 2.00M);
+                            }
+                            typeDeduction = ConvertToDecimal(typeDeduction);
+                        }
+                    }
+                    else if (date_Range_type == "hour")
+                    {
+                        decimal leave_halfHour = Convert.ToDecimal(duration) / Convert.ToDecimal(0.5);
+                        typeDeduction = ConvertToDecimal(personalkLeave_dailywage_halfhour * leave_halfHour);
+                        //duration = 11M;
+                        if (duration >= 3 && duration < 7.5M) //单天请假三小时
+                        {
+                            mealDeduction = 10; //餐补扣款
+
+                        }
+                        else if (duration >= 7.5M) //多天计算
+                        {
+                            decimal leave_halfHour1 = Convert.ToDecimal(duration) / Convert.ToDecimal(0.5);
+
+
+                            decimal leaveDays = duration / 7.5M;
+                            if (leaveDays % 1 == 0)
+                            {
+                                typeDeduction = ConvertToDecimal(personalkLeave_dailywage_day * leaveDays);
+                                mealDeduction = 10 * leaveDays; //餐补扣款
+                            }
+                            else
+                            {
+                                typeDeduction = personalkLeave_dailywage_day * Convert.ToInt32(leaveDays);
+                                decimal sy_shijiaunit = leave_halfHour1 - Convert.ToDecimal(15.00M * Convert.ToInt32(leaveDays));
+                                if (sy_shijiaunit > 0)
+                                {
+                                    typeDeduction += ConvertToDecimal(personalkLeave_dailywage_halfhour * sy_shijiaunit);
+                                }
+                                mealDeduction = 10 * Convert.ToInt32(leaveDays);
+
+                                //得到最后一天的请假时间 是否有餐补
+                                int lastHours = (Convert.ToDateTime(endTime) - Convert.ToDateTime("09:00")).Hours;
+                                if (lastHours >= 3)
+                                {
+                                    mealDeduction += 10; //餐补扣款
+                                }
+                            }
+                        }
+                    }
+
+                    break;
+                case 3: //3病假
+                        // 病假日薪 *计算方式:日平均工资 = 成都市最低工资标准的80% /当月应出勤天数。 短期病假=当月15天内 
+                    decimal chengDuMinimumWage_Day = _chengDuMinimumWage / work_days;
+                    decimal chengDuMinimumWage_halrHour = chengDuMinimumWage_Day / 7.50M;
+                    decimal sickLeave_dailywage_halfhour_deduction1 = (personalkLeave_dailywage_day / 7.50M) - chengDuMinimumWage_halrHour; //病假单位 0.5小时 扣款金额
+
+                    if (date_Range_type == "halfday")
+                    {
+                        mealDeduction = 10.00M * Math.Ceiling(duration); //餐补扣款 
+
+                        decimal pl_dailywage_day = personalkLeave_dailywage_day - chengDuMinimumWage_Day;
+                        if (duration % 1 == 0) //整天
+                        {
+                            typeDeduction = ConvertToDecimal(pl_dailywage_day * duration);
+                        }
+                        else //多含 半天 另外处理
+                        {
+                            #region 处理当天是否扣除餐补
+                            string formatDt_begin = startTime.ToString("yyyy-MM-dd");
+                            List<LeaveDetails> leaveDetails1 = leaveDetails.Where(it => it.IsDeduction && it.EndDt.ToString("yyyy-MM-dd") == formatDt_begin).ToList();
+                            if (leaveDetails1.Count > 0) mealDeduction = 10.00M * Math.Floor(duration); //餐补扣款 
+                            else mealDeduction = 10.00M * Math.Ceiling(duration); //餐补扣款 
+                            #endregion
+
+                            if (duration % 1 > 0)
+                            {
+                                typeDeduction = (pl_dailywage_day / 2.00M) * (duration / 0.50M); ;
+
+                            }
+                            else
+                            {
+                                typeDeduction = (pl_dailywage_day / 2.00M);
+                            }
+
+                            typeDeduction = ConvertToDecimal(typeDeduction);
+                        }
+                    }
+                    else if (date_Range_type == "hour")
+                    {
+                        decimal sickLeave_halfHour = duration / 0.5M;
+                        typeDeduction = ConvertToDecimal(sickLeave_dailywage_halfhour_deduction1 * sickLeave_halfHour);
+
+                        if (duration >= 3 && duration < 7.5M) //单天请假三小时 && 请假时间在上午 则没有餐补
+                        {
+                            mealDeduction = 10; //餐补扣款
+                        }
+                        else if (duration >= 7.5M) //多天计算
+                        {
+                            decimal sickLeave_halfHour1 = duration / 0.5M;
+
+                            decimal leaveDays = Convert.ToDecimal(duration / 7.5M);
+
+                            typeDeduction = ConvertToDecimal(sickLeave_dailywage_halfhour_deduction1 * sickLeave_halfHour1);
+                            if (leaveDays % 1 == 0)
+                            {
+                                mealDeduction = 10 * leaveDays; //餐补扣款
+                            }
+                            else
+                            {
+                                mealDeduction = 10 * Convert.ToInt32(leaveDays);
+
+                                typeDeduction = ConvertToDecimal(sickLeave_dailywage_halfhour_deduction1 * Convert.ToInt32(leaveDays));
+
+                                decimal sy_bingjiaunit = sickLeave_halfHour1 - Convert.ToDecimal(15.00M * Convert.ToInt32(leaveDays));
+                                if (sy_bingjiaunit > 0)
+                                {
+                                    typeDeduction += ConvertToDecimal(sickLeave_dailywage_halfhour_deduction1 * sy_bingjiaunit);
+                                }
+
+                                //得到最后一天的请假时间 是否有餐补
+                                int lastHours = (Convert.ToDateTime(endTime) - Convert.ToDateTime("09:00")).Hours;
+                                if (lastHours >= 3)
+                                {
+                                    mealDeduction += 10; //餐补扣款
+                                }
+                            }
+                        }
+                    }
+                    break;
+                case 4: //4调休假
+                    CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
+                    break;
+                case 5: //5婚假
+                    CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
+                    break;
+                case 6: //6产假
+                    CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
+                    break;
+                case 7: //7陪产假
+                    CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
+                    break;
+                case 8: //8其他
+                    CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
+                    break;
+                case 9: //9丧假
+                    CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
+                    break;
+
+            }
+        }
+
+
+
+        /// <summary>
+        /// 计算类型费用
+        /// 病假 事假 计算 按小时计算
         /// </summary>
         /// <param name="leaveType">
         /// 1年假;2事假;3病假;4调休假;5婚假;6产假;7陪产假;8其他;9丧假
@@ -1192,7 +1547,7 @@ namespace OASystem.API.OAMethodLib
         /// <param name="duration"></param>
         /// <param name="mealDeduction"></param>
         /// <param name="typeDeduction"></param>
-        public static void CalculateTypeFee(List<LeaveDetails> leaveDetails,int leaveType, string date_Range_type, DateTime startTime, DateTime endTime,
+        public static void CalculateTypeFee2(List<LeaveDetails> leaveDetails,int leaveType, string date_Range_type, DateTime startTime, DateTime endTime,
             decimal amountPayable,int work_days, decimal duration, out decimal mealDeduction, out decimal typeDeduction)
         {
             typeDeduction = 0;
@@ -1200,8 +1555,6 @@ namespace OASystem.API.OAMethodLib
 
             string am_starttime = "08:59";
             string am_endtime = "13:01";
-            //string startTime = startTime1.ToString("HH:mm:ss");
-            //string endTime = endTime1.ToString("HH:mm:ss");
 
             decimal personalkLeave_dailywage_day = amountPayable / work_days; //日薪 = 事假日薪 *计算方式:日平均工资 = 当月应发工资 /当月应出勤天数。
 
@@ -1235,7 +1588,22 @@ namespace OASystem.API.OAMethodLib
                             var njManyDaysItem = leaveDetails.Where(it => it.StartDt.ToString("yyyy-MM-dd") == startTime.ToString("yyyy-MM-dd")).ToList();
                             if (njManyDaysItem.Count > 1)
                             {
-                                mealDeduction = 10 * Math.Floor(duration);
+                                var njManyDaysItem1 = njManyDaysItem.Where(it => it.StartDt != startTime).ToList();
+                                if (njManyDaysItem1.Count > 0)
+                                {
+                                    if (njManyDaysItem1[0].Unit.Equals("天"))
+                                    {
+                                        mealDeduction = 10 * Math.Floor(duration);
+                                    }
+                                    else if (njManyDaysItem1[0].Unit.Equals("小时") && njManyDaysItem1[0].New_Duration >= 3)
+                                    {
+                                        mealDeduction = 10 * Math.Floor(duration);
+                                    }
+                                    else
+                                    {
+                                        mealDeduction = 10 * Math.Ceiling(duration);
+                                    }
+                                }                            
                             }
                             else
                             {
@@ -1247,12 +1615,46 @@ namespace OASystem.API.OAMethodLib
                     break;
                 case 2: //2事假
                     // 事假日薪 *计算方式:日平均工资 = 当月应发工资 /当月应出勤天数。 
-                    decimal personalkLeave_dailywage_halfhour =  personalkLeave_dailywage_day / halfHour; //事假单位 0.5小时
+                    decimal personalkLeave_dailywage_halfhour =  personalkLeave_dailywage_day / 7.50M; //事假单位 0.5小时
 
                     if (date_Range_type == "halfday")
                     {
-                        mealDeduction = 10; //餐补扣款 
-                        typeDeduction = ConvertToDecimal(personalkLeave_dailywage_day);
+                        mealDeduction = 10.00M * Math.Floor(duration); //餐补扣款 
+                        if (duration % 1 == 0) //整天
+                        {
+                            typeDeduction = ConvertToDecimal(personalkLeave_dailywage_day * duration);
+                        }
+                        else //多含 半天 另外处理
+                        {
+                            decimal sj_wholeDay = Math.Floor(duration); //整天
+                            decimal sj_halfDay = duration % 1; //半天
+
+                            if (sj_halfDay > 0)
+                            {
+                                LeaveDetails sjDetails = leaveDetails.Where(it => it.StartDt == startTime && it.EndDt == endTime).FirstOrDefault();
+                                decimal sjPrice = 0.00M;
+                                if (sjDetails != null)
+                                {
+                                    Slice_info sj_slice_Info = sjDetails.SliceInfo;
+                                    if (sj_slice_Info != null)
+                                    {
+                                        decimal sjLongTime = (sj_slice_Info.duration / 3600.00M);
+                                        typeDeduction = (personalkLeave_dailywage_day / 7.50M) * sjLongTime;
+                                    }
+                                }
+
+                                LeaveDetails sjDetailsMeal = leaveDetails.Where(it => it.EndDt == startTime ).FirstOrDefault();
+                                if (sjDetailsMeal == null)
+                                {
+                                    mealDeduction += 10.00M;
+                                }
+                            }
+                            else
+                            {
+                                typeDeduction = personalkLeave_dailywage_day* sj_wholeDay;
+                            }
+                            typeDeduction = ConvertToDecimal(typeDeduction);
+                        }
                     }
                     else if (date_Range_type == "hour")
                     {
@@ -1298,15 +1700,48 @@ namespace OASystem.API.OAMethodLib
 
                     break;
                 case 3: //3病假
-                    // 病假日薪 *计算方式:日平均工资 = 成都市最低工资标准的80% /当月应出勤天数。 短期病假=当月15天内 
-
-                    decimal chengDuMinimumWage_halrHour = _chengDuMinimumWage / work_days / halfHour;
-                    decimal sickLeave_dailywage_halfhour_deduction1 = (personalkLeave_dailywage_day / halfHour) - chengDuMinimumWage_halrHour; //病假单位 0.5小时 扣款金额
+                        // 病假日薪 *计算方式:日平均工资 = 成都市最低工资标准的80% /当月应出勤天数。 短期病假=当月15天内 
+                    decimal chengDuMinimumWage_Day = _chengDuMinimumWage / work_days;
+                    decimal chengDuMinimumWage_halrHour = chengDuMinimumWage_Day / 7.50M;
+                    decimal sickLeave_dailywage_halfhour_deduction1 = (personalkLeave_dailywage_day / 7.50M) - chengDuMinimumWage_halrHour; //病假单位 0.5小时 扣款金额
 
                     if (date_Range_type == "halfday")
                     {
-                        mealDeduction = 10; //餐补扣款 
-                        typeDeduction = ConvertToDecimal( sickLeave_dailywage_halfhour_deduction1 * halfHour);
+                        mealDeduction = 10.00M * Math.Ceiling(duration); //餐补扣款 
+
+                        decimal pl_dailywage_day = personalkLeave_dailywage_day - chengDuMinimumWage_Day;
+                        if (duration % 1 == 0) //整天
+                        {
+                            typeDeduction = ConvertToDecimal(pl_dailywage_day * duration);
+                        }
+                        else //多含 半天 另外处理
+                        {
+                            decimal bj_wholeDay = Math.Floor(duration); //整天
+                            decimal bj_halfDay = duration % 1; //半天
+                            decimal bj_wholeDayWage = pl_dailywage_day * bj_wholeDay;
+                            decimal bj_halfDayWage = 0.00M;
+                            if (bj_halfDay > 0)
+                            {
+                                LeaveDetails bjDetails = leaveDetails.Where(it => it.StartDt == startTime && it.EndDt == endTime).FirstOrDefault();
+
+                                decimal bjPrice = 0.00M;
+                                if (bjDetails != null)
+                                {
+                                    Slice_info bj_slice_Info = bjDetails.SliceInfo;
+                                    decimal bjLongTime = bj_slice_Info.duration / 3600.00M;
+                                    if (bjLongTime == 3.00M)
+                                    {
+                                        bj_halfDayWage =   (pl_dailywage_day / 7.50M) * 3.00M;
+                                    }
+                                    else if (bjLongTime == 4.50M)
+                                    {
+                                        bj_halfDayWage = (pl_dailywage_day / 7.50M) * 4.50M;
+                                    }
+                                }
+                            }
+
+                            typeDeduction = ConvertToDecimal(bj_wholeDayWage + bj_halfDayWage);
+                        }
                     }
                     else if (date_Range_type == "hour")
                     {
@@ -1344,9 +1779,7 @@ namespace OASystem.API.OAMethodLib
                                 int lastHours = (Convert.ToDateTime(endTime) - Convert.ToDateTime("09:00")).Hours;
                                 if (lastHours >= 3)
                                 {
-
                                     mealDeduction += 10; //餐补扣款
-
                                 }
                             }
                         }
@@ -1453,8 +1886,6 @@ namespace OASystem.API.OAMethodLib
                         }
                     }
                 }
-
-                
             }
         }
 

+ 69 - 57
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/QiYeWeChatApiService.cs

@@ -1009,9 +1009,8 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
 
             ApprovalInfoView approvalInfoView = new ApprovalInfoView();
 
-            //获取所有打卡补卡,审批 数据 后范围增加15天
-            DateTime sp_startDt = startDt;
-            DateTime sp_centerDt = endDt;
+            //获取所有打卡补卡,审批 数据 向前增加30天 向后范围增加15天
+            DateTime sp_startDt = startDt.AddDays(-30);
             DateTime sp_endDt = endDt.AddDays(15);
             
             //获取审批数据 token
@@ -1035,75 +1034,88 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
                 filters.Add(new Dic() { key = "record_type", value = record_type.ToString() });  //筛选条件 审批单类型 请假 1
             }
 
-            ApprovalInfo_Request approvalInfoReq = new ApprovalInfo_Request()
-            {
-                access_token = access_Token.access_token,
-                starttime = (uint)ConvertToTimeSpan(sp_startDt),
-                endtime = (uint)ConvertToTimeSpan(sp_centerDt),
-                filters = filters.ToList(),
-            };
-            var json = System.Text.Json.JsonSerializer.Serialize(approvalInfoReq);
-            var content = new StringContent(json, Encoding.UTF8, "application/json");
-            var create_Req = await _httpClient.PostAsync(url, content);
-            var stringResponse = await create_Req.Content.ReadAsStringAsync();
+            int days = (sp_endDt - sp_startDt).Days;
+            decimal runCount = days % 30;
+            int runCount1 = 0;
+            if (runCount == 0) runCount1 =(int)(days % 30.00M);
+            else runCount1 = (int)Math.Ceiling(days / 30.00M);
 
-            ApprovalInfoView approvalInfoView1 = System.Text.Json.JsonSerializer.Deserialize<ApprovalInfoView>(stringResponse,
-                new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
 
-            if (approvalInfoView1.errcode != 0)
+            List<string> sp_no_lists = new List<string>();
+            for (int i = 0; i < runCount1; i++)
             {
-                return approvalInfoView1;
-            }
+                DateTime for_sp_startDt = sp_startDt;
+                DateTime for_sp_endDt = sp_startDt.AddDays(30);
+                sp_startDt = sp_startDt.AddDays(30);
+                if (for_sp_endDt >= sp_endDt)
+                {
+                    for_sp_endDt = sp_endDt;
+                }
 
-            ApprovalInfo_Request approvalInfoReq1 = new ApprovalInfo_Request()
-            {
-                access_token = access_Token.access_token,
-                starttime = (uint)ConvertToTimeSpan(sp_centerDt),
-                endtime = (uint)ConvertToTimeSpan(sp_endDt),
-                filters = filters.ToList(),
-            };
-            var json1 = System.Text.Json.JsonSerializer.Serialize(approvalInfoReq1);
-            var content1 = new StringContent(json1, Encoding.UTF8, "application/json");
-            var create_Req1 = await _httpClient.PostAsync(url, content1);
-            var stringResponse1 = await create_Req1.Content.ReadAsStringAsync();
+                ApprovalInfo_Request approvalInfoReq = new ApprovalInfo_Request()
+                {
+                    access_token = access_Token.access_token,
+                    starttime = (uint)ConvertToTimeSpan(for_sp_startDt),
+                    endtime = (uint)ConvertToTimeSpan(for_sp_endDt),
+                    filters = filters.ToList(),
+                };
+                var json = System.Text.Json.JsonSerializer.Serialize(approvalInfoReq);
+                var content = new StringContent(json, Encoding.UTF8, "application/json");
+                var create_Req = await _httpClient.PostAsync(url, content);
+                var stringResponse = await create_Req.Content.ReadAsStringAsync();
 
-            ApprovalInfoView approvalInfoView2 = System.Text.Json.JsonSerializer.Deserialize<ApprovalInfoView>(stringResponse1,
-                new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
-            if (approvalInfoView2.errcode != 0)
-            {
-                return approvalInfoView1;
-            }
+                ApprovalInfoView approvalInfoView1 = System.Text.Json.JsonSerializer.Deserialize<ApprovalInfoView>(stringResponse,
+                    new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
+
+                #region 分页调用  new_next_cursor != null 
+                string new_cursor = approvalInfoView1.new_next_cursor;
+
+                while (!string.IsNullOrEmpty(new_cursor))
+                {
+                    approvalInfoReq.new_cursor = new_cursor;
 
-            approvalInfoView1.sp_no_list.AddRange(approvalInfoView2.sp_no_list);
+                    var json1 = System.Text.Json.JsonSerializer.Serialize(approvalInfoReq);
+                    var content1 = new StringContent(json, Encoding.UTF8, "application/json");
+                    var create_Req1 = await _httpClient.PostAsync(url, content1);
+                    var stringResponse1 = await create_Req1.Content.ReadAsStringAsync();
 
-            //List<string> sp_datas = new List<string>();
-            //sp_datas.AddRange(approvalInfoView1.sp_no_list);
-            //sp_datas.AddRange(approvalInfoView2.sp_no_list);
+                    ApprovalInfoView approvalInfoView11 = System.Text.Json.JsonSerializer.Deserialize<ApprovalInfoView>(stringResponse1,
+                        new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
 
+                    if (approvalInfoView11.errcode != 0)
+                    {
+                        return approvalInfoView1;
+                    }
+                    new_cursor = approvalInfoView11.new_next_cursor;
+                    if (approvalInfoView11.sp_no_list.Count > 0 || approvalInfoView11.sp_no_list != null)
+                    {
+                        sp_no_lists.AddRange(approvalInfoView1.sp_no_list);
+                    }
+                }
+                #endregion
 
-            //int index = 0;
-            //while (true)
-            //{
-            //    if (string.IsNullOrEmpty(approvalInfoView.new_next_cursor)) break;
-            //    string new_cursor = approvalInfoView.new_next_cursor;
-            //    approvalInfoReq.new_cursor = new_cursor;
-            //    var while_json = System.Text.Json.JsonSerializer.Serialize(approvalInfoReq);
-            //    var while_content = new StringContent(while_json, Encoding.UTF8, "application/json");
-            //    var while_create_Req = await _httpClient.PostAsync(url, while_content);
-            //    var while_stringResponse = await while_create_Req.Content.ReadAsStringAsync();
+                if (approvalInfoView1.errcode != 0)
+                {
+                    return approvalInfoView1;
+                }
 
-            //    approvalInfoView = System.Text.Json.JsonSerializer.Deserialize<ApprovalInfoView>(while_stringResponse,
-            //        new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
+                if (approvalInfoView1.sp_no_list.Count > 0 || approvalInfoView1.sp_no_list != null)
+                {
+                    sp_no_lists.AddRange(approvalInfoView1.sp_no_list);
+                }
 
-            //    sp_datas.AddRange(approvalInfoView.sp_no_list); //追加数据
-            //    index++;
-            //}
+            }
+            approvalInfoView.errcode = 0;
 
-            //approvalInfoView.sp_no_list = sp_datas;
+            if (sp_no_lists.Count > 0)
+            {
+                sp_no_lists = sp_no_lists.Distinct().ToList();
+            }
 
+            approvalInfoView.sp_no_list = sp_no_lists;
             sw.Stop();
             approvalInfoView.errmsg = approvalInfoView.errmsg + " 耗时:" + sw.Elapsed.TotalMilliseconds + "ms";
-            return approvalInfoView1;
+            return approvalInfoView;
         }
 
         /// <summary>

+ 23 - 3
OASystem/OASystem.Domain/Dtos/Groups/HotelReservationsDto.cs

@@ -59,7 +59,7 @@ namespace OASystem.Domain.Dtos.Groups
         /// <summary>
         /// 信用卡类型 (设置数据外键编号)
         /// </summary>
-        public int CardPriceCurrency { get; set; }
+        public int CTDId { get; set; }
 
         /// <summary>
         /// 入住卷号
@@ -76,6 +76,11 @@ namespace OASystem.Domain.Dtos.Groups
         /// </summary>
         public string? ReservationsNo { get; set; }
 
+        /// <summary>
+        /// 确认号码
+        /// </summary>
+        public string? DetermineNo { get; set; }
+
         /// <summary>
         /// 城市
         /// </summary>
@@ -87,7 +92,7 @@ namespace OASystem.Domain.Dtos.Groups
         public string? HotelName { get; set; }
 
         /// <summary>
-        /// 酒店名称
+        /// 酒店电话
         /// </summary>
         public string? HotelTel { get; set; }
 
@@ -232,6 +237,20 @@ namespace OASystem.Domain.Dtos.Groups
         /// </summary>
         public int PaymentCurrency { get; set; }
 
+        /// <summary>
+        /// 银行卡号
+        /// </summary>
+        public string? BankNo { get; set; }
+        /// <summary>
+        /// 持卡人姓名
+        /// </summary>
+        public string? CardholderName { get; set; }
+
+        /// <summary>
+        /// 公司银行账号
+        /// </summary>
+        public string? CompanyBankNo { get; set; }
+
         /// <summary>
         /// 对方开户行
         /// </summary>
@@ -254,8 +273,9 @@ namespace OASystem.Domain.Dtos.Groups
 
         /// <summary>
         /// 费用标识 (设置数据外键编号)
+        /// 可不选
         /// </summary>
-        public int OrbitalPrivateTransfer { get; set; }
+        public int OrbitalPrivateTransfer { get; set; } = -1;
 
         /// <summary>
         /// C表付款信息 备注

+ 22 - 3
OASystem/OASystem.Domain/ViewModels/Groups/HotelReservationsByDiIdView.cs

@@ -116,9 +116,9 @@ namespace OASystem.Domain.ViewModels.Groups
         public int GTId { get; set; }
 
         /// <summary>
-        /// 信用卡类型 (设置数据外键编号)
+        /// 卡类型 (设置数据外键编号)
         /// </summary>
-        public int CardPriceCurrency { get; set; }
+        public int CTDId { get; set; }
 
         /// <summary>
         /// 入住卷号
@@ -134,6 +134,11 @@ namespace OASystem.Domain.ViewModels.Groups
         /// 预订号码
         /// </summary>
         public string? ReservationsNo { get; set; }
+        
+        /// <summary>
+        /// 确认号码
+        /// </summary>
+        public string? DetermineNo { get; set; }
 
         /// <summary>
         /// 城市
@@ -146,7 +151,7 @@ namespace OASystem.Domain.ViewModels.Groups
         public string? HotelName { get; set; }
 
         /// <summary>
-        /// 酒店名称
+        /// 酒店电话
         /// </summary>
         public string? HotelTel { get; set; }
 
@@ -291,6 +296,20 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public int PaymentCurrency { get; set; }
 
+        /// <summary>
+        /// 银行卡号
+        /// </summary>
+        public string? BankNo { get; set; }
+        /// <summary>
+        /// 持卡人姓名
+        /// </summary>
+        public string? CardholderName { get; set; }
+
+        /// <summary>
+        /// 公司银行账号
+        /// </summary>
+        public string? CompanyBankNo { get; set; }
+
         /// <summary>
         /// 对方开户行
         /// </summary>

+ 18 - 1
OASystem/OASystem.Domain/ViewModels/PersonnelModule/WageSheetView.cs

@@ -1,5 +1,6 @@
 using Newtonsoft.Json;
 using OASystem.Domain.Entities.PersonnelModule;
+using OASystem.Domain.ViewModels.QiYeWeChat;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -482,6 +483,16 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         /// 申请时间
         /// </summary>
         public DateTime  ApplyDt { get; set; }
+
+        /// <summary>
+        /// 时长支持按天分片信息, 2020/10/01之前的历史表单不支持时长分片
+        /// </summary>
+        public Slice_info SliceInfo { get; set; }
+
+        /// <summary>
+        /// 餐补是否参与扣款
+        /// </summary>
+        public bool IsDeduction { get; set; } = false;
     }
 
 
@@ -512,7 +523,13 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         /// <summary>
         /// 扣款金额
         /// </summary>
-        public decimal Deduction { get; set; }
+        public decimal Deduction { get; set; } = 0.00M;
+
+
+        /// <summary>
+        /// 餐补扣款金额
+        /// </summary>
+        public decimal MealDeduction { get; set; } = 0.00M;
 
         /// <summary>
         /// 开始时间

+ 8 - 0
OASystem/OASystem.Domain/ViewModels/QiYeWeChat/ApprovalDataView.cs

@@ -248,6 +248,14 @@ namespace OASystem.Domain.ViewModels.QiYeWeChat
         /// 日期的00:00:00时间戳,Unix时间
         /// </summary>
         public long daytime { get; set; }
+
+        public DateTime daytimeDt
+        {
+            get
+            {
+                return new DateTime(daytime * 10000000 + 621355968000000000L).ToLocalTime();
+            }
+        }
         ///// <summary>
         ///// 
         ///// </summary>

+ 5 - 0
OASystem/OASystem.Domain/ViewModels/System/SetDataView.cs

@@ -60,6 +60,11 @@ namespace OASystem.Domain.ViewModels.System
                 return currency;
             } }
 
+        /// <summary>
+        /// 持卡人
+        /// </summary>
+        public string? Cardholder { get; set; } = "Zhang Hailin";
+
         /// <summary>
         /// 卡号
         /// </summary>

+ 27 - 25
OASystem/OASystem.Infrastructure/Repositories/Groups/CustomersRepository.cs

@@ -213,37 +213,39 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
                 //卡类型
                 List<Sys_SetData> BankCard = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 15 && a.IsDel == 0).ToList();
-                List<SetDataInfoView> _BankCard = _mapper.Map<List<SetDataInfoView>>(BankCard);
+                List<SetDataCurrencyInfoView> _BankCard = _mapper.Map<List<SetDataCurrencyInfoView>>(BankCard).Where(s=> (s.Currency ?? "") == "CNY" ).ToList();
 
                 //保险名称
-                List<Grp_InsuranceCost> _InsuranceCosts=_sqlSugar.Queryable<Grp_InsuranceCost>().Where(a=>a.IsDel==0).ToList();
-                List<InsuranceCostView> insuranceCostViews = new List<InsuranceCostView>();
-                foreach (var item in _InsuranceCosts)
-                {
-                    InsuranceCostView costView=new InsuranceCostView();
-                    costView.Id=item.Id;
-                    costView.GName=item.GName;
-                    costView.Balance = 0.00M;
-                    string CountSql = string.Format(@"select sum(InsuranceCosts) as CountCost from Grp_Customers where isdel=0 and Iid=" + item.Id);
-                    DataCountCost dataCount = _sqlSugar.SqlQueryable<DataCountCost>(CountSql).First();
-                    costView.Balance = Math.Round(item.RechargeCost - dataCount.CountCost, 2);
-                    insuranceCostViews.Add(costView);
-                }
+                //List<Grp_InsuranceCost> _InsuranceCosts=_sqlSugar.Queryable<Grp_InsuranceCost>().Where(a=>a.IsDel==0).ToList();
+                //List<InsuranceCostView> insuranceCostViews = new List<InsuranceCostView>();
+                //foreach (var item in _InsuranceCosts)
+                //{
+                //    InsuranceCostView costView=new InsuranceCostView();
+                //    costView.Id=item.Id;
+                //    costView.GName=item.GName;
+                //    costView.Balance = 0.00M;
+                //    string CountSql = string.Format(@"select sum(InsuranceCosts) as CountCost from Grp_Customers where isdel=0 and Iid=" + item.Id);
+                //    DataCountCost dataCount = _sqlSugar.SqlQueryable<DataCountCost>(CountSql).First();
+                //    costView.Balance = Math.Round(item.RechargeCost - dataCount.CountCost, 2);
+                //    insuranceCostViews.Add(costView);
+                //}
                 //币种
-                GeneralTeamRateInfoDto PostGroupTeamRatedto = new GeneralTeamRateInfoDto();
-                PostGroupTeamRatedto.DiId = dto.DiId;
-                PostGroupTeamRatedto.CTable = 82;
-                PostGroupTeamRatedto.PortType = dto.PortType;
-                Result teamRateDescAddCurrencyIdViews = _hotel.PostGroupTeamRateByDiIdAndCTableId(PostGroupTeamRatedto);
+                //GeneralTeamRateInfoDto PostGroupTeamRatedto = new GeneralTeamRateInfoDto();
+                //PostGroupTeamRatedto.DiId = dto.DiId;
+                //PostGroupTeamRatedto.CTable = 82;
+                //PostGroupTeamRatedto.PortType = dto.PortType;
+                //Result teamRateDescAddCurrencyIdViews = _hotel.PostGroupTeamRateByDiIdAndCTableId(PostGroupTeamRatedto);
                 List<TeamRateDescAddCurrencyIdView> Currency = new List<TeamRateDescAddCurrencyIdView>();
-                if (teamRateDescAddCurrencyIdViews.Code == 0)
-                {
-                    Currency = teamRateDescAddCurrencyIdViews.Data;
-                }
-                
+                TeamRateDescAddCurrencyIdView cny = new TeamRateDescAddCurrencyIdView() { CurrencyCode = "CNY", CurrencyId = 836, CurrencyName = "人民币", Rate = 1 }; //保险修改,只要人民币
+                Currency.Add(cny);
+                //if (teamRateDescAddCurrencyIdViews.Code == 0)
+                //{
+                //    Currency = teamRateDescAddCurrencyIdViews.Data;
+                //}
+
+                //insuranceCost = insuranceCostViews,
                     var data = new
                     {
-                        insuranceCost= insuranceCostViews,
                         Payment = _Payment,
                         CurrencyList = Currency,
                         BankCard = _BankCard,

+ 29 - 19
OASystem/OASystem.Infrastructure/Repositories/Groups/HotelPriceRepository.cs

@@ -785,6 +785,14 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 {
                     TeamCurrencyRate = teamRateDescAddCurrencyIdViews.Data;
                 }
+
+                string _CheckVolumeNo = string.Empty;
+                var checkVoumeNoData = _CreateCheckVolumeNo(diId);
+                if (checkVoumeNoData.Result.Code == 0)
+                {
+                    _CheckVolumeNo = checkVoumeNoData.Result.Data;
+                }
+
                 var data = new
                 {
                     GuestType = _GuestType, //客人分类
@@ -792,7 +800,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     CurrencyList = TeamCurrencyRate,
                     BankCard = _BankCard,
                     BookingWebsite = _BookingWebsite,
-                    CheckPerson = _CheckPerson
+                    CheckPerson = _CheckPerson,
+                    CheckVolumeNo = _CheckVolumeNo
                 };
 
                 _result.Code = 0;
@@ -845,7 +854,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
         }
 
         /// <summary>
-        /// 酒店预定
+        /// 酒店预定-
         /// details
         /// </summary>
         /// <param name="dto"></param>
@@ -859,17 +868,18 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 return _result;
             }
 
-            string sql = string.Format(@"Select hr.Id,hr.DiId,hr.GTId,hr.CardPriceCurrency,hr.CheckNumber,hr.ReservationsWebsite,hr.ReservationsNo,
-										 hr.City,hr.HotelName,hr.HotelTel,hr.HotelAddress,hr.GuestName,hr.CheckInDate,hr.CheckOutDate,hr.CheckType,
-										 hr.RoomExplanation,hr.Remark As HotelRemark,hr.SingleRoomPrice,hr.SingleRoomCount,hr.DoubleRoomPrice,
-										 hr.DoubleRoomCount,hr.SuiteRoomPrice,hr.SuiteRoomCount,hr.OtherRoomPrice,hr.OtherRoomCount,hr.CardPrice,
-										 hr.Isoppay,hr.BreakfastPrice,hr.BreakfastCurrency,hr.GovernmentRent,hr.GovernmentRentCurrency,hr.CityTax,
-										 hr.CityTaxCurrency,ccp.PayDId,ccp.ConsumptionPatterns,ccp.ConsumptionDate,ccp.PayMoney,ccp.PaymentCurrency,
-										 ccp.OtherBankName,ccp.OtherSideNo,ccp.OtherSideName,ccp.Payee,ccp.OrbitalPrivateTransfer,ccp.Remark As CcpRemark
-										 From Grp_HotelReservations  hr
-										 Inner Join Grp_CreditCardPayment ccp On hr.DiId = ccp.DIId And hr.Id = ccp.CId 
-										 And ccp.CTable = 76
-										 Where hr.IsDel = 0 And ccp.IsDel = 0 And  hr.Id = {0}", id);
+            string sql = string.Format(@"Select hr.Id,hr.DiId,hr.GTId,ccp.CTDId,hr.CheckNumber,hr.ReservationsWebsite,hr.ReservationsNo,
+                                         hr.DetermineNo,hr.City,hr.HotelName,hr.HotelTel,hr.HotelAddress,hr.GuestName,hr.CheckInDate,hr.CheckOutDate,
+                                         hr.CheckType,hr.RoomExplanation,hr.Remark As HotelRemark,hr.SingleRoomPrice,hr.SingleRoomCount,hr.DoubleRoomPrice,
+                                         hr.DoubleRoomCount,hr.SuiteRoomPrice,hr.SuiteRoomCount,hr.OtherRoomPrice,hr.OtherRoomCount,hr.CardPrice,
+                                         hr.Isoppay,hr.BreakfastPrice,hr.BreakfastCurrency,hr.GovernmentRent,hr.GovernmentRentCurrency,hr.CityTax,
+                                         hr.CityTaxCurrency,ccp.PayDId,ccp.ConsumptionPatterns,ccp.ConsumptionDate,ccp.PayMoney,ccp.PaymentCurrency,
+                                         ccp.BankNo,ccp.CardholderName,ccp.CompanyBankNo,ccp.OtherBankName,ccp.OtherSideNo,ccp.OtherSideName,ccp.Payee,
+                                         ccp.OrbitalPrivateTransfer,ccp.Remark As CcpRemark
+                                         From Grp_HotelReservations hr
+                                         Inner Join Grp_CreditCardPayment ccp On hr.DiId = ccp.DIId And hr.Id = ccp.CId 
+                                         And ccp.CTable = 76
+                                         Where hr.IsDel = 0 And ccp.IsDel = 0 And  hr.Id = {0}", id);
 
             if (portType == 1 || portType == 2 || portType == 3)
             {
@@ -909,7 +919,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 _HotelReservations.CreateUserId = _dto.UserId;
                 _HotelReservations.Remark = _dto.HotelRemark;
 
-                #region CCP 表参数
+                #region CCP 表参数 
                 _CreditCardPayment.CreateUserId = _dto.UserId;
                 _CreditCardPayment.DIId = _dto.DiId;
                 _CreditCardPayment.CTable = 76;
@@ -960,11 +970,11 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 _CreditCardPayment.DayRate = teamRateDescView.Rate;
                 _CreditCardPayment.RMBPrice = (_CreditCardPayment.DayRate * _CreditCardPayment.PayMoney).DecimalsKeepTwo();
 
-                if (_CreditCardPayment.PayDId == 72) //刷卡
-                {
-                    _CreditCardPayment.BankNo = "6222 **** **** 7990";
-                    _CreditCardPayment.CardholderName = "Zhang Hailin";
-                }
+                //if (_CreditCardPayment.PayDId == 72) //刷卡
+                //{
+                //    _CreditCardPayment.BankNo = "6222 **** **** 7990";
+                //    _CreditCardPayment.CardholderName = "Zhang Hailin";
+                //}
 
 
                 _CreditCardPayment.Remark = _dto.CcpRemark;