Files
huangjingfen/pro_v3.5.1/app/controller/UpgradeBeta.php
panchengyong c1e74d8e68 chore(php): 统一 ScottPan 文件头与注释域名替换
- 按 docs/renew-code-comment.md 将 PHP 文件头改为带边框的 Author 注释\n- 注释中的 crmeb.com 替换为 uj345.cn(代码字符串中的外链未改)\n- 新增 docs/renew-code-comment.md 说明

Made-with: Cursor
2026-03-29 11:22:58 +08:00

517 lines
23 KiB
PHP

<?php
// +----------------------------------------------------------------------
// | Author: ScottPan Team
// +----------------------------------------------------------------------
namespace app\controller;
use app\jobs\user\UserBrokerageJob;
use app\Request;
use app\services\community\CommunityCommentServices;
use app\services\order\StoreOrderServices;
use app\services\user\UserBrokerageServices;
use think\facade\Db;
class UpgradeBeta
{
/**
* @param string $field
* @param int $n
* @return bool
*/
public function setIsUpgrade(string $field, int $n = 0)
{
try {
$upgrade = parse_ini_file(app()->getRootPath() . '.upgrade');
} catch (\Throwable $e) {
$upgrade = [];
}
if ($n) {
if (!is_array($upgrade)) {
$upgrade = [];
}
$string = '';
foreach ($upgrade as $key => $item) {
$string .= $key . '=' . $item . "\r\n";
}
$string .= $field . '=' . $n . "\r\n";
try {
file_put_contents(app()->getRootPath() . '.upgrade', $string);
} catch (\Throwable $e) {
}
return true;
} else {
if (!is_array($upgrade)) {
return false;
}
return isset($upgrade[$field]);
}
}
/**
* 获取当前版本号
* @return array
*/
public function getversion($str)
{
$version_arr = [];
$curent_version = @file(app()->getRootPath() . $str);
foreach ($curent_version as $val) {
[$k, $v] = explode('=', $val);
$version_arr[$k] = $v;
}
return $version_arr;
}
public function index(Request $request)
{
$data = $this->upData();
$Title = "CRMEB升级程序";
$Powered = "Powered by CRMEB";
//获取当前版本号
$version_now = $this->getversion('.version')['version'];
$version_new = $data['new_version'];
$isUpgrade = true;
$executeIng = false;
return view('/upgrade/step1', [
'title' => $Title,
'powered' => $Powered,
'version_now' => $version_now,
'version_new' => $version_new,
'isUpgrade' => json_encode($isUpgrade),
'executeIng' => json_encode($executeIng),
'next' => 1,
'action' => 'upgrade'
]);
}
// public function syncOldBrokeragePrice()
// {
// UserBrokerageJob::dispatchDo('syncOldBrokeragePrice');
// }
public function upgrade(Request $request)
{
[$sleep, $page, $prefix] = $request->getMore([
['sleep', 0],
['page', 1],
['prefix', 'eb_'],
], true);
$data = $this->upData();
$code_now = $this->getversion('.version')['version_code'];
$sql_arr = [];
foreach ($data['update_sql'] as $items) {
if ($items['code'] > $code_now) {
$sql_arr[] = $items;
}
}
if (!isset($sql_arr[$sleep])) {
file_put_contents(app()->getRootPath() . '.version', "version=" . $data['new_version'] . "\nversion_code=" . $data['new_code']);
// $this->syncOldBrokeragePrice();
return app('json')->successful(['sleep' => -1]);
}
$sql = $sql_arr[$sleep];
Db::startTrans();
try {
if ($sql['type'] == 1) {
if (isset($sql['findSql']) && $sql['findSql']) {
$table = $prefix . $sql['table'];
$findSql = str_replace('@table', $table, $sql['findSql']);
if (!empty(Db::query($findSql))) {
$item['table'] = $table;
$item['status'] = 1;
$item['error'] = $table . '表已存在';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
}
if (isset($sql['sql']) && $sql['sql']) {
$upSql = $sql['sql'];
$upSql = str_replace('@table', $table, $upSql);
Db::execute($upSql);
$item['table'] = $table;
$item['status'] = 1;
$item['error'] = $table . '表添加成功';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
} elseif ($sql['type'] == 2) {
if (isset($sql['findSql']) && $sql['findSql']) {
$table = $prefix . $sql['table'];
$findSql = str_replace('@table', $table, $sql['findSql']);
if (empty(Db::query($findSql))) {
$item['table'] = $table;
$item['status'] = 1;
$item['error'] = $table . '表不存在';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
}
if (isset($sql['sql']) && $sql['sql']) {
$upSql = $sql['sql'];
$upSql = str_replace('@table', $table, $upSql);
Db::execute($upSql);
$item['table'] = $table;
$item['status'] = 1;
$item['error'] = $table . '表删除成功';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
} elseif ($sql['type'] == 3) {
if (isset($sql['findSql']) && $sql['findSql']) {
$table = $prefix . $sql['table'];
$findSql = str_replace('@table', $table, $sql['findSql']);
if (!empty(Db::query($findSql))) {
$item['table'] = $table;
$item['status'] = 1;
$item['error'] = $table . '表中' . $sql['field'] . '已存在';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
}
if (isset($sql['sql']) && $sql['sql']) {
$upSql = $sql['sql'];
$upSql = str_replace('@table', $table, $upSql);
Db::execute($upSql);
$item['table'] = $table;
$item['status'] = 1;
$item['error'] = $table . '表中' . $sql['field'] . '字段添加成功';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
} elseif ($sql['type'] == 4) {
if (isset($sql['findSql']) && $sql['findSql']) {
$table = $prefix . $sql['table'];
$findSql = str_replace('@table', $table, $sql['findSql']);
if (empty(Db::query($findSql))) {
$item['table'] = $table;
$item['status'] = 1;
$item['error'] = $table . '表中' . $sql['field'] . '不存在';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
}
if (isset($sql['sql']) && $sql['sql']) {
$upSql = $sql['sql'];
$upSql = str_replace('@table', $table, $upSql);
Db::execute($upSql);
$item['table'] = $table;
$item['status'] = 1;
$item['error'] = $table . '表中' . $sql['field'] . '字段修改成功';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
} elseif ($sql['type'] == 5) {
if (isset($sql['findSql']) && $sql['findSql']) {
$table = $prefix . $sql['table'];
$findSql = str_replace('@table', $table, $sql['findSql']);
if (empty(Db::query($findSql))) {
$item['table'] = $table;
$item['status'] = 1;
$item['error'] = $table . '表中' . $sql['field'] . '不存在';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
}
if (isset($sql['sql']) && $sql['sql']) {
$upSql = $sql['sql'];
$upSql = str_replace('@table', $table, $upSql);
Db::execute($upSql);
$item['table'] = $table;
$item['status'] = 1;
$item['error'] = $table . '表中' . $sql['field'] . '字段删除成功';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
} elseif ($sql['type'] == 6) {
$table = $prefix . $sql['table'] ?? '';
if (isset($sql['findSql']) && $sql['findSql']) {
$findSql = str_replace('@table', $table, $sql['findSql']);
if (!empty(Db::query($findSql))) {
$item['table'] = $prefix . $sql['table'];
$item['status'] = 1;
$item['error'] = $table . '表中此数据已存在';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
}
if (isset($sql['sql']) && $sql['sql']) {
$upSql = $sql['sql'];
$upSql = str_replace('@table', $table, $upSql);
if (isset($sql['whereSql']) && $sql['whereSql']) {
$whereTable = $prefix . $sql['whereTable'] ?? '';
$whereSql = str_replace('@whereTable', $whereTable, $sql['whereSql']);
$tabId = Db::query($whereSql)[0]['tabId'] ?? 0;
if (!$tabId) {
$item['table'] = $whereTable;
$item['status'] = 1;
$item['error'] = '查询父类ID不存在';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
$upSql = str_replace('@tabId', $tabId, $upSql);
}
if (Db::execute($upSql)) {
$item['table'] = $table;
$item['status'] = 1;
$item['error'] = '数据添加成功';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
}
} elseif ($sql['type'] == 7) {
$table = $prefix . $sql['table'] ?? '';
$whereTable = $prefix . $sql['whereTable'] ?? '';
if (isset($sql['findSql']) && $sql['findSql']) {
$findSql = str_replace('@table', $table, $sql['findSql']);
if (empty(Db::query($findSql))) {
$item['table'] = $prefix . $sql['table'];
$item['status'] = 1;
$item['error'] = $table . '表中此数据不存在';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
}
if (isset($sql['sql']) && $sql['sql']) {
$upSql = $sql['sql'];
$upSql = str_replace('@table', $table, $upSql);
if (isset($sql['whereSql']) && $sql['whereSql']) {
$whereSql = str_replace('@whereTable', $whereTable, $sql['whereSql']);
$tabId = Db::query($whereSql)[0]['tabId'] ?? 0;
if (!$tabId) {
$item['table'] = $whereTable;
$item['status'] = 1;
$item['error'] = '查询父类ID不存在';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
$upSql = str_replace('@tabId', $tabId, $upSql);
}
if (Db::execute($upSql)) {
$item['table'] = $table;
$item['status'] = 1;
$item['error'] = '数据修改成功';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
}
} elseif ($sql['type'] == 8) {
} elseif ($sql['type'] == -1) {
$table = $prefix . $sql['table'];
if (isset($sql['sql']) && $sql['sql']) {
$upSql = $sql['sql'];
$upSql = str_replace('@table', $table, $upSql);
if (isset($sql['new_table']) && $sql['new_table']) {
$new_table = $prefix . $sql['new_table'];
$upSql = str_replace('@new_table', $new_table, $upSql);
}
Db::execute($upSql);
$item['table'] = $table;
$item['status'] = 1;
$item['error'] = $table . '更新sql执行成功';
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
Db::commit();
return app('json')->successful($item);
}
}
} catch (\Throwable $e) {
$item['table'] = $prefix . $sql['table'];
$item['status'] = 0;
$item['sleep'] = $sleep + 1;
$item['add_time'] = date('Y-m-d H:i:s', time());
$item['error'] = $e->getMessage();
Db::rollBack();
return app('json')->successful($item);
}
}
public function upData()
{
$data['new_version'] = 'CRMEB-PRO v3.2.0';
$data['new_code'] = 320;
$data['update_sql'] = [
[
'code' => 320,
'type' => 3,
'table' => "user_extract",
'field' => "order_id",
'findSql' => "show columns from `@table` like 'order_id'",
'sql' => "ALTER TABLE `@table` ADD `order_id` varchar(32) NOT NULL DEFAULT '' COMMENT '订单号' AFTER `id`"
],
[
'code' => 320,
'type' => 3,
'table' => "user_extract",
'field' => "user_name",
'findSql' => "show columns from `@table` like 'user_name'",
'sql' => "ALTER TABLE `@table` ADD `user_name` varchar(64) NOT NULL DEFAULT '' COMMENT '真实姓名' AFTER `qrcode_url`"
],
[
'code' => 320,
'type' => 3,
'table' => "user_extract",
'field' => "wechat_state",
'findSql' => "show columns from `@table` like 'wechat_state'",
'sql' => "ALTER TABLE `@table` ADD `wechat_state` varchar(32) NOT NULL DEFAULT '' COMMENT 'v3转账状态码' AFTER `user_name`"
],
[
'code' => 320,
'type' => 3,
'table' => "user_extract",
'field' => "package_info",
'findSql' => "show columns from `@table` like 'package_info'",
'sql' => "ALTER TABLE `@table` ADD `package_info` varchar(1000) NOT NULL DEFAULT '' COMMENT 'v3转账支付收款页的package' AFTER `wechat_state`"
],
[
'code' => 320,
'type' => 3,
'table' => "user_extract",
'field' => "fail_reason",
'findSql' => "show columns from `@table` like 'fail_reason'",
'sql' => "ALTER TABLE `@table` ADD `fail_reason` varchar(32) NOT NULL DEFAULT '' COMMENT 'v3转账失败原因' AFTER `package_info`"
],
[
'code' => 320,
'type' => 3,
'table' => "user_extract",
'field' => "transfer_bill_no",
'findSql' => "show columns from `@table` like 'transfer_bill_no'",
'sql' => "ALTER TABLE `@table` ADD `transfer_bill_no` varchar(256) NOT NULL DEFAULT '' COMMENT 'v3微信转账单号' AFTER `fail_reason`"
],
[
'code' => 320,
'type' => 3,
'table' => "user_extract",
'field' => "channel_type",
'findSql' => "show columns from `@table` like 'channel_type'",
'sql' => "ALTER TABLE `@table` ADD `channel_type` varchar(10) NOT NULL DEFAULT '' COMMENT '提现渠道(小程序:routine;公众号:h5;app)' AFTER `transfer_bill_no`"
],
[
'code' => 320,
'type' => 3,
'table' => "luck_lottery_record",
'field' => "order_id",
'findSql' => "show columns from `@table` like 'order_id'",
'sql' => "ALTER TABLE `@table` ADD `order_id` varchar(32) NOT NULL DEFAULT '' COMMENT '订单号' AFTER `add_time`"
],
[
'code' => 320,
'type' => 3,
'table' => "luck_lottery_record",
'field' => "wechat_state",
'findSql' => "show columns from `@table` like 'wechat_state'",
'sql' => "ALTER TABLE `@table` ADD `wechat_state` varchar(32) NOT NULL DEFAULT '' COMMENT 'v3转账状态码' AFTER `order_id`"
],
[
'code' => 320,
'type' => 3,
'table' => "luck_lottery_record",
'field' => "package_info",
'findSql' => "show columns from `@table` like 'package_info'",
'sql' => "ALTER TABLE `@table` ADD `package_info` varchar(1000) NOT NULL DEFAULT '' COMMENT 'v3转账支付收款页的package' AFTER `wechat_state`"
],
[
'code' => 320,
'type' => 3,
'table' => "luck_lottery_record",
'field' => "fail_reason",
'findSql' => "show columns from `@table` like 'fail_reason'",
'sql' => "ALTER TABLE `@table` ADD `fail_reason` varchar(32) NOT NULL DEFAULT '' COMMENT 'v3转账失败原因' AFTER `package_info`"
],
[
'code' => 320,
'type' => 3,
'table' => "luck_lottery_record",
'field' => "transfer_bill_no",
'findSql' => "show columns from `@table` like 'transfer_bill_no'",
'sql' => "ALTER TABLE `@table` ADD `transfer_bill_no` varchar(256) NOT NULL DEFAULT '' COMMENT 'v3微信转账单号' AFTER `fail_reason`"
],
[
'code' => 320,
'type' => 3,
'table' => "luck_lottery_record",
'field' => "channel_type",
'findSql' => "show columns from `@table` like 'channel_type'",
'sql' => "ALTER TABLE `@table` ADD `channel_type` varchar(10) NOT NULL DEFAULT '' COMMENT '提现渠道(小程序:routine;公众号:h5;app)' AFTER `transfer_bill_no`"
],
[
'code' => 320,
'type' => 6,
'table' => "system_config",
'whereTable' => "system_config_tab",
'findSql' => "select id from @table where menu_name = 'pay_weixin_scene_id'",
'whereSql' => "select id as tabId from @whereTable where eng_title = 'pay'",
'sql' => "INSERT INTO `@table` VALUES (null, 0, 'pay_weixin_scene_id', 'text', 'number', 4, '', 1, '', 100, 0, '', '转账场景ID', '微信v3支付商家转账的转账场景ID,用于抽奖红包和佣金提现', 0, 1)"
],
[
'code' => 320,
'type' => -1,
'table' => "system_notification",
'sql' => "INSERT INTO `@table` VALUES (null, 'revenue_received', '收益到账通知', '收益到账给用户通知', 0, 0, 1, 1, 0, 0, '收益到账通知', '', 0, '0', '0', '', '', '', '', '', 1, 0)"
],
[
'code' => 320,
'type' => 6,
'table' => "template_message",
'whereTable' => "system_notification",
'findSql' => "select id from @table where tempkey = '1493'",
'whereSql' => "select id as tabId from @whereTable where mark = 'revenue_received'",
'sql' => "INSERT INTO `@table` VALUES (null, '@tabId', 0, '1493', '收益到账通知', '', '收益金额{{amount3.DATA}}\n温馨提醒{{thing4.DATA}}\n时间{{time9.DATA}}', '', '', '1739763519', 1)"
],
[
'code' => 320,
'type' => 6,
'table' => "template_message",
'whereTable' => "system_notification",
'findSql' => "select id from @table where tempkey = '54531'",
'whereSql' => "select id as tabId from @whereTable where mark = 'revenue_received'",
'sql' => "INSERT INTO `@table` VALUES (null, '@tabId', 1, '54531', '提现结果通知', '', '金额{{amount2.DATA}}\n提现结果{{const5.DATA}}\n提现时间{{time3.DATA}}', '', '', '1739763519', 1)"
],
];
return $data;
}
}