Browse Source

拆分订单脚本优化

wufeng 2 years ago
parent
commit
01065d6d2d
1 changed files with 39 additions and 23 deletions
  1. 39 23
      app/command/SplitSale.php

+ 39 - 23
app/command/SplitSale.php

@@ -15,6 +15,7 @@ class SplitSale extends Command
     private $sale_insert = [];//wsm_sale_caixiao的新增数据
     private $cgd_insert = [];//wsm_cgd_caixiao的新增数据
     private $noble_metal = [1 => '18K', 2 => '24K', 3 => '白银'];//贵金属种类对应文本
+    private $cgd_key = 0;//新增到wsm_cgd_caixiao的数组下标,从0开始
 
     public function __construct()
     {
@@ -44,7 +45,6 @@ class SplitSale extends Command
                         ['updatetime', '>=', date('Y-m-d H:i:s', time() - 5 * 60)],
                         ['pay_id', '<>', 0]
                     ])
-                    ->lock(true)
                     ->select()
                     ->toArray();
 
@@ -109,10 +109,15 @@ class SplitSale extends Command
                         ->where('a.orderCode', $sale['orderCode'])
                         ->findOrEmpty();
 
-                    foreach ($pay_rates as $pay_rate) {
+                    //采购总金额和销售总金额
+                    $cgd_total = $sale_total = $sale['total_price'];
+
+                    //客户
+                    $customer = ['No' => $sale['customer_code'], 'name' => Db::name('customer_info')->where('companyNo', $sale['customer_code'])->value('companyName', '')];
+                    //供应商
+                    $supplier = ['No' => $sale['supplierNo'], 'name' => Db::name('business')->where('companyNo', $sale['supplierNo'])->value('company', '')];
 
-                        //采购总金额和销售总金额
-                        $cgd_total = $sale_total = $cgd['total_fee'] ?? $sale['total_price'];
+                    foreach ($pay_rates as $pay_rate) {
 
                         //生成新的采购单号和销售单号
                         $cgdNo = makeNo('CG');
@@ -124,32 +129,41 @@ class SplitSale extends Command
 
                         //只处理采购单
                         if (strtoupper($pay_rate['companyNo']) == 'KH') {
-                            $pay_rate['companyNo'] = $sale['customer_code'];
-                            $pay_rate['companyName'] = Db::name('customer_info')
-                                ->where('companyNo', $sale['customer_code'])
-                                ->value('companyName', '');
 
                             if ($pay_rate['is_cgd'] == 1) $this->_handle_cgd_caixiao($cgd, $sale, $pay_rate, $cgdNo, $orderCode, $cgd_total);
 
                         } elseif (strtoupper($pay_rate['companyNo']) == 'GYS') {
                             //只处理销售单
-                            $pay_rate['companyNo'] = $sale['supplierNo'];
-                            $pay_rate['companyName'] = Db::name('business')
-                                ->where('companyNo', $sale['supplierNo'])
-                                ->value('company', '');
-                            if ($pay_rate['is_qrd'] == 1) $this->_handle_sale_caixiao($exist_sale_code, $sale, $orderCode, $cgdNo, $pay_rate, $sale_total);
+
+                            //供应商事先覆盖
+                            $supplier = ['No' => $pay_rate['companyNo'], 'name' => $pay_rate['companyName']];
+                            if ($pay_rate['is_qrd'] == 1) $this->_handle_sale_caixiao($exist_sale_code, $sale, $orderCode, $cgdNo, $pay_rate, $sale_total, $customer, $supplier);
 
                         } else {
+
+                            //供应商事先覆盖
+                            $supplier = ['No' => $pay_rate['companyNo'], 'name' => $pay_rate['companyName']];
+
                             //需要生成销售单
-                            if ($pay_rate['is_qrd'] == 1) $this->_handle_sale_caixiao($exist_sale_code, $sale, $orderCode, $cgdNo, $pay_rate, $sale_total);
+                            if ($pay_rate['is_qrd'] == 1) $this->_handle_sale_caixiao($exist_sale_code, $sale, $orderCode, $cgdNo, $pay_rate, $sale_total, $customer, $supplier);
 
                             //需要生成采购单
                             if ($pay_rate['is_cgd'] == 1) $this->_handle_cgd_caixiao($cgd, $sale, $pay_rate, $cgdNo, $orderCode, $cgd_total);
+
+                            //客户事后覆盖
+                            $customer = ['No' => $pay_rate['companyNo'], 'name' => $pay_rate['companyName']];
+
                         }
 
                         $sale_total = $cgd_total;
                         $cgd_total = round(bcsub($cgd_total, bcmul($cgd['total_fee'], $pay_rate['rate'], 3), 3), 2);
 
+                        //把自己覆盖到上一个记录的供应商记录中
+                        if (isset($this->cgd_insert[$this->cgd_key - 1])) {
+                            $this->cgd_insert[$this->cgd_key - 1]['supplierNo'] = $pay_rate['companyNo'];
+                            $this->cgd_insert[$this->cgd_key - 1]['supplier_name'] = $pay_rate['companyName'];
+                        }
+
                     }
                 }
 
@@ -173,12 +187,12 @@ class SplitSale extends Command
     }
 
     //构建销售单
-    private function _handle_sale_caixiao(array $exist_sale_code = [], array $sale = [], string $orderCode = '', string $cgdNo = '', array $pay_rate = [], float $sale_total = 0.00)
+    private function _handle_sale_caixiao(array $exist_sale_code = [], array $sale = [], string $orderCode = '', string $cgdNo = '', array $pay_rate = [], float $sale_total = 0.00, array $customer = [], array $supplier = [])
     {
 
         $tmp_sale = [
             'origin_price' => $sale['origin_price'] ?? 0,
-            'sale_price' => $sale['good_num'] > 0 ? round(bcdiv($sale_total, $sale['good_num'], 1), 0) : 0,
+            'sale_price' => $sale['good_num'] > 0 ? round(bcdiv($sale_total, $sale['good_num'], 3), 2) : 0,
             'total_price' => $sale_total,
             'post_fee' => $sale['post_fee'] ?? 0,
             'is_diff' => $sale['is_diff'] ?? 0,
@@ -222,10 +236,10 @@ class SplitSale extends Command
                 'is_activity' => $sale['is_activity'] ?? 0,
                 'is_stock' => $sale['is_stock'] ?? 0,
                 'arrive_time' => $sale['arrive_timefvc'] ?? '',
-                'customer_code' => $pay_rate['companyNo'],
-                'customer_name' => $pay_rate['companyName'],
-                'supplierNo' => $sale['supplierNo'] ?? '',
-                'supplier_name' => $supplier_name,
+                'customer_code' => $customer['No'] ?? '',
+                'customer_name' => $customer['name'] ?? '',
+                'supplierNo' => $supplier['No'] ?? '',
+                'supplier_name' => $supplier['name'] ?? '',
                 'zxNo' => $sale['zxNo'] ?? '',
                 'proof_id' => $sale['proof_id'] ?? 0,
                 'proof_url' => Db::name('good_proof')->where('id', $sale['proof_id'] ?? 0)->value('proof_url', ''),
@@ -298,7 +312,7 @@ class SplitSale extends Command
                 ->where('code', $cgd['supplierNo'] ?? '')
                 ->findOrEmpty();
 
-            $this->cgd_insert[] = array_merge($tmp_cgd, [
+            $this->cgd_insert[$this->cgd_key] = array_merge($tmp_cgd, [
                 'cgdNo' => $cgdNo,
                 'bkcode' => $cgd['bkcode'] ?? '',
                 'wsm_code' => $cgd['wsm_code'] ?? '',
@@ -313,8 +327,8 @@ class SplitSale extends Command
                 'cat_name' => json_encode($this->_get_cat_list($sale['cat_id']), JSON_UNESCAPED_UNICODE),
                 'companyNo' => $pay_rate['companyNo'],
                 'companyName' => $pay_rate['companyName'],
-                'supplierNo' => $cgd['supplierNo'] ?? '',
-                'supplier_name' => $cgd['supplier_name'] ?? '',
+                'supplierNo' => '',
+                'supplier_name' => '',
                 'bktime' => $cgd['bktime'] ?? '',
                 'bkcreater' => $cgd['bkcreater'] ?? '',
                 'noble_metal' => $sale['noble_metal'] ?? '',
@@ -333,6 +347,8 @@ class SplitSale extends Command
                 'pay_id' => $sale['pay_id'],
                 'oldCode' => $sale['orderCode']
             ]);
+
+            $this->cgd_key++;
         }
 
     }