自动推广
This commit is contained in:
@@ -37,23 +37,19 @@ class ExpertManage extends Base
|
||||
$data = $this->request->param();
|
||||
$keyword = trim(isset($data['keyword']) ? $data['keyword'] : '');
|
||||
$field = trim(isset($data['field']) ? $data['field'] : '');
|
||||
$majorId = intval(isset($data['major_id']) ? $data['major_id'] : 0);
|
||||
$state = isset($data['state']) ? $data['state'] : '-1';
|
||||
$source = trim(isset($data['source']) ? $data['source'] : '');
|
||||
$page = max(1, intval(isset($data['pageIndex']) ? $data['pageIndex'] : 1));
|
||||
$pageSize = max(1, intval(isset($data['pageSize']) ? $data['pageSize'] : 20));
|
||||
|
||||
$query = Db::name('expert')->alias('e');
|
||||
$needJoin = ($field !== '' || $majorId > 0);
|
||||
$needJoin = ($field !== '');
|
||||
|
||||
if ($needJoin) {
|
||||
$query->join('t_expert_field ef', 'ef.expert_id = e.expert_id AND ef.state = 0', 'inner');
|
||||
if ($field !== '') {
|
||||
$query->where('ef.field', 'like', '%' . $field . '%');
|
||||
}
|
||||
if ($majorId > 0) {
|
||||
$query->where('ef.major_id', $majorId);
|
||||
}
|
||||
$query->group('e.expert_id');
|
||||
}
|
||||
|
||||
@@ -338,21 +334,17 @@ class ExpertManage extends Base
|
||||
{
|
||||
$data = $this->request->param();
|
||||
$field = trim(isset($data['field']) ? $data['field'] : '');
|
||||
$majorId = intval(isset($data['major_id']) ? $data['major_id'] : 0);
|
||||
$state = isset($data['state']) ? $data['state'] : '-1';
|
||||
$keyword = trim(isset($data['keyword']) ? $data['keyword'] : '');
|
||||
$source = trim(isset($data['source']) ? $data['source'] : '');
|
||||
|
||||
$query = Db::name('expert')->alias('e');
|
||||
|
||||
if ($field !== '' || $majorId > 0) {
|
||||
if ($field !== '') {
|
||||
$query->join('t_expert_field ef', 'ef.expert_id = e.expert_id AND ef.state = 0', 'inner');
|
||||
if ($field !== '') {
|
||||
$query->where('ef.field', 'like', '%' . $field . '%');
|
||||
}
|
||||
if ($majorId > 0) {
|
||||
$query->where('ef.major_id', $majorId);
|
||||
}
|
||||
$query->group('e.expert_id');
|
||||
}
|
||||
|
||||
@@ -490,4 +482,162 @@ class ExpertManage extends Base
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== Expert Fetch Field Management ====================
|
||||
|
||||
/**
|
||||
* 获取抓取领域列表
|
||||
* 参数: state(-1不过滤), keyword(搜索field), pageIndex, pageSize
|
||||
*/
|
||||
public function getFetchList()
|
||||
{
|
||||
$data = $this->request->param();
|
||||
$state = isset($data['state']) ? $data['state'] : '-1';
|
||||
$keyword = trim(isset($data['keyword']) ? $data['keyword'] : '');
|
||||
$page = max(1, intval(isset($data['pageIndex']) ? $data['pageIndex'] : 1));
|
||||
$pageSize = max(1, intval(isset($data['pageSize']) ? $data['pageSize'] : 20));
|
||||
|
||||
$query = Db::name('expert_fetch');
|
||||
|
||||
if ($state !== '-1' && $state !== '') {
|
||||
$query->where('state', intval($state));
|
||||
}
|
||||
if ($keyword !== '') {
|
||||
$query->where('field', 'like', '%' . $keyword . '%');
|
||||
}
|
||||
|
||||
$countQuery = Db::name('expert_fetch');
|
||||
if ($state !== '-1' && $state !== '') {
|
||||
$countQuery->where('state', intval($state));
|
||||
}
|
||||
if ($keyword !== '') {
|
||||
$countQuery->where('field', 'like', '%' . $keyword . '%');
|
||||
}
|
||||
|
||||
$total = $countQuery->count();
|
||||
$list = $query->order('expert_fetch_id desc')->page($page, $pageSize)->select();
|
||||
|
||||
foreach ($list as &$item) {
|
||||
$item['last_time_text'] = $item['last_time'] ? date('Y-m-d H:i:s', $item['last_time']) : '';
|
||||
$item['ctime_text'] = $item['ctime'] ? date('Y-m-d H:i:s', $item['ctime']) : '';
|
||||
$fieldName = trim($item['field']);
|
||||
|
||||
$item['journal_count'] = Db::name('journal_promotion_field')
|
||||
->where('expert_fetch_id', $item['expert_fetch_id'])
|
||||
->where('state', 0)
|
||||
->count();
|
||||
|
||||
// 与推广选人一致:按字段关键词匹配,统计可用专家(去重)
|
||||
$item['expert_count'] = Db::name('expert_field')->alias('ef')
|
||||
->join('t_expert e', 'e.expert_id = ef.expert_id', 'inner')
|
||||
->where('ef.state', 0)
|
||||
->where('e.state', 0)
|
||||
->where('ef.field', 'like', '%' . $fieldName . '%')
|
||||
->count('distinct ef.expert_id');
|
||||
|
||||
|
||||
}
|
||||
|
||||
return jsonSuccess([
|
||||
'list' => $list,
|
||||
'total' => $total,
|
||||
'pageIndex' => $page,
|
||||
'pageSize' => $pageSize,
|
||||
'totalPages' => $total > 0 ? ceil($total / $pageSize) : 0,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增抓取领域
|
||||
* 参数: field(必填), source(选填,默认pubmed)
|
||||
*/
|
||||
public function addFetchField()
|
||||
{
|
||||
$data = $this->request->post();
|
||||
$field = trim(isset($data['field']) ? $data['field'] : '');
|
||||
$source = trim(isset($data['source']) ? $data['source'] : 'pubmed');
|
||||
|
||||
if ($field === '') {
|
||||
return jsonError('field不能为空');
|
||||
}
|
||||
|
||||
$exists = Db::name('expert_fetch')
|
||||
->where('field', $field)
|
||||
->where('source', $source)
|
||||
->find();
|
||||
if ($exists) {
|
||||
if ($exists['state'] == 1) {
|
||||
Db::name('expert_fetch')
|
||||
->where('expert_fetch_id', $exists['expert_fetch_id'])
|
||||
->update(['state' => 0]);
|
||||
return jsonSuccess(['expert_fetch_id' => $exists['expert_fetch_id'], 'msg' => 'reactivated']);
|
||||
}
|
||||
return jsonError('该领域已存在 (expert_fetch_id=' . $exists['expert_fetch_id'] . ')');
|
||||
}
|
||||
|
||||
$id = Db::name('expert_fetch')->insertGetId([
|
||||
'field' => mb_substr($field, 0, 128),
|
||||
'source' => mb_substr($source, 0, 128),
|
||||
'last_page' => 0,
|
||||
'total_pages' => 0,
|
||||
'last_time' => 0,
|
||||
'state' => 0,
|
||||
'ctime' => time(),
|
||||
]);
|
||||
|
||||
return jsonSuccess(['expert_fetch_id' => $id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑抓取领域
|
||||
* 参数: expert_fetch_id(必填), field, source, state
|
||||
*/
|
||||
public function editFetchField()
|
||||
{
|
||||
$data = $this->request->post();
|
||||
$id = intval(isset($data['expert_fetch_id']) ? $data['expert_fetch_id'] : 0);
|
||||
if (!$id) {
|
||||
return jsonError('expert_fetch_id is required');
|
||||
}
|
||||
|
||||
$record = Db::name('expert_fetch')->where('expert_fetch_id', $id)->find();
|
||||
if (!$record) {
|
||||
return jsonError('记录不存在');
|
||||
}
|
||||
|
||||
$update = [];
|
||||
if (isset($data['field'])) $update['field'] = mb_substr(trim($data['field']), 0, 128);
|
||||
if (isset($data['source'])) $update['source'] = mb_substr(trim($data['source']), 0, 128);
|
||||
if (isset($data['state'])) $update['state'] = intval($data['state']);
|
||||
|
||||
if (!empty($update)) {
|
||||
Db::name('expert_fetch')->where('expert_fetch_id', $id)->update($update);
|
||||
}
|
||||
|
||||
return jsonSuccess(['expert_fetch_id' => $id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除/停用抓取领域(软删除 state=1)
|
||||
* 参数: expert_fetch_id(必填), hard(传1物理删除)
|
||||
*/
|
||||
public function deleteFetchField()
|
||||
{
|
||||
$data = $this->request->post();
|
||||
$id = intval(isset($data['expert_fetch_id']) ? $data['expert_fetch_id'] : 0);
|
||||
$hard = intval(isset($data['hard']) ? $data['hard'] : 0);
|
||||
|
||||
if (!$id) {
|
||||
return jsonError('expert_fetch_id is required');
|
||||
}
|
||||
|
||||
if ($hard) {
|
||||
Db::name('journal_promotion_field')->where('expert_fetch_id', $id)->delete();
|
||||
Db::name('expert_fetch')->where('expert_fetch_id', $id)->delete();
|
||||
} else {
|
||||
Db::name('expert_fetch')->where('expert_fetch_id', $id)->update(['state' => 1]);
|
||||
}
|
||||
|
||||
return jsonSuccess([]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user