| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- <?php
- namespace common\logic\order\validate;
- use common\enums\AddonsEnum;
- use common\enums\StatusEnum;
- use common\logic\order\BaseOrderForm;
- use common\models\mall\MallAddons;
- class EnergyValueOrderValidate implements OrderValidateInterface
- {
- /**
- * @param BaseOrderForm $form
- * @return void
- * @throws \Exception
- */
- public function valid(BaseOrderForm $form)
- {
- try {
- // 检测是否有安装应用
- if (MallAddons::isInstall($form->mall_id, AddonsEnum::ADDONS_NAME_ENERGY_VALUE)) {
- $config = \Yii::$app->services->setting->addons->get($form->mall_id, AddonsEnum::ADDONS_NAME_ENERGY_VALUE, 'basic');
- if (!empty($config['is_enable'])) {
- $group_order_goods = $form['group_order_goods'];
- $goods_id = [];
-
- foreach ($group_order_goods as $val) {
- foreach ($val['goods'] as $v) {
- if (!isset($goods_id[$v['goods_id']])) {
- $goods_id[$v['goods_id']] = 0;
- }
- $goods_id[$v['goods_id']] += $v['num'];
- }
- }
- /** @var \addons\EnergyValue\common\models\EnergyValueDeductSetting $deduct_setting_class */
- $deduct_setting_class = \addons\EnergyValue\common\models\EnergyValueDeductSetting::class;
- $setting_list = $deduct_setting_class::lists([
- 'where' => [
- ['mall_id' => $form->mall_id],
- ['goods_id' => array_keys($goods_id)],
- ['status' => StatusEnum::ENABLED],
- ['is_enable' => StatusEnum::ENABLED]
- ],
- ]);
- $total = 0;
- foreach ($setting_list as $val) {
- if (isset($goods_id[$val['goods_id']])) {
- $total = bcadd($total, bcmul($val['num'], $goods_id[$val['goods_id']], 2), 2);
- }
- }
- /** @var \addons\EnergyValue\common\models\EnergyValueUser $user_class */
- $user_class = \addons\EnergyValue\common\models\EnergyValueUser::class;
- $user_energy_value = $user_class::findOne(['user_id' => $form->user_id, 'status' => StatusEnum::ENABLED]);
- if(($user_energy_value['consumption_cy'] ?? 0) + ($user_energy_value['drive_cy'] ?? 0) < $total){
- \Yii::error(self::class.'->'.__FUNCTION__.'//info: '.json_encode([
- 'consumption_cy' => $user_energy_value['consumption_cy'] ?? 0,
- 'drive_cy' => $user_energy_value['drive_cy'] ?? 0,
- 'total' => $total,
- 'info' => $user_energy_value ? json_encode($user_energy_value): '',
- 'user_id' => $form->user_id
- ]));
- throw new \Exception('消费力和推动力不足,无法下单');
- }
- }
- }
- } catch (\Exception $e) {
- throw new \Exception($e->getMessage());
- }
- }
- }
|