ApprovalDataView.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896
  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. public string? text { get; set; }
  294. /// <summary>
  295. /// 此控件不显示在审批详情中,故value为空
  296. /// </summary>
  297. public object? tips { get; set; }
  298. /// <summary>
  299. /// 成员内容,即申请人在此控件选择的成员,多选模式下可能有多个
  300. /// </summary>
  301. public List<Member> members { get; set; }
  302. /// <summary>
  303. /// 部门内容,即申请人在此控件选择的部门,多选模式下可能有多个
  304. /// </summary>
  305. public List<Department> departments { get; set; }
  306. /// <summary>
  307. /// 文件内容,即申请人在此控件上传的文件内容,可能有多个
  308. /// </summary>
  309. public List<File_Info> files { get; set; }
  310. /// <summary>
  311. /// 明细内容,一个明细控件可能包含多个子明细
  312. /// </summary>
  313. public List<Children> children { get; set; }
  314. /// <summary>
  315. ///
  316. /// </summary>
  317. public List<string> stat_field { get; set; }
  318. /// <summary>
  319. /// 请假内容,即申请人在此组件内选择的请假信息
  320. /// </summary>
  321. public Vacation vacation { get; set; }
  322. ///// <summary>
  323. /////
  324. ///// </summary>
  325. //public List<string> sum_field { get; set; }
  326. /// <summary>
  327. /// 补卡类型模板值
  328. /// </summary>
  329. public Punch_Correction punch_correction { get; set; }
  330. /// <summary>
  331. /// 关联审批单的模板
  332. /// </summary>
  333. public List<Related_Approval> related_approval { get; set; }
  334. ///// <summary>
  335. /////
  336. ///// </summary>
  337. //public List<string> students { get; set; }
  338. ///// <summary>
  339. /////
  340. ///// </summary>
  341. //public List<string> classes { get; set; }
  342. ///// <summary>
  343. /////
  344. ///// </summary>
  345. //public List<string> docs { get; set; }
  346. ///// <summary>
  347. /////
  348. ///// </summary>
  349. //public List<string> wedrive_files { get; set; }
  350. }
  351. /// <summary>
  352. /// 补卡模板 值
  353. /// </summary>
  354. public class Punch_Correction
  355. {
  356. /// <summary>
  357. /// 异常状态说明 状态 未打卡
  358. /// </summary>
  359. public string state { get; set; }
  360. /// <summary>
  361. /// 补卡时间
  362. /// </summary>
  363. public long time { get; set; }
  364. /// <summary>
  365. /// 开始时间
  366. /// </summary>
  367. public DateTime time_dt
  368. {
  369. get
  370. {
  371. return new DateTime(time * 10000000 + 621355968000000000L).ToLocalTime();
  372. }
  373. }
  374. /// <summary>
  375. /// ?
  376. /// </summary>
  377. public long date { get; set; }
  378. }
  379. /// <summary>
  380. /// 部门内容,即申请人在此控件选择的部门,多选模式下可能有多个
  381. /// </summary>
  382. public class Department
  383. {
  384. /// <summary>
  385. /// 部门id
  386. /// </summary>
  387. public string openapi_id { get; set; }
  388. /// <summary>
  389. /// 部门名
  390. /// </summary>
  391. public string name { get; set; }
  392. }
  393. /// <summary>
  394. /// 成员内容,即申请人在此控件选择的成员,多选模式下可能有多个
  395. /// </summary>
  396. public class Member
  397. {
  398. /// <summary>
  399. /// 成员的userid
  400. /// </summary>
  401. public string userid { get; set; }
  402. /// <summary>
  403. /// 成员名
  404. /// </summary>
  405. public string name { get; set; }
  406. }
  407. /// <summary>
  408. /// 文件内容,即申请人在此控件上传的文件内容,可能有多个
  409. /// </summary>
  410. public class File_Info
  411. {
  412. /// <summary>
  413. /// 文件的media_id
  414. /// </summary>
  415. public string file_id { get; set; }
  416. }
  417. /// <summary>
  418. /// 明细内容,一个明细控件可能包含多个子明细
  419. /// </summary>
  420. public class Children
  421. {
  422. public List<ListInfo> list { get; set; }
  423. }
  424. public class ListInfo
  425. {
  426. public string control { get; set; }
  427. public string id { get; set; }
  428. public List<TitleItem> title { get; set; }
  429. public ValueText value { get; set; }
  430. }
  431. public class ValueText
  432. {
  433. public string text { get; set; }
  434. }
  435. /// <summary>
  436. /// 关联审批单的模板
  437. /// </summary>
  438. public class Related_Approval
  439. {
  440. /// <summary>
  441. /// 关联审批单的模板名
  442. /// </summary>
  443. public List<TitleItem> template_names { get; set; }
  444. /// <summary>
  445. /// 关联审批单的审批单号
  446. /// </summary>
  447. public string sp_no { get; set; }
  448. /// <summary>
  449. /// 关联审批单的状态
  450. /// </summary>
  451. public int sp_status { get; set; }
  452. /// <summary>
  453. /// 关联审批单的提单时间
  454. /// </summary>
  455. public long create_time { get; set; }
  456. /// <summary>
  457. /// 关联审批单的提单者
  458. /// </summary>
  459. public string name { get; set; }
  460. }
  461. /// <summary>
  462. /// 审批申请详情,由多个表单控件及其内容组成
  463. /// </summary>
  464. public class ContentsItem
  465. {
  466. /// <summary>
  467. /// 控件类型:
  468. /// Text-文本;Textarea-多行文本;Number-数字;Money-金额;Date-日期/日期+时间;
  469. /// Selector-单选/多选;;Contact-成员/部门;Tips-说明文字;File-附件;Table-明细;
  470. /// Attendance-假勤;Vacation-请假;PunchCorrection-补卡;DateRange-时长
  471. /// </summary>
  472. public string control { get; set; }
  473. /// <summary>
  474. /// 控件id
  475. /// </summary>
  476. public string id { get; set; }
  477. /// <summary>
  478. /// 控件名称 ,若配置了多语言则会包含中英文的控件名称
  479. /// </summary>
  480. public List<TitleItem> title { get; set; }
  481. /// <summary>
  482. /// 控件值 ,包含了申请人在各种类型控件中输入的值,不同控件有不同的值,具体说明详见附录
  483. /// </summary>
  484. public Value value { get; set; }
  485. /// <summary>
  486. ///
  487. /// </summary>
  488. public int display { get; set; }
  489. /// <summary>
  490. ///
  491. /// </summary>
  492. public int require { get; set; }
  493. }
  494. /// <summary>
  495. /// 审批申请数据
  496. /// </summary>
  497. public class Apply_data
  498. {
  499. /// <summary>
  500. /// 审批申请详情,由多个表单控件及其内容组成
  501. /// </summary>
  502. public List<ContentsItem> contents { get; set; }
  503. }
  504. /// <summary>
  505. /// 审批详情
  506. /// </summary>
  507. public class Sp_Detail
  508. {
  509. /// <summary>
  510. /// 审批编号
  511. /// </summary>
  512. public string sp_no { get; set; }
  513. /// <summary>
  514. /// 审批申请类型名称(审批模板名称)
  515. /// </summary>
  516. public string sp_name { get; set; }
  517. /// <summary>
  518. /// 申请单状态:1-审批中;2-已通过;3-已驳回;4-已撤销;6-通过后撤销;7-已删除;10-已支付
  519. /// </summary>
  520. public int sp_status { get; set; }
  521. /// <summary>
  522. /// 审批模板id。可在“获取审批申请详情”、“审批状态变化回调通知”中获得,也可在审批模板的模板编辑页面链接中获得。
  523. /// </summary>
  524. public string template_id { get; set; }
  525. /// <summary>
  526. /// 审批申请提交时间,Unix时间戳
  527. /// </summary>
  528. public long apply_time { get; set; }
  529. /// <summary>
  530. /// 开始时间
  531. /// </summary>
  532. public DateTime apply_time_dt
  533. {
  534. get
  535. {
  536. return new DateTime(apply_time * 10000000 + 621355968000000000L).ToLocalTime();
  537. }
  538. }
  539. /// <summary>
  540. /// 申请人信息
  541. /// </summary>
  542. public Applyer applyer { get; set; }
  543. /// <summary>
  544. /// 审批流程信息,可能有多个审批节点。
  545. /// </summary>
  546. public List<Sp_recordItem> sp_record { get; set; }
  547. /// <summary>
  548. /// 抄送信息,可能有多个抄送节点
  549. /// </summary>
  550. public List<NotifyerItem> notifyer { get; set; }
  551. /// <summary>
  552. /// 审批申请数据
  553. /// </summary>
  554. public Apply_data apply_data { get; set; }
  555. /// <summary>
  556. /// 审批申请备注信息,可能有多个备注节点
  557. /// </summary>
  558. public List<string> comments { get; set; }
  559. }
  560. /// <summary>
  561. /// 审批申请备注信息
  562. /// </summary>
  563. public class Comment
  564. {
  565. /// <summary>
  566. /// userid
  567. /// </summary>
  568. public Approver commentUserInfo { get; set; }
  569. /// <summary>
  570. /// unix时间戳
  571. /// </summary>
  572. public long commenttime { get; set; }
  573. /// <summary>
  574. /// 备注信息
  575. /// </summary>
  576. public string commentcontent { get; set; }
  577. /// <summary>
  578. /// commentid
  579. /// </summary>
  580. public string commentid { get; set; }
  581. /// <summary>
  582. /// 备注附件id,可能有多个,media_id具体使用请参考:文档-获取临时素材
  583. /// </summary>
  584. public List<string> media_id { get; set; }
  585. }
  586. #region 审批详情 (旧版)
  587. /// <summary>
  588. /// 审批基本信息
  589. /// </summary>
  590. public class Sp_Info
  591. {
  592. /// <summary>
  593. /// 审批名称(请假,报销,自定义审批名称)
  594. /// </summary>
  595. public string? spname { get; set; }
  596. /// <summary>
  597. /// 申请人姓名
  598. /// </summary>
  599. public string? apply_name { get; set; }
  600. /// <summary>
  601. /// 申请人部门
  602. /// </summary>
  603. public string? apply_org { get; set; }
  604. /// <summary>
  605. /// 审批人姓名
  606. /// </summary>
  607. public List<string>? approval_name { get; set; }
  608. /// <summary>
  609. /// 抄送人姓名
  610. /// </summary>
  611. public List<string>? notify_name { get; set; }
  612. /// <summary>
  613. /// 审批状态:1审批中;2 已通过;3已驳回;4已取消;6通过后撤销;10已支付
  614. /// </summary>
  615. public int sp_status { get; set; }
  616. /// <summary>
  617. /// 审批单号
  618. /// </summary>
  619. public long sp_num { get; set; }
  620. /// <summary>
  621. /// 请假类型(只有请假模板审批记录有此数据项)
  622. /// </summary>
  623. public Leave? leave { get; set; }
  624. /// <summary>
  625. /// 审批模板信息
  626. /// </summary>
  627. public Comm? comm { get; set; }
  628. ///// <summary>
  629. ///// 补卡时间
  630. ///// 打卡补卡 筛选使用
  631. ///// </summary>
  632. //public DateTime? comm_applydata_dt
  633. //{
  634. // get
  635. // {
  636. // DateTime? dt = null;
  637. // if (comm == null) return dt;
  638. // if (comm.FillingDt != null)
  639. // {
  640. // dt = comm.FillingDt;
  641. // }
  642. // return dt;
  643. // }
  644. //}
  645. /// <summary>
  646. /// 审批的附件media_id,可使用media/get获取附件
  647. /// </summary>
  648. public List<string>? mediaids { get; set; }
  649. /// <summary>
  650. /// 审批单提交时间
  651. /// Unix时间戳
  652. /// </summary>
  653. public uint apply_time { get; set; }
  654. /// <summary>
  655. /// 审批单提交时间
  656. /// datetime
  657. /// </summary>
  658. public DateTime apply_time_dt
  659. {
  660. get
  661. {
  662. return new DateTime(long.Parse(apply_time.ToString()) * 10000000 + 621355968000000000L).ToLocalTime();
  663. }
  664. }
  665. /// <summary>
  666. /// 审批单提交者的userid
  667. /// </summary>
  668. public string? apply_user_id { get; set; }
  669. }
  670. /// <summary>
  671. /// 审批类型
  672. /// </summary>
  673. public class Leave
  674. {
  675. /// <summary>
  676. /// 请假时间单位:0半天;1小时
  677. /// </summary>
  678. public int timeunit { get; set; }
  679. /// <summary>
  680. /// 请假类型
  681. /// 1年假;2事假;3病假;4调休假;5婚假;6产假;7陪产假;8其他
  682. /// </summary>
  683. public int leave_type { get; set; }
  684. /// <summary>
  685. /// 请假开始时间,unix时间
  686. /// </summary>
  687. public uint start_time { get; set; }
  688. /// <summary>
  689. /// 请假开始时间,datetime时间
  690. /// </summary>
  691. public DateTime start_time_dt
  692. {
  693. get
  694. {
  695. return new DateTime(long.Parse(start_time.ToString()) * 10000000 + 621355968000000000L).ToLocalTime();
  696. }
  697. }
  698. /// <summary>
  699. /// 请假结束时间,unix时间
  700. /// </summary>
  701. public uint end_time { get; set; }
  702. /// <summary>
  703. /// 请假开始时间,datetime时间
  704. /// </summary>
  705. public DateTime end_time_dt
  706. {
  707. get
  708. {
  709. return new DateTime(long.Parse(end_time.ToString()) * 10000000 + 621355968000000000L).ToLocalTime();
  710. }
  711. }
  712. /// <summary>
  713. /// 请假时长,单位小时
  714. /// </summary>
  715. public int duration { get; set; }
  716. /// <summary>
  717. /// 请假事由
  718. /// </summary>
  719. public string? reason { get; set; }
  720. }
  721. /// <summary>
  722. /// 审批模板信息
  723. /// </summary>
  724. public class Comm
  725. {
  726. /// <summary>
  727. /// 模板数据
  728. /// </summary>
  729. public string? apply_data { get; set; }
  730. public List<ApplyInfo>? applydata
  731. {
  732. get
  733. {
  734. List<ApplyInfo> applyInfos = new List<ApplyInfo>();
  735. if (!string.IsNullOrEmpty(apply_data))
  736. {
  737. applyInfos = JsonConvert.DeserializeObject<List<ApplyInfo>>(apply_data);
  738. }
  739. return applyInfos;
  740. }
  741. }
  742. /// <summary>
  743. /// 补卡时间
  744. /// 筛选使用
  745. /// </summary>
  746. public DateTime? FillingDt {
  747. get
  748. {
  749. DateTime? dt = null;
  750. if (applydata != null && applydata.Count > 0)
  751. {
  752. ApplyInfo applyInfo = applydata.Where(it => it.id == "checkin-time").FirstOrDefault();
  753. if (applyInfo != null)
  754. {
  755. dt = applyInfo.valueDt;
  756. }
  757. }
  758. return dt;
  759. }
  760. }
  761. }
  762. /// <summary>
  763. ///
  764. /// </summary>
  765. public class ApplyInfo
  766. {
  767. public string? id { get; set; }
  768. public string? title { get; set; }
  769. public string? type { get; set; }
  770. public object? value { get; set; }
  771. public DateTime? valueDt
  772. {
  773. get
  774. {
  775. if (id == "checkin-time" && value != null)
  776. {
  777. long timeSpan = long.Parse(value.ToString()) / 1000;
  778. return new DateTime(timeSpan * 10000000 + 621355968000000000L).ToLocalTime();
  779. }
  780. return null;
  781. }
  782. }
  783. }
  784. #endregion
  785. }