Order.php 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834
  1. <?php
  2. /**
  3. * author xtj
  4. * createtime 2020/6/3 0003 上午 9:38
  5. * return array obj json bool
  6. * param
  7. */
  8. namespace app\admin\controller;
  9. use app\common\controller\Backend;
  10. use think\Db;
  11. use Think\Exception;
  12. //工单
  13. class Order extends Backend{
  14. public function index(){
  15. $data = $this->request->request();
  16. if ($this->request->isAjax()) {
  17. $params['pagesize'] = is_null($data['limit']) ? 10 : $data['limit'];//初始查询位置
  18. if ($data['limit'] == 0){
  19. $params['page'] = 1;
  20. }else{
  21. $params['page'] = $data['offset'] / 10 + 1;
  22. }
  23. $gdbh = input('search');
  24. if (empty($gdbh)){
  25. $params['gd_gdbh'] = -1;
  26. } else{
  27. $params['gd_gdbh'] =$gdbh;
  28. }
  29. $url = 'http://ink.7in6.com/bKdNvCxlao.php/jar/getOrder?pagesize='.$params['pagesize'].'&page='.$params['page'].'&gd_gdbh='.$params['gd_gdbh'];
  30. $list = $this->get($url);
  31. $list = json_decode($list,true);
  32. $total = $list['total'];
  33. $list = collection($list['data'])->toArray();
  34. $result = array("total" => $total, "rows" => $list);
  35. return json($result);
  36. }
  37. //中烟名称
  38. // $tobacco = $this->get('http://mn.7in6.com/index.php?s=/Admin/Relevlion/customList');
  39. // $tobacco = json_decode($tobacco,true);
  40. return $this->view->fetch();
  41. }
  42. //按油墨重量增加指令书
  43. public function addone(){
  44. $orderNumber = input('ids');
  45. $url = 'http://ink.7in6.com/bKdNvCxlao.php/jar/getorderdetail?Gd_gdbh='.$orderNumber;
  46. $data = $this->get($url);
  47. $data = json_decode($data,true);
  48. $result = $data['data'];
  49. //配方
  50. $productNumber = trim($result['gd_cpdh']);
  51. if (empty($productNumber)){
  52. $this->error('产品编码不存在');
  53. }
  54. $where[] = ['exp',Db::raw("FIND_IN_SET($productNumber,product_number)")];
  55. $formula = Db::name('formula')->where($where)->select();
  56. $formulaData = array();
  57. foreach ($formula as $key=>$value){
  58. $formulaData[$key] = $value['product_name'];
  59. if ($key > 0){
  60. if ($value['product_name'] != $formula[$key-1]['product_name']){
  61. $formulaData[$key] = $value['product_name'];
  62. }else{
  63. unset($formulaData[$key]);
  64. }
  65. }
  66. }
  67. return $this->view->fetch('',compact('result','formulaData'));
  68. }
  69. //按纸张数增加指令书
  70. public function add(){
  71. $orderNumber = input('ids');
  72. $url = 'http://ink.7in6.com/bKdNvCxlao.php/jar/getorderdetail?Gd_gdbh='.$orderNumber;
  73. $data = $this->get($url);
  74. $data = json_decode($data,true);
  75. $result = $data['data'];
  76. // print_r($data);die;
  77. //配方
  78. $productNumber = trim($result['gd_cpdh']);
  79. if (empty($productNumber)){
  80. $this->error('产品编码不存在');
  81. }
  82. $where[] = ['exp',Db::raw("FIND_IN_SET($productNumber,product_number)")];
  83. $formula = Db::name('formula')->where($where)->select();
  84. $formulaData = array();
  85. foreach ($formula as $key=>$value){
  86. $formulaData[$key] = $value['product_name'];
  87. if ($key > 0){
  88. if ($value['product_name'] != $formula[$key-1]['product_name']){
  89. $formulaData[$key] = $value['product_name'];
  90. }else{
  91. unset($formulaData[$key]);
  92. }
  93. }
  94. }
  95. return $this->view->fetch('',compact('result','formulaData'));
  96. }
  97. //获取配方数据
  98. public function getFormula(){
  99. $params = input('formula');
  100. if (empty($params)){
  101. return array('status'=>0,'msg'=>'请选择配方');
  102. }
  103. /**
  104. * 每个专色第一行+rowspan='配方数量'
  105. * 获取每个专色的配方数量,减去数量就是key对应要加rowspa的行
  106. *
  107. */
  108. $list = Db::name('formula_detail')->where('product_name',$params)->order('color_number')->column('color');
  109. $list = array_values(array_unique($list));
  110. $colorNumber = [];
  111. $i = 0;
  112. foreach ($list as $key=>$value){
  113. $colorNumber[$key]['beginRow'] = $i;
  114. $number = Db::name('formula_detail')->where(['product_name'=>$params,'color'=>$value])->count();
  115. $colorNumber[$key]['rowSpan'] = $number;
  116. $i = $number + $i;
  117. }
  118. $data = Db::name('formula_detail')->where('product_name',$params)->order('color_number,id asc')->select();
  119. foreach ($data as $k=>$v){
  120. $data[$k]['total'] = round($v['total']);
  121. }
  122. return array('status'=>1,'data'=>$data,'colorNumber'=>$colorNumber);
  123. }
  124. //获取大小盒计划消耗数据
  125. public function getConsume(){
  126. $result = true; //判断大小盒是否都有值
  127. $params = input('formula');
  128. $bigNumber = input('bigNumber');
  129. if (empty($bigNumber) || $bigNumber == 0){//默认值为1
  130. $bigNumber = 1;
  131. $result = false;
  132. }
  133. $smallNumber = input('smallNumber');
  134. if (empty($smallNumber) || $smallNumber == 0){ //默认值为1
  135. $smallNumber = 1;
  136. $result = false;
  137. }
  138. $boxModel = input('boxModel',0);//0 全部,1 大盒,2 小盒
  139. if (empty($params)){
  140. return array('status'=>0,'msg'=>'请选择配方');
  141. }
  142. //大盒
  143. $bigList = Db::name('formula_consume')->where('formula_name',$params)->where('box',1)->field('box,ink,number')->select();
  144. //小盒
  145. $smallList = Db::name('formula_consume')->where('formula_name',$params)->where('box',2)->field('box,ink,number')->select();
  146. $bigNum = count($bigList);
  147. $smallNum = count($smallList);
  148. $data = [];
  149. if ($bigNum >= $smallNum){
  150. $half = intval($bigNum/2) - 1;
  151. foreach ($bigList as $key=>$value){
  152. $data[$key]['big_ink'] = $value['ink'];
  153. $data[$key]['big_num'] = $value['number'];
  154. if ($key > ($smallNum - 1)){
  155. $data[$key]['small_ink'] = '';
  156. $data[$key]['small_num'] = '';
  157. }else{
  158. $data[$key]['small_ink'] = $smallList[$key]['ink'];
  159. $data[$key]['small_num'] = $smallList[$key]['number'];
  160. }
  161. //根绝盒型和数值不为0 相乘
  162. if ($boxModel == 0){
  163. if ($data[$key]['big_num']>0 && $data[$key]['small_num']>0){
  164. $data[$key]['big_num'] = round($data[$key]['big_num'] * $bigNumber,2);
  165. $data[$key]['small_num'] = round($data[$key]['small_num'] * $smallNumber,2);
  166. }
  167. if ($data[$key]['big_num']>0 && empty($data[$key]['small_num'])){
  168. $data[$key]['big_num'] = round($data[$key]['big_num'] * $bigNumber,2);
  169. }
  170. }
  171. if ($boxModel == 1 && $data[$key]['big_num']>0){
  172. $data[$key]['big_num'] = round($data[$key]['big_num'] * $bigNumber,2);
  173. }
  174. if ($boxModel == 2 && $data[$key]['small_num']>0){
  175. $data[$key]['small_num'] = round($data[$key]['small_num'] * $smallNumber,2);
  176. }
  177. }
  178. }else{
  179. $half = intval($smallNum/2) - 1;
  180. foreach ($smallList as $key=>$value){
  181. $data[$key]['small_ink'] = $value['ink'];
  182. $data[$key]['small_num'] = $value['number'];
  183. if ($key > ($bigNum - 1)){
  184. $data[$key]['big_ink'] = '';
  185. $data[$key]['big_num'] = '';
  186. }else{
  187. $data[$key]['big_ink'] = $bigList[$key]['ink'];
  188. $data[$key]['big_num'] = $bigList[$key]['number'];
  189. }
  190. if ($boxModel == 0 ){
  191. if ($data[$key]['big_num']>0 && $data[$key]['small_num']>0){
  192. $data[$key]['big_num'] = round($data[$key]['big_num'] * $bigNumber,2);
  193. $data[$key]['small_num'] = round($data[$key]['small_num'] * $smallNumber,2);
  194. }
  195. if (empty($data[$key]['big_num'])&& $data[$key]['small_num']>0){
  196. $data[$key]['small_num'] = round($data[$key]['small_num'] * $smallNumber,2);
  197. }
  198. }
  199. if ($boxModel == 1 && $data[$key]['big_num']>0){
  200. $data[$key]['big_num'] = round($data[$key]['big_num'] * $bigNumber,2);
  201. }
  202. if ($boxModel == 2 && $data[$key]['small_num']>0){
  203. $data[$key]['small_num'] = round($data[$key]['small_num'] * $smallNumber,2);
  204. }
  205. }
  206. }
  207. // print_r($data);die;
  208. $rowSpan = count($data);
  209. //根据数量获取更改配方总数
  210. $allColor = Db::name('formula_detail')->where('product_name',$params)->order('color_number')->column('color');
  211. $allColor = array_values(array_unique($allColor));
  212. $everyTenThousand = Db::name('formula_consume')->where('formula_name',$params)->where('ink','in',$allColor)->select();
  213. /*
  214. * 根据传过来的大小盒数量,算出大小盒消耗专色的总量,计算配方各油墨的消耗量
  215. * 重新写一个配方html赋值到原先的html
  216. * **/
  217. $formulaTotal = array();
  218. if ($result == true){ //大小盒都有值
  219. $item = [];
  220. foreach ($everyTenThousand as $k=>$v){
  221. $item[$k]['ink'] = $v['ink'];
  222. if ($v['box'] == 1 && is_numeric($v['number'])){
  223. $item[$k]['number'] = ceil($v['number'] * $bigNumber);
  224. }
  225. if ($v['box'] == 2 && is_numeric($v['number'])){
  226. $item[$k]['number'] = ceil($v['number'] * $smallNumber);
  227. }
  228. }
  229. //算出大小盒各专色的总共数量
  230. foreach($item as $key1=>$value1){
  231. if(!isset($formulaTotal[$value1['ink']])){
  232. $formulaTotal[$value1['ink']]=$value1;
  233. }else{
  234. $formulaTotal[$value1['ink']]['number']+=$value1['number'];
  235. }
  236. }
  237. }else{ //大小盒至少有一个没值
  238. if ($bigNumber == 1 && $smallNumber > 1){//大盒没值
  239. foreach ($everyTenThousand as $k=>$v){
  240. if ($v['box'] == 2 && is_numeric($v['number'])){
  241. $formulaTotal[$k]['ink'] = $v['ink'];
  242. $formulaTotal[$k]['number'] = ceil($v['number'] * $smallNumber);
  243. }
  244. }
  245. }
  246. if ($smallNumber == 1 && $bigNumber > 1){ //小盒没值
  247. foreach ($everyTenThousand as $k1=>$v1){
  248. if ($v1['box'] == 1 && is_numeric($v1['number'])){
  249. $formulaTotal[$k1]['ink'] = $v1['ink'];
  250. $formulaTotal[$k1]['number'] = ceil($v1['number'] * $bigNumber);
  251. }
  252. }
  253. }
  254. }
  255. //健值从0开始
  256. $formulaTotal = array_values($formulaTotal);
  257. $colorNumber = [];
  258. $i = 0;
  259. foreach ($allColor as $key1=>$val){
  260. $colorNumber[$key1]['beginRow'] = $i;
  261. $number = Db::name('formula_detail')->where(['product_name'=>$params,'color'=>$val])->count();
  262. $colorNumber[$key1]['rowSpan'] = $number;
  263. $i = $number + $i;
  264. }
  265. $formulaData = Db::name('formula_detail')->where('product_name',$params)->order('color_number,id asc')->select();
  266. //根据纸张换算出来的专色重量,除以固定值,相乘即是新的html
  267. foreach ($formulaData as $key2=>$val2){
  268. foreach ($formulaTotal as $key3=>$val3){
  269. if ($formulaData[$key2]['color'] == $val3['ink']){
  270. $multiply = $val3['number'] / $formulaData[$key2]['number'];
  271. $formulaData[$key2]['total'] = (int)( $formulaData[$key2]['total'] * $multiply);
  272. $formulaData[$key2]['number'] = ceil($val3['number']);
  273. }else{
  274. $formulaData[$key2]['total'] = (int)($formulaData[$key2]['total']);
  275. }
  276. }
  277. }
  278. return array('status'=>1,'data'=>$data,'half'=>$half,'rowSpan'=>$rowSpan,'formulaData'=>$formulaData,'colorNumber'=>$colorNumber);
  279. }
  280. //根据专色墨重量计算纸张数
  281. public function sumPaper(){
  282. $params = $this->request->request();
  283. if (empty($params)){
  284. $this->error('数据不能为空');
  285. }
  286. $weight = trim($params['weight']);
  287. $map = [];
  288. $map['formula_name'] = $params['formula_name'];
  289. $map['box'] = $params['box'];
  290. $map['ink'] = $params['ink'];
  291. $data = Db::name('formula_consume')->where($map)->find();
  292. // print_r($data);die;
  293. if (empty($data)){
  294. $this->error('未获取到大小盒计划消耗数据,请联系开发人员');
  295. }
  296. $number = trim($data['number']);
  297. if (!empty($number) && is_numeric($number)){
  298. $planWeight = $data['number'];
  299. //计算公式 一万张纸计划消耗xxx kg专墨 现有$weight kg专墨 换成xxx万张纸
  300. $num = round($weight / $planWeight,2);
  301. return array('status'=>1,'data'=>$num);
  302. }else{
  303. return array('status'=>0,'data'=>'','msg'=>'请完善大小盒计划数据');
  304. }
  305. }
  306. public function doAdd(){
  307. $baseData = input("baseData/a");
  308. $formulaData = input("formulaData/a");
  309. $rowSpanData = input("rowSpanData/a");
  310. $rowSpanConsume = input("rowSpanConsume");
  311. $consume = input("consume/a");
  312. if (!empty($baseData)){
  313. //油墨打印指导书详情数据
  314. $data = [];//工单数据
  315. $data['order_number'] = $baseData[0];
  316. $data['product_name'] = $baseData[1];
  317. $data['number'] = $baseData[2];
  318. $data['formula'] = $baseData[3];
  319. $data['big_number'] = $baseData[4];
  320. $data['small_number'] = $baseData[5];
  321. $data['status'] = $baseData[6];
  322. //油墨批次号
  323. $bach = Db::name('formula_book_detail')->where('order_number',$data['order_number'])->count();
  324. if ($bach == 0){
  325. $data['bach'] = $data['order_number'].'-'.date('Ymd').'-'.'1';
  326. }else{
  327. $bach = $bach + 1;
  328. $data['bach'] = $data['order_number'].'-'.date('Ymd').'-'.$bach;
  329. }
  330. $data['warehousing'] = json_encode($formulaData);//专墨表格数据
  331. $data['formula_span'] = json_encode($rowSpanData);
  332. $data['consume'] = json_encode($consume);
  333. $data['consume_span'] = $rowSpanConsume;
  334. $data['create'] = date('Y-m-d H:i:s');
  335. //油墨打印书数据
  336. $bookData = [];
  337. $bookData['order_number'] = $baseData[0];
  338. $bookData['product_name'] = $baseData[1];
  339. $bookData['number'] = $baseData[2];
  340. $bookData['big_number'] = $baseData[4];
  341. $bookData['small_number'] = $baseData[5];
  342. $bookData['update'] = date('Y-m-d H:i:s');
  343. Db::startTrans();
  344. try{
  345. $isPrint = Db::name('formula_book')->where('order_number',$bookData['order_number'])->find();
  346. if (!$isPrint){
  347. $data['pid'] = Db::name('formula_book')->insertGetId($bookData);
  348. }else{
  349. $data['pid'] = $isPrint['id'];
  350. }
  351. $res = Db::name('formula_book_detail')->insert($data);
  352. if (!$res){
  353. throw new Exception('网络错误');
  354. }
  355. if ($isPrint){
  356. $bookData['big_number'] = Db::name('formula_book_detail')->where('order_number',$bookData['order_number'])->sum('big_number');
  357. $bookData['small_number'] = Db::name('formula_book_detail')->where('order_number',$bookData['order_number'])->sum('small_number');
  358. Db::name('formula_book')->where('order_number',$bookData['order_number'])->setField('big_number',$bookData['big_number']);
  359. Db::name('formula_book')->where('order_number',$bookData['order_number'])->setField('small_number',$bookData['small_number']);
  360. }
  361. Db::commit();
  362. $this->success();
  363. }catch (\think\Exception\DbException $exception){
  364. Db::rollback();
  365. $this->error();
  366. }
  367. }
  368. }
  369. //获取油墨指令书编号
  370. public function getBach(){
  371. $order = input('order');
  372. if ($order == ''){
  373. return array('status'=>0,'msg'=>'未获取到工单号');
  374. }
  375. $result = Db::name('formula_book_detail')->where('order_number',$order)->order('id desc')->select();
  376. if (!empty($result)){
  377. $number = count($result) + 1;
  378. $bach = $order.'-'.date('Ymd').'-'.$number;
  379. }else{
  380. $bach = $order.'-'.date('Ymd').'-'.'1';
  381. }
  382. return array('status'=>1,'bach'=>$bach);
  383. }
  384. //各机台近两个工单领退料情况
  385. // public function machineSituation(){
  386. // /**
  387. // * 定义好机台number,根据机台查询每个机台对应最近2个工单,再查询每个工单有没有退料
  388. // */
  389. // $machineNumber = array(1,2,3,4,5,6,7);
  390. //// $machineNumber = array(1);
  391. // $list = array();
  392. // //第一个循环 处理机台
  393. // foreach ($machineNumber as $key=>$value){
  394. // $orderNumber = Db::name('collar_use')->where('machine_number',$value)->field('distinct(order_number)')->order('id desc')->limit(3)->select();
  395. //// dump($orderNumber);
  396. // //第二个循环 处理工单 各专色领用数据
  397. // foreach ($orderNumber as $k=>$v){
  398. // $map = [];
  399. // $map['a.order_number'] = $v['order_number'];
  400. // $map['a.machine_number'] = $value;
  401. // $lRes = Db::name('collar_use')->alias('a')
  402. // ->join('warehousing_detail b','a.warehousing = b.bach_number')
  403. // ->where($map)->where('a.status',1)->field('a.order_number,a.warehousing,a.weight,b.cid,b.color')->order('b.cid')->select();
  404. //
  405. //// dump('*************************************');
  406. // if (!empty($lRes)){
  407. // $list[$value][$k] = $this->sumWeight($lRes,'cid','weight');
  408. // }else{
  409. // $this->error($value.'号机台'.$v.'工单未查到领用数据,请联系开发人员');
  410. // }
  411. //// dump($list[$value][$k]);
  412. // $tRes = Db::name('collar_use')->alias('a')
  413. // ->join('warehousing_detail b','a.back = b.bach_number')
  414. // ->where($map)->where('a.status',2)->field('a.back,a.back_weight,b.cid,b.color')->order('b.cid')->select();
  415. // $res = array();
  416. // if (!empty($tRes)) {
  417. // $res = $this->sumWeight($tRes, 'cid', 'back_weight');
  418. // $res = array_column($res, 'back_weight', 'cid');//将二位数组转换成一维数组 方便合并计算
  419. // }
  420. //
  421. //// dump(array_keys($res));
  422. // $newRes = array_keys($res);
  423. // //第三个循环 处理工单 各专色退还数据
  424. // foreach ($list[$value][$k] as $i=>$j){
  425. // $list[$value][$k][$i]['weight'] = $list[$value][$k][$i]['weight'] / 1000;
  426. // if (!empty($tRes)){
  427. // if (in_array($j['cid'],$newRes)){
  428. //// dump(1111);
  429. // $list[$value][$k][$i]['back_weight'] = $res[$j['cid']] / 1000;
  430. // }else{
  431. // $list[$value][$k][$i]['back_weight'] = '';
  432. // }
  433. // }else{
  434. // $list[$value][$k][$i]['back_weight'] = '';
  435. // }
  436. //
  437. // }
  438. //
  439. // }
  440. //
  441. // }
  442. //
  443. //// dump($list);
  444. //// die;
  445. // return $this->view->fetch('',compact('list'));
  446. // }
  447. //各机台近两个工单领退料情况
  448. public function machineSituation(){
  449. /**
  450. * 定义好机台number,根据机台查询每个机台对应最近2个工单,再查询每个工单有没有退料
  451. */
  452. $machineNumber = array(1,2,3,4,5,6,7);//$machineNumber = array(1);
  453. $list = array();
  454. //第一个循环 处理机台
  455. foreach ($machineNumber as $key=>$value) {
  456. // $orderNumber = Db::name('collar_use')->where('machine_number', $value)->field('distinct(order_number)')->order('id desc')->limit(3)->select();
  457. $orderNumber = Db::name('collar_use')->where('machine_number', $value)->field('distinct(order_number)')->limit(3)->select();
  458. //第二个循环 处理工单 各专色领用数据
  459. foreach ($orderNumber as $k=>$v) {
  460. $map = [];
  461. $map['a.order_number'] = $v['order_number'];
  462. $map['a.machine_number'] = $value;
  463. /**
  464. * 领用
  465. */
  466. //查询 collar_use 表的数据
  467. $lRes = Db::name('collar_use')->alias('a')
  468. ->join('warehousing_detail b', 'a.warehousing = b.bach_number')
  469. ->where($map)->where('a.status', 1)->order('b.cid')
  470. ->field('a.order_number,a.warehousing,a.weight,b.cid,b.color')
  471. ->select();
  472. if (!empty($lRes)) {
  473. $list[$value][$k]["lRes"] = $this->sumWeight($lRes,'cid','weight');
  474. } else {
  475. $this->error($value.'号机台'.$v.'工单未查到领用数据,请联系开发人员');
  476. }
  477. //查询 matter_use 表的数据
  478. $lR = Db::name("matter_use")->alias('a')//
  479. ->where($map)->where('status', 1)//
  480. ->field('order_number,ink_name,out_weight,code,back_weight')//
  481. ->select();//
  482. $list[$value][$k]["lR"] = $this->sumWeight($lR,'code','out_weight');//sumWeight(数组,'要合并的值','要计算的值')
  483. /**
  484. * 退还
  485. */
  486. //查询 collar_use 表退还数据
  487. $tRes = Db::name('collar_use')->alias('a')
  488. ->join('warehousing_detail b', 'a.back = b.bach_number')
  489. ->where($map)->where('a.status',2)->field('a.back,a.back_weight,b.cid,b.color')->order('b.cid')->select();
  490. $res = array();
  491. if (!empty($tRes)) {
  492. $res = $this->sumWeight($tRes,'cid','back_weight');
  493. $res = array_column($res,'back_weight','cid');//将二位数组转换成一维数组 方便合并计算
  494. }
  495. $newRes = array_keys($res);
  496. //第三个循环 处理工单 各专色退还数据
  497. foreach ($list[$value][$k]["lRes"] as $i=>$j) {
  498. $list[$value][$k]["lRes"][$i]['weight'] = $list[$value][$k]["lRes"][$i]['weight'] / 1000;
  499. if (!empty($tRes)) {
  500. if (in_array($j['cid'],$newRes)) {
  501. $list[$value][$k]["lRes"][$i]['back_weight'] = $res[$j['cid']] / 1000;
  502. } else {
  503. $list[$value][$k]["lRes"][$i]['back_weight'] = '';
  504. }
  505. } else {
  506. $list[$value][$k]["lRes"][$i]['back_weight'] = '';
  507. }
  508. }
  509. //查询 matter_use 表退还数据
  510. $tR = Db::name('matter_use')->alias('a')//
  511. ->where($map)->field('order_number,ink_name,code,back_weight')->select();//
  512. $res = array();//
  513. if (!empty($tR)) {//
  514. $res = $this->sumWeight($tR,'code','back_weight');//
  515. $res = array_column($res,'back_weight','code');//将二位数组转换成一维数组 方便合并计算
  516. }//
  517. $newRes = array_keys($res);//
  518. foreach ($list[$value][$k]["lR"] as &$lr) { //
  519. $lr['out_weight'] = $lr['out_weight'] / 1000;//
  520. if (!empty($tR)) {//
  521. if (in_array($lr['code'], $newRes)) {//
  522. $lr['back_weight'] = $res[$lr['code']] / 1000;//
  523. } else {//
  524. $lr['back_weight'] = '';//
  525. }//
  526. } else {//
  527. $lr['back_weight'] = '';//
  528. }//
  529. }//
  530. }
  531. }
  532. // dump($list);die;//2206179
  533. return $this->view->fetch('', compact('list'));
  534. }
  535. /**
  536. * 计算数量,值去重&相加
  537. * $arr 数组
  538. * $str1 要合并的值
  539. * $str2 要计算的值
  540. */
  541. function sumWeight($arr, $str1, $str2)
  542. {
  543. $item = array();
  544. foreach ($arr as $k => $v) {
  545. if (!isset($item[$v[$str1]])) {
  546. $item[$v[$str1]] = $v;
  547. } else {
  548. $item[$v[$str1]][$str2] += $v[$str2];
  549. }
  550. }
  551. return array_values($item);
  552. }
  553. /**
  554. * POST 请求
  555. * @param string $url
  556. * @param array $param
  557. * @param boolean $post_file 是否文件上传
  558. * @return string content
  559. */
  560. static public function post($url, $param, $post_file = false)
  561. {
  562. $oCurl = curl_init();
  563. if (stripos($url, "https://") !== FALSE) {
  564. curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
  565. curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
  566. curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
  567. }
  568. if (is_string($param) || $post_file) {
  569. $strPOST = $param;
  570. } else {
  571. $aPOST = array();
  572. foreach ($param as $key => $val) {
  573. $aPOST[] = $key . "=" . urlencode($val);
  574. }
  575. $strPOST = join("&", $aPOST);
  576. }
  577. curl_setopt($oCurl, CURLOPT_URL, $url);
  578. curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
  579. curl_setopt($oCurl, CURLOPT_POST, true);
  580. curl_setopt($oCurl, CURLOPT_POSTFIELDS, $strPOST);
  581. $sContent = curl_exec($oCurl);
  582. $aStatus = curl_getinfo($oCurl);
  583. curl_close($oCurl);
  584. if (intval($aStatus["http_code"]) == 200) {
  585. return $sContent;
  586. } else {
  587. return false;
  588. }
  589. }
  590. /**
  591. * Power: Mikkle
  592. * Email:776329498@qq.com
  593. * @param $url
  594. * @return bool|mixed
  595. */
  596. static public function get($url)
  597. {
  598. $oCurl = curl_init();
  599. if (stripos($url, "https://") !== FALSE) {
  600. curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
  601. curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
  602. curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
  603. }
  604. curl_setopt($oCurl, CURLOPT_URL, $url);
  605. curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
  606. $sContent = curl_exec($oCurl);
  607. $aStatus = curl_getinfo($oCurl);
  608. curl_close($oCurl);
  609. if (intval($aStatus["http_code"]) == 200) {
  610. return $sContent;
  611. } else {
  612. return false;
  613. }
  614. }
  615. public function machine_sit_show()
  616. {
  617. $parm = input();
  618. $order_num = input('order_num');
  619. $collarUse = new \app\admin\model\CollarUse;
  620. $matterUse = new \app\admin\model\MatterUse;
  621. $collarUse_list = $collarUse->where('order_number', $order_num)
  622. ->field('order_number,weight,back_weight,status,warehousing,back,create')
  623. ->paginate(5, false, ['query' => $parm]);
  624. foreach ($collarUse_list as &$v) {
  625. if ($v['status'] == 1) {
  626. $v['color'] = \app\admin\model\WarehousingDetail::where('bach_number', $v['warehousing'])->value('color');
  627. } else {
  628. $v['color'] = \app\admin\model\WarehousingDetail::where('bach_number', $v['back'])->value('color');
  629. }
  630. $v['weight'] = $v['weight'] / 1000;
  631. $v['back_weight'] = $v['back_weight'] / 1000;
  632. }
  633. $page = $collarUse_list->render();
  634. $this->view->assign('page', $page);
  635. $matterUse_list = $matterUse->where('order_number', $order_num)
  636. ->field('order_number,out_weight,back_weight,status,out,back,ink_name,create')
  637. ->npaginate(5, false, ['query' => $parm]);
  638. foreach ($matterUse_list as &$vv) {
  639. $vv['out_weight'] = $vv['out_weight'] / 1000;
  640. $vv['back_weight'] = $vv['back_weight'] / 1000;
  641. }
  642. $page1 = $matterUse_list->render();
  643. $this->view->assign('page1', $page1);
  644. $this->view->assign('collarUse_list', $collarUse_list);
  645. $this->view->assign('matterUse_list', $matterUse_list);
  646. return $this->view->fetch();
  647. }
  648. //领退料信息专墨
  649. public function machine_collar_show(){
  650. $parm = input();//collar 专色墨名称 //order_num 工单号 //jh 几号机
  651. //根据工单批次号获取对应配方、库存信息
  652. $product = Db::connect('db2')->query("select * from 工单_基本资料 where Gd_gdbh = '{$parm['order_num']}' limit 1");
  653. if (empty($product)) {
  654. return array('status' => 0, 'msg' => '查不到工单数据,请联系管理员');
  655. }
  656. if($parm['datatype'] == '1'){
  657. $collarUse = new \app\admin\model\CollarUse;
  658. $product_number = rtrim($product[0]['Gd_cpdh']);
  659. $id = Db::name('formula')->where("FIND_IN_SET($product_number,product_number)")->where('color', $parm['collar'])->value('id');
  660. $collarUse_list = $collarUse->where('cid', $id)
  661. ->where('machine_number',$parm['jh'])//
  662. ->where('order_number', $parm['order_num'])->paginate(5, false, ['query' => $parm]);
  663. foreach ($collarUse_list as &$v) {
  664. if ($v['status'] == 1) {
  665. $v['color'] = \app\admin\model\WarehousingDetail::where('bach_number', $v['warehousing'])->value('color');
  666. } else {
  667. $v['color'] = \app\admin\model\WarehousingDetail::where('bach_number', $v['back'])->value('color');
  668. }
  669. $v['weight'] = $v['weight'] / 1000;
  670. $v['back_weight'] = $v['back_weight'] / 1000;
  671. }
  672. // halt($collarUse_list);
  673. $page = $collarUse_list->render();
  674. $this->view->assign('page', $page);
  675. $this->view->assign('collarUse_list', $collarUse_list);
  676. }else{
  677. $MatterUse = new \app\admin\model\MatterUse;//
  678. $matterUse_list = Db::name('matter_use')//
  679. ->where('ink_name', $parm['collar'])//
  680. ->where('order_number', $parm['order_num'])//
  681. ->where('machine_number',$parm['jh'])//
  682. ->paginate(5, false, ['query' => $parm]);
  683. // ->select();//
  684. $matter = $matterUse_list->toArray()['data'];
  685. // halt($matter);
  686. foreach ($matter as $key=>$v) { //
  687. // if ($v['status'] == 1) {//status=1领用
  688. // $v['ink_name'] = $MatterUse->where('code', $v['code'])->value('ink_name');//
  689. // } else {//2=退回
  690. // $v['ink_name'] = $MatterUse->where('code', $v['code'])->value('ink_name');//
  691. // }//
  692. $matter[$key]['out_weight'] = $v['out_weight'] / 1000;//
  693. $matter[$key]['back_weight'] = $v['back_weight'] / 1000;//
  694. }//
  695. // halt($matterUse_list);
  696. $page = $matterUse_list->render();
  697. $this->view->assign('page', $page);
  698. $this->view->assign('MatterUse_list', $matter);//
  699. }
  700. return $this->view->fetch();
  701. }
  702. //领用油墨分解成原墨统计
  703. public function collar_decompose(){
  704. $data = $this->request->request();
  705. if ($this->request->isAjax()) {
  706. if (isset($data['s_time']) && isset($data['e_time'])){
  707. $map['create'] = array('between',array($data['s_time'],$data['e_time']));
  708. }
  709. if (isset($data['jt'])){
  710. $map['machine_number'] = $data['jt'];
  711. }
  712. // if (empty($map)){
  713. // $map['machine_number'] = 1;
  714. // $s_time = date('Y-m-d H:i',strtotime('-1 day'));
  715. // $e_time = date('Y-m-d H:i');
  716. // $map['create'] = array('between',array($s_time,$e_time));
  717. // }
  718. if (!empty($map)){
  719. //专色墨数据 --领用
  720. $collar_out = Db::name('collar_use')->where($map)->where('status',1)->field('id,cid,weight')->select();
  721. $collar_out_total = $this->sumWeight($collar_out,'cid','weight');//领用总计
  722. //专墨 --退回
  723. $collar_back = Db::name('collar_use')->where($map)->where('status',2)->field('id,cid,back_weight as weight')->select();
  724. $collar_back_total = $this->sumWeight($collar_back,'cid','weight');//退回总计
  725. //计算数据数组
  726. foreach ($collar_out_total as $key=>$value){
  727. foreach ($collar_back_total as $k=>$v){
  728. if ($collar_out_total[$key]['cid'] == $v['cid']){
  729. $collar_out_total[$key]['weight'] = $collar_out_total[$key]['weight'] - $v['weight'];
  730. unset($collar_back_total[$k]);
  731. }
  732. }
  733. }
  734. //如果有多余的退还数据,值变成负数
  735. if (!empty($collar_back_total)){
  736. foreach ($collar_back_total as $ke=>$val){
  737. $collar_back_total[$ke]['weight'] = '-'.$val['weight'];
  738. array_push($collar_out_total,$val);
  739. }
  740. }
  741. // print_r($collar_out_total);die;
  742. //分解专色墨数据
  743. $list_arr = [];
  744. $collar_list = [];
  745. foreach ($collar_out_total as $kj=>$vol){
  746. // print_r($vol);die;
  747. $formula_detail = Db::name('formula_detail')->where('father',$vol['cid'])->field('id,ink,ink_number,number,total,code')->select();
  748. $sum_number = Db::name('formula_detail')->where('father',$vol['cid'])->sum('ink_number');
  749. foreach($formula_detail as $kl =>$vsl){
  750. $list_arr[$kj][$kl]['code'] = $vsl['code'];
  751. $list_arr[$kj][$kl]['ink'] = $vsl['ink'];
  752. $list_arr[$kj][$kl]['weight'] = round($vsl['ink_number'] / $sum_number * $vol['weight'] /1000,3); //计划用量/固定数值*总计用量
  753. array_push($collar_list,$list_arr[$kj][$kl]);
  754. }
  755. }
  756. $collar_list = $this->sumWeight($collar_list,'code','weight');
  757. //油墨数据 --领用
  758. $matter_out = Db::name('matter_use')->where($map)->where('status',1)->field('id,ink_name as ink,code,out_weight as weight')->select();
  759. $matter_out_total = $this->sumWeight($matter_out,'code','weight');
  760. $matter_back = Db::name('matter_use')->where($map)->where('status',2)->field('id,ink_name as ink,code,back_weight as weight')->select();
  761. $matter_back_total = $this->sumWeight($matter_back,'code','weight');
  762. //计算数据数组
  763. foreach ($matter_out_total as $key1=>$value1){
  764. foreach ($matter_back_total as $k1=>$v1){
  765. if ($matter_out_total[$key1]['code'] == $v1['code']){
  766. $matter_out_total[$key1]['weight'] = $matter_out_total[$key1]['weight'] - $v1['weight'] ;
  767. unset($matter_back_total[$k1]);
  768. }
  769. }
  770. $matter_out_total[$key1]['weight'] = $matter_out_total[$key1]['weight'] / 1000;
  771. }
  772. //如果有多余的退还数据,值变成负数
  773. if (!empty($matter_back_total)){
  774. foreach ($matter_back_total as $ke1=>$val1){
  775. $val1['weight'] = '-'.($val1['weight'] / 1000);
  776. array_push($matter_out_total,$val1);
  777. }
  778. }
  779. $list = array_merge_recursive($collar_list,$matter_out_total);
  780. $list = $this->sumWeight($list,'code','weight');
  781. $total = count($list);
  782. $result = array("total" => $total, "rows" => $list);
  783. $this->success('查询成功','',$result);
  784. }else{
  785. $total = 0;
  786. $list = [];
  787. $result = array("total" => $total, "rows" => $list);
  788. return json($result);
  789. }
  790. }
  791. return $this->view->fetch();
  792. }
  793. }