[ 'id' => 8, 'content' => '购买商品升级', 'remark' => '', 'type' => 'buy_goods', 'setting' => [] ], 9 => [ 'id' => 9, 'content' => '直推客户消费满____元的人数满____个,间推客户消费满____元的人数满____个', 'remark' => '', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'direct_user_consume', 'default_val' => 0], ['type' => 'text', 'name' => 'direct_user_consume_num', 'default_val' => 0], ['type' => 'text', 'name' => 'indirect_user_consume', 'default_val' => 0], ['type' => 'text', 'name' => 'indirect_user_consume_num', 'default_val' => 0], ] ], 10 => [ 'id' => 10, 'content' => '直推____人,并且直推中购买商品ID____的人数____个', 'remark' => '', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'direct_user_num', 'default_val' => 0], ['type' => 'text', 'name' => 'direct_user_buy_goods_id', 'default_val' => 0], ['type' => 'text', 'name' => 'direct_user_buy_goods_id_num', 'default_val' => 0], ] ], 11 => [ 'id' => 11, 'content' => "个人业绩____元,所有下级业绩____元", 'remark' => '统计的业绩包含平台+多商户', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'personal_achievement', 'default_val' => 0], ['type' => 'text', 'name' => 'subordinates_achievement', 'default_val' => 0], ] ], 12 => [ 'id' => 12, 'content' => '间推客户数量____个,间推客户订单金额____元', 'remark' => '', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'indirect_user_num', 'default_val' => 0], ['type' => 'text', 'name' => 'indirect_user_order_price', 'default_val' => 0], ] ], 18 => [ 'id' => 18, 'content' => '直推股东等级>=____数量____个', 'remark' => '', 'type' => 'default', 'setting' => [ ['type' => 'select', 'name' => 'direct_boss_level', 'default_val' => 0, 'source' => ['class' => 'addons\Boss\common\models\AddonsBossLevel', 'method' => 'getListByUpgrade', 'key' => 'source_list']], ['type' => 'text', 'name' => 'direct_boss_level_num', 'default_val' => 0], ] ], 19 => [ 'id' => 19, 'content' => '间推股东等级>=____数量____个', 'remark' => '', 'type' => 'default', 'setting' => [ ['type' => 'select', 'name' => 'indirect_boss_level', 'default_val' => 0, 'source' => ['class' => 'addons\Boss\common\models\AddonsBossLevel', 'method' => 'getListByUpgrade', 'key' => 'source_list']], ['type' => 'text', 'name' => 'indirect_boss_level_num', 'default_val' => 0], ] ], 20 => [ 'id' => 20, 'content' => '团队股东等级>=____数量____个', 'remark' => '', 'type' => 'default', 'setting' => [ ['type' => 'select', 'name' => 'team_boss_level', 'default_val' => 0, 'source' => ['class' => 'addons\Boss\common\models\AddonsBossLevel', 'method' => 'getListByUpgrade', 'key' => 'source_list']], ['type' => 'text', 'name' => 'team_boss_level_num', 'default_val' => 0], ] ], 21 => [ 'id' => 21, 'content' => '直推客户消费满____元', 'remark' => '', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'direct_user_consume', 'default_val' => 0], ] ], 22 => [ 'id' => 22, 'content' => '本人购买指定商品____ 所需购买____件', 'remark' => '可设置多个ID英文逗号隔开,并且是计算订单完成的订单', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'goods_ids', 'default_val' => '', 'width' => 200], ['type' => 'text', 'name' => 'buy_num', 'default_val' => 0], ] ], 23 => [ 'id' => 23, 'content' => '在____天内,直推____人每人购买商品ID____ 所需购买____件', 'remark' => '可设置多个ID英文逗号隔开,并且是计算订单完成的订单', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'day', 'default_val' => 0], ['type' => 'text', 'name' => 'direct_num', 'default_val' => 0], ['type' => 'text', 'name' => 'goods_ids', 'default_val' => '', 'width' => 200], ['type' => 'text', 'name' => 'order_num', 'default_val' => 0], ] ], 55 => [ 'id' => 55, 'content' => '个人订单满____笔,个人订单满____元', 'remark' => '注意:当个人支付订单满N笔,且个人支付订单金额满N元即可,售后不影响等级。(此条件仅计算平台订单)', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'personal_order_num', 'default_val' => 0], ['type' => 'text', 'name' => 'personal_order_achievement', 'default_val' => 0], ] ], 56 => [ 'id' => 56, 'content' => '个人订单满____笔,个人订单满____元 平台 多商户 ', 'remark' => '注意:当个人支付订单满N笔,且个人支付订单金额满N元即可,售后不影响等级。', 'type' => 'default', 'is_html' => true, 'setting' => [ ['type' => 'text', 'name' => 'personal_order_num_56', 'default_val' => 0], ['type' => 'text', 'name' => 'personal_order_achievement_56', 'default_val' => 0], [ 'type' => 'checkbox', 'name' => 'personal_order_checkbox_56', 'is_checkbox' => true, 'default_val' => [1], 'source' => ['class' => self::class, 'method' => 'getPersonalCheckbox56', 'key' => 'personal_checkbox_56'] ], ] ], 61 => [ 'id' => 61, 'content' => '链动一二号市场总业绩达____元,且单个市场业绩达____元', 'remark' => '', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'achievement', 'default_val' => 0], ['type' => 'text', 'name' => 'single_market', 'default_val' => 0], ] ], 62 => [ 'id' => 62, 'content' => '链动一二号市场购买链动商品订单数达____件,且单个市场订单数达____件', 'remark' => '', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'achievement_order_num', 'default_val' => 0], ['type' => 'text', 'name' => 'single_market_order_num', 'default_val' => 0], ] ], 63 => [ 'id' => 63, 'content' => '链动团队除最大市场外(即业绩最高市场)的团队小市场业绩总和达(不含复购链动商品)达____元', 'remark' => '', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'achievement_small', 'default_val' => 0], ] ], 64 => [ 'id' => 64, 'content' => '团队总业绩____达到____元,业绩最高的前____个部门,每个部门的业绩不能低于____元', 'remark' => '', 'type' => 'default', 'setting' => [ ['type' => 'select', 'name' => 'achievement_type', 'default_val' => 0, 'source' => ['class' => 'common\models\common\UpgradeCondition', 'method' => 'getAchievementType', 'key' => 'achievement_type_list']], ['type' => 'text', 'name' => 'team_achievement', 'default_val' => 0], ['type' => 'text', 'name' => 'direct_num', 'default_val' => 0], ['type' => 'text', 'name' => 'direct_achievement', 'default_val' => 0], ] ], 65 => [ 'id' => 65, 'content' => '直推____人,当中____个团队的订单大于等于____单,团队总订单____单,商品类目ID组', 'remark' => '指定商品类目中的订单且为支付后才会进行计算', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'team_achievement', 'default_val' => 0], ['type' => 'text', 'name' => 'team_achievement_people_num', 'default_val' => 0], ['type' => 'text', 'name' => 'team_achievement_order_num', 'default_val' => 0], ['type' => 'text', 'name' => 'team_total_order_num', 'default_val' => 0], ['type' => 'selectGoodsCats', 'name' => 'team_goods_cats', 'default_val' => ''], ] ], 73 => [ 'id' => 73, 'content' => '____等级,直推____等级数量____个,同时直推业绩____元', 'remark' => '', 'type' => 'default', 'setting' => [ ['type' => 'select', 'name' => 'user_level', 'default_val' => '', 'source' => ['class' => 'addons\Boss\common\models\AddonsBossLevel', 'method' => 'getListByUpgrade', 'key' => 'source_list']], ['type' => 'select', 'name' => 'child_level', 'default_val' => '', 'source' => ['class' => 'addons\Boss\common\models\AddonsBossLevel', 'method' => 'getListByUpgrade', 'key' => 'source_list']], ['type' => 'text', 'name' => 'rec_num', 'default_val' => 0], ['type' => 'text', 'name' => 'direct_performance', 'default_val' => 0], ] ], 102 => [ 'id' => 102, 'content' => '指定商品ID____,并且单笔订单金额满____元', 'remark' => '注意:可填写多个商品每个商品间用英文逗号隔开,订单金额必须是订单完成的金额', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'goods_ids', 'default_val' => ''], ['type' => 'text', 'name' => 'finish_order_money', 'default_val' => 0], ] ], 121 => [ 'id' => 121, 'content' => "个人业绩____元", 'remark' => '统计的业绩包含平台+多商户', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'personal_achievement', 'default_val' => 0], ] ], 110 => [ 'id' => 110, 'content' => '简速模式累计收益金额____元', 'remark' => '累计收益金额指的是简速模式插件中的累计收益金额', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'commission', 'default_val' => 0] ] ], 111 => [ 'id' => 111, 'content' => '个人购买简速模式指定商品金额____元', 'remark' => '指定商品为简速模式插件中指定的商品', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'order_price', 'default_val' => 0] ] ], 96 => [ 'id' => 96, 'content' => '个人团队业绩-直推下级最高团队业绩 >= ____元', 'remark' => '统计的业绩包含平台+多商户', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'money', 'default_val' => 0], ] ], 105 => [ 'id' => 105, 'content' => "群组(团队包含本人)商品售价业绩____达到____元", 'remark' => '统计的业绩包含平台+多商户', 'type' => 'default', 'setting' => [ ['type' => 'radio', 'name' => 'is_when_settlement', 'default_val' => 0, 'source' => ['class' => self::class, 'method' => 'getWhenSettlement', 'key' => 'radio_when_settlement_list']], ['type' => 'text', 'name' => 'money', 'default_val' => 0], ] ], 500 => [ 'id' => 500, 'content' => "指定商品 总团队业绩 ____ 达到____元,大市场业绩达到____元,小市场业绩达到____元 ( ____ ) 业绩计算类型( ____ )", 'remark' => '', 'type' => 'default', 'is_html' => 1, 'setting' => [ ['type' => 'radio', 'name' => 'is_include_yourself', 'default_val' => 0, 'source' => ['class' => self::class, 'method' => 'getIsIncludesSelf', 'key' => 'radio_includes_self_list']], ['type' => 'text', 'name' => 'total_performance', 'default_val' => 0], ['type' => 'text', 'name' => 'max_performance', 'default_val' => 0], ['type' => 'text', 'name' => 'min_performance', 'default_val' => 0], ['type' => 'radio', 'name' => 'is_when_settlement', 'default_val' => 0, 'source' => ['class' => self::class, 'method' => 'getWhenSettlement', 'key' => 'radio_when_settlement_list']], ['type' => 'radio', 'name' => 'settle_achievement', 'default_val' => 0, 'source' => ['class' => self::class, 'method' => 'getSettleAchievement', 'key' => 'radio_settle_achievement_list']], ] ], 118 => [ 'id' => 118, 'content' => '团队____条线,出现____个____等级', 'remark' => '', 'type' => 'default', 'setting' => [ ['type' => 'text', 'name' => 'team_num', 'default_val' => 0], ['type' => 'text', 'name' => 'level_num', 'default_val' => 0], ['type' => 'select', 'name' => 'agent_level', 'default_val' => 0, 'source' => ['class' => 'addons\Boss\common\models\AddonsBossLevel', 'method' => 'getListByUpgrade', 'key' => 'source_list']], ] ], ]; public static function getData($ids = []) { $rows = self::$data; $arr = []; if (empty($ids)) return $rows; foreach ($ids as $id) { $arr[] = $rows[$id]; } $arr = array_values(ArrayHelper::arraySort($arr, 'id', 'asc')); return $arr; } /** * 获取升级条件模板数据 * @param $obj * @param $mall_id * @param $rules * @return array */ public static function getUpgradeConditionData($obj, $mall_id, $rules) { $rule_list = []; $is_buy_goods = 0; $source_list = []; $key_arr = []; $checkbox_list = []; foreach ($rules as $k => $item) { if(!$item) continue; if ($item['type'] == 'buy_goods') { $is_buy_goods = 1; continue; } $rule_list[] = $item; $row = []; $row['key'] = $item['id']; foreach ($item['setting'] as $value) { $row['value'][$value['name']] = ''; if ($value['is_checkbox']) { $row['value'][$value['name']] = []; if (!empty($value['default_val'])) { $row['value'][$value['name']] = $value['default_val']; } } if (!empty($value['source']['class']) && !empty($value['source']['method'])) { $class = $value['source']['class']; $method = $value['source']['method']; $rows = $class::$method(['mall_id' => $mall_id]); $source_list[$value['source']['key']] = $rows; if ($value['type'] == 'checkbox') { $checkbox_list[$value['source']['key']] = $rows; } else { $source_list[$value['source']['key']] = $rows; } } } $key_arr[] = $row; } $source_list = json_encode($source_list, JSON_NUMERIC_CHECK); $checkbox_list = json_encode($checkbox_list, JSON_NUMERIC_CHECK); $key_arr = json_encode($key_arr, JSON_NUMERIC_CHECK); $tpl = $obj->renderPartial('@backend/modules/mall/views/upgrade-condition/tpl/tpl.php', ['rules' => $rule_list, 'is_buy_goods' => $is_buy_goods, 'mall_id' => $mall_id]); $cats = Json::encode(GoodsCate::getTreeCate(GoodsCate::lists([ 'where' => [ ['mall_id' => $mall_id], ['status' => StatusEnum::ENABLED] ], 'select'=> 'id, name, parent_id' ]))); return ['tpl' => $tpl, 'source_list' => $source_list, 'key_arr' => $key_arr, 'cat_list' => $cats, 'checkbox_list' => $checkbox_list]; } /** * @desc:校验 * @Author: hua * @Date: 2021/10/19 * @Time: 14:26 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $user_id * @param $agent_level_arr * @return bool */ public static function check($user_id, $agent_level_arr,$order_id = 0, $mall_id = 0) { if (empty($agent_level_arr['condition_type'])) return false; $condition_type = $agent_level_arr['condition_type']; $keys_arr = json_decode($agent_level_arr['checked_condition_keys'], true); $values_arr = json_decode($agent_level_arr['checked_condition_values'], true); if(empty($values_arr)) return false; $arr = [];//升级条件 foreach ($values_arr as $K => $v) { $arr[$v['key']] = $v; } $is_return = false; sort($keys_arr); foreach ($keys_arr as $id) { $function = 'condition' . $id; $params['condition_data'] = self::$data; $params['user_id'] = $user_id; $params['arr'] = $arr; $params['key'] = $id; $params['children_id_arr1'] = []; $params['children_id_arr2'] = []; $params['user_id_arr'] = []; $params['children_id_arr'] = []; $params['name1'] = ''; $params['name2'] = ''; $params['mall_id'] = $mall_id; $params['model_class'] = ''; $params['order_id'] = $order_id; if (!method_exists(self::class, $function)) continue; $is_bool = self::$function($params); //满足其一 if ($condition_type == 1) { if ($is_bool) { $is_return = true; break; } else { $is_return = false; } } //满足所有 if ($condition_type == 2) { if ($is_bool) { $is_return = true; } else { $is_return = false; break; } } } return $is_return; } /** * @desc:购买商品升级 * @Author: hua * @Date: 2021/10/19 * @Time: 14:51 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $user_id * @param $goods_type * @param $buy_goods_id * @param $goods_id_arr * @return bool */ public static function buyGoods($goods_type, $buy_goods_id, $goods_id_arr) { //任意商品 if ($goods_type == 1) return true; //购买指定商品 if ($goods_type == 2) if (array_intersect($buy_goods_id, $goods_id_arr)) return true; return false; } /** * @desc:条件9 * 直推客户消费满____元的人数满____个,间推客户消费满____元的人数满____个 * @Author: hua * @Date: 2021/10/23 * @Time: 11:37 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ private static function condition9($params) { $children_id_arr1 = UserPartitionRelationship::getChildIdArr($params['user_id'], 1); $children_id_arr2 = UserPartitionRelationship::getChildIdArr($params['user_id'], 2); return self::upgrade9( $params['condition_data'][$params['key']]['setting'][0]['name'], $params['condition_data'][$params['key']]['setting'][1]['name'], $params['condition_data'][$params['key']]['setting'][2]['name'], $params['condition_data'][$params['key']]['setting'][3]['name'], $children_id_arr1, $children_id_arr2, $params['arr'], $params['key']); } /** * @desc:条件10 * 直推____人,并且直推中购买商品ID____的人数____个 * @Author: hua * @Date: 2021/10/23 * @Time: 11:37 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ private static function condition10($params) { $children_id_arr1 = UserPartitionRelationship::getChildIdArr($params['user_id'], 1); return self::upgrade10( $params['condition_data'][$params['key']]['setting'][0]['name'], $params['condition_data'][$params['key']]['setting'][1]['name'], $params['condition_data'][$params['key']]['setting'][2]['name'], $children_id_arr1, $params['arr'], $params['key']); } /** * @desc:条件11 * 个人业绩____元,所有下级业绩____元 * @Author: hua * @Date: 2021/10/23 * @Time: 14:16 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ private static function condition11($params) { return self::upgrade11( $params['condition_data'][$params['key']]['setting'][0]['name'], $params['condition_data'][$params['key']]['setting'][1]['name'], $params['user_id'], $params['arr'], $params['key'] ); } /** * @desc:条件12 * 间推客户数量____个,间推客户订单金额____元 * @Author: hua * @Date: 2021/10/23 * @Time: 14:16 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ private static function condition12($params) { $user_id_arr = UserPartitionRelationship::getChildIdArr($params['user_id'], 2); return self:: upgrade12( $params['condition_data'][$params['key']]['setting'][0]['name'], $params['condition_data'][$params['key']]['setting'][1]['name'], $user_id_arr, $params['arr'], $params['key'] ); } /** * @desc:条件18 * 直推股东等级____数量____个 * @Author: hua * @Date: 2021/10/23 * @Time: 14:16 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ private static function condition18($params) { $user_id_arr = UserPartitionRelationship::getChildIdArr($params['user_id'], 1); return self::upgrade14( $params['condition_data'][$params['key']]['setting'][0]['name'], $params['condition_data'][$params['key']]['setting'][1]['name'], 'addons\Boss\common\models\AddonsBoss', $user_id_arr, $params['arr'], $params['key'] ); } /** * @desc:条件19 * 间推股东等级____数量____个 * @Author: hua * @Date: 2021/10/23 * @Time: 14:16 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ private static function condition19($params) { $user_id_arr = UserPartitionRelationship::getChildIdArr($params['user_id'], 2); return self::upgrade14( $params['condition_data'][$params['key']]['setting'][0]['name'], $params['condition_data'][$params['key']]['setting'][1]['name'], 'addons\Boss\common\models\AddonsBoss', $user_id_arr, $params['arr'], $params['key'] ); } /** * @desc:条件20 * 团队股东等级____数量____个 * @Author: hua * @Date: 2021/10/23 * @Time: 14:16 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ private static function condition20($params) { return self::upgrade15( $params['condition_data'][$params['key']]['setting'][0]['name'], $params['condition_data'][$params['key']]['setting'][1]['name'], 'addons\Boss\common\models\AddonsBoss', $params['user_id'], $params['arr'], $params['key'] ); } /** * @desc:条件21 * 直推客户消费满____元 * @Author: hua * @Date: 2021/10/23 * @Time: 15:03 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ private static function condition21($params) { $user_id_arr = UserPartitionRelationship::getChildIdArr($params['user_id'], 1); return self::upgrade21( $params['condition_data'][$params['key']]['setting'][0]['name'], $user_id_arr, $params['arr'], $params['key']); } /** * @desc:条件22 * 本人购买指定商品____ 所需购买____件 * @Author: lun * @DateTime: 2022/9/12 0012 17:07 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ public static function condition22($params) { $goods_ids = explode(',', $params['arr'][$params['key']]['value']['goods_ids']);// 商品ids $buy_num = Json::decode($params['arr'][$params['key']]['value']['buy_num']) ?? 0;// 购买数量 if (empty($goods_ids)) return false; // 查询当前用户购商品数量 $user_buy_num = BossGoodsStatistics::find()->where(['user_id' => $params['user_id'], 'goods_id' => $goods_ids, 'status' => StatusEnum::ENABLED])->sum('buy_num') ?? 0; return $user_buy_num >= $buy_num ? true : false; } /** * @desc:条件23 * 在____天内,直推____人每人购买商品ID____ 所需购买____件 * @Author: lun * @DateTime: 2022/9/12 0012 17:54 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ public static function condition23($params) { $day = $params['arr'][$params['key']]['value']['day'] ?? 0;// 天数 $direct_num = $params['arr'][$params['key']]['value']['direct_num'] ?? 0;// 直推数量 $goods_ids = explode(',', $params['arr'][$params['key']]['value']['goods_ids']);// 商品ids $buy_num = $params['arr'][$params['key']]['value']['order_num'] ?? 0;// 购买数量 if (empty($goods_ids)) return false; // 获取用户N天前的日期 $before_day = date('Ymd', strtotime("-{$day} day")); // 获取当前用户的直推用户id $direct_uids = User::find()->select('id')->where(['parent_id' => $params['user_id'], 'status' => StatusEnum::ENABLED])->column(); if (count($direct_uids) < $direct_num) return false; // 查询当前用户购商品数量 $buy_num_arr = BossGoodsStatistics::find()->select("user_id,sum(buy_num) user_buy_num") ->where(['user_id' => $direct_uids, 'goods_id' => $goods_ids, 'status' => StatusEnum::ENABLED]) ->andWhere(['>', 'date', $before_day]) ->groupBy('user_id') ->asArray()->all(); if (count($buy_num_arr) < $direct_num) return false;// 直推购买人数不够退出 $temp_buy_num = 0; foreach ($buy_num_arr as $user_id => $item) { // 购买的商品个数大于设置个数直接 if ($item['user_buy_num'] >= $buy_num) $temp_buy_num++; } return $temp_buy_num >= $direct_num ? true : false; } /** * 当前用户下单笔数与下单金额 * @param $params * @return bool */ private static function condition55($params) { $user_id = $params['user_id']; // 积分是否不累计 $scoreSettingStr = Yii::$app->services->setting->mall->get($params['mall_id'], 'pay.score'); $isNotCumulative = !empty(json_decode($scoreSettingStr, true)['is_not_cumulative']); $orderQuery = Order::find() ->where(['user_id' => $user_id, 'pay_status' => StatusEnum::ENABLED]) ->andWhere(['mch_id' => StatusEnum::DISABLED, 'store_id' => StatusEnum::DISABLED]); if (!empty($isNotCumulative)) { // 如果开启积分支付不计入 $orderQuery->andWhere(['<>', 'payment_type', PayTypeEnum::SCORE]); } $orderList = $orderQuery->select('pay_money')->asArray()->all(); if (empty($orderList)) return false; // 订单为空直接返回false // 计算订单金额 $orderMoneySum = array_sum(array_column($orderList, 'pay_money')); $order_cnt_name = $params['condition_data'][$params['key']]['setting'][0]['name']; $order_amount_name = $params['condition_data'][$params['key']]['setting'][1]['name']; $arr = $params['arr']; $key = $params['key']; return count($orderList) >= $arr[$key]['value'][$order_cnt_name] && $orderMoneySum >= $arr[$key]['value'][$order_amount_name]; } /** * @desc: 条件56 * 备注:因为新需求根据用户选择条件进行订单查询 * 个人订单满____笔,个人订单满____元 (1 平台 2 多商户 3 门店) 备注:括号中为多选。按插件订单进行数据查询 * @param $params * @return bool */ public static function condition56($params) { $user_id = $params['user_id']; // 获取积分支付配置 $scorePaySetting = Yii::$app->services->setting->mall->get($params['mall_id'], 'pay.score'); $scorePaySetting = !empty($scorePaySetting) ? json_decode($scorePaySetting, true) : []; $orderQuery = Order::find() ->where(['user_id' => $user_id, 'pay_status' => StatusEnum::ENABLED, 'mall_id' => $params['mall_id']]); if (!empty($scorePaySetting) && !empty($scorePaySetting['is_not_cumulative'])) { // 如果开启积分支付不计入 $orderQuery->andWhere(['<>', 'payment_type', PayTypeEnum::SCORE]); } // 获取勾选订单插件 $checkboxKey = $params['condition_data'][$params['key']]['setting'][2]['name']; $checkboxList = $params['arr'][$params['key']]['value'][$checkboxKey]; if (!empty($checkboxList)) { // 判断是否勾选 // 判断是否勾选平台 if (!in_array(1, $checkboxList)) { $orderQuery->andWhere(['>', 'mch_id', 0]); } if (!in_array(2, $checkboxList)) { // 没有勾选多商户 $orderQuery->andWhere(['mch_id' => 0]); } if (!in_array(3, $checkboxList)) { // 没有勾选门店 $orderQuery->andWhere(['store_id' => 0]); } } $orderList = $orderQuery->select('pay_money')->asArray()->all(); if (empty($orderList)) return false; // 订单为空直接返回false // 计算订单金额 $orderMoneySum = array_sum(array_column($orderList, 'pay_money')); // 获取设置的订单数量和金额 $systemCountKey = $params['condition_data'][$params['key']]['setting'][0]['name']; $systemCount = $params['arr'][$params['key']]['value'][$systemCountKey]; $systemMoneyKey = $params['condition_data'][$params['key']]['setting'][1]['name']; $systemMoney = $params['arr'][$params['key']]['value'][$systemMoneyKey]; return count($orderList) >= $systemCount && $orderMoneySum >= $systemMoney; } /** * 链一二号市场总业绩达xx元,且单个市场业绩达xxx元 * @param $params * @return bool */ private static function condition61($params) { $user_id = $params['user_id']; $user = User::findOne(['id' => $user_id]); $mall_id = $user->mall_id; if (!MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_ZAO_DOUBLE_COPY)) return false; $total_achievement = $params['condition_data'][$params['key']]['setting'][0]['name']; $single_market = $params['condition_data'][$params['key']]['setting'][1]['name']; $arr = $params['arr']; $key = $params['key']; $total_achievement = $arr[$key]['value'][$total_achievement]; $single_market = $arr[$key]['value'][$single_market]; $is_bool = false; $team = ZaoDoubleCopyUser::find()->select('achievement')->where(['pid' => $user_id])->andWhere(['<=', 'pos', 2])->asArray()->all(); $achievement = 0; $is_single = true; foreach ($team as $info) { // 判断单个市场是否及格 if ($info['achievement'] < $single_market) { $is_single = false; break; } $achievement += $info['achievement']; } if ($is_single && $achievement >= $total_achievement) { $is_bool = true; } return $is_bool; } /** * 链一二号市场购买链动商品订单数达xx件,且单个市场订单数达xx件 * @param $params * @return bool */ private static function condition62($params) { $user_id = $params['user_id']; $user = User::findOne(['id' => $user_id]); $mall_id = $user->mall_id; if (!MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_ZAO_DOUBLE_COPY)) return false; $total_order_num = $params['condition_data'][$params['key']]['setting'][0]['name']; $single_market_num = $params['condition_data'][$params['key']]['setting'][1]['name']; $arr = $params['arr']; $key = $params['key']; $total_order_num = $arr[$key]['value'][$total_order_num]; $single_market_num = $arr[$key]['value'][$single_market_num]; $is_bool = false; $team = ZaoDoubleCopyUser::find()->select('user_id')->where(['pid' => $user_id])->andWhere(['<=', 'pos', 2])->asArray()->all(); $total_num = 0; $is_single = true; foreach ($team as $info) { //获取用户下级购买订单数量 $copy_user_id = $info['user_id']; $relation_arr = UserPartitionRelationship::getChildIdArrOrderBy($copy_user_id); array_push($relation_arr, $copy_user_id); $order_num = ZaoDoubleCopyAchievement::find()->where(['buy_user_id' => $relation_arr,'status' => StatusEnum::ENABLED])->groupBy('order_id')->count(); if($order_num < $single_market_num){ $is_single = false; break; } $total_num += $order_num; } if ($is_single && $total_num >= $total_order_num) { $is_bool = true; } return $is_bool; } /** * 链动团队除最大市场外(即业绩最高市场)的团队小市场业绩总和达(不含复购链动商品)元 * @param $params * @return bool */ private static function condition63($params) { $user_id = $params['user_id']; $user = User::findOne(['id' => $user_id]); $mall_id = $user->mall_id; if (!MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_ZAO_DOUBLE_COPY)) return false; $total_achievement = $params['condition_data'][$params['key']]['setting'][0]['name']; $arr = $params['arr']; $key = $params['key']; $total_achievement = $arr[$key]['value'][$total_achievement]; $is_bool = false; $team = ZaoDoubleCopyUser::find()->select('achievement')->where(['pid' => $user_id])->asArray()->all(); $achievement_arr = array_column($team,'achievement'); if(empty($achievement_arr)) return $is_bool; $max = max($achievement_arr); $total = array_sum($achievement_arr); $diff = bcsub($total,$max,2); if ($diff >= $total_achievement) { $is_bool = true; } return $is_bool; } /** * @desc:条件64 * 团队总业绩____达到____元,业绩最高的前____个部门,每个部门的业绩不能低于____元 * @Author: hua * @Date: 2021/10/23 * @Time: 14:16 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ private static function condition64($params) { return self::upgrade64( $params['condition_data'][$params['key']]['setting'][0]['name'], $params['condition_data'][$params['key']]['setting'][1]['name'], $params['condition_data'][$params['key']]['setting'][2]['name'], $params['condition_data'][$params['key']]['setting'][3]['name'], $params['user_id'], $params['arr'], $params['key'] ); } /** * @desc:条件65 * 直推___人,当中___人团队订单大于等于___单,团队总订单___单 * @Author: hua * @Date: 2021/10/23 * @Time: 14:16 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ private static function condition65($params) { $team_achievement_name = $params['condition_data'][$params['key']]['setting'][0]['name']; $team_achievement_people_num_name = $params['condition_data'][$params['key']]['setting'][1]['name']; $team_achievement_order_num_name = $params['condition_data'][$params['key']]['setting'][2]['name']; $team_total_order_num_name = $params['condition_data'][$params['key']]['setting'][3]['name']; $team_goods_cats_name = $params['condition_data'][$params['key']]['setting'][4]['name']; $arr = $params['arr']; $key = $params['key']; $team_achievement_value = $arr[$key]['value'][$team_achievement_name] ?? 0; $team_achievement_people_num_value = $arr[$key]['value'][$team_achievement_people_num_name] ?? 0; $team_achievement_order_num_value = $arr[$key]['value'][$team_achievement_order_num_name] ?? 0; $team_total_order_num_value = $arr[$key]['value'][$team_total_order_num_name] ?? 0; $team_goods_cats_value = !empty($arr[$key]['value'][$team_goods_cats_name]) ? Json::decode($arr[$key]['value'][$team_goods_cats_name]) : []; // 好友人数 $team_achievement = User::find()->where(['parent_id' => $params['user_id']]) ->andWhere(['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])->select('id')->column(); if (count($team_achievement) < $team_achievement_value) { return false; } // 取出商品ID $cat_ids = []; $goods_ids = []; $cat_goods_ids = []; if (!empty($team_goods_cats_value)) { foreach ($team_goods_cats_value as $cat) { $cat_ids[] = array_pop($cat); } foreach ($cat_ids as $cat_id) { $goods_ids = GoodsCateRelate::find()->where(['cate_id' => $cat_id])->select('goods_id')->column(); $cat_goods_ids[$cat_id] = $goods_ids; } $goods_ids = array_unique($goods_ids); } // 必须N个团队N笔订单 // 取出指定类目团队下单笔数 $o_cnt_arr = []; $o_cnt_total = 0; $cat_goods_arr = []; foreach ($team_achievement as $user_id) { $child_user_ids = UserPartitionRelationship::getChildIdArr($user_id); $child_user_ids[] = $user_id; $o_cnt = 0; foreach ($child_user_ids as $item_user_id) { $order_list = OrderDetail::lists([ 'where' => [ ['user_id' => $item_user_id], ['goods_id'=> $goods_ids], ['order_status' => [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING, OrderStatusEnum::ACCOMPLISH, OrderStatusEnum::TAKE, OrderStatusEnum::TAKE_FINISH] ], ], 'select'=> 'order_id, goods_id', // 'index' => 'goods_id' ]); if (!empty($order_list)) { foreach ($order_list as $value) { foreach ($cat_goods_ids as $cid => $cat_goods) { if (in_array($value['goods_id'], $cat_goods) && empty($cat_goods_arr["{$user_id}_{$item_user_id}_{$cid}"])) { $o_cnt_total += 1; $o_cnt += 1; $cat_goods_arr["{$user_id}_{$item_user_id}_{$cid}"] = 1; } } } } // $o_cnt_total += count($order_list); // $o_cnt += count($order_list); // $o_cnt += count(array_column($order_list, 'order_id', 'goods_id')); } if ($o_cnt >= $team_achievement_order_num_value) { // 只有当当前团队总订单数量符合条件才能放入团队订单栈中 $o_cnt_arr[] = StatusEnum::ENABLED; } } // 判断团队下单数量 if (count($o_cnt_arr) < $team_achievement_people_num_value) return false; // 取出当前用户的订单 $order_list = OrderDetail::lists([ 'where' => [ ['user_id' => $params['user_id']], ['goods_id'=> $goods_ids], ['order_status' => [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING, OrderStatusEnum::ACCOMPLISH, OrderStatusEnum::TAKE, OrderStatusEnum::TAKE_FINISH] ], ], 'select'=> 'order_id, goods_id', // 'index' => 'goods_id' ]); if (!empty($order_list)) { foreach ($order_list as $value) { foreach ($cat_goods_ids as $cid => $cat_goods) { if (in_array($value['goods_id'], $cat_goods) && empty($cat_goods_arr["{$params['user_id']}_{$cid}"])) { $o_cnt_total += 1; $cat_goods_arr["{$params['user_id']}_{$cid}"] = 1; } } } } // 校验当前团队所有订单数量 return $o_cnt_total >= $team_total_order_num_value; } /** * ____等级,直推____等级数量____个,同时直推业绩____元 */ private static function condition73($params) { $cond = $params['arr'][$params['key']]; $user_level = $cond['value']['user_level']; $child_level = $cond['value']['child_level']; $rec_num = $cond['value']['rec_num']; $direct_performance = $cond['value']['direct_performance']; $user_id = $params['user_id']; $current_user_level = AddonsBoss::find()->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED])->select('level')->scalar() ?? 0; if($current_user_level < $user_level) { return false; } $direct_child_ids = UserPartitionRelationship::getChildIdArr($user_id, 1); $user_child_list = AddonsBoss::find()->where(['and', ['user_id' => $direct_child_ids], ['status' => StatusEnum::ENABLED]])->andWhere(['>=', 'level', $child_level])->select('user_id')->asArray()->all() ?? []; if(count($user_child_list) < $rec_num){ return false; } $order_performance = Order::find()->where(['and', ['user_id' => array_column($user_child_list, 'user_id')], ['order_status' => OrderStatusEnum::ACCOMPLISH]]) ->sum('pay_money') ?? 0; if($order_performance < $direct_performance){ return false; } return true; } public static function upgrade9($name1, $name2, $name3, $name4, $children_id_arr1, $children_id_arr2, $arr, $key) { $is_bool = false; $num1 = self::consumeNum($arr, $key, $name1, $children_id_arr1);//直推会员消费满多少元的累计人数 if ($num1 >= $arr[$key]['value'][$name2]) { $num2 = self::consumeNum($arr, $key, $name3, $children_id_arr2);//间推会员消费满多少元的累计人数 if ($num2 >= $arr[$key]['value'][$name4]) $is_bool = true; } return $is_bool; } public static function upgrade10($name1, $name2, $name3, $children_id_arr1, $arr, $key) { $is_bool = false; $num = count($children_id_arr1);//直推会员人数 if ($num >= $arr[$key]['value'][$name1]) { $goods_id = $arr[$key]['value'][$name2]; $direct_user_buy_goods_id_num = $arr[$key]['value'][$name3]; $where = ['user_id' => $children_id_arr1, 'goods_id' => $goods_id, 'order_status' => [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING, OrderStatusEnum::ACCOMPLISH]]; $list = OrderDetail::find()->where($where) ->groupBy('user_id') ->select('user_id,count("user_id") as counts') ->all(); $count = count($list); if ($count >= $direct_user_buy_goods_id_num) $is_bool = true; } return $is_bool; } public static function upgrade11($name1, $name2, $user_id, $arr, $key) { $is_bool = false; list($personal_counts, $personal_achievement) = self::getOrderData($user_id);//个人业绩 if ($personal_achievement >= $arr[$key]['value'][$name1]) { $offset = 1; $limit = 1000; $params['select'] = 'user_id'; $total_subordinates_achievement = 0;//所有下级业绩 self::batchFunc($params,$user_id,$offset,$limit,function ($user_id_arr){ $query = Order::find()->where(['user_id' => $user_id_arr, 'pay_status' => 1]); return $query->sum('pay_money'); },$total_subordinates_achievement); if ($total_subordinates_achievement >= $arr[$key]['value'][$name2]) $is_bool = true; } return $is_bool; } public static function upgrade12($name1, $name2, $user_id_arr, $arr, $key) { $is_bool = false; $num = count($user_id_arr);//间推会员人数 if ($num >= $arr[$key]['value'][$name1]) { list($indirect_user_order, $indirect_user_order_price) = self::getOrderData($user_id_arr);//间推客户的订单金额 if ($indirect_user_order_price >= $arr[$key]['value'][$name2]) $is_bool = true; } return $is_bool; } public static function upgrade14($name1, $name2, $model_class, $user_id_arr, $arr, $key) { $is_bool = false; $level = $arr[$key]['value'][$name1]; $counts = $model_class::find()->where(['user_id' => $user_id_arr,'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]) ->andWhere(['>=','level',$level]) ->count(); if ($counts >= $arr[$key]['value'][$name2]) $is_bool = true; return $is_bool; } public static function upgrade15($name1, $name2, $model_class, $user_id, $arr, $key) { $is_bool = false; $level = $arr[$key]['value'][$name1]; $offset = 1; $limit = 1000; $total_counts = 0; $params['select'] = 'user_id'; self::batchFunc($params,$user_id,$offset,$limit,function ($user_id_arr)use($model_class,$level){ return $model_class::find()->where(['user_id' => $user_id_arr,'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]) ->andWhere(['>=','level',$level]) ->count(); },$total_counts); if ($total_counts >= $arr[$key]['value'][$name2]) $is_bool = true; return $is_bool; } public static function upgrade21($name1, $user_id_arr, $arr, $key) { $is_bool = false; list($order_num, $pay_money) = self::getOrderData($user_id_arr);//消费 if ($pay_money >= $arr[$key]['value'][$name1]) $is_bool = true; return $is_bool; } public static function upgrade64($name1, $name2,$name3, $name4, $user_id, $arr, $key) { $is_bool = false; //个人业绩 $personal_achievement = 0; if($arr[$key]['value'][$name1] == 0){ $personal_achievement = Order::find()->where(['user_id' => $user_id, 'pay_status' => 1])->sum('pay_money') ?? 0; } $achievement_arr = []; $children_id_arr1 = UserPartitionRelationship::getChildIdArr($user_id, 1); foreach($children_id_arr1 as $children_user_id){ $offset = 1; $limit = 1000; $params['select'] = 'user_id'; $total_subordinates_achievement = 0;//所有下级业绩 self::batchFunc($params,$children_user_id,$offset,$limit,function ($user_id_arr) use ($children_user_id){ $user_id_arr[] = $children_user_id; $query = Order::find()->where(['user_id' => $user_id_arr, 'pay_status' => 1]); return $query->sum('pay_money'); },$total_subordinates_achievement); $children_personal_achievement = Order::find()->where(['user_id' => $children_user_id, 'pay_status' => 1])->sum('pay_money') ?? 0; $total_subordinates_achievement += $children_personal_achievement; $achievement_arr[] = $total_subordinates_achievement; } if($arr[$key]['value'][$name2] > $personal_achievement + array_sum($achievement_arr)) return $is_bool; if($arr[$key]['value'][$name3] > count($achievement_arr)) return $is_bool; rsort($achievement_arr); if(!empty($arr[$key]['value'][$name4]) && $arr[$key]['value'][$name4] > $achievement_arr[$arr[$key]['value'][$name3]-1]) return $is_bool; $is_bool = true; return $is_bool; } /** * @desc:条件120 * 个人业绩____元 * @Author: hua * @Date: 2021/10/23 * @Time: 14:16 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ protected static function condition121($params) { return static::upgrade121( $params['condition_data'][$params['key']]['setting'][0]['name'], $params['condition_data'][$params['key']]['setting'][1]['name'], $params['user_id'], $params['arr'], $params['key'], $params['mall_id'] ); } /** * 条件120查询 * * @param string $name1 * @param string $name2 * @param int $user_id * @param array $arr * @param int $key * @param int $mall_id * @return boolean */ public static function upgrade121($name1, $name2, $user_id, $arr, $key, $mall_id) { // 结算方式 $compute_type = \Yii::$app->services->setting->mall->get($mall_id, 'upgrade_condition.compute_type'); $field = 'id,mall_id,user_id'; if (empty($compute_type)) $compute_type = 1; if ($compute_type == 1) { $field .= ',pay_money as personal_achievement'; } else { $field .= ',finish_order_money as personal_achievement'; } $personal_data = UserStatisticsTotal::find()->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED])->select($field)->asArray()->one(); $personal_achievement = $personal_data['personal_achievement'] ?? 0; $personal_data_old = UserStatisticsTotalCopy1::find()->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED])->select($field)->asArray()->one(); $personal_achievement = bcadd($personal_achievement, $personal_data_old['personal_achievement'], 2); $is_bool = false; // list($personal_counts, $personal_achievement) = static::getOrderData1($user_id, $where); //个人业绩 if ($personal_achievement >= $arr[$key]['value'][$name1]) { // 团队业绩为0则认为达标 // if (!isset($arr[$key]['value'][$name2]) || $arr[$key]['value'][$name2] <= 0) { // return true; // } $is_bool = true; // $offset = 1; // $limit = 1000; // $params['select'] = 'user_id'; // $total_subordinates_achievement = 0; //所有下级业绩 // static::batchFunc($params, $user_id, $offset, $limit, function ($user_id_arr) use ($where) { // $where = array_merge($where, ['user_id' => $user_id_arr]); // $query = Order::find()->where($where); // return $query->sum('pay_money'); // }, $total_subordinates_achievement); // if ($total_subordinates_achievement >= $arr[$key]['value'][$name2]) { // $is_bool = true; // } } return $is_bool; } /** * 个人团队业绩-直推下级最高团队业绩>=N元 */ protected static function condition96($params) { $cond = $params['arr'][$params['key']]; $money = $cond['value']['money']; if ($money <=0 ) { return false; } $self_user_team_order_price_total = 0; $user_id = $params['user_id']; $user_team_statistics_model = UserTeamStatistics::find()->where(['user_id'=>$user_id])->one(); $child_ids = UserPartitionRelationship::getChildIdArr($user_id,1); if(!empty($user_team_statistics_model)) { $self_user_team_order_price_total = $user_team_statistics_model['team_finish_order_price_total']; } $field = "sum(uts.team_finish_order_price_total+ust.finish_order_money) as total_money"; $one = \common\models\user\UserTeamStatistics::find()->alias('uts') ->leftJoin(UserStatisticsTotal::tableName().' as ust','uts.user_id=ust.user_id') ->where(['uts.user_id'=>$child_ids]) ->select("uts.user_id,{$field}") ->orderBy('total_money desc') ->groupBy('uts.user_id') ->asArray() ->one(); $total_money = $one['total_money']??0; $cha = $self_user_team_order_price_total - $total_money; return $cha >= $money; } // 群组(团队包含本人)商品售价业绩(支付完成/订单完成)达到N元 protected static function condition105($params) { $user_id = $params['user_id']; $cond = $params['arr'][$params['key']]; $is_when_settlement = $cond['value']['is_when_settlement'] ?? null; $money = $cond['value']['money'] ?? null; if (!isset($is_when_settlement) || !isset($money)) { return false; } $where = ['user_id' => $user_id]; // 个人商品售价 $userTotal = 0; $userStatisticsTotalField = [ 0 => 'finish_selling_price', 1 => 'pay_selling_price', ]; if (isset($userStatisticsTotalField[$is_when_settlement])) { $userTotal = UserAchievementStatisticsTotal::find() ->where($where) ->select($userStatisticsTotalField[$is_when_settlement]) ->scalar() ?: 0; } // 团队商品售价 $teamTotal = 0; $userTeamStatisticsField = [ 0 => 'team_finish_selling_price', 1 => 'team_pay_selling_price', ]; if (isset($userTeamStatisticsField[$is_when_settlement])) { $teamTotal = UserTeamAchievementStatistics::find() ->where($where) ->select($userTeamStatisticsField[$is_when_settlement]) ->scalar() ?: 0; } return ($userTotal + $teamTotal) >= $money; } /** * TODO 后续优化查询 * @desc:获取订单数据 * @Author: hua * @Date: 2021/10/19 * @Time: 10:58 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $user_ids * @return array */ private static function getOrderData($user_ids) { $query = Order::find()->where(['user_id' => $user_ids, 'pay_status' => 1]); $counts = $query->count(); $sum = $query->sum('pay_money'); return [$counts ?? 0, $sum ?? 0]; } /** * TODO 后续优化查询 * @desc:分组数据 * @Author: hua * @Date: 2021/10/23 * @Time: 11:43 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $user_ids * @return array|\yii\db\ActiveRecord[] */ private static function getOrderDataGroupByUserId($user_ids) { $query = Order::find()->where(['user_id' => $user_ids, 'pay_status' => 1]); $query->select('user_id,sum(pay_money) as pay_money'); return $query->groupBy('user_id')->all(); } /** * @desc:设置升级条件时,处理与之相关的条件 * @Author: hua * @Date: 2021/10/20 * @Time: 18:17 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $checked_condition_keys * @param $handle_class * @param $mall_id */ public static function clear($checked_condition_keys, $handle_class, $mall_id) { $list = $handle_class::findAll(['mall_id' => $mall_id]); sort($checked_condition_keys); $rows = self::$data; foreach ($list as $agent) { $checked_condition_values = json_decode($agent['checked_condition_values'], true);//升级条件 $condition_keys = json_decode($agent['checked_condition_keys'], true); $checked_condition_values_arr = []; if ($checked_condition_values) { $condition_values_arr = []; foreach ($checked_condition_values as $v) { $condition_values_arr[$v['key']] = $v; } foreach ($checked_condition_keys as $k) { if (!empty($condition_values_arr[$k])) { if ($condition_values_arr[$k]['type'] != 'buy_goods') $checked_condition_values_arr[] = $condition_values_arr[$k]; } else { //新添加,顺序有关,所以一条条取 $row = $rows[$k] ?? []; if (!empty($row) && $row['type'] != 'buy_goods') { $arr = ['key' => $row['id']]; foreach ($row['setting'] as $set) { $arr['value'][$set['name']] = $set['default_val']; } $checked_condition_values_arr[] = $arr; } } } $agent->checked_condition_values = json_encode($checked_condition_values_arr); } $condition_keys_arr = []; if ($condition_keys) { foreach ($condition_keys as $k => $value) { if (!in_array($value, $checked_condition_keys)) continue; $condition_keys_arr[] = $value; } $agent->checked_condition_keys = json_encode($condition_keys_arr); } $agent->save(); } } protected static function consumeNum($arr, $key, $name, $user_id_arr) { $list = self::getOrderDataGroupByUserId($user_id_arr); $num = 0; foreach ($list as $v) { if ($v['pay_money'] >= $arr[$key]['value'][$name]) { $num++; } } return $num; } public static function batchFunc($params,$user_id,$offset,$limit,$callback,&$num){ list($tree, $parent_deep, $all_tree, $all_tree_arr) = UserPartitionRelationship::getTree($user_id); while ($list = UserPartitionRelationship::batchGetTeamData($offset,$limit,$tree,$params)){ $user_id_arr = array_column($list,'user_id'); $result = call_user_func($callback,$user_id_arr); if(empty($result)) $result = 0; $num+=$result; $offset++; } } //购买指定商品 public static function buyGoodsUpgrade($mall_id, $order, $user_id, $order_by,$buy_type,$order_status){ $order_id = $order['id']; $user = User::findOne($user_id); $params = []; $where = []; $where[] = ['mall_id' => $mall_id]; $where[] = ['order_id' => $order_id]; $where[] = ['user_id' => $user_id]; $params['where'] = $where; $order_detail_list = OrderDetail::lists($params); $buy_goods_id_arr = array_column($order_detail_list, 'goods_id'); $before_level = $user['level']; $params = []; $where = []; $where[] = ['mall_id' => $mall_id]; $where[] = ['status' => StatusEnum::ENABLED]; $where[] = ['>', 'level', $user->level]; $params['where'] = $where; $params['order'] = $order_by; $params['with'] = ['upgradeCondition'=>function($query){ $query->where(['status' => StatusEnum::ENABLED]); }]; $user_level_list = UserLevel::lists($params); $can_upgrade_level = $upgrade_user_id = 0; $flag = false; //开启购买升级商品 if (!empty($user_level_list)) { foreach ($user_level_list as $level_arr) { $can_upgrade_level = $level_arr['level']; //开启购买升级商品 if ($level_arr['upgradeCondition']['upgrade_type_goods']&&$level_arr['upgradeCondition']['is_auto_upgrade']) { $goods_id_arr = json_decode($level_arr['upgradeCondition']['goods_ids'], true); $res = UpgradeCondition::buyGoods($level_arr['upgradeCondition']['goods_type'], $buy_goods_id_arr, $goods_id_arr); if ($res) { //购买升级商品触发升级:0订单完成 1下单完成 if ($level_arr['upgradeCondition']['buy_goods_type'] == $buy_type&&$order['order_status'] == $order_status) { $flag = true; break; } } } } if ($flag) { \Yii::$app->services->statistics->global->set($mall_id, ['upgrade_level'=>[$can_upgrade_level=>1]]); $user->level = $can_upgrade_level; $user->upgrade_level_at = time(); if (!$user->save()) { \Yii::error("{user_id:$user_id}-{order_id:$order_id}" . ',会员升级,失败'); return false; } // 触发升级礼包 if (MallAddons::isInstall($mall_id,AddonsEnum::ADDONS_NAME_UPGRADEGIFT)) { $gift['mall_id'] = $mall_id; $gift['user_ids'] = $user_id; $gift['gift_type'] = GiftEnum::GIFT_TYPE_USER; // 事件触发会导致重发发送礼包(原因不明),所以改为直接异步队列处理 \Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, $gift, UpgradeGiftListener::class, 'async_handle'); } // 升级成功后 $event = new UserUpgradeAfterEvent($mall_id); $data = ['after_level' => $can_upgrade_level, 'before_level' => $before_level,'mall_id'=>$mall_id]; \Yii::$app->services->events->dispatch($event, $data, $event->listeners); } } } /** * @desc: 条件1 * 个人订单数量满____笔,个人订单满____元 * @Author: hua * @Date: 2021/10/19 * @Time: 11:41 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ protected static function condition110($params) { if (MallAddons::isInstall($params['mall_id'], AddonsEnum::ADDONS_NAME_FAST_MODE)) { $params['data'] = []; return FastModeUpgradeCondition::upgrade0($params, $params['user_id'], $params['arr'], $params['key']); } return false; } protected static function condition111($params) { if (MallAddons::isInstall($params['mall_id'], AddonsEnum::ADDONS_NAME_FAST_MODE)) { $params['data'] = []; return FastModeUpgradeCondition::upgrade1($params, $params['user_id'], $params['arr'], $params['key']); } return false; } // 指定商品ID____,并且单笔订单金额满____元 protected static function condition102($params) { if (empty($params['order_id'])) return false; $user_id = $params['user_id']; $cond = $params['arr'][$params['key']]; $goods_ids = $cond['value']['goods_ids']; $finish_order_money = $cond['value']['finish_order_money']; $total_money = OrderDetail::find()->select('goods_price')->where(['user_id' => $user_id, 'goods_id' => explode(',', $goods_ids), 'order_status' => OrderStatusEnum::ACCOMPLISH, 'status' => StatusEnum::ENABLED])->sum('goods_price') ?? 0; if ($total_money >= $finish_order_money) return true; return false; } protected static function condition500($params) { $cond = $params['arr'][$params['key']]; $is_include_yourself = $cond['value']['is_include_yourself']; $is_when_settlement = $cond['value']['is_when_settlement']; $settle_achievement = $cond['value']['settle_achievement'] ?? 0; $total_performance = $cond['value']['total_performance']; $target_big_performance = $cond['value']['max_performance']; $target_small_performance = $cond['value']['min_performance']; $user_id = $params['user_id']; $statistics = UserTeamProfitStatistics::getOne([ ['user_id' => $user_id] ], true); if (empty($statistics)) return false; //判断用户总业绩 $real_total_performance = 0; $orderBy = 'children_order_finish_profit desc'; $field = 'id,user_id'; $field_str = ''; if ($is_when_settlement == 1) { if ($is_include_yourself == 1) { $field_str = 'team_order_pay'; } else { $field_str = 'children_order_pay'; } } else { if ($is_include_yourself == 1) { $field_str = 'team_order_finish'; } else { $field_str = 'children_order_finish'; } } if ($settle_achievement == 1) { $field_str .= '_achievement'; } else { $field_str .= '_profit'; } $real_total_performance = $statistics[$field_str]; $orderBy = $field_str . ' desc'; $field .= ','.$field_str.' as real_performance'; //判断总业绩是否达标 if ($real_total_performance < $total_performance) return false; //获取直推用户id $direct_child_ids = UserPartitionRelationship::getChildIdArr($user_id, 1); $real_big_performance = 0; $real_small_performance = 0; if (!empty($direct_child_ids)) { //获取大小市场业绩 $team_profit_statistics = UserTeamProfitStatistics::lists([ 'where' => [ ['user_id' => $direct_child_ids], ], 'select' => $field, 'order' => $orderBy, ]); if (!empty($team_profit_statistics)) { //获取大市场业绩 $real_big_performance = $team_profit_statistics[0]['real_performance']; unset($team_profit_statistics[0]); //统计小市场业绩 if (!empty($team_profit_statistics)) { $real_small_performance = array_sum(array_column($team_profit_statistics, 'real_performance')); } } } // $real_big_performance = $is_when_settlement == 0 ? $statistics['accomplish_big_market_performance'] : $statistics['pay_big_market_performance']; if ($real_big_performance < $target_big_performance) return false; // $real_total_performance = $is_when_settlement == 0 ? $statistics['accomplish_team_performance'] : $statistics['pay_team_performance']; // $real_small_performance = 0; if ($real_small_performance < $target_small_performance) return false; return true; } public static function getWhenSettlement() { return [ ['key' => 0, 'value' => '订单完成'], ['key' => 1, 'value' => '订单支付'], ]; } public static function getSettleAchievement() { return [ ['key' => 0, 'value' => '商品利润'], ['key' => 1, 'value' => '实付金额'], ]; } public static function getIsIncludesSelf() { return [ ['key' => 0, 'value' => '不包含自己'], ['key' => 1, 'value' => '包含自己'], ]; } /** * @desc:条件118 * 团队下____条____个____等级 * @Author: whq * @Date: 2025/6/27 * @Time: 12:30 * @param $params * @return bool */ protected static function condition118($params) { return static::upgrade118( $params['condition_data'][$params['key']]['setting'][0]['name'], $params['condition_data'][$params['key']]['setting'][1]['name'], $params['condition_data'][$params['key']]['setting'][2]['name'], $params['user_id'], $params['arr'], $params['key'] ); } /** * 团队下____条____个____等级 条件118 * @param $team_num * @param $level_num * @param $agent_level * @param $user_id * @param array $arr * @param string $key * @return bool */ public static function upgrade118($team_num, $level_num,$agent_level, $user_id, $arr = [], $key = '') { $direct_child_ids = UserPartitionRelationship::getChildIdArr($user_id, 1); //查询直推下级 $teamNum = $arr[$key]['value'][$team_num];//N条 if (count($direct_child_ids) < $teamNum) return false; $levelNum = $arr[$key]['value'][$level_num]; //N个 $level = $arr[$key]['value'][$agent_level]; $isNums = 0; foreach ($direct_child_ids as $direct_child_id) { $count = 0; $bossInfo = AddonsBoss::getOne([['user_id' => $direct_child_id]], true); //直推自己 if($bossInfo['level'] == $level){ $count++; if($count >= $levelNum) { $isNums++; continue; } } $count += AddonsBoss::getTeamlevelCount($direct_child_id,$level); if($count < $levelNum) continue; $isNums++; if($isNums >= $teamNum) return true; } if ($isNums >= $teamNum) return true; return false; } /** * key 为56 的配置参数 * @return array[] */ public static function getPersonalCheckbox56() { return [ ['value' => 1, 'label' => '平台'], ['value' => 2, 'label' => '多商户'], ]; } }