You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wkcrm/application/admin/model/Common.php

337 lines
8.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
// +----------------------------------------------------------------------
// | Description: 公共模型,所有模型都可继承此模型基于RESTFUL CRUD操作
// +----------------------------------------------------------------------
// | Author:
// +----------------------------------------------------------------------
namespace app\admin\model;
use think\Model;
use think\Request;
class Common extends Model
{
/**
* [Request 请求参数]
* @Michael_xu
* @return [array]
*/
protected function requestData()
{
$m = strtolower(request()->module());
$c = strtolower(request()->controller());
$a = strtolower(request()->action());
$ret = [
'm' => $m,
'c' => $c,
'a' => $a
];
return $ret;
}
/**
* [fmtRequest 格式化请求参数]
* @Michael_xu
* @param [array] $request [参数]
* @return [array]
*/
public function fmtRequest( $request = [] )
{
$pageType = $request['pageType'] ? 'all' : ''; //all全部不分页
$page = 1;
if (isset($request['page']) && is_numeric($request['page']) ) {
$page = $request['page'];
unset($request['page']);
}
$limit = 15;
if (isset($request['limit']) && is_numeric($request['limit']) ) {
$limit = $request['limit'];
unset($request['limit']);
}
$offset = $length = null;
if ($pageType == 'all') {
$page = 1;
$limit = 0;
unset($request['pageType']);
} else {
// 大数据处理-滚动加载-子分页
if ($request['sub_page'] && $request['sub_limit']) {
$sub_page = $request['sub_page'];
$sub_limit = $request['sub_limit'];
unset($request['sub_page']);
unset($request['sub_limit']);
$offset = ($page - 1) * $limit + ($sub_page - 1) * $sub_limit;
if ($sub_limit * $sub_page > $limit) {
$length = ($page - 1) * $limit + $limit - $offset;
} else {
$length = $sub_limit;
}
if ($length < 0) {
$offset = $length = 0;
}
}
}
if (!isset($offset) || !isset($length)) {
$offset = ($page - 1) * $limit;
$length = $limit;
}
$ret = [
'page' => $page,
'limit' => $limit,
'map' => $request,
'offset' => $offset,
'length' => $length,
];
return $ret;
}
/**
* [getDataById 根据主键获取详情]
* @param string $id [主键]
* @return [array]
*/
public function getDataById($id = '')
{
$data = $this->get($id);
if (!$data) {
$this->error = '暂无此数据';
return false;
}
return $data;
}
/**
* [createData 新建]
* @param array $param [description]
* @return [array] [description]
*/
public function createData($param)
{
// 验证
$validate = validate($this->name);
if (!$validate->check($param)) {
$this->error = $validate->getError();
return false;
}
try {
$this->data($param)->allowField(true)->save();
return true;
} catch(\Exception $e) {
$this->error = '添加失败';
return false;
}
}
/**
* [updateDataById 编辑]
* @param [type] $param [description]
* @param [type] $id [description]
* @return [type] [description]
*/
public function updateDataById($param, $id)
{
$checkData = $this->get($id);
if (!$checkData) {
$this->error = '暂无此数据';
return false;
}
// 验证
$validate = validate($this->name);
if (!$validate->scene('edit')->check($param)) {
$this->error = $validate->getError();
return false;
}
try {
$this->allowField(true)->save($param, [$this->getPk() => $id]);
return true;
} catch(\Exception $e) {
$this->error = '编辑失败';
return false;
}
}
/**
* [delDataById 根据id删除数据]
* @param string $id [主键]
* @param boolean $delSon [是否删除子孙数据]
* @return [type] [description]
*/
public function delDataById($id = '', $delSon = false)
{
if (!$id) {
$this->error = '删除失败';
return false;
}
$this->startTrans();
try {
$this->where($this->getPk(), $id)->delete();
if ($delSon && is_numeric($id)) {
// 删除子孙
$childIds = $this->getAllChild($id);
if($childIds){
$this->where($this->getPk(), 'in', $childIds)->delete();
}
}
$this->commit();
return true;
} catch(\Exception $e) {
$this->error = '删除失败';
$this->rollback();
return false;
}
}
/**
* [delDatas 批量删除数据]
* @param array $ids [主键数组]
* @param boolean $delSon [是否删除子孙数据]
* @return [type] [description]
*/
public function delDatas($ids = [], $delSon = false)
{
if (empty($ids)) {
$this->error = '删除失败';
return false;
}
// 查找所有子元素
if ($delSon) {
foreach ($ids as $k => $v) {
if (!is_numeric($v)) continue;
$childIds = $this->getAllChild($v);
$ids = array_merge($ids, $childIds);
}
$ids = array_unique($ids);
}
try {
$this->where($this->getPk(), 'in', $ids)->delete();
return true;
} catch (\Exception $e) {
$this->error = '操作失败';
return false;
}
}
/**
* [enableDatas 批量启用、禁用]
* @param string $ids [主键数组]
* @param integer $status [状态1启用0禁用]
* @param [boolean] $delSon [是否删除子孙数组]
* @return [type] [description]
*/
public function enableDatas($ids = [], $status = 1, $delSon = false)
{
if (empty($ids)) {
$this->error = '参数错误';
return false;
}
// 查找所有子元素
if ($delSon && $status === '0') {
foreach ($ids as $k => $v) {
$childIds = $this->getAllChild($v);
$ids = array_merge($ids, $childIds);
}
$ids = array_unique($ids);
}
try {
$this->where($this->getPk(),'in',$ids)->setField('status', $status);
return true;
} catch (\Exception $e) {
$this->error = '操作失败';
return false;
}
}
/**
* 获取所有子孙
*/
public function getAllChild($id, &$data = [])
{
$map['pid'] = $id;
$childIds = $this->where($map)->column($this->getPk());
if (!empty($childIds)) {
foreach ($childIds as $v) {
$data[] = $v;
$this->getAllChild($v, $data);
}
}
return $data;
}
/**
* 逻辑删除,将数据标记为删除状态
* @author Michael_xu
*/
public function signDelById($id)
{
if (!$id) {
$this->error = '删除失败';
return false;
}
$this->startTrans();
try {
$data['is_deleted'] = 1;
$data['delete_time'] = time();
$this->allowField(true)->save($data, [$this->getPk() => $id]);
$this->commit();
return true;
} catch(\Exception $e) {
$this->error = '删除失败';
$this->rollback();
return false;
}
}
/**
* 导出数据处理
*/
public function exportHandle($list, $field_list, $type = '')
{
foreach ($list as &$val) {
foreach ($field_list as $field) {
switch ($field['form_type']) {
case 'user':
if (isset($val[$field['field'] . '_info']['realname'])) {
$val[$field['field']] = $val[$field['field'] . '_info']['realname'];
} else {
$val[$field['field']] = implode(',', array_column($val[$field['field'] . '_info'], 'realname'));
}
break;
case 'structure':
$temp = array_map(function ($val) { return $val->toarray(); }, $val[$field['field'] . '_info']);
$val[$field['field']] = implode(',', array_column($temp, 'name'));
break;
case 'datetime':
$val[$field['field']] = strtotime($val[$field['field']]) ? $val[$field['field']] : '';
break;
case 'customer':
case 'business':
case 'contacts':
$val[$field['field']] = $val[$field['field'] . '_info']['name'];
break;
case 'contacts':
$val[$field['field']] = $val[$field['field'] . '_info']['name'];
break;
default :
switch ($field['field']) {
// 商机销售阶段、商机状态组
case 'status_id':
case 'type_id':
$val[$field['field']] = $val[$field['field'] . '_info'];
break;
}
}
}
}
return $list;
}
}