__MY_ROOT_PUBLIC__.'static/upload/video/', 'file' => __MY_ROOT_PUBLIC__.'static/upload/file/', 'image' => __MY_ROOT_PUBLIC__.'static/upload/images/', ]; foreach($path_all as $type=>$path) { $path = GetDocumentRoot() . (substr($path, 0, 1) == "/" ? "":"/") . $path; $handle = opendir($path); while(false !== ($file = readdir($handle))) { if($file != 'index.html' && $file != '.' && $file != '..' && substr($file, 0, 1) != '.') { $ret = AttachmentService::AttachmentDiskFilesToDb($file); if(isset($ret['msg'])) { echo $ret['msg']; } } } } } /** * 订单地址拆分到新的表,1.7升级1.8升级运行 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2019-12-13 * @desc description */ public function OrderAddress() { if(input('pwd') != 'shopxo520') { die('非法访问'); } die('禁止访问'); // 状态 $success = 0; $fail = 0; // 获取数据 // 一次处理100条 $prefix = MyConfig('database.connections.mysql.prefix'); $field = 'id, user_id, receive_address_id, receive_name, receive_tel, receive_province, receive_city, receive_county, receive_address'; $sql = 'SELECT '.$field.' FROM '.$prefix.'order WHERE `id` NOT IN (SELECT `order_id` FROM '.$prefix.'order_address) LIMIT 500'; $result = Db::query($sql); if(!empty($result)) { foreach($result as $v) { $province_name = RegionService::RegionName($v['receive_province']); $city_name = RegionService::RegionName($v['receive_city']); $county_name = RegionService::RegionName($v['receive_county']); $data = [ 'order_id' => $v['id'], 'user_id' => $v['user_id'], 'address_id' => $v['receive_address_id'], 'name' => $v['receive_name'], 'tel' => $v['receive_tel'], 'province' => $v['receive_province'], 'city' => $v['receive_city'], 'county' => $v['receive_county'], 'address' => $v['receive_address'], 'province_name' => empty($province_name) ? '' : $province_name, 'city_name' => empty($city_name) ? '' : $city_name, 'county_name' => empty($county_name) ? '' : $county_name, 'add_time' => time(), ]; if(Db::name('OrderAddress')->insert($data)) { $success++; } else { $fail++; } } } echo 'count:'.count($result).', success:'.$success.', fail:'.$fail; } /** * 商品库存初始化 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2020-07-29 * @desc description */ public function GoodsInventoryHandle() { if(input('pwd') != 'shopxo520') { die('非法访问'); } die('禁止访问'); $warehouse_id = 1; $warehouse = Db::name('Warehouse')->where(['id'=>$warehouse_id])->find(); if(empty($warehouse)) { $w_data = [ 'id' => $warehouse_id, 'name' => '默认仓库', 'is_default' => 1, 'add_time' => time(), ]; $warehouse_id = Db::name('Warehouse')->insertGetId($w_data); } // 状态 $success = 0; $fail = 0; // 获取数据 // 一次处理100条 $prefix = MyConfig('database.connections.mysql.prefix'); $field = 'id as goods_id'; $sql = 'SELECT '.$field.' FROM `'.$prefix.'goods` WHERE `id` NOT IN (SELECT `goods_id` FROM `'.$prefix.'warehouse_goods` WHERE `warehouse_id`='.$warehouse_id.') ORDER BY `id` ASC LIMIT 500'; $result = Db::query($sql); if(!empty($result)) { foreach($result as $rv) { $goods_id = $rv['goods_id']; // 获取商品规格 $res = GoodsService::GoodsSpecificationsActual($goods_id); $inventory_spec = []; if(!empty($res['value']) && is_array($res['value'])) { $inventory_arr = []; $inventory_temp = Db::name('GoodsSpecBase')->where(['id'=>array_column($res['value'], 'base_id')])->field('id,inventory')->select()->toArray(); if(!empty($inventory_temp)) { foreach($inventory_temp as $rv) { $inventory_arr[$rv['id']] = $rv['inventory']; } foreach($res['value'] as &$vv) { $vv['inventory'] = isset($inventory_arr[$vv['base_id']]) ? $inventory_arr[$vv['base_id']] : 0; } } // 获取当前配置的库存 $spec = array_column($res['value'], 'value'); foreach($spec as $k=>$v) { $arr = explode(GoodsService::$goods_spec_to_string_separator, $v); $inventory_spec[] = [ 'name' => implode(' / ', $arr), 'spec' => json_encode(WarehouseGoodsService::GoodsSpecMuster($v, $res['title']), JSON_UNESCAPED_UNICODE), 'md5_key' => md5(implode('', $arr)), 'inventory' => isset($res['value'][$k]['inventory']) ? $res['value'][$k]['inventory'] : 0, ]; } } else { // 没有规格则处理默认规格 default $str = 'default'; $inventory_spec[] = [ 'name' => '默认规格', 'spec' => $str, 'md5_key' => md5($str), 'inventory' => Db::name('GoodsSpecBase')->where(['goods_id'=>$goods_id])->value('inventory'), ]; } // 添加关联商品 $warehouse_goods_id = Db::name('WarehouseGoods')->where(['warehouse_id'=>$warehouse_id, 'goods_id'=>$goods_id])->value('id'); $inventory_total = array_sum(array_column($inventory_spec, 'inventory')); if(empty($warehouse_goods_id)) { $w_goods = [ 'warehouse_id' => $warehouse_id, 'goods_id' => $goods_id, 'is_enable' => 1, 'inventory' => $inventory_total, 'add_time' => time(), ]; $warehouse_goods_id = Db::name('WarehouseGoods')->insertGetId($w_goods); } else { Db::name('WarehouseGoods')->where(['warehouse_id'=>$warehouse_id, 'goods_id'=>$goods_id])->update(['inventory'=>$inventory_total, 'upd_time'=>time()]); } // 库存 $w_values = []; if($warehouse_goods_id > 0) { foreach($inventory_spec as $iv) { $w_values[] = [ 'warehouse_id' => $warehouse_id, 'warehouse_goods_id' => $warehouse_goods_id, 'goods_id' => $goods_id, 'md5_key' => $iv['md5_key'], 'spec' => $iv['spec'], 'inventory' => $iv['inventory'], 'add_time' => time(), ]; } } else { $fail++; } // 添加数据 if(!empty($w_values)) { // 删除库存关联 Db::name('WarehouseGoodsSpec')->where(['warehouse_id'=>$warehouse_id, 'warehouse_goods_id'=>$warehouse_goods_id, 'goods_id'=>$goods_id])->delete(); // 写入 if(Db::name('WarehouseGoodsSpec')->insertAll($w_values) >= count($w_values)) { $success++; } } else { $fail++; } } } echo 'success:'.$success.', fail:'.$fail; } /** * 支付日志处理 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2020-07-26 * @desc description */ public function PayLogHandle() { if(input('pwd') != 'shopxo520') { die('非法访问'); } die('禁止访问'); // 状态 $success = 0; $fail = 0; // 获取日志 $data = Db::name('PayLog')->where(['is_handle'=>0])->limit(0, 500)->select()->toArray(); if(!empty($data)) { $business_type_list = [ 0 => '默认', 1 => '订单', 2 => '充值', 3 => '提现', ]; foreach($data as $v) { $upd_data = [ 'is_handle' => 1, 'business_type' => isset($business_type_list[$v['business_type']]) ? $business_type_list[$v['business_type']] : $v['business_type'], 'status' => (empty($v['pay_price']) || $v['pay_price'] <= 0) ? 0 : 1, ]; // 未支付则关闭 if(empty($v['pay_price']) || $v['pay_price'] <= 0) { $upd_data['close_time'] = time(); } // 支付时间 if(!empty($v['pay_price']) && $v['pay_price'] > 0) { $upd_data['pay_time'] = time(); } // 更新操作 if(Db::name('PayLog')->where(['is_handle'=>0, 'id'=>$v['id']])->update($upd_data)) { // 新增关联数据 if(DB::name('PayLogValue')->insert([ 'pay_log_id' => $v['id'], 'business_id' => $v['order_id'], 'business_no' => '', 'add_time' => $v['add_time'], ])) { $success++; } else { $fail++; } } else { $fail++; } } } echo 'count:'.count($data).', success:'.$success.', fail:'.$fail; } /** * 退款日志处理 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2020-07-26 * @desc description */ public function RefundLogHandle() { if(input('pwd') != 'shopxo520') { die('非法访问'); } die('禁止访问'); // 状态 $success = 0; $fail = 0; // 获取日志 $data = Db::name('RefundLog')->where(['is_handle'=>0])->limit(0, 500)->select()->toArray(); if(!empty($data)) { $business_type_list = [ 0 => '默认', 1 => '订单', 2 => '充值', 3 => '提现', ]; foreach($data as $v) { $upd_data = [ 'is_handle' => 1, 'business_type' => isset($business_type_list[$v['business_type']]) ? $business_type_list[$v['business_type']] : $v['business_type'], ]; // 更新操作 if(Db::name('RefundLog')->where(['is_handle'=>0, 'id'=>$v['id']])->update($upd_data)) { $success++; } else { $fail++; } } } echo 'count:'.count($data).', success:'.$success.', fail:'.$fail; } /** * 消息数据处理 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2020-07-26 * @desc description */ public function MessageHandle() { if(input('pwd') != 'shopxo520') { die('非法访问'); } die('禁止访问'); // 状态 $success = 0; $fail = 0; // 获取日志 $data = Db::name('Message')->where(['is_handle'=>0])->limit(0, 500)->select()->toArray(); if(!empty($data)) { $business_type_list = [ 0 => '默认', 1 => '订单', 2 => '充值', 3 => '提现', ]; foreach($data as $v) { $upd_data = [ 'is_handle' => 1, 'business_type' => isset($business_type_list[$v['business_type']]) ? $business_type_list[$v['business_type']] : $v['business_type'], ]; // 更新操作 if(Db::name('Message')->where(['is_handle'=>0, 'id'=>$v['id']])->update($upd_data)) { $success++; } else { $fail++; } } } echo 'count:'.count($data).', success:'.$success.', fail:'.$fail; } /** * 品牌分类数据处理 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2020-08-01 * @desc description */ public function BrandCategoryHandle() { if(input('pwd') != 'shopxo520') { die('非法访问'); } die('禁止访问'); // 状态 $success = 0; $fail = 0; // 获取品牌列表 $data = Db::name('Brand')->select()->toArray(); if(!empty($data)) { foreach($data as $v) { if(!empty($v['brand_category_id'])) { if(Db::name('BrandCategoryJoin')->where(['brand_id'=>$v['id']])->count() <= 0) { // 删除数据 Db::name('BrandCategoryJoin')->where(['brand_id'=>$v['id']])->delete(); // 添加数据 $temp_data = [ 'brand_id' => $v['id'], 'brand_category_id' => $v['brand_category_id'], 'add_time' => time(), ]; if(Db::name('BrandCategoryJoin')->insertGetId($temp_data) > 0) { $success++; } else { $fail++; } } } } } echo 'success:'.$success.', fail:'.$fail; } /** * 语言翻译生成 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2023-03-24 * @desc description */ public function Fanyi() { if(input('pwd') != 'shopxo520') { die('非法访问'); } die('禁止访问'); // 需要翻译的语言、参考 config/lang.php文件 $to = 'swe'; $to_name = '瑞典语'; // 待翻译的目录 $arr = [ APP_PATH.'lang'.DS, APP_PATH.'admin'.DS.'lang'.DS, APP_PATH.'index'.DS.'lang'.DS, APP_PATH.'api'.DS.'lang'.DS, ]; // 获取数据 $zh_data = []; foreach($arr as $dir) { if(!is_dir($dir)) { continue; } $zh_file = $dir.'zh.php'; if(!file_exists($zh_file)) { continue; } $temp = require $zh_file; $zh_data = array_merge($zh_data, $this->FanyiData($temp)); } // 翻译数据 并 生成数据 $params = []; $vers = get_class_vars(get_class($this)); foreach($vers as $k=>$v) { if(property_exists($this, $k)) { $params[$k] = $this->$k; } } $params['data_request']['to'] = $to; $params['data_request']['q'] = implode("\n", $zh_data); //$params['data_request']['q'] = "你好\n我是龚"; $fanyi = PluginsControlCall('multilingual', 'index', 'fanyi', 'index', $params, 1); if(isset($fanyi['code']) && $fanyi['code'] != 0) { die($fanyi['msg']); } $fanyi_data = (!empty($fanyi['data']) && !empty($fanyi['data']['trans_result'])) ? $fanyi['data']['trans_result'] : []; if(empty($fanyi_data)) { die('没有翻译数据'); } // 替换数据 $search = array_map(function($item) { return "'".$item."'"; }, array_column($fanyi_data, 'src')); $replace = array_map(function($item) { return "'".str_replace("'", '', $item)."'"; }, array_column($fanyi_data, 'dst')); // 加入标题名称 $search[] = '公共语言包-中文'; $search[] = '模块语言包-中文'; $replace[] = '公共语言包-'.$to_name; $replace[] = '模块语言包-'.$to_name; // 开始生成文件并替换数据 $success = 0; $fail = 0; foreach($arr as $dir) { // 复制文件 $zh_file = $dir.'zh.php'; if(!file_exists($zh_file)) { continue; } $to_file = $dir.$to.'.php'; if(!\base\FileUtil::CopyFile($zh_file, $to_file, true)) { continue; } // 生成文件并替换 $content = file_get_contents($to_file); if(file_put_contents($to_file, str_replace($search, $replace, $content)) !== false) { $success++; } else { $fail++; } } die('success:'.$success.', fail:'.$fail); } /** * 插件语言翻译生成 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2023-03-24 * @desc description */ public function PluginsFanyi() { if(input('pwd') != 'shopxo520') { die('非法访问'); } die('禁止访问'); // 需要翻译的语言、参考 config/lang.php文件 $to = 'en'; $to_name = '英文'; $plugins = 'erp'; // 待翻译的目录 $arr = [ APP_PATH.'plugins'.DS.$plugins.DS.'lang'.DS, APP_PATH.'plugins'.DS.$plugins.DS.'lang'.DS.'admin'.DS, APP_PATH.'plugins'.DS.$plugins.DS.'lang'.DS.'index'.DS, ]; // 获取数据 $zh_data = []; foreach($arr as $dir) { if(!is_dir($dir)) { continue; } $zh_file = $dir.'zh.php'; if(!file_exists($zh_file)) { continue; } $temp = require $zh_file; $zh_data = array_merge($zh_data, $this->FanyiData($temp)); } // 翻译数据 并 生成数据 $params = []; $vers = get_class_vars(get_class($this)); foreach($vers as $k=>$v) { if(property_exists($this, $k)) { $params[$k] = $this->$k; } } $params['data_request']['to'] = $to; $params['data_request']['q'] = implode("\n", $zh_data); //$params['data_request']['q'] = "你好\n我是龚"; $fanyi = PluginsControlCall('multilingual', 'index', 'fanyi', 'index', $params, 1); if(isset($fanyi['code']) && $fanyi['code'] != 0) { die($fanyi['msg']); } $fanyi_data = (!empty($fanyi['data']) && !empty($fanyi['data']['trans_result'])) ? $fanyi['data']['trans_result'] : []; if(empty($fanyi_data)) { die('没有翻译数据'); } // 替换数据 $search = array_map(function($item) { return "'".$item."'"; }, array_column($fanyi_data, 'src')); $replace = array_map(function($item) { return "'".str_replace("'", '', $item)."'"; }, array_column($fanyi_data, 'dst')); // 加入标题名称 $search[] = '语言包-中文'; $replace[] = '语言包-'.$to_name; // 开始生成文件并替换数据 $success = 0; $fail = 0; foreach($arr as $dir) { // 复制文件 $zh_file = $dir.'zh.php'; if(!file_exists($zh_file)) { continue; } $to_file = $dir.$to.'.php'; if(!\base\FileUtil::CopyFile($zh_file, $to_file, true)) { continue; } // 生成文件并替换 $content = file_get_contents($to_file); if(file_put_contents($to_file, str_replace($search, $replace, $content)) !== false) { $success++; } else { $fail++; } } die('success:'.$success.', fail:'.$fail); } /** * 语言翻译生成自定义文件片段 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2023-03-24 * @desc description */ public function MyFanyi() { if(input('pwd') != 'shopxo520') { die('非法访问'); } die('禁止访问'); // 需要翻译的语言、参考 config/lang.php文件 $to = 'cht'; $to_name = '瑞典语'; // 待翻译的目录 $arr = [ APP_PATH.'lang'.DS, ]; // 获取数据 $zh_data = []; foreach($arr as $dir) { if(!is_dir($dir)) { continue; } $zh_file = $dir.'zh-new.php'; if(!file_exists($zh_file)) { continue; } $temp = require $zh_file; $zh_data = array_merge($zh_data, $this->FanyiData($temp)); } // 翻译数据 并 生成数据 $params = []; $vers = get_class_vars(get_class($this)); foreach($vers as $k=>$v) { if(property_exists($this, $k)) { $params[$k] = $this->$k; } } $params['data_request']['to'] = $to; $params['data_request']['q'] = implode("\n", $zh_data); //$params['data_request']['q'] = "你好\n我是龚"; $fanyi = PluginsControlCall('multilingual', 'index', 'fanyi', 'index', $params, 1); if(isset($fanyi['code']) && $fanyi['code'] != 0) { die($fanyi['msg']); } $fanyi_data = (!empty($fanyi['data']) && !empty($fanyi['data']['trans_result'])) ? $fanyi['data']['trans_result'] : []; if(empty($fanyi_data)) { die('没有翻译数据'); } // 替换数据 $search = array_map(function($item) { return "'".$item."'"; }, array_column($fanyi_data, 'src')); $replace = array_map(function($item) { return "'".str_replace("'", '', $item)."'"; }, array_column($fanyi_data, 'dst')); // 加入标题名称 $search[] = '公共语言包-中文'; $search[] = '模块语言包-中文'; $replace[] = '公共语言包-'.$to_name; $replace[] = '模块语言包-'.$to_name; // 开始生成文件并替换数据 $success = 0; $fail = 0; foreach($arr as $dir) { // 复制文件 $zh_file = $dir.'zh-new.php'; if(!file_exists($zh_file)) { continue; } $to_file = $dir.$to.'-new.php'; if(!\base\FileUtil::CopyFile($zh_file, $to_file, true)) { continue; } // 生成文件并替换 $content = file_get_contents($to_file); if(file_put_contents($to_file, str_replace($search, $replace, $content)) !== false) { $success++; } else { $fail++; } } die('success:'.$success.', fail:'.$fail); } // 翻译数据递归获取 public function FanyiData($data) { $result = []; if(!empty($data) && is_array($data)) { foreach($data as $v) { if(!empty($v)) { if(is_array($v)) { $result = array_merge($result, $this->FanyiData($v)); } else { if(!ctype_alnum(str_replace(['%', 'x ', ' ', '-', '_', ',', '.', ':',], '', $v)) && !is_numeric($v)) { $result[md5($v)] = $v; } } } } } return $result; } // 地区导入 public function Region() { die('禁止访问'); // $save_file = ROOT.'region_text.text'; // excel读取 // // 获取导入数据 // $file = ROOT.'KEN_ALL_ROME.xlsx'; // $ret = (new \base\Excel())->Import($file); // if($ret['code'] != 0) // { // die($ret['msg']); // } // if(empty($ret['data']) || empty($ret['data']['title']) || empty($ret['data']['data'])) // { // die('导入数据为空'); // } // // 数据组合 // $data = []; // foreach(array_chunk($ret['data']['data'], 1000) as $v) // { // foreach($v as $vs) // { // if(!array_key_exists($vs[1], $data)) // { // $data[$vs[1]] = [ // 'name' =>$vs[1], // 'code' => '', // 'item' => [], // ]; // } // $temp = str_replace([' ', ' '], '', $vs[2]); // if(!array_key_exists($temp, $data[$vs[1]]['item'])) // { // $data[$vs[1]]['item'][$temp] = [ // 'name' => $temp, // 'code' => '', // 'item' => [], // ]; // } // $temp2 = explode('(', $vs[3]); // if(!array_key_exists($temp2[0], $data[$vs[1]]['item'][$temp]['item'])) // { // $data[$vs[1]]['item'][$temp]['item'][$temp2[0]] = [ // 'name' => $temp2[0], // 'code' => $vs[0], // ]; // } // } // } // file_put_contents($save_file, json_encode($data, JSON_UNESCAPED_UNICODE)); // echo 'ok'; // echo '
';
// print_r($data);
// 导入
// $data = json_decode(file_get_contents($save_file), true);
// // echo '';
// // print_r($data);
// foreach(array_chunk($data, 50) as $v)
// {
// foreach($v as $v1)
// {
// $insert = [
// 'name' => $v1['name'],
// 'code' => empty($v1['code']) ? '' : $v1['code'],
// 'level' => 1,
// 'add_time' => time(),
// ];
// $id1 = Db::name('Region')->insertGetId($insert);
// if($id1 > 0 && !empty($v1['item']))
// {
// foreach($v1['item'] as $v2)
// {
// $insert = [
// 'pid' => $id1,
// 'name' => $v2['name'],
// 'code' => empty($v2['code']) ? '' : $v2['code'],
// 'level' => 2,
// 'add_time' => time(),
// ];
// $id2 = Db::name('Region')->insertGetId($insert);
// if($id2 > 0 && !empty($v2['item']))
// {
// $all = [];
// foreach($v2['item'] as $v3)
// {
// $all[] = [
// 'pid' => $id2,
// 'name' => $v3['name'],
// 'code' => empty($v3['code']) ? '' : $v3['code'],
// 'level' => 3,
// 'add_time' => time(),
// ];
// }
// Db::name('Region')->insertAll($all);
// }
// }
// }
// }
// }
// echo 'ok';
}
}
?>