EnergyValueOrderValidate.php 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. namespace common\logic\order\validate;
  3. use common\enums\AddonsEnum;
  4. use common\enums\StatusEnum;
  5. use common\logic\order\BaseOrderForm;
  6. use common\models\mall\MallAddons;
  7. class EnergyValueOrderValidate implements OrderValidateInterface
  8. {
  9. /**
  10. * @param BaseOrderForm $form
  11. * @return void
  12. * @throws \Exception
  13. */
  14. public function valid(BaseOrderForm $form)
  15. {
  16. try {
  17. // 检测是否有安装应用
  18. if (MallAddons::isInstall($form->mall_id, AddonsEnum::ADDONS_NAME_ENERGY_VALUE)) {
  19. $config = \Yii::$app->services->setting->addons->get($form->mall_id, AddonsEnum::ADDONS_NAME_ENERGY_VALUE, 'basic');
  20. if (!empty($config['is_enable'])) {
  21. $group_order_goods = $form['group_order_goods'];
  22. $goods_id = [];
  23. foreach ($group_order_goods as $val) {
  24. foreach ($val['goods'] as $v) {
  25. if (!isset($goods_id[$v['goods_id']])) {
  26. $goods_id[$v['goods_id']] = 0;
  27. }
  28. $goods_id[$v['goods_id']] += $v['num'];
  29. }
  30. }
  31. /** @var \addons\EnergyValue\common\models\EnergyValueDeductSetting $deduct_setting_class */
  32. $deduct_setting_class = \addons\EnergyValue\common\models\EnergyValueDeductSetting::class;
  33. $setting_list = $deduct_setting_class::lists([
  34. 'where' => [
  35. ['mall_id' => $form->mall_id],
  36. ['goods_id' => array_keys($goods_id)],
  37. ['status' => StatusEnum::ENABLED],
  38. ['is_enable' => StatusEnum::ENABLED]
  39. ],
  40. ]);
  41. $total = 0;
  42. foreach ($setting_list as $val) {
  43. if (isset($goods_id[$val['goods_id']])) {
  44. $total = bcadd($total, bcmul($val['num'], $goods_id[$val['goods_id']], 2), 2);
  45. }
  46. }
  47. /** @var \addons\EnergyValue\common\models\EnergyValueUser $user_class */
  48. $user_class = \addons\EnergyValue\common\models\EnergyValueUser::class;
  49. $user_energy_value = $user_class::findOne(['user_id' => $form->user_id, 'status' => StatusEnum::ENABLED]);
  50. if(($user_energy_value['consumption_cy'] ?? 0) + ($user_energy_value['drive_cy'] ?? 0) < $total){
  51. \Yii::error(self::class.'->'.__FUNCTION__.'//info: '.json_encode([
  52. 'consumption_cy' => $user_energy_value['consumption_cy'] ?? 0,
  53. 'drive_cy' => $user_energy_value['drive_cy'] ?? 0,
  54. 'total' => $total,
  55. 'info' => $user_energy_value ? json_encode($user_energy_value): '',
  56. 'user_id' => $form->user_id
  57. ]));
  58. throw new \Exception('消费力和推动力不足,无法下单');
  59. }
  60. }
  61. }
  62. } catch (\Exception $e) {
  63. throw new \Exception($e->getMessage());
  64. }
  65. }
  66. }