Yuejian.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <?php
  2. namespace app\company\controller;
  3. use app\common\controller\Apic;
  4. use think\Db;
  5. /**
  6. * 月检进度表
  7. */
  8. class Yuejian extends Apic
  9. {
  10. protected $noNeedLogin = [];
  11. protected $noNeedRight = [];
  12. protected $table = 'jiance';
  13. public function index(){
  14. $search = [];
  15. //搜师傅
  16. $worker_id = input('worker_id',0);
  17. if(!empty($worker_id)){
  18. $search['jiance.worker_id'] = $worker_id;
  19. }
  20. //搜年份
  21. $year = input('year',date('Y'));
  22. $starttime = strtotime($year.'-01-01');
  23. $endtime = strtotime($year + 1 .'-01-01');
  24. //查出本公司,该师傅,本年所有的服务项目
  25. $jiance_list = Db::name('jiance')
  26. ->where('jiance.deletetime',NULL)
  27. ->where('jiance.company_id',$this->auth->company_id)
  28. ->where('jiance.worker_id',$worker_id)
  29. ->where('jiance.tongjitime','BETWEEN',[$starttime,$endtime])
  30. ->order('jiance.tongjitime','asc')
  31. // ->select(false);echo $jiance_list;exit;
  32. ->select();
  33. // dump($jiance_list);
  34. //公司名
  35. $companyname = Db::name('company')->where('id',$this->auth->company_id)->value('companyname');
  36. //各个项目铺满,并去重
  37. $project_ids = array_column($jiance_list,'uc_id');
  38. $project_list = Db::name('user_company')->where('id','IN',$project_ids)->field('id,projectname,endtime')->select();
  39. // dump($project_list);
  40. //双循环,得到各项目数据
  41. $bottom_list = [];
  42. foreach($project_list as $project){
  43. $i = 1;
  44. //每个project填充
  45. $newline = [
  46. // 'uc_id' => $project['id'],
  47. 'num' => $i,
  48. 'companyname' => $companyname,
  49. 'projectname' => $project['projectname'],
  50. 'endtime' => $project['endtime'],
  51. 'month_01' => 'moren', //本来是default,但是php7.4里 'default'==0 为true
  52. 'month_02' => 'moren',
  53. 'month_03' => 'moren',
  54. 'month_04' => 'moren',
  55. 'month_05' => 'moren',
  56. 'month_06' => 'moren',
  57. 'month_07' => 'moren',
  58. 'month_08' => 'moren',
  59. 'month_09' => 'moren',
  60. 'month_10' => 'moren',
  61. 'month_11' => 'moren',
  62. 'month_12' => 'moren',
  63. ];
  64. //修正每个月的数据
  65. foreach($jiance_list as $key => $jiance){
  66. if($project['id'] == $jiance['uc_id']){
  67. //找到对应月份
  68. $month_key = 'month_'.date('m',$jiance['tongjitime']);
  69. //赋值完成情况
  70. $newline[$month_key] = $jiance['status'];
  71. }
  72. }
  73. $bottom_list[] = $newline;
  74. $i++;
  75. }
  76. unset($i);
  77. //dump($bottom_list);
  78. //循环每月数据,得到顶部统计数据
  79. $mk = ['01','02','03','04','05','06','07','08','09','10','11','12'];
  80. $month_data = [];
  81. foreach($mk as $monnum){
  82. $key = 'month_'.$monnum;
  83. $$key = array_count_values(array_column($bottom_list,$key));
  84. // $$key['count'] = count($bottom_list);
  85. // $$key['moren'] = isset($$key['moren']) ? $$key['moren'] : 0;
  86. $$key['status0'] = isset($$key[0]) ? $$key[0] : 0;
  87. $$key['status1'] = isset($$key[1]) ? $$key[1] : 0;
  88. $$key['total'] = $$key['status0'] + $$key['status1'];
  89. $$key['bili'] = ($$key['total'] == 0 ? 0 : bcdiv($$key['status1'],$$key['total'],2)) . '%';
  90. $month_data[$key] = $$key;
  91. }
  92. //顶部数据
  93. //dump($month_data);
  94. //赋值三行顶部数据
  95. $top1 = [
  96. 'num' => '',
  97. 'companyname' => '比例',
  98. 'projectname' => '',
  99. 'endtime' => '',
  100. 'month_01' => $month_data['month_01']['bili'],
  101. 'month_02' => $month_data['month_02']['bili'],
  102. 'month_03' => $month_data['month_03']['bili'],
  103. 'month_04' => $month_data['month_04']['bili'],
  104. 'month_05' => $month_data['month_05']['bili'],
  105. 'month_06' => $month_data['month_06']['bili'],
  106. 'month_07' => $month_data['month_07']['bili'],
  107. 'month_08' => $month_data['month_08']['bili'],
  108. 'month_09' => $month_data['month_09']['bili'],
  109. 'month_10' => $month_data['month_10']['bili'],
  110. 'month_11' => $month_data['month_11']['bili'],
  111. 'month_12' => $month_data['month_12']['bili'],
  112. ];
  113. $top2 = [
  114. 'num' => '',
  115. 'companyname' => '实际完成数',
  116. 'projectname' => '',
  117. 'endtime' => '',
  118. 'month_01' => $month_data['month_01']['status1'],
  119. 'month_02' => $month_data['month_02']['status1'],
  120. 'month_03' => $month_data['month_03']['status1'],
  121. 'month_04' => $month_data['month_04']['status1'],
  122. 'month_05' => $month_data['month_05']['status1'],
  123. 'month_06' => $month_data['month_06']['status1'],
  124. 'month_07' => $month_data['month_07']['status1'],
  125. 'month_08' => $month_data['month_08']['status1'],
  126. 'month_09' => $month_data['month_09']['status1'],
  127. 'month_10' => $month_data['month_10']['status1'],
  128. 'month_11' => $month_data['month_11']['status1'],
  129. 'month_12' => $month_data['month_12']['status1'],
  130. ];
  131. $top3 = [
  132. 'num' => '',
  133. 'companyname' => '应该完成数',
  134. 'projectname' => '',
  135. 'endtime' => '',
  136. 'month_01' => $month_data['month_01']['total'],
  137. 'month_02' => $month_data['month_02']['total'],
  138. 'month_03' => $month_data['month_03']['total'],
  139. 'month_04' => $month_data['month_04']['total'],
  140. 'month_05' => $month_data['month_05']['total'],
  141. 'month_06' => $month_data['month_06']['total'],
  142. 'month_07' => $month_data['month_07']['total'],
  143. 'month_08' => $month_data['month_08']['total'],
  144. 'month_09' => $month_data['month_09']['total'],
  145. 'month_10' => $month_data['month_10']['total'],
  146. 'month_11' => $month_data['month_11']['total'],
  147. 'month_12' => $month_data['month_12']['total'],
  148. ];
  149. //重整结果集,替换,对号,错号,空白
  150. foreach($bottom_list as $bk => $bottom){
  151. foreach($bottom as $key => $val){
  152. if(strpos($key,'month_') !== false){
  153. if($val == 'moren'){$val = '';}
  154. elseif($val == 1){$val = '✔';}
  155. elseif($val === 0){$val = '✖';}
  156. }
  157. $bottom[$key] = $val;
  158. }
  159. $bottom['endtime'] = date('Y-m-d',$bottom['endtime']);
  160. $bottom_list[$bk] = $bottom;
  161. }
  162. //组合结果
  163. $result[] = $top1;
  164. $result[] = $top2;
  165. $result[] = $top3;
  166. $result = array_merge($result,$bottom_list);
  167. $this->success(1,$result);
  168. }
  169. }