Matter.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <?php
  2. namespace app\admin\controller;
  3. use app\common\controller\Backend;
  4. use think\Db;
  5. /**
  6. * 物料库存管理
  7. *
  8. * @icon fa fa-circle-o
  9. */
  10. class Matter extends Backend
  11. {
  12. /**
  13. * Matter模型对象
  14. * @var \app\admin\model\Matter
  15. */
  16. protected $model = null;
  17. public function _initialize()
  18. {
  19. parent::_initialize();
  20. $this->model = new \app\admin\model\Matter;
  21. }
  22. /**
  23. * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
  24. * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
  25. * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
  26. */
  27. /**
  28. * 添加
  29. */
  30. public function add(){
  31. if ($this->request->isPost()){
  32. $params = input('row/a');
  33. $params = $this->preExcludeFields($params);
  34. $params['weight'] = $params['weight'] * 1000;
  35. $isNew = Db::name('matter')->where('code',$params['code'])->find();
  36. if ($isNew){//库存已在,更新重量
  37. $result = Db::name('matter_detail')->insert($params);
  38. $weight = $params['weight'] + $isNew['weight'];
  39. $res = Db::name('matter')->where('code',$params['code'])->setField('weight',$weight);
  40. Db::name('matter')->where('code',$params['code'])->setField('create',date('Y-m-d H:i:s',time()));
  41. if ($res && $result){
  42. $this->success('库存增加成功');
  43. }else{
  44. $this->error('库存增加失败');
  45. }
  46. }else{//库存没有,新增库存
  47. $res = Db::name('matter_detail')->insert($params);
  48. if ($res){
  49. $matter['code'] = $params['code'];
  50. $matter['name'] = $params['name'];
  51. $matter['weight'] = $params['weight'];
  52. $matter['create'] = $params['create'];
  53. Db::name('matter')->insert($matter);
  54. $this->success('库存增加成功');
  55. }else{
  56. $this->error('库存增加失败');
  57. }
  58. }
  59. }
  60. return $this->view->fetch();
  61. }
  62. //查看库存信息
  63. public function read(){
  64. //设置过滤方法
  65. $this->request->filter(['strip_tags']);
  66. if ($this->request->isAjax()) {
  67. $params = $this->request->request();
  68. $filter = json_decode($params['filter'],true);
  69. $id = $filter['id'];
  70. $limit = $params['limit'];
  71. $offset = $params['offset'];
  72. $code = Db::name('matter')->where('id',$id)->value('code');
  73. $total = Db::name('matter_detail')
  74. ->where('code',$code)
  75. ->count();
  76. $list = Db::name('matter_detail')
  77. ->where('code',$code)
  78. ->where('weight','>',0)
  79. ->limit($offset, $limit)
  80. ->field('id,code,name,weight,bach,create')
  81. ->select();
  82. $result = array("total" => $total, "rows" => $list);
  83. return json($result);
  84. }
  85. return $this->view->fetch();
  86. }
  87. //获取打印数据
  88. public function getData(){
  89. $params = input('');
  90. if (empty($params['id'])){
  91. return array('status'=>0,'msg'=>'请选中打印数据');
  92. }
  93. $res = Db::name('matter')->where('id',$params['id'])->field('code,name,weight,create')->find();
  94. if (!empty($res)){
  95. return array('status'=>1,'data'=>$res);
  96. }else{
  97. return array('status'=>0,'msg'=>'数据错误');
  98. }
  99. }
  100. //油墨入库单导入
  101. public function import(){
  102. $file = $this->request->request('file');
  103. if (!$file) {
  104. $this->error(__('Parameter %s can not be empty', 'file'));
  105. }
  106. $filePath = ROOT_PATH . DS . 'public' . DS .$file;
  107. if (!is_file($filePath)) {
  108. $this->error(__('No results were found'));
  109. }
  110. $extension = substr($file,stripos($file,'.')+1);
  111. vendor("PHPExcel.PHPExcel");
  112. //实例化PHPExcel类(注意:实例化的时候前面需要加'\')
  113. if ($extension == 'xlsx'){
  114. $objReader = new \PHPExcel_Reader_Excel2007();
  115. }else if($extension == 'xls'){
  116. $objReader=new \PHPExcel_Reader_Excel5();
  117. }else{
  118. $objReader = new \PHPExcel_Reader_CSV();
  119. }
  120. $objPHPExcel = $objReader->load($filePath,$encode='utf-8');//获取excel文件
  121. $sheet = $objPHPExcel->getSheet(0); //激活当前的表
  122. $highestRow = $sheet->getHighestRow(); // 取得总行数
  123. $a=0;
  124. //将表格里面的数据循环到数组中
  125. // for($i=2;$i<=$highestRow;$i++)
  126. // {
  127. // //*为什么$i=2? (从第二行开始,才是我们要的数据。)
  128. // $data[$a]['create'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();//日期
  129. // $data[$a]['bach'] = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();//单据号
  130. // $data[$a]['code'] = $objPHPExcel->getActiveSheet()->getCell("N".$i)->getValue();//存货编码
  131. // $data[$a]['name'] = $objPHPExcel->getActiveSheet()->getCell("O".$i)->getValue();//存货名称
  132. // $data[$a]['weight'] = $objPHPExcel->getActiveSheet()->getCell("R".$i)->getValue() * 1000;//数量
  133. // // 这里的数据根据自己表格里面有多少个字段自行决定
  134. // $a++;
  135. // }
  136. //导入excel中存货编码
  137. for($i=4;$i<=$highestRow;$i++)
  138. {
  139. //*为什么$i=2? (从第二行开始,才是我们要的数据。)
  140. $weight = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
  141. if (!empty($weight)){
  142. $data[$a]['code'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();
  143. $data[$a]['name']= $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();
  144. $data[$a]['weight']= $weight * 1000;
  145. $data[$a]['create']= date('Y-m-d H:i:s');
  146. }
  147. $a++;
  148. }
  149. // print_r($data);die;
  150. //往数据库添加数据
  151. Db::startTrans();
  152. try{
  153. Db::name('matter_detail')->insertAll($data);
  154. foreach ($data as $key=>$value){
  155. $list = Db::name('matter')->where('code',$value['code'])->find();
  156. if ($list){
  157. $weight = $value['weight']+$list['weight'];
  158. Db::name('matter')->where('code',$value['code'])->setField('weight',$weight);
  159. Db::name('matter')->where('code',$value['code'])->setField('create',date('Y-m-d H:i:s',time()));
  160. }else{
  161. $matter['code'] = $value['code'];
  162. $matter['name'] = $value['name'];
  163. $matter['weight'] = $value['weight'];
  164. $matter['create'] = $value['create'];
  165. Db::name('matter')->insert($matter);
  166. }
  167. }
  168. Db::commit();
  169. $this->success('导入成功');
  170. }catch (\think\Exception\DbException $exception){
  171. Db::rollback();
  172. $this->error($exception->getMessage());
  173. }
  174. }
  175. // public function export(){
  176. // //1.从数据库中取出数据
  177. // $list = Db::name('formula_consume')->field('id,formula_name,ink,code')->select();
  178. // $res = Db::name('formula')->column('color');
  179. // foreach ($list as $key=>$value){
  180. // if (in_array($value['ink'],$res)){
  181. // unset($list[$key]);
  182. // }
  183. // }
  184. // //2.加载PHPExcle类库
  185. // vendor('PHPExcel.PHPExcel');
  186. // //3.实例化PHPExcel类
  187. // $objPHPExcel = new \PHPExcel();
  188. // //4.激活当前的sheet表
  189. // $objPHPExcel->setActiveSheetIndex(0);
  190. // //5.设置表格头(即excel表格的第一行)
  191. // $objPHPExcel->setActiveSheetIndex(0)
  192. // ->setCellValue('A1', '序号')
  193. // ->setCellValue('B1', 'ID')
  194. // ->setCellValue('C1', '配方名称')
  195. // ->setCellValue('D1', '油墨名称')
  196. // ->setCellValue('E1', '存货编码');
  197. // //设置F列水平居中
  198. // $objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment()
  199. // ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  200. // //设置单元格宽度
  201. // $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(30);
  202. // $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('D')->setWidth(30);
  203. // //6.循环刚取出来的数组,将数据逐一添加到excel表格。
  204. // $i = 0;
  205. // foreach ($list as $k=>$v){
  206. // $objPHPExcel->getActiveSheet()->setCellValue('A'.($i+2),$i);//添加ID
  207. // $objPHPExcel->getActiveSheet()->setCellValue('B'.($i+2),$v['id']);//添加姓名
  208. // $objPHPExcel->getActiveSheet()->setCellValue('C'.($i+2),$v['formula_name']);//添加姓名
  209. // $objPHPExcel->getActiveSheet()->setCellValue('D'.($i+2),$v['ink']);//添加年龄
  210. // $objPHPExcel->getActiveSheet()->setCellValue('E'.($i+2),$v['code']);//添加班级
  211. // $i++;
  212. // }
  213. // //7.设置保存的Excel表格名称
  214. // $filename = '大小盒'.date('ymd',time()).'.xls';
  215. // //8.设置当前激活的sheet表格名称;
  216. // $objPHPExcel->getActiveSheet()->setTitle('大小盒对应存货编码');
  217. // //9.设置浏览器窗口下载表格
  218. // header("Content-Type: application/force-download");
  219. // header("Content-Type: application/octet-stream");
  220. // header("Content-Type: application/download");
  221. // header('Content-Disposition:inline;filename="'.$filename.'"');
  222. // //生成excel文件
  223. // $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  224. // //下载文件在浏览器窗口
  225. // $objWriter->save('php://output');
  226. // exit;
  227. // }
  228. }