wugg 1 год назад
Родитель
Сommit
b1e696ed6b
2 измененных файлов с 73 добавлено и 3 удалено
  1. 67 2
      app/admin/controller/Sale.php
  2. 6 1
      app/command/SplitSale.php

+ 67 - 2
app/admin/controller/Sale.php

@@ -5193,7 +5193,7 @@ class Sale extends Base
 
         $list = Db::name('sale')
             ->alias('a')
-            ->field('a.id sale_id,a.good_code,a.platform_order,a.good_name,a.wsend_num,a.total_price,a.order_type,a.status sale_status,a.orderCode,a.cat_id,a.good_createrid,c.id cgd_id,c.status cgd_status,c.cgdNo,c.cgder_id')
+            ->field('a.id sale_id,a.good_code,a.platform_order,a.good_name,a.wsend_num,a.total_price,a.order_type,a.status sale_status,a.orderCode,a.cat_id,a.good_createrid,c.id cgd_id,c.status cgd_status,c.cgdNo,c.cgder_id,a.addtime')
             ->leftJoin('order_num b', 'b.orderCode=a.orderCode')
             ->leftJoin('purchease_order c', 'c.cgdNo=b.cgdNo')
             ->where(['a.is_del' => 0, 'a.orderCode' => $orderCode])
@@ -5216,6 +5216,71 @@ class Sale extends Base
                     ->inc("usable_stock",$sale['wsend_num'])
                     ->update();
                     if ($stock == false) throw new Exception('商品库存更新失败');
+                    if(strtotime($sale['addtime'])< strtotime('2023-04-17 00:00:00')){
+						$saleinfo = Db::name('sale_info')
+                        ->where([['orderCode', '=',$sale['orderCode']], ['num', '>', 0]])
+                        ->select()
+                        ->toArray();
+                    if (empty($saleinfo)) {
+                        $ordernum = Db::name('order_num')->where(['orderCode' =>$sale['orderCode']])->findOrEmpty();
+                        if (empty($ordernum)) throw new Exception('未找到关联采购单');
+
+                        $cgd = Db::name('purchease_order')->where(['cgdNo' => $ordernum['cgdNo'], 'is_del' => 0])->findOrEmpty();
+                        if (empty($cgd)) throw new Exception('未找到采购单数据');
+
+                        $bn = makeNo('BN');
+                        $stock = Db::name('good_stock')
+                            ->where(['spuCode' => $sale['good_code'], 'wsm_code' => $cgd['wsm_code'], 'is_del' => 0, 'status' => 1])
+                            ->findOrEmpty();
+                        if ($stock == false) throw new Exception('商品库存数据未找到');
+
+                        $stock['usable_stock'] += $sale['wsend_num'];
+                        $stock['wait_out_stock'] -= $sale['wsend_num'];
+                        $stock['updatetime'] = $date;
+                        $st_up = Db::name('good_stock')->save($stock);
+                        if ($st_up == false) throw new Exception('可售商品入库失败');
+
+                        $yp = GoodStockInfo::AddBn($stock['id'], $bn, $sale['wsend_num'], $cgd['good_price']);
+                        if ($yp == false) throw new Exception('商品批次退货入库失败');
+
+                    } else {
+                        $tempnum = $sale['wsend_num'];
+                        foreach ($saleinfo as $va) {
+                            if ($tempnum == 0) break;
+                            $stock = Db::name('good_stock')->where(['spuCode' => $sale['good_code'], 'id' => $va['stockid']])
+                                ->findOrEmpty();
+                            if ($stock == false) throw new Exception('商品库存数据未找到');
+
+                            if ($va['num'] >= $tempnum) {
+                                $tnm = $tempnum;
+                                $va['num'] -= $tempnum;
+                                $va['th_num'] += $tempnum;
+                                $tempnum = 0;
+                            } else {
+                                $tnm = $va['num'];
+                                $tempnum -= $va['num'];
+                                $va['th_num'] += $va['num'];
+                                $va['num'] = 0;
+                            }
+                            $stock['usable_stock'] += $tnm;
+                            $stock['wait_out_stock'] -= $tnm;
+                            $stock['updatetime'] = $date;
+                            $st_up = Db::name('good_stock')->save($stock);
+                            if ($st_up == false) throw new Exception('可售商品入库失败');
+
+                            $ps = GoodStockInfo::AddBn($va['stockid'], $va['bnCode'], $tnm);
+                            if ($ps == false) throw new Exception('商品批次退货入库失败');
+
+                            $ret = GoodStockInfo::ReturnBn($sale['orderCode'], $va['id'], $tnm);
+                            if ($ret == false) throw new Exception('商品批次退货入库失败');
+
+                            $va['updatetime'] = $date;
+                            $sal = Db::name('sale_info')->save($va);
+                            if ($sal == false) throw new Exception('商品批次退货入库失败');
+                        }
+                    }
+
+					}
                 }
                 if($sale['order_type'] == 4){
                     $fill =Db::name("filing")->where(["filingCode"=>$sale["platform_order"]])->findOrEmpty();
@@ -5395,7 +5460,7 @@ class Sale extends Base
                     ]);
                 }
             }
-
+            
 
             Db::commit();
             return json_show(0, '操作成功');

+ 6 - 1
app/command/SplitSale.php

@@ -118,9 +118,9 @@ class SplitSale extends Command
                         $cgd_total = bcsub($cgd_total, bcmul($sale['total_price'] ?? 0, round($pay_rate['rate'] / 100, 4), 5), 5);
                         //此次销售单业务公司信息
 						$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);
-						$sale['origin_price'] = $sale['good_num'] > 0 ? bcdiv($cgd_total, $sale['good_num'], 5) : 0;
 						//下一个渠道公司/原业务公司的 客户信息
 						$customer= ['No' => $pay_rate['companyNo'], 'name' => $pay_rate['companyName']];
 	                    $sale_total =$cgd_total; //下一个渠道公司/原业务公司的 销售价未此次的采购单价
@@ -129,6 +129,11 @@ class SplitSale extends Command
 							$orderCode = makeNo($this->Tcode.'QR');
 							$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 ){
+								$sale['origin_price'] = Db::name("purchease_order")->where(["spuCode"=>$sale['good_code'],"is_del"=>0,"status"=>[2,3]])->value("good_price",0);
+							}else{
+								$sale['origin_price'] = $cgd['good_price'];
+							}
 							$this->_handle_sale_caixiao($sale, $orderCode, $cgd['cgdNo'] ?? '', $sale_total, $customer, $supplier);
 						}
                         //把自己覆盖到上一个记录的供应商记录中