PersonnelAttendanceDal.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. using Cksoft.Data;
  2. using Cksoft.Unity;
  3. using DllEapEntity.Dtos;
  4. using Newtonsoft.Json;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Data;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace DllEapDal.OFILM
  11. {
  12. public class PersonnelAttendanceDal
  13. {
  14. private IDatabase db;
  15. public PersonnelAttendanceDal(IDatabase db)
  16. {
  17. this.db = db;
  18. }
  19. public AntdComplexTableDto Get(string name,string rate, string order, DateTime? start, DateTime? end, int pageIndex, int pageSize,ref int total)
  20. {
  21. DateTime starttime, endtime;
  22. if (!start.HasValue)
  23. {
  24. starttime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
  25. }
  26. else
  27. {
  28. starttime = start.Value;
  29. }
  30. if (!end.HasValue)
  31. {
  32. endtime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
  33. }
  34. else
  35. {
  36. endtime = end.Value;
  37. }
  38. int frist = (pageIndex - 1) * pageSize ;
  39. int last = frist + pageSize;
  40. List<string> list = new List<string>();
  41. string pdate = "";
  42. int s = 0;
  43. for (DateTime i = starttime; i <= endtime; i = i.AddDays(1))
  44. {
  45. if (SundayAsync(i).Result)
  46. {
  47. continue;
  48. }
  49. s += 1;
  50. list.Add($@"TO_DATE('{i.ToString("yyyy-MM-dd 00:00:00")}', 'yyyy-mm-dd hh24:mi:ss')");
  51. var date = i.ToString("yyyy-MM-dd");
  52. pdate += $" ,max(CASE WHEN PDate=TO_DATE('{i.ToString("yyyy-MM-dd 00:00:00")}', 'yyyy-mm-dd hh24:mi:ss') THEN CLOCK_IN END) as \"{ date}\" ";
  53. }
  54. string js = string.Empty; ;
  55. string str = string.Empty;
  56. if (list != null && list.Count > 0)
  57. {
  58. js = JsonConvert.SerializeObject(list).ToString().Replace("[", "(").Replace("]", ")").Replace("\"", "");
  59. str = $@" and pdate in {js}";
  60. }
  61. string condition = string.Empty;
  62. if (!string.IsNullOrEmpty(name))
  63. {
  64. str += $@" and a.name like '%{name}%' ";
  65. }
  66. if (!string.IsNullOrEmpty(rate))
  67. {
  68. str += $@" and b.rate='{rate}' ";
  69. }
  70. string ss=string.Empty;
  71. if (!string.IsNullOrEmpty(order))
  72. {
  73. ss += $@"ORDER BY rate {order}";
  74. }
  75. string sql = $@"SELECT
  76. *
  77. FROM
  78. (
  79. SELECT
  80. t.*,
  81. ROWNUM AS rowno
  82. FROM(select a.name name,a.WORK_NUM WORK_NUM,b.rate rate{pdate}
  83. from department_clock_in_off_543 a LEFT JOIN(SELECT
  84. WORK_NUM,
  85. ROUND(COUNT(CLOCK_IN) / {s}, 2)*100 rate
  86. FROM
  87. department_clock_in_off_543
  88. WHERE
  89. PDATE IN {js}
  90. AND CLOCK_IN is NOT NULL
  91. GROUP BY WORK_NUM) b on a.WORK_NUM = b.WORK_NUM
  92. WHERE
  93. 1=1 {str} GROUP BY a.WORK_NUM,a.name,b.rate {ss} )t)tt where tt.rowno between { frist } and {last}";
  94. string ssql = $@"select count(1)
  95. from department_clock_in_off_543 a LEFT JOIN(SELECT
  96. WORK_NUM,
  97. ROUND(COUNT(CLOCK_IN) / { s}, 2)*100 rate
  98. FROM
  99. department_clock_in_off_543
  100. WHERE
  101. PDATE IN { js}
  102. AND CLOCK_IN is NOT NULL
  103. GROUP BY WORK_NUM) b on a.WORK_NUM = b.WORK_NUM
  104. WHERE
  105. 1 = 1 { str}
  106. ";
  107. total = Convert.ToInt32(db.FindObject(ssql));
  108. DataTable dt = db.FindTable(sql);
  109. AntdComplexTableDto data = new AntdComplexTableDto();
  110. var header = new List<AntdColumn>();
  111. if (dt != null && dt.Columns.Count > 0)
  112. {
  113. foreach (DataColumn item in dt.Columns)
  114. {
  115. if(item.ColumnName!= "ROWNO")
  116. header.Add(new AntdColumn { ColName = item.ColumnName });
  117. }
  118. }
  119. data.Columns = header;
  120. data.Datas = dt;
  121. return data;
  122. }
  123. private async Task<bool> SundayAsync(DateTime time)
  124. {
  125. /* var webClient = new System.Net.WebClient();
  126. var PostVars = new System.Collections.Specialized.NameValueCollection
  127. {
  128. { "d", time.ToString("yyyyMMdd") }//参数
  129. };
  130. var byteResult = await webClient.UploadValuesTaskAsync("http://tool.bitefu.net/jiari/", "POST", PostVars);//请求地址,传参方式,参数集合
  131. var result = Encoding.UTF8.GetString(byteResult);//获取返回值
  132. if (result == "1" || result == "2")
  133. {
  134. return true;
  135. }
  136. else
  137. {
  138. return false;
  139. }*/
  140. if (time.DayOfWeek==DayOfWeek.Sunday||time.DayOfWeek==DayOfWeek.Saturday)
  141. {
  142. return true;
  143. }
  144. else
  145. {
  146. return false;
  147. }
  148. }
  149. }
  150. }