TestService.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669
  1. <?php
  2. namespace App\Service;
  3. use App\Model\RecordTable;
  4. use Illuminate\Support\Facades\Cache;
  5. use Illuminate\Support\Facades\Config;
  6. use Illuminate\Support\Facades\DB;
  7. use Illuminate\Support\Facades\Log;
  8. class TestService extends Service
  9. {
  10. public function testdwy($data){
  11. if(empty($data['url']) || empty($data['post']) || empty($data['header'])) return [false,'API请求参数不能为空'];
  12. $url = $data['url'];
  13. // $oldUrl = config('ip.zslf');
  14. // $newUrl = config('ip.zslfip');
  15. // $url = str_replace($oldUrl, $newUrl, $url);
  16. $post = $data['post'];
  17. $header = $data['header'];
  18. $json = json_encode($post);
  19. $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',$json);
  20. $json = str_replace('"loginBindingParameters":[]','"loginBindingParameters":{}',$json);
  21. list($status, $result) = $this->post_helper($url,$json, $header, 40,'LFMY');
  22. if(! $status) return [false, $result];
  23. return [true, $result];
  24. }
  25. public function testdwyget($data){
  26. if(empty($data['url']) || empty($data['header'])) return [false,'API请求参数不能为空'];
  27. $url = $data['url'];
  28. // $oldUrl = config('ip.zslf');
  29. // $newUrl = config('ip.zslfip');
  30. // $url = str_replace($oldUrl, $newUrl, $url);
  31. $header = $data['header'];
  32. list($status,$result) = $this->get_helper($url,$header);
  33. if(! $status) return [false, $result];
  34. return [true, $result];
  35. }
  36. public function testdwyput($data){
  37. if(empty($data['url']) || empty($data['post']) || empty($data['header'])) return [false,'API请求参数不能为空'];
  38. $url = $data['url'];
  39. // $oldUrl = config('ip.zslf');
  40. // $newUrl = config('ip.zslfip');
  41. // $url = str_replace($oldUrl, $newUrl, $url);
  42. $post = $data['post'];
  43. $header = $data['header'];
  44. $json = json_encode($post);
  45. $json = str_replace('"workflowSearchBean":{}','"workflowSearchBean":[]',json_encode($post));
  46. $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',json_encode($post));
  47. list($status, $result) = $this->put_helper($url,$json, $header,40);
  48. if(! $status) return [false, $result];
  49. return [true, $result];
  50. }
  51. //-----------------------------------朗峰u8-----
  52. public function getToken($common_array){
  53. list($status, $msg) = $this->SetU8($common_array);
  54. if(! $status) return [false , $msg];
  55. $host = $msg;
  56. $key = "lf_u8_long_token_demo_" . $common_array['site'] . '_' . $common_array['database'];
  57. if(! Cache::has($key)){
  58. $url = $host . "/api/System/GetToken";
  59. $date = date("Y-m-d");
  60. $json = [
  61. "U8DbName"=> $common_array['database'],
  62. "sUserId"=> "demo",
  63. "sPassword"=> "DEMO",
  64. "LoginDateTime"=> $date,
  65. "bPersist"=> true
  66. ];
  67. $header = ['Content-Type:application/json'];
  68. list($status, $result) = $this->post_helper($url,json_encode($json), $header, 30, $common_array['title'] . "获取token");
  69. if(! $status) return [false, $result];
  70. if(! isset($result['code'])) return [false, '获取用友登录信息失败,请重新操作'];
  71. if($result['code'] != 0) return [false, $result['msg']];
  72. $token = $result['data']['Token'] ?? "";
  73. Cache::forever($key, $token);
  74. }else{
  75. $token = Cache::get($key);
  76. }
  77. return [true, [$host, $token]];
  78. }
  79. public function salesOrderGet($data, $common_array){
  80. list($status, $msg) = $this->getToken($common_array);
  81. if(! $status) return [false, $msg];
  82. list($host, $token) = $msg;
  83. $today = (new \DateTime())->setTime(0, 0, 0)->format('Y-m-d H:i:s') . '.000';
  84. $fourDaysAgo = (new \DateTime())->sub(new \DateInterval('P4D'))->setTime(0, 0, 0)->format('Y-m-d H:i:s') . '.000';
  85. $page = $data['pageSize'] ?? 10;
  86. $version = $data['version'] ?? 0;
  87. $start_time = $data['start_time'] ?? $today;
  88. $end_time = $data['end_time'] ?? $today;
  89. $order_number = $data['order_number'] ?? '';
  90. $header = ["Authorization: {$token}",'Content-Type:application/json'];
  91. $url = $host . "/api/System/SqlQuery";
  92. $json = [
  93. 'customSQLFileName' => "U8SQL",
  94. 'customSQLPath' => 'U8API/SO_SOMain/Get',
  95. 'paramObj' => [
  96. "@pagesize" => $page,
  97. "@where" => "AND m.dDate >= '$start_time' AND m.dDate <= '$end_time'",
  98. "@code" => $order_number,
  99. "@version" => $version,
  100. ]
  101. ];
  102. $json = json_encode($json);
  103. list($status, $result) = $this->post_helper($url,$json, $header, 60, $common_array['title'] . '获取销售订单');
  104. if(! $status) return [false, $result];
  105. if(! isset($result['code'])) return [false, '拉取销售订单失败,请重新拉取'];
  106. if($result['code'] != 0) return [false, $result['msg']];
  107. if(empty($result['data'])) return [true, []];
  108. $r_data = $result['data'];
  109. $return = $this->returnOrders($common_array, $r_data, $msg);
  110. return [true, $return];
  111. }
  112. private function returnOrders($common_array, $r_data, $msg){
  113. $site = $common_array['site'];
  114. $title = $common_array['title'];
  115. $return = [];
  116. if($site == 'LFMY'){
  117. foreach ($r_data as $value){
  118. list($status, $detail) = $this->getSalesDetail($value, $msg, $title);
  119. if(! $status) return [false, $detail];
  120. $return_detail = [];
  121. $total_qty = $money = 0;
  122. foreach ($detail as $d_value){
  123. $return_detail[] = [
  124. 'item_no' => $d_value['irowno'],
  125. 'material_code' => $d_value['cinvcode'],
  126. 'brand_name' => $d_value['cdefine28'] ?? '',
  127. 'safe' => $d_value['cdefine29'] ?? '',
  128. 'decor' => $d_value['cdefine30'] ?? '',
  129. 'craft_type_code' => $d_value['cdefine31'] ?? '',
  130. 'decor_b' => $d_value['cdefine32'] ?? '',
  131. 'craft_type_code_b' => $d_value['cdefine33'] ?? '',
  132. 'unit' => $d_value['cinvm_unit'],
  133. 'price' => $d_value['itaxunitprice'] ?? 0,
  134. 'not_tax_price' => $d_value['itaxunitprice'] ?? 0,
  135. 'tax_price' => $d_value['itaxunitprice'] ?? 0,
  136. 'qty' => $d_value['iquantity'],
  137. 'money' => $d_value['isum'] ?? 0,
  138. 'tax_amount' => $d_value['isum'] ?? 0,
  139. 'total_tax_amount' => $d_value['isum'] ?? 0,
  140. 'tax_rate' => $d_value['itaxrate'] ?? 0,
  141. 'expected_delivery_date' => date('Y-m-d',strtotime($d_value['dpredate'])),
  142. 'remark' => $d_value['cmemo'] ?? '',
  143. ];
  144. $t = $d_value['isum'] ?? 0;
  145. $total_qty = bcadd($total_qty,$d_value['iquantity'],3);
  146. $money = bcadd($money,$t,3);
  147. }
  148. $return[] = [
  149. 'no' => $value['csocode'],
  150. 'order_date' => date("Y-m-d",strtotime($value['ddate'])),
  151. 'customer' => $value['ccuscode'] ?? '',
  152. 'salesman' => $value['cpersoncode'] ?? '',
  153. 'sale_department' => $value['cdepcode'] ?? '',
  154. 'total_qty' => $total_qty,
  155. 'total_money' => $money,
  156. 'remark' => $value['cmemo'] ?? '',
  157. 'version' => $value['version'],
  158. 'detail' => $return_detail,
  159. ];
  160. }
  161. }elseif ($site == 'HCLT'){
  162. foreach ($r_data as $value){
  163. list($status, $detail) = $this->getSalesDetail($value, $msg, $title);
  164. if(! $status) return [false, $detail];
  165. $return_detail = [];
  166. $total_qty = $money = 0;
  167. foreach ($detail as $d_value){
  168. $return_detail[] = [
  169. 'material_code' => $d_value['cinvcode'] ?? '',
  170. 'specs' => $d_value['cinvstd'] ?? '',
  171. 'unit' => $d_value['cinvm_unit'] ?? '',
  172. 'qty' => $d_value['iquantity'],
  173. 'not_tax_price' => $d_value['iunitprice'] ?? 0,
  174. 'tax_price' => $d_value['itaxunitprice'] ?? 0,
  175. 'not_tax_amount' => $d_value['imoney'] ?? 0,
  176. 'tax_amount' => $d_value['itax'] ?? 0,
  177. 'total_tax_amount' => $d_value['isum'] ?? 0,
  178. 'tax_rate' => $d_value['itaxrate'] ?? 0,
  179. 'expected_delivery_date' => date('Y-m-d',strtotime($d_value['dpredate'])),
  180. 'customer_brand' => $d_value['cfree1'] ?? '',
  181. 'color' => $d_value['cfree2'] ?? '',
  182. 'plan_no' => $d_value['cdefine22'] ?? '',
  183. 'contract_no' => $d_value['cdefine23'] ?? '',
  184. 'technical_require' => $d_value['cdefine28'] ?? '',
  185. 'quality_require' => $d_value['cdefine29'] ?? '',
  186. 'package_require' => $d_value['cdefine30'] ?? '',
  187. 'shipping_mark' => $d_value['cdefine31'] ?? '',
  188. ];
  189. $t = $d_value['isum'] ?? 0;
  190. $total_qty = bcadd($total_qty,$d_value['iquantity'],3);
  191. $money = bcadd($money,$t,3);
  192. }
  193. $return[] = [
  194. 'no' => $value['csocode'],
  195. 'order_date' => date("Y-m-d",strtotime($value['ddate'])),
  196. 'customer' => $value['ccuscode'] ?? '',
  197. 'salesman' => $value['cpersoncode'] ?? '',
  198. 'sale_department' => $value['cdepcode'] ?? '',
  199. 'total_qty' => $total_qty,
  200. 'total_money' => $money,
  201. 'remark' => $value['cmemo'] ?? '',
  202. 'version' => $value['version'],
  203. 'detail' => $return_detail,
  204. ];
  205. }
  206. }elseif ($site == 'JLWM'){
  207. foreach ($r_data as $value){
  208. list($status, $detail) = $this->getSalesDetail($value, $msg, $title);
  209. if(! $status) return [false, $detail];
  210. $return_detail = [];
  211. $total_qty = $money = 0;
  212. foreach ($detail as $d_value){
  213. $return_detail[] = [
  214. 'material_code' => $d_value['cinvcode'] ?? '',
  215. 'contract_no' => $d_value['cdefine23'] ?? '',
  216. 'specs' => $d_value['cinvstd'] ?? '',
  217. 'unit' => $d_value['cinvm_unit'] ?? '',
  218. 'qty' => $d_value['iquantity'] ?? '',
  219. 'not_tax_price' => $d_value['iunitprice'] ?? 0,
  220. 'tax_price' => $d_value['itaxunitprice'] ?? 0,
  221. 'not_tax_amount' => $d_value['imoney'] ?? 0,
  222. 'tax_amount' => $d_value['itax'] ?? 0,
  223. 'total_tax_amount' => $d_value['isum'] ?? 0,
  224. 'tax_rate' => $d_value['itaxrate'] ?? 0,
  225. 'expected_delivery_date' => date('Y-m-d',strtotime($d_value['dpredate'])),
  226. 'customer_model' => $d_value['cfree4'] ?? '',
  227. 'length' => $d_value['cfree1'] ?? '',
  228. 'width' => $d_value['cfree2'] ?? '',
  229. 'thickness' => $d_value['cfree3'] ?? '',
  230. 'color_or_model' => $d_value['cdefine28'] ?? '',
  231. ];
  232. $t = $d_value['isum'] ?? 0;
  233. $total_qty = bcadd($total_qty,$d_value['iquantity'],3);
  234. $money = bcadd($money,$t,3);
  235. }
  236. $return[] = [
  237. 'no' => $value['csocode'],
  238. 'order_date' => date("Y-m-d",strtotime($value['ddate'])),
  239. 'customer' => $value['ccuscode'] ?? '',
  240. 'salesman' => $value['cpersoncode'] ?? '',
  241. 'sale_department' => $value['cdepcode'] ?? '',
  242. 'total_qty' => $total_qty,
  243. 'total_money' => $money,
  244. 'remark' => $value['cmemo'] ?? '',
  245. 'version' => $value['version'],
  246. 'detail' => $return_detail,
  247. ];
  248. }
  249. }
  250. return $return;
  251. }
  252. public function purchaseOrderGet($data, $common_array){
  253. list($status, $msg) = $this->getToken($common_array);
  254. if(! $status) return [false, $msg];
  255. list($host, $token) = $msg;
  256. $today = (new \DateTime())->setTime(0, 0, 0)->format('Y-m-d H:i:s') . '.000';
  257. $fourDaysAgo = (new \DateTime())->sub(new \DateInterval('P4D'))->setTime(0, 0, 0)->format('Y-m-d H:i:s') . '.000';
  258. $page = $data['pageSize'] ?? 10;
  259. $version = $data['version'] ?? 0;
  260. $start_time = $data['start_time'] ?? $today;
  261. $end_time = $data['end_time'] ?? $today;
  262. $order_number = $data['order_number'] ?? '';
  263. $header = ["Authorization: {$token}",'Content-Type:application/json'];
  264. $url = $host . "/api/System/SqlQuery";
  265. $json = [
  266. 'customSQLFileName' => "U8SQL",
  267. 'customSQLPath' => 'U8API/PurchaseOrderController/Get',
  268. 'paramObj' => [
  269. "@pagesize" => $page,
  270. "@where" => "AND m.dPODate >= '$start_time' AND m.dPODate <= '$end_time'",
  271. "@code" => $order_number,
  272. "@version" => $version,
  273. ]
  274. ];
  275. $json = json_encode($json);
  276. list($status, $result) = $this->post_helper($url,$json, $header, 60, $common_array['title'] . '获取采购订单');
  277. if(! $status) return [false, $result];
  278. if(! isset($result['code'])) return [false, '拉取采购订单失败,请重新拉取'];
  279. if($result['code'] != 0) return [false, $result['msg']];
  280. if(empty($result['data'])) return [true, []];
  281. $r_data = $result['data'];
  282. $return = $this->returnPurchaseOrders($common_array, $r_data, $msg);
  283. return [true, $return];
  284. }
  285. private function returnPurchaseOrders($common_array, $r_data, $msg){
  286. $site = $common_array['site'];
  287. $title = $common_array['title'];
  288. $return = [];
  289. foreach ($r_data as $key => $value){
  290. list($status, $detail) = $this->getPurchaseDetail($value, $msg, $title);
  291. if(! $status) return [false, $detail];
  292. $r_data[$key]['detail'] = $detail;
  293. }
  294. return $r_data;
  295. }
  296. private function getPurchaseDetail($sale_order, $msg, $title){
  297. list($host, $token) = $msg;
  298. $header = ["Authorization: {$token}",'Content-Type:application/json'];;
  299. $url = $host . "/api/System/SqlQuery2";
  300. $json = [
  301. "selectSQL" => "",
  302. "customSQLFileName"=> "U8SQL",
  303. "customSQLPath"=> "U8API/PurchaseOrderController/GetVoucherData",
  304. "paramObj"=> [
  305. "@poid"=> $sale_order["poid"]
  306. ]
  307. ];
  308. list($status, $result) = $this->post_helper($url, json_encode($json), $header, 30, $title . '获取采购订单详情');
  309. if(! $status) return [false, $result];
  310. if(! isset($result['code'])) return [false, '拉取采购订单详情失败,请重新拉取'];
  311. if($result['code'] != 0) return [false, $result['msg']];
  312. return [true, $result['data']['DataTable1']];
  313. }
  314. private function SetU8($common_array){
  315. // $api_host = env('API_HOST');
  316. // if(empty($api_host)) return [false, '用友对外域名不存在'];
  317. // $api_port = env('API_PORT');
  318. // if(empty($api_port)) return [false, '用友对外域名端口不存在'];
  319. $api_host = $common_array['api_host'];
  320. $api_port = $common_array['api_port'];
  321. //映射ip是否通畅
  322. $bool = $this->isDomainAvailable($api_host);
  323. if(! $bool) return [false, '用友对外域名不可达'];
  324. $host = $api_host . ":" . $api_port;
  325. return [true, $host];
  326. }
  327. private function getSalesDetail($sale_order, $msg, $title){
  328. list($host, $token) = $msg;
  329. $header = ["Authorization: {$token}",'Content-Type:application/json'];;
  330. $url = $host . "/api/System/SqlQuery2";
  331. $json = [
  332. "customSQLFileName"=> "U8SQL",
  333. "customSQLPath"=> "U8API/SO_SOMain/GetWithDetail",
  334. "paramObj"=> [
  335. "@code"=> $sale_order["csocode"]
  336. ]
  337. ];
  338. list($status, $result) = $this->post_helper($url, json_encode($json), $header, 30, $title . '获取销售订单详情');
  339. if(! $status) return [false, $result];
  340. if(! isset($result['code'])) return [false, '拉取销售订单详情失败,请重新拉取'];
  341. if($result['code'] != 0) return [false, $result['msg']];
  342. return [true, $result['data']['DataTable1']];
  343. }
  344. public function materialAddU8($data,$common_array){
  345. list($status, $msg) = $this->getToken($common_array);
  346. if(! $status) return [false, $msg];
  347. list($host, $token) = $msg;
  348. $title = $common_array['title'];
  349. if(empty($data['iHead'])) return [false, '领料单表头信息不能为空'];
  350. if(empty($data['iBody'])) return [false, '领料单表体信息不能为空'];
  351. $header = ["Authorization: {$token}",'Content-Type:application/json'];
  352. $url = $host . "/api/MaterialRequest/Add";
  353. $json[] = [
  354. "Inum" => "MaterialRequest",
  355. "data" =>[
  356. "iHead" => $data['iHead'],
  357. "iBody" => $data['iBody'],
  358. ],
  359. ];
  360. $json_str = json_encode($json);
  361. list($status, $result) = $this->post_helper($url, $json_str, $header, 60, $title . '生成领料申请单');
  362. if(! $status) return [false, $result];
  363. if(! isset($result['code'])) return [false, '生成领料申请单失败,请重新操作'];
  364. if($result['code'] != 0) return [false, $result['msg']];
  365. return [true, $result['data']];
  366. }
  367. public function productInAddU8($data,$common_array){
  368. list($status, $msg) = $this->getToken($common_array);
  369. if(! $status) return [false, $msg];
  370. list($host, $token) = $msg;
  371. $title = $common_array['title'];
  372. if(empty($data['iHead'])) return [false, '产成品入库单单表头信息不能为空'];
  373. if(empty($data['iBody'])) return [false, '产成品入库单表体信息不能为空'];
  374. $header = ["Authorization: {$token}",'Content-Type:application/json'];;
  375. $url = $host . "/api/ProductIn/Add";
  376. $json[] = [
  377. "Inum" => "ProductIn",
  378. "data" =>[
  379. "iHead" => $data['iHead'],
  380. "iBody" => $data['iBody'],
  381. ],
  382. ];
  383. list($status, $result) = $this->post_helper($url, json_encode($json), $header, 60, $title . '生成产成品入库单');
  384. if(! $status) return [false, $result];
  385. if(! isset($result['code'])) return [false, '生成产成品入库单失败,请重新操作'];
  386. if($result['code'] != 0) return [false, $result['msg']];
  387. return [true, $result['data']];
  388. }
  389. public function dispatchAddU8($data,$common_array){
  390. list($status, $msg) = $this->getToken($common_array);
  391. if(! $status) return [false, $msg];
  392. list($host, $token) = $msg;
  393. $title = $common_array['title'];
  394. if(empty($data['iHead'])) return [false, '发货单单表头信息不能为空'];
  395. if(empty($data['iBody'])) return [false, '发货单表体信息不能为空'];
  396. foreach ($data['iBody'] as $key => $value){
  397. $data['iBody'][$key] = $this->fillYonyouDispatchDetail($value);
  398. }
  399. $header = ["Authorization: {$token}",'Content-Type:application/json'];;
  400. $url = $host . "/api/Dispatch/Add";
  401. $json[] = [
  402. "Inum" => "DispatchList",
  403. "data" =>[
  404. "iHead" => $data['iHead'],
  405. "iBody" => $data['iBody'],
  406. ]
  407. ];
  408. list($status, $result) = $this->post_helper($url, json_encode($json), $header, 60, $title . '生成发货单');
  409. if(! $status) return [false, $result];
  410. if(! isset($result['code'])) return [false, '生成发货单失败,请重新操作'];
  411. if($result['code'] != 0) return [false, $result['msg']];
  412. return [true, $result['data']];
  413. }
  414. public function recordList($data){
  415. $model = RecordTable::where('del_time',0)
  416. ->select('msg','data','type','crt_time','return_data')
  417. ->orderBy('id','desc');
  418. if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) $model->whereBetween('crt_time',[$data['crt_time'][0],$data['crt_time'][1]]);
  419. if(! empty($data['type'])) $model->where('type',$data['type']);
  420. if(! empty($data['site'])) $model->where('site',$data['site']);
  421. $list = $this->limit($model,'',$data);
  422. $list = $this->fillData($list);
  423. return [true,$list];
  424. }
  425. private function fillData($data){
  426. if(empty($data['data'])) return $data;
  427. foreach ($data['data'] as $key => $value){
  428. $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
  429. $data['data'][$key]['type_name'] = RecordTable::$type[$value['type']] ?? '';
  430. }
  431. return $data;
  432. }
  433. /**
  434. * 补全用友发货单子表金额字段(含换算率)
  435. * 输入示例:
  436. * [
  437. * 'iQuantity' => 1, // 输入单位数量
  438. * 'iunitprice' => 10, // 无税单价(按主计量单位)
  439. * 'iTaxRate' => 0, // 税率
  440. * 'iInvExchRate' => 12 // 换算率(1箱=12个)
  441. * ]
  442. */
  443. function fillYonyouDispatchDetail(array $item)
  444. {
  445. $qty = floatval($item['iQuantity']);
  446. $price = floatval($item['iunitprice']);
  447. $rate = floatval($item['iTaxRate']);
  448. $exchRate = floatval($item['iInvExchRate']);
  449. // 实际参与金额计算的基本数量(用友内部用这个)
  450. $qtyBase = $qty * $exchRate;
  451. // 税率
  452. $taxRate = $rate / 100;
  453. // 原币(人民币)
  454. $imoney = round($qtyBase * $price, 2);
  455. $itax = round($imoney * $taxRate, 2);
  456. $iSum = round($imoney + $itax, 2);
  457. $itaxunitprice = round($price * (1 + $taxRate), 6);
  458. // 本币 = 原币
  459. return array_merge($item, [
  460. 'imoney' => $imoney,
  461. 'itax' => $itax,
  462. 'iSum' => $iSum,
  463. 'itaxunitprice' => $itaxunitprice,
  464. 'idiscount' => 0,
  465. 'inatunitprice' => $price,
  466. 'inatmoney' => $imoney,
  467. 'inattax' => $itax,
  468. 'inatsum' => $iSum,
  469. 'inatdiscount' => 0,
  470. ]);
  471. }
  472. public function getInventoryStock($data){
  473. if(empty($data['site'])) return [false,'站点不能为空'];
  474. $config = config("u");
  475. if(! isset($config[$data['site']])) return [false,'站点不存在'];
  476. $service = new U8ThirtyPartyDatabaseServerService($config[$data['site']]);
  477. list($status, $msg) = $service->getStockCountWithPercentage();
  478. return [$service, $msg];
  479. }
  480. //-----------------------------------朗峰u8-----
  481. public function post_helper($url, $data, $header = [], $timeout = 20, $title = ""){
  482. Log::channel('apiLog')->info($title . 'POST', ["api" => $url , "param" => json_decode($data,true) ,"header" => $header]);
  483. $ch = curl_init();
  484. curl_setopt($ch, CURLOPT_URL, $url);
  485. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  486. curl_setopt($ch, CURLOPT_ENCODING, '');
  487. curl_setopt($ch, CURLOPT_POST, 1);
  488. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  489. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  490. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  491. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  492. curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  493. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
  494. if(!is_null($data)) curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  495. $r = curl_exec($ch);
  496. if ($r === false) {
  497. // 获取错误号
  498. $errorNumber = curl_errno($ch);
  499. // 获取错误信息
  500. $errorMessage = curl_error($ch);
  501. $message = "cURL Error #{$errorNumber}: {$errorMessage}";
  502. Log::channel('apiLog')->info($title . 'POST结果', ["message" => $message ]);
  503. return [false, $message];
  504. }
  505. curl_close($ch);
  506. $return = json_decode($r, true);
  507. unset($r);
  508. Log::channel('apiLog')->info($title . 'POST结果', ["message" => $return ]);
  509. return [true, $return];
  510. }
  511. public function get_helper($url,$header=[],$timeout = 20){
  512. $ch = curl_init();
  513. curl_setopt_array($ch, array(
  514. CURLOPT_URL => $url,
  515. CURLOPT_RETURNTRANSFER => true,
  516. CURLOPT_ENCODING => '',
  517. CURLOPT_MAXREDIRS => 10,
  518. CURLOPT_TIMEOUT => $timeout,
  519. CURLOPT_FOLLOWLOCATION => true,
  520. CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  521. CURLOPT_CUSTOMREQUEST => 'GET',
  522. CURLOPT_SSL_VERIFYPEER => false,
  523. CURLOPT_HTTPHEADER => $header,
  524. ));
  525. $r = curl_exec($ch);
  526. if ($r === false) {
  527. // 获取错误号
  528. $errorNumber = curl_errno($ch);
  529. // 获取错误信息
  530. $errorMessage = curl_error($ch);
  531. $message = "cURL Error #{$errorNumber}: {$errorMessage}";
  532. Log::channel('apiLog')->info('朗峰GET结果', ["message" => $message]);
  533. return [false, $message];
  534. }
  535. curl_close($ch);
  536. Log::channel('apiLog')->info('朗峰GET结果', ["message" => json_decode($r, true)]);
  537. return [true, json_decode($r, true)];
  538. }
  539. public function put_helper($url, $data, $header = [], $timeout = 20){
  540. Log::channel('apiLog')->info('朗峰PUT', ["api" => $url , "param" => $data ,"header" => $header]);
  541. $ch = curl_init();
  542. curl_setopt($ch, CURLOPT_URL, $url);
  543. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  544. curl_setopt($ch, CURLOPT_ENCODING, '');
  545. curl_setopt($ch, CURLOPT_POST, 1);
  546. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
  547. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  548. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  549. curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  550. if(!is_null($data)) curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  551. $r = curl_exec($ch);
  552. if ($r === false) {
  553. // 获取错误号
  554. $errorNumber = curl_errno($ch);
  555. // 获取错误信息
  556. $errorMessage = curl_error($ch);
  557. $message = "cURL Error #{$errorNumber}: {$errorMessage}";
  558. Log::channel('apiLog')->info('朗峰PUT结果', ["message" => $message]);
  559. return [false, $message];
  560. }
  561. curl_close($ch);
  562. Log::channel('apiLog')->info('朗峰PUT结果', ["message" => json_decode($r, true)]);
  563. return [true, json_decode($r, true)];
  564. }
  565. }