| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977 |
- <?php
- namespace App\Service;
- use App\Model\RecordTable;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Facades\Config;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- class TestService extends Service
- {
- public function testdwy($data){
- if(empty($data['url']) || empty($data['post']) || empty($data['header'])) return [false,'API请求参数不能为空'];
- $url = $data['url'];
- // $oldUrl = config('ip.zslf');
- // $newUrl = config('ip.zslfip');
- // $url = str_replace($oldUrl, $newUrl, $url);
- $post = $data['post'];
- $header = $data['header'];
- $json = json_encode($post);
- $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',$json);
- $json = str_replace('"loginBindingParameters":[]','"loginBindingParameters":{}',$json);
- list($status, $result) = $this->post_helper($url,$json, $header, 40,'LFMY');
- if(! $status) return [false, $result];
- return [true, $result];
- }
- public function testdwyget($data){
- if(empty($data['url']) || empty($data['header'])) return [false,'API请求参数不能为空'];
- $url = $data['url'];
- // $oldUrl = config('ip.zslf');
- // $newUrl = config('ip.zslfip');
- // $url = str_replace($oldUrl, $newUrl, $url);
- $header = $data['header'];
- list($status,$result) = $this->get_helper($url,$header);
- if(! $status) return [false, $result];
- return [true, $result];
- }
- public function testdwyput($data){
- if(empty($data['url']) || empty($data['post']) || empty($data['header'])) return [false,'API请求参数不能为空'];
- $url = $data['url'];
- // $oldUrl = config('ip.zslf');
- // $newUrl = config('ip.zslfip');
- // $url = str_replace($oldUrl, $newUrl, $url);
- $post = $data['post'];
- $header = $data['header'];
- $json = json_encode($post);
- $json = str_replace('"workflowSearchBean":{}','"workflowSearchBean":[]',json_encode($post));
- $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',json_encode($post));
- list($status, $result) = $this->put_helper($url,$json, $header,40);
- if(! $status) return [false, $result];
- return [true, $result];
- }
- //-----------------------------------朗峰u8-----
- public function getToken($common_array){
- list($status, $msg) = $this->SetU8($common_array);
- if(! $status) return [false , $msg];
- $host = $msg;
- $key = "lf_u8_long_token_demo_" . $common_array['site'] . '_' . $common_array['database'];
- if(! Cache::has($key)){
- $url = $host . "/api/System/GetToken";
- $date = date("Y-m-d");
- $json = [
- "U8DbName"=> $common_array['database'],
- "sUserId"=> "demo",
- "sPassword"=> "DEMO",
- "LoginDateTime"=> $date,
- "bPersist"=> true
- ];
- $header = ['Content-Type:application/json'];
- list($status, $result) = $this->post_helper($url,json_encode($json), $header, 30, $common_array['title'] . "获取token");
- if(! $status) return [false, $result];
- if(! isset($result['code'])) return [false, '获取用友登录信息失败,请重新操作'];
- if($result['code'] != 0) return [false, $result['msg']];
- $token = $result['data']['Token'] ?? "";
- Cache::forever($key, $token);
- }else{
- $token = Cache::get($key);
- }
- return [true, [$host, $token]];
- }
- public function salesOrderGet($data, $common_array){
- list($status, $msg) = $this->getToken($common_array);
- if(! $status) return [false, $msg];
- list($host, $token) = $msg;
- $today = (new \DateTime())->setTime(0, 0, 0)->format('Y-m-d H:i:s') . '.000';
- $fourDaysAgo = (new \DateTime())->sub(new \DateInterval('P4D'))->setTime(0, 0, 0)->format('Y-m-d H:i:s') . '.000';
- $page = $data['pageSize'] ?? 10;
- $version = $data['version'] ?? 0;
- $start_time = $data['start_time'] ?? $today;
- $end_time = $data['end_time'] ?? $today;
- $order_number = $data['order_number'] ?? '';
- $header = ["Authorization: {$token}",'Content-Type:application/json'];
- $url = $host . "/api/System/SqlQuery";
- $json = [
- 'customSQLFileName' => "U8SQL",
- 'customSQLPath' => 'U8API/SO_SOMain/Get',
- 'paramObj' => [
- "@pagesize" => $page,
- "@where" => "AND m.dDate >= '$start_time' AND m.dDate <= '$end_time' AND m.iStatus = 1",
- "@code" => $order_number,
- "@version" => $version,
- ]
- ];
- $json = json_encode($json);
- list($status, $result) = $this->post_helper($url,$json, $header, 60, $common_array['title'] . '获取销售订单');
- if(! $status) return [false, $result];
- if(! isset($result['code'])) return [false, '拉取销售订单失败,请重新拉取'];
- if($result['code'] != 0) return [false, $result['msg']];
- if(empty($result['data'])) return [true, []];
- $r_data = $result['data'];
- $return = $this->returnOrders($common_array, $r_data, $msg);
- return [true, $return];
- }
- private function returnOrders($common_array, $r_data, $msg){
- $site = $common_array['site'];
- $title = $common_array['title'];
- $return = [];
- if($site == 'LFMY'){
- foreach ($r_data as $value){
- list($status, $detail) = $this->getSalesDetail($value, $msg, $title);
- if(! $status) return [false, $detail];
- $return_detail = [];
- $total_qty = $money = 0;
- foreach ($detail as $d_value){
- $return_detail[] = [
- 'erp_sale_dt_id' => $d_value['autoid'],
- 'item_no' => $d_value['irowno'],
- 'material_code' => $d_value['cinvcode'],
- 'brand_name' => $d_value['cdefine28'] ?? '',
- 'safe' => $d_value['cdefine29'] ?? '',
- 'decor' => $d_value['cdefine30'] ?? '',
- 'craft_type_code' => $d_value['cdefine31'] ?? '',
- 'decor_b' => $d_value['cdefine32'] ?? '',
- 'craft_type_code_b' => $d_value['cdefine33'] ?? '',
- 'unit' => $d_value['cinvm_unit'],
- 'price' => $d_value['itaxunitprice'] ?? 0,
- 'not_tax_price' => $d_value['itaxunitprice'] ?? 0,
- 'tax_price' => $d_value['itaxunitprice'] ?? 0,
- 'qty' => $d_value['iquantity'],
- 'money' => $d_value['isum'] ?? 0,
- 'tax_amount' => $d_value['isum'] ?? 0,
- 'total_tax_amount' => $d_value['isum'] ?? 0,
- 'tax_rate' => $d_value['itaxrate'] ?? 0,
- 'expected_delivery_date' => date('Y-m-d',strtotime($d_value['dpredate'])),
- 'remark' => $d_value['cmemo'] ?? '',
- ];
- $t = $d_value['isum'] ?? 0;
- $total_qty = bcadd($total_qty,$d_value['iquantity'],3);
- $money = bcadd($money,$t,3);
- }
- $return[] = [
- 'no' => $value['csocode'],
- 'order_date' => date("Y-m-d",strtotime($value['ddate'])),
- 'customer' => $value['ccuscode'] ?? '',
- 'salesman' => $value['cpersoncode'] ?? '',
- 'sale_department' => $value['cdepcode'] ?? '',
- 'total_qty' => $total_qty,
- 'total_money' => $money,
- 'remark' => $value['cmemo'] ?? '',
- 'version' => $value['version'],
- 'detail' => $return_detail,
- ];
- }
- }elseif ($site == 'HCLT'){
- foreach ($r_data as $value){
- list($status, $detail) = $this->getSalesDetail($value, $msg, $title);
- if(! $status) return [false, $detail];
- $return_detail = [];
- $total_qty = $money = 0;
- foreach ($detail as $d_value){
- $return_detail[] = [
- 'erp_sale_dt_id' => $d_value['autoid'],
- 'material_code' => $d_value['cinvcode'] ?? '',
- 'specs' => $d_value['cinvstd'] ?? '',
- 'unit' => $d_value['cinvm_unit'] ?? '',
- 'qty' => $d_value['iquantity'],
- 'not_tax_price' => $d_value['iunitprice'] ?? 0,
- 'tax_price' => $d_value['itaxunitprice'] ?? 0,
- 'not_tax_amount' => $d_value['imoney'] ?? 0,
- 'tax_amount' => $d_value['itax'] ?? 0,
- 'total_tax_amount' => $d_value['isum'] ?? 0,
- 'tax_rate' => $d_value['itaxrate'] ?? 0,
- 'expected_delivery_date' => date('Y-m-d',strtotime($d_value['dpredate'])),
- 'customer_brand' => $d_value['cfree1'] ?? '',
- 'color' => $d_value['cfree2'] ?? '',
- 'plan_no' => $d_value['cdefine22'] ?? '',
- 'contract_no' => $d_value['cdefine23'] ?? '',
- 'technical_require' => $d_value['cdefine28'] ?? '',
- 'quality_require' => $d_value['cdefine29'] ?? '',
- 'package_require' => $d_value['cdefine30'] ?? '',
- 'shipping_mark' => $d_value['cdefine31'] ?? '',
- ];
- $t = $d_value['isum'] ?? 0;
- $total_qty = bcadd($total_qty,$d_value['iquantity'],3);
- $money = bcadd($money,$t,3);
- }
- $return[] = [
- 'no' => $value['csocode'],
- 'order_date' => date("Y-m-d",strtotime($value['ddate'])),
- 'customer' => $value['ccuscode'] ?? '',
- 'salesman' => $value['cpersoncode'] ?? '',
- 'sale_department' => $value['cdepcode'] ?? '',
- 'total_qty' => $total_qty,
- 'total_money' => $money,
- 'remark' => $value['cmemo'] ?? '',
- 'version' => $value['version'],
- 'detail' => $return_detail,
- ];
- }
- }elseif ($site == 'JLWM'){
- foreach ($r_data as $value){
- list($status, $detail) = $this->getSalesDetail($value, $msg, $title);
- if(! $status) return [false, $detail];
- $return_detail = [];
- $total_qty = $money = 0;
- foreach ($detail as $d_value){
- $return_detail[] = [
- 'erp_sale_dt_id' => $d_value['autoid'],
- 'material_code' => $d_value['cinvcode'] ?? '',
- 'contract_no' => $d_value['cdefine23'] ?? '',
- 'specs' => $d_value['cinvstd'] ?? '',
- 'unit' => $d_value['cinvm_unit'] ?? '',
- 'qty' => $d_value['iquantity'] ?? '',
- 'not_tax_price' => $d_value['iunitprice'] ?? 0,
- 'tax_price' => $d_value['itaxunitprice'] ?? 0,
- 'not_tax_amount' => $d_value['imoney'] ?? 0,
- 'tax_amount' => $d_value['itax'] ?? 0,
- 'total_tax_amount' => $d_value['isum'] ?? 0,
- 'tax_rate' => $d_value['itaxrate'] ?? 0,
- 'expected_delivery_date' => date('Y-m-d',strtotime($d_value['dpredate'])),
- 'customer_model' => $d_value['cfree4'] ?? '',
- 'length' => $d_value['cfree1'] ?? '',
- 'width' => $d_value['cfree2'] ?? '',
- 'thickness' => $d_value['cfree3'] ?? '',
- 'color_or_model' => $d_value['cdefine28'] ?? '',
- ];
- $t = $d_value['isum'] ?? 0;
- $total_qty = bcadd($total_qty,$d_value['iquantity'],3);
- $money = bcadd($money,$t,3);
- }
- $return[] = [
- 'no' => $value['csocode'],
- 'order_date' => date("Y-m-d",strtotime($value['ddate'])),
- 'customer' => $value['ccuscode'] ?? '',
- 'salesman' => $value['cpersoncode'] ?? '',
- 'sale_department' => $value['cdepcode'] ?? '',
- 'total_qty' => $total_qty,
- 'total_money' => $money,
- 'remark' => $value['cmemo'] ?? '',
- 'version' => $value['version'],
- 'detail' => $return_detail,
- ];
- }
- }
- return $return;
- }
- public function purchaseOrderGet($data, $common_array){
- list($status, $msg) = $this->getToken($common_array);
- if(! $status) return [false, $msg];
- list($host, $token) = $msg;
- $today = (new \DateTime())->setTime(0, 0, 0)->format('Y-m-d H:i:s') . '.000';
- $fourDaysAgo = (new \DateTime())->sub(new \DateInterval('P4D'))->setTime(0, 0, 0)->format('Y-m-d H:i:s') . '.000';
- $page = $data['pageSize'] ?? 10;
- $version = $data['version'] ?? 0;
- $start_time = $data['start_time'] ?? $today;
- $end_time = $data['end_time'] ?? $today;
- $order_number = $data['order_number'] ?? '';
- $header = ["Authorization: {$token}",'Content-Type:application/json'];
- $url = $host . "/api/System/SqlQuery";
- $json = [
- 'customSQLFileName' => "U8SQL",
- 'customSQLPath' => 'U8API/PurchaseOrderController/Get',
- 'paramObj' => [
- "@pagesize" => $page,
- "@where" => "AND m.dPODate >= '$start_time' AND m.dPODate <= '$end_time'",
- "@code" => $order_number,
- "@version" => $version,
- ]
- ];
- $json = json_encode($json);
- list($status, $result) = $this->post_helper($url,$json, $header, 60, $common_array['title'] . '获取采购订单');
- if(! $status) return [false, $result];
- if(! isset($result['code'])) return [false, '拉取采购订单失败,请重新拉取'];
- if($result['code'] != 0) return [false, $result['msg']];
- if(empty($result['data'])) return [true, []];
- $r_data = $result['data'];
- $return = $this->returnPurchaseOrders($common_array, $r_data, $msg);
- return [true, $return];
- }
- private function returnPurchaseOrders($common_array, $r_data, $msg){
- $site = $common_array['site'];
- $title = $common_array['title'];
- $return = [];
- foreach ($r_data as $key => $value){
- list($status, $detail) = $this->getPurchaseDetail($value, $msg, $title);
- if(! $status) return [false, $detail];
- $r_data[$key]['detail'] = $detail;
- }
- return $r_data;
- }
- private function getPurchaseDetail($sale_order, $msg, $title){
- list($host, $token) = $msg;
- $header = ["Authorization: {$token}",'Content-Type:application/json'];;
- $url = $host . "/api/System/SqlQuery2";
- $json = [
- "selectSQL" => "",
- "customSQLFileName"=> "U8SQL",
- "customSQLPath"=> "U8API/PurchaseOrderController/GetVoucherData",
- "paramObj"=> [
- "@poid"=> $sale_order["poid"]
- ]
- ];
- list($status, $result) = $this->post_helper($url, json_encode($json), $header, 30, $title . '获取采购订单详情');
- if(! $status) return [false, $result];
- if(! isset($result['code'])) return [false, '拉取采购订单详情失败,请重新拉取'];
- if($result['code'] != 0) return [false, $result['msg']];
- return [true, $result['data']['DataTable1']];
- }
- private function SetU8($common_array){
- // $api_host = env('API_HOST');
- // if(empty($api_host)) return [false, '用友对外域名不存在'];
- // $api_port = env('API_PORT');
- // if(empty($api_port)) return [false, '用友对外域名端口不存在'];
- $api_host = $common_array['api_host'];
- $api_port = $common_array['api_port'];
- //映射ip是否通畅
- $bool = $this->isDomainAvailable($api_host);
- if(! $bool) return [false, '用友对外域名不可达'];
- $host = $api_host . ":" . $api_port;
- return [true, $host];
- }
- private function getSalesDetail($sale_order, $msg, $title){
- list($host, $token) = $msg;
- $header = ["Authorization: {$token}",'Content-Type:application/json'];;
- $url = $host . "/api/System/SqlQuery2";
- $json = [
- "customSQLFileName"=> "U8SQL",
- "customSQLPath"=> "U8API/SO_SOMain/GetWithDetail",
- "paramObj"=> [
- "@code"=> $sale_order["csocode"]
- ]
- ];
- list($status, $result) = $this->post_helper($url, json_encode($json), $header, 30, $title . '获取销售订单详情');
- if(! $status) return [false, $result];
- if(! isset($result['code'])) return [false, '拉取销售订单详情失败,请重新拉取'];
- if($result['code'] != 0) return [false, $result['msg']];
-
- return [true, $result['data']['DataTable1']];
- }
- public function updateSalesOrder($data, $common_array){
- if (empty($data['sale_order_details']) || !is_array($data['sale_order_details'])) {
- return [false, '更新数据不能为空'];
- }
- foreach ($data['sale_order_details'] as $index => $value) {
- $line = $index + 1;
- if (empty($value['erp_sale_dt_id'])) {
- return [false, "第{$line}行:明细行ID不能为空"];
- }
- if (!isset($value['quantity']) || !is_numeric($value['quantity']) || floatval($value['quantity']) < 0.0) {
- return [false, "第{$line}行:数量格式错误或必须大于等于0"];
- }
- }
- $service = new U8ThirtyPartyDatabaseServerService($common_array);
- list($status, $msg) = $service->updateSaleOrderDetails($data);
- return [$status, $msg];
- }
- public function materialAddU8($data,$common_array){
- list($status, $msg) = $this->getToken($common_array);
- if(! $status) return [false, $msg];
- list($host, $token) = $msg;
- $title = $common_array['title'];
- if(empty($data['iHead'])) return [false, '领料单表头信息不能为空'];
- if(empty($data['iBody'])) return [false, '领料单表体信息不能为空'];
- $header = ["Authorization: {$token}",'Content-Type:application/json'];
- $url = $host . "/api/MaterialRequest/Add";
- $json[] = [
- "Inum" => "MaterialRequest",
- "data" =>[
- "iHead" => $data['iHead'],
- "iBody" => $data['iBody'],
- ],
- ];
- $json_str = json_encode($json);
- list($status, $result) = $this->post_helper($url, $json_str, $header, 60, $title . '生成领料申请单');
- if(! $status) return [false, $result];
- if(! isset($result['code'])) return [false, '生成领料申请单失败,请重新操作'];
- if($result['code'] != 0) return [false, $result['msg']];
- return [true, $result['data']];
- }
- public function productInAddU8($data,$common_array){
- list($status, $msg) = $this->getToken($common_array);
- if(! $status) return [false, $msg];
- list($host, $token) = $msg;
- $title = $common_array['title'];
- if(empty($data['iHead'])) return [false, '产成品入库单单表头信息不能为空'];
- if(empty($data['iBody'])) return [false, '产成品入库单表体信息不能为空'];
- $header = ["Authorization: {$token}",'Content-Type:application/json'];;
- $url = $host . "/api/ProductIn/Add";
- $json[] = [
- "Inum" => "ProductIn",
- "data" =>[
- "iHead" => $data['iHead'],
- "iBody" => $data['iBody'],
- ],
- ];
- list($status, $result) = $this->post_helper($url, json_encode($json), $header, 60, $title . '生成产成品入库单');
- if(! $status) return [false, $result];
- if(! isset($result['code'])) return [false, '生成产成品入库单失败,请重新操作'];
- if($result['code'] != 0) return [false, $result['msg']];
- return [true, $result['data']];
- }
- public function dispatchAddU8($data,$common_array){
- list($status, $msg) = $this->getToken($common_array);
- if(! $status) return [false, $msg];
- list($host, $token) = $msg;
- $title = $common_array['title'];
- if(empty($data['iHead'])) return [false, '发货单单表头信息不能为空'];
- if(empty($data['iBody'])) return [false, '发货单表体信息不能为空'];
- foreach ($data['iBody'] as $key => $value){
- $data['iBody'][$key] = $this->fillYonyouDispatchDetail($value);
- }
- $header = ["Authorization: {$token}",'Content-Type:application/json'];;
- $url = $host . "/api/Dispatch/Add";
- $json[] = [
- "Inum" => "DispatchList",
- "data" =>[
- "iHead" => $data['iHead'],
- "iBody" => $data['iBody'],
- ]
- ];
- list($status, $result) = $this->post_helper($url, json_encode($json), $header, 60, $title . '生成发货单');
- if(! $status) return [false, $result];
- if(! isset($result['code'])) return [false, '生成发货单失败,请重新操作'];
- if($result['code'] != 0) return [false, $result['msg']];
- return [true, $result['data']];
- }
- public function recordList($data){
- $model = RecordTable::where('del_time',0)
- ->select('msg','data','type','crt_time','return_data')
- ->orderBy('id','desc');
- if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) $model->whereBetween('crt_time',[$data['crt_time'][0],$data['crt_time'][1]]);
- if(! empty($data['type'])) $model->where('type',$data['type']);
- if(! empty($data['site'])) $model->where('site',$data['site']);
- $list = $this->limit($model,'',$data);
- $list = $this->fillData($list);
- return [true,$list];
- }
- private function fillData($data){
- if(empty($data['data'])) return $data;
- foreach ($data['data'] as $key => $value){
- $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
- $data['data'][$key]['type_name'] = RecordTable::$type[$value['type']] ?? '';
- }
- return $data;
- }
- /**
- * 补全用友发货单子表金额字段(含换算率)
- * 输入示例:
- * [
- * 'iQuantity' => 1, // 输入单位数量
- * 'iunitprice' => 10, // 无税单价(按主计量单位)
- * 'iTaxRate' => 0, // 税率
- * 'iInvExchRate' => 12 // 换算率(1箱=12个)
- * ]
- */
- function fillYonyouDispatchDetail(array $item)
- {
- $qty = floatval($item['iQuantity']);
- $price = floatval($item['iunitprice']);
- $rate = floatval($item['iTaxRate']);
- $exchRate = floatval($item['iInvExchRate']);
- // 实际参与金额计算的基本数量(用友内部用这个)
- $qtyBase = $qty * $exchRate;
- // 税率
- $taxRate = $rate / 100;
- // 原币(人民币)
- $imoney = round($qtyBase * $price, 2);
- $itax = round($imoney * $taxRate, 2);
- $iSum = round($imoney + $itax, 2);
- $itaxunitprice = round($price * (1 + $taxRate), 6);
- // 本币 = 原币
- return array_merge($item, [
- 'imoney' => $imoney,
- 'itax' => $itax,
- 'iSum' => $iSum,
- 'itaxunitprice' => $itaxunitprice,
- 'idiscount' => 0,
- 'inatunitprice' => $price,
- 'inatmoney' => $imoney,
- 'inattax' => $itax,
- 'inatsum' => $iSum,
- 'inatdiscount' => 0,
- ]);
- }
- public function getInventoryStock($data){
- if(empty($data['site'])) return [false,'站点不能为空'];
- $config = config("u");
- if(! isset($config[$data['site']])) return [false,'站点不存在'];
- $service = new U8ThirtyPartyDatabaseServerService($config[$data['site']]);
- list($status, $msg) = $service->getStockCountWithPercentage();
- return [$status, $msg];
- }
- //检验单(不是用友的检验单 所以不是参照)生成产成品入库单
- public function productInByZj($data, $common_array){
- // u8 token 获取
- list($status, $msg) = $this->getToken($common_array);
- if(! $status) return [false, $msg];
- $title = $common_array['title'];
- // 组织 ProductIn 结构
- $tmp = [
- "Inum" => "ProductIn",
- "Data" => [
- "iHead" => [
- "cWhCode" => $data['warehouseCode'] ?? "01", // 默认产成品库
- "cRdCode" => "105", // 入库类别
- "cDepCode" => null,
- "cMemo" => "接口生成",
- "cSource" => "库存",
- "cBusType" => "成品入库",
- "dDate" => date("Y-m-d"),
- "IsVerify" => true,
- ],
- "iBody" => []
- ]
- ];
- //合格数量加让步接收数量
- $num = $data['quality_receive_num'] ?? 0;
- $num2 = $data['compromise_receive_num'] ?? 0;
- $num = bcadd($num, $num2,2);
- //产品编码
- $product_code = $data['material_code'] ?? "";
- $baseData = [
- "iRowNo" => 1,
- "cInvCode" => $product_code,
- "iQuantity" => $num,
- ];
- if ($common_array['site'] == "LFMY") {
- // 朗峰结构 (cdefine28 - cdefine33)
- $extData = [
- 'cdefine28' => $data['brand_name'] ?? null,
- 'cdefine29' => $data['safe'] ?? null,
- 'cdefine30' => $data['decor'] ?? null,
- 'cdefine31' => $data['craft_type_code'] ?? null,
- 'cdefine32' => $data['decor_b'] ?? null,
- 'cdefine33' => $data['craft_type_code_b'] ?? null,
- ];
- } elseif ($common_array['site'] == "HCLT") {
- // 恒昌结构 (cfree + cdefine22/23 + cdefine28-31)
- $extData = [
- 'cfree1' => $data['customer_brand'] ?? null,
- 'cfree2' => $data['color'] ?? null,
- 'cdefine22' => $data['plan_no'] ?? null,
- 'cdefine23' => $data['contract_no'] ?? null,
- 'cdefine28' => $data['technical_require'] ?? null,
- 'cdefine29' => $data['quality_require'] ?? null,
- 'cdefine30' => $data['package_require'] ?? null,
- 'cdefine31' => $data['shipping_mark'] ?? null,
- ];
- } else {
- $extData = [];
- }
- $inventoryEntry = array_merge($baseData, $extData);
- // 组织表体
- $tmp["Data"]["iBody"][] = $inventoryEntry;
- $final_data = [$tmp];
- // 调用参数
- $host = $msg['host'] ?? "";
- $token = $msg['token'] ?? "";
- $url = $host . "/api/ProductIn/Add";
- $header = ["Authorization: {$token}", 'Content-Type:application/json'];
- $json = json_encode($final_data);
- list($status, $result) = $this->post_helper($url, json_encode($json), $header, 60, $title . '生成产成品入库单');
- if(! $status) return [false, $result];
- if(! isset($result['code'])) return [false, '产成品入库单生成失败,请重试'];
- if($result['code'] != 0) return [false, $result['msg']];
- return [true, ''];
- }
- //检验单(不是用友的检验单 所以不是参照)生成采购入库单
- public function purchaseInByZj($data, $common_array)
- {
- // u8 token 获取
- list($status, $msg) = $this->getToken($common_array);
- if(! $status) return [false, $msg];
- $title = $common_array['title'];
- //合格数量加让步接收数量
- $num = $data['quality_receive_num'] ?? 0;
- $num2 = $data['compromise_receive_num'] ?? 0;
- $num = bcadd($num, $num2,2);
- $qty = $num;
- $taxRate = $data['tax_rate'] ?? 0; // 税率
- $taxUnitPrice = $data['tax_price'] ?? 0; // 原币含税单价
- // 1. 价税合计 (iSum)
- $iSum = round($qty * $taxUnitPrice, 2);
- // 2. 原币无税金额 (imoney) = 价税合计 / (1 + 税率/100)
- $iMoney = round($iSum / (1 + ($taxRate / 100)), 2);
- // 3. 税额 (itax)
- $iTax = round($iSum - $iMoney, 2);
- // 4. 原币无税单价 (iunitprice)
- $iUnitPrice = round($taxUnitPrice / (1 + ($taxRate / 100)), 6);
- $baseData = [
- "iRowNo" => 1,
- "cInvCode" => $data['material_code'],
- "iQuantity" => $qty,
- "iPOsID" => $data['detail_id'] ?? 0,
- "iOriTaxCost" => (float)$taxUnitPrice, // 原币含税单价
- "iOriCost" => (float)$iUnitPrice, // 原币无税单价
- "iOriMoney" => (float)$iMoney, // 原币无税金额
- "iOriTaxPrice" => (float)$iTax, // 原币税额
- "iOriSum" => (float)$iSum, // 原币价税合计
- "iTaxRate" => (float)$taxRate, // 税率
- "cBatch" => $data['batch'] ?? null,
- "dMadeDate" => $data['made_date'] ?? null,
- "dVDate" => $data['valid_date'] ?? null,
- ];
- if ($common_array['site'] == "LFMY") {
- // 朗峰结构 (cdefine28 - cdefine33)
- $extData = [
- 'cDefine28' => $data['brand_name'] ?? null,
- 'cDefine29' => $data['safe'] ?? null,
- 'cDefine30' => $data['decor'] ?? null,
- 'cDefine31' => $data['craft_type_code'] ?? null,
- 'cDefine32' => $data['decor_b'] ?? null,
- 'cDefine33' => $data['craft_type_code_b'] ?? null,
- ];
- } elseif ($common_array['site'] == "HCLT") {
- // 恒昌结构 (cfree + cdefine22/23 + cdefine28-31)
- $extData = [
- 'cFree1' => $data['customer_brand'] ?? null,
- 'cFree2' => $data['color'] ?? null,
- 'cFree3' => $data['bar_code'] ?? '无',
- 'cDefine22' => $data['plan_no'] ?? null,
- 'cDefine23' => $data['contract_no'] ?? null,
- 'cDefine28' => $data['technical_require'] ?? null,
- 'cDefine29' => $data['quality_require'] ?? null,
- 'cDefine30' => $data['package_require'] ?? null,
- 'cDefine31' => $data['shipping_mark'] ?? null,
- ];
- } else {
- $extData = [];
- }
- $inventoryEntry = array_merge($baseData, $extData);
- // 3. 组织采购入库单
- $tmp = [
- "Inum" => "PurchaseIn",
- "Data" => [
- "iHead" => [
- "IsVerify" => true,
- "bCalPrice" => true, // 开启自动计算
- "PriceCalKey" => "iOriTaxCost", // 以含税单价为准
- "cWhCode" => $data['warehouse_code'] ?? "",
- "cVenCode" => $data['supplier_code'] ?? "",
- "cRdCode" => $data['cRdCode'] ?? "101", //收发类别
- "iExchRate" => $data['iExchRate'] ?? 1.0,
- "iTaxRate" => (float)$taxRate,
- "cExch_Name" => "人民币",
- "cSource" => "库存",
- "cBusType" => "普通采购",
- "cMemo" => $data['cMemo'] ?? "接口生成",
- "dDate" => date("Y-m-d"),
- ],
- "iBody" => [
- $inventoryEntry
- ]
- ]
- ];
- $final_data = [$tmp];
- // 4. 调用 API
- list($host, $token) = $msg;
- $header = ["Authorization: {$token}", 'Content-Type:application/json'];
- $url = $host . "/api/PurchaseIn/Add";
- $json = json_encode($final_data);
- list($status, $result) = $this->post_helper($url,$json, $header, 60, $title . '生成采购入库单');
- if(! $status) return [false, $result];
- if(! isset($result['code'])) return [false, '采购入库单生成失败'];
- if($result['code'] != 0) return [false, $result['msg']];
- return [true, ''];
- }
- //检验单(不是用友的检验单 所以不是参照)生成其他入库单
- public function otherInByZj($data, $common_array){
- // u8 token 获取
- list($status, $msg) = $this->getToken($common_array);
- if(! $status) return [false, $msg];
- $title = $common_array['title'];
- $baseData = [
- "iRowNo" => 1,
- "cInvCode" => $data['material_code'] ?? '',
- "cBatch" => $data['batch'] ?? null,
- "iinvexchrate" => null,
- "iQuantity" => $data['quantity'], // 数量
- "dMadeDate" => $data['made_date'] ?? null, // 生产日期
- "dVDate" => $data['valid_date'] ?? null,
- ];
- if ($common_array['site'] == "LFMY") {
- // 朗峰结构 (cdefine28 - cDefine33)
- $extData = [
- 'cDefine28' => $data['brand_name'] ?? null,
- 'cDefine29' => $data['safe'] ?? null,
- 'cDefine30' => $data['decor'] ?? null,
- 'cDefine31' => $data['craft_type_code'] ?? null,
- 'cDefine32' => $data['decor_b'] ?? null,
- 'cDefine33' => $data['craft_type_code_b'] ?? null,
- ];
- } elseif ($common_array['site'] == "HCLT") {
- // 恒昌结构 (cfree + cdefine22/23 + cdefine28-31)
- $extData = [
- 'cFree1' => $data['customer_brand'] ?? null,
- 'cFree2' => $data['color'] ?? null,
- 'cFree3' => $data['bar_code'] ?? '无',
- 'cDefine22' => $data['plan_no'] ?? null,
- 'cDefine23' => $data['contract_no'] ?? null,
- 'cDefine28' => $data['technical_require'] ?? null,
- 'cDefine29' => $data['quality_require'] ?? null,
- 'cDefine30' => $data['package_require'] ?? null,
- 'cDefine31' => $data['shipping_mark'] ?? null,
- ];
- } else {
- $extData = [];
- }
- $inventoryEntry = array_merge($baseData, $extData);
- $tmp = [
- "Inum" => "OtherIn",
- "Data" => [
- "iHead" => [
- "IsVerify" => true,
- "cWhCode" => $data['warehouse_code'] ?? "",
- "cRdCode" => $data['cRdCode'] ?? null, // 入库类别
- "cDepCode" => null, // 部门
- "cSource" => "库存",
- "cBusType" => "其他入库",
- "cMemo" => $data['cMemo'] ?? "接口生成",
- "dDate" => date("Y-m-d"),
- ],
- "iBody" => [$inventoryEntry]
- ]
- ];
- $final_data = [$tmp];
- //调用所需
- list($host, $token) = $msg;
- //产成品入库单生成
- $header = ["Authorization: {$token}",'Content-Type:application/json'];
- $url = $host . "/api/OtherIn/Add";
- $json = json_encode($final_data);
- list($status, $result) = $this->post_helper($url, $json, $header, 60, $title . '生成其他入库单');
- if(! $status) return [false, $result];
- if(! isset($result['code'])) return [false, '其他入库单生成失败,请重试'];
- if($result['code'] != 0) return [false, $result['msg']];
- return [true, ''];
- }
- //-----------------------------------朗峰u8-----
- public function post_helper($url, $data, $header = [], $timeout = 20, $title = ""){
- Log::channel('apiLog')->info($title . 'POST', ["api" => $url , "param" => json_decode($data,true) ,"header" => $header]);
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_ENCODING, '');
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
- curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
- curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
- if(!is_null($data)) curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
- $r = curl_exec($ch);
- if ($r === false) {
- // 获取错误号
- $errorNumber = curl_errno($ch);
- // 获取错误信息
- $errorMessage = curl_error($ch);
- $message = "cURL Error #{$errorNumber}: {$errorMessage}";
- Log::channel('apiLog')->info($title . 'POST结果', ["message" => $message ]);
- return [false, $message];
- }
- curl_close($ch);
- $return = json_decode($r, true);
- unset($r);
- Log::channel('apiLog')->info($title . 'POST结果', ["message" => $return ]);
- return [true, $return];
- }
- public function get_helper($url,$header=[],$timeout = 20){
- $ch = curl_init();
- curl_setopt_array($ch, array(
- CURLOPT_URL => $url,
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_ENCODING => '',
- CURLOPT_MAXREDIRS => 10,
- CURLOPT_TIMEOUT => $timeout,
- CURLOPT_FOLLOWLOCATION => true,
- CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
- CURLOPT_CUSTOMREQUEST => 'GET',
- CURLOPT_SSL_VERIFYPEER => false,
- CURLOPT_HTTPHEADER => $header,
- ));
- $r = curl_exec($ch);
- if ($r === false) {
- // 获取错误号
- $errorNumber = curl_errno($ch);
- // 获取错误信息
- $errorMessage = curl_error($ch);
- $message = "cURL Error #{$errorNumber}: {$errorMessage}";
- Log::channel('apiLog')->info('朗峰GET结果', ["message" => $message]);
- return [false, $message];
- }
- curl_close($ch);
- Log::channel('apiLog')->info('朗峰GET结果', ["message" => json_decode($r, true)]);
- return [true, json_decode($r, true)];
- }
- public function put_helper($url, $data, $header = [], $timeout = 20){
- Log::channel('apiLog')->info('朗峰PUT', ["api" => $url , "param" => $data ,"header" => $header]);
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_ENCODING, '');
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
- curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
- if(!is_null($data)) curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
- $r = curl_exec($ch);
- if ($r === false) {
- // 获取错误号
- $errorNumber = curl_errno($ch);
- // 获取错误信息
- $errorMessage = curl_error($ch);
- $message = "cURL Error #{$errorNumber}: {$errorMessage}";
- Log::channel('apiLog')->info('朗峰PUT结果', ["message" => $message]);
- return [false, $message];
- }
- curl_close($ch);
- Log::channel('apiLog')->info('朗峰PUT结果', ["message" => json_decode($r, true)]);
- return [true, json_decode($r, true)];
- }
- }
|