Browse Source

feat: 修改订单,购物车,商品,评论等业务逻辑

wechat_public_accounts
root 5 years ago
parent
commit
9a0ddc3713
  1. 68
      api/config/main.php
  2. 46
      api/controllers/AddressController.php
  3. 58
      api/controllers/CartController.php
  4. 67
      api/controllers/CollectionController.php
  5. 48
      api/controllers/CommentController.php
  6. 36
      api/controllers/CommonController.php
  7. 26
      api/controllers/GoodsController.php
  8. 52
      api/controllers/OrderController.php
  9. 2
      api/controllers/SiteController.php
  10. 27
      api/controllers/TakingSiteController.php
  11. 16
      api/controllers/UserController.php
  12. 105
      api/logic/AddressLogic.php
  13. 79
      api/logic/CartLogic.php
  14. 122
      api/logic/CollectionLogic.php
  15. 53
      api/logic/CommentLogic.php
  16. 103
      api/logic/Helper.php
  17. 1
      api/logic/Login.php
  18. 193
      api/logic/OrderLogic.php
  19. 10
      backend/config/main.php
  20. 1
      backend/models/LoginForm.php
  21. 24
      backend/modules/file/Module.php
  22. 6
      backend/modules/file/logic/file/FileManager.php
  23. 0
      backend/modules/file/migrations/m191112_022131_create_table_file.php
  24. 0
      backend/modules/file/migrations/m191112_022532_create_table_tem_file.php
  25. 20
      backend/modules/file/models/ars/File.php
  26. 2
      backend/modules/file/models/ars/TemFile.php
  27. 4
      backend/modules/goods/Module.php
  28. 0
      backend/modules/goods/assets/custom/sku.49a56a9198d9c3ec233c.js
  29. 0
      backend/modules/goods/assets/custom/sku.52802ed907a316501cd7.js
  30. 0
      backend/modules/goods/assets/custom/sku.9a46222d01b3d601e5ad.js
  31. 0
      backend/modules/goods/assets/custom/sku_item.6649e882bedbeb22ea3d.js
  32. 0
      backend/modules/goods/assets/js/jquery.js
  33. 6
      backend/modules/goods/controllers/AttributeController.php
  34. 6
      backend/modules/goods/controllers/BrandController.php
  35. 36
      backend/modules/goods/controllers/CategoryController.php
  36. 46
      backend/modules/goods/controllers/GoodsController.php
  37. 36
      backend/modules/goods/controllers/ShopCategoryController.php
  38. 6
      backend/modules/goods/controllers/SupplierController.php
  39. 25
      backend/modules/goods/logic/goods/GoodsManager.php
  40. 0
      backend/modules/goods/migrations/m191119_021851_create_table_atg_shop_category.php
  41. 0
      backend/modules/goods/migrations/m191119_022641_create_table_atg_category.php
  42. 0
      backend/modules/goods/migrations/m191119_022939_create_table_atg_attribute.php
  43. 0
      backend/modules/goods/migrations/m191119_023115_create_table_atg_goods_attr.php
  44. 0
      backend/modules/goods/migrations/m191119_024029_create_table_atg_brand.php
  45. 0
      backend/modules/goods/migrations/m191119_024205_create_table_atg_goods.php
  46. 0
      backend/modules/goods/migrations/m191119_024345_create_table_atg_goods_sku.php
  47. 0
      backend/modules/goods/migrations/m191119_025607_create_table_atg_supplier.php
  48. 0
      backend/modules/goods/migrations/m191119_025843_create_table_atg_filter_attr.php
  49. 0
      backend/modules/goods/migrations/m191125_012449_update_column_icon_type_in_atg_category.php
  50. 0
      backend/modules/goods/migrations/m191125_083820_drop_column_icon_type_in_table_atg_category.php
  51. 0
      backend/modules/goods/migrations/m191125_084547_update_column_pid_and_icon_in_table_atg_category.php
  52. 0
      backend/modules/goods/migrations/m191125_104137_drop_column_icon_type_in_table_atg_shop_category.php
  53. 0
      backend/modules/goods/migrations/m191125_104510_update_column_pid_and_icon_in_table_atg_shop_category.php
  54. 0
      backend/modules/goods/migrations/m191127_114228_add_column_is_manaul_in_table_atg_goods_sku.php
  55. 0
      backend/modules/goods/migrations/m191129_010349_add_column_sku_mode_in_atg_goods.php
  56. 0
      backend/modules/goods/migrations/m191129_020131_add_columns_goods_id_and_attr_id_in_table_atg_goods_attr.php
  57. 0
      backend/modules/goods/migrations/m191130_004933_add_column_cat_id_in_table_atg_attribute.php
  58. 0
      backend/modules/goods/migrations/m191202_082041_drop_columns_in_table_atg_goods_sku.php
  59. 0
      backend/modules/goods/migrations/sql/goods.sql
  60. 0
      backend/modules/goods/migrations/sql/goods_sku.sql
  61. 4
      backend/modules/goods/models/ars/Attribute.php
  62. 2
      backend/modules/goods/models/ars/Brand.php
  63. 4
      backend/modules/goods/models/ars/Category.php
  64. 2
      backend/modules/goods/models/ars/FilterAttr.php
  65. 12
      backend/modules/goods/models/ars/Goods.php
  66. 2
      backend/modules/goods/models/ars/GoodsAttr.php
  67. 4
      backend/modules/goods/models/ars/GoodsSku.php
  68. 4
      backend/modules/goods/models/ars/ShopCategory.php
  69. 4
      backend/modules/goods/models/ars/Supplier.php
  70. 6
      backend/modules/goods/models/searchs/AttributeSearch.php
  71. 6
      backend/modules/goods/models/searchs/BrandSearch.php
  72. 6
      backend/modules/goods/models/searchs/CategorySearch.php
  73. 10
      backend/modules/goods/models/searchs/GoodsSearch.php
  74. 6
      backend/modules/goods/models/searchs/ShopCategorySearch.php
  75. 6
      backend/modules/goods/models/searchs/SupplierSearch.php
  76. 4
      backend/modules/goods/views/attribute/_form.php
  77. 0
      backend/modules/goods/views/attribute/_search.php
  78. 2
      backend/modules/goods/views/attribute/create.php
  79. 0
      backend/modules/goods/views/attribute/index.php
  80. 2
      backend/modules/goods/views/attribute/update.php
  81. 2
      backend/modules/goods/views/attribute/view.php
  82. 2
      backend/modules/goods/views/brand/_form.php
  83. 0
      backend/modules/goods/views/brand/_search.php
  84. 2
      backend/modules/goods/views/brand/create.php
  85. 0
      backend/modules/goods/views/brand/index.php
  86. 2
      backend/modules/goods/views/brand/update.php
  87. 2
      backend/modules/goods/views/brand/view.php
  88. 4
      backend/modules/goods/views/category/_form.php
  89. 0
      backend/modules/goods/views/category/_search.php
  90. 2
      backend/modules/goods/views/category/create.php
  91. 0
      backend/modules/goods/views/category/index.php
  92. 2
      backend/modules/goods/views/category/update.php
  93. 4
      backend/modules/goods/views/category/view.php
  94. 0
      backend/modules/goods/views/config/index.php
  95. 10
      backend/modules/goods/views/goods/_form.php
  96. 0
      backend/modules/goods/views/goods/_search.php
  97. 4
      backend/modules/goods/views/goods/attribute.php
  98. 2
      backend/modules/goods/views/goods/create.php
  99. 4
      backend/modules/goods/views/goods/filter_attribute.php
  100. 12
      backend/modules/goods/views/goods/goods.php

68
api/config/main.php

@ -11,10 +11,12 @@ return [
'bootstrap' => ['log'], 'bootstrap' => ['log'],
'modules' => [], 'modules' => [],
'components' => [ 'components' => [
'cartLogic' => ['class' => 'api\logic\CartLogic'],
'orderLogic' => ['class' => 'api\logic\OrderLogic'],
'userLogic' => ['class' => 'api\logic\UserLogic'],
'cart' => ['class' => 'api\logic\CartLogic'],
'comment' => ['class' => 'api\logic\CommentLogic'],
'order' => ['class' => 'api\logic\OrderLogic'],
'visitor' => ['class' => 'api\logic\UserLogic'],
'address' => ['class' => 'api\logic\AddressLogic'], 'address' => ['class' => 'api\logic\AddressLogic'],
'collection' => ['class' => 'api\logic\CollectionLogic'],
'request' => [ 'request' => [
'parsers' => [ 'parsers' => [
'application/json' => 'yii\web\JsonParser', 'application/json' => 'yii\web\JsonParser',
@ -49,32 +51,42 @@ return [
'rules' => [ 'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'goods', 'pluralize' => false], ['class' => 'yii\rest\UrlRule', 'controller' => 'goods', 'pluralize' => false],
['class' => 'yii\rest\UrlRule', 'controller' => 'address', 'pluralize' => false], ['class' => 'yii\rest\UrlRule', 'controller' => 'address', 'pluralize' => false],
['class' => 'yii\rest\UrlRule', 'controller' => 'taking-site'],
['class' => 'yii\rest\UrlRule', 'controller' => 'cart'], ['class' => 'yii\rest\UrlRule', 'controller' => 'cart'],
['class' => 'yii\rest\UrlRule', 'controller' => 'order'],
['class' => 'yii\rest\UrlRule',
'controller' => 'user',
'pluralize' => false,
'extraPatterns' => [
'GET token' => 'token'
]
],
[
'class' => 'yii\rest\UrlRule',
'controller' => 'admin',
'extraPatterns' => [
'GET menu' => 'menu',
'GET create' => 'create'
]
],
[
'class' => 'yii\rest\UrlRule',
'controller' => 'site',
'extraPatterns' => [
'GET index' => 'index',
]
['class' => 'yii\rest\UrlRule', 'controller' => 'comment',
'extraPatterns' => [
'DELETE ' => 'delete'
]],
['class' => 'yii\rest\UrlRule', 'controller' => 'order'],
['class' => 'yii\rest\UrlRule', 'controller' => 'collection',
'extraPatterns' => [
'DELETE ' => 'delete'
]
],
['class' => 'yii\rest\UrlRule',
'controller' => 'user',
'pluralize' => false,
'extraPatterns' => [
'GET token' => 'token'
]
],
[
'class' => 'yii\rest\UrlRule',
'controller' => 'admin',
'extraPatterns' => [
'GET menu' => 'menu',
'GET create' => 'create'
]
],
[
'class' => 'yii\rest\UrlRule',
'controller' => 'site',
'extraPatterns' => [
'GET index' => 'index',
]
],
], ],
], ],
], ],
],
'params' => $params,
];
'params' => $params,
];

46
api/controllers/AddressController.php

@ -2,8 +2,10 @@
namespace api\controllers; namespace api\controllers;
use backend\models\ars\Address;
use api\logic\Helper;
use backend\modules\shop\models\ars\Address;
use Yii; use Yii;
use Throwable;
use yii\web\NotFoundHttpException; use yii\web\NotFoundHttpException;
/** /**
@ -12,32 +14,44 @@ use yii\web\NotFoundHttpException;
*/ */
class AddressController extends CommonController class AddressController extends CommonController
{ {
public $modelClass = 'backend\models\ars\Address';
public function actions()
{
$action = parent::actions();
return $action;
}
public $modelClass = 'backend\modules\shop\models\ars\Address';
public $className = 'api\logic\AddressLogic';
/**
* @return object
* @throws \yii\base\InvalidConfigException
*/
public function actionIndex() public function actionIndex()
{ {
return Address::find()
->where(['user_id' => Yii::$app->user->getId()])
->all();
$query = Address::find()->where(['user_id' => Yii::$app->user->getId()]);
return Helper::index($query);
} }
/**
* @return bool
* @throws NotFoundHttpException
* @throws Yii\base\InvalidConfigException
* @throws Yii\db\StaleObjectException
* @throws Throwable
* @throws yii\base\Exception
* @throws yii\web\BadRequestHttpException
* @throws yii\web\ServerErrorHttpException
*/
public function actionUpdate() public function actionUpdate()
{ {
return $this->object->update();
} }
/**
* @return Address|null
* @throws NotFoundHttpException
* @throws yii\base\Exception
* @throws yii\web\BadRequestHttpException
* @throws yii\web\ServerErrorHttpException
*/
public function actionCreate() public function actionCreate()
{ {
return Yii::$app->address->create();
return $this->object->create();
} }
} }

58
api/controllers/CartController.php

@ -2,9 +2,9 @@
namespace api\controllers; namespace api\controllers;
use backend\models\ars\Cart;
use yii\db\ActiveRecord;
use yii\rest\ActiveController;
use api\logic\Helper;
use backend\modules\shop\models\ars\Cart;
use Throwable;
use Yii; use Yii;
/** /**
@ -13,42 +13,68 @@ use Yii;
*/ */
class CartController extends CommonController class CartController extends CommonController
{ {
public $modelClass = 'common\models\ars\Cart';
public $modelClass = 'backend\modules\shop\models\ars\Cart';
public $className = 'api\logic\CartLogic';
public function actions() public function actions()
{ {
$action = parent::actions(); $action = parent::actions();
unset($action['index']); unset($action['index']);
unset($action['delete']);
$action['options'] = [
'class' => 'yii\rest\OptionsAction',
'collectionOptions' => ['DELETE', 'PUT', 'OPTIONS']
];
return $action; return $action;
} }
/**
* @return object
* @throws yii\base\InvalidConfigException
*/
public function actionIndex() public function actionIndex()
{ {
return Cart::find()
->where(['user_id' => Yii::$app->user->getId()])
->all();
$query = Cart::find()->where(['user_id' => Yii::$app->user->getId()]);
return Helper::index($query);
} }
/** /**
* @return bool * @return bool
* 更新购物车(增/删商品)
* @throws Throwable
* @throws Yii\base\InvalidConfigException
* @throws Yii\db\StaleObjectException
* @throws yii\base\Exception
* @throws yii\web\BadRequestHttpException
* @throws yii\web\NotFoundHttpException
* @throws yii\web\ServerErrorHttpException
*/ */
public function actionUpdate() public function actionUpdate()
{ {
$type = Yii::$app->request->post('type');
return Yii::$app->cartLogic->addOrSubGoods($type);
return $this->object->update();
} }
/** /**
* @return ActiveRecord
* 创建商品
* @return null|Cart
* @throws yii\base\Exception
* @throws yii\web\BadRequestHttpException
* @throws yii\web\NotFoundHttpException
* @throws yii\web\ServerErrorHttpException
*/ */
public function actionCreate() public function actionCreate()
{ {
$goodsId = Yii::$app->request->getBodyParam('goodsId');
$count = Yii::$app->request->getBodyParam('count');
$skuId = Yii::$app->request->getBodyParam('skuId');
return Yii::$app->cartLogic->create($goodsId, $count, $skuId);
return $this->object->create();
}
/**
* @throws Yii\db\StaleObjectException
* @throws Throwable
* @throws yii\web\BadRequestHttpException
* @throws yii\web\NotFoundHttpException
* @throws yii\web\ServerErrorHttpException
*/
public function actionDelete()
{
return $this->object->delete();
} }

67
api/controllers/CollectionController.php

@ -0,0 +1,67 @@
<?php
namespace api\controllers;
use api\logic\Helper;
use backend\modules\shop\models\ars\Collection;
use Throwable;
use Yii;
/**
* @author iron
* @email weiriron@gmail.com
*/
class CollectionController extends CommonController
{
public $modelClass = 'backend\modules\shop\models\ars\Collection';
public $className = 'api\logic\CollectionLogic';
public function actions()
{
$action = parent::actions();
unset($action['delete']);
unset($action['view']);
$action['options'] = [
'class' => 'yii\rest\OptionsAction',
'collectionOptions' => ['DELETE', 'PUT', 'OPTIONS']
];
return $action;
}
/**
* @return object
* @throws yii\base\InvalidConfigException
*/
public function actionIndex()
{
$query = Collection::find()->where(['user_id' => Yii::$app->user->getId()]);
return Helper::index($query);
}
/**
* @return bool
* @throws Yii\base\InvalidConfigException
* @throws Yii\db\StaleObjectException
* @throws Throwable
* @throws yii\base\Exception
* @throws yii\web\BadRequestHttpException
* @throws yii\web\NotFoundHttpException
* @throws yii\web\ServerErrorHttpException
*/
public function actionUpdate()
{
return $this->object->update();
}
/**
* @throws Throwable
* @throws Yii\db\StaleObjectException
* @throws yii\web\BadRequestHttpException
* @throws yii\web\NotFoundHttpException
* @throws yii\web\ServerErrorHttpException
*/
public function actionDelete()
{
return $this->object->delete();
}
}

48
api/controllers/CommentController.php

@ -0,0 +1,48 @@
<?php
namespace api\controllers;
use api\logic\Helper;
use backend\modules\shop\models\ars\Comment;
use Yii;
/**
* @author iron
* @email weiriron@gmail.com
*/
class CommentController extends CommonController
{
public $modelClass = 'backend\modules\shop\models\ars\Comment';
public $className = 'api\logic\CommentLogic';
public function actions()
{
$action = parent::actions();
unset($action['view']);
return $action;
}
/**
* @return object
* @throws yii\base\InvalidConfigException
*/
public function actionIndex()
{
$query = Comment::find()->where(['user_id' => Yii::$app->user->getId()]);
return Helper::index($query);
}
/**
* @return array|Comment|null
* @throws yii\base\Exception
* @throws yii\web\BadRequestHttpException
* @throws yii\web\NotFoundHttpException
* @throws yii\web\ServerErrorHttpException
*/
public function actionCreate()
{
return $this->object->create();
}
}

36
api/controllers/CommonController.php

@ -2,11 +2,18 @@
namespace api\controllers; namespace api\controllers;
use api\logic\AddressLogic;
use api\logic\CartLogic;
use api\logic\CollectionLogic;
use api\logic\CommentLogic;
use api\logic\OrderLogic;
use yii\filters\auth\HttpBearerAuth; use yii\filters\auth\HttpBearerAuth;
use yii\helpers\ArrayHelper; use yii\helpers\ArrayHelper;
use yii\rest\ActiveController; use yii\rest\ActiveController;
use yii\web\NotFoundHttpException; use yii\web\NotFoundHttpException;
use yii\base\InvalidConfigException;
use Yii; use Yii;
/** /**
* @author iron * @author iron
* @email weiriron@gmail.com * @email weiriron@gmail.com
@ -14,14 +21,32 @@ use Yii;
class CommonController extends ActiveController class CommonController extends ActiveController
{ {
public $searchModel;
public $className;
/**
* @var OrderLogic|CommentLogic|CartLogic|CollectionLogic|AddressLogic;
*/
public $object;
/**
* @throws InvalidConfigException
*/
public function init()
{
parent::init();
$this->object = Yii::createObject([
'class' => $this->className,
]);
}
/**
* @return array
*/
public function behaviors() public function behaviors()
{ {
return ArrayHelper::merge(parent::behaviors(), [ return ArrayHelper::merge(parent::behaviors(), [
'authenticatior' => [ 'authenticatior' => [
'class' => HttpBearerAuth::className(), 'class' => HttpBearerAuth::className(),
'except' => [],
'except' => ['token'],
] ]
]); ]);
} }
@ -40,6 +65,13 @@ class CommonController extends ActiveController
return []; return [];
} }
/**
* @param string $action
* @param null $model
* @param array $params
* @throws NotFoundHttpException
* 权限控制
*/
public function checkAccess($action, $model = null, $params = []) public function checkAccess($action, $model = null, $params = [])
{ {
if ($model && isset($model->user_id) && $model->user_id !== Yii::$app->user->getId()) { if ($model && isset($model->user_id) && $model->user_id !== Yii::$app->user->getId()) {

26
api/controllers/GoodsController.php

@ -2,9 +2,7 @@
namespace api\controllers; namespace api\controllers;
use yii\filters\auth\HttpBearerAuth;
use yii\helpers\ArrayHelper;
use yii\rest\ActiveController;
use Yii;
/** /**
* @author iron * @author iron
@ -12,7 +10,7 @@ use yii\rest\ActiveController;
*/ */
class GoodsController extends CommonController class GoodsController extends CommonController
{ {
public $modelClass = 'goods\models\ars\Goods';
public $modelClass = 'backend\modules\goods\models\ars\Goods';
public function actions() public function actions()
{ {
@ -30,18 +28,20 @@ class GoodsController extends CommonController
{ {
$keyword = \Yii::$app->request->getBodyParam('keyword'); $keyword = \Yii::$app->request->getBodyParam('keyword');
$category = \Yii::$app->request->getBodyParam('category'); $category = \Yii::$app->request->getBodyParam('category');
$data = \Yii::$app->request->getBodyParams();
$data['user'] = true;
\Yii::$app->request->setBodyParams($data);
$array = [];
if ($keyword) { if ($keyword) {
$data['name'] = ['like' => $keyword];
$array['name'] = ['like' => $keyword];
} }
if ($category) { if ($category) {
$data['cat_id'] = $category;
$array['cat_id'] = $category;
} }
$filter = ['class' => 'yii\data\ActiveDataFilter',
'filter' => $data,
'searchModel' => ['class' => 'antgoods\goods\models\searchs\GoodsSearch']];
return $filter;
if (empty($array)) {
return null;
}
return ['class' => 'yii\data\ActiveDataFilter',
'filter' => $array,
'searchModel' => ['class' => 'backend\modules\goods\models\searchs\GoodsSearch']];
} }
} }

52
api/controllers/OrderController.php

@ -2,17 +2,23 @@
namespace api\controllers; namespace api\controllers;
use yii\web\ForbiddenHttpException;
use Yii; use Yii;
use yii\base\InvalidConfigException;
use Throwable;
use backend\modules\shop\models\ars\Order;
/** /**
* @author iron * @author iron
* @email weiriron@gmail.com * @email weiriron@gmail.com
*/ */
class OrderController extends CommonController class OrderController extends CommonController
{ {
public $modelClass = 'common\models\ars\Order';
public $modelClass = 'backend\modules\shop\models\ars\Order';
public $className = 'api\logic\OrderLogic';
/**
* @return array
* @throws InvalidConfigException
*/
public function actions() public function actions()
{ {
$action = parent::actions(); $action = parent::actions();
@ -25,38 +31,48 @@ class OrderController extends CommonController
return $action; return $action;
} }
/**
* @return array
* @throws InvalidConfigException
*/
protected function getFilter() protected function getFilter()
{ {
$status = Yii::$app->request->getBodyParam('status');
$data = \Yii::$app->request->getBodyParams();
$data['user'] = true;
\Yii::$app->request->setBodyParams($data);
if (empty(Yii::$app->request->getBodyParams())) {
Yii::$app->request->setBodyParams(['user' => true]);
}
$array = ['user_id' => Yii::$app->user->getId()]; $array = ['user_id' => Yii::$app->user->getId()];
$status = Yii::$app->request->getBodyParam('status');
if ($status) { if ($status) {
$array['status'] = $status; $array['status'] = $status;
} }
$filter = ['class' => 'yii\data\ActiveDataFilter',
return ['class' => 'yii\data\ActiveDataFilter',
'filter' => $array, 'filter' => $array,
'searchModel' => ['class' => 'common\models\searchs\OrderSearch']];
return $filter;
'searchModel' => ['class' => 'backend\modules\shop\models\searchs\OrderSearch']
];
} }
/**
* @return Order
* @throws yii\base\Exception
* @throws yii\web\BadRequestHttpException
*/
public function actionCreate() public function actionCreate()
{ {
$originId = Yii::$app->request->getBodyParam('originId');
$count = Yii::$app->request->getBodyParam('count');
$skuId = Yii::$app->request->getBodyParam('skuId');
return Yii::$app->orderLogic->create($originId, $count, $skuId);
return $this->object->create();
} }
/** /**
* @return mixed
* @throws \yii\base\InvalidConfigException
* @return bool
* @throws InvalidConfigException
* @throws Throwable
* @throws yii\base\Exception
* @throws yii\web\BadRequestHttpException
* @throws yii\web\NotFoundHttpException
* @throws yii\web\ServerErrorHttpException
*/ */
public function actionUpdate() public function actionUpdate()
{ {
$data = Yii::$app->request->getBodyParams();
return Yii::$app->orderLogic->update($data);
return $this->object->update();
} }

2
api/controllers/SiteController.php

@ -35,7 +35,7 @@ class SiteController extends Controller
public function actionIndex() public function actionIndex()
{ {
//TODO 首页信息 //TODO 首页信息
\Yii::$app->userLogic->DailyActive();
\Yii::$app->visitor->DailyActive();
return '首页所有数据'; return '首页所有数据';
} }

27
api/controllers/TakingSiteController.php

@ -0,0 +1,27 @@
<?php
namespace api\controllers;
use api\logic\Helper;
use backend\modules\shop\models\ars\Address;
use Yii;
use yii\rest\ActiveController;
use yii\web\NotFoundHttpException;
/**
* @author iron
* @email weiriron@gmail.com
*/
class TakingSiteController extends ActiveController
{
public $modelClass = 'backend\modules\shop\models\ars\TakingSite';
public function actions()
{
$action = parent::actions();
unset($action['delete']);
unset($action['update']);
unset($action['options']);
return $action;
}
}

16
api/controllers/UserController.php

@ -9,27 +9,15 @@ use yii\helpers\ArrayHelper;
use yii\rest\ActiveController; use yii\rest\ActiveController;
use Yii; use Yii;
class UserController extends ActiveController
class UserController extends CommonController
{ {
public $modelClass = 'common\models\User'; public $modelClass = 'common\models\User';
public function behaviors()
{
return ArrayHelper::merge(parent::behaviors(), [
'authenticatior' => [
'class' => HttpBearerAuth::className(),
'except' => ['token'],
]
]);
}
public function actions() public function actions()
{ {
$action = parent::actions(); $action = parent::actions();
unset($action['delete']); unset($action['delete']);
unset($action['create']);
unset($action['update']);
unset($action['index']);
unset($action['view']);
$action['options'] = [ $action['options'] = [
'class' => 'yii\rest\OptionsAction', 'class' => 'yii\rest\OptionsAction',
'collectionOptions' => ['PUT', 'GET', 'OPTIONS'] 'collectionOptions' => ['PUT', 'GET', 'OPTIONS']

105
api/logic/AddressLogic.php

@ -3,9 +3,10 @@
namespace api\logic; namespace api\logic;
use backend\models\ars\Address;
use backend\modules\shop\models\ars\Address;
use Yii; use Yii;
use yii\base\Component;
use yii\base\BaseObject;
use yii\db\Exception;
use yii\web\BadRequestHttpException; use yii\web\BadRequestHttpException;
use yii\web\NotFoundHttpException; use yii\web\NotFoundHttpException;
use yii\web\ServerErrorHttpException; use yii\web\ServerErrorHttpException;
@ -16,42 +17,109 @@ use yii\web\ServerErrorHttpException;
* Class CartLogic * Class CartLogic
* @package api\logic * @package api\logic
*/ */
class AddressLogic extends Component
class AddressLogic extends BaseObject
{ {
const SET_DEFAULT_ADDRESS = 1;
public $viewAction = 'view'; public $viewAction = 'view';
/** /**
* @return Address * @return Address
* @throws BadRequestHttpException * @throws BadRequestHttpException
* @throws ServerErrorHttpException * @throws ServerErrorHttpException
* 创建地址
*/ */
public function create() public function create()
{ {
$data['consignee'] = Yii::$app->request->getBodyParam('consignee');
$data['phone'] = Yii::$app->request->getBodyParam('phone');
$data['province'] = Yii::$app->request->getBodyParam('province');
$data['city'] = Yii::$app->request->getBodyParam('city');
$data['district'] = Yii::$app->request->getBodyParam('district');
$data['address'] = Yii::$app->request->getBodyParam('address');
if (empty($data['consignee']) || empty($data['phone']) || empty($data['province']) ||
empty($data['city']) || empty($data['district']) || empty($data['address'])) {
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
}
$data = $this->getParams();
$address = new Address(); $address = new Address();
$address->user_id = Yii::$app->user->getId(); $address->user_id = Yii::$app->user->getId();
$address->load($data, ''); $address->load($data, '');
if (!$address->save()) { if (!$address->save()) {
throw new ServerErrorHttpException('地址添加失败'); throw new ServerErrorHttpException('地址添加失败');
} }
if (!$this->getDefaultAddress()) {
$this->setDefaultAddress($address);
}
Helper::createdResponse($address, $this->viewAction); Helper::createdResponse($address, $this->viewAction);
return $address; return $address;
} }
/**
* @return bool
* @throws BadRequestHttpException
* @throws NotFoundHttpException
* @throws ServerErrorHttpException
* 更新地址
*/
public function update()
{
$type = Yii::$app->request->getQueryParam('type');
$address = $this->findAddress();
if ($type == self::SET_DEFAULT_ADDRESS) {
return $this->setDefaultAddress($address);
}
$data = $this->getParams();
$address->load($data, '');
if (!$address->save()) {
throw new ServerErrorHttpException('地址添加失败');
}
return true;
}
/**
* @param Address $address
* @return bool
* @throws ServerErrorHttpException
* 设置默认地址
*/
private function setDefaultAddress($address) private function setDefaultAddress($address)
{ {
$tra = Yii::$app->db->beginTransaction();
try {
$oldDefault = $this->getDefaultAddress();
if ($oldDefault) {
$oldDefault->status = Address::STATUS_NOT_DEFAULT;
if (!$oldDefault->save()) {
throw new Exception('服务器取消默认地址失败');
}
}
$address->status = Address::STATUS_DEFAULT;
if (!$address->save()) {
throw new Exception('服务器设置默认地址失败');
}
$tra->commit();
return true;
} catch (\Exception $e) {
$tra->rollBack();
throw new ServerErrorHttpException($e->getMessage());
}
}
/**
* @return mixed
* @throws BadRequestHttpException
*/
private function getParams()
{
$data['consignee'] = Yii::$app->request->getBodyParam('consignee');
$data['phone'] = Yii::$app->request->getBodyParam('phone');
$data['province'] = Yii::$app->request->getBodyParam('province');
$data['city'] = Yii::$app->request->getBodyParam('city');
$data['district'] = Yii::$app->request->getBodyParam('district');
$data['address'] = Yii::$app->request->getBodyParam('address');
if (empty($data['consignee']) || empty($data['phone']) || empty($data['province']) ||
empty($data['city']) || empty($data['district']) || empty($data['address'])) {
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
}
return $data;
} }
/**
* @return array|Address|null
* @throws NotFoundHttpException
*/
private function findAddress() private function findAddress()
{ {
$id = Yii::$app->request->getQueryParam('id'); $id = Yii::$app->request->getQueryParam('id');
@ -62,7 +130,18 @@ class AddressLogic extends Component
if (!$address) { if (!$address) {
throw new NotFoundHttpException('地址未找到'); throw new NotFoundHttpException('地址未找到');
} }
return $address;
} }
/**
* @return array|Address|null
*/
private function getDefaultAddress()
{
return Address::find()
->where(['user_id' => Yii::$app->user->getId()])
->andWhere(['status' => Address::STATUS_DEFAULT])
->one();
}
} }

79
api/logic/CartLogic.php

@ -2,12 +2,12 @@
namespace api\logic; namespace api\logic;
use antgoods\goods\models\ars\Goods;
use common\models\ars\Cart;
use yii\base\Component;
use backend\modules\goods\models\ars\Goods;
use backend\modules\shop\models\ars\Cart;
use Throwable;
use Yii; use Yii;
use yii\base\BaseObject;
use yii\db\ActiveRecord; use yii\db\ActiveRecord;
use yii\helpers\Url;
use yii\web\BadRequestHttpException; use yii\web\BadRequestHttpException;
use yii\web\NotFoundHttpException; use yii\web\NotFoundHttpException;
use yii\web\ServerErrorHttpException; use yii\web\ServerErrorHttpException;
@ -18,30 +18,48 @@ use yii\web\ServerErrorHttpException;
* Class CartLogic * Class CartLogic
* @package api\logic * @package api\logic
*/ */
class CartLogic extends Component
class CartLogic extends BaseObject
{ {
public $viewAction = 'view'; public $viewAction = 'view';
const TYPE_ADD = 1;
const TYPE_SUB = -1; const TYPE_SUB = -1;
const TYPE_ADD = 1;
const TYPE_EDIT = 2;
/** /**
* @param $goodsId
* @param $count
* @param $skuId
* @return array|\yii\db\ActiveRecord|null
* @throws BadRequestHttpException
* @throws NotFoundHttpException
* @throws ServerErrorHttpException
* @throws Throwable
* @throws yii\db\StaleObjectException
* 删除购物车
*/
public function delete()
{
$ids = Yii::$app->request->getBodyParam('ids');
if (empty($ids) || !is_array($ids)) {
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
}
Helper::delCarts($ids);
Yii::$app->getResponse()->setStatusCode(204);
}
/**
* @return array|Cart|null
* @throws BadRequestHttpException * @throws BadRequestHttpException
* @throws NotFoundHttpException * @throws NotFoundHttpException
* @throws ServerErrorHttpException * @throws ServerErrorHttpException
* 添加商品到购物车 * 添加商品到购物车
*/ */
public function create($goodsId, $count, $skuId)
public function create()
{ {
$goodsId = Yii::$app->request->getBodyParam('goodsId');
$count = Yii::$app->request->getBodyParam('count');
$skuId = Yii::$app->request->getBodyParam('skuId');
if (empty($goodsId) || empty($count)) { if (empty($goodsId) || empty($count)) {
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS); throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
} }
//TODO 判断限购 //TODO 判断限购
//判断库存
Helper::checkStock($goodsId, $count, $skuId); Helper::checkStock($goodsId, $count, $skuId);
$cart = Cart::find()->where(['goods_id' => $goodsId]) $cart = Cart::find()->where(['goods_id' => $goodsId])
->andWhere(['user_id' => Yii::$app->user->getId()]) ->andWhere(['user_id' => Yii::$app->user->getId()])
@ -59,35 +77,54 @@ class CartLogic extends Component
} }
/** /**
* @param int $type
* @return bool * @return bool
* @throws BadRequestHttpException * @throws BadRequestHttpException
* @throws NotFoundHttpException * @throws NotFoundHttpException
* @throws ServerErrorHttpException
*/ */
public function addOrSubGoods($type)
public function update()
{ {
if (empty($type) || ($type != self::TYPE_SUB && $type != self::TYPE_ADD)) {
$type = Yii::$app->request->getBodyParam('type');
$count = Yii::$app->request->getBodyParam('count');
if (empty($type) || !in_array($type, [self::TYPE_ADD, self::TYPE_SUB, self::TYPE_EDIT])) {
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS); throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
} }
$cart = $this->findCart(); $cart = $this->findCart();
if (!$cart) { if (!$cart) {
throw new NotFoundHttpException('未找到该购物车'); throw new NotFoundHttpException('未找到该购物车');
} }
if ($cart->goods_count == 1 && $type == self::TYPE_SUB) {
throw new BadRequestHttpException('购物商品需至少1件');
if ($type == self::TYPE_EDIT) {
Helper::checkStock($cart->goods_id, $count, $cart->sku_id);
if (empty($count) || $count < 1) {
throw new BadRequestHttpException('未设置数量或数量超出范围');
}
$cart->goods_count = $count;
if (!$cart->save()) {
throw new ServerErrorHttpException('服务器编辑购物车数量失败');
}
} else {
if ($cart->goods_count == 1 && $type == self::TYPE_SUB) {
throw new BadRequestHttpException('商品需至少1件');
}
if ($type == self::TYPE_ADD) {
Helper::checkStock($cart->goods_id, $cart->goods_count + 1, $cart->sku_id);
}
if (!$cart->updateCounters(['goods_count' => $type])) {
throw new ServerErrorHttpException('服务器增删购物车失败');
}
} }
return $cart->updateCounters(['goods_count' => $type]);
return true;
} }
/*----------------------------------- 又一条华丽的分割线 --------------------------------------*/
/** /**
* @param $goodsId * @param $goodsId
* @param $skuId * @param $skuId
* @param $count * @param $count
* @return Cart; * @return Cart;
* 创建新购物车
* @throws ServerErrorHttpException * @throws ServerErrorHttpException
* @throws NotFoundHttpException * @throws NotFoundHttpException
* 创建新购物车
*/ */
private function addGoods($goodsId, $skuId, $count) private function addGoods($goodsId, $skuId, $count)
{ {
@ -102,7 +139,7 @@ class CartLogic extends Component
$cart->sku_id = $skuId ?: 0; $cart->sku_id = $skuId ?: 0;
$cart->goods_img = $goods->image; $cart->goods_img = $goods->image;
$cart->goods_name = $goods->name; $cart->goods_name = $goods->name;
$cart->goods_price = Helper::countPrice($goodsId, $skuId);
$cart->goods_price = Helper::goodsPrice($goodsId, $skuId);
if (!$cart->save()) { if (!$cart->save()) {
throw new ServerErrorHttpException('服务器创建购物车失败'); throw new ServerErrorHttpException('服务器创建购物车失败');
} }

122
api/logic/CollectionLogic.php

@ -0,0 +1,122 @@
<?php
namespace api\logic;
use backend\modules\goods\models\ars\Goods;
use backend\modules\shop\models\ars\Collection;
use Yii;
use Throwable;
use yii\base\Component;
use yii\web\BadRequestHttpException;
use yii\web\NotFoundHttpException;
use yii\web\ServerErrorHttpException;
/**
* @author iron
* @email weiriron@gmail.com
* Class CartLogic
* @package api\logic
*/
class CollectionLogic extends Component
{
/**
* @throws BadRequestHttpException
* @throws NotFoundHttpException
* @throws ServerErrorHttpException
* @throws Throwable
* @throws yii\db\StaleObjectException
*/
public function delete()
{
$ids = Yii::$app->request->getBodyParam('ids');
if (empty($ids) || !is_array($ids)) {
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
}
foreach ($ids as $id) {
$collection = $this->findCollection($id);
if (!$collection) {
throw new NotFoundHttpException("未找到该收藏");
}
if (!$collection->delete()) {
throw new ServerErrorHttpException('服务器取消收藏失败');
}
}
Yii::$app->getResponse()->setStatusCode(204);
}
/**
* @return bool
* @throws ServerErrorHttpException
* @throws Throwable
* @throws yii\db\StaleObjectException
*/
public function update()
{
$collection = $this->findCollectionByGoods();
if (!$collection) {
return $this->create();
}
if (!$collection->delete()) {
throw new ServerErrorHttpException('服务器取消收藏失败');
}
return true;
}
/*------------------------------------------------------------------------------------------*/
/**
* @throws NotFoundHttpException
* @throws ServerErrorHttpException
*/
private function create()
{
$goods = $this->findGoods();
$collection = new Collection();
$collection->goods_id = $goods->id;
$collection->goods_name = $goods->name;
$collection->goods_img = $goods->image;
$collection->goods_price = $goods->price;
$collection->user_id = Yii::$app->user->getId();
if (!$collection->save()) {
throw new ServerErrorHttpException('服务器新建收藏失败');
}
return true;
}
/**
* @param integer $id
* @return array|Collection|null
*/
private function findCollection($id)
{
return Collection::find()
->where(['id' => $id])
->andWhere(['user_id' => Yii::$app->user->getId()])
->one();
}
private function findCollectionByGoods()
{
$goodsId = Yii::$app->request->getQueryParam('id');
return Collection::find()
->where(['goods_id' => $goodsId])
->andWhere(['user_id' => Yii::$app->user->getId()])
->one();
}
/**
* @return Goods|null
* @throws NotFoundHttpException
*/
private function findGoods()
{
$goodsId = Yii::$app->request->getQueryParam('id');
$goods = Goods::findOne(['id' => $goodsId, 'is_delete' => Goods::IS_DELETE_NO, 'is_sale' => Goods::IS_SALE_YES]);
if (!$goods) {
throw new NotFoundHttpException('商品未找到');
}
return $goods;
}
}

53
api/logic/CommentLogic.php

@ -0,0 +1,53 @@
<?php
namespace api\logic;
use backend\modules\shop\models\ars\Comment;
use Yii;
use yii\base\Component;
use yii\web\BadRequestHttpException;
use yii\web\ServerErrorHttpException;
/**
* @author iron
* @email weiriron@gmail.com
* Class CartLogic
* @package api\logic
*/
class CommentLogic extends Component
{
public $viewAction = 'view';
/**
* @return Comment
* @throws BadRequestHttpException
* @throws ServerErrorHttpException
*
*/
public function create()
{
$content = Yii::$app->request->getBodyParam('content');
$images = Yii::$app->request->getBodyParam('images');
if (empty($content)) {
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
}
$comment = new Comment();
$comment->user_id = Yii::$app->user->getId();
$comment->nickname = Yii::$app->user->identity->nickname;
$comment->avatar = Yii::$app->user->identity->avatar;
if (!$comment->save()) {
throw new ServerErrorHttpException('服务器保存评论失败');
}
if (!empty($images) && is_array($images)) {
foreach ($images as $image) {
$data = Helper::uploadImage('content/', $image);
Helper::saveFileMsg($data, $comment->id, 4);
}
}
Helper::createdResponse($comment, $this->viewAction);
return $comment;
}
}

103
api/logic/Helper.php

@ -2,14 +2,18 @@
namespace api\logic; namespace api\logic;
use antgoods\goods\models\ars\Goods;
use antgoods\goods\models\ars\GoodsAttr;
use antgoods\goods\models\ars\GoodsSku;
use backend\modules\file\models\ars\File;
use backend\modules\goods\models\ars\Goods;
use backend\modules\goods\models\ars\GoodsAttr;
use backend\modules\goods\models\ars\GoodsSku;
use backend\modules\shop\models\ars\Cart;
use yii\data\ActiveDataProvider;
use yii\di\Instance; use yii\di\Instance;
use yii\helpers\Url; use yii\helpers\Url;
use yii\web\BadRequestHttpException; use yii\web\BadRequestHttpException;
use yii\web\NotFoundHttpException; use yii\web\NotFoundHttpException;
use Yii; use Yii;
use yii\web\ServerErrorHttpException;
/** /**
* @author iron * @author iron
@ -21,6 +25,45 @@ class Helper
{ {
const REQUEST_BAD_PARAMS = '参数缺失或包含无效参数'; const REQUEST_BAD_PARAMS = '参数缺失或包含无效参数';
public static function saveFileMsg($data, $oid, $type)
{
$file = new File();
$file->type = 1;
$file->own_type = $type;
$file->own_id = $oid;
$file->path = $data['fileName'];
$file->alias = $data['alias'];
if (!$file->save()) {
throw new ServerErrorHttpException('服务器保存文件失败');
}
}
/**
* @param $dirs
* @param $file
* @return array
* @throws ServerErrorHttpException
*/
public static function uploadImage($dirs, $file)
{
$savePath = Yii::getAlias('@app') . '/web/uploads';
if (!is_dir($savePath)) {
mkdir($savePath, 0755);
}
foreach ($dirs as $dir) {
$savePath .= "/$dir";
if (!is_dir($savePath)) {
mkdir($savePath, 0755);
}
}
$fileName = time() . rand(0, 9999) . '.' . $file->extension;
$path = $savePath . $fileName;
if (!$file->saveAs($path)) {
throw new ServerErrorHttpException('服务器保存图片失败');
}
return ['fileName' => '/uploads/' . $dirs . '/' . $fileName, 'alias' => $file->baseName . $file->extension];
}
/** /**
* @param $array * @param $array
* @return string * @return string
@ -34,6 +77,29 @@ class Helper
return implode(' ', $data); return implode(' ', $data);
} }
/**
* @param array $ids 购物车id 数组
* @throws NotFoundHttpException
* @throws ServerErrorHttpException
* @throws \Throwable
* @throws \yii\db\StaleObjectException
*/
public static function delCarts($ids)
{
foreach ($ids as $id) {
$cart = Cart::find()
->where(['id' => $id])
->andWhere(['user_id' => Yii::$app->user->getId()])
->one();
if (!$cart) {
throw new NotFoundHttpException("未找到该购物车");
}
if (!$cart->delete()) {
throw new ServerErrorHttpException('服务器删除购物车失败');
}
}
}
/** /**
* @param $goodsId * @param $goodsId
* @param $count * @param $count
@ -54,11 +120,16 @@ class Helper
} }
$stock = $sku ? $sku->stock : $goods->stock; $stock = $sku ? $sku->stock : $goods->stock;
if ($stock < $count) { if ($stock < $count) {
throw new BadRequestHttpException("商品{$goods->name}库存不足");
throw new BadRequestHttpException("{$goods->name}库存不足");
} }
return; return;
} }
/**
* @param $model
* @param $view
* post的返回头设置
*/
public static function createdResponse($model, $view) public static function createdResponse($model, $view)
{ {
$response = Yii::$app->getResponse()->setStatusCode(201); $response = Yii::$app->getResponse()->setStatusCode(201);
@ -73,7 +144,7 @@ class Helper
* @throws NotFoundHttpException * @throws NotFoundHttpException
* 计算商品价格 * 计算商品价格
*/ */
public static function countPrice($goodsId, $skuId)
public static function goodsPrice($goodsId, $skuId)
{ {
$goods = Goods::findOne($goodsId); $goods = Goods::findOne($goodsId);
if (!$goods) { if (!$goods) {
@ -91,6 +162,7 @@ class Helper
* @param $skuId * @param $skuId
* @return string * @return string
* @throws NotFoundHttpException * @throws NotFoundHttpException
* 获取拼接后的sku值
*/ */
public static function skuValue($skuId) public static function skuValue($skuId)
{ {
@ -113,4 +185,25 @@ class Helper
return implode(',', $data); return implode(',', $data);
} }
/**
* @param $query
* @return object
* @throws \yii\base\InvalidConfigException
* 获取数据
*/
public static function index($query)
{
$requestParams = Yii::$app->request->getBodyParams();
return Yii::createObject([
'class' => ActiveDataProvider::className(),
'query' => $query,
'pagination' => [
'params' => $requestParams,
],
'sort' => [
'params' => $requestParams,
],
]);
}
} }

1
api/logic/Login.php

@ -2,7 +2,6 @@
namespace api\logic; namespace api\logic;
use common\models\ars\Config;
use common\models\User; use common\models\User;
use yii\base\Exception; use yii\base\Exception;
use Yii; use Yii;

193
api/logic/OrderLogic.php

@ -2,16 +2,18 @@
namespace api\logic; namespace api\logic;
use antgoods\goods\models\ars\Goods;
use antgoods\goods\models\ars\GoodsSku;
use common\models\ars\Address;
use common\models\ars\Cart;
use common\models\ars\Order;
use common\models\ars\OrderGoods;
use common\models\ars\TakingSite;
use backend\modules\goods\models\ars\Goods;
use backend\modules\goods\models\ars\GoodsSku;
use backend\modules\shop\models\ars\Address;
use backend\modules\shop\models\ars\Cart;
use backend\modules\shop\models\ars\Order;
use backend\modules\shop\models\ars\OrderGoods;
use backend\modules\shop\models\ars\TakingSite;
use yii\base\Component; use yii\base\Component;
use Throwable;
use Yii; use Yii;
use yii\db\ActiveRecord; use yii\db\ActiveRecord;
use yii\base\Exception;
use yii\web\BadRequestHttpException; use yii\web\BadRequestHttpException;
use yii\web\NotFoundHttpException; use yii\web\NotFoundHttpException;
use yii\web\ServerErrorHttpException; use yii\web\ServerErrorHttpException;
@ -25,9 +27,6 @@ use yii\web\ServerErrorHttpException;
class OrderLogic extends Component class OrderLogic extends Component
{ {
public $viewAction = 'view'; public $viewAction = 'view';
/*创建途径类型*/
const TYPE_ADD_GOODS_PURCHASE = 1;
const TYPE_ADD_GOODS_CART = 2;
/*订单操作类型*/ /*订单操作类型*/
const TYPE_CONFIRM = 1; const TYPE_CONFIRM = 1;
const TYPE_CANCEL = 2; const TYPE_CANCEL = 2;
@ -41,12 +40,58 @@ class OrderLogic extends Component
/** /**
* @param $data
* @return bool|\Exception|\yii\base\Exception
* @return Order
* @throws BadRequestHttpException
* @throws Exception
* 创建订单
*/ */
public function update($data)
public function create()
{ {
$type = Yii::$app->request->getQueryParam('type');
//立即购物需传参数
$goodsId = Yii::$app->request->getBodyParam('goodsId');/*int 商品id*/
$count = Yii::$app->request->getBodyParam('count');/*int 数量*/
$skuId = Yii::$app->request->getBodyParam('skuId');/*int 商品sku id*/
//购物车提交订单需传参数
$cartIds = Yii::$app->request->getBodyParam('cartIds');/*array 购物车商品id*/
if ((empty($cartIds) && empty($goodsId)) || ($goodsId && empty($count))) {
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
}
$tra = Yii::$app->db->beginTransaction();
try {
$order = new Order();
$order->user_id = Yii::$app->user->getId();
$order->type = Order::TYPE_SHOPPING;
if (!$order->save()) {
throw new ServerErrorHttpException('服务器创建订单失败');
}
if ($goodsId && $count) {
$this->addGoods($order->id, $goodsId, $skuId, $count);/*添加订单商品*/
} else {
$this->addGoodsByCart($cartIds, $order->id);/*通过购物车添加订单商品*/
}
Helper::checkStock($goodsId, $count, $skuId); /*检查库存*/
$this->saveGoodsInfo($order);/*保存订单商品信息*/
$tra->commit();
Helper::createdResponse($order, $this->viewAction);
return $order;
} catch (Exception $e) {
$tra->rollBack();
throw $e;
}
}
/**
* @return bool
* @throws Exception
* @throws Throwable
* @throws yii\base\InvalidConfigException
* 根据操作类型更新订单
*/
public function update()
{
$data = Yii::$app->request->getBodyParams();
$type = Yii::$app->request->getBodyParam('type');
$order = $this->findOrder(); $order = $this->findOrder();
$tra = Yii::$app->db->beginTransaction(); $tra = Yii::$app->db->beginTransaction();
try { try {
@ -61,7 +106,7 @@ class OrderLogic extends Component
$this->take($order); $this->take($order);
break; break;
case self::TYPE_CHANGE_SHIPPING_TYPE: case self::TYPE_CHANGE_SHIPPING_TYPE:
$this->updateShippingType($order, $data);
$this->switchShippingType($order, $data);
break; break;
case self::TYPE_CHANGE_ADDRESS: case self::TYPE_CHANGE_ADDRESS:
$this->changeAddress($order, $data); $this->changeAddress($order, $data);
@ -75,17 +120,19 @@ class OrderLogic extends Component
} }
$tra->commit(); $tra->commit();
return true; return true;
} catch (\yii\base\Exception $e) {
} catch (Exception $e) {
$tra->rollBack(); $tra->rollBack();
return $e;
throw $e;
} }
} }
/*----------------------------------------- 华丽的分割线 -----------------------------------------*/
/** /**
* @param Order $order * @param Order $order
* @param array $data * @param array $data
* @throws BadRequestHttpException * @throws BadRequestHttpException
* @throws NotFoundHttpException * @throws NotFoundHttpException
* 添加地址到订单
*/ */
private function changeAddress($order, $data) private function changeAddress($order, $data)
{ {
@ -95,9 +142,7 @@ class OrderLogic extends Component
if ($order->shipping_type !== Order::SHIPPING_TYPE_EXPRESS) { if ($order->shipping_type !== Order::SHIPPING_TYPE_EXPRESS) {
throw new BadRequestHttpException('配送方式异常'); throw new BadRequestHttpException('配送方式异常');
} }
$address = Address::find()
->where(['id' => $data['address_id'], 'user_id' => Yii::$app->user->getId()])
->one();
$address = Address::findOne(['id' => $data['address_id'], 'user_id' => Yii::$app->user->getId()]);
if (!$address) { if (!$address) {
throw new NotFoundHttpException('收货地址未找到'); throw new NotFoundHttpException('收货地址未找到');
} }
@ -114,6 +159,7 @@ class OrderLogic extends Component
* @param array $data * @param array $data
* @throws BadRequestHttpException * @throws BadRequestHttpException
* @throws NotFoundHttpException * @throws NotFoundHttpException
* 修改自提点
*/ */
private function changeTakingSite($order, $data) private function changeTakingSite($order, $data)
{ {
@ -135,8 +181,9 @@ class OrderLogic extends Component
* @param Order $order * @param Order $order
* @param array $data * @param array $data
* @throws BadRequestHttpException * @throws BadRequestHttpException
* 切换配送方式
*/ */
private function updateShippingType($order, $data)
private function switchShippingType($order, $data)
{ {
if (!isset($data['shipping_type'])) { if (!isset($data['shipping_type'])) {
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS); throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
@ -153,6 +200,9 @@ class OrderLogic extends Component
* @throws BadRequestHttpException * @throws BadRequestHttpException
* @throws NotFoundHttpException * @throws NotFoundHttpException
* @throws ServerErrorHttpException * @throws ServerErrorHttpException
* @throws Throwable
* @throws yii\db\StaleObjectException
* 确定订单
*/ */
private function confirm($order, $data) private function confirm($order, $data)
{ {
@ -160,9 +210,8 @@ class OrderLogic extends Component
throw new BadRequestHttpException('订单状态异常'); throw new BadRequestHttpException('订单状态异常');
} }
if ($order->shipping_type === Order::SHIPPING_TYPE_PICKED_UP) { if ($order->shipping_type === Order::SHIPPING_TYPE_PICKED_UP) {
if (!isset($data['consignee']) || !isset($data['phone'])
|| empty($data['consignee']) || empty($data['phone'])) {
throw new BadRequestHttpException('(联系人)参数无效');
if ($data['consignee'] ?? false || $data['phone'] ?? false) {
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
} }
$order->consignee = $data['consignee']; $order->consignee = $data['consignee'];
$order->phone = $data['phone']; $order->phone = $data['phone'];
@ -173,15 +222,35 @@ class OrderLogic extends Component
if (isset($data['remarks'])) { if (isset($data['remarks'])) {
$order->remarks = $data['remarks']; $order->remarks = $data['remarks'];
} }
Helper::delCarts($this->getCartsIds($order)); //删除购物车对应商品
$order->status = Order::STATUS_NONPAYMENT; $order->status = Order::STATUS_NONPAYMENT;
$this->updateStock($order, self::TYPE_SUB_STOCK); $this->updateStock($order, self::TYPE_SUB_STOCK);
} }
/**
* @param $order
* @return array
* 获取订单商品对应购物车商品id
*/
private function getCartsIds($order)
{
$allGoods = $this->findOrderGoods($order->id);
$ids = [];
foreach ($allGoods as $goods) {
$cart = Cart::findOne(['goods_id' => $goods->goods_id, 'user_id' => Yii::$app->user->getId()]);
if ($cart) {
$ids[] = $cart->id;
}
}
return $ids;
}
/** /**
* @param Order $order * @param Order $order
* @throws BadRequestHttpException * @throws BadRequestHttpException
* @throws NotFoundHttpException * @throws NotFoundHttpException
* @throws ServerErrorHttpException * @throws ServerErrorHttpException
* 取消订单
*/ */
private function cancel($order) private function cancel($order)
{ {
@ -189,12 +258,13 @@ class OrderLogic extends Component
throw new BadRequestHttpException('订单状态异常'); throw new BadRequestHttpException('订单状态异常');
} }
$order->status = Order::STATUS_CANCEL; $order->status = Order::STATUS_CANCEL;
$this->updateStock($order, self::TYPE_ADD_STOCK);
$this->updateStock($order, self::TYPE_ADD_STOCK);/*更新库存*/
} }
/** /**
* @param Order $order * @param Order $order
* @throws BadRequestHttpException * @throws BadRequestHttpException
* 确认收货
*/ */
private function take($order) private function take($order)
{ {
@ -210,6 +280,7 @@ class OrderLogic extends Component
* @throws BadRequestHttpException * @throws BadRequestHttpException
* @throws NotFoundHttpException * @throws NotFoundHttpException
* @throws ServerErrorHttpException * @throws ServerErrorHttpException
* 更新库存
*/ */
private function updateStock($id, $type) private function updateStock($id, $type)
{ {
@ -234,57 +305,27 @@ class OrderLogic extends Component
} }
/** /**
* @param $originId
* @param $count
* @param $skuId
* @return bool
* @throws BadRequestHttpException
* @param array $cartIds 购物车商品id
* @param int $id 订单id
* @throws Exception
* @throws NotFoundHttpException * @throws NotFoundHttpException
* 创建订单并添加商品
* 通过购物车添加商品
*/ */
public function create($originId, $count, $skuId)
private function addGoodsByCart($cartIds, $id)
{ {
$type = Yii::$app->request->getQueryParam('type');
if (empty($type) || ($type == self::TYPE_ADD_GOODS_CART && empty($originId)) ||
($type == self::TYPE_ADD_GOODS_PURCHASE && (empty($count) || empty($originId)))) {
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
}
if ($type == self::TYPE_ADD_GOODS_PURCHASE) {
$goodsId = $originId;
} else {
$cart = Cart::findOne($originId);
foreach ($cartIds as $cartId) {
$cart = Cart::findOne($cartId);
if (!$cart) { if (!$cart) {
throw new NotFoundHttpException('购物车未找到'); throw new NotFoundHttpException('购物车未找到');
} }
$goodsId = $cart->goods_id;
$skuId = $cart->sku_id;
$count = $cart->goods_count;
}
/*检查库存*/
Helper::checkStock($goodsId, $count, $skuId);
$tra = Yii::$app->db->beginTransaction();
try {
$order = new Order();
// $order->user_id = Yii::$app->user->getId();
$order->user_id = 1;
$order->type = Order::TYPE_SHOPPING;
if (!$order->save()) {
throw new ServerErrorHttpException('服务器创建订单失败');
}
$this->addGoods($order->id, $goodsId, $skuId, $count);/*创建订单商品*/
$this->saveGoodsInfo($order);/*保存订单商品信息*/
$tra->commit();
Helper::createdResponse($order, $this->viewAction);
return $order;
} catch (\Exception $e) {
$tra->rollBack();
throw $e;
$this->addGoods($id, $cart->goods_id, $cart->sku_id, $cart->goods_count);
} }
} }
/** /**
* @param Order $order * @param Order $order
* @throws ServerErrorHttpException
* @throws Exception
* 保存商品总价格和总数量信息到
*/ */
private function saveGoodsInfo($order) private function saveGoodsInfo($order)
{ {
@ -294,26 +335,23 @@ class OrderLogic extends Component
$order->goods_count += $goods->goods_count; $order->goods_count += $goods->goods_count;
} }
if (!$order->save()) { if (!$order->save()) {
throw new ServerErrorHttpException('服务器创建订单失败');
throw new Exception('服务器创建订单失败');
} }
} }
/** /**
* @param int $id
* @param $id
* @param int $goodsId * @param int $goodsId
* @param int $skuId
* @param int $count
* @param $skuId
* @param $count
* @throws Exception
* @throws NotFoundHttpException * @throws NotFoundHttpException
* @throws ServerErrorHttpException
* 创建订单商品
* 添加商品到订单
*/ */
private function addGoods($id, $goodsId, $skuId, $count) private function addGoods($id, $goodsId, $skuId, $count)
{ {
$goods = Goods::findOne($goodsId); $goods = Goods::findOne($goodsId);
if (!$goods) {
throw new NotFoundHttpException('商品未找到');
}
$orderGoods = new OrderGoods(); $orderGoods = new OrderGoods();
$orderGoods->order_id = $id; $orderGoods->order_id = $id;
$orderGoods->goods_id = $goodsId; $orderGoods->goods_id = $goodsId;
@ -322,15 +360,15 @@ class OrderLogic extends Component
$orderGoods->goods_count = $count; $orderGoods->goods_count = $count;
$orderGoods->goods_img = $goods->image; $orderGoods->goods_img = $goods->image;
$orderGoods->goods_name = $goods->name; $orderGoods->goods_name = $goods->name;
$orderGoods->price = Helper::countPrice($goodsId, $skuId);
$orderGoods->price = Helper::goodsPrice($goodsId, $skuId);
if (!$orderGoods->save()) { if (!$orderGoods->save()) {
throw new ServerErrorHttpException('服务器添加订单商品失败');
throw new Exception('服务器添加订单商品失败');
} }
} }
/** /**
* @return array|Order|null * @return array|Order|null
* 获取订单
* 根据id获取订单
*/ */
private function findOrder() private function findOrder()
{ {
@ -344,6 +382,7 @@ class OrderLogic extends Component
/** /**
* @param $id * @param $id
* @return array|ActiveRecord[]|OrderGoods[] * @return array|ActiveRecord[]|OrderGoods[]
* 根据订单 id 获取所有订单商品
*/ */
private function findOrderGoods($id) private function findOrderGoods($id)
{ {

10
backend/config/main.php

@ -11,7 +11,13 @@ return [
'bootstrap' => ['log'], 'bootstrap' => ['log'],
'modules' => [ 'modules' => [
'goods' => [ 'goods' => [
'class' => 'goods\Module',
'class' => '\backend\modules\goods\Module',
],
'file' => [
'class' => '\backend\modules\file\Module',
],
'shop' => [
'class' => '\backend\modules\shop\Module',
], ],
], ],
'components' => [ 'components' => [
@ -22,7 +28,7 @@ return [
'csrfParam' => '_csrf-api', 'csrfParam' => '_csrf-api',
], ],
'user' => [ 'user' => [
'identityClass' => 'backend\models\User',
'identityClass' => 'common\models\User',
'enableAutoLogin' => true, 'enableAutoLogin' => true,
'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true], 'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
], ],

1
backend/models/LoginForm.php

@ -4,6 +4,7 @@ namespace backend\models;
use Yii; use Yii;
use yii\base\Model; use yii\base\Model;
use common\models\User;
/** /**
* Login form * Login form

24
backend/modules/file/Module.php

@ -0,0 +1,24 @@
<?php
namespace backend\modules\file;
/**
* file module definition class
*/
class Module extends \yii\base\Module
{
/**
* {@inheritdoc}
*/
public $controllerNamespace = 'backend\modules\file\controllers';
/**
* {@inheritdoc}
*/
public function init()
{
parent::init();
// custom initialization code goes here
}
}

backend/logic/file/FileManager.php → backend/modules/file/logic/file/FileManager.php

backend/migrations/m191112_022131_create_table_file.php → backend/modules/file/migrations/m191112_022131_create_table_file.php

backend/migrations/m191112_022532_create_table_tem_file.php → backend/modules/file/migrations/m191112_022532_create_table_tem_file.php

backend/models/ars/File.php → backend/modules/file/models/ars/File.php

backend/models/ars/TemFile.php → backend/modules/file/models/ars/TemFile.php

goods/Module.php → backend/modules/goods/Module.php

goods/assets/custom/sku.49a56a9198d9c3ec233c.js → backend/modules/goods/assets/custom/sku.49a56a9198d9c3ec233c.js

goods/assets/custom/sku.52802ed907a316501cd7.js → backend/modules/goods/assets/custom/sku.52802ed907a316501cd7.js

goods/assets/custom/sku.9a46222d01b3d601e5ad.js → backend/modules/goods/assets/custom/sku.9a46222d01b3d601e5ad.js

goods/assets/custom/sku_item.6649e882bedbeb22ea3d.js → backend/modules/goods/assets/custom/sku_item.6649e882bedbeb22ea3d.js

goods/assets/js/jquery.js → backend/modules/goods/assets/js/jquery.js

goods/controllers/AttributeController.php → backend/modules/goods/controllers/AttributeController.php

goods/controllers/BrandController.php → backend/modules/goods/controllers/BrandController.php

goods/controllers/CategoryController.php → backend/modules/goods/controllers/CategoryController.php

goods/controllers/GoodsController.php → backend/modules/goods/controllers/GoodsController.php

goods/controllers/ShopCategoryController.php → backend/modules/goods/controllers/ShopCategoryController.php

goods/controllers/SupplierController.php → backend/modules/goods/controllers/SupplierController.php

goods/logic/goods/GoodsManager.php → backend/modules/goods/logic/goods/GoodsManager.php

goods/migrations/m191119_021851_create_table_atg_shop_category.php → backend/modules/goods/migrations/m191119_021851_create_table_atg_shop_category.php

goods/migrations/m191119_022641_create_table_atg_category.php → backend/modules/goods/migrations/m191119_022641_create_table_atg_category.php

goods/migrations/m191119_022939_create_table_atg_attribute.php → backend/modules/goods/migrations/m191119_022939_create_table_atg_attribute.php

goods/migrations/m191119_023115_create_table_atg_goods_attr.php → backend/modules/goods/migrations/m191119_023115_create_table_atg_goods_attr.php

goods/migrations/m191119_024029_create_table_atg_brand.php → backend/modules/goods/migrations/m191119_024029_create_table_atg_brand.php

goods/migrations/m191119_024205_create_table_atg_goods.php → backend/modules/goods/migrations/m191119_024205_create_table_atg_goods.php

goods/migrations/m191119_024345_create_table_atg_goods_sku.php → backend/modules/goods/migrations/m191119_024345_create_table_atg_goods_sku.php

goods/migrations/m191119_025607_create_table_atg_supplier.php → backend/modules/goods/migrations/m191119_025607_create_table_atg_supplier.php

goods/migrations/m191119_025843_create_table_atg_filter_attr.php → backend/modules/goods/migrations/m191119_025843_create_table_atg_filter_attr.php

goods/migrations/m191125_012449_update_column_icon_type_in_atg_category.php → backend/modules/goods/migrations/m191125_012449_update_column_icon_type_in_atg_category.php

goods/migrations/m191125_083820_drop_column_icon_type_in_table_atg_category.php → backend/modules/goods/migrations/m191125_083820_drop_column_icon_type_in_table_atg_category.php

goods/migrations/m191125_084547_update_column_pid_and_icon_in_table_atg_category.php → backend/modules/goods/migrations/m191125_084547_update_column_pid_and_icon_in_table_atg_category.php

goods/migrations/m191125_104137_drop_column_icon_type_in_table_atg_shop_category.php → backend/modules/goods/migrations/m191125_104137_drop_column_icon_type_in_table_atg_shop_category.php

goods/migrations/m191125_104510_update_column_pid_and_icon_in_table_atg_shop_category.php → backend/modules/goods/migrations/m191125_104510_update_column_pid_and_icon_in_table_atg_shop_category.php

goods/migrations/m191127_114228_add_column_is_manaul_in_table_atg_goods_sku.php → backend/modules/goods/migrations/m191127_114228_add_column_is_manaul_in_table_atg_goods_sku.php

goods/migrations/m191129_010349_add_column_sku_mode_in_atg_goods.php → backend/modules/goods/migrations/m191129_010349_add_column_sku_mode_in_atg_goods.php

goods/migrations/m191129_020131_add_columns_goods_id_and_attr_id_in_table_atg_goods_attr.php → backend/modules/goods/migrations/m191129_020131_add_columns_goods_id_and_attr_id_in_table_atg_goods_attr.php

goods/migrations/m191130_004933_add_column_cat_id_in_table_atg_attribute.php → backend/modules/goods/migrations/m191130_004933_add_column_cat_id_in_table_atg_attribute.php

goods/migrations/m191202_082041_drop_columns_in_table_atg_goods_sku.php → backend/modules/goods/migrations/m191202_082041_drop_columns_in_table_atg_goods_sku.php

goods/migrations/sql/goods.sql → backend/modules/goods/migrations/sql/goods.sql

goods/migrations/sql/goods_sku.sql → backend/modules/goods/migrations/sql/goods_sku.sql

goods/models/ars/Attribute.php → backend/modules/goods/models/ars/Attribute.php

goods/models/ars/Brand.php → backend/modules/goods/models/ars/Brand.php

goods/models/ars/Category.php → backend/modules/goods/models/ars/Category.php

goods/models/ars/FilterAttr.php → backend/modules/goods/models/ars/FilterAttr.php

goods/models/ars/Goods.php → backend/modules/goods/models/ars/Goods.php

goods/models/ars/GoodsAttr.php → backend/modules/goods/models/ars/GoodsAttr.php

goods/models/ars/GoodsSku.php → backend/modules/goods/models/ars/GoodsSku.php

goods/models/ars/ShopCategory.php → backend/modules/goods/models/ars/ShopCategory.php

goods/models/ars/Supplier.php → backend/modules/goods/models/ars/Supplier.php

goods/models/searchs/AttributeSearch.php → backend/modules/goods/models/searchs/AttributeSearch.php

goods/models/searchs/BrandSearch.php → backend/modules/goods/models/searchs/BrandSearch.php

goods/models/searchs/CategorySearch.php → backend/modules/goods/models/searchs/CategorySearch.php

goods/models/searchs/GoodsSearch.php → backend/modules/goods/models/searchs/GoodsSearch.php

goods/models/searchs/ShopCategorySearch.php → backend/modules/goods/models/searchs/ShopCategorySearch.php

goods/models/searchs/SupplierSearch.php → backend/modules/goods/models/searchs/SupplierSearch.php

goods/views/attribute/_form.php → backend/modules/goods/views/attribute/_form.php

goods/views/attribute/_search.php → backend/modules/goods/views/attribute/_search.php

goods/views/attribute/create.php → backend/modules/goods/views/attribute/create.php

goods/views/attribute/index.php → backend/modules/goods/views/attribute/index.php

goods/views/attribute/update.php → backend/modules/goods/views/attribute/update.php

goods/views/attribute/view.php → backend/modules/goods/views/attribute/view.php

goods/views/brand/_form.php → backend/modules/goods/views/brand/_form.php

goods/views/brand/_search.php → backend/modules/goods/views/brand/_search.php

goods/views/brand/create.php → backend/modules/goods/views/brand/create.php

goods/views/brand/index.php → backend/modules/goods/views/brand/index.php

goods/views/brand/update.php → backend/modules/goods/views/brand/update.php

goods/views/brand/view.php → backend/modules/goods/views/brand/view.php

goods/views/category/_form.php → backend/modules/goods/views/category/_form.php

goods/views/category/_search.php → backend/modules/goods/views/category/_search.php

goods/views/category/create.php → backend/modules/goods/views/category/create.php

goods/views/category/index.php → backend/modules/goods/views/category/index.php

goods/views/category/update.php → backend/modules/goods/views/category/update.php

goods/views/category/view.php → backend/modules/goods/views/category/view.php

goods/views/config/index.php → backend/modules/goods/views/config/index.php

goods/views/goods/_form.php → backend/modules/goods/views/goods/_form.php

goods/views/goods/_search.php → backend/modules/goods/views/goods/_search.php

goods/views/goods/attribute.php → backend/modules/goods/views/goods/attribute.php

goods/views/goods/create.php → backend/modules/goods/views/goods/create.php

goods/views/goods/filter_attribute.php → backend/modules/goods/views/goods/filter_attribute.php

goods/views/goods/goods.php → backend/modules/goods/views/goods/goods.php

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save