Order.php 38 KB

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