|
|
@@ -8,6 +8,7 @@
|
|
|
|
|
|
namespace frontendApi\modules\v1\controllers;
|
|
|
|
|
|
+use common\helpers\Alarm;
|
|
|
use common\helpers\Cache;
|
|
|
use common\helpers\Date;
|
|
|
use common\helpers\DingTalk;
|
|
|
@@ -162,40 +163,6 @@ class ShopController extends BaseController {
|
|
|
return static::notice($data);
|
|
|
}
|
|
|
|
|
|
-// /**
|
|
|
-// * 我的订单
|
|
|
-// * @return mixed
|
|
|
-// * @throws \yii\web\HttpException
|
|
|
-// */
|
|
|
-// public function actionOrderList() {
|
|
|
-// $uname = Info::getUserNameByUserId(\Yii::$app->user->id);
|
|
|
-// $condition = " AND IS_DELETE=0 AND ORDER_TYPE='FX' AND (USER_ID=:USER_ID OR CREATE_USER='$uname')";
|
|
|
-// $params[':USER_ID'] = \Yii::$app->user->id;
|
|
|
-// $data = Order::lists($condition, $params, [
|
|
|
-// 'select' => 'O.*,U.REAL_NAME,OG.*',
|
|
|
-// 'orderBy' => 'O.CREATED_AT DESC',
|
|
|
-// 'from' => Order::tableName() . ' AS O',
|
|
|
-// 'join' => [
|
|
|
-// ['LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID'],
|
|
|
-// ['LEFT JOIN', OrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN'],
|
|
|
-// ],
|
|
|
-// ]);
|
|
|
-// foreach ($data['list'] as $key => $value) {
|
|
|
-// if($value['ORDER_TYPE']=='ZC'){
|
|
|
-// $data['list'][$key]['ORDER_TYPE'] = '首单';
|
|
|
-// }else{
|
|
|
-//// $data['list'][$key]['ORDER_TYPE'] = in_array($value['PAY_TYPE'], ['cash', 'paystack']) ? '复消': '积分';
|
|
|
-// $data['list'][$key]['ORDER_TYPE'] = '复消';
|
|
|
-// }
|
|
|
-// //$data['list'][$key]['PROVINCE_NAME'] = $value['PROVINCE'] ? Region::getCnName($value['PROVINCE']) : '';
|
|
|
-// //$data['list'][$key]['CITY_NAME'] = $value['CITY'] ? Region::getCnName($value['CITY']) : '';
|
|
|
-// //$data['list'][$key]['COUNTY_NAME'] = $value['COUNTY'] ? Region::getCnName($value['COUNTY']) : '';
|
|
|
-// $data['list'][$key]['PAY_AT'] = Date::convert($value['PAY_AT'],'Y-m-d H:i:s');
|
|
|
-// $data['list'][$key]['PAY_TYPE'] = $value['PAY_TYPE'] == 'cash' ? '消费点数' : ($value['PAY_TYPE'] == 'exchange' ? '兑换点数' : '复消点数');
|
|
|
-// }
|
|
|
-// return static::notice($data);
|
|
|
-// }
|
|
|
-
|
|
|
/**
|
|
|
* 我的订单
|
|
|
* @return mixed
|
|
|
@@ -203,53 +170,89 @@ class ShopController extends BaseController {
|
|
|
*/
|
|
|
public function actionOrderList() {
|
|
|
$uname = Info::getUserNameByUserId(\Yii::$app->user->id);
|
|
|
- $condition = " O.IS_DELETE = 0 AND O.ORDER_TYPE='FX' AND (O.USER_ID=:USER_ID OR O.CREATE_USER='$uname')";
|
|
|
+ $condition = " AND IS_DELETE=0 AND ORDER_TYPE='FX' AND (USER_ID=:USER_ID OR CREATE_USER='$uname')";
|
|
|
$params[':USER_ID'] = \Yii::$app->user->id;
|
|
|
- $orderQuery = Order::find()
|
|
|
- ->alias('O')
|
|
|
- ->where($condition, $params)
|
|
|
- ->select('O.*,U.REAL_NAME,OG.REAL_PRICE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV,OG.ORDER_SN,OG.GOODS_ID')
|
|
|
- ->join('LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID')
|
|
|
- ->join('LEFT JOIN', OrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN')
|
|
|
- ->orderBy('O.CREATED_AT DESC');
|
|
|
-
|
|
|
- // 订单中间表只查询待支付和支付失败的订单
|
|
|
- $params[':NOT_PAID'] = \Yii::$app->params['orderStatus']['notPaid']['value']; // 待支付
|
|
|
- $params[':FAIL_PAID'] = \Yii::$app->params['orderStatus']['failPaid']['value']; // 支付失败
|
|
|
- $orderStandardQuery = ApproachOrder::find()
|
|
|
- ->alias('O')
|
|
|
- ->where($condition . ' AND (O.STATUS = :NOT_PAID OR O.STATUS = :FAIL_PAID)', $params)
|
|
|
- ->select('O.*,U.REAL_NAME,OG.REAL_PRICE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV,OG.ORDER_SN,OG.GOODS_ID')
|
|
|
- ->join('LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID')
|
|
|
- ->join('LEFT JOIN', ApproachOrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN')
|
|
|
- ->orderBy('O.CREATED_AT DESC');
|
|
|
-
|
|
|
- $queryAll = $orderQuery->union($orderStandardQuery, true);
|
|
|
- $query = (new Query())->from(['Q' => $queryAll])->select('Q.*')->distinct()->orderBy(['CREATED_AT' => SORT_DESC]);
|
|
|
-
|
|
|
- $totalCount = $query->count();
|
|
|
- $pagination = new Pagination(['totalCount' => $totalCount, 'pageSize' => \Yii::$app->request->get('pageSize')]);
|
|
|
- $lists = $query->offset($pagination->offset)->limit($pagination->limit)->all();
|
|
|
-
|
|
|
- $data = [
|
|
|
- 'list' => $lists,
|
|
|
- 'currentPage'=>$pagination->page,
|
|
|
- 'totalPages'=>$pagination->pageCount,
|
|
|
- 'startNum' => $pagination->page * $pagination->pageSize + 1,
|
|
|
- 'totalCount' => $pagination->totalCount,
|
|
|
- 'pageSize' => $pagination->pageSize,
|
|
|
- ];
|
|
|
-
|
|
|
+ $data = Order::lists($condition, $params, [
|
|
|
+ 'select' => 'O.*,U.REAL_NAME,OG.*',
|
|
|
+ 'orderBy' => 'O.CREATED_AT DESC',
|
|
|
+ 'from' => Order::tableName() . ' AS O',
|
|
|
+ 'join' => [
|
|
|
+ ['LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID'],
|
|
|
+ ['LEFT JOIN', OrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN'],
|
|
|
+ ],
|
|
|
+ ]);
|
|
|
foreach ($data['list'] as $key => $value) {
|
|
|
- $data['list'][$key]['ORDER_TYPE'] = $value['ORDER_TYPE'] == 'ZC' ? '首单' : '复消';
|
|
|
- $data['list'][$key]['PAY_AT'] = $value['PAY_AT'] ? Date::convert($value['PAY_AT'],'Y-m-d H:i:s') : '';
|
|
|
+ if($value['ORDER_TYPE']=='ZC'){
|
|
|
+ $data['list'][$key]['ORDER_TYPE'] = '首单';
|
|
|
+ }else{
|
|
|
+// $data['list'][$key]['ORDER_TYPE'] = in_array($value['PAY_TYPE'], ['cash', 'paystack']) ? '复消': '积分';
|
|
|
+ $data['list'][$key]['ORDER_TYPE'] = '复消';
|
|
|
+ }
|
|
|
+ //$data['list'][$key]['PROVINCE_NAME'] = $value['PROVINCE'] ? Region::getCnName($value['PROVINCE']) : '';
|
|
|
+ //$data['list'][$key]['CITY_NAME'] = $value['CITY'] ? Region::getCnName($value['CITY']) : '';
|
|
|
+ //$data['list'][$key]['COUNTY_NAME'] = $value['COUNTY'] ? Region::getCnName($value['COUNTY']) : '';
|
|
|
+ $data['list'][$key]['PAY_AT'] = Date::convert($value['PAY_AT'],'Y-m-d H:i:s');
|
|
|
+// $data['list'][$key]['PAY_TYPE'] = $value['PAY_TYPE'] == 'cash' ? '消费点数' : ($value['PAY_TYPE'] == 'exchange' ? '兑换点数' : '复消点数');
|
|
|
$data['list'][$key]['PAY_TYPE'] = ShopGoods::payTypes()[$value['PAY_TYPE']]['name'] ?? '';
|
|
|
$data['list'][$key]['STATUS'] = \Yii::$app->params['orderStatus'][$value['STATUS']]['label'] ?? '';
|
|
|
}
|
|
|
-
|
|
|
- return $data;
|
|
|
+ return static::notice($data);
|
|
|
}
|
|
|
|
|
|
+// /**
|
|
|
+// * 我的订单
|
|
|
+// * @return mixed
|
|
|
+// * @throws \yii\web\HttpException
|
|
|
+// */
|
|
|
+// public function actionOrderList() {
|
|
|
+// $uname = Info::getUserNameByUserId(\Yii::$app->user->id);
|
|
|
+// $condition = " O.IS_DELETE = 0 AND O.ORDER_TYPE='FX' AND (O.USER_ID=:USER_ID OR O.CREATE_USER='$uname')";
|
|
|
+// $params[':USER_ID'] = \Yii::$app->user->id;
|
|
|
+// $orderQuery = Order::find()
|
|
|
+// ->alias('O')
|
|
|
+// ->where($condition, $params)
|
|
|
+// ->select('O.*,U.REAL_NAME,OG.REAL_PRICE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV,OG.ORDER_SN,OG.GOODS_ID')
|
|
|
+// ->join('LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID')
|
|
|
+// ->join('LEFT JOIN', OrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN')
|
|
|
+// ->orderBy('O.CREATED_AT DESC');
|
|
|
+//
|
|
|
+// // 订单中间表只查询待支付和支付失败的订单
|
|
|
+// $params[':NOT_PAID'] = \Yii::$app->params['orderStatus']['notPaid']['value']; // 待支付
|
|
|
+// $params[':FAIL_PAID'] = \Yii::$app->params['orderStatus']['failPaid']['value']; // 支付失败
|
|
|
+// $orderStandardQuery = ApproachOrder::find()
|
|
|
+// ->alias('O')
|
|
|
+// ->where($condition . ' AND (O.STATUS = :NOT_PAID OR O.STATUS = :FAIL_PAID)', $params)
|
|
|
+// ->select('O.*,U.REAL_NAME,OG.REAL_PRICE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV,OG.ORDER_SN,OG.GOODS_ID')
|
|
|
+// ->join('LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID')
|
|
|
+// ->join('LEFT JOIN', ApproachOrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN')
|
|
|
+// ->orderBy('O.CREATED_AT DESC');
|
|
|
+//
|
|
|
+// $queryAll = $orderQuery->union($orderStandardQuery, true);
|
|
|
+// $query = (new Query())->from(['Q' => $queryAll])->select('Q.*')->distinct()->orderBy(['CREATED_AT' => SORT_DESC]);
|
|
|
+//
|
|
|
+// $totalCount = $query->count();
|
|
|
+// $pagination = new Pagination(['totalCount' => $totalCount, 'pageSize' => \Yii::$app->request->get('pageSize')]);
|
|
|
+// $lists = $query->offset($pagination->offset)->limit($pagination->limit)->all();
|
|
|
+//
|
|
|
+// $data = [
|
|
|
+// 'list' => $lists,
|
|
|
+// 'currentPage'=>$pagination->page,
|
|
|
+// 'totalPages'=>$pagination->pageCount,
|
|
|
+// 'startNum' => $pagination->page * $pagination->pageSize + 1,
|
|
|
+// 'totalCount' => $pagination->totalCount,
|
|
|
+// 'pageSize' => $pagination->pageSize,
|
|
|
+// ];
|
|
|
+//
|
|
|
+// foreach ($data['list'] as $key => $value) {
|
|
|
+// $data['list'][$key]['ORDER_TYPE'] = $value['ORDER_TYPE'] == 'ZC' ? '首单' : '复消';
|
|
|
+// $data['list'][$key]['PAY_AT'] = $value['PAY_AT'] ? Date::convert($value['PAY_AT'],'Y-m-d H:i:s') : '';
|
|
|
+// $data['list'][$key]['PAY_TYPE'] = ShopGoods::payTypes()[$value['PAY_TYPE']]['name'] ?? '';
|
|
|
+// $data['list'][$key]['STATUS'] = \Yii::$app->params['orderStatus'][$value['STATUS']]['label'] ?? '';
|
|
|
+// }
|
|
|
+//
|
|
|
+// return $data;
|
|
|
+// }
|
|
|
+
|
|
|
/**
|
|
|
* 会员复消
|
|
|
*/
|
|
|
@@ -351,7 +354,7 @@ class ShopController extends BaseController {
|
|
|
}
|
|
|
|
|
|
// 支付webhook回调日志
|
|
|
- Tool::approachOrderCall($data);
|
|
|
+ //Tool::approachOrderCall($data);
|
|
|
|
|
|
try {
|
|
|
// 订单状态
|
|
|
@@ -385,6 +388,14 @@ class ShopController extends BaseController {
|
|
|
|
|
|
return http_response_code(200);
|
|
|
} else {
|
|
|
+ // 发送预警通知
|
|
|
+ $alarm = [
|
|
|
+ 'stance' => 5,
|
|
|
+ 'brand' => 'MSG',
|
|
|
+ 'message' => sprintf('跨境商品支付回调失败. 订单号[%s], error[%s]', $oderSn, json_encode($formModel->getErrors())),
|
|
|
+ ];
|
|
|
+ Alarm::reportAlarm($alarm);
|
|
|
+
|
|
|
LoggerTool::error(Form::formatErrorsForApi($formModel->getErrors()));
|
|
|
return http_response_code(500);
|
|
|
}
|
|
|
@@ -417,8 +428,16 @@ class ShopController extends BaseController {
|
|
|
{
|
|
|
// 订单ID
|
|
|
$paymentParams['RefNo'] = \Yii::$app->request->post('RefNo');
|
|
|
+ // 订单
|
|
|
+ $order = ApproachOrder::findOne(['SN' => $paymentParams['RefNo']]);
|
|
|
+ if (!$order) {
|
|
|
+ return static::notice('订单编号无效');
|
|
|
+ }
|
|
|
+ // 转为分
|
|
|
+ $money = $order['PAY_AMOUNT'];
|
|
|
+
|
|
|
// 订单金额,元=>分
|
|
|
- $money = \Yii::$app->request->post('Amount');
|
|
|
+// $money = \Yii::$app->request->post('Amount');
|
|
|
// 马来币汇率
|
|
|
$exchangeRateMYR = floatval(Cache::getSystemConfig()['exchangeRateMYR']['VALUE'] ?? 0);
|
|
|
// 计算马来币
|
|
|
@@ -494,25 +513,31 @@ class ShopController extends BaseController {
|
|
|
*/
|
|
|
public function actionLogisticsAuto()
|
|
|
{
|
|
|
- $createdAtStart = strtotime('yesterday');
|
|
|
+// $createdAtStart = strtotime('yesterday');
|
|
|
$createdAtEnd = strtotime(date('Y-m-d')) - 1;
|
|
|
// 早0点推送,前一天0-24点的订单
|
|
|
$orderList = Order::find()
|
|
|
->where(
|
|
|
- '(CREATED_AT BETWEEN :CREATED_AT_START AND :CREATED_AT_END) AND STATUS=:STATUS AND SEND_AT=:SEND_AT AND PAY_TYPE=:PAY_TYPE',
|
|
|
+ '(CREATED_AT <= :CREATED_AT_END) AND STATUS=:STATUS AND SEND_AT=:SEND_AT AND PAY_TYPE=:PAY_TYPE AND IS_DELETE = 0',
|
|
|
[
|
|
|
- ':CREATED_AT_START' => $createdAtStart,
|
|
|
+// ':CREATED_AT_START' => $createdAtStart,
|
|
|
':CREATED_AT_END' => $createdAtEnd,
|
|
|
':STATUS' => \Yii::$app->params['orderStatus']['paid']['value'],
|
|
|
':SEND_AT' => 0,
|
|
|
- 'PAY_TYPE' => 'online',
|
|
|
+ ':PAY_TYPE' => 'online',
|
|
|
]
|
|
|
)
|
|
|
->asArray()
|
|
|
->all();
|
|
|
|
|
|
if (!$orderList) {
|
|
|
- LoggerTool::info(['推送wst系统终止,原因:无订单', $createdAtStart, $createdAtEnd]);
|
|
|
+ LoggerTool::info(['跨境商品推送淘布斯系统终止,原因:无订单', $createdAtEnd]);
|
|
|
+ // 发送预警通知
|
|
|
+ $alarm = [
|
|
|
+ 'brand' => 'MSG',
|
|
|
+ 'message' => '跨境商品推送淘布斯系统终止,原因:无订单',
|
|
|
+ ];
|
|
|
+ Alarm::reportAlarm($alarm);
|
|
|
return static::notice('推送wst系统终止,原因:无订单');
|
|
|
}
|
|
|
|
|
|
@@ -522,28 +547,39 @@ class ShopController extends BaseController {
|
|
|
foreach ($orderList as $order) {
|
|
|
// 发送wst仓库系统
|
|
|
$response = $logistics->createOrder($order);
|
|
|
- LoggerTool::warning($response);
|
|
|
+ LoggerTool::info($response);
|
|
|
if ($response['success'] == 1) {
|
|
|
// 写入mongo
|
|
|
Tool::wstOrderCall($response['data']);
|
|
|
$orderSnSuccess[] = $order['SN'];
|
|
|
} else {
|
|
|
+ // 记录推送结果
|
|
|
$orderSnFailed[] = $order['SN'];
|
|
|
+ LoggerTool::error(sprintf('跨境商品推送淘布斯系统失败. 订单号[%s], error[%s]', $order['SN'], $response));
|
|
|
+ // 发送预警通知
|
|
|
+ $alarm = [
|
|
|
+ 'stance' => 5,
|
|
|
+ 'brand' => 'MSG',
|
|
|
+ 'message' => sprintf('跨境商品推送淘布斯系统失败. 订单号[%s], error[%s]', $order['SN'], $response),
|
|
|
+ ];
|
|
|
+ Alarm::reportAlarm($alarm);
|
|
|
}
|
|
|
-
|
|
|
- $orderSnSuccess[] = $response;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
// 更新db中订单推送成功状态
|
|
|
if (count($orderSnSuccess) > 0) {
|
|
|
- Order::updateAll(['SEND_AT' => time()], 'SN IN (:SN)', [':SN' => implode("', '", $orderSnSuccess)]);
|
|
|
- }
|
|
|
- if (count($orderSnFailed) > 0) {
|
|
|
- // 发送预警通知
|
|
|
- LoggerTool::error(['自动推送wst失败', $orderSnFailed]);
|
|
|
+ $orderSnSuccessIds = implode("','", $orderSnSuccess);
|
|
|
+ Order::updateAll(['SEND_AT' => time()], "SN IN ('" . $orderSnSuccessIds . "')");
|
|
|
}
|
|
|
|
|
|
- return static::notice(sprintf('wstLogisticsAutoSend success order count{%d}, orderSN[%s]; failed count{%d}, orderSN[%s]', count($orderSnSuccess), implode(', ', $orderSnSuccess), count($orderSnFailed), implode(', ', $orderSnFailed)));
|
|
|
+ // 发送预警通知
|
|
|
+ $alarm = [
|
|
|
+ 'stance' => 2,
|
|
|
+ 'brand' => 'MSG',
|
|
|
+ 'message' => sprintf('跨境商品推送淘布斯系统结束. 成功订单数{%d}, 订单号[%s]; 失败订单数{%d}, 订单号[%s]', count($orderSnSuccess), implode(', ', $orderSnSuccess), count($orderSnFailed), implode(', ', $orderSnFailed)),
|
|
|
+ ];
|
|
|
+ Alarm::reportAlarm($alarm);
|
|
|
+
|
|
|
+ return static::notice(sprintf('跨境商品推送淘布斯系统结束. 成功订单数{%d}, 订单号[%s]; 失败订单数{%d}, 订单号[%s]', count($orderSnSuccess), implode(', ', $orderSnSuccess), count($orderSnFailed), implode(', ', $orderSnFailed)));
|
|
|
}
|
|
|
}
|