Report.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622
  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. //产品价格和产品导出
  9. public function exportGood()
  10. {
  11. $param = $this->request->only(['date', 'platform_id', 'status'], 'post', 'trim');
  12. $val = Validate::rule([
  13. 'date|筛选时间' => 'require|date',
  14. 'platform_id|筛选平台ID' => 'require|number|gt:0',
  15. 'status|状态' => 'require|number|in:5,6,8',
  16. ]);
  17. if (!$val->check($param)) return error_show(1004, $val->getError());
  18. $where_ladder = [['gl.is_del', '=', 0]];
  19. $where_good = [['g.is_del', '=', 0]];
  20. if (!empty($param['date'])) {
  21. $where_ladder[] = ['gl.addtime', 'between', [$param['date'] . ' 00:00:00', $param['date'] . ' 23:59:59']];
  22. $where_good[] = ['g.addtime', 'between', [$param['date'] . ' 00:00:00', $param['date'] . ' 23:59:59']];
  23. }
  24. if (!empty($param['platform_id'])) {
  25. $where_ladder[] = ['gp.platform_code', '=', $param['platform_id']];
  26. $where_good[] = ['gp.platform_code', '=', $param['platform_id']];
  27. }
  28. if (!empty($param['status'])) {
  29. $where_ladder[] = ['g.status', '=', $param['status']];
  30. $where_good[] = ['g.status', '=', $param['status']];
  31. }
  32. $data = [];
  33. //产品价格
  34. $rs_ladder = Db::name('good_ladder')
  35. ->alias('gl')
  36. ->field('g.good_name 商品名称,gl.market_price 市场价,gl.origin_rate 税率,g.moq 起订量,gl.sale_price 售价,gl.skuCode 商品编码,gl.cost_fee 工艺费,gl.market_platform 对比平台')
  37. ->where($where_ladder)
  38. ->leftJoin('good_platform gp', 'gp.skuCode=gl.skuCode AND gp.is_del=0')
  39. ->leftJoin('good g', 'g.spuCode=gp.spuCode AND g.is_del=0')
  40. ->order('gl.id')
  41. ->select()
  42. ->toArray();
  43. if (!empty($rs_ladder)) {
  44. $data[] = [
  45. 'head' => array_keys($rs_ladder[0]),
  46. 'list' => $rs_ladder,
  47. 'filename' => '产品价格' . date('YmdHis'),
  48. ];
  49. }
  50. //产品
  51. $rs_temp_good = Db::name('good')
  52. ->alias('g')
  53. ->field('"" 一级分类,"" 二级分类, g.cat_id 三级分类,g.good_name 商品名称,g.good_type 商品类型,g.brand_id 商品品牌,\'\' 型号,g.origin_place 产地,g.good_unit 计量单位,g.weight 重量g,\'\' 响应时间,g.lead_time 供货周期,g.good_size 商品尺寸,g.packing_size 装箱尺寸,g.packing_way 包装方式,g.packing_spec 装箱规格,g.packing_list 包装清单,g.delivery_place 发货地,g.delivery_day 物流时间,gp.skuCode 商品编码,g.spuCode')
  54. ->where($where_good)
  55. ->leftJoin('good_platform gp', 'gp.spuCode=g.spuCode AND gp.is_del=0')
  56. ->order('g.id')
  57. ->select()
  58. ->toArray();
  59. $all_good_type = [1 => '定制商品', 2 => '常规商品'];
  60. $all_brand = Db::name('brand')->whereIn('id', array_column($rs_temp_good, '商品品牌'))->where('is_del', 0)->column('brand_name', 'id');
  61. $all_cat = Db::name('cat')
  62. ->alias('c3')
  63. ->whereIn('c3.id', array_column($rs_temp_good, '三级分类'))
  64. ->where('c3.is_del', 0)
  65. ->leftJoin('cat c2', 'c2.id=c3.pid AND c2.is_del=0')
  66. ->leftJoin('cat c1', 'c1.id=c2.pid AND c1.is_del=0')
  67. ->column('c3.cat_name cat_name_3,c2.cat_name cat_name_2,c1.cat_name cat_name_1', 'c3.id');
  68. $all_unit = Db::name('unit')->whereIn('id', array_column($rs_temp_good, '计量单位'))->where('is_del', 0)->column('unit', 'id');
  69. foreach ($rs_temp_good as &$value) {
  70. $value['商品品牌'] = isset($all_brand[$value['商品品牌']]) ? $all_brand[$value['商品品牌']] : '';
  71. $value['商品类型'] = isset($all_good_type[$value['商品类型']]) ? $all_good_type[$value['商品类型']] : '';
  72. $value['一级分类'] = isset($all_cat[$value['三级分类']]['cat_name_1']) ? $all_cat[$value['三级分类']]['cat_name_1'] : '';
  73. $value['二级分类'] = isset($all_cat[$value['三级分类']]['cat_name_2']) ? $all_cat[$value['三级分类']]['cat_name_2'] : '';
  74. $value['三级分类'] = isset($all_cat[$value['三级分类']]['cat_name_3']) ? $all_cat[$value['三级分类']]['cat_name_3'] : '';
  75. $temp = explode(',', $value['产地']);
  76. $value['产地'] = GetAddr(json_encode(['provice_code' => isset($temp[0]) ? $temp[0] : '', 'city_code' => isset($temp[1]) ? $temp[1] : '', 'area_code' => isset($temp[2]) ? $temp[2] : '']));
  77. $value['计量单位'] = isset($all_unit[$value['计量单位']]) ? $all_unit[$value['计量单位']] : '';
  78. $temp_2 = explode(',', $value['发货地']);
  79. $value['发货地'] = GetAddr(json_encode(['provice_code' => isset($temp_2[0]) ? $temp_2[0] : '', 'city_code' => isset($temp_2[1]) ? $temp_2[1] : '', 'area_code' => isset($temp_2[2]) ? $temp_2[2] : '']));
  80. $value['型号'] = Db::name('good_spec')
  81. ->alias('gp')
  82. ->field('')
  83. ->leftJoin('specs s', 's.id=gp.spec_id AND s.is_del=0')
  84. ->leftJoin('spec_value sv', 'sv.id=gp.spec_value_id AND s.is_del=0')
  85. ->where([
  86. 'gp.spuCode' => $value['spuCode'],
  87. 'gp.is_del' => 0,
  88. 's.spec_name' => '型号',
  89. ])
  90. ->value('sv.spec_value', '');
  91. $value['响应时间'] = Db::name('good_spec')
  92. ->alias('gp')
  93. ->field('')
  94. ->leftJoin('specs s', 's.id=gp.spec_id AND s.is_del=0')
  95. ->leftJoin('spec_value sv', 'sv.id=gp.spec_value_id AND s.is_del=0')
  96. ->where([
  97. 'gp.spuCode' => $value['spuCode'],
  98. 'gp.is_del' => 0,
  99. 's.spec_name' => '响应时间',
  100. ])
  101. ->value('sv.spec_value', '');
  102. unset($value['spuCode']);
  103. }
  104. if (!empty($rs_temp_good)) {
  105. $data[] = [
  106. 'head' => array_keys($rs_temp_good[0]),
  107. 'list' => $rs_temp_good,
  108. 'filename' => '产品' . date('YmdHis'),
  109. ];
  110. }
  111. if (empty($data)) return error_show(1005, '没有可供导出的数据');
  112. else excelSaveBatch($data);
  113. }
  114. //【一、采购日报表】1.咨询单总数
  115. public function zixunTotal()
  116. {
  117. $param = $this->request->only([
  118. 'token',
  119. 'start_date' => '',
  120. 'end_date' => '',
  121. 'page' => 1,
  122. 'size' => 15,
  123. ], 'post', 'trim');
  124. $val_params = Validate::rule([
  125. 'start_date' => 'date|elt:end_date',
  126. 'end_date' => 'date',
  127. ]);
  128. if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
  129. $where = [['gz.is_del', '=', 0]];
  130. if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['gz.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
  131. $count = Db::name('good_zixun')
  132. ->alias('gz')
  133. ->field('count(gz.id) total,DATE_FORMAT(gz.addtime,"%Y-%m-%d") addtime,du.itemid,ci.name')
  134. ->leftJoin('depart_user du', 'du.uid=gz.createrid AND du.is_del=0')
  135. ->leftJoin('company_item ci', 'ci.id=du.itemid AND ci.is_del=0')
  136. ->where($where)
  137. ->group('addtime,du.itemid,ci.name')
  138. ->count();
  139. $list = Db::name('good_zixun')
  140. ->alias('gz')
  141. ->field('count(gz.id) total,DATE_FORMAT(gz.addtime,"%Y-%m-%d") addtime,du.itemid,ci.name')
  142. ->leftJoin('depart_user du', 'du.uid=gz.createrid AND du.is_del=0')
  143. ->leftJoin('company_item ci', 'ci.id=du.itemid AND ci.is_del=0')
  144. ->where($where)
  145. ->group('addtime,du.itemid,ci.name')
  146. ->order('addtime')
  147. ->page($param['page'], $param['size'])
  148. ->select()
  149. ->toArray();
  150. return app_show(0, '请求成功', ['list' => $list, 'count' => $count]);
  151. }
  152. //【一、采购日报表】2.采购订单总金额
  153. public function purcheaseOrderSum()
  154. {
  155. $param = $this->request->only([
  156. 'token',
  157. 'start_date' => '',
  158. 'end_date' => '',
  159. 'page' => 1,
  160. 'size' => 15,
  161. ], 'post', 'trim');
  162. $val_params = Validate::rule([
  163. 'start_date' => 'date|elt:end_date',
  164. 'end_date' => 'date',
  165. ]);
  166. if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
  167. $where = [['po.is_del', '=', 0]];
  168. if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['po.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
  169. $rs = Db::name('purchease_order')
  170. ->alias('po')
  171. ->leftJoin('depart_user du', 'du.uid=po.cgder_id AND du.is_del=0')
  172. ->leftJoin('company_item ci', 'ci.id=du.itemid AND ci.is_del=0')
  173. ->where($where)
  174. ->order('addtime,itemid');
  175. //统计条数的时候,不能按照status分组,否则下方列表不准
  176. $count = $rs
  177. ->field('DATE_FORMAT(po.addtime,"%Y-%m-%d") addtime,SUM(po.total_fee) total_fee,SUM(po.good_num) good_num,du.itemid,ci.name,"" wait_total_fee,"" wait_good_num')
  178. ->group('addtime,du.itemid')
  179. ->count();
  180. $list = $rs
  181. ->field('DATE_FORMAT(po.addtime,"%Y-%m-%d") addtime,SUM(po.total_fee) total_fee,SUM(po.good_num) good_num,po.status,du.itemid,ci.name,"" wait_total_fee,"" wait_good_num')
  182. ->page($param['page'], $param['size'])
  183. ->group('addtime,du.itemid,po.status')
  184. ->cursor();
  185. $data = [];
  186. foreach ($list as $value) {
  187. if (!isset($data[$value['addtime']][$value['itemid']])) {
  188. $data[$value['addtime']][$value['itemid']] = [
  189. 'addtime' => $value['addtime'],
  190. 'itemid' => $value['itemid'],
  191. 'name' => $value['name'],
  192. 'total_fee' => 0,
  193. 'good_num' => 0,
  194. 'wait_total_fee' => 0,
  195. 'wait_good_num' => 0,
  196. ];
  197. }
  198. if ($value['status'] == 0) {
  199. $data[$value['addtime']][$value['itemid']]['wait_total_fee'] += $value['total_fee'];
  200. $data[$value['addtime']][$value['itemid']]['wait_good_num'] += $value['good_num'];
  201. } else {
  202. $data[$value['addtime']][$value['itemid']]['total_fee'] += $value['total_fee'];
  203. $data[$value['addtime']][$value['itemid']]['good_num'] += $value['good_num'];
  204. }
  205. }
  206. //去除下标
  207. $da = [];
  208. foreach ($data as $v) {
  209. foreach ($v as $vvv) {
  210. $da[] = $vvv;
  211. }
  212. }
  213. return app_show(0, '请求成功', ['list' => $da, 'count' => $count]);
  214. }
  215. //【一、采购日报表】3.采购员回复咨询单数
  216. public function consultBidsSum()
  217. {
  218. $param = $this->request->only([
  219. 'token',
  220. 'start_date' => '',
  221. 'end_date' => '',
  222. 'page' => 1,
  223. 'size' => 15,
  224. ], 'post', 'trim');
  225. $val_params = Validate::rule([
  226. 'start_date' => 'date|elt:end_date',
  227. 'end_date' => 'date',
  228. ]);
  229. if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
  230. $where = [['cb.is_del', '=', 0]];
  231. if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['cb.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
  232. $count = Db::name('consult_bids')
  233. ->alias('cb')
  234. ->field('DATE_FORMAT(cb.addtime,"%Y-%m-%d") addtime,du.itemid,cb.createrid,SUM(c.num) num,COUNT(cb.id) total,du.nickname,ci.name')
  235. ->leftJoin('consult c', 'c.zxNo=cb.zxNo AND c.is_del=0')
  236. ->leftJoin('depart_user du', 'du.uid=cb.createrid AND du.is_del=0')
  237. ->leftJoin('company_item ci', 'ci.id=du.itemid AND ci.is_del=0')
  238. ->where($where)
  239. ->group('addtime,du.itemid,ci.name ,cb.createrid,du.nickname')
  240. ->order('addtime,du.itemid,ci.name ,cb.createrid,du.nickname')
  241. ->count();
  242. $list = Db::name('consult_bids')
  243. ->alias('cb')
  244. ->field('DATE_FORMAT(cb.addtime,"%Y-%m-%d") addtime,du.itemid,cb.createrid,SUM(c.num) num,COUNT(cb.id) total,du.nickname,ci.name')
  245. ->leftJoin('consult c', 'c.zxNo=cb.zxNo AND c.is_del=0')
  246. ->leftJoin('depart_user du', 'du.uid=cb.createrid AND du.is_del=0')
  247. ->leftJoin('company_item ci', 'ci.id=du.itemid AND ci.is_del=0')
  248. ->where($where)
  249. ->group('addtime,du.itemid,ci.name ,cb.createrid,du.nickname')
  250. ->order('addtime,du.itemid,ci.name ,cb.createrid,du.nickname')
  251. ->page($param['page'], $param['size'])
  252. ->select()
  253. ->toArray();
  254. $list[] = ['addtime' => '汇总', 'itemid' => 0, 'createrid' => 0, 'num' => array_sum(array_column($list, 'num')), 'total' => array_sum(array_column($list, 'total')), 'nickname' => '', 'name' => ''];
  255. return app_show(0, '请求成功', ['list' => $list, 'count' => $count]);
  256. }
  257. //【一、采购日报表】4.采购员订单金额
  258. public function purcheaseOrderSumByUser()
  259. {
  260. $param = $this->request->only([
  261. 'token',
  262. 'start_date' => '',
  263. 'end_date' => '',
  264. 'page' => 1,
  265. 'size' => 15
  266. ], 'post', 'trim');
  267. $val_params = Validate::rule([
  268. 'start_date' => 'date|elt:end_date',
  269. 'end_date' => 'date',
  270. ]);
  271. if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
  272. $where = [['is_del', '=', 0]];
  273. if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
  274. $count = Db::name('purchease_order')
  275. // ->field('DATE_FORMAT(addtime, "%Y-%m-%d") addtime,cgder_id,cgder,SUM(total_fee) total_fee,SUM(good_num) good_num,0 wait_total_fee,0 wait_good_num')
  276. ->where($where)
  277. ->group('addtime,cgder_id')
  278. ->order('addtime,cgder_id')
  279. ->count('id');
  280. $rs = Db::name('purchease_order')
  281. ->field('DATE_FORMAT(addtime, "%Y-%m-%d") addtime,cgder_id,cgder,SUM(total_fee) total_fee,SUM(good_num) good_num,status,0 wait_total_fee,0 wait_good_num')
  282. ->where($where)
  283. ->group('addtime,cgder_id,cgder,status')
  284. ->order('addtime,cgder_id')
  285. ->page($param['page'], $param['size'])
  286. ->cursor();
  287. $data = [];
  288. foreach ($rs as $value) {
  289. if (!isset($data[$value['addtime']][$value['cgder_id']])) {
  290. $data[$value['addtime']][$value['cgder_id']] = [
  291. 'addtime' => $value['addtime'],
  292. 'cgder' => $value['cgder'],
  293. 'total_fee' => 0.00,
  294. 'good_num' => 0,
  295. 'wait_total_fee' => 0.00,
  296. 'wait_good_num' => 0,
  297. ];
  298. }
  299. if ($value['status'] == 0) {
  300. $data[$value['addtime']][$value['cgder_id']]['wait_total_fee'] += $value['total_fee'];
  301. $data[$value['addtime']][$value['cgder_id']]['wait_good_num'] += $value['good_num'];
  302. } else {
  303. $data[$value['addtime']][$value['cgder_id']]['total_fee'] += $value['total_fee'];
  304. $data[$value['addtime']][$value['cgder_id']]['good_num'] += $value['good_num'];
  305. }
  306. }
  307. $da = [];
  308. //去除下标
  309. foreach ($data as $v) {
  310. foreach ($v as $vv) {
  311. $da[] = $vv;
  312. }
  313. }
  314. return app_show(0, '请求成功', ['list' => $da, 'count' => $count]);
  315. }
  316. //【二、咨询单报表】1.已采反报价信息
  317. public function consultInfoBidsSum()
  318. {
  319. $param = $this->request->only([
  320. 'token',
  321. 'zxNo' => [],
  322. 'start_date' => '',
  323. 'end_date' => '',
  324. 'page' => 1,
  325. 'size' => 15,
  326. 'is_export' => 0,//是否导出,1导出,0不导出
  327. ], 'post', 'trim');
  328. $val_params = Validate::rule([
  329. 'start_date' => 'date|elt:end_date',
  330. 'end_date' => 'date',
  331. 'is_export' => 'in:0,1',
  332. ]);
  333. if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
  334. $rs = Db::name('consult_bids')
  335. ->alias('cb')
  336. ->where('cb.is_del', 0);
  337. if ($param['start_date'] != '' && $param['end_date'] != '') $rs->whereBetween('cb.addtime', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']);
  338. if (!empty($param['zxNo'])) $rs->whereIn('cb.zxNo', $param['zxNo']);
  339. if ($param['is_export'] == 1) {
  340. $data = $rs
  341. ->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 客户名称')
  342. ->leftJoin('consult_info ci', 'ci.infoNo=cb.infoNo AND ci.is_del=0')
  343. ->leftJoin('consult_order co', 'co.zxNo=cb.zxNo AND co.is_del=0')
  344. ->leftJoin('supplier s', 's.code=cb.supplierNo AND s.is_del=0')
  345. ->leftJoin('customer_info csi', 'csi.companyNo=co.khNo AND csi.is_del=0')
  346. ->select()
  347. ->toArray();
  348. if (empty($data)) return error_show(1005, '没有可供导出的数据');
  349. else {
  350. $headerArr = array_keys($data[0]);
  351. excelSave('咨询单报表-已采反报价信息' . date('YmdHis'), $headerArr, $data);
  352. }
  353. } else {
  354. $total = $rs->count('cb.id');
  355. $data = $rs
  356. ->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')
  357. ->leftJoin('consult_info ci', 'ci.infoNo=cb.infoNo AND ci.is_del=0')
  358. ->leftJoin('consult_order co', 'co.zxNo=cb.zxNo AND co.is_del=0')
  359. ->leftJoin('supplier s', 's.code=cb.supplierNo AND s.is_del=0')
  360. ->leftJoin('customer_info csi', 'csi.companyNo=co.khNo AND csi.is_del=0')
  361. ->page($param['page'], $param['size'])
  362. ->select()
  363. ->toArray();
  364. return app_show(0, '请求成功', ['list' => $data, 'total' => $total]);
  365. }
  366. }
  367. //【二、咨询单报表】2.未采反信息
  368. public function consultInfoBidsSumNot()
  369. {
  370. $param = $this->request->only([
  371. 'token',
  372. 'companyName' => '',
  373. 'start_date' => '',
  374. 'end_date' => '',
  375. 'page' => 1,
  376. 'size' => 15,
  377. 'is_export' => 0,//是否导出,1导出,0不导出
  378. ], 'post', 'trim');
  379. $val_params = Validate::rule([
  380. 'start_date' => 'date|elt:end_date',
  381. 'end_date' => 'date',
  382. 'is_export' => 'in:0,1',
  383. ]);
  384. if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
  385. $rs = Db::name('consult_bids')
  386. ->alias('cb')
  387. ->leftJoin('consult_info ci', 'ci.infoNo=cb.infoNo AND ci.is_del=0')
  388. ->leftJoin('consult_order co', 'co.zxNo=cb.zxNo AND co.is_del=0')
  389. ->leftJoin('customer_info csi', 'csi.companyNo=co.khNo AND csi.is_del=0')
  390. ->where('cb.is_del', 0)
  391. ->order('co.endtime', 'desc');
  392. if ($param['start_date'] != '' && $param['end_date'] != '') $rs->whereBetween('ci.addtime', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']);
  393. if ($param['companyName'] != '') $rs->whereLike('csi.companyName', '%' . $param['companyName'] . '%');
  394. if ($param['is_export'] == 1) {
  395. $data = $rs
  396. ->field('cb.zxNo 咨询订单号,cb.good_name 产品名称,ci.num 需求数量,csi.companyName 客户名称,ci.addtime 咨询时间,co.endtime 截止时间')
  397. ->select()
  398. ->toArray();
  399. if (empty($data)) return error_show(1005, '没有可供导出的数据');
  400. else {
  401. $headerArr = array_keys($data[0]);
  402. excelSave('咨询单报表-未采反信息' . date('YmdHis'), $headerArr, $data);
  403. }
  404. } else {
  405. $total = $rs->count('cb.id');
  406. $data = $rs
  407. ->field('cb.zxNo,cb.good_name,ci.num,csi.companyName,ci.addtime,co.endtime')
  408. ->page($param['page'], $param['size'])
  409. ->select()
  410. ->toArray();
  411. return app_show(0, '请求成功', ['list' => $data, 'total' => $total]);
  412. }
  413. }
  414. //【三、订单明细报表】
  415. public function orderListDetailed()
  416. {
  417. $param = $this->request->only([
  418. 'token',
  419. 'addtime_start' => date('Y-m-d'),
  420. 'addtime_end' => date('Y-m-d'),
  421. 'status' => '',
  422. 'page' => 1,
  423. 'size' => 15,
  424. 'is_export' => 0,//是否导出,1导出,0不导出
  425. ], 'post', 'trim');
  426. $val_params = Validate::rule([
  427. 'start_date' => 'date|elt:end_date',
  428. 'end_date' => 'date',
  429. 'is_export' => 'in:0,1',
  430. ]);
  431. if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
  432. $rs = Db::name('purchease_order')
  433. ->alias('po')
  434. ->leftJoin('business b', 'b.companyNo=po.companyNo AND b.is_del=0');
  435. if ($param['addtime_start'] != '' && $param['addtime_end'] != '') $rs->whereBetween('po.addtime', [$param['addtime_start'] . ' 00:00:00', $param['addtime_end'] . ' 23:59:59']);
  436. if ($param['status'] != '') $rs->where('po.status', '=', $param['status']);
  437. $all_status = ['待与供应商确认', '待入库', '部分入库', '入库完成', '已取消订单'];
  438. $all_send_status = [1 => '未发货', 2 => '部分发货', 3 => '已发货'];
  439. if ($param['is_export'] == 1) {
  440. $data = Db::name('purchease_order')
  441. ->alias('po')
  442. ->field('po.cgdNo 采购单编号,po.addtime 创建时间,po.supplierNo 供应商编号,po.supplier_name 供应商名称,po.good_name 产品名称,po.good_num 购买数量,po.nake_fee 裸价,po.total_fee 成本合计,po.status 单据状态,po.send_status 发货状态,po.wsend_num 未发货数量,"" 创建人,b.company 客户名称,po.cgder 采购员,"" 发货时间,on.orderCode,po.order_type,po.bkcode,po.spuCode')
  443. ->leftJoin('business b', 'b.companyNo=po.companyNo AND b.is_del=0')
  444. ->leftJoin('order_num on', 'on.cgdNo=po.cgdNo')
  445. ->cursor();
  446. $list = [];
  447. foreach ($data as $v) {
  448. //单据状态
  449. $v['单据状态'] = isset($all_status[$v['单据状态']]) ? $all_status[$v['单据状态']] : '';
  450. //发货状态
  451. $v['发货状态'] = isset($all_send_status[$v['发货状态']]) ? $all_send_status[$v['发货状态']] : '';
  452. //创建人//order_type==1备库单
  453. if ($v['order_type'] == 1) $v['创建人'] = Db::name('purchease')->where(['bk_code' => $v['bkcode'], 'spuCode' => $v['spuCode'], 'is_del' => 0])->value('apply_name', '');
  454. else $v['创建人'] = Db::name('sale')->where(['orderCode' => $v['orderCode'], 'is_del' => 0])->value('apply_name', '');
  455. //创建时间
  456. $v['发货时间'] = Db::name('order_out')
  457. ->where(['orderCode' => $v['orderCode']])
  458. ->order('addtime', 'desc')
  459. ->value('addtime');
  460. unset($v['orderCode']);
  461. unset($v['order_type']);
  462. unset($v['bkcode']);
  463. unset($v['spuCode']);
  464. $list[] = $v;
  465. }
  466. if (empty($list)) return error_show(1005, '没有可供导出的数据');
  467. else {
  468. $headerArr = array_keys($list[0]);
  469. excelSave('订单明细报表' . date('YmdHis'), $headerArr, $list);
  470. }
  471. } else {
  472. $total = Db::name('purchease_order')
  473. ->alias('po')
  474. ->leftJoin('business b', 'b.companyNo=po.companyNo AND b.is_del=0')
  475. ->count('po.id');
  476. $data = Db::name('purchease_order')
  477. ->alias('po')
  478. ->field('po.cgdNo,po.addtime,po.supplierNo,po.supplier_name,po.good_name,po.good_num,po.nake_fee,po.total_fee,po.status,po.send_status,po.wsend_num,"" creater,b.company,po.cgder,"" send_time,on.orderCode,po.order_type,po.bkcode,po.spuCode')
  479. ->leftJoin('business b', 'b.companyNo=po.companyNo AND b.is_del=0')
  480. ->leftJoin('order_num on', 'on.cgdNo=po.cgdNo')
  481. ->page($param['page'], $param['size'])
  482. ->cursor();
  483. $list = [];
  484. foreach ($data as $v) {
  485. //单据状态
  486. $v['status'] = isset($all_status[$v['status']]) ? $all_status[$v['status']] : '';
  487. //发货状态
  488. $v['send_status'] = isset($all_send_status[$v['send_status']]) ? $all_send_status[$v['send_status']] : '';
  489. //创建人//order_type==1备库单
  490. if ($v['order_type'] == 1) $v['creater'] = Db::name('purchease')->where(['bk_code' => $v['bkcode'], 'spuCode' => $v['spuCode'], 'is_del' => 0])->value('apply_name', '');
  491. else $v['creater'] = Db::name('sale')->where(['orderCode' => $v['orderCode'], 'is_del' => 0])->value('apply_name', '');
  492. //创建时间
  493. $v['send_time'] = Db::name('order_out')
  494. ->where(['orderCode' => $v['orderCode']])
  495. ->order('addtime', 'desc')
  496. ->value('addtime');
  497. $list[] = $v;
  498. }
  499. return app_show(0, '请求成功', ['list' => $list, 'total' => $total]);
  500. }
  501. }
  502. }