TaskSystem/app/api/controller/TaskController.php

385 lines
18 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\api\controller;
use app\common\logic\task\TaskLogic;
use app\common\model\Approve;
use app\common\model\Company;
use app\common\model\company\CompanyProperty;
use app\common\model\contract\Contract;
use app\common\model\dict\DictData;
use app\common\model\flow\Flow;
use app\common\model\informationg\UserInformationg;
use app\common\model\task\Task;
use app\common\model\task_template\TaskTemplate;
use app\common\model\user\User;
use think\Exception;
use think\facade\Db;
class TaskController extends BaseApiController
{
public function lists()
{
$param = Request()->param();
[$page, $limit] = $this->getPage();
$time = strtotime(date('Y-m-d'));
$userCompanyInfo = Company::where('id', $this->userInfo['company_id'])->find();
$where = [];
if ($this->userInfo['admin_id'] != 0) {
$where[] = ['company_id', '=', $this->userInfo['company_id']];
}
if ($userCompanyInfo['company_type'] == 18) {
$is_captain = User::where('id', $this->userId)->value('is_captain');
if ($is_captain == 1) {
$where[] = ['type', 'in', [31,33]];
} else {
$where[] = ['type', '=', 33];
$where[] = ['director_uid', '=', $this->userId];
}
// $where[] = ['company_id', '=', $this->userInfo['company_id']];
}
if ($userCompanyInfo['company_type'] == 41) {
$where[] = ['director_uid', '=', $this->userId];
// $where[] = ['company_id', '=', $this->userInfo['company_id']];
}
if (isset($param['date_time']) && $param['date_time'] != '') {
$time = strtotime($param['date_time']);
$param['start_time']=date('Y-m-d H:i:s',$time);
$end = $time + 86399;
$param['end_time']=date('Y-m-d H:i:s',$end);
$where[] = ['start_time', 'between', [$time, $end]];
} else {
if(!isset($param['status'])){
$time = strtotime(date('Y-m-d'));
$param['start_time']=date('Y-m-d H:i:s',$time);
$end = $time + 86399;
$param['end_time']=date('Y-m-d H:i:s',$end);
$where[] = ['start_time', 'between', [$time, $end]];
}
}
if (isset($param['status']) && $param['status'] > 0) {
$where[] = ['status', '=', $param['status']];
}
$townTaskTypeList = DictData::where(['type_value' => 'town_task_type', 'status' => 1])->column('value', 'id');
$res = Task::where($where)
->field(['id', 'title', 'money', 'template_id', 'director_uid', 'company_id', 'start_time', 'end_time', 'director_uid', 'type', 'status', 'content', 'extend'])
->page($page, 25)
->order(['id' => 'desc', 'status' => 'asc'])
->select()->toArray();
foreach ($res as $k => $item) {
if ($item['type'] == 33) {
$company = Company::where('id', $item['company_id'])->field('id,deposit,company_money,user_id,day_count,company_type,province,city,area,street,village,brigade,responsible_area')->find(); // 可能要判断预存金是否满足
$find = App(RemoteController::class)->shang_date_total_price($company,$param,$item['template_id']);
if ($find != false) {
if($time<time()){
$transaction_pool=TaskTemplate::where('id',$item['template_id'])->value('transaction_pool');
$res[$k]['extend']['transaction'] = $find;
if($transaction_pool==0){
$res[$k]['extend']['transaction']['arr']['transaction_pool']=$find['arr']['total_price'];
}else{
$res[$k]['extend']['transaction']['arr']['transaction_pool']=bcadd($res[$k]['extend']['transaction']['arr']['total_price'],$transaction_pool,2);
}
}
// Task::where('id',$item['id'])->update(['extend'=>json_encode(['transaction'=>$find],true)]);
} else {
$res[$k]['extend']['transaction'] = '';
}
}
if (isset($townTaskTypeList[$item['type']])) {
if ($townTaskTypeList[$item['type']] == 'town_task_type_1') {
// 协助总负责人开展工作任务
$groupServiceCompanyCount = 0; // 已安排任务的小组服务公司总数
$notDoneTaskGroupServiceCompanyCount = 0; // 未完成每日任务的小组服务公司总数
$townCompany = Company::where(['id' => $item['company_id']])->find();
$groupServiceCompanyList = Company::where(['street' => $townCompany['street'], 'company_type' => 18])->select()->toArray();
foreach ($groupServiceCompanyList as $groupServiceCompany) {
// 小组服务公司是否有对应的每日任务安排
$templateList = TaskTemplate::where(['company_id' => $groupServiceCompany['id']])->whereIn('type', [31, 32, 33])->select()->toArray();
if(count($templateList) === 3) {
$groupServiceCompanyCount += 1;
foreach ($templateList as $template) {
$task = Task::where(['template_id' => $template['id'], 'status' => 3])->find();
if (empty($task)) {
$notDoneTaskGroupServiceCompanyCount += 1;
break;
}
}
}
}
$res[$k]['extend'] = ['total' => $groupServiceCompanyCount, 'not_done_count' => $notDoneTaskGroupServiceCompanyCount];
}
if ($townTaskTypeList[$item['type']] == 'town_task_type_2') {
// 拓展小组服务团队工作任务
$contractCount = 15; // 小组服务合同总数
$doneContractCount = 0; // 已完成小组服务合同数
$townCompany = Company::where(['id' => $item['company_id']])->find();
$doneContractCount = Contract::where(['party_a' => $townCompany['id'], 'status' => 1, 'contract_type' => 25])->count();
$res[$k]['extend'] = ['total' => $contractCount, 'done_count' => $doneContractCount];
}
}
// break;
// case 'town_task_type_2':
// // 拓展小组服务团队工作任务
//
// break;
// case 'town_task_type_3':
// // 督促小组服务团队完成任务,协助开展工作,解决问题任务
//
// break;
// case 'town_task_type_4':
// // 督促小组服务团队学习任务
//
// break;
// case 'town_task_type_5':
// // 督促小组服务团队完成需求手机和交易任务
//
// break;
// case 'town_task_type_6':
// // 督促小组服务团队入股村联络员所成立的公司任务
//
// break;
// case 'town_task_type_7':
// // 安全工作任务
//
// break;
}
return $this->success('ok', $res);
}
//交易详情
public function order_detail()
{
$parmas = $this->request->param();
$task=Task::where('id',$parmas['id'])->field('company_id,start_time,end_time,extend,type,template_id')->find();
if(!$task){
return $this->fail('任务不存在');
}
$task=$task->toArray();
$transaction_pool=TaskTemplate::where('id',$task['template_id'])->value('transaction_pool');
$company = Company::where('id', $task['company_id'])->field('id,deposit,company_money,user_id,day_count,company_type,province,city,area,street,village,brigade,responsible_area')->find(); // 可能要判断预存金是否满足
// $list = App(RemoteController::class)->shang_date_list($company, 1, $parmas);
$parmas['start_time']=date('Y-m-d',$task['start_time']);
$parmas['end_time']=$task['end_time'].' 23:59:59';
$list = App(RemoteController::class)->shang_date_list($company, $parmas);
$shang_date_total_price = App(RemoteController::class)->shang_date_total_price($company,$parmas,$task['template_id']);
if ($task != false) {
$find['list'] = $list;
if($transaction_pool==0){
$task['extend']['transaction']['arr']['transaction_pool']=$shang_date_total_price['arr']['total_price'];
}else{
$task['extend']['transaction']['arr']['transaction_pool']=bcadd($shang_date_total_price['arr']['total_price'],$transaction_pool,2);
}
if($task['start_time']<strtotime(date('Y-m-d'))){
$task['extend']['transaction']['arr']['is_show']=false;
}else{
$task['extend']['transaction']['arr']['is_show']=true;
}
$find['extend']=$task['extend'];
return $this->success('ok', $find);
}
return $this->success('ok');
}
/**
* 入股
*/
public function shareholder(){
$parmas = $this->request->param();
$task = TaskLogic::detail($parmas);
return $this->success('ok', $task);
}
/**
* 三轮车详情
*/
public function tricycle_detail()
{
$parmas = $this->request->param();
$task = TaskLogic::detail($parmas);
return $this->success('ok', $task);
}
/**
* 三轮车坐标
*/
public function add_tricycle_coordinate()
{
$parmas = $this->request->param();
$task = Task::where('id', $parmas['id'])->find()->toArray();
$object_id=CompanyProperty::where('company_id',$this->userInfo['company_id'])->value('object_id');
if(!$object_id){
return $this->fail('该公司没有三轮车,请先租赁三轮车');
}
$start_time = date('Y-m-d');
$time=strtotime($start_time)+86399;
$end_time=date('Y-m-d H:i:s',$time);
$datas=[
'car_id'=>$object_id,
'start_time'=>$start_time.' 00:00:00',
'end_time'=>$end_time
];
$data['status'] = 2;
if (isset($parmas['terminus'])) {
if( $parmas['terminus']['lnglat'][0]==null || $parmas['terminus']['lnglat'][0]<=0){
return $this->fail('定位不存在');
}
$res = App(RemoteController::class)->calculateDistance($task['extend']['terminus']['lnglat'][0],$task['extend']['terminus']['lnglat'][1], $parmas['terminus']['lnglat'][0], $parmas['terminus']['lnglat'][1]);
if($res>200){
return $this->fail('定位坐标大于200米请重新打卡。'.$res.'米');
}
$res_two = App(RemoteController::class)->coordinate($datas, $parmas['terminus']['lnglat'][0], $parmas['terminus']['lnglat'][1]);
if($res===false){
return $this->fail('GPS无轨迹');
}
$task['extend']['update']['terminus'] = $parmas['terminus'];
}
if (isset($parmas['transfer'])) {
if( $parmas['transfer']['lnglat'][0]==null || $parmas['transfer']['lnglat'][0]<=0){
return $this->fail('定位不存在');
}
$res = App(RemoteController::class)->calculateDistance($task['extend']['transfer']['lnglat'][0],$task['extend']['transfer']['lnglat'][1], $parmas['transfer']['lnglat'][0], $parmas['transfer']['lnglat'][1]);
if($res>200){
return $this->fail('定位坐标大于200米请重新打卡。'.$res.'米');
}
$res_two = App(RemoteController::class)->coordinate($datas, $parmas['transfer']['lnglat'][0], $parmas['transfer']['lnglat'][1]);
if($res===false){
return $this->fail('GPS无轨迹');
}
$task['extend']['update']['transfer'] = $parmas['transfer'];
}
if (isset($task['extend']['update']['terminus']) && isset($task['extend']['update']['transfer'])) {
$data['status'] = 3;
}
if($res_two<1000){
$data['extend'] = json_encode($task['extend']);
Task::where('id', $parmas['id'])->update($data);
return $this->success('更新成功');
}
return $this->fail('定位坐标大于200米请重新打卡。'.$res.'米');
}
public function informationg_list()
{
$parmas = Request()->param();
$find = Task::where('id', $parmas['id'])->find();
if ($find['type'] == 31) {
if (isset($find['extend']['informationg']['ids'])) {
$ids = $find['extend']['informationg']['ids'];
$list = UserInformationg::where('id', 'in', $ids)
->field(
'id,name,phone,sex,age,update_time,
area_id,area_id area_name,street_id,street_id street_name,village_id,village_id village_name,brigade_id,brigade_id brigade_name,address'
)->select()->toArray();
} else {
$list = [];
}
} else {
$list = [];
}
return $this->success('ok', $list);
}
/**
* 其他任务详情
*/
public function other_task_detail(){
$parmas = $this->request->param();
$task = TaskLogic::detail($parmas);
$extend = $task['extend'];
if ($extend['other']['is_commit'] == 1) {
$approve = Approve::where(['task_id' =>$task['id']])->find();
$task['approve_status'] = $approve['check_status']; //审核状态
$task['deny_notes'] = $approve['remark']; // 拒绝原因
}
return $this->success('ok', $task);
}
/**
* 其他任务 -提交
*/
public function commit_other_task()
{
try {
$parmas = $this->request->param(); //id note annex vedio_annex
$task = TaskLogic::detail($parmas);
if (empty($task)) {
$this->fail('任务不存在');
}
$extend = ['other' => ['is_commit' => 1, 'note' => $parmas['note'], 'annex'=>$parmas['annex'], 'video_annex' => $parmas['video_annex']]];
Db::startTrans();
Task::where(['id' => $parmas['id']])->update(['extend' => json_encode($extend), 'update_time'=>time(), 'director_uid'=>$this->userId]); // director_uid 指派人
// 片区经理
$areaManagerId = User::where(['id' => $this->userId])->with('company')->value('area_manager');
// 没有则创建审批任务
$approveModel = Approve::where(['task_id' => $task['id']])->find();
if ($approveModel->isEmpty()) {
$approveModel->type = 1;
$approveModel->flow_id = 1;
$approveModel->name = $task['title'];
$approveModel->type = 1;
$approveModel->admin_id = 0; // 后台发起人id 暂时为0
$approveModel->user_id = $this->userId; // 前台发起人用户id
$approveModel->task_id = $task['id']; // 前台发起人用户id
$approveModel->department_id = '0';
$approveModel->check_admin_ids = $areaManagerId; // 当前审批人ID 片区经理的admin_id
$approveModel->check_status = 1; // 状态 0待审核,1审核中,2审核通过,3审核不通过,4撤销审核
$approveModel->other_type = 6;
$approveModel->create_time = time();
$approveModel->update_time = time();
$approveModel->save();
} else {
// 有则更新状态
$approveModel->check_status = 1; // 状态 0待审核,1审核中,2审核通过,3审核不通过,4撤销审核
$approveModel->save();
}
Db::commit();
return $this->success('ok', []);
} catch (Exception $e) {
Db::rollback();
return $this->fail($e->getMessage());
}
}
/**
* 镇农科公司任务详情
*/
public function service_task_detail()
{
$param = $this->request->param();
$task = TaskLogic::detail($param);
return $this->success('成功', $task);
}
/**
* 镇农科公司任务-督促小组服务团队学习任务 -提交
*/
public function commit_town_task_type4()
{
try {
$parmas = $this->request->param(); //id study_photo sign_in_table study_content
$extend = ['town_task_type_4' => ['study_photo'=>$parmas['study_photo'], 'sign_in_table'=>$parmas['sign_in_table'], 'study_content'=> $parmas['study_content']]];
if (count($parmas['study_photo']) >= 5 && !empty($parmas['sign_in_table']) && strlen($parmas['study_content'])>=50) {
Task::where('id', $parmas['id'])->save(['extend' => json_encode($extend), 'status' => 3]);
} else {
Task::where('id', $parmas['id'])->save(['extend' => json_encode($extend)]);
}
return $this->success('成功', []);
} catch (Exception $e) {
return $this->fail($e->getMessage());
}
}
}