|
|
@@ -10,22 +10,24 @@ use common\helpers\http\RemoteUploadApi;
|
|
|
use common\helpers\LoggerTool;
|
|
|
use common\helpers\Tool;
|
|
|
use common\helpers\user\Info;
|
|
|
-use common\libs\dataList\column\DateTime;
|
|
|
use common\libs\dataList\DataList;
|
|
|
use common\models\ApproachOrder;
|
|
|
use common\models\ApproachOrderGoods;
|
|
|
+use common\models\BaApproachOrder;
|
|
|
+use common\models\BaApproachOrderGoods;
|
|
|
+use common\models\BaOrder;
|
|
|
+use common\models\BaOrderGoods;
|
|
|
+use common\models\BaUser;
|
|
|
use common\models\Export;
|
|
|
use common\models\Order;
|
|
|
use common\models\OrderGoods;
|
|
|
use common\models\Region;
|
|
|
use common\models\ShopGoods;
|
|
|
use common\models\User;
|
|
|
-use mysql_xdevapi\Result;
|
|
|
use Yii;
|
|
|
use yii\base\Exception;
|
|
|
use yii\base\StaticInstanceTrait;
|
|
|
use yii\base\Component;
|
|
|
-use yii\data\Pagination;
|
|
|
use yii\db\Query;
|
|
|
|
|
|
class BaseExport extends Component {
|
|
|
@@ -214,7 +216,6 @@ class BaseExport extends Component {
|
|
|
* @throws \yii\httpclient\Exception
|
|
|
*/
|
|
|
public function generate() {
|
|
|
- //Logger::info(date('Y-m-d H:i:s'), 'export');
|
|
|
$this->getParams();
|
|
|
if (!$this->params) {
|
|
|
throw new Exception('无法获取需要的参数');
|
|
|
@@ -263,9 +264,11 @@ class BaseExport extends Component {
|
|
|
} else {
|
|
|
throw new Exception($this->listModelClass.'的getList方法不存在');
|
|
|
}
|
|
|
+ LoggerTool::info($list);
|
|
|
if($page >= $list['totalPages']){
|
|
|
return 'finish';
|
|
|
}
|
|
|
+ LoggerTool::info($list['list']);
|
|
|
if(!empty($list['list'])){
|
|
|
foreach($list['list'] as $columnData){
|
|
|
fputcsv($this->_fp, Tool::arrTextConvert($columnData));
|
|
|
@@ -1089,4 +1092,126 @@ ORDER;
|
|
|
|
|
|
return $list['list'];
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成
|
|
|
+ * @return bool
|
|
|
+ * @throws Exception
|
|
|
+ * @throws \yii\base\InvalidConfigException
|
|
|
+ * @throws \yii\httpclient\Exception
|
|
|
+ */
|
|
|
+ public function generateBaOrderExcel() {
|
|
|
+ $this->getParams();
|
|
|
+ if (!$this->params) {
|
|
|
+ throw new Exception('无法获取需要的参数');
|
|
|
+ }
|
|
|
+ $path = $this->getSaveBasePath() . __DS__ . $this->getSavePath();
|
|
|
+ $path = __DS__ . $path;
|
|
|
+ $realFile = $this->mkdir($path) . __DS__ . $this->getFileName();
|
|
|
+ $this->completed = false;
|
|
|
+ $this->getExportId();
|
|
|
+ $this->getUserId();
|
|
|
+ $this->_fp = fopen($realFile, 'w');
|
|
|
+ @exec('chown -R www:www /'.$realFile);
|
|
|
+ @exec('chmod -R 777 /'.$realFile);
|
|
|
+ // 获取列表数据及表头
|
|
|
+ $this->_listModel = new $this->listModelClass();
|
|
|
+ $this->_listModel->isExport = true;
|
|
|
+ if(method_exists($this->_listModel, 'getExportHeaders')){
|
|
|
+ if(method_exists($this->_listModel, 'exportPrepare')) {//导出数据提前设置参数
|
|
|
+ $this->_listModel->exportPrepare(['condition' => $this->params['condition'], 'params' => $this->params['params'], 'others' => $this->params['others'] ?? [], 'page' => 0, 'pageSize' => 100000, 'userId' => $this->userId]);
|
|
|
+ }
|
|
|
+ $headers = $this->_listModel->getExportHeaders($this->userId);
|
|
|
+ fputcsv($this->_fp, $headers);
|
|
|
+ unset($headers);
|
|
|
+ $this->_updateFirst($realFile, 1);
|
|
|
+ } else {
|
|
|
+ throw new Exception($this->listModelClass.'的getExportHeaders方法不存在');
|
|
|
+ }
|
|
|
+ $this->_loopWriteDataBaOrder();
|
|
|
+ $this->complete();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 循环写入数据
|
|
|
+ */
|
|
|
+ private function _loopWriteDataBaOrder()
|
|
|
+ {
|
|
|
+ $orderQuery = BaOrder::find()
|
|
|
+ ->alias('O')
|
|
|
+ ->where($this->params['condition'], $this->params['params'])
|
|
|
+ ->select('O.*,U.REAL_NAME,U.DEC_ID,SG.CATEGORY_TYPE,OG.REAL_PRICE,OG.TAX_RATE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV')
|
|
|
+ ->join('LEFT JOIN', BaUser::tableName() . ' AS U', 'U.ID=O.USER_ID')
|
|
|
+ ->join('LEFT JOIN', BaOrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN')
|
|
|
+ ->join('LEFT JOIN', ShopGoods::tableName() . ' AS SG', 'SG.ID=OG.GOODS_ID')
|
|
|
+ ->orderBy('O.CREATED_AT DESC');
|
|
|
+
|
|
|
+ // 订单中间表只查询待支付和支付失败的订单
|
|
|
+ $this->params['params'][':NOT_PAID'] = \Yii::$app->params['orderStatus']['notPaid']['value']; // 待支付
|
|
|
+ $this->params['params'][':FAIL_PAID'] = \Yii::$app->params['orderStatus']['failPaid']['value']; // 支付失败
|
|
|
+ $orderStandardQuery = BaApproachOrder::find()
|
|
|
+ ->alias('O')
|
|
|
+ ->where($this->params['condition'] . ' AND (O.STATUS = :NOT_PAID OR O.STATUS = :FAIL_PAID)', $this->params['params'])
|
|
|
+ ->select('O.*,U.REAL_NAME,U.DEC_ID,SG.CATEGORY_TYPE,OG.REAL_PRICE,OG.TAX_RATE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV')
|
|
|
+ ->join('LEFT JOIN', BaUser::tableName() . ' AS U', 'U.ID=O.USER_ID')
|
|
|
+ ->join('LEFT JOIN', BaApproachOrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN')
|
|
|
+ ->join('LEFT JOIN', ShopGoods::tableName() . ' AS SG', 'SG.ID=OG.GOODS_ID')
|
|
|
+ ->orderBy('O.CREATED_AT DESC');
|
|
|
+
|
|
|
+ $queryAll = $orderQuery->union($orderStandardQuery, true);
|
|
|
+ $query = (new Query())->from(['Q' => $queryAll])->select('Q.*')->distinct()->orderBy(['CREATED_AT' => SORT_DESC]);
|
|
|
+ $lists = $query->all();
|
|
|
+
|
|
|
+ if(!empty($lists)){
|
|
|
+ $regionConfig = Cache::getRegionConfig();
|
|
|
+ foreach($lists as $columnData) {
|
|
|
+ $CREATE_USER_ID = Info::getBaUserIdByUserName($columnData['CREATE_USER']);
|
|
|
+ $createUserName = Info::getBaUserRealNameByUserId($CREATE_USER_ID);
|
|
|
+ $decUserName = Info::getBaUserNameByUserId($columnData['DEC_ID']);
|
|
|
+
|
|
|
+ $columnAccept = [
|
|
|
+ 'USER_NAME' => $columnData['USER_NAME'],
|
|
|
+ 'DEC_USER_NAME' => $decUserName,
|
|
|
+ 'CREATE_USER' => $columnData['CREATE_USER'],
|
|
|
+ 'CREATE_USER_NAME' => $createUserName,
|
|
|
+ 'SN' => $columnData['SN'],
|
|
|
+ 'STATUS' => \Yii::$app->params['orderStatus'][$columnData['STATUS']]['label'] ?? '',
|
|
|
+ 'SKU_CODE' => $columnData['SKU_CODE'],
|
|
|
+ 'GOODS_TITLE' => $columnData['GOODS_TITLE'],
|
|
|
+ 'BUY_NUMS' => $columnData['BUY_NUMS'],
|
|
|
+ 'CONSIGNEE' => $columnData['CONSIGNEE'],
|
|
|
+ 'MOBILE' => "\t{$columnData['MOBILE']}",
|
|
|
+ 'TEL' => "\t{$columnData['TEL']}",
|
|
|
+ 'PROVINCE' => $regionConfig[$columnData['PROVINCE']]['REGION_NAME'] ?? '',
|
|
|
+ 'CITY' => $regionConfig[$columnData['CITY']]['REGION_NAME'] ?? '',
|
|
|
+ 'COUNTY' => $regionConfig[$columnData['COUNTY']]['REGION_NAME'] ?? '',
|
|
|
+ 'ADDRESS' => $columnData['ADDRESS'],
|
|
|
+ 'PERIOD_NUM' => $columnData['PERIOD_NUM'],
|
|
|
+ 'ORDER_TYPE' => ($columnData['ORDER_TYPE'] == 'ZC') ? 'Welcome pack' : (in_array($columnData['PAY_TYPE'], ['cash', 'pay_stack']) ? 'Reselling': 'Points'),
|
|
|
+ 'CREATED_AT' => Date('Y-m-d H:i:s', $columnData['CREATED_AT']),
|
|
|
+ 'PAY_TYPE' => ShopGoods::payTypes()[$columnData['PAY_TYPE']]['name'] ?? ShopGoods::payTypes()['cash']['name'],
|
|
|
+ 'PAY_AT' => $columnData['PAY_AT'] > 0 ? Date('Y-m-d H:i:s', $columnData['PAY_AT']) : '',
|
|
|
+ 'DELIVERY_AT' => $columnData['DELIVERY_AT'] > 0 ? Date('Y-m-d H:i:s', $columnData['DELIVERY_AT']) : '',
|
|
|
+ 'REAL_PRICE' => $columnData['REAL_PRICE'] ?? 0,
|
|
|
+ 'REAL_PV' => $columnData['REAL_PV'] ?? 0,
|
|
|
+ 'PAY_FREIGHT' => $columnData['PAY_FREIGHT'] ?? 0,
|
|
|
+ 'TAX_RATE' => $columnData['TAX_RATE'],
|
|
|
+ 'TAX_AMOUNT' => Tool::calculateTax($columnData['REAL_PRICE'], $columnData['TAX_RATE'], $columnData['BUY_NUMS']),
|
|
|
+ 'EXPRESS_COMPANY' => $columnData['EXPRESS_COMPANY'],
|
|
|
+ 'ORDER_TRACK_NO' => $columnData['ORDER_TRACK_NO'],
|
|
|
+ 'EXPRESS_TYPE' => $columnData['EXPRESS_TYPE'] == 0 ? 'mailing ':' auto pick',
|
|
|
+ 'FRONT_REMARK' => $columnData['FRONT_REMARK'],
|
|
|
+ 'DELIVERY_STATUS_NAME' => \Yii::$app->params['deliveryStatus'][$columnData['DELIVERY_STATUS']]['label'] ?? '',
|
|
|
+ ];
|
|
|
+
|
|
|
+ fputcsv($this->_fp, Tool::arrTextConvert($columnAccept));
|
|
|
+ unset($percent, $columnData, $columnAccept);
|
|
|
+ }
|
|
|
+ unset($list);
|
|
|
+ }
|
|
|
+
|
|
|
+ unset($list);
|
|
|
+ return 'finish';
|
|
|
+ }
|
|
|
}
|