소스 검색

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

jiangjc 1 년 전
부모
커밋
6c16cc10f3

+ 3 - 3
OASystem/EntitySync/Program.cs

@@ -94,7 +94,7 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Fin_DailyFeePayment),       // 财务 - 日付申请
     //typeof(Fin_DailyFeePaymentContent),// 财务 - 日付申请详细类
     //typeof(Grp_GroupsTaskAssignment),
-    //typeof(Grp_AirTicketReservations),
+    typeof(Grp_AirTicketReservations),
     //typeof(Grp_GroupCostParameter),
     //typeof(Grp_TeamRate),              // 团组汇率
     //typeof(Fin_ForeignReceivables),    // 对外收款账单
@@ -108,7 +108,7 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Grp_NationalTravelFee),
     //typeof(Air_TicketBlackCode),
     //typeof(Pm_WageSheet)       //人事模块 工资表单
-    typeof(Grp_VisaProgressCustomer),
-    typeof(Grp_VisaProgressCustomerPicture)
+    //typeof(Grp_VisaProgressCustomer),
+    //typeof(Grp_VisaProgressCustomerPicture)
 });
 Console.WriteLine("数据库结构同步完成!");

+ 2 - 7
OASystem/OASystem.Api/Controllers/AuthController.cs

@@ -227,18 +227,13 @@ namespace OASystem.API.Controllers
             #endregion
 
 
-            var userData = _loginRep.Register(_loginRep, dto);
+            var userData = _loginRep.Register(dto);
             if (userData.Result.Code != 0)
             {
-                if (userData.Result.Code != 0) { return Ok(JsonView(false, userData.Result.Msg)); }
-
                 return Ok(JsonView(false, "注册失败!"));
             }
 
-           
-
-
-            return Ok(new { Code = 0, Msg = userData.Result.Msg });
+            return Ok(JsonView(true, userData.Result.Msg));
         }
 
         /// <summary>

+ 2 - 0
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -906,6 +906,8 @@ namespace OASystem.API.Controllers
         {
             try
             {
+                
+
                 Result groupData = await _airTicketResRep.OpAirTicketRes(dto);
                 if (groupData.Code != 0)
                 {

+ 17 - 34
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -96,14 +96,6 @@ namespace OASystem.API.Controllers
 
             //获取月工资数据
             string yearMonth = yearMonthDt.ToString("yyyy-MM");
-            string startDt = yearMonthDt.AddDays(-1).ToString("yyyy-MM") + "-28",
-                   endDt = yearMonth + "-27";
-
-            //应发合计 = 基本工资 +绩效工资 + 岗位津贴 + 员工的岗位津贴 + 服装洗理补贴 + 通讯补贴 + 交通补贴 + 保密费 + 操作奖金+ 其他补贴 + 部门集体团建费 + 代扣保险 + 代扣公积金 + 餐补 
-
-            //事假  病假 合计
-
-            //扣款合计 = 迟到 + 早退 + 矿工 + 未打卡 + 其他扣款 
 
             if (dto.PortType == 1)
             {
@@ -224,20 +216,22 @@ namespace OASystem.API.Controllers
             sw.Start();
             //参数处理
             string ymFormat = "yyyy-MM";
-            DateTime yearMonthDt;
-            bool yearMonthDttIsValid = DateTime.TryParseExact(dto.yearMonth, ymFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out yearMonthDt);
+            string dtFormat = "yyyy-MM-dd";
+            DateTime yearMonthDt,startDt,endDt;
+            bool yearMonthDtIsValid = DateTime.TryParseExact(dto.yearMonth, ymFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out yearMonthDt);
+            bool startDtIsValid = DateTime.TryParseExact(dto.startDt, dtFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out startDt);
+            bool endDtIsValid = DateTime.TryParseExact(dto.endDt, dtFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out endDt);
 
-            if (!yearMonthDttIsValid)
-            {
-                return Ok(JsonView(false, "年月格式错误!正确时间格式:yyyy-MM  "));
-            }
+            if (!yearMonthDtIsValid) return Ok(JsonView(false, "年月格式错误!正确时间格式:yyyy-MM  "));
+            if (!startDtIsValid) return Ok(JsonView(false, "开始日期格式错误!正确时间格式:yyyy-MM-dd  "));
+            if (!endDtIsValid) return Ok(JsonView(false, "结束格式错误!正确时间格式:yyyy-MM-dd  "));
 
             string thisYearMonth = dto.yearMonth;
             string preYearMonth = yearMonthDt.AddMonths(-1).ToString("yyyy-MM");
 
-            //计算本月工资起止时间
-            DateTime thisStartDt = Convert.ToDateTime(preYearMonth  + "-28");
-            DateTime thisEndDt = Convert.ToDateTime(thisYearMonth + "-27");
+            //计算本月工资起止时间 比如是2月的1号-28号,那就是2月1号的零点到3月1号的零点 
+            DateTime thisStartDt = startDt;
+            DateTime thisEndDt = endDt.AddDays(1); //
 
             //本月工资是否有数据 有数据则不计算
             result = await _wageSheetRep.Get_WageSheet_ListByYearMonthAsync(thisYearMonth);
@@ -298,7 +292,7 @@ namespace OASystem.API.Controllers
             #endregion
 
             sw.Stop();
-            return Ok(JsonView(true, "操作成功! 耗时:" + sw.ElapsedMilliseconds + "ms"));
+            return Ok(JsonView(true, "操作成功! 耗时:" + (sw.ElapsedMilliseconds/1000) + "s"));
         }
 
 
@@ -322,22 +316,11 @@ namespace OASystem.API.Controllers
             bool startDtIsValid = DateTime.TryParseExact(dto.StartDate, ymdFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out startDt);
             bool endDtIsValid = DateTime.TryParseExact(dto.EndDate, ymdFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out endDt);
 
-            if (!yearMonthDtIsValid)
-                return Ok(JsonView(false, "年月格式错误!正确时间格式:yyyy-MM  "));
-
-            if (!startDtIsValid)
-                return Ok(JsonView(false, "开始时间格式错误!正确时间格式:yyyy-MM-dd  "));
+            if (!yearMonthDtIsValid) return Ok(JsonView(false, "年月格式错误!正确时间格式:yyyy-MM  "));
 
-            if (!yearMonthDtIsValid)
-                return Ok(JsonView(false, "结束时间格式错误!正确时间格式:yyyy-MM-dd  "));
-
-            //本月工资是否有数据 有数据则不计算
-            //result = await _wageSheetRep.Get_WageSheet_ListByYearMonthAsync(dto.YearMonth);
-            //if (result.Code == 0)
-            //{
-            //    return Ok(JsonView(false, dto.YearMonth + " 工资数据已存在,若无人员工资请手动添加!"));
-            //}
+            if (!startDtIsValid) return Ok(JsonView(false, "开始时间格式错误!正确时间格式:yyyy-MM-dd  "));
 
+            if (!yearMonthDtIsValid) return Ok(JsonView(false, "结束时间格式错误!正确时间格式:yyyy-MM-dd  "));
 
             List<Pm_WageSheet> wageSheets = new List<Pm_WageSheet>();
             Pm_WageSheet wageSheet = _mapper.Map<Pm_WageSheet>(dto);
@@ -346,7 +329,7 @@ namespace OASystem.API.Controllers
             var nameData = await _usersRep.GetUserNameList(1);
             List<UserNameView>? userNames = nameData.Data;
 
-            _result = await PayrollComputation.SalaryCalculatorAsync(wageSheets, userNames, dto.UserId, dto.YearMonth, startDt, endDt);
+            _result = await PayrollComputation.SalaryCalculatorAsync(wageSheets, userNames, dto.UserId, dto.YearMonth, startDt, endDt.AddDays(1));
 
             if (_result.Code != 0)
             {
@@ -376,7 +359,7 @@ namespace OASystem.API.Controllers
                 #endregion
 
             sw.Stop();
-                return Ok(JsonView(true, "操作成功!耗时:"+ sw.ElapsedMilliseconds +"ms", wageSheetItems[0]));
+            return Ok(JsonView(true, "操作成功!耗时:" + (sw.ElapsedMilliseconds / 1000) + "s", wageSheetItems[0]));
            
             
         }

+ 393 - 438
OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

@@ -33,7 +33,7 @@ namespace OASystem.API.OAMethodLib
         /// <param name="endDt"></param>
         /// <returns></returns>
         public static async Task<Result> SalaryCalculatorAsync(
-            List<Pm_WageSheet> pm_WageSheetDattaSources, List<UserNameView> userNames,int userId, string thisYearMonth, DateTime startDt, DateTime endDt)
+            List<Pm_WageSheet> pm_WageSheetDattaSources, List<UserNameView> userNames, int userId, string thisYearMonth, DateTime startDt, DateTime endDt)
         {
             if (pm_WageSheetDattaSources.Count <= 0)
             {
@@ -41,7 +41,7 @@ namespace OASystem.API.OAMethodLib
                 return _result;
             }
 
-            if (userNames.Count <= 0 )
+            if (userNames.Count <= 0)
             {
                 var nameData = await _usersRep.GetUserNameList(1);
                 userNames = nameData.Data;
@@ -67,586 +67,541 @@ namespace OASystem.API.OAMethodLib
             }
 
             _result.Msg = string.Empty;
-            foreach (var pm_wsInfo in pm_WageSheetDattaSources)
+
+            try
             {
-                string itemName = userNames.Where(it => it.Id == pm_wsInfo.UserId).FirstOrDefault().CnName;
-                //补贴 金额
-                decimal meal_subsidy = 0.00M;  // 午餐(午餐10元/天)  补贴 * 计算方式:单日上午请假时长(小时)大于或者等于三小时 没有餐补
 
-                //事假 病假 总金额
-                decimal personalLeaveTotal = 0.00M,  // 事假 日薪 *计算方式:日平均工资 = 月工资/当月应出勤天数。
-                        sickLeaveTotal = 0.00M;      // 病假 日薪 *计算方式:日平均工资 = 成都市最低工资标准的80%/当月应出勤天数。 短期病假=当月15天内  
 
-                //扣款金额
-                decimal beLate_deduction = 0.00M,         // 迟到 扣款金额 *计算方式:
-                                                          // 一个自然月内,不足 10 分钟的迟到/早退,不超过 2 次的部分,不做处罚;3 次及以上,按50元 / 次处罚;
-                                                          // 超过 10 分钟(含 10 分钟),不足 60 分钟的迟到/早退,按 50 元/次处罚;
-                                                          // 超过 60 分钟(含 60 分钟),不足 3 小时的迟到/早退,且无请假者,按旷工半日处理;超过3 小时的迟到 / 早退,且无请假者,按旷工一日处理。
+                foreach (var pm_wsInfo in pm_WageSheetDattaSources)
+                {
+                    string itemName = userNames.Where(it => it.Id == pm_wsInfo.UserId).FirstOrDefault().CnName;
+                    //补贴 金额
+                    decimal meal_subsidy = 0.00M;  // 午餐(午餐10元/天)  补贴 * 计算方式:单日上午请假时长(小时)大于或者等于三小时 没有餐补
 
-                        early_deduction = 0.00M,          // 早退 扣款金额
-                        absenteeism_deduction = 0.00M,    // 旷工 扣款金额 *计算方式:旷工扣发当日工资
-                        unprinted_deduction = 0.00M,      // 未打卡 扣款金额 *计算方式:
-                                                          // 试用期员工每月有 2 次 补卡机会,超过 2 次不足 5 次的部分,按 10 元 / 次处罚,5 次及以上的漏卡,按 50 元 / 次处罚;
-                                                          // 正式员工每月 3 次以内的补卡,按 10 元 / 次处罚,3 次及以上的漏卡,按 50 元 / 次处罚。
-                        sickLeave_deduction = 0.00M,
-                        other_deduction = 0.00M;          // 其他 扣款金额
+                    //事假 病假 总金额
+                    decimal personalLeaveTotal = 0.00M,  // 事假 日薪 *计算方式:日平均工资 = 月工资/当月应出勤天数。
+                            sickLeaveTotal = 0.00M;      // 病假 日薪 *计算方式:日平均工资 = 成都市最低工资标准的80%/当月应出勤天数。 短期病假=当月15天内  
 
-                decimal meal_deduction = 0.00M;           // 餐补 扣款金额
-                decimal reissuecard_deduction = 0.00M;    // 补卡 扣款金额
+                    //扣款金额
+                    decimal beLate_deduction = 0.00M,         // 迟到 扣款金额 *计算方式:
+                                                              // 一个自然月内,不足 10 分钟的迟到/早退,不超过 2 次的部分,不做处罚;3 次及以上,按50元 / 次处罚;
+                                                              // 超过 10 分钟(含 10 分钟),不足 60 分钟的迟到/早退,按 50 元/次处罚;
+                                                              // 超过 60 分钟(含 60 分钟),不足 3 小时的迟到/早退,且无请假者,按旷工半日处理;超过3 小时的迟到 / 早退,且无请假者,按旷工一日处理。
 
-                //打卡数据
-                Data? checkInData = checkInDatas.Where(it => it.base_info.name == itemName).FirstOrDefault();
+                            early_deduction = 0.00M,          // 早退 扣款金额
+                            absenteeism_deduction = 0.00M,    // 旷工 扣款金额 *计算方式:旷工扣发当日工资
+                            unprinted_deduction = 0.00M,      // 未打卡 扣款金额 *计算方式:
+                                                              // 试用期员工每月有 2 次 补卡机会,超过 2 次不足 5 次的部分,按 10 元 / 次处罚,5 次及以上的漏卡,按 50 元 / 次处罚;
+                                                              // 正式员工每月 3 次以内的补卡,按 10 元 / 次处罚,3 次及以上的漏卡,按 50 元 / 次处罚。
+                            sickLeave_deduction = 0.00M,
+                            other_deduction = 0.00M;          // 其他 扣款金额
 
-                if (checkInData == null) { continue; }
-                string acctid = checkInData.base_info.acctid; //用户Id
+                    decimal meal_deduction = 0.00M;           // 餐补 扣款金额
+                    decimal reissuecard_deduction = 0.00M;    // 补卡 扣款金额
 
-                //当月总计数据
-                Summary_Info? summary_Info = checkInData.summary_info;
-                if (summary_Info == null) { continue; }
+                    //打卡数据
+                    Data? checkInData = checkInDatas.Where(it => it.base_info.name == itemName).FirstOrDefault();
 
-                int work_days = summary_Info.work_days;   //应出勤天数
-                int regular_days = summary_Info.regular_days;  //正常出勤天数
+                    if (checkInData == null) { continue; }
+                    string acctid = checkInData.base_info.acctid; //用户Id
 
-                meal_subsidy = work_days * 10; //应发放餐补
+                    //当月总计数据
+                    Summary_Info? summary_Info = checkInData.summary_info;
+                    if (summary_Info == null) { continue; }
 
-                #region 计算日工资 正常日薪 事假日薪 病假日薪
+                    int work_days = summary_Info.work_days;   //应出勤天数
+                    int regular_days = summary_Info.regular_days;  //正常出勤天数
 
-                //月 - 应发工资
-                decimal amountPayable = pm_wsInfo.Basic + pm_wsInfo.Floats + pm_wsInfo.PostAllowance + pm_wsInfo.GarmentWashSubsidies + pm_wsInfo.CommunicationSubsidies +
-                    pm_wsInfo.TrafficSubsidies + pm_wsInfo.InformationSecurityFee + pm_wsInfo.OperationBonus + pm_wsInfo.OtherSubsidies + pm_wsInfo.GroupCost;
+                    meal_subsidy = work_days * 10; //应发放餐补
 
-                // 日薪 = *计算方式:日平均工资 = 月工资/当月应出勤天数。
-                decimal dailyWage = ConvertToDecimal(amountPayable / work_days);
+                    #region 计算日工资 正常日薪 事假日薪 病假日薪
 
-                // 病假日薪 *计算方式:日平均工资 = 成都市最低工资标准的80%/当月应出勤天数。 短期病假=当月15天内 
-                decimal sickLeave_dailywage = ConvertToDecimal(_chengDuMinimumWage / work_days);
+                    //月 - 应发工资
+                    decimal amountPayable = pm_wsInfo.Basic + pm_wsInfo.Floats + pm_wsInfo.PostAllowance + pm_wsInfo.InformationSecurityFee + pm_wsInfo.OtherSubsidies;
 
-                //病假 一天扣款  
-                sickLeave_deduction = dailyWage - sickLeave_dailywage;
+                    // 日薪 = *计算方式:日平均工资 = 月工资/当月应出勤天数。
+                    decimal dailyWage = ConvertToDecimal(amountPayable / work_days);
 
-                #endregion
+                    // 病假日薪 *计算方式:日平均工资 = 成都市最低工资标准的80%/当月应出勤天数。 短期病假=当月15天内 
+                    decimal sickLeave_dailywage = ConvertToDecimal(_chengDuMinimumWage / work_days);
 
-                int annualLeaveNum = 0,    //年假
-                    personalLeaveNum = 0,  //事假
-                    sickLeaveNum = 0,      //病假
-                    lieuLeaveNum = 0,      //调休假
-                    marriageLeaveNum = 0,  //婚嫁
-                    maternityLeaveNum = 0, //产假
-                    paternityLeaveNum = 0, //陪产假
-                    funeralLeaveNum = 0,   //丧假
-                    reissueCardNum = 0,    //补卡 次数
-                    evectionNum = 0,       //出差 次数
-                    outIngNum = 0,         //外出 次数
-                    outWorkNum = 0,        //外勤 次数
-                    otherLeaveNum = 0;     //其他
+                    //病假 一天扣款  
+                    sickLeave_deduction = dailyWage - sickLeave_dailywage;
 
+                    #endregion
 
-                #region 假勤 处理  1-请假;2-补卡;3-出差;4-外出;100-外勤;
+                    int annualLeaveNum = 0,    //年假
+                        personalLeaveNum = 0,  //事假
+                        sickLeaveNum = 0,      //病假
+                        lieuLeaveNum = 0,      //调休假
+                        marriageLeaveNum = 0,  //婚嫁
+                        maternityLeaveNum = 0, //产假
+                        paternityLeaveNum = 0, //陪产假
+                        funeralLeaveNum = 0,   //丧假
+                        reissueCardNum = 0,    //补卡 次数
+                        evectionNum = 0,       //出差 次数
+                        outIngNum = 0,         //外出 次数
+                        outWorkNum = 0,        //外勤 次数
+                        otherLeaveNum = 0;     //其他
 
-                List<Sp_Item>? sp_items = checkInData.sp_items.Where(it => it.count != 0).ToList();
-                if (sp_items != null && sp_items.Count > 0)
-                {
-                    annualLeaveNum = Fallibilitydispose(sp_items, 1, "年假");
-                    personalLeaveNum = Fallibilitydispose(sp_items, 1, "事假");
-                    sickLeaveNum = Fallibilitydispose(sp_items, 1, "病假");
-                    lieuLeaveNum = Fallibilitydispose(sp_items, 1, "调休假");
-                    marriageLeaveNum = Fallibilitydispose(sp_items, 1, "婚嫁");
-                    maternityLeaveNum = Fallibilitydispose(sp_items, 1, "产假");
-                    paternityLeaveNum = Fallibilitydispose(sp_items, 1, "陪产假");
-                    funeralLeaveNum = Fallibilitydispose(sp_items, 1, "丧假");
-                    otherLeaveNum = Fallibilitydispose(sp_items, 1, "其他");
-                    reissueCardNum = Fallibilitydispose(sp_items, 2, "补卡次数");
-                    evectionNum = Fallibilitydispose(sp_items, 3, "出差");
-                    outIngNum = Fallibilitydispose(sp_items, 4, "外出");
-                    outWorkNum = Fallibilitydispose(sp_items, 3, "外勤");
-                }
 
-                #region 请假类型金额/餐补 处理
-
-                List<Sp_Detail> sp_leave_details = new List<Sp_Detail>();
-                sp_leave_details = await _qiYeWeChatApiService.GetApprovalDetailsAsync(startDt, endDt, acctid, 2 , 1); //时间段内所有 已同意的 请假 审批数据
-                if (sp_leave_details.Count <= 0)
-                {
-                    _result.Msg += startDt + " - " + endDt +"  "+itemName  + "  请假 审批数据获取未获取到!\r\n";
-                    //continue;
-                }
+                    #region 假勤 处理  1-请假;2-补卡;3-出差;4-外出;100-外勤;
 
+                    List<Sp_Item>? sp_items = checkInData.sp_items.Where(it => it.count != 0).ToList();
+                    if (sp_items != null && sp_items.Count > 0)
+                    {
+                        annualLeaveNum = Fallibilitydispose(sp_items, 1, "年假");
+                        personalLeaveNum = Fallibilitydispose(sp_items, 1, "事假");
+                        sickLeaveNum = Fallibilitydispose(sp_items, 1, "病假");
+                        lieuLeaveNum = Fallibilitydispose(sp_items, 1, "调休假");
+                        marriageLeaveNum = Fallibilitydispose(sp_items, 1, "婚嫁");
+                        maternityLeaveNum = Fallibilitydispose(sp_items, 1, "产假");
+                        paternityLeaveNum = Fallibilitydispose(sp_items, 1, "陪产假");
+                        funeralLeaveNum = Fallibilitydispose(sp_items, 1, "丧假");
+                        otherLeaveNum = Fallibilitydispose(sp_items, 1, "其他");
+                        reissueCardNum = Fallibilitydispose(sp_items, 2, "补卡次数");
+                        evectionNum = Fallibilitydispose(sp_items, 3, "出差");
+                        outIngNum = Fallibilitydispose(sp_items, 4, "外出");
+                        outWorkNum = Fallibilitydispose(sp_items, 3, "外勤");
+                    }
 
-                List<Ex_Items> ex_Items = new List<Ex_Items>();//假勤 And 打卡备注集合
-                Ex_Items ex_Items_jq = new Ex_Items() { Type = "假勤" };   //假勤
-                List<Ex_Item> ex_ItemInfos = new List<Ex_Item>();
+                    #region 请假类型金额/餐补 处理
 
-                foreach (Sp_Detail sp_item in sp_leave_details)
-                {
-                    Apply_data? apply_data = sp_item.apply_data;
-                    if (apply_data != null)
+                    List<Sp_Detail> sp_leave_details = new List<Sp_Detail>();
+                    sp_leave_details = await _qiYeWeChatApiService.GetApprovalDetailsAsync(startDt, endDt, acctid, 2, 1); //时间段内所有 已同意的 请假 审批数据
+                    if (sp_leave_details.Count <= 0)
                     {
-                        List<ContentsItem> contents = apply_data.contents;
-                        ContentsItem content_Vacation = contents.Where(it => it.control== "Vacation").FirstOrDefault();  //请假类型 
-                        ContentsItem content_Textarea = contents.Where(it => it.control == "Textarea").FirstOrDefault(); //多行文本 
+                        _result.Msg += startDt + " - " + endDt + "  " + itemName + "  请假 审批数据获取未获取到!\r\n";
+                        //continue;
+                    }
 
-                        if (content_Vacation != null)
-                        {
-                            Vacation vacation = content_Vacation.value.vacation;
-                            Attendance attendance = vacation.attendance; //假勤组件
-                            Selector selector = vacation.selector;       //请假类型
 
-                            List<OptionsItem> optionsItems = selector.options; //key 请假类型 id
-                            List<TitleItem> value = optionsItems[0].value; // value 文本描述值
+                    List<Ex_Items> ex_Items = new List<Ex_Items>();//假勤 And 打卡备注集合
+                    Ex_Items ex_Items_jq = new Ex_Items() { Type = "假勤" };   //假勤
+                    List<Ex_Item> ex_ItemInfos = new List<Ex_Item>();
 
-                            int leaveType = int.Parse(optionsItems[0].key);  //key 请假子类型 id
-                            Date_range date_Range = attendance.date_range;
+                    foreach (Sp_Detail sp_item in sp_leave_details)
+                    {
+                        Apply_data? apply_data = sp_item.apply_data;
+                        if (apply_data != null)
+                        {
+                            List<ContentsItem> contents = apply_data.contents;
+                            ContentsItem content_Vacation = contents.Where(it => it.control == "Vacation").FirstOrDefault();  //请假类型 
+                            ContentsItem content_Textarea = contents.Where(it => it.control == "Textarea").FirstOrDefault(); //多行文本 
 
-                            //筛选 不在工作日内的假勤申请
-                            if (startDt >= date_Range.new_begin_dt && date_Range.new_end_dt <= endDt)
+                            if (content_Vacation != null)
                             {
-                                continue;
-                            }
+                                Vacation vacation = content_Vacation.value.vacation;
+                                Attendance attendance = vacation.attendance; //假勤组件
+                                Selector selector = vacation.selector;       //请假类型
 
-                            decimal thisTypeDeduction = 0.00M;//当前类型扣款
-                            string leave_starttime = date_Range.new_begin_dt.ToString("HH:mm");
-                            string leave_endtime = date_Range.new_end_dt.ToString("HH:mm");
+                                List<OptionsItem> optionsItems = selector.options; //key 请假类型 id
+                                List<TitleItem> value = optionsItems[0].value; // value 文本描述值
 
-                            string typeName = string.Empty;
-                            int leaveTypeId = leaveType;
-                            var leaveTypeData = vacationLeaveTypes.Where(it => it.id == leaveTypeId).FirstOrDefault();
+                                int leaveType = int.Parse(optionsItems[0].key);  //key 请假子类型 id
+                                Date_range date_Range = attendance.date_range;
 
-                            if (leaveTypeData != null) { typeName = leaveTypeData.name; }
-                            //计算请假类型扣款金额
+                                //筛选 不在工作日内的假勤申请
+                                if (startDt >= date_Range.new_begin_dt && date_Range.new_end_dt <= endDt)
+                                {
+                                    continue;
+                                }
 
-                            decimal new_duration = 0.00M;
-                            if (date_Range.type == "halfday")
-                            {
-                                new_duration = Convert.ToDecimal(date_Range.new_duration) / 86400M;
-                            }
-                            else if (date_Range.type == "hour")
-                            {
-                                new_duration = Convert.ToDecimal(date_Range.new_duration) / 3600M;
-                            }
-                            decimal leave_meals = 0.00M;
+                                decimal thisTypeDeduction = 0.00M;//当前类型扣款
+                                string leave_starttime = date_Range.new_begin_dt.ToString("HH:mm");
+                                string leave_endtime = date_Range.new_end_dt.ToString("HH:mm");
 
-                            //计算餐补 假勤类型扣款
-                            CalculateTypeFee(leaveType, date_Range.type, leave_starttime, leave_endtime, amountPayable, work_days, new_duration, 
-                                out leave_meals, out thisTypeDeduction);
+                                string typeName = string.Empty;
+                                int leaveTypeId = leaveType;
+                                var leaveTypeData = vacationLeaveTypes.Where(it => it.id == leaveTypeId).FirstOrDefault();
 
-                            #region 累计类型扣款
-                            //1年假;2事假;3病假;4调休假;5婚假;6产假;7陪产假;8其他;9丧假
+                                if (leaveTypeData != null) { typeName = leaveTypeData.name; }
+                                //计算请假类型扣款金额
 
-                            if (leaveType == 2) //事假
-                            {
-                                personalLeaveTotal += thisTypeDeduction;
-                            }
-                            else if (leaveType == 3) //病假
-                            {
+                                decimal new_duration = 0.00M;
+                                if (date_Range.type == "halfday")
+                                {
+                                    new_duration = Convert.ToDecimal(date_Range.new_duration) / 86400M;
+                                }
+                                else if (date_Range.type == "hour")
+                                {
+                                    new_duration = Convert.ToDecimal(date_Range.new_duration) / 3600M;
+                                }
+                                decimal leave_meals = 0.00M;
 
-                                sickLeaveTotal = thisTypeDeduction;
-                            }
+                                //计算餐补 假勤类型扣款
+                                CalculateTypeFee(leaveType, date_Range.type, leave_starttime, leave_endtime, amountPayable, work_days, new_duration,
+                                    out leave_meals, out thisTypeDeduction);
 
-                            #endregion
+                                #region 累计类型扣款
+                                //1年假;2事假;3病假;4调休假;5婚假;6产假;7陪产假;8其他;9丧假
+
+                                if (leaveType == 2) //事假
+                                {
+                                    personalLeaveTotal += thisTypeDeduction;
+                                }
+                                else if (leaveType == 3) //病假
+                                {
 
-                            meal_deduction += leave_meals;
-                            string startEndTiime = startEndTiime = date_Range.new_begin_dt.ToString("yyyy-MM-dd HH:mm") + " - " + 
-                                date_Range.new_end_dt.ToString("yyyy-MM-dd HH:mm");
+                                    sickLeaveTotal = thisTypeDeduction;
+                                }
 
-                            Ex_Item ex_Item = new Ex_Item()
-                            {
-                                SubTypeId = leaveType,
-                                SubType = typeName,
-                                StartTimeDt = Convert.ToDateTime( date_Range.new_begin_dt.ToString("yyyy-MM-dd HH:mm:ss")),
-                                EndTimeDt = Convert.ToDateTime(date_Range.new_end_dt.ToString("yyyy-MM-dd HH:mm:ss")),
-                                Duration = new_duration,
-                                Deduction = thisTypeDeduction,
-                                //Reason = apply_data.reason,
-                                Apply_time_dt = Convert.ToDateTime(sp_item.apply_time_dt.ToString("yyyy-MM-dd HH:mm:ss")),
-                                //Approval_name = sp_item.approval_name,
-                            };
-                            ex_ItemInfos.Add(ex_Item);
+                                #endregion
+
+                                meal_deduction += leave_meals;
+                                string startEndTiime = startEndTiime = date_Range.new_begin_dt.ToString("yyyy-MM-dd HH:mm") + " - " +
+                                    date_Range.new_end_dt.ToString("yyyy-MM-dd HH:mm");
+
+                                Ex_Item ex_Item = new Ex_Item()
+                                {
+                                    SubTypeId = leaveType,
+                                    SubType = typeName,
+                                    StartTimeDt = Convert.ToDateTime(date_Range.new_begin_dt.ToString("yyyy-MM-dd HH:mm:ss")),
+                                    EndTimeDt = Convert.ToDateTime(date_Range.new_end_dt.ToString("yyyy-MM-dd HH:mm:ss")),
+                                    Duration = new_duration,
+                                    Deduction = thisTypeDeduction,
+                                    //Reason = apply_data.reason,
+                                    Apply_time_dt = Convert.ToDateTime(sp_item.apply_time_dt.ToString("yyyy-MM-dd HH:mm:ss")),
+                                    //Approval_name = sp_item.approval_name,
+                                };
+                                ex_ItemInfos.Add(ex_Item);
+                            }
                         }
                     }
-                }
 
-                if (ex_ItemInfos.Count > 0)
-                {
-                    ex_Items_jq.Ex_ItemInfo = ex_ItemInfos.OrderBy(it => it.SubTypeId).ThenBy(it => it.Apply_time_dt).ToList();
-                    ex_Items.Add(ex_Items_jq);
-                }
-
-                #endregion
+                    if (ex_ItemInfos.Count > 0)
+                    {
+                        ex_Items_jq.Ex_ItemInfo = ex_ItemInfos.OrderBy(it => it.SubTypeId).ThenBy(it => it.Apply_time_dt).ToList();
+                        ex_Items.Add(ex_Items_jq);
+                    }
 
-                #endregion
+                    #endregion
 
+                    #endregion
 
-                Ex_Items ex_Items_dk = new Ex_Items() { Type = "打卡" };    //打卡
-                List<Ex_Item> ex_Item_Infos = new List<Ex_Item>();
-                #region 打卡补卡 补卡次数 处理
+                    Ex_Items ex_Items_dk = new Ex_Items() { Type = "打卡" };    //打卡
+                    List<Ex_Item> ex_reissuecard_Items = new List<Ex_Item>();
+                    #region 打卡补卡 补卡次数 处理
 
-                if (reissueCardNum > 0)
-                {
-                    if (reissueCardNum <= 3)
-                    {
-                        reissuecard_deduction += 10 * reissueCardNum;
-                    }
-                    else if (reissueCardNum > 3) //补卡超过三 每补卡一次 50 CNY
+                    if (reissueCardNum > 0)
                     {
-                        int for_reissueCardNum = reissueCardNum - 3;
-
-                        for (int i = 0; i < for_reissueCardNum; i++)
+                        if (reissueCardNum <= 3)
+                        {
+                            reissuecard_deduction += 10 * reissueCardNum;
+                        }
+                        else if (reissueCardNum > 3) //补卡超过三 每补卡一次 50 CNY
                         {
-                            reissuecard_deduction += 50;
+                            int for_reissueCardNum = reissueCardNum - 3;
+
+                            for (int i = 0; i < for_reissueCardNum; i++)
+                            {
+                                reissuecard_deduction += 50;
+                            }
                         }
+
+                        Ex_Item ex_reissueCard = new Ex_Item()
+                        {
+                            SubTypeId = 7,
+                            SubType = "补卡次数",
+                            Duration = reissueCardNum,
+                            Deduction = reissuecard_deduction,
+                            Reason = "补卡:员工发现自己漏打卡时,需及时提起补卡申请,并说明情况。试用期员工每月有 2 次\r\n补卡机会,超过 2 次不足 5 次的部分,按 10 元/次处罚,5 次及以上的漏卡,按 50 元/次处罚;正式员工每月 3 次以内的补卡,按 10 元/次处罚,3 次及以上的漏卡,按 50 元/次处罚。\r\n补卡路径为:企微-工作台-审批-打卡补卡。",
+                            unit = string.Empty
+                        };
+
+                        ex_reissuecard_Items.Add(ex_reissueCard);
                     }
 
-                    Ex_Item ex_reissueCard = new Ex_Item()
-                    {
-                        SubTypeId = 7,
-                        SubType = "补卡次数",
-                        Deduction = reissuecard_deduction,
-                        Reason = "补卡:员工发现自己漏打卡时,需及时提起补卡申请,并说明情况。试用期员工每月有 2 次\r\n补卡机会,超过 2 次不足 5 次的部分,按 10 元/次处罚,5 次及以上的漏卡,按 50 元/次处罚;正式员工每月 3 次以内的补卡,按 10 元/次处罚,3 次及以上的漏卡,按 50 元/次处罚。\r\n补卡路径为:企微-工作台-审批-打卡补卡。",
-                        unit = string.Empty
-                    };
-
-                    ex_Item_Infos.Add(ex_reissueCard);
-                }
-                
 
-                #endregion
+                    #endregion
 
-                List<Ex_Item> ex_reissuecard_Items = new List<Ex_Item>();
-                //List<dynamic> ex_reissuecard_Items = new List<dynamic>();
-                List<Sp_Detail> sp_reissuecard_details = new List<Sp_Detail>();
+                    List<Sp_Detail> sp_reissuecard_details = new List<Sp_Detail>();
 
-                //统计迟到次数
-                int beLateNum = 0,           // 1-迟到;
-                    leaveEarlyNum = 0,       // 2-早退;
-                    dummyDeckNum = 0,        // 3-缺卡;
-                    minerNum = 0,            // 4-旷工;
-                    locationAnomalyNum = 0,  // 5-地点异常;
-                    unitExNum = 0;           // 6-设备异常;
+                    //统计迟到次数
+                    int beLateNum = 0,           // 1-迟到;
+                        leaveEarlyNum = 0,       // 2-早退;
+                        dummyDeckNum = 0,        // 3-缺卡;
+                        minerNum = 0,            // 4-旷工;
+                        locationAnomalyNum = 0,  // 5-地点异常;
+                        unitExNum = 0;           // 6-设备异常;
 
-                if (summary_Info.except_days > 0)
-                {
-                    List<Exception_Info>? ex_infos = checkInData.exception_infos;
-                    if (ex_infos != null && ex_infos.Count >= 0)
+                    if (summary_Info.except_days > 0)
                     {
-                        beLateNum = ExceptionStatistics(ex_infos, 1);
-                        leaveEarlyNum = ExceptionStatistics(ex_infos, 2);
-                        dummyDeckNum = ExceptionStatistics(ex_infos, 3);
-                        minerNum = ExceptionStatistics(ex_infos, 4);
-                        locationAnomalyNum = ExceptionStatistics(ex_infos, 5);
-                        unitExNum = ExceptionStatistics(ex_infos, 6);
+                        List<Exception_Info>? ex_infos = checkInData.exception_infos;
+                        if (ex_infos != null && ex_infos.Count >= 0)
+                        {
+                            beLateNum = ExceptionStatistics(ex_infos, 1);
+                            leaveEarlyNum = ExceptionStatistics(ex_infos, 2);
+                            dummyDeckNum = ExceptionStatistics(ex_infos, 3);
+                            minerNum = ExceptionStatistics(ex_infos, 4);
+                            locationAnomalyNum = ExceptionStatistics(ex_infos, 5);
+                            unitExNum = ExceptionStatistics(ex_infos, 6);
+                        }
                     }
-                }
-
 
-                //打卡记录
-                CheckInDataView checkInDataView = new CheckInDataView();
-                checkInDataView = await _qiYeWeChatApiService.GetCheckinDataAsync(new List<string>() { acctid },3,startDt,endDt);
+                    //打卡记录
+                    CheckInDataView checkInDataView = new CheckInDataView();
+                    checkInDataView = await _qiYeWeChatApiService.GetCheckinDataAsync(new List<string>() { acctid }, 3, startDt, endDt);
 
-                if (checkInDataView.errcode != 0)
-                {
-                    _result.Msg += startDt + " - " + endDt + "  " + itemName + " 打卡记录 "+ checkInDataView.errmsg + " \r\n";
-                }
+                    if (checkInDataView.errcode != 0)
+                    {
+                        _result.Msg += startDt + " - " + endDt + "  " + itemName + " 打卡记录 " + checkInDataView.errmsg + " \r\n";
+                    }
 
-                //筛选时间异常的打卡记录
-                List<CheckInDataInfo> checkInDataInfos = checkInDataView.checkindata.Where(it => !string.IsNullOrEmpty(it.exception_type)).ToList();
+                    //筛选时间异常的打卡记录
+                    List<CheckInDataInfo> checkInDataInfos = checkInDataView.checkindata.Where(it => !string.IsNullOrEmpty(it.exception_type)).ToList();
 
-                //处理 未打卡的记录是否已经通过假勤审批
-                List<CheckInDataInfo> leave_checkInDataInfos = new List<CheckInDataInfo>();
-                if (checkInDataInfos.Count > 0)
-                {
-                    foreach (var leaveItem in ex_ItemInfos)
+                    //处理 未打卡的记录是否已经通过假勤审批
+                    List<CheckInDataInfo> leave_checkInDataInfos = new List<CheckInDataInfo>();
+                    if (checkInDataInfos.Count > 0)
                     {
-                        if (leaveItem.StartTimeDt.ToString("yyyy-MM-dd").Equals(leaveItem.EndTimeDt.ToString("yyyy-MM-dd"))) //单天
-                        {
-                            leave_checkInDataInfos.AddRange(checkInDataInfos.Where(it => it.checkin_time_dt.ToString("yyyy-MM-dd") == leaveItem.StartTimeDt.ToString("yyyy-MM-dd")).ToList());
-                        }
-                        else //多天
+                        foreach (var leaveItem in ex_ItemInfos)
                         {
-                            leave_checkInDataInfos.AddRange(checkInDataInfos.Where(it => it.checkin_time_dt >= leaveItem.StartTimeDt && it.checkin_time_dt <=leaveItem.EndTimeDt ).ToList());
+                            if (leaveItem.StartTimeDt.ToString("yyyy-MM-dd").Equals(leaveItem.EndTimeDt.ToString("yyyy-MM-dd"))) //单天
+                            {
+                                leave_checkInDataInfos.AddRange(checkInDataInfos.Where(it => it.checkin_time_dt.ToString("yyyy-MM-dd") == leaveItem.StartTimeDt.ToString("yyyy-MM-dd")).ToList());
+                            }
+                            else //多天
+                            {
+                                leave_checkInDataInfos.AddRange(checkInDataInfos.Where(it => it.checkin_time_dt >= leaveItem.StartTimeDt && it.checkin_time_dt <= leaveItem.EndTimeDt).ToList());
 
+                            }
                         }
                     }
-                }
-
-                //处理 时间异常的记录是否已经通过补卡审批
-                List<CheckInDataInfo> pullcard_checkInDataInfos = new List<CheckInDataInfo>();
-                if (leave_checkInDataInfos.Count > 0)
-                {
-                    //获取异常打卡数据 并且 未通过假勤审批
-                    pullcard_checkInDataInfos = checkInDataInfos.Except(leave_checkInDataInfos).ToList();
 
-                    if (pullcard_checkInDataInfos.Count > 0)
+                    //处理 时间异常的记录是否已经通过补卡审批
+                    List<CheckInDataInfo> pullcard_checkInDataInfos = new List<CheckInDataInfo>();
+                    if (leave_checkInDataInfos.Count > 0)
                     {
+                        //获取异常打卡数据 并且 未通过假勤审批
+                        pullcard_checkInDataInfos = checkInDataInfos.Except(leave_checkInDataInfos).ToList();
 
-
-                        #region 打卡异常处理 统计 1-迟到;2-早退;3-缺卡;4-旷工;5-地点异常;6-设备异常;
-
-                        //sp_reissuecard_details = await _qiYeWeChatApiService.GetApprovalDetailsAsync(startDt, endDt, acctid, 2, 2); //时间段内所有 已同意的 补卡 审批数据
-                        //if (sp_reissuecard_details.Count <= 0)
-                        //{
-                        //    _result.Msg += startDt + " - " + endDt + "  " + itemName + "  打卡补卡 审批数据获取未获取到!\r\n";
-                        //    continue;
-                        //}
-
-                        //#region 打卡补卡
-
-                        //foreach (var pullcardItem in sp_reissuecard_details)
-                        //{
-                        //    Apply_data? apply_data = pullcardItem.apply_data;
-                        //    if (apply_data != null)
-                        //    {
-                        //        List<ContentsItem> contents = apply_data.contents;
-                        //        ContentsItem content_Vacation = contents.Where(it => it.control == "Vacation").FirstOrDefault();  //请假类型 
-                        //        ContentsItem content_Textarea = contents.Where(it => it.control == "Textarea").FirstOrDefault();  //多行文本 
-
-                        //        if (content_Vacation != null)
-                        //        {
-                        //            Vacation vacation = content_Vacation.value.vacation;
-                        //            Attendance attendance = vacation.attendance; //假勤组件
-                        //            Selector selector = vacation.selector;       //请假类型
-
-                        //            List<OptionsItem> optionsItems = selector.options; //key 请假类型 id
-                        //            List<TitleItem> value = optionsItems[0].value; // value 文本描述值
-
-                        //            int leaveType = int.Parse(optionsItems[0].key);  //key 请假子类型 id
-                        //            Date_range date_Range = attendance.date_range;
-
-                        //            decimal thisTypeDeduction = 0.00M;//当前类型扣款
-                        //            string leave_starttime = date_Range.new_begin_dt.ToString("HH:mm");
-                        //            string leave_endtime = date_Range.new_end_dt.ToString("HH:mm");
-
-                        //            string typeName = string.Empty;
-                        //            int leaveTypeId = leaveType;
-                        //            var leaveTypeData = vacationLeaveTypes.Where(it => it.id == leaveTypeId).FirstOrDefault();
-
-                        //            if (leaveTypeData != null) { typeName = leaveTypeData.name; }
-                        //            //计算请假类型扣款金额
-
-                        //            int new_duration = 0;
-                        //            if (date_Range.type == "halfday")
-                        //            {
-                        //                new_duration = date_Range.new_duration / 86400;
-                        //            }
-                        //            else if (date_Range.type == "hour")
-                        //            {
-                        //                new_duration = date_Range.new_duration / 3600;
-                        //            }
-                        //            decimal leave_meals = 0.00M;
-                        //            CalculateTypeFee(leaveType, date_Range.type, leave_starttime, leave_endtime, amountPayable, work_days, new_duration,
-                        //                out leave_meals, out thisTypeDeduction);
-
-                        //            meal_deduction += leave_meals;
-                        //            string startEndTiime = startEndTiime = date_Range.new_begin_dt.ToString("yyyy-MM-dd HH:mm") + " - " +
-                        //                date_Range.new_end_dt.ToString("yyyy-MM-dd HH:mm");
-
-                        //        }
-                        //    }
-                        //}
-
-                        #endregion
-
-                        foreach (var pc_ex_item in pullcard_checkInDataInfos)
+                        if (pullcard_checkInDataInfos.Count > 0)
                         {
-
-                            CheckInDayDataView checkInDayDataView = await _qiYeWeChatApiService.GetCheckInDayDataAsync(new List<string>() { acctid },startDt,endDt);
+                            CheckInDayDataView checkInDayDataView = await _qiYeWeChatApiService.GetCheckInDayDataAsync(new List<string>() { acctid }, startDt, endDt);
 
                             if (checkInDayDataView.errcode != 0)
                             {
                                 _result.Msg += startDt + " - " + endDt + "  " + itemName + "  异常信息数据获取未获取到!\r\n";
-                                continue;
+
                             }
-                            List<Root> roots_words= checkInDayDataView.datas.Where(it => it.base_info.day_type == 0).ToList(); //获取工作日日报信息
+                            List<Root> roots_words = checkInDayDataView.datas.Where(it => it.base_info.day_type == 0).ToList(); //获取工作日日报信息
                             List<Root> roots_exs = checkInDayDataView.datas.Where(it => it.exception_infos.Count > 0).ToList();
-                            Root roots_ex = roots_exs.Where(it => it.base_info.dateDt == pc_ex_item.sch_checkin_time_dt).FirstOrDefault();
-                            if (roots_ex != null) { 
-                            List<Exception_infos> exception_infos = roots_ex.exception_infos;
 
-                            List<Exception_infos> exception_infos1 = checkInDayDataView.datas[29].exception_infos;
-                            string exc_type = pc_ex_item.exception_type;
 
-                            if (exc_type.Contains("时间异常") || exc_type.Contains("未打卡")) // 时间异常  未打卡
+                            foreach (var roots_ex in roots_exs)
                             {
-                                int day_time_minute = (60 * 7) + 30;
+                                foreach (var exception_info in roots_ex.exception_infos)
+                                {
+                                    decimal timelength = (Convert.ToDecimal(exception_info.duration) / 3600.00M) * 60.00M;  //时长 分钟
+                                    int exception = exception_info.exception; //异常类型
+                                    decimal day_miner_unit = dailyWage / 15;  //以0.5小时为单位 
 
-                                Exception_infos beLate_ex = exception_infos.Where(it => it.exception == 1).FirstOrDefault(); //迟到
-                                decimal day_miner_unit = dailyWage / 15;  //以0.5小时为单位 
+                                    //1:一个自然月内,不足 10 分钟的迟到/早退,不超过 2 次的部分,不做处罚;3 次及以上,按50 元 / 次处罚;
+                                    //2:超过 10 分钟(含 10 分钟),不足 60 分钟的迟到 / 早退,按 50 元 / 次处罚;
+                                    //3:超过 60 分钟(含 60 分钟),不足 3 小时的迟到 / 早退,且无请假者,按旷工半日处理;超过 3 小时的迟到 / 早退,且无请假者,按旷工一日处理。
 
-                                if (beLate_ex != null)
-                                {
-                                    if (beLateNum > 0) //迟到次数
+
+                                    Ex_Item beLate_belate_ex = new Ex_Item()
                                     {
-                                        //1:一个自然月内,不足 10 分钟的迟到/早退,不超过 2 次的部分,不做处罚;3 次及以上,按50 元 / 次处罚;
-                                        //2:超过 10 分钟(含 10 分钟),不足 60 分钟的迟到 / 早退,按 50 元 / 次处罚;
-                                        //3:超过 60 分钟(含 60 分钟),不足 3 小时的迟到 / 早退,且无请假者,按旷工半日处理;超过 3 小时的迟到 / 早退,且无请假者,按旷工一日处理。
+                                        SubTypeId = 4,
+                                        SubType = "旷工",
+                                        Duration = timelength,
+                                        StartTimeDt = roots_ex.base_info.dateDt,
+                                        unit = "分钟",
+                                    };
 
-                                        Ex_Item beLate_belate_ex = new Ex_Item()
+
+                                    decimal day_beLate_deduction = 0.00M;
+                                    //1 - 迟到;2 - 早退;3 - 缺卡;4 - 旷工;5 - 地点异常;6 - 设备异常
+                                    if (exception == 1)   //迟到
+                                    {
+                                        if (timelength < 10)
                                         {
-                                            SubTypeId = 4,
-                                            SubType = "旷工",
-                                            unit = "分钟",
-                                        };
-                                        decimal day_beLate_deduction = 0.00M;
-                                        if (beLate_ex.duration >= 10 && beLate_ex.duration <= 60)
+                                            reissueCardNum++;
+                                            beLate_belate_ex.SubTypeId = 1;
+                                            beLate_belate_ex.SubType = "迟到";
+
+                                            if (reissueCardNum >= 3)
+                                            {
+                                                day_beLate_deduction = 50.00M;
+                                            }
+                                        }
+                                        else if (timelength >= 10 && timelength <= 60)
                                         {
-                                            day_beLate_deduction = beLateNum * 50;
+                                            day_beLate_deduction = 50.00M;
                                             beLate_belate_ex.SubTypeId = 1;
                                             beLate_belate_ex.SubType = "迟到";
                                         }
-                                        else if (beLate_ex.duration > 60 && beLate_ex.duration <= 180)
+                                        else if (timelength > 60 && timelength <= 180)
                                         {
                                             day_beLate_deduction = day_miner_unit * 6; //3小时
 
                                         }
-                                        else day_beLate_deduction = dailyWage;
+                                        else
+                                        {
+                                            day_beLate_deduction = dailyWage;
+                                            meal_deduction += 10.00M;
+                                        }
 
                                         beLate_deduction += day_beLate_deduction;
-
-
-                                        beLate_belate_ex.Duration = beLate_ex.duration;
                                         beLate_belate_ex.Deduction = day_beLate_deduction;
                                         ex_reissuecard_Items.Add(beLate_belate_ex);
                                     }
-
-
-                                    if (leaveEarlyNum > 0) // 早退次数
+                                    else if (exception == 2)  //早退
                                     {
-                                        //1:一个自然月内,不足 10 分钟的迟到/早退,不超过 2 次的部分,不做处罚;3 次及以上,按50 元 / 次处罚;
-                                        //2:超过 10 分钟(含 10 分钟),不足 60 分钟的迟到 / 早退,按 50 元 / 次处罚;
-                                        //3:超过 60 分钟(含 60 分钟),不足 3 小时的迟到 / 早退,且无请假者,按旷工半日处理;超过 3 小时的迟到 / 早退,且无请假者,按旷工一日处理。
-
-                                        Ex_Item beLate_belate_ex = new Ex_Item()
+                                        if (timelength < 10)
                                         {
-                                            SubTypeId = 4,
-                                            SubType = "旷工",
-                                            unit = "分钟",
-                                        };
-                                        decimal day_beLate_deduction = 0.00M;
-                                        if (beLate_ex.duration >= 10 && beLate_ex.duration <= 60)
+                                            reissueCardNum++;
+                                            beLate_belate_ex.SubTypeId = 2;
+                                            beLate_belate_ex.SubType = "早退";
+
+                                            if (reissueCardNum >= 3)
+                                            {
+                                                day_beLate_deduction = 50.00M;
+                                            }
+
+                                        }
+                                        else if (timelength >= 10 && timelength <= 60)
                                         {
-                                            day_beLate_deduction = beLateNum * 50;
-                                            beLate_belate_ex.SubTypeId = 3;
-                                            beLate_belate_ex.SubType = "未打卡/漏卡";
+                                            day_beLate_deduction = 50.00M;
+                                            beLate_belate_ex.SubTypeId = 2;
+                                            beLate_belate_ex.SubType = "早退";
                                         }
-                                        else if (beLate_ex.duration > 60 && beLate_ex.duration <= 180)
+                                        else if (timelength > 60 && timelength <= 180)
                                         {
                                             day_beLate_deduction = day_miner_unit * 6; //3小时
 
                                         }
-                                        else day_beLate_deduction = dailyWage;
+                                        else
+                                        {
+                                            day_beLate_deduction = dailyWage;
+                                            meal_deduction += 10.00M;
+                                        }
 
                                         beLate_deduction += day_beLate_deduction;
-
-                                        beLate_belate_ex.Duration = beLate_ex.duration;
                                         beLate_belate_ex.Deduction = day_beLate_deduction;
                                         ex_reissuecard_Items.Add(beLate_belate_ex);
                                     }
-
-                                    if (dummyDeckNum > 0)  //缺卡
+                                    else if (exception == 3) //缺卡
                                     {
-                                        Ex_Item beLate_belate_ex = new Ex_Item()
+                                        if (timelength < 10)
                                         {
-                                            SubTypeId = 4,
-                                            SubType = "旷工",
-                                            unit = "分钟",
-                                        };
-                                        decimal day_beLate_deduction = 0.00M;
-                                        if (beLate_ex.duration >= 10 && beLate_ex.duration <= 60)
+                                            reissueCardNum++;
+                                            beLate_belate_ex.SubTypeId = 3;
+                                            beLate_belate_ex.SubType = "缺卡";
+
+                                            if (reissueCardNum >= 3)
+                                            {
+                                                day_beLate_deduction = 50.00M;
+                                            }
+
+                                        }
+                                        else if (timelength >= 10 && timelength <= 60)
                                         {
-                                            day_beLate_deduction = beLateNum * 50;
-                                            beLate_belate_ex.SubTypeId = 2;
-                                            beLate_belate_ex.SubType = "早退";
+                                            day_beLate_deduction = 50.00M;
+                                            beLate_belate_ex.SubTypeId = 3;
+                                            beLate_belate_ex.SubType = "缺卡";
                                         }
-                                        else if (beLate_ex.duration > 60 && beLate_ex.duration <= 180)
+                                        else if (timelength > 60 && timelength <= 180)
                                         {
                                             day_beLate_deduction = day_miner_unit * 6; //3小时
 
                                         }
-                                        else day_beLate_deduction = dailyWage;
+                                        else
+                                        {
+                                            day_beLate_deduction = dailyWage;
+                                            meal_deduction += 10.00M;
+                                        }
 
                                         beLate_deduction += day_beLate_deduction;
-
-                                        beLate_belate_ex.Duration = beLate_ex.duration;
                                         beLate_belate_ex.Deduction = day_beLate_deduction;
                                         ex_reissuecard_Items.Add(beLate_belate_ex);
                                     }
-
-                                    if (minerNum > 0)   //矿工
+                                    else if (exception == 4) //旷工
                                     {
-                                        Ex_Item beLate_belate_ex = new Ex_Item()
-                                        {
-                                            SubTypeId = 4,
-                                            SubType = "旷工",
-                                            unit = "分钟",
-                                        };
-                                        decimal day_beLate_deduction = 0.00M;
-                                        
-                                        if (beLate_ex.duration > 60 && beLate_ex.duration <= 180)
+                                        if (timelength > 60 && timelength <= 180)
                                         {
                                             day_beLate_deduction = day_miner_unit * 6; //3小时
 
                                         }
-                                        else day_beLate_deduction = dailyWage;
+                                        else
+                                        {
+                                            day_beLate_deduction = dailyWage;
+                                            meal_deduction += 10.00M;
+                                        }
 
                                         beLate_deduction += day_beLate_deduction;
-
-                                        beLate_belate_ex.Duration = beLate_ex.duration;
                                         beLate_belate_ex.Deduction = day_beLate_deduction;
                                         ex_reissuecard_Items.Add(beLate_belate_ex);
                                     }
+
                                 }
                             }
-                            }
+
                         }
                     }
-                }
 
-                if (ex_reissuecard_Items.Count > 0)
-                {
-                    ex_Items_dk.Ex_ItemInfo = ex_reissuecard_Items;
+                    if (ex_reissuecard_Items.Count > 0)
+                    {
+                        ex_Items_dk.Ex_ItemInfo = ex_reissuecard_Items;
+                        ex_Items_dk.Ex_ItemInfo = ex_reissuecard_Items.OrderBy(it => it.SubTypeId).ThenBy(it => it.StartTimeDt).ToList();
+                        ex_Items.Add(ex_Items_dk);
+                    }
+
+                    #region 应发合计 实发合计 扣款合计(假勤扣款,其他扣款,社保扣款,公积金代扣,个税扣款)
+
+                    decimal mealTotal = meal_subsidy - meal_deduction;  //餐补
+                    decimal salaryTotal = amountPayable + mealTotal;    //应发合计
+
+                    //扣款合计 不含个税
+                    decimal eductionTotal = sickLeaveTotal + personalLeaveTotal + beLate_deduction + early_deduction + absenteeism_deduction + unprinted_deduction + other_deduction +
+                        pm_wsInfo.WithholdingInsurance + pm_wsInfo.ReservedFunds + pm_wsInfo.OtherDeductions;
+                    decimal actualReleaseTotal = salaryTotal - eductionTotal; //实发合计 * 不含个税
+
+                    #endregion
+
+                    #region 处理当月工资数据
+                    pm_wsInfo.YearMonth = thisYearMonth;
+                    pm_wsInfo.StartDate = startDt.ToString("yyyy-MM-dd");
+                    pm_wsInfo.EndDate = endDt.ToString("yyyy-MM-dd");
+                    pm_wsInfo.WorkDays = work_days;        //当月应出勤天数
+                    pm_wsInfo.RegularDays = regular_days;  //当月正常出勤天数
+
+                    pm_wsInfo.SickLeave = sickLeaveTotal;           //病假
+                    pm_wsInfo.SomethingFalse = personalLeaveTotal;  //事假
+                    pm_wsInfo.LateTo = beLate_deduction;            //迟到
+                    pm_wsInfo.LeaveEarly = early_deduction;         //早退
+                    pm_wsInfo.Absenteeism = absenteeism_deduction;  //旷工
+                    pm_wsInfo.NotPunch = unprinted_deduction;       //未打卡
+                    pm_wsInfo.OtherDeductions = other_deduction;    //其他
+                    pm_wsInfo.Ex_ItemsRemark = JsonConvert.SerializeObject(ex_Items);  //
+                    pm_wsInfo.Mealsupplement = mealTotal;          //餐补
+
+                    pm_wsInfo.Should = salaryTotal;               //应发合计
+                    pm_wsInfo.TotalDeductions = eductionTotal;    //扣款合计
+                    pm_wsInfo.TotalRealHair = actualReleaseTotal; //实发合计
+                    pm_wsInfo.AfterTax = actualReleaseTotal - pm_wsInfo.WithholdingTax; //税后工资
+
+                    pm_wsInfo.LastUpdateUserId = userId;
+                    pm_wsInfo.LastUpdateDt = DateTime.Now;
+                    pm_wsInfo.CreateUserId = userId;
+                    pm_wsInfo.CreateTime = DateTime.Now;
+                    pm_wsInfo.DeleteUserId = null;
+                    pm_wsInfo.DeleteTime = null;
+                    #endregion
+
                 }
 
-                #region 应发合计 实发合计 扣款合计(假勤扣款,其他扣款,社保扣款,公积金代扣,个税扣款)
-
-                decimal mealTotal = meal_subsidy - meal_deduction;  //餐补
-                decimal salaryTotal = amountPayable + mealTotal + pm_wsInfo.SpecialAllowance;    //应发合计
-
-                //扣款合计 不含个税
-                decimal eductionTotal = sickLeaveTotal + personalLeaveTotal + beLate_deduction + early_deduction + absenteeism_deduction + unprinted_deduction + other_deduction +
-                    pm_wsInfo.WithholdingInsurance + pm_wsInfo.ReservedFunds + pm_wsInfo.OtherDeductions;
-                decimal actualReleaseTotal = salaryTotal - eductionTotal; //实发合计 * 不含个税
-
-                #endregion
-
-                #region 处理当月工资数据
-                pm_wsInfo.YearMonth = thisYearMonth;
-                pm_wsInfo.StartDate = startDt.ToString("yyyy-MM-dd");
-                pm_wsInfo.EndDate = endDt.ToString("yyyy-MM-dd");
-
-                pm_wsInfo.SickLeave = sickLeaveTotal;           //病假
-                pm_wsInfo.SomethingFalse = personalLeaveTotal;  //事假
-                pm_wsInfo.LateTo = beLate_deduction;            //迟到
-                pm_wsInfo.LeaveEarly = early_deduction;         //早退
-                pm_wsInfo.Absenteeism = absenteeism_deduction;  //旷工
-                pm_wsInfo.NotPunch = unprinted_deduction;       //未打卡
-                pm_wsInfo.OtherDeductions = other_deduction;    //其他
-                pm_wsInfo.Ex_ItemsRemark = JsonConvert.SerializeObject(ex_Items);  //
-                pm_wsInfo.Mealsupplement = mealTotal;          //餐补
-
-                pm_wsInfo.Should = salaryTotal;               //应发合计
-                pm_wsInfo.TotalDeductions = eductionTotal;    //扣款合计
-                pm_wsInfo.TotalRealHair = actualReleaseTotal; //实发合计
-                pm_wsInfo.AfterTax = actualReleaseTotal - pm_wsInfo.WithholdingTax; //税后工资
-
-                pm_wsInfo.LastUpdateUserId = userId;
-                pm_wsInfo.LastUpdateDt = DateTime.Now;
-                pm_wsInfo.CreateUserId = userId;
-                pm_wsInfo.CreateTime = DateTime.Now;
-                pm_wsInfo.DeleteUserId = null;
-                pm_wsInfo.DeleteTime = null;
-                #endregion
+            }
+            catch (Exception ex)
+            {
+
+                _result.Msg = ex.Message;
 
+                return _result;
             }
-            
+
             _result.Code = 0;
             _result.Data = pm_WageSheetDattaSources;
 

+ 29 - 91
OASystem/OASystem.Domain/Dtos/PersonnelModule/WageSheetDto.cs

@@ -74,34 +74,29 @@ namespace OASystem.Domain.Dtos.PersonnelModule
         public string? EndDate { get; set; }
 
         /// <summary>
-        /// 基本工资
+        /// 应出勤天数
         /// </summary>
-        public decimal Basic { get; set; }
+        public int WorkDays { get; set; }
 
         /// <summary>
-        /// 绩效工资
+        /// 正常出勤天数
         /// </summary>
-        public decimal Floats { get; set; }
-
-        /// <summary>
-        /// 岗位津贴
-        /// </summary>
-        public decimal PostAllowance { get; set; }
+        public int RegularDays { get; set; }
 
         /// <summary>
-        /// 服装洗理补贴
+        /// 基本工资
         /// </summary>
-        public decimal GarmentWashSubsidies { get; set; }
+        public decimal Basic { get; set; }
 
         /// <summary>
-        /// 通讯补贴
+        /// 绩效工资
         /// </summary>
-        public decimal CommunicationSubsidies { get; set; }
+        public decimal Floats { get; set; }
 
         /// <summary>
-        /// 交通补
+        /// 岗位津
         /// </summary>
-        public decimal TrafficSubsidies { get; set; }
+        public decimal PostAllowance { get; set; }
 
         /// <summary>
         /// 保密费
@@ -109,40 +104,26 @@ namespace OASystem.Domain.Dtos.PersonnelModule
         public decimal InformationSecurityFee { get; set; }
 
         /// <summary>
-        /// 操作奖金
-        /// </summary>
-        public decimal OperationBonus { get; set; }
-
-        /// <summary>
-        /// 特殊津贴
+        /// 月度补贴/其他补贴
         /// </summary>
-        public decimal SpecialAllowance { get; set; }
+        public decimal OtherSubsidies { get; set; }
 
         /// <summary>
-        /// 其他补贴
+        /// 餐补
         /// </summary>
-        public decimal OtherSubsidies { get; set; }
+        public decimal Mealsupplement { get; set; }
 
         /// <summary>
         /// 代扣保险
         /// </summary>
         public decimal WithholdingInsurance { get; set; }
 
-        /// <summary>
-        /// 餐补
-        /// </summary>
-        public decimal Mealsupplement { get; set; }
-
         /// <summary>
         /// 代扣公积金
         /// </summary>
         public decimal ReservedFunds { get; set; }
 
-
-        /// <summary>
-        /// 部门集体团建费
-        /// </summary>
-        public decimal GroupCost { get; set; }
+        /// <summary>
        /// 代扣公积金
        /// </summary>                                     
        public decimal WithholdingTax { get; set; }
 
         /// <summary>
         /// 病假
@@ -187,32 +168,6 @@ namespace OASystem.Domain.Dtos.PersonnelModule
         /// </summary>
         public string? Ex_ItemsRemark { get; set; }
 
-        /// <summary>
-        /// 应发合计
-        /// </summary>
-        public decimal Should { get; set; }
-
-        /// <summary>
-        /// 扣款合计
-        /// </summary>
-        public decimal TotalDeductions { get; set; }
-
-        /// <summary>
-        /// 实发合计
-        /// </summary>
-        public decimal TotalRealHair { get; set; }
-
-        /// <summary>
-        /// 代扣个税
-        /// </summary>
-        public decimal WithholdingTax { get; set; }
-
-        /// <summary>
-        /// 税后工资
-        /// </summary>
-        public decimal AfterTax { get; set; }
-
-
     }
 
     /// <summary>
@@ -243,8 +198,21 @@ namespace OASystem.Domain.Dtos.PersonnelModule
 
         /// <summary>
         /// 年月
+        /// eg 2023-10
         /// </summary>
         public string? yearMonth { get; set; }
+
+        /// <summary>
+        ///开始日期
+        /// eg 2023-10-01
+        /// </summary>
+        public string? startDt { get; set; }
+
+        /// <summary>
+        /// 结束日期
+        /// eg 2023-10-01
+        /// </summary>
+        public string? endDt { get; set; }
     }
 
     /// <summary>
@@ -287,38 +255,13 @@ namespace OASystem.Domain.Dtos.PersonnelModule
         /// </summary>
         public decimal PostAllowance { get; set; }
 
-        /// <summary>
-        /// 服装洗理补贴
-        /// </summary>
-        public decimal GarmentWashSubsidies { get; set; }
-
-        /// <summary>
-        /// 通讯补贴
-        /// </summary>
-        public decimal CommunicationSubsidies { get; set; }
-
-        /// <summary>
-        /// 交通补贴
-        /// </summary>
-        public decimal TrafficSubsidies { get; set; }
-
         /// <summary>
         /// 保密费
         /// </summary>
         public decimal InformationSecurityFee { get; set; }
 
         /// <summary>
-        /// 操作奖金
-        /// </summary>
-        public decimal OperationBonus { get; set; }
-
-        /// <summary>
-        /// 特殊津贴
-        /// </summary>
-        public decimal SpecialAllowance { get; set; }
-
-        /// <summary>
-        /// 其他补贴
+        /// 月度补贴/其他补贴
         /// </summary>
         public decimal OtherSubsidies { get; set; }
 
@@ -327,11 +270,6 @@ namespace OASystem.Domain.Dtos.PersonnelModule
         /// </summary>
         public decimal Mealsupplement { get; set; }
 
-        /// <summary>
-        /// 部门集体团建费
-        /// </summary>
-        public decimal GroupCost { get; set; }
-
         /// <summary>
         /// 个税
         /// </summary>

+ 5 - 4
OASystem/OASystem.Domain/Dtos/UserDto/RegisterDto.cs

@@ -15,7 +15,7 @@ namespace OASystem.Domain.Dtos.UserDto
         /// <summary>
         /// 申请注册UserId
         /// </summary>
-        public int CreateUserId { get; set; }
+        public int CreateUserId { get; set; } = 0;
 
         /// <summary>
         /// 中文名
@@ -51,12 +51,12 @@ namespace OASystem.Domain.Dtos.UserDto
         /// <summary>
         /// 密码
         /// </summary>
-        public int Password { get; set; }
+        public string? Password { get; set; }
 
         /// <summary>
         /// 现在居住住址
         /// </summary>
-        public string Address { get; set; }
+        public string? Address { get; set; }
 
         /// <summary>
         /// 身份证号
@@ -83,6 +83,7 @@ namespace OASystem.Domain.Dtos.UserDto
         /// <summary>
         /// 教育类型
         /// 统招/成教
+        /// 0 统招  1 成教
         /// </summary>
         public int EducationType { get; set; }
 
@@ -120,6 +121,6 @@ namespace OASystem.Domain.Dtos.UserDto
         /// <summary>
         /// 入职时间
         /// </summary>
-        public DateTime Edate  { get; set; }
+        public string? Edate  { get; set; }
     }
 }

+ 14 - 11
OASystem/OASystem.Domain/Entities/Groups/Grp_AirTicketReservations.cs

@@ -27,7 +27,7 @@ namespace OASystem.Domain.Entities.Groups
         /// <summary>
         /// 航班日期
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(22)")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
         public string FlightsDate { get; set; }
 
         /// <summary>
@@ -74,17 +74,17 @@ namespace OASystem.Domain.Entities.Groups
         /// <summary>
         /// 去程航班描述代码
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "text")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
         public string LeaveDescription { get; set; }
         /// /// <summary>
         /// 内陆段航班描述
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "text")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
         public string FlightsDescription { get; set; }
         /// <summary>
         /// 返程航班描述代码
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "text")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
         public string ReturnDescription { get; set; }
         /// <summary>
         /// 客户人数
@@ -94,7 +94,7 @@ namespace OASystem.Domain.Entities.Groups
         /// <summary>
         /// 客人名称
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "text")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
         public string ClientName { get; set; }
         /// <summary>
         /// 出票前报价
@@ -116,21 +116,24 @@ namespace OASystem.Domain.Entities.Groups
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int Currency { get; set; }
-        /// <summary>
-        /// 报价说明
-        /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "text")]
-        public string PriceDescription { get; set; }
+
         /// <summary>
         /// 机票编号
         /// </summary>
-        [SugarColumn(IsNullable =true,ColumnDataType ="varchar(100)")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(100)")]
         public string TicketNumber { get; set; }
         /// <summary>
         /// 机票票号
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(100)")]
         public string TicketCode { get; set; }
+
+        /// <summary>
+        /// 报价说明
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(1000)")]
+        public string PriceDescription { get; set; }
+        
         /// <summary>
         /// 舱类型
         /// </summary>

+ 33 - 20
OASystem/OASystem.Domain/Entities/PersonnelModule/Pm_WageSheet.cs

@@ -37,12 +37,30 @@ namespace OASystem.Domain.Entities.PersonnelModule
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
         public string? EndDate { get; set; }
 
+        /// <summary>
+        /// 当月应出勤天数
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int WorkDays { get; set; }
+
+        /// <summary>
+        /// 正常出勤天数
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int RegularDays { get; set; }
+
         /// <summary>
         /// 基本工资
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(8,2)")]
         public decimal Basic { get; set; }
 
+        /// <summary>
+        /// 岗位津贴
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(8,2)")]
+        public decimal PostAllowance { get; set; }
+
         /// <summary>
         /// 绩效工资
         /// </summary>
@@ -50,66 +68,61 @@ namespace OASystem.Domain.Entities.PersonnelModule
         public decimal Floats { get; set; }
 
         /// <summary>
-        /// 岗位津贴
+        /// 保密费
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(8,2)")]
-        public decimal PostAllowance { get; set; }
+        public decimal InformationSecurityFee { get; set; }
 
         /// <summary>
-        /// 服装洗理补贴
+        /// 服装洗理补贴 弃用
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(8,2)")]
         public decimal GarmentWashSubsidies { get; set; }
 
         /// <summary>
-        /// 通讯补贴
+        /// 通讯补贴 弃用
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(8,2)")]
         public decimal CommunicationSubsidies { get; set; }
 
         /// <summary>
-        /// 交通补贴
+        /// 交通补贴 弃用
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(8,2)")]
         public decimal TrafficSubsidies { get; set; }
 
-        /// <summary>
-        /// 保密费
-        /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(8,2)")]
-        public decimal InformationSecurityFee { get; set; }
+
 
         /// <summary>
-        /// 操作奖金
+        /// 操作奖金 弃用
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(8,2)")]
         public decimal OperationBonus { get; set; }
 
         /// <summary>
-        /// 过节费
-        /// 不纳入计算日工资
+        /// 过节费 弃用
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(8,2)")]
         public decimal SpecialAllowance { get; set; } = 0.00M;
 
         /// <summary>
-        /// 其他补贴
+        /// 月度补贴/其他补贴
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(8,2)")]
         public decimal OtherSubsidies { get; set; }
 
         /// <summary>
-        /// 代扣保险
+        /// 餐补
+        /// 不纳入日工资计算
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(8,2)")]
-        public decimal WithholdingInsurance { get; set; }
+        public decimal Mealsupplement { get; set; }
 
         /// <summary>
-        /// 餐补
-        /// 不纳入日工资计算
+        /// 代扣保险
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(8,2)")]
-        public decimal Mealsupplement { get; set; }
+        public decimal WithholdingInsurance { get; set; }
 
         /// <summary>
         /// 代扣公积金
@@ -118,7 +131,7 @@ namespace OASystem.Domain.Entities.PersonnelModule
         public decimal ReservedFunds { get; set; }
 
         /// <summary>
-        /// 部门集体团建费
+        /// 部门集体团建费 弃用
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(8,2)")]
         public decimal GroupCost { get; set; }

+ 0 - 1
OASystem/OASystem.Domain/Entities/System/Sys_Users.cs

@@ -157,7 +157,6 @@ namespace OASystem.Domain.Entities.System
         [SugarColumn(IsNullable = true,ColumnDataType ="int")]
         public int HrAudit { get; set; }
 
-
     }
 
     #region 附加字段

+ 35 - 64
OASystem/OASystem.Domain/ViewModels/PersonnelModule/WageSheetView.cs

@@ -49,76 +49,57 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         public string? EndDate { get; set; }
 
         /// <summary>
-        /// 基本工资
+        /// 应出勤天数
         /// </summary>
-        public decimal Basic { get; set; }
+        public int WorkDays { get; set; }
 
         /// <summary>
-        /// 绩效工资
+        /// 正常出勤天数
         /// </summary>
-        public decimal Floats { get; set; }
+        public int RegularDays { get; set; }
 
-        /// <summary>
-        /// 岗位津贴
-        /// </summary>
-        public decimal PostAllowance { get; set; }
 
         /// <summary>
-        /// 服装洗理补贴
+        /// 基本工资
         /// </summary>
-        public decimal GarmentWashSubsidies { get; set; }
+        public decimal Basic { get; set; }
 
         /// <summary>
-        /// 通讯补贴
+        /// 绩效工资
         /// </summary>
-        public decimal CommunicationSubsidies { get; set; }
+        public decimal Floats { get; set; }
 
         /// <summary>
-        /// 交通补
+        /// 岗位津
         /// </summary>
-        public decimal TrafficSubsidies { get; set; }
+        public decimal PostAllowance { get; set; }
 
         /// <summary>
         /// 保密费
         /// </summary>
         public decimal InformationSecurityFee { get; set; }
 
-        /// <summary>
-        /// 操作奖金
-        /// </summary>
-        public decimal OperationBonus { get; set; }
 
         /// <summary>
-        /// 特殊津
+        /// 月度补贴/其他补贴
         /// </summary>
-        public decimal SpecialAllowance { get; set; }
+        public decimal OtherSubsidies { get; set; }
 
         /// <summary>
-        /// 其他补贴
+        /// 餐补
         /// </summary>
-        public decimal OtherSubsidies { get; set; }
+        public decimal Mealsupplement { get; set; }
 
         /// <summary>
         /// 代扣保险
         /// </summary>
         public decimal WithholdingInsurance { get; set; }
 
-        /// <summary>
-        /// 餐补
-        /// </summary>
-        public decimal Mealsupplement { get; set; }
-
         /// <summary>
         /// 代扣公积金
         /// </summary>
         public decimal ReservedFunds { get; set; }
 
-
-        /// <summary>
-        /// 部门集体团建费
-        /// </summary>
-        public decimal GroupCost { get; set; }
-
         /// <summary>
         /// 病假
         /// </summary>
@@ -185,11 +166,6 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         /// </summary>
         public decimal AfterTax { get; set; }
 
-        ///// <summary>
-        ///// 锁定标识
-        ///// </summary>
-        //public decimal IsLock { get; set; }
-
         /// <summary>
         /// 最后操作人
         /// </summary>
@@ -234,6 +210,16 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         /// </summary>
         public string? EndDate { get; set; }
 
+        /// <summary>
+        /// 应出勤天数
+        /// </summary>
+        public int WorkDays { get; set; }
+
+        /// <summary>
+        /// 正常出勤天数
+        /// </summary>
+        public int RegularDays { get; set; }
+
         /// <summary>
         /// 员工Id
         /// </summary>
@@ -259,32 +245,6 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         /// </summary>
         public string? Ex_ItemsRemark { get; set; }
 
-        ///// <summary>
-        ///// 假勤  / 打卡补卡 明细 对象
-        ///// </summary>
-        //public List<Ex_Items>? Ex_Items
-        //{
-        //    get;set;
-        //}
-
-        ///// <summary>
-        ///// 假勤  / 打卡补卡 明细 对象
-        ///// </summary>
-        //public List<Ex_Items>? Ex_Items
-        //{
-        //    get
-        //    {
-        //        List<Ex_Items>? data = new List<Ex_Items>();
-
-        //        if (!string.IsNullOrEmpty(Ex_ItemsRemark))
-        //        {
-        //            data = JsonConvert.DeserializeObject<List<Ex_Items>>(Ex_ItemsRemark);
-        //        }
-
-        //        return data;
-        //    }
-        //}
-
         /// <summary>
         /// 实发合计
         /// </summary>
@@ -295,6 +255,17 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         /// </summary>
         public decimal WithholdingTax { get; set; }
 
+        /// <summary>
+        /// 税前合计
+        /// </summary>
+        public decimal BeforeTax
+        {
+            get
+            {
+                return WithholdingTax + AfterTax;
+            }
+        }
+
         /// <summary>
         /// 税后工资
         /// </summary>

+ 26 - 6
OASystem/OASystem.Infrastructure/Repositories/Groups/AirTicketResRepository.cs

@@ -52,7 +52,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 }
                 else
                 {
-                    Grp_CreditCardPayment grp_CreditCard = _sqlSugar.Queryable<Grp_CreditCardPayment>().First(a => a.CId == grp_AirTicket.Id && a.IsDel == 0);
+                    Grp_CreditCardPayment grp_CreditCard = _sqlSugar.Queryable<Grp_CreditCardPayment>().First(a => a.CId == grp_AirTicket.Id && a.IsDel == 0 && a.CTable==85);
                     if (grp_CreditCard == null) { return result = new Result() { Code = -1, Msg = "暂无数据" }; }
                     return result = new Result()
                     {
@@ -80,17 +80,26 @@ namespace OASystem.Infrastructure.Repositories.Groups
             Grp_DelegationInfo _DelegationInfo = _sqlSugar.Queryable<Grp_DelegationInfo>().First(it => it.Id == dto.DiId);
             if (_DelegationInfo != null)
             {
+                string UserId = "";
+                List<Grp_GroupsTaskAssignment> gtaUIdList = _sqlSugar.Queryable<Grp_GroupsTaskAssignment>().Where(a=>a.DIId==dto.DiId && a.IsDel==0 && a.CTId==85).ToList();
+                foreach (Grp_GroupsTaskAssignment gta in gtaUIdList)
+                    UserId += gta.UId + ",";
+
+                if (!string.IsNullOrWhiteSpace(UserId))
+                {
+                    UserId = UserId.Substring(0, UserId.Length - 1);
+                }
                 string sql = string.Format(@"select a.*,c.IsAuditGM,(select Name from Sys_SetData where Id=a.cType) as 'CTypeName',(select Name from 
                                                 Sys_SetData where Id=a.PreCurrency) as 'PreCurrencyStr',(select Name from Sys_SetData where Id=a.Currency)
                                                 as 'CurrencyStr' from Grp_AirTicketReservations a,Grp_CreditCardPayment c where  a.id=c.CId  and a.isdel={1} and c.IsDel={1}
-                                                and a.DIId={0} and a.CreateUserId={2} Order By a.CreateTime desc", dto.DiId, 0,dto.UserId);
+                                                and a.DIId={0} and c.DIId={0} and c.CTable=85 and a.CreateUserId in({2}) Order By a.CreateTime desc", dto.DiId, 0,UserId);
                 List<AirTicketReservationsView> _AirTicketReservations = _sqlSugar.SqlQueryable<AirTicketReservationsView>(sql).ToList();
 
                 foreach (var item in _AirTicketReservations)
                 {
-                    if (item.FlightsDescription.Contains("\r\n"))
+                    if (item.FlightsDescription.Contains("\n"))
                     {
-                        var spilitArr = Regex.Split(item.FlightsDescription, "\r\n");
+                        var spilitArr = Regex.Split(item.FlightsDescription, "\n");
                         int rowindex = 1;
                         foreach (var spilitItem in spilitArr)
                         {
@@ -366,11 +375,17 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     var DeleClient = await _sqlSugar.SqlQueryable<Grp_AirTicketReservations>(selectSql).FirstAsync();//查询是否存在
                     if (DeleClient != null)
                     {
-                        return result = new Result() { Code = -1, Msg = "该客户已存在,请勿重复添加!" };
+                        return result = new Result() { Code = -1, Msg = "该机票信息已存在,请勿重复添加!" };
                     }
                     else//不存在,可添加
                     {
-
+                        //grp_AirTicket.ArrivedTime = "";
+                        //grp_AirTicket.LeaveDescription = "";
+                        //grp_AirTicket.FlightsDescription = "";
+                        //grp_AirTicket.DeleteUserId = 0;
+                        //grp_AirTicket.DeleteTime = "";
+                        //grp_AirTicket.ReturnDescription = "";
+                        grp_AirTicket.FlightsDate= DateTime.Parse(grp_AirTicket.FlightsDate).ToString("yyyy-MM-dd");
                         id = await AddAsyncReturnId(grp_AirTicket);
                         if (id == 0)
                         {
@@ -518,7 +533,12 @@ namespace OASystem.Infrastructure.Repositories.Groups
                             return result = new Result() { Code = -1, Msg = "添加失败!" };
 
                         }
+                        await UpdateAsync(a => a.Id == id, a => new Grp_AirTicketReservations
+                        {
+                            FlightsDescription = dto.AirTicketResOpData.FlightsDescription,
+                        });
                         CommitTran();
+                        
                         return result = new Result() { Code = 0, Msg = "添加成功!" };
                         //C表操作
                     }

+ 10 - 1
OASystem/OASystem.Infrastructure/Repositories/Groups/DecreasePaymentsRepository.cs

@@ -34,9 +34,18 @@ namespace OASystem.Infrastructure.Repositories.Groups
             Result result = new Result() { Code = -2, Msg = "未知错误" };
             try
             {
+                string UserId = "";
+                List<Grp_GroupsTaskAssignment> gtaUIdList = _sqlSugar.Queryable<Grp_GroupsTaskAssignment>().Where(a => a.DIId == dto.DiId && a.IsDel == 0 && a.CTId == 98).ToList();
+                foreach (Grp_GroupsTaskAssignment gta in gtaUIdList)
+                    UserId += gta.UId + ",";
+
+                if (!string.IsNullOrWhiteSpace(UserId))
+                {
+                    UserId = UserId.Substring(0, UserId.Length - 1);
+                }
                 string sql = string.Format(@"select Id,DiId,PriceName,Price,(select name from Sys_SetData where id=s.Currency) as Currency,FilePath,
                                             (select CnName from Sys_Users where Id=s.CreateUserId) as 'CreateUserName',CreateTime,(select IsAuditGM from 
-                                            Grp_CreditCardPayment where CTable=98 and CId=s.Id and IsDel=0) as 'isAudit' from Grp_DecreasePayments s where DIID={0} and IsDel=0 ", dto.DiId);
+                                            Grp_CreditCardPayment where CTable=98 and CId=s.Id and IsDel=0) as 'isAudit' from Grp_DecreasePayments s where DIID={0} and IsDel=0 and s.CreateUserId in ({1}) ", dto.DiId,UserId);
                 List<DecreasePaymentsView> _DecreasePayments = await _sqlSugar.SqlQueryable<DecreasePaymentsView>(sql).ToListAsync();
                 if (_DecreasePayments.Count != 0)
                 {

+ 10 - 0
OASystem/OASystem.Infrastructure/Repositories/Groups/InvitationOfficialActivitiesRepository.cs

@@ -117,12 +117,22 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     sqlWhere += string.Format(@" And i.InviteTime between '{0}' and '{1}'", dto.StartInviteTime, dto.EndInviteTime);
                 }
                 sqlWhere += string.Format(@" And i.DiId={0} And i.IsDel={1}", dto.DiId, 0);
+                string UserId = "";
+                List<Grp_GroupsTaskAssignment> gtaUIdList = _sqlSugar.Queryable<Grp_GroupsTaskAssignment>().Where(a => a.DIId == dto.DiId && a.IsDel == 0 && a.CTId == 81).ToList();
+                foreach (Grp_GroupsTaskAssignment gta in gtaUIdList)
+                    UserId += gta.UId + ",";
 
+                if (!string.IsNullOrWhiteSpace(UserId))
+                {
+                    UserId = UserId.Substring(0, UserId.Length - 1);
+                }
+                sqlWhere += string.Format(@" And i.CreateUserId in ({0})", UserId);
                 if (!string.IsNullOrEmpty(sqlWhere.Trim()))
                 {
                     Regex r = new Regex("And");
                     sqlWhere = r.Replace(sqlWhere, "Where", 1);
                 }
+                
                 string sql = string.Format(@"select Id,DiId,InviterArea,Inviter,InviteTime,InviteCosts,(select name from Sys_SetData where id=i.Currency and IsDel={0}) 
                                              as Currency,IsGoOfficaiaBussiness,(select IsAuditGM from Grp_CreditCardPayment where CTable=81 and CId=i.Id 
                                              and IsDel={0}) as 'isAudit',Attachment from Grp_InvitationOfficialActivities i  {1}", 0, sqlWhere);

+ 48 - 6
OASystem/OASystem.Infrastructure/Repositories/Login/LoginRepository.cs

@@ -13,7 +13,8 @@ namespace OASystem.Infrastructure.Repositories.Login
 {
     public class LoginRepository : BaseRepository<Sys_Users, LoginView>
     {
-        public LoginRepository(SqlSugarClient sqlSugar) : 
+
+        public LoginRepository(SqlSugarClient sqlSugar, UsersRepository usersRep) : 
             base(sqlSugar){}
 
         /// <summary>
@@ -94,19 +95,22 @@ namespace OASystem.Infrastructure.Repositories.Login
         /// <param name="_loginRep"></param>
         /// <param name="registerDto"></param>
         /// <returns></returns>
-        public async Task<Result> Register(LoginRepository _loginRep, RegisterDto registerDto)
+        public async Task<Result> Register( RegisterDto registerDto)
         {
             Result result = new Result();
 
             string IdCrad = registerDto.IdCrad;
             string birthDay = IdCrad.Substring(6, 4) + "-" + IdCrad.Substring(10, 2) + "-" + IdCrad.Substring(12, 2);
 
+            string number = await CreateNumber(registerDto.DepId);
+
             Sys_Users _userInfo = new Sys_Users()
             {
                 CnName = registerDto.CnName,
                 EnName = registerDto.EnName,
                 Sex = registerDto.Sex,
-                Number = "",    //员工编号 人事审核通过了 由信息部经理分配
+                Number = number,    //员工编号 人事审核通过了 由信息部经理分配
+                Password = registerDto.Password, //密码由用户自己设置
                 CompanyId = registerDto.CompanyId,
                 DepId = registerDto.DepId,
                 JobPostId = registerDto.JobPostId,
@@ -115,7 +119,7 @@ namespace OASystem.Infrastructure.Repositories.Login
                 UrgentPhone = registerDto.UrgencyPhone,
                 Email = registerDto.Email,
                 Address = registerDto.Address,
-                Edate = DateTime.Now,  //入职时间默认当前数据提交时间
+                Edate = Convert.ToDateTime(registerDto.Edate),  //入职时间默认当前数据提交时间
                 Rdate = new DateTime(1990, 1, 1),  //离职时间默认最原始时间
                 Seniority = 0, //工龄默认 0
                 Birthday = Convert.ToDateTime(birthDay),
@@ -126,6 +130,7 @@ namespace OASystem.Infrastructure.Repositories.Login
                 Education = registerDto.Education, //学历类型
                 TheOrAdultEducation = registerDto.EducationType, //教育类型
                 MaritalStatus = registerDto.MaritalStatus, // 未婚/已婚
+                WorkExperience = registerDto.WorkExperience, // 工作经历
                 HomeAddress = registerDto.HomeAddress,  //身份证上 家庭住址
                 UsePeriod = "", //试用期 由该人员入职部门主管手动操作
                 Certificate = "", //证件上传地址  多个证件由 | 隔开
@@ -136,7 +141,8 @@ namespace OASystem.Infrastructure.Repositories.Login
                 Remark = "",         //备注
                 IsDel = 0
             };
-            var _AddId = await _loginRep.AddAsyncReturnId(_userInfo);
+
+            var _AddId = await _sqlSugar.Insertable(_userInfo).ExecuteReturnIdentityAsync();
             if (_AddId < 0)
             {
                 result.Code = -2;
@@ -145,10 +151,46 @@ namespace OASystem.Infrastructure.Repositories.Login
                 return result;
             }
 
+            _userInfo.CreateUserId = _AddId;
+
+            var updateStatus = await _sqlSugar.Updateable(_userInfo).UpdateColumns(it => new { it.CreateUserId }).Where(it => it.Id == _AddId).ExecuteCommandAsync();
+
+
             result.Code = 0;
-            result.Msg = "申请成功!人事主管审核后且信息部经理分配了登录账号,可登录OA!";
+            //result.Msg = string.Format("账号:{0}\r\n密码:{1}\r\n申请成功!\r\n人事主管审核后,即可登录OA!", number, registerDto.Password);
+            result.Msg = string.Format("账号:{0}\r\n申请成功!\r\n人事主管审核后,即可登录OA!", number);
             return result;
         }
+        
+        /// <summary>
+        /// 生成 Number
+        /// </summary>
+        /// <param name="depId"></param>
+        /// <returns></returns>
+        public async Task<string> CreateNumber(int depId) {
+            string number = string.Empty;
+
+            string userSql = string.Format("Select * From  Sys_Users Where DepId = {0} And Number != '' Order By Id Desc", depId);
+            var userData = await _sqlSugar.SqlQueryable<Sys_Users>(userSql).ToListAsync();
+            if (userData.Count <= 0) return number;
+
+            string depSql = string.Format("Select * From  Sys_Department Where IsDel= 0 And Id = {0} ", depId);
+            var depData = await _sqlSugar.SqlQueryable<Sys_Department>(depSql).FirstAsync();
+            if (depData == null) return number;
+
+            string numPrefix = depData.Remark; 
+            if (string.IsNullOrEmpty(numPrefix)) return number;
 
+            int numSuffix = 1;
+            while (true) 
+            {
+                number = numPrefix + numSuffix.ToString();
+                var userData1 = userData.Where(it => it.Number == number).FirstOrDefault();
+                if (userData1 == null) break;
+                numSuffix++;
+            }
+
+            return number;
+        }
     }
 }

+ 9 - 20
OASystem/OASystem.Infrastructure/Repositories/PersonnelModule/WageSheetRepository.cs

@@ -40,13 +40,13 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
                 return _result;
             }
 
-            string sql = string.Format(@"Select sys_u1.CnName Name,sys_u2.CnName LastUpdateUserName,pm_ws.LastUpdateDt, pm_ws.Id, 
-                                         pm_ws.YearMonth,pm_ws.StartDate,pm_ws.EndDate,pm_ws.UserId,pm_ws.Should,
-                                         pm_ws.TotalDeductions,pm_ws.Ex_ItemsRemark,TotalRealHair,pm_ws.WithholdingTax,pm_ws.AfterTax
+            string sql = string.Format(@"Select sys_u1.CnName Name,sys_u2.CnName LastUpdateUserName,pm_ws.LastUpdateDt, pm_ws.Id,pm_ws.YearMonth,pm_ws.StartDate,
+										 pm_ws.EndDate,pm_ws.WorkDays,pm_ws.RegularDays,pm_ws.UserId,pm_ws.Should,pm_ws.TotalDeductions,
+										 pm_ws.Ex_ItemsRemark,TotalRealHair,pm_ws.WithholdingTax,pm_ws.AfterTax
                                          From Pm_WageSheet pm_ws
                                          Left Join Sys_Users sys_u1 On pm_ws.UserId = sys_u1.Id
                                          Left Join Sys_Users sys_u2 On pm_ws.LastUpdateUserId = sys_u2.Id
-                                         Where pm_ws.IsDel = 0 And pm_ws.YearMonth = '{0}'", yearMonth);
+                                         Where pm_ws.IsDel = 0 And pm_ws.YearMonth =  '{0}'", yearMonth);
             var wageSheetList = await _sqlSugar.SqlQueryable<WageSheetItemInfoView>(sql).ToListAsync();
 
             if (wageSheetList.Count <= 0 )
@@ -54,18 +54,7 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
                 _result.Msg = "暂无数据!";
                 return _result;
             }
-            //wageSheetList = wageSheetList.Select(it => {
-
-            //    if (!string.IsNullOrEmpty(it.Ex_ItemsRemark))
-            //    {
-            //        List<Ex_Items>? data = new List<Ex_Items>();
-            //        data = JsonConvert.DeserializeObject<List<Ex_Items>>(it.Ex_ItemsRemark);
-            //        it.Ex_Items = data;
-            //    }
-
-            //    return it;
-                
-            //}).ToList();   
+
             _result.Code = 0;
             _result.Msg = "查询成功!";
             _result.Data = wageSheetList;
@@ -107,16 +96,16 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
 
             #region 计算工资
 
-            //应发合计 //计算日工资
-            decimal salary = pm_WageSheet.Basic + pm_WageSheet.Floats + pm_WageSheet.PostAllowance + pm_WageSheet.GarmentWashSubsidies + pm_WageSheet.CommunicationSubsidies + pm_WageSheet.GroupCost +
-                             pm_WageSheet.TrafficSubsidies + pm_WageSheet.InformationSecurityFee + pm_WageSheet.OperationBonus + pm_WageSheet.OtherSubsidies;
+            //应发合计 
+            decimal salary = pm_WageSheet.Basic + pm_WageSheet.Floats + pm_WageSheet.PostAllowance + pm_WageSheet.InformationSecurityFee + pm_WageSheet.OtherSubsidies;
             //扣款合计
             decimal totalDeduction = pm_WageSheet.SickLeave + pm_WageSheet.SomethingFalse + pm_WageSheet.LateTo + pm_WageSheet.LeaveEarly + pm_WageSheet.Absenteeism + pm_WageSheet.NotPunch +
                                      pm_WageSheet.ReservedFunds + pm_WageSheet.WithholdingInsurance + pm_WageSheet.OtherDeductions + pm_WageSheet.OtherDeductions;
 
             //实发合计 不含个税
+            salary = salary + pm_WageSheet.Mealsupplement;
             decimal actualTotal = salary - totalDeduction;
-            pm_WageSheet.Should = salary + pm_WageSheet.SpecialAllowance + pm_WageSheet.Mealsupplement;
+            pm_WageSheet.Should = salary ;
             pm_WageSheet.TotalDeductions = totalDeduction;
             pm_WageSheet.TotalRealHair = actualTotal;
             pm_WageSheet.AfterTax = actualTotal - pm_WageSheet.WithholdingTax;

+ 1 - 1
OASystem/OASystem.Infrastructure/Repositories/System/UsersRepository.cs

@@ -115,7 +115,7 @@ namespace OASystem.Infrastructure.Repositories.System
 
             if (portType == 1 || portType == 2) //web
             {
-                string sql = string.Format(@"Select Id,CnName From Sys_Users Where Isdel=0");
+                string sql = string.Format(@"Select Id,CnName From Sys_Users Where Isdel=0 And HrAudit = 1");
                 var _userList = await _sqlSugar.SqlQueryable<UserNameView>(sql).ToListAsync();
 
                 if (_userList.Count != 0)