ApprovalDataView.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893
  1. using Google.Protobuf.WellKnownTypes;
  2. using Newtonsoft.Json;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Reflection.Metadata.Ecma335;
  7. using System.Text;
  8. using System.Text.Json.Serialization;
  9. using System.Threading.Tasks;
  10. namespace OASystem.Domain.ViewModels.QiYeWeChat
  11. {
  12. /// <summary>
  13. /// 企业微信 审批 View
  14. /// </summary>
  15. public class ApprovalDataView : ResponseBase
  16. {
  17. /// <summary>
  18. /// 拉取的审批单个数,最大值为100,当total参数大于100时,可运用next_spnum参数进行多次拉取
  19. /// </summary>
  20. public int Count { get; set; }
  21. /// <summary>
  22. /// 时间段内的总审批单个数
  23. /// </summary>
  24. public int total { get; set; }
  25. /// <summary>
  26. /// 拉取列表的最后一个审批单号
  27. /// </summary>
  28. public long next_spnum { get; set; }
  29. /// <summary>
  30. /// 审批Data
  31. /// </summary>
  32. public List<Sp_Info>? data { get; set; }
  33. }
  34. /// <summary>
  35. /// 批量获取审批单号 View
  36. /// </summary>
  37. public class ApprovalInfoView : ResponseBase
  38. {
  39. /// <summary>
  40. /// 审批单号列表,包含满足条件的审批申请
  41. /// </summary>
  42. public List<string>? sp_no_list { get; set; }
  43. /// <summary>
  44. /// 后续请求查询的游标,当返回结果没有该字段时表示审批单已经拉取完
  45. /// </summary>
  46. public string? new_next_cursor { get; set; }
  47. }
  48. /// <summary>
  49. /// 审批申请详情 View
  50. /// </summary>
  51. public class ApprovalDetailView : ResponseBase
  52. {
  53. /// <summary>
  54. /// 审批申请详情
  55. /// </summary>
  56. public Sp_Detail? info { get; set; }
  57. }
  58. /// <summary>
  59. /// 申请人信息
  60. /// </summary>
  61. public class Applyer
  62. {
  63. /// <summary>
  64. /// 申请人userid
  65. /// </summary>
  66. public string userid { get; set; }
  67. /// <summary>
  68. /// 申请人所在部门id
  69. /// </summary>
  70. public string partyid { get; set; }
  71. }
  72. /// <summary>
  73. /// 分支审批人
  74. /// </summary>
  75. public class Approver
  76. {
  77. /// <summary>
  78. /// 分支审批人userid
  79. /// </summary>
  80. public string userid { get; set; }
  81. }
  82. /// <summary>
  83. /// 审批节点详情,一个审批节点有多个审批人
  84. /// </summary>
  85. public class DetailsItem
  86. {
  87. /// <summary>
  88. /// 分支审批人
  89. /// </summary>
  90. public Approver approver { get; set; }
  91. /// <summary>
  92. /// 审批意见
  93. /// </summary>
  94. public string speech { get; set; }
  95. /// <summary>
  96. /// 分支审批人审批状态:1-审批中;2-已同意;3-已驳回;4-已转审;11-已退回;12-已加签;13-已同意并加签
  97. /// </summary>
  98. public int sp_status { get; set; }
  99. /// <summary>
  100. /// 节点分支审批人审批操作时间戳,0表示未操作
  101. /// </summary>
  102. public int sptime { get; set; }
  103. /// <summary>
  104. /// 节点分支审批人审批意见附件,media_id具体使用请参考:文档-获取临时素材
  105. /// </summary>
  106. public List<string> media_id { get; set; }
  107. }
  108. /// <summary>
  109. /// 审批流程信息,可能有多个审批节点。
  110. /// </summary>
  111. public class Sp_recordItem
  112. {
  113. /// <summary>
  114. /// 审批节点状态:1-审批中;2-已同意;3-已驳回;4-已转审;11-已退回;12-已加签;13-已同意并加签
  115. /// </summary>
  116. public int sp_status { get; set; }
  117. /// <summary>
  118. /// 节点审批方式:1-或签;2-会签
  119. /// </summary>
  120. public int approverattr { get; set; }
  121. /// <summary>
  122. /// 审批节点详情,一个审批节点有多个审批人
  123. /// </summary>
  124. public List<DetailsItem> details { get; set; }
  125. }
  126. /// <summary>
  127. /// 抄送信息,可能有多个抄送节点
  128. /// </summary>
  129. public class NotifyerItem
  130. {
  131. /// <summary>
  132. /// 节点抄送人userid
  133. /// </summary>
  134. public string userid { get; set; }
  135. }
  136. /// <summary>
  137. /// 控件标题
  138. /// </summary>
  139. public class TitleItem
  140. {
  141. /// <summary>
  142. /// 文本值 中文
  143. /// </summary>
  144. public string text { get; set; }
  145. /// <summary>
  146. /// 文本值 英文值
  147. /// </summary>
  148. public string lang { get; set; }
  149. }
  150. /// <summary>
  151. /// 用户所选选项
  152. /// </summary>
  153. public class OptionsItem
  154. {
  155. /// <summary>
  156. /// 选项key,选项的唯一id,可通过“获取审批模板详情”接口获得
  157. /// </summary>
  158. public string key { get; set; }
  159. /// <summary>
  160. /// 选项值,若配置了多语言则会包含中英文的选项值
  161. /// </summary>
  162. public List<TitleItem> value { get; set; }
  163. }
  164. /// <summary>
  165. /// 请假类型,所选选项与假期管理关联,为假期管理中的假期类型
  166. /// </summary>
  167. public class Selector
  168. {
  169. /// <summary>
  170. /// 选择类型:single-单选;multi-多选,在假勤控件中固定为单选
  171. /// </summary>
  172. public string type { get; set; }
  173. /// <summary>
  174. /// 用户所选选项
  175. /// </summary>
  176. public List<OptionsItem> options { get; set; }
  177. }
  178. /// <summary>
  179. /// 假勤组件时间选择范围
  180. /// </summary>
  181. public class Date_range
  182. {
  183. /// <summary>
  184. /// 时间展示类型:halfday-日期;hour-日期+时间
  185. /// </summary>
  186. public string type { get; set; }
  187. /// <summary>
  188. /// 开始时间
  189. /// </summary>
  190. public long new_begin { get; set; }
  191. /// <summary>
  192. /// 开始时间
  193. /// </summary>
  194. public DateTime new_begin_dt
  195. {
  196. get
  197. {
  198. return new DateTime(new_begin * 10000000 + 621355968000000000L).ToLocalTime();
  199. }
  200. }
  201. /// <summary>
  202. /// 结束时间
  203. /// </summary>
  204. public long new_end { get; set; }
  205. /// <summary>
  206. /// 开始时间
  207. /// </summary>
  208. public DateTime new_end_dt
  209. {
  210. get
  211. {
  212. return new DateTime(new_end * 10000000 + 621355968000000000L).ToLocalTime();
  213. }
  214. }
  215. /// <summary>
  216. /// 请假时长
  217. /// </summary>
  218. public int new_duration { get; set; }
  219. }
  220. /// <summary>
  221. /// 每一天的分片时长信息
  222. /// </summary>
  223. public class Day_itemsItem
  224. {
  225. /// <summary>
  226. /// 日期的00:00:00时间戳,Unix时间
  227. /// </summary>
  228. public long daytime { get; set; }
  229. ///// <summary>
  230. /////
  231. ///// </summary>
  232. //public List<string> time_sections { get; set; }
  233. /// <summary>
  234. /// 分隔当前日期的时长秒数
  235. /// </summary>
  236. public long duration { get; set; }
  237. }
  238. /// <summary>
  239. /// 时长支持按天分片信息, 2020/10/01之前的历史表单不支持时长分片
  240. /// </summary>
  241. public class Slice_info
  242. {
  243. /// <summary>
  244. /// 每一天的分片时长信息
  245. /// </summary>
  246. public List<Day_itemsItem> day_items { get; set; }
  247. /// <summary>
  248. /// 时长计算来源类型: 1--系统自动计算;2--用户修改
  249. /// </summary>
  250. public int state { get; set; }
  251. /// <summary>
  252. /// 总时长,单位是秒
  253. /// </summary>
  254. public long duration { get; set; }
  255. }
  256. /// <summary>
  257. /// 假勤组件
  258. /// </summary>
  259. public class Attendance
  260. {
  261. /// <summary>
  262. /// 假勤组件时间选择范围
  263. /// </summary>
  264. public Date_range date_range { get; set; }
  265. /// <summary>
  266. /// 假勤组件类型:1-请假;2-补卡;3-出差;4-外出;5-加班
  267. /// </summary>
  268. public int type { get; set; }
  269. /// <summary>
  270. /// 时长支持按天分片信息, 2020/10/01之前的历史表单不支持时长分片
  271. /// </summary>
  272. public Slice_info slice_info { get; set; }
  273. }
  274. /// <summary>
  275. /// 假内容,即申请人在此组件内选择的请假信息
  276. /// </summary>
  277. public class Vacation
  278. {
  279. /// <summary>
  280. /// 请假类型,所选选项与假期管理关联,为假期管理中的假期类型
  281. /// </summary>
  282. public Selector selector { get; set; }
  283. /// <summary>
  284. /// 假勤组件
  285. /// </summary>
  286. public Attendance attendance { get; set; }
  287. }
  288. /// <summary>
  289. /// 控件值 ,包含了申请人在各种类型控件中输入的值,不同控件有不同的值,具体说明详见附录
  290. /// </summary>
  291. public class Value
  292. {
  293. /// <summary>
  294. /// 此控件不显示在审批详情中,故value为空
  295. /// </summary>
  296. public object? tips { get; set; }
  297. /// <summary>
  298. /// 成员内容,即申请人在此控件选择的成员,多选模式下可能有多个
  299. /// </summary>
  300. public List<Member> members { get; set; }
  301. /// <summary>
  302. /// 部门内容,即申请人在此控件选择的部门,多选模式下可能有多个
  303. /// </summary>
  304. public List<Department> departments { get; set; }
  305. /// <summary>
  306. /// 文件内容,即申请人在此控件上传的文件内容,可能有多个
  307. /// </summary>
  308. public List<File_Info> files { get; set; }
  309. /// <summary>
  310. /// 明细内容,一个明细控件可能包含多个子明细
  311. /// </summary>
  312. public List<Children> children { get; set; }
  313. /// <summary>
  314. ///
  315. /// </summary>
  316. public List<string> stat_field { get; set; }
  317. /// <summary>
  318. /// 请假内容,即申请人在此组件内选择的请假信息
  319. /// </summary>
  320. public Vacation vacation { get; set; }
  321. ///// <summary>
  322. /////
  323. ///// </summary>
  324. //public List<string> sum_field { get; set; }
  325. /// <summary>
  326. /// 补卡类型模板值
  327. /// </summary>
  328. public Punch_Correction punch_correction { get; set; }
  329. /// <summary>
  330. /// 关联审批单的模板
  331. /// </summary>
  332. public List<Related_Approval> related_approval { get; set; }
  333. ///// <summary>
  334. /////
  335. ///// </summary>
  336. //public List<string> students { get; set; }
  337. ///// <summary>
  338. /////
  339. ///// </summary>
  340. //public List<string> classes { get; set; }
  341. ///// <summary>
  342. /////
  343. ///// </summary>
  344. //public List<string> docs { get; set; }
  345. ///// <summary>
  346. /////
  347. ///// </summary>
  348. //public List<string> wedrive_files { get; set; }
  349. }
  350. /// <summary>
  351. /// 补卡模板 值
  352. /// </summary>
  353. public class Punch_Correction
  354. {
  355. /// <summary>
  356. /// 异常状态说明 状态 未打卡
  357. /// </summary>
  358. public string state { get; set; }
  359. /// <summary>
  360. /// 补卡时间
  361. /// </summary>
  362. public long time { get; set; }
  363. /// <summary>
  364. /// 开始时间
  365. /// </summary>
  366. public DateTime time_dt
  367. {
  368. get
  369. {
  370. return new DateTime(time * 10000000 + 621355968000000000L).ToLocalTime();
  371. }
  372. }
  373. /// <summary>
  374. /// ?
  375. /// </summary>
  376. public long date { get; set; }
  377. }
  378. /// <summary>
  379. /// 部门内容,即申请人在此控件选择的部门,多选模式下可能有多个
  380. /// </summary>
  381. public class Department
  382. {
  383. /// <summary>
  384. /// 部门id
  385. /// </summary>
  386. public string openapi_id { get; set; }
  387. /// <summary>
  388. /// 部门名
  389. /// </summary>
  390. public string name { get; set; }
  391. }
  392. /// <summary>
  393. /// 成员内容,即申请人在此控件选择的成员,多选模式下可能有多个
  394. /// </summary>
  395. public class Member
  396. {
  397. /// <summary>
  398. /// 成员的userid
  399. /// </summary>
  400. public string userid { get; set; }
  401. /// <summary>
  402. /// 成员名
  403. /// </summary>
  404. public string name { get; set; }
  405. }
  406. /// <summary>
  407. /// 文件内容,即申请人在此控件上传的文件内容,可能有多个
  408. /// </summary>
  409. public class File_Info
  410. {
  411. /// <summary>
  412. /// 文件的media_id
  413. /// </summary>
  414. public string file_id { get; set; }
  415. }
  416. /// <summary>
  417. /// 明细内容,一个明细控件可能包含多个子明细
  418. /// </summary>
  419. public class Children
  420. {
  421. public List<ListInfo> list { get; set; }
  422. }
  423. public class ListInfo
  424. {
  425. public string control { get; set; }
  426. public string id { get; set; }
  427. public List<TitleItem> title { get; set; }
  428. public ValueText value { get; set; }
  429. }
  430. public class ValueText
  431. {
  432. public string text { get; set; }
  433. }
  434. /// <summary>
  435. /// 关联审批单的模板
  436. /// </summary>
  437. public class Related_Approval
  438. {
  439. /// <summary>
  440. /// 关联审批单的模板名
  441. /// </summary>
  442. public List<TitleItem> template_names { get; set; }
  443. /// <summary>
  444. /// 关联审批单的审批单号
  445. /// </summary>
  446. public string sp_no { get; set; }
  447. /// <summary>
  448. /// 关联审批单的状态
  449. /// </summary>
  450. public int sp_status { get; set; }
  451. /// <summary>
  452. /// 关联审批单的提单时间
  453. /// </summary>
  454. public long create_time { get; set; }
  455. /// <summary>
  456. /// 关联审批单的提单者
  457. /// </summary>
  458. public string name { get; set; }
  459. }
  460. /// <summary>
  461. /// 审批申请详情,由多个表单控件及其内容组成
  462. /// </summary>
  463. public class ContentsItem
  464. {
  465. /// <summary>
  466. /// 控件类型:
  467. /// Text-文本;Textarea-多行文本;Number-数字;Money-金额;Date-日期/日期+时间;
  468. /// Selector-单选/多选;;Contact-成员/部门;Tips-说明文字;File-附件;Table-明细;
  469. /// Attendance-假勤;Vacation-请假;PunchCorrection-补卡;DateRange-时长
  470. /// </summary>
  471. public string control { get; set; }
  472. /// <summary>
  473. /// 控件id
  474. /// </summary>
  475. public string id { get; set; }
  476. /// <summary>
  477. /// 控件名称 ,若配置了多语言则会包含中英文的控件名称
  478. /// </summary>
  479. public List<TitleItem> title { get; set; }
  480. /// <summary>
  481. /// 控件值 ,包含了申请人在各种类型控件中输入的值,不同控件有不同的值,具体说明详见附录
  482. /// </summary>
  483. public Value value { get; set; }
  484. /// <summary>
  485. ///
  486. /// </summary>
  487. public int display { get; set; }
  488. /// <summary>
  489. ///
  490. /// </summary>
  491. public int require { get; set; }
  492. }
  493. /// <summary>
  494. /// 审批申请数据
  495. /// </summary>
  496. public class Apply_data
  497. {
  498. /// <summary>
  499. /// 审批申请详情,由多个表单控件及其内容组成
  500. /// </summary>
  501. public List<ContentsItem> contents { get; set; }
  502. }
  503. /// <summary>
  504. /// 审批详情
  505. /// </summary>
  506. public class Sp_Detail
  507. {
  508. /// <summary>
  509. /// 审批编号
  510. /// </summary>
  511. public string sp_no { get; set; }
  512. /// <summary>
  513. /// 审批申请类型名称(审批模板名称)
  514. /// </summary>
  515. public string sp_name { get; set; }
  516. /// <summary>
  517. /// 申请单状态:1-审批中;2-已通过;3-已驳回;4-已撤销;6-通过后撤销;7-已删除;10-已支付
  518. /// </summary>
  519. public int sp_status { get; set; }
  520. /// <summary>
  521. /// 审批模板id。可在“获取审批申请详情”、“审批状态变化回调通知”中获得,也可在审批模板的模板编辑页面链接中获得。
  522. /// </summary>
  523. public string template_id { get; set; }
  524. /// <summary>
  525. /// 审批申请提交时间,Unix时间戳
  526. /// </summary>
  527. public long apply_time { get; set; }
  528. /// <summary>
  529. /// 开始时间
  530. /// </summary>
  531. public DateTime apply_time_dt
  532. {
  533. get
  534. {
  535. return new DateTime(apply_time * 10000000 + 621355968000000000L).ToLocalTime();
  536. }
  537. }
  538. /// <summary>
  539. /// 申请人信息
  540. /// </summary>
  541. public Applyer applyer { get; set; }
  542. /// <summary>
  543. /// 审批流程信息,可能有多个审批节点。
  544. /// </summary>
  545. public List<Sp_recordItem> sp_record { get; set; }
  546. /// <summary>
  547. /// 抄送信息,可能有多个抄送节点
  548. /// </summary>
  549. public List<NotifyerItem> notifyer { get; set; }
  550. /// <summary>
  551. /// 审批申请数据
  552. /// </summary>
  553. public Apply_data apply_data { get; set; }
  554. /// <summary>
  555. /// 审批申请备注信息,可能有多个备注节点
  556. /// </summary>
  557. public List<string> comments { get; set; }
  558. }
  559. /// <summary>
  560. /// 审批申请备注信息
  561. /// </summary>
  562. public class Comment
  563. {
  564. /// <summary>
  565. /// userid
  566. /// </summary>
  567. public Approver commentUserInfo { get; set; }
  568. /// <summary>
  569. /// unix时间戳
  570. /// </summary>
  571. public long commenttime { get; set; }
  572. /// <summary>
  573. /// 备注信息
  574. /// </summary>
  575. public string commentcontent { get; set; }
  576. /// <summary>
  577. /// commentid
  578. /// </summary>
  579. public string commentid { get; set; }
  580. /// <summary>
  581. /// 备注附件id,可能有多个,media_id具体使用请参考:文档-获取临时素材
  582. /// </summary>
  583. public List<string> media_id { get; set; }
  584. }
  585. #region 审批详情 (旧版)
  586. /// <summary>
  587. /// 审批基本信息
  588. /// </summary>
  589. public class Sp_Info
  590. {
  591. /// <summary>
  592. /// 审批名称(请假,报销,自定义审批名称)
  593. /// </summary>
  594. public string? spname { get; set; }
  595. /// <summary>
  596. /// 申请人姓名
  597. /// </summary>
  598. public string? apply_name { get; set; }
  599. /// <summary>
  600. /// 申请人部门
  601. /// </summary>
  602. public string? apply_org { get; set; }
  603. /// <summary>
  604. /// 审批人姓名
  605. /// </summary>
  606. public List<string>? approval_name { get; set; }
  607. /// <summary>
  608. /// 抄送人姓名
  609. /// </summary>
  610. public List<string>? notify_name { get; set; }
  611. /// <summary>
  612. /// 审批状态:1审批中;2 已通过;3已驳回;4已取消;6通过后撤销;10已支付
  613. /// </summary>
  614. public int sp_status { get; set; }
  615. /// <summary>
  616. /// 审批单号
  617. /// </summary>
  618. public long sp_num { get; set; }
  619. /// <summary>
  620. /// 请假类型(只有请假模板审批记录有此数据项)
  621. /// </summary>
  622. public Leave? leave { get; set; }
  623. /// <summary>
  624. /// 审批模板信息
  625. /// </summary>
  626. public Comm? comm { get; set; }
  627. ///// <summary>
  628. ///// 补卡时间
  629. ///// 打卡补卡 筛选使用
  630. ///// </summary>
  631. //public DateTime? comm_applydata_dt
  632. //{
  633. // get
  634. // {
  635. // DateTime? dt = null;
  636. // if (comm == null) return dt;
  637. // if (comm.FillingDt != null)
  638. // {
  639. // dt = comm.FillingDt;
  640. // }
  641. // return dt;
  642. // }
  643. //}
  644. /// <summary>
  645. /// 审批的附件media_id,可使用media/get获取附件
  646. /// </summary>
  647. public List<string>? mediaids { get; set; }
  648. /// <summary>
  649. /// 审批单提交时间
  650. /// Unix时间戳
  651. /// </summary>
  652. public uint apply_time { get; set; }
  653. /// <summary>
  654. /// 审批单提交时间
  655. /// datetime
  656. /// </summary>
  657. public DateTime apply_time_dt
  658. {
  659. get
  660. {
  661. return new DateTime(long.Parse(apply_time.ToString()) * 10000000 + 621355968000000000L).ToLocalTime();
  662. }
  663. }
  664. /// <summary>
  665. /// 审批单提交者的userid
  666. /// </summary>
  667. public string? apply_user_id { get; set; }
  668. }
  669. /// <summary>
  670. /// 审批类型
  671. /// </summary>
  672. public class Leave
  673. {
  674. /// <summary>
  675. /// 请假时间单位:0半天;1小时
  676. /// </summary>
  677. public int timeunit { get; set; }
  678. /// <summary>
  679. /// 请假类型
  680. /// 1年假;2事假;3病假;4调休假;5婚假;6产假;7陪产假;8其他
  681. /// </summary>
  682. public int leave_type { get; set; }
  683. /// <summary>
  684. /// 请假开始时间,unix时间
  685. /// </summary>
  686. public uint start_time { get; set; }
  687. /// <summary>
  688. /// 请假开始时间,datetime时间
  689. /// </summary>
  690. public DateTime start_time_dt
  691. {
  692. get
  693. {
  694. return new DateTime(long.Parse(start_time.ToString()) * 10000000 + 621355968000000000L).ToLocalTime();
  695. }
  696. }
  697. /// <summary>
  698. /// 请假结束时间,unix时间
  699. /// </summary>
  700. public uint end_time { get; set; }
  701. /// <summary>
  702. /// 请假开始时间,datetime时间
  703. /// </summary>
  704. public DateTime end_time_dt
  705. {
  706. get
  707. {
  708. return new DateTime(long.Parse(end_time.ToString()) * 10000000 + 621355968000000000L).ToLocalTime();
  709. }
  710. }
  711. /// <summary>
  712. /// 请假时长,单位小时
  713. /// </summary>
  714. public int duration { get; set; }
  715. /// <summary>
  716. /// 请假事由
  717. /// </summary>
  718. public string? reason { get; set; }
  719. }
  720. /// <summary>
  721. /// 审批模板信息
  722. /// </summary>
  723. public class Comm
  724. {
  725. /// <summary>
  726. /// 模板数据
  727. /// </summary>
  728. public string? apply_data { get; set; }
  729. public List<ApplyInfo>? applydata
  730. {
  731. get
  732. {
  733. List<ApplyInfo> applyInfos = new List<ApplyInfo>();
  734. if (!string.IsNullOrEmpty(apply_data))
  735. {
  736. applyInfos = JsonConvert.DeserializeObject<List<ApplyInfo>>(apply_data);
  737. }
  738. return applyInfos;
  739. }
  740. }
  741. /// <summary>
  742. /// 补卡时间
  743. /// 筛选使用
  744. /// </summary>
  745. public DateTime? FillingDt {
  746. get
  747. {
  748. DateTime? dt = null;
  749. if (applydata != null && applydata.Count > 0)
  750. {
  751. ApplyInfo applyInfo = applydata.Where(it => it.id == "checkin-time").FirstOrDefault();
  752. if (applyInfo != null)
  753. {
  754. dt = applyInfo.valueDt;
  755. }
  756. }
  757. return dt;
  758. }
  759. }
  760. }
  761. /// <summary>
  762. ///
  763. /// </summary>
  764. public class ApplyInfo
  765. {
  766. public string? id { get; set; }
  767. public string? title { get; set; }
  768. public string? type { get; set; }
  769. public object? value { get; set; }
  770. public DateTime? valueDt
  771. {
  772. get
  773. {
  774. if (id == "checkin-time" && value != null)
  775. {
  776. long timeSpan = long.Parse(value.ToString()) / 1000;
  777. return new DateTime(timeSpan * 10000000 + 621355968000000000L).ToLocalTime();
  778. }
  779. return null;
  780. }
  781. }
  782. }
  783. #endregion
  784. }