|
@@ -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++;
|
|
|
}
|
|
|
|
|
|
}
|