canyin-project/ybcy/controllers/channelApi/OrderController.php
2024-11-01 16:07:54 +08:00

1898 lines
100 KiB
PHP

<?php
namespace app\controllers\channelApi;
use app\models\common\WeChatPay;
use Composer\Package\Loader\ValidatingArrayLoader;
use Illuminate\Support\Facades\DB;
use Yii;
use app\models\common\Config;
use app\models\common\Store;
use app\models\common\Order;
use app\models\common\CallbackOrder;
use app\models\common\Message;
use app\models\common\Power;
use app\models\common\Member;
use app\models\common\Printing;
use app\models\common\Good;
use app\controllers\common\FuiouController;
class OrderController extends CommonController{
//商品加入购物车
public function actionSaveShopCar(){
$request = Yii::$app->request;
$result = axios_request();
$item=$result['item']?:1;
$tableId=$result['tableId']?:0;
$userId = $this->wqData['userId'];
$uniacid = $this->wqData['uniacid'];
$userData['userId']=$userId;
$storeId=$result['storeId'];
if($item==1){
$goodsType=1;
$takeOutSetData = Config::getStoreSet('takeOutSet', $result['storeId']);
}
if($item==2){
$goodsType=2;
$takeOutSetData = Config::getStoreSet('instoreSet', $result['storeId']);
$multiplayerMode = $takeOutSetData['orderMode']?:1;
if($multiplayerMode==1){
$userData=[];
}
}
if($item==3){
$goodsType=2;
$takeOutSetData = Config::getStoreSet('fastSet', $result['storeId']);
}
if ($request->isPost){
if(!$result['storeId']){
echo json_encode(['code' => 2, 'msg' => '无效的门店']);die;
}
if(!$result['type']){
echo json_encode(['code' => 2, 'msg' => '无效的请求']);die;
}
$goodInfo = (new \yii\db\Query())
->from('{{%ybwm_core_goods}}')
->where(['id' => $result['goodsId'], 'uniacid' => $uniacid])
->one();
$maiId=Store::getMainStore($uniacid);
$storeRe=(new \yii\db\Query())
->from('{{%ybwm_store}}')
->where('uniacid=:uniacid AND id=:id',[':uniacid'=>$uniacid,':id'=>$storeId])
->one();
if($storeRe['isMain']==2&&$storeRe['goodsModel']<3) {
$storeGood=(new \yii\db\Query())
->from('{{%ybwm_store_goods}}')
->where(['goodsId' => $result['goodsId'], 'storeId' => $result['storeId'], 'uniacid' => $uniacid])
->one();
$goodInfo['price']=$storeGood['price'];
$goodInfo['stock']=$storeGood['stock'];
$goodInfo['display']=$storeGood['display'];
$goodInfo['data']=$storeGood['data'];
}
if($goodInfo['display']<>1){
echo json_encode(['code' => 2, 'msg' => '商品已下架或未上架']);die;
}
//判断库存
if($result['groupId']){
$count= (new \yii\db\Query())
->from('{{%ybwm_shop_car}}')
->where(['tableId'=>$tableId,'item'=>$item,'goodsId' => $result['goodsId'], 'groupId' => $result['groupId'],'storeId' => $result['storeId'],'uniacid'=>$uniacid])
->andWhere($userData)
->count('num');
if($storeRe['isMain']==1||$storeRe['goodsModel']==3) {
$specsInfo=(new \yii\db\Query())
->from('{{%ybwm_good_specs}}')
->where(['id' => $result['groupId']])
->one();
$stock=$specsInfo['SalesStock'];
}else{
$specsList=json_decode($goodInfo['data'],true)['specs'];
foreach ($specsList as $vo){
if($result['groupId']==$vo['id']){
$specsInfo=$vo;
$stock=$specsInfo['SalesStock'];
continue;
}
}
}
}else{
$count= (new \yii\db\Query())
->from('{{%ybwm_shop_car}}')
->where(['tableId'=>$tableId,'item'=>$item,'goodsId' => $result['goodsId'], 'storeId' => $result['storeId'],'uniacid'=>$uniacid])
->andWhere($userData)
->one()['num'];
$stock=$goodInfo['stock'];
}
if($result['type']==1){
$result['num']=$result['num']?$result['num']:1;
$maxCount=$count+$result['num'];
if($maxCount>$stock){
echo json_encode(['code' => 2, 'msg' => '库存不足']);die;
}
}
if($result['id']){
$row = (new \yii\db\Query())
->from('{{%ybwm_shop_car}}')
->where(['id' => $result['id']])
->one();
if($result['type']==1) {
if($result['groupId']){
if ($result['storeId'] == $maiId['id']) {
$stock = (new \yii\db\Query())
->from('{{%ybwm_good_specs}}')
->where(['id' => $row['groupId']])
->one()['SalesStock'];
} else {
$specsList = json_decode($goodInfo['data'], true)['specs'];
foreach ($specsList as $vo) {
if ($row['groupId'] == $vo['id']) {
$stock = $vo['SalesStock'];
}
}
}
if ($row['num'] + $result['num'] > $stock) {
echo json_encode(['code' => 2, 'msg' => '库存不足']);die;
}
}
}
$originalPrice=Good::getGoodMoneyByCar($result['id']);//商品原价
$vipMoney=Member::getDiscountByGood($userId,$row['goodsId'],$originalPrice)['money'];//VIP原价
$activityPrice=Good::getGoodActivity($uniacid,$result['storeId'],$originalPrice,$row['goodsId'],$goodsType);//商品活动价
if($activityPrice['type']>0){
$activityPrice['activityMoney']=Member::getDiscountByGood($userId,$row['goodsId'],$activityPrice['activityMoney'])['money'];
}
if($result['type']==1){
if($row['num']+1>$goodInfo['maxNum']&&$goodInfo['maxNum']>0){
echo json_encode(['code' => 2, 'msg' => '超出限购数量']);die;
}
if($activityPrice['type']==5){
//买一送一
if($activityPrice['limitNum']>0 AND $row['discountNum']>=$activityPrice['limitNum']){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountNum' =>$activityPrice['limitNum'],'num' =>$row['num']+1], ['id' =>$result['id']])->execute();
}else{
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountPrice'=>0,'discountNum' =>bcdiv($row['num']+2,2,0),'num' =>$row['num']+2], ['id' =>$result['id']])->execute();
}
}elseif($activityPrice['type']==4){
//第二件半价
if($row['num']==1){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountPrice'=>$activityPrice['activityMoney'],'discountNum' =>$row['discountNum']+1,'num' =>$row['num']+1], ['id' =>$result['id']])->execute();
}else{
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num' =>$row['num']+1], ['id' =>$result['id']])->execute();
}
}elseif($activityPrice['type']!=0){
if($activityPrice['limitNum']>0 AND $row['discountNum']>=$activityPrice['limitNum']) {
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountNum' =>$activityPrice['limitNum'],'num' => $row['num'] + 1], ['id' => $result['id']])->execute();
}else{
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountPrice' => $activityPrice['activityMoney'], 'discountNum' => $row['num'] + 1, 'num' => $row['num'] + 1], ['id' => $result['id']])->execute();
}
}else{
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num' =>$row['num']+1], ['id' =>$result['id']])->execute();
}
}else{
//减法
if($activityPrice['type']==5){
$allNum=bcsub($row['num'],$row['discountNum'],0);
}else{
$allNum=$row['num'];
}
if ($row['num'] == 1 || ($allNum <= $goodInfo['minNum'] AND $goodInfo['minNum'] > 0)) {
$re=Yii::$app->db->createCommand()->delete('{{%ybwm_shop_car}}', ['id' =>$result['id']])->execute();
}else{
if($activityPrice['type']==1 || $activityPrice['type']==2 || $activityPrice['type']==3){
if($row['discountNum']>$activityPrice['limitNum'] AND $activityPrice['limitNum']!=0){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountNum'=>$activityPrice['limitNum'],'num' =>$row['num']-1], ['id' => $result['id']])->execute();
}else{
if($row['num']==$row['discountNum']){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountNum'=>$row['discountNum']-1,'num' =>$row['num']-1], ['id' => $result['id']])->execute();
}else{
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num' =>$row['num']-1], ['id' => $result['id']])->execute();
}
}
}
if($activityPrice['type']==4){
if($row['num']==2){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountNum' => 0, 'num' => $row['num'] - 1], ['id' => $result['id']])->execute();
}else{
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num' => $row['num'] - 1], ['id' => $result['id']])->execute();
}
}
if($activityPrice['type']==5) {
$originalNum=$row['num']-$row['discountNum'];
if ($originalNum>$activityPrice['limitNum'] AND $activityPrice['limitNum']>0) {
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num' => $row['num'] - 1], ['id' => $result['id']])->execute();
} else {
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountNum' => $row['discountNum'] - 1, 'num' => $row['num'] - 2], ['id' => $result['id']])->execute();
}
}
if($activityPrice['type']==0) {
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num' => $row['num'] - 1], ['id' => $result['id']])->execute();
}
}
}
}else{
//如果是有规格商品
if($result['groupId']){
$ids=array_column($result['material'],'materialId');
if(count($ids)>1){
$ids=implode(',',$ids);
}else{
$ids=$ids[0]?:'';
}
//dd($ids);die;
//判断购物车是否有商品
$row = (new \yii\db\Query())
->from('{{%ybwm_shop_car}}')
->where(['tableId'=>$tableId,'item'=>$item,'goodsId' => $result['goodsId'], 'groupId' => $result['groupId'],'attribute' => $result['attribute'],'materialIds' =>$ids, 'storeId' => $result['storeId'], 'uniacid'=>$uniacid])
->andWhere($userData)
->one();
//print_R(['goodsId' => $result['goodsId'], 'groupId' => $result['groupId'],'attribute' => $result['attribute'],'materialIds' =>$ids, 'storeId' => $result['storeId'], 'userId' => $userId,'uniacid'=>$uniacid]);die;
if($result['type']==1){
if($row){
$addNum=1;
}else{
$addNum=$goodInfo['minNum'];
}
$number=$result['num']?:$addNum;
$count=$row['num']+$number;
if($count>$goodInfo['maxNum']&&$goodInfo['maxNum']>0){
echo json_encode(['code' => 2, 'msg' => '超出限购数量']);die;
}
if($row){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num' => $number+$row['num']], ['id' => $row['id']])->execute();
}else{
//写入部分
if ($result['groupId']) {
$groupName = $specsInfo['specsName'];
}
$boxType = $takeOutSetData['boxType'];
if ($boxType== 2) {
//是有规格
$boxMoney = $specsInfo['boxMoney'];
}else{
$boxMoney = $takeOutSetData['boxMoney'];
}
if ($result['material']) {
$materialData = array_column($result['material'], 'materialId');
$materData = (new \yii\db\Query())
->from('{{%ybwm_good_materia}}')
->where(['goodId' => $result['goodsId'], 'uniacid' => $uniacid])
->andWhere(['in', 'id', $materialData])
->all();
$materialMoney = array_sum(array_column($materData, 'SalesPrice'));
$nameStr = implode(',', array_column($materData, 'materialName'));
$materJson = json_encode($result['material']);
}
$money = $specsInfo['SalesPrice'];
$newMoney=Member::getDiscountByGood($userId,$result['goodsId'],$money);
$data = array(
'userId' => $userId,
'storeId' => $result['storeId'],
'goodsId' => $result['goodsId'],
'name' => $goodInfo['name'],
'icon' => $goodInfo['icon'],
'num' => $number,
'boxMoney' => $boxMoney,
'money' => $newMoney['money'],
'item' => $item,
'tableId' => $tableId,
'createdAt' => time(),
'uniacid' => $uniacid,
'groupId' => $result['groupId'] ?: '',
'groupName' => $groupName,
'attribute' => $result['attribute'],
'material' => $materJson ?: '',
'materialIds' => $ids ?: '',
'materialName' => $nameStr ?: '',
'materialMoney' => $materialMoney ?: 0.00,
'originalMoney'=>$money,
);
$re = Yii::$app->db->createCommand()->insert('{{%ybwm_shop_car}}', $data)->execute();
}
}else{
if($goodInfo['minNum']){
if($row['num']>$goodInfo['minNum']){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num' =>$row['num']-1], ['tableId'=>$tableId,'item'=>$item,'goodsId' =>$result['goodsId']])->execute();
}else{
$re=Yii::$app->db->createCommand()->delete('{{%ybwm_shop_car}}', ['tableId'=>$tableId,'item'=>$item,'goodsId' =>$result['goodsId']])->execute();
}
}else{
if($row['num']>1){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num' =>$row['num']-1], ['tableId'=>$tableId,'item'=>$item,'goodsId' =>$result['goodsId']])->execute();
}else{
$re=Yii::$app->db->createCommand()->delete('{{%ybwm_shop_car}}', ['tableId'=>$tableId,'item'=>$item,'goodsId' =>$result['goodsId']])->execute();
}
}
}
}else{
///////无规格/////////
$material=$result['material']?json_encode($result['material']):'';
$row=(new \yii\db\Query())
->from('{{%ybwm_shop_car}}')
->where(['tableId'=>$tableId,'item'=>$item,'goodsId' => $result['goodsId'],'storeId' => $result['storeId'], 'uniacid'=>$uniacid,'material'=>$material,'attribute'=>$result['attribute']])
->andWhere($userData)
->one();
//print_R(['goodsId' => $result['goodsId'],'storeId' => $result['storeId'], 'userId' => $userId,'uniacid'=>$uniacid,'material'=>$material,'attribute'=>$result['attribute']]);die;
$newMoney=Member::getDiscountByGood($userId,$result['goodsId'],$goodInfo['price'])['money'];//VIP原价
$activityPrice=Good::getGoodActivity($uniacid,$result['storeId'],$goodInfo['price'],$result['goodsId'],$goodsType);//商品活动价
$oldActivityPrice=$activityPrice['activityMoney'];
if($activityPrice['type']>0){
$activityPrice['activityMoney']=Member::getDiscountByGood($userId,$result['goodsId'],$activityPrice['activityMoney'])['money'];
}
if($result['type']==1){
if($row){
$number=1;
if($result['num']){
if($result['num']+$row['num']<$goodInfo['minNum']){
echo json_encode(['code' => 2, 'msg' => '起购数量不足'.$goodInfo['minNum']]);die;
}
}
}else{
$number=$goodInfo['minNum']?:1;
if($result['num']){
if($result['num']<$goodInfo['minNum']){
$result['num']=$goodInfo['minNum'];
// echo json_encode(['code' => 2, 'msg' => '起购数量不足'.$goodInfo['minNum']]);die;
}
}
}
if($result['num']){
$number=$result['num'];
}
if($row['num']+$number>$goodInfo['maxNum']&&$goodInfo['maxNum']>0){
echo json_encode(['code' => 2, 'msg' => '超出限购数量']);die;
}
if($row){
//购物车有数据
if($activityPrice['type']==1 || $activityPrice['type']==2 || $activityPrice['type']==3){
if($activityPrice['limitNum']!=0){
//每单限制
$discountNum=$activityPrice['limitNum']-$row['discountNum'];
if($discountNum>=$number){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountPrice'=>$activityPrice['activityMoney'],'discountNum' => $number+$row['discountNum'], 'num'=> $number+$row['num']], ['id' => $row['id']])->execute();
}else{
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountPrice'=>$activityPrice['activityMoney'],'discountNum' => $discountNum+$row['discountNum'], 'num'=> $number+$row['num']], ['id' => $row['id']])->execute();
}
}else{
//无限制
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountPrice'=>$activityPrice['activityMoney'],'discountNum' => $number+$row['discountNum'], 'num'=> $number+$row['num']], ['id' => $row['id']])->execute();
}
}
if($activityPrice['type']==4 AND $row['num']==1){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountPrice'=>$activityPrice['activityMoney'],'discountNum' => $number+$row['discountNum'], 'num'=> $number+$row['num']], ['id' => $row['id']])->execute();
}
if($activityPrice['type']==4 AND $row['num']>=2){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num'=>$number+$row['num']], ['id' => $row['id']])->execute();
}
if($activityPrice['type']==5){
if($activityPrice['limitNum']!=0 AND ($row['discountNum']+$number)>=$activityPrice['limitNum']){
//每单限制
$addNum=$activityPrice['limitNum']-$row['discountNum'];
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountPrice'=>$activityPrice['activityMoney'],'discountNum' => $activityPrice['limitNum'], 'num'=> $number+$row['num']+$addNum], ['id' => $row['id']])->execute();
}else{
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountPrice'=>$activityPrice['activityMoney'],'discountNum' => $number+$row['discountNum'], 'num'=> bcmul($number,2,0)+$row['num']], ['id' => $row['id']])->execute();
}
}
if($activityPrice['type']==0){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num'=>$number+$row['num']], ['id' => $row['id']])->execute();
}
}else{
$boxType = $takeOutSetData['boxType'];
if($boxType==1){
$boxMoney=$takeOutSetData['boxMoney'];
}else{
$boxMoney=$goodInfo['boxMoney'];
}
if ($result['material']) {
$materialData = array_column($result['material'], 'materialId');
$materData = (new \yii\db\Query())
->from('{{%ybwm_good_materia}}')
->where(['goodId' => $result['goodsId'], 'uniacid' => $uniacid])
->andWhere(['in', 'id', $materialData])
->all();
$materialMoney = array_sum(array_column($materData, 'SalesPrice'));
$nameStr = implode(',', array_column($materData, 'materialName'));
$materJson = json_encode($result['material']);
}
$ids=array_column($result['material'],'materialId');
if(count($ids)>1){
$ids=implode(',',$ids);
}else{
$ids=$ids[0];
}
if($activityPrice['type']==1 || $activityPrice['type']==2 || $activityPrice['type']==3){
if($activityPrice['limitNum']!=0 AND $activityPrice['limitNum']<$number){
$carNum=$number;
$discountNum=$activityPrice['limitNum'];
$discountPrice=$activityPrice['activityMoney'];
}else{
$carNum=$number;
$discountNum=$number;
$discountPrice=$activityPrice['activityMoney'];
}
}
if($activityPrice['type']==5){
if($activityPrice['limitNum']!=0 AND $activityPrice['limitNum']<$number){
$carNum=bcadd($number,$activityPrice['limitNum'],0);
$discountNum=$activityPrice['limitNum'];
$discountPrice=$activityPrice['activityMoney'];
}else{
$carNum=bcadd($number,$number,0);
$discountNum=$number;
$discountPrice=$activityPrice['activityMoney'];
}
}
if($activityPrice['type']==4){
if($number>=2){
$carNum=$number;
$discountNum=1;
$discountPrice=$activityPrice['activityMoney'];
}else{
$carNum=$number;
$discountNum=0;
$discountPrice=0;
}
}
if($activityPrice['type']==0){
$carNum=$number;
$discountNum=0;
$discountPrice=0;
}
$data = array(
'userId' => $userId,
'storeId' => $result['storeId'],
'goodsId' => $result['goodsId'],
'name' => $goodInfo['name'],
'icon' => $goodInfo['icon'],
'num' => $carNum,
'boxMoney' => $boxMoney,
'discountType' => $activityPrice['type'],
'discountId' => $activityPrice['id'],
'money' => $newMoney,
'discountPrice'=>$discountPrice,//活动商品单价
'discountNum'=>$discountNum,//活动商品数量
'item' => $item,
'tableId' => $tableId,
'createdAt' => time(),
'uniacid' => $uniacid,
'originalMoney'=>$goodInfo['price'],
'originalDiscountPrice'=>$oldActivityPrice,
'attribute' => $result['attribute'],
'material' => $materJson ?: '',
'materialIds' => $ids ?: '',
'materialName' => $nameStr ?: '',
'materialMoney' => $materialMoney ?: 0.00,
);
$re = Yii::$app->db->createCommand()->insert('{{%ybwm_shop_car}}', $data)->execute();
}
}else{
$updateData = ['tableId' => $tableId, 'userId' => $userId, 'storeId' => $result['storeId'], 'item' => $item, 'goodsId' => $result['goodsId']];
if($multiplayerMode==1) {
$updateData = ['tableId' => $tableId,'storeId' => $result['storeId'], 'item' => $item, 'goodsId' => $result['goodsId']];
}
if( ($goodInfo['minNum'] AND $row['num']>$goodInfo['minNum']) || (!$goodInfo['minNum'] AND $row['num']>1) ){
if($activityPrice['type']==1 || $activityPrice['type']==2 || $activityPrice['type']==3){
if($row['discountNum']>$activityPrice['limitNum']&&$activityPrice['limitNum']!=0){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountNum'=>$activityPrice['limitNum'],'num' =>$row['num']-1], $updateData)->execute();
}else{
if($row['num']==$row['discountNum']){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountNum'=>$row['discountNum']-1,'num' =>$row['num']-1], $updateData)->execute();
}else{
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num' =>$row['num']-1], $updateData)->execute();
}
}
}
if($activityPrice['type']==4){
if($row['num']==2){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountNum'=>$row['discountNum']-1,'num' =>$row['num']-1], $updateData)->execute();
}else{
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num' =>$row['num']-1], $updateData)->execute();
}
}
if($activityPrice['type']==5){
$originalNum=$row['num']-$row['discountNum'];
if($originalNum==1){
$re=Yii::$app->db->createCommand()->delete('{{%ybwm_shop_car}}', $updateData)->execute();
}else{
if ($originalNum>$activityPrice['limitNum'] AND $activityPrice['limitNum']>0) {
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num' => $row['num'] - 1], $updateData)->execute();
} else {
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['discountNum' => $row['discountNum'] - 1, 'num' => $row['num'] - 2], $updateData)->execute();
}
}
}
if($activityPrice['type']==0){
$re = Yii::$app->db->createCommand()->update('{{%ybwm_shop_car}}', ['num' =>$row['num']-1], $updateData)->execute();
}
}else{
$re=Yii::$app->db->createCommand()->delete('{{%ybwm_shop_car}}', $updateData)->execute();
}
}
}
}
$data = (new \yii\db\Query())
->select('(num-discountNum) as originalNum,(discountPrice+materialMoney) as discountPrice,discountNum,discountType,id,(originalMoney*(num-discountNum)+originalDiscountPrice*discountNum+materialMoney*num) as originalMoney,name,icon,(money+materialMoney) as money,attribute,goodsId,groupId,groupName,material,materialIds,materialMoney,materialName,num,boxMoney,materialMoney,(money*(num-discountNum)+discountPrice*discountNum+materialMoney*num) as totalMoney')
->from('{{%ybwm_shop_car}}')
->where(['tableId'=>$tableId,'item'=>$item,'uniacid' => $uniacid, 'storeId' => $result['storeId']])
->andWhere($userData)
->all();
$materTotal = 0;
$goodTotal = 0;
$boxMoneyTotal = 0;
$originalMoney=0;
foreach ($data as $v) {
$goodTotal += $v['totalMoney'];
$originalMoney+=$v['originalMoney'];
$materTotal +=bcmul($v['materialMoney'],$v['num'],2);
$boxMoneyTotal +=bcmul($v['boxMoney'],$v['num'],2);
}
$boxType = $takeOutSetData['boxType'];
if ($boxType == 1) {
$boxMoneyTotal = $takeOutSetData['boxMoney'];
}
$reduce=Order::reduce($result['storeId'],$userId,$goodTotal,$item);
$currency=Config::getSystemSet('currency',$this->wqData['uniacid']);
$actGoods = (new \yii\db\Query())
->from('{{%ybwm_shop_car}}')
->where(['tableId'=>$tableId,'item'=>$item,'uniacid' => $uniacid, 'storeId' => $result['storeId']])
->andWhere($userData)
->andWhere('discountType!=0')
->one();
if(in_array('1',$currency['goodsActivityRule']) AND $actGoods){
$reduce=[
'money'=>0,
'id'=>0
];
}
if($item==2){
$boxMoneyTotal = 0;
}
$newData = array(
'vipDiscount'=>bcsub($originalMoney,$goodTotal,2)?:0,
'boxMoney' => round($boxMoneyTotal,2),
'data' => $data,
'price' => bcadd(bcsub($goodTotal,$reduce['money'],2),$boxMoneyTotal,2),
'oldPrice' => bcadd($goodTotal , $boxMoneyTotal,2),
'reduce'=>$reduce['money']
);
}
$count=(new \yii\db\Query())
->from('{{%ybwm_shop_car}}')
->where(['tableId'=>$tableId,'item'=>$item,'uniacid' => $uniacid, 'goodsId'=>$result['goodsId'],'storeId' => $result['storeId']])
->andWhere($userData)
->sum('num')?:0;
if ($re) {
echo json_encode(['code' => 1, 'msg' => '成功', 'data' => $newData, 'count' =>$count]);
die;
} else {
echo json_encode(['code' => 2, 'msg' => '数据异常']);
}
}
//获取购物车内商品列表
public function actionGetCarList(){
$request = Yii::$app->request;
$result=axios_request();
$item=$result['item']?:1;
$tableId=$result['tableId']?:0;
if($request->isGet){
$userId=$this->wqData['userId'];
$uniacid=$this->wqData['uniacid'];
$storeModeSet = Config::getStoreSet('instoreSet', $result['storeId']);
$multiplayerMode = $storeModeSet['orderMode'];
if($multiplayerMode==2 || $item!=2){
//拼桌
$data=(new \yii\db\Query())
->select('(num-discountNum) as originalNum,discountType,(discountPrice+materialMoney) as discountPrice,discountNum,id,name,icon,(money+materialMoney) as money,attribute,goodsId,groupId,groupName,material,materialIds,materialMoney,materialName,num,boxMoney,materialMoney,(money*(num-discountNum)+discountPrice*discountNum+materialMoney*num) as totalMoney,(originalMoney*(num-discountNum)+originalDiscountPrice*discountNum+materialMoney*num) as originalMoney')
->from('{{%ybwm_shop_car}}')
->where(['tableId'=>$tableId,'item'=>$item,'uniacid'=>$uniacid,'userId'=>$userId,'storeId'=>$result['storeId']])
->all();
}else{
//多人
$data=(new \yii\db\Query())
->select('(num-discountNum) as originalNum,discountType,(discountPrice+materialMoney) as discountPrice,discountNum,id,name,icon,(money+materialMoney) as money,attribute,goodsId,groupId,groupName,material,materialIds,materialMoney,materialName,num,boxMoney,materialMoney,(money*(num-discountNum)+discountPrice*discountNum+materialMoney*num) as totalMoney,(originalMoney*(num-discountNum)+originalDiscountPrice*discountNum+materialMoney*num) as originalMoney')
->from('{{%ybwm_shop_car}}')
->where(['tableId'=>$tableId,'item'=>$item,'uniacid'=>$uniacid,'storeId'=>$result['storeId']])
->all();
}
$goodTotal=0;
$boxMoneyTotal=0;
$originalMoney=0;
foreach ($data as $v){
$goodTotal+=$v['totalMoney'];
$originalMoney+=$v['originalMoney'];
$boxMoneyTotal=bcadd($boxMoneyTotal,bcmul($v['boxMoney'],$v['num'],2),2);
}
if($item==1){
$takeOutSetData=Config::getStoreSet('takeOutSet',$result['storeId']);
}
if($item==3){
$takeOutSetData=Config::getStoreSet('fastSet',$result['storeId']);
}
$boxType=$takeOutSetData['boxType'];
if($boxType==1){
$boxMoneyTotal=$takeOutSetData['boxMoney'];
}
if($item==2){
$boxMoneyTotal=0;
}
$reduce=Order::reduce($result['storeId'],$userId,$goodTotal,$item);
$newData=array(
'vipDiscount'=>bcsub($originalMoney,$goodTotal,2)?:0,
'boxMoney'=>$boxMoneyTotal,
'data'=>$data,
'price' => bcadd(bcsub($goodTotal,$reduce['money'],2) ,$boxMoneyTotal,2),
'oldPrice' => bcadd($goodTotal,$boxMoneyTotal,2),
'reduce'=>$reduce['money']
);
echo json_encode(['code'=>1,'msg'=>'成功','data'=>$newData]);die;
}else{
echo json_encode(['code'=>2,'msg'=>'购物车内未添加商品']);
}
}
//$re=Yii::$app->db->createCommand()->delete('{{%ybwm_shop_car}}',['id'=>$row['id']])->execute();
//清空购物车
public function actionDelCar(){
$request = Yii::$app->request;
if($request->isGet){
return $this->result(2, '请求异常');
}
$result=axios_request();
$tableId=$result['tableId']?:0;
$item=$result['item']?:1;
$storeModeSet = Config::getStoreSet('instoreSet', $result['storeId']);
$multiplayerMode = $storeModeSet['orderMode'];
if($multiplayerMode==2 || !$tableId) {
$res = Yii::$app->db->createCommand()->delete('{{%ybwm_shop_car}}', ['tableId' => $tableId, 'item' => $item, 'userId' => $this->wqData['userId'], 'storeId' => $result['storeId']])->execute();
}else{
$res = Yii::$app->db->createCommand()->delete('{{%ybwm_shop_car}}', ['tableId' => $tableId, 'item' => $item, 'storeId' => $result['storeId']])->execute();
}
if($res){
return $this->result(1, '成功');
}else{
return $this->result(2, '失败');
}
}
//外卖下订单
//外卖下订单
public function actionSaveOrder() {
$request = Yii::$app->request;
$result=axios_request();
$item=1;
$userId=$this->wqData['userId'];
$now=time();
$uniacid=$this->wqData['uniacid'];
if($request->isGet){
return $this->result(2, '请求异常');
}
$bind_data = $this->isBindPayChannel($result['storeId'],$uniacid,2);
if(!$bind_data){
return $this->result(2, '请求异常');
}
//判断单点时不配送
$carGoodsIdData=(new \yii\db\Query())
->select('goodsId')
->from('{{%ybwm_shop_car}}')
->where('tableId=:tableId AND userId=:userId AND storeId=:storeId AND item=:item',[':tableId'=>0,':userId'=>$userId,':item'=>$item,'storeId'=>$result['storeId']])
->groupBy('goodsId')
->all();
if(empty($carGoodsIdData)){
return $this->result(2, '请求异常,请重新下单!');
}
$carGoodsIds = array_column($carGoodsIdData,'goodsId');
$carGoodsIdsStr = implode(',',$carGoodsIds);
$carData=(new \yii\db\Query())
->from('{{%ybwm_shop_car}}')
->where('tableId=:tableId AND userId=:userId AND storeId=:storeId AND item=:item',[':tableId'=>0,':userId'=>$userId,':item'=>$item,'storeId'=>$result['storeId']])
->andWhere("goodsId in ({$carGoodsIdsStr})")
->all();
$storeInfo=(new \yii\db\Query())
->from('{{%ybwm_store}}')
->where('id=:id',[':id'=>$result['storeId']])
->one();
foreach ($carData as $v){
if($storeInfo['isMain']==1||$storeInfo['goodsModel']==3){
$goodsInfo=(new \yii\db\Query())->from('{{%ybwm_core_goods}}')->select('deleteAt,name,stock,price,display')->where(['id'=>$v['goodsId']])->one();
if($v['groupId']){
$stock=(new \yii\db\Query())
->from('{{%ybwm_good_specs}}')
->where(['id' => $v['groupId']])
->one()['SalesStock'];
}else{
$stock=$goodsInfo['stock'];
}
}else{
$goodsInfo=(new \yii\db\Query())->from('{{%ybwm_store_goods}} a')
->select('b.name,a.stock,a.price,b.deleteAt,a.display,a.data')
->leftJoin('{{%ybwm_core_goods}} b','a.goodsId=b.id')
->where(['a.goodsId'=>$v['goodsId'],'a.storeId'=>$result['storeId']])->one();
if($v['groupId']){
$specsList=json_decode($goodsInfo['data'],true)['specs'];
foreach ($specsList as $vo){
if($v['groupId']==$vo['id']){
$stock=$vo['SalesStock'];
}
}
}else{
$stock=$goodsInfo['stock'];
}
}
$count=$v['num'];
if($count>$stock){
echo json_encode(['code' => 2, 'msg' => '库存不足']);die;
}
// if($goodsInfo['stock']<1){
// return $this->result(2, '商品'.$goodsInfo['name'].'库存不足');
// }
if($goodsInfo['display']<>1){
return $this->result(2, '商品'.$goodsInfo['name'].'已下架');
}
if($goodsInfo['deleteAt']>0){
return $this->result(2, '商品'.$goodsInfo['name'].'已删除');
}
$checkPice = Good::checkPriceChange($v['id']);
if($checkPice['state'] == false){
return $this->result(2, $checkPice['message']);
}
}
if(count($carData)==1){
$goodsInfo=(new \yii\db\Query())->from('{{%ybwm_core_goods}}')->where(['id'=>$carData[0]['goodsId']])->one();
if($goodsInfo['aloneType']==1){
return $this->result(2, '单点时不配送');
}
}
$user=(new \yii\db\Query())
->from('{{%ybwm_member}}')
->where('id=:id',[':id'=>$userId])->one();
if ($user['isBlack'] == 1) {
return $this->result(2, '账号异常,请联系管理员!!!');
}
$userAddress=(new \yii\db\Query())
->from('{{%ybwm_user_address}}')
->where('id=:id',[':id'=>$result['userAddId']])->one();
if (!$userAddress AND $result['deliveryMode'] != 1) {
return $this->result(2, '用户地址有误');
}
$appType = $this->wqData['appType'];
$moneyArr=Order::getCarMoney($userId,$result['storeId']);
$originalMoney=$moneyArr['originalMoney'];
$data['vipDiscount']=bcsub($originalMoney,$moneyArr['goodsMoney'],2);//会员优惠金额
$data['originMoney'] = $moneyArr['goodsMoney']; //订单商品总价(不包含餐盒费)
//echo "商品总价".$data['originMoney'];
$takeOutSet=Config::getStoreSet('takeOutSet',$result['storeId']);
$takeOutSet['boxType']=$takeOutSet['boxType']?:1;
if($takeOutSet['boxType']==1){
$data['boxMoney'] = $takeOutSet['boxMoney']?:0; //订单餐盒费
}else{
$data['boxMoney'] = $moneyArr['boxMoney']?:0; //订单餐盒费
}
//echo "餐盒费".$data['boxMoney'];
$data['deliveryPreferential']=0;
if ($result['deliveryMode'] != 1) {
if(!$result['serviceTime']){
return $this->result(2, '送达时间不能为空');
}
$deliveryMoney = Order::getDeliveryMoney($userAddress['lat'],$userAddress['lng'],$result['storeId'],bcadd($data['originMoney'],$data['boxMoney'],2));
if ($deliveryMoney ===false) {
return $this->result(2, '不在配送范围内');
}
$data['deliveryMoney'] = $deliveryMoney['money']?:0; //订单运费
$data['deliveryPreferential'] = $deliveryMoney['discount']?:0; //配送费优惠
}else{
if(!$result['serviceTime']){
return $this->result(2, '自取时间不能为空');
}
}
//echo "配送费".$data['deliveryMoney'];
$data['num'] = $moneyArr['goodsNum']; //购买商品数量
$currency=Config::getSystemSet('currency',$this->wqData['uniacid']);
$reduce=Order::reduce($result['storeId'],$this->wqData['userId'],$data['originMoney']);//满减
$actGoods = (new \yii\db\Query())
->from('{{%ybwm_shop_car}}')
->where('userId=:userId AND storeId=:storeId AND item=:item AND tableId=0 AND discountType!=0', [':item'=>$item,':userId' => $userId, ':storeId' => $result['storeId']])->one();
if(in_array('1',$currency['goodsActivityRule']) AND $actGoods){
$reduce=[
'money'=>0,
'id'=>0
];
}
$data['preferentialMoney']=$reduce['money']?:0;
$data['preferentialId']=$reduce['id']?:0;
$moneyArr['goodsMoney']=bcsub($moneyArr['goodsMoney'],$reduce['money'],2);
// echo "减去满减之后的钱".$moneyArr['goodsMoney'];
$data['newMoney']=Order::newReduction($this->wqData['userId'],$result['storeId'])?:0;//新客
if($data['newMoney']>0){
$moneyArr['goodsMoney']=bcsub($moneyArr['goodsMoney'],$data['newMoney'],2)<=0?0.01:bcsub($moneyArr['goodsMoney'],$data['newMoney'],2);
//echo "减去新客之后的钱".$moneyArr['goodsMoney'];
}
$data['platformCouponPreferential']=0;
$data['couponPreferential']=0;
if($result['couponId']){
$data['couponId']=json_encode($result['couponId']);
if($result['couponId']['store']){
$storeCoupon=(new \yii\db\Query())
->select('type,money,discount,goodsType,goodsArr')
->from('{{%ybwm_user_coupon}}')
->where('id=:id AND state=2',[':id'=>$result['couponId']['store']])->one();
if(!$storeCoupon){
return $this->result(2, '优惠券不存在或已使用');
}
if($storeCoupon['type']==1){
$data['couponPreferential']=$storeCoupon['money'];
$moneyArr['goodsMoney']=bcsub($moneyArr['goodsMoney'],$storeCoupon['money'],2)>0?bcsub($moneyArr['goodsMoney'],$storeCoupon['money'],2):0.01;
}else{
// $data['couponPreferential']=bcsub($moneyArr['goodsMoney'],bcmul($storeCoupon['discount']/10,$moneyArr['goodsMoney'],2),2);
$data['couponPreferential']=Member::couponMoney($userId,$result['storeId'],$result['couponId']['store']);
$moneyArr['goodsMoney']=bcsub($moneyArr['goodsMoney'],$data['couponPreferential'],2)>0?bcsub($moneyArr['goodsMoney'],$data['couponPreferential'],2):0.01;
}
}
if($result['couponId']['platform']){
$platformCoupon=(new \yii\db\Query())
->select('type,money,discount,goodsType,goodsArr,subsidy')
->from('{{%ybwm_user_coupon}}')
->where('id=:id AND state=2',[':id'=>$result['couponId']['platform']])->one();
if(!$platformCoupon){
return $this->result(2, '优惠券不存在或已使用');
}
if($platformCoupon['subsidy']){
$data['subsidy']=$platformCoupon['subsidy'];//补贴
}
if($platformCoupon['type']==1){
$data['platformCouponPreferential']=$platformCoupon['money'];
$moneyArr['goodsMoney']=bcsub($moneyArr['goodsMoney'],$platformCoupon['money'],2)>0?bcsub($moneyArr['goodsMoney'],$platformCoupon['money'],2):0.01;
}else{
//$data['platformCouponPreferential']=bcsub($moneyArr['goodsMoney'],bcmul($platformCoupon['discount']/10,$moneyArr['goodsMoney'],2),2);
$data['platformCouponPreferential']=Member::couponMoney($userId,$result['storeId'],$result['couponId']['platform']);
$moneyArr['goodsMoney']=bcsub($moneyArr['goodsMoney'],$data['platformCouponPreferential'],2)>0?bcsub($moneyArr['goodsMoney'],$data['platformCouponPreferential'],2):0.01;
}
}
//echo "减去优惠券之后的钱".$moneyArr['goodsMoney'];
}
if($result['changeId']){
//换购
$change=(new \yii\db\Query())
->from('{{%ybwm_change_pay}}')
->where('id=:id',[':id'=>$result['changeId']])->one();
$changeGoods=json_decode($change['goodsArr'],true);
$changeMoney=0;
$changeData=[];
for($i=0;$i<count($changeGoods);$i++){
if($result['changeGoodsId']==$changeGoods[$i]['id']){
$changeGoods[$i]['stock']=$changeGoods[$i]['stock']-1;
$changeMoney=$changeGoods[$i]['money'];
$changeData['money']=$changeGoods[$i]['money'];
$changeData['goodsId']=$changeGoods[$i]['id'];
$changeData['attribute']='';
$changeData['data']='';
$changeData['material']='';
$changeData['name']=$changeGoods[$i]['name'];
$changeData['icon']=$changeGoods[$i]['icon'];
$changeData['num']=1;
$changeData['item']=$item;
$changeData['storeId']=$result['storeId'];
$changeData['uniacid']=$uniacid;
$changeData['createdAt']=time();
$changeData['isChange']=1;
break;
}
}
$data['originMoney']=bcadd($changeMoney,$data['originMoney'],2);//加完换购的钱
$moneyArr['goodsMoney']=bcadd($moneyArr['goodsMoney'],$changeMoney,2);
$data['changeId']=$result['changeId'];
}
// echo $moneyArr['goodsMoney'];die;
if($result['isOut']==1 AND $result['deliveryMode']==1){
$data['money']=bcadd($moneyArr['goodsMoney'],$data['deliveryMoney'],2);//订单支付金额
$data['boxMoney']=0;
}else{
$data['money']=bcadd(bcadd($moneyArr['goodsMoney'],$data['boxMoney'],2),$data['deliveryMoney'],2);//订单支付金额
}
//下单返红包
$grant=(new \yii\db\Query())
->from('{{%ybwm_order_grant_coupon}}')
->where('uniacid=:uniacid AND deleteAt=0 AND display=1 AND startTime<=:startTime AND endTime>:endTime AND orderMoney<=:orderMoney',[':orderMoney'=>$data['money'],':startTime'=>$now,':endTime'=>$now,':uniacid'=>$uniacid])
->andWhere([
'or',
['and',['storeType'=>1,'storeId'=>$result['storeId']]],
['storeType'=>2],
['and',['storeType'=>3],['like','storeArr',$result['storeId']]]
])->one();
if($grant){
$startTime=strtotime(date("Y-m-d")." 00:00:00");
$endTime=strtotime(date("Y-m-d")." 23:59:59");
$grantCount=(new \yii\db\Query())
->from('{{%ybwm_user_coupon}}')
->where('receiveType=4 AND couponId=:couponId AND createdAt>=:startTime AND createdAt<=:endTime',[':startTime'=>$startTime,':endTime'=>$endTime,':couponId'=>$grant['id']])
->count();
$userGrantCount=(new \yii\db\Query())
->from('{{%ybwm_user_coupon}}')
->where('userId=:userId AND receiveType=4 AND couponId=:couponId AND createdAt>=:startTime AND createdAt<=:endTime',[':startTime'=>$startTime,':endTime'=>$endTime,':userId'=>$userId,':couponId'=>$grant['id']])
->count();
if($grantCount<$grant['grantNum'] AND ($grant['limitType']==1 or $grant['maxNum']>$userGrantCount)){
$data['grantCouponId'] = $grant['id'];
$data['grantCouponName'] = $grant['name'];
}
}
$give=Order::give($result['storeId'],$data['money'],1);
$data['giveName']=$give?:"";
//echo "最终金额".$data['money'];die;
$data['origin'] = $appType;
$data['serviceAt'] = $result['serviceAt'];
$data['appointment'] = $result['appointment'] ?: 2;
$data['serviceTime'] = strtotime($result['serviceTime']);
$data['outTradeNo'] = '3409' . date("YmdHis") . randomAESKey(6);
$data['storeId'] = $result['storeId'];
$data['receiveCode'] = randomAESKey(4);
$data['pickCode'] = randomAESKey(4);
if ($result['deliveryMode'] == 1) {
$data['receivedTel'] = $result['userTel'];
$data['deliveryMode'] = 10;
} else {
$data['area'] = $userAddress['area'];
$data['receivedName'] = $userAddress['userName'];
$data['receivedAddress'] = $userAddress['address'] . $userAddress['details']; //收货地址
$data['receivedTel'] = $userAddress['userTel'];
$data['sex'] = $userAddress['sex'];
$storeSet = Config::getStoreSet('deliveryMode', $result['storeId']);
$data['deliveryMode'] = $storeSet['first']?:1;
}
$data['isOut'] = $result['isOut'];
$data['lat'] = $userAddress['lat'];
$data['lng'] = $userAddress['lng'];
$data['userNote'] = $result['userNote'];
$data['userDeleteAt'] = 0;
$data['userId'] = $userId;
$data['state'] = 1;
$data['uniacid'] = $uniacid;
$data['createdAt'] = $now;
// print_R($data);die;
if(!$data['originMoney']){
return $this->result(2, '数据异常');
}
$transaction = Yii::$app->db->beginTransaction(); //开始事务
try {
Yii::$app->db->createCommand()->insert('{{%ybwm_takeout_order}}', $data)->execute();
$orderId = Yii::$app->db->getLastInsertID();
$arr = (new \yii\db\Query())
->from('{{%ybwm_shop_car}}')
->where('userId=:userId AND storeId=:storeId AND item=:item AND tableId=0', [':item'=>$item,':userId' => $userId, ':storeId' => $result['storeId']])->all();
for ($j = 0; $j < count($arr); $j++) {
$orderGood = [];
$discountOrderGood = [];
$discountNum=$arr[$j]['discountNum'];//活动商品
$originalNum=$arr[$j]['num']-$arr[$j]['discountNum'];//原价商品
if($discountNum){
$discountOrderGood['groupId'] = $arr[$j]['groupId']?:0;
$discountOrderGood['goodsId'] = $arr[$j]['goodsId'];
$discountOrderGood['attribute'] = $arr[$j]['attribute']?:'';
$discountOrderGood['data'] = $arr[$j]['groupName']?:'';
$discountOrderGood['material'] = $arr[$j]['materialName']?:'';
$discountOrderGood['orderId'] = $orderId;
$discountOrderGood['name'] = $arr[$j]['name'];
$discountOrderGood['num'] = $discountNum;
$discountOrderGood['icon'] = $arr[$j]['icon'];
$discountOrderGood['storeId'] = $result['storeId'];
$discountOrderGood['uniacid'] = $uniacid;
$discountOrderGood['createdAt'] = $now;
$discountOrderGood['item'] = $item;
$discountOrderGood['isActivity'] = $arr[$j]['discountType']?:0;
$discountOrderGood['money'] = $arr[$j]['discountPrice'];
$discountOrderGoodsRes=Yii::$app->db->createCommand()->insert('{{%ybwm_order_goods}}', $discountOrderGood)->execute();
if(!$discountOrderGoodsRes){
$transaction->rollBack();//事务回滚
return $this->result(2, '下单失败','订单商品表插入失败');
}
$comboGoodsArr=(new \yii\db\Query())->from('{{%ybwm_core_goods}}')->select('comboGoodsArr')->where(['id'=>$arr[$j]['goodsId']])->one();
if($comboGoodsArr = json_decode($comboGoodsArr['comboGoodsArr'],true)){
foreach ($comboGoodsArr as $v){
$discountOrderGoodOne['groupId'] = 0;
$discountOrderGoodOne['goodsId'] = $v['id'];
$discountOrderGoodOne['attribute'] = '';
$discountOrderGoodOne['data'] = '';
$discountOrderGoodOne['material'] = '';
$discountOrderGoodOne['orderId'] = $orderId;
$discountOrderGoodOne['name'] = $v['name'];
$discountOrderGoodOne['num'] = $v['num'];
$discountOrderGoodOne['icon'] = $v['icon'];
$discountOrderGoodOne['storeId'] = $v['storeId'];
$discountOrderGoodOne['uniacid'] = $uniacid;
$discountOrderGoodOne['createdAt'] = $now;
$discountOrderGoodOne['item'] = $item;
$discountOrderGoodOne['isActivity'] = 0;
$discountOrderGoodOne['money'] = 0;
$discountOrderGoodsResOne=Yii::$app->db->createCommand()->insert('{{%ybwm_order_goods}}', $discountOrderGoodOne)->execute();
if(!$discountOrderGoodsResOne){
$transaction->rollBack();//事务回滚
return $this->result(2, '下单失败','订单商品表插入失败');
}
}
}
}
if($originalNum){
$orderGood['groupId'] = $arr[$j]['groupId']?:0;
$orderGood['goodsId'] = $arr[$j]['goodsId'];
$orderGood['attribute'] = $arr[$j]['attribute']?:'';
$orderGood['data'] = $arr[$j]['groupName']?:'';
$orderGood['material'] = $arr[$j]['materialName']?:'';
$orderGood['orderId'] = $orderId;
$orderGood['name'] = $arr[$j]['name'];
$orderGood['num'] = $originalNum;
$orderGood['icon'] = $arr[$j]['icon'];
$orderGood['storeId'] = $result['storeId'];
$orderGood['uniacid'] = $uniacid;
$orderGood['createdAt'] = $now;
$orderGood['item'] = $item;
$orderGood['money'] = $arr[$j]['money'];
$orderGoodsRes=Yii::$app->db->createCommand()->insert('{{%ybwm_order_goods}}', $orderGood)->execute();
if(!$orderGoodsRes){
$transaction->rollBack();//事务回滚
return $this->result(2, '下单失败','订单商品表插入失败');
}
$comboGoodsArr=(new \yii\db\Query())->from('{{%ybwm_core_goods}}')->select('comboGoodsArr')->where(['id'=>$arr[$j]['goodsId']])->one();
if($comboGoodsArr = json_decode($comboGoodsArr['comboGoodsArr'],true)){
foreach ($comboGoodsArr as $v){
$discountOrderGoodOne['groupId'] = 0;
$discountOrderGoodOne['goodsId'] = $v['id'];
$discountOrderGoodOne['attribute'] = '';
$discountOrderGoodOne['data'] = '';
$discountOrderGoodOne['material'] = '';
$discountOrderGoodOne['orderId'] = $orderId;
$discountOrderGoodOne['name'] = $v['name'];
$discountOrderGoodOne['num'] = $v['num'];
$discountOrderGoodOne['icon'] = $v['icon'];
$discountOrderGoodOne['storeId'] = $v['storeId'];
$discountOrderGoodOne['uniacid'] = $uniacid;
$discountOrderGoodOne['createdAt'] = $now;
$discountOrderGoodOne['item'] = $item;
$discountOrderGoodOne['isActivity'] = 0;
$discountOrderGoodOne['money'] = 0;
$discountOrderGoodsResOne=Yii::$app->db->createCommand()->insert('{{%ybwm_order_goods}}', $discountOrderGoodOne)->execute();
if(!$discountOrderGoodsResOne){
$transaction->rollBack();//事务回滚
return $this->result(2, '下单失败','订单商品表插入失败');
}
}
}
}
}
//换购
if($changeData){
$changeData['orderId']= $orderId;
$changeOrderGoods=Yii::$app->db->createCommand()->insert('{{%ybwm_order_goods}}', $changeData)->execute();
Yii::$app->db->createCommand()->update('{{%ybwm_change_pay}}', ['goodsArr'=>json_encode($changeGoods)],['id'=>$result['changeId']])->execute();
if(!$changeOrderGoods){
$transaction->rollBack();//事务回滚
return $this->result(2, '下单失败','换购商品插入失败');
}
}
if($result['couponId']){
if($result['couponId']['store']){
$useCoupon = Yii::$app->db->createCommand()->update('{{%ybwm_user_coupon}}', ['state'=>1,'useTime'=>$now], 'id=:id', ['id' =>$result['couponId']['store']])->execute();
if(!$useCoupon){
$transaction->rollBack();//事务回滚
return $this->result(2, '下单失败','优惠券修改失败');
}
}
if($result['couponId']['platform']){
$platformUseCoupon = Yii::$app->db->createCommand()->update('{{%ybwm_user_coupon}}', ['state'=>1,'useTime'=>$now], 'id=:id', ['id' =>$result['couponId']['platform']])->execute();
if(!$platformUseCoupon){
$transaction->rollBack();//事务回滚
return $this->result(2, '下单失败','优惠券修改失败');
}
}
}
Yii::$app->db->createCommand()->delete('{{%ybwm_shop_car}}',['item'=>$item,'userId'=>$this->wqData['userId'],'storeId'=>$result['storeId']])->execute();
$transaction->commit();//提交事务
}catch(Exception $e){// 如果有一条查询失败,则会抛出异常
file_put_contents('./error.txt',$e->getMessage());
$transaction->rollBack();//事务回滚
return $this->result(2, '下单失败','下单失败');
}
Order::reduceStock($orderId);
// WeChatPay::reporting($orderId);
return $this->result(1, '下单成功', $orderId);
}
//商家取餐时间
public function actionStoreTime(){
$result=axios_request();
$deliveryTime=Order::productionTime($result['storeId']);
if($result['userAddId']){
$userAddress=(new \yii\db\Query())
->from('{{%ybwm_user_address}}')
->where('id=:id',[':id'=>$result['userAddId']])->one();
$lat=$userAddress['lat'];
$lng=$userAddress['lng'];
$deliveryTime=Order::getDeliveryTime($lat,$lng,$result['storeId']);//配送时间
}
$weekarray = array("周日", "周一", "周二", "周三", "周四", "周五", "周六");
$storeSet=Config::getStoreSet("takeOutSet",$result['storeId']);
$timeType=$storeSet['timeType'];//1.24小时2.自定义时间
$timeArr=$storeSet['timeArr'];//时间数组
$advance=Config::getStoreSet("advanceSet",$result['storeId']);//预约设置
$advanceStartTime=$advance['startTime']?:0;//预定开始时间
$isOpen=Store::getStoreOutBusiness($result['storeId']);
$dayArr[]=array(
'dayTitle'=>"今天(".$weekarray[date("w")].")",
'day'=>date("Y-m-d"),
);
if(!in_array($result['orderType'],$advance['open'])){
$timeData[]=array(
'timeTitle'=>'现在下单'.date("H:i",time()+$deliveryTime*60),
'time'=>date("Y-m-d H:i",time()+$deliveryTime*60),
);
$dayArr[0]['time']=$timeData;
return $this->result(1,'成功',$dayArr);
}
$day=$advance['day']+$advanceStartTime;//提前预约时间
$interval=$advance['interval'];//间隔时间
// $restOpen=$advance['restOpen'];//休息时间约定1开启2关闭
for($i=1;$i<=$day;$i++){
if($i==1){
$dayArr[]=array(
'dayTitle'=>"明天(".$weekarray[date("w",strtotime("+1 day"))].")",
'day'=>date("Y-m-d",strtotime("+1 day")),
);
}else{
$dayArr[]=array(
'dayTitle'=>date("m-d",strtotime("+".$i." day"))."(".$weekarray[date("w",strtotime("+".$i." day"))].")",
'day'=>date("Y-m-d",strtotime("+".$i." day")),
);
}
}
if($timeType==1){
for($j=0;$j<count($dayArr);$j++){
$startTime=strtotime(date("Y-m-d 00:00:00"))+86400*$j;
$endTime=strtotime(date("Y-m-d 23:59:59"))+86400*$j;
$second = floor(( $endTime- $startTime) % 86400 / 60); //相差多少分钟
$timeNum = ceil($second / $interval);
$timeData=[];
if($j==0){
$timeData[]=array(
'timeTitle'=>'现在下单'.date("H:i",time()+$deliveryTime*60),
'time'=>date("Y-m-d H:i",time()+$deliveryTime*60),
);
}
for($t=1;$t<=$timeNum;$t++){
$time=$startTime+$t*$interval*60;
if($time>strtotime($timeData[0]['time']) AND $time<$endTime){
$timeData[]=array(
'timeTitle'=>date("H:i",$time),
'time'=>date("Y-m-d H:i",$time),
);
}
}
$dayArr[$j]['time']=$timeData;
}
}else{
for($j=0;$j<count($dayArr);$j++){
$timeData=[];
$now=strtotime(date("Y-m-d H:i",time()+$deliveryTime*60));
if($j==0 AND $isOpen==1){
$timeData[]=array(
'timeTitle'=>'现在下单'.date("H:i",time()+$deliveryTime*60),
'time'=>date("Y-m-d H:i",time()+$deliveryTime*60),
);
}
for($a=0;$a<count($timeArr);$a++){
$startTime=strtotime(date("Y-m-d ".$timeArr[$a]['startTime']))+86400*$j;
if($timeArr[$a]['ciri']===true){
$endTime=strtotime(date("Y-m-d ".$timeArr[$a]['endTime']))+86400+86400*$j;
}else{
$endTime=strtotime(date("Y-m-d ".$timeArr[$a]['endTime']))+86400*$j;
}
$second = floor(( $endTime- $startTime) % 86400 / 60); //相差多少分钟
$timeNum = ceil($second / $interval);
for($t=1;$t<=$timeNum;$t++){
$time=$startTime+$t*$interval*60;
if($time>$now AND $time<$endTime){
$timeData[]=array(
'timeTitle'=>date("H:i",$time),
'time'=>date("Y-m-d H:i",$time),
);
}
}
}
$dayArr[$j]['time']=$timeData;
}
}
if(!$dayArr[0]['time']){
unset($dayArr[0]);
}
if($advanceStartTime==1){
unset($dayArr[0]);
}
if($advanceStartTime==2){
unset($dayArr[0]);
unset($dayArr[1]);
}
// for($k=0;$k<=$startTime;$k++){
// unset($dayArr[$k]);
// }
$dayArr=array_values($dayArr);
return $this->result(1,'成功',$dayArr);
}
//订单设置集合
public function actionOrderSet(){
$set=Config::getSystemSet('currency',$this->wqData['uniacid']);
$fast=Config::getSystemSet('instoreSet',$this->wqData['uniacid']);
$set['instore']=$fast;
$set['confirmSwitch']=$set['confirmSwitch']?:2;
return $this->result(1,'成功',$set);
}
//我的订单
public function actionOrderList(){
$result=axios_request();
$page=$result['page']?:1;
$size=$result['size']?:10;
$table=(new \yii\db\Query())
->select(['a.id','a.appointment','a.selfCode', 'a.takeNo','a.money','a.num','a.deliveryMode','a.payMode','a.createdAt','a.state','a.userNote','s.name as storeName','s.icon as storeIcon','s.storeTel','a.storeId'])
->from('{{%ybwm_takeout_order}} as a')
->join('LEFT JOIN', '{{%ybwm_store}} as s', 's.id = a.storeId')
->where('a.uniacid=:uniacid AND a.deleteAt=0 AND a.userDeleteAt=0 AND a.userId=:userId',[':uniacid'=>$this->wqData['uniacid'],':userId'=>$this->wqData['userId']]);
if($result['type']==1){
$table->andWhere('a.state in (1,2,3,4,9,11)');
}else{
$table->andWhere('a.state in (5,6,7,8,10)');
}
$table->offset(($page - 1) * $size)->limit($size);
$res=$table->orderby('id desc')->all();
$set=Config::getSystemSet('currency',$this->wqData['uniacid']);
for($i=0;$i<count($res);$i++){
$goods=$table=(new \yii\db\Query())
->from('{{%ybwm_order_goods}}')
->where('orderId=:orderId AND item=1',[':orderId'=>$res[$i]['id']])->all();
$res[$i]['goodsArr']=$goods;
$res[$i]['isTk']=2;
if($res[$i]['state']==2 || (($res[$i]['state']==3 || $res[$i]['state']==4) AND $set['receivingRefund']==1) ){
$res[$i]['isTk']=1;
}
}
return $this->result(1,'成功',$res);
}
//订单详情
public function actionOrderInfo()
{
$result=axios_request();
$table=(new \yii\db\Query())
->select(['a.id','a.giveName','a.otherInfo','a.vipDiscount','a.grantCouponName','a.couponPreferential','a.platformCouponPreferential','a.deliveryPreferential','a.preferentialMoney','a.boxMoney','a.outTradeNo','a.deliveryMoney','a.newMoney','a.serviceAt','a.receivedName','a.receivedAddress','a.receivedTel','a.isOut','a.selfCode', 'a.takeNo','a.money','a.num','a.deliveryMode','a.payMode','a.payAt','a.createdAt','a.state','a.userNote','s.lat as storeLat','s.lng as storeLng','s.name as storeName','s.icon as storeIcon','s.address','s.storeTel','a.storeId'])
->from('{{%ybwm_takeout_order}} as a')
->join('LEFT JOIN', '{{%ybwm_store}} as s', 's.id = a.storeId')
->where('a.uniacid=:uniacid AND a.deleteAt=0 AND a.userDeleteAt=0 AND a.id=:id',[':uniacid'=>$this->wqData['uniacid'],':id'=>$result['orderId']]);
$res=$table->one();
$goods=(new \yii\db\Query())
->from('{{%ybwm_order_goods}}')
->where('orderId=:orderId AND item=1',[':orderId'=>$res['id']])->all();
$res['goodsArr']=$goods;
$set=Power::getPower($this->wqData['uniacid'],'makeName');
$yunbeiName=Power::getPower($this->wqData['uniacid'],'yunbeiName');
$otherInfo=json_decode($res['otherInfo'],true)?:[];
if($res['deliveryMode']==1){
$res['deliveryName']='商家配送';
}elseif($res['deliveryMode']==2){
$res['deliveryName']='达达配送';
$res['deliveryInfo']['riderName']=$otherInfo['dm_name']?:'';
$res['deliveryInfo']['riderTel']=$otherInfo['dm_mobile']?:'';
$status='';
if($otherInfo['order_status']==1){
$status= '待接单';
}elseif($otherInfo['status']==2){
$status= '待取货';
}elseif($otherInfo['status']==3){
$status= '配送中';
}elseif($otherInfo['status']==4){
$status= '已完成';
}elseif($otherInfo['status']==5){
$status= '已取消';
}elseif($otherInfo['status']==8){
$status= '指派单';
}elseif($otherInfo['status']==9){
$status= '妥投异常之物品返回中';
}elseif($otherInfo['status']==10){
$status= '妥投异常之物品返回完成';
}elseif($otherInfo['status']==100){
$status= '骑士到店';
}
$res['deliveryInfo']['stateMsg']=$status;
}elseif($res['deliveryMode']==3){
$res['deliveryName']='点我达配送';
$res['deliveryInfo']['riderName']=$otherInfo['content']['rider_name']?:'';
$res['deliveryInfo']['riderTel']=$otherInfo['content']['rider_mobile']?:'';
$status='';
if($otherInfo['order_status']=='created'){
$status= '已下单';
}elseif($otherInfo['status']=='dispatched'){
$status= '已接单';
}elseif($otherInfo['status']=='arrived'){
$status= '已到店';
}elseif($otherInfo['status']=='obtained'){
$status= '已离店';
}elseif($otherInfo['status']=='completed'){
$status= '已完成';
}elseif($otherInfo['status']=='abnormal'){
$status= '异常';
}elseif($otherInfo['status']=='canceled'){
$status= '已取消';
}
$res['deliveryInfo']['stateMsg']=$status;
}elseif($res['deliveryMode']==4){
$res['deliveryName']=$set['makeName']?:'码科配送';
$res['deliveryInfo']['riderName']=$otherInfo['rider_name']?:'';
$res['deliveryInfo']['riderTel']=$otherInfo['rider_mobile']?:'';
$status='';
if($otherInfo['status']=='loading'){
$status= '待付款';
}elseif($otherInfo['status']=='cancel'){
$status= '订单已取消';
}elseif($otherInfo['status']=='payed'){
$status= '待接单';
}elseif($otherInfo['status']=='wait_to_shop'){
$status= '待到店';
}elseif($otherInfo['status']=='accepted'){
$status= '待取件';
}elseif($otherInfo['status']=='geted'){
$status= '待收件';
}elseif($otherInfo['status']=='gotoed'){
$status= '待评价';
}elseif($otherInfo['status']=='completed'){
$status= '订单已完成';
}
$res['deliveryInfo']['stateMsg']=$status;
}elseif($res['deliveryMode']==5){
$res['deliveryName']='顺丰配送';
$res['deliveryInfo']['riderName']=$otherInfo['operator_name']?:'';
$res['deliveryInfo']['riderTel']=$otherInfo['operator_phone']?:'';
$res['deliveryInfo']['stateMsg']=$otherInfo['status_desc']?:'';
}elseif($res['deliveryMode']==6){
$res['deliveryName']='蜂鸟跑腿';
$res['deliveryInfo']['riderName']=$otherInfo['carrier_driver_name']?:'';
$res['deliveryInfo']['riderTel']=$otherInfo['carrier_driver_phone']?:'';
$status='';
if($otherInfo['order_status']==1){
$status= '已接单';
}elseif($otherInfo['status']==20){
$status= '已分配骑手';
}elseif($otherInfo['status']==80){
$status= '骑手已到店';
}elseif($otherInfo['status']==2){
$status= '配送中';
}elseif($otherInfo['status']==3){
$status= '已送达';
}elseif($otherInfo['status']==5){
$status= '系统拒单/配送异常';
}
$res['deliveryInfo']['stateMsg']=$status;
}elseif($res['deliveryMode']==7){
$res['deliveryName']='闪送';
$res['deliveryInfo']['riderName']=$otherInfo['courier']['name']?:'';
$res['deliveryInfo']['riderTel']=$otherInfo['courier']['mobile']?:'';
$res['deliveryInfo']['stateMsg']=$otherInfo['statusDesc']?:'';
}elseif($res['deliveryMode']==8){
$res['deliveryName']='UU跑腿';
$res['deliveryInfo']['riderName']=$otherInfo['courier']['driver_name']?:'';
$res['deliveryInfo']['riderTel']=$otherInfo['courier']['driver_mobile']?:'';
$res['deliveryInfo']['stateMsg']=$otherInfo['state_text']?:'';
}elseif($res['deliveryMode']==9){
$res['deliveryName']=$yunbeiName['yunbeiName']?:'云贝配送';
$res['deliveryInfo']['riderName']=$otherInfo['result']['riderName']?:'';
$res['deliveryInfo']['riderTel']=$otherInfo['result']['riderTel']?:'';
$res['deliveryInfo']['stateMsg']=$otherInfo['result']['stateMsg']?:'';
}elseif($res['deliveryMode']==10){
$res['deliveryName']='到店自提';
$set=Config::getSystemSet('takeOutSet',$this->wqData['uniacid']);
if($set['address']){
$res['address']=$set['address'];
}
}
return $this->result(1,'成功',$res);
}
//取消订单
public function actionCancelOrder(){
$request = Yii::$app->request;
$result=axios_request();
if($request->isGet){
return $this->result(2, '请求异常');
}
$res = Order::cancel($result['orderId']);
if($res===true){
return $this->result(1,'成功');
}else{
return $this->result(2,'失败',$res);
}
}
//催单ybwm_reminder
public function actionReminder(){
$request = Yii::$app->request;
$result=axios_request();
if($request->isGet){
return $this->result(2, '请求异常');
}
$set=Config::getSystemSet('currency',$this->wqData['uniacid']);
$reminder=$set['reminder']*60;//接单多少分钟后可以催单
$interval=$set['interval'];//催单间隔
$order=$table=(new \yii\db\Query())
->select('receiptAt,state,storeId,uniacid')
->from('{{%ybwm_takeout_order}}')
->where('id=:id',[':id'=>$result['orderId']])->one();
if($order['receiptAt']+$reminder>time() AND $set['reminderSwitch']==1){
$msg=($order['receiptAt']+$reminder-time())/60;
return $this->result(2,intval($msg)."分钟后才能催单");
}
$reminder=(new \yii\db\Query())
->from('{{%ybwm_reminder}}')
->where('userId=:userId AND orderId=:orderId AND createdAt>:createdAt',[':userId'=>$this->wqData['userId'],':orderId'=>$result['orderId'],':createdAt'=>time()-$interval*60])->one();
if($reminder AND $set['reminderSwitch']==1){
return $this->result(2,'催单间隔为'.$interval.'分钟');
}
$data['userId']=$this->wqData['userId'];
$data['orderId']=$result['orderId'];
$data['createdAt']=time();
$data['uniacid']=$this->wqData['uniacid'];
$data['storeId']=$order['storeId'];
$res = YII::$app->db->createCommand()->insert('{{%ybwm_reminder}}', $data)->execute();
if($res){
CallbackOrder::voiceType($order['uniacid'],$order['storeId'],'reminderOrder',$result['orderId']);
Order::takeoutVoice($result['orderId'], 'reminder');
Message::newReminderOrder($result['orderId']);
return $this->result(1,'成功');
}else{
return $this->result(2,'失败');
}
}
//申请退款
public function actionRefund(){
$request = Yii::$app->request;
$result=axios_request();
if($request->isGet){
return $this->result(2, '请求异常');
}
$order=$table=(new \yii\db\Query())
->select('state,storeId,uniacid')
->from('{{%ybwm_takeout_order}}')
->where('id=:id',[':id'=>$result['orderId']])
->andWhere(['in','state',[3,4]])
->one();
if(!$order){
return $this->result(2, '订单状态异常或不存在');
}
$set=Config::getSystemSet('currency',$this->wqData['uniacid']);
if($set['receivingRefund']==2 AND ($order['state']==3 || $order['state']==4 )){
return $this->result(2, '商家已接单不可退款');
}
$data['refundNo'] = date("YmdHis") . rand(111111, 999999);
$data['state'] =9;
$data['applyAt'] =time();
$data['beforeRefundState'] =$order['state'];
$res = YII::$app->db->createCommand()->update('{{%ybwm_takeout_order}}', $data, ['id'=>$result['orderId']])->execute();
if($res){
Order::reduceStock($result['orderId'],2);
CallbackOrder::voiceType($order['uniacid'],$order['storeId'],'chargebackOrder',$result['orderId']);
Message::storeSendSms($order['storeId'],2);//短信提醒
$openIdList=(new \yii\db\Query())
->select(['openId'])
->from('{{%ybwm_openId}}')
->where('storeId=:storeId',[':storeId'=>$order['storeId']])->all();
if($openIdList){
for($i=0;$i<count($openIdList);$i++){
Message::refundOrder($result['orderId'],$openIdList[$i]['openId']);
}
}
Order::takeoutVoice($result['orderId'], 'afterSale');
Printing::refundOrderPrint($result['orderId']);
return $this->result(1,'成功');
}else{
return $this->result(2,'失败');
}
}
//确认收货
public function actionReceiving(){
$request = Yii::$app->request;
$result=axios_request();
if($request->isGet){
return $this->result(2, '请求异常');
}
$order=(new \yii\db\Query())
->select('state,uniacid,storeId,userId')
->from('{{%ybwm_takeout_order}}')
->where('id=:id AND state=:state',[':id'=>$result['orderId'],':state'=>4])->one();
if(!$order){
return $this->result(2, '订单状态异常或不存在');
}
$res=Order::receiving($result['orderId']);
if($res){
//确认收货已完成集点活动
Member::saveColletCoupon($result['orderId'],$order['uniacid'],$order['storeId'],$order['userId']);
return $this->result(1,'成功');
}else{
return $this->result(2,'失败');
}
}
//下单集合
public function actionOrderMuster() {
$result=axios_request();
$now=time();
$result['userId']=56;
$data['newReduction']=Order::newReduction($this->wqData['userId'],$result['storeId']);
$changePay=(new \yii\db\Query())
->select('name,id,goodsArr,limitType')
->from('{{%ybwm_change_pay}}')
->where('deleteAt=0 AND display=1 AND startTime<=:startTime AND endTime>:endTime',[':startTime'=>$now,':endTime'=>$now])
->andWhere(['uniacid'=>$this->wqData['uniacid']])
->andWhere(['or',['storeId'=>$result['storeId'],'storeType'=>1],['storeType'=>2],['and',['storeType'=>3],['like','storeArr',$result['storeId']]]])
->andWhere(['like','useType',1])
->one();
if($changePay){
//每个用户每天换购的次数
if($changePay['limitType']==2){
$startTime=strtotime(date('Y-m-d')." 00:00:00");
$endTime=strtotime(date('Y-m-d')." 23:59:59");
$orderInfo=(new \yii\db\Query())->from('{{%ybwm_takeout_order}} a')
->leftJoin('{{%ybwm_order_goods}} b','a.id=b.orderId')
->where(['not in','a.state',[1,7,8,10]])
->andWhere(['b.item'=>1,'isChange'=>1,'a.storeId'=>$result['storeId'],'a.userId'=>$result['userId']])
->andWhere(['>=','a.payAt',$startTime])
->andWhere(['<=','a.payAt',$endTime])
->one();
if($orderInfo){
$data['changePay']=[];
return $this->result(1,'成功',$data);
}
}
$goodsArr=json_decode($changePay['goodsArr'],true);
for($i=0;$i<count($goodsArr);$i++){
if($goodsArr[$i]['stock']<=0){
unset($goodsArr[$i]);
}
}
$changePay['goodsArr']=array_values($goodsArr);
}
$data['changePay']=$changePay?:[];
return $this->result(1,'成功',$data);
}
//下单有礼
public function actionPayPolitely(){
$result=axios_request();
if($result['orderType']==2){
//充值
$order=(new \yii\db\Query())
->select('money,payMode')
->from('{{%ybwm_user_balance_order}}')
->where('id=:id',[':id'=>$result['id']])->one();//订单
$data['money']=$order['money'];
$data['payModeName']=$this->payMode[$order['payMode']];
return $this->result(1,'成功',$data);
}
if($result['orderType']==3){
//积分商城
$order=(new \yii\db\Query())
->select('money,payMode')
->from('{{%ybwm_integral_order}}')
->where('id=:id',[':id'=>$result['id']])->one();//订单
$data['money']=$order['money'];
$data['payModeName']=$this->payMode[$order['payMode']];
return $this->result(1,'成功',$data);
}
if($result['orderType']==4){
//券包
$order=(new \yii\db\Query())
->select('money,payMode')
->from('{{%ybwm_roll_bag_order}}')
->where('id=:id',[':id'=>$result['id']])->one();//订单
$data['money']=$order['money'];
$data['payModeName']=$this->payMode[$order['payMode']];
return $this->result(1,'成功',$data);
}
if($result['orderType']==5){
//收银
$order=(new \yii\db\Query())
->select('money,payMode')
->from('{{%ybwm_cashier_order}}')
->where('id=:id',[':id'=>$result['id']])->one();//订单
$data['money']=$order['money'];
$data['payModeName']=$this->payMode[$order['payMode']];
return $this->result(1,'成功',$data);
}
if($result['orderType']==6 || $result['orderType']==7){
//店内
$order=(new \yii\db\Query())
->select('money,payMode')
->from('{{%ybwm_instore_order}}')
->where('id=:id',[':id'=>$result['id']])->one();//订单
$data['money']=$order['money'];
$data['payModeName']=$this->payMode[$order['payMode']];
return $this->result(1,'成功',$data);
}
if($result['orderType']==8){
//会员卡
$order=(new \yii\db\Query())
->select('money,payMode')
->from('{{%ybwm_user_vip_order}}')
->where('id=:id',[':id'=>$result['id']])->one();//订单
$data['money']=$order['money'];
$data['payModeName']=$this->payMode[$order['payMode']];
return $this->result(1,'成功',$data);
}
if($result['orderType']==9){
//预约
$order=(new \yii\db\Query())
->select('money,payMode')
->from('{{%ybwm_appointment}}')
->where('id=:id',[':id'=>$result['id']])->one();//订单
$data['money']=$order['money'];
$data['payModeName']=$this->payMode[$order['payMode']];
return $this->result(1,'成功',$data);
}
$order=(new \yii\db\Query())
->select('storeId,money,payMode')
->from('{{%ybwm_takeout_order}}')
->where('id=:id',[':id'=>$result['id']])->one();//订单
$record=(new \yii\db\Query())
->from('{{%ybwm_pay_politely_record}}')
->where('orderId=:orderId',[':orderId'=>$result['id']])->one();//领取记录
if(!$record){
$record['payPolitely']=2;
}else{
$record['payPolitely']=1;
}
$record['couponName']='';
if($record['coupon']){
$coupon=(new \yii\db\Query())
->from('{{%ybwm_coupon}}')
->where(['in','id',json_decode($record['coupon'],true)])->one();//领取记录
$record['couponName']=$coupon['name'];
}
$record['storeId']=$order['storeId'];
$record['money']=$order['money'];
$record['payModeName']=$this->payMode[$order['payMode']];
$record['balance']=$record['balance']?:0;
$record['integral']=$record['integral']?:0;
$record['growth']=$record['growth']?:0;
return $this->result(1,'成功',$record);
}
//换购
public function actionChangePay(){
$result=axios_request();
$now=time();
$changePay=(new \yii\db\Query())
->select('name,id,goodsArr')
->from('{{%ybwm_change_pay}}')
->where('storeId=:storeId AND deleteAt=0 AND display=1 AND startTime<=:startTime AND endTime>:endTime',[':startTime'=>$now,':endTime'=>$now,':storeId'=>$result['storeId']])
->one();
if(!$changePay){
return $this->result(1,'成功',[]);
}
if($changePay['limitType']==2){
$startTime=strtotime(date("Y-m-d")." 00:00:00");
$endTime=strtotime(date("Y-m-d")." 23:59:59");
$order=(new \yii\db\Query())
->from('{{%ybwm_takeout_order}}')
->where('storeId=:storeId AND payAt<=:startTime AND payAt>:endTime AND state not in (7,8,10)',[':startTime'=>$startTime,':endTime'=>$endTime,':storeId'=>$result['storeId']])
->count()?:0;
if($order>=$changePay['num']){
return $this->result(1,'成功',[]);
}
}
$changePay['goodsArr']=json_decode($changePay['goodsArr']);
// $goodsId=array_column($goodsArr,'id');
// $goods=(new \yii\db\Query())
// ->select('name,id,icon,price')
// ->from('{{%ybwm_core_goods}}')
// ->where(['in','id',$goodsId])
// ->all();
return $this->result(1,'成功',$changePay);
}
//制作时间
public function actionProductionTime(){
$result=axios_request();
$makeTime = Config::getStoreSet('makeTime', $result['storeId']);
$makeTime['time']=$makeTime['time']?:3;
$makeTime['unit']=$makeTime['unit']?:'件';
if($makeTime['type']==1){
//按单
$orderCount=(new \yii\db\Query())
->from('{{%ybwm_takeout_order}}')
->where('storeId=:storeId AND ((state=3 AND deliveryMode!=10) or (deliveryMode=10 AND state=4) )',[':storeId'=>$result['storeId']])
->count();
$allCount=(new \yii\db\Query())
->from('{{%ybwm_takeout_order}}')
->where('storeId=:storeId AND state not in (1,7) AND payAt>:startTime AND payAt<:endTime',[':endTime'=>time(),':startTime'=>time()-3600,':storeId'=>$result['storeId']])
->count();
$data['num']=$orderCount?:0;
$data['unit']='单';
}else{
//按件
$orderCount=(new \yii\db\Query())
->from('{{%ybwm_takeout_order}}')
->where('storeId=:storeId AND ((state=3 AND deliveryMode!=10) or (deliveryMode=10 AND state=4) )',[':storeId'=>$result['storeId']])
->sum('num');
$allCount=(new \yii\db\Query())
->from('{{%ybwm_takeout_order}}')
->where('storeId=:storeId AND state not in (1,7) AND payAt>:startTime AND payAt<:endTime',[':endTime'=>time(),':startTime'=>time()-3600,':storeId'=>$result['storeId']])
->sum('num');
$data['num']=$orderCount?:0;
$data['unit']=$makeTime['unit'];
}
$data['proportion']=bcmul(bcdiv($data['num'],$allCount,2),100,0)?:0;
if($data['proportion']>100){
$data['proportion']=100;
}
$data['open']=$makeTime['open']?:2;
$data['allCount']=$allCount;
return $this->result(1,'成功',$data);
}
//取餐码
public function actionMealCode(){
$result=axios_request();
$order=(new \yii\db\Query())
->select('selfCode')
->from('{{%ybwm_takeout_order}}')
->where('id=:id',[':id'=>$result['id']])
->one();
if(!$order){
return $this->result(1,'成功','');
}
//$res='https://qrcode.jp/qr?q='.$order['selfCode'].'&s=10';
$res='https://api.pwmqr.com/qrcode/create/?url='.$order['selfCode'];
return $this->result(1,'成功',$res);
}
//代付订单详情
public function actionReplaceOrder(){
$result=axios_request();
$table=(new \yii\db\Query())
->select(['a.id','a.giveName','a.otherInfo','a.vipDiscount','a.grantCouponName','a.couponPreferential','a.platformCouponPreferential','a.deliveryPreferential','a.preferentialMoney','a.boxMoney','a.outTradeNo','a.deliveryMoney','a.newMoney','a.serviceAt','a.receivedName','a.receivedAddress','a.receivedTel','a.isOut','a.selfCode', 'a.takeNo','a.money','a.num','a.deliveryMode','a.payMode','a.payAt','a.createdAt','a.state','a.userNote','s.name as storeName','s.icon as storeIcon','s.address','s.storeTel','a.storeId'])
->from('{{%ybwm_takeout_order}} as a')
->join('LEFT JOIN', '{{%ybwm_store}} as s', 's.id = a.storeId')
->where('a.uniacid=:uniacid AND a.deleteAt=0 AND a.userDeleteAt=0 AND a.id=:id',[':uniacid'=>$this->wqData['uniacid'],':id'=>$result['orderId']]);
$res=$table->one();
$goods=(new \yii\db\Query())
->from('{{%ybwm_order_goods}}')
->where('orderId=:orderId AND item=1',[':orderId'=>$res['id']])->all();
$res['goodsArr']=$goods;
return $this->result(1,'成功',$res);
}
//评价
public function actionEvaluate(){
$result=axios_request();
if(!$result['body']){
return $this->result(2,'评论内容不能为空');
}
$order=(new \yii\db\Query())
->select('storeId,outTradeNo')
->from('{{%ybwm_takeout_order}}')
->where('id=:id AND state=5',[':id'=>$result['orderId']])
->one();
if(!$order){
return $this->result(2,'订单不存在或已评价');
}
$userId=$this->wqData['userId'];
$uniacid=$this->wqData['uniacid'];
$set=Config::getSystemSet('currency',$uniacid);
if ($set['evaluateExamine']==2){
$data['state']=2;
}
$data['userId']=$userId;
$data['storeId']=$order['storeId'];
$data['outTradeNo']=$order['outTradeNo'];
$data['orderId']=$result['orderId'];
$data['body']=$result['body'];
$data['anonymous']=$result['anonymous'];
$data['star']=$result['star'];
$data['type']=1;
$data['uniacid']=$uniacid;
$data['createdAt']=time();
$data['media']= is_array($result['media']) ? json_encode($result['media']) : '';
$data['label']=json_encode($result['label'],JSON_UNESCAPED_UNICODE)?:'';
$res = Yii::$app->db->createCommand()->insert('{{%ybwm_comment}}', $data)->execute();
if($res){
Yii::$app->db->createCommand()->update('{{%ybwm_takeout_order}}', ['state'=>6],['id'=>$result['orderId']])->execute();
return $this->result(1,'成功');
}else{
return $this->result(2,'失败');
}
}
//标签列表
public function actionLabelList(){
$result=axios_request();
$storeId=$result['storeId'];
$statistics=$result['statistics'];
$data= (new \yii\db\Query())
->from('{{%ybwm_core_category}}')
->where('display=1 AND deleteAt=0 AND storeId=:storeId AND item=14',[':storeId'=>$storeId])->all();
if($statistics==1){
for($i=0;$i<count($data);$i++) {
$data[$i]['evaluateNum'] = (new \yii\db\Query())
->from('{{%ybwm_comment}}')
->where(['state' => 2, 'deleteAt' => 0, 'storeId' => $storeId])->andWhere(['like', 'label',$data[$i]['name']])->count()?:0;
}
}
return $this->result(1,'成功',$data);
}
//评价列表
public function actionEvaluateList(){
$result=axios_request();
$page=$result['page']?:1;
$storeId=$result['storeId'];
$label=$result['label'];
$state=$result['state'];
$num=($page-1)*10;
$limit=10;
$data= (new \yii\db\Query())
->select('a.anonymous,a.star,a.media,a.body,b.portrait,b.userName,from_unixtime(a.createdAt)createdAt,a.reply,a.state')
->from('{{%ybwm_comment}} a')
->leftJoin('{{%ybwm_member}} b','a.userId=b.id')
->where(['a.state'=>2,'a.deleteAt'=>0,'a.storeId'=>$storeId]);
if($label){
$data->andWhere(['like','a.label',$label]);
}
if($state==1){
$data->andWhere('star>3');
}
if($state==2){
$data->andWhere('media!=""');
}
if($state==3){
$data->andWhere('star<3');
}
$res['count']=$data->count();
$starStatistics=(new \yii\db\Query())
->select(['sum(if(star>3,1,0)) as good','sum(if(star=3,1,0)) as middle','sum(if(star<3,1,0)) as difference','avg(star) as average'])
->from('{{%ybwm_comment}}')
->where(['deleteAt'=>0,'uniacid'=>$this->wqData['uniacid'],'storeId'=>$storeId,'state'=>2])->one();
$res['good']=$starStatistics['good'];
$res['middle']=$starStatistics['middle'];
$res['difference']=$starStatistics['difference'];
$res['img']=(new \yii\db\Query())->from('{{%ybwm_comment}}')
->where('state=2 AND deleteAt=0 AND uniacid=:uniacid AND storeId=:storeId AND media!=""',[':uniacid'=>$this->wqData['uniacid'],':storeId'=>$storeId])->count();
$res['list']=$data->offset($num)
->limit($limit)
->orderBy('a.id desc')
->all();
for($i=0;$i<count($res['list']);$i++){
$res['list'][$i]['media']=json_decode($res['list'][$i]['media'],true);
}
return $this->result(1,'成功',$res);
}
}