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'],
'modules' => [],
'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'],
'collection' => ['class' => 'api\logic\CollectionLogic'],
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
@ -49,32 +51,42 @@ return [
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'goods', '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' => '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;
use backend\models\ars\Address;
use api\logic\Helper;
use backend\modules\shop\models\ars\Address;
use Yii;
use Throwable;
use yii\web\NotFoundHttpException;
/**
@ -12,32 +14,44 @@ use yii\web\NotFoundHttpException;
*/
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()
{
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()
{
return $this->object->update();
}
/**
* @return Address|null
* @throws NotFoundHttpException
* @throws yii\base\Exception
* @throws yii\web\BadRequestHttpException
* @throws yii\web\ServerErrorHttpException
*/
public function actionCreate()
{
return Yii::$app->address->create();
return $this->object->create();
}
}

58
api/controllers/CartController.php

@ -2,9 +2,9 @@
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;
/**
@ -13,42 +13,68 @@ use Yii;
*/
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()
{
$action = parent::actions();
unset($action['index']);
unset($action['delete']);
$action['options'] = [
'class' => 'yii\rest\OptionsAction',
'collectionOptions' => ['DELETE', 'PUT', 'OPTIONS']
];
return $action;
}
/**
* @return object
* @throws yii\base\InvalidConfigException
*/
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
* 更新购物车(增/删商品)
* @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()
{
$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()
{
$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;
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\helpers\ArrayHelper;
use yii\rest\ActiveController;
use yii\web\NotFoundHttpException;
use yii\base\InvalidConfigException;
use Yii;
/**
* @author iron
* @email weiriron@gmail.com
@ -14,14 +21,32 @@ use Yii;
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()
{
return ArrayHelper::merge(parent::behaviors(), [
'authenticatior' => [
'class' => HttpBearerAuth::className(),
'except' => [],
'except' => ['token'],
]
]);
}
@ -40,6 +65,13 @@ class CommonController extends ActiveController
return [];
}
/**
* @param string $action
* @param null $model
* @param array $params
* @throws NotFoundHttpException
* 权限控制
*/
public function checkAccess($action, $model = null, $params = [])
{
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;
use yii\filters\auth\HttpBearerAuth;
use yii\helpers\ArrayHelper;
use yii\rest\ActiveController;
use Yii;
/**
* @author iron
@ -12,7 +10,7 @@ use yii\rest\ActiveController;
*/
class GoodsController extends CommonController
{
public $modelClass = 'goods\models\ars\Goods';
public $modelClass = 'backend\modules\goods\models\ars\Goods';
public function actions()
{
@ -30,18 +28,20 @@ class GoodsController extends CommonController
{
$keyword = \Yii::$app->request->getBodyParam('keyword');
$category = \Yii::$app->request->getBodyParam('category');
$data = \Yii::$app->request->getBodyParams();
$data['user'] = true;
\Yii::$app->request->setBodyParams($data);
$array = [];
if ($keyword) {
$data['name'] = ['like' => $keyword];
$array['name'] = ['like' => $keyword];
}
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;
use yii\web\ForbiddenHttpException;
use Yii;
use yii\base\InvalidConfigException;
use Throwable;
use backend\modules\shop\models\ars\Order;
/**
* @author iron
* @email weiriron@gmail.com
*/
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()
{
$action = parent::actions();
@ -25,38 +31,48 @@ class OrderController extends CommonController
return $action;
}
/**
* @return array
* @throws InvalidConfigException
*/
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()];
$status = Yii::$app->request->getBodyParam('status');
if ($status) {
$array['status'] = $status;
}
$filter = ['class' => 'yii\data\ActiveDataFilter',
return ['class' => 'yii\data\ActiveDataFilter',
'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()
{
$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()
{
$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()
{
//TODO 首页信息
\Yii::$app->userLogic->DailyActive();
\Yii::$app->visitor->DailyActive();
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;
class UserController extends ActiveController
class UserController extends CommonController
{
public $modelClass = 'common\models\User';
public function behaviors()
{
return ArrayHelper::merge(parent::behaviors(), [
'authenticatior' => [
'class' => HttpBearerAuth::className(),
'except' => ['token'],
]
]);
}
public function actions()
{
$action = parent::actions();
unset($action['delete']);
unset($action['create']);
unset($action['update']);
unset($action['index']);
unset($action['view']);
$action['options'] = [
'class' => 'yii\rest\OptionsAction',
'collectionOptions' => ['PUT', 'GET', 'OPTIONS']

105
api/logic/AddressLogic.php

@ -3,9 +3,10 @@
namespace api\logic;
use backend\models\ars\Address;
use backend\modules\shop\models\ars\Address;
use Yii;
use yii\base\Component;
use yii\base\BaseObject;
use yii\db\Exception;
use yii\web\BadRequestHttpException;
use yii\web\NotFoundHttpException;
use yii\web\ServerErrorHttpException;
@ -16,42 +17,109 @@ use yii\web\ServerErrorHttpException;
* Class CartLogic
* @package api\logic
*/
class AddressLogic extends Component
class AddressLogic extends BaseObject
{
const SET_DEFAULT_ADDRESS = 1;
public $viewAction = 'view';
/**
* @return Address
* @throws BadRequestHttpException
* @throws ServerErrorHttpException
* 创建地址
*/
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->user_id = Yii::$app->user->getId();
$address->load($data, '');
if (!$address->save()) {
throw new ServerErrorHttpException('地址添加失败');
}
if (!$this->getDefaultAddress()) {
$this->setDefaultAddress($address);
}
Helper::createdResponse($address, $this->viewAction);
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)
{
$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()
{
$id = Yii::$app->request->getQueryParam('id');
@ -62,7 +130,18 @@ class AddressLogic extends Component
if (!$address) {
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;
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\base\BaseObject;
use yii\db\ActiveRecord;
use yii\helpers\Url;
use yii\web\BadRequestHttpException;
use yii\web\NotFoundHttpException;
use yii\web\ServerErrorHttpException;
@ -18,30 +18,48 @@ use yii\web\ServerErrorHttpException;
* Class CartLogic
* @package api\logic
*/
class CartLogic extends Component
class CartLogic extends BaseObject
{
public $viewAction = 'view';
const TYPE_ADD = 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 NotFoundHttpException
* @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)) {
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
}
//TODO 判断限购
//判断库存
Helper::checkStock($goodsId, $count, $skuId);
$cart = Cart::find()->where(['goods_id' => $goodsId])
->andWhere(['user_id' => Yii::$app->user->getId()])
@ -59,35 +77,54 @@ class CartLogic extends Component
}
/**
* @param int $type
* @return bool
* @throws BadRequestHttpException
* @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);
}
$cart = $this->findCart();
if (!$cart) {
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 $skuId
* @param $count
* @return Cart;
* 创建新购物车
* @throws ServerErrorHttpException
* @throws NotFoundHttpException
* 创建新购物车
*/
private function addGoods($goodsId, $skuId, $count)
{
@ -102,7 +139,7 @@ class CartLogic extends Component
$cart->sku_id = $skuId ?: 0;
$cart->goods_img = $goods->image;
$cart->goods_name = $goods->name;
$cart->goods_price = Helper::countPrice($goodsId, $skuId);
$cart->goods_price = Helper::goodsPrice($goodsId, $skuId);
if (!$cart->save()) {
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;
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\helpers\Url;
use yii\web\BadRequestHttpException;
use yii\web\NotFoundHttpException;
use Yii;
use yii\web\ServerErrorHttpException;
/**
* @author iron
@ -21,6 +25,45 @@ class Helper
{
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
* @return string
@ -34,6 +77,29 @@ class Helper
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 $count
@ -54,11 +120,16 @@ class Helper
}
$stock = $sku ? $sku->stock : $goods->stock;
if ($stock < $count) {
throw new BadRequestHttpException("商品{$goods->name}库存不足");
throw new BadRequestHttpException("{$goods->name}库存不足");
}
return;
}
/**
* @param $model
* @param $view
* post的返回头设置
*/
public static function createdResponse($model, $view)
{
$response = Yii::$app->getResponse()->setStatusCode(201);
@ -73,7 +144,7 @@ class Helper
* @throws NotFoundHttpException
* 计算商品价格
*/
public static function countPrice($goodsId, $skuId)
public static function goodsPrice($goodsId, $skuId)
{
$goods = Goods::findOne($goodsId);
if (!$goods) {
@ -91,6 +162,7 @@ class Helper
* @param $skuId
* @return string
* @throws NotFoundHttpException
* 获取拼接后的sku值
*/
public static function skuValue($skuId)
{
@ -113,4 +185,25 @@ class Helper
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;
use common\models\ars\Config;
use common\models\User;
use yii\base\Exception;
use Yii;

193
api/logic/OrderLogic.php

@ -2,16 +2,18 @@
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 Throwable;
use Yii;
use yii\db\ActiveRecord;
use yii\base\Exception;
use yii\web\BadRequestHttpException;
use yii\web\NotFoundHttpException;
use yii\web\ServerErrorHttpException;
@ -25,9 +27,6 @@ use yii\web\ServerErrorHttpException;
class OrderLogic extends Component
{
public $viewAction = 'view';
/*创建途径类型*/
const TYPE_ADD_GOODS_PURCHASE = 1;
const TYPE_ADD_GOODS_CART = 2;
/*订单操作类型*/
const TYPE_CONFIRM = 1;
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();
$tra = Yii::$app->db->beginTransaction();
try {
@ -61,7 +106,7 @@ class OrderLogic extends Component
$this->take($order);
break;
case self::TYPE_CHANGE_SHIPPING_TYPE:
$this->updateShippingType($order, $data);
$this->switchShippingType($order, $data);
break;
case self::TYPE_CHANGE_ADDRESS:
$this->changeAddress($order, $data);
@ -75,17 +120,19 @@ class OrderLogic extends Component
}
$tra->commit();
return true;
} catch (\yii\base\Exception $e) {
} catch (Exception $e) {
$tra->rollBack();
return $e;
throw $e;
}
}
/*----------------------------------------- 华丽的分割线 -----------------------------------------*/
/**
* @param Order $order
* @param array $data
* @throws BadRequestHttpException
* @throws NotFoundHttpException
* 添加地址到订单
*/
private function changeAddress($order, $data)
{
@ -95,9 +142,7 @@ class OrderLogic extends Component
if ($order->shipping_type !== Order::SHIPPING_TYPE_EXPRESS) {
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) {
throw new NotFoundHttpException('收货地址未找到');
}
@ -114,6 +159,7 @@ class OrderLogic extends Component
* @param array $data
* @throws BadRequestHttpException
* @throws NotFoundHttpException
* 修改自提点
*/
private function changeTakingSite($order, $data)
{
@ -135,8 +181,9 @@ class OrderLogic extends Component
* @param Order $order
* @param array $data
* @throws BadRequestHttpException
* 切换配送方式
*/
private function updateShippingType($order, $data)
private function switchShippingType($order, $data)
{
if (!isset($data['shipping_type'])) {
throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS);
@ -153,6 +200,9 @@ class OrderLogic extends Component
* @throws BadRequestHttpException
* @throws NotFoundHttpException
* @throws ServerErrorHttpException
* @throws Throwable
* @throws yii\db\StaleObjectException
* 确定订单
*/
private function confirm($order, $data)
{
@ -160,9 +210,8 @@ class OrderLogic extends Component
throw new BadRequestHttpException('订单状态异常');
}
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->phone = $data['phone'];
@ -173,15 +222,35 @@ class OrderLogic extends Component
if (isset($data['remarks'])) {
$order->remarks = $data['remarks'];
}
Helper::delCarts($this->getCartsIds($order)); //删除购物车对应商品
$order->status = Order::STATUS_NONPAYMENT;
$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
* @throws BadRequestHttpException
* @throws NotFoundHttpException
* @throws ServerErrorHttpException
* 取消订单
*/
private function cancel($order)
{
@ -189,12 +258,13 @@ class OrderLogic extends Component
throw new BadRequestHttpException('订单状态异常');
}
$order->status = Order::STATUS_CANCEL;
$this->updateStock($order, self::TYPE_ADD_STOCK);
$this->updateStock($order, self::TYPE_ADD_STOCK);/*更新库存*/
}
/**
* @param Order $order
* @throws BadRequestHttpException
* 确认收货
*/
private function take($order)
{
@ -210,6 +280,7 @@ class OrderLogic extends Component
* @throws BadRequestHttpException
* @throws NotFoundHttpException
* @throws ServerErrorHttpException
* 更新库存
*/
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
* 创建订单并添加商品
* 通过购物车添加商品
*/
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) {
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
* @throws ServerErrorHttpException
* @throws Exception
* 保存商品总价格和总数量信息到
*/
private function saveGoodsInfo($order)
{
@ -294,26 +335,23 @@ class OrderLogic extends Component
$order->goods_count += $goods->goods_count;
}
if (!$order->save()) {
throw new ServerErrorHttpException('服务器创建订单失败');
throw new Exception('服务器创建订单失败');
}
}
/**
* @param int $id
* @param $id
* @param int $goodsId
* @param int $skuId
* @param int $count
* @param $skuId
* @param $count
* @throws Exception
* @throws NotFoundHttpException
* @throws ServerErrorHttpException
* 创建订单商品
* 添加商品到订单
*/
private function addGoods($id, $goodsId, $skuId, $count)
{
$goods = Goods::findOne($goodsId);
if (!$goods) {
throw new NotFoundHttpException('商品未找到');
}
$orderGoods = new OrderGoods();
$orderGoods->order_id = $id;
$orderGoods->goods_id = $goodsId;
@ -322,15 +360,15 @@ class OrderLogic extends Component
$orderGoods->goods_count = $count;
$orderGoods->goods_img = $goods->image;
$orderGoods->goods_name = $goods->name;
$orderGoods->price = Helper::countPrice($goodsId, $skuId);
$orderGoods->price = Helper::goodsPrice($goodsId, $skuId);
if (!$orderGoods->save()) {
throw new ServerErrorHttpException('服务器添加订单商品失败');
throw new Exception('服务器添加订单商品失败');
}
}
/**
* @return array|Order|null
* 获取订单
* 根据id获取订单
*/
private function findOrder()
{
@ -344,6 +382,7 @@ class OrderLogic extends Component
/**
* @param $id
* @return array|ActiveRecord[]|OrderGoods[]
* 根据订单 id 获取所有订单商品
*/
private function findOrderGoods($id)
{

10
backend/config/main.php

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

1
backend/models/LoginForm.php

@ -4,6 +4,7 @@ namespace backend\models;
use Yii;
use yii\base\Model;
use common\models\User;
/**
* 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