[
'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' => '多商户'],
];
}
}