Report.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. <?php
  2. namespace app\admin\controller;
  3. use think\facade\Db;
  4. use think\facade\Validate;
  5. //报表处理类
  6. class Report extends Base
  7. {
  8. //【一、采购日报表】1.咨询单总数
  9. public function zixunTotal()
  10. {
  11. $param = $this->request->only([
  12. 'token',
  13. 'start_date' => date('Y-m-d H:i:s'),
  14. 'end_date' => date('Y-m-d H:i:s'),
  15. ], 'post', 'trim');
  16. $val_params = Validate::rule([
  17. 'start_date' => 'date|elt:end_date',
  18. 'end_date' => 'date',
  19. ]);
  20. if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
  21. $rs = Db::name('good_zixun')
  22. ->alias('gz')
  23. ->field('gz.id,DATE_FORMAT(gz.addtime,"%Y-%m-%d") addtime,gz.createrid,du.itemid,ci.name')
  24. ->leftJoin('depart_user du', 'du.uid=gz.createrid AND du.is_del=0')
  25. ->leftJoin('company_item ci', 'ci.id=du.itemid AND ci.is_del=0')
  26. ->where('gz.is_del', 0)
  27. ->whereBetween('gz.addtime', [$param['start_date'], $param['end_date']])
  28. ->cursor();
  29. $data = [];
  30. foreach ($rs as $value) {
  31. $addtime_stamp = strtotime($value['addtime']);
  32. if (!isset($data[$addtime_stamp])) $data[$addtime_stamp] = [
  33. 'date' => $value['addtime'],
  34. 'list' => [],
  35. ];
  36. if (isset($data[$addtime_stamp]['list'][$value['itemid']])) {
  37. $data[$addtime_stamp]['list'][$value['itemid']]['total']++;
  38. } else {
  39. $data[$addtime_stamp]['list'][$value['itemid']] = [
  40. 'total' => 1,
  41. 'name' => $value['name'],
  42. ];
  43. }
  44. }
  45. //去掉下标
  46. foreach ($data as &$v) {
  47. $v['list'] = array_merge($v['list']);
  48. }
  49. return app_show(0, '请求成功', array_merge($data));
  50. }
  51. //【一、采购日报表】2.采购订单总金额
  52. public function purcheaseOrderSum()
  53. {
  54. $param = $this->request->only([
  55. 'token',
  56. 'start_date' => date('Y-m-d H:i:s'),
  57. 'end_date' => date('Y-m-d H:i:s'),
  58. ], 'post', 'trim');
  59. $val_params = Validate::rule([
  60. 'start_date' => 'date|elt:end_date',
  61. 'end_date' => 'date',
  62. ]);
  63. if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
  64. $rs = Db::name('purchease_order')
  65. ->alias('po')
  66. ->field('po.id,DATE_FORMAT(po.addtime,"%Y-%m-%d") addtime,po.cgder_id,po.total_fee,po.good_num,po.status,du.itemid,ci.name')
  67. ->leftJoin('depart_user du', 'du.uid=po.cgder_id AND du.is_del=0')
  68. ->leftJoin('company_item ci', 'ci.id=du.itemid AND ci.is_del=0')
  69. ->where('po.is_del', 0)
  70. ->whereBetween('po.addtime', [$param['start_date'], $param['end_date']])
  71. ->cursor();
  72. $data = [];
  73. foreach ($rs as $value) {
  74. $addtime_stamp = strtotime($value['addtime']);
  75. if (!isset($data[$addtime_stamp])) {
  76. $data[$addtime_stamp] = [
  77. 'date' => $value['addtime'],//date('Y年m月d日', $addtime_stamp),
  78. 'list' => [],
  79. ];
  80. }
  81. if (!isset($data[$addtime_stamp]['list'][$value['itemid']])) {
  82. $data[$addtime_stamp]['list'][$value['itemid']] = [
  83. 'name' => $value['name'],
  84. 'total_fee' => 0.00,
  85. 'good_num' => 0,
  86. 'wait_total_fee' => 0.00,
  87. 'wait_good_num' => 0,
  88. ];
  89. }
  90. if ($value['status'] == 0) {
  91. $data[$addtime_stamp]['list'][$value['itemid']]['wait_total_fee'] += $value['total_fee'];
  92. $data[$addtime_stamp]['list'][$value['itemid']]['wait_good_num'] += $value['good_num'];
  93. } else {
  94. $data[$addtime_stamp]['list'][$value['itemid']]['total_fee'] += $value['total_fee'];
  95. $data[$addtime_stamp]['list'][$value['itemid']]['good_num'] += $value['good_num'];
  96. }
  97. }
  98. //去除下标
  99. foreach ($data as &$v) {
  100. $v['list'] = array_merge($v['list']);
  101. }
  102. return app_show(0, '请求成功', array_merge($data));
  103. }
  104. //【一、采购日报表】3.采购员回复咨询单数
  105. public function consultBidsSum()
  106. {
  107. $param = $this->request->only([
  108. 'token',
  109. 'start_date' => date('Y-m-d H:i:s'),
  110. 'end_date' => date('Y-m-d H:i:s'),
  111. ], 'post', 'trim');
  112. $val_params = Validate::rule([
  113. 'start_date' => 'date|elt:end_date',
  114. 'end_date' => 'date',
  115. ]);
  116. if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
  117. $rs = Db::name('consult_bids')
  118. ->alias('cb')
  119. ->field('cb.id,DATE_FORMAT(cb.addtime,"%Y-%m-%d") addtime,cb.createrid,cb.creater,c.num,du.itemid,ci.name')
  120. ->leftJoin('consult c', 'c.zxNo=cb.zxNo AND c.is_del=0')
  121. ->leftJoin('depart_user du', 'du.uid=cb.createrid AND du.is_del=0')
  122. ->leftJoin('company_item ci', 'ci.id=du.itemid AND ci.is_del=0')
  123. ->where('cb.is_del', 0)
  124. ->whereBetween('cb.addtime', [$param['start_date'], $param['end_date']])
  125. ->cursor();
  126. $data = [];
  127. $total = 1;
  128. foreach ($rs as $value) {
  129. $addtime_stamp = strtotime($value['addtime']);
  130. if (!isset($data[$addtime_stamp])) {
  131. $data[$addtime_stamp] = [
  132. 'date' => $value['addtime'],//date('Y年m月d日', $addtime_stamp),
  133. 'list' => [],
  134. ];
  135. }
  136. if (!isset($data[$addtime_stamp]['list'][$value['itemid']])) {
  137. $data[$addtime_stamp]['list'][$value['itemid']] = [
  138. 'name' => $value['name'],
  139. 'list' => [],
  140. ];
  141. }
  142. if (!isset($data[$addtime_stamp]['list'][$value['itemid']]['list']['createrid'])) {
  143. $data[$addtime_stamp]['list'][$value['itemid']]['list'][$value['createrid']] = [
  144. 'name' => $value['creater'],
  145. 'order_total' => 0,
  146. 'good_total' => 0,
  147. ];
  148. }
  149. $data[$addtime_stamp]['list'][$value['itemid']]['list'][$value['createrid']]['order_total']++;
  150. $data[$addtime_stamp]['list'][$value['itemid']]['list'][$value['createrid']]['good_total'] += $value['num'];
  151. $total++;
  152. }
  153. //去除下标
  154. foreach ($data as &$v) {
  155. foreach ($v['list'] as &$vv) {
  156. $vv['list'] = array_merge($vv['list']);
  157. }
  158. $v['list'] = array_merge($v['list']);
  159. }
  160. $data[] = ['date' => '汇总', 'list' => ['name' => '', 'list' => ['name' => '', 'order_total' => $total, 'good_total' => 0]]];
  161. return app_show(0, '请求成功', array_merge($data));
  162. }
  163. //【一、采购日报表】4.采购员订单金额
  164. public function purcheaseOrderSumByUser()
  165. {
  166. $param = $this->request->only([
  167. 'token',
  168. 'start_date' => date('Y-m-d H:i:s'),
  169. 'end_date' => date('Y-m-d H:i:s'),
  170. ], 'post', 'trim');
  171. $val_params = Validate::rule([
  172. 'start_date' => 'date|elt:end_date',
  173. 'end_date' => 'date',
  174. ]);
  175. if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
  176. $rs = Db::name('purchease_order')
  177. ->alias('po')
  178. ->field('po.id,DATE_FORMAT(po.addtime,"%Y-%m-%d") addtime,po.cgder_id,po.cgder,po.total_fee,po.good_num,po.status')
  179. ->where('po.is_del', 0)
  180. ->whereBetween('po.addtime', [$param['start_date'], $param['end_date']])
  181. ->cursor();
  182. $data = [];
  183. foreach ($rs as $value) {
  184. $addtime_stamp = strtotime($value['addtime']);
  185. if (!isset($data[$addtime_stamp])) {
  186. $data[$addtime_stamp] = [
  187. 'date' => $value['addtime'],//date('Y年m月d日', $addtime_stamp),
  188. 'list' => [],
  189. ];
  190. }
  191. if (!isset($data[$addtime_stamp]['list'][$value['cgder_id']])) {
  192. $data[$addtime_stamp]['list'][$value['cgder_id']] = [
  193. 'name' => $value['cgder'],
  194. 'total_fee' => 0.00,
  195. 'good_num' => 0,
  196. 'wait_total_fee' => 0.00,
  197. 'wait_good_num' => 0,
  198. ];
  199. }
  200. if ($value['status'] == 0) {
  201. $data[$addtime_stamp]['list'][$value['cgder_id']]['wait_total_fee'] += $value['total_fee'];
  202. $data[$addtime_stamp]['list'][$value['cgder_id']]['wait_good_num'] += $value['good_num'];
  203. } else {
  204. $data[$addtime_stamp]['list'][$value['cgder_id']]['total_fee'] += $value['total_fee'];
  205. $data[$addtime_stamp]['list'][$value['cgder_id']]['good_num'] += $value['good_num'];
  206. }
  207. }
  208. //去除下标
  209. foreach ($data as &$v) {
  210. $v['list'] = array_merge($v['list']);
  211. }
  212. return app_show(0, '请求成功', array_merge($data));
  213. }
  214. //【二、咨询单报表】1.已采反报价信息
  215. public function consultInfoBidsSum()
  216. {
  217. $param = $this->request->only([
  218. 'token',
  219. 'zxNo' => [],
  220. 'start_date' => date('Y-m-d H:i:s'),
  221. 'end_date' => date('Y-m-d H:i:s'),
  222. 'page' => 1,
  223. 'size' => 15,
  224. 'is_export' => 0,//是否导出,1导出,0不导出
  225. ], 'post', 'trim');
  226. $val_params = Validate::rule([
  227. 'start_date' => 'date|elt:end_date',
  228. 'end_date' => 'date',
  229. 'is_export' => 'in:0,1',
  230. ]);
  231. if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
  232. $rs = Db::name('consult_bids')
  233. ->alias('cb')
  234. ->where('cb.is_del', 0);
  235. if (!empty($param['start_date']) && !empty($param['end_date'])) $rs->whereBetween('cb.addtime', [$param['start_date'], $param['end_date']]);
  236. if (!empty($param['zxNo'])) $rs->whereIn('cb.zxNo', $param['zxNo']);
  237. if ($param['is_export'] == 1) {
  238. $data = $rs
  239. ->field('ci.addtime as 咨询时间,cb.bidNo as 采购单反馈单号,cb.zxNo as 咨询订单号,cb.addtime as 回复时间,cb.good_name as 产品名称,s.name as 供应商名称,cb.total_fee 成本合计,cb.delivery_day 物流时间,cb.work_day 产品工期,cb.expire_day 信息有效期,cb.creater 采购员,ci.num 需求数量,ci.arrival_time 要求到货日期,co.salesman 业务人员,csi.companyName 客户名称')->leftJoin('consult_info ci', 'ci.zxNo=cb.zxNo AND ci.is_del=0')
  240. ->leftJoin('consult_order co', 'co.zxNo=cb.zxNo AND co.is_del=0')
  241. ->leftJoin('supplier s', 's.code=cb.supplierNo AND s.is_del=0')
  242. ->leftJoin('customer_info csi', 'csi.companyNo=co.khNo AND csi.is_del=0')
  243. ->select()
  244. ->toArray();
  245. if (empty($data)) return error_show(1005, '没有可供导出的数据');
  246. else {
  247. $headerArr = array_keys($data[0]);
  248. excelSave('咨询单报表-已采反报价信息' . date('YmdHis'), $headerArr, $data);
  249. }
  250. } else {
  251. $total = $rs->count('cb.id');
  252. $data = $rs
  253. ->field('cb.id,ci.addtime,cb.bidNo,cb.zxNo,cb.addtime cbaddtime,cb.good_name,s.name supplier,cb.total_fee,cb.delivery_day,cb.work_day,cb.expire_day,cb.creater,ci.num,ci.arrival_time,co.salesman,csi.companyName')
  254. ->leftJoin('consult_info ci', 'ci.zxNo=cb.zxNo AND ci.is_del=0')
  255. ->leftJoin('consult_order co', 'co.zxNo=cb.zxNo AND co.is_del=0')
  256. ->leftJoin('supplier s', 's.code=cb.supplierNo AND s.is_del=0')
  257. ->leftJoin('customer_info csi', 'csi.companyNo=co.khNo AND csi.is_del=0')
  258. ->page($param['page'], $param['size'])
  259. ->select()
  260. ->toArray();
  261. return app_show(0, '请求成功', ['list' => $data, 'total' => $total]);
  262. }
  263. }
  264. }