DwyService.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  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.eyJzdWIiOiI1NjYxNTc5MjMwMDUzNzAzNjgiLCJhdXRoIjoiUk9MRV9CUkFORF9TVVBQTElFUixST0xFX1VTRV9CUkFORF9TVVBQTElFUixST0xFX0lOTkVSX1VTRVIsUk9MRV9JTlRFUkZBQ0UsUk9MRV9TRU5EX0JSQU5EX1NVUFBMSUVSIiwidG9rZW5JZCI6IjQiLCJleHAiOjE3MTk2NzI1OTN9.VKDLhTILWHe6MIAlzNvxCk4pBQaV-Et1UFYb12xTxl-QcVWpYaWLZnk6_QJ2bDXMplp75DuIKADmjuHDjDFSWQ';
  24. // $dv = 'DV00001';
  25. // $box_list = [
  26. // 'CK00009',
  27. // 'CK00010',
  28. // 'CK00005',
  29. // ];
  30. //
  31. // $data = json_decode('{"CK00009":{"fake_qty":3,"detail":["K46WB21ETR0CUMYOSFTM","HWCTUAP8V311V09PUGGX","HN63POFJR1TXDF5QNCF0"]},"CK00010":{"fake_qty":3,"detail":["O9U5SIJ0MTKNU29CR0KN","0ILVKCUS8EQESUA07YA9","7U8DQ0VXVW4WGGTJO5GH"]},"CK00005":{"fake_qty":4,"detail":["GPSL2BANQ5M3YRBMT51N","W42O0R7R73QLCEDWJRL2","KU5TIO5B8U0SCVRVC7KD","7U8DB0V4VY1TJL3GM5G0"]}}',true);
  32. // $old_data = json_decode('{"key":"DV00001","lead_bind":{"device_code":"DV00001","material_list":[{"product_code":"BC020202000997","fake_qty":"3","product_code_show":"信息部测试1800优选型香杉木","order_item_id":"585311431432609792","order_item_id_show":"SO202406030058","material_code":"40010232000001","material_code_show":"优选A6森芯板E0小标","process_title":null,"process_title_two":null,"color":null,"color_two":null,"brand_qr_code_list":["K46WB21ETR0CUMYOSFTM","HWCTUAP8V311V09PUGGX","HN63POFJR1TXDF5QNCF0"],"order_no_list":"SO202406030058"},{"product_code":"BC020202000999","fake_qty":"1","product_code_show":"信息部测试1800香杉木","order_item_id":"585311431478747136","order_item_id_show":"SO202406030058","material_code":"40010101000999","material_code_show":"E0批零免漆(测试白标)","process_title":null,"process_title_two":null,"color":null,"color_two":null,"brand_qr_code_list":["O9U5SIJ0MTKNU29CR0KN"],"order_no_list":"SO202406030058"},{"product_code":"BC020202000998","fake_qty":"2","product_code_show":"信息部测试1800香杉木W","order_item_id":"585311431457775616","order_item_id_show":"SO202406030058","material_code":"40010101000999","material_code_show":"E0批零免漆(测试白标)","process_title":null,"process_title_two":null,"color":null,"color_two":null,"brand_qr_code_list":["0ILVKCUS8EQESUA07YA9","7U8DQ0VXVW4WGGTJO5GH"],"order_no_list":"SO202406030058"},{"product_code":"BC020202000997","fake_qty":"4","product_code_show":"信息部测试1800优选型香杉木","order_item_id":"585311431432609792","order_item_id_show":"SO202406030058","material_code":"40010501000999","material_code_show":"银盾抗菌圆标(测试白标)","process_title":null,"process_title_two":null,"color":null,"color_two":null,"brand_qr_code_list":["GPSL2BANQ5M3YRBMT51N","W42O0R7R73QLCEDWJRL2","KU5TIO5B8U0SCVRVC7KD","7U8DB0V4VY1TJL3GM5G0"],"order_no_list":"SO202406030058"}]},"lead_out":{"brand_out_stock_list":[{"in_out_type_code":"CK00004","in_out_type_code_show":"商标仓正常领标出库","send_box_code":"CK00009","send_box_code_show":"商标六号仓","device_code":"DV00001","get_brand_source_dk":"SALE_ORDER","brand_out_stock_dtl":[{"item_no":10,"brand_qr_code_list":"K46WB21ETR0CUMYOSFTM,HWCTUAP8V311V09PUGGX,HN63POFJR1TXDF5QNCF0","material_code":"40010232000001","restock_qty":0,"material_code_show":"优选A6森芯板E0小标","unit_code":"ST","unit_code_show":"张","qty":"3","fake_qty":"3","bus_type_dk":"SALE_ORDER","bus_type_dk_show":"销售订单","bus_no":"585311431432609792","bus_no_show":"SO202406030058"}]},{"in_out_type_code":"CK00004","in_out_type_code_show":"商标仓正常领标出库","send_box_code":"CK00010","send_box_code_show":"商标七号仓","device_code":"DV00001","get_brand_source_dk":"SALE_ORDER","brand_out_stock_dtl":[{"item_no":10,"brand_qr_code_list":"O9U5SIJ0MTKNU29CR0KN","material_code":"40010101000999","restock_qty":0,"material_code_show":"E0批零免漆(测试白标)","unit_code":"ST","unit_code_show":"张","qty":"1","fake_qty":"1","bus_type_dk":"SALE_ORDER","bus_type_dk_show":"销售订单","bus_no":"585311431478747136","bus_no_show":"SO202406030058"},{"item_no":20,"brand_qr_code_list":"0ILVKCUS8EQESUA07YA9,7U8DQ0VXVW4WGGTJO5GH","material_code":"40010101000999","restock_qty":0,"material_code_show":"E0批零免漆(测试白标)","unit_code":"ST","unit_code_show":"张","qty":"2","fake_qty":"2","bus_type_dk":"SALE_ORDER","bus_type_dk_show":"销售订单","bus_no":"585311431457775616","bus_no_show":"SO202406030058"}]},{"in_out_type_code":"CK00004","in_out_type_code_show":"商标仓正常领标出库","send_box_code":"CK00005","send_box_code_show":"商标二号仓","device_code":"DV00001","get_brand_source_dk":"SALE_ORDER","brand_out_stock_dtl":[{"item_no":10,"brand_qr_code_list":"GPSL2BANQ5M3YRBMT51N,W42O0R7R73QLCEDWJRL2,KU5TIO5B8U0SCVRVC7KD,7U8DB0V4VY1TJL3GM5G0","material_code":"40010501000999","restock_qty":0,"material_code_show":"银盾抗菌圆标(测试白标)","unit_code":"ST","unit_code_show":"张","qty":"4","fake_qty":"4","bus_type_dk":"SALE_ORDER","bus_type_dk_show":"销售订单","bus_no":"585311431432609792","bus_no_show":"SO202406030058"}]}]}}',true);
  33. // dd($old_data);die;
  34. //请求获取仓位卷码信息
  35. $box_roll_list = $this->getBoxData($dv,$token,$box_list);
  36. // var_dump($box_roll_list);die;
  37. $new_data = [];
  38. foreach ($data as $k=>$box_detail){
  39. foreach ($box_detail['detail'] as $v){
  40. foreach ($box_roll_list as $roll_number=>$roll_detail){
  41. if(in_array($v,$roll_detail['detail'])){
  42. if(!isset($new_data[$roll_detail['box_code']])) $new_data[$roll_detail['box_code']] = [
  43. 'detail' => [],
  44. 'fake_qty' => $data[$roll_detail['box_code']]['fake_qty'],
  45. 'material_code' => $roll_detail['material_code'],
  46. 'roll_number' => $roll_number
  47. ];
  48. $new_data[$roll_detail['box_code']]['detail'][] = $v;
  49. break;
  50. }
  51. }
  52. }
  53. }
  54. //补全数据
  55. $data = $this->setBoxFake($new_data);
  56. //把数据拼回去
  57. list($lind_bind,$lead_out) = $this->setNewData($old_data,$data);
  58. // var_dump(json_encode($lind_bind));
  59. // var_dump(json_encode($lead_out));die;
  60. return [$lind_bind,$lead_out];
  61. }
  62. // 获取指定数量的值,并从原数组中删除这些值
  63. function getValues(&$array, $count) {
  64. // 获取前$count个值
  65. $result = array_slice($array, 0, $count);
  66. // 从原数组中删除这些值
  67. $array = array_slice($array, $count);
  68. return $result;
  69. }
  70. private function setNewData($old_data,$data){
  71. // var_dump($old_data);
  72. $code_key_data = [];
  73. foreach ($data as $v){
  74. if(!isset($code_key_data[$v['material_code']])) $code_key_data[$v['material_code']] = [];
  75. $code_key_data[$v['material_code']] = array_merge($code_key_data[$v['material_code']],$v['detail']);
  76. }
  77. $lind_bind = $old_data['lead_bind'];
  78. $lind_bind_key_list = [];
  79. foreach ($lind_bind['material_list'] as &$l){
  80. unset($l['brand_qr_code_list']);
  81. // $l['qty'] = $l['fake_qty'];
  82. $l['brand_qr_code_list'] = $this->getValues( $code_key_data[$l['material_code']],$l['fake_qty']);
  83. $lind_bind_key_list[$l['order_item_id']] = [
  84. 'product_code' => $l['product_code'],
  85. 'product_code_show' => $l['product_code_show'],
  86. 'process_title' => $l['process_title'],
  87. 'color' => $l['color'],
  88. 'process_title_two' => $l['process_title_two'],
  89. 'color_two' => $l['color_two'],
  90. ];
  91. unset($l['fake_qty']);
  92. }
  93. $lead_out = $old_data['lead_out']['brand_out_stock_list'];
  94. foreach ($lead_out as &$ll){
  95. foreach ($ll['brand_out_stock_dtl'] as &$lll){
  96. unset($lll['brand_qr_code_list']);
  97. // $lll['qty'] = $ll['brand_out_stock_dtl'][0]['fake_qty'];
  98. unset($lll['fake_qty']);
  99. // var_dump($data[$ll['send_box_code']]);
  100. // $lll['brand_qr_code_list'] = implode(',',$data[$ll['send_box_code']]['detail']);
  101. $lll['brand_qr_code_list'] = implode(',',$this->getValues( $data[$ll['send_box_code']]['detail'],$lll['qty']));;
  102. $lll['product_code'] = $lind_bind_key_list[$lll['bus_no']]['product_code'] ?? '';
  103. $lll['product_code_show'] = $lind_bind_key_list[$lll['bus_no']]['product_code_show'] ?? '';
  104. $lll['process_title'] = $lind_bind_key_list[$lll['bus_no']]['process_title'] ?? '';
  105. $lll['color'] = $lind_bind_key_list[$lll['bus_no']]['color'] ?? '';
  106. $lll['process_title_two'] = $lind_bind_key_list[$lll['bus_no']]['process_title_two'] ?? '';
  107. $lll['color_two'] = $lind_bind_key_list[$lll['bus_no']]['color_two'] ?? '';
  108. }
  109. }
  110. file_put_contents('1.txt',json_encode(['lind_bind'=>$lind_bind,'lead_out'=>['brand_out_stock_list'=>$lead_out]]));
  111. // var_dump($lind_bind);
  112. // var_dump($lead_out);die;
  113. return [$lind_bind,['brand_out_stock_list'=>$lead_out]];
  114. //{
  115. // "key": "DV00001",
  116. // "lead_bind": {
  117. // "device_code": "DV00001",
  118. // "material_list": [
  119. // {
  120. // "product_code": "BC020202000999",
  121. // "product_code_show": "\u4fe1\u606f\u90e8\u6d4b\u8bd51800\u9999\u6749\u6728",
  122. // "order_item_id": "581732116677795840",
  123. // "order_item_id_show": "SO202405240088",
  124. // "material_code": "40010101000999",
  125. // "material_code_show": "E0\u6279\u96f6\u514d\u6f06\uff08\u6d4b\u8bd5\u767d\u6807\uff09",
  126. // "process_title": null,
  127. // "process_title_two": null,
  128. // "color": null,
  129. // "fake_qty": 20,
  130. // "color_two": null,
  131. // "brand_qr_code_list": [
  132. // "DN2EYGAT3XJJRGMHJ5CL",
  133. // ],
  134. // "order_no_list": "SO202405240088"
  135. // },
  136. // {
  137. // "product_code": "BC020202000999",
  138. // "product_code_show": "\u4fe1\u606f\u90e8\u6d4b\u8bd51800\u9999\u6749\u6728",
  139. // "order_item_id": "581732116677795840",
  140. // "order_item_id_show": "SO202405240088",
  141. // "material_code": "40010101000999",
  142. // "material_code_show": "E0\u6279\u96f6\u514d\u6f06\uff08\u6d4b\u8bd5\u767d\u6807\uff09",
  143. // "process_title": null,
  144. // "process_title_two": null,
  145. // "color": null,
  146. // "fake_qty": 10,
  147. // "color_two": null,
  148. // "brand_qr_code_list": [
  149. // "13NMKBBM8O8JBRWDJHW3",
  150. // ],
  151. // "order_no_list": "SO202405240088"
  152. // }
  153. // ]
  154. // },
  155. // "lead_out": {
  156. // "brand_out_stock_list": [
  157. // {
  158. // "in_out_type_code": "CK00004",
  159. // "in_out_type_code_show": "\u5546\u6807\u4ed3\u6b63\u5e38\u9886\u6807\u51fa\u5e93",
  160. // "send_box_code": "CK00014",
  161. // "send_box_code_show": "\u5546\u6807\u5341\u4e00\u53f7\u4ed3",
  162. // "device_code": "DV00001",
  163. // "get_brand_source_dk": "SALE_ORDER",
  164. // "brand_out_stock_dtl": [
  165. // {
  166. // "item_no": 10,
  167. // "brand_qr_code_list": "",
  168. // "material_code": "40010101000999",
  169. // "restock_qty": 0,
  170. // "material_code_show": "E0\u6279\u96f6\u514d\u6f06\uff08\u6d4b\u8bd5\u767d\u6807\uff09",
  171. // "unit_code": "ST",
  172. // "unit_code_show": "\u5f20",
  173. // "qty": "24",
  174. // "bus_type_dk": "SALE_ORDER",
  175. // "bus_type_dk_show": "\u9500\u552e\u8ba2\u5355",
  176. // "bus_no": "581732116677795840",
  177. // "bus_no_show": "SO202405240088"
  178. // }
  179. // ]
  180. // },
  181. // {
  182. // "in_out_type_code": "CK00004",
  183. // "in_out_type_code_show": "\u5546\u6807\u4ed3\u6b63\u5e38\u9886\u6807\u51fa\u5e93",
  184. // "send_box_code": "CK00012",
  185. // "send_box_code_show": "\u5546\u6807\u4e5d\u53f7\u4ed3",
  186. // "device_code": "DV00001",
  187. // "get_brand_source_dk": "SALE_ORDER",
  188. // "brand_out_stock_dtl": [
  189. // {
  190. // "item_no": 10,
  191. // "brand_qr_code_list": "13NMKBBM8O8JBRWDJHW3",
  192. // "material_code": "40010101000999",
  193. // "restock_qty": 0,
  194. // "material_code_show": "E0\u6279\u96f6\u514d\u6f06\uff08\u6d4b\u8bd5\u767d\u6807\uff09",
  195. // "unit_code": "ST",
  196. // "unit_code_show": "\u5f20",
  197. // "qty": "5",
  198. // "bus_type_dk": "SALE_ORDER",
  199. // "bus_type_dk_show": "\u9500\u552e\u8ba2\u5355",
  200. // "bus_no": "581732116677795840",
  201. // "bus_no_show": "SO202405240088"
  202. // }
  203. // ]
  204. // }
  205. // ]
  206. // }
  207. //}
  208. }
  209. private function setBoxFake($data){
  210. foreach ($data as $k=>$v){
  211. if($v['fake_qty'] > count($v['detail'])){
  212. $diff = $v['fake_qty'] - count($v['detail']);
  213. $return = $this->fakeData($v['roll_number'],$diff);
  214. $data[$k]['detail'] = array_merge($v['detail'],$return);
  215. }
  216. }
  217. return $data;
  218. }
  219. private function fakeData($number,$diff){
  220. $return = [];
  221. for ($i=0;$i < $diff;$i++){
  222. $this->num++;
  223. $return[] = 'f'.$number.'a'.$this->num.rand(10,99);
  224. }
  225. return $return;
  226. }
  227. private function getBoxData($dv,$token,$box_list){
  228. //为了取商标卷码
  229. $res = $this->post_helper($this->url.'/jbl/api/module-data/device/device/diy/device_code',['device_code'=>$dv],$token);
  230. $res = json_decode($res,true);
  231. $detail = [];
  232. $qr_codes = [];
  233. if(isset($res['data'])){
  234. foreach ($res['data'] as $v){
  235. if(in_array($v['box_code'],$box_list)){
  236. $detail[$v['roll_qr_code']] = $v['box_code'];
  237. $qr_codes[] = $v['roll_qr_code'];
  238. }
  239. }
  240. }else{
  241. return [false,''];
  242. }
  243. //为了取仓对应卷码进行获取
  244. $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);
  245. $res = json_decode($res,true);
  246. $qr_roll_list = [];
  247. if(isset($res['data'])){
  248. foreach ($res['data'] as $v){
  249. // if(!empty($v['out_brand_qr_code'])) continue;
  250. if(!isset($qr_roll_list[$v['roll_qr_code']]['material_code'])) {
  251. $qr_roll_list[$v['roll_qr_code']]['material_code'] = $v['material_code'];
  252. $qr_roll_list[$v['roll_qr_code']]['box_code'] = $detail[$v['roll_qr_code']];
  253. }
  254. $qr_roll_list[$v['roll_qr_code']]['detail'][] = $v['brand_qr_code'];
  255. }
  256. }
  257. return $qr_roll_list;
  258. }
  259. public function post_helper($url, $data, $auth)
  260. {
  261. $header = [
  262. 'Content-Type: application/json',
  263. 'Authorization: ' . $auth,
  264. ];
  265. $data = json_encode($data);
  266. // var_dump($url);die;
  267. $ch = curl_init();
  268. curl_setopt($ch, CURLOPT_POST, 1);
  269. curl_setopt($ch, CURLOPT_URL, $url);
  270. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  271. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  272. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  273. curl_setopt($ch, CURLOPT_TIMEOUT, 30);
  274. if (!is_null($data)) curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  275. $r = curl_exec($ch);
  276. curl_close($ch);
  277. return $r;
  278. }
  279. }