Sfoglia il codice sorgente

批量认领资金,跟订单相关

wufeng 2 anni fa
parent
commit
8c0f752193
2 ha cambiato i file con 152 aggiunte e 7 eliminazioni
  1. 151 7
      app/admin/controller/OrderPay.php
  2. 1 0
      app/admin/route/app.php

+ 151 - 7
app/admin/controller/OrderPay.php

@@ -4,7 +4,10 @@
 namespace app\admin\controller;
 use app\admin\BaseController;
 use app\admin\model\ReportCode;use think\App;
-use think\facade\Db;use think\queue\command\Retry;
+use think\Exception;
+use think\facade\Db;
+use think\facade\Validate;
+use think\queue\command\Retry;
 
 class OrderPay extends BaseController{
     public function __construct(App $app) {parent::__construct($app);}
@@ -273,7 +276,7 @@ class OrderPay extends BaseController{
          if($companyNo!==""){
             $condition[]=["companyNo","=",$companyNo];
         }
-          $relaComNo= isset($post['relaComNo'])&&$post['relaComNo']!="" ? trim($post['relaComNo']) :"";
+          $relaComNo= isset($this->post['relaComNo'])&&$this->post['relaComNo']!="" ? trim($this->post['relaComNo']) :"";
          if($relaComNo!=""){
             $condition[]=["companyNo","=",$relaComNo];
         }
@@ -331,9 +334,9 @@ class OrderPay extends BaseController{
          if($companyNo!==""){
             $condition[]=["a.companyNo","=",$companyNo];
         }
-          $relaComNo= isset($post['relaComNo'])&&$post['relaComNo']!="" ? trim($post['relaComNo']) :"";
+          $relaComNo= isset($this->post['relaComNo'])&&$this->post['relaComNo']!="" ? trim($this->post['relaComNo']) :"";
          if($relaComNo!=""){
-            $condition[]=["companyNo","=",$relaComNo];
+            $condition[]=["a.companyNo","=",$relaComNo];
         }
          if($tradNo!==""){
             $condition[]=["a.tradNo","like","%$tradNo%"];
@@ -352,10 +355,10 @@ class OrderPay extends BaseController{
             $condition[]=["b.trade_out","like","%$name%"];
         }
           if($start!=""){
-            $condition[]=["a.add_time",">=",date("Y-m-d 00:00:00",strtotime($start))];
+            $condition[]=["a.addtime",">=",date("Y-m-d 00:00:00",strtotime($start))];
         }
            if($end!=""){
-            $condition[]=["a.add_time","<=",date("Y-m-d 23:59:59",strtotime($start))];
+            $condition[]=["a.addtime","<=",date("Y-m-d 23:59:59",strtotime($start))];
         }
         if($status!==""){
             $condition[]=["a.status","=",$status];
@@ -522,7 +525,7 @@ class OrderPay extends BaseController{
          if($companyNo!==""){
             $condition[]=["a.companyNo","=",$companyNo];
         }
-          $relaComNo= isset($post['relaComNo'])&&$post['relaComNo']!="" ? trim($post['relaComNo']) :"";
+          $relaComNo= isset($this->post['relaComNo'])&&$this->post['relaComNo']!="" ? trim($this->post['relaComNo']) :"";
          if($relaComNo!=""){
             $condition[]=["a.companyNo","=",$relaComNo];
         }
@@ -933,4 +936,145 @@ class OrderPay extends BaseController{
             return app_show(1004, $e->getMessage());
         }
     }
+
+    //批量认领资金,跟订单相关
+    public function importTradeByBatchOrderCode()
+    {
+
+        $list = $this->request->post('list', [], 'trim');
+
+        $val = Validate::rule(['list|导入数据' => 'require|array|max:100']);
+
+        if (!$val->check(['list' => $list])) return error_show(1004, $val->getError());
+
+        $company = $tradNos = $orderCodes = $assoc_insert_data = $OrderCodeToAssocNo = $OrderCodeToLogNo = [];
+
+        $val_item = Validate::rule([
+            'companyNo|卖出方公司编号' => 'require|max:255',
+            'tradNo|资金编号' => 'require|max:255',
+            'orderCode|订单编号' => 'require|max:255',
+            'trad_fee|认领资金' => 'require|float|gt:0|max:999999999.99',
+        ]);
+        foreach ($list as $key => $value) {
+            if (!$val_item->check($value)) return error_show(1004, $val_item->getError());
+
+            if (!isset($company[$value['companyNo']])) $company[$value['companyNo']] = $value['companyNo'];
+
+            if (isset($tradNos[$value['tradNo']])) $tradNos[$value['tradNo']] = bcadd($tradNos[$value['tradNo']], $value['trad_fee'], 2);
+            else $tradNos[$value['tradNo']] = $value['trad_fee'];
+
+            if (isset($orderCodes[$value['orderCode']])) $orderCodes[$value['orderCode']] = bcadd($orderCodes[$value['orderCode']], $value['trad_fee'], 2);
+            else $orderCodes[$value['orderCode']] = $value['trad_fee'];
+        }
+
+        //判断绑定公司
+        $companyNo = Db::name('user_role')
+            ->where(['is_del' => 0, 'status' => 1, 'uid' => $this->uid])
+            ->whereIn('companyNo', $company)
+            ->column('companyNo');
+
+        $tmp = array_diff($company, $companyNo);//二者取差集
+        if(!empty($tmp)) return error_show(1004,'不能操作以下公司数据:'.implode(',',$tmp));
+
+        Db::startTrans();
+
+        try {
+
+            $date = date('Y-m-d H:i:s');
+            $all_trade = Db::name('trade')
+                ->where('is_del', 0)
+                ->whereIn('status', [1, 2])
+                ->whereIn('tradNo', array_keys($tradNos))
+                ->column('id,balance,used_fee,companyNo,trade_time', 'tradNo');
+
+            foreach ($tradNos as $tradNo => $fee) {
+                if (!isset($all_trade[$tradNo])) throw new Exception($tradNo . '未找到资金信息');
+                if ($all_trade[$tradNo]['balance'] < $fee) throw new Exception($tradNo . '资金余额不足核销');
+                $balance = bcsub($all_trade[$tradNo]['balance'], $fee, 2);
+                Db::name('trade')
+                    ->where('id', $all_trade[$tradNo]['id'])
+                    ->update([
+                        'balance' => $balance,
+                        'used_fee' => bcadd($all_trade[$tradNo]['used_fee'], $fee, 2),
+                        'status' => $balance == 0 ? 3 : 2,
+                        'updatetime' => $date,
+                    ]);
+
+            }
+
+            Db::name('trade_pool')
+                ->where(['is_del' => 0, 'status' => 1])
+                ->whereIn('tradNo', array_keys($tradNos))
+                ->update([
+                    'status' => 2,
+                    'updatetime' => $date
+                ]);
+
+            $all_qrd_info = Db::name('qrd_info')
+                ->where('is_del', 0)
+                ->whereIn('sequenceNo', array_keys($orderCodes))
+                ->column('id,customerNo,status,pay_fee,wpay_fee,pay_status,totalPrice', 'sequenceNo');
+            foreach ($orderCodes as $orderCode => $fee) {
+                if (!isset($all_qrd_info[$orderCode])) throw new Exception($orderCode . '销售单信息未找到');
+                if ($all_qrd_info[$orderCode]['wpay_fee'] < $fee) throw new Exception($orderCode . '销售单未付款金额不足核销金额');
+                Db::name('qrd_info')
+                    ->where('id', $all_qrd_info[$orderCode]['id'])
+                    ->update([
+                        'pay_fee' => bcadd($all_qrd_info[$orderCode]['pay_fee'], $fee, 2),
+                        'wpay_fee' => bcsub($all_qrd_info[$orderCode]['wpay_fee'], $fee, 2),
+                        'pay_status' => 2,
+                        'status' => 1,
+                        'updatetime' => $date
+                    ]);
+
+                $OrderCodeToAssocNo[$orderCode] = makeNo('AS');
+                $OrderCodeToLogNo[$orderCode] = makeNo('TRC');
+
+                $assoc_insert_data[] = [
+                    'assocNo' => $OrderCodeToAssocNo[$orderCode],
+                    'apply_id' => $this->uid,
+                    'apply_name' => $this->uname,
+                    'type' => 2,
+                    'orderCode' => $orderCode,
+                    'customerNo' => $all_qrd_info[$orderCode]['customerNo'],
+                    'viceCode' => $OrderCodeToLogNo[$orderCode],
+                    'order_total' => $all_qrd_info[$orderCode]['totalPrice'],
+                    'vice_total' => $fee,//这个地方存疑,貌似下方cancel_fee字段以订单为维度,但是该字段以tradeNo为维度,此处订单与tradeNo无关联
+                    'cancel_fee' => $fee,
+                    'status' => 1,
+                    'addtime' => $date,
+                    'updatetime' => $date,
+                ];
+            }
+
+
+            foreach ($list as $item) {
+                $trade_pool_insert_data[] = [
+                    'logNo' => $OrderCodeToLogNo[$item['orderCode']],
+                    'tradNo' => $item['tradNo'],
+                    'companyNo' => $item['companyNo'],
+                    'customerNo' => $all_qrd_info[$item['orderCode']]['customerNo'],
+                    'apply_id' => $this->uid,
+                    'apply_name' => $this->uname,
+                    'trade_time' => $all_trade[$item['tradNo']]['trade_time'],
+                    'total_fee' => $item['trad_fee'],
+                    'status' => 2,//2审核通过
+                    'addtime' => $date,
+                    'updatetime' => $date,
+                ];
+            }
+
+            if ($assoc_insert_data) Db::name('assoc')->insertAll($assoc_insert_data);
+            if ($trade_pool_insert_data) Db::name('trade_pool')->insertAll($trade_pool_insert_data);
+
+            Db::commit();
+            return app_show(0, '批量认领资金成功');
+        } catch (Exception $exception) {
+            Db::rollback();
+            return error_show(1004, '批量认领资金失败,' . $exception->getMessage());
+        }
+
+
+    }
+
 }

+ 1 - 0
app/admin/route/app.php

@@ -119,6 +119,7 @@ Route::rule("orderpayreturn","admin/OrderPay/ReturnPay");
 Route::rule("orderreturnlist","admin/OrderPay/returnList");
 Route::rule("orderreturnstatus","admin/OrderPay/returnStatus");
 Route::rule("importTrade","admin/OrderPay/importTradeByArr");
+Route::rule('importTradeByBatchOrderCode','admin/OrderPay/importTradeByBatchOrderCode');
 
 Route::rule("index","admin/index/index");
 Route::rule("report","admin/Report/index");