| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <?php
- namespace addons\Mch\common\logic;
- use addons\Mch\common\listeners\order\ComputeCommissionListener;
- use addons\Mch\common\models\MchGoodsModel;
- use common\enums\AddonsEnum;
- use common\enums\StatusEnum;
- use Yii;
- class BossLogic
- {
- public static $pre = 'mch:order_id:';
- /**
- * 设置全局设置
- *
- * @param array $levelArr
- * @param array $bossSetting
- *
- * @return void
- */
- public static function setCommonSetting(array &$levelArr, array $bossSetting)
- {
- if (empty($bossSetting)) {
- return;
- }
- $types = ['commission', 'digital'];
- foreach ($types as $type) {
- $bossSettingLevelMap = array_column($bossSetting[$type]['detail'] ?? [], null, 'level');
- $prizeField = 'prize';
- $isExtraField = 'is_extra';
- $extraPrizeField = 'extra_prize';
- if ($type === 'digital') {
- $prizeField = 'digital_prize';
- $extraPrizeField = 'extra_digital_prize';
- }
- foreach ($levelArr as $level => &$item) {
- if (isset($bossSetting[$type]['is_alone']) && !$bossSetting[$type]['is_alone']) {
- continue;
- }
- if (isset($bossSetting[$type]['is_enable']) && !$bossSetting[$type]['is_enable']) {
- continue;
- }
- $item[$prizeField] = $bossSettingLevelMap[$level]['prize'] ?? 0;
- $extra_prize = $bossSettingLevelMap[$level]['extra_prize'] ?? 0;
- $isExtra = $bossSetting[$type]['is_extra'] ?? 0;
- $item[$extraPrizeField] = !$isExtra ? 0 : $extra_prize;
- if ($type === 'commission') {
- $item[$isExtraField] = $isExtra;
- }
- }
- }
- }
- /**
- * 设置全局设置
- *
- * @param array $levelArr
- *
- * @return void
- */
- public static function resetCommonSetting(array &$levelArr)
- {
- $types = ['commission', 'digital'];
- foreach ($types as $type) {
- $prizeField = 'prize';
- $isExtraField = 'is_extra';
- $extraPrizeField = 'extra_prize';
- if ($type === 'digital') {
- $prizeField = 'digital_prize';
- $extraPrizeField = 'extra_digital_prize';
- }
- foreach ($levelArr as &$item) {
- $item[$prizeField] = 0;
- $item[$extraPrizeField] = 0;
- if ($type === 'commission') {
- $item[$isExtraField] = 0;
- }
- }
- }
- }
- /**
- * @param int $mallId
- * @param int $goodsId
- * @param int $mchId
- * @param string $type
- *
- * @return array
- */
- public static function getBossAloneSetting(int $mallId, int $goodsId, int $mchId, string $type = 'commission'): array
- {
- $goods_setting = json_decode(MchGoodsModel::find()
- ->where(['mall_id' => $mallId, 'goods_id' => $goodsId, 'mch_id' => $mchId, 'status' => StatusEnum::ENABLED])
- ->select('content')
- ->scalar(), true);
- $goods_setting = json_decode($goods_setting[AddonsEnum::ADDONS_NAME_BOSS] ?? '', true) ?: [];
- $goods_setting = $goods_setting[$type] ?? [];
- if ($goods_setting) {
- !isset($goods_setting['is_extra_scale_ratio']) && $goods_setting['is_extra_scale_ratio'] = 0;
- }
- return $goods_setting;
- }
- /**
- * 多商户计数器
- *
- * @return void
- */
- public static function decMchTaskCounter(int $mall_id, int $order_id, array $commission_arr = [])
- {
- Yii::$app->services->taskCounter->set(self::$pre . $order_id)->callBack($mall_id, $order_id, $commission_arr, ComputeCommissionListener::class);
- }
- }
|