|
@@ -3,7 +3,7 @@
|
|
|
namespace app\command;
|
|
|
|
|
|
use app\admin\common\User;
|
|
|
-use think\console\Command;
|
|
|
+use app\admin\model\Platform;use app\model\ComonOrder;use think\console\Command;
|
|
|
use think\console\Input;
|
|
|
use think\console\Output;
|
|
|
use think\Exception;
|
|
@@ -19,6 +19,7 @@ class SplitSale extends Command
|
|
|
private $cgd_key = 0;//新增到wsm_cgd_caixiao的数组下标,从0开始
|
|
|
private $order_source = 8;//支付渠道
|
|
|
private $Tcode = '';
|
|
|
+ private $comOrder;
|
|
|
protected function configure()
|
|
|
{
|
|
|
$this->setName('split_sale')->setDescription('销售订单拆分');
|
|
@@ -37,9 +38,9 @@ class SplitSale extends Command
|
|
|
Cache::store('redis')->dec($key);
|
|
|
return true;
|
|
|
}
|
|
|
-
|
|
|
+ $this->comOrder=new ComonOrder();
|
|
|
Db::startTrans();
|
|
|
-
|
|
|
+
|
|
|
try {
|
|
|
|
|
|
$data = Db::name('sale')
|
|
@@ -53,8 +54,28 @@ class SplitSale extends Command
|
|
|
['a.pay_id', '<>', 0]
|
|
|
])->cursor();
|
|
|
$userCommon = User::getIns();
|
|
|
-
|
|
|
+ $commonOrder=[];//处理采购销售同一数据
|
|
|
foreach ($data as $sale) {
|
|
|
+ //处理采购销售同一数据
|
|
|
+ $tempOrder=[
|
|
|
+ "cxCode"=>$sale["orderCode"],
|
|
|
+ "orderCode"=>"",
|
|
|
+ "cgdNo"=>"",
|
|
|
+ "order_type"=>$sale['order_type'],
|
|
|
+ "order_source"=>$sale['order_source'],
|
|
|
+ "platform_type"=>Platform::where("id",$sale['platform_id'])->value("use_type",0),
|
|
|
+ "goodNo"=>$sale['good_code'],
|
|
|
+ "goodName"=>$sale['good_name'],
|
|
|
+ "apply_id"=>$sale['apply_id'],
|
|
|
+ "apply_name"=>$sale['apply_name'],
|
|
|
+ "customerName"=>"",
|
|
|
+ "customerNo"=>"",
|
|
|
+ "supplierNo"=>'',
|
|
|
+ "supplierName"=>'',
|
|
|
+ "companyName"=>$sale['supplierName'],
|
|
|
+ "companyNo"=>$sale['supplierNo'],
|
|
|
+ "addtime"=>$sale['addtime'],
|
|
|
+ ];
|
|
|
if( strtotime($sale['addtime']) >= strtotime('2023-07-01 00:00:00'))$this->Tcode ='F';
|
|
|
else $this->Tcode ='';
|
|
|
//补充商品信息
|
|
@@ -101,15 +122,17 @@ class SplitSale extends Command
|
|
|
->leftJoin('purchease c', 'c.bk_code=b.bkcode')
|
|
|
->where('a.orderCode', $sale['orderCode'])
|
|
|
->findOrEmpty();
|
|
|
-
|
|
|
+
|
|
|
//采购总金额和销售总金额
|
|
|
$cgd_total = $sale_total = $sale['total_price'];
|
|
|
//客户
|
|
|
$customer = ['No' => $sale['customer_code'], 'name' => $sale['customerName']];
|
|
|
+
|
|
|
foreach ($pay_rates as $keys=>$pay_rate) {
|
|
|
//生成新的采购单号和销售单号
|
|
|
- $cgdNo = makeNo($this->Tcode.'CG');
|
|
|
|
|
|
+ $cgdNo = makeNo($this->Tcode.'CG');
|
|
|
+ $tempOrder['cgdNo'] = $cgdNo ;
|
|
|
$cgdNo = substr($cgdNo, 0, -2) . str_pad($this->i, 2, '0', STR_PAD_LEFT);
|
|
|
$orderCode = makeNo($this->Tcode.'QR');
|
|
|
$orderCode = substr($orderCode, 0, -2) . str_pad($this->i, 2, '0', STR_PAD_LEFT);
|
|
@@ -120,13 +143,16 @@ class SplitSale extends Command
|
|
|
$supplier = ['No' => $pay_rate['companyNo'], 'name' => $pay_rate['companyName'],"pay_name"=>$pay_rate['pay_name']];
|
|
|
$sale['origin_price'] = $sale['good_num'] > 0 ? bcdiv($cgd_total, $sale['good_num'], 5) : 0;
|
|
|
$this->_handle_sale_caixiao($sale, $orderCode, $cgdNo, $sale_total, $customer, $supplier);
|
|
|
- $this->_handle_cgd_caixiao($cgd, $sale, $pay_rate, $cgdNo, $orderCode, $cgd_total);
|
|
|
+ $tempOrder['customerName'] = $pay_rate['companyName'];
|
|
|
+ $tempOrder['customerNo'] = $pay_rate['companyNo'];
|
|
|
+ $this->_handle_cgd_caixiao($cgd, $sale, $pay_rate, $cgdNo, $orderCode, $cgd_total,$tempOrder);
|
|
|
//下一个渠道公司/原业务公司的 客户信息
|
|
|
$customer= ['No' => $pay_rate['companyNo'], 'name' => $pay_rate['companyName']];
|
|
|
$sale_total =$cgd_total; //下一个渠道公司/原业务公司的 销售价未此次的采购单价
|
|
|
//判断是否是最后一个渠道遍历。最后一次需要额外生成一个销售单给原业务公司;
|
|
|
if($keys == count($pay_rates)-1){
|
|
|
$orderCode = makeNo($this->Tcode.'QR');
|
|
|
+ $tempOrder['orderCode'] = $orderCode ;
|
|
|
$orderCode = substr($orderCode, 0, -2) . str_pad($this->i, 2, '0', STR_PAD_LEFT);
|
|
|
$supplier = ['No' => $sale['supplierNo'], 'name' => $sale['supplierName'],"pay_name"=>$pay_rate['pay_name']];
|
|
|
if(!isset($cgd['cgdNo']) && $sale['is_stock']==1 ){
|
|
@@ -134,14 +160,18 @@ class SplitSale extends Command
|
|
|
}else{
|
|
|
$sale['origin_price'] = $cgd['good_price'];
|
|
|
}
|
|
|
- $this->_handle_sale_caixiao($sale, $orderCode, $cgd['cgdNo'] ?? '', $sale_total, $customer, $supplier);
|
|
|
+ $this->_handle_sale_caixiao($sale, $orderCode, $cgd['cgdNo'] ?? '', $sale_total,$customer, $supplier,$tempOrder);
|
|
|
}
|
|
|
//把自己覆盖到上一个记录的供应商记录中
|
|
|
+
|
|
|
if (isset($this->cgd_insert[$this->cgd_key - 1])) {
|
|
|
$temp = $userCommon->handle('hqInfo', ['code' =>$supplier['No']]);
|
|
|
$supplier = $temp['data'] ?? [];
|
|
|
$this->cgd_insert[$this->cgd_key - 1]['supplierNo'] =$supplier['relation_code'];
|
|
|
$this->cgd_insert[$this->cgd_key - 1]['supplier_name'] = $supplier['relation_name'];
|
|
|
+ //处理采购销售同一数据 业务公司的供应商编号数据
|
|
|
+ $tempOrder['supplierName'] =$supplier['relation_name'];
|
|
|
+ $tempOrder['supplierNo'] = $supplier['relation_code'];
|
|
|
$temps = $userCommon->handle('sInfo', ['code' =>$supplier['relation_code']]);
|
|
|
$suppliers = $temps['data'] ?? [];
|
|
|
$this->cgd_insert[$this->cgd_key - 1]['supplier_persion'] = $suppliers['person'] ?? '';
|
|
@@ -157,13 +187,14 @@ class SplitSale extends Command
|
|
|
if($this->cgd_insert) Db::name('cgd_caixiao')->insertAll($this->cgd_insert);
|
|
|
$this->cgd_insert = [];
|
|
|
$this->cgd_key = 0;
|
|
|
+ $commonOrder[]= $tempOrder;
|
|
|
}
|
|
|
|
|
|
// if ($cgd_insert_tmp_data) Db::name('cgd_caixiao')->insertAll($cgd_insert_tmp_data);
|
|
|
if ($this->sale_insert) Db::name('sale_caixiao')->insertAll($this->sale_insert);
|
|
|
|
|
|
Db::commit();
|
|
|
-
|
|
|
+ $this->OrderSave($commonOrder);
|
|
|
// $output->writeln('处理完成');
|
|
|
|
|
|
} catch (\Exception $e) {
|
|
@@ -180,7 +211,8 @@ class SplitSale extends Command
|
|
|
}
|
|
|
|
|
|
//构建销售单
|
|
|
- private function _handle_sale_caixiao(array $sale = [], string $orderCode = '', string $cgdNo = '', float $sale_total = 0.00, array $customer = [], array $supplier = [])
|
|
|
+ private function _handle_sale_caixiao(array $sale = [], string $orderCode = '', string $cgdNo = '', float
|
|
|
+ $sale_total = 0.00, array $customer = [], array $supplier = [],array &$tempOrder=[])
|
|
|
{
|
|
|
$sale_price = $sale['good_num'] > 0 ? bcdiv($sale_total, $sale['good_num'], 5) : 0;
|
|
|
$tmp_sale = [
|
|
@@ -212,15 +244,17 @@ class SplitSale extends Command
|
|
|
];
|
|
|
|
|
|
$tmp = Db::name('sale_caixiao')
|
|
|
- ->field('id')
|
|
|
- ->where(['oldCode' => $sale['orderCode'], 'supplierNo' =>$supplier['No'] ?? ''])
|
|
|
+ ->field('id,orderCode')
|
|
|
+ ->where(['oldCode' => $sale['orderCode'], 'supplierNo' =>$supplier['No'] ?? '', 'customer_code' =>$customer['No'] ?? ''])
|
|
|
->findOrEmpty();
|
|
|
|
|
|
if (!empty($tmp)) {
|
|
|
Db::name('sale_caixiao')
|
|
|
->where('id', $tmp['id'])
|
|
|
->update($tmp_sale);
|
|
|
+ if(isset($tempOrder['orderCode']))$tempOrder['orderCode']= $tmp['orderCode'];
|
|
|
} else {
|
|
|
+ if(isset($tempOrder['orderCode']))$tempOrder['orderCode']= $orderCode;
|
|
|
$this->sale_insert[] = array_merge($tmp_sale, [
|
|
|
'orderCode' => $orderCode,
|
|
|
'apply_id' => $sale['apply_id'] ?? 0,
|
|
@@ -271,7 +305,8 @@ class SplitSale extends Command
|
|
|
}
|
|
|
|
|
|
//构建采购单
|
|
|
- private function _handle_cgd_caixiao(array $cgd = [], array $sale = [], array $pay_rate = [], string $cgdNo = '', string $orderCode = '', float $cgd_total = 0.00)
|
|
|
+ private function _handle_cgd_caixiao(array $cgd = [], array $sale = [], array $pay_rate = [], string $cgdNo = '',
|
|
|
+ string $orderCode = '', float $cgd_total = 0.00,array &$tempOrder=[])
|
|
|
{
|
|
|
|
|
|
$good_price = $sale['good_num'] > 0 ? bcdiv($cgd_total, $sale['good_num'], 5) : 0;
|
|
@@ -306,7 +341,7 @@ class SplitSale extends Command
|
|
|
];
|
|
|
|
|
|
$tmp = Db::name('cgd_caixiao')
|
|
|
- ->field('id')
|
|
|
+ ->field('id,cgdNo')
|
|
|
->where(['oldCode' => $sale['orderCode'], 'companyNo' => $pay_rate['companyNo']])
|
|
|
->findOrEmpty();
|
|
|
|
|
@@ -314,7 +349,9 @@ class SplitSale extends Command
|
|
|
Db::name('cgd_caixiao')
|
|
|
->where('id', $tmp['id'])
|
|
|
->update($tmp_cgd);
|
|
|
+ if(isset($tempOrder['cgdNo']))$tempOrder['cgdNo']= $tmp['cgdNo'];
|
|
|
} else {
|
|
|
+ if(isset($tempOrder['cgdNo']))$tempOrder['cgdNo']=$cgdNo;
|
|
|
$this->cgd_insert[$this->cgd_key] = array_merge($tmp_cgd, [
|
|
|
'cgdNo' => $cgdNo,
|
|
|
'bkcode' => $cgd['bkcode'] ?? '',
|
|
@@ -375,5 +412,13 @@ class SplitSale extends Command
|
|
|
else return $this->_get_cat_list($str['pid'], $data);
|
|
|
|
|
|
}
|
|
|
+ //处理采购销售同一数据 录入结算 统一数据表中
|
|
|
+ protected function OrderSave($order){
|
|
|
+ if(empty($order)) return ;
|
|
|
+ foreach ($order as &$item){
|
|
|
+ $item['id'] = $this->comOrder->where("cxCode",$item['cxCode'])->value("id",null);
|
|
|
+ }
|
|
|
+ $this->comOrder->saveAll($order);
|
|
|
+ }
|
|
|
|
|
|
}
|