Procházet zdrojové kódy

计算工资 增加 外出打卡

leiy před 1 rokem
rodič
revize
5f5ad1a6e5

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

@@ -230,7 +230,7 @@ namespace OASystem.API.Controllers
             var userData = _loginRep.Register(dto);
             if (userData.Result.Code != 0)
             {
-                return Ok(JsonView(false, "注册失败!"));
+                return Ok(JsonView(false, userData.Result.Msg));
             }
 
             return Ok(JsonView(true, userData.Result.Msg));

+ 42 - 1
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -364,7 +364,7 @@ namespace OASystem.API.Controllers
 
             GroupStepForDelegation.CreateWorkStep(dto.GroupId); //创建管控流程
 
-            return Ok(JsonView(groupData.Data));
+            return Ok(JsonView(true,"操作成功!",groupData.Data));
         }
 
         
@@ -2753,6 +2753,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>
         /// 团组模块 - 出入境国家费用标准 - Add Or Update
         /// </summary>

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

@@ -45,7 +45,6 @@ namespace OASystem.API.Controllers
 
         #region 工资表单
 
-
         /// <summary>
         /// 工资 月列表
         /// </summary>
@@ -789,6 +788,29 @@ namespace OASystem.API.Controllers
             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
 
     }

+ 52 - 4
OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

@@ -1,5 +1,6 @@
 using Google.Protobuf.WellKnownTypes;
 using NPOI.HPSF;
+using NPOI.OpenXmlFormats.Dml.Diagram;
 using NPOI.OpenXmlFormats.Spreadsheet;
 using NPOI.SS.Formula.Functions;
 using NPOI.Util;
@@ -75,8 +76,21 @@ namespace OASystem.API.OAMethodLib
                 _result.Msg = "【企业微信】【打卡】【获取时间段内所有日打卡】【Msg】" + checkInDayDataView.errmsg;
                 return _result;
             }
+
+            //获取所有打卡记录 外出
+            CheckInDataView checkInDataView = new CheckInDataView();
+            checkInDataView = await _qiYeWeChatApiService.GetCheckinDataAsync(qyWhchatIdList, 2,startDt, endDt);
+            if (checkInDataView.errcode != 0)
+            {
+                _result.Msg = "【企业微信】【打卡】【获取时间段内所有日打卡记录】【Msg】" + checkInDataView.errmsg;
+                return _result;
+            }
+
+
             //筛选出工作日日报
-            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();
 
             //获取 请假类型 Sp_Detail.template_id
@@ -93,7 +107,7 @@ namespace OASystem.API.OAMethodLib
                 foreach (var pm_wsInfo in pm_WageSheetDattaSources)
                 {
                     string itemName = userNames.Where(it => it.Id == pm_wsInfo.UserId).FirstOrDefault().CnName;
-
+                    
 
                     //补贴 金额
                     decimal meal_subsidy = 0.00M;  // 午餐(午餐10元/天)  补贴 * 计算方式:单日上午请假时长(小时)大于或者等于三小时 没有餐补
@@ -152,7 +166,6 @@ namespace OASystem.API.OAMethodLib
                     //userRoots = userRoots.Distinct().ToList();
                     userRoots = userRoots.OrderBy(it => it.base_info.date).ToList();
 
-
                     int dk_work_days = userRoots.Count;   //应出勤天数 
 
                     if (dk_work_days > work_days)
@@ -176,9 +189,14 @@ namespace OASystem.API.OAMethodLib
 
                         int user_probationary_bk_num = 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();
+
                         #region 迟到 早退 旷工
 
                         int user_cd_zt_num = 0; //早退/迟到 次数 10分钟内 2次以内不记处罚 三次及以上50一次
@@ -408,6 +426,36 @@ namespace OASystem.API.OAMethodLib
                             }
                         }
 
+                        //外出打卡 计算旷工迟到
+                        foreach (var checkInData in checkInDatas)
+                        {
+                            //当前时间是上午还是下午
+                            int timeLong = 0;
+                            string thisTime = string.Format(@"12:00:00");
+                            string wcdkTime = checkInData.checkin_time_dt.ToString("HH:mm:ss");
+                            DateTime wcdkDt = Convert.ToDateTime(wcdkTime);
+
+                            if (Convert.ToDateTime(thisTime) > wcdkDt) //上午
+                            {
+                                DateTime amDt = Convert.ToDateTime("09:00:00");
+                                if (wcdkDt <=  amDt)
+                                {
+                                    continue;
+                                }
+                            }
+                            else
+                            {
+                                DateTime pmDt = Convert.ToDateTime("18:00:00");
+                                if (wcdkDt >= pmDt)
+                                {
+                                    continue;
+                                }
+                            }
+
+
+
+                        }  
+
                         #endregion
 
                         #region 假勤/补卡次数 审批

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

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

@@ -234,6 +234,24 @@ namespace OASystem.Domain.Dtos.Groups
         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>

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

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

+ 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>
     /// 出入境费用info
     /// </summary>

+ 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();
-                if (dto.Id != 0) //新增
+                if (dto.Id == 0) //新增
                 {
                     string selectSql = string.Format(@"Select * From Grp_NationalTravelFee 
                                                    Where IsDel = 0 

+ 8 - 0
OASystem/OASystem.Infrastructure/Repositories/Login/LoginRepository.cs

@@ -104,6 +104,14 @@ namespace OASystem.Infrastructure.Repositories.Login
 
             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()
             {
                 CnName = registerDto.CnName,