post(); $data['org_id'] = cur_org_id(); $result = validate($this->validateName)->check($data,[],''); if(true !== $result){ $this->error = validate($this->validateName)->getError(); return false; } $busIds = $data['bus_ids'] ? explode(',',$data['bus_ids']) :[]; unset($data['bus_ids']); $busIds1 = $data['bus_ids1'] ? explode(',',$data['bus_ids1']) :[]; unset($data['bus_ids1']); if($data['mode'] == 2 && !$busIds){ $this->error = '保洁类型不能为空'; return false; } if($data['mode'] == 3 && !$busIds1){ $this->error = '运送类型不能为空'; return false; } $id = $data['id']; unset($data['id']); Db::startTrans(); try { if($id > 0){ if($data['mode'] == 2){ $atable = 'cleaning_type b'; }else{ $atable = 'convey_cate b'; } $busIdsAll = Db::name('mode_cate_type') ->where('mode',$data['mode']) ->where('cate_id','<>',$id) ->column('bus_id'); if($data['mode'] == 2){ $intersectIds = array_intersect($busIds,$busIdsAll); }else{ $intersectIds = array_intersect($busIds1,$busIdsAll); } $cleaningTypeTitle = Db::name('mode_cate_type') ->alias('mct') ->join($atable,'b.id=mct.bus_id') ->where('mct.mode',$data['mode']) ->where('mct.bus_id','in',$intersectIds) ->column('b.title'); if($cleaningTypeTitle){ $cleaningTypeTitles = $cleaningTypeTitle ? implode(',',$cleaningTypeTitle):''; $this->error = $cleaningTypeTitles.'已存在'; return false; } Db::name('mode_cate_type')->where('mode',$data['mode'])->where('cate_id',$id)->delete(); if($busIds){ $tat = [ 'cate_id'=>$id, 'mode'=>$data['mode'], 'create_time'=>getTime(), ]; foreach ($busIds as $k=>$v){ $tat['bus_id'] = $v; $add = Db::name('mode_cate_type')->insert($tat); if(!$add){ $this->error = '操作失败1'; return false; } } } if($busIds1){ $tat = [ 'cate_id'=>$id, 'mode'=>$data['mode'], 'create_time'=>getTime(), ]; foreach ($busIds1 as $k=>$v){ $tat['bus_id'] = $v; $add = Db::name('mode_cate_type')->insert($tat); if(!$add){ $this->error = '操作失败2'; return false; } } } $ret = $this->allowField(true)->save($data,['id'=>$id]); if(!$ret){ $this->error = '修改失败'; return false; } }else{ if($data['mode'] == 2){ $atable = 'cleaning_type b'; }else{ $atable = 'convey_cate b'; } $cleaningTypeTitle = Db::name('mode_cate_type') ->alias('mct') ->join($atable,'b.id=mct.bus_id') ->where('mct.mode',$data['mode']) ->where('mct.bus_id','in',$busIds) ->column('b.title'); if($cleaningTypeTitle){ $cleaningTypeTitles = $cleaningTypeTitle ? implode(',',$cleaningTypeTitle):''; $this->error = $cleaningTypeTitles.'已存在'; return false; } $id = Db::name($this->table)->insertGetId($data); if(!$id){ $this->error = '操作失败'; return false; } if($data['mode'] == 2 && $busIds){ $dt = [ 'cate_id'=>$id, 'mode'=>$data['mode'], 'create_time'=>getTime(), ]; foreach ($busIds as $k=>$v){ $dt['bus_id'] = $v; $add = Db::name('mode_cate_type')->insert($dt); if(!$add){ $this->error = '操作失败1'; return false; } } } if($data['mode'] == 3 && $busIds1){ $dt = [ 'cate_id'=>$id, 'mode'=>$data['mode'], 'create_time'=>getTime(), ]; foreach ($busIds1 as $k=>$v){ $dt['bus_id'] = $v; $add = Db::name('mode_cate_type')->insert($dt); if(!$add){ $this->error = '操作失败1'; return false; } } } } Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); $this->error = $e->getMessage(); return false; } } }