硕顺crm后台
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.
 
 
 
 
 
 

327 lines
9.9 KiB

<?php
namespace addons\qingdong\controller;
use addons\qingdong\model\Daily as DailyModel;
use addons\qingdong\model\DailyRead;
use addons\qingdong\model\File;
use addons\qingdong\model\Form;
use addons\qingdong\model\Staff;
use addons\qingdong\model\Message;
use addons\qingdong\model\DailyDraft;
use think\Db;
use think\Exception;
/**
* 工作报告接口
*/
class Daily extends StaffApi {
protected $noNeedLogin = [];
protected $noNeedRight = [];
//创建
public function createDaily()
{
$params = $this->request->post();
Db::startTrans();
try {
$params['create_staff_id'] = $this->auth->id;
$dailyId = DailyModel::createDaily($params);
Db::commit();
} catch (Exception $e) {
Db::rollback();
$this->error($e->getMessage());
}
$this->success('创建工作报告成功');
}
//获取
public function getList()
{
$limit = input("limit/d", 10);
$is_read = input('is_read', 0);
$staff_ids = input('staff_id', 0);
$type = input('type', 0);
$times = input('times', '');
$where = [];
$where['create_staff_id'] = ['in', Staff::getMyStaffIds()];
if ($staff_ids) {
$where['create_staff_id'] = $staff_ids;
}
if ($type) {
$where['type'] = $type;
}
if ($times) {//筛选时间
$times = explode(',', $times);
$where['createtime'] = ['between', [strtotime($times[0]), strtotime($times[1]) + 86400 - 1]];
}
$staff_id = $this->auth->id;
if ($is_read == 1) {//已读
$ids = DailyRead::where(['staff_id' => $staff_id])->column('daily_id');
$where['id'] = ['in', $ids];
} elseif ($is_read == 2) {//未读
$ids = DailyRead::where(['staff_id' => $staff_id])->column('daily_id');
$where['id'] = ['not in', $ids];
}
$followWhere = [];
$elseWhere = [];
if (!$staff_ids) {
$followWhere[] = ['exp', Db::raw('FIND_IN_SET(' . $this->auth->id . ',reminds_id)')];
if ($type) {
$elseWhere['type'] = ['eq', $type];
}
if ($is_read == 1) {//已读
$elseWhere['id'] = ['in', $ids];
} elseif ($is_read == 2) {//未读
$elseWhere['id'] = ['not in', $ids];
}
}
$records = DailyModel::where($where)->whereOr(function ($query) use ($followWhere, $elseWhere) {
$query->where($followWhere)->where($elseWhere);
})->with([
'staff',
'read' => function ($query) use ($staff_id) {
$query->where(['staff_id' => $staff_id]);
}
])->order('id desc')->paginate($limit)->toArray();
$data = $records['data'];
foreach ($data as $k => $v) {
if (!empty($v['read'])) {
$v['is_read'] = 1;
} else {
$v['is_read'] = 0;
}
$data[$k] = $v;
}
$this->success('请求成功', [
'total' => $records['total'],
'per_page' => $records['per_page'],
'current_page' => $records['current_page'],
'last_page' => $records['last_page'],
'data' => $data
]);
$this->success('请求成功', $records);
}
//获取详情
public function getDailyDetail()
{
$id = input('id');
if (empty($id)) {
$this->error('参数不能为空');
}
$record = DailyModel::where(['id' => $id])->with([
'staff',
])->find();
if (empty($record)) {
$this->error('记录不存在');
}
$record = $record->toArray();
$reminds_id = $record['reminds_id'];
$reminds_id = explode(',', $reminds_id);
$names = Staff::where(['id' => ['in', $reminds_id]])->column('name');
$record['staff_name'] = implode(',', $names);
if ($record['other']) {
if(is_array($record['other'])){
$other = $record['other'];
}else{
$other = json_decode($record['other'], true);
}
} else {
$other = [];
}
$record = array_merge($record, $other);
switch($record['type']){
case '日报':
$type = 'daily';
break;
case '周报':
$type ='weekly';
break;
case '月报':
$type = 'monthly';
break;
case '季报':
$type = 'quarterly';
break;
case '年报':
$type = 'yearly';
break;
default:
$type = 'daily';
break;
}
$form = Form::getDataValue($type,$record);
foreach($form as $k=>$v){
if($v['component'] == 'uploadImage' || $v['component'] == 'uploadFile'){
if(key_exists($v['id'],$record)){
if(isset($record[$v['id']]) && $record[$v['id']]){
$whereT['id'] = array('in',$record[$v['id']]);
$fileinfo = File::where($whereT)->field('id,name,file_path')->select();
if($fileinfo){
$record[$v['id']] = $fileinfo;
}
}
}
}
}
//标记通知已读
Message::setRead(Message::DAILY_TYPE, $id, $this->auth->id);
//添加阅读记录
DailyRead::addRead($id, $this->auth->id);
$this->success('请求成功', $record);
}
//获取工作报告已读 未读
public function getDailyRead()
{
$id = input('id');
if (empty($id)) {
$this->error('参数错误');
}
$daily = DailyModel::where(['id' => $id])->find();
if (empty($daily)) {
$this->error('记录不存在');
}
$create_staff_id = $daily['create_staff_id'];
$read = DailyRead::where(['daily_id' => $id])->group('staff_id')->field('id,staff_id')->with(['staff'])->select();
$staffIds = [];
foreach ($read as $v) {
$staffIds[] = $v['staff_id'];
}
//全部可看数据的人
$allids = explode(',', $daily->reminds_id);
$not_ids = array_diff($allids, $staffIds);
$notRead = Staff::where(['id' => ['in', $not_ids]])
->field('id,name,img')->select();
$this->success('请求成功', ['read' => $read, 'not_read' => $notRead]);
}
//草稿创建
public function daily_draft()
{
$params = $this->request->post();
Db::startTrans();
try {
$params['create_staff_id'] = $this->auth->id;
//自定义字段
$other = [];
foreach ($params as $name => $val) {
if (strstr($name, 'other_') !== false) {
if(is_array($val)){
$other[$name] = implode(',',$val);
}else{
$other[$name] = $val;
}
unset($params[$name]);
}
}
$params['other'] = json_encode($other);
$where['create_staff_id'] = $this->auth->id;
$where['type'] = $params['type'];
$info = DailyDraft::where($where)->find();
if ($info) {
$result = DailyDraft::where(array('id' => $info['id']))->update($params);
} else {
$result = DailyDraft::create($params);
}
if (false === $result) {
// 验证失败 输出错误信息
throw new Exception('草稿保存失败');
}
Db::commit();
} catch (Exception $e) {
Db::rollback();
$this->error($e->getMessage());
}
$this->success('草稿保存成功');
}
//获取详情
public function getDailyDraftDetail()
{
$type = input('type');
if (!$type) {
$this->error('参数不正确');
}
$where['create_staff_id'] = $this->auth->id;
$where['type'] = $type;
$record = DailyDraft::where($where)->find();
if (empty($record)) {
$this->success('记录不存在');
}
switch ($record['type']) {
case '日报':
$record['type_index'] = 0;
break;
case '周报':
$record['type_index'] = 1;
break;
case '月报':
$record['type_index'] = 2;
break;
case '季报':
$record['type_index'] = 3;
break;
case '年报':
$record['type_index'] = 4;
break;
default:
$record['type_index'] = 0;
break;
}
$record = $record->toArray();
$reminds_id = $record['reminds_id'];
$reminds_id = explode(',', $reminds_id);
$names = Staff::where(['id' => ['in', $reminds_id]])->field('id,img,name,post')->select();
$record['staff_info'] = $names;
if ($record['other']) {
$other = json_decode($record['other'], true);
} else {
$other = [];
}
$record = array_merge($record, $other);
$this->success('请求成功', $record);
}
//修改工作报告
public function updateDaily()
{
$params = $this->request->post();
if(empty($params['id'])){
$this->error('参数不能为空');
}
Db::startTrans();
try {
$dailyId = DailyModel::updateDaily($params);
Db::commit();
} catch (Exception $e) {
Db::rollback();
$this->error($e->getMessage());
}
$this->success('创建工作报告成功');
}
}