DwyService.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. <?php
  2. namespace App\Service;
  3. /**
  4. * dwy相关
  5. * @package App\Models
  6. */
  7. class DwyService extends Service
  8. {
  9. private $url = 'https://tm.dwycloud.com';
  10. protected $num = 0;
  11. protected static $instance;
  12. public static function getInstance(): self
  13. {
  14. if (self::$instance == null) {
  15. self::$instance = new DwyService();
  16. }
  17. return self::$instance;
  18. }
  19. public function setBoxData($token,$dv,$data,$box_list,$old_data){
  20. //
  21. $this->num = 0;
  22. // 测试
  23. // $token = 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1ODg5MzM1OTMwMTE3MjAxOTIiLCJhdXRoIjoiUk9MRV9JTlRFUkZBQ0UsUk9MRV9TRU5EX0JSQU5EX1NVUFBMSUVSLFJPTEVfQlJBTkRfU1VQUExJRVIsUk9MRV9VU0VfQlJBTkRfU1VQUExJRVIsUk9MRV9PVVRFUl9VU0VSLFJPTEVfSU5ORVJfVVNFUiIsInRva2VuSWQiOiIyIiwiZXhwIjoxNzIxMDExNjcwfQ.T8M-h2_EbBLU9xxMUP52c4B_OtzIRLWdLOYru8qE0Zi0k9PfIfYff8TxaQ9Kux8j6_2zJW1asSODjK3slNsNYQ';
  24. // $dv = 'cff4dc68c73115b';/**/
  25. // $box_list = [
  26. // 'CK00009',
  27. // 'CK00018',
  28. // ];
  29. //
  30. // $old_data = json_decode('{"key":"cff4dc68c73115b","lead_bind":{"device_code":"cff4dc68c73115b","material_list":[{"product_code":"BC020202000999","fake_qty":"14","product_code_show":"信息部测试1800香杉木","order_item_id":"588967413639417856","order_item_id_show":"SO202406130075","material_code":"40010101000999","material_code_show":"E0批零免漆(测试白标)","process_title":"定做雨丝","process_title_two":null,"color":"测试花色01","color_two":null,"brand_qr_code_list":["http://n.mskj315.com/23/12/zgxe0.aspx?code=1J6QC1KLQK7LLPB9OB5T&xh=2406013017647","http://n.mskj315.com/23/12/zgxe0.aspx?code=86AMW8D1GHMPANMBYOBG&xh=2406013017645","http://n.mskj315.com/23/12/zgxe0.aspx?code=RFCEGOHNOO8I9WML7W06&xh=2406013017643","http://n.mskj315.com/23/12/zgxe0.aspx?code=UJ4RKXMN83TPT6B4M37V&xh=2406013017641","http://n.mskj315.com/23/12/zgxe0.aspx?code=GPSLMBAWYSYNGGEMB519&xh=2406013017639","http://n.mskj315.com/23/12/zgxe0.aspx?code=8VP6HYJK2HTY23G203X1&xh=2406013017637","http://n.mskj315.com/23/12/zgxe0.aspx?code=29V3CVSK78BNPKA493PI&xh=2406013017635","http://n.mskj315.com/23/12/zgxe0.aspx?code=UJ4R1XMJ2Q4OL0B64376&xh=2406013017633","http://n.mskj315.com/23/12/zgxe0.aspx?code=DN2E6GAFH77JFCM2S5C5&xh=2406013017631","http://n.mskj315.com/23/12/zgxe0.aspx?code=86AM08DJ00J424M1WOBV&xh=2406013017629","http://n.mskj315.com"],"order_no_list":"SO202406130075"},{"product_code":"BC020202000999","fake_qty":"14","product_code_show":"信息部测试1800香杉木","order_item_id":"588967413639417856","order_item_id_show":"SO202406130075","material_code":"40010501000999","material_code_show":"银盾抗菌圆标(测试白标)","process_title":"定做雨丝","process_title_two":null,"color":"测试花色01","color_two":null,"brand_qr_code_list":["0ILVOCU8K655QGT28YAX","7U8D50VWMR3XTANC65G6"],"order_no_list":"SO202406130075"}]},"lead_out":{"brand_out_stock_list":[{"in_out_type_code":"CK00004","in_out_type_code_show":"商标仓正常领标出库","send_box_code":"CK00004","send_box_code_show":"商标一号仓","device_code":"cff4dc68c73115b","get_brand_source_dk":"SALE_ORDER","brand_out_stock_dtl":[{"item_no":10,"brand_qr_code_list":"http://n.mskj315.com/23/12/zgxe0.aspx?code=1J6QC1KLQK7LLPB9OB5T&xh=2406013017647,http://n.mskj315.com/23/12/zgxe0.aspx?code=86AMW8D1GHMPANMBYOBG&xh=2406013017645,http://n.mskj315.com/23/12/zgxe0.aspx?code=RFCEGOHNOO8I9WML7W06&xh=2406013017643,http://n.mskj315.com/23/12/zgxe0.aspx?code=UJ4RKXMN83TPT6B4M37V&xh=2406013017641,http://n.mskj315.com/23/12/zgxe0.aspx?code=GPSLMBAWYSYNGGEMB519&xh=2406013017639,http://n.mskj315.com/23/12/zgxe0.aspx?code=8VP6HYJK2HTY23G203X1&xh=2406013017637,http://n.mskj315.com/23/12/zgxe0.aspx?code=29V3CVSK78BNPKA493PI&xh=2406013017635,http://n.mskj315.com/23/12/zgxe0.aspx?code=UJ4R1XMJ2Q4OL0B64376&xh=2406013017633,http://n.mskj315.com/23/12/zgxe0.aspx?code=DN2E6GAFH77JFCM2S5C5&xh=2406013017631,http://n.mskj315.com/23/12/zgxe0.aspx?code=86AM08DJ00J424M1WOBV&xh=2406013017629,http://n.mskj315.com","material_code":"40010101000999","restock_qty":0,"material_code_show":"E0批零免漆(测试白标)","unit_code":"ST","unit_code_show":"张","qty":"11","fake_qty":"14","bus_type_dk":"SALE_ORDER","bus_type_dk_show":"销售订单","bus_no":"588967413639417856","bus_no_show":"SO202406130075"}]},{"in_out_type_code":"CK00004","in_out_type_code_show":"商标仓正常领标出库","send_box_code":"CK00018","send_box_code_show":"商标十五号仓","device_code":"cff4dc68c73115b","get_brand_source_dk":"SALE_ORDER","brand_out_stock_dtl":[{"item_no":10,"brand_qr_code_list":"0ILVOCU8K655QGT28YAX,7U8D50VWMR3XTANC65G6","material_code":"40010501000999","restock_qty":0,"material_code_show":"银盾抗菌圆标(测试白标)","unit_code":"ST","unit_code_show":"张","qty":"2","fake_qty":"14","bus_type_dk":"SALE_ORDER","bus_type_dk_show":"销售订单","bus_no":"588967413639417856","bus_no_show":"SO202406130075"}]}]}}',true);
  31. // var_dump($old_data['lead_bind']);die;
  32. // var_dump($old_data);die;
  33. // var_dump($old_data);die;
  34. // 处理数据
  35. // list ($data,$box_list) = $this->clearData($old_data);
  36. // var_dump($data);die;
  37. // var_dump($box_list);die;
  38. // dd($old_data);die;
  39. //请求获取仓位卷码信息
  40. $box_roll_list = $this->getBoxData($dv,$token,$box_list);
  41. // var_dump($box_roll_list);die;
  42. $new_data = [];
  43. foreach ($data as $k=>$box_detail){
  44. foreach ($box_detail['detail'] as $v){
  45. foreach ($box_roll_list as $roll_number=>$roll_detail){
  46. if(in_array($v,$roll_detail['detail'])){
  47. if(!isset($new_data[$roll_detail['box_code']])) $new_data[$roll_detail['box_code']] = [
  48. 'detail' => [],
  49. 'fake_qty' => $data[$roll_detail['box_code']]['fake_qty'],
  50. 'material_code' => $roll_detail['material_code'],
  51. 'roll_number' => $roll_number
  52. ];
  53. $new_data[$roll_detail['box_code']]['detail'][] = $v;
  54. break;
  55. }
  56. }
  57. }
  58. }
  59. //补全数据
  60. if($dv === 'a6a672c3e458bed2'){
  61. $new_data = $this->setBoxFake($new_data);
  62. list($lind_bind,$lead_out) = $this->setNewData1($old_data,$new_data);
  63. }else{
  64. list($lind_bind,$lead_out) = $this->setNewData($old_data,$new_data);
  65. }
  66. //
  67. //把数据拼回去
  68. // var_dump($data);die;
  69. // var_dump($old_data);die;
  70. // var_dump($lind_bind);
  71. // var_dump($lead_out);die;
  72. // die('ddd');
  73. return [$lind_bind,$lead_out];
  74. }
  75. public function clearData($data){
  76. $return = [];
  77. $box_list = [];
  78. if( empty($data['lead_out']) || empty($data['lead_out']['brand_out_stock_list'])) return;
  79. foreach ($data['lead_out']['brand_out_stock_list'] as $value){
  80. $tmp = $value['brand_out_stock_dtl'][0] ?? [];
  81. $return[$value['send_box_code']] = [
  82. 'fake_qty' => $tmp['fake_qty'],
  83. 'detail' => explode(',',$tmp['brand_qr_code_list'])
  84. ];
  85. $box_list[] = $value['send_box_code'];
  86. }
  87. return [$return,$box_list];
  88. }
  89. // 获取指定数量的值,并从原数组中删除这些值
  90. function getValues(&$array, $count) {
  91. // 获取前$count个值
  92. $result = array_slice($array, 0, $count);
  93. // 从原数组中删除这些值
  94. $array = array_slice($array, $count);
  95. return $result;
  96. }
  97. private function setNewData($old_data,$data){
  98. // var_dump($old_data);
  99. $code_key_data = [];
  100. foreach ($data as $v){
  101. if(!isset($code_key_data[$v['material_code']])) $code_key_data[$v['material_code']] = [];
  102. $code_key_data[$v['material_code']] = array_merge($code_key_data[$v['material_code']],$v['detail']);
  103. }
  104. $lind_bind = $old_data['lead_bind'];
  105. $lind_bind_key_list = [];
  106. foreach ($lind_bind['material_list'] as &$l){
  107. // unset($l['brand_qr_code_list']);
  108. // $l['qty'] = $l['fake_qty'];
  109. // $l['brand_qr_code_list'] = $this->getValues( $code_key_data[$l['material_code']],$l['qty']);
  110. $lind_bind_key_list[$l['order_item_id']] = [
  111. 'product_code' => $l['product_code'],
  112. 'product_code_show' => $l['product_code_show'],
  113. 'process_title' => $l['process_title'],
  114. 'color' => $l['color'],
  115. 'process_title_two' => $l['process_title_two'],
  116. 'color_two' => $l['color_two'],
  117. ];
  118. unset($l['fake_qty']);
  119. }
  120. $lead_out = $old_data['lead_out']['brand_out_stock_list'];
  121. foreach ($lead_out as &$ll){
  122. foreach ($ll['brand_out_stock_dtl'] as &$lll){
  123. // unset($lll['brand_qr_code_list']);
  124. // $lll['qty'] = $ll['brand_out_stock_dtl'][0]['fake_qty'];
  125. // $lll['qty'] = $lll['fake_qty'];
  126. // unset($lll['fake_qty']);
  127. // var_dump($data[$ll['send_box_code']]);
  128. // $lll['brand_qr_code_list'] = implode(',',$data[$ll['send_box_code']]['detail']);
  129. // $lll['brand_qr_code_list'] = implode(',',$this->getValues( $data[$ll['send_box_code']]['detail'],$lll['qty']));;
  130. $lll['product_code'] = $lind_bind_key_list[$lll['bus_no']]['product_code'] ?? '';
  131. $lll['product_code_show'] = $lind_bind_key_list[$lll['bus_no']]['product_code_show'] ?? '';
  132. $lll['process_title'] = $lind_bind_key_list[$lll['bus_no']]['process_title'] ?? '';
  133. $lll['color'] = $lind_bind_key_list[$lll['bus_no']]['color'] ?? '';
  134. $lll['process_title_two'] = $lind_bind_key_list[$lll['bus_no']]['process_title_two'] ?? '';
  135. $lll['color_two'] = $lind_bind_key_list[$lll['bus_no']]['color_two'] ?? '';
  136. }
  137. }
  138. file_put_contents('1.txt',json_encode(['lind_bind'=>$lind_bind,'lead_out'=>['brand_out_stock_list'=>$lead_out]]));
  139. // var_dump($lind_bind);
  140. // var_dump($lead_out);die;
  141. return [$lind_bind,['brand_out_stock_list'=>$lead_out]];
  142. }
  143. private function setNewData1($old_data,$data){
  144. // var_dump($old_data);
  145. $code_key_data = [];
  146. foreach ($data as $v){
  147. if(!isset($code_key_data[$v['material_code']])) $code_key_data[$v['material_code']] = [];
  148. $code_key_data[$v['material_code']] = array_merge($code_key_data[$v['material_code']],$v['detail']);
  149. }
  150. $lind_bind = $old_data['lead_bind'];
  151. $lind_bind_key_list = [];
  152. foreach ($lind_bind['material_list'] as &$l){
  153. unset($l['brand_qr_code_list']);
  154. $l['qty'] = $l['fake_qty'];
  155. $l['brand_qr_code_list'] = $this->getValues( $code_key_data[$l['material_code']],$l['qty']);
  156. $lind_bind_key_list[$l['order_item_id']] = [
  157. 'product_code' => $l['product_code'],
  158. 'product_code_show' => $l['product_code_show'],
  159. 'process_title' => $l['process_title'],
  160. 'color' => $l['color'],
  161. 'process_title_two' => $l['process_title_two'],
  162. 'color_two' => $l['color_two'],
  163. ];
  164. unset($l['fake_qty']);
  165. }
  166. $lead_out = $old_data['lead_out']['brand_out_stock_list'];
  167. foreach ($lead_out as &$ll){
  168. foreach ($ll['brand_out_stock_dtl'] as &$lll){
  169. unset($lll['brand_qr_code_list']);
  170. // $lll['qty'] = $ll['brand_out_stock_dtl'][0]['fake_qty'];
  171. $lll['qty'] = $lll['fake_qty'];
  172. unset($lll['fake_qty']);
  173. // var_dump($data[$ll['send_box_code']]);
  174. // $lll['brand_qr_code_list'] = implode(',',$data[$ll['send_box_code']]['detail']);
  175. $lll['brand_qr_code_list'] = implode(',',$this->getValues( $data[$ll['send_box_code']]['detail'],$lll['qty']));;
  176. $lll['product_code'] = $lind_bind_key_list[$lll['bus_no']]['product_code'] ?? '';
  177. $lll['product_code_show'] = $lind_bind_key_list[$lll['bus_no']]['product_code_show'] ?? '';
  178. $lll['process_title'] = $lind_bind_key_list[$lll['bus_no']]['process_title'] ?? '';
  179. $lll['color'] = $lind_bind_key_list[$lll['bus_no']]['color'] ?? '';
  180. $lll['process_title_two'] = $lind_bind_key_list[$lll['bus_no']]['process_title_two'] ?? '';
  181. $lll['color_two'] = $lind_bind_key_list[$lll['bus_no']]['color_two'] ?? '';
  182. }
  183. }
  184. file_put_contents('1.txt',json_encode(['lind_bind'=>$lind_bind,'lead_out'=>['brand_out_stock_list'=>$lead_out]]));
  185. // var_dump($lind_bind);
  186. // var_dump($lead_out);die;
  187. return [$lind_bind,['brand_out_stock_list'=>$lead_out]];
  188. }
  189. private function setBoxFake($data){
  190. foreach ($data as $k=>$v){
  191. if($v['fake_qty'] > count($v['detail'])){
  192. $diff = $v['fake_qty'] - count($v['detail']);
  193. $return = $this->fakeData($v['roll_number'],$diff);
  194. $data[$k]['detail'] = array_merge($v['detail'],$return);
  195. }
  196. }
  197. return $data;
  198. }
  199. private function fakeData($number,$diff){
  200. $return = [];
  201. for ($i=0;$i < $diff;$i++){
  202. $this->num++;
  203. $return[] = 'f'.$number.'a'.$this->num.rand(10,99);
  204. }
  205. return $return;
  206. }
  207. private function getBoxData($dv,$token,$box_list){
  208. //为了取商标卷码
  209. $res = $this->post_helper($this->url.'/jbl/api/module-data/device/device/diy/device_code',['device_code'=>$dv],$token);
  210. $res = json_decode($res,true);
  211. $detail = [];
  212. $qr_codes = [];
  213. if(isset($res['data'])){
  214. foreach ($res['data'] as $v){
  215. if(in_array($v['box_code'],$box_list)){
  216. $detail[$v['roll_qr_code']] = $v['box_code'];
  217. $qr_codes[] = $v['roll_qr_code'];
  218. }
  219. }
  220. }else{
  221. return [false,''];
  222. }
  223. //为了取仓对应卷码进行获取
  224. $res = $this->post_helper($this->url.'/jbl/api/module-data/brand_sale_order/brand_sale_order/diy/find_roll_qr_code_list',['roll_qr_code_list'=>$qr_codes],$token);
  225. $res = json_decode($res,true);
  226. $qr_roll_list = [];
  227. if(isset($res['data'])){
  228. foreach ($res['data'] as $v){
  229. // if(!empty($v['out_brand_qr_code'])) continue;
  230. if(!isset($qr_roll_list[$v['roll_qr_code']]['material_code'])) {
  231. $qr_roll_list[$v['roll_qr_code']]['material_code'] = $v['material_code'];
  232. $qr_roll_list[$v['roll_qr_code']]['box_code'] = $detail[$v['roll_qr_code']];
  233. }
  234. $qr_roll_list[$v['roll_qr_code']]['detail'][] = $v['brand_qr_code'];
  235. }
  236. }
  237. return $qr_roll_list;
  238. }
  239. //限制领标
  240. public function setLimitForBoxOut($data){
  241. if(empty($data['token']) || empty($data['list']) || empty($data['mac'])) return [false, '缺少必要参数,操作失败'];
  242. foreach ($data['list'] as $value){
  243. $key = $value['order_item_id'] . hash('md5', $value['title']);
  244. $bool = $this->limitingSendRequestBackg($key, $value['num'], 600);
  245. if(! $bool) return [false, '同一产品相同商标限制同时操作,请稍后操作!'];
  246. }
  247. return [true, ''];
  248. }
  249. //删除限制领标
  250. public function delLimitForBoxOut($data){
  251. if(empty($data['material_list'])) return ;
  252. foreach ($data['material_list'] as $value){
  253. $key = $value['order_item_id'] . hash('md5', $value['material_code_show']);
  254. $this->dellimitingSendRequestBackg($key);
  255. }
  256. }
  257. public function post_helper($url, $data, $auth)
  258. {
  259. $header = [
  260. 'Content-Type: application/json',
  261. 'Authorization: ' . $auth,
  262. ];
  263. $data = json_encode($data);
  264. // var_dump($url);die;
  265. $ch = curl_init();
  266. curl_setopt($ch, CURLOPT_POST, 1);
  267. curl_setopt($ch, CURLOPT_URL, $url);
  268. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  269. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  270. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  271. curl_setopt($ch, CURLOPT_TIMEOUT, 30);
  272. if (!is_null($data)) curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  273. $r = curl_exec($ch);
  274. curl_close($ch);
  275. return $r;
  276. }
  277. }