Преглед на файлове

平台订单导入优化

wufeng преди 2 години
родител
ревизия
3c259a779a
променени са 3 файла, в които са добавени 244 реда и са изтрити 129 реда
  1. 187 102
      app/admin/controller/OrderImport.php
  2. 29 6
      app/command/ImportOrderFromCAnalysisData.php
  3. 28 21
      app/command/ImportOrderFromCHandleData.php

+ 187 - 102
app/admin/controller/OrderImport.php

@@ -109,80 +109,118 @@ class OrderImport extends Base
     {
         $id = $this->request->post('id/d', 0, 'trim');
 
-        $info = OIFCModel::alias('c')
-            ->field('c.*,ce.*,b.company,ci.companyName CustomerCompanyName,s.name supplierName,a.activity_code')
-            ->leftJoin('order_import_from_c_extend ce', 'ce.order_import_from_c_id=c.id')
-            ->leftJoin('business b', 'b.companyNo=ce.companyNo AND b.is_del=0')
-            ->leftJoin('customer_info ci', 'ci.companyNo=ce.customer_code AND ci.is_del=0')
-            ->leftJoin('supplier s', 's.code=ce.supplierNo AND s.is_del=0')
-            ->leftJoin('activity_info a', 'a.activity_code=ce.activity_code AND a.is_del=0')
-            ->where('c.id', $id)
-            ->where('c.status', '<>', OIFCModel::$status_wait_validate)
+        $info = OIFCModel::where('id', $id)
+            ->where('status', '<>', OIFCModel::$status_wait_validate)
             ->findOrEmpty()
-            ->toArray();//因为这里用的是模型,查询结果是一个对象
-
-        if (!empty($info)) {
-            $info['platform_names'] = Db::name('platform')
-                ->where('platform_code', $info['platform_codes'])
-                ->where(['is_del' => 0, 'status' => 1])
-                ->column('platform_name');
-
-            if ($info['addr_code']) {
-                $addr_code = explode(',', $info['addr_code']);
-                $info['addr_name'] = GetAddr(json_encode(['provice_code' => $addr_code[0], 'city_code' => $addr_code[1], 'area_code' => $addr_code[2]]));
-            } else $info['addr_name'] = '';
-
-            $res['id'] = $info['id'];
-            $res['status'] = $info['status'];
-            $res['createrid'] = $info['createrid'];
-            $res['creater'] = $info['creater'];
-            $res['updateid'] = $info['updateid'];
-            $res['updater'] = $info['updater'];
-
-            //导入字段
-            $res['import'] = [
-                'platform_code' => $info['platform_code'],
-                'platform_time' => $info['platform_time'],
-                'plat_code' => $info['plat_code'],
-                'sale_source' => $info['sale_source'],
-                'price' => $info['price'],
-                'num' => $info['num'],
-                'before_discount_all_price' => $info['before_discount_all_price'],
-                'activity_name' => $info['activity_name'],
-                'mode' => $info['mode'],
-                'order_remark' => $info['order_remark'],
-                'contactor' => $info['contactor'],
-                'mobile' => $info['mobile'],
-                'addr' => $info['addr'],
-            ];
-            //确认字段
-            $res['confirm'] = $info;
-
-            //用户编辑字段
-            $user_update = Db::name('order_import_from_c_extend')
-                ->alias('ce')
-                ->field('ce.*,b.company,ci.companyName CustomerCompanyName,s.name supplierName,a.activity_code')
-                ->leftJoin('business b', 'b.companyNo=ce.companyNo AND b.is_del=0')
-                ->leftJoin('customer_info ci', 'ci.companyNo=ce.customer_code AND ci.is_del=0')
-                ->leftJoin('supplier s', 's.code=ce.supplierNo AND s.is_del=0')
-                ->leftJoin('activity_info a', 'a.activity_code=ce.activity_code AND a.is_del=0')
-                ->where(['ce.order_import_from_c_id' => $id, 'ce.is_del' => 1])
-                ->order('ce.addtime', 'desc')
-                ->find();
-
-            if (empty($user_update)) $res['user_update'] = $res['confirm'];
-            else {
-                if ($user_update['addr_code']) {
-                    $addr_code = explode(',', $user_update['addr_code']);
-                    $user_update['addr_name'] = GetAddr(json_encode(['provice_code' => $addr_code[0], 'city_code' => $addr_code[1], 'area_code' => $addr_code[2]]));
-                } else $user_update['addr_name'] = '';
-                $res['user_update'] = array_merge($res['confirm'], $user_update);
-            }
-
-            return app_show(0, '请求成功', $res);
-
-        } else  return error_show(1005, '系统尚未解析完成,无法查看详情,请等待');
+            ->toArray();
 
+        if (empty($info)) return error_show(1005, '系统尚未解析完成,无法查看详情,请等待');
+        $res['id'] = $info['id'];
+        $res['status'] = $info['status'];
+        $res['createrid'] = $info['createrid'];
+        $res['creater'] = $info['creater'];
+        $res['updateid'] = $info['updateid'];
+        $res['updater'] = $info['updater'];
+
+        //导入原始数据
+        $res['import'] = $info;
+
+        //解析数据
+        $res['confirm'] = Db::name('order_import_from_c_extend')
+            ->where(['order_import_from_c_id' => $id, 'type' => 1])
+            ->findOrEmpty();
+        if ($res['confirm']['addr_code']) {
+            $addr_code = explode(',', $res['confirm']['addr_code']);
+            $res['confirm']['addr_name'] = GetAddr(json_encode(['provice_code' => $addr_code[0], 'city_code' => $addr_code[1], 'area_code' => $addr_code[2]]));
+        } else $res['confirm']['addr_name'] = '';
+
+        //用户确认数据
+        $res['user_update'] = Db::name('order_import_from_c_extend')
+            ->where(['order_import_from_c_id' => $id, 'type' => 2])
+            ->find();
+        if ($res['user_update']) {
+            if ($res['user_update']['addr_code']) {
+                $addr_code = explode(',', $res['user_update']['addr_code']);
+                $res['user_update']['addr_name'] = GetAddr(json_encode(['provice_code' => $addr_code[0], 'city_code' => $addr_code[1], 'area_code' => $addr_code[2]]));
+            } else $res['user_update']['addr_name'] = '';
+        } else $res['user_update'] = $res['confirm'];
+
+        return app_show(0, '请求成功', $res);
+        /**
+         * $info = OIFCModel::alias('c')
+         * ->field('c.*,ce.*,b.company,ci.companyName CustomerCompanyName,s.name supplierName,a.activity_code')
+         * ->leftJoin('order_import_from_c_extend ce', 'ce.order_import_from_c_id=c.id')
+         * ->leftJoin('business b', 'b.companyNo=ce.companyNo AND b.is_del=0')
+         * ->leftJoin('customer_info ci', 'ci.companyNo=ce.customer_code AND ci.is_del=0')
+         * ->leftJoin('supplier s', 's.code=ce.supplierNo AND s.is_del=0')
+         * ->leftJoin('activity_info a', 'a.activity_code=ce.activity_code AND a.is_del=0')
+         * ->where('c.id', $id)
+         * ->where('c.status', '<>', OIFCModel::$status_wait_validate)
+         * ->findOrEmpty()
+         * ->toArray();//因为这里用的是模型,查询结果是一个对象
+         *
+         * if (!empty($info)) {
+         * $info['platform_names'] = Db::name('platform')
+         * ->where('platform_code', $info['platform_codes'])
+         * ->where(['is_del' => 0, 'status' => 1])
+         * ->column('platform_name');
+         *
+         * if ($info['addr_code']) {
+         * $addr_code = explode(',', $info['addr_code']);
+         * $info['addr_name'] = GetAddr(json_encode(['provice_code' => $addr_code[0], 'city_code' => $addr_code[1], 'area_code' => $addr_code[2]]));
+         * } else $info['addr_name'] = '';
+         *
+         * $res['id'] = $info['id'];
+         * $res['status'] = $info['status'];
+         * $res['createrid'] = $info['createrid'];
+         * $res['creater'] = $info['creater'];
+         * $res['updateid'] = $info['updateid'];
+         * $res['updater'] = $info['updater'];
+         *
+         * //导入字段
+         * $res['import'] = [
+         * 'platform_code' => $info['platform_code'],
+         * 'platform_time' => $info['platform_time'],
+         * 'plat_code' => $info['plat_code'],
+         * 'sale_source' => $info['sale_source'],
+         * 'price' => $info['price'],
+         * 'num' => $info['num'],
+         * 'before_discount_all_price' => $info['before_discount_all_price'],
+         * 'activity_name' => $info['activity_name'],
+         * 'mode' => $info['mode'],
+         * 'order_remark' => $info['order_remark'],
+         * 'contactor' => $info['contactor'],
+         * 'mobile' => $info['mobile'],
+         * 'addr' => $info['addr'],
+         * ];
+         * //确认字段
+         * $res['confirm'] = $info;
+         *
+         * //用户编辑字段
+         * $user_update = Db::name('order_import_from_c_extend')
+         * ->alias('ce')
+         * ->field('ce.*,b.company,ci.companyName CustomerCompanyName,s.name supplierName,a.activity_code')
+         * ->leftJoin('business b', 'b.companyNo=ce.companyNo AND b.is_del=0')
+         * ->leftJoin('customer_info ci', 'ci.companyNo=ce.customer_code AND ci.is_del=0')
+         * ->leftJoin('supplier s', 's.code=ce.supplierNo AND s.is_del=0')
+         * ->leftJoin('activity_info a', 'a.activity_code=ce.activity_code AND a.is_del=0')
+         * ->where(['ce.order_import_from_c_id' => $id, 'ce.is_del' => 1])
+         * ->order('ce.addtime', 'desc')
+         * ->find();
+         *
+         * if (empty($user_update)) $res['user_update'] = $res['confirm'];
+         * else {
+         * if ($user_update['addr_code']) {
+         * $addr_code = explode(',', $user_update['addr_code']);
+         * $user_update['addr_name'] = GetAddr(json_encode(['provice_code' => $addr_code[0], 'city_code' => $addr_code[1], 'area_code' => $addr_code[2]]));
+         * } else $user_update['addr_name'] = '';
+         * $res['user_update'] = array_merge($res['confirm'], $user_update);
+         * }
+         *
+         * return app_show(0, '请求成功', $res);
+         *
+         * } else  return error_show(1005, '系统尚未解析完成,无法查看详情,请等待');
+         **/
     }
 
     //用户确认订单数据(编辑)
@@ -192,7 +230,7 @@ class OrderImport extends Base
         $param = $this->request->only([
             'id',
             'platform_code',
-            'po_code',
+            'po_code' => '',
             'platform_time',
             'sale_source',
             'plat_code',
@@ -207,6 +245,7 @@ class OrderImport extends Base
             'mobile',
             'addr',
             'addr_code',
+            'discount_reason',
             'token'
         ], 'post', 'trim');
 
@@ -238,41 +277,87 @@ class OrderImport extends Base
 
             $userinfo = GetUserInfo($param['token']);
 
+            //更新主表
             Db::name('order_import_from_c')
                 ->where(['id' => $param['id'], 'is_del' => OIFCModel::$is_del_normal, 'status' => OIFCModel::$status_wait_confirm])
                 ->update([
-                    'platform_code' => $param['platform_code'],
-                    'po_code' => $param['po_code'],
-                    'platform_time' => $param['platform_time'],
-                    'sale_source' => $param['sale_source'],
-                    'plat_code' => $param['plat_code'],
-                    'price' => $param['price'],
-                    'num' => $param['num'],
-                    'before_discount_all_price' => $param['before_discount_all_price'],
-                    'activity_name' => $param['activity_name'],
-                    'mode' => $param['mode'],
-                    'order_remark' => $param['order_remark'],
-                    'contactor' => $param['contactor'],
-                    'mobile' => $param['mobile'],
-                    'addr' => $param['addr'],
                     'status' => OIFCModel::$status_wait_relation,
                     'updatetime' => date('Y-m-d H:i:s'),
-                    'remark' => ''
+                    'remark' => '',
+                    'updateid' => isset($user["data"]['id']) ? $userinfo["data"]['id'] : 0,
+                    'updater' => isset($user["data"]['nickname']) ? $userinfo["data"]['nickname'] : '',
                 ]);
 
-            Db::name('order_import_from_c_extend')
-                ->where(['order_import_from_c_id' => $param['id'], 'is_del' => 0])
-                ->update(['is_del' => 1]);
-
-            Db::name('order_import_from_c_extend')
-                ->insert([
-                    'order_import_from_c_id' => $param['id'],
-                    'addr_code' => $param['addr_code'],
-                    'activity_code' => $param['activity_code'],
-                    'addtime' => date('Y-m-d H:i:s'),
-                    'createrid' => isset($user["data"]['id']) ? $userinfo["data"]['id'] : 0,
-                    'creater' => isset($user["data"]['nickname']) ? $userinfo["data"]['nickname'] : '',
-                ]);
+            //组织从表数据
+            $extend_insert_data = [
+                'order_import_from_c_id' => $param['id'],
+                'platform_code' => $param['platform_code'],
+                'po_code' => $param['po_code'],
+                'platform_time' => $param['platform_time'],
+                'sale_source' => $param['sale_source'],
+                'price' => $param['price'],
+                'num' => $param['num'],
+                'before_discount_all_price' => $param['before_discount_all_price'],
+                'mode' => $param['mode'],
+                'order_remark' => $param['order_remark'],
+                'contactor' => $param['contactor'],
+                'mobile' => $param['mobile'],
+                'addr' => $param['addr'],
+                'discount_reason' => $param['discount_reason'],
+                'addr_code' => $param['addr_code'],
+                'activity_code' => $param['activity_code'],
+                'activity_name' => $param['activity_name'],
+                'addtime' => date('Y-m-d H:i:s'),
+                'createrid' => isset($user["data"]['id']) ? $userinfo["data"]['id'] : 0,
+                'creater' => isset($user["data"]['nickname']) ? $userinfo["data"]['nickname'] : '',
+                'type' => 2,//1系统解析,2用户确认
+            ];
+
+            $good_platform_info = Db::name('good_platform')
+                ->field('id,spuCode,platform_code,skuCode,plat_code')
+                ->where(['is_del' => 0])
+                ->where('plat_code', $param['plat_code'])
+                ->find();
+
+            //商品信息
+            if (!empty($good_platform_info)) {
+                $extend_insert_data['spuCode'] = $good_platform_info['spuCode'];
+                $extend_insert_data['platform_codes'] = $good_platform_info['platform_code'];
+                $extend_insert_data['plat_code'] = $good_platform_info['plat_code'];
+
+                $good_info = Db::name('good')
+                    ->field('good_name,companyNo,supplierNo')
+                    ->where(['is_del' => 0])
+                    ->where('spuCode', $extend_insert_data['spuCode'])
+                    ->find();
+                if (!empty($good_info)) {
+                    $extend_insert_data['companyNo'] = $good_info['companyNo'];
+                    $extend_insert_data['supplierNo'] = $good_info['supplierNo'];
+                    $extend_insert_data['good_name'] = $good_info['good_name'];
+                } else throw new Exception('该平台商品编号找不到对应商品数据');
+
+            } else  throw new Exception('该平台商品编号找不到对应平台数据');
+
+            //企业客户
+            $co_id = Db::name('good_platform')
+                ->alias('gp')
+                ->leftJoin('platform p', 'p.id=gp.platform_code AND p.is_del=0')
+                ->leftJoin('customer_org1 co', 'co.name=p.platform_name AND co.is_del=0')
+                ->where('gp.plat_code', $param['plat_code'])
+                ->value('co.id', 0);
+
+            if ($co_id) {
+                $customer_code = Db::name('customer_info')
+                    ->where(['itemid' => $co_id, 'companyName' => '客户', 'is_del' => 0])
+                    ->value('companyNo', '');
+
+                if ($customer_code) $extend_insert_data['customer_code'] = $customer_code;
+                else throw new Exception('对应客户不存在');
+
+            } else throw new Exception('对应企业客户不存在');
+
+            //从表数据
+            Db::name('order_import_from_c_extend')->insert($extend_insert_data);
 
             Db::commit();
 
@@ -282,7 +367,7 @@ class OrderImport extends Base
 
             Db::rollback();
 
-            return error_show(1004, $exception->getMessage() . '|' . $exception->getFile() . '|' . $exception->getLine());
+            return error_show(1004, $exception->getMessage());
         }
 
     }

+ 29 - 6
app/command/ImportOrderFromCAnalysisData.php

@@ -23,7 +23,6 @@ class ImportOrderFromCAnalysisData extends Command
             ->setDescription('批量解析C端导入的订单数据');
     }
 
-
     //【脚本1】解析用户导入的数据
     protected function execute(Input $input, Output $output)
     {
@@ -71,12 +70,29 @@ class ImportOrderFromCAnalysisData extends Command
                 'order_import_from_c_id' => $rs['id'],
                 'createrid' => 0,
                 'creater' => 'system',
-                'discount_reason' => $rs['activity_name']
+                'discount_reason' => $rs['activity_name'],
+                'platform_code' => $rs['platform_code'],
+                'po_code' => $rs['po_code'],
+                'platform_time' => $rs['platform_time'],
+                'price' => $rs['price'],
+                'num' => $rs['num'],
+                'before_discount_all_price' => $rs['before_discount_all_price'],
+                'order_remark' => $rs['order_remark'],
+                'contactor' => $rs['contactor'],
+                'mobile' => $rs['mobile'],
+                'addr' => $rs['addr'],
+                'type' => 1,//1系统解析,2用户确认
             ];
 
+
+            //销售渠道
+            $extend_insert_data['sale_source'] = Db::name('platform_source')
+                ->where(['source' => $rs['sale_source'], 'is_del' => 0])
+                ->value('source', '');
+
             //组织extend的数据
             $good_platform_info = Db::name('good_platform')
-                ->field('id,spuCode,platform_code,skuCode')
+                ->field('id,spuCode,platform_code,skuCode,plat_code')
                 ->where(['is_del' => 0])
                 ->where('plat_code', $rs['plat_code'])
                 ->find();
@@ -85,6 +101,7 @@ class ImportOrderFromCAnalysisData extends Command
             if (!empty($good_platform_info)) {
                 $extend_insert_data['spuCode'] = $good_platform_info['spuCode'];
                 $extend_insert_data['platform_codes'] = $good_platform_info['platform_code'];
+                $extend_insert_data['plat_code'] = $good_platform_info['plat_code'];
 
                 $good_info = Db::name('good')
                     ->field('good_name,companyNo,supplierNo')
@@ -106,9 +123,15 @@ class ImportOrderFromCAnalysisData extends Command
             }
 
             //活动信息
-            $extend_insert_data['activity_code'] = Db::name('good_activity')
-                ->where(['activity_name' => $rs['activity_name'], 'is_del' => 0])
-                ->value('activity_code', '');
+            if ($rs['activity_name']) {
+                $extend_insert_data['activity_code'] = Db::name('good_activity')
+                    ->where(['activity_name' => $rs['activity_name'], 'is_del' => 0])
+                    ->value('activity_code', '');
+                $extend_insert_data['activity_name'] = $extend_insert_data['activity_code'] ? $rs['activity_name'] : '';
+            }
+
+            //收费模式
+            $extend_insert_data['mode'] = in_array($rs['mode'], ['卡券支付', '现金支付', '混合支付']) ? $rs['mode'] : '';
 
             //企业客户
             $co_id = Db::name('good_platform')

+ 28 - 21
app/command/ImportOrderFromCHandleData.php

@@ -31,21 +31,28 @@ class ImportOrderFromCHandleData extends Command
     {
         $order_import_from_c_db = new OIFCModel();
 
-        $c_data = $order_import_from_c_db
+        $c_id = $order_import_from_c_db
             ->where(['is_del' => OIFCModel::$is_del_normal, 'status' => OIFCModel::$status_wait_relation])
             ->lock(true)
-            ->findOrEmpty()
-            ->toArray();
+            ->value('id', 0);
 
-        if (empty($c_data)) $output->writeln('没有符合条件的记录');
+        if (!$c_id) $output->writeln('没有符合条件的记录');
         else {
 
             Db::startTrans();
             try {
 
+                //先找用户确认信息
                 $extend_data = Db::name('order_import_from_c_extend')
-                    ->where(['order_import_from_c_id' => $c_data['id'], 'is_del' => 0])
+                    ->where(['order_import_from_c_id' => $c_id['id'], 'is_del' => 0, 'type' => 2])
                     ->find();
+                if (empty($extend_data)) {
+                    $extend_data = Db::name('order_import_from_c_extend')
+                        ->where(['order_import_from_c_id' => $c_id['id'], 'is_del' => 0, 'type' => 1])
+                        ->find();
+                }
+
+                if (empty($extend_data)) throw new Exception('没有对应的解析数据');
 
                 //复用sale::create()方法 -- start
 
@@ -70,9 +77,9 @@ class ImportOrderFromCHandleData extends Command
                 $platform_id = $extend_data['platform_codes'];
 
                 $platform_order = '';
-                $good_num = $c_data['num'];
-                $arrtime = $c_data['platform_time'];
-                $paytime = $c_data['addtime'];
+                $good_num = $extend_data['num'];
+                $arrtime = $extend_data['platform_time'];
+                $paytime = $extend_data['addtime'];
                 $workNo = '';//业管单号
                 $ct = Db::name('good_platform')
                     ->alias('a')
@@ -86,7 +93,7 @@ class ImportOrderFromCHandleData extends Command
                 $is_stock = $ct['is_stock'];
                 $spuCode = $ct['spuCode'];
                 $skuCode = $ct['skuCode'];
-                $is_activity = empty($c_data['activity_name']) ? 0 : 1;
+                $is_activity = empty($extend_data['activity_name']) ? 0 : 1;
 
                 if ($goodinfo['is_stock'] == 1) {
                     $stock = Db::name("good_stock")
@@ -106,7 +113,7 @@ class ImportOrderFromCHandleData extends Command
                 if ($origin == false) throw new Exception('未找到相关阶梯成本价格');
 
                 $origin_price = $origin['nake_total'];
-                $sale_price = $c_data['price'];
+                $sale_price = $extend_data['price'];
                 if ($goodtype == 1) {
                     $good = Db::name("good_ladder")
                         ->where(["skuCode" => $skuCode, "is_del" => 0, "status" => 1])
@@ -151,10 +158,10 @@ class ImportOrderFromCHandleData extends Command
                     'send_way' => 2
                 ];
 
-                $send_num = $c_data['num'];
-                $remark = $c_data['order_remark'];
-                $rm = $c_data['createrid'];
-                $ri = $c_data['creater'];
+                $send_num = $extend_data['num'];
+                $remark = $extend_data['order_remark'];
+                $rm = $extend_data['createrid'];
+                $ri = $extend_data['creater'];
                 $data = [
                     "orderCode" => $orderCode,
                     "good_code" => $spuCode,
@@ -213,7 +220,7 @@ class ImportOrderFromCHandleData extends Command
 
                     }
                     if ($is_stock == 0) {
-//                        halt($cgd, $rm, $ri);
+
                         $bol = $this->createCgd($cgd, $rm, $ri);
                         if ($bol == false) throw new Exception('订单创建失败');
 
@@ -242,12 +249,12 @@ class ImportOrderFromCHandleData extends Command
                     if ($sendtype == 1) {
                         $temp = [
                             'orderCode' => $orderCode,
-                            'contactor' => $c_data['contactor'],
-                            'mobile' => $c_data['mobile'],
-                            'addr' => $c_data['addr'],
+                            'contactor' => $extend_data['contactor'],
+                            'mobile' => $extend_data['mobile'],
+                            'addr' => $extend_data['addr'],
                             'addr_code' => $extend_data['addr_code'],
                             'customer_code' => $customer_code,
-                            'receipt_quantity' => $c_data['num'],//收货数量,
+                            'receipt_quantity' => $extend_data['num'],//收货数量,
                             'post_fee' => 0,
                             'is_del' => 0,
                             'addtime' => date("Y-m-d H:i:s"),
@@ -265,7 +272,7 @@ class ImportOrderFromCHandleData extends Command
                                 if ($order == false) throw new Exception('未找到可以发货得采购单数据');
 
 
-                                $num = $c_data['num'];
+                                $num = $extend_data['num'];
                                 $outCode = makeNo("DF");
                                 $order['wsend_num'] -= $num;
                                 $order['send_num'] += $num;
@@ -332,7 +339,7 @@ class ImportOrderFromCHandleData extends Command
 
                 //处理完成
                 $order_import_from_c_db
-                    ->where('id', $c_data['id'])
+                    ->where('id', $c_id)
                     ->save([
                         'status' => $order_import_from_c_db::$status_success,
                         'updatetime' => date('Y-m-d H:i:s'),