|
@@ -0,0 +1,572 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Service;
|
|
|
+
|
|
|
+use App\Model\BasicType;
|
|
|
+use App\Model\Customer;
|
|
|
+use App\Model\Depart;
|
|
|
+use App\Model\Employee;
|
|
|
+use App\Model\Product;
|
|
|
+use App\Model\PurchaseOrder;
|
|
|
+use App\Model\PurchaseOrderInfo;
|
|
|
+use App\Model\SalesOrder;
|
|
|
+use App\Model\SalesOrderProductInfo;
|
|
|
+use App\Model\SeeRange;
|
|
|
+use App\Model\Setting;
|
|
|
+use App\Model\Supplier;
|
|
|
+use App\Model\U8Job;
|
|
|
+use Illuminate\Support\Facades\Config;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
+use Illuminate\Support\Facades\Log;
|
|
|
+use Illuminate\Support\Facades\Redis;
|
|
|
+
|
|
|
+class U8ServerService extends Service
|
|
|
+{
|
|
|
+ public $db = null;
|
|
|
+ public $error = null; // 错误信息
|
|
|
+ public $u8 = []; //u8 配置连接参数
|
|
|
+ public $u8_api = ""; //u8接口请求地址
|
|
|
+ public $post_common = [];//u8接口公用参数
|
|
|
+
|
|
|
+ public function __construct($is_need_connect = 0)
|
|
|
+ {
|
|
|
+ //u8 配置连接参数 u8_api设置
|
|
|
+ list($status,$msg) = $this->settingConnection();
|
|
|
+ if(! $status) {
|
|
|
+ $this->error = $msg;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //是否需要连接u8数据库
|
|
|
+ if($is_need_connect){
|
|
|
+ //构建数据库连接对象
|
|
|
+ list($status,$msg) = $this->settingDb();
|
|
|
+ if(! $status) {
|
|
|
+ $this->error = $msg;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //设置u8连接参数
|
|
|
+ private function settingConnection(){
|
|
|
+ $u8 = Setting::where('setting_name','u8')->where('setting_value','<>','')->first();
|
|
|
+ if(empty($u8)) return [false, 'u8配置参数不存在!'];
|
|
|
+ $u8 = $u8->toArray();
|
|
|
+ // 使用 eval() 函数执行字符串并转换为数组
|
|
|
+ $u8 = eval("return {$u8['setting_value']};");
|
|
|
+
|
|
|
+ if(empty($u8['domain'])) return [false, '外部域名不能为空!'];
|
|
|
+ if(empty($u8['u8_api_port'])) return [false, 'u8程序API端口不能为空!'];
|
|
|
+ if(empty($u8['u8_database_port'])) return [false, 'u8程序数据库端口不能为空!'];
|
|
|
+ if(empty($u8['database'])) return [false, 'u8程序数据库不能为空!'];
|
|
|
+ if(empty($u8['database_account'])) return [false, 'u8程序数据库登录账号不能为空!'];
|
|
|
+ if(empty($u8['database_password'])) return [false, 'u8程序数据库登录密码不能为空!'];
|
|
|
+ if(empty($u8['sAccID'])) return [false, 'u8程序sAccID不能为空!'];
|
|
|
+ if(empty($u8['sServer'])) return [false, 'u8程序sServer不能为空!'];
|
|
|
+ if(empty($u8['sUserID'])) return [false, 'u8程序sUserID不能为空!'];
|
|
|
+ if(empty($u8['sPassword'])) return [false, 'u8程序sPassword不能为空!'];
|
|
|
+
|
|
|
+ $this->u8 = $u8;
|
|
|
+ $this->u8_api = "https://" . $u8['domain'] . ":" . $u8['u8_api_port'] . "/U8Sys/U8API";
|
|
|
+ $this->post_common = [
|
|
|
+ "password"=>"cloud@123456",
|
|
|
+ "entity"=>"", //调用方法
|
|
|
+ "login"=>[
|
|
|
+ "sAccID"=> $u8['sAccID'],
|
|
|
+ "sDate"=> date("Y-m-d"),
|
|
|
+ "sServer"=> $u8['sServer'],
|
|
|
+ "sUserID"=> $u8['sUserID'],
|
|
|
+ "sSerial"=> "",
|
|
|
+ "sPassword"=> $u8['sPassword']
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+
|
|
|
+ return [true, ''];
|
|
|
+ }
|
|
|
+
|
|
|
+ //设置u8数据库连接
|
|
|
+ private function settingDb(){
|
|
|
+ if(empty($this->db)){
|
|
|
+ $u8 = $this->u8;
|
|
|
+
|
|
|
+ $config = [
|
|
|
+ 'driver' => 'sqlsrv',
|
|
|
+ 'host' => $u8['domain'],
|
|
|
+ 'port' => $u8['u8_database_port'],
|
|
|
+ 'database' => $u8['database'],
|
|
|
+ 'username' => $u8['database_account'],
|
|
|
+ 'password' => $u8['database_password'],
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 数据库配置设置
|
|
|
+ Config::set('database.connections.sqlsrvs', $config);
|
|
|
+
|
|
|
+ // 连接
|
|
|
+ try {
|
|
|
+ $pdo = DB::connection('sqlsrvs')->getPdo();
|
|
|
+ if ($pdo instanceof \PDO) {
|
|
|
+ // 连接成功的逻辑代码
|
|
|
+ $this->db = DB::connection('sqlsrvs');
|
|
|
+ } else {
|
|
|
+ return [false, '连接失败!'];
|
|
|
+ }
|
|
|
+ } catch (\Throwable $e) {
|
|
|
+ return [false, $e->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, ''];
|
|
|
+ }
|
|
|
+
|
|
|
+ //采购订单保存
|
|
|
+ public function U8PO_PomainSave($data){
|
|
|
+ $id = $data;
|
|
|
+
|
|
|
+ //映射ip是否通畅
|
|
|
+ $bool = $this->isDomainAvailable($this->u8['domain']);
|
|
|
+ if(! $bool) {
|
|
|
+ $msg = 'U8程序外部域名不可达';
|
|
|
+ $this->finalSettle($id, U8Job::one,$msg);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取数据
|
|
|
+ $result = $this->getPurchaseData($id);
|
|
|
+ if(empty($result)) {
|
|
|
+ $msg = "同步数据获取失败";
|
|
|
+ $this->finalSettle($id, U8Job::one, $msg);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //u8接口参数组织
|
|
|
+ $post = $this->post_common;
|
|
|
+ $post['entity'] = "U8PO_PomainSave";
|
|
|
+
|
|
|
+ $time = date("Y-m-d");
|
|
|
+
|
|
|
+ foreach ($result as $value){
|
|
|
+ $bodys = [];
|
|
|
+ foreach ($value['product'] as $son){
|
|
|
+ //子表数据
|
|
|
+ $bodys[] = [
|
|
|
+ "iappids"=>"", //子表id
|
|
|
+ "cinvcode"=>$son['code'], //存货编码
|
|
|
+ "iquantity"=>$son['number'], //数量
|
|
|
+ "inum"=>$son['number'], //件数
|
|
|
+ "ipertaxrate"=>$son['ipertaxrate'], //税率
|
|
|
+ "iunitprice"=>$son['iunitprice'], //原币单价
|
|
|
+ "itaxprice"=>$son['itaxprice'], //原币含税单价
|
|
|
+ "isum"=>$son['isum'], //原币价税合计
|
|
|
+ "imoney"=>$son['imoney'], //原币无税金额
|
|
|
+ "itax"=>$son['itax'],//原币税额
|
|
|
+ "cbmemo"=>$son['mark'], //表体备注
|
|
|
+ "cdefine22"=>"",
|
|
|
+ "cdefine23"=>"",
|
|
|
+ "cdefine24"=>"",
|
|
|
+ "cdefine25"=>"",
|
|
|
+ "cdefine26"=>"",
|
|
|
+ "cdefine27"=>"",
|
|
|
+ "cdefine28"=>"",
|
|
|
+ "cdefine29"=>"",
|
|
|
+ "cdefine30"=>"",
|
|
|
+ "cdefine31"=>"",
|
|
|
+ "cdefine32"=>"",
|
|
|
+ "cdefine33"=>"",
|
|
|
+ "cdefine34"=>"",
|
|
|
+ "cdefine35"=>"",
|
|
|
+ "cdefine36"=>"",
|
|
|
+ "cdefine37"=>"",
|
|
|
+ "cfree1"=>"",
|
|
|
+ "cfree2"=>"",
|
|
|
+ "cfree3"=>"",
|
|
|
+ "cfree4"=>"",
|
|
|
+ "cfree5"=>"",
|
|
|
+ "cfree6"=>"",
|
|
|
+ "cfree7"=>"",
|
|
|
+ "cfree8"=>"",
|
|
|
+ "cfree9"=>"",
|
|
|
+ "cfree10"=>""
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ //最终数据
|
|
|
+ $post['data'] = [
|
|
|
+ "cpoid"=>"",
|
|
|
+ "dpodate"=>date("Y-m-d",$value['crt_time']),
|
|
|
+ "cmemo"=>"T9采购单:" . $value['order_number'],
|
|
|
+ "cmaker"=>"admin",
|
|
|
+ "cmaketime"=>$time,
|
|
|
+ "IsExamine"=>false,
|
|
|
+ "cvencode"=>"", //供应商编码
|
|
|
+ "cvenname"=>$value['cvenname'], //供应商名称
|
|
|
+ "cdepcode"=>"", //部门编号
|
|
|
+ "cdepname"=>$value['cdepname'], //部门名称
|
|
|
+ "cpersoncode"=>$value['cpersoncode'], //业务员编码
|
|
|
+ "cdefine1"=>"",
|
|
|
+ "cdefine2"=>"",
|
|
|
+ "cdefine3"=>"",
|
|
|
+ "cdefine4"=>"",
|
|
|
+ "cdefine5"=>"",
|
|
|
+ "cdefine6"=>"",
|
|
|
+ "cdefine7"=>"",
|
|
|
+ "cdefine8"=>"",
|
|
|
+ "cdefine9"=>"",
|
|
|
+ "cdefine10"=>"",
|
|
|
+ "cdefine11"=>"",
|
|
|
+ "cdefine12"=>"",
|
|
|
+ "cdefine13"=>"",
|
|
|
+ "cdefine14"=>"",
|
|
|
+ "cdefine15"=>"",
|
|
|
+ "cdefine16"=>"",
|
|
|
+ "bodys"=>$bodys
|
|
|
+ ];
|
|
|
+
|
|
|
+ file_put_contents('record_purchase.txt',"请求参数:" . json_encode($post) . PHP_EOL,8);
|
|
|
+ $return = $this->post_helper($this->u8_api,json_encode($post), ['Content-Type:application/json']);
|
|
|
+ file_put_contents('record_purchase.txt',"返回结果:" . json_encode($return). PHP_EOL,8);
|
|
|
+
|
|
|
+ //剔除数据
|
|
|
+ $id = array_diff($id, [$value['id']]);
|
|
|
+
|
|
|
+ if(empty($return)) {
|
|
|
+ $msg = '异常错误,请确认请求接口地址或地址不可达';
|
|
|
+ $this->finalSettle($value['id'], U8Job::one, $msg);
|
|
|
+ }else{
|
|
|
+ if( ! empty($return['flag'])){
|
|
|
+ $this->finalSettle($value['id'], U8Job::one);
|
|
|
+ }else{
|
|
|
+ $this->finalSettle($value['id'], U8Job::one, $return['msg']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(! empty($id)){
|
|
|
+ $msg = "未找到同步数据";
|
|
|
+ $this->finalSettle($id, U8Job::one, $msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //销售订单(合同)保存
|
|
|
+ public function U8SaleOrderSave($data){
|
|
|
+ $id = $data;
|
|
|
+
|
|
|
+ //映射ip是否通畅
|
|
|
+ $bool = $this->isDomainAvailable($this->u8['domain']);
|
|
|
+ if(! $bool) {
|
|
|
+ $msg = 'U8程序外部域名不可达';
|
|
|
+ $this->finalSettle($id, U8Job::two, $msg);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取数据
|
|
|
+ $result = $this->getSaleOrderData($id);
|
|
|
+ if(empty($result)) {
|
|
|
+ $msg = "同步数据获取失败";
|
|
|
+ $this->finalSettle($id, U8Job::two, $msg);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //u8接口参数组织
|
|
|
+ $post = $this->post_common;
|
|
|
+ $post['entity'] = "U8SaleOrderSave";
|
|
|
+
|
|
|
+ $time = date("Y-m-d");
|
|
|
+ $time1 = date("Y-m-d H:i:s");
|
|
|
+ foreach ($result as $value){
|
|
|
+ $bodys = [];
|
|
|
+
|
|
|
+ $cdefine31 = "";
|
|
|
+ if(! empty($value['cstname']) && $value['cstname'] == "线下销售") $cdefine31 = $value['cstname'];
|
|
|
+ foreach ($value['product'] as $son){
|
|
|
+ //子表数据
|
|
|
+ $bodys[] = [
|
|
|
+ "iappids"=>"", //子表id
|
|
|
+ "cinvcode"=>$son['code'], //存货编码
|
|
|
+ "iquantity"=>$son['number'], //数量
|
|
|
+ "inum"=>$son['number'], //件数
|
|
|
+ "ipertaxrate"=>$son['ipertaxrate'], //税率
|
|
|
+ "iunitprice"=>$son['iunitprice'], //原币单价
|
|
|
+ "itaxprice"=>$son['itaxprice'], //原币含税单价
|
|
|
+ "isum"=>$son['isum'], //原币价税合计
|
|
|
+ "imoney"=>$son['imoney'], //原币无税金额
|
|
|
+ "itax"=>$son['itax'],//原币税额
|
|
|
+ "cbmemo"=>$son['mark'], //表体备注
|
|
|
+ "cdefine22"=>$son['cdefine22'], //手机号码
|
|
|
+ "cdefine23"=>"",
|
|
|
+ "cdefine24"=>"",
|
|
|
+ "cdefine25"=>$son['cdefine25'], //平台类型
|
|
|
+ "cdefine26"=>"",
|
|
|
+ "cdefine27"=>"",
|
|
|
+ "cdefine28"=>$son['cdefine28'], //平台单号
|
|
|
+ "cdefine29"=>$son['cdefine29'], //分社施工
|
|
|
+ "cdefine30"=>$son['cdefine30'], //业务员
|
|
|
+ "cdefine31"=>$cdefine31, //客户名称
|
|
|
+ "cdefine32"=>$son['cdefine32'], //直播销售
|
|
|
+ "cdefine33"=>"",
|
|
|
+ "cdefine34"=>"",
|
|
|
+ "cdefine35"=>"",
|
|
|
+ "cdefine36"=>"",
|
|
|
+ "cdefine37"=>"",
|
|
|
+ "cfree1"=>"",
|
|
|
+ "cfree2"=>"",
|
|
|
+ "cfree3"=>"",
|
|
|
+ "cfree4"=>"",
|
|
|
+ "cfree5"=>"",
|
|
|
+ "cfree6"=>"",
|
|
|
+ "cfree7"=>"",
|
|
|
+ "cfree8"=>"",
|
|
|
+ "cfree9"=>"",
|
|
|
+ "cfree10"=>""
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ //最终数据
|
|
|
+ $post['data'] = [
|
|
|
+ "csocode"=>'',
|
|
|
+ "ddate"=> $time,
|
|
|
+ "cmaker"=>"admin",
|
|
|
+ "dcreatesystime"=>$time1,
|
|
|
+ "cstcode"=>"",
|
|
|
+ "cbustype" => $value['cbustype'], //业务类型
|
|
|
+ "cstname"=>$value['cstname'], //销售类型
|
|
|
+ "ccuscode"=>"",
|
|
|
+ "ccusabbname"=>$value['ccusabbname'], //客户简称
|
|
|
+ "cdepcode"=>"",
|
|
|
+ "cdepname"=>$value['cdepname'], // 部门名称
|
|
|
+ "cpersoncode"=>"", //业务员编码 暂时不要
|
|
|
+ "itaxrate"=>"0",
|
|
|
+ "cmemo"=>"T9销售订单:". $value['order_number'],
|
|
|
+ "cdefine1"=>"",
|
|
|
+ "cdefine2"=>"",
|
|
|
+ "cdefine3"=>"",
|
|
|
+ "cdefine4"=>"",
|
|
|
+ "cdefine5"=>"",
|
|
|
+ "cdefine6"=>"",
|
|
|
+ "cdefine7"=>"",
|
|
|
+ "cdefine8"=>"",
|
|
|
+ "cdefine9"=>"",
|
|
|
+ "cdefine10"=>"",
|
|
|
+ "cdefine11"=>"",
|
|
|
+ "cdefine12"=>"",
|
|
|
+ "cdefine13"=>"",
|
|
|
+ "cdefine14"=>"",
|
|
|
+ "cdefine15"=>"",
|
|
|
+ "cdefine16"=>"",
|
|
|
+ "bodys"=>$bodys
|
|
|
+ ];
|
|
|
+
|
|
|
+ file_put_contents('record_purchase.txt',"请求参数:" . json_encode($post) . PHP_EOL,8);
|
|
|
+ $return = $this->post_helper($this->u8_api,json_encode($post), ['Content-Type:application/json']);
|
|
|
+ file_put_contents('record_purchase.txt',"返回结果:" . json_encode($return). PHP_EOL,8);
|
|
|
+
|
|
|
+ //剔除数据
|
|
|
+ $id = array_diff($id, [$value['id']]);
|
|
|
+
|
|
|
+ if(empty($return)) {
|
|
|
+ $msg = '异常错误,请确认请求接口地址或地址不可达';
|
|
|
+ $this->finalSettle($value['id'],U8Job::two, $msg);
|
|
|
+ }else{
|
|
|
+ if( ! empty($return['flag'])){
|
|
|
+ $this->finalSettle($value['id'],U8Job::two);
|
|
|
+ }else{
|
|
|
+ $this->finalSettle($value['id'], U8Job::two, $return['msg']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(! empty($id)){
|
|
|
+ $msg = "未找到同步数据";
|
|
|
+ $this->finalSettle($id,U8Job::two, $msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //最终处理
|
|
|
+ public function finalSettle($data,$data_type, $msg = ''){
|
|
|
+ if(! is_array($data)) $data = [$data];
|
|
|
+ $time = time();
|
|
|
+ $insert = [];
|
|
|
+
|
|
|
+ U8Job::where('del_time',0)
|
|
|
+ ->where('data_type',U8Job::one)
|
|
|
+ ->whereIn('data',$data)
|
|
|
+ ->update(['del_time' => $time]);
|
|
|
+ foreach ($data as $value){
|
|
|
+ if(empty($msg)){
|
|
|
+ $insert[] = [
|
|
|
+ 'data' => $value,
|
|
|
+ 'data_type' => $data_type,
|
|
|
+ 'crt_time' => $time,
|
|
|
+ 'state' => U8Job::success,
|
|
|
+ ];
|
|
|
+ }else{
|
|
|
+ $insert[] = [
|
|
|
+ 'data' => $value,
|
|
|
+ 'data_type' => $data_type,
|
|
|
+ 'crt_time' => $time,
|
|
|
+ 'state' => U8Job::failed,
|
|
|
+ 'msg' => $msg
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ U8Job::insert($insert);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getPurchaseData($id){
|
|
|
+ $main = PurchaseOrder::whereIn('id',$id)
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->get()->toArray();
|
|
|
+ if(empty($main)) return [];
|
|
|
+ $supplier = Supplier::whereIn('id',array_unique(array_column($main,'supplier')))
|
|
|
+ ->pluck('title','id')
|
|
|
+ ->toArray();
|
|
|
+ $depart = Depart::whereIn('id',array_unique(array_column($main,'depart_id')))
|
|
|
+ ->pluck('title','id')
|
|
|
+ ->toArray();
|
|
|
+ $emp = Employee::whereIn('id',array_unique(array_column($main,'purchase_id')))
|
|
|
+ ->pluck('number','id')
|
|
|
+ ->toArray();
|
|
|
+
|
|
|
+ $sub = PurchaseOrderInfo::whereIn('purchase_order_id',$id)
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->get()->toArray();
|
|
|
+ $product = Product::whereIn('id',array_unique(array_column($sub,'product_id')))
|
|
|
+ ->get()->toArray();
|
|
|
+ $product_map = array_column($product,null,'id');
|
|
|
+
|
|
|
+ $sub_map = [];
|
|
|
+ foreach ($sub as $value){
|
|
|
+ $product_tmp = $product_map[$value['product_id']] ?? [];
|
|
|
+ $value['code'] = $product_tmp['code'];
|
|
|
+
|
|
|
+ //计算金额
|
|
|
+ if($value['rate'] > 0){
|
|
|
+// ipertaxrate 税率
|
|
|
+// iunitprice 原币单价
|
|
|
+// itaxprice 原币含税单价
|
|
|
+// isum 原币价税合计
|
|
|
+// imoney 原币无税金额
|
|
|
+// itax 原币税额
|
|
|
+ $value['ipertaxrate'] = $value['rate'];
|
|
|
+ $rate = round($value['rate'] / 100,2);
|
|
|
+ $value['iunitprice'] = round($value['price'] / (1 + $rate),2);
|
|
|
+ $value['itaxprice'] = $value['price'];
|
|
|
+ $value['isum'] = round($value['price'] * $value['number'],2);
|
|
|
+ $value['imoney'] = round($value['iunitprice'] * $value['number'],2);
|
|
|
+ $value['itax'] = round($value['isum'] - $value['imoney'],2);
|
|
|
+ }else{
|
|
|
+ $value['ipertaxrate'] = 0;
|
|
|
+ $value['iunitprice'] = $value['price'];
|
|
|
+ $value['itaxprice'] = $value['price'];
|
|
|
+ $value['isum'] = $value['price'] * $value['number'];
|
|
|
+ $value['imoney'] = $value['isum'];
|
|
|
+ $value['itax'] = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ $sub_map[$value['purchase_order_id']][] = $value;
|
|
|
+ }
|
|
|
+ foreach ($main as $key => $value){
|
|
|
+ $main[$key]['cptname'] = $supplier[$value['supplier']] ?? "";
|
|
|
+ $main[$key]['cvenname'] = $supplier[$value['supplier']] ?? "";
|
|
|
+ $main[$key]['cdepname'] = $depart[$value['depart_id']] ?? "";
|
|
|
+ $main[$key]['cpersoncode'] = $emp[$value['purchase_id']] ?? "";
|
|
|
+ $main[$key]['product'] = $sub_map[$value['id']] ?? [];
|
|
|
+ }
|
|
|
+
|
|
|
+ return $main;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getSaleOrderData($id){
|
|
|
+ $main = SalesOrder::whereIn('id',$id)
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->get()->toArray();
|
|
|
+ if(empty($main)) return [];
|
|
|
+ $main_map = array_column($main,null,'id');
|
|
|
+ $sub = SalesOrderProductInfo::whereIn('sales_order_id',$id)
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->get()->toArray();
|
|
|
+ $product = Product::whereIn('id',array_unique(array_column($sub,'product_id')))
|
|
|
+ ->get()->toArray();
|
|
|
+ $product_map = array_column($product,null,'id');
|
|
|
+
|
|
|
+ $code_map = BasicType::whereIn('id',array_unique(array_merge_recursive(array_column($main,'business_type'),array_column($main,'sale_type'),array_column($main,'plat_type'))))
|
|
|
+ ->pluck('title','id')
|
|
|
+ ->toArray();
|
|
|
+ $customer_map = Customer::whereIn('id',array_unique(array_column($main,'customer_id')))
|
|
|
+ ->pluck('title','id')
|
|
|
+ ->toArray();
|
|
|
+ $depart = Depart::where('parent_id',0)
|
|
|
+ ->pluck('title','id')
|
|
|
+ ->toArray();
|
|
|
+ $emp = Employee::whereIn('id',array_unique(array_column($main,'crt_id')))
|
|
|
+ ->pluck('number','id')
|
|
|
+ ->toArray();
|
|
|
+ $see = SeeRange::where('del_time',0)
|
|
|
+ ->whereIn('data_id',array_column($main,'id'))
|
|
|
+ ->where('data_type',SeeRange::type_seven)
|
|
|
+ ->where('type',SeeRange::data_three)
|
|
|
+ ->pluck('param_id','data_id')->toArray();//指派的分社
|
|
|
+
|
|
|
+ $sub_map = [];
|
|
|
+ foreach ($sub as $value){
|
|
|
+ $product_tmp = $product_map[$value['product_id']] ?? [];
|
|
|
+ $main_tmp = $main_map[$value['sales_order_id']] ?? [];
|
|
|
+
|
|
|
+ //计算金额
|
|
|
+ if($value['rate'] > 0){
|
|
|
+ $value['ipertaxrate'] = $value['rate'];
|
|
|
+ $rate = round($value['rate'] / 100,2);
|
|
|
+ $value['iunitprice'] = round($value['price'] / (1 + $rate),2);
|
|
|
+ $value['itaxprice'] = $value['price'];
|
|
|
+ $value['isum'] = round($value['price'] * $value['number'],2);
|
|
|
+ $value['imoney'] = round($value['iunitprice'] * $value['number'],2);
|
|
|
+ $value['itax'] = round($value['isum'] - $value['imoney'],2);
|
|
|
+ }else{
|
|
|
+ $value['ipertaxrate'] = 0;
|
|
|
+ $value['iunitprice'] = $value['price'];
|
|
|
+ $value['itaxprice'] = $value['price'];
|
|
|
+ $value['isum'] = $value['price'] * $value['number'];
|
|
|
+ $value['imoney'] = $value['isum'];
|
|
|
+ $value['itax'] = 0;
|
|
|
+ }
|
|
|
+ $value['cdefine25'] = $code_map[$main_tmp['plat_type']] ?? ""; //平台类型
|
|
|
+ $value['cdefine28'] = $main_tmp['plat_order'] ?? ""; //平台单号
|
|
|
+ $top_depart_id = $see[$value['sales_order_id']] ?? 0;
|
|
|
+ $value['cdefine29'] = $depart[$top_depart_id] ?? "";//分社施工
|
|
|
+ $value['cdefine32'] = "";//直播销售 暂时没有
|
|
|
+ $value['cdefine31'] = "";//客户名称(线上的时候就是空 线下的话就是表头的客户简称)
|
|
|
+ $value['cdefine22'] = "";//手机号码 暂时没有
|
|
|
+ $value['cdefine30'] = $emp[$main_tmp['crt_id']] ?? "";//业务员
|
|
|
+ $value['code'] = $product_tmp['code'];//存货编码
|
|
|
+
|
|
|
+ $sub_map[$value['sales_order_id']][] = $value;
|
|
|
+ }
|
|
|
+ foreach ($main as $key => $value){
|
|
|
+ $main[$key]['cbustype'] = $code_map[$value['business_type']] ?? ""; //业务类型(本身就是中文)
|
|
|
+ $main[$key]['cstname'] = $code_map[$value['sale_type']] ?? ""; //销售类型
|
|
|
+ $main[$key]['ccusabbname'] = $customer_map[$value['customer_id']] ?? "";//客户简称
|
|
|
+ $main[$key]['cdepname'] = $depart[$value['top_depart_id']] ?? "";//部门名称
|
|
|
+// $main[$key]['cpersoncode'] = $emp[$value['crt_id']] ?? "";//业务员
|
|
|
+ $main[$key]['product'] = $sub_map[$value['id']] ?? [];
|
|
|
+ }
|
|
|
+
|
|
|
+ return $main;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function post_helper($url, $data, $header = [], $timeout = 20){
|
|
|
+ $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_TIMEOUT, $timeout);
|
|
|
+ if(!is_null($data)) curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
|
|
+ $r = curl_exec($ch);
|
|
|
+ curl_close($ch);
|
|
|
+ return json_decode($r, true);
|
|
|
+ }
|
|
|
+}
|