| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 | <?phpnamespace app\common\model;use app\hander\HelpHander;use think\Db;use think\Exception;class FCleanTask extends Base {    protected $createTime = 'create_time';    protected $updateTime = 'update_time';    public $table = 'f_clean_task';    protected $validateName = 'FCleanTask';    public function updates() {        $data = request()->post();        if (!isset($data['type']) || empty($data['type'])) {            $this->error = '请选择任务项';            return false;        }        if (!isset($data['user']) || empty($data['user'])) {            $this->error = '请选择人员';            return false;        }        $data['type_id'] = (new FCleanForm())->check_form_type(explode(',', $data['type']));        if ($data['type_id'] <= 0) {            $this->error = '请选择请选择同一分类下的任务项';            return false;        }        if ($data['start_time'] >= $data['end_time']) {            $this->error = '开始时间要小于结束时间';            return false;        }        $data['org_id'] = cur_org_id();        $result = validate($this->validateName)->check($data, [], '');        if (true !== $result) {            $this->error = validate($this->validateName)->getError();            return false;        }        $id = $data['id'];        unset($data['id']);        $clean_task_form = $data['type'];        $user = $data['user'];        unset($data['type'], $data['user']);        $this->startTrans();        try {            if ($id > 0) {                $data['update_time'] = date('Y-m-d H:i:s');                $ret = $this->allowField(true)->save($data, ['id' => $id]);                $res = Db::name('f_clean_task_form')                    ->where('task_id', $id)->delete();                if (!$res) {                    throw new Exception('重置任务内容失败');                }                $res = Db::name('f_clean_task_user')                    ->where('task_id', $id)->delete();                if (!$res) {                    throw new Exception('重置任务人员失败');                }            }            else {                $data['create_time'] = date('Y-m-d H:i:s');                $ret = $this->allowField(true)->save($data);                $id = $this->getLastInsID();            }            if (!$ret) {                throw new Exception('任务保存失败');            }            //添加任务内容            $clean_task_form = explode(',', $clean_task_form);            $nArr = [];            foreach ($clean_task_form as $v) {                $nArr[] = [                    'task_id' => $id,                    'form_id' => $v                ];            }            $res = Db::name('f_clean_task_form')                ->insertAll($nArr);            if (!$res) {                throw new Exception('保存任务内容失败');            }            //添加任务人员            $user = explode(',', $user);            $nArr = [];            foreach ($user as $v) {                $nArr[] = [                    'task_id' => $id,                    'user_id' => $v                ];            }            $res = Db::name('f_clean_task_user')                ->insertAll($nArr);            if (!$res) {                throw new Exception('保存任务人员失败');            }            $this->commit();            return true;        } catch (Exception $e) {            $this->rollback();            $this->error = $e->getMessage();            return false;        }    }    public function lists($page, $size, $status, $userId, $orgId, $type) {        $ret = [];        if ($type == 1) {            $ret = $this                ->field('id as task_id,start_time,title,end_time,status,timeout,type_id')                ->where([                    'org_id' => $orgId,                    'del' => 0,                    'status' => $status,                ])                ->order('id desc')                ->page($page, $size)                ->select();            $ret = $ret ? $ret->toArray() : [];        }        else {            $ret = $this->alias('a')                ->join('f_clean_task_user b', 'a.id=b.task_id')                ->field('a.id as task_id,a.start_time,a.title,a.end_time,a.status,a.timeout,a.type_id')                ->where([                    'a.org_id' => $orgId,                    'a.del' => 0,                    'a.status' => $status,                    'b.user_id' => $userId,                ])                ->order('a.id desc')                ->page($page, $size)                ->select();            $ret = $ret ? $ret->toArray() : [];        }        foreach ($ret as $k => $v) {            $ret[$k]['type_name'] = Db::name('f_clean_type')                ->where('id', $v['type_id'])                ->where('org_id', $orgId)                ->value('title');            $user = Db::name('f_clean_task_user')                ->alias('tu')                ->join('user u', 'u.id = tu.user_id')                ->where('tu.task_id', $v['task_id'])                ->column('u.real_name');            $implode = empty($user) ? [] : implode('/', $user);            $ret[$k]['staff'] = $implode;        }        return $ret ? $ret : [];    }    public function taskCount($status, $userId, $orgId) {        $isDispatch = check_is_dispatch($userId);        if ($isDispatch) {            $ret = $this                ->field('id as task_id,start_time,title,end_time,status,timeout,type_id')                ->where([                    'org_id' => $orgId,                    'del' => 0,                    'status' => $status,                ])                ->count();        }        else {            $ret = $this->alias('a')                ->join('f_clean_task_user b', 'a.id=b.task_id')                ->field('a.id as task_id,a.start_time,a.title,a.end_time,a.status,a.timeout,a.type_id')                ->where([                    'a.org_id' => $orgId,                    'a.del' => 0,                    'a.status' => $status,                    'b.user_id' => $userId,                ])                ->count();        }        return $ret ? $ret : 0;    }    public function detail($id) {        $ret = $this->alias('ct')            ->field('ct.id,ct.start_time,ct.type_id,ct.end_time,ct.title,t.title as type_name,ct.check_content as report_text')            ->join('f_clean_type t', 't.id=ct.type_id', 'left')            ->where('ct.id', $id)            ->find();        $ret = $ret ? $ret->toArray() : [];        $userName = Db::name('f_clean_task_user')            ->alias('tu')            ->join('user u', 'u.id = tu.user_id')            ->where('tu.task_id', $id)            ->column('u.real_name');        $implode = empty($userName) ? [] : implode('/', $userName);        $ret['name'] = $implode;        $formList = Db::name('f_clean_task_form')            ->alias('ctf')            ->join('f_clean_form cf', 'cf.id = ctf.form_id')            ->field('cf.id,cf.title as name')            ->where('task_id', $ret['id'])            ->select();        $formList = $formList ? $formList : [];        foreach ($formList as $k => $v) {            $record = Db::name('f_clean_record')                ->where('task_id', $id)                ->where('form_id', $v['id'])->find();            $formList[$k]['status'] = $record ? 1 : 0;        }        $ret['form_list'] = $formList;        return $ret;    }    public function addSave($content, $formId, $taskId, $orgId, $formJson, $userId, $consItems) {        // 检查该任务是已保存        $res = Db::name('f_clean_record')            ->where('task_id', $taskId)            ->where('form_id', $formId)            ->find();        if ($res) {            HelpHander::error('已上传记录');        }        $task = $this->where('id', $taskId)->find();        $countrecord = Db::name('f_clean_record')            ->where('task_id', $taskId)->count();        $this->startTrans();        try {            $data = [                'org_id' => $orgId,                'user_id' => $userId,                'form_id' => $formId,                'content' => $content,                'check_json' => $formJson,                'create_time' => date('Y-m-d H:i:s'),                'task_id' => $taskId,            ];            $ret = Db::name('f_clean_record')->insertGetId($data);            $record_id = $ret;            if (!$ret) {                \exception('保存失败');            }            $countaddr = Db::name('f_clean_task_form')                ->where('task_id', $taskId)                ->count();            if ($countaddr == $countrecord + 1) {                $status = 2;            }            else {                $status = 1;            }            if ($task['status'] != $status) {                $ret = $this->where('id', $taskId)->update(['status' => $status]);                if (!$ret) {                    \exception('操作失败');                }            }            if ($consItems) { // 耗材                $consItems = json_decode($consItems, true);                $mate = [                    'todo_id' => $record_id,                    'order_id' => $record_id,                    'org_id' => $orgId,                    'user_id' => $userId,                    'type' => 1,                    'create_time' => getTime()                ];                $todo_mate_id = Db::name('todo_mate')                    ->insertGetId($mate);                if (!$todo_mate_id) {                    \exception('使用物品记录失败');                }                $items = [];                $a = [];                foreach ($consItems as $k => $v) {                    $itemInfo = Db::name('mate_goods')                        ->where('id', $v['itemsId'])                        ->find();//                    $pInfo = Db::name('mate_goods')//                        ->where('id', $itemInfo['pid'])//                        ->find();                    if ($itemInfo['nums'] < $v['total']) {                        \exception($itemInfo['title'] . ' 库存不足');                    }                    $items[] = [                        'todo_mate_id' => $todo_mate_id,                        'items_id' => $v['itemsId'],                        'total' => $v['total'],                        'create_time' => getTime(),                        'user_id' => $userId,                        'money' => $itemInfo['price'],                        'total_money' => $itemInfo['price'] * $v['total'],                    ];                    //clean_record_items                    $a[] = [                        'org_id'=>$orgId,                        'record_id'=>$record_id,                        'items_id'=>$v['itemsId'],                        'code'=>'',                        'money'=>$itemInfo['price'],                        'total'=>$v['total'],                    ];                    $res = Db::name('mate_goods')                        ->where('id', $v['itemsId'])                        ->setDec('nums', $v['total']);                    if (!$res) {                        \exception($itemInfo['title'] . ' 数量修改失败');                    }                }                $res = Db::name('todo_mate_item')                    ->insertAll($items);                if (!$res) {                    \exception('物品使用记录失败');                }                $res = Db::name('f_clean_record_items')                    ->insertAll($a);                if (!$res) {                    \exception('专项保洁使用记录失败');                }            }            $this->commit();            return true;        } catch (Exception $e) {            $this->rollback();            $this->error = $e->getMessage();            return false;        }    }    //定时处理超时任务    public function timer_action(){        $curTime = date('Y-m-d');        $map[] = ['del','=',0];        $map[] = ['status','in',[0,1]];        $map[] = ['end_time','<',$curTime];        $this->where($map)            ->update(['timeout'=>1]);    }    public function taskCount2($status, $userId, $orgId) {//        $isDispatch = check_is_dispatch($userId);//        if ($isDispatch) {//            $ret = Db::name('clean_plan_record')//                ->where('enable',0)//                ->where('del',0)//                ->where('org_id',$orgId)//                ->count();//        }//        else {//            $ret = Db::name('clean_plan_record')//                ->alias('clr')//                ->join('clean_plan_user cpu','cpu.record_id = clr.id')//                ->where('clr.enable',0)//                ->where('clr.del',0)//                ->where('clr.org_id',$orgId)//                ->where('cpu.user_id',$userId)//                ->count();//        }        $ret = Db::name('f_clean_plan_record')            ->alias('clr')            ->join('f_clean_plan_user cpu','cpu.record_id = clr.id')            ->where('clr.enable',0)            ->where('clr.del',0)            ->where('clr.org_id',$orgId)            ->where('cpu.user_id',$userId)            ->count();        return $ret ? $ret : 0;    }}
 |