Files
ZangShiQi/addon/v3tov4/model/Fenxiao.php
2026-04-04 17:27:12 +08:00

232 lines
9.7 KiB
PHP
Executable File

<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\v3tov4\model;
use think\facade\Cache;
/**
* 迁移分销相关数据(分销商、分销商等级)
*/
class Fenxiao extends Upgrade
{
/**
* 同步分销商数据
* @param $page_index
* @param $page_size
*/
public function getFenxiaoList($page_index, $page_size)
{
try {
model('fenxiao')->startTrans();
$field = 'np.promoter_id,np.promoter_shop_name,np.uid,np.promoter_level,np.parent_promoter,np.regidter_time,np.audit_time,np.lock_time,npl.level_name';
$join = [
[ 'nfx_promoter_level npl', 'np.promoter_level = npl.level_id', 'left' ],
];
// 查询v3分销商表
$list = $this->getPageList('nfx_promoter', [ [ 'is_audit', '=', '1' ] ], $field, $page_index, $page_size, 'np', $join);
$data = [];
if (!empty($list)) {
if ($page_index == 1) {
// 首次清空分销商表
$prefix = config('database')['connections']['mysql']['prefix'];
model('fenxiao')->execute("TRUNCATE TABLE {$prefix}fenxiao");
}
foreach ($list as $item) {
// 分销商编号
$time_str = date('YmdHi');
$max_no = Cache::get('fenxiao_no_' . $time_str);
if (empty($max_no)) {
$max_no = 1;
} else {
$max_no += 1;
}
$fenxiao_no = $time_str . sprintf('%04d', $max_no);
// 上上级分销商id
$grand_parent = 0;
if (!empty($item[ 'parent_promoter' ])) {
$parent_promoter_info = $this->getInfo('nfx_promoter', [ [ 'promoter_id', '=', $item[ 'parent_promoter' ] ] ], 'parent_promoter');
if (!empty($parent_promoter_info) && !empty($parent_promoter_info[ 'parent_promoter' ])) {
$grand_parent = $parent_promoter_info[ 'parent_promoter' ];
}
}
// 查询分销商账户数据
$account_info = $this->getInfo('nfx_user_account', [ [ 'uid', '=', $item[ 'uid' ] ] ], 'commission,commission_cash,commission_withdraw');
$data[] = [
'fenxiao_id' => $item['promoter_id'],
'site_id' => 1,
'fenxiao_no' => $fenxiao_no,
'fenxiao_name' => $item['promoter_shop_name'],
'member_id' => $item['uid'],
'level_id' => $item['promoter_level'],
'level_name' => $item['level_name'],
'parent' => $item['parent_promoter'],
'grand_parent' => $grand_parent,
'account' => $account_info['commission_cash'] ?? 0,
'account_withdraw' => $account_info['commission_withdraw'] ?? 0,
'total_commission' => $account_info['commission'] ?? 0,
'create_time' => $item['regidter_time'],
'audit_time' => $item['audit_time'],
'lock_time' => $item['lock_time']
];
}
}
// 添加到v4分销商表
model('fenxiao')->addList($data);
model('fenxiao')->commit();
return $this->success();
} catch (\Exception $e) {
model('fenxiao')->rollback();
return $this->error('', $e->getMessage());
}
}
/**
* 获取需要同步的分销商的数量
*/
public function getFenxiaoCount()
{
return $this->getCount('nfx_promoter', [ [ 'is_audit', '=', '1' ] ], 'promoter_id');
}
/**
* 同步待审核分销商数据
* @param $page_index
* @param $page_size
*/
public function getFenxiaoApplyList($page_index, $page_size)
{
try {
model('fenxiao_apply')->startTrans();
$field = 'np.promoter_shop_name,np.parent_promoter,np.uid,np.promoter_level,np.regidter_time,npl.level_name,su.user_tel,su.nick_name,su.user_headimg,su.reg_time,su.user_name';
$join = [
[ 'nfx_promoter_level npl', 'np.promoter_level = npl.level_id', 'left' ],
[ 'sys_user su', 'su.uid = np.uid', 'left' ]
];
// 查询v3分销商表
$list = $this->getPageList('nfx_promoter', [ [ 'is_audit', '=', '0' ] ], $field, $page_index, $page_size, 'np', $join);
$data = [];
if (!empty($list)) {
if ($page_index == 1) {
// 首次清空分销商申请表
$prefix = config('database')['connections']['mysql']['prefix'];
model('fenxiao_apply')->execute("TRUNCATE TABLE {$prefix}fenxiao_apply");
}
foreach ($list as $item) {
$user_info = $this->getInfo('sys_user', [ [ 'uid', '=', $item[ 'uid' ] ] ]);
if ($user_info) {
$data[] = [
'site_id' => 1,
'fenxiao_name' => $item['promoter_shop_name'],
'parent' => $item['parent_promoter'],
'member_id' => $item['uid'],
'mobile' => $item['user_tel'] ?? 0,
'nickname' => $item['nick_name'] ?? $item['user_name'],
'headimg' => $item['user_headimg'],
'level_id' => $item['promoter_level'],
'level_name' => $item['level_name'],
'reg_time' => $item['reg_time'],
'create_time' => $item['regidter_time']
];
}
}
}
// 添加到v4分销商申请表
model('fenxiao_apply')->addList($data);
model('fenxiao_apply')->commit();
return $this->success();
} catch (\Exception $e) {
model('fenxiao_apply')->rollback();
return $this->error('', $e->getMessage());
}
}
/**
* 获取需要同步的待审核分销商的数量
*/
public function getFenxiaoApplyCount()
{
return $this->getCount('nfx_promoter', [ [ 'is_audit', '=', '0' ] ], 'promoter_id');
}
/**
* 同步分销商等级数据
*/
public function getFenxiaoLevelList($page_index, $page_size)
{
try {
model('fenxiao_level')->startTrans();
if ($page_index == 1) {
$field = 'level_id,level_name,level_0,level_1,level_2,level_money,create_time';
// 查询v3分销商表
$list = $this->getList('nfx_promoter_level', [], $field, 'level_money asc');
$data = [];
if (!empty($list)) {
// 首次清空分销商申请表
$prefix = config('database')['connections']['mysql']['prefix'];
model('fenxiao_level')->execute("TRUNCATE TABLE {$prefix}fenxiao_level");
foreach ($list as $key => $item) {
$data[] = [
'level_id' => $item['level_id'],
'level_num' => ($key + 1),
'site_id' => 1,
'level_name' => $item['level_name'],
'one_rate' => $item['level_0'],
'two_rate' => $item['level_1'],
'three_rate' => $item['level_2'],
'upgrade_type' => 1,
'order_money' => $item['level_money'],
'create_time' => $item['create_time'],
'status' => 1
];
}
// 添加到v4分销商等级表
model('fenxiao_level')->addList($data);
}
// 添加默认分销商等级
$default_level = [
'site_id' => 1,
'level_name' => '默认等级',
'level_num' => 0,
'one_rate' => 0,
'two_rate' => 0,
'three_rate' => 0,
'upgrade_type' => 1,
'order_money' => 0,
'create_time' => time(),
'status' => 1,
'is_default' => 1
];
model('fenxiao_level')->add($default_level);
}
model('fenxiao_level')->commit();
return $this->success();
} catch (\Exception $e) {
model('fenxiao_level')->rollback();
return $this->error('', $e->getMessage());
}
}
/**
* 获取需要同步的分销商等级的数量
*/
public function getFenxiaoLevelCount()
{
return $this->getCount('nfx_promoter_level', [], 'level_id');
}
}