$params['lon'], 'lat' => $params['lat']]); if (!empty($params['lon']) && !empty($params['lat']) && !$service_area_id) { self::setError('您所选的位置已超出服务区域!'); return false; } $data = [ 'sn' => $params['sn'], 'avatar' => $params['avatar'], 'real_avatar' => $params['real_avatar'], 'real_name' => $params['real_name'], 'nickname' => $params['nickname'], 'account' => $params['account'], 'password' => $params['password'], 'mobile' => $params['mobile'], 'sex' => $params['sex'], 'channel' => $params['channel'], 'is_disable' => $params['is_disable'], 'login_ip' => $params['login_ip'], 'login_time' => $params['login_time'], 'is_new_user' => $params['is_new_user'], 'estimate_money' => $params['estimate_money'], 'user_money' => $params['user_money'], 'earnest_money' => $params['earnest_money'], 'exp' => $params['exp'], 'lon' => $params['lon'], 'lat' => $params['lat'], 'distance' => $params['distance'], 'province' => $params['province'], 'city' => $params['city'], 'service_area_id' => $service_area_id, 'area_name' => $params['area_name'], 'cooperation' => $params['cooperation']??0, 'time_period' => $params['time_period']??'', 'work_status' => $params['work_status']??0, 'recruiting_behalf' => $params['recruiting_behalf']??'', 'settlement_type' => $params['settlement_type']??2, 'labels' => (isset($params['labels']) && $params['labels'])?implode(',',$params['labels']):'', 'remark' => $params['remark']??'', 'is_wecall' => $params['is_wecall']??0, ]; if (isset($params['type']) && $params['type'] == 2) { $data['type'] = 2; $data['promotion_level'] = 6; //A1级工程师 $data['title_promotion'] = 1; //普通工程师 } $masterWorker = MasterWorker::create($data); //添加工程师汇总评分数据 MasterWorkerScore::create([ 'worker_id' => $masterWorker->id ]); Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 编辑 * @param array $params * @return bool * @author likeadmin * @date 2024/07/10 18:17 */ public static function edit(array $params): bool { if($params['category_ids']){ foreach ($params['category_ids'] as $val){ is_array($val)?($ids[] = end($val)):($ids[] = $val); } //$params['category_ids'] = ["goods_category_ids"=>$params['category_ids'],"ids"=>$ids]; $params['category_ids'] = implode(',',$ids); } /*if($params['tenant_id']){ // 绑定租户 绑定团队-组员 $team_id = MasterWorkerTeam::where('tenant_id',$params['tenant_id'])->value('id'); }*/ Db::startTrans(); try { $detail = MasterWorker::where('id', $params['id'])->field('id,lon,lat,address,service_area_id,type')->findOrEmpty()->toArray(); $address = $params['address']??''; if ($detail['address'] != $address && !empty($address)) { $lon_lat = get_address_lat_lng($address); $params['lon'] = $lon_lat['lon']; $params['lat'] = $lon_lat['lat']; $service_area_id = ServiceArea::serviceAreaId(['lon' => $params['lon'], 'lat' => $params['lat']]); if (!empty($params['lon']) && !empty($params['lat']) && !$service_area_id) { self::setError('您所选的位置已超出服务区域!'); return false; } } else { $params['lon'] = $detail['lon']; $params['lat'] = $detail['lat']; $service_area_id = $detail['service_area_id']; if (empty($address)) { $address = getAddressByLatLng($params['lon'], $params['lat']); } } $update = [ 'sn' => $params['sn'], 'avatar' => $params['avatar'], 'real_avatar' => $params['real_avatar'], 'real_name' => $params['real_name'], 'nickname' => $params['nickname'], 'account' => $params['account'], 'password' => $params['password'], 'mobile' => $params['mobile'], 'sex' => $params['sex'], 'channel' => $params['channel'], 'is_disable' => $params['is_disable'], 'login_ip' => $params['login_ip'], 'login_time' => $params['login_time'], 'is_new_user' => $params['is_new_user'], 'estimate_money' => $params['estimate_money'], 'user_money' => $params['user_money'], 'exp' => $params['exp'], 'address' => $address, 'lon' => $params['lon'], 'lat' => $params['lat'], 'distance' => $params['distance'], 'province' => $params['province'], 'city' => $params['city'], 'service_area_id' => $service_area_id, 'area_name' => $params['area_name'], 'earnest_money' => $params['earnest_money'], 'earnest_money_usable' => $params['earnest_money_usable'], 'earnest_money_freeze' => $params['earnest_money_freeze'], 'installment_ratio' => $params['installment_ratio'], 'retention_pay_status' => $params['retention_pay_status'], 'retention_money_status' => $params['retention_money_status'], 'category_ids' => $params['category_ids']??'', 'cooperation' => $params['cooperation']??0, 'time_period' => $params['time_period']?implode(',',$params['time_period']):'', 'work_status' => $params['work_status']??0, 'recruiting_behalf' => $params['recruiting_behalf']??'', 'settlement_type' => $params['settlement_type']??2, 'labels' => (isset($params['labels']) && $params['labels'])?implode(',',$params['labels']):'', 'remark' => $params['remark']??'', 'is_wecall' => $params['is_wecall']??0, 'type' => $params['type']??1, 'title_promotion' => $params['title_promotion']??0, ]; if (isset($params['type']) && $detail['type'] != $params['type']) { if ($params['type'] == 2) { $update['promotion_level'] = 6; //A1级工程师 $update['title_promotion'] = 1; //普通工程师 } else { $update['promotion_level'] = 0; $update['title_promotion'] = 0; } } //'tenant_id' => $params['tenant_id']??0, MasterWorker::where('id', $params['id'])->update($update); if (is_numeric($params['score']['weight_score'])) { $exists = MasterWorkerScore::where('worker_id', $params['id'])->value('id'); if ($exists) { MasterWorkerScore::where('worker_id',$params['id'])->update(['weight_score' => $params['score']['weight_score']]); } else { MasterWorkerScore::create([ 'worker_id' => $params['id'], 'weight_score' => $params['score']['weight_score'], ]); } } Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 删除 * @param array $params * @return bool * @author likeadmin * @date 2024/07/10 18:17 */ public static function delete(array $params): bool { return MasterWorker::destroy($params['id']); } /** * @notes 获取详情 * @param $params * @return array * @author likeadmin * @date 2024/07/10 18:17 */ public static function detail($params): array { $info = MasterWorker::with(['workerInfo'=>function(Query $query){ $query->field('worker_id,real_name,id_card,id_card_front_img,id_card_opposite_img,mobile,address'); },'workerRegister'=>function(Query $query){ $query->field('id as worker_register_id,worker_id,maintain_exp_type,other_exp_type,city,vehicle_type,name,age,mobile')->append(['maintain_exp_type_text','other_exp_type_text','vehicle_type_text','city_text']); }]) ->append(['time_period']) ->findOrEmpty($params['id'])->toArray(); if(!empty($info['category_ids'])){ $info['category_ids'] = explode(',',$info['category_ids']); $info['category_ids'] = array_map('intval', $info['category_ids']); } $info['is_up_retention_pay'] = 0; if(MasterWorkerRetentionMoneyLog::where(['worker_id' => $params['id'],'action' => 1])->count('id') > 0){ $info['is_up_retention_pay'] = 1; } $info['score'] = MasterWorkerScore::where(['worker_id' => $params['id']])->field('comprehensive_score,weight_score')->findOrEmpty()->toArray(); $images = MasterWorkerCredentialImages::where(['worker_register_id' => $info['workerRegister']['worker_register_id']??-1])->select()->toArray(); $info['credential_info'] = $images; return $info; } /** * 获取加盐密码 * @param $params * @return false|string */ public static function saltToPassword($params){ try{ $passwordSalt = Config::get('project.unique_identification'); $password = create_password($params['password'], $passwordSalt); return ['password' => $password]; } catch (\Exception $e){ self::setError($e->getMessage()); return false; } } /** * 获取所有工程师选项列表 * @param $params * @return array */ public static function getAllWorkers($params){ try{ return MasterWorker::where(['is_disable'=>0])->column('id,id as value,worker_number as name,real_name,account,mobile'); } catch (\Exception $e){ self::setError($e->getMessage()); return []; } } /** * 长期合作工程师停单 * @param $params * @return bool */ public static function stop($params, $userInfo){ try{ Db::startTrans(); $worker = MasterWorker::where(['id' => $params['id']])->findOrEmpty(); if($worker->isEmpty()){ self::setError('工程师不存在'); return false; } $start_time = strtotime($params['start_time']. " 00:00:00"); $end_time = strtotime($params['end_time']. " 23:59:59"); //校验停单日期是否重复 $exists = MasterWorkerStop::where(['worker_id' => $params['id'] ]) ->where(function($query) use ($start_time, $end_time) { $query->where('start_time', 'between', [$start_time, $end_time]) ->whereOr('end_time', 'between', [$start_time, $end_time]); }) ->count('id'); if($exists > 0){ self::setError('该日期已存在停单记录'); return false; } if ($params['start_time'] == date('Y-m-d')) { $worker->accept_order_status = 0; } $worker->save(); MasterWorkerStop::create([ 'worker_id' => $params['id'], 'start_time' => $start_time, 'end_time' => $end_time, 'admin_id' => $userInfo['admin_id'], ]); Db::commit(); return true; } catch (\Exception $e){ Db::rollback(); self::setError($e->getMessage()); return false; } } /** * 设置工程师备注 * @param $params * @return false|string */ public static function setRemark($params){ try{ MasterWorker::where('id', $params['id'])->update(['remark' => $params['remark']]); return true; } catch (\Exception $e){ self::setError($e->getMessage()); return false; } } /** * 设置工程师特殊技能 * @param $params * @return false|string */ public static function setSkill($params){ try{ MasterWorker::where('id', $params['id'])->update(['skill' => $params['skill']]); return true; } catch (\Exception $e){ self::setError($e->getMessage()); return false; } } /** * 工程师质保金缴费二维码 * @param $params * @return array|false|string * @throws \Exception */ public static function retentionMoneyOrder($params){ // 创建分享单Id $is_share = true; $params['amount'] = (float)$params['amount']??0; $order = MasterWorkerRetentionMoneyOrder::where(['worker_id'=>$params['worker_id']])->findOrEmpty(); if($order->isEmpty()){ $sn = generate_sn(MasterWorkerRetentionMoneyOrder::class, 'sn'); $order = MasterWorkerRetentionMoneyOrder::create(['sn' => $sn, 'order_status'=>1,'worker_id'=>$params['worker_id'],'order_amount'=>$params['amount']??0]); }else{ if($order->order_status === 1 && empty($order->openid) && $params['amount']>0){ // 可以改价 $order->order_amount= $params['amount']??0; $order->save(); }else{ // 已结束 - 不用分享二维码 if((float)$order->order_amount>0 && empty($params['amount'])) $is_share = true; else $is_share = false; } } $share_url = $is_share?(env('project.share_retention_money_host','').'?id='.$order->id):''; return ['info'=>$order->isEmpty()?[]:$order->toArray(),'share_url'=>$order->isEmpty()?'':$share_url]; } }