Browse Source

成本合并服务器

yuanrf 1 year ago
parent
commit
4aca6bf6f9
50 changed files with 3119 additions and 98 deletions
  1. 3 0
      OASystem/EntitySync/Program.cs
  2. 406 1
      OASystem/OASystem.Api/Controllers/AuthController.cs
  3. 1 1
      OASystem/OASystem.Api/Controllers/BusinessController.cs
  4. 79 2
      OASystem/OASystem.Api/Controllers/FinancialController.cs
  5. 303 4
      OASystem/OASystem.Api/Controllers/GroupsController.cs
  6. 80 39
      OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs
  7. 1 1
      OASystem/OASystem.Api/Controllers/SystemController.cs
  8. 274 11
      OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs
  9. 6 9
      OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/QiYeWeChatApiService.cs
  10. 9 0
      OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs
  11. 121 0
      OASystem/OASystem.Domain/Dtos/Financial/ForForeignReceivablesNewDto.cs
  12. 103 0
      OASystem/OASystem.Domain/Dtos/Groups/CarTouristGuideGroundDto.cs
  13. 18 0
      OASystem/OASystem.Domain/Dtos/Groups/EnterExitCostDto.cs
  14. 1 1
      OASystem/OASystem.Domain/Dtos/Groups/GroupListDto.cs
  15. 142 0
      OASystem/OASystem.Domain/Dtos/Groups/VisaPriceDto.cs
  16. 8 1
      OASystem/OASystem.Domain/Dtos/PersonnelModule/WageSheetMonthWorkdaysDto.cs
  17. 4 0
      OASystem/OASystem.Domain/Dtos/Resource/LocalGuideDataDto.cs
  18. 4 1
      OASystem/OASystem.Domain/Entities/EntityBase.cs
  19. 102 0
      OASystem/OASystem.Domain/Entities/Groups/Grp_CarTouristGuideGroundReservations.cs
  20. 46 0
      OASystem/OASystem.Domain/Entities/Groups/Grp_CarTouristGuideGroundReservationsContent.cs
  21. 3 3
      OASystem/OASystem.Domain/Entities/Groups/Grp_Ommission.cs
  22. 54 0
      OASystem/OASystem.Domain/Entities/Groups/Grp_VisaInfo.cs
  23. 0 1
      OASystem/OASystem.Domain/Entities/Resource/Res_CarGuides.cs
  24. 4 0
      OASystem/OASystem.Domain/Entities/Resource/Res_LocalGuideData.cs
  25. 3 3
      OASystem/OASystem.Domain/Entities/System/Sys_Calendar.cs
  26. 5 5
      OASystem/OASystem.Domain/Entities/System/Sys_Users.cs
  27. 110 0
      OASystem/OASystem.Domain/ViewModels/Financial/Fin_ForeignReceivablesView.cs
  28. 73 0
      OASystem/OASystem.Domain/ViewModels/Groups/EnterExitCostView.cs
  29. 37 0
      OASystem/OASystem.Domain/ViewModels/Groups/Grp_CarTouristGuideGroundView.cs
  30. 26 0
      OASystem/OASystem.Domain/ViewModels/Groups/VisaInfoView.cs
  31. 2 0
      OASystem/OASystem.Domain/ViewModels/PersonnelModule/WageSheetMonthView.cs
  32. 1 1
      OASystem/OASystem.Domain/ViewModels/PersonnelModule/WageSheetView.cs
  33. 2 0
      OASystem/OASystem.Domain/ViewModels/QiYeWeChat/ApprovalDataView.cs
  34. 353 0
      OASystem/OASystem.Domain/ViewModels/System/OA2014UsersView.cs
  35. 2 0
      OASystem/OASystem.Domain/ViewModels/System/SetDataView.cs
  36. 4 0
      OASystem/OASystem.Domain/ViewModels/ViewBase.cs
  37. 137 1
      OASystem/OASystem.Infrastructure/Repositories/Financial/ForeignReceivablesRepository.cs
  38. 4 0
      OASystem/OASystem.Infrastructure/Repositories/Groups/AirTicketResRepository.cs
  39. 221 0
      OASystem/OASystem.Infrastructure/Repositories/Groups/CarTouristGuideGroundRepository.cs
  40. 4 0
      OASystem/OASystem.Infrastructure/Repositories/Groups/DecreasePaymentsRepository.cs
  41. 2 2
      OASystem/OASystem.Infrastructure/Repositories/Groups/DelegationInfoRepository.cs
  42. 36 3
      OASystem/OASystem.Infrastructure/Repositories/Groups/DelegationVisaRepository.cs
  43. 1 1
      OASystem/OASystem.Infrastructure/Repositories/Groups/EnterExitCostRepository.cs
  44. 4 0
      OASystem/OASystem.Infrastructure/Repositories/Groups/InvitationOfficialActivitiesRepository.cs
  45. 286 0
      OASystem/OASystem.Infrastructure/Repositories/Groups/VisaPriceRepository.cs
  46. 11 3
      OASystem/OASystem.Infrastructure/Repositories/Login/LoginRepository.cs
  47. 5 1
      OASystem/OASystem.Infrastructure/Repositories/Resource/InvitationOfficialActivityDataRepository.cs
  48. 1 0
      OASystem/OASystem.Infrastructure/Repositories/Resource/LocalGuideDataRepository.cs
  49. 3 3
      OASystem/OASystem.Infrastructure/Repositories/System/UsersRepository.cs
  50. 14 0
      OASystem/OASystem.Infrastructure/Tools/CommonFun.cs

+ 3 - 0
OASystem/EntitySync/Program.cs

@@ -113,5 +113,8 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Grp_CheckBoxs)  //成本选中
     //typeof(Grp_CheckBoxs)  //成本选中
     //typeof(Grp_GroupCost) //成本数据信息
     //typeof(Grp_GroupCost) //成本数据信息
     //typeof(Grp_CostTypeHotelNumber)//分段房间数量
     //typeof(Grp_CostTypeHotelNumber)//分段房间数量
+    //typeof(Grp_VisaInfo)
+    typeof(Grp_CarTouristGuideGroundReservations),
+    typeof(Grp_CarTouristGuideGroundReservationsContent)
 });
 });
 Console.WriteLine("数据库结构同步完成!");
 Console.WriteLine("数据库结构同步完成!");

+ 406 - 1
OASystem/OASystem.Api/Controllers/AuthController.cs

@@ -13,6 +13,7 @@ using OASystem.API.OAMethodLib.QiYeWeChatAPI;
 using OASystem.Domain.Dtos.QiYeWeChat;
 using OASystem.Domain.Dtos.QiYeWeChat;
 using OASystem.Domain.Entities.System;
 using OASystem.Domain.Entities.System;
 using TinyPinyin;
 using TinyPinyin;
+using System.Globalization;
 
 
 namespace OASystem.API.Controllers
 namespace OASystem.API.Controllers
 {
 {
@@ -230,7 +231,7 @@ namespace OASystem.API.Controllers
             var userData = _loginRep.Register(dto);
             var userData = _loginRep.Register(dto);
             if (userData.Result.Code != 0)
             if (userData.Result.Code != 0)
             {
             {
-                return Ok(JsonView(false, "注册失败!"));
+                return Ok(JsonView(false, userData.Result.Msg));
             }
             }
 
 
             return Ok(JsonView(true, userData.Result.Msg));
             return Ok(JsonView(true, userData.Result.Msg));
@@ -286,5 +287,409 @@ namespace OASystem.API.Controllers
 
 
             return Ok(JsonView(view));
             return Ok(JsonView(view));
         }
         }
+
+        ///// <summary>
+        ///// 员工信息 迁移
+        ///// Old OA To New OA
+        ///// </summary>
+        ///// <returns></returns>
+        //[HttpPost("UpdateUserDataOldOAToNewOA")]
+        //[ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
+        //public async Task<IActionResult> UpdateUserDataOldOAToNewOA()
+        //{
+        //    dynamic view = null;
+
+        //    try
+        //    {
+        //        var _sqlSuar = _loginRep._sqlSugar;
+
+        //        var oldOaUsersData = await _sqlSuar.Queryable<OA2014UsersView>().AS("OA2014.dbo.Users").ToListAsync();
+        //        var newOaCompanyData = await _sqlSuar.Queryable<Sys_Company>().ToListAsync();
+        //        var newOaDepartmentData = await _sqlSuar.Queryable<Sys_Department>().ToListAsync();
+        //        var newOaJobPostData = await _sqlSuar.Queryable<Sys_JobPost>().ToListAsync();
+        //        List<Sys_Users> newOaUserDatas = new List<Sys_Users>();
+
+        //        foreach (var oldUser in oldOaUsersData)
+        //        {
+        //            int depId = 0, postId = 0;
+        //            #region 处理部门岗位
+
+        //            int did = oldUser.Did;
+        //            string post = oldUser.Post;
+        //            switch (did)
+        //            {
+        //                case 1 : //信息部
+        //                    depId = 2;
+        //                    if (post.Equals("信息部经理")) postId = 4;
+        //                    else if (post.Equals("美工")) { depId = 5; postId = 18; }
+        //                    else if(post.Equals("网络推广")) postId = 46;
+        //                    else if (post.Equals("软件开发")) postId = 5;
+        //                    else if (post.Equals("平面设计师")) { depId = 5; postId = 18; }
+        //                    else if (post.Equals("平面设计")) { depId = 5; postId = 18; }
+        //                    else if (post.Equals("平面设计师")) { depId = 5; postId = 18; }
+        //                    else if (post.Equals("软件工程师")) postId = 5;
+        //                    else if (post.Equals("OP操作")) { depId = 7; postId = 28; }
+        //                    else if (post.Equals("软件工程师.")) postId = 5;
+        //                    else if (post.Equals(".net工程师")) postId = 5;
+        //                    else if (post.Equals("安卓开发工程师")) postId = 7;
+        //                    else if (post.Equals("web前端")) postId = 6;
+        //                    else if (post.Equals("Web后端开发")) postId = 5;
+        //                    break; 
+        //                case 2 : //财务部
+        //                    depId=3;
+        //                    if (post.Equals("主管")) postId = 47;
+        //                    else if (post.Equals("财务总监")) { postId = 9; }
+        //                    else if (post.Equals("会计")) { postId = 10; }
+        //                    else if (post.Equals("财务经理")) { postId = 47; }
+        //                    else if (post.Equals("财务助理")) { postId = 50; }
+        //                    else if (post.Equals("出纳")) { postId = 48; }
+        //                    else { postId = 10; }
+
+        //                    break;
+        //                case 3: //人事部
+        //                    depId = 4;
+        //                    if (post.Equals("主管")) postId = 51;
+        //                    else if (post.Equals("人事部主管")) { postId = 51; }
+        //                    else if (post.Equals("人事行政主管")) { postId = 51; }
+        //                    else if (post.Equals("行政人事助理")) { postId = 52; }
+        //                    else if (post.Equals("人事助理")) { postId = 52; }
+        //                    else if (post.Equals("人事主管")) { postId = 51; }
+        //                    else if (post.Equals("行政人事专员")) { postId = 12; }
+        //                    else if (post.Equals("行政司机")) { postId = 14; }
+        //                    else if (post.Equals("司机")) { postId = 14; }
+        //                    else if (post.Equals("统筹执行")) { postId = 12; }
+        //                    else if (post.Equals("培训专员")) { postId = 13; }
+        //                    else if (post.Equals("人事经理")) { postId = 11; }
+        //                    else if (post.Equals("前台")) { postId = 33; }
+        //                    else if (post.Equals("人事行政经理")) { postId = 11; }
+        //                    else if (post.Equals("人事部经理")) { postId = 11; }
+        //                    else if (post.Equals("人事专员")) { postId = 12; }
+        //                    else if (post.Equals("人事经理")) { postId = 11; }
+        //                    else postId = 12;
+
+        //                    break;
+        //                case 4: //国交部
+        //                    //22   7   主管
+        //                    //23   7   计调
+        //                    //24   7   机票
+        //                    //25   7   酒店
+        //                    //26   7   签证
+        //                    //27   7   商邀
+        //                    //28   7   OP
+        //                    //32   7   经理
+        //                    depId = 7;
+        //                    if (post.Equals("酒店")) postId = 25;
+        //                    else if (post.Equals("经理")) { postId = 32; }
+        //                    else if (post.Equals("OP专员")) { postId = 28; }
+        //                    else if (post.Equals("酒店预订")) { postId = 25; }
+        //                    else if (post.Equals("商务邀请")) { postId = 27; }
+        //                    else if (post.Equals("-")) { postId = 0; }
+        //                    else if (post.Equals("签证专员")) { postId = 26; }
+        //                    else if (post.Equals("OP操作")) { postId = 28; }
+        //                    else if (post.Equals("司机")) { postId = 14; }
+        //                    else if (post.Equals("国际交流部经理")) { postId = 32; }
+        //                    else if (post.Equals("机票酒店")) { postId = 24; }
+        //                    else if (post.Equals("签证")) { postId = 26; }
+        //                    else if (post.Equals("票房")) { postId = 24; }
+        //                    else if (post.Equals("票务专员")) { postId = 24; }
+        //                    else if (post.Equals("酒店/机票")) { postId = 24; }
+        //                    else if (post.Equals("OP")) { postId = 28; }
+        //                    else if (post.Equals("主管")) { postId = 22; }
+        //                    else if (post.Equals("订票专员")) { postId = 24; }
+        //                    else if (post.Equals("机票")) { postId = 24; }
+        //                    else if (post.Equals("国交部经理")) { postId = 32; }
+        //                    else if (post.Equals("计调")) { postId = 23; }
+        //                    else if (post.Equals("票务")) { postId = 24; }
+        //                    else if (post.Equals("国交部主管")) { postId = 22; }
+        //                    else if (post.Equals("暂无")) { postId = 22; }
+        //                    else if (post.Equals("初级OP")) { postId = 28; }
+        //                    else if (post.Equals("计调")) { postId = 23; }
+        //                    else { postId = 0; }
+        //                        break;
+        //                case 5: //会展部
+        //                    //15   5   经理
+        //                    //16   5   文案策划
+        //                    //17   5   活动执行
+        //                    //18   5   平面设计师
+        //                    //19   5   3D设计师
+        //                    depId = 5;
+        //                    if (post.Equals("-")) postId = 16;
+        //                    break;
+        //                case 6: //市场销售部
+        //                    //20   6   经理
+        //                    //21   6   市场专员
+        //                    //53   6   主管
+        //                    depId = 6;
+        //                    if (post.Equals("主管")) postId = 53;
+        //                    else if (post.Equals("-")) postId = 21;
+        //                    else if (post.Equals("销售总监")) postId = 53;
+        //                    else if (post.Equals("市场专员")) postId = 21;
+        //                    else if (post.Equals("销售专员")) postId = 54;
+        //                    else if (post.Equals("市场助理")) postId = 55;
+        //                    else if (post.Equals("销售")) postId = 54;
+        //                    break;
+        //                case 99: //总经办
+        //                         //1    1   总经理
+        //                         //2    1   副总经理
+        //                         //3    1   总经理助理
+
+        //                    depId = 1;
+        //                    if (post.Equals("总经理")) postId = 1;
+        //                    else if (post.Equals("副总")) postId = 2;
+        //                    break;
+        //                case 107: //会议会展策划部
+        //                    //15   5   经理
+        //                    //16   5   文案策划
+        //                    //17   5   活动执行
+        //                    //18   5   平面设计师
+        //                    //19   5   3D设计师
+        //                    //56   5   销售
+        //                    //46   5   网络推广
+        //                    //57   5   市场推广
+        //                    depId = 5;
+        //                    if (post.Equals("销售")) postId = 56;
+        //                    else if (post.Equals("策划执行")) postId = 16;
+        //                    else if (post.Equals("策活动划")) postId = 16;
+        //                    else if (post.Equals("活动执行")) postId = 17;
+        //                    else if (post.Equals("网络媒介推广")) postId = 46;
+        //                    else if (post.Equals("媒介主任")) postId = 46;
+        //                    else if (post.Equals("公关部经理")) postId = 15;
+        //                    else if (post.Equals("项目执行")) postId = 17;
+        //                    else if (post.Equals("市场推广")) postId = 57;
+        //                    else if (post.Equals("策划")) postId = 16;
+        //                    else if (post.Equals("3D设计师")) postId = 19;
+        //                    else if (post.Equals("平面设计")) postId = 18;
+        //                    else if (post.Equals("设计")) postId = 18;
+        //                    else if (post.Equals("活动策划")) postId = 16;
+        //                    else if (post.Equals("活动策划执行")) postId = 17;
+        //                    else if (post.Equals("高级活动策划")) postId = 16;
+        //                    else postId = 0;
+        //                    break;
+        //                case 115:
+        //                    if (post.Equals("系统管理员")) { depId = 9; postId = 31; }
+        //                    else if (post.Equals("后勤专员")) { depId = 5; postId = 58; }
+
+        //                    break;
+        //                case 287: //会展部
+        //                          //59  2   17  经理
+        //                          //60  2   17  主管
+        //                          //61  2   17  会展专员
+        //                          //62  2   17  会展销售
+        //                          //63  2   17  会展策划
+        //                          //64  2   17  招商专员
+        //                          //65  2   17  媒介专员
+        //                    depId = 17;
+        //                    if (post.Equals("会展部经理")) postId = 59;
+        //                    else if (post.Equals("会展专员")) postId = 61;
+        //                    else if (post.Equals("会展销售")) postId = 62;
+        //                    else if (post.Equals("招商招展")) postId = 63;
+        //                    else if (post.Equals("会展部主管")) postId = 60;
+        //                    else if (post.Equals("媒介专员")) postId = 65;
+        //                    else if (post.Equals("会展策划")) postId = 63;
+        //                    else if (post.Equals("招商专员")) postId = 64;
+        //                    else postId = 61;
+        //                    break;
+        //                case 304: //总经理助理
+        //                          //1    1   总经理
+        //                          //2    1   副总经理
+        //                          //3    1   总经理助理
+
+        //                    depId = 1;
+        //                    postId = 3;
+        //                    break;
+        //                case 323: //海外游学部
+        //                    //66	3	19	游学顾问
+        //                    depId = 19;
+        //                    postId = 66;
+        //                    break;
+        //                case 335: //会议会展策划部
+        //                          //15   5   经理
+        //                          //16   5   文案策划
+        //                          //17   5   活动执行
+        //                          //18   5   平面设计师
+        //                          //19   5   3D设计师
+        //                          //56   5   销售
+        //                          //46   5   网络推广
+        //                          //57   5   市场推广
+        //                          //67   5   策划主管 
+        //                    depId = 5;
+        //                    if (post.Equals("会展专员")) { depId = 17; postId = 61; }
+        //                    else if (post.Equals("策划执行")) postId = 16;
+        //                    else if (post.Equals("策划主管")) postId = 67;
+        //                    else if (post.Equals("策划")) postId = 16;
+        //                    else if (post.Equals("文案")) postId = 16;
+        //                    else if (post.Equals("策划执行")) postId = 17;
+        //                    else if (post.Equals("执行专员 ")) postId = 17;
+        //                    break;
+        //                case 761://项目部
+        //                         //20   6   经理
+        //                         //21   6   市场专员
+        //                         //53   6   主管
+
+        //                    if (post.Equals("销售主管")) { depId = 6; postId = 20; }
+        //                    else if (post.Equals("场站经理")) { depId = 6; postId = 53; }
+        //                    else if (post.Equals("暂无")) { depId = 5; postId = 58; }
+        //                    else
+        //                    {
+        //                        if (oldUser.CnName.Equals("许婷"))
+        //                        {
+        //                            depId = 5; postId = 16;
+        //                        }
+        //                        else if (oldUser.CnName.Equals("陈雪"))
+        //                        {
+        //                            depId = 5; postId = 17;
+        //                        }
+        //                    }
+        //                    break;
+        //                default:
+        //                    break;
+        //            }
+        //            #endregion
+
+        //            string idCrad = string.Empty;
+        //            string idCradNumber = string.Empty;
+        //            DateTime? birthday = null;
+        //            if (!string.IsNullOrEmpty(oldUser.IDCard))
+        //            {
+        //                idCrad = oldUser.IDCard.Trim();
+                        
+        //                #region 处理身份证Number 出生日期
+        //                if (idCrad.ValidateIdNumber())
+        //                {
+        //                    idCradNumber = idCrad.ToString();
+        //                    string birthDate = idCrad.Substring(6, 8);  // 提取从第6位开始的8个字符,即出生日期部分
+        //                    birthday = new DateTime(int.Parse(birthDate.Substring(0, 4)), int.Parse(birthDate.Substring(4, 2)), int.Parse(birthDate.Substring(6, 2)));
+
+        //                }
+        //                #endregion
+        //            }
+
+
+
+        //            DateTime? startWorkDate = null;
+        //            #region 判断是否是日期格式的字符串
+        //            string format = "yyyy-MM-dd";     // 日期格式
+        //            DateTime date;
+        //            bool isParsed = DateTime.TryParseExact(oldUser.StartWorkDate, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out date);
+
+        //            if (isParsed)
+        //            {
+        //                startWorkDate = date;
+        //            }
+
+        //            #endregion
+
+        //            int education = 0;
+        //            #region 处理学历
+
+        //            if (!string.IsNullOrEmpty(oldUser.Education))
+        //            {
+        //                //0 未设置 1 小学、2 初中、3 高中、4 专科、5 本科、6 研究生
+        //                if (oldUser.Education.Equals("本科")) education = 5;
+        //                else if (oldUser.Education.Equals("大学专科")) education = 4;
+        //                else if (oldUser.Education.Equals("大专")) education = 4;
+        //                else if (oldUser.Education.Equals("全日制本科")) education = 5;
+        //                else if (oldUser.Education.Equals("硕士")) education = 6;
+        //                else if (oldUser.Education.Equals("硕士研究生")) education = 6;
+        //                else if (oldUser.Education.Equals("学士")) education = 6;
+        //                else if (oldUser.Education.Equals("研究生")) education = 6;
+        //                else if (oldUser.Education.Equals("专科")) education = 4;
+        //            }
+        //            #endregion
+
+        //            int theOrAdultEducation = 0;
+        //            #region 处理统招/成人
+
+        //            if (!string.IsNullOrEmpty(oldUser.TheOrAdultEducation))
+        //            {
+        //                //0 未设置 1 成教 2 统招 3 留学
+        //                if (oldUser.TheOrAdultEducation.Equals("成教")) theOrAdultEducation = 1;
+        //                if (oldUser.TheOrAdultEducation.Equals("自考")) theOrAdultEducation = 1;
+        //                else if (oldUser.TheOrAdultEducation.Equals("统招")) theOrAdultEducation = 2;
+        //                else if (oldUser.TheOrAdultEducation.Equals("留学")) theOrAdultEducation = 3;
+
+        //            }
+
+
+        //            #endregion
+
+        //            Sys_Users user = new Sys_Users()
+        //            {
+        //                Id = oldUser.Id,
+        //                CnName = oldUser.CnName,
+        //                EnName = oldUser.EnName,
+        //                Number = oldUser.Number,
+        //                CompanyId = 2,
+        //                DepId = depId,
+        //                JobPostId = postId,
+        //                Password = oldUser.Password,
+        //                Sex = oldUser.Sex,
+        //                Ext = oldUser.Ext,
+        //                Phone = oldUser.Phone,
+        //                UrgentPhone = oldUser.UrgentPhone,
+        //                Email = oldUser.Email,
+        //                Address = oldUser.Address,
+        //                Edate = oldUser.Edate,
+        //                Rdate = oldUser.Rdate,
+        //                Seniority = oldUser.Seniority,
+        //                Birthday = birthday,
+        //                IDCard = idCradNumber,
+        //                StartWorkDate = startWorkDate,
+        //                GraduateInstitutions = oldUser.GraduateInstitutions,
+        //                Professional = oldUser.Professional,
+        //                Education = education,
+        //                TheOrAdultEducation = theOrAdultEducation,
+        //                MaritalStatus = oldUser.MaritalStatus,
+        //                HomeAddress = oldUser.HomeAddress,
+        //                UsePeriod = oldUser.UsePeriod,
+        //                WorkExperience = oldUser.WorkExperience,
+        //                Certificate = oldUser.Certificate,
+        //                HrAudit = 1,
+        //                CreateUserId = 208,
+        //                CreateTime = DateTime.Now,
+        //                DeleteUserId = null,
+        //                DeleteTime = string.Empty,
+        //                Remark = oldUser.Remark,
+        //                IsDel = oldUser.IsDel,
+        //            };
+
+        //            newOaUserDatas.Add(user);
+        //        }
+
+        //        if (newOaUserDatas.Count > 0)
+        //        {
+
+        //            //执行删除
+        //            bool resetStatus = _sqlSuar.DbMaintenance.TruncateTable<Sys_Users>();
+
+        //            //执行批量添加
+        //            int addTotal = await _sqlSuar.Insertable(newOaUserDatas).IgnoreColumns(it => it.Id).ExecuteCommandAsync();
+
+        //        }
+
+
+        //        view = new
+        //        {
+        //            Code = 200,
+        //            Msg = "操作成功!",
+        //            Data = newOaUserDatas
+
+        //        };
+        //    }
+        //    catch (Exception ex)
+        //    {
+
+        //        view = new
+        //        {
+        //            Code = 400,
+        //            Msg = ex.Message
+
+        //        };
+        //    }
+
+
+        //    return Ok(JsonView(view));
+        //}
+    
     }
     }
 }
 }

+ 1 - 1
OASystem/OASystem.Api/Controllers/BusinessController.cs

@@ -80,7 +80,7 @@ namespace OASystem.API.Controllers
         /// </summary>
         /// </summary>
         /// <param name="dto"></param>
         /// <param name="dto"></param>
         /// <returns></returns>
         /// <returns></returns>
-        [HttpPost]
+        [HttpGet,HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> PostCurrencyList()
         public async Task<IActionResult> PostCurrencyList()
         {
         {

+ 79 - 2
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -624,6 +624,31 @@ namespace OASystem.API.Controllers
 
 
         #region 对外收款账单
         #region 对外收款账单
 
 
+        /// <summary>
+        /// 对外收款账单 
+        /// 数据源
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostGroupReceivablesDataSource()
+        {
+            try
+            {
+                Result ffrData = await _ForForeignReceivablesRep.PostDataSource();
+                if (ffrData.Code != 0)
+                {
+                    return Ok(JsonView(false, ffrData.Msg));
+                }
+                return Ok(JsonView(true, ffrData.Msg, ffrData.Data));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, ex.Message));
+                throw;
+            }
+        }
 
 
         /// <summary>
         /// <summary>
         /// 对外收款账单 
         /// 对外收款账单 
@@ -633,11 +658,63 @@ namespace OASystem.API.Controllers
         /// <returns></returns>
         /// <returns></returns>
         [HttpPost]
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> PostGroupReceivablesInfoByDiId(ForForeignReceivablesInfoDto dto)
+        public async Task<IActionResult> PostGroupReceivablesInfoByDiId(ForForeignReceivablesNewDto dto)
         {
         {
             try
             try
             {
             {
-                Result ffrData = await _ForForeignReceivablesRep.GetGroupReceivablesInfoByDiId(dto);
+                Result ffrData = await _ForForeignReceivablesRep.PostGroupReceivablesInfoByDiId(dto);
+                if (ffrData.Code != 0)
+                {
+                    return Ok(JsonView(false, ffrData.Msg));
+                }
+                return Ok(JsonView(true, ffrData.Msg, ffrData.Data));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, ex.Message));
+                throw;
+            }
+        }
+
+        /// <summary>
+        /// 对外收款账单 
+        /// 添加 And 更新
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostReceivablesSave(ForeignReceivablesSaveDto dto)
+        {
+            try
+            {
+                Result ffrData = await _ForForeignReceivablesRep.PostReceivablesSave(dto);
+                if (ffrData.Code != 0)
+                {
+                    return Ok(JsonView(false, ffrData.Msg));
+                }
+                return Ok(JsonView(true, ffrData.Msg, ffrData.Data));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, ex.Message));
+                throw;
+            }
+        }
+
+        /// <summary>
+        /// 已收账单 
+        /// 删除
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostReceivablesDel(ForeignReceivablesDelDto dto)
+        {
+            try
+            {
+                Result ffrData = await _ForForeignReceivablesRep.PostReceivablesDel(dto);
                 if (ffrData.Code != 0)
                 if (ffrData.Code != 0)
                 {
                 {
                     return Ok(JsonView(false, ffrData.Msg));
                     return Ok(JsonView(false, ffrData.Msg));

+ 303 - 4
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -49,6 +49,8 @@ namespace OASystem.API.Controllers
         private readonly InvitationOfficialActivitiesRepository _InvitationOfficialActivitiesRep;
         private readonly InvitationOfficialActivitiesRepository _InvitationOfficialActivitiesRep;
         private readonly DelegationEnDataRepository _delegationEnDataRep;
         private readonly DelegationEnDataRepository _delegationEnDataRep;
         private readonly DelegationVisaRepository _delegationVisaRep;
         private readonly DelegationVisaRepository _delegationVisaRep;
+        private readonly VisaPriceRepository _visaPriceRep;
+        private readonly CarTouristGuideGroundRepository _carTouristGuideGroundRep;
         private readonly MessageRepository _message;
         private readonly MessageRepository _message;
         private readonly SqlSugarClient _sqlSugar;
         private readonly SqlSugarClient _sqlSugar;
         #region 成本相关
         #region 成本相关
@@ -65,6 +67,7 @@ namespace OASystem.API.Controllers
         public GroupsController(IMapper mapper, SqlSugarClient sqlSugar, GrpScheduleRepository grpScheduleRep, DelegationInfoRepository groupRepository,
         public GroupsController(IMapper mapper, SqlSugarClient sqlSugar, GrpScheduleRepository grpScheduleRep, DelegationInfoRepository groupRepository,
             TaskAssignmentRepository taskAssignmentRep, AirTicketResRepository airTicketResRep, DecreasePaymentsRepository decreasePaymentsRep,
             TaskAssignmentRepository taskAssignmentRep, AirTicketResRepository airTicketResRep, DecreasePaymentsRepository decreasePaymentsRep,
             InvitationOfficialActivitiesRepository InvitationOfficialActivitiesRep, DelegationEnDataRepository delegationEnDataRep, EnterExitCostRepository enterExitCostRep
             InvitationOfficialActivitiesRepository InvitationOfficialActivitiesRep, DelegationEnDataRepository delegationEnDataRep, EnterExitCostRepository enterExitCostRep
+            , DelegationVisaRepository delegationVisaRep, MessageRepository message,VisaPriceRepository visaPriceRep,CarTouristGuideGroundRepository carTouristGuideGroundRep)
             , DelegationVisaRepository delegationVisaRep, MessageRepository message, CheckBoxsRepository checkBoxs, GroupCostRepository GroupCostRepository, CostTypeHotelNumberRepository CostTypeHotelNumberRepository,
             , DelegationVisaRepository delegationVisaRep, MessageRepository message, CheckBoxsRepository checkBoxs, GroupCostRepository GroupCostRepository, CostTypeHotelNumberRepository CostTypeHotelNumberRepository,
             GroupCostParameterRepository GroupCostParameterRepository)
             GroupCostParameterRepository GroupCostParameterRepository)
         {
         {
@@ -86,6 +89,8 @@ namespace OASystem.API.Controllers
             _enterExitCostRep = enterExitCostRep;
             _enterExitCostRep = enterExitCostRep;
             _delegationVisaRep = delegationVisaRep;
             _delegationVisaRep = delegationVisaRep;
             _message = message;
             _message = message;
+            _visaPriceRep= visaPriceRep;
+            _carTouristGuideGroundRep= carTouristGuideGroundRep;
             _checkBoxs = checkBoxs;
             _checkBoxs = checkBoxs;
             _GroupCostRepository = GroupCostRepository;
             _GroupCostRepository = GroupCostRepository;
             _CostTypeHotelNumberRepository = CostTypeHotelNumberRepository;
             _CostTypeHotelNumberRepository = CostTypeHotelNumberRepository;
@@ -377,7 +382,7 @@ namespace OASystem.API.Controllers
 
 
             GroupStepForDelegation.CreateWorkStep(dto.GroupId); //创建管控流程
             GroupStepForDelegation.CreateWorkStep(dto.GroupId); //创建管控流程
 
 
-            return Ok(JsonView(groupData.Data));
+            return Ok(JsonView(true,"操作成功!",groupData.Data));
         }
         }
 
 
         
         
@@ -638,10 +643,13 @@ namespace OASystem.API.Controllers
                     if (updCount > 0 && dto.publishCode == 1) {
                     if (updCount > 0 && dto.publishCode == 1) {
 
 
                         _delegationVisaRep.ChangeDataBase(DBEnum.OA2014DB); //切换到新OA后删除
                         _delegationVisaRep.ChangeDataBase(DBEnum.OA2014DB); //切换到新OA后删除
-                        GroupInfoDto grpDto = new GroupInfoDto() { Id = dto.diId };
-                        var groupData = await _groupRepository.GetGroupInfo(grpDto);
+                        
+                        string sqlDelegation = string.Format(@" Select * From DelegationInfo With(Nolock) Where Id = {0} ", dto.diId);
+                        OA2021_DelegationInfo groupData = _sqlSugar.SqlQueryable<OA2021_DelegationInfo>(sqlDelegation).First();
+                        //GroupInfoDto grpDto = new GroupInfoDto() { Id = dto.diId };
+                        //var groupData = await _groupRepository.GetGroupInfo(grpDto);
                         _delegationVisaRep.ChangeDataBase(DBEnum.OA2023DB); //切换到新OA后删除
                         _delegationVisaRep.ChangeDataBase(DBEnum.OA2023DB); //切换到新OA后删除
-                        if (groupData.Code != 0)
+                        if (groupData == null)
                         {
                         {
                             _delegationVisaRep.RollbackTran();
                             _delegationVisaRep.RollbackTran();
                         }
                         }
@@ -2766,6 +2774,47 @@ namespace OASystem.API.Controllers
 
 
         }
         }
 
 
+        /// <summary>
+        /// 团组模块 - 出入境国家费用标准 根据城市查询
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostNationalTravelFeeInfoByCountryAndCity(NationalTravelFeeByCountryAndCityDto dto)
+        {
+            if (dto == null) return Ok(JsonView(false, "请传入参数!"));
+
+            int portId = dto.PortType;
+            if (portId != 1 && portId != 2 && portId != 3) return Ok(JsonView(false, "请输入正确的端口号!\r\n请求端口分类1 Web 2 Android 3 IOS"));
+
+            string whereSql = string.Empty;
+            if (!string.IsNullOrEmpty(dto.Country))
+            {
+                whereSql = string.Format(@"And Country = '{0}' ", dto.Country);
+            }
+
+            if (!string.IsNullOrEmpty(dto.City))
+            {
+                whereSql = string.Format(@"And City = '{0}' ", dto.City);
+            }
+
+            
+            string sql = string.Format(@"Select gntf.Country,gntf.City,gntf.Currency,ssd.Name as CurrencyCode, 
+	                                                ssd.Remark as CurrencyName,gntf.RoomCost,gntf.FoodCost,gntf.PublicCost,
+	                                                gntf.LastUpdateUserId,su.CnName as LastUpdateUserName,gntf.LastUpdateTime 
+                                             From Grp_NationalTravelFee gntf
+                                             Left Join Sys_SetData ssd On ssd.STid = 66 And gntf.Currency = ssd.Id
+                                             Left Join Sys_Users su On gntf.LastUpdateUserId = su.Id 
+                                             Where gntf.Isdel = 0 {0} ", whereSql);
+
+            var nationalTravelFeeData = await _groupRepository._sqlSugar.SqlQueryable<NationalTravelFeeInfoByCountryAndCityView>(sql).FirstAsync();
+
+
+
+            return Ok(JsonView(true, "查询成功!", nationalTravelFeeData));
+
+        }
+
         /// <summary>
         /// <summary>
         /// 团组模块 - 出入境国家费用标准 - Add Or Update
         /// 团组模块 - 出入境国家费用标准 - Add Or Update
         /// </summary>
         /// </summary>
@@ -2825,6 +2874,197 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(false, ex.Message));
                 return Ok(JsonView(false, ex.Message));
             }
             }
         }
         }
+
+        #endregion
+
+        #region 签证费用录入
+
+        /// <summary>
+        /// 根据diid查询签证费用列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> QueryVisaByDiId(VisaPriceDto dto)
+        {
+            try
+            {
+                Result groupData = await _visaPriceRep.PostVisaByDiId(dto);
+                if (groupData.Code != 0)
+                {
+                    return Ok(JsonView(false, groupData.Msg));
+                }
+                return Ok(JsonView(true, groupData.Msg, groupData.Data));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, ex.Message));
+            }
+        }
+        /// <summary>
+        /// 根据签证费用Id查询单条数据及c表数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> QueryVisaById(PostVisaByIdDto dto)
+        {
+            try
+            {
+                Result groupData = await _visaPriceRep.PostVisaById(dto);
+                if (groupData.Code != 0)
+                {
+                    return Ok(JsonView(false, groupData.Msg));
+                }
+                return Ok(JsonView(true, groupData.Msg, groupData.Data));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, ex.Message));
+            }
+        }
+        /// <summary>
+        /// 签证费用删除
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> DelVisaPrice(DelBaseDto dto)
+        {
+            try
+            {
+                var res = await _visaPriceRep.SoftDeleteByIdAsync<Grp_VisaInfo>(dto.Id.ToString(), dto.DeleteUserId);
+                if (!res)
+                {
+                    return Ok(JsonView(false, "删除失败"));
+                }
+                var resultC = await _sqlSugar.Updateable<Grp_CreditCardPayment>().Where(a => a.CId == dto.Id && a.IsDel == 0 && a.CTable == 80).SetColumns(a => new Grp_CreditCardPayment()
+                {
+                    IsDel = 1,
+                    DeleteUserId = dto.DeleteUserId,
+                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+                }).ExecuteCommandAsync();
+                return Ok(JsonView(true, "删除成功!"));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+        }
+        /// <summary>
+        /// 签证费用录入下拉框初始化
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> VisaPriceAddSelect()
+        {
+            try
+            {
+                //支付方式
+                List<Sys_SetData> Payment = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 14 && a.IsDel == 0).ToList();
+                List<SetDataInfoView> _Payment = _mapper.Map<List<SetDataInfoView>>(Payment);
+
+                //币种
+                List<Sys_SetData> CurrencyList = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 66 && a.IsDel == 0).ToList();
+                List<SetDataInfoView> _CurrencyList = _mapper.Map<List<SetDataInfoView>>(CurrencyList);
+
+                //支付方式
+                List<Sys_SetData> PassengerType = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 69 && a.IsDel == 0).ToList();
+                List<SetDataInfoView> _PassengerType = _mapper.Map<List<SetDataInfoView>>(PassengerType);
+
+                //卡类型
+                List<Sys_SetData> BankCard = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 15 && a.IsDel == 0).ToList();
+                List<SetDataInfoView> _BankCard = _mapper.Map<List<SetDataInfoView>>(BankCard);
+
+                var data = new
+                {
+                    Payment = _Payment,
+                    CurrencyList = _CurrencyList,
+                    PassengerType = _PassengerType,
+                    BankCard = _BankCard
+                };
+                return Ok(JsonView(true, "查询成功!",data));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+        }
+
+        /// <summary>
+        /// 签证费用录入操作(Status:1.新增,2.修改)
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> OpVisaPrice(OpVisaPriceDto dto)
+        {
+            try
+            {
+                Result groupData = await _visaPriceRep.OpVisaPrice(dto);
+                if (groupData.Code != 0)
+                {
+                    return Ok(JsonView(false, groupData.Msg));
+                }
+                return Ok(JsonView(true, groupData.Msg, groupData.Data));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, ex.Message));
+            }
+        }
+        #endregion
+
+        #region op费用录入
+        /// <summary>
+        /// 根据diid查询op费用列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> QueryCarTouristGuideGroundByDiId(CarTouristGuideGroundDto dto)
+        {
+            try
+            {
+                Result groupData = await _carTouristGuideGroundRep.QueryCarTouristGuideGroundByDiId(dto);
+                if (groupData.Code != 0)
+                {
+                    return Ok(JsonView(false, groupData.Msg));
+                }
+                return Ok(JsonView(true, groupData.Msg, groupData.Data));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, ex.Message));
+            }
+        }
+        /// <summary>
+        /// 根据op费用Id查询单条数据及c表数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> QueryCarTouristGuideGroundById(CarTouristGuideGroundIdDto dto)
+        {
+            try
+            {
+                Grp_CarTouristGuideGroundReservations groupData = await _sqlSugar.Queryable<Grp_CarTouristGuideGroundReservations>().FirstAsync(a=>a.Id==dto.Id && a.IsDel==0);
+                return Ok(JsonView(true, "查询成功!", groupData));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+            }
+        }
         #endregion
         #endregion
 
 
         #region 团组成本
         #region 团组成本
@@ -2901,7 +3141,66 @@ namespace OASystem.API.Controllers
 
 
             return Ok(jw);
             return Ok(jw);
         }
         }
+        /// <summary>
+        /// op费用删除
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> DelCarTouristGuideGround(DelBaseDto dto)
+        {
+            try
+            {
+                var res = await _carTouristGuideGroundRep.SoftDeleteByIdAsync<Grp_CarTouristGuideGroundReservations>(dto.Id.ToString(), dto.DeleteUserId);
+                if (!res)
+                {
+                    return Ok(JsonView(false, "删除失败"));
+                }
+                var result = await _sqlSugar.Updateable<Grp_CarTouristGuideGroundReservationsContent>().Where(a => a.CTGGRId == dto.Id && a.IsDel == 0).SetColumns(a => new Grp_CarTouristGuideGroundReservationsContent()
+                {
+                    IsDel = 1,
+                    DeleteUserId = dto.DeleteUserId,
+                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+                }).ExecuteCommandAsync();
+                var resultC = await _sqlSugar.Updateable<Grp_CreditCardPayment>().Where(a => a.CId == dto.Id && a.IsDel == 0 && a.CTable==79).SetColumns(a => new Grp_CreditCardPayment()
+                {
+                    IsDel = 1,
+                    DeleteUserId = dto.DeleteUserId,
+                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+                }).ExecuteCommandAsync();
+                return Ok(JsonView(true, "删除成功!"));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+        }
 
 
+        /// <summary>
+        /// op费用录入操作(Status:1.新增,2.修改)
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> OpCarTouristGuideGround(OpCarTouristGuideGroundDto dto)
+        {
+            try
+            {
+                Result groupData = await _carTouristGuideGroundRep.OpCarTouristGuideGround(dto);
+                if (groupData.Code != 0)
+                {
+                    return Ok(JsonView(false, groupData.Msg));
+                }
+                return Ok(JsonView(true, groupData.Msg, groupData.Data));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, ex.Message));
+            }
+        }
 
 
         #endregion
         #endregion
     }
     }

+ 80 - 39
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -6,6 +6,7 @@ using OASystem.Domain.Entities.PersonnelModule;
 using OASystem.Domain.ViewModels.PersonnelModule;
 using OASystem.Domain.ViewModels.PersonnelModule;
 using OASystem.Domain.ViewModels.QiYeWeChat;
 using OASystem.Domain.ViewModels.QiYeWeChat;
 using OASystem.Infrastructure.Repositories.PersonnelModule;
 using OASystem.Infrastructure.Repositories.PersonnelModule;
+using System.Collections.Generic;
 using System.Data;
 using System.Data;
 using System.Diagnostics;
 using System.Diagnostics;
 using System.Globalization;
 using System.Globalization;
@@ -45,7 +46,6 @@ namespace OASystem.API.Controllers
 
 
         #region 工资表单
         #region 工资表单
 
 
-
         /// <summary>
         /// <summary>
         /// 工资 月列表
         /// 工资 月列表
         /// </summary>
         /// </summary>
@@ -110,67 +110,85 @@ namespace OASystem.API.Controllers
             if (!startDtIsValid) return Ok(JsonView(false, "开始日期格式错误!正确时间格式:yyyy-MM-dd  "));
             if (!startDtIsValid) return Ok(JsonView(false, "开始日期格式错误!正确时间格式:yyyy-MM-dd  "));
             if (!endDtIsValid) return Ok(JsonView(false, "结束格式错误!正确时间格式:yyyy-MM-dd  "));
             if (!endDtIsValid) return Ok(JsonView(false, "结束格式错误!正确时间格式:yyyy-MM-dd  "));
 
 
-            
-
-            int res = -1;
-
             #region 处理数据
             #region 处理数据
-            Pm_WageIssueWorkingDay pm_WageIssueWorkingDay = new Pm_WageIssueWorkingDay();
-            pm_WageIssueWorkingDay = _mapper.Map<Pm_WageIssueWorkingDay>(dto);
+            Pm_WageIssueWorkingDay pm_WageIssueWorkingDay1 = new Pm_WageIssueWorkingDay();
+            pm_WageIssueWorkingDay1 = _mapper.Map<Pm_WageIssueWorkingDay>(dto);
             List<Sys_Calendar> sys_Calendars = new List<Sys_Calendar>();
             List<Sys_Calendar> sys_Calendars = new List<Sys_Calendar>();
             sys_Calendars = _mapper.Map<List<Sys_Calendar>>(dto.CalendarInfos);
             sys_Calendars = _mapper.Map<List<Sys_Calendar>>(dto.CalendarInfos);
-            pm_WageIssueWorkingDay.Workdays = sys_Calendars.Where(it => it.IsWorkDays == true).ToList().Count();
+            pm_WageIssueWorkingDay1.Workdays = sys_Calendars.Where(it => it.IsWorkDay == true).ToList().Count();
             foreach (var item in sys_Calendars)
             foreach (var item in sys_Calendars)
             {
             {
-                item.Remark = pm_WageIssueWorkingDay.Remark;
-                item.CreateUserId = pm_WageIssueWorkingDay.CreateUserId;
-                item.CreateTime = pm_WageIssueWorkingDay.CreateTime;
+                item.Remark = pm_WageIssueWorkingDay1.Remark;
+                item.CreateUserId = pm_WageIssueWorkingDay1.CreateUserId;
+                item.CreateTime = pm_WageIssueWorkingDay1.CreateTime;
             }
             }
 
 
             #endregion
             #endregion
 
 
             var _sqlSugar = _wageSheetRep._sqlSugar;
             var _sqlSugar = _wageSheetRep._sqlSugar;
-            if (dto.Status == 1)
+            _sqlSugar.BeginTran();
+            
+            try
             {
             {
-                string sql = string.Format("Select * From  Pm_WageIssueWorkingDay Where IsDel = 0 and YearMonth='{0}'",dto.YearMonth);
+                //月份表是否存在
+                Pm_WageIssueWorkingDay pm_WageIssueWorkingDay = new Pm_WageIssueWorkingDay()
+                {
+                    YearMonth = dto.YearMonth,
+                    StartDate = dto.StartDate,
+                    EndDate = dto.EndDate,
+                    Workdays = dto.CalendarInfos.Where(it => it.IsWorkDay == true).ToList().Count()
+                };
+
+                string sql = string.Format("Select * From Pm_WageIssueWorkingDay Where Isdel = 0 And YearMonth='{0}'", dto.YearMonth);
+                var workdsys = await _sqlSugar.SqlQueryable<Pm_WageIssueWorkingDay>(sql).FirstAsync();
 
 
-                var data = await _sqlSugar.SqlQueryable<WageSheetMonthView>(sql).FirstAsync();
-                if (data != null)
+                if (workdsys == null) //添加
                 {
                 {
-                    return Ok(JsonView(false, dto.YearMonth + "日期数据已存在,请前往修改!"));
-                }
+                    pm_WageIssueWorkingDay.CreateUserId = dto.UserId;
+                    pm_WageIssueWorkingDay.IsDel = 0;
 
 
-                _sqlSugar.BeginTran();
-                int add1 = await _sqlSugar.Insertable< Pm_WageIssueWorkingDay>(pm_WageIssueWorkingDay).ExecuteCommandAsync();
-                if (add1 > 0) res = 0;
-                int add2 = await _sqlSugar.Insertable<Sys_Calendar>(sys_Calendars).ExecuteCommandAsync();
-                if (add2 > 0) res = 0;
-                _sqlSugar.CommitTran();
-            }
-            else if (dto.Status == 1)
-            {
-                _sqlSugar.BeginTran();
+                    int addId = await _sqlSugar.Insertable(pm_WageIssueWorkingDay).ExecuteReturnIdentityAsync();
+                }
+                else //更新
+                {
+                    int updCount = await _sqlSugar.Updateable(pm_WageIssueWorkingDay)
+                        .IgnoreColumns(z => new { z.CreateUserId, z.CreateTime, z.DeleteUserId, z.DeleteTime, z.IsDel })
+                        .WhereColumns(it => it.Id)
+                        .ExecuteCommandAsync();
+                }
 
 
+                List<Sys_Calendar> sys_Calendars_add = new List<Sys_Calendar>();
+                List<Sys_Calendar> sys_Calendars_update = new List<Sys_Calendar>();
+                sys_Calendars_add = sys_Calendars.Where(it => it.Id == 0).ToList();
+                sys_Calendars_update = sys_Calendars.Where(it => it.Id != 0).ToList();
 
 
-                int upd1 = await _sqlSugar.Updateable< Pm_WageIssueWorkingDay >(pm_WageIssueWorkingDay)
-                    .UpdateColumns(it => new { it.YearMonth,it.StartDate,it.EndDate,it.Workdays,it.DeleteTime })
-                    .ExecuteCommandAsync();
-                if (upd1 > 0) res = 0;
-                int upd2 = await _sqlSugar.Updateable<Sys_Calendar>(sys_Calendars)
-                    .UpdateColumns(it => new { it.Dt, it.IsWorkDays, it.IsHoliDay, it.HoliDayName })
+                int add1 = 0;
+                int upd = 0;
+                if (sys_Calendars_add.Count > 0)
+                {
+                    await _sqlSugar.Insertable(sys_Calendars_add).ExecuteReturnIdentityAsync();
+                }
+                if (sys_Calendars_update.Count > 0)
+                {
+                    await _sqlSugar.Updateable<Sys_Calendar>(sys_Calendars)
+                    .UpdateColumns(it => new { it.Dt, it.IsWorkDay, it.IsHoliDay, it.HoliName })
+                    .WhereColumns(it => it.Id)
                     .ExecuteCommandAsync();
                     .ExecuteCommandAsync();
-                if (upd2 > 0) res = 0;
+                }
 
 
                 _sqlSugar.CommitTran();
                 _sqlSugar.CommitTran();
-            }
-            else return Ok(JsonView(false, "Status 请传入正确的状态码 1 添加 2 修改"));
 
 
-            if (res == 0) return Ok(JsonView(true, "操作成功!"));
 
 
+                return Ok(JsonView(true, "操作成功!"));
+            }
+            catch (Exception ex)
+            {
+                _sqlSugar.RollbackTran();
+                return Ok(JsonView(false, ex.Message));
+            }
 
 
-            return Ok(JsonView(false, "操作失败!"));
-        }
 
 
+        }
 
 
         /// <summary>
         /// <summary>
         /// 工资表单 基础数据源
         /// 工资表单 基础数据源
@@ -789,6 +807,29 @@ namespace OASystem.API.Controllers
             return Ok(JsonView(true, "操作成功!"));
             return Ok(JsonView(true, "操作成功!"));
         }
         }
 
 
+        /// <summary>
+        /// 打卡记录测试
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> Test(string startDt,string endDt) 
+        {
+            UserIdListView userIdListView = await _qiYeWeChatApiService.GetUserIdListAsync();
+            if (userIdListView.errcode != 0)
+            {
+                _result.Msg = "【企业微信】【打卡】【获取员工ID】【Msg】" + userIdListView.errmsg;
+                return Ok(JsonView(false, _result.Msg));
+            }
+
+            List<string> qyWhchatIdList = new List<string>();
+            qyWhchatIdList = userIdListView.dept_user.Select(it => it.userid).ToList();
+
+            var data = await _qiYeWeChatApiService.GetCheckinDataAsync(qyWhchatIdList,2,Convert.ToDateTime(startDt), Convert.ToDateTime(endDt));
+            return Ok(JsonView(true, "操作成功!", data.checkindata));
+        }
+
+
         #endregion
         #endregion
 
 
     }
     }

+ 1 - 1
OASystem/OASystem.Api/Controllers/SystemController.cs

@@ -74,7 +74,7 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(false, msgData.Msg));
                 return Ok(JsonView(false, msgData.Msg));
             }
             }
 
 
-            return Ok(JsonView(true, msgData.Data));
+            return Ok(JsonView(true,"成功", msgData.Data));
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 274 - 11
OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

@@ -1,5 +1,6 @@
 using Google.Protobuf.WellKnownTypes;
 using Google.Protobuf.WellKnownTypes;
 using NPOI.HPSF;
 using NPOI.HPSF;
+using NPOI.OpenXmlFormats.Dml.Diagram;
 using NPOI.OpenXmlFormats.Spreadsheet;
 using NPOI.OpenXmlFormats.Spreadsheet;
 using NPOI.SS.Formula.Functions;
 using NPOI.SS.Formula.Functions;
 using NPOI.Util;
 using NPOI.Util;
@@ -12,6 +13,7 @@ using OASystem.Infrastructure.Repositories.Groups;
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Diagnostics.Eventing.Reader;
 using System.Diagnostics.Eventing.Reader;
+using System.Drawing;
 using System.Linq.Expressions;
 using System.Linq.Expressions;
 using TencentCloud.Ocr.V20181119.Models;
 using TencentCloud.Ocr.V20181119.Models;
 
 
@@ -75,8 +77,26 @@ namespace OASystem.API.OAMethodLib
                 _result.Msg = "【企业微信】【打卡】【获取时间段内所有日打卡】【Msg】" + checkInDayDataView.errmsg;
                 _result.Msg = "【企业微信】【打卡】【获取时间段内所有日打卡】【Msg】" + checkInDayDataView.errmsg;
                 return _result;
                 return _result;
             }
             }
+
+            //获取所有打卡记录 外出
+            CheckInDataView checkInDataView = new CheckInDataView();
+            checkInDataView = await _qiYeWeChatApiService.GetCheckinDataAsync(qyWhchatIdList, 3,startDt, endDt);
+            if (checkInDataView.errcode != 0)
+            {
+                _result.Msg = "【企业微信】【打卡】【获取时间段内所有日打卡记录】【Msg】" + checkInDataView.errmsg;
+                return _result;
+            }
+
+            //查询工作日
+            List<Sys_Calendar> sys_Calendars = new List<Sys_Calendar>();
+            string sys_sql = string.Format("Select * From Sys_Calendar Where Isdel = 0 And Dt between '{0}' And '{1}'", 
+                startDt.ToString("yyyy-MM-dd"), endDt.ToString("yyyy-MM-dd"));
+            sys_Calendars = await _usersRep._sqlSugar.SqlQueryable<Sys_Calendar>(sys_sql).ToListAsync();
+
             //筛选出工作日日报
             //筛选出工作日日报
-            List<Root> workday_userRoots = checkInDayDataView.datas.Where(it => it.base_info.day_type == 0 && it.base_info.record_type == 1).ToList(); //工作日日报
+            List<Root> workday_userRoots = checkInDayDataView.datas.Where(it => it.base_info.day_type == 0 && it.base_info.record_type == 1).ToList(); 
+
+            //工作日日报
             workday_userRoots = workday_userRoots.OrderBy(it => it.base_info.date).ToList();
             workday_userRoots = workday_userRoots.OrderBy(it => it.base_info.date).ToList();
 
 
             //获取 请假类型 Sp_Detail.template_id
             //获取 请假类型 Sp_Detail.template_id
@@ -93,7 +113,7 @@ namespace OASystem.API.OAMethodLib
                 foreach (var pm_wsInfo in pm_WageSheetDattaSources)
                 foreach (var pm_wsInfo in pm_WageSheetDattaSources)
                 {
                 {
                     string itemName = userNames.Where(it => it.Id == pm_wsInfo.UserId).FirstOrDefault().CnName;
                     string itemName = userNames.Where(it => it.Id == pm_wsInfo.UserId).FirstOrDefault().CnName;
-
+                    
 
 
                     //补贴 金额
                     //补贴 金额
                     decimal meal_subsidy = 0.00M;  // 午餐(午餐10元/天)  补贴 * 计算方式:单日上午请假时长(小时)大于或者等于三小时 没有餐补
                     decimal meal_subsidy = 0.00M;  // 午餐(午餐10元/天)  补贴 * 计算方式:单日上午请假时长(小时)大于或者等于三小时 没有餐补
@@ -135,6 +155,7 @@ namespace OASystem.API.OAMethodLib
                     List<Ex_Items> ex_Items = new List<Ex_Items>();//假勤 And 打卡备注集合
                     List<Ex_Items> ex_Items = new List<Ex_Items>();//假勤 And 打卡备注集合
                     Ex_Items ex_Items_dk = new Ex_Items() { Type = "打卡" };    //打卡
                     Ex_Items ex_Items_dk = new Ex_Items() { Type = "打卡" };    //打卡
                     Ex_Items ex_Items_jq = new Ex_Items() { Type = "假勤" };   //假勤
                     Ex_Items ex_Items_jq = new Ex_Items() { Type = "假勤" };   //假勤
+                    Ex_Items ex_Items_cc = new Ex_Items() { Type = "出差" };   //出差
                     #endregion
                     #endregion
 
 
 
 
@@ -152,7 +173,6 @@ namespace OASystem.API.OAMethodLib
                     //userRoots = userRoots.Distinct().ToList();
                     //userRoots = userRoots.Distinct().ToList();
                     userRoots = userRoots.OrderBy(it => it.base_info.date).ToList();
                     userRoots = userRoots.OrderBy(it => it.base_info.date).ToList();
 
 
-
                     int dk_work_days = userRoots.Count;   //应出勤天数 
                     int dk_work_days = userRoots.Count;   //应出勤天数 
 
 
                     if (dk_work_days > work_days)
                     if (dk_work_days > work_days)
@@ -176,12 +196,23 @@ namespace OASystem.API.OAMethodLib
 
 
                         int user_probationary_bk_num = 0; 
                         int user_probationary_bk_num = 0; 
                                                           
                                                           
-                                                          
                         decimal user_probationary_bk_decimal = pm_wsInfo.Floats; //绩效工资为0 则为试用员工
                         decimal user_probationary_bk_decimal = pm_wsInfo.Floats; //绩效工资为0 则为试用员工
 
 
+                        //处理外出打卡记录
+                        List<CheckInDataInfo> checkInData1 = new List<CheckInDataInfo>();
+                        checkInData1 = checkInDataView.checkindata;
+                        List<CheckInDataInfo> checkInDatas = new List<CheckInDataInfo>();
+                        checkInDatas = checkInData1.Where(it => it.userid == acctid).ToList();
+                        //找出外出的打卡记录
+                        List<CheckInDataInfo> checkInData2 = new List<CheckInDataInfo>();
+                        checkInData2 = checkInDatas.Where(it => it.exception_type.Equals("未打卡")).ToList();
+                        
+
+
                         #region 迟到 早退 旷工
                         #region 迟到 早退 旷工
 
 
                         int user_cd_zt_num = 0; //早退/迟到 次数 10分钟内 2次以内不记处罚 三次及以上50一次
                         int user_cd_zt_num = 0; //早退/迟到 次数 10分钟内 2次以内不记处罚 三次及以上50一次
+
                         foreach (var root in userRoots)
                         foreach (var root in userRoots)
                         {
                         {
                             List<Holiday_infos> holiday_Infos = root.holiday_infos; //当天假勤信息
                             List<Holiday_infos> holiday_Infos = root.holiday_infos; //当天假勤信息
@@ -413,10 +444,14 @@ namespace OASystem.API.OAMethodLib
                         #region 假勤/补卡次数 审批
                         #region 假勤/补卡次数 审批
 
 
                         int leaveNum = 0; //请假次数
                         int leaveNum = 0; //请假次数
-                        int reissuecardNum = 0; //补卡次数\
+                        int reissuecardNum = 0; //补卡次数
+                        int evectionNum = 0; //出差次数
                         //类型:1 - 请假;2 - 补卡;3 - 出差;4 - 外出;100 - 外勤
                         //类型:1 - 请假;2 - 补卡;3 - 出差;4 - 外出;100 - 外勤
                         leaveNum = acc_sp_items.Where(it => it.type == 1).ToList().Count();
                         leaveNum = acc_sp_items.Where(it => it.type == 1).ToList().Count();
                         reissuecardNum = acc_sp_items.Where(it => it.type == 2).ToList().Count();
                         reissuecardNum = acc_sp_items.Where(it => it.type == 2).ToList().Count();
+                        List<Sp_items> acc_sp_items_evection = new List<Sp_items>();
+                        acc_sp_items_evection = acc_sp_items.Where(it => it.type == 3).ToList();
+                        evectionNum = acc_sp_items_evection.Count();
 
 
                         //请假审批
                         //请假审批
                         if (leaveNum > 0)
                         if (leaveNum > 0)
@@ -480,8 +515,18 @@ namespace OASystem.API.OAMethodLib
                                             unit = "天";
                                             unit = "天";
                                             startTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " 09:00";
                                             startTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " 09:00";
                                             endTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " 18:00";
                                             endTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " 18:00";
-                                            startTime1 = "09:00:00";
-                                            endTime1 = "18:00:00";
+                                            if (new_duration == 1)
+                                            {
+                                                startTime1 = "09:00:00";
+                                                endTime1 = "18:00:00";
+                                            }
+                                            else
+                                            {
+                                                startTime1 = date_Range.new_begin_dt.ToString("HH:mm:ss");
+                                                endTime1 = date_Range.new_end_dt.ToString("HH:mm:ss");
+                                            }
+
+                                            
                                         }
                                         }
                                         else if (date_Range.type == "hour")
                                         else if (date_Range.type == "hour")
                                         {
                                         {
@@ -629,6 +674,87 @@ namespace OASystem.API.OAMethodLib
                                     }
                                     }
                                 }
                                 }
                             }
                             }
+
+                            //外出审批 已通过的数据 且 外出未打卡
+                            List<Sp_Detail> sp_goout_details = new List<Sp_Detail>();
+                            sp_goout_details = await _qiYeWeChatApiService.GetApprovalDetailsAsync(startDt, endDt, acctid, 2, 4); //时间段内所有 已同意的 外出 审批数据
+                            if (sp_goout_details.Count > 0)
+                            {
+                                //找出外出的具体日期
+                                List<string> goOutDts = new List<string>();
+                                foreach (var goOutItem in sp_goout_details)
+                                {
+                                    Apply_data? apply_data = goOutItem.apply_data;
+                                    if (apply_data != null)
+                                    {
+                                        List<ContentsItem> contents = apply_data.contents;
+                                        ContentsItem content_Vacation = contents.Where(it => it.control == "Attendance").FirstOrDefault();  //请假类型 
+                                        ContentsItem content_Textarea = contents.Where(it => it.control == "Textarea").FirstOrDefault();    //多行文本 
+
+                                        if (content_Vacation != null)
+                                        {
+                                            var attendance = content_Vacation.value.attendance;
+
+                                            DateTime goOutDt = attendance.date_range.new_begin_dt;
+                                            DateTime goOutDtJudge = Convert.ToDateTime(goOutDt.ToString("yyyy-MM-dd"));
+                                            //筛选 不在工作日内的假勤申请
+                                            if (startDt >= goOutDtJudge || goOutDtJudge > endDt)
+                                            {
+                                                continue;
+                                            }
+                                            goOutDts.Add(goOutDt.ToString("yyyy-MM-dd"));
+                                        }
+                                    }
+                                }
+
+                                //处理日期范围内的数据
+                                List<CheckInDataInfo> filtratePrefix_checkInData = new List<CheckInDataInfo>();
+                                if (goOutDts.Count > 0)
+                                {
+                                    foreach (var goOutDtItem in goOutDts)
+                                    {
+                                        List<CheckInDataInfo> filtrate_checkInData = new List<CheckInDataInfo>();
+                                        filtrate_checkInData = checkInData2.Where(it => it.checkin_time_dt.ToString("yyyy-MM-dd").Equals(goOutDtItem)).ToList();
+                                        if (filtrate_checkInData.Count > 0)
+                                        {
+                                            filtratePrefix_checkInData.AddRange(filtrate_checkInData);
+                                        }
+                                    }
+                                }
+
+
+                                //打卡记录里抓取的未打卡数据
+                                foreach (var item in filtratePrefix_checkInData)
+                                {
+                                    decimal bukaPrice = 0.00M;
+
+                                    if (user_probationary_bk_decimal == 0) //计算试用员工补卡次数
+                                    {
+                                        if (bukaNum <= 2) bukaPrice = 0.00M;
+                                        else if (bukaNum <= 4 && bukaNum > 2) bukaPrice = 10.00M;
+                                        else bukaPrice = 50.00M;
+
+                                    }
+                                    else   //计算正式员工补卡次数
+                                    {
+                                        if (bukaNum <= 2) bukaPrice = 10.00M;
+                                        else bukaPrice = 50.00M;
+                                    }
+
+                                    Ex_Item ex_reissueCard = new Ex_Item()
+                                    {
+                                        SubTypeId = 7,
+                                        SubType = "打卡补卡",
+                                        StartTimeDt = Convert.ToDateTime(item.checkin_time_dt.ToString("yyyy-MM-dd HH:mm:ss")),  //未打卡时间
+                                        Deduction = bukaPrice,
+                                        Reason = "[打卡记录]抓取到的未打卡数据!",
+                                        Unit = string.Empty
+                                    };
+                                    unprinted_deduction += bukaPrice;
+                                    ex_reissuecard_Items.Add(ex_reissueCard);
+                                    bukaNum++;
+                                }
+                            }
                         }
                         }
 
 
                         if (ex_reissuecard_Items.Count > 0)
                         if (ex_reissuecard_Items.Count > 0)
@@ -638,6 +764,143 @@ namespace OASystem.API.OAMethodLib
                             ex_Items.Add(ex_Items_dk);
                             ex_Items.Add(ex_Items_dk);
                         }
                         }
 
 
+                        //出差申请
+                        if (evectionNum > 0)
+                        {
+                            List<Sp_Detail> sp_leave_details = new List<Sp_Detail>();
+                            sp_leave_details = await _qiYeWeChatApiService.GetApprovalDetailsAsync(startDt, endDt, acctid, 2, 3); //时间段内所有 已同意的 出差 审批数据
+                            if (sp_leave_details.Count <= 0)
+                            {
+                                _result.Msg += startDt + " - " + endDt + "  " + itemName + "  请假 审批数据获取未获取到!\r\n";
+                                //continue;
+                            }
+                            List<Ex_Item> cc_ex_ItemInfos = new List<Ex_Item>();
+
+                            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 == "Attendance").FirstOrDefault();  //出差类型 
+                                    ContentsItem content_Textarea = contents.Where(it => it.control == "Textarea").FirstOrDefault(); //多行文本 
+
+                                    if (content_Vacation != null)
+                                    {
+                                        //Vacation vacation = content_Vacation.value.vacation;
+                                        Attendance attendance = content_Vacation.value.attendance; //假勤组件
+                                        //Selector selector = vacation.selector;       //请假类型
+
+                                        //List<OptionsItem> optionsItems = selector.options; //key 请假类型 id
+                                        //List<TitleItem> value = optionsItems[0].value; // value 文本描述值
+
+                                        int leaveType = int.Parse("3");  //key 请假子类型 id
+                                        Date_range date_Range = attendance.date_range;
+
+                                        //筛选 不在工作日内的假勤申请
+                                        if (startDt >= date_Range.new_begin_dt || Convert.ToDateTime(date_Range.new_end_dt.ToString("yyyy-MM-dd")) > endDt)
+                                        {
+                                            continue;
+                                        }
+
+                                        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;
+                                        string unit = string.Empty;
+                                        int leaveTypeId = leaveType;
+                                        typeName = "出差";
+
+                                        string startTime = string.Empty;
+                                        string endTime = string.Empty;
+                                        string startTime1 = string.Empty;
+                                        string endTime1 = string.Empty;
+                                        //计算请假类型扣款金额
+                                        decimal new_duration = 0.00M;
+                                        if (date_Range.type == "halfday")
+                                        {
+                                            new_duration = Convert.ToDecimal(date_Range.new_duration) / 86400.00M;
+                                            unit = "天";
+                                            startTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " 09:00";
+                                            endTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " 18:00";
+                                            startTime1 = "09:00:00";
+                                            endTime1 = "18:00:00";
+                                        }
+                                        else if (date_Range.type == "hour")
+                                        {
+                                            new_duration = Convert.ToDecimal(date_Range.new_duration) / 3600.00M;
+                                            unit = "小时";
+                                            startTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd HH:mm:ss");
+                                            endTime = date_Range.new_end_dt.ToString("yyyy-MM-dd HH:mm:ss");
+                                            startTime1 = date_Range.new_begin_dt.ToString("HH:mm:ss");
+                                            endTime1 = date_Range.new_end_dt.ToString("HH:mm:ss");
+                                        }
+
+                                        //出差扣款
+                                        decimal cckk = 0.00M;
+
+                                        int days = (int)(date_Range.new_end_dt - date_Range.new_begin_dt).TotalDays;
+                                        for (int i = 0; i <= days; i++)
+                                        {
+                                            DateTime thisDt = date_Range.new_begin_dt.AddDays(i);
+                                            if (thisDt > date_Range.new_end_dt)
+                                            {
+                                                continue;
+                                            }
+
+                                            Sys_Calendar sys_Calendar = new Sys_Calendar();
+                                            sys_Calendar = sys_Calendars.Where(it => it.Dt == thisDt.ToString("yyyy-MM-dd")).FirstOrDefault();
+                                            if (sys_Calendar != null) {
+                                                if (sys_Calendar.IsWorkDay)
+                                                {
+                                                    cckk += 10.00M;
+                                                }
+                                            }
+                                        }
+
+
+                                        meal_deduction += cckk;
+
+
+                                        Ex_Item ex_Item = new Ex_Item()
+                                        {
+                                            SubTypeId = leaveType,
+                                            SubType = typeName,
+                                            StartTimeDt = Convert.ToDateTime(date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " " + startTime1),
+                                            EndTimeDt = Convert.ToDateTime(date_Range.new_end_dt.ToString("yyyy-MM-dd") + " " + endTime1),
+                                            Duration = new_duration,
+                                            Unit = unit,
+                                            Deduction = 0.00M,
+                                            //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,
+                                        };
+
+                                        cc_ex_ItemInfos.Add(ex_Item);
+
+                                    }
+                                }
+                            }
+
+                            if (cc_ex_ItemInfos.Count > 0)
+                            {
+                                //ex_Items_cc.Ex_ItemInfo = cc_ex_ItemInfos.OrderBy(it => it.StartTimeDt).ThenBy(it => it.Apply_time_dt).ToList();
+                                //ex_Items.Add(ex_Items_cc);
+                                List<Ex_Item> ex_jq_Items = new List<Ex_Item>();
+                                ex_jq_Items = (List<Ex_Item>)ex_Items_jq.Ex_ItemInfo;
+                                ex_jq_Items.AddRange(cc_ex_ItemInfos);
+                                ex_Items.Remove(ex_Items_jq);
+                                ex_Items.Add(
+                                    new Ex_Items()
+                                    {
+                                        Type = "假勤",
+                                        Ex_ItemInfo = ex_jq_Items.OrderBy(it => it.StartTimeDt).ThenBy(it => it.Apply_time_dt).ToList()
+                                    }
+                                    );
+                            }
+                        }
+
+
                         #endregion
                         #endregion
 
 
                     }
                     }
@@ -693,10 +956,10 @@ namespace OASystem.API.OAMethodLib
                     pm_wsInfo.Ex_ItemsRemark = JsonConvert.SerializeObject(ex_Items);  //
                     pm_wsInfo.Ex_ItemsRemark = JsonConvert.SerializeObject(ex_Items);  //
                     pm_wsInfo.Mealsupplement = mealTotal;          //餐补
                     pm_wsInfo.Mealsupplement = mealTotal;          //餐补
 
 
-                    pm_wsInfo.Should = salaryTotal;               //应发合计
-                    pm_wsInfo.TotalDeductions = eductionTotal;    //扣款合计
-                    pm_wsInfo.TotalRealHair = actualReleaseTotal - pm_wsInfo.WithholdingTax; //实发合计
-                    pm_wsInfo.AfterTax = actualReleaseTotal - pm_wsInfo.WithholdingTax; //税后工资
+                    pm_wsInfo.Should = ConvertToDecimal( salaryTotal);               //应发合计
+                    pm_wsInfo.TotalDeductions = ConvertToDecimal(eductionTotal);    //扣款合计
+                    pm_wsInfo.TotalRealHair = ConvertToDecimal(actualReleaseTotal - pm_wsInfo.WithholdingTax); //实发合计
+                    pm_wsInfo.AfterTax = ConvertToDecimal(actualReleaseTotal - pm_wsInfo.WithholdingTax); //税后工资
 
 
                     pm_wsInfo.LastUpdateUserId = userId;
                     pm_wsInfo.LastUpdateUserId = userId;
                     pm_wsInfo.LastUpdateDt = DateTime.Now;
                     pm_wsInfo.LastUpdateDt = DateTime.Now;

+ 6 - 9
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/QiYeWeChatApiService.cs

@@ -608,16 +608,16 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
             string url = string.Format("/cgi-bin/checkin/getcheckindata?access_token={0}", access_Token.access_token);
             string url = string.Format("/cgi-bin/checkin/getcheckindata?access_token={0}", access_Token.access_token);
 
 
             DateTime centerDt = startDt.AddDays(30);
             DateTime centerDt = startDt.AddDays(30);
+
             long startTs = (long)(startDt - _1970).TotalSeconds;
             long startTs = (long)(startDt - _1970).TotalSeconds;
             long centerTs = (long)(centerDt - _1970).TotalSeconds;
             long centerTs = (long)(centerDt - _1970).TotalSeconds;
             long endTs = (long)(endDt - _1970).TotalSeconds;
             long endTs = (long)(endDt - _1970).TotalSeconds;
-
             CheckInData_Request checkInData_Req = new CheckInData_Request()
             CheckInData_Request checkInData_Req = new CheckInData_Request()
             {
             {
                 access_token = access_Token.access_token,
                 access_token = access_Token.access_token,
-                opencheckindatatype = opencheckindatatype, 
+                opencheckindatatype = opencheckindatatype,
                 useridlist = useridlist,
                 useridlist = useridlist,
-                starttime = startTs, 
+                starttime = startTs,
                 endtime = centerTs
                 endtime = centerTs
             };
             };
 
 
@@ -629,11 +629,8 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
             checkInDataView = System.Text.Json.JsonSerializer.Deserialize<CheckInDataView>(stringResponse,
             checkInDataView = System.Text.Json.JsonSerializer.Deserialize<CheckInDataView>(stringResponse,
                 new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
                 new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
 
 
-            if (checkInDataView.errcode != 0)
-            {
-                return checkInDataView;
-            }
-            if (centerTs != endTs)
+
+            if (centerDt < endDt)
             {
             {
                 checkInData_Req.starttime = centerTs;
                 checkInData_Req.starttime = centerTs;
                 checkInData_Req.endtime = endTs;
                 checkInData_Req.endtime = endTs;
@@ -645,7 +642,7 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
 
 
                 CheckInDataView checkInDataView1 = System.Text.Json.JsonSerializer.Deserialize<CheckInDataView>(stringResponse1,
                 CheckInDataView checkInDataView1 = System.Text.Json.JsonSerializer.Deserialize<CheckInDataView>(stringResponse1,
                     new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
                     new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
-                if (checkInDataView1.errcode !=  0)
+                if (checkInDataView1.errcode != 0)
                 {
                 {
                     return checkInDataView1;
                     return checkInDataView1;
                 }
                 }

+ 9 - 0
OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs

@@ -118,6 +118,15 @@ namespace OASystem.Domain.AutoMappers
             CreateMap<NationalTravelFeeOperateDto, Grp_NationalTravelFee>();
             CreateMap<NationalTravelFeeOperateDto, Grp_NationalTravelFee>();
             #endregion
             #endregion
 
 
+            #region 签证费用录入
+            CreateMap<OpVisaPriceDto, Grp_VisaInfo>();
+            CreateMap<OpVisaPriceDto, Grp_CreditCardPayment>();
+            #endregion
+
+
+            #region op费用
+            CreateMap<OpCarTouristGuideGroundDto, Grp_CarTouristGuideGroundReservations>();
+            #endregion
             #region 成本
             #region 成本
             CreateMap<Grp_GroupCostDto, Grp_GroupCost>();
             CreateMap<Grp_GroupCostDto, Grp_GroupCost>();
             CreateMap<Grp_CheckBoxsDto, Grp_CheckBoxs>();
             CreateMap<Grp_CheckBoxsDto, Grp_CheckBoxs>();

+ 121 - 0
OASystem/OASystem.Domain/Dtos/Financial/ForForeignReceivablesNewDto.cs

@@ -0,0 +1,121 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Financial
+{
+    /// <summary>
+    /// 财务模块
+    /// 对外收款
+    /// </summary>
+    public class ForForeignReceivablesNewDto : PortDtoBase
+    {
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        public int DiId { get; set; }
+    }
+
+    /// <summary>
+    /// 财务模块
+    /// 收款账单
+    /// Add or Update Info
+    /// </summary>
+    public class ForeignReceivablesSaveDto : PortDtoBase
+    {
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        public int DiId { get; set; }
+
+        /// <summary>
+        /// 用户Id
+        /// </summary>
+        public int UserId { get; set; }
+
+        /// <summary>
+        /// 财务模块
+        /// Add or Update Info
+        /// </summary>
+        public List<ForeignReceivablesInfoNew>? foreignReceivablesInfos { get; set; }
+    }
+
+    /// <summary>
+    /// 财务模块
+    /// Add or Update Info
+    /// </summary>
+    public class ForeignReceivablesInfoNew
+    {
+        /// <summary>
+        /// 主键编号
+        /// id=0 时添加
+        /// 其他值时 修改
+        /// </summary>
+        public int Id { get; set; }
+        /// <summary>
+        /// 费用名称
+        /// </summary>
+        public string? PriceName { get; set; }
+
+        /// <summary>
+        /// 费用
+        /// </summary>
+        public decimal Price { get; set; }
+
+        /// <summary>
+        /// 数量
+        /// </summary>
+        public int Count { get; set; }
+
+        /// <summary>
+        /// 单位
+        /// </summary>
+        public string? Unit { get; set; }
+
+        /// <summary>
+        /// 单项总和
+        /// </summary>
+        public decimal ItemSumPrice { get; set; }
+
+        /// <summary>
+        /// 汇率
+        /// </summary>
+        public decimal Rate { get; set; }
+
+        /// <summary>
+        /// 币种
+        /// </summary>
+        public int Currency { get; set; }
+
+        /// <summary>
+        /// 添加方式   
+        /// 0 - 账单页面添加   1 - 预算成本页面添加
+        /// </summary>
+        public int AddingWay { get; set; }
+
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string? Remark { get; set; }
+    }
+
+
+    /// <summary>
+    /// 财务模块
+    /// 收款账单
+    /// Del
+    /// </summary>
+    public class ForeignReceivablesDelDto : PortDtoBase
+    {
+        /// <summary>
+        /// 用户Id
+        /// </summary>
+        public int UserId { get; set; }
+
+
+        public int Id { get; set; }
+
+    }
+}

+ 103 - 0
OASystem/OASystem.Domain/Dtos/Groups/CarTouristGuideGroundDto.cs

@@ -0,0 +1,103 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Groups
+{
+    /// <summary>
+    /// Op费用根据diid查询列表
+    /// </summary>
+    public class CarTouristGuideGroundDto: DtoBase
+    {
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        public int DiId { get; set; }
+    }
+    /// <summary>
+    /// 根据id查询单挑数据
+    /// </summary>
+    public class CarTouristGuideGroundIdDto
+    {
+        public int Id { get; set; }
+    }
+    /// <summary>
+    /// op费用新增、修改
+    /// </summary>
+    public class OpCarTouristGuideGroundDto
+    {
+        /// <summary>
+        /// 操作状态
+        /// 1 添加 
+        /// 2 修改 
+        /// </summary>
+        public int Status { get; set; }
+        /// <summary>
+        /// 编号
+        /// </summary>
+        public int Id { get; set; }
+        /// <summary>
+        /// 团组外键编号
+        /// </summary>
+        public int DiId { get; set; }
+        /// <summary>
+        /// 地接地区
+        /// </summary>
+        public string Area { get; set; }
+        /// <summary>
+        /// 服务公司
+        /// </summary>
+        public string ServiceCompany { get; set; }
+        /// <summary>
+        /// 服务导游
+        /// </summary>
+        public string ServiceGuide { get; set; }
+        /// <summary>
+        /// 导游地接联系电话
+        /// </summary>
+        public string ServiceTel { get; set; }
+        /// <summary>
+        /// Bus名称
+        /// </summary>
+        public string BusName { get; set; }
+        /// <summary>
+        /// Bus描述
+        /// </summary>
+        public string BusDescription { get; set; }
+        /// <summary>
+        /// 车公司联系电话
+        /// </summary>
+        public string BusTel { get; set; }
+
+        /// <summary>
+        /// 服务时间起
+        /// </summary>
+        public string ServiceStartTime { get; set; }
+        /// <summary>
+        /// 服务时间止
+        /// </summary>
+        public string ServiceEndTime { get; set; }
+        /// <summary>
+        /// 服务描述
+        /// </summary>
+        public string ServiceDescription { get; set; }
+        /// <summary>
+        /// 报价说明
+        /// </summary>
+        public string QuotedPriceExplanation { get; set; }
+        /// <summary>
+        /// 公转私转标识
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+        /// <summary>
+        /// 创建者Id
+        /// </summary>
+        public int CreateUserId { get; set; }
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string Remark { get; set; }
+    }
+}

+ 18 - 0
OASystem/OASystem.Domain/Dtos/Groups/EnterExitCostDto.cs

@@ -234,6 +234,24 @@ namespace OASystem.Domain.Dtos.Groups
         public string City { get; set; }
         public string City { get; set; }
     }
     }
 
 
+    /// <summary>
+    /// 团组模块 - 出入境国家费用标准 
+    /// 根据国家城市查询Dto
+    /// </summary>
+    public class NationalTravelFeeByCountryAndCityDto : PortDtoBase
+    {
+        /// <summary>
+        /// 国家
+        /// </summary>
+        public string Country { get; set; }
+
+        /// <summary>
+        /// 城市
+        /// </summary>
+        public string City { get; set; }
+
+    }
+
     /// <summary>
     /// <summary>
     /// 出入境费用子项删除
     /// 出入境费用子项删除
     /// </summary>
     /// </summary>

+ 1 - 1
OASystem/OASystem.Domain/Dtos/Groups/GroupListDto.cs

@@ -220,7 +220,7 @@ namespace OASystem.Domain.Dtos.Groups
     /// <summary>
     /// <summary>
     /// 确认出团dto
     /// 确认出团dto
     /// </summary>
     /// </summary>
-    public class ConfirmationGroupDto:DtoBase 
+    public class ConfirmationGroupDto:PortDtoBase 
     {
     {
         /// <summary>
         /// <summary>
         /// 团组Id
         /// 团组Id

+ 142 - 0
OASystem/OASystem.Domain/Dtos/Groups/VisaPriceDto.cs

@@ -0,0 +1,142 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Groups
+{
+    /// <summary>
+    /// 根据团组id查询签证费用列表
+    /// </summary>
+    public class VisaPriceDto
+    {
+        public int PageIndex { get; set; } = 1;
+        public int PageSize { get; set; } = 10;
+        public int PortType { get; set; } = 1;
+        public int DiID { get; set; }
+        /// <summary>
+        /// 客户名称
+        /// </summary>
+        public String VisaClient { get; set; }
+    }
+    public class PostVisaByIdDto 
+    {
+        public int Id { get; set; }
+    }
+    /// <summary>
+    /// 签证费用修改添加dto
+    /// </summary>
+    public class OpVisaPriceDto
+    {
+        /// <summary>
+        /// 操作状态
+        /// 1 添加 
+        /// 2 修改 
+        /// </summary>
+        public int Status { get; set; }
+        /// <summary>
+        /// 主键Id
+        /// </summary>
+        public int Id { get; set; }
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        public int DiId { get; set; }
+        /// <summary>
+        /// 签证客户
+        /// </summary>
+        public string VisaClient { get; set; }
+        /// <summary>
+        /// 签证费用
+        /// </summary>
+        public decimal VisaPrice { get; set; }
+        /// <summary>
+        /// 币种
+        /// </summary>
+        public int VisaCurrency { get; set; }
+        /// <summary>
+        /// 是否第三方代办
+        /// </summary>
+        public int IsThird { get; set; }
+        /// <summary>
+        /// 签证人员类型
+        /// </summary>
+        public int PassengerType { get; set; }
+        /// <summary>
+        /// 办理签证人数
+        /// </summary>
+        public int VisaNumber { get; set; }
+        /// <summary>
+        /// 免签人数
+        /// </summary>
+        public int VisaFreeNumber { get; set; }
+
+        /// <summary>
+        /// 创建者Id
+        /// </summary>
+        public int CreateUserId { get; set; }
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string Remark { get; set; }
+
+
+        //c表dto参数
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public int PayDId { get; set; }
+        /// <summary>
+        /// 消费方式
+        /// </summary>
+        public string ConsumptionPatterns { get; set; }
+        /// <summary>
+        /// 消费日期
+        /// </summary>
+        public String ConsumptionDate { get; set; }
+        /// <summary>
+        /// 卡类型
+        /// </summary>
+        public int CTDId { get; set; }
+
+        /// <summary>
+        /// 公司银行卡号
+        /// </summary>
+        public string CompanyBankNo { get; set; }
+        /// <summary>
+        /// 对方开户行
+        /// </summary>
+        public string OtherBankName { get; set; }
+        /// <summary>
+        /// 对方银行账号
+        /// </summary>
+        public string OtherSideNo { get; set; }
+        /// <summary>
+        /// 对方姓名
+        /// </summary>
+        public string OtherSideName { get; set; }
+
+        /// <summary>
+        /// 银行卡号
+        /// </summary>
+        public string BankNo { get; set; }
+        /// <summary>
+        /// 持卡人姓名
+        /// </summary>
+        public string CardholderName { get; set; }
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string Payee { get; set; }
+        /// <summary>
+        /// 费用标识
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// C表备注
+        /// </summary>
+        public string CRemark { get; set; }
+    }
+}

+ 8 - 1
OASystem/OASystem.Domain/Dtos/PersonnelModule/WageSheetMonthWorkdaysDto.cs

@@ -17,8 +17,15 @@ namespace OASystem.Domain.Dtos.PersonnelModule
     /// <summary>
     /// <summary>
     /// 添加 Or 修改
     /// 添加 Or 修改
     /// </summary>
     /// </summary>
-    public class WageSheetMonthWorkdaysAddOrEditDto : OpBaseDto
+    public class WageSheetMonthWorkdaysAddOrEditDto 
     {
     {
+        public int UserId { get; set; }
+
+        /// <summary>
+        /// 月份Id 
+        /// </summary>
+        public int Id { get; set; }
+
         /// <summary>
         /// <summary>
         /// 年月
         /// 年月
         /// </summary>
         /// </summary>

+ 4 - 0
OASystem/OASystem.Domain/Dtos/Resource/LocalGuideDataDto.cs

@@ -139,6 +139,10 @@ namespace OASystem.Domain.Dtos.Resource
         /// 备注
         /// 备注
         /// </summary>
         /// </summary>
         public string Remark { get; set; }
         public string Remark { get; set; }
+        /// <summary>
+        /// 导游地接的类型:0公司1私人
+        /// </summary>
+        public int StaffType { get; set; }
     }
     }
 
 
     /// <summary>
     /// <summary>

+ 4 - 1
OASystem/OASystem.Domain/Entities/EntityBase.cs

@@ -1,4 +1,6 @@
-namespace OASystem.Domain.Entities
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace OASystem.Domain.Entities
 {
 {
     /// <summary>
     /// <summary>
     /// 实体基类
     /// 实体基类
@@ -9,6 +11,7 @@
         /// 编号
         /// 编号
         /// </summary>
         /// </summary>
         [SugarColumn(ColumnDescription = "主键", IsPrimaryKey = true, IsIdentity = true, IsNullable = false)]
         [SugarColumn(ColumnDescription = "主键", IsPrimaryKey = true, IsIdentity = true, IsNullable = false)]
+        //[DatabaseGenerated(DatabaseGeneratedOption.None)]
         public int Id { get; set; }
         public int Id { get; set; }
         /// <summary>
         /// <summary>
         /// 创建者Id
         /// 创建者Id

+ 102 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_CarTouristGuideGroundReservations.cs

@@ -0,0 +1,102 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Groups
+{
+    /// <summary>
+    /// 车/导游地接预订费用表
+    /// </summary>
+    [SugarTable("Grp_CarTouristGuideGroundReservations")]
+    public class Grp_CarTouristGuideGroundReservations : EntityBase
+    {
+        /// <summary>
+        /// 团组外键编号
+        /// </summary>
+        [SugarColumn(IsNullable =true,ColumnDataType ="int")]
+        public int DiId { get; set; }
+
+        /// <summary>
+        /// 地接地区
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string Area { get; set; }
+
+        /// <summary>
+        /// 服务公司
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string ServiceCompany { get; set; }
+
+        /// <summary>
+        /// 服务导游
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string ServiceGuide { get; set; }
+
+        /// <summary>
+        /// 导游地接联系电话
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(30)")]
+        public string ServiceTel { get; set; }
+
+        /// <summary>
+        /// Bus名称
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string BusName { get; set; }
+
+        /// <summary>
+        /// Bus描述
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
+        public string BusDescription { get; set; }
+
+        /// <summary>
+        /// 车公司联系电话
+        /// </summary>
+        /// 
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(30)")]
+        public string BusTel { get; set; }
+
+        /// <summary>
+        /// 服务时间起
+        /// </summary>
+        /// 
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(80)")]
+        public string ServiceStartTime { get; set; }
+        /// <summary>
+        /// 服务时间止
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(80)")]
+        public string ServiceEndTime { get; set; }
+        /// <summary>
+        /// 服务描述
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
+        public string ServiceDescription { get; set; }
+        /// <summary>
+        /// 服务报价
+        /// </summary>
+        /// 
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(18,2)")]
+        public decimal ServiceQuotedPrice { get; set; }
+        /// <summary>
+        /// 币种(设置数据外键编号)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int CId { get; set; }
+        /// <summary>
+        /// 报价说明
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
+        public string QuotedPriceExplanation { get; set; }
+        /// <summary>
+        /// 公转私转标识
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int OrbitalPrivateTransfer{get;set; }
+    }
+}

+ 46 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_CarTouristGuideGroundReservationsContent.cs

@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Groups
+{
+    /// <summary>
+    /// 车/导游地接预订详细类
+    /// </summary>
+    public class Grp_CarTouristGuideGroundReservationsContent:EntityBase
+    {
+        /// <summary>
+        /// 团组外键编号
+        /// </summary>
+        [SugarColumn(IsNullable =true,ColumnDataType ="int")]
+        public int DiId { get; set; }
+
+        /// <summary>
+        /// 车/导游地接预订外键编号
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int CTGGRId { get; set; }
+        /// <summary>
+        /// 费用项目明细
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int SId { get; set; }
+        /// <summary>
+        /// 金额
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(18,2)")]
+        public decimal Price { get; set; }
+        /// <summary>
+        /// 费用明细
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
+        public string PriceContent { get; set; }
+        /// <summary>
+        /// 币种
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int Currency { get; set; }
+    }
+}

+ 3 - 3
OASystem/OASystem.Domain/Entities/Groups/Grp_Ommission.cs

@@ -26,12 +26,12 @@ namespace OASystem.Domain.Entities.Groups
         /// <summary>
         /// <summary>
         /// 团组结束时间,即团组最后一天
         /// 团组结束时间,即团组最后一天
         /// </summary>
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
         public string GroupDate { get; set; }
         public string GroupDate { get; set; }
         /// <summary>
         /// <summary>
         /// 团组级别
         /// 团组级别
         /// </summary>
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
         public string GroupLvl { get; set; }
         public string GroupLvl { get; set; }
         /// <summary>
         /// <summary>
         /// 提成明细
         /// 提成明细
@@ -46,7 +46,7 @@ namespace OASystem.Domain.Entities.Groups
         /// <summary>
         /// <summary>
         /// 提成发放至工资的月份
         /// 提成发放至工资的月份
         /// </summary>
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(18,2)")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
         public string WageYearMonth { get; set; }
         public string WageYearMonth { get; set; }
         /// <summary>
         /// <summary>
         /// 造成损失标识
         /// 造成损失标识

+ 54 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_VisaInfo.cs

@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Groups
+{
+    [SugarTable("Grp_VisaInfo")]
+    public class Grp_VisaInfo:EntityBase
+    {
+
+        /// <summary>
+        /// 团组外键编号
+        /// </summary>
+        [SugarColumn(IsNullable =true,ColumnDataType ="int")]
+        public int DIId { get; set; }
+        /// <summary>
+        /// 签证客户
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string VisaClient { get; set; }
+        /// <summary>
+        /// 签证费用
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(18,2)")]
+        public decimal VisaPrice { get; set; }
+        /// <summary>
+        /// 币种
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int VisaCurrency { get; set; }
+        /// <summary>
+        /// 是否第三方支付
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsThird { get; set; }
+        /// <summary>
+        /// 签证人员类型
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int PassengerType { get; set; }
+        /// <summary>
+        /// 办理签证人数
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int VisaNumber { get; set; }
+        /// <summary>
+        /// 免签人数
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int VisaFreeNumber { get; set; }
+    }
+}

+ 0 - 1
OASystem/OASystem.Domain/Entities/Resource/Res_CarGuides.cs

@@ -7,7 +7,6 @@ using System.Threading.Tasks;
 namespace OASystem.Domain.Entities.Resource
 namespace OASystem.Domain.Entities.Resource
 {
 {
     /// <summary>
     /// <summary>
-    /// 
     /// 团组成本 司兼导资料表
     /// 团组成本 司兼导资料表
     /// </summary>
     /// </summary>
     [SugarTable("Res_CarGuides")]
     [SugarTable("Res_CarGuides")]

+ 4 - 0
OASystem/OASystem.Domain/Entities/Resource/Res_LocalGuideData.cs

@@ -114,5 +114,9 @@ namespace OASystem.Domain.Entities.Resource
         /// </summary>
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
         public string LocalAndChineseScore { get; set; }
         public string LocalAndChineseScore { get; set; }
+        /// <summary>
+        /// 导游地接的类型:0公司1私人
+        /// </summary>
+        public int StaffType { get; set; }
     }
     }
 }
 }

+ 3 - 3
OASystem/OASystem.Domain/Entities/System/Sys_Calendar.cs

@@ -19,10 +19,10 @@ namespace OASystem.Domain.Entities.System
         public string Dt { get; set; }
         public string Dt { get; set; }
         /// <summary>
         /// <summary>
         /// 是否是工作日
         /// 是否是工作日
-        ///  0 true 1 false
+        ///  true  false
         /// </summary>
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "bit")]
         [SugarColumn(IsNullable = true, ColumnDataType = "bit")]
-        public bool IsWorkDays { get; set; }
+        public bool IsWorkDay { get; set; }
 
 
         /// <summary>
         /// <summary>
         /// 是否是节假日
         /// 是否是节假日
@@ -34,6 +34,6 @@ namespace OASystem.Domain.Entities.System
         /// 节假日名称
         /// 节假日名称
         /// </summary>
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
-        public string HoliDayName { get; set; }
+        public string HoliName { get; set; }
     }
     }
 }
 }

+ 5 - 5
OASystem/OASystem.Domain/Entities/System/Sys_Users.cs

@@ -42,7 +42,7 @@ namespace OASystem.Domain.Entities.System
         /// 密码
         /// 密码
         /// </summary>
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
-        public string Password { get; set; } = "123456"; //默认密码
+        public string Password { get; set; } 
         /// <summary>
         /// <summary>
         /// 性别0 男1 女  2 未设置
         /// 性别0 男1 女  2 未设置
         /// </summary>
         /// </summary>
@@ -92,7 +92,7 @@ namespace OASystem.Domain.Entities.System
         /// 生日
         /// 生日
         /// </summary> 
         /// </summary> 
         [SugarColumn(IsNullable = true,ColumnDataType = "DateTime")]
         [SugarColumn(IsNullable = true,ColumnDataType = "DateTime")]
-        public DateTime Birthday { get; set; }
+        public DateTime? Birthday { get; set; }
         /// <summary>
         /// <summary>
         /// 身份证号码
         /// 身份证号码
         /// </summary>
         /// </summary>
@@ -101,8 +101,8 @@ namespace OASystem.Domain.Entities.System
         /// <summary>
         /// <summary>
         /// 开始工作时
         /// 开始工作时
         /// </summary>
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "DateTime")]
-        public DateTime StartWorkDate { get; set; }
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(20)")]
+        public string? StartWorkDate { get; set; }
         /// <summary>
         /// <summary>
         /// 毕业学校
         /// 毕业学校
         /// </summary>
         /// </summary>
@@ -122,7 +122,7 @@ namespace OASystem.Domain.Entities.System
         public int Education { get; set; }
         public int Education { get; set; }
         /// <summary>
         /// <summary>
         /// 学历类型
         /// 学历类型
-        ///0 未设置 1 成教 2 统招
+        ///0 未设置 1 成教 2 统招 3 留学
         /// </summary>
         /// </summary>
         [SugarColumn(IsNullable = true,ColumnDataType ="int")]
         [SugarColumn(IsNullable = true,ColumnDataType ="int")]
         public int TheOrAdultEducation { get; set; }
         public int TheOrAdultEducation { get; set; }

+ 110 - 0
OASystem/OASystem.Domain/ViewModels/Financial/Fin_ForeignReceivablesView.cs

@@ -128,4 +128,114 @@ namespace OASystem.Domain.ViewModels.Financial
         /// </summary>
         /// </summary>
         public List<ProceedsReceivedView>? _ProceedsReceivedDatas { get; set; }
         public List<ProceedsReceivedView>? _ProceedsReceivedDatas { get; set; }
     }
     }
+
+
+    #region 不关联已收账单
+
+    /// <summary>
+    /// 团组已收款项Info View
+    /// </summary>
+    public class ProceedsReceivedNewView
+    {
+        /// <summary>
+        /// 主键ID
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        public int Diid { get; set; }
+
+        /// <summary>
+        /// 费用名称
+        /// </summary>
+        public string? PriceName { get; set; }
+
+        /// <summary>
+        /// 费用
+        /// </summary>
+        public decimal Price { get; set; }
+
+        /// <summary>
+        /// 数量
+        /// </summary>
+        public int Count { get; set; }
+
+        /// <summary>
+        /// 单位
+        /// </summary>
+        public string? Unit { get; set; }
+
+        /// <summary>
+        /// 单项总和
+        /// </summary>
+        public decimal ItemSumPrice { get; set; }
+
+        /// <summary>
+        /// 付款方
+        /// </summary>
+        public string? To { get; set; }
+
+        /// <summary>
+        /// 付款方电话
+        /// </summary>
+        public string? ToTel { get; set; }
+
+        /// <summary>
+        /// 付款日期
+        /// </summary>
+        public string? PayDate { get; set; }
+
+        /// <summary>
+        /// 付款注意事项
+        /// </summary>
+        public string? Attention { get; set; }
+
+        /// <summary>
+        /// 汇率
+        /// </summary>
+        public decimal Rate { get; set; }
+
+        /// <summary>
+        /// 币种
+        /// </summary>
+        public int Currency { get; set; }
+
+        /// <summary>
+        /// 添加方式   
+        /// 0 - 账单页面添加   1 - 预算成本页面添加
+        /// </summary>
+        public int AddingWay { get; set; }
+
+        /// <summary>
+        /// 添加方式描述
+        /// </summary>
+        public string? AddingModeName
+        {
+            get
+            {
+
+                string str = "";
+                if (AddingWay == 0) str = "账单模块";
+                else if (AddingWay == 1) str = "成本预算模块";
+
+                return str;
+            }
+        }
+
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string? Remark { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime? CreateTime { get; set; }
+    }
+
+
+
+    #endregion
 }
 }

+ 73 - 0
OASystem/OASystem.Domain/ViewModels/Groups/EnterExitCostView.cs

@@ -170,6 +170,79 @@ namespace OASystem.Domain.ViewModels.Groups
 
 
     }
     }
 
 
+    /// <summary>
+    /// 出入境国家(城市)费用标准 Info  View
+    /// </summary>
+    public class NationalTravelFeeInfoByCountryAndCityView
+    {
+        /// <summary>
+        /// 洲别
+        /// </summary>
+        public string? Continent { get; set; }
+
+        /// <summary>
+        /// 国家
+        /// </summary>
+        public string? Country { get; set; }
+
+        /// <summary>
+        /// 城市
+        /// </summary>
+        public string? City { get; set; }
+
+        /// <summary>
+        /// 币种
+        /// Sys_SetData STid=66
+        /// </summary>
+        public int Currency { get; set; }
+
+        /// <summary>
+        /// 币种code
+        /// </summary>
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 币种名称
+        /// </summary>
+        public string CurrencyName { get; set; }
+
+        /// <summary>
+        /// 住宿费
+        /// </summary>
+        public decimal RoomCost { get; set; }
+
+        /// <summary>
+        /// 伙食费
+        /// </summary>
+        public decimal FoodCost { get; set; }
+
+        /// <summary>
+        /// 公杂费 
+        /// </summary>
+        public decimal PublicCost { get; set; }
+
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 最后更新人 
+        /// </summary>
+        public int LastUpdateUserId { get; set; }
+
+        /// <summary>
+        /// 最后更新人
+        /// </summary>
+        public string LastUpdateUserName { get; set; }
+
+        /// <summary>
+        /// 最后更新时间 
+        /// </summary>
+        public DateTime? LastUpdateTime { get; set; } = DateTime.Now;
+
+    }
+
     /// <summary>
     /// <summary>
     /// 出入境费用info
     /// 出入境费用info
     /// </summary>
     /// </summary>

+ 37 - 0
OASystem/OASystem.Domain/ViewModels/Groups/Grp_CarTouristGuideGroundView.cs

@@ -0,0 +1,37 @@
+using OASystem.Domain.Entities.Groups;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.Groups
+{
+    public class Grp_CarTouristGuideGroundView:Grp_CarTouristGuideGroundReservations
+    {
+        /// <summary>
+        /// 行号
+        /// </summary>
+        public int RowNumber { get; set; }
+        /// <summary>
+        /// 此次付款百分百
+        /// </summary>
+        public decimal PayPercentage { get; set; }
+        /// <summary>
+        /// 此次付款金额
+        /// </summary>
+        public decimal PayThenMoney { get; set; }
+        /// <summary>
+        /// 剩余尾款
+        /// </summary>
+        public decimal RemainingBalance { get; set; }
+        /// <summary>
+        /// 总经理是否审核
+        /// </summary>
+        public int IsAuditGM { get; set; }
+        /// <summary>
+        /// 币种
+        /// </summary>
+        public string CurrencyStr { get; set; }
+    }
+}

+ 26 - 0
OASystem/OASystem.Domain/ViewModels/Groups/VisaInfoView.cs

@@ -0,0 +1,26 @@
+using OASystem.Domain.Entities.Groups;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.Groups
+{
+    public class VisaInfoView:Grp_VisaInfo
+    {
+        /// <summary>
+        /// 行号
+        /// </summary>
+        public int RowNumber { get; set; }
+        /// <summary>
+        /// 总经理是否审核
+        /// </summary>
+        public int IsAuditGM { get; set; }
+        /// <summary>
+        /// 币种
+        /// </summary>
+        public string VisaCurrencyStr { get; set; }
+    }
+
+}

+ 2 - 0
OASystem/OASystem.Domain/ViewModels/PersonnelModule/WageSheetMonthView.cs

@@ -37,6 +37,8 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
     /// </summary>
     /// </summary>
     public class CalendarInfoView
     public class CalendarInfoView
     {
     {
+        public int Id { get; set; }
+
         /// <summary>
         /// <summary>
         /// 日期 
         /// 日期 
         /// Eg:yyyy-MM-dd
         /// Eg:yyyy-MM-dd

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

@@ -479,7 +479,7 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         /// </summary>
         /// </summary>
         public string? Type { get; set; }
         public string? Type { get; set; }
 
 
-        public Object? Ex_ItemInfo { get; set; }
+        public Object Ex_ItemInfo { get; set; }
     }
     }
 
 
 
 

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

@@ -361,6 +361,8 @@ namespace OASystem.Domain.ViewModels.QiYeWeChat
         /// </summary>
         /// </summary>
         public List<Related_Approval> related_approval { get; set; }
         public List<Related_Approval> related_approval { get; set; }
 
 
+        public Attendance attendance { get; set; }
+
         ///// <summary>
         ///// <summary>
         ///// 
         ///// 
         ///// </summary>
         ///// </summary>

+ 353 - 0
OASystem/OASystem.Domain/ViewModels/System/OA2014UsersView.cs

@@ -0,0 +1,353 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.System
+{
+    /// <summary>
+    /// 数据库 OA2014
+    /// 表  Users 
+    /// View 
+    /// </summary>
+    public class OA2014UsersView
+    {
+        int id;
+
+        /// <summary>
+        /// 主键
+        /// </summary>
+        public int Id
+        {
+            get { return id; }
+            set { id = value; }
+        }
+
+        string cnName;
+
+        /// <summary>
+        /// 中文姓名
+        /// </summary>
+        public string CnName
+        {
+            get { return cnName; }
+            set { cnName = value; }
+        }
+
+        string enName;
+
+        /// <summary>
+        /// 英文姓名
+        /// </summary>
+        public string EnName
+        {
+            get { return enName; }
+            set { enName = value; }
+        }
+
+        string number;
+
+        /// <summary>
+        /// 员工号
+        /// </summary>
+        public string Number
+        {
+            get { return number; }
+            set { number = value; }
+        }
+
+        int did;
+
+        /// <summary>
+        /// 设置数据类外键
+        /// </summary>
+        public int Did
+        {
+            get { return did; }
+            set { did = value; }
+        }
+
+        string password;
+
+        /// <summary>
+        /// 密码
+        /// </summary>
+        public string Password
+        {
+            get { return password; }
+            set { password = value; }
+        }
+
+        int sex;
+
+        /// <summary>
+        /// 性别
+        /// </summary>
+        public int Sex
+        {
+            get { return sex; }
+            set { sex = value; }
+        }
+
+        string post;
+
+        /// <summary>
+        /// 职位
+        /// </summary>
+        public string Post
+        {
+            get { return post; }
+            set { post = value; }
+        }
+
+        string ext;
+
+        /// <summary>
+        /// 分机号
+        /// </summary>
+        public string Ext
+        {
+            get { return ext; }
+            set { ext = value; }
+        }
+
+        string phone;
+
+        /// <summary>
+        /// 手机号
+        /// </summary>
+        public string Phone
+        {
+            get { return phone; }
+            set { phone = value; }
+        }
+
+        string urgentPhone;
+
+        /// <summary>
+        /// 紧急联络电话
+        /// </summary>
+        public string UrgentPhone
+        {
+            get { return urgentPhone; }
+            set { urgentPhone = value; }
+        }
+
+        string email;
+
+        /// <summary>
+        /// 电子邮箱
+        /// </summary>
+        public string Email
+        {
+            get { return email; }
+            set { email = value; }
+        }
+
+        string address;
+
+        /// <summary>
+        /// 目前所在地区
+        /// </summary>
+        public string Address
+        {
+            get { return address; }
+            set { address = value; }
+        }
+
+        DateTime edate;
+
+        /// <summary>
+        /// 入职日期
+        /// </summary>
+        public DateTime Edate
+        {
+            get { return edate; }
+            set { edate = value; }
+        }
+
+        DateTime rdate;
+
+        /// <summary>
+        /// 离职日期
+        /// </summary>
+        public DateTime Rdate
+        {
+            get { return rdate; }
+            set { rdate = value; }
+        }
+
+        int seniority;
+
+        /// <summary>
+        /// 工龄
+        /// </summary>
+        public int Seniority
+        {
+            get { return seniority; }
+            set { seniority = value; }
+        }
+
+        string remark;
+
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string Remark
+        {
+            get { return remark; }
+            set { remark = value; }
+        }
+
+        int isDel;
+
+        /// <summary>
+        /// 删除标识
+        /// </summary>
+        public int IsDel
+        {
+            get { return isDel; }
+            set { isDel = value; }
+        }
+
+        int company;
+
+        /// <summary>
+        /// 所属公司
+        /// </summary>
+        public int Company
+        {
+            get { return company; }
+            set { company = value; }
+        }
+
+        string birthday;
+
+        /// <summary>
+        /// 出生日期
+        /// </summary>
+        public string Birthday
+        {
+            get { return birthday; }
+            set { birthday = value; }
+        }
+        string iDCard;
+
+        /// <summary>
+        /// 身份证号码
+        /// </summary>
+        public string IDCard
+        {
+            get { return iDCard; }
+            set { iDCard = value; }
+        }
+        string startWorkDate;
+        /// <summary>
+        /// 最初参加工作时间
+        /// </summary>
+        public string StartWorkDate
+        {
+            get { return startWorkDate; }
+            set { startWorkDate = value; }
+        }
+        string education;
+
+        /// <summary>
+        /// 学历
+        /// </summary>
+        public string Education
+        {
+            get { return education; }
+            set { education = value; }
+        }
+        string professional;
+
+        /// <summary>
+        /// 专业
+        /// </summary>
+        public string Professional
+        {
+            get { return professional; }
+            set { professional = value; }
+        }
+        string graduateInstitutions;
+
+        /// <summary>
+        /// 毕业院校
+        /// </summary>
+        public string GraduateInstitutions
+        {
+            get { return graduateInstitutions; }
+            set { graduateInstitutions = value; }
+        }
+        string theOrAdultEducation;
+
+        /// <summary>
+        /// 统招/成教
+        /// </summary>
+        public string TheOrAdultEducation
+        {
+            get { return theOrAdultEducation; }
+            set { theOrAdultEducation = value; }
+        }
+        string maritalStatus;
+        /// <summary>
+        /// 婚姻状况
+        /// </summary>
+        public string MaritalStatus
+        {
+            get { return maritalStatus; }
+            set { maritalStatus = value; }
+        }
+        string homeAddress;
+
+        /// <summary>
+        /// 家庭地址
+        /// </summary>
+        public string HomeAddress
+        {
+            get { return homeAddress; }
+            set { homeAddress = value; }
+        }
+        string usePeriod;
+        /// <summary>
+        /// 试用期限
+        /// </summary>
+        public string UsePeriod
+        {
+            get { return usePeriod; }
+            set { usePeriod = value; }
+        }
+        string workExperience;
+
+        /// <summary>
+        /// 工作经历单位
+        /// </summary>
+        public string WorkExperience
+        {
+            get { return workExperience; }
+            set { workExperience = value; }
+        }
+        string certificateTime;
+        /// <summary>
+        /// 证书时间
+        /// </summary>
+        public string CertificateTime
+        {
+            get { return certificateTime; }
+            set { certificateTime = value; }
+        }
+        string certificate;
+
+        /// <summary>
+        /// 专业培训及资格证书
+        /// </summary>
+        public string Certificate
+        {
+            get { return certificate; }
+            set { certificate = value; }
+        }
+
+    }
+}

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

@@ -18,6 +18,8 @@ namespace OASystem.Domain.ViewModels.System
         /// setdatatype id
         /// setdatatype id
         /// </summary>
         /// </summary>
         public int STid { get; set; }
         public int STid { get; set; }
+
+        public string Remark { get; set; }
     }
     }
 
 
     /// <summary>
     /// <summary>

+ 4 - 0
OASystem/OASystem.Domain/ViewModels/ViewBase.cs

@@ -35,4 +35,8 @@
         /// </summary>
         /// </summary>
         public List<T> DataList { get; set; }
         public List<T> DataList { get; set; }
     }
     }
+    public class DataCount
+    {
+        public int Count { get; set; }
+    }
 }
 }

+ 137 - 1
OASystem/OASystem.Infrastructure/Repositories/Financial/ForeignReceivablesRepository.cs

@@ -109,7 +109,6 @@ namespace OASystem.Infrastructure.Repositories.Financial
 
 
         }
         }
 
 
-
         /// <summary>
         /// <summary>
         /// 应收款项 删除
         /// 应收款项 删除
         /// </summary>
         /// </summary>
@@ -269,7 +268,144 @@ namespace OASystem.Infrastructure.Repositories.Financial
 
 
         #endregion
         #endregion
 
 
+        #region 未关联已收款项
+
+        /// <summary>
+        /// 收款账单 数据源
+        /// </summary>
+        /// <returns></returns>
+        public async Task<Result> PostDataSource()
+        {
+            Result result = new() { Code = -2 };
+
+            var groupNameData = await _delegationRep.GetGroupNameList(new GroupNameDto());
+            var currencyData = await _setDataRep.GetSetDataBySTId(_setDataRep, 66); //币种
+            var remittanceMethodData = await _setDataRep.GetSetDataBySTId(_setDataRep, 14); //汇款方式
+
+            result.Code = 0;
+            result.Msg = "成功!";
+            result.Data = new
+            {
+                GroupNameData = groupNameData.Data,
+                CurrencyData = currencyData.Data,
+                RemittanceMethodData = remittanceMethodData.Data
+            };
+
+            return result;
+        }
+
+        /// <summary>
+        /// 根据diid查询团组应收款项
+        /// </summary>
+        /// <param name="diid"></param>
+        /// <returns></returns>
+        public async Task<Result> PostGroupReceivablesInfoByDiId(ForForeignReceivablesNewDto dto)
+        {
+            Result result = new() { Code = -2 };
+
+            var groupInfoData = await _delegationRep.GetGroupInfo(new GroupInfoDto() { Id = dto.DiId });
+
+            //应收款项
+            string groupReceivedSql = string.Format(@"Select * From Fin_ForeignReceivables Where IsDel=0 And Diid={0}", dto.DiId);
+            var groupReceivedList = await _sqlSugar.SqlQueryable<ProceedsReceivedNewView>(groupReceivedSql).ToListAsync();
+
+            result.Code = 0;
+            result.Msg = "查询成功!";
+            result.Data = new
+            {
+                GroupInfo = groupInfoData.Data,
+                GroupCollectionStatementData = groupReceivedList
+            };
 
 
+            return result;
+
+        }
+
+        /// <summary>
+        /// 财务模块
+        /// 收款账单 Add And Update
+        /// </summary>
+        /// <param name="diid"></param>
+        /// <returns></returns>
+        public async Task<Result> PostReceivablesSave(ForeignReceivablesSaveDto dto)
+        {
+            Result result = new() { Code = -2 };
+
+            if (dto.foreignReceivablesInfos.Count <= 0)
+            {
+                result.Msg = "收款账单没有信息,不能进行,添加或修改操作!!!";
+                return result;
+            }
+
+            int addCount = 0, updateCount = 0;
+            if (dto.PortType == 1)
+            {
+                List<Fin_ForeignReceivables> _ForeignReceivables = new List<Fin_ForeignReceivables>();
+                foreach (var item in dto.foreignReceivablesInfos)
+                {
+                    _ForeignReceivables.Add(new Fin_ForeignReceivables()
+                    {
+                        Diid = dto.DiId,
+                        Id = item.Id,
+                        PriceName = item.PriceName,
+                        Price = item.Price,
+                        Count = item.Count,
+                        Unit = item.Unit,
+                        ItemSumPrice = item.ItemSumPrice,
+                        Rate = item.Rate,
+                        Currency = item.Currency,
+                        AddingWay = item.AddingWay,
+                        CreateUserId = dto.UserId,
+                        CreateTime = DateTime.Now,
+                        Remark = item.Remark
+                    });
+                }
+                if (_ForeignReceivables.Count > 0)
+                {
+                    var x = _sqlSugar.Storageable(_ForeignReceivables).ToStorage();
+                    addCount = x.AsInsertable.ExecuteCommand();        //不存在插入
+                    updateCount = x.AsUpdateable.ExecuteCommand();    //存在更新
+                }
+                result.Code = 0;
+                result.Msg = string.Format(@"操作成功!添加:{0}条;更新:{1};", addCount, updateCount);
+            }
+
+            return result;
+        }
+
+        /// <summary>
+        /// 财务模块
+        /// 收款账单 
+        /// Del
+        /// </summary>
+        /// <param name="diid"></param>
+        /// <returns></returns>
+        public async Task<Result> PostReceivablesDel(ForeignReceivablesDelDto dto)
+        {
+            Result result = new() { Code = -2 };
+           var delStatus = await _sqlSugar.Updateable<Fin_ForeignReceivables>()
+                                     .SetColumns(a => new Fin_ForeignReceivables
+                                     {
+                                         IsDel = 1,
+                                         DeleteUserId = dto.UserId,
+                                         DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                                     })
+                                     .Where(a => a.Id == dto.Id)
+                                     .ExecuteCommandAsync();
+
+            if (delStatus > 0)
+            {
+                result.Msg = "操作成功!";
+                result.Code = 0;
+            }
+            else
+            {
+                result.Msg = "操作成功!";
+            }
+            return result;
+        }
+
+        #endregion
 
 
     }
     }
 }
 }

+ 4 - 0
OASystem/OASystem.Infrastructure/Repositories/Groups/AirTicketResRepository.cs

@@ -89,6 +89,10 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 {
                 {
                     UserId = UserId.Substring(0, UserId.Length - 1);
                     UserId = UserId.Substring(0, UserId.Length - 1);
                 }
                 }
+                else
+                {
+                    UserId = "0";
+                }
                 string sql = string.Format(@"select a.*,c.IsAuditGM,(select Name from Sys_SetData where Id=a.cType) as 'CTypeName',(select Name from 
                 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)
                                                 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}
                                                 as 'CurrencyStr' from Grp_AirTicketReservations a,Grp_CreditCardPayment c where  a.id=c.CId  and a.isdel={1} and c.IsDel={1}

+ 221 - 0
OASystem/OASystem.Infrastructure/Repositories/Groups/CarTouristGuideGroundRepository.cs

@@ -0,0 +1,221 @@
+using AutoMapper;
+using OASystem.Domain;
+using OASystem.Domain.Dtos.Groups;
+using OASystem.Domain.Entities.Financial;
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.ViewModels.Groups;
+using OASystem.Infrastructure.Tools;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Infrastructure.Repositories.Groups
+{
+    public class CarTouristGuideGroundRepository:BaseRepository<Grp_CarTouristGuideGroundReservations, Grp_CarTouristGuideGroundReservationsContent>
+    {
+        private readonly IMapper _mapper;
+
+        public CarTouristGuideGroundRepository(SqlSugarClient sqlSugar, IMapper mapper)
+            : base(sqlSugar)
+        {
+            _mapper = mapper;
+        }
+
+        public async Task<Result> OpCarTouristGuideGround(OpCarTouristGuideGroundDto dto)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+            BeginTran();
+            try
+            {
+                //int id = 0;
+                //Grp_CarTouristGuideGroundReservations grp_CarTouristGuide = _mapper.Map<Grp_CarTouristGuideGroundReservations>(dto);
+                //if (dto.Status == 1)//添加
+                //{
+                //    Grp_CarTouristGuideGroundReservations grp_CarTouristGuideGround = _sqlSugar.Queryable<Grp_CarTouristGuideGroundReservations>().First(a => a.IsDel == 0 && a.Area == dto.Area && a.BusName == dto.BusName && a.ServiceGuide == dto.ServiceGuide);
+                //    if (grp_CarTouristGuideGround != null)
+                //    {
+                //        return result = new Result() { Code = -1, Msg = "该笔费用已存在,请勿重复添加!" };
+                //    }
+                //    else
+                //    {
+                //        id = await AddAsyncReturnId(grp_CarTouristGuide);
+                //        if (id != 0)
+                //        {
+                //            //int cId = await _sqlSugar.Insertable(c).ExecuteReturnIdentityAsync();
+                //            if (true)
+                //            {
+                //                result = new Result() { Code = 0, Msg = "添加成功!" };
+
+                //            }
+                //            else
+                //            {
+                //                RollbackTran();
+                //                result = new Result() { Code = -1, Msg = "添加失败!" };
+                //            }
+                //        }
+                //        else
+                //        {
+                //            RollbackTran();
+                //            result = new Result() { Code = -1, Msg = "添加失败,请稍后重试!" };
+                //        }
+                //    }
+
+                //}
+                //else if (dto.Status == 2)//修改
+                //{
+
+                //    bool res = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_VisaInfo
+                //    {
+                //        VisaClient = grp_Visa1.VisaClient,
+                //        VisaPrice = grp_Visa1.VisaPrice,
+                //        VisaCurrency = grp_Visa1.VisaCurrency,
+                //        IsThird = grp_Visa1.IsThird,
+                //        PassengerType = grp_Visa1.PassengerType,
+                //        VisaNumber = grp_Visa1.VisaNumber,
+                //        VisaFreeNumber = grp_Visa1.VisaFreeNumber,
+                //        Remark = dto.Remark,
+                //    });
+                //    if (res)
+                //    {
+                //        int CTable = await _sqlSugar.Updateable<Grp_CreditCardPayment>().Where(a => a.CId == grp_Visa1.Id && a.CTable == 80).SetColumns(a => new Grp_CreditCardPayment
+                //        {
+                //            PayDId = dto.PayDId,
+                //            PayMoney = c.PayMoney,
+                //            PaymentCurrency = c.PaymentCurrency,
+                //            Payee = c.Payee,
+                //            OrbitalPrivateTransfer = c.OrbitalPrivateTransfer,
+                //            DayRate = c.DayRate,
+                //            RMBPrice = c.RMBPrice,
+                //            ConsumptionPatterns = c.ConsumptionPatterns,
+                //            ConsumptionDate = c.ConsumptionDate,
+                //            CTDId = c.CTDId,
+                //            CompanyBankNo = c.CompanyBankNo,
+                //            OtherBankName = c.OtherBankName,
+                //            OtherSideNo = c.OtherSideNo,
+                //            OtherSideName = c.OtherSideName,
+                //            BankNo = c.BankNo,
+                //            CardholderName = c.CardholderName,
+                //            Remark = c.Remark,
+
+                //        }).ExecuteCommandAsync();
+
+                //        result = new Result() { Code = 0, Msg = "修改成功!" };
+                //    }
+                //    else
+                //    {
+                //        RollbackTran();
+                //        result = new Result() { Code = -1, Msg = "修改失败,请稍后重试!" };
+                //    }
+                //}
+                //CommitTran();
+            }
+            catch (Exception ex)
+            {
+                result = new Result() { Code = -2, Msg = "未知错误" };
+            }
+            return result;
+        }
+
+        public async Task<Result> QueryCarTouristGuideGroundByDiId(CarTouristGuideGroundDto dto)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+            if (dto.PortType == 0 || string.IsNullOrWhiteSpace(dto.PortType.ToString()))
+            {
+                return result = new Result() { Code = -1, Msg = "请传入PortType参数,请求端口分类 1 Web 2 Android 3 IOS" };
+            }
+            try
+            {
+                #region SQL条件拼接
+
+                string sqlWhere = string.Empty;
+                sqlWhere += string.Format(@"And t.DIId={0} and t.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 == 79).ToList();
+                foreach (Grp_GroupsTaskAssignment gta in gtaUIdList)
+                    UserId += gta.UId + ",";
+
+                if (!string.IsNullOrWhiteSpace(UserId))
+                {
+                    UserId = UserId.Substring(0, UserId.Length - 1);
+                }
+                else
+                {
+                    UserId = "0";
+                }
+                
+                sqlWhere += string.Format(@" And t.CreateUserId in ({0})", UserId);
+                if (!string.IsNullOrEmpty(sqlWhere.Trim()))
+                {
+                    Regex r = new Regex("And");
+                    sqlWhere = r.Replace(sqlWhere, "Where", 1);
+                }
+
+                #endregion
+                int startIndex = (dto.PageIndex - 1) * dto.PageSize + 1;
+                int endIndex = startIndex + dto.PageSize - 1;
+                if (dto.PortType == 1)
+                {
+                    string sql = string.Format(@"select t.*,s.Name as CurrencyStr,c.IsAuditGM,c.PayPercentage,c.PayMoney from 
+                                                Grp_CarTouristGuideGroundReservations t
+                                                left Join Grp_CreditCardPayment c on CTable=79 and c.CId=t.Id
+                                                left Join Sys_SetData s on s.Id=t.CId {0}
+                                                order by CreateTime desc", sqlWhere);
+                    List<Grp_CarTouristGuideGroundView> infoViews = _sqlSugar.SqlQueryable<Grp_CarTouristGuideGroundView>(sql).ToList();
+                    foreach (var item in infoViews)
+                    {
+                        item.PayThenMoney = Math.Round(item.PayPercentage/100 * item.ServiceQuotedPrice, 2);
+                        item.RemainingBalance = Math.Round(item.ServiceQuotedPrice- item.PayPercentage / 100 * item.ServiceQuotedPrice);
+                    }
+                    return result = new Result() { Code = 0, Msg = "查询成功!", Data = infoViews };
+                }
+                else if (dto.PortType == 2 || dto.PortType == 3)
+                {
+                    string sql = string.Format(@"Select * From (	
+                                            Select row_number() over (order by t.Id Desc) as RowNumber,t.*,s.Name as CurrencyStr,c.IsAuditGM,c.PayPercentage
+                                            from 
+                                            Grp_CarTouristGuideGroundReservations t
+                                            left Join Grp_CreditCardPayment c on CTable=79 and c.CId=t.Id
+                                            left Join Sys_SetData s on s.Id=t.CId {0}
+                                            ) temp Where RowNumber Between {1} and {2}", sqlWhere, startIndex, endIndex);
+
+                    List<Grp_CarTouristGuideGroundView> grp_CarTourists = _sqlSugar.SqlQueryable<Grp_CarTouristGuideGroundView>(sql).ToList();
+                    foreach (var item in grp_CarTourists)
+                    {
+                        item.PayThenMoney = Math.Round(item.PayPercentage / 100 * item.ServiceQuotedPrice, 2);
+                        item.RemainingBalance = Math.Round(item.ServiceQuotedPrice - item.PayPercentage / 100 * item.ServiceQuotedPrice);
+                    }
+                    string CountSql = string.Format(@"Select COUNT(1) as Count From (	
+                                                        select t.*,s.Name as CurrencyStr,c.IsAuditGM,c.PayPercentage from 
+                                                        Grp_CarTouristGuideGroundReservations t
+                                                        left Join Grp_CreditCardPayment c on CTable=79 and c.CId=t.Id
+                                                        left Join Sys_SetData s on s.Id=t.CId {0}
+                                                        ) temp ", sqlWhere);
+                    DataCount dataCount = _sqlSugar.SqlQueryable<DataCount>(CountSql).First();
+                    if (dataCount != null)
+                    {
+                        int count = dataCount.Count;
+                        float totalPage = (float)count / dto.PageSize;//总页数
+                        if (totalPage == 0) totalPage = 1;
+                        else totalPage = (int)Math.Ceiling((double)totalPage);
+
+
+                        ListViewBase<Grp_CarTouristGuideGroundView> rst = new ListViewBase<Grp_CarTouristGuideGroundView>();
+                        rst.DataList = grp_CarTourists;
+                        rst.DataCount = count;
+                        rst.CurrPageIndex = dto.PageIndex;
+                        rst.CurrPageSize = dto.PageSize;
+                        return result = new Result() { Code = 0, Msg = "查询成功!", Data = rst };
+                    }
+                }
+            }
+            catch (Exception)
+            {
+                return result = new Result() { Code = -2, Msg = "未知错误" };
+                throw;
+            }
+            return result;
+        }
+    }
+}

+ 4 - 0
OASystem/OASystem.Infrastructure/Repositories/Groups/DecreasePaymentsRepository.cs

@@ -43,6 +43,10 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 {
                 {
                     UserId = UserId.Substring(0, UserId.Length - 1);
                     UserId = UserId.Substring(0, UserId.Length - 1);
                 }
                 }
+                else
+                {
+                    UserId = "0";
+                }
                 string sql = string.Format(@"select Id,DiId,PriceName,Price,(select name from Sys_SetData where id=s.Currency) as Currency,FilePath,
                 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 
                                             (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 and s.CreateUserId in ({1}) ", dto.DiId,UserId);
                                             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);

+ 2 - 2
OASystem/OASystem.Infrastructure/Repositories/Groups/DelegationInfoRepository.cs

@@ -590,11 +590,11 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 if (deleteStatus)
                 if (deleteStatus)
                 {
                 {
                     result.Code = 0;
                     result.Code = 0;
-                    result.Msg = "确认出团成功!";
+                    result.Msg = "确认出团设置成功!";
                 }
                 }
                 else
                 else
                 {
                 {
-                    result.Msg = "确认出团失败!";
+                    result.Msg = "确认出团设置失败!";
                 }
                 }
 
 
             }
             }

+ 36 - 3
OASystem/OASystem.Infrastructure/Repositories/Groups/DelegationVisaRepository.cs

@@ -39,15 +39,48 @@ From DelegationInfo With(Nolock) {2}
 
 
             foreach (var item in dataSource)
             foreach (var item in dataSource)
             {
             {
-                string sql2 = string.Format(@" Select * From Grp_VisaProgressCustomer With(Nolock) Where DiId={0} And IsDel=0 ", item.DiId);
-                List<Grp_VisaProgressCustomer> listComplete = _sqlSugar.SqlQueryable<Grp_VisaProgressCustomer>(sql2).ToList();
+                //string sql2 = string.Format(@" Select * From Grp_VisaProgressCustomer With(Nolock) Where DiId={0} And IsDel=0 ", item.DiId);
+                //List<Grp_VisaProgressCustomer> listComplete = _sqlSugar.SqlQueryable<Grp_VisaProgressCustomer>(sql2).ToList();
+                ChangeDataBase(DBEnum.OA2023DB);
+                string sql2 = string.Format(@" Select WorkStatus as code,COUNT(1) as nums From Grp_VisaProgressCustomer With(Nolock) Where DiId={0} And IsDel=0 Group by WorkStatus ", item.DiId);
+                List<dynamic> listComplete = _sqlSugar.SqlQueryable<dynamic>(sql2).ToList();
+                int totalCount = 0;
+
+
+                //未作详细描述文本
+                int count_0 = 0;
+                int count_1 = 0;
+                int count_2 = 0;
+                int count_3 = 0;
+                foreach (var comCount in listComplete)
+                {
+                    switch (comCount.code)
+                    {
+                        case 0: count_0 = comCount.nums; break;
+                        case 1: count_1 = comCount.nums; break;
+                        case 2: count_2 = comCount.nums; break;
+                        case 3: count_3 = comCount.nums; break;
+                        default:
+                            break;
+                    }
+                    totalCount += comCount.nums;
+                }
 
 
-                item.CompletePNumber = string.Format(@"已完成{0}人", listComplete.Count);
+                int comNums = totalCount - count_0;
+
+                if (comNums > 0)
+                {
+                    item.CompletePNumber = string.Format(@"{0} / {1}", comNums, totalCount);
+                }
+                else {
+                    item.CompletePNumber = "跳转配置";
+                }
             }
             }
             rst.DataList = new List<Grp_DelegationVisaView>(dataSource);
             rst.DataList = new List<Grp_DelegationVisaView>(dataSource);
 
 
             if (rst.DataList.Count > 0)
             if (rst.DataList.Count > 0)
             {
             {
+                ChangeDataBase(DBEnum.OA2014DB);
                 string sqlCount = string.Format(@" Select Id as DiId From DelegationInfo With(Nolock) {0} ", sqlWhere);
                 string sqlCount = string.Format(@" Select Id as DiId From DelegationInfo With(Nolock) {0} ", sqlWhere);
                 int dataCount = _sqlSugar.SqlQueryable<Grp_DelegationVisaView>(sqlCount).Count();
                 int dataCount = _sqlSugar.SqlQueryable<Grp_DelegationVisaView>(sqlCount).Count();
                 rst.DataCount = dataCount;
                 rst.DataCount = dataCount;

+ 1 - 1
OASystem/OASystem.Infrastructure/Repositories/Groups/EnterExitCostRepository.cs

@@ -224,7 +224,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
             {
             {
 
 
                 var _nationalTravelFee = _sqlSugar.Storageable<Grp_NationalTravelFee>(nationalTravelFee).ToStorage();
                 var _nationalTravelFee = _sqlSugar.Storageable<Grp_NationalTravelFee>(nationalTravelFee).ToStorage();
-                if (dto.Id != 0) //新增
+                if (dto.Id == 0) //新增
                 {
                 {
                     string selectSql = string.Format(@"Select * From Grp_NationalTravelFee 
                     string selectSql = string.Format(@"Select * From Grp_NationalTravelFee 
                                                    Where IsDel = 0 
                                                    Where IsDel = 0 

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

@@ -126,6 +126,10 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 {
                 {
                     UserId = UserId.Substring(0, UserId.Length - 1);
                     UserId = UserId.Substring(0, UserId.Length - 1);
                 }
                 }
+                else
+                {
+                    UserId = "0";
+                }
                 sqlWhere += string.Format(@" And i.CreateUserId in ({0})", UserId);
                 sqlWhere += string.Format(@" And i.CreateUserId in ({0})", UserId);
                 if (!string.IsNullOrEmpty(sqlWhere.Trim()))
                 if (!string.IsNullOrEmpty(sqlWhere.Trim()))
                 {
                 {

+ 286 - 0
OASystem/OASystem.Infrastructure/Repositories/Groups/VisaPriceRepository.cs

@@ -0,0 +1,286 @@
+
+using AutoMapper;
+using NPOI.SS.Formula.Functions;
+using OASystem.Domain;
+using OASystem.Domain.Dtos.Financial;
+using OASystem.Domain.Dtos.Groups;
+using OASystem.Domain.Entities.Financial;
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.ViewModels.Financial;
+using OASystem.Domain.ViewModels.Groups;
+using OASystem.Infrastructure.Repositories.System;
+using OASystem.Infrastructure.Tools;
+using Org.BouncyCastle.Asn1.Cms;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Infrastructure.Repositories.Groups
+{
+    public class VisaPriceRepository : BaseRepository<Grp_VisaInfo, VisaPriceDto>
+    {
+        private readonly IMapper _mapper;
+
+        public VisaPriceRepository(SqlSugarClient sqlSugar,IMapper mapper)
+            : base(sqlSugar)
+        {
+            _mapper=mapper;
+        }
+        
+
+        /// <summary>
+        /// 根据diid查询签证费用列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<Result> PostVisaByDiId(VisaPriceDto dto)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+            if (dto.PortType==0 ||string.IsNullOrWhiteSpace(dto.PortType.ToString()))
+            {
+               return result = new Result() { Code = -1, Msg = "请传入PortType参数,请求端口分类 1 Web 2 Android 3 IOS" };
+            }
+            try
+            {
+                #region SQL条件拼接
+
+                string sqlWhere = string.Empty;
+                if (!string.IsNullOrWhiteSpace(dto.VisaClient))
+                {
+                    sqlWhere += string.Format(@" And v.VisaClient like '%{0}%'", dto.VisaClient);
+                }
+                
+                sqlWhere += string.Format(@"And v.DIId={0} and v.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 == 80).ToList();
+                foreach (Grp_GroupsTaskAssignment gta in gtaUIdList)
+                    UserId += gta.UId + ",";
+
+                if (!string.IsNullOrWhiteSpace(UserId))
+                {
+                    UserId = UserId.Substring(0, UserId.Length - 1);
+                }
+                else
+                {
+                    UserId = "0";
+                }
+                sqlWhere += string.Format(@" And v.CreateUserId in ({0})", UserId);
+                if (!string.IsNullOrEmpty(sqlWhere.Trim()))
+                {
+                    Regex r = new Regex("And");
+                    sqlWhere = r.Replace(sqlWhere, "Where", 1);
+                }
+
+                #endregion
+                int startIndex = (dto.PageIndex - 1) * dto.PageSize + 1;
+                int endIndex = startIndex + dto.PageSize - 1;
+                if (dto.PortType==1)
+                {
+                    string sql = string.Format(@"select *,(select IsAuditGM from Grp_CreditCardPayment where CTable=80 and CId=v.Id) IsAuditGM,
+                                                (select Name from Sys_SetData where isdel=0 and v.VisaCurrency=Id) VisaCurrencyStr from
+                                                Grp_VisaInfo v {0} order by CreateTime desc",sqlWhere);
+                    List<VisaInfoView> infoViews = _sqlSugar.SqlQueryable<VisaInfoView>(sql).ToList();
+                    return result = new Result() { Code = 0, Msg = "查询成功!", Data = infoViews };
+                }
+                else if(dto.PortType==2 || dto.PortType==3)
+                {
+                    string sql = string.Format(@"Select * From (	
+                                            Select row_number() over (order by v.Id Desc) as RowNumber,v.*,c.IsAuditGM,s.Name as VisaCurrencyStr
+                                            From Grp_VisaInfo v
+                                            left Join Grp_CreditCardPayment c On v.Id = c.CId and CTable=80
+                                            Left Join Sys_SetData s On v.VisaCurrency = s.Id {0}
+                                            ) temp Where RowNumber Between {1} and {2}", sqlWhere, startIndex, endIndex);
+
+                    List<VisaInfoView> infoViews = _sqlSugar.SqlQueryable<VisaInfoView>(sql).ToList();
+
+                    string CountSql = string.Format(@"Select COUNT(1) as Count From (	
+                                            Select v.*,c.IsAuditGM,s.Name as VisaCurrencyStr
+                                            From Grp_VisaInfo v
+                                            left Join Grp_CreditCardPayment c On v.Id = c.CId and CTable=80
+                                            Left Join Sys_SetData s On v.VisaCurrency = s.Id {0}
+                                            ) temp", sqlWhere);
+                    DataCount dataCount = _sqlSugar.SqlQueryable<DataCount>(CountSql).First();
+                    if (dataCount!=null)
+                    {
+                        int count = dataCount.Count;
+                        float totalPage = (float)count / dto.PageSize;//总页数
+                        if (totalPage == 0) totalPage = 1;
+                        else totalPage = (int)Math.Ceiling((double)totalPage);
+
+
+                        ListViewBase<VisaInfoView> rst = new ListViewBase<VisaInfoView>();
+                        rst.DataList = infoViews;
+                        rst.DataCount = count;
+                        rst.CurrPageIndex = dto.PageIndex;
+                        rst.CurrPageSize = dto.PageSize;
+                        return result = new Result() { Code = 0, Msg = "查询成功!", Data = rst };
+                    }
+                }
+            }
+            catch (Exception)
+            {
+                return result = new Result() { Code = -2, Msg = "未知错误" };
+                throw;
+            }
+            return result;
+        }
+        /// <summary>
+        /// 根据签证费用Id查询单条数据及c表数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<Result> PostVisaById(PostVisaByIdDto dto)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+            try
+            {
+                Grp_VisaInfo _VisaInfo = _sqlSugar.Queryable<Grp_VisaInfo>().First(a => a.Id == dto.Id && a.IsDel==0);
+                Grp_CreditCardPayment _CreditCardPayment = _sqlSugar.Queryable<Grp_CreditCardPayment>().First(a=>a.CId==dto.Id && a.IsDel==0 && a.CTable==80);
+                var data = new
+                {
+                    _VisaInfo = _VisaInfo,
+                    _CreditCardPayment = _CreditCardPayment
+                };
+                return result = new Result() { Code = 0, Msg = "暂无数据!", Data = data };
+            }
+            catch (Exception ex)
+            {
+                return result = new Result() { Code = -2, Msg = "未知错误" };
+            }
+        }
+        /// <summary>
+        /// 签证费用录入操作(Status:1.新增,2.修改)
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<Result> OpVisaPrice(OpVisaPriceDto dto)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+            BeginTran();
+            try
+            {
+                int id = 0;
+                Grp_VisaInfo grp_Visa1 = _mapper.Map<Grp_VisaInfo>(dto);
+                Grp_CreditCardPayment c = _mapper.Map<Grp_CreditCardPayment>(dto);
+                c.PayMoney = dto.VisaPrice;
+                c.PaymentCurrency = dto.VisaCurrency;
+                c.Remark = dto.CRemark;
+                c.PayPercentage = 100;
+                c.CTable = 80;
+                c.CId = dto.Id;
+                c.IsAuditGM = 0;
+                if (c.PayDId == 72)
+                {
+                    c.IsPay = 1;
+                }
+                c.RMBPrice = c.RMBPrice;
+                c.DayRate = 1;
+                Grp_TeamRate _TeamRate = _sqlSugar.Queryable<Grp_TeamRate>().First(a => a.DiId == dto.DiId && a.IsDel == 0 && a.CTable == 80);
+                List<CurrencyInfo> currencyInfos = new List<CurrencyInfo>();
+                if (_TeamRate != null)
+                {
+                    Sys_SetData _SetData = _sqlSugar.Queryable<Sys_SetData>().First(a => a.IsDel == 0 && a.Id == c.PaymentCurrency);
+                    if (_SetData!=null)
+                    {
+                        currencyInfos = CommonFun.GetCurrencyChinaToList(_TeamRate.Remark);
+                        CurrencyInfo CurrencyRate = currencyInfos.Where(a => a.CurrencyCode == _SetData.Name).First();
+                        if (CurrencyRate!=null)
+                        {
+                            c.RMBPrice = c.PayMoney * Convert.ToDecimal(CurrencyRate.Rate);
+                            c.DayRate = CurrencyRate.Rate;
+                        }
+                    }
+                }
+               
+                if (dto.Status==1)//添加
+                {
+                    Grp_VisaInfo grp_Visa =_sqlSugar.Queryable<Grp_VisaInfo>().First(a=>a.IsDel==0 && a.VisaCurrency==dto.VisaCurrency && a.VisaPrice==dto.VisaPrice && a.VisaClient==dto.VisaClient);
+                    if (grp_Visa!=null)
+                    {
+                        return result = new Result() { Code = -1, Msg = "该笔费用已存在,请勿重复添加!" };
+                    }
+                    else
+                    {
+                        id = await AddAsyncReturnId(grp_Visa1);
+                        if (id!=0)
+                        {
+                            c.CId = id;
+                            int cId = await _sqlSugar.Insertable(c).ExecuteReturnIdentityAsync();
+                            if (cId != 0)
+                            {
+                                 result = new Result() { Code = 0, Msg = "添加成功!" };
+
+                            }
+                            else
+                            {
+                                RollbackTran();
+                                 result = new Result() { Code = -1, Msg = "添加失败!" };
+                            }
+                        }
+                        else
+                        {
+                            RollbackTran();
+                            result = new Result() { Code = -1, Msg = "添加失败,请稍后重试!" };
+                        }
+                    }
+                    
+                }
+                else if (dto.Status==2)//修改
+                {
+                    
+                    bool res = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_VisaInfo
+                    {
+                        VisaClient = grp_Visa1.VisaClient,
+                        VisaPrice = grp_Visa1.VisaPrice,
+                        VisaCurrency = grp_Visa1.VisaCurrency,
+                        IsThird = grp_Visa1.IsThird,
+                        PassengerType = grp_Visa1.PassengerType,
+                        VisaNumber = grp_Visa1.VisaNumber,
+                        VisaFreeNumber = grp_Visa1.VisaFreeNumber,
+                        Remark = dto.Remark,
+                    });
+                    if (res)
+                    {
+                        int CTable = await _sqlSugar.Updateable<Grp_CreditCardPayment>().Where(a => a.CId == grp_Visa1.Id && a.CTable==80).SetColumns(a => new Grp_CreditCardPayment
+                        {
+                            PayDId = dto.PayDId,
+                            PayMoney = c.PayMoney,
+                            PaymentCurrency = c.PaymentCurrency,
+                            Payee = c.Payee,
+                            OrbitalPrivateTransfer = c.OrbitalPrivateTransfer,
+                            DayRate = c.DayRate,
+                            RMBPrice = c.RMBPrice,
+                            ConsumptionPatterns = c.ConsumptionPatterns,
+                            ConsumptionDate = c.ConsumptionDate,
+                            CTDId = c.CTDId,
+                            CompanyBankNo = c.CompanyBankNo,
+                            OtherBankName = c.OtherBankName,
+                            OtherSideNo = c.OtherSideNo,
+                            OtherSideName = c.OtherSideName,
+                            BankNo = c.BankNo,
+                            CardholderName = c.CardholderName,
+                            Remark = c.Remark,
+
+                        }).ExecuteCommandAsync();
+
+                        result = new Result() { Code = 0, Msg = "修改成功!" };
+                    }
+                    else
+                    {
+                        RollbackTran();
+                        result = new Result() { Code = -1, Msg = "修改失败,请稍后重试!" };
+                    }
+                }
+                CommitTran();
+            }
+            catch (Exception ex)
+            {
+                 result = new Result() { Code = -2, Msg = "未知错误" };
+            }
+            return result;
+        }
+    }
+}

+ 11 - 3
OASystem/OASystem.Infrastructure/Repositories/Login/LoginRepository.cs

@@ -27,7 +27,7 @@ namespace OASystem.Infrastructure.Repositories.Login
         public async Task<Result> Login(LoginDto loginDto)
         public async Task<Result> Login(LoginDto loginDto)
         {
         {
             Result result = new Result() { Code = -2 };
             Result result = new Result() { Code = -2 };
-            string SQLWhere = string.Format("Where Number='{0}'", loginDto.Number);
+            string SQLWhere = string.Format("Where Number='{0}' And Isdel = 0", loginDto.Number);
             string sql = string.Format("Select * From Sys_Users With(NoLock) {0}", SQLWhere);
             string sql = string.Format("Select * From Sys_Users With(NoLock) {0}", SQLWhere);
             Sys_Users _entity = await GetSingleInfoBySqlWithNolockAsync(sql);
             Sys_Users _entity = await GetSingleInfoBySqlWithNolockAsync(sql);
 
 
@@ -37,7 +37,7 @@ namespace OASystem.Infrastructure.Repositories.Login
                 return result;
                 return result;
             }
             }
 
 
-            if (_entity.Password != loginDto.Password)
+            if (!_entity.Password.Equals(loginDto.Password))
             {
             {
                 result.Msg = "账户或密码错误!";
                 result.Msg = "账户或密码错误!";
                 return result;
                 return result;
@@ -104,6 +104,14 @@ namespace OASystem.Infrastructure.Repositories.Login
 
 
             string number = await CreateNumber(registerDto.DepId);
             string number = await CreateNumber(registerDto.DepId);
 
 
+            if (string.IsNullOrEmpty(number))
+            {
+                result.Code = -2;
+                result.Msg = "Number 设置失败,请前往对应部门 备注;里 设置Number前缀!";
+
+                return result;
+            }
+
             Sys_Users _userInfo = new Sys_Users()
             Sys_Users _userInfo = new Sys_Users()
             {
             {
                 CnName = registerDto.CnName,
                 CnName = registerDto.CnName,
@@ -124,7 +132,7 @@ namespace OASystem.Infrastructure.Repositories.Login
                 Seniority = 0, //工龄默认 0
                 Seniority = 0, //工龄默认 0
                 Birthday = Convert.ToDateTime(birthDay),
                 Birthday = Convert.ToDateTime(birthDay),
                 IDCard = registerDto.IdCrad,
                 IDCard = registerDto.IdCrad,
-                StartWorkDate = new DateTime(1990, 1, 1),  //开始工作时间默认最原始时间
+                StartWorkDate = "1900-01-01 00:00:00.000",  //开始工作时间默认最原始时间
                 GraduateInstitutions = registerDto.GraduationSchhol,
                 GraduateInstitutions = registerDto.GraduationSchhol,
                 Professional = registerDto.Major,
                 Professional = registerDto.Major,
                 Education = registerDto.Education, //学历类型
                 Education = registerDto.Education, //学历类型

+ 5 - 1
OASystem/OASystem.Infrastructure/Repositories/Resource/InvitationOfficialActivityDataRepository.cs

@@ -69,7 +69,11 @@ namespace OASystem.Infrastructure.Repositories.Resource
                             Grp_DelegationInfo _DelegationInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(a => a.Id ==int.Parse(DelegationName[i]));
                             Grp_DelegationInfo _DelegationInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(a => a.Id ==int.Parse(DelegationName[i]));
                             if (_DelegationInfo != null) { delegationNameList += _DelegationInfo.TeamName + ","; }
                             if (_DelegationInfo != null) { delegationNameList += _DelegationInfo.TeamName + ","; }
                         }
                         }
-                        item.DelegationStr = delegationNameList.Substring(0,delegationNameList.Length-1);
+                        if (!string.IsNullOrWhiteSpace(delegationNameList))
+                        {
+                            item.DelegationStr = delegationNameList.Substring(0, delegationNameList.Length - 1);
+                        }
+                        
                     }
                     }
                     if (dto.PageSize == 0 && dto.PageIndex == 0)
                     if (dto.PageSize == 0 && dto.PageIndex == 0)
                     {
                     {

+ 1 - 0
OASystem/OASystem.Infrastructure/Repositories/Resource/LocalGuideDataRepository.cs

@@ -66,6 +66,7 @@ namespace OASystem.Infrastructure.Repositories.Resource
                         FitScore = dto.FitScore,
                         FitScore = dto.FitScore,
                         StrainScore = dto.StrainScore,
                         StrainScore = dto.StrainScore,
                         LocalAndChineseScore = dto.LocalAndChineseScore,
                         LocalAndChineseScore = dto.LocalAndChineseScore,
+                        StaffType=dto.StaffType,
                         Remark = dto.Remark,
                         Remark = dto.Remark,
                     });
                     });
                     if (!res)
                     if (!res)

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

@@ -146,9 +146,9 @@ namespace OASystem.Infrastructure.Repositories.System
         public async Task<List<UserInfo>> QueryUser(string sqlWhere)
         public async Task<List<UserInfo>> QueryUser(string sqlWhere)
         {
         {
             string sql = string.Format(@"Select sc.CompanyName,sd.DepName,sjp.JobName,su.* From Sys_Users su 
             string sql = string.Format(@"Select sc.CompanyName,sd.DepName,sjp.JobName,su.* From Sys_Users su 
-                                                        Inner Join Sys_Company sc On su.CompanyId = sc.Id
-                                                        Inner Join Sys_Department sd On su.DepId = sd.Id
-                                                        Inner Join Sys_JobPost sjp On su.JobPostId = sjp.Id {0}", sqlWhere);
+                                                        left Join Sys_Company sc On su.CompanyId = sc.Id
+                                                        left Join Sys_Department sd On su.DepId = sd.Id
+                                                        left Join Sys_JobPost sjp On su.JobPostId = sjp.Id {0}", sqlWhere);
             return await _sqlSugar.SqlQueryable<UserInfo>(sql).ToListAsync();
             return await _sqlSugar.SqlQueryable<UserInfo>(sql).ToListAsync();
 
 
         }
         }

+ 14 - 0
OASystem/OASystem.Infrastructure/Tools/CommonFun.cs

@@ -298,4 +298,18 @@ public static class CommonFun
     }
     }
     #endregion
     #endregion
 
 
+    #region 验证身份证号码
+    /// <summary>
+    /// 正则表达式
+    /// 验证身份证号码
+    /// </summary>
+    /// <param name="idNumber"></param>
+    /// <returns></returns>
+    public static bool ValidateIdNumber(this string idNumber)
+    {
+        string pattern = @"^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}(\d|X)$";
+        Regex regex = new Regex(pattern);
+        return regex.IsMatch(idNumber);
+    }
+    #endregion
 }
 }