DwyService.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  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(file_get_contents('38929.txt'),true);
  31. // var_dump($old_data);die;
  32. // 处理数据
  33. // list ($data,$box_list) = $this->clearData($old_data);
  34. // var_dump($data);die;
  35. // var_dump($box_list);die;
  36. // dd($old_data);die;
  37. //请求获取仓位卷码信息
  38. $box_roll_list = $this->getBoxData($dv,$token,$box_list);
  39. // var_dump($box_roll_list);die;
  40. $new_data = [];
  41. foreach ($data as $k=>$box_detail){
  42. foreach ($box_detail['detail'] as $v){
  43. foreach ($box_roll_list as $roll_number=>$roll_detail){
  44. if(in_array($v,$roll_detail['detail'])){
  45. if(!isset($new_data[$roll_detail['box_code']])) $new_data[$roll_detail['box_code']] = [
  46. 'detail' => [],
  47. 'fake_qty' => $data[$roll_detail['box_code']]['fake_qty'],
  48. 'material_code' => $roll_detail['material_code'],
  49. 'roll_number' => $roll_number
  50. ];
  51. $new_data[$roll_detail['box_code']]['detail'][] = $v;
  52. break;
  53. }
  54. }
  55. }
  56. }
  57. //补全数据
  58. // $data = $this->setBoxFake($new_data);
  59. //把数据拼回去
  60. // var_dump($data);die;
  61. // var_dump($old_data);die;
  62. list($lind_bind,$lead_out) = $this->setNewData($old_data,$new_data);
  63. // var_dump($lind_bind);
  64. // var_dump($lead_out);die;
  65. // die('ddd');
  66. return [$lind_bind,$lead_out];
  67. }
  68. public function clearData($data){
  69. $return = [];
  70. $box_list = [];
  71. if( empty($data['lead_out']) || empty($data['lead_out']['brand_out_stock_list'])) return;
  72. foreach ($data['lead_out']['brand_out_stock_list'] as $value){
  73. $tmp = $value['brand_out_stock_dtl'][0] ?? [];
  74. $return[$value['send_box_code']] = [
  75. 'fake_qty' => $tmp['fake_qty'],
  76. 'detail' => explode(',',$tmp['brand_qr_code_list'])
  77. ];
  78. $box_list[] = $value['send_box_code'];
  79. }
  80. return [$return,$box_list];
  81. }
  82. // 获取指定数量的值,并从原数组中删除这些值
  83. function getValues(&$array, $count) {
  84. // 获取前$count个值
  85. $result = array_slice($array, 0, $count);
  86. // 从原数组中删除这些值
  87. $array = array_slice($array, $count);
  88. return $result;
  89. }
  90. private function setNewData($old_data,$data){
  91. // var_dump($old_data);
  92. $code_key_data = [];
  93. foreach ($data as $v){
  94. if(!isset($code_key_data[$v['material_code']])) $code_key_data[$v['material_code']] = [];
  95. $code_key_data[$v['material_code']] = array_merge($code_key_data[$v['material_code']],$v['detail']);
  96. }
  97. $lind_bind = $old_data['lead_bind'];
  98. $lind_bind_key_list = [];
  99. foreach ($lind_bind['material_list'] as &$l){
  100. unset($l['brand_qr_code_list']);
  101. // $l['qty'] = $l['fake_qty'];
  102. $l['brand_qr_code_list'] = $this->getValues( $code_key_data[$l['material_code']],$l['qty']);
  103. $lind_bind_key_list[$l['order_item_id']] = [
  104. 'product_code' => $l['product_code'],
  105. 'product_code_show' => $l['product_code_show'],
  106. 'process_title' => $l['process_title'],
  107. 'color' => $l['color'],
  108. 'process_title_two' => $l['process_title_two'],
  109. 'color_two' => $l['color_two'],
  110. ];
  111. unset($l['fake_qty']);
  112. }
  113. $lead_out = $old_data['lead_out']['brand_out_stock_list'];
  114. foreach ($lead_out as &$ll){
  115. foreach ($ll['brand_out_stock_dtl'] as &$lll){
  116. unset($lll['brand_qr_code_list']);
  117. // $lll['qty'] = $ll['brand_out_stock_dtl'][0]['fake_qty'];
  118. // $lll['qty'] = $lll['fake_qty'];
  119. // unset($lll['fake_qty']);
  120. // var_dump($data[$ll['send_box_code']]);
  121. // $lll['brand_qr_code_list'] = implode(',',$data[$ll['send_box_code']]['detail']);
  122. $lll['brand_qr_code_list'] = implode(',',$this->getValues( $data[$ll['send_box_code']]['detail'],$lll['qty']));;
  123. $lll['product_code'] = $lind_bind_key_list[$lll['bus_no']]['product_code'] ?? '';
  124. $lll['product_code_show'] = $lind_bind_key_list[$lll['bus_no']]['product_code_show'] ?? '';
  125. $lll['process_title'] = $lind_bind_key_list[$lll['bus_no']]['process_title'] ?? '';
  126. $lll['color'] = $lind_bind_key_list[$lll['bus_no']]['color'] ?? '';
  127. $lll['process_title_two'] = $lind_bind_key_list[$lll['bus_no']]['process_title_two'] ?? '';
  128. $lll['color_two'] = $lind_bind_key_list[$lll['bus_no']]['color_two'] ?? '';
  129. }
  130. }
  131. file_put_contents('1.txt',json_encode(['lind_bind'=>$lind_bind,'lead_out'=>['brand_out_stock_list'=>$lead_out]]));
  132. // var_dump($lind_bind);
  133. // var_dump($lead_out);die;
  134. return [$lind_bind,['brand_out_stock_list'=>$lead_out]];
  135. //{
  136. // "key": "DV00001",
  137. // "lead_bind": {
  138. // "device_code": "DV00001",
  139. // "material_list": [
  140. // {
  141. // "product_code": "BC020202000999",
  142. // "product_code_show": "\u4fe1\u606f\u90e8\u6d4b\u8bd51800\u9999\u6749\u6728",
  143. // "order_item_id": "581732116677795840",
  144. // "order_item_id_show": "SO202405240088",
  145. // "material_code": "40010101000999",
  146. // "material_code_show": "E0\u6279\u96f6\u514d\u6f06\uff08\u6d4b\u8bd5\u767d\u6807\uff09",
  147. // "process_title": null,
  148. // "process_title_two": null,
  149. // "color": null,
  150. // "fake_qty": 20,
  151. // "color_two": null,
  152. // "brand_qr_code_list": [
  153. // "DN2EYGAT3XJJRGMHJ5CL",
  154. // ],
  155. // "order_no_list": "SO202405240088"
  156. // },
  157. // {
  158. // "product_code": "BC020202000999",
  159. // "product_code_show": "\u4fe1\u606f\u90e8\u6d4b\u8bd51800\u9999\u6749\u6728",
  160. // "order_item_id": "581732116677795840",
  161. // "order_item_id_show": "SO202405240088",
  162. // "material_code": "40010101000999",
  163. // "material_code_show": "E0\u6279\u96f6\u514d\u6f06\uff08\u6d4b\u8bd5\u767d\u6807\uff09",
  164. // "process_title": null,
  165. // "process_title_two": null,
  166. // "color": null,
  167. // "fake_qty": 10,
  168. // "color_two": null,
  169. // "brand_qr_code_list": [
  170. // "13NMKBBM8O8JBRWDJHW3",
  171. // ],
  172. // "order_no_list": "SO202405240088"
  173. // }
  174. // ]
  175. // },
  176. // "lead_out": {
  177. // "brand_out_stock_list": [
  178. // {
  179. // "in_out_type_code": "CK00004",
  180. // "in_out_type_code_show": "\u5546\u6807\u4ed3\u6b63\u5e38\u9886\u6807\u51fa\u5e93",
  181. // "send_box_code": "CK00014",
  182. // "send_box_code_show": "\u5546\u6807\u5341\u4e00\u53f7\u4ed3",
  183. // "device_code": "DV00001",
  184. // "get_brand_source_dk": "SALE_ORDER",
  185. // "brand_out_stock_dtl": [
  186. // {
  187. // "item_no": 10,
  188. // "brand_qr_code_list": "",
  189. // "material_code": "40010101000999",
  190. // "restock_qty": 0,
  191. // "material_code_show": "E0\u6279\u96f6\u514d\u6f06\uff08\u6d4b\u8bd5\u767d\u6807\uff09",
  192. // "unit_code": "ST",
  193. // "unit_code_show": "\u5f20",
  194. // "qty": "24",
  195. // "bus_type_dk": "SALE_ORDER",
  196. // "bus_type_dk_show": "\u9500\u552e\u8ba2\u5355",
  197. // "bus_no": "581732116677795840",
  198. // "bus_no_show": "SO202405240088"
  199. // }
  200. // ]
  201. // },
  202. // {
  203. // "in_out_type_code": "CK00004",
  204. // "in_out_type_code_show": "\u5546\u6807\u4ed3\u6b63\u5e38\u9886\u6807\u51fa\u5e93",
  205. // "send_box_code": "CK00012",
  206. // "send_box_code_show": "\u5546\u6807\u4e5d\u53f7\u4ed3",
  207. // "device_code": "DV00001",
  208. // "get_brand_source_dk": "SALE_ORDER",
  209. // "brand_out_stock_dtl": [
  210. // {
  211. // "item_no": 10,
  212. // "brand_qr_code_list": "13NMKBBM8O8JBRWDJHW3",
  213. // "material_code": "40010101000999",
  214. // "restock_qty": 0,
  215. // "material_code_show": "E0\u6279\u96f6\u514d\u6f06\uff08\u6d4b\u8bd5\u767d\u6807\uff09",
  216. // "unit_code": "ST",
  217. // "unit_code_show": "\u5f20",
  218. // "qty": "5",
  219. // "bus_type_dk": "SALE_ORDER",
  220. // "bus_type_dk_show": "\u9500\u552e\u8ba2\u5355",
  221. // "bus_no": "581732116677795840",
  222. // "bus_no_show": "SO202405240088"
  223. // }
  224. // ]
  225. // }
  226. // ]
  227. // }
  228. //}
  229. }
  230. private function setBoxFake($data){
  231. foreach ($data as $k=>$v){
  232. if($v['fake_qty'] > count($v['detail'])){
  233. $diff = $v['fake_qty'] - count($v['detail']);
  234. $return = $this->fakeData($v['roll_number'],$diff);
  235. $data[$k]['detail'] = array_merge($v['detail'],$return);
  236. }
  237. }
  238. return $data;
  239. }
  240. private function fakeData($number,$diff){
  241. $return = [];
  242. for ($i=0;$i < $diff;$i++){
  243. $this->num++;
  244. $return[] = 'f'.$number.'a'.$this->num.rand(10,99);
  245. }
  246. return $return;
  247. }
  248. private function getBoxData($dv,$token,$box_list){
  249. //为了取商标卷码
  250. $res = $this->post_helper($this->url.'/jbl/api/module-data/device/device/diy/device_code',['device_code'=>$dv],$token);
  251. $res = json_decode($res,true);
  252. $detail = [];
  253. $qr_codes = [];
  254. if(isset($res['data'])){
  255. foreach ($res['data'] as $v){
  256. if(in_array($v['box_code'],$box_list)){
  257. $detail[$v['roll_qr_code']] = $v['box_code'];
  258. $qr_codes[] = $v['roll_qr_code'];
  259. }
  260. }
  261. }else{
  262. return [false,''];
  263. }
  264. //为了取仓对应卷码进行获取
  265. $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);
  266. $res = json_decode($res,true);
  267. $qr_roll_list = [];
  268. if(isset($res['data'])){
  269. foreach ($res['data'] as $v){
  270. // if(!empty($v['out_brand_qr_code'])) continue;
  271. if(!isset($qr_roll_list[$v['roll_qr_code']]['material_code'])) {
  272. $qr_roll_list[$v['roll_qr_code']]['material_code'] = $v['material_code'];
  273. $qr_roll_list[$v['roll_qr_code']]['box_code'] = $detail[$v['roll_qr_code']];
  274. }
  275. $qr_roll_list[$v['roll_qr_code']]['detail'][] = $v['brand_qr_code'];
  276. }
  277. }
  278. return $qr_roll_list;
  279. }
  280. //限制领标
  281. public function setLimitForBoxOut($data){
  282. if(empty($data['token']) || empty($data['list']) || empty($data['mac'])) return [false, '缺少必要参数,操作失败'];
  283. foreach ($data['list'] as $value){
  284. $key = $value['order_item_id'] . hash('md5', $value['title']);
  285. $bool = $this->limitingSendRequestBackg($key, $value['num'], 3600);
  286. if(! $bool) return [false, '同一产品相同商标限制同时操作,请稍后操作!'];
  287. }
  288. return [true, ''];
  289. }
  290. //删除限制领标
  291. public function delLimitForBoxOut($data){
  292. if(empty($data['material_list'])) return ;
  293. foreach ($data['material_list'] as $value){
  294. $key = $value['order_item_id'] . hash('md5', $value['material_code_show']);
  295. $this->dellimitingSendRequestBackg($key);
  296. }
  297. }
  298. public function post_helper($url, $data, $auth)
  299. {
  300. $header = [
  301. 'Content-Type: application/json',
  302. 'Authorization: ' . $auth,
  303. ];
  304. $data = json_encode($data);
  305. // var_dump($url);die;
  306. $ch = curl_init();
  307. curl_setopt($ch, CURLOPT_POST, 1);
  308. curl_setopt($ch, CURLOPT_URL, $url);
  309. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  310. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  311. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  312. curl_setopt($ch, CURLOPT_TIMEOUT, 30);
  313. if (!is_null($data)) curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  314. $r = curl_exec($ch);
  315. curl_close($ch);
  316. return $r;
  317. }
  318. }