CheckInView.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977
  1. using Microsoft.AspNetCore.Http;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Text.Json.Serialization;
  7. using System.Threading.Tasks;
  8. namespace OASystem.Domain.ViewModels.QiYeWeChat
  9. {
  10. #region 企业微信 API 获取企业打卡规则
  11. /// <summary>
  12. /// 企业微信 API 获取企业打卡规则
  13. /// </summary>
  14. public class CorpCheckInRuleView : ResponseBase
  15. {
  16. /// <summary>打卡规则列表</summary>
  17. public List<CheckInGroup> group { get; set; } = new();
  18. /// <summary>更新时间戳</summary>
  19. public int uptime { get; set; }
  20. }
  21. /// <summary>
  22. /// 打卡规则组
  23. /// </summary>
  24. public class CheckInGroup
  25. {
  26. /// <summary>打卡规则ID</summary>
  27. public uint groupid { get; set; }
  28. /// <summary>打卡规则名称</summary>
  29. public string groupname { get; set; } = string.Empty;
  30. /// <summary>
  31. /// 打卡规则类型
  32. /// 1:固定时间上下班;2:按班次上下班;3:自由上下班
  33. /// </summary>
  34. public uint grouptype { get; set; }
  35. /// <summary>打卡时间配置(支持多个时段,如早/晚班)</summary>
  36. public List<CheckInDate> checkindate { get; set; } = new();
  37. /// <summary>特殊日期-必须打卡日期</summary>
  38. public List<SpecialWorkDay> spe_workdays { get; set; } = new();
  39. /// <summary>特殊日期-不用打卡日期</summary>
  40. public List<SpecialOffDay> spe_offdays { get; set; } = new();
  41. /// <summary>是否同步法定节假日</summary>
  42. public bool sync_holidays { get; set; }
  43. /// <summary>是否非工作日允许打卡</summary>
  44. public bool allow_checkin_offworkday { get; set; }
  45. /// <summary>是否允许提交补卡申请</summary>
  46. public bool allow_apply_offworkday { get; set; }
  47. /// <summary>每月最多补卡次数,-1表示不限制</summary>
  48. public int allow_apply_bk_cnt { get; set; } = -1;
  49. /// <summary>允许补卡时限(天),-1表示不限制</summary>
  50. public int allow_apply_bk_day_limit { get; set; } = -1;
  51. /// <summary>打卡人员范围</summary>
  52. public CheckInRange range { get; set; } = new();
  53. /// <summary>白名单用户ID列表</summary>
  54. public List<string> white_users { get; set; } = new();
  55. /// <summary>创建时间戳</summary>
  56. public int create_time { get; set; }
  57. /// <summary>打卡方式:0-手机;2-智慧考勤机;3-手机+智慧考勤机</summary>
  58. public int type { get; set; }
  59. /// <summary>是否必须拍照打卡</summary>
  60. public bool need_photo { get; set; }
  61. /// <summary>备注时是否允许上传本地图片</summary>
  62. public bool note_can_use_local_pic { get; set; }
  63. /// <summary>WiFi打卡信息列表</summary>
  64. public List<WifiInfo> wifimac_infos { get; set; } = new();
  65. /// <summary>位置打卡信息列表</summary>
  66. public List<LocationInfo> loc_infos { get; set; } = new();
  67. /// <summary>范围外打卡处理方式:0-不允许打卡;1-允许打卡但标记异常;2-允许打卡且不标记异常</summary>
  68. public int option_out_range { get; set; }
  69. /// <summary>是否开启人脸识别打卡</summary>
  70. public bool use_face_detect { get; set; }
  71. /// <summary>规则创建人userid</summary>
  72. public string create_userid { get; set; } = string.Empty;
  73. /// <summary>规则最近编辑人userid</summary>
  74. public string update_userid { get; set; } = string.Empty;
  75. /// <summary>排班信息(仅规则类型为按班次上下班时有效)</summary>
  76. public List<ScheduleInfo> schedulelist { get; set; } = new();
  77. /// <summary>汇报对象信息</summary>
  78. public ReporterInfo reporterinfo { get; set; } = new();
  79. /// <summary>加班规则V1(旧版)</summary>
  80. public OtInfo ot_info { get; set; } = new();
  81. /// <summary>
  82. /// 以下为补充字段(根据实际JSON)
  83. /// </summary>
  84. /// <summary>下班打卡时间间隔(秒)</summary>
  85. public int offwork_interval_time { get; set; }
  86. /// <summary>是否开启人脸活体检测</summary>
  87. public bool open_face_live_detect { get; set; }
  88. /// <summary>次月补卡限制次数,-1表示不限制</summary>
  89. public int buka_limit_next_month { get; set; }
  90. /// <summary>加班规则V2(新版)</summary>
  91. public OtInfoV2 ot_info_v2 { get; set; } = new();
  92. /// <summary>是否同步外出打卡记录</summary>
  93. public bool sync_out_checkin { get; set; }
  94. /// <summary>补卡提醒配置</summary>
  95. public BukaRemind buka_remind { get; set; } = new();
  96. /// <summary>补卡限制类型(0-不限制,1-仅限本人,2-禁止补卡等)</summary>
  97. public int buka_restriction { get; set; }
  98. /// <summary>是否开启特殊日期打卡(如节假日配置)</summary>
  99. public bool open_sp_checkin { get; set; }
  100. /// <summary>打卡方式类型扩展字段</summary>
  101. public int checkin_method_type { get; set; }
  102. }
  103. /// <summary>
  104. /// 打卡日期配置(某一天或一组工作日的规则)
  105. /// </summary>
  106. public class CheckInDate
  107. {
  108. /// <summary>工作日:0-星期日,1-6-星期一到星期六</summary>
  109. public List<int> workdays { get; set; } = new();
  110. /// <summary>上下班时段列表(支持一天多个时段)</summary>
  111. public List<CheckInTime> checkintime { get; set; } = new();
  112. /// <summary>弹性时间设置(单位:秒)</summary>
  113. public int flex_time { get; set; }
  114. /// <summary>下班是否需要打卡(整体规则)</summary>
  115. public bool noneed_offwork { get; set; }
  116. /// <summary>打卡时间限制(毫秒),如限制必须提前多久打卡</summary>
  117. public int limit_aheadtime { get; set; }
  118. /// <summary>允许迟到时间(秒)</summary>
  119. public int flex_on_duty_time { get; set; }
  120. /// <summary>允许早退时间(秒)</summary>
  121. public int flex_off_duty_time { get; set; }
  122. /// <summary>是否允许弹性时间(如弹性上下班)</summary>
  123. public bool allow_flex { get; set; }
  124. /// <summary>迟到规则(如晚走次日可晚到)</summary>
  125. public LateRule late_rule { get; set; } = new();
  126. /// <summary>最多允许早到时间(秒)</summary>
  127. public int max_allow_arrive_early { get; set; }
  128. /// <summary>最多允许迟到时间(秒)</summary>
  129. public int max_allow_arrive_late { get; set; }
  130. /// <summary>大小周配置(可选)</summary>
  131. public BiweeklyInfo biweekly { get; set; } = new();
  132. }
  133. /// <summary>
  134. /// 上下班打卡时段(具体的上班时间、下班时间)
  135. /// </summary>
  136. public class CheckInTime
  137. {
  138. /// <summary>时段ID(适用于一天多个时段)</summary>
  139. public int time_id { get; set; }
  140. /// <summary>上班时间(距离当天0点的秒数)</summary>
  141. public int work_sec { get; set; }
  142. /// <summary>下班时间(距离当天0点的秒数)</summary>
  143. public int off_work_sec { get; set; }
  144. /// <summary>上班提醒时间(秒)</summary>
  145. public int remind_work_sec { get; set; }
  146. /// <summary>下班提醒时间(秒)</summary>
  147. public int remind_off_work_sec { get; set; }
  148. /// <summary>最早休息开始时间(秒)</summary>
  149. public int rest_begin_time { get; set; }
  150. /// <summary>最早休息结束时间(秒)</summary>
  151. public int rest_end_time { get; set; }
  152. /// <summary>是否允许休息</summary>
  153. public bool allow_rest { get; set; }
  154. /// <summary>最早可打卡上班时间(秒)</summary>
  155. public int earliest_work_sec { get; set; }
  156. /// <summary>最晚可打卡上班时间(秒)</summary>
  157. public int latest_work_sec { get; set; }
  158. /// <summary>最早可打卡下班时间(秒)</summary>
  159. public int earliest_off_work_sec { get; set; }
  160. /// <summary>最晚可打卡下班时间(秒)</summary>
  161. public int latest_off_work_sec { get; set; }
  162. /// <summary>上班是否需要打卡</summary>
  163. public bool no_need_checkon { get; set; }
  164. /// <summary>下班是否需要打卡(时段级)</summary>
  165. public bool no_need_checkoff { get; set; }
  166. /// <summary>休息时段列表(一天内可能有多个休息)</summary>
  167. public List<RestTime> rest_times { get; set; } = new();
  168. /// <summary>上班时间(TimeSpan格式,仅用于辅助)</summary>
  169. public TimeSpan WorkTime => TimeSpan.FromSeconds(work_sec);
  170. /// <summary>下班时间(TimeSpan格式,仅用于辅助)</summary>
  171. public TimeSpan OffWorkTime => TimeSpan.FromSeconds(off_work_sec);
  172. }
  173. /// <summary>
  174. /// 特殊工作日(必须打卡)
  175. /// </summary>
  176. public class SpecialWorkDay
  177. {
  178. /// <summary>日期时间戳</summary>
  179. public int timestamp { get; set; }
  180. /// <summary>备注</summary>
  181. public string notes { get; set; } = string.Empty;
  182. /// <summary>打卡时间配置(可覆盖默认时段)</summary>
  183. public List<CheckInTime> checkintime { get; set; } = new();
  184. /// <summary>日期(本地时间)</summary>
  185. public DateTime Date => DateTimeOffset.FromUnixTimeSeconds(timestamp).LocalDateTime;
  186. }
  187. /// <summary>
  188. /// 特殊休息日(不用打卡)
  189. /// </summary>
  190. public class SpecialOffDay
  191. {
  192. /// <summary>日期时间戳</summary>
  193. public int timestamp { get; set; }
  194. /// <summary>备注</summary>
  195. public string notes { get; set; } = string.Empty;
  196. /// <summary>日期(本地时间)</summary>
  197. public DateTime Date => DateTimeOffset.FromUnixTimeSeconds(timestamp).LocalDateTime;
  198. }
  199. /// <summary>
  200. /// 打卡人员范围
  201. /// </summary>
  202. public class CheckInRange
  203. {
  204. /// <summary>成员ID列表</summary>
  205. public List<string> userid { get; set; } = new();
  206. /// <summary>部门ID列表</summary>
  207. public List<string> party_id { get; set; } = new();
  208. /// <summary>标签ID列表</summary>
  209. public List<int> tagid { get; set; } = new();
  210. }
  211. /// <summary>
  212. /// WiFi打卡信息
  213. /// </summary>
  214. public class WifiInfo
  215. {
  216. /// <summary>WiFi名称</summary>
  217. public string wifiname { get; set; } = string.Empty;
  218. /// <summary>WiFi MAC地址 或 BSSID</summary>
  219. public string wifimac { get; set; } = string.Empty;
  220. /// <summary>BSSID(部分场景使用)</summary>
  221. public string bssid { get; set; } = string.Empty;
  222. }
  223. /// <summary>
  224. /// 位置打卡信息
  225. /// </summary>
  226. public class LocationInfo
  227. {
  228. /// <summary>纬度(实际纬度 × 1,000,000)</summary>
  229. public long lat { get; set; }
  230. /// <summary>经度(实际经度 × 1,000,000)</summary>
  231. public long lng { get; set; }
  232. /// <summary>位置名称</summary>
  233. public string loc_title { get; set; } = string.Empty;
  234. /// <summary>位置详细地址</summary>
  235. public string loc_detail { get; set; } = string.Empty;
  236. /// <summary>允许打卡范围(米)</summary>
  237. public int distance { get; set; }
  238. }
  239. /// <summary>
  240. /// 排班信息(按班次上下班时使用)
  241. /// </summary>
  242. public class ScheduleInfo
  243. {
  244. /// <summary>班次ID</summary>
  245. public int schedule_id { get; set; }
  246. /// <summary>班次名称</summary>
  247. public string schedule_name { get; set; } = string.Empty;
  248. /// <summary>班次上下班时段信息</summary>
  249. public List<TimeSection> time_section { get; set; } = new();
  250. /// <summary>允许提前打卡时间(秒)</summary>
  251. public int limit_aheadtime { get; set; }
  252. /// <summary>下班后超过此秒数不允许打下班卡</summary>
  253. public int limit_offtime { get; set; }
  254. /// <summary>下班不需要打卡</summary>
  255. public bool noneed_offwork { get; set; }
  256. /// <summary>是否允许弹性时间</summary>
  257. public bool allow_flex { get; set; }
  258. /// <summary>允许迟到时间(秒)</summary>
  259. public int flex_on_duty_time { get; set; }
  260. /// <summary>允许早退时间(秒)</summary>
  261. public int flex_off_duty_time { get; set; }
  262. /// <summary>迟到规则</summary>
  263. public LateRule late_rule { get; set; } = new();
  264. }
  265. /// <summary>
  266. /// 时段信息(班次中的某个时段)
  267. /// </summary>
  268. public class TimeSection
  269. {
  270. /// <summary>时段ID</summary>
  271. public int time_id { get; set; }
  272. /// <summary>上班时间(秒)</summary>
  273. public int work_sec { get; set; }
  274. /// <summary>下班时间(秒)</summary>
  275. public int off_work_sec { get; set; }
  276. /// <summary>上班提醒时间(秒)</summary>
  277. public int remind_work_sec { get; set; }
  278. /// <summary>下班提醒时间(秒)</summary>
  279. public int remind_off_work_sec { get; set; }
  280. /// <summary>休息时间列表</summary>
  281. public List<RestTime> rest_times { get; set; } = new();
  282. /// <summary>最早休息开始时间(秒)</summary>
  283. public int rest_begin_time { get; set; }
  284. /// <summary>最早休息结束时间(秒)</summary>
  285. public int rest_end_time { get; set; }
  286. /// <summary>是否允许休息</summary>
  287. public bool allow_rest { get; set; }
  288. }
  289. /// <summary>
  290. /// 休息时段
  291. /// </summary>
  292. public class RestTime
  293. {
  294. /// <summary>休息开始时间(秒)</summary>
  295. public int rest_begin_time { get; set; }
  296. /// <summary>休息结束时间(秒)</summary>
  297. public int rest_end_time { get; set; }
  298. }
  299. /// <summary>
  300. /// 迟到规则(晚走次日可晚到)
  301. /// </summary>
  302. public class LateRule
  303. {
  304. /// <summary>是否允许超时下班后次日弹性上班</summary>
  305. public bool allow_offwork_after_time { get; set; }
  306. /// <summary>具体时间规则列表</summary>
  307. public List<TimeRule> timerules { get; set; } = new();
  308. }
  309. /// <summary>
  310. /// 时间规则(加班与次日弹性关系)
  311. /// </summary>
  312. public class TimeRule
  313. {
  314. /// <summary>晚走的时间(秒),即加班时长</summary>
  315. public int offwork_after_time { get; set; }
  316. /// <summary>第二天允许迟到的弹性时间(秒)</summary>
  317. public int onwork_flex_time { get; set; }
  318. }
  319. /// <summary>
  320. /// 汇报对象信息
  321. /// </summary>
  322. public class ReporterInfo
  323. {
  324. /// <summary>汇报对象列表</summary>
  325. public List<Reporter> reporters { get; set; } = new();
  326. /// <summary>汇报对象更新时间戳</summary>
  327. public int updatetime { get; set; }
  328. }
  329. /// <summary>
  330. /// 汇报人
  331. /// </summary>
  332. public class Reporter
  333. {
  334. /// <summary>汇报人userid</summary>
  335. public string userid { get; set; } = string.Empty;
  336. }
  337. /// <summary>
  338. /// 加班时长计算规则(基于打卡时间)
  339. /// </summary>
  340. public class OtCheckInfo
  341. {
  342. /// <summary>工作日加班开始时间(下班后经过此秒数才算加班)</summary>
  343. public int ot_workingday_time_start { get; set; }
  344. /// <summary>工作日最短加班时长(秒)</summary>
  345. public int ot_workingday_time_min { get; set; }
  346. /// <summary>工作日最长加班时长(秒)</summary>
  347. public int ot_workingday_time_max { get; set; }
  348. /// <summary>非工作日最短加班时长(秒)</summary>
  349. public int ot_nonworkingday_time_min { get; set; }
  350. /// <summary>非工作日最长加班时长(秒)</summary>
  351. public int ot_nonworkingday_time_max { get; set; }
  352. /// <summary>非工作日加班跨天时间(秒)</summary>
  353. public int ot_nonworkingday_spanday_time { get; set; }
  354. /// <summary>工作日加班休息扣除配置</summary>
  355. public RestConfig ot_workingday_restinfo { get; set; } = new();
  356. /// <summary>非工作日加班休息扣除配置</summary>
  357. public RestConfig ot_nonworkingday_restinfo { get; set; } = new();
  358. }
  359. /// <summary>
  360. /// 休息时间扣除配置(加班时长中扣除休息时间)
  361. /// </summary>
  362. public class RestConfig
  363. {
  364. /// <summary>扣除类型:0-不扣除;1-按固定时间扣除;2-按加班时长阶梯扣除</summary>
  365. public int type { get; set; }
  366. /// <summary>固定时间扣除规则(type=1时有效)</summary>
  367. public FixTimeRule fix_time_rule { get; set; } = new();
  368. /// <summary>阶梯扣除规则(type=2时有效)</summary>
  369. public CalOtTimeRule cal_ottime_rule { get; set; } = new();
  370. }
  371. /// <summary>
  372. /// 固定时间扣除规则
  373. /// </summary>
  374. public class FixTimeRule
  375. {
  376. /// <summary>固定休息开始时间(秒)</summary>
  377. public int fix_time_begin_sec { get; set; }
  378. /// <summary>固定休息结束时间(秒)</summary>
  379. public int fix_time_end_sec { get; set; }
  380. }
  381. /// <summary>
  382. /// 阶梯扣除规则(按加班时长扣除)
  383. /// </summary>
  384. public class CalOtTimeRule
  385. {
  386. /// <summary>扣除条件列表</summary>
  387. public List<OtTimeItem> items { get; set; } = new();
  388. }
  389. /// <summary>
  390. /// 加班时长扣除条件项
  391. /// </summary>
  392. public class OtTimeItem
  393. {
  394. /// <summary>加班满此秒数后触发扣除</summary>
  395. public int ot_time { get; set; }
  396. /// <summary>对应扣除的休息秒数</summary>
  397. public int rest_time { get; set; }
  398. }
  399. /// <summary>
  400. /// 加班规则V2(新版,结构更细化)
  401. /// </summary>
  402. public class OtInfoV2
  403. {
  404. /// <summary>工作日加班配置</summary>
  405. public WorkdayConf workdayconf { get; set; } = new();
  406. /// <summary>休息日加班配置</summary>
  407. public RestdayConf restdayconf { get; set; } = new();
  408. /// <summary>法定节假日加班配置</summary>
  409. public HolidayConf holidayconf { get; set; } = new();
  410. /// <summary>配置更新时间戳</summary>
  411. public int updatetime { get; set; }
  412. /// <summary>时间单位配置(如加班时长舍入规则)</summary>
  413. public TimeUnitConfig time_unit_config { get; set; } = new();
  414. }
  415. /// <summary>
  416. /// 工作日加班配置
  417. /// </summary>
  418. public class WorkdayConf
  419. {
  420. /// <summary>是否允许加班</summary>
  421. public bool allow_ot { get; set; }
  422. /// <summary>加班计算类型:2-以打卡时间为准(常见)</summary>
  423. public int type { get; set; }
  424. /// <summary>申请/打卡相关配置</summary>
  425. public ApplyInfo apply { get; set; } = new();
  426. /// <summary>是否启用加班转调休/加班费</summary>
  427. public bool ot_trans_enable { get; set; }
  428. /// <summary>转换类型:1-转调休;2-转加班费</summary>
  429. public int ot_trans_type { get; set; }
  430. /// <summary>假期转换配置(如转调休比例)</summary>
  431. public Vacation vacation { get; set; } = new();
  432. /// <summary>加班时长范围限制(秒)</summary>
  433. public int ot_time_range { get; set; }
  434. }
  435. /// <summary>
  436. /// 休息日加班配置(继承WorkdayConf)
  437. /// </summary>
  438. public class RestdayConf : WorkdayConf { }
  439. /// <summary>
  440. /// 法定节假日加班配置(继承WorkdayConf)
  441. /// </summary>
  442. public class HolidayConf : WorkdayConf { }
  443. /// <summary>
  444. /// 申请或打卡相关配置
  445. /// </summary>
  446. //public class ApplyInfo
  447. //{
  448. // /// <summary>休息扣除配置</summary>
  449. // public RestInfo restinfo { get; set; } = new();
  450. // /// <summary>加班开始时间(秒,用于指定从几点开始算加班)</summary>
  451. // public int ot_time_start { get; set; }
  452. //}
  453. /// <summary>
  454. /// 休息扣除信息(V2版本使用)
  455. /// </summary>
  456. public class RestInfo
  457. {
  458. /// <summary>休息扣除类型:0-不扣除;1-指定固定时段扣除</summary>
  459. public int type { get; set; }
  460. /// <summary>固定扣除时段列表</summary>
  461. public List<FixTimeRule> fix_time_rule_list { get; set; } = new();
  462. }
  463. ///// <summary>
  464. ///// 假期转换配置
  465. ///// </summary>
  466. //public class Vacation
  467. //{
  468. // /// <summary>转换比例(如100表示1小时加班转1小时调休)</summary>
  469. // public int trans_ratio { get; set; }
  470. // /// <summary>是否同步到假期余额</summary>
  471. // public bool sync_vacation { get; set; }
  472. //}
  473. /// <summary>
  474. /// 时间单位配置(加班时长舍入规则)
  475. /// </summary>
  476. public class TimeUnitConfig
  477. {
  478. /// <summary>加班时间单位:1-分钟;2-小时</summary>
  479. public int ot_time_unit { get; set; }
  480. /// <summary>每日最大加班时长(秒)</summary>
  481. public int perday_duration_secs { get; set; }
  482. /// <summary>舍入方式:1-向上舍入;2-向下舍入;3-四舍五入</summary>
  483. public int rounding_method { get; set; }
  484. /// <summary>舍入精度:如以30分钟为单位</summary>
  485. public int rounding_precision { get; set; }
  486. /// <summary>步长(秒),用于限制加班时长必须为此值的倍数</summary>
  487. public int step_size { get; set; }
  488. }
  489. /// <summary>
  490. /// 补卡提醒配置
  491. /// </summary>
  492. public class BukaRemind
  493. {
  494. /// <summary>是否开启补卡提醒</summary>
  495. public bool open_remind { get; set; }
  496. /// <summary>每月第几天提醒补卡(如1表示每月1日提醒)</summary>
  497. public int buka_remind_day { get; set; }
  498. /// <summary>每月提醒补卡的月份偏移(0-当月,1-次月)</summary>
  499. public int buka_remind_month { get; set; }
  500. }
  501. /// <summary>
  502. /// 大小周配置
  503. /// </summary>
  504. public class BiweeklyInfo
  505. {
  506. /// <summary>是否开启大小周</summary>
  507. public bool enable_weekday_recurrence { get; set; }
  508. /// <summary>奇数周工作日(0-6,0周日)</summary>
  509. public List<int> odd_workdays { get; set; } = new();
  510. /// <summary>偶数周工作日(0-6,0周日)</summary>
  511. public List<int> even_workdays { get; set; } = new();
  512. }
  513. #endregion
  514. #region 邮件相关
  515. public class EmailRequestDto
  516. {
  517. /// <summary>
  518. /// 收件人邮箱地址列表
  519. /// </summary>
  520. public List<string> ToEmails { get; set; }
  521. /// <summary>
  522. /// 抄送人邮箱地址列表
  523. /// </summary>
  524. public List<string> CcEmails { get; set; }
  525. /// <summary>
  526. /// 密送人邮箱地址列表
  527. /// </summary>
  528. public List<string> BccEmails { get; set; }
  529. /// <summary>
  530. /// 邮件主题
  531. /// </summary>
  532. public string Subject { get; set; }
  533. /// <summary>
  534. /// 邮件正文内容
  535. /// </summary>
  536. public string Body { get; set; }
  537. /// <summary>
  538. /// 附件列表
  539. /// </summary>
  540. public IFormFile[] Files { get; set; }
  541. }
  542. public class Attachment
  543. {
  544. /// <summary>
  545. /// 文件名
  546. /// </summary>
  547. public string file_name { get; set; }
  548. /// <summary>
  549. /// 文件内容(base64编码),所有附件加正文的大小不允许超过50M, 且附件个数不能超过200个
  550. /// </summary>
  551. public string content { get; set; }
  552. }
  553. #endregion
  554. /// <summary>
  555. /// 企业微信 API
  556. /// 打卡月数据
  557. /// </summary>
  558. public class CheckInView:ResponseBase
  559. {
  560. /// <summary>
  561. /// 基础信息
  562. /// </summary>
  563. public List<Data>? datas { get; set; }
  564. }
  565. /// <summary>
  566. /// 基础信息 Data
  567. /// </summary>
  568. public class Data
  569. {
  570. /// <summary>
  571. /// 基础信息
  572. /// </summary>
  573. public Base_Info? base_info { get; set; }
  574. /// <summary>
  575. /// 汇总信息
  576. /// </summary>
  577. public Summary_Info? summary_info { get; set; }
  578. /// <summary>
  579. /// 异常状态统计信息
  580. /// </summary>
  581. public List<Exception_Info>? exception_infos { get; set; }
  582. /// <summary>
  583. /// 假勤统计信息
  584. /// </summary>
  585. public List<Sp_Item>? sp_items { get; set; }
  586. /// <summary>
  587. /// 加班情况
  588. /// </summary>
  589. public Overwork_Info? overwork_info { get; set; }
  590. }
  591. /// <summary>
  592. /// 成员基础信息
  593. /// </summary>
  594. public class Base_Info
  595. {
  596. /// <summary>
  597. /// 记录类型:1-固定上下班;2-外出(此报表中不会出现外出打卡数据);3-按班次上下班;4-自由签到;5-加班;7-无规则
  598. /// </summary>
  599. public int record_type { get; set; }
  600. /// <summary>
  601. /// 打卡人员姓名
  602. /// </summary>
  603. public string? name { get; set; }
  604. /// <summary>
  605. /// 打卡人员别名
  606. /// </summary>
  607. public string? name_ex { get; set; }
  608. /// <summary>
  609. /// 打卡人员所在部门,会显示所有所在部门
  610. /// </summary>
  611. public string? departs_name { get; set; }
  612. /// <summary>
  613. /// 打卡人员账号,即userid
  614. /// </summary>
  615. public string? acctid { get; set; }
  616. /// <summary>
  617. /// 打卡人员所属规则信息
  618. /// </summary>
  619. public Rule_Info? rule_info { get; set; }
  620. }
  621. /// <summary>
  622. /// 打卡人员所属规则信息
  623. /// </summary>
  624. public class Rule_Info
  625. {
  626. /// <summary>
  627. /// 所属规则的id
  628. /// </summary>
  629. public int groupid { get; set; }
  630. /// <summary>
  631. /// 打卡规则名
  632. /// </summary>
  633. public string? groupname { get; set; }
  634. }
  635. /// <summary>
  636. /// 汇总信息
  637. /// </summary>
  638. public class Summary_Info
  639. {
  640. /// <summary>
  641. /// 应打卡天数
  642. /// </summary>
  643. public int work_days { get; set; }
  644. /// <summary>
  645. /// 正常天数
  646. /// </summary>
  647. public int regular_days { get; set; }
  648. /// <summary>
  649. /// 异常天数
  650. /// </summary>
  651. public int except_days { get; set; }
  652. /// <summary>
  653. /// 实际工作时长,为统计周期每日实际工作时长之和
  654. /// </summary>
  655. public int regular_work_sec { get; set; }
  656. /// <summary>
  657. /// 标准工作时长,为统计周期每日标准工作时长之和
  658. /// </summary>
  659. public int standard_work_sec { get; set; }
  660. }
  661. /// <summary>
  662. /// 异常状态统计信息
  663. /// </summary>
  664. public class Exception_Info
  665. {
  666. /// <summary>
  667. /// 异常类型:1-迟到;2-早退;3-缺卡;4-旷工;5-地点异常;6-设备异常
  668. /// </summary>
  669. public int exception { get; set; }
  670. /// <summary>
  671. /// 异常次数,为统计周期内每日此异常次数之和
  672. /// </summary>
  673. public int count { get; set; }
  674. /// <summary>
  675. /// 异常时长(迟到/早退/旷工才有值),为统计周期内每日此异常时长之和
  676. /// </summary>
  677. public int duration { get; set; }
  678. }
  679. /// <summary>
  680. /// 假勤统计信息
  681. /// </summary>
  682. public class Sp_Item
  683. {
  684. /// <summary>
  685. /// 假勤类型:1-请假;2-补卡;3-出差;4-外出;100-外勤
  686. /// </summary>
  687. public int type { get; set; }
  688. /// <summary>
  689. /// 具体请假类型,当type为1请假时,具体的请假类型id,可通过审批相关接口获取假期详情
  690. /// </summary>
  691. public int vacation_id { get; set; }
  692. /// <summary>
  693. /// 假勤次数,为统计周期内每日此假勤发生次数之和
  694. /// </summary>
  695. public int count { get; set; }
  696. /// <summary>
  697. /// 假勤时长,为统计周期内每日此假勤发生时长之和,时长单位为天直接除以86400即为天数,单位为小时直接除以3600即为小时数
  698. /// </summary>
  699. public int duration { get; set; }
  700. /// <summary>
  701. /// 时长单位:0-按天 1-按小时
  702. /// </summary>
  703. public int time_type { get; set; }
  704. /// <summary>
  705. /// 统计项名称
  706. /// </summary>
  707. public string? name { get; set; }
  708. }
  709. /// <summary>
  710. /// 加班情况
  711. /// </summary>
  712. public class Overwork_Info
  713. {
  714. /// <summary>
  715. /// 工作日加班时长
  716. /// </summary>
  717. public int? workday_over_sec { get; set; }
  718. /// <summary>
  719. /// 节假日加班时长
  720. /// </summary>
  721. public int? holidays_over_sec { get; set; }
  722. /// <summary>
  723. /// 休息日加班时长
  724. /// </summary>
  725. public int? restdays_over_sec { get; set; }
  726. }
  727. public class AssessmentByUserListView : ResponseBase
  728. {
  729. public List<AssessmentByUserView> Data { get; set; }
  730. }
  731. public class AssessmentByUserView
  732. {
  733. public string Name { get; set; }
  734. public string Accid { get; set; }
  735. public int Regular_days { get; set; }
  736. public int Except_days { get; set; }
  737. public List<Exception_info> Exception_info_List { get; set; }
  738. public int Work_days { get; set; }
  739. }
  740. public class Exception_info
  741. {
  742. public ErrorType Type { get; set; }
  743. public DateTime Date { get; set; }
  744. public string Info { get; set; }
  745. }
  746. public enum ErrorType
  747. {
  748. 迟到 = 1, // 迟到
  749. 早退 = 2, // 早退
  750. 缺卡 = 3, // 缺卡
  751. 旷工 = 4, // 旷工
  752. 地点异常 = 5, // 地点异常
  753. 设备异常 = 6 // 设备异常
  754. }
  755. public class EmailResult
  756. {
  757. public int errcode { get; set; }
  758. public string errmsg { get; set; }
  759. }
  760. }