ApprovalDataView.cs 24 KB

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