OrderAction.php 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. <?php
  2. namespace common\models\order;
  3. use common\enums\AddonsEnum;
  4. use common\enums\OrderStatusEnum;
  5. use common\enums\StatusEnum;
  6. use common\models\user\User;
  7. use Yii;
  8. use yii\db\Exception;
  9. /**
  10. * This is the model class for table "{{%order_action}}".
  11. *
  12. *
  13. * @property int $id 动作id
  14. * @property int $order_id 订单id
  15. * @property string $action 动作内容
  16. * @property int $member_id 操作人id
  17. * @property string|null $member_name 操作人
  18. * @property int $order_status 订单状态
  19. * @property string $order_status_text 订单状态名称
  20. * @property int|null $status 状态[-1:删除;0:禁用;1启用]
  21. * @property int|null $created_at
  22. * @property int|null $updated_at
  23. */
  24. class OrderAction extends \common\models\base\BaseActiveRecord
  25. {
  26. /**
  27. * {@inheritdoc}
  28. */
  29. public static function tableName()
  30. {
  31. return '{{%order_action}}';
  32. }
  33. /**
  34. * {@inheritdoc}
  35. */
  36. public function rules()
  37. {
  38. return [
  39. [['order_id', 'order_status'], 'required'],
  40. [['order_id', 'member_id', 'order_status', 'status', 'created_at', 'updated_at'], 'integer'],
  41. [['action', 'order_status_text'], 'string', 'max' => 200],
  42. [['member_name'], 'string', 'max' => 50],
  43. ];
  44. }
  45. /**
  46. * {@inheritdoc}
  47. */
  48. public function attributeLabels()
  49. {
  50. return [
  51. 'id' => '动作id',
  52. 'order_id' => '订单id',
  53. 'action' => '动作内容',
  54. 'member_id' => '操作人id',
  55. 'member_name' => '操作人',
  56. 'order_status' => '订单状态',
  57. 'order_status_text' => '订单状态名称',
  58. 'status' => '状态[-1:删除;0:禁用;1启用]',
  59. 'created_at' => 'Created At',
  60. 'updated_at' => 'Updated At',
  61. ];
  62. }
  63. /**
  64. * @param $action
  65. * @param $order_id
  66. * @param $order_status
  67. * @param $member_id
  68. * @param $member_name
  69. */
  70. public static function create($action, $order_id, $order_status, $member_id, $member_name)
  71. {
  72. $model = new self();
  73. $model = $model->loadDefaultValues();
  74. $model->action = $action;
  75. $model->order_id = $order_id;
  76. $model->order_status = $order_status;
  77. $model->order_status_text = OrderStatusEnum::getValue($order_status);
  78. $model->member_id = $member_id;
  79. $model->member_name = $member_name;
  80. if (!$model->save()) throw new Exception($model->getErrorMessage());
  81. }
  82. /**
  83. * @param $order_id
  84. * @return array|\yii\db\ActiveRecord[]
  85. */
  86. public function findByOrderId($order_id)
  87. {
  88. return self::find()
  89. ->where(['order_id' => $order_id])
  90. ->andWhere(['status' => StatusEnum::ENABLED])
  91. ->orderBy('id desc')
  92. ->all();
  93. }
  94. /**
  95. * 保存数据
  96. * @param array $params
  97. * @return bool|OrderAction
  98. */
  99. public static function setData(array $params){
  100. try{
  101. $model = new self();
  102. $model->loadDefaultValues();
  103. if(!$model->load($params,'') || !$model->save())throw new \Exception($model->getErrorMessage());
  104. return $model;
  105. }catch(\Exception $e){
  106. self::$static_error = $e->getMessage();
  107. return false;
  108. }
  109. }
  110. /**
  111. * 获取订单日志数据
  112. * @Author: lun
  113. * @DateTime: 2021/9/28 0028 9:49
  114. * @Copyright: copyright (c) 2021 广东七件事集团
  115. * @param array $cond
  116. * @param array $with
  117. * @param bool $is_array
  118. * @param string $select
  119. * @return array|\yii\db\ActiveRecord[]
  120. */
  121. public static function getOrderAction(array $cond=[],array $with=[],bool $is_array=true,string $select='*')
  122. {
  123. $default_cond = [['<>','status',StatusEnum::DELETE]];
  124. $cond = array_merge($default_cond,$cond);
  125. $query = self::find()->select($select);
  126. self::paramPack(['where'=>$cond,'with'=>$with],$query);
  127. $data = $query->orderBy('id desc')->asArray($is_array)->all();
  128. return $data;
  129. }
  130. /**
  131. * 生成订单行为日志
  132. * @param $type
  133. * @param array $params
  134. */
  135. public static function handleAction($type, array $params)
  136. {
  137. switch ($type) {
  138. case 'create':
  139. self::createAction($params);
  140. break;
  141. case 'paid':
  142. self::paidAction($params);
  143. break;
  144. case 'delivery':
  145. self::deliveryAction($params);
  146. break;
  147. case 'finish':
  148. self::finishAction($params);
  149. break;
  150. case 'take_delivery':
  151. self::takeDeliveryAction($params);
  152. break;
  153. case 'close':
  154. self::closeAction($params);
  155. break;
  156. }
  157. }
  158. /**
  159. * 订单创建
  160. * @Author: lun
  161. * @DateTime: 2021/11/16 0016 15:17
  162. * @Copyright: copyright (c) 2021 广东七件事集团
  163. * @param $params
  164. */
  165. public static function createAction($params)
  166. {
  167. // 获取订单信息
  168. $order = Order::find()->select('user_id,order_status')->where(['id' => $params['id']])->asArray()->one();
  169. // 获取用户昵称
  170. $user = User::find()->select('mobile,nickname')->where(['id' => $order['user_id']])->asArray()->one();
  171. $action = "手机号为:{$user['mobile']} 用户订单创建成功";
  172. $operator_name = $user['nickname'] ?? '';
  173. self::create($action, $params['id'], $order['order_status'], $order['user_id'], $operator_name);
  174. }
  175. /**
  176. * 订单支付
  177. * @Author: lun
  178. * @DateTime: 2021/11/16 0016 15:27
  179. * @Copyright: copyright (c) 2021 广东七件事集团
  180. * @param $params
  181. */
  182. public static function paidAction($params)
  183. {
  184. // 获取订单信息
  185. $order = Order::find()->select('user_id,order_status')->where(['id' => $params['id']])->asArray()->one();
  186. // 获取用户昵称
  187. $user = User::find()->select('id,mobile,nickname')->where(['id' => $order['user_id']])->asArray()->one();
  188. $action = "手机号为:{$user['mobile']} 用户订单支付成功";
  189. $operator_id = empty($params['operator_id']) ? $user['id'] : $params['operator_id'];
  190. $operator_name = empty($params['operator_name']) ? $user['nickname'] : $params['operator_name'];
  191. self::create($action, $params['id'], $order['order_status'], $operator_id, $operator_name);
  192. }
  193. /**
  194. * 订单完成过售后日志处理
  195. * @param $params
  196. * @return OrderAction
  197. */
  198. public static function finishAction($params)
  199. {
  200. $action = '订单完成';
  201. $operator_id = !empty($params['operator_id'])? $params['operator_id'] : 0;
  202. $operator_name = !empty($params['operator_name']) ? $params['operator_name'] : '系统';
  203. $orderStatus = Order::find()->select('order_status')->where(['id' => $params['id']])->scalar();
  204. self::create($action, $params['id'], $orderStatus, $operator_id, $operator_name);
  205. }
  206. /**
  207. * 发货/修改发货信息日志处理
  208. * @param $params
  209. */
  210. public static function deliveryAction($params)
  211. {
  212. // 获取订单信息
  213. $order_express = OrderExpress::find()->select('order_id,order_detail_ids,created_at,updated_at')->where(['id' => $params['id']])->asArray()->one();
  214. // 发货内容只允许修改一次,所以生成时间=修改时间则表示发货,否则代表修改发货信息
  215. if ($order_express['created_at'] == $order_express['updated_at']) {
  216. $action = "订单详情ID:{$order_express['order_detail_ids']},发货成功";
  217. } else {
  218. $action = "订单详情ID:{$order_express['order_detail_ids']},修改发货成功";
  219. }
  220. // 获取订单状态
  221. $orderStatus = Order::find()->select('order_status')->where(['id' => $order_express['order_id']])->scalar();
  222. // 保存内容
  223. self::create($action, $order_express['order_id'], $orderStatus, $params['operator_id'], $params['operator_name']);
  224. }
  225. /**
  226. * 确认收货
  227. * @Author: lun
  228. * @DateTime: 2021/10/7 0007 10:17
  229. * @Copyright: copyright (c) 2021 广东七件事集团
  230. * @param $params
  231. */
  232. public static function takeDeliveryAction($params)
  233. {
  234. $operator_id = !empty($params['operator_id'])? $params['operator_id'] : 0;
  235. $operator_name = !empty($params['operator_name']) ? $params['operator_name'] : '系统';
  236. $action = $operator_name . '确认收货';
  237. // 获取订单状态
  238. $orderStatus = Order::find()->select('order_status')->where(['id' => $params['id']])->scalar();
  239. // 保存内容
  240. self::create($action, $params['id'], $orderStatus, $operator_id, $operator_name);
  241. }
  242. /**
  243. * 关闭订单
  244. * @Author: lun
  245. * @DateTime: 2021/11/16 0016 15:55
  246. * @Copyright: copyright (c) 2021 广东七件事集团
  247. * @param $params
  248. */
  249. public static function closeAction($params)
  250. {
  251. $action = "订单关闭";
  252. $operator_id = $params['operator_id'];
  253. $operator_name = $params['operator_name'];
  254. // 获取订单状态
  255. // $orderStatus = Order::find()->select('order_status')->where(['id' => $params['id']])->scalar();
  256. $order = Order::getOne([['id' => $params['id']]], true, [], false, 'order_status, marketing_type');
  257. if($order['marketing_type'] == AddonsEnum::ADDONS_NAME_DEPOSIT_PRESALE){
  258. $orderStatus = OrderStatusEnum::REPEAL;
  259. }else{
  260. $orderStatus = $order['order_status'];
  261. }
  262. self::create($action, $params['id'], $orderStatus, $operator_id, $operator_name);
  263. }
  264. }