Yuejian.php 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. <?php
  2. namespace app\company\controller;
  3. use app\common\controller\Apic;
  4. use think\Db;
  5. use app\common\library\ExcelCsv;
  6. /**
  7. * 月检进度表
  8. */
  9. class Yuejian extends Apic
  10. {
  11. protected $noNeedLogin = [];
  12. protected $noNeedRight = [];
  13. protected $table = 'jiance';
  14. public function index(){
  15. $search = [];
  16. //搜师傅
  17. $worker_id = input('worker_id',0);
  18. if(!empty($worker_id)){
  19. $search['jiance.worker_id'] = $worker_id;
  20. }
  21. //搜年份
  22. $year = input('year',date('Y'));
  23. $starttime = strtotime($year.'-01-01');
  24. $endtime = strtotime($year + 1 .'-01-01');
  25. //查出本公司,该师傅,本年所有的服务项目
  26. $jiance_list = Db::name('jiance')
  27. ->where('jiance.deletetime',NULL)
  28. ->where('jiance.company_id',$this->auth->company_id)
  29. ->where('jiance.worker_id',$worker_id)
  30. ->where('jiance.tongjitime','BETWEEN',[$starttime,$endtime])
  31. ->order('jiance.tongjitime','asc')
  32. // ->select(false);echo $jiance_list;exit;
  33. ->select();
  34. // dump($jiance_list);
  35. //公司名
  36. $companyname = Db::name('company')->where('id',$this->auth->company_id)->value('companyname');
  37. //各个项目铺满,并去重
  38. $project_ids = array_column($jiance_list,'uc_id');
  39. $project_list = Db::name('user_company')->where('id','IN',$project_ids)->field('id,projectname,endtime')->select();
  40. // dump($project_list);
  41. //双循环,得到各项目数据
  42. $bottom_list = [];
  43. foreach($project_list as $project){
  44. $i = 1;
  45. //每个project填充
  46. $newline = [
  47. // 'uc_id' => $project['id'],
  48. 'num' => $i,
  49. 'companyname' => $companyname,
  50. 'projectname' => $project['projectname'],
  51. 'endtime' => $project['endtime'],
  52. 'month_01' => 'moren',
  53. 'month_02' => 'moren',
  54. 'month_03' => 'moren',
  55. 'month_04' => 'moren',
  56. 'month_05' => 'moren',
  57. 'month_06' => 'moren',
  58. 'month_07' => 'moren',
  59. 'month_08' => 'moren',
  60. 'month_09' => 'moren',
  61. 'month_10' => 'moren',
  62. 'month_11' => 'moren',
  63. 'month_12' => 'moren',
  64. ];
  65. //修正每个月的数据
  66. foreach($jiance_list as $key => $jiance){
  67. if($project['id'] == $jiance['uc_id']){
  68. //找到对应月份
  69. $month_key = 'month_'.date('m',$jiance['tongjitime']);
  70. //赋值完成情况
  71. $newline[$month_key] = $jiance['status'];
  72. }
  73. }
  74. $bottom_list[] = $newline;
  75. $i++;
  76. }
  77. unset($i);
  78. //dump($bottom_list);
  79. //循环每月数据,得到顶部统计数据
  80. $mk = ['01','02','03','04','05','06','07','08','09','10','11','12'];
  81. $month_data = [];
  82. foreach($mk as $monnum){
  83. $key = 'month_'.$monnum;
  84. $$key = array_count_values(array_column($bottom_list,$key));
  85. // $$key['count'] = count($bottom_list);
  86. // $$key['moren'] = isset($$key['moren']) ? $$key['moren'] : 0;
  87. $$key['status0'] = isset($$key[0]) ? $$key[0] : 0;
  88. $$key['status1'] = isset($$key[1]) ? $$key[1] : 0;
  89. $$key['total'] = $$key['status0'] + $$key['status1'];
  90. $$key['bili'] = ( $$key['total'] == 0 ? 0 : bcmul(bcdiv($$key['status1'],$$key['total'],4),100,2) ) . '%';
  91. $month_data[$key] = $$key;
  92. }
  93. //顶部数据
  94. //dump($month_data);
  95. //赋值三行顶部数据
  96. $top1 = [
  97. 'num' => '',
  98. 'companyname' => '比例',
  99. 'projectname' => '',
  100. 'endtime' => '',
  101. 'month_01' => $month_data['month_01']['bili'],
  102. 'month_02' => $month_data['month_02']['bili'],
  103. 'month_03' => $month_data['month_03']['bili'],
  104. 'month_04' => $month_data['month_04']['bili'],
  105. 'month_05' => $month_data['month_05']['bili'],
  106. 'month_06' => $month_data['month_06']['bili'],
  107. 'month_07' => $month_data['month_07']['bili'],
  108. 'month_08' => $month_data['month_08']['bili'],
  109. 'month_09' => $month_data['month_09']['bili'],
  110. 'month_10' => $month_data['month_10']['bili'],
  111. 'month_11' => $month_data['month_11']['bili'],
  112. 'month_12' => $month_data['month_12']['bili'],
  113. ];
  114. $top2 = [
  115. 'num' => '',
  116. 'companyname' => '实际完成数',
  117. 'projectname' => '',
  118. 'endtime' => '',
  119. 'month_01' => $month_data['month_01']['status1'],
  120. 'month_02' => $month_data['month_02']['status1'],
  121. 'month_03' => $month_data['month_03']['status1'],
  122. 'month_04' => $month_data['month_04']['status1'],
  123. 'month_05' => $month_data['month_05']['status1'],
  124. 'month_06' => $month_data['month_06']['status1'],
  125. 'month_07' => $month_data['month_07']['status1'],
  126. 'month_08' => $month_data['month_08']['status1'],
  127. 'month_09' => $month_data['month_09']['status1'],
  128. 'month_10' => $month_data['month_10']['status1'],
  129. 'month_11' => $month_data['month_11']['status1'],
  130. 'month_12' => $month_data['month_12']['status1'],
  131. ];
  132. $top3 = [
  133. 'num' => '',
  134. 'companyname' => '应该完成数',
  135. 'projectname' => '',
  136. 'endtime' => '',
  137. 'month_01' => $month_data['month_01']['total'],
  138. 'month_02' => $month_data['month_02']['total'],
  139. 'month_03' => $month_data['month_03']['total'],
  140. 'month_04' => $month_data['month_04']['total'],
  141. 'month_05' => $month_data['month_05']['total'],
  142. 'month_06' => $month_data['month_06']['total'],
  143. 'month_07' => $month_data['month_07']['total'],
  144. 'month_08' => $month_data['month_08']['total'],
  145. 'month_09' => $month_data['month_09']['total'],
  146. 'month_10' => $month_data['month_10']['total'],
  147. 'month_11' => $month_data['month_11']['total'],
  148. 'month_12' => $month_data['month_12']['total'],
  149. ];
  150. $bottom_list_export = $bottom_list;
  151. //重整结果集,替换,对号,错号,空白
  152. foreach($bottom_list as $bk => $bottom){
  153. foreach($bottom as $key => $val){
  154. if(strpos($key,'month_') !== false){
  155. //这里严格用===是因为,php7.4里: '一切字符串'==0 为true
  156. if($val === 'moren'){$val = '';}
  157. elseif($val === 1){$val = '✔';}
  158. elseif($val === 0){$val = '✖';}
  159. }
  160. $bottom[$key] = $val;
  161. }
  162. $bottom['endtime'] = date('Y-m-d',$bottom['endtime']);
  163. $bottom_list[$bk] = $bottom;
  164. }
  165. //重整结果集,替换,对号,错号,空白
  166. foreach($bottom_list_export as $bk => $bottom){
  167. foreach($bottom as $key => $val){
  168. if(strpos($key,'month_') !== false){
  169. //这里严格用===是因为,php7.4里: '一切字符串'==0 为true
  170. if($val === 'moren'){$val = '';}
  171. elseif($val === 1){$val = 'V';}
  172. elseif($val === 0){$val = 'X';}
  173. }
  174. $bottom[$key] = $val;
  175. }
  176. $bottom['endtime'] = date('Y-m-d',$bottom['endtime']);
  177. $bottom_list_export[$bk] = $bottom;
  178. }
  179. //组合结果
  180. $result[] = $top1;
  181. $result[] = $top2;
  182. $result[] = $top3;
  183. $result = array_merge($result,$bottom_list);
  184. //导出excel
  185. $action = input('action','');
  186. if($action == 'export'){
  187. //表头
  188. $excel_header = [
  189. 'num' => '序号',
  190. 'companyname' => '合同单位',
  191. 'projectname' => '项目名称',
  192. 'endtime' => '终止日期',
  193. 'month_01' => '1月',
  194. 'month_02' => '2月',
  195. 'month_03' => '3月',
  196. 'month_04' => '4月',
  197. 'month_05' => '5月',
  198. 'month_06' => '6月',
  199. 'month_07' => '7月',
  200. 'month_08' => '8月',
  201. 'month_09' => '9月',
  202. 'month_10' => '10月',
  203. 'month_11' => '11月',
  204. 'month_12' => '12月',
  205. ];
  206. //内容
  207. $excel_result[] = $top1;
  208. $excel_result[] = $top2;
  209. $excel_result[] = $top3;
  210. $excel_result = array_merge($excel_result,$bottom_list_export);
  211. //文件输出
  212. $worker_info = Db::name('worker')->where('id',$worker_id)->value('truename');
  213. $fileName = $year.'年'.$worker_info.'月检-' . date('Y-m-d-H-i-s');
  214. $ExcelCsv = new ExcelCsv($excel_header, $excel_result);
  215. $data = $ExcelCsv->collection();
  216. $ExcelCsv->download($fileName, $excel_header, $data);
  217. }else{
  218. $this->success(1,$result);
  219. }
  220. }
  221. }