<?php
|
|
namespace app\common\model\plus\business;
|
|
use app\common\model\BaseModel;
|
use app\common\model\settings\Region;
|
|
/**
|
* 名片管理模型
|
*/
|
class Business extends BaseModel
|
{
|
protected $name = 'business_card';
|
/**
|
* 追加字段
|
* @var string[]
|
*/
|
protected $append = ['region'];
|
|
/**
|
* 地区名称
|
* @param $value
|
* @param $data
|
* @return array
|
*/
|
public function getRegionAttr($value, $data)
|
{
|
return [
|
'province' => Region::getNameById($data['province_id']),
|
'city' => Region::getNameById($data['city_id']),
|
'region' => $data['region_id'] == 0 ? '' : Region::getNameById($data['region_id']),
|
];
|
}
|
|
public function getSexAttr($value)
|
{
|
$data = [10 => '未知', 20 => '男', 30 => '女'];
|
return $data[$value];
|
}
|
|
/**
|
* 关联用户
|
* @return \think\model\relation\HasOne
|
*/
|
public function user()
|
{
|
$model = self::getCalledModule() ?: 'common';
|
return $this->hasOne("app\\$model\\model\\user\\User", 'user_id', 'user_id');
|
}
|
|
/**
|
* 头像
|
* @return \think\model\relation\HasOne
|
*/
|
public function image()
|
{
|
$model = self::getCalledModule() ?: 'common';
|
return $this->hasOne("app\\$model\\model\\file\\UploadFile", 'file_id', 'file_id')->bind(['file_path']);
|
}
|
|
/**
|
* logo
|
* @return \think\model\relation\HasOne
|
*/
|
public function logoImage()
|
{
|
$model = self::getCalledModule() ?: 'common';
|
return $this->hasOne("app\\$model\\model\\file\\UploadFile", 'file_id', 'logo');
|
}
|
|
/**
|
* 等级
|
* @return \think\model\relation\HasOne
|
*/
|
public function grade()
|
{
|
$model = self::getCalledModule() ?: 'common';
|
return $this->hasOne("app\\$model\\model\\plus\\business\\Grade", 'grade_id', 'grade_id');
|
}
|
public function industry()
|
{
|
$model = self::getCalledModule() ?: 'common';
|
return $this->hasOne("app\\$model\\model\\plus\\business\\Industry", 'industry_id', 'industry_id');
|
}
|
|
/**
|
* 添加
|
* @param $data
|
* @return false|int
|
*/
|
public function add($data)
|
{
|
$data['app_id'] = self::$app_id;
|
$data['grade_id'] = (new Grade())->getDefaultGradeId();
|
return $this->save($data);
|
}
|
|
public function getUnitAttr($name)
|
{
|
return json_decode($name);
|
}
|
|
public function getDutiesAttr($name)
|
{
|
return json_decode($name);
|
}
|
|
public function getAddressAttr($name)
|
{
|
return json_decode($name);
|
}
|
|
public function getPositionAttr($name)
|
{
|
return $name ? json_decode($name) : [];
|
}
|
|
/**
|
* 获取名片列表
|
* @param $param
|
* @return \think\Paginator
|
* @throws \think\db\exception\DbException
|
*/
|
public function getList($param = [])
|
{
|
$paramr = array_merge(['listRow' => 15], $param);
|
$where = [];
|
!empty($paramr['name']) && $where['name'] = ['like', '%' . $paramr['name'] . '%'];
|
!empty($paramr['search']) && $where['name|duties|unit'] = ['like', '%' . $paramr['search'] . '%'];
|
!empty($paramr['user_id']) && $where['user_id'] = $paramr['user_id'];
|
!empty($paramr['industry_id']) && $where['industry_id'] = $paramr['industry_id'];
|
!empty($paramr['province_id']) && $where['province_id'] = $paramr['province_id'];
|
!empty($paramr['city_id']) && $where['city_id'] = $paramr['city_id'];
|
!empty($paramr['region_id']) && $where['region_id'] = $paramr['region_id'];
|
if (!empty($paramr['sort'])) {
|
$order = ['is_top' => 'desc', 'top_time' => 'desc'];
|
if ($paramr['sort'] == 'name') {
|
$order['name'] = "asc";
|
} else if ($paramr['sort'] == 'time') {
|
$order['create_time'] = "asc";
|
} else {
|
$order['unit'] = "asc";
|
}
|
} else {
|
// 检查置顶时间是否过期,如果过期则设置为非置顶
|
$this->checkTopExpire();
|
|
// 按置顶状态和创建时间排序
|
$order = ['is_top' => 'desc', 'top_time' => 'desc', 'create_time' => 'desc'];
|
}
|
return $this->with(['user', 'image', 'logoImage', 'grade'])->order($order)->where($where)->paginate($paramr);
|
}
|
|
/**
|
* 检查并更新过期的置顶名片
|
*/
|
private function checkTopExpire()
|
{
|
$this->where('is_top', 1)
|
->where('top_time', '<', time())
|
->update(['is_top' => 0]);
|
}
|
|
/**
|
* 获取名片详情
|
* @param $business_card_id
|
* @return array|false|\think\Model|null
|
* @throws \think\db\exception\DbException
|
*/
|
public static function detail($business_card_id)
|
{
|
return (new self())->with(['user', 'image', 'logoImage', 'grade', 'industry'])->where(['business_card_id' => $business_card_id])->find();
|
}
|
}
|