StoreCashierOrderUpgrade.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace addons\DoubleCopy\common\logic;
  3. use addons\Store\common\models\StoreOrderDetail;
  4. use common\enums\AddonsEnum;
  5. use common\enums\OrderStatusEnum;
  6. use common\enums\RabbitMqEnum;
  7. use common\enums\StatusEnum;
  8. use common\enums\UpgradeEnum;
  9. use common\helpers\FormatHelper;
  10. use common\models\common\UpgradeCondition;
  11. use common\models\mall\MallAddons;
  12. use common\models\order\OrderDetail;
  13. use common\traits\ErrorTrait;
  14. use Yii;
  15. use Exception;
  16. use yii\helpers\Json;
  17. /**
  18. * 购物升级
  19. * @Author lun
  20. * @DateTime 2021-11-16 19:07:32
  21. * @copyright: Copyright (c) 2020 广东七件事集团
  22. */
  23. class StoreCashierOrderUpgrade{
  24. use ErrorTrait;
  25. /**
  26. * 购物升级执行
  27. * 样式:execute(AddonsEnum::ADDONS_NAME_BOSS, (new AddonsBoss()), (new AddonsBossLevel()), $order);
  28. * @Author: lun
  29. * @DateTime: 2021/11/18 0018 16:56
  30. * @Copyright: copyright (c) 2021 广东七件事集团
  31. * @param $identity_desc - 插件名称
  32. * @param $identity_obj - 用户身份空对象
  33. * @param $level_obj - 用户等级空对象
  34. * @param $order
  35. * @param string $order_by
  36. * @param string $is_open_level_limit - 是否开启逐步升级
  37. * @return bool | int
  38. */
  39. public function execute(string $identity_desc, object $identity_obj, object $level_obj, array $order, $order_by = 'level desc',$is_open_level_limit = false)
  40. {
  41. $trans = Yii::$app->db->beginTransaction();
  42. try {
  43. $mall_id = $order['mall_id'];
  44. $user_id = $order['user_id'];
  45. $upgrade_uid = 0;
  46. // 获取身份
  47. $model = $identity_obj::findOne(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => StatusEnum::ENABLED]);
  48. if (empty($model)) {
  49. $model = new $identity_obj;
  50. $model->mall_id = $mall_id;
  51. $model->user_id = $user_id;
  52. $model->level = 0;
  53. $model->upgrade_level_at = 0;
  54. $model->loadDefaultValues();
  55. }
  56. $where = [];
  57. $where[] = ['mall_id' => $mall_id];
  58. $where[] = ['status' => StatusEnum::ENABLED];
  59. $where[] = ['>', 'level' , $model->level];
  60. $params = [];
  61. $params['where'] = $where;
  62. $params['order'] = $order_by;
  63. // 获取等级
  64. $level_list = $level_obj::lists($params);
  65. $can_upgrade_level = 0;
  66. $upgrade_status = 0;
  67. $flag = false;
  68. if (!empty($level_list)) {
  69. foreach ($level_list as $level_arr) {
  70. $can_upgrade_level = $level_arr['level'];
  71. //开启购买升级商品
  72. if ($level_arr['store_cashier_order_is_up']&&$level_arr['is_auto_upgrade']) {
  73. $upgrade_status = UpgradeEnum::UPGRADE_STATUS_STORE_CASHIER_ORDER;
  74. $flag = true;
  75. break;
  76. }
  77. //插件等级是否只能一级一级往上升级($order_by = 'level asc')
  78. if($is_open_level_limit){
  79. break;
  80. }
  81. }
  82. var_dump($flag);
  83. if ($flag) {
  84. $model->level = $can_upgrade_level;
  85. $model->upgrade_status = $upgrade_status;
  86. $model->upgrade_level_at = time();
  87. $model->upgrade_boss_at = !$model->upgrade_boss_at && $model->level >= 2 ? $model->upgrade_level_at : 0;
  88. if (!$model->save()) throw new Exception("{用户ID:$user_id},订单ID:{$order['id']},". AddonsEnum::getAddonsNameMap($identity_desc) ."门店收银台订单升级失败");
  89. $upgrade_uid = $user_id;
  90. }
  91. }
  92. $trans->commit();
  93. return $upgrade_uid;
  94. } catch (Exception $e) {
  95. $trans->rollBack();
  96. $exception = FormatHelper::exception($e, AddonsEnum::getAddonsNameMap($identity_desc) . "购物升级失败");
  97. $this->setError($exception);
  98. return false;
  99. }
  100. }
  101. }