* Date: 2019-2-12
*/
namespace app\admin\controller;
use think\Page;
use think\Db;
use think\Config;
use app\admin\logic\MemberLogic;
class Project extends Base {
public $userConfig = [];
/**
* 构造方法
*/
public function __construct(){
parent::__construct();
$this->language_access(); // 多语言功能操作权限
/*会员中心数据表*/
$this->project_db = Db::name('project'); //
$this->service_db = Db::name('service'); //
$this->projectQueryPasswordDb = Db::name('query_password'); // 查询密码表
// 是否开启支付功能设置
$this->userConfig = getUsersConfigData('all');
$this->assign('userConfig',$this->userConfig);
// 模型是否开启
$channeltype_row = \think\Cache::get('extra_global_channeltype');
$this->assign('channeltype_row',$channeltype_row);
}
// 会员列表
public function users_index()
{
$list = array();
$param = input('param.');
$condition = array();
// 应用搜索条件
foreach (['keywords','origin_type'] as $key) {
if (isset($param[$key]) && $param[$key] !== '') {
if ($key == 'keywords') {
$condition['a.enterprise|a.name'] = array('LIKE', "%{$param[$key]}%");
} else {
$condition['a.'.$key] = array('eq', $param[$key]);
}
}
}
// $condition['a.is_del'] = 0;
// 多语言
//$condition['a.lang'] = array('eq', $this->admin_lang);
/**
* 数据查询
*/
$count = $this->project_db->alias('a')->where($condition)->count();// 查询满足要求的总记录数
$Page = new Page($count, config('paginate.list_rows'));// 实例化分页类 传入总记录数和每页显示的记录数
$list = $this->project_db->field('a.*')
->alias('a')
// ->join('__USERS_LEVEL__ b', 'a.level = b.level_id', 'LEFT')
->where($condition)
->order('a.id desc')
->limit($Page->firstRow.','.$Page->listRows)
->select();
$show = $Page->show();// 分页显示输出
$this->assign('page',$show);// 赋值分页输出
$this->assign('list',$list);// 赋值数据集
$this->assign('pager',$Page);// 赋值分页集
return $this->fetch();
}
//新增项目
public function add()
{
//防止php超时
function_exists('set_time_limit') && set_time_limit(0);
$id = input('id',0);
if($id){
$item = $this->project_db->where([
'id' => $id
])->find();
$this->assign('item',$item);
}
$this->assign('id',$id);
if (IS_POST) {
$post = input('post.');
// 添加表信息
$data = array(
'name' => $post['name'],
'enterprise' => $post['enterprise'],
'filing' => $post['filing'],
'sid' =>$post['sid'],
'limitationdate' => $post['limitationdate'],
);
if($id >0){
$this->project_db->where(array('id'=>$id))->update($data);
$insertID = $id;
}else{
$data['createtime'] = getTime();
$insertID = M('project')->insertGetId($data);
}
$data['id'] = $insertID;
$datas['qrcode'] = $this->book($data);
$this->project_db->where(array('id'=>$insertID))->update($datas);
if (!empty($insertID)) {
// adminLog('新增项目:'.$post['name']);
$this->success("操作成功", url('Project/users_index'));
} else {
$this->error("操作失败", url('Project/users_index'));
}
}
return $this->fetch();
}
//新增服务商
public function edit()
{
//防止php超时
function_exists('set_time_limit') && set_time_limit(0);
$id = input('id',0);
if($id){
$item = $this->service_db->where([
'id' => $id
])->find();
$this->assign('item',$item);
}
$this->assign('id',$id);
if (IS_POST) {
$post = input('post.');
// 添加表信息
$data = array(
'name' => $post['name'],
'centre' => $post['centre']
);
if($id >0){
$this->service_db->where(array('id'=>$id))->update($data);
$insertID = $id;
}else{
$data['createtime'] = getTime();
$insertID = M('service')->insertGetId($data);
}
$data['id'] = $insertID;
$datas['qrcode'] = $this->service($data);
$this->service_db->where(array('id'=>$insertID))->update($datas);
if (!empty($insertID)) {
// adminLog('新增项目:'.$post['name']);
$this->success("操作成功", url('Project/users_index'));
} else {
$this->error("操作失败", url('Project/users_index'));
}
}
return $this->fetch();
}
// 项目删除
public function users_del()
{
$users_id = input('del_id/a');
$users_id = eyIntval($users_id);
if (IS_AJAX_POST && !empty($users_id)) {
// 删除统一条件
$Where = [
'id' => ['IN', $users_id],
];
$result = $this->project_db->field('name')->where($Where)->select();
$username_list = get_arr_column($result, 'name');
$return = $this->project_db->where($Where)->delete();
if (false !== $return) {
$this->success('删除成功');
}else{
$this->error('删除失败');
}
}
$this->error('参数有误');
}
// 级别列表
public function level_index()
{
$list = array();
$param = input('param.');
$condition = array();
// 应用搜索条件
foreach (['keywords','origin_type'] as $key) {
if (isset($param[$key]) && $param[$key] !== '') {
if ($key == 'keywords') {
$condition['a.name|a.centre'] = array('LIKE', "%{$param[$key]}%");
} else {
$condition['a.'.$key] = array('eq', $param[$key]);
}
}
}
// $condition['a.is_del'] = 0;
// 多语言
//$condition['a.lang'] = array('eq', $this->admin_lang);
/**
* 数据查询
*/
$count = $this->service_db->alias('a')->where($condition)->count();// 查询满足要求的总记录数
$Page = new Page($count, config('paginate.list_rows'));// 实例化分页类 传入总记录数和每页显示的记录数
$list = $this->service_db->field('a.*')
->alias('a')
// ->join('__USERS_LEVEL__ b', 'a.level = b.level_id', 'LEFT')
->where($condition)
->order('a.id desc')
->limit($Page->firstRow.','.$Page->listRows)
->select();
$show = $Page->show();// 分页显示输出
$this->assign('page',$show);// 赋值分页输出
$this->assign('list',$list);// 赋值数据集
$this->assign('pager',$Page);// 赋值分页集
return $this->fetch();
}
// 服务商删除
public function del()
{
$users_id = input('del_id/a');
$users_id = eyIntval($users_id);
if (IS_AJAX_POST && !empty($users_id)) {
// 删除统一条件
$Where = [
'id' => ['IN', $users_id],
];
$result = $this->service_db->field('name')->where($Where)->select();
$username_list = get_arr_column($result, 'name');
$return = $this->service_db->where($Where)->delete();
if (false !== $return) {
$this->success('删除成功');
}else{
$this->error('删除失败');
}
}
$this->error('参数有误');
}
/**
* 项目
* @return string
*/
public function book($data)
{
// $data = array(
// 'title'=>'防爆电器',
// 'enterprise'=>'新黎明科技股份有限公司',
// 'filing'=>'G-20230525',
// 'sid'=>'91320500582331116Y',
// 'limitationdate'=>'2023-05-25',
// );
$path = "uploads/imgs/";
// file_put_contents(__DIR__ . '/debug.txt', var_export($data,true));
$file = $data['id'].'.jpg';
$font = "uploads/msyh.ttf";
$target = imagecreatetruecolor(1657, 1105);
$bc = imagecolorallocate($target, 0, 0, 0);
$cc = imagecolorallocate($target, 255, 51, 0);
$wc = imagecolorallocate($target, 255, 255, 255);
$yc = imagecolorallocate($target, 255, 255, 0);
//背景
$bg = imagecreatefromjpeg("uploads/imgs/b.jpg");
imagecopy($target, $bg, 0, 0, 0, 0, 1657, 1105);
imagedestroy($bg);
//名称
imagettftext($target, 23, 0, 600, 589, $bc, $font, $data['name']);
//个人/企业
imagettftext($target, 23, 0, 600, 652, $bc, $font, $data['enterprise']);
//备案号
imagettftext($target, 23, 0, 600, 718, $bc, $font, $data['filing']);
//证件号码
imagettftext($target, 23, 0, 600, 786, $bc, $font, $data['sid']);
//有效期
imagettftext($target, 23, 0, 600, 850, $bc, $font, $data['limitationdate']);
imagejpeg($target, $path . $file);
imagedestroy($target);
// echo '
';
return '/uploads/imgs/'.$data['id'].'.jpg';
}
/**
* 服务商
* @return string
*/
public function service($data)
{
// $id = 1;
/* $data = array(
'name'=>'上 海 聚 上 网 络 科 技 有 限 公 司',
'centre'=>'华 东 服 务 中 心',
);*/
$path = "uploads/imgs/";
$me =array();
$file = $data['id'].'.jpg';
$font = "uploads/msyh.ttf";
$target = imagecreatetruecolor(800, 1111);
$bc = imagecolorallocate($target, 0, 0, 0);
$cc = imagecolorallocate($target, 255, 51, 0);
// $wc = imagecolorallocate($target, 255, 255, 255);
// $yc = imagecolorallocate($target, 255, 255, 0);
//背景
$bg = imagecreatefromjpeg("uploads/imgs/a.jpg");
imagecopy($target, $bg, 0, 0, 0, 0, 800, 1111);
imagedestroy($bg);
imagettftext($target, 23, 0, 160, 625, $bc, $font, $data['name']);
imagettftext($target, 21, 0, 300, 690, $cc, $font, $data['centre']);
imagejpeg($target, $path . $file);
imagedestroy($target);
// echo '
';
return '/uploads/imgs/'.$data['id'].'.jpg';
}
/**
* 导入Excel文件
* @return json
*/
public function import_excel()
{
if (IS_POST) {
$file = request()->file('excel_file');
if (!$file) {
$this->error('请选择要导入的文件');
}
// 验证文件类型
$ext = strtolower(pathinfo($file->getInfo('name'), PATHINFO_EXTENSION));
if (!in_array($ext, ['xls', 'xlsx'])) {
$this->error('只支持Excel格式文件(.xls, .xlsx)');
}
// 移动文件到临时目录
$info = $file->move(ROOT_PATH . 'data' . DS . 'runtime', '');
if (!$info) {
$this->error('文件上传失败: ' . $file->getError());
}
$filename = ROOT_PATH . 'data' . DS . 'runtime' . DS . $info->getSaveName();
// 解析Excel文件
$data = [];
try {
// 引入PHPExcel库
vendor('phpoffice.phpexcel.Classes.PHPExcel');
// 判断文件类型
if ($ext == 'xls') {
$objReader = \PHPExcel_IOFactory::createReader('Excel5');
} else {
$objReader = \PHPExcel_IOFactory::createReader('Excel2007');
}
$objPHPExcel = $objReader->load($filename);
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
// 跳过第一行标题
for ($row = 2; $row <= $highestRow; $row++) {
// 获取一行数据
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE)[0];
// 确保行数据完整
if (count($rowData) >= 5) {
// 验证必要字段不为空
if (empty(trim($rowData[0]))) {
continue; // 跳过必填字段为空的行
}
$data[] = [
'name' => trim($rowData[0]),
'enterprise' => trim($rowData[1]),
'filing' => trim($rowData[2]),
'sid' => trim($rowData[3]),
'limitationdate' => trim($rowData[4]),
'createtime' => getTime()
];
}
}
// 删除临时文件
unlink($filename);
// 批量插入数据
if (!empty($data)) {
$result = Db::name('project')->insertAll($data);
if ($result) {
$this->success('成功导入 ' . count($data) . ' 条记录');
} else {
$this->error('导入失败');
}
} else {
$this->error('文件中没有有效数据');
}
} catch (\Exception $e) {
// 删除临时文件
if (file_exists($filename)) {
unlink($filename);
}
$this->error('文件解析失败: ' . $e->getMessage());
}
}
$this->error('非法请求');
}
/**
* 测试
* @return string
*/
public function createShopImage()
{
$data = array(
'title'=>'防爆电器',
'enterprise'=>'新黎明科技股份有限公司',
'filing'=>'G-20230525',
'sid'=>'91320500582331116Y',
'limitationdate'=>'2023-05-25',
);
$id = 1;
$path = "uploads/imgs/";
$mid = 1;
$me =array();
$file = $id.'.jpg';
$font = "uploads/msyh.ttf";
$target = imagecreatetruecolor(1657, 1105);
$bc = imagecolorallocate($target, 0, 0, 0);
$cc = imagecolorallocate($target, 255, 51, 0);
$wc = imagecolorallocate($target, 255, 255, 255);
$yc = imagecolorallocate($target, 255, 255, 0);
//背景
$bg = imagecreatefromjpeg("uploads/imgs/b.jpg");
imagecopy($target, $bg, 0, 0, 0, 0, 1657, 1105);
imagedestroy($bg);
//名称
imagettftext($target, 23, 0, 600, 589, $bc, $font, $data['title']);
//个人/企业
imagettftext($target, 23, 0, 600, 652, $bc, $font, $data['enterprise']);
//备案号
imagettftext($target, 23, 0, 600, 718, $bc, $font, $data['filing']);
//证件号码
imagettftext($target, 23, 0, 600, 786, $bc, $font, $data['sid']);
//有效期
imagettftext($target, 23, 0, 600, 850, $bc, $font, $data['limitationdate']);
imagejpeg($target, $path . $file);
imagedestroy($target);
echo '
';
}
// 查询密码列表
public function password_index()
{
$list = array();
$param = input('param.');
$condition = array();
// 应用搜索条件
foreach (['keywords'] as $key) {
if (isset($param[$key]) && $param[$key] !== '') {
if ($key == 'keywords') {
$condition['password'] = array('LIKE', "%{$param[$key]}%");
}
}
}
/**
* 数据查询
*/
$count = $this->projectQueryPasswordDb->where($condition)->count();// 查询满足要求的总记录数
$Page = new Page($count, config('paginate.list_rows'));// 实例化分页类 传入总记录数和每页显示的记录数
$list = $this->projectQueryPasswordDb
->where($condition)
->order('id desc')
->limit($Page->firstRow.','.$Page->listRows)
->select();
$show = $Page->show();// 分页显示输出
$this->assign('page',$show);// 赋值分页输出
$this->assign('list',$list);// 赋值数据集
$this->assign('pager',$Page);// 赋值分页集
return $this->fetch('password_index');
}
// 新增/编辑查询密码
public function password_add()
{
$id = input('id/d', 0);
if ($id > 0) {
$info = $this->projectQueryPasswordDb->where(['id' => $id])->find();
if (empty($info)) {
$this->error('数据不存在');
}
$this->assign('info', $info);
}
if (IS_POST) {
$post = input('post.');
// 验证数据
if (empty($post['password'])) {
$this->error('查询密码不能为空');
}
// 准备数据
$data = [
'password' => trim($post['password']),
'allow_keywords' => trim($post['allow_keywords']),
'deny_keywords' => trim($post['deny_keywords']),
'allow_servicer_keywords' => trim($post['allow_servicer_keywords']),
'deny_servicer_keywords' => trim($post['deny_servicer_keywords']),
'status' => !empty($post['status']) ? 1 : 0,
'updatetime' => time()
];
if (empty($info)) {
// 新增
$data['createtime'] = time();
$result = $this->projectQueryPasswordDb->insert($data);
$msg = '新增';
} else {
// 编辑
$result = $this->projectQueryPasswordDb->where(['id' => $id])->update($data);
$msg = '编辑';
}
if ($result !== false) {
$this->success($msg . "成功", url('Project/password_index'));
} else {
$this->error($msg . "失败");
}
}
$this->assign('id', $id);
return $this->fetch('password_add');
}
// 删除查询密码
public function password_del()
{
$id = input('del_id/d', 0);
if (IS_AJAX_POST && !empty($id)) {
$result = $this->projectQueryPasswordDb->where(['id' => $id])->delete();
if ($result) {
$this->success('删除成功');
} else {
$this->error('删除失败');
}
}
$this->error('参数有误');
}
// 批量删除查询密码
public function password_batch_del()
{
$ids = input('del_id/a');
if (IS_AJAX_POST && !empty($ids)) {
$result = $this->projectQueryPasswordDb->where(['id' => ['IN', $ids]])->delete();
if ($result) {
$this->success('批量删除成功');
} else {
$this->error('批量删除失败');
}
}
$this->error('参数有误');
}
// 修改状态
public function password_change_status()
{
$id = input('id/d', 0);
$status = input('status/d', 0);
if (IS_AJAX_POST && !empty($id)) {
$result = $this->projectQueryPasswordDb->where(['id' => $id])->update(['status' => $status, 'updatetime' => time()]);
if ($result) {
$this->success('状态修改成功');
} else {
$this->error('状态修改失败');
}
}
$this->error('参数有误');
}
}