kevin_zhangl пре 3 година
родитељ
комит
9f6452c631

+ 1 - 0
frontendApi/config/urlManagerRules.php

@@ -87,6 +87,7 @@ return [
             'POST ba-sure-approach-order' => 'ba-sure-approach-order',
             'POST ba-delete-approach-order' => 'ba-delete-approach-order',
             'GET ba-dec-order-list' => 'ba-dec-order-list',
+            'GET ba-dec-order-export/<orderSn>' => 'ba-dec-order-export',
         ],
     ],
     [

+ 245 - 0
frontendApi/modules/v1/controllers/ShopController.php

@@ -1219,4 +1219,249 @@ ORDER;
 
         return static::notice($data);
     }
+
+    /**
+     * 导出订单.
+     * @return mixed
+     * @throws HttpException
+     */
+    public function actionBaDecOrderExport()
+    {
+        $orderSn = \Yii::$app->request->get('orderSn');
+
+        $condition = ' AND DO.USER_ID=:USER_ID AND IS_DEL=0 AND DO.ORDER_SN=:ORDER_SN';
+        $params = [
+            ':USER_ID'  => \Yii::$app->user->id,
+            ':ORDER_SN' => $orderSn,
+        ];
+        $data = BaDecOrder::lists($condition, $params, [
+            'select' => 'DO.*,U.USER_NAME USER_NAME,U.REAL_NAME REAL_NAME,RU.USER_NAME REC_USER_NAME,RU.REAL_NAME REC_REAL_NAME,CU.USER_NAME CON_USER_NAME,CU.REAL_NAME CON_REAL_NAME,OG.*,OD.PROVINCE,OD.CITY,OD.COUNTY,OD.ADDRESS,OD.MOBILE,OD.PAY_AT,OD.ORDER_AMOUNT',
+            'orderBy' => 'DO.CREATED_AT DESC',
+            'from' => BaDecOrder::tableName() . ' AS DO',
+            'join' => [
+                ['LEFT JOIN', BaUser::tableName() . ' AS U', 'DO.TO_USER_ID=U.ID'],
+                ['LEFT JOIN', BaUser::tableName() . ' AS RU', 'DO.REC_USER_ID=RU.ID'],
+                ['LEFT JOIN', BaUser::tableName() . ' AS CU', 'DO.CON_USER_ID=CU.ID'],
+                ['LEFT JOIN', BaOrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=DO.ORDER_SN'],
+                ['LEFT JOIN', BaOrder::tableName() . ' AS OD', 'OD.SN=DO.ORDER_SN'],
+            ],
+        ]);
+
+        if (!$data['list']) {
+            $data = BaApproachDecOrder::lists($condition, $params, [
+                'select' => 'DO.*,U.USER_NAME USER_NAME,U.REAL_NAME REAL_NAME,RU.USER_NAME REC_USER_NAME,RU.REAL_NAME REC_REAL_NAME,CU.USER_NAME CON_USER_NAME,CU.REAL_NAME CON_REAL_NAME,OG.*,OD.PROVINCE,OD.CITY,OD.COUNTY,OD.ADDRESS,OD.MOBILE,OD.PAY_AT,OD.ORDER_AMOUNT',
+                'orderBy' => 'DO.CREATED_AT DESC',
+                'from' => BaApproachDecOrder::tableName() . ' AS DO',
+                'join' => [
+                    ['LEFT JOIN', BaUser::tableName() . ' AS U', 'DO.TO_USER_ID=U.ID'],
+                    ['LEFT JOIN', BaUser::tableName() . ' AS RU', 'DO.REC_USER_ID=RU.ID'],
+                    ['LEFT JOIN', BaUser::tableName() . ' AS CU', 'DO.CON_USER_ID=CU.ID'],
+                    ['LEFT JOIN', BaApproachOrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=DO.ORDER_SN'],
+                    ['LEFT JOIN', BaApproachOrder::tableName() . ' AS OD', 'OD.SN=DO.ORDER_SN'],
+                ],
+            ]);
+        }
+
+        $userId = '';
+        $userName = '';
+        $address = '';
+        $mobile = '';
+        $orderAt = '';
+        $orderDetails = '';
+        $orderAmount = 0;  // 合计总额
+        $orderNums = 0; // 合计总数
+        $totalTaxAmount = 0; // 合计税额
+        $totalAmount = 0;
+        foreach ($data['list'] as $key => $value) {
+            $provinceName = $value['PROVINCE'] ? Region::getCnName($value['PROVINCE']) : '';
+            $cityName = $value['CITY'] ? Region::getCnName($value['CITY']) : '';
+            $countyName = $value['COUNTY'] ? Region::getCnName($value['COUNTY']) : '';
+
+            $userId = $value['USER_NAME'];
+            $userName = $value['REAL_NAME'];
+            $address = $provinceName . $cityName . $countyName . $value['ADDRESS'];
+            $mobile = $value['MOBILE'];
+            $orderAt = Date::convert($value['CREATED_AT'],'Y-m-d H:i:s');
+
+            // 总价
+            $totalAmount = $value['BUY_NUMS'] * $value['REAL_PRICE'];
+            $orderAmount += $totalAmount;
+            $orderNums += $value['BUY_NUMS'];
+            // 税额
+            $taxAmount = floatval(Tool::formatPrice(($value['REAL_PRICE'] - ($value['REAL_PRICE'] / (1 + $value['TAX_RATE'] / 100))) * $value['BUY_NUMS']));
+            $totalTaxAmount += $taxAmount;
+            $taxAmount = sprintf('%.2f', $taxAmount);
+            $totalAmount = sprintf('%.2f', $totalAmount);
+            // 订单详情
+            $orderDetails .= <<<EOT
+                <tr>
+                    <td>{$value['SKU_CODE']}</td>
+                    <td>{$value['GOODS_TITLE']}</td>
+                    <td style="text-align: right;">{$value['REAL_PRICE']}</td>
+                    <td>{$value['BUY_NUMS']}</td>
+                    <td style="text-align: right;">{$value['TAX_RATE']}</td>
+                    <td style="text-align: right;">{$taxAmount}</td>
+                    <td style="text-align: right;">{$totalAmount}</td> 
+                </tr>
+EOT;
+        }
+
+        // 订单基本信息
+        $orderBase = <<<ORDER
+            <table border="1" style="table-layout: fixed; padding: 10px 20px;" width="100%">
+                <tr>
+                    <td width="30%" style="font-weight: bold; text-align: center; font-size: 14px;">Member Code</td>
+                    <td width="70%">{$userId}</td>
+                </tr>
+                <tr>
+                    <td width="30%" style="font-weight: bold; text-align: center; font-size: 14px;">Member Name</td>
+                    <td width="70%">{$userName}</td>
+                </tr>
+                <tr>
+                    <td width="30%" style="font-weight: bold; text-align: center; font-size: 14px;">Member Address</td>
+                    <td width="70%">{$address}</td>
+                </tr>
+                <tr>
+                    <td width="30%" style="font-weight: bold; text-align: center; font-size: 14px;">Member Phone</td>
+                    <td width="70%">{$mobile}</td>
+                </tr>
+                <tr>
+                    <td width="30%" style="font-weight: bold; text-align: center; font-size: 14px;">Order Code</td>
+                    <td width="70%">{$orderSn}</td>
+                </tr>
+                <tr>
+                    <td width="30%" style="font-weight: bold; text-align: center; font-size: 14px;">Creation Time</td>
+                    <td width="70%">{$orderAt}</td>
+                </tr>
+                <tr>
+                    <td class="bg" style="font-weight: bold; font-size: 14px; text-align: center;">Order detail</td>
+                    <td class="bg"></td>
+                </tr>
+            </table>
+ORDER;
+
+        $l['a_meta_charset'] = 'UTF-8';
+        $l['a_meta_dir'] = 'ltr';
+        $l['a_meta_language'] = 'zh';
+        $l['w_page'] = '页面';
+
+        $orderAmount = sprintf('%.2f', $orderAmount);
+        $totalTaxAmount = sprintf('%.2f', $totalTaxAmount);
+
+        $context = <<<ORDER
+            <!doctype html>
+            <html lang="en">
+            <head>
+                <meta charset="UTF-8" />
+                <title>Order detail</title>
+                <style>
+                    table {
+                        border-collapse: collapse;
+                    }
+                    table td, table th {
+                        border: 1px solid #ccc;
+                        padding: 5px 5px;
+                        border-collapse: collapse;
+                    }
+                    /*td {*/
+                    /*    padding: 120px;*/
+                    /*}*/
+                    .bg {
+                        background-color: #ccc;
+                    }
+                </style>
+            </head>
+            <body>
+                <div class="content">
+                    <p style="text-align: center; font-weight: bold; font-size: 22px;"><b>Order detail</b><br></p>
+                    <div>
+                        <div style="display: block; width: 100%;">
+                            {$orderBase}
+                            
+                            <table border="1" width="100%" style="padding: 10px 20px; text-align: center;">
+                                <tr>
+                                    <th width="15%" style="font-size: 14px; font-weight: bold; text-align: center;">Product Code</th>
+                                    <th width="25%" style="font-size: 14px; font-weight: bold; text-align: center;">Product Name</th>
+                                    <th width="15%" style="font-size: 14px; font-weight: bold; text-align: center;">Product Price</th>
+                                    <th width="8%" style="font-size: 14px; font-weight: bold; text-align: center;">Qty</th>
+                                    <th width="10%" style="font-size: 14px; font-weight: bold; text-align: center;">Tax Rate</th>
+                                    <th width="12%" style="font-size: 14px; font-weight: bold; text-align: center;">Tax</th>
+                                    <th width="15%" style="font-size: 14px; font-weight: bold; text-align: center;">Total Amount</th>
+                                </tr>
+                                {$orderDetails}
+                                <tr>
+                                    <td colspan="3">Total</td>
+                                    <td>{$orderNums}</td>
+                                    <td></td>
+                                    <td>{$totalTaxAmount}</td>
+                                    <td>{$orderAmount}</td>
+                                </tr>
+                            </table>
+                        </div>
+                        
+                        <div style="width: 100%; margin-top: 50px; height: 30px;">
+                            <table width="100%" style="border: none; padding: 10px 20px; text-align: center;">
+                                <tr style="border: none;">
+                                    <td width="70%" style="border: none;"></td>
+                                    <td width="30%" style="font-weight: bold; text-align: left; font-size: 14px; border: none;">Signature:</td>
+                                </tr>
+                                <tr style="border: none;">
+                                    <td width="70%" style="border: none;"></td>
+                                    <td width="30%" style="font-weight: bold; text-align: left; font-size: 14px; border: none;">Date:</td>
+                                </tr>
+                            </table>
+                        </div>
+                    </div>
+                </div>
+            </body>
+            </html>
+ORDER;
+        require_once (\Yii::$app->vendorPath . '/tecnickcom/tcpdf/tcpdf.php');
+
+        $pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+        // 设置打印模式
+        $pdf->SetCreator(PDF_CREATOR);
+        $pdf->SetAuthor('DaZe');
+        $pdf->SetTitle($orderSn);
+        $pdf->SetSubject('TCPDF Tutorial');
+        $pdf->SetKeywords('TCPDF, PDF, example, test, guide');
+        // 是否显示页眉
+        $pdf->setPrintHeader(false);
+        // 设置页眉字体
+        $pdf->setHeaderFont(Array('dejavusans', '', '12'));
+        // 页眉距离顶部的距离
+        $pdf->SetHeaderMargin('5');
+        // 是否显示页脚
+        $pdf->setPrintFooter(false);
+        // 设置默认等宽字体
+        $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
+        // 设置行高
+        $pdf->setCellHeightRatio(1);
+        // 设置左、上、右的间距
+        $pdf->SetMargins('10', '0', '10');
+        // 设置是否自动分页  距离底部多少距离时分页
+        $pdf->SetAutoPageBreak(TRUE, '15');
+        // 设置图像比例因子
+        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+        if (@file_exists(\Yii::$app->vendorPath . 'tecnickcom/tcpdf/examples/lang/eng.php')) {
+            require_once(\Yii::$app->vendorPath . '/tecnickcom/tcpdf/examples/lang/eng.php');
+            $pdf->setLanguageArray($l);
+        }
+        $pdf->setFontSubsetting(true);
+        $pdf->AddPage();
+        // 设置字体
+        $pdf->SetFont('stsongstdlight', '', 10, '', true);
+        $image = file_get_contents(\Yii::$app->basePath . '/../frontendEle/src/static/img/ngds-logo.jpg');
+        $pdf->Image('@' . $image, 15, 12, 20, 7, 'JPG');
+        $pdf->writeHTML($context);
+
+        ob_clean();
+
+        $file_name = $orderSn . '.pdf';
+        $path = 'pdfs/' . $file_name;
+        $pdf->Output(Yii::$app->basePath . '/web/' . $path, 'F');
+        @exec('chmod -R 777 /' . Yii::$app->basePath . '/web' . $path);
+
+        return static::notice(['fileUrl' => $path, 'targetName' => $file_name]);
+    }
 }

+ 6 - 6
frontendEle/src/views/shop/ba-dec-order-list.vue

@@ -18,11 +18,11 @@
         <el-table-column width="120" label="Sponsor code" prop="CON_USER_NAME"></el-table-column><!--接点人编号-->
         <el-table-column width="120" label="Status" prop="STATUS"></el-table-column><!--状态-->
         <el-table-column width="150" label="Created time" prop="CREATED_AT"></el-table-column >
-<!--        <el-table-column width="120" label="Action">&lt;!&ndash;操作&ndash;&gt;-->
-<!--          <template slot-scope="scope">-->
-<!--            <el-button type="primary" size="small" @click.native="handleOrderExportPDF(scope.row.ORDER_SN)">Export PDF</el-button>&lt;!&ndash;导出PDF&ndash;&gt;-->
-<!--          </template>-->
-<!--        </el-table-column>-->
+        <el-table-column width="120" label="Action"><!--操作-->
+          <template slot-scope="scope">
+            <el-button type="primary" size="small" @click.native="handleOrderExportPDF(scope.row.ORDER_SN)">Export PDF</el-button><!--导出PDF-->
+          </template>
+        </el-table-column>
       </el-table>
       <div class="white-box-footer">
           <pagination :total="totalCount" :page_size="pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange"></pagination>
@@ -124,7 +124,7 @@ export default {
     },
     // 导出PDF订单
     handleOrderExportPDF (orderSn) {
-      network.getData(`shop/dec-order-export/${orderSn}`).then(response => {
+      network.getData(`shop/ba-dec-order-export/${orderSn}`).then(response => {
         let { fileUrl, targetName } = response
         let downloadElement = document.createElement('a')
         downloadElement.target = '_blank'