using Google.Protobuf.WellKnownTypes; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Reflection.Metadata.Ecma335; using System.Text; using System.Text.Json.Serialization; using System.Threading.Tasks; namespace OASystem.Domain.ViewModels.QiYeWeChat { /// <summary> /// 企业微信 审批 View /// </summary> public class ApprovalDataView : ResponseBase { /// <summary> /// 拉取的审批单个数,最大值为100,当total参数大于100时,可运用next_spnum参数进行多次拉取 /// </summary> public int Count { get; set; } /// <summary> /// 时间段内的总审批单个数 /// </summary> public int total { get; set; } /// <summary> /// 拉取列表的最后一个审批单号 /// </summary> public long next_spnum { get; set; } /// <summary> /// 审批Data /// </summary> public List<Sp_Info>? data { get; set; } } /// <summary> /// 审批基本信息 /// </summary> public class Sp_Info { /// <summary> /// 审批名称(请假,报销,自定义审批名称) /// </summary> public string? spname { get; set; } /// <summary> /// 申请人姓名 /// </summary> public string? apply_name { get; set; } /// <summary> /// 申请人部门 /// </summary> public string? apply_org { get; set; } /// <summary> /// 审批人姓名 /// </summary> public List<string>? approval_name { get; set; } /// <summary> /// 抄送人姓名 /// </summary> public List<string>? notify_name { get; set; } /// <summary> /// 审批状态:1审批中;2 已通过;3已驳回;4已取消;6通过后撤销;10已支付 /// </summary> public int sp_status { get; set; } /// <summary> /// 审批单号 /// </summary> public long sp_num { get; set; } /// <summary> /// 请假类型(只有请假模板审批记录有此数据项) /// </summary> public Leave? leave { get; set; } /// <summary> /// 审批模板信息 /// </summary> public Comm? comm { get; set; } ///// <summary> ///// 补卡时间 ///// 打卡补卡 筛选使用 ///// </summary> //public DateTime? comm_applydata_dt //{ // get // { // DateTime? dt = null; // if (comm == null) return dt; // if (comm.FillingDt != null) // { // dt = comm.FillingDt; // } // return dt; // } //} /// <summary> /// 审批的附件media_id,可使用media/get获取附件 /// </summary> public List<string>? mediaids { get; set; } /// <summary> /// 审批单提交时间 /// Unix时间戳 /// </summary> public uint apply_time { get; set; } /// <summary> /// 审批单提交时间 /// datetime /// </summary> public DateTime apply_time_dt { get { return new DateTime(long.Parse(apply_time.ToString()) * 10000000 + 621355968000000000L).ToLocalTime(); } } /// <summary> /// 审批单提交者的userid /// </summary> public string? apply_user_id { get; set; } } /// <summary> /// 审批类型 /// </summary> public class Leave { /// <summary> /// 请假时间单位:0半天;1小时 /// </summary> public int timeunit { get; set; } /// <summary> /// 请假类型 /// 1年假;2事假;3病假;4调休假;5婚假;6产假;7陪产假;8其他 /// </summary> public int leave_type { get; set; } /// <summary> /// 请假开始时间,unix时间 /// </summary> public uint start_time { get; set; } /// <summary> /// 请假开始时间,datetime时间 /// </summary> public DateTime start_time_dt { get { return new DateTime(long.Parse(start_time.ToString()) * 10000000 + 621355968000000000L).ToLocalTime(); } } /// <summary> /// 请假结束时间,unix时间 /// </summary> public uint end_time { get; set; } /// <summary> /// 请假开始时间,datetime时间 /// </summary> public DateTime end_time_dt { get { return new DateTime(long.Parse(end_time.ToString()) * 10000000 + 621355968000000000L).ToLocalTime(); } } /// <summary> /// 请假时长,单位小时 /// </summary> public int duration { get; set; } /// <summary> /// 请假事由 /// </summary> public string? reason { get; set; } } /// <summary> /// 审批模板信息 /// </summary> public class Comm { /// <summary> /// 模板数据 /// </summary> public string? apply_data { get; set; } public List<ApplyInfo>? applydata { get { List<ApplyInfo> applyInfos = new List<ApplyInfo>(); if (!string.IsNullOrEmpty(apply_data)) { applyInfos = JsonConvert.DeserializeObject<List<ApplyInfo>>(apply_data); } return applyInfos; } } /// <summary> /// 补卡时间 /// 筛选使用 /// </summary> public DateTime? FillingDt { get { DateTime? dt = null; if (applydata != null && applydata.Count > 0) { ApplyInfo applyInfo = applydata.Where(it => it.id == "checkin-time").FirstOrDefault(); if (applyInfo != null) { dt = applyInfo.valueDt; } } return dt; } } } /// <summary> /// /// </summary> public class ApplyInfo { public string? id { get; set; } public string? title { get; set; } public string? type { get; set; } public object? value { get; set; } public DateTime? valueDt { get { if (id == "checkin-time" && value != null) { long timeSpan = long.Parse(value.ToString()) / 1000; return new DateTime(timeSpan * 10000000 + 621355968000000000L).ToLocalTime(); } return null; } } } }