<?php
namespace app\api\controller\v1;
use app\api\controller\Base;
use app\common\util\AppMsg;
use app\hander\HelpHander;
use think\Controller;
use think\Db;
use think\Exception;
class ModeCate extends Base
{
public function list(){
$lists = Db::name('mode_cate')
->where('del',0)
->where('enable',1)
->where('org_id',$this->orgId)
->order('sort desc,id desc')
->select();
foreach ($lists as $k=>$v){
if($v['mode'] == 2){
$atable = 'cleaning_type b';
}else{
$atable = 'convey_cate b';
}
$typeList = Db::name('mode_cate_type')
->alias('a')
->field('b.id,b.title,b.color')
->join($atable,'b.id=a.bus_id')
->where('a.mode',$v['mode'])
->where('a.cate_id',$v['id'])
->order('a.sort desc,a.id desc')
->select();
$lists[$k]['type_list'] = $typeList?$typeList:[];
}
HelpHander::success($lists);
}
public function addOrder(){
$mode = input('mode');
$typeId = input('typeId',0);
if(!in_array($mode,[2,3])){
HelpHander::error('参数错误');
}
if($typeId < 1){
HelpHander::error('参数错误');
}
$addrId = Db::name('user')->where('id',$this->userId)->value('addr_id');
if($addrId < 1){
HelpHander::error('始发空间不能为空');
}
$addrInfo = Db::name('address')->where('id',$addrId)->find();
$bjToUserId = $addrInfo['bj_user_id'] ?$addrInfo['bj_user_id']:0;
$ysToUserId = $addrInfo['ys_user_id'] ?$addrInfo['ys_user_id']:0;
$toUserId = 0;
$content = '';
if($mode == 2){
$content = Db::name('cleaning_type')->where('del',0)->where('id',$typeId)->value('title');
if(!$bjToUserId){
HelpHander::error('保洁责任人不能为空');
}
$toUserId = $bjToUserId;
}elseif($mode == 3){
$conveyCate = Db::name('convey_cate')->where('del',0)->where('is_sss',1)->where('id',$typeId)->find();
if(!$conveyCate){
HelpHander::error('类型不存在');
}
$content = $conveyCate['title'];
if(!$ysToUserId){
HelpHander::error('运送责任人不能为空');
}
$toUserId = $ysToUserId;
if($conveyCate['addr_id'] < 1){
HelpHander::error('地点不能为空');
}
if($addrId == $conveyCate['addr_id']){
HelpHander::error('开始地点和结束地点不能一致');
}
}
// $depId = Db::name('user_dep')
// ->alias('ud')
// ->join('dep d','d.id=ud.dep_id')
// ->where('d.del',0)
// ->where('ud.user_id',$this->userId)
// ->value('d.id');
$odata = [
'org_id'=>$this->orgId,
'user_id'=>$this->userId,
'create_time' => getTime(),
'create_yyyy' => date('Y'),
'create_yyyymm' => date('Ym'),
'create_yyyymmdd' => date('Ymd'),
'sn' => get_unique_sn(get_config('sn_prefix')),
'content' => $content,
'work_type_mode' => $mode,
'order_mode'=>4,
'source_type' => 2,
'dep_id' => 0,
'send_time' => getTime(),
'is_deal' => 1,
'from' => 0,
];
Db::startTrans();
try {
$orderId = Db::name('orders')->insertGetId($odata);
if(!$orderId){
\exception('订单生成失败');
}
if($mode == 2){
$octData = [
'order_id'=>$orderId,
'type_id'=>$typeId,
'create_time'=>getTime()
];
$oct = Db::name('order_clean_type')->insert($octData);
if(!$oct){
\exception('订单保洁类型扩展生成失败');
}
}
if($mode == 3){
$conveyCateInfo = Db::name('convey_cate')->where('del',0)->where('id',$typeId)->find();
$time = Db::name('time')->where('del',0)->where('id',$conveyCateInfo['time_id'])->find();
$ywcTime = time() + $time['bz_time']*60;
if($conveyCateInfo['type'] == 0){
$saddr = $addrId;
$eaddr = $conveyCateInfo['addr_id'];
}else{
$saddr = $conveyCateInfo['addr_id'];
$eaddr = $addrId;
}
$ocData = [
'order_id'=>$orderId,
'type'=>$typeId,
'start'=>$saddr,
'end'=>$eaddr,
'xq_time'=>getTime(),
'ywc_time'=>date('Y-m-d H:i:s',$ywcTime),
'score'=>$conveyCateInfo['score'],
'priority'=>0,
];
$ocAdd = Db::name('order_convey')->insert($ocData);
if(!$ocAdd){
\exception('运送扩展生成失败');
}
}
$todoData = [
'order_id' => $orderId,
'todo_content' => $content,
'create_user_id' => $this->userId,
'org_id' => $this->orgId,
'create_time' => getTime(),
'confirm_time' => getTime(),
'todo_mode' => 2,
'work_type_mode' => $mode,
'create_yyyy' => date('Y'),
'create_yyyymm' => date('Ym'),
'create_yyyymmdd' => date('Ymd'),
'quality_type' => 0,
'to_user_id'=>$toUserId,
'sn'=> get_unique_sn(get_config('sn_prefix')),
];
$todoId = Db::name('todo')->insertGetId($todoData);
if(!$todoId){
\exception('分派订单失败');
}
$taskData = [
'org_id' => $this->orgId,
'type' => 1,
'start_time' => getTime(),
'create_time' => getTime(),
'user_id' => $toUserId,
'bus_id' => $todoId,
];
$res = Db::name('task')
->insert($taskData);
if (!$res) {
\exception('任务保存失败');
}
send_jpush([$toUserId],AppMsg::PUSH_WORKER_ORDER_SEND,'',['id'=>$todoId]);
Db::commit();
}catch (\Exception $e){
Db::rollback();
HelpHander::error($e->getMessage());
}
HelpHander::success([],'操作成功');
}
public function getTodoList(){
$type = input('type',0);
$page = input('page',1);
$size = input('size',10);
if(!in_array($type,[0,1])){
HelpHander::error('参数错误');
}
$map[] = ['org_id','=',$this->orgId];
$map[] = ['del','=',0];
$map[] = ['create_user_id','=',$this->userId];
$map[] = ['work_type_mode','in',[2,3]];
if($type == 0){
$map[] = ['todo_mode','=',2];
}else{
$map[] = ['todo_mode','in',[3,6]];
}
$list = Db::name('todo')
->where($map)
->page($page,$size)
->order('id','desc')
->select();
$data = [];
foreach ($list as $k=>$v){
$data[$k]['id'] = $v['id'];
$data[$k]['work_type_mode'] = $v['work_type_mode'];
$data[$k]['create_time'] = $v['create_time'];
$data[$k]['todo_content'] = $v['todo_content'];
$data[$k]['order_id'] = $v['order_id'];
$data[$k]['todo_mode'] = $v['todo_mode'];
$data[$k]['done_time'] = $v['done_time'];
$touser = Db::name('user')->where('id',$v['to_user_id'])->find();
$data[$k]['to_user_name'] = $touser['real_name'];
$addrName = Db::name('address')->where('id',$touser['addr_id'])->value('title');
$data[$k]['s_addr'] = $addrName ?$addrName :'';
$data[$k]['todo_mode_text'] = Db::name('todo_mode')->where('id',$v['todo_mode'])->value('out_content');
$data[$k]['work_type_mode_text'] = Db::name('work_type_mode')->where('id',$v['work_type_mode'])->value('name');
$data[$k]['type_name'] = '';
$data[$k]['e_addr'] = '';
$data[$k]['last_addr'] = '';
$data[$k]['last_addr_time'] = '';
if($v['work_type_mode'] == 2){
$typeTitle = Db::name('cleaning_type')
->alias('ct')
->join('order_clean_type oct','oct.type_id=ct.id')
->where('oct.order_id',$v['order_id'])
->value('ct.title');
$data[$k]['type_name'] = $typeTitle ? $typeTitle :'';
}
if($v['work_type_mode'] == 3){
$typeInfo = Db::name('convey_cate')
->alias('cc')
->field('oc.*,cc.title')
->join('order_convey oc','oc.type=cc.id')
->where('oc.order_id',$v['order_id'])
->find();
if($typeInfo){
$saddr = Db::name('address')->where('id',$typeInfo['start'])->value('title');
$eaddr = Db::name('address')->where('id',$typeInfo['end'])->value('title');
$data[$k]['type_name'] = $typeInfo ? $typeInfo['title'] :'';
$data[$k]['s_addr'] = $saddr ? $saddr :'';
$data[$k]['e_addr'] = $eaddr ? $eaddr :'';
$addr = Db::name('order_convey')
->alias('cpr')
->join('todo os', 'cpr.order_id = os.order_id')
->join('orders ods', 'cpr.order_id = ods.id')
->join('address ca', 'ca.id = cpr.start')
->join('address cad', 'cad.id = cpr.end')
->field('os.todo_mode,ca.title as start_name,cad.title as end_name,os.create_time')
->where('os.to_user_id', $v['to_user_id'])
->where('os.del', 0)
->where('ods.del', 0)
->order('os.id desc')
->find();
if(in_array($addr['todo_mode'],[1,2])){
$data[$k]['last_addr'] = $addr['start_name'];
}else{
$data[$k]['last_addr'] = $addr['end_name'];
}
$data[$k]['last_addr_time'] = $addr['create_time'];
}
}
}
HelpHander::success($data,'操作成功');
}
public function updateState(){
$todoId = input('todoId/d',0);
if($todoId <= 0){
HelpHander::error('参数错误');
}
$todoMode =input('todoMode',0);
if(!in_array($todoMode,[2,4,6])){
HelpHander::error('参数错误');
}
$nodoReason = input('nodoReason','');
$rejectVoice = input('rejectVoice','');
$ret = model('Todo')->updateState($todoId,$todoMode,$nodoReason,$this->userId,$rejectVoice);
if(!$ret){
HelpHander::error(model('Todo')->getError());
}
HelpHander::success([],'操作成功');
}
}