Stockout.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601
  1. <?php
  2. namespace app\admin\controller\stock;
  3. use app\common\controller\Backend;
  4. use fast\Tree;
  5. use app\admin\model;
  6. use think\Db;
  7. use think\Exception;
  8. /**
  9. * 商品出库
  10. *
  11. * @icon fa fa-circle-o
  12. */
  13. class Stockout extends Backend
  14. {
  15. /**
  16. * StockStockout模型对象
  17. * @var \app\admin\modelstock\Stockout
  18. */
  19. protected $model = null;
  20. protected $listmodel = null;
  21. protected $noNeedLogin = ['countData','info'];
  22. public function _initialize()
  23. {
  24. parent::_initialize();
  25. $this->model = model('\app\admin\model\stock\Stockout');
  26. $this->listmodel = model('\app\admin\model\stock\Stockoutlist');
  27. $customerList = collection(model('\app\admin\model\stock\Customer')->select())->toArray();
  28. Tree::instance()->init($customerList);
  29. $customerList = Tree::instance()->getTreeList(Tree::instance()->getTreeArray(0), 'name');
  30. $customer = ['' => '==请选择=='];
  31. foreach ($customerList as $k => $v) {
  32. $customer[$v['id']] = $v['name'];
  33. }
  34. $this->view->assign('customer', $customer);
  35. }
  36. /**
  37. * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
  38. * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
  39. * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
  40. */
  41. /**
  42. * 查看
  43. */
  44. public function index(){
  45. //设置过滤方法
  46. $this->request->filter(['strip_tags']);
  47. if ($this->request->isAjax()) {
  48. $post = $this->request->request('');
  49. if ($this->request->request('search')) {
  50. $where['订单编号|生产款号'] = ['like', '%' . $post['search'] . '%'];;
  51. }
  52. $where['mod_rq'] = null;
  53. $where['出库日期'] = ['neq', ''];
  54. $total = Db::name('工单_基本资料')
  55. ->where($where)
  56. ->order('订单编号 desc')
  57. ->limit($post['offset'], $post['limit'])
  58. ->count();
  59. $list = Db::name('工单_基本资料')
  60. ->where($where)
  61. ->order('订单编号 desc')
  62. ->limit($post['offset'], $post['limit'])
  63. ->select();
  64. $list = collection($list)->toArray();
  65. $result = array("total" => $total, "rows" => $list);
  66. return json($result);
  67. }
  68. return $this->view->fetch();
  69. }
  70. /**
  71. * 出库时序表
  72. */
  73. public function getlist()
  74. {
  75. //设置过滤方法
  76. $this->request->filter(['strip_tags']);
  77. if ($this->request->isAjax()) {
  78. //如果发送的来源是Selectpage,则转发到Selectpage
  79. if ($this->request->request('keyField')) {
  80. return $this->selectpage();
  81. }
  82. $this->relationSearch = true;
  83. $this->searchFields = 'docnum,goods.goodsname,goods.productmodel';
  84. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  85. $total = $this->listmodel
  86. ->with(['goods','stockinlist','stockout'])
  87. ->where('stockout.audittime', 'NOT NULL')
  88. ->where($where)
  89. ->order($sort, $order)
  90. ->count();
  91. $list = $this->listmodel
  92. ->with(['goods','stockinlist','stockout'])
  93. ->where('stockout.audittime', 'NOT NULL')
  94. ->where($where)
  95. ->order($sort, $order)
  96. ->limit($offset, $limit)
  97. ->select();
  98. foreach ($list as $k => $v) {
  99. $v->stockout->customer;
  100. }
  101. $list = collection($list)->toArray();
  102. $result = array("total" => $total, "rows" => $list);
  103. return json($result);
  104. }
  105. return $this->view->fetch();
  106. }
  107. /**
  108. * 添加
  109. */
  110. public function add()
  111. {
  112. if ($this->request->isPost()) {
  113. $params = $this->request->post("row/a");
  114. $main = json_decode($params['main'], true);
  115. $goods = json_decode($params['goodslist'], true);
  116. if ($main && $goods) {
  117. try {
  118. $main["docnum"] = $this->model->createdocnum();
  119. $main['outboundtime'] = strtotime($main['outboundtime']);
  120. $num = count($goods);
  121. $stockoutgoods = [];
  122. $stockcurmodel = model('\app\admin\model\stock\Stockcur');
  123. $stockOutTotalNum = 0; //单据总出库商品总数
  124. $errorgoods = [];
  125. for ($i = 0; $i < $num; $i++) {
  126. //$curtotalnum 要出库的商品当前库存总数
  127. $curtotalnum = $stockcurmodel->where('stock_goods_id', $goods[$i]['stock_goods_id'])->sum('curnums');
  128. $outtotalnum = 0;
  129. foreach ($goods as $v) {
  130. if ($v['stock_goods_id'] == $goods[$i]['stock_goods_id']) {
  131. $outtotalnum += $v['stockoutnums'];
  132. }
  133. }
  134. $stockOutTotalNum += $goods[$i]['stockoutnums'];
  135. //库存总数小于要出库数 出库失败!
  136. if ($curtotalnum < $outtotalnum) {
  137. $errorgoods[] = $goods[$i]['goodsname'] . '当前库存:' . $curtotalnum . ',出库数量' . $outtotalnum . ',出库数大于库存数,操作失败!';
  138. } else {
  139. $stockoutgoods[] = array_merge($params, $goods[$i]);
  140. }
  141. }
  142. if (count($errorgoods) > 0) {
  143. $this->error(implode('</br>', $errorgoods)); //拼接成字符串
  144. }
  145. $main['totaloutamount'] = null;
  146. $main['stockouttotalnums'] = $stockOutTotalNum;
  147. $this->model->save($main);
  148. for ($i = 0; $i < count($stockoutgoods); $i++) {
  149. $stockoutgoods[$i]['stock_stockout_id'] = $this->model->id;
  150. }
  151. $result = $this->listmodel->allowField(true)->saveAll($stockoutgoods, false);
  152. if ($result !== false) {
  153. $this->success();
  154. } else {
  155. $this->error($this->model->getError());
  156. }
  157. } catch (\think\exception\PDOException $e) {
  158. $this->error($e->getMessage());
  159. }
  160. }
  161. $this->error(__('Parameter %s can not be empty', ''));
  162. }
  163. return $this->view->fetch();
  164. }
  165. /**
  166. * 编辑
  167. */
  168. public function edit($ids = null)
  169. {
  170. $row = $this->model->get($ids);
  171. if (!$row) {
  172. $this->error(__('No Results were found'));
  173. }
  174. if ($row['audittime']) {
  175. return ($this->error(__('该记录已通过审核,不能修改!')));
  176. }
  177. if ($row['settletime']) {
  178. return ($this->error(__('该记录已结算,不能修改!')));
  179. }
  180. if ($this->request->isPost()) {
  181. $params = $this->request->post("row/a");
  182. $main = json_decode($params['main'], true);
  183. $goods = json_decode($params['goodslist'], true);
  184. $delist = json_decode($params["deletedgoodslist"], true);
  185. if ($main && $goods) {
  186. try {
  187. $row->outboundtime = strtotime($main['outboundtime']);
  188. $row->stock_customer_id = $main['stock_customer_id'];
  189. $row->remark = $main['remark'];
  190. $num = count($goods);
  191. $stockoutgoods = [];
  192. $stockcurmodel = model('\app\admin\model\stock\Stockcur');
  193. $stockOutTotalNum = 0; //单据总出库商品总数
  194. $errorgoods = [];
  195. for ($i = 0; $i < $num; $i++) {
  196. //$curtotalnum 要出库的商品当前库存总数
  197. $curtotalnum = $stockcurmodel->where('stock_goods_id', $goods[$i]['stock_goods_id'])->sum('curnums');
  198. $outtotalnum = 0;
  199. foreach ($goods as $v) {
  200. if ($v['stock_goods_id'] == $goods[$i]['stock_goods_id']) {
  201. $outtotalnum += $v['stockoutnums'];
  202. }
  203. }
  204. $stockOutTotalNum += $goods[$i]['stockoutnums'];
  205. //库存总数小于要出库数 出库失败!
  206. if ($curtotalnum < $outtotalnum) {
  207. $errorgoods[] = $goods[$i]['goodsname'] . '当前库存:' . $curtotalnum . ',出库数量' . $outtotalnum . ',出库数大于库存数,操作失败!';
  208. } else {
  209. $stockoutgoods[] = array_merge($params, $goods[$i]);
  210. }
  211. }
  212. if (count($errorgoods) > 0) {
  213. $this->error(implode('</br>', $errorgoods)); //拼接成字符串
  214. }
  215. $row->stockouttotalnums = $stockOutTotalNum;
  216. $row->save();
  217. for ($i = 0; $i < count($stockoutgoods); $i++) {
  218. $stockoutgoods[$i]['stock_stockout_id'] = $row->id;
  219. }
  220. $result = $this->listmodel->allowField(true)->saveAll($stockoutgoods);
  221. $this->listmodel->destroy($delist);
  222. if ($result !== false) {
  223. $this->success();
  224. } else {
  225. $this->error($this->model->getError());
  226. }
  227. } catch (\think\exception\PDOException $e) {
  228. $this->error($e->getMessage());
  229. }
  230. }
  231. $this->error(__('Parameter %s can not be empty', ''));
  232. }
  233. $this->view->assign("row", $row);
  234. return $this->view->fetch();
  235. }
  236. /**
  237. * 审核
  238. */
  239. public function audit()
  240. {
  241. if ($this->request->isPost()) {
  242. $params = $this->request->post("row/a");
  243. if ($params) {
  244. $stockcurmodel = model('\app\admin\model\stock\Stockcur');
  245. $stockinlistmodel = model('\app\admin\model\stock\Stockinlist');
  246. $row = $this->model->get($params["id"]);
  247. if (!$row) {
  248. $this->error(__('No Results were found'));
  249. }
  250. $stockcurmodel->startTrans();
  251. $stockinlistmodel->startTrans();
  252. $this->model->startTrans();
  253. $this->listmodel->startTrans();
  254. try {
  255. $totalOutAmount = 0; //单据总出库金额
  256. $stockOutTotalNum = 0; //单据总出库商品总数
  257. $goods = $this->listmodel->with('goods')->where('stock_stockout_id', $row->id)->select();
  258. $newgoods = [];
  259. $errorgoods = [];
  260. if ($goods) {
  261. if ($row->audittime) {
  262. $this->error(__('出库单据已审核,不可重复审核', ''));
  263. }
  264. $num = count($goods);
  265. for ($i = 0; $i < $num; $i++) {
  266. //$curtotalnum 要出库的商品当前库存总数
  267. $curtotalnum = $stockcurmodel->where('stock_goods_id', $goods[$i]['stock_goods_id'])->sum('curnums');
  268. //库存总数小于此次要出库数 出库失败!
  269. if ($curtotalnum < $goods[$i]['stockoutnums']) {
  270. $errorgoods[] = $goods[$i]['goods']['goodsname'] . '当前库存:' . $curtotalnum . ',出库数量' . $goods[$i]['stockoutnums'] . ',出库数大于库存数,操作失败!';
  271. } else {
  272. //获得要出库商品的所有库存信息
  273. $stockcurgoods = $stockcurmodel->with('stockinlist')->where('stockcur.stock_goods_id', $goods[$i]['stock_goods_id'])->order('id')->select();
  274. $curstockoutgoods = $goods[$i]->toArray();
  275. unset($curstockoutgoods['id']);
  276. //出库初始数量为
  277. $stockoutnum = 0;
  278. $j = 0;
  279. while ($stockoutnum < $goods[$i]['stockoutnums']) {
  280. $neednum = $goods[$i]['stockoutnums'] - $stockoutnum; //$neednum 还需要出库的数量
  281. $restnum = $stockcurgoods[$j]['curnums'] - $neednum; //$restnum 该条记录出完库后剩余库存。
  282. //小于等于0则表示不够出或刚够
  283. if ($restnum <= 0) {
  284. $curstockoutgoods['stock_stockout_id'] = $row->id;
  285. $curstockoutgoods['stockoutgoodsremark'] = $goods[$i]['stockoutgoodsremark'];
  286. $curstockoutgoods['stock_stockinlist_id'] = $stockcurgoods[$j]['stockinlist']['id'];
  287. $curstockoutgoods['stockoutnums'] = $stockcurgoods[$j]['curnums'];
  288. $curstockoutgoods['amount'] = bcmul($stockcurgoods[$j]['curnums'], $stockcurgoods[$j]['stockinlist']['inboundprice'], 2);
  289. $stockoutnum += $stockcurgoods[$j]['curnums'];
  290. $totalOutAmount += $curstockoutgoods['amount'];
  291. $stockOutTotalNum += $stockcurgoods[$j]['curnums'];
  292. $stockcurmodel->destroy($stockcurgoods[$j]['id']);
  293. $stockinlist = $stockinlistmodel->get($stockcurgoods[$j]['stockinlist']['id']);
  294. $stockinlist->charged = true;
  295. $stockinlist->save();
  296. } elseif (($restnum > 0)) { //大于0则表示够出
  297. $curstockoutgoods['stock_stockout_id'] = $row->id;
  298. $curstockoutgoods['stockoutgoodsremark'] = $goods[$i]['stockoutgoodsremark'];
  299. $curstockoutgoods['stock_stockinlist_id'] = $stockcurgoods[$j]['stockinlist']['id'];
  300. $curstockoutgoods['stockoutnums'] = $neednum;
  301. $curstockoutgoods['amount'] = bcmul($neednum, $stockcurgoods[$j]['stockinlist']['inboundprice'], 2);
  302. $stockoutnum += $neednum;
  303. $totalOutAmount += $curstockoutgoods['amount'];
  304. $stockOutTotalNum += $neednum;
  305. $stockcurgoods[$j]['curnums'] = $restnum;
  306. $updatestockcur = $stockcurmodel->get($stockcurgoods[$j]['id']);
  307. $updatestockcur->curnums = $restnum;
  308. $updatestockcur->save();
  309. $stockinlist = $stockinlistmodel->get($stockcurgoods[$j]['stockinlist']['id']);
  310. $stockinlist->charged = true;
  311. $stockinlist->save();
  312. }
  313. $newgoods[] = $curstockoutgoods;
  314. $j++;
  315. }
  316. }
  317. };
  318. }
  319. if (count($errorgoods) > 0) {
  320. throw new Exception(implode('</br>', $errorgoods));
  321. }
  322. $row->totaloutamount = $totalOutAmount;
  323. $row->stockouttotalnums = $stockOutTotalNum;
  324. $row->audittime = time();
  325. $row->save();
  326. $goods = $this->listmodel->where('stock_stockout_id', $row->id)->delete();
  327. $result = $this->listmodel->allowField(true)->saveAll($newgoods); //更新审核标记位
  328. $this->model->commit();
  329. $this->listmodel->commit();
  330. $stockcurmodel->commit();
  331. $stockinlistmodel->commit();
  332. if ($result !== false) {
  333. $this->success();
  334. } else {
  335. $this->error($this->model->getError());
  336. }
  337. } catch (\think\exception\PDOException $e) {
  338. $this->model->rollBack();
  339. $this->listmodel->rollBack();
  340. $stockcurmodel->rollBack();
  341. $stockinlistmodel->rollBack();
  342. $this->error($e->getMessage());
  343. } catch (\think\Exception $e) {
  344. $this->model->rollBack();
  345. $this->listmodel->rollBack();
  346. $stockcurmodel->rollBack();
  347. $stockinlistmodel->rollBack();
  348. $this->error($e->getMessage());
  349. }
  350. }
  351. $this->error(__('Parameter %s can not be empty', ''));
  352. }
  353. }
  354. /**
  355. * 反审核
  356. */
  357. public function unaudit()
  358. {
  359. if ($this->request->isPost()) {
  360. $params = $this->request->post("row/a");
  361. $row = $this->model->get($params["id"]);
  362. if ($row) {
  363. try {
  364. if (!$row->audittime) {
  365. $this->error(__('出库单据已反审核,不可重复反审核', ''));
  366. };
  367. $goods = $this->listmodel->where('stock_stockout_id', $row->id)->select();
  368. if ($goods) {
  369. foreach ($goods as $k => $v) {
  370. $stockinlistmodel = model('\app\admin\model\stock\Stockinlist')->get(["id" => $v['stock_stockinlist_id']]);
  371. $stockinmodel = model('\app\admin\model\stock\Stockin')->get($stockinlistmodel->stock_stockin_id);
  372. $stockcurmodel = model('\app\admin\model\stock\Stockcur')->get(["stock_stockin_list_id" => $v['stock_stockinlist_id']]);
  373. if ($stockcurmodel) {
  374. $stockcurmodel->curnums = $stockcurmodel->curnums + $v->stockoutnums;
  375. if ($stockcurmodel->curnums == $stockinlistmodel->stockinnums) {
  376. $stockinlistmodel->charged = false;
  377. $stockinlistmodel->save();
  378. }
  379. $stockcurmodel->save();
  380. } else {
  381. $stockcur = [
  382. 'stock_stockin_list_id' => $stockinlistmodel['id'],
  383. 'stock_stockin_id' => $stockinlistmodel['stock_stockin_id'],
  384. 'curnums' => $v->stockoutnums,
  385. 'stock_goods_id' => $stockinlistmodel['stock_goods_id'],
  386. 'stock_stockin_docnum' => $stockinmodel->docnum,
  387. ];
  388. model('\app\admin\model\stock\Stockcur')->isUpdate(false)->data($stockcur, true)->save();
  389. if ($stockinlistmodel->stockinnums == $v->stockoutnums) {
  390. $stockinlistmodel->charged = false;
  391. $stockinlistmodel->save();
  392. }
  393. }
  394. $v->stock_stockinlist_id = null;
  395. $v->amount = null;
  396. $v->save();
  397. };
  398. } else {
  399. $this->error($this->model->getError());
  400. }
  401. $row->audittime = null;
  402. $row->totaloutamount = null;
  403. $result = $row->save();
  404. if ($result !== false) {
  405. $this->success();
  406. } else {
  407. $this->error($this->model->getError());
  408. }
  409. } catch (\think\exception\PDOException $e) {
  410. $this->error($e->getMessage());
  411. }
  412. }
  413. $this->error(__('Parameter %s can not be empty', ''));
  414. }
  415. }
  416. /**
  417. * 结算
  418. */
  419. public function settle()
  420. {
  421. if ($this->request->isPost()) {
  422. $params = $this->request->post("row/a");
  423. $row = $this->model->get($params["id"]);
  424. if ($row) {
  425. try {
  426. $row->settletime = time();
  427. $result = $row->save();
  428. if ($result) {
  429. $this->success('结算成功');
  430. } else {
  431. $this->error(__('结算失败'));
  432. }
  433. } catch (\think\exception\PDOException $e) {
  434. $this->error($e->getMessage());
  435. }
  436. }
  437. $this->error(__('Parameter %s can not be empty', ''));
  438. }
  439. }
  440. /**
  441. * 反结算
  442. */
  443. public function unsettle()
  444. {
  445. if ($this->request->isPost()) {
  446. $params = $this->request->post("row/a");
  447. $row = $this->model->get($params["id"]);
  448. if ($row) {
  449. try {
  450. $row->settletime = null;
  451. $result = $row->save();
  452. if ($result) {
  453. $this->success('反结算成功');
  454. } else {
  455. $this->error(__('反结算失败'));
  456. }
  457. } catch (\think\exception\PDOException $e) {
  458. $this->error($e->getMessage());
  459. }
  460. }
  461. $this->error(__('Parameter %s can not be empty', ''));
  462. }
  463. }
  464. /**
  465. * 查看
  466. */
  467. public function look($ids = null)
  468. {
  469. $row = $this->model->get($ids);
  470. if (!$row) {
  471. $this->error(__('No Results were found'));
  472. }
  473. return $this->view->fetch();
  474. }
  475. /**
  476. * 删除
  477. */
  478. public function del($ids = "")
  479. {
  480. if ($ids) {
  481. $row = $this->model->get($ids);
  482. if (!$row) {
  483. $this->error(__('No Results were found'));
  484. }
  485. $list = collection($this->listmodel->where('stock_stockout_id', $row->id)->select())->toArray();
  486. if ($row['audittime']) {
  487. return ($this->error(__('该单据已审核,不能删除!')));
  488. }
  489. $result = $this->listmodel->where('stock_stockout_id', $row->id)->delete();
  490. $result = $row->delete();
  491. if ($result) {
  492. $this->success();
  493. } else {
  494. $this->error(__('No rows were deleted'));
  495. }
  496. }
  497. $this->error(__('Parameter %s can not be empty', 'ids'));
  498. }
  499. /**
  500. * 查看页,根据单据编号返回商品信息
  501. */
  502. public function info($id = null)
  503. {
  504. if ($this->request->isPost()) {
  505. if ($id) {
  506. try {
  507. $id = $this->request->request("id");
  508. $goodslist = Db::name('工单_基本资料')->where('Uniqid',$id)->find();
  509. // 如果查询结果为空,返回空数组
  510. if (!$goodslist) {
  511. $goodslist = [];
  512. } else {
  513. // 将所有 null 值替换为空字符串
  514. foreach ($goodslist as $key => $value) {
  515. if (is_null($value)) {
  516. $goodslist[$key] = '';
  517. }
  518. }
  519. // 添加库位号字段
  520. $goodslist['库位号'] = $goodslist['Uniqid'] . $goodslist['订单编号'];
  521. }
  522. return json(["goodslist" => $goodslist]);
  523. // $goodslist = \think\Db::view('stock_stockout_list', '*')
  524. // ->view('stock_goods', 'id as stock_goods_id,volnum,goodsname,productmodel,measureunit', 'stock_stockout_list.stock_goods_id=stock_goods.id', 'left')
  525. // ->view('stock_stockin_list', 'id as stock_stockin_list,inboundprice', 'stock_stockin_list.id=stock_stockout_list.stock_stockinlist_id', 'left')
  526. // ->where('stock_stockout_list.stock_stockout_id', $id)->select();
  527. // return json(["row" => $row, "goodslist" => $goodslist]);
  528. } catch (\think\exception\PDOException $e) {
  529. $this->error($e->getMessage());
  530. }
  531. }
  532. $this->error(__('Parameter %s can not be empty', ''));
  533. }
  534. $this->error('只接受POST请求', '');
  535. }
  536. /**
  537. * 控制台出库统计
  538. */
  539. public function countData()
  540. {
  541. if ($this->request->isAjax()) {
  542. $dateRange = $this->request->request("dateRange");
  543. $dateRange = explode(' - ', $dateRange);
  544. $dateRange = count($dateRange) > 1 ? $dateRange : $dateRange[0];
  545. $list1 = $this->model
  546. ->with('stockgoods,customer')
  547. ->field('sum(amount) totalitemamount,count(*) totalitem,sum(stockoutnums) totalnum')
  548. ->where('audittime', 'not null')
  549. ->whereTime('stockout.createtime', $dateRange)
  550. ->group('stockout.stock_customer_id')
  551. ->select();
  552. $list1 = collection($list1)->toArray();
  553. $list2 = $this->model
  554. ->with('stockgoods,customer')
  555. ->field('sum(amount) totalitemamount,count(*) totalitem,sum(stockoutnums) totalnum')
  556. ->where('audittime', 'not null')
  557. ->whereTime('stockout.createtime', $dateRange)
  558. ->group('goodscategoryid')
  559. ->select();
  560. $list2 = collection($list2)->toArray();
  561. $result = array("rows1" => $list1, "rows2" => $list2);
  562. return json($result);
  563. }
  564. }
  565. /**
  566. * 打印数据(LODOP)
  567. */
  568. public function printer($id = null)
  569. {
  570. // $row = $this->model->get($id);
  571. $post = $this->request->request("");
  572. // if (!$post['Uniqid']) {
  573. // $this->error(__('No Results were found'));
  574. // } else if (!$post['Uniqid']) {
  575. // $this->error(__('单据尚未审核,请先审核!'));
  576. // }
  577. return $this->view->fetch();
  578. }
  579. }