提交 6fa4d440 authored 作者: 窦斌's avatar 窦斌

edit

上级 675d17c3
<?php
namespace App\Http\Controllers\Api\MobileWeb;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Requests\Validators\Api\MobileWeb\LoginValidator;
use BlueCity\Core\Inc\ErrorInc;
use App\Services\Api\MobileWeb\LoginService;
use Illuminate\Support\Facades\Crypt;
class LoginController extends Controller
{
public function __construct()
{
$this->dataValidator = new LoginValidator();
}
// 登录
public function login(Request $request)
{
// 验证数据
$error_message = $this->dataValidator->loginValidator($request->all());
if ($error_message) {
return response()->json(['ErrorCode'=>ErrorInc::INVALID_PARAM, 'ErrorMessage'=>$error_message->first(), 'data'=>[]]);
}
$return_data = LoginService::login($request->all());
return $return_data;
}
//退出
public function quit(Request $request)
{
return LoginService::quit($request->all());
}
}
<?php
namespace App\Http\Middleware;
use Closure;
use DB;
use Illuminate\Support\Facades\Crypt;
class WebLogin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(!$request->exists('api_token')){
return response()->json(["ErrorCode"=>300,'ErrorMessage'=>'api_token失效,请重新登录!','data'=>'']);
}
$request['api_token_old'] = $request['api_token'];
// 解密api_token,如果不是系统生成的token会解密失败
try{
$api_token = Crypt::decrypt($request['api_token']);
}catch (\Exception $e){
return response()->json(["ErrorCode"=>300,'ErrorMessage'=>'api_token失效,请重新登录!2','data'=>'']);
}
// 拿到token获取登录表信息
$login_web = DB::table('login_web')
->where('api_token','=',$api_token)
->select('lowe_last_login','api_token')
->first();
if(empty($login_web)){
return response()->json(["ErrorCode"=>300,'ErrorMessage'=>'api_token失效,请重新登录!3','data'=>'']);
}
// 当前时间
$hours = time();
// 如果最后登录时间小于当前时间,说明登陆过期
if($login_web->lowe_last_login < $hours){
return response()->json(["ErrorCode"=>300, 'ErrorMessage'=>'登陆过期,请重新登录', 'data'=>'']);
}
$now_time = $hours + 10*60*60;
if ($now_time > $login_web->lowe_last_login) {
// 每隔2个小时更新一次,降低更新次数,如果登录时间超过2个小时在操作就当前时间加12小时
DB::table('login_web')->where('api_token','=',$api_token)->update(['lowe_last_login'=>$hours + 12*60*60]);
}
$request['api_token'] = $api_token;//赋值解密后的token值
return $next($request);
}
}
<?php
namespace App\Http\Requests\Validators\Api\MobileWeb;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Validator;
// 移动端-账单列表
class BillingModuleValidator extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
// 列表验证器
public function indexValidator($data)
{
// 自定义错误消息
$messages = [
'admin_id.required' => '请输入服务商id',
'admin_id.integer' => '参数错误',
'type.required' => '请输入type值',
'type.max' => '参数错误',
];
// 数据验证
$validator = Validator::make($data, [
'admin_id' => 'required|integer|min:1',
'type' => [
'required',
Rule::in([1, 2]),
],
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
// 查看详情验证器
public function checkInfoValidator($data)
{
// 自定义错误消息
$messages = [
'admin_id.required' => '参数错误',
'stl_wat.required' => '请输入结算单号',
];
// 数据验证
$validator = Validator::make($data, [
'admin_id' => 'required|integer|min:1',
'stl_wat' => 'required',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
// 确认账单验证器
public function affirmBillValidator($data)
{
// 自定义错误消息
$messages = [
'admin_id.required' => '参数错误',
'wat_num.required' => '请输入结算单号',
];
// 数据验证
$validator = Validator::make($data, [
'admin_id' => 'required|integer|min:1',
'wat_num' => 'required',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
// 上传发票验证器
public function uploadInvoiceValidator($data)
{
// 自定义错误消息
$messages = [
'admin_id.required' => '参数错误',
'wat_num.required' => '请输入结算单号',
// 'stl_invoice_number.required' => '请输入发票单号',
// 'stl_expressage_number.required' => '请输入快递单号',
];
// 数据验证
$validator = Validator::make($data, [
'admin_id' => 'required|integer|min:1',
'wat_num' => 'required',
// 'stl_invoice_number' => 'required',
// 'stl_expressage_number' => 'required',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
}
<?php
namespace App\Http\Requests\Validators\Api\MobileWeb;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Validator;
class LoginValidator extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
// 登录验证器
public function loginValidator($data)
{
// 自定义错误消息
$messages = [
'account.required' => '请输入账号',
'account.max' => '参数错误',
'password.required' => '请输入密码',
'password.max' => '参数错误',
'login_type.required' => '请传入类型',
'login_type.in' => '参数错误',
'user_type.required' => '请传入类型',
'user_type.in' => '参数错误',
];
// 数据验证
$validator = Validator::make($data, [
'account' => 'required|string|max:50',
'password' => 'required|string|max:50',
'login_type' => [//类型1强制登录2不登录
'required',
Rule::in(['1', '2']),
],'user_type' => [//登录类型1技师2服务商
'required',
Rule::in(['1', '2']),
],
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
}
<?php
namespace App\Http\Requests\Validators\Api\MobileWeb;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Validator;
// 移动端-工单列表
class OrderListValidator extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
// 列表验证器
public function indexValidator($data)
{
// 自定义错误消息
$messages = [
'install_id.required' => '请输入账号id',
'install_id.integer' => '参数错误',
'admin_id.required' => '请输入服务商id',
'admin_id.integer' => '参数错误',
];
// 数据验证
$validator = Validator::make($data, [
'install_id' => 'required|integer|min:1',
'admin_id' => 'required|integer|min:1',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
// 详情验证器
public function infoValidator($data)
{
// 自定义错误消息
$messages = [
'deor_id.required' => '请输入设计工单id',
'deor_id.integer' => '参数错误',
'sys_num.required' => '请输入订单单号',
'sys_num.max' => '参数错误',
];
// 数据验证
$validator = Validator::make($data, [
'deor_id' => 'required|integer|min:1',
'sys_num' => 'required|string|max:50',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
// 接单验证器
public function receivingValidator($data)
{
// 自定义错误消息
$messages = [
'install_id.required' => '参数错误',
'admin_id.required' => '参数错误',
'id.required' => '请输入工单id',
'id.integer' => '参数错误',
'receive_install_id.required' => '请选择安装人员',
'receive_install_id.integer' => '参数错误',
];
// 数据验证
$validator = Validator::make($data, [
'install_id' => 'required|integer|min:1',
'admin_id' => 'required|integer|min:1',
'id' => 'required|integer|min:1',
'receive_install_id' => 'required|integer|min:1',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
// 拒单验证器
public function refuseValidator($data)
{
// 自定义错误消息
$messages = [
'install_id.required' => '参数错误',
'admin_id.required' => '参数错误',
'id.required' => '请输入服务工单id',
'id.integer' => '参数错误',
'remarks.required' => '请输入拒单备注',
'remarks.max' => '拒单备注长度超出限制',
];
// 数据验证
$validator = Validator::make($data, [
'install_id' => 'required|integer|min:1',
'admin_id' => 'required|integer|min:1',
'id' => 'required|integer|min:1',
'remarks' => 'required|string|max:255',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
// 开始安装验证器
public function startInstallValidator($data)
{
// 自定义错误消息
$messages = [
'install_id.required' => '参数错误',
'admin_id.required' => '参数错误',
'id.required' => '请输入服务工单id',
'id.integer' => '参数错误',
];
// 数据验证
$validator = Validator::make($data, [
'install_id' => 'required|integer|min:1',
'admin_id' => 'required|integer|min:1',
'id' => 'required|integer|min:1',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
// 安装反馈验证器
public function installFeedbackValidator($data)
{
// 自定义错误消息
$messages = [
'install_id.required' => '参数错误',
'admin_id.required' => '参数错误',
'id.required' => '请输入服务工单id',
'type.required' => '请选择完成类型',
// 'template_data.required' => '请输入图片相关数据',
// 'license_plate.required' => '请输入车牌号',
// 'license_plate.max' => '长度超出限制',
];
// 数据验证
$validator = Validator::make($data, [
'install_id' => 'required|integer|min:1',
'admin_id' => 'required|integer|min:1',
'id' => 'required|integer|min:1',
'type' => 'required|integer|min:1',
// 'template_data' => 'required',
// 'license_plate' => 'required|string|max:20',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
// 操作记录验证器
public function operatingRecordValidator($data)
{
// 自定义错误消息
$messages = [
'install_id.required' => '参数错误',
'admin_id.required' => '参数错误',
'serial_number.required' => '请输入单号',
];
// 数据验证
$validator = Validator::make($data, [
'install_id' => 'required|integer|min:1',
'admin_id' => 'required|integer|min:1',
'serial_number' => 'required',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
// 反馈安装图片验证器
public function imageFeedbackValidator($data)
{
// 自定义错误消息
$messages = [
'install_id.required' => '参数错误',
'admin_id.required' => '参数错误',
'image_url.required' => '参数错误',
'image_id.required' => '参数错误',
'image_type.required' => '参数错误',
'id.required' => '请输入服务工单id',
'id.integer' => '参数错误',
];
// 数据验证
$validator = Validator::make($data, [
'install_id' => 'required|integer|min:1',
'admin_id' => 'required|integer|min:1',
'image_url' => 'required|min:1',
'image_type' => 'required|min:1',
'image_id' => 'required|min:1',
'id' => 'required|integer|min:1',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
// 反馈车牌车架号验证器
public function LicenseFeedbackValidator($data)
{
// 自定义错误消息
$messages = [
'install_id.required' => '参数错误',
'admin_id.required' => '参数错误',
'gd_id.required' => '参数错误',
'id.required' => '请输入服务工单id',
'id.integer' => '参数错误',
];
// 数据验证
$validator = Validator::make($data, [
'install_id' => 'required|integer|min:1',
'admin_id' => 'required|integer|min:1',
'gd_id' => 'required|integer|min:1',
'id' => 'required|integer|min:1',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
}
<?php
namespace App\Http\Requests\Validators\Api\MobileWeb;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Validator;
// 移动端-账单列表
class ServiceEvaluationValidator extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
// 列表验证器
public function indexValidator($data)
{
// 自定义错误消息
$messages = [
'admin_id.required' => '请输入服务商id',
'admin_id.integer' => '参数错误',
'type.required' => '请输入type值',
'type.max' => '参数错误',
];
// 数据验证
$validator = Validator::make($data, [
'admin_id' => 'required|integer|min:1',
'type' => [
'required',
Rule::in([1, 2]),
],
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
}
<?php
namespace App\Http\Requests\Validators\Api\MobileWeb;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Validator;
class TechnicianValidator extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
// 新增验证器
public function addValidator($data)
{
// 自定义错误消息
$messages = [
'install_id.required' => '参数错误',
'install_id.integer' => '参数错误',
'install_id.min' => '参数错误',
'admin_id.required' => '参数错误',
'admin_id.integer' => '参数错误',
'admin_id.min' => '参数错误',
'install_name.required' => '请输入姓名',
'install_name.max' => '参数错误',
'install_phone.required' => '请输入联系电话',
'install_phone.max' => '参数错误',
'install_year.required' => '请选择入职时间',
'install_year.max' => '参数错误',
'install_is_type.required' => '请选择是否启用',
'install_is_type.max' => '参数错误',
];
// 数据验证
$validator = Validator::make($data, [
'install_id' => 'required|integer|min:1',
'admin_id' => 'required|integer|min:1',
'install_name' => 'required|string|max:50',
'install_phone' => 'required|string|max:50',
'install_year' => 'required|string|max:50',
'install_is_type' => [
'required',
Rule::in([1, 2]),
],
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
// 修改密码验证器
public function changePasswordValidator($data)
{
// 自定义错误消息
$messages = [
'install_id.required' => '参数错误',
'install_id.integer' => '参数错误',
'install_id.min' => '参数错误',
'admin_id.required' => '参数错误',
'admin_id.integer' => '参数错误',
'admin_id.min' => '参数错误',
'password.required' => '请输入原密码',
'new_password.required' => '请输入新密码',
'new_password.regex' => '密码格式错误',
'new_password_affirm.required' => '请输入确认密码',
'new_password_affirm.same' => '两次密码不一致',
];
// 数据验证
$validator = Validator::make($data, [
'install_id' => 'required|integer|min:1',
'admin_id' => 'required|integer|min:1',
'password' => 'required',
'new_password' => [
'required',
'regex:/^[a-zA-Z\d_]{8,}$/', //正则验证密码格式
],
// 与密码数据保持一致
'new_password_affirm' => 'required|same:new_password',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
// 编辑展示验证器
public function editShowValidator($data)
{
// 自定义错误消息
$messages = [
'install_id.required' => '参数错误',
'install_id.integer' => '参数错误',
'install_id.min' => '参数错误',
'admin_id.required' => '参数错误',
'admin_id.integer' => '参数错误',
'admin_id.min' => '参数错误',
'edit_install_id.required' => '请输入技师id',
'edit_install_id.integer' => '参数错误',
'edit_install_id.min' => '参数错误',
'type.required' => '请输入类型',
'type.in' => '参数错误',
];
// 数据验证
$validator = Validator::make($data, [
'install_id' => 'required|integer|min:1',
'admin_id' => 'required|integer|min:1',
'edit_install_id' => 'required|integer|min:1',
'type' => [
'required',
Rule::in([1, 2]),
],
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
public function deleteValidator($data)
{
// 自定义错误消息
$messages = [
'install_id.required' => '参数错误',
'install_id.integer' => '参数错误',
'install_id.min' => '参数错误',
'admin_id.required' => '参数错误',
'admin_id.integer' => '参数错误',
'admin_id.min' => '参数错误',
];
// 数据验证
$validator = Validator::make($data, [
'install_id' => 'required|integer|min:1',
'admin_id' => 'required|integer|min:1',
], $messages);
// 判断数据验证是否成功
if ($validator->fails()) {
return $validator->errors();
}
}
}
<?php
namespace App\Services\Api\MobileWeb;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\DB;
use BlueCity\Core\Inc\ErrorInc;
use App\Services\Api\Common\{CommonService};
// 账单列表
class BillingModuleService extends Model
{
// 列表查询
public static function index($request, $show_count = 10)
{
if (!isset($request['user_type'])) {
$request['user_type'] = 1;
}
if ($request['type'] == 1) { //未出账单,查询gone_settlement_list
// 查询列表
$list_data = DB::table('settlement_list as seli')
->leftJoin('order_list as orli', 'orli.serial_number', '=', 'seli.serial_number')
->where('seli.ser_id', $request['admin_id']) //服务商id
->where('wat_num', '')
->where('seli.is_delete', 1)
->where('list_service_type', 5)
->whereIn('sett_status', [1, 60, 63])
->where(function ($query) use ($request) {
// 安装人员
if (!empty($request['install_id']) && $request['user_type'] == 1) {
$query->where('install_id', $request['install_id']);
}
// 业务来源id
if (!empty($request['p_id'])) {
$query->where('p_id', $request['p_id']);
}
// 状态
if (!empty($request['stauas'])) {
$query->where('stauas', $request['stauas']);
}
// 锁定状态
if (!empty($request['lock_state'])) {
$query->where('lock_state', $request['lock_state']);
}
})
->where(function ($query) use ($request) { //创建时间
// 如果选择开始时间并且选择结束时间
if (!empty($request['create_time_start']) && !empty($request['create_time_end'])) {
$query->whereBetween('create_time', [$request['create_time_start'], $request['create_time_end'] . ' 23:59:59']);
} else {
// 如果选择开始时间
if (!empty($request['create_time_start'])) {
$query->where('create_time', '>=', $request['create_time_start']);
} else {
// 如果选择结束时间
if (!empty($request['create_time_end'])) {
$query->where('create_time', '<=', $request['create_time_end'] . ' 23:59:59');
}
}
}
})
->select('seli.id', 'seli.order_num', 'seli.create_time', 'seli.sys_num', 'seli.serial_number', 'list_id', 'crma_id', 'orli.p_id', 'all_price')
->orderby('setfeeds_time', 'asc')
->paginate($show_count);
$page['count'] = 0;
$page['page'] = 0;
$page['page_size'] = $show_count;
$page['allPage'] = 0;
$data['list'] = [];
$data['page'] = $page;
$list_items = $list_data->items();
if ($list_items) {
$list_items = objectToArray($list_items);
$p_id = array_unique(array_column($list_items, 'p_id')); //来源id
$crma_id = array_unique(array_column($list_items, 'crma_id')); //施工工艺id
// 查询平台信息
$find_pt_data = DB::table('pt')
->whereIn('id', $p_id)
->pluck('pt_name', 'id')->toArray();
// 查询施工工艺信息
$find_craft_data = DB::table('craft_manage')
->whereIn('crma_id', $crma_id)
->pluck('crma_name', 'crma_id')->toArray();
foreach ($list_items as $key => $value) {
// 业务来源
if (isset($find_pt_data[$value['p_id']])) {
$list_items[$key]['pt_name'] = $find_pt_data[$value['p_id']];
} else {
$list_items[$key]['pt_name'] = '';
}
// 施工工艺
if (isset($find_craft_data[$value['crma_id']])) {
$list_items[$key]['crma_name'] = $find_craft_data[$value['crma_id']];
} else {
$list_items[$key]['crma_name'] = '';
}
$list_items[$key]['orders_vehicle'] = DB::table('orders_vehicle')
->where('is_delete', 1)
->where('sys_num', $value['sys_num'])
->select('id', 'sys_num', 'vein_id', 'vein_name', 'vepo_id', 'vepo_name', 'vein_image')
->get()->toArray();
unset($list_items[$key]['crma_id']);
unset($list_items[$key]['p_id']);
}
$page['count'] = $list_data->total(); //总数据个数
$page['page'] = $list_data->currentPage(); //当前页面页码
$page['page_size'] = $show_count; //一页显示多少个
$page['allPage'] = $list_data->lastPage(); //表示最后一页的页码
$data['list'] = $list_items;
$data['page'] = $page;
}
} elseif ($request['type'] == 2) { //已出账单,查询gone_statements_list
// 查询列表
$list_data = DB::table('statements_list as stli')
->leftJoin('service_center as sece', 'sece.wat_num', '=', 'stli.stl_wat')
->leftJoin('company_data as com', 'stli.company_id', '=', 'com.cm_id')
->where('stl_serid', $request['admin_id']) //服务商id
->where('stl_type', '!=', 4) //服务商id
->where(function ($query) use ($request) {
// 状态
if (!empty($request['stauas'])) {
$query->where('stauas', $request['stauas']);
}
// 锁定状态
if (!empty($request['lock_state'])) {
$query->where('lock_state', $request['lock_state']);
}
})
->where(function ($query) use ($request) { //创建时间
// 如果选择开始时间并且选择结束时间
if (!empty($request['create_time_start']) && !empty($request['create_time_end'])) {
$query->whereBetween('create_time', [$request['create_time_start'], $request['create_time_end'] . ' 23:59:59']);
} else {
// 如果选择开始时间
if (!empty($request['create_time_start'])) {
$query->where('create_time', '>=', $request['create_time_start']);
} else {
// 如果选择结束时间
if (!empty($request['create_time_end'])) {
$query->where('create_time', '<=', $request['create_time_end'] . ' 23:59:59');
}
}
}
})
->select('stl_id', 'stl_wat', 'stl_startime', 'stl_endtime', 'stl_type', 'stl_money', 'stl_ticket', 'whether_inv', 'stl_invoice_number', 'stl_expressage_number', 'com.cm_name as company_name')
->orderby('stl_type', 'asc')
->orderby('stl_endtime', 'desc')
->paginate($show_count);//, 'invoice'
$page['count'] = 0;
$page['page'] = 0;
$page['page_size'] = $show_count;
$page['allPage'] = 0;
$data['list'] = [];
$data['page'] = $page;
$list_items = $list_data->items();
if ($list_items) {
$list_items = objectToArray($list_items);
$stl_wat = array_column($list_items, 'stl_wat');
$pic_data = DB::table('pictures')
->whereIn('sett_wat_num', $stl_wat)
->pluck('upload_pictures', 'sett_wat_num')
->toArray();
$pic_data = objectToArray($pic_data);
foreach ($list_items as $key => $value) {
if (isset($pic_data[$value['stl_wat']])) {
$list_items[$key]['upload_pictures'] = $pic_data[$value['stl_wat']];
} else {
$list_items[$key]['upload_pictures'] = '';
}
// if ($value['invoice'] == 3) { //发票1增票2普票3不开票
// $list_items[$key]['whether_inv'] = 3;
// }
if ($value['stl_type'] == 1) { //结算状态:1未结算(商家未确认)2结算中(商家已确认)3已结算4未处理
$list_items[$key]['stl_type_name'] = '未结算';
} elseif ($value['stl_type'] == 2) {
$list_items[$key]['stl_type_name'] = '结算中';
} elseif ($value['stl_type'] == 3) {
$list_items[$key]['stl_type_name'] = '已结算';
} elseif ($value['stl_type'] == 4) {
$list_items[$key]['stl_type_name'] = '未处理';
}
if ($value['whether_inv'] == 1) { //结算状态:1未结算(商家未确认)2结算中(商家已确认)3已结算4未处理
$list_items[$key]['whether_inv_name'] = '已收票';
} elseif ($value['whether_inv'] == 2) {
$list_items[$key]['whether_inv_name'] = '未开票';
} elseif ($value['whether_inv'] == 3) {
$list_items[$key]['whether_inv_name'] = '不开票';
}
if (empty($value['stl_invoice_number'])) { //结算状态:1未结算(商家未确认)2结算中(商家已确认)3已结算4未处理
$list_items[$key]['whether_inv_name'] = '未开票';
$list_items[$key]['whether_inv'] = 2;
} else {
$list_items[$key]['whether_inv_name'] = '已开票';
$list_items[$key]['whether_inv'] = 1;
}
unset($list_items[$key]['invoice']);
}
$page['count'] = $list_data->total(); //总数据个数
$page['page'] = $list_data->currentPage(); //当前页面页码
$page['page_size'] = $show_count; //一页显示多少个
$page['allPage'] = $list_data->lastPage(); //表示最后一页的页码
$data['list'] = $list_items;
$data['page'] = $page;
}
}
if ($data['list']) {
return ['ErrorCode' => 1, 'ErrorMessage' => '成功', 'Data' => $data];
} else {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '暂无数据', 'Data' => $data];
}
}
// 查看凭证
public static function checkVoucher($request)
{
$find_upload_pictures = DB::table('pictures')
->where('sett_wat_num', $request['stl_wat'])
->value('upload_pictures');
if ($find_upload_pictures) {
return ['ErrorCode' => 1, 'ErrorMessage' => '成功', 'Data' => $find_upload_pictures];
} else {
return ['ErrorCode' => 500, 'ErrorMessage' => '暂无数据', 'Data' => ''];
}
}
// 查看详情
public static function checkInfo($request)
{
$list_items = DB::table('settlement_list as seli')
->leftJoin('order_list as orli', 'orli.serial_number', '=', 'seli.serial_number')
->where('seli.ser_id', $request['admin_id']) //服务商id
->where('wat_num', $request['stl_wat'])
// ->where('seli.is_delete', 1)
->select('orli.id', 'seli.order_num', 'seli.create_time', 'seli.sys_num', 'seli.serial_number', 'crma_id', 'all_price', 'orli.p_id')
->orderby('id', 'desc')
->get()->toArray();
if ($list_items) {
$list_items = objectToArray($list_items);
$p_id = array_unique(array_column($list_items, 'p_id')); //来源id
$crma_id = array_unique(array_column($list_items, 'crma_id')); //施工工艺id
// 查询平台信息
$find_pt_data = DB::table('pt')
->whereIn('id', $p_id)
->pluck('pt_name', 'id')->toArray();
// 查询施工工艺信息
$find_craft_data = DB::table('craft_manage')
->whereIn('crma_id', $crma_id)
->pluck('crma_name', 'crma_id')->toArray();
foreach ($list_items as $key => $value) {
// 业务来源
if (isset($find_pt_data[$value['p_id']])) {
$list_items[$key]['pt_name'] = $find_pt_data[$value['p_id']];
} else {
$list_items[$key]['pt_name'] = '';
}
// 施工工艺
if (isset($find_craft_data[$value['crma_id']])) {
$list_items[$key]['crma_name'] = $find_craft_data[$value['crma_id']];
} else {
$list_items[$key]['crma_name'] = '';
}
$list_items[$key]['orders_vehicle'] = DB::table('orders_vehicle')
->where('is_delete', 1)
->where('sys_num', $value['sys_num'])
->select('id', 'sys_num', 'vein_id', 'vein_name', 'vepo_id', 'vepo_name', 'vein_image')
->get()->toArray();
}
$data['list'] = $list_items;
return ['ErrorCode' => 1, 'ErrorMessage' => '成功', 'Data' => $data];
} else {
return ['ErrorCode' => 500, 'ErrorMessage' => '暂无数据', 'Data' => ''];
}
}
// 确认账单
public static function affirmBill($request)
{
// 查询成员账号表数据
$find_adm_data = DB::table('admin')
->where('id', $request['admin_id'])
->select('company_name', 'admin_acc')
->first();
$find_adm_data = objectToArray($find_adm_data);
// 查询结算单列表数据
$find_stli_data = DB::table('statements_list')
->where('stl_wat', $request['wat_num']) //结算单号
->select('stl_money', 'stl_ticket', 'stl_type', 'stl_serid', 'stl_monthpay', 'company_id')
->first();
$find_stli_data = objectToArray($find_stli_data);
if ($find_stli_data['stl_type'] != 1) {
return ['ErrorCode' => 500, 'ErrorMessage' => '只有未结算的单据可以点击确认账单', 'Data' => []];
}
// 服务商账单金额明细(服务中心账目管理数据)
$add_sece_data['wat_num'] = $request['wat_num']; //结算流水号
$add_sece_data['ser_id'] = $request['admin_id']; //服务中心
$add_sece_data['company_name'] = $find_adm_data['company_name']; //结算对象名称
$add_sece_data['apply_for_name'] = $find_adm_data['admin_acc']; //申请人
$add_sece_data['apply_for_money'] = $find_stli_data['stl_money'] - $find_stli_data['stl_ticket']; //申请金额 = 结算单金额 - 执行罚款金额
$add_sece_data['apply_for_time'] = date('Y-m-d H:i:s'); //申请时间
$settlement_num = '';
if (Request::filled('settlement_num')) {
$settlement_num = $request['settlement_num'];
}
$add_sece_data['settlement_num'] = $settlement_num;
$add_sece_data['company_id'] = $find_stli_data['company_id'];
$add_sece_data['stl_monthpay'] = $find_stli_data['stl_monthpay']; //1月结2零散3周结
$user_info = CommonService::webgetUserInfo($request['api_token']);
// 查询工单结算表数据
$find_seli_data = DB::table('settlement_list')
->where('wat_num', $request['wat_num'])
->select('serial_number')
->get()->toArray();
$serial_number = array_column($find_seli_data, 'serial_number');
DB::beginTransaction();
// 新增服务商账单金额明细(服务中心账目管理数据)
$add_sece_id = DB::table('service_center')->insert($add_sece_data);
// 工单结算表
$edit_seli_data['sett_status'] = 20; //工单结算状态:1未审核10未结算20结算中30已完成40作废50已追回
// 更改服务工单结算表
$edit_seli_res = DB::table('settlement_list')
->where('wat_num', $request['wat_num'])
->update($edit_seli_data);
// 结算单列表(账单表->账单报表数据)
$edit_stli_data['stl_type'] = 2; //结算状态1:未结算(商家未确认);2:结算中(商家已确认);3:已结算 4:未处理 5:待发货
// 更改结算单列表(账单表->账单报表数据)
$edit_stli_res = DB::table('statements_list')
->where('stl_wat', $request['wat_num'])
->update($edit_stli_data);
// 更改服务工单列表
$edit_orli_data["account_status"] = 20;
$edit_orli_res = DB::table('order_list')
->whereIn('serial_number', $serial_number)
->update($edit_orli_data);
if ($add_sece_id && $edit_seli_res && $edit_stli_res && $edit_orli_res) {
DB::commit();
// czrzLog("确认账单", $request['wat_num'], "移动端确认账单", "账单管理", request::ip(), $user_info->install_name);
return ['ErrorCode' => 1, 'ErrorMessage' => '确认账单成功', 'Data' => []];
} else {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '失败', 'Data' => []];
}
}
// 上传发票
public static function uploadInvoice($request)
{
// 查询结算单列表(账单表->账单报表数据)是否有单号
$find_stli_data = DB::table('statements_list')
->where('stl_wat', $request['wat_num'])
->select('stl_invoice_number', 'stl_expressage_number')
->first();
$find_stli_data = objectToArray($find_stli_data);
if (!empty($find_stli_data['stl_invoice_number']) && !empty($find_stli_data['stl_expressage_number'])) {
return ['ErrorCode' => 1, 'ErrorMessage' => $find_stli_data, 'Data' => []];
} else {
if (empty($request['stl_invoice_number']) || empty($request['stl_expressage_number'])) {
return ['ErrorCode' => ErrorInc::INVALID_PARAM, 'ErrorMessage' => '请输入发票单号和快递单号', 'Data' => []];
}
$edit_stli_data['stl_invoice_number'] = $request['stl_invoice_number']; //发票单号
$edit_stli_data['stl_expressage_number'] = $request['stl_expressage_number']; //快递单号
$edit_stli_res = DB::table('statements_list')
->where('stl_wat', $request['wat_num'])
->update($edit_stli_data);
if ($edit_stli_res) {
return ['ErrorCode' => 1, 'ErrorMessage' => $edit_stli_data, 'Data' => []];
} else {
return ['ErrorCode' => 500, 'ErrorMessage' => '失败', 'Data' => []];
}
}
}
}
<?php
namespace App\Services\Api\MobileWeb;
use App\Services\CommonService;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Facades\DB;
use BlueCity\Core\Inc\ErrorInc;
use App\Models\{Company, InstallPerson};
use Illuminate\Support\Facades\Crypt;
class LoginService
{
// 登录
public static function login($request)
{
if ($request['user_type'] == 1) { //技师登录
// 查询登录账号数据
$find_person = InstallPerson::where('delet_y', 1)
->where('check_code', $request['account'])
->where('install_password', md5($request['password']))
->select('id', 'check_code', 'install_name', 'install_phone', 'install_is_type', 'admin_id')
->first();
} elseif($request['user_type'] == 2) { //服务商登录
//判定是否有公司名称字段
if(!isset($request['company_name']) || $request['company_name']==''){
return ['ErrorCode' => 201, 'ErrorMessage' => '请填写公司名称!', 'data' => ''];
}
//查询公司名称是否存在
$company_id = Company::where("com_name",$request['company_name'])->value('com_id');
// 查询登录账号数据
$find_person = DB::table('admin as adm')
->leftJoin('admin_infor as adin', 'adin.admin_id', '=', 'adm.id')
->where('admin_acc', $request['account'])
->whereIn('admin_groupnew', [2,3])
->where('admin_password', md5($request['password']))
->select('adm.id', 'admin_acc as check_code', 'admin_name as install_name', 'phone as install_phone', 'enable as install_is_type', 'adm.id as admin_id')
->first();
$find_person = CommonService::dataToArray($find_person);
}
if (empty($find_person)) {
return ['ErrorCode' => 202, 'ErrorMessage' => '账号密码错误!', 'data' => ''];
}
if ($find_person['install_is_type'] != 1) {
return ['ErrorCode' => 203, 'ErrorMessage' => '当前账号已停用!', 'data' => ''];
}
if ($request['openid']) {
// 微信授权绑定用户信息
$bingding_res = self::accreditBinding($request, $find_person);
}
$expiration_time = 12 * 60 * 60; //登录过期时间
// 生成token
$unique_string = md5(uniqid(md5(microtime(true)) . rand(100000, 999999), true)); //生成唯一字符串
$api_token = sha1($unique_string); //加密
$find_login = DB::table('login_web')
->where('install_id', '=', $find_person['id'])
->where('user_type', '=', $request['user_type'])
->select('lowe_id', 'install_id', 'lowe_last_login')
->first();
if (empty($find_login)) {
// 如果用户第一次登陆,将用户的登录状态保存到临时表
$lote_data['install_id'] = $find_person['id']; //账号id
$lote_data['lowe_last_login'] = time() + $expiration_time; //最后登陆时间
$lote_data['api_token'] = $api_token; //api_token
$lote_data['account'] = $find_person['check_code']; //登录账号
$lote_data['install_name'] = $find_person['install_name']??""; //账号姓名
$lote_data['install_phone'] = $find_person['install_phone']; //手机号
$lote_data['admin_id'] = $find_person['admin_id']; //所属服务中心id
$lote_data['user_type'] = $request['user_type']; //登录类型:1技师2服务商
$lote_data['role_auth'] = '';
$lote_data['auth_routes'] = '';
$lote_res = DB::table('login_web')->insert($lote_data);
if (empty($lote_res)) {
return ["ErrorCode" => 204, 'ErrorMessage' => '登录失败!1', 'data' => '{}'];
}
// 返回数据
$return_data = [
'api_token' => Crypt::encrypt($api_token), //生成前台token
'account' => $find_person['check_code'],
'install_name' => $find_person['install_name'],
'install_phone' => $find_person['install_phone'],
'install_id' => $find_person['id'],
'admin_id' => $find_person['admin_id'],
];
return ['ErrorCode' => 1, 'ErrorMessage' => '登录成功', 'data' => $return_data];
}
$now_time = time();
// 当前时间大于最后登陆时间,登录时间已过期,重新登录
// login_type 值为1 强制登录
if ($now_time > $find_login->lowe_last_login || $request['login_type'] == 1) {
//修改登陆状态
$lote_data['install_id'] = $find_person['id']; //账号id
$lote_data['lowe_last_login'] = time() + $expiration_time; //最后登陆时间
$lote_data['api_token'] = $api_token; //api_token
$lote_data['account'] = $find_person['check_code']; //登录账号
$lote_data['install_name'] = $find_person['install_name']; //账号姓名
$lote_data['install_phone'] = $find_person['install_phone']; //手机号
$lote_data['admin_id'] = $find_person['admin_id']; //所属服务中心id
$lote_res = DB::table('login_web')
->where('lowe_id', $find_login->lowe_id)
->update($lote_data);
if (empty($lote_res)) {
return ["ErrorCode" => 500, 'ErrorMessage' => '登录失败!2', 'data' => '{}'];
}
// 返回数据
$return_data = [
'api_token' => Crypt::encrypt($api_token), //生成前台token
'account' => $find_person['check_code'],
'install_name' => $find_person['install_name'],
'install_phone' => $find_person['install_phone'],
'install_id' => $find_person['id'],
'admin_id' => $find_person['admin_id'],
];
return ['ErrorCode' => 1, 'ErrorMessage' => '登录成功', 'data' => $return_data];
} else {
return ["ErrorCode" => 400, 'ErrorMessage' => '该用户已经登录', 'data' => '{}'];
}
}
// 微信授权绑定
public static function accreditBinding($request, $find_person)
{
// 查询数据表openID是否存在绑定,存在绑定改为离线
DB::table('installation_master')
->where('wechat_number',$request['openid'])
->update(['priority'=>2,'update_time'=>date('Y-m-d H:i:s')]);
$find_data = DB::table('installation_master')
->where('check_code',$find_person['check_code'])
->value('id');
if($find_data){
return DB::table('installation_master')
->where('id',$find_data)
->update(['priority'=>1,'wechat_number'=>$request['openid'],'update_time'=>date('Y-m-d H:i:s')]);
}else {
// 新增绑定关系
$data['wechat_number'] = $request['openid'];
$data['type'] = $request['user_type'];
$data['check_code'] = $find_person['check_code'];
$data['inst_name'] = $find_person['install_name'];
$data['inst_phone'] = $find_person['install_phone'];
$data['admin_id'] = $find_person['admin_id'];
$data['install_id'] = $find_person['id'];
$data['priority'] = 1;
return DB::table('installation_master')->insert($data);
}
}
// 退出
public static function quit($request)
{
try {
$api_token = Crypt::decrypt($request['api_token']);
} catch (\Exception $e) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => 'api_token失效', 'data' => ''];
}
// 更改最后登录时间
$lote_data['lowe_last_login'] = 0; //最后登陆时间
$res = DB::table('login_web')
->where('api_token', $api_token)
->update($lote_data);
if ($res) {
return ['ErrorCode' => 1, 'ErrorMessage' => '退出成功', 'data' => '{}'];
} else {
return ["ErrorCode" => 201, 'ErrorMessage' => '退出失败', 'data' => '{}'];
}
}
}
<?php
namespace App\Services\Api\MobileWeb;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Facades\DB;
use BlueCity\Core\Inc\ErrorInc;
use App\Models\{Orders, InstallPerson};
use App\Services\{BmmcService, Api\OrderManage\OrdersVehicleService};
use App\Services\Api\Common\{CommonService};
class OrderListService extends Model
{
// 列表查询
public static function index($request, $show_count = 10,$type=1)
{
if($type==2){
return static::tempFunction($request, $show_count);
}
if (!isset($request['user_type'])) {
$request['user_type'] = 1;
}
// 查询列表
$list_data = DB::table('orders as ol')
->leftJoin('user as u', 'ol.new_customer_id', '=', 'u.id')
->where('ser_id', $request['admin_id']) //服务商id
->where('is_delete', 1) //是否删除:1正常2删除
->whereIn("orders_sertatus",[1,2,4,5,6]) // 限制服务状态下的订单
->where(function ($query) use ($request) {
// 安装人员
if (!empty($request['install_id']) && $request['user_type'] == 1) {
$query->where('intall_id', $request['install_id']);
}
// 状态
if (!empty($request['stauas'])) {
if($request['stauas']==1){
// 未接单
$query->where("orders_sertatus",1);
}elseif($request['stauas']==3){
// 已接单,但是不包括已完成
$query->whereIn("orders_sertatus",[2,4,5]);
}
}
// 技师服务状态:0未派单1未接单2已接单3已拒单4已检验5安装中6已安装完成
if (!empty($request['service_state'])) {
$query->where('orders_sertatus', $request['service_state']);
}
})
->select('ol.id', 'ol.sys_num', 'order_num', 'ol.sys_num as serial_number','ol.reminder', 'p_id', 'orders_sertatus as service_state','ol.lock_type as lock_state', 'intall_person', 'intall_phone', 'crma_id', 'ol.distrib_time as create_time', 'shr_name', 'shr_phone', 'shr_sheng', 'shr_shi', 'shr_xian', 'shr_adress','company_id','admin_id')
->orderby('ol.distrib_time', 'desc')
->paginate($show_count);
$page['count'] = 0;
$page['page'] = 0;
$page['page_size'] = $show_count;
$page['allPage'] = 0;
$data['list'] = [];
$data['page'] = $page;
// 'negotiated_price as orli_actual_price' 服务费
$list_items = $list_data->items();
if ($list_items) {
$list_items = objectToArray($list_items);
$p_id = array_unique(array_column($list_items, 'p_id')); //来源id
$crma_id = array_unique(array_column($list_items, 'crma_id')); //施工工艺id
$orli_id = array_unique(array_column($list_items, 'id')); //工单id
$company_id = array_unique(array_column($list_items, 'company_id')); //公司id
$admin_id = array_unique(array_column($list_items, 'admin_id')); //派单人id
//查询派单公司信息
$company_data = DB::table('company_data')
->whereIn('cm_id', $company_id)
->pluck('cm_name', 'cm_id')->toArray();
//派单人电话
$admin_phone = DB::table('admin_infor')
->whereIn('admin_id', $admin_id)
->pluck('phone', 'admin_id')->toArray();
// 查询平台信息
$find_pt_data = DB::table('pt')
->whereIn('id', $p_id)
->pluck('pt_name', 'id')->toArray();
// 查询施工工艺信息
$find_craft_data = DB::table('craft_manage')
->whereIn('crma_id', $crma_id)
->pluck('crma_name', 'crma_id')->toArray();
foreach ($list_items as $key => $value) {
// reminder
$list_items[$key]['reminder_count']=$value['reminder']==1?1:0; // 是否锁定
// 计算总服务费
$list_items[$key]['orli_actual_price']=(float)Db::table('order_list')
->where('sys_num',$value['sys_num'])
->where('ser_id', $request['admin_id'])
->where('is_delete', 1)
->sum("negotiated_price");
// 计算已完成数量
$list_items[$key]['complete_num']=(int)Db::table('order_list')
->where('sys_num',$value['sys_num'])
->where('ser_id', $request['admin_id'])
->where('is_delete', 1)
->where('service_state', 6)
->where('orli_reject', 1)
->count();
// 订单状态处理
if($value['service_state']==1){
$list_items[$key]['stauas']=1;
}elseif(in_array($value['service_state'],[2,4,5])){
$list_items[$key]['stauas']=3;
}else{
$list_items[$key]['stauas']=4;
}
// 业务来源
if (isset($find_pt_data[$value['p_id']])) {
$list_items[$key]['pt_name'] = $find_pt_data[$value['p_id']];
} else {
$list_items[$key]['pt_name'] = '';
}
//派单公司
if (isset($company_data[$value['company_id']])) {
$list_items[$key]['company_name'] = $company_data[$value['company_id']];
} else {
$list_items[$key]['company_name'] = '';
}
//派单人电话
if (isset($admin_phone[$value['admin_id']])) {
$list_items[$key]['admin_phone'] = $admin_phone[$value['admin_id']];
} else {
$list_items[$key]['admin_phone'] = '未设置';
}
if (isset($find_craft_data[$value['crma_id']])) {
$list_items[$key]['crma_name'] = $find_craft_data[$value['crma_id']];
} else {
$list_items[$key]['crma_name'] = '';
}
// 计算接单耗时
$consu_create_time = DB::table('orderserver_time')
->where('ser_id',$request['admin_id'])
->where('serial_number',$value['sys_num'])
->where('order_num',$value['order_num'])
->where('is_type','接单时间')
->orderBy('id','desc')
->select('create_time')
->first();
$list_items[$key]['time_consuming'] = '';
if(!empty($consu_create_time)){
$list_items[$key]['time_consuming']=calculateTimeInterval($value['create_time'], $consu_create_time->create_time);
}
// 获取第一个字符
$mb_first = mb_substr($value['shr_name'], 0, 1, 'utf-8');
$list_items[$key]['first_name'] = $mb_first;
$list_items[$key]['shr_phone'] = substr_replace($list_items[$key]['shr_phone'], '****', 3, 4);
$list_items[$key]['orders_vehicle'] = OrdersVehicleService::getOrderVehicle($value['sys_num']);
}
$page['count'] = $list_data->total(); //总数据个数
$page['page'] = $list_data->currentPage(); //当前页面页码
$page['page_size'] = $show_count; //一页显示多少个
$page['allPage'] = $list_data->lastPage(); //表示最后一页的页码
$data['list'] = $list_items;
$data['page'] = $page;
}
// 查询施工的状态统计数据
$state_count = DB::table('orders')
->where('is_delete', 1)
->where('ser_id', $request['admin_id']) //服务商id
->whereIn("orders_sertatus",[1,2,4,5,6])
->where(function ($query) use ($request) {
// 安装人员
if (!empty($request['install_id']) && $request['user_type'] == 1) {
$query->where('intall_id', $request['install_id']);
}
})
->select(DB::raw('count(*) as count, orders_sertatus as stauas'))
->groupBy('orders_sertatus')
->get();
if ($state_count) {
$state_count = objectToArray($state_count);
}
$data['state_count'] = $state_count;
// 查询接单的状态统计数据,改为用上面查询出来的组装就行,因为数据格式完全变了,从订单表查了,所以根据上面的状态就可以获取数量了
$wjd_num=0;
$yjd_num=0;
foreach ($state_count as $key => $val) {
if($val['stauas']==1){
$wjd_num+=$val['count'];
}elseif(in_array($val['stauas'],[2,4,5])){
$yjd_num+=$val['count'];
}
}
$stauas_count=[];
if($wjd_num > 0){
$stauas_count[]=['count'=>$wjd_num,'stauas'=>1];
}
if($yjd_num > 0){
$stauas_count[]=['count'=>$yjd_num,'stauas'=>3];
}
$data['stauas_count'] = $stauas_count;
if ($data['list']) {
return ['ErrorCode' => 1, 'ErrorMessage' => '成功', 'Data' => $data];
} else {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '暂无数据', 'Data' => $data];
}
}
public static function tempFunction($request, $show_count = 10)
{
if (!isset($request['user_type'])) {
$request['user_type'] = 1;
}
// 查询列表
$list_data = DB::table('order_list as ol')
->leftJoin('user as u', 'ol.customer_id', '=', 'u.id')
->where('ser_id', $request['admin_id']) //服务商id
->where('is_delete', 1) //是否删除:1正常2删除
->where(function ($query) use ($request) {
// 安装人员
if (!empty($request['install_id']) && $request['user_type'] == 1) {
$query->where('install_id', $request['install_id']);
}
// 状态
if (!empty($request['stauas'])) {
$query->where('stauas', $request['stauas']);
}
// 技师服务状态:0未派单1未接单2已接单3已拒单4已检验5安装中5已安装完成
if (!empty($request['service_state'])) {
$query->where('service_state', $request['service_state']);
}
})
->select('ol.id', 'ol.sys_num', 'order_num', 'serial_number', 'p_id', 'stauas', 'service_state', 'intall_person', 'intall_phone', 'lock_state', 'negotiated_price as orli_actual_price', 'crma_id', 'reminder_count', 'ol.create_time', 'shr_name', 'shr_phone', 'shr_sheng', 'shr_shi', 'shr_xian', 'shr_adress')
->orderby('ol.id', 'desc')
->paginate($show_count);
$page['count'] = 0;
$page['page'] = 0;
$page['page_size'] = $show_count;
$page['allPage'] = 0;
$data['list'] = [];
$data['page'] = $page;
$list_items = $list_data->items();
if ($list_items) {
$list_items = objectToArray($list_items);
// dd($list_items);
$p_id = array_unique(array_column($list_items, 'p_id')); //来源id
$crma_id = array_unique(array_column($list_items, 'crma_id')); //施工工艺id
$orli_id = array_unique(array_column($list_items, 'id')); //工单id
// 查询平台信息
$find_pt_data = DB::table('pt')
->whereIn('id', $p_id)
->pluck('pt_name', 'id')->toArray();
// 查询施工工艺信息
$find_craft_data = DB::table('craft_manage')
->whereIn('crma_id', $crma_id)
->pluck('crma_name', 'crma_id')->toArray();
// 查询接单时间数据
$find_receive_duration = DB::table('order_list_details')
->whereIn('orli_id', $orli_id)
->pluck('receive_duration', 'orli_id')->toArray();
foreach ($list_items as $key => $value) {
// 业务来源
if (isset($find_pt_data[$value['p_id']])) {
$list_items[$key]['pt_name'] = $find_pt_data[$value['p_id']];
} else {
$list_items[$key]['pt_name'] = '';
}
if (isset($find_craft_data[$value['crma_id']])) {
$list_items[$key]['crma_name'] = $find_craft_data[$value['crma_id']];
} else {
$list_items[$key]['crma_name'] = '';
}
if (isset($find_receive_duration[$value['id']])) {
$list_items[$key]['time_consuming'] = $find_receive_duration[$value['id']];
} else {
$list_items[$key]['time_consuming'] = '';
}
// 获取第一个字符
$mb_first = mb_substr($value['shr_name'], 0, 1, 'utf-8');
$list_items[$key]['first_name'] = $mb_first;
$list_items[$key]['orders_vehicle'] = OrdersVehicleService::getOrderVehicle($value['sys_num']);
}
$page['count'] = $list_data->total(); //总数据个数
$page['page'] = $list_data->currentPage(); //当前页面页码
$page['page_size'] = $show_count; //一页显示多少个
$page['allPage'] = $list_data->lastPage(); //表示最后一页的页码
$data['list'] = $list_items;
$data['page'] = $page;
}
// 查询施工的状态统计数据
$state_count = DB::table('order_list')
->where('is_delete', 1)
->where('ser_id', $request['admin_id']) //服务商id
->where(function ($query) use ($request) {
// 安装人员
if (!empty($request['install_id']) && $request['user_type'] == 1) {
$query->where('install_id', $request['install_id']);
}
})
->select(DB::raw('count(*) as count, service_state as stauas'))
->groupBy('service_state')
->get()->toArray();
$data['state_count'] = $state_count;
// 查询接单的状态统计数据
$stauas_count = DB::table('order_list')
->where('is_delete', 1)
->where('ser_id', $request['admin_id']) //服务商id
->where(function ($query) use ($request) {
// 安装人员
if (!empty($request['install_id']) && $request['user_type'] == 1) {
$query->where('install_id', $request['install_id']);
}
})
->select(DB::raw('count(*) as count, stauas'))
->groupBy('stauas')
->get()->toArray();
$data['stauas_count'] = $stauas_count;
if ($data['list']) {
return ['ErrorCode' => 1, 'ErrorMessage' => '成功', 'Data' => $data];
} else {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '暂无数据', 'Data' => $data];
}
}
// 接单
public static function receiving($request)
{
// 查询服务单表信息
$find_order = DB::table('orders')->where('id', $request['id'])
->where('is_delete', 1)
->select('id', 'sys_num', 'order_num', 'order_status', 'lock_type', 'ser_id', 'p_id', 'seco_id', 'customer_id', 'create_time','distrib_time', 'orders_sertatus')
->first();
// 判断是否已派单
if (empty($find_order)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_order = objectToArray($find_order);
// 判断是否派单是否锁定
if($find_order['order_status'] != 5){
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前服务单不是待接单状态!', 'Data' => []];
}
if ($find_order['lock_type'] != 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前服务单已锁定,无法接单!', 'Data' => []];
}
// 获取所有的工单数据
$order_list = DB::table('order_list')
->where('sys_num', $find_order['sys_num'])
->where('is_delete', 1)
->select('id', 'serial_number', 'stauas','create_time', 'service_state', 'negotiated_price','company_id','lock_state')
->get();
if (empty($order_list)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到服务工单', 'Data' => []];
}
$order_list = objectToArray($order_list);
// 顺便判断一下工单状态
foreach ($order_list as $key => $val) {
if ($val['service_state'] != 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单不是待接单状态!', 'Data' => []];
}
}
$user_info = CommonService::webgetUserInfo($request['api_token']);
// 查询安装人员信息
$find_person = InstallPerson::where('id', $request['receive_install_id'])
->where('admin_id', $find_order['ser_id'])
->where('delet_y', 1)
->select('id', 'install_name', 'install_phone')
->first();
if (empty($find_person)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到安装人员', 'Data' => []];
}
DB::beginTransaction();
// 更改订单表信息
$order_data=[];
$order_data['orders_sertatus'] = 2;
$order_data['order_status'] = 7; //订单状态:5施工未接单(服务已派单)6施工已接单7施工中8施工完成
$order_data['intall_id'] = $find_person['id']; //安装人员id
$order_data['intall_person'] = $find_person['install_name']; //安装人员姓名
$order_data['intall_phone'] = $find_person['install_phone']; //安装师傅电话
$order_data['update_time'] = date('Y-m-d H:i:s');
$ord_edit_res = Orders::where('id', $find_order['id'])->update($order_data);
// 更改工单信息
$service_data=[];
$service_data['stauas'] = 3; //1未接单2已接单【废弃】3安装中4完成待审核
$service_data['service_state'] = 2; //技师服务状态:0未派单1未接单2已接单
$service_data['install_id'] = $find_person['id']; //安装人员id
$service_data['intall_person'] = $find_person['install_name']; //安装人
$service_data['intall_phone'] = $find_person['install_phone']; //安装师傅电话
$deor_res = DB::table('order_list')
->where('sys_num', $find_order['sys_num'])
->where('is_delete', 1)
->update($service_data);
$settlement_res=true;
$add_semo_res =true;
$now_time = date('Y-m-d H:i:s');
$serial_numArr=[];
// 生成服务工单的结算数据
foreach ($order_list as $key => $val) {
$serial_numArr[]=$val['serial_number'];
$settlement_data=[];
$settlement_data['sys_num'] = $find_order['sys_num'];
$settlement_data['order_num'] = $find_order['order_num'];
$settlement_data['serial_number'] = $val['serial_number'];
$settlement_data['list_id'] = $val['id'];
// 服务工单结算单号
// $wat_num = 'JF' . date("YmdHis") . str_pad(rand(0, 999), 3, '0', STR_PAD_LEFT);
// $settlement_data['wat_num'] = $wat_num;
$settlement_data['p_id'] = $find_order['p_id'];
$settlement_data['ser_id'] = $find_order['ser_id'];
$settlement_data['seco_id'] = $find_order['seco_id'];
$settlement_data['installperson'] = $find_person['id'];
$settlement_data['intall_person'] = $find_person['install_name'];
$settlement_data['intall_phone'] = $find_person['install_phone'];
$settlement_data['customer_id'] = $find_order['customer_id'];
$settlement_data['lock_state'] = $val['lock_state'];
$settlement_data['all_price'] = $val['negotiated_price'];
$settlement_data['order_price'] = $val['negotiated_price'];
$settlement_data['list_service_type'] = $service_data['stauas'];
$settlement_data['company_id'] = $val['company_id'];
$settl_res = DB::table('settlement_list')->insertGetId($settlement_data);
if(!$settl_res){
$settlement_res=$settl_res;
}
// 生成结算金额明细表
$add_semo_data=[];
$add_semo_data['sem_slid'] = $settl_res; //结算信息id
$add_semo_data['sem_synum'] = $find_order['sys_num']; //结算单系统单号
$add_semo_data['sem_price'] = $val['negotiated_price']; //结算金额
$add_semo_data['sem_type'] = 1; //金额类型1:供货价;2接单奖励;3:接单惩罚;4:撤销补助;5:代收金额;6:待付金额;7:完成奖励;8:加急奖励;9:夜间奖励
$add_semo_data['sem_creacter'] = $user_info->install_name; //金额添加人
$add_semo_data['add_time'] = $now_time; //添加时间
$semo_res = DB::table('settlement_money')->insert($add_semo_data);
if(!$semo_res){
$add_semo_res=$semo_res;
}
timeLog($val['serial_number'], $find_order['order_num'], $user_info->install_name, "接单时间", date('Y-m-d H:i:s'));
}
// 生成服务工单详情数据
$list_details=[];
$list_details['orli_receive_time'] = $now_time; //工单接单时间
$diff_time = calculateTimeInterval($find_order['distrib_time'], $now_time);
$list_details['receive_duration'] = $diff_time; //接单时长
$list_details['update_time'] = $now_time;
$orld_res = DB::table('order_list_details')
->whereIn('serial_number', $serial_numArr)
->update($list_details);
if ($ord_edit_res && $deor_res && $settlement_res && $orld_res && $add_semo_res) {
sertimeLog($find_order['sys_num'], $find_order['order_num'], $user_info->install_name, "接单时间", date('Y-m-d H:i:s'),$find_order['ser_id']);
DB::commit();
czrzLog("接单,", $find_order['sys_num'], "移动端-接单", "订单系统", request::ip(), $user_info->install_name);
return ['ErrorCode' => 1, 'ErrorMessage' => '接单成功', 'Data' => []];
} else {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '接单失败', 'Data' => []];
}
}
// 拒单
public static function refuse($request)
{
// 查询工单表信息
$find_design_order = DB::table('orders')->where('id', $request['id'])
->where('is_delete', 1)
->select('id', 'sys_num', 'order_num', 'order_status','distrib_time','orders_sertatus', 'lock_type', 'ser_id', 'p_id')
->first();
// 判断是否已派单
if (empty($find_design_order)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_design_order = objectToArray($find_design_order);
if ($find_design_order['orders_sertatus'] == 0) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单未派单!', 'Data' => []];
}
if ($find_design_order['orders_sertatus'] > 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单已接单,无法拒单!', 'Data' => []];
}
if ($find_design_order['lock_type'] != 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单已锁定,无法拒单!', 'Data' => []];
}
// 根据订单id,查询工单是否有完成的
$find_orli_data = DB::table('order_list')
->where('sys_num', $find_design_order['sys_num'])
->where('order_num', $find_design_order['order_num'])
->where('is_delete', 1)
->select('id', 'serial_number', 'stauas')
->get()->toArray();
$find_orli_data = objectToArray($find_orli_data);
foreach ($find_orli_data as $key => $value) {
if ($value['stauas'] == 4) {
return ['ErrorCode' => 500, 'ErrorMessage' => '有一个工单施工已完成,无法拒单', 'Data' => []];
}
}
$user_info = CommonService::webgetUserInfo($request['api_token']);
DB::beginTransaction();
// 更改订单表信息
$order_data=[];
$order_data['order_status'] = 4; //订单状态:4设计完成(服务未派单)5施工未接单(服务已派单)6施工已接单
$order_data['ser_id'] = 0;
$order_data['seco_id'] = 0;
$order_data['orders_sertatus'] = 0;
$order_data['intall_person'] = '';
$order_data['intall_phone'] = '';
$order_data['update_time'] = date('Y-m-d H:i:s');
// $order_data['distrib_time'] = '';
$ord_edit_res = Orders::where('id', $find_design_order['id'])
->update($order_data);
// 更改工单信息
$service_data=[];
$service_data['stauas'] = 8; //工单状态:1未接单2已接单【废弃】3安装中4完成待审核5延期审图6延期结算7已完成8已拒单9已撤销
$service_data['is_delete'] = 2; //是否删除:1正常2删除
$service_data['service_state'] = 3; //技师服务状态:0未派单1未接单2已接单3已拒单
$deor_res = DB::table('order_list')
->where('sys_num', $find_design_order['sys_num'])
->update($service_data);
$orre_res=true;
$settlement_res=true;
foreach ($find_orli_data as $key => $value) {
// 新增拒单记录
$orre_data=[];
$orre_data['ors_order_num'] = $find_design_order['order_num'];
$orre_data['ors_sys_num'] = $find_design_order['sys_num'];
$orre_data['ors_serial_number'] = $value['serial_number'];
$orre_data['ors_ser_id'] = $find_design_order['ser_id'];
$orre_data['ors_pid'] = $find_design_order['p_id'];
$orre_data['ors_year'] = date('Y');
$orre_data['ors_month'] = date('m');
$orre_data['ors_day'] = date('d');
$orre_data['ors_type'] = 2; //拒单类型1设计公司拒单2服务公司拒单
if ($find_design_order['orders_sertatus'] == 1) {
$orre_data['ors_status'] = 1; //接单状态1接单前拒单2接单后拒单
} else {
$orre_data['ors_status'] = 2;
}
$orre_data['ors_remarks'] = $request['remarks'];
$orre_data['ors_adm_id'] = $request['admin_id'];
$or_res = DB::table('order_refused')->insert($orre_data);
if(!$or_res){
$orre_res=$or_res;
}
// 接单后才有结算数据,更改工单结算单数据
$settlement_data=[];
$settlement_data['is_delete'] = 2;
$settlement_data['update_time'] = date('Y-m-d H:i:s');
$settl_res = DB::table('settlement_list')
->where('serial_number', $value['serial_number'])
->update($settlement_data);
if(!$settl_res){
$settlement_res=$settl_res;
}
}
// 备注
$remarks = '';
if (Request::filled('remarks')) {
$remarks = $request['remarks'];
$rest = CommonService::accMe($find_design_order['sys_num'], '服务工单列表拒单', "拒单:" . $remarks,'', '1', $user_info->admin_groupnew, $user_info->install_name, $user_info->admin_id); //添加备注
if (!$rest) {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '备注添加失败', 'Data' => []];
}
}
if ($ord_edit_res && $deor_res && $orre_res) {
DB::commit();
czrzLog("拒单,", $find_design_order['sys_num'], "移动端技师拒单", "订单系统", request::ip(), $user_info->install_name);
return ['ErrorCode' => 1, 'ErrorMessage' => '成功', 'Data' => []];
} else {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '失败', 'Data' => []];
}
}
// 检验
public static function inspect($request)
{
// 查询工单表信息
$find_design_order = DB::table('orders')->where('id', $request['id'])
->where('is_delete', 1)
->select('id', 'sys_num', 'order_num', 'order_status', 'lock_type','orders_sertatus', 'ser_id', 'p_id')
->first();
// 判断是否已派单
if (empty($find_design_order)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_design_order = objectToArray($find_design_order);
if ($find_design_order['orders_sertatus'] != 2) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前服务单不是待检验,无法检验!', 'Data' => []];
}
if ($find_design_order['lock_type'] != 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前服务单已锁定,无法检验!', 'Data' => []];
}
$user_info = CommonService::webgetUserInfo($request['api_token']);
DB::beginTransaction();
$find_orli_data = DB::table('order_list')
->where('sys_num', $find_design_order['sys_num'])
->where('order_num', $find_design_order['order_num'])
->where('is_delete', 1)
->select('id', 'serial_number', 'stauas')
->get()->toArray();
if (empty($find_orli_data)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到服务工单', 'Data' => []];
}
$find_orli_data = objectToArray($find_orli_data);
// 批量添加时间节点
foreach ($find_orli_data as $key => $val) {
timeLog($val['serial_number'], $find_design_order['order_num'], $user_info->install_name, "检验时间", date('Y-m-d H:i:s'));
}
// 更改工单信息
$service_data=[];
$service_data['stauas'] = 3; //工单状态:1未接单2已接单3安装中
$service_data['service_state'] = 4; //技师服务状态:0未派单1未接单2已接单(未检验)3已拒单4已检验5安装中6完成待审核
$deor_res = DB::table('order_list')
->where('sys_num', $find_design_order['sys_num'])
->where('order_num', $find_design_order['order_num'])
->where('is_delete', 1)
->update($service_data);
$order_res=DB::table('orders')
->where('id', $request['id'])
->update(['orders_sertatus'=>4]);
if ($deor_res && $order_res) {
DB::commit();
sertimeLog($find_design_order['sys_num'], $find_design_order['order_num'], $user_info->install_name, "检验时间", date('Y-m-d H:i:s'),$find_design_order['ser_id']);
return ['ErrorCode' => 1, 'ErrorMessage' => '检验成功', 'Data' => []];
} else {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '失败', 'Data' => []];
}
}
// 开始安装
public static function startInstall($request)
{
// 查询工单表信息
$find_design_order = DB::table('orders')->where('id', $request['id'])
->where('is_delete', 1)
->select('id', 'sys_num', 'order_num', 'order_status', 'lock_type','orders_sertatus', 'ser_id', 'p_id')
->first();
// 判断是否已派单
if (empty($find_design_order)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_design_order = objectToArray($find_design_order);
if ($find_design_order['orders_sertatus'] != 4) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前服务单未检验!', 'Data' => []];
}
if ($find_design_order['lock_type'] != 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前服务单已锁定,无法拒单!', 'Data' => []];
}
$user_info = CommonService::webgetUserInfo($request['api_token']);
DB::beginTransaction();
$find_orli_data = DB::table('order_list')
->where('sys_num', $find_design_order['sys_num'])
->where('order_num', $find_design_order['order_num'])
->where('is_delete', 1)
->select('id', 'serial_number', 'stauas')
->get()->toArray();
if (empty($find_orli_data)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到服务工单', 'Data' => []];
}
$find_orli_data = objectToArray($find_orli_data);
// 批量添加时间节点
foreach ($find_orli_data as $key => $val) {
timeLog($val['serial_number'], $find_design_order['order_num'], $user_info->install_name, "开始安装", date('Y-m-d H:i:s'));
}
// 更改工单信息
$service_data=[];
$service_data['stauas'] = 3; //工单状态:1未接单2已接单3安装中
$service_data['service_state'] = 5; //技师服务状态:0未派单1未接单2已接单3已拒单4已检验5安装中6已安装完成
$deor_res = DB::table('order_list')
->where('sys_num', $find_design_order['sys_num'])
->where('order_num', $find_design_order['order_num'])
->where('is_delete', 1)
->update($service_data);
$order_res=DB::table('orders')
->where('id', $request['id'])
->update(['orders_sertatus'=>5]);
if ($deor_res && $order_res) {
DB::commit();
// czrzLog("拒单,", $find_design_order['serial_number'], "移动端技师拒单", "订单系统", request::ip(), $user_info->install_name);
sertimeLog($find_design_order['sys_num'], $find_design_order['order_num'], $user_info->install_name, "开始安装", date('Y-m-d H:i:s'),$find_design_order['ser_id']);
return ['ErrorCode' => 1, 'ErrorMessage' => '已开始施工', 'Data' => []];
} else {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '开始施工失败', 'Data' => []];
}
}
// 申请完成
public static function installFeedback($request)
{
// 查询工单表信息
$find_design_order = DB::table('orders')->where('id', $request['id'])
->where('is_delete', 1)
->select('id', 'sys_num', 'order_num', 'order_status', 'lock_type','orders_sertatus', 'ser_id', 'p_id')
->first();
// 判断是否已派单
if (empty($find_design_order)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_design_order = objectToArray($find_design_order);
if ($find_design_order['orders_sertatus'] != 5) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单未安装!', 'Data' => []];
}
if ($find_design_order['lock_type'] != 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单已锁定,无法拒单!', 'Data' => []];
}
$user_info = CommonService::webgetUserInfo($request['api_token']);
// 获取所有的工单数据
$order_list = DB::table('order_list')
->where('sys_num', $find_design_order['sys_num'])
->where('is_delete', 1)
->select('id', 'serial_number', 'service_state','orli_reject')
->get();
if (empty($order_list)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到服务工单', 'Data' => []];
}
$order_list = objectToArray($order_list);
// 顺便判断一下工单状态
foreach ($order_list as $key => $val) {
if ($val['service_state'] != 5 && $val['service_state'] != 6) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单不是施工反馈状态!', 'Data' => []];
}
}
DB::beginTransaction();
// 更改工单信息
$service_data=[];
$service_data['stauas'] = 4; //工单状态:1未接单2已接单3安装中4待完成5已完成6已拒单7已撤销
$service_data['service_state'] = 6; //技师服务状态:0未派单1未接单2已接单3已拒单4已检验5安装中6已安装完成
$service_data['update_time'] = date('Y-m-d H:i:s');
$service_data['orli_reject'] = 1;
// 更改服务工单结算表
$seli_edit_data=[];
$seli_edit_data['list_service_type'] = $service_data['stauas']; //派工单状态:1未接单2已接单【废弃】3安装中4完成待审核5已完成6已拒单7已撤销8延期审图9延期结算
$seli_edit_data['update_time'] = date('Y-m-d H:i:s'); //更新时间
$is_edit=0;
$is_over=0;
$deor_res=true;
foreach ($order_list as $key => $val) {
if($val['service_state']==6 && $val['orli_reject']==1){
$is_edit++;
continue;
}
// 部分完成则判断是否有上传图片
if($request['type']==1){
// 判断是否有图片反馈
$feed_res=Db::table('feedback')
->where('gl_id',$val['id'])
->where('is_delete', 1)
->select("id")
->get()->toArray();
if(empty($feed_res)){
$is_over++;
continue;
}
}
$is_edit++;
// 更改工单信息
$orli_res = DB::table('order_list')
->where('id', $val['id'])
->update($service_data);
if(!$orli_res){
$deor_res=$orli_res;
}
$seli_edit_res = DB::table('settlement_list')
->where('serial_number', $val['serial_number'])
->where('list_id', $val['id'])
->update($seli_edit_data);
timeLog($val['serial_number'], $find_design_order['order_num'], $user_info->install_name, "反馈时间", date('Y-m-d H:i:s'));
}
$order_data=[];
$order_data['order_status'] = 8;
$order_data['update_time'] = date('Y-m-d H:i:s');
$order_data['orders_sertatus']=5;
if($is_over==0){
$order_data['orders_sertatus']=6;
}
// 更改订单信息
$ord_res = DB::table('orders')
->where('id', $find_design_order['id'])
->update($order_data);
if ($deor_res && $ord_res) {
DB::commit();
$str=$order_data['orders_sertatus']==5?'部分反馈':'反馈时间';
sertimeLog($find_design_order['sys_num'], $find_design_order['order_num'], $user_info->install_name, $str, date('Y-m-d H:i:s'),$find_design_order['ser_id']);
return ['ErrorCode' => 1, 'ErrorMessage' => '施工申请完成', 'Data' => []];
} else {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '申请完成失败', 'Data' => []];
}
}
// 施工图片反馈
public static function imageFeedback($request){
// 查询工单表信息
$find_design_order = DB::table('order_list')
->where('id', $request['id'])
->where('is_delete', 1)
->select('id', 'serial_number', 'sys_num', 'order_num', 'ord_id', 'service_state', 'lock_state', 'ser_id', 'p_id')
->first();
// 判断是否已派单
if (empty($find_design_order)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_design_order = objectToArray($find_design_order);
if ($find_design_order['service_state'] != 5) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单状态错误!', 'Data' => []];
}
$find_inpe_data = DB::table('install_person')
->where('admin_id', $request['admin_id'])
->where('delet_y', 1)
->select('install_name', 'install_phone')
->first();
$find_inpe_data = objectToArray($find_inpe_data);
// 查询成员账号信息表
$find_adm_data = DB::table('admin')
->where('id', $request['admin_id'])
->select('admin_acc', 'company_name')
->first();
$find_adm_data = objectToArray($find_adm_data);
$image_url=$request['image_url'];
$image_id=$request['image_id'];
$image_type=$request['image_type'];
if($image_url =='undefined'){
return ['ErrorCode' => 500, 'ErrorMessage' => $image_type.'上传失败请重新上传', 'Data' => []];
}
DB::beginTransaction();
$edit_res=true;
// 不是0 则为编辑
if($image_id != 0){
$image_data=Db::table('feedback')
->where('gl_id',$request['id'])
->where('is_delete', 1)
->where('id',$image_id)
->select('feedback_pic')
->first();
if(!empty($image_data)){
$image_path=$image_data->feedback_pic;
// http://3m127.bluearp.com/storage/app/public/image/2022/11/15/166848425637152.jpg
// http://3m127.bluearp.com/storage/image/2022/11/15/166848420917354.jpg
// url 路径里 app/public 被忽略了;
// $image_path=str_replace('storage/image','storage/app/public/image',$image_path);
// $image_path=substr($image_path,strpos($image_path,'storage/app'));
$image_path=substr($image_path,strpos($image_path,'storage'));
// dd(11);
if(file_exists($image_path)){
unlink($image_path);
}
Db::table('feedback')
->where('gl_id',$request['id'])
->where('is_delete', 1)
->where('id',$image_id)
->delete();
}
}
$add_feed=[];
$add_feed['type'] = 1; //图片类型
$add_feed['gl_id'] = $request['id']; //反馈关联id
$add_feed['install_name'] = $find_inpe_data['install_name']; //安装人员姓名
$add_feed['install_phone'] = $find_inpe_data['install_phone']; //安装电话
$add_feed['install_remark'] = ''; //安装备注
$add_feed['install_time'] = date('Y-m-d H:i:s'); //安装时间
$add_feed['admin_id'] = $request['admin_id']; //所属服务中心id
$add_feed['company_name'] = $find_adm_data['company_name']; //服务中心名称
$add_feed['feedback_status'] = 2; //是否安装
$add_feed['feedback_pic'] = $image_url; //凭证图片
$add_feed['sys_num'] = 'rwfk' . $request['id']; //所属服务中心id
$add_feed['is_type'] = 2; //1微信2第三方
$add_feed['type_name'] = $image_type; //类型名称
$add_feed_id = DB::table('feedback')->insertGetId($add_feed);
if ($add_feed_id && $edit_res) {
DB::commit();
return ['ErrorCode' => 1, 'ErrorMessage' => '图片回传成功', 'Data' => ['feed_id'=>$add_feed_id]];
} else {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => $add_feed_id.'图片回传失败'.$edit_res, 'Data' => []];
}
}
// 施工时 车牌车架号反馈
public static function LicenseFeedback($request){
// 查询工单表信息
$find_design_order = DB::table('orders')->where('id', $request['id'])
->where('is_delete', 1)
->select('id', 'sys_num', 'order_num', 'order_status', 'lock_type','orders_sertatus', 'ser_id', 'p_id')
->first();
// 判断是否已派单
if (empty($find_design_order)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_design_order = objectToArray($find_design_order);
if ($find_design_order['orders_sertatus'] != 5) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前服务单状态错误!', 'Data' => []];
}
if ($find_design_order['lock_type'] != 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前服务单已锁定,无法反馈!', 'Data' => []];
}
$license_plate=$request['license_plate'];
if($license_plate != ''){
$repeat_res = DB::table('order_list')
->where('sys_num', $find_design_order['sys_num'])
->where('is_delete', 1)
->where('id','<>',$request['gd_id'])
->where('license_plate',$license_plate)
->select('id')
->get()
->toArray();
if(!empty($repeat_res)){
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '车牌/车架号填写重复', 'Data' => []];
}
}
$res=DB::table('order_list')
->where('sys_num', $find_design_order['sys_num'])
->where('is_delete', 1)
->where('id',$request['gd_id'])
->update(['license_plate'=>(string)$license_plate,'update_time'=>date('Y-m-d H:i:s')]);
if($res){
return ['ErrorCode' => 1, 'ErrorMessage' => '回传车架号成功', 'Data' => []];
}else{
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '保存车架号失败', 'Data' => []];
}
}
// 获取工单反馈信息
public static function getFeedback($request)
{
// 查询服务单表信息
$orders_data = DB::table('orders')
->where('id', $request['id'])
->where('is_delete', 1)
->select('id','sys_num')
->first();
if (empty($orders_data)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到服务单', 'Data' => []];
}
// 获取所有的工单数据
$order_list = DB::table('order_list')
->where('sys_num', $orders_data->sys_num)
->where('is_delete', 1)
->select('id','serial_number',"sys_num", 'license_plate','service_state','orli_reject')
->orderBy('service_state')
->get();
if (empty($order_list)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到工单', 'Data' => []];
}
$order_list = objectToArray($order_list);
$no_pic=[];
$no_pic['gl_id'] = 0;
$no_pic['feedback_pic'] = config('apisystem.HTTP_URL') . 'image/icon/webapp_no_pictures.png';
$no_pic['type_name'] = '暂无图片';
foreach ($order_list as $key => $val) {
// 查询反馈信息
$list_data = DB::table('feedback')
->where('gl_id',$val['id'])
->where('is_delete', 1)
->select("id",'gl_id', 'feedback_pic', 'type_name')
->orderBy('type_name','asc')
->get()->toArray();
if (empty($list_data)) {
$list_data = [$no_pic];
}
$order_list[$key]['list_data']=$list_data;
}
return ['ErrorCode' => 1, 'ErrorMessage' => '获取信息成功', 'Data' => $order_list];
}
// 详情
public static function info($request)
{
$find_orli_data=DB::table('orders as ol')
->leftJoin('user as u', 'ol.new_customer_id', '=', 'u.id')
->where('ol.id', $request['id'])
->where('is_delete', 1) //是否删除:1正常2删除
->select('ol.id', 'ol.sys_num',"ol.ser_id", 'order_num', 'ol.sys_num as serial_number','customer_id','ol.reminder', 'p_id', 'orders_sertatus as service_state','ol.lock_type as lock_state', 'intall_person', 'intall_phone', 'crma_id', 'ol.distrib_time as create_time', 'shr_name', 'shr_phone', 'shr_sheng', 'shr_shi', 'shr_xian', 'shr_adress','company_id','admin_id')
->first();
// 查询工单表信息
// time_consuming 接单耗时 orli_actual_price 服务总价
// 判断是否已派单
if (empty($find_orli_data)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_orli_data = objectToArray($find_orli_data);
$find_orli_data['company_name'] = Db::table('company_data')->where("cm_id",$find_orli_data['company_id'])->value('cm_name');
$find_orli_data['admin_phone'] = Db::table('admin_infor')->where("admin_id",$find_orli_data['admin_id'])->value('phone');
$find_orli_data['orli_actual_price']=(float)Db::table('order_list')
->where('sys_num',$find_orli_data['sys_num'])
->where('ser_id', $find_orli_data['ser_id'])
->where('is_delete', 1)
->sum("negotiated_price");
$find_orli_data['complete_num']=(int)Db::table('order_list')
->where('sys_num',$find_orli_data['sys_num'])
->where('ser_id', $find_orli_data['ser_id'])
->where('is_delete', 1)
->where('service_state', 6)
->where('orli_reject', 1)
->count();
$consu_create_time = DB::table('orderserver_time')
->where('ser_id',$find_orli_data['ser_id'])
->where('serial_number',$find_orli_data['sys_num'])
->where('order_num',$find_orli_data['order_num'])
->where('is_type','接单时间')
->orderBy('id','desc')
->select('create_time')
->first();
$find_orli_data['time_consuming'] = '';
if(!empty($consu_create_time)){
$find_orli_data['time_consuming']=calculateTimeInterval($find_orli_data['create_time'], $consu_create_time->create_time);
}
// 查询车辆信息
$find_vehicle = OrdersVehicleService::getOrderVehicle($find_orli_data['sys_num']);
$find_orli_data['orders_vehicle'] = $find_vehicle;
// 查询贴装工艺
$find_crma_data = DB::table('craft_manage')
->where('crma_id', $find_orli_data['crma_id'])
->select('crma_name')
->first();
$find_crma_data = objectToArray($find_crma_data);
if ($find_crma_data) {
$find_orli_data['crma_name'] = $find_crma_data['crma_name']; //施工工艺名称
} else {
$find_orli_data['crma_name'] = ''; //施工工艺名称
}
// 查询设计图
$find_deod_data = DB::table('design_order_detail')
->where('sys_num', $find_orli_data['sys_num']) //订单编号
->where('ord_id', $find_orli_data['id']) //订单id
->where('audit_state', 2) //审核状态:1已提交2已通过3已驳回
->where('is_delete', 1) //是否删除:1正常2删除
->select('sys_num', 'design_drawing')
->get()->toArray();
$find_orli_data['design_order_detail'] = $find_deod_data;
// 查询备注
$find_note = DB::table('note')
->where('orders_id', $find_orli_data['sys_num'])
->where('is_delet', 1)
->select('note_content', 'note_type', 'note_time', 'note_name')
->orderBy('note_time', 'desc')
->get()->toArray();
$find_note = objectToArray($find_note);
$find_orli_data['orders_note'] = $find_note;
$find_orli_data['shr_phone'] = substr_replace($find_orli_data['shr_phone'], '****', 3, 4);
unset($find_orli_data['crma_id']);
return ['ErrorCode' => 1, 'ErrorMessage' => '获取成功', 'Data' => $find_orli_data];
}
// 获取技师
public static function getInstallPerson($request)
{
// 查询工单表信息
$find_inpe_data = InstallPerson::where('delet_y', 1)
->where('admin_id', $request['admin_id'])
->where('install_is_type', 1) //状态:1启用2停用
->where(function ($query) use ($request) {
if (!empty($request['install_name'])) {
$query->where('check_code', 'like', '%' . $request['install_name'] . '%')
->orWhere('install_name', 'like', '%' . $request['install_name'] . '%');
}
})
->select('id', 'check_code', 'install_name')
->get()->toArray();
return ['ErrorCode' => 1, 'ErrorMessage' => '获取成功', 'Data' => $find_inpe_data];
}
// 获取标签
public static function getLabel($request)
{
// 查询工单表信息
$find_sety_data = DB::table('setmoney_type')
->where('lt_parent_id', 694)
->where('lt_statues', 1)
->where(function ($query) use ($request) {
if (!empty($request['sety_name'])) {
$query->where('sety_name', 'like', '%' . $request['sety_name'] . '%');
}
})
->select('sety_id', 'sety_name')
->get()->toArray();
return ['ErrorCode' => 1, 'ErrorMessage' => '获取成功', 'Data' => $find_sety_data];
}
// 获取操作记录
public static function operatingRecord($request)
{
// 查询操作表信息
$find_data = DB::table('orderserver_time')
->where('serial_number', $request['serial_number'])
->where('ser_id', $request['admin_id'])
->select('create_time', 'is_type')
->orderby('id', 'desc')
->get()->toArray();
return ['ErrorCode' => 1, 'ErrorMessage' => '获取成功', 'Data' => $find_data];
}
}
<?php
namespace App\Services\Api\MobileWeb;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Facades\DB;
use BlueCity\Core\Inc\ErrorInc;
use App\Models\{Orders, InstallPerson};
use App\Services\{BmmcService, Api\OrderManage\OrdersVehicleService};
use App\Services\Api\Common\{CommonService};
class OrderListService extends Model
{
// 列表查询
public static function index($request, $show_count = 10)
{
if (!isset($request['user_type'])) {
$request['user_type'] = 1;
}
// 查询列表
$list_data = DB::table('order_list as ol')
->leftJoin('user as u', 'ol.customer_id', '=', 'u.id')
->where('ser_id', $request['admin_id']) //服务商id
->where('is_delete', 1) //是否删除:1正常2删除
->where(function ($query) use ($request) {
// 安装人员
if (!empty($request['install_id']) && $request['user_type'] == 1) {
$query->where('install_id', $request['install_id']);
}
// 状态
if (!empty($request['stauas'])) {
$query->where('stauas', $request['stauas']);
}
// 技师服务状态:0未派单1未接单2已接单3已拒单4已检验5安装中5已安装完成
if (!empty($request['service_state'])) {
$query->where('service_state', $request['service_state']);
}
})
->select('ol.id', 'ol.sys_num', 'order_num', 'serial_number', 'p_id', 'stauas', 'service_state', 'intall_person', 'intall_phone', 'lock_state', 'negotiated_price as orli_actual_price', 'crma_id', 'reminder_count', 'ol.create_time', 'shr_name', 'shr_phone', 'shr_sheng', 'shr_shi', 'shr_xian', 'shr_adress')
->orderby('ol.id', 'desc')
->paginate($show_count);
$page['count'] = 0;
$page['page'] = 0;
$page['page_size'] = $show_count;
$page['allPage'] = 0;
$data['list'] = [];
$data['page'] = $page;
// "id" => 268
// "sys_num" => "L20221109141636789"
// "order_num" => "L20221109141636789"
// "serial_number" => "GF20221109141752278"
// "p_id" => 1
// "stauas" => 1
// "service_state" => 1
// "intall_person" => ""
// "intall_phone" => ""
// "lock_state" => 1
// "orli_actual_price" => "5000.00" negotiated_price
// "crma_id" => 6
// "reminder_count" => 0 //催单次数
// "create_time" => "2022-11-09 14:17:52"
// "shr_name" => "121"
// "shr_phone" => "12711112222"
// "shr_sheng" => "黑龙江"
// "shr_shi" => "齐齐哈尔市"
// "shr_xian" => "铁锋区"
// "shr_adress" => "22211"
$list_items = $list_data->items();
if ($list_items) {
$list_items = objectToArray($list_items);
// dd($list_items);
$p_id = array_unique(array_column($list_items, 'p_id')); //来源id
$crma_id = array_unique(array_column($list_items, 'crma_id')); //施工工艺id
$orli_id = array_unique(array_column($list_items, 'id')); //工单id
// 查询平台信息
$find_pt_data = DB::table('pt')
->whereIn('id', $p_id)
->pluck('pt_name', 'id')->toArray();
// 查询施工工艺信息
$find_craft_data = DB::table('craft_manage')
->whereIn('crma_id', $crma_id)
->pluck('crma_name', 'crma_id')->toArray();
// 查询接单时间数据
$find_receive_duration = DB::table('order_list_details')
->whereIn('orli_id', $orli_id)
->pluck('receive_duration', 'orli_id')->toArray();
foreach ($list_items as $key => $value) {
// 业务来源
if (isset($find_pt_data[$value['p_id']])) {
$list_items[$key]['pt_name'] = $find_pt_data[$value['p_id']];
} else {
$list_items[$key]['pt_name'] = '';
}
if (isset($find_craft_data[$value['crma_id']])) {
$list_items[$key]['crma_name'] = $find_craft_data[$value['crma_id']];
} else {
$list_items[$key]['crma_name'] = '';
}
if (isset($find_receive_duration[$value['id']])) {
$list_items[$key]['time_consuming'] = $find_receive_duration[$value['id']];
} else {
$list_items[$key]['time_consuming'] = '';
}
// 获取第一个字符
$mb_first = mb_substr($value['shr_name'], 0, 1, 'utf-8');
$list_items[$key]['first_name'] = $mb_first;
$list_items[$key]['orders_vehicle'] = OrdersVehicleService::getOrderVehicle($value['sys_num']);
}
$page['count'] = $list_data->total(); //总数据个数
$page['page'] = $list_data->currentPage(); //当前页面页码
$page['page_size'] = $show_count; //一页显示多少个
$page['allPage'] = $list_data->lastPage(); //表示最后一页的页码
$data['list'] = $list_items;
$data['page'] = $page;
}
// 查询施工的状态统计数据
$state_count = DB::table('order_list')
->where('is_delete', 1)
->where('ser_id', $request['admin_id']) //服务商id
->where(function ($query) use ($request) {
// 安装人员
if (!empty($request['install_id']) && $request['user_type'] == 1) {
$query->where('install_id', $request['install_id']);
}
})
->select(DB::raw('count(*) as count, service_state as stauas'))
->groupBy('service_state')
->get()->toArray();
$data['state_count'] = $state_count;
// 查询接单的状态统计数据
$stauas_count = DB::table('order_list')
->where('is_delete', 1)
->where('ser_id', $request['admin_id']) //服务商id
->where(function ($query) use ($request) {
// 安装人员
if (!empty($request['install_id']) && $request['user_type'] == 1) {
$query->where('install_id', $request['install_id']);
}
})
->select(DB::raw('count(*) as count, stauas'))
->groupBy('stauas')
->get()->toArray();
$data['stauas_count'] = $stauas_count;
if ($data['list']) {
return ['ErrorCode' => 1, 'ErrorMessage' => '成功', 'Data' => $data];
} else {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '暂无数据', 'Data' => $data];
}
}
// 接单
public static function receiving($request)
{
// 查询服务工单表信息
$find_order = DB::table('order_list')->where('id', $request['id'])
->where('is_delete', 1)
->select('id', 'serial_number', 'sys_num', 'order_num', 'ord_id', 'stauas', 'lock_state', 'ser_id', 'p_id', 'seco_id', 'install_id', 'intall_person', 'intall_phone', 'customer_id', 'create_time', 'service_state', 'negotiated_price','company_id')
->first();
// 判断是否已派单
if (empty($find_order)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_order = objectToArray($find_order);
if ($find_order['service_state'] != 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单不是待接单状态!', 'Data' => []];
}
if ($find_order['lock_state'] != 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单已锁定,无法接单!', 'Data' => []];
}
$user_info = CommonService::webgetUserInfo($request['api_token']);
// 查询安装人员信息
$find_person = InstallPerson::where('id', $request['receive_install_id'])
->where('admin_id', $find_order['ser_id'])
->where('delet_y', 1)
->select('id', 'install_name', 'install_phone')
->first();
if (empty($find_person)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到安装人员', 'Data' => []];
}
DB::beginTransaction();
// 更改订单表信息
$order_data['order_status'] = 7; //订单状态:5施工未接单(服务已派单)6施工已接单7施工中8施工完成
$order_data['intall_id'] = $find_person['id']; //安装人员id
$order_data['intall_person'] = $find_person['install_name']; //安装人员姓名
$order_data['intall_phone'] = $find_person['install_phone']; //安装师傅电话
$order_data['update_time'] = date('Y-m-d H:i:s');
$ord_edit_res = Orders::where('id', $find_order['ord_id'])
->update($order_data);
// 更改工单信息
$service_data['stauas'] = 3; //1未接单2已接单【废弃】3安装中4完成待审核
$service_data['service_state'] = 2; //技师服务状态:0未派单1未接单2已接单
$service_data['install_id'] = $find_person['id']; //安装人员id
$service_data['intall_person'] = $find_person['install_name']; //安装人
$service_data['intall_phone'] = $find_person['install_phone']; //安装师傅电话
$deor_res = DB::table('order_list')
->where('id', $request['id'])
->update($service_data);
// 生成服务工单的结算数据
$settlement_data['sys_num'] = $find_order['sys_num'];
$settlement_data['order_num'] = $find_order['order_num'];
$settlement_data['serial_number'] = $find_order['serial_number'];
$settlement_data['list_id'] = $find_order['id'];
// 服务工单结算单号
// $wat_num = 'JF' . date("YmdHis") . str_pad(rand(0, 999), 3, '0', STR_PAD_LEFT);
// $settlement_data['wat_num'] = $wat_num;
$settlement_data['p_id'] = $find_order['p_id'];
$settlement_data['ser_id'] = $find_order['ser_id'];
$settlement_data['seco_id'] = $find_order['seco_id'];
$settlement_data['installperson'] = $find_order['install_id'];
$settlement_data['intall_person'] = $find_order['intall_person'];
$settlement_data['intall_phone'] = $find_order['intall_phone'];
$settlement_data['customer_id'] = $find_order['customer_id'];
$settlement_data['lock_state'] = $find_order['lock_state'];
$settlement_data['all_price'] = $find_order['negotiated_price'];
$settlement_data['order_price'] = $find_order['negotiated_price'];
$settlement_data['list_service_type'] = $service_data['stauas'];
$settlement_data['company_id'] = $find_order['company_id'];
$settlement_res = DB::table('settlement_list')->insertGetId($settlement_data);
// 生成服务工单详情数据
$now_time = date('Y-m-d H:i:s');
$list_details['orli_receive_time'] = $now_time; //工单接单时间
$diff_time = calculateTimeInterval($find_order['create_time'], $now_time);
$list_details['receive_duration'] = $diff_time; //接单时长
$list_details['update_time'] = $now_time;
$orld_res = DB::table('order_list_details')
->where('orli_id', $request['id'])
->where('serial_number', $find_order['serial_number'])
->update($list_details);
// 生成结算金额明细表
$add_semo_data['sem_slid'] = $settlement_res; //结算信息id
$add_semo_data['sem_synum'] = $find_order['sys_num']; //结算单系统单号
// 根据单号查询订单的车辆信息表
// $find_vein_id = DB::table('orders_vehicle')
// ->where('ord_id', $find_order['ord_id'])
// ->where('sys_num', $find_order['sys_num'])
// ->where('is_delete', 1)
// ->value('vein_id');
// $find_ghpr_data = DB::table('gh_price')
// ->where('ghpr_vein_id', $find_vein_id)
// ->value('supply_price');
// if ($find_ghpr_data) {
// $add_semo_data['sem_price'] = $find_ghpr_data; //结算金额
// } else {
// $add_semo_data['sem_price'] = 0; //结算金额
// }
$add_semo_data['sem_price'] = $find_order['negotiated_price']; //结算金额
$add_semo_data['sem_type'] = 1; //金额类型1:供货价;2接单奖励;3:接单惩罚;4:撤销补助;5:代收金额;6:待付金额;7:完成奖励;8:加急奖励;9:夜间奖励
$add_semo_data['sem_creacter'] = $user_info->install_name; //金额添加人
$add_semo_data['add_time'] = $now_time; //添加时间
$add_semo_res = DB::table('settlement_money')->insert($add_semo_data);
if ($ord_edit_res && $deor_res && $settlement_res && $orld_res && $add_semo_res) {
timeLog($find_order['serial_number'], $find_order['order_num'], $user_info->install_name, "接单时间", date('Y-m-d H:i:s'));
DB::commit();
czrzLog("接单,", $find_order['serial_number'], "移动端-接单", "订单系统", request::ip(), $user_info->install_name);
return ['ErrorCode' => 1, 'ErrorMessage' => '接单成功', 'Data' => []];
} else {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '接单失败', 'Data' => []];
}
}
// 拒单
public static function refuse($request)
{
// 查询工单表信息
$find_design_order = DB::table('order_list')->where('id', $request['id'])
->where('is_delete', 1)
->select('id', 'serial_number', 'sys_num', 'order_num', 'ord_id', 'service_state', 'lock_state', 'ser_id', 'p_id')
->first();
// 判断是否已派单
if (empty($find_design_order)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_design_order = objectToArray($find_design_order);
if ($find_design_order['service_state'] == 0) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单未派单!', 'Data' => []];
}
if ($find_design_order['service_state'] > 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单已接单,无法拒单!', 'Data' => []];
}
if ($find_design_order['lock_state'] != 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单已锁定,无法拒单!', 'Data' => []];
}
// 根据订单id,查询工单是否有完成的
$find_orli_data = DB::table('order_list')
->where('sys_num', $find_design_order['sys_num'])
->where('order_num', $find_design_order['order_num'])
->where('is_delete', 1)
->select('id', 'serial_number', 'sys_num', 'order_num', 'ord_id', 'stauas', 'lock_state', 'p_id', 'ser_id')
->get()->toArray();
$find_orli_data = objectToArray($find_orli_data);
foreach ($find_orli_data as $key => $value) {
if ($value['stauas'] == 4) {
return ['ErrorCode' => 500, 'ErrorMessage' => '有一个工单施工已完成,无法拒单', 'Data' => []];
}
}
$user_info = CommonService::webgetUserInfo($request['api_token']);
DB::beginTransaction();
// 更改订单表信息
$order_data['order_status'] = 4; //订单状态:4设计完成(服务未派单)5施工未接单(服务已派单)6施工已接单
$order_data['ser_id'] = 0;
$order_data['seco_id'] = 0;
$order_data['intall_person'] = '';
$order_data['intall_phone'] = '';
$order_data['update_time'] = date('Y-m-d H:i:s');
$ord_edit_res = Orders::where('id', $find_design_order['ord_id'])
->update($order_data);
// 更改工单信息
$service_data['stauas'] = 8; //工单状态:1未接单2已接单【废弃】3安装中4完成待审核5延期审图6延期结算7已完成8已拒单9已撤销
$service_data['is_delete'] = 2; //是否删除:1正常2删除
$service_data['service_state'] = 3; //技师服务状态:0未派单1未接单2已接单3已拒单
$deor_res = DB::table('order_list')
// ->where('id', $request['id'])
->where('sys_num', $find_design_order['sys_num'])
->update($service_data);
// 新增拒单记录
$orre_data['ors_order_num'] = $find_design_order['order_num'];
$orre_data['ors_sys_num'] = $find_design_order['sys_num'];
$orre_data['ors_serial_number'] = $find_design_order['serial_number'];
$orre_data['ors_ser_id'] = $find_design_order['ser_id'];
$orre_data['ors_pid'] = $find_design_order['p_id'];
$orre_data['ors_year'] = date('Y');
$orre_data['ors_month'] = date('m');
$orre_data['ors_day'] = date('d');
$orre_data['ors_type'] = 2; //拒单类型1设计公司拒单2服务公司拒单
if ($find_design_order['service_state'] == 1) {
$orre_data['ors_status'] = 1; //接单状态1接单前拒单2接单后拒单
} else {
$orre_data['ors_status'] = 2;
}
// 接单后才有结算数据,更改工单结算单数据
$settlement_data['is_delete'] = 2;
$settlement_data['update_time'] = date('Y-m-d H:i:s');
$settlement_res = DB::table('settlement_list')
->where('serial_number', $find_design_order['serial_number'])
->update($settlement_data);
$orre_data['ors_remarks'] = $request['remarks'];
$orre_data['ors_adm_id'] = $request['admin_id'];
$orre_res = DB::table('order_refused')->insert($orre_data);
// 备注
$remarks = '';
if (Request::filled('remarks')) {
$remarks = $request['remarks'];
$rest = CommonService::accMe($find_design_order['sys_num'], '服务工单列表拒单', "拒单:" . $remarks, $find_design_order['serial_number'], '1', $user_info->admin_groupnew, $user_info->install_name, $user_info->admin_id); //添加备注
if (!$rest) {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '备注添加失败', 'Data' => []];
}
}
if ($ord_edit_res && $deor_res && $orre_res) {
DB::commit();
czrzLog("拒单,", $find_design_order['serial_number'], "移动端技师拒单", "订单系统", request::ip(), $user_info->install_name);
return ['ErrorCode' => 1, 'ErrorMessage' => '成功', 'Data' => []];
} else {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '失败', 'Data' => []];
}
}
// 检验
public static function inspect($request)
{
// 查询工单表信息
$find_design_order = DB::table('order_list')->where('id', $request['id'])
->where('is_delete', 1)
->select('id', 'serial_number', 'sys_num', 'order_num', 'ord_id', 'service_state', 'lock_state', 'ser_id', 'p_id')
->first();
// 判断是否已派单
if (empty($find_design_order)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_design_order = objectToArray($find_design_order);
if ($find_design_order['service_state'] != 2) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单未接单,无法检验!', 'Data' => []];
}
if ($find_design_order['lock_state'] != 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单已锁定,无法拒单!', 'Data' => []];
}
$user_info = CommonService::webgetUserInfo($request['api_token']);
DB::beginTransaction();
// 更改工单信息
$service_data['stauas'] = 3; //工单状态:1未接单2已接单3安装中
$service_data['service_state'] = 4; //技师服务状态:0未派单1未接单2已接单(未检验)3已拒单4已检验5安装中6完成待审核
$deor_res = DB::table('order_list')
->where('id', $request['id'])
->update($service_data);
if ($deor_res) {
DB::commit();
// czrzLog("拒单,", $find_design_order['serial_number'], "移动端技师拒单", "订单系统", request::ip(), $user_info->install_name);
timeLog($find_design_order['serial_number'], $find_design_order['order_num'], $user_info->install_name, "检验时间", date('Y-m-d H:i:s'));
return ['ErrorCode' => 1, 'ErrorMessage' => '检验成功', 'Data' => []];
} else {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '失败', 'Data' => []];
}
}
// 开始安装
public static function startInstall($request)
{
// 查询工单表信息
$find_design_order = DB::table('order_list')->where('id', $request['id'])
->where('is_delete', 1)
->select('id', 'serial_number', 'sys_num', 'order_num', 'ord_id', 'service_state', 'lock_state', 'ser_id', 'p_id')
->first();
// 判断是否已派单
if (empty($find_design_order)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_design_order = objectToArray($find_design_order);
if ($find_design_order['service_state'] != 4) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单未检验!', 'Data' => []];
}
if ($find_design_order['lock_state'] != 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单已锁定,无法拒单!', 'Data' => []];
}
$user_info = CommonService::webgetUserInfo($request['api_token']);
DB::beginTransaction();
// 更改工单信息
$service_data['stauas'] = 3; //工单状态:1未接单2已接单3安装中
$service_data['service_state'] = 5; //技师服务状态:0未派单1未接单2已接单3已拒单4已检验5安装中6已安装完成
$deor_res = DB::table('order_list')
->where('id', $request['id'])
->update($service_data);
if ($deor_res) {
DB::commit();
// czrzLog("拒单,", $find_design_order['serial_number'], "移动端技师拒单", "订单系统", request::ip(), $user_info->install_name);
timeLog($find_design_order['serial_number'], $find_design_order['order_num'], $user_info->install_name, "开始安装", date('Y-m-d H:i:s'));
return ['ErrorCode' => 1, 'ErrorMessage' => '已开始施工', 'Data' => []];
} else {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '开始施工失败', 'Data' => []];
}
}
// 申请完成
public static function installFeedback($request)
{
// 查询工单表信息
$find_design_order = DB::table('order_list')
->where('id', $request['id'])
->where('is_delete', 1)
->select('id', 'serial_number', 'sys_num', 'order_num', 'ord_id', 'service_state', 'lock_state', 'ser_id', 'p_id')
->first();
// 判断是否已派单
if (empty($find_design_order)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_design_order = objectToArray($find_design_order);
if ($find_design_order['service_state'] != 5) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单未安装!', 'Data' => []];
}
if ($find_design_order['lock_state'] != 1) {
return ['ErrorCode' => ErrorInc::BUSINESS_FORBID, 'ErrorMessage' => '当前工单已锁定,无法拒单!', 'Data' => []];
}
$user_info = CommonService::webgetUserInfo($request['api_token']);
// 更改工单信息
$service_data['stauas'] = 4; //工单状态:1未接单2已接单3安装中4待完成5已完成6已拒单7已撤销
$service_data['service_state'] = 6; //技师服务状态:0未派单1未接单2已接单3已拒单4已检验5安装中6已安装完成
$service_data['license_plate'] = $request['license_plate']; //车牌号
$service_data['create_time'] = date('Y-m-d H:i:s');
DB::beginTransaction();
$order_data['order_status'] = 8;
$order_data['update_time'] = date('Y-m-d H:i:s');
// 更改订单信息
$ord_res = DB::table('orders')
->where('id', $find_design_order['ord_id'])
->update($order_data);
// 更改工单信息
$deor_res = DB::table('order_list')
->where('id', $request['id'])
->update($service_data);
// 查询成员账号信息表
$find_adm_data = DB::table('admin')
->where('id', $request['admin_id'])
->select('admin_acc', 'company_name')
->first();
$find_adm_data = objectToArray($find_adm_data);
// 查询安装人员信息表
$find_inpe_data = DB::table('install_person')
->where('admin_id', $request['admin_id'])
->where('delet_y', 1)
->select('install_name', 'install_phone')
->first();
$find_inpe_data = objectToArray($find_inpe_data);
// 如果是驳回重新上传,将之前的改为删除状态
$feedback_id = DB::table('feedback')->where('gl_id', $request['id'])->value('id');
if ($feedback_id) {
$feedback_data['is_delete'] = 2;
DB::table('feedback')->where('gl_id', $request['id'])->update($feedback_data);
}
// 安装反馈信息
$template_data = json_decode($request['template_data'], true);
foreach ($template_data as $key => $value) {
$add_feed_data[$key]['type'] = $value['type']; //图片类型
$add_feed_data[$key]['gl_id'] = $request['id']; //反馈关联id
$add_feed_data[$key]['install_name'] = $find_inpe_data['install_name']; //安装人员姓名
$add_feed_data[$key]['install_phone'] = $find_inpe_data['install_phone']; //安装电话
$add_feed_data[$key]['install_remark'] = $value['install_remark']; //安装备注
$add_feed_data[$key]['install_time'] = date('Y-m-d H:i:s'); //安装时间
$add_feed_data[$key]['admin_id'] = $request['admin_id']; //所属服务中心id
$add_feed_data[$key]['company_name'] = $find_adm_data['company_name']; //服务中心名称
$add_feed_data[$key]['feedback_status'] = 2; //是否安装
$add_feed_data[$key]['feedback_pic'] = $value['my_file']; //凭证图片
$add_feed_data[$key]['sys_num'] = 'rwfk' . $request['id']; //所属服务中心id
$add_feed_data[$key]['is_type'] = 2; //1微信2第三方
$add_feed_data[$key]['type_name'] = $value['type_name']; //类型名称
}
$add_feed_id = DB::table('feedback')->insert($add_feed_data);
// 更改服务工单结算表(gone_settlement_list)
$seli_edit_data['list_service_type'] = $service_data['stauas']; //派工单状态:1未接单2已接单【废弃】3安装中4完成待审核5已完成6已拒单7已撤销8延期审图9延期结算
$seli_edit_data['update_time'] = date('Y-m-d H:i:s'); //更新时间
$seli_edit_res = DB::table('settlement_list')
->where('serial_number', $find_design_order['serial_number'])
->where('list_id', $request['id'])
->update($seli_edit_data);
if ($deor_res && $add_feed_id && $ord_res) {
DB::commit();
// czrzLog("拒单,", $find_design_order['serial_number'], "移动端技师拒单", "订单系统", request::ip(), $user_info->install_name);
timeLog($find_design_order['serial_number'], $find_design_order['order_num'], $user_info->install_name, "反馈时间", date('Y-m-d H:i:s'));
return ['ErrorCode' => 1, 'ErrorMessage' => '施工申请完成', 'Data' => []];
} else {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '申请完成失败', 'Data' => []];
}
}
// 获取反馈信息
public static function getFeedback($request)
{
// 查询工单表信息
$find_design_order = DB::table('order_list')
->where('id', $request['id'])
->where('is_delete', 1)
->select('id', 'serial_number', 'service_state', 'license_plate')
->first();
// 判断是否已派单
if (empty($find_design_order)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
// 查询反馈信息
$list_data = DB::table('feedback')->where('gl_id', $request['id'])
->where('is_delete', 1)
->select('gl_id', 'feedback_pic', 'type_name')
->get()->toArray();
if (empty($list_data)) {
$temp_data['feedback_pic'] = config('apisystem.HTTP_URL') . 'image/icon/webapp_no_pictures.png';
$temp_data['type_name'] = '暂无图片';
$list_data[] = $temp_data;
}
$data['license_plate'] = $find_design_order->license_plate; //车牌号
$data['list_data'] = $list_data;
return ['ErrorCode' => 1, 'ErrorMessage' => '获取信息成功', 'Data' => $data];
}
// 详情
public static function info($request)
{
// 查询工单表信息
$find_orli_data = DB::table('order_list as ol')
->leftJoin('order_list_details as old', 'ol.ord_id', '=', 'old.orli_id')
->where('ol.id', $request['id'])
->where('is_delete', 1)
->select('ol.id', 'ol.serial_number', 'ol.sys_num', 'order_num', 'ord_id', 'service_state', 'customer_id', 'p_id', 'install_id', 'intall_person', 'intall_phone', 'crma_id', 'ol.create_time', 'negotiated_price as orli_actual_price', 'receive_duration as time_consuming')
->first();
// 判断是否已派单
if (empty($find_orli_data)) {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '未查询到订单', 'Data' => []];
}
$find_orli_data = objectToArray($find_orli_data);
// 查询订单客户信息
$user = DB::table('user')
->where('id', $find_orli_data['customer_id'])
->select('shr_name', 'shr_phone', 'shr_sheng', 'shr_shi', 'shr_xian', 'shr_adress')
->first();
$user = objectToArray($user);
if (isset($user)) {
$find_orli_data = array_merge($user, $find_orli_data);
}
// 查询车辆信息
$find_vehicle = OrdersVehicleService::getOrderVehicle($find_orli_data['sys_num']);
$find_orli_data['orders_vehicle'] = $find_vehicle;
// 查询贴装工艺
$find_crma_data = DB::table('craft_manage')
->where('crma_id', $find_orli_data['crma_id'])
->select('crma_name')
->first();
$find_crma_data = objectToArray($find_crma_data);
if ($find_crma_data) {
$find_orli_data['crma_name'] = $find_crma_data['crma_name']; //施工工艺名称
} else {
$find_orli_data['crma_name'] = ''; //施工工艺名称
}
// 查询设计图
$find_deod_data = DB::table('design_order_detail')
->where('sys_num', $find_orli_data['sys_num']) //订单编号
->where('ord_id', $find_orli_data['ord_id']) //订单id
->where('audit_state', 2) //审核状态:1已提交2已通过3已驳回
->where('is_delete', 1) //是否删除:1正常2删除
->select('sys_num', 'design_drawing')
->get()->toArray();
$find_orli_data['design_order_detail'] = $find_deod_data;
// 查询备注
$find_note = DB::table('note')
->where('orders_id', $find_orli_data['sys_num'])
->where('is_delet', 1)
->select('note_content', 'note_type', 'note_time', 'note_name')
->orderBy('note_time', 'desc')
->get()->toArray();
$find_note = objectToArray($find_note);
$find_orli_data['orders_note'] = $find_note;
unset($find_orli_data['crma_id']);
return ['ErrorCode' => 1, 'ErrorMessage' => '获取成功', 'Data' => $find_orli_data];
}
// 获取技师
public static function getInstallPerson($request)
{
// 查询工单表信息
$find_inpe_data = InstallPerson::where('delet_y', 1)
->where('admin_id', $request['admin_id'])
->where('install_is_type', 1) //状态:1启用2停用
->where(function ($query) use ($request) {
if (!empty($request['install_name'])) {
$query->where('check_code', 'like', '%' . $request['install_name'] . '%')
->orWhere('install_name', 'like', '%' . $request['install_name'] . '%');
}
})
->select('id', 'check_code', 'install_name')
->get()->toArray();
return ['ErrorCode' => 1, 'ErrorMessage' => '获取成功', 'Data' => $find_inpe_data];
}
// 获取标签
public static function getLabel($request)
{
// 查询工单表信息
$find_sety_data = DB::table('setmoney_type')
->where('lt_parent_id', 694)
->where('lt_statues', 1)
->where(function ($query) use ($request) {
if (!empty($request['sety_name'])) {
$query->where('sety_name', 'like', '%' . $request['sety_name'] . '%');
}
})
->select('sety_id', 'sety_name')
->get()->toArray();
return ['ErrorCode' => 1, 'ErrorMessage' => '获取成功', 'Data' => $find_sety_data];
}
// 获取操作记录
public static function operatingRecord($request)
{
// 查询操作表信息
$find_data = DB::table('order_time')
->where('serial_number', $request['serial_number'])
->select('create_time', 'is_type')
->orderby('id', 'desc')
->get()->toArray();
return ['ErrorCode' => 1, 'ErrorMessage' => '获取成功', 'Data' => $find_data];
}
}
<?php
namespace App\Services\Api\MobileWeb;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\DB;
use BlueCity\Core\Inc\ErrorInc;
use App\Services\Api\Common\{CommonService};
// 评价列表
class ServiceEvaluationService extends Model
{
// 列表查询
public static function index($request, $show_count = 10)
{
// 查询列表
$list_data = DB::table('evaluation_form as evfo')
->leftJoin('order_list as orli', 'orli.order_num', '=', 'evfo.plat_number')
->where('evfo.ser_id', $request['admin_id']) //服务商id
->where('orli.is_delete', 1)
->select('serial_number', 'eval_leval', 'eval_content', 'eval_content_show', 'eval_time', 'evfo_score', 'eval_sety_id', 'eval_parent_sety_id', 'eval_grandparent_sety_id', 'eval_label')
->orderby('eval_time', 'desc')
->paginate($show_count);
$page['count'] = 0;
$page['page'] = 0;
$page['page_size'] = $show_count;
$page['allPage'] = 0;
$data['list'] = [];
$data['page'] = $page;
$list_items = $list_data->items();
if ($list_items) {
$list_items = objectToArray($list_items);
$page['count'] = $list_data->total(); //总数据个数
$page['page'] = $list_data->currentPage(); //当前页面页码
$page['page_size'] = $show_count; //一页显示多少个
$page['allPage'] = $list_data->lastPage(); //表示最后一页的页码
$data['list'] = $list_items;
$data['page'] = $page;
}
// 查询好评统计数据
$good_reputation_count = DB::table('evaluation_form')
->where('ser_id', $request['admin_id']) //服务商id
->where('eval_parent_sety_id', 701)
->select(DB::raw('count(*) as count, eval_parent_sety_id'))
->groupBy('eval_parent_sety_id')
->get()->toArray();
$data['good_reputation_count'] = $good_reputation_count;
// 查询差评统计数据
$good_negative_comment_count = DB::table('evaluation_form')
->where('ser_id', $request['admin_id']) //服务商id
->where('eval_parent_sety_id', 704)
->select(DB::raw('count(*) as count, eval_parent_sety_id'))
->groupBy('eval_parent_sety_id')
->get()->toArray();
$data['good_negative_comment_count'] = $good_negative_comment_count;
$data['comprehensive_evaluation'] = 98; //综合评分
$data['service_score'] = 95; //服务评分
$data['compare_evaluation'] = 95; //与行业相比
if ($data['list']) {
return ['ErrorCode' => 1, 'ErrorMessage' => '成功', 'Data' => $data];
} else {
return ['ErrorCode' => ErrorInc::DATA_EMPTY, 'ErrorMessage' => '暂无数据', 'Data' => $data];
}
}
// 查看凭证
public static function checkVoucher($request)
{
$find_upload_pictures = DB::table('pictures')
->where('sett_wat_num', $request['stl_wat'])
->value('upload_pictures');
if ($find_upload_pictures) {
return ['ErrorCode' => 1, 'ErrorMessage' => '成功', 'Data' => $find_upload_pictures];
} else {
return ['ErrorCode' => 500, 'ErrorMessage' => '暂无数据', 'Data' => ''];
}
}
// 查看详情
public static function checkInfo($request)
{
$list_items = DB::table('settlement_list as seli')
->leftJoin('order_list as orli', 'orli.serial_number', '=', 'seli.list_id')
->where('seli.ser_id', $request['admin_id']) //服务商id
->where('wat_num', $request['stl_wat'])
->where('is_delete', 1)
->select('seli.id', 'seli.order_num', 'seli.create_time', 'seli.sys_num', 'list_id', 'crma_id', 'orli_actual_price', 'orli.p_id')
->orderby('id', 'desc')
->get()->toArray();
if ($list_items) {
$list_items = objectToArray($list_items);
$p_id = array_unique(array_column($list_items, 'p_id')); //来源id
$crma_id = array_unique(array_column($list_items, 'crma_id')); //施工工艺id
// 查询平台信息
$find_pt_data = DB::table('pt')
->whereIn('id', $p_id)
->pluck('pt_name', 'id')->toArray();
// 查询施工工艺信息
$find_craft_data = DB::table('craft_manage')
->whereIn('crma_id', $crma_id)
->pluck('crma_name', 'crma_id')->toArray();
foreach ($list_items as $key => $value) {
// 业务来源
if (isset($find_pt_data[$value['p_id']])) {
$list_items[$key]['pt_name'] = $find_pt_data[$value['p_id']];
} else {
$list_items[$key]['pt_name'] = '';
}
// 施工工艺
if (isset($find_craft_data[$value['crma_id']])) {
$list_items[$key]['crma_name'] = $find_craft_data[$value['crma_id']];
} else {
$list_items[$key]['crma_name'] = '';
}
$list_items[$key]['orders_vehicle'] = DB::table('orders_vehicle')
->where('is_delete', 1)
->where('sys_num', $value['sys_num'])
->select('id', 'sys_num', 'vein_id', 'vein_name', 'vepo_id', 'vepo_name', 'vein_image')
->get()->toArray();
}
$data['list'] = $list_items;
return ['ErrorCode' => 1, 'ErrorMessage' => '成功', 'Data' => $data];
} else {
return ['ErrorCode' => 500, 'ErrorMessage' => '暂无数据', 'Data' => ''];
}
}
// 确认账单
public static function affirmBill($request)
{
// 查询成员账号表数据
$find_adm_data = DB::table('admin')
->where('id', $request['admin_id'])
->select('company_name', 'admin_acc')
->first();
$find_adm_data = objectToArray($find_adm_data);
// 查询结算单列表数据
$find_stli_data = DB::table('statements_list')
->where('stl_wat', $request['wat_num']) //结算单号
->select('stl_money', 'stl_ticket', 'stl_type')
->first();
$find_stli_data = objectToArray($find_stli_data);
if ($find_stli_data['stl_type'] != 1) {
return ['ErrorCode' => 500, 'ErrorMessage' => '只有未结算的单据可以点击确认账单', 'Data' => []];
}
// 服务商账单金额明细(服务中心账目管理数据)
$add_sece_data['wat_num'] = $request['wat_num']; //结算流水号
$add_sece_data['ser_id'] = $request['admin_id']; //服务中心
$add_sece_data['company_name'] = $find_adm_data['company_name']; //结算对象名称
$add_sece_data['apply_for_name'] = $find_adm_data['admin_acc']; //申请人
$add_sece_data['apply_for_money'] = $find_stli_data['stl_money'] - $find_stli_data['stl_ticket']; //申请金额 = 结算单金额 - 执行罚款金额
$add_sece_data['apply_for_time'] = date('Y-m-d H:i:s'); //申请时间
$settlement_num = '';
if (Request::filled('settlement_num')) {
$settlement_num = $request['settlement_num'];
}
$add_sece_data['settlement_num'] = $settlement_num;
// 工单结算表
$edit_seli_data['sett_status'] = 20; //工单结算状态1:未审核;10:未结算;20:结算中;30:已完成;40:作废;50:已追回
// 结算单列表(账单表->账单报表数据)
$edit_stli_data['stl_type'] = 2; //结算状态1:未结算(商家未确认);2:结算中(商家已确认);3:已结算 4:未处理 5:待发货
// 查询工单结算表数据
$find_seli_data = DB::table('settlement_list')
->where('wat_num', $request['wat_num'])
->select('list_id')
->get()->toArray();
$find_seli_data = objectToArray($find_seli_data);
$list_id = "";
foreach ($find_seli_data as $k => $v) {
$list_id .= ",'" . $v['list_id'] . "'";
}
$list_id = ltrim($list_id, ',');
$edit_orli_data["account_status"] = 20;
$user_info = CommonService::webgetUserInfo($request['api_token']);
DB::beginTransaction();
// 新增服务商账单金额明细(服务中心账目管理数据)
$add_sece_id = DB::table('service_center')->insert($add_sece_data);
// 更改服务工单结算表
$edit_seli_res = DB::table('settlement_list')
->where('wat_num', $request['wat_num'])
->update($edit_seli_data);
// 更改结算单列表(账单表->账单报表数据)
$edit_stli_res = DB::table('statements_list')
->where('stl_wat', $request['wat_num'])
->update($edit_stli_data);
// 更改服务工单列表
$edit_orli_res = DB::table('order_list')
->whereRaw("serial_number in (" . $list_id . ")")
->update($edit_orli_data);
if ($add_sece_id && $edit_seli_res && $edit_stli_res && $edit_orli_res) {
DB::commit();
// czrzLog("确认账单", $request['wat_num'], "移动端确认账单", "账单管理", request::ip(), $user_info->install_name);
return ['ErrorCode' => 1, 'ErrorMessage' => '确认账单成功', 'Data' => []];
} else {
DB::rollback();
return ['ErrorCode' => 500, 'ErrorMessage' => '失败', 'Data' => []];
}
}
// 上传发票
public static function uploadInvoice($request)
{
// 查询结算单列表(账单表->账单报表数据)是否有单号
$find_stli_data = DB::table('statements_list')
->where('stl_wat', $request['wat_num'])
->select('stl_invoice_number', 'stl_expressage_number')
->first();
$find_stli_data = objectToArray($find_stli_data);
if (!empty($find_stli_data['stl_invoice_number']) && !empty($find_stli_data['stl_expressage_number'])) {
return ['ErrorCode' => 1, 'ErrorMessage' => $find_stli_data, 'Data' => []];
} else {
if (empty($request['stl_invoice_number']) || empty($request['stl_expressage_number'])) {
return ['ErrorCode' => ErrorInc::INVALID_PARAM, 'ErrorMessage' => '请输入发票单号和快递单号', 'Data' => []];
}
$edit_stli_data['stl_invoice_number'] = $request['stl_invoice_number']; //发票单号
$edit_stli_data['stl_expressage_number'] = $request['stl_expressage_number']; //快递单号
$edit_stli_res = DB::table('statements_list')
->where('stl_wat', $request['wat_num'])
->update($edit_stli_data);
if ($edit_stli_res) {
return ['ErrorCode' => 1, 'ErrorMessage' => $edit_stli_data, 'Data' => []];
} else {
return ['ErrorCode' => 500, 'ErrorMessage' => '失败', 'Data' => []];
}
}
}
}
<?php
namespace App\Services\Api\MobileWeb;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Facades\DB;
use BlueCity\Core\Inc\ErrorInc;
use App\Models\{InstallPerson, Certification};
// 移动端,技师管理
class TechnicianService
{
// 列表查询
public static function index($request, $show_count = 10)
{
// 查询技师信息
$list_data = DB::table('install_person')
->where('admin_id', $request['admin_id']) //所属服务商
->where('delet_y', 1) //是否删除:1正常2删除
->where(function ($query) use ($request) {
// 状态:1启用2停用
if (!empty($request['install_is_type'])) {
$query->where('install_is_type', $request['install_is_type']);
}
// 姓名
if (!empty($request['install_name'])) {
$query->where('install_name', 'like', '%' . $request['install_name'] . '%');
}
// 手机号
if (!empty($request['install_phone'])) {
$query->where('install_phone', 'like', '%' . $request['install_phone'] . '%');
}
})
->select('id', 'check_code', 'install_name', 'install_phone', 'install_is_type', 'install_pic')
->orderby('id', 'desc')
->paginate($show_count);
$page['count'] = 0;
$page['page'] = 0;
$page['page_size'] = $show_count;
$page['allPage'] = 0;
$data['list'] = [];
$data['page'] = $page;
$list_items = $list_data->items();
if ($list_items) {
$page['count'] = $list_data->total(); //总数据个数
$page['page'] = $list_data->currentPage(); //当前页面页码
$page['page_size'] = $show_count; //一页显示多少个
$page['allPage'] = $list_data->lastPage(); //表示最后一页的页码
$data['list'] = $list_items;
$data['page'] = $page;
}
if ($data['list']) {
return ['ErrorCode' => 1, 'ErrorMessage'=>'成功', 'data'=>$data];
} else {
return ['ErrorCode'=>ErrorInc::DATA_EMPTY, 'ErrorMessage'=>'暂无数据', 'data'=>$data];
}
}
/**
* 获取code值
*/
public static function getCheckCode($serId)
{
$certification_num = Certification::where('ser_id', $serId)->value('certification_num');
if (!$certification_num) {
return false;
}
$check_code = InstallPerson::whereRaw("admin_id='" . $serId . "' and check_code>10000000 and check_code<1000000000 and check_code like '" . $certification_num . "%'")
->orderBy('check_code', 'DESC')->limit('1')
->value("check_code");
$length = strlen($check_code);
if (in_array($length, [8, 9])) {
$num = rand(5, 99);
$che = $check_code + $num;
$bin = strpos($che, "4");
if ($bin) {
$code = str_replace("4", '5', $che);
} else {
$code = $che;
}
} else {
$check_code = InstallPerson::whereRaw("check_code like '" . $certification_num . "%'")
->orderBy('check_code', 'DESC')
->limit('1')
->value("check_code");
$length = strlen($check_code);
if (in_array($length, [8, 9])) {
$num = rand(5, 99);
$che = $check_code + $num;
$bin = strpos($che, "4");
if ($bin) {
$code = str_replace("4", '5', $che);
} else {
$code = $che;
}
} else {
$code = $certification_num . "1001";
}
}
return $code;
}
// 新增技师
public static function add($request)
{
$admin_id = $request['admin_id'];
// 判断当前技师是否存在
$find_id = InstallPerson::where('admin_id', $request['admin_id'])
->where('install_phone', $request['install_phone'])
->where('delet_y', 1)
->value('id');
if ($find_id) {
return ['ErrorCode'=>ErrorInc::BUSINESS_FORBID, 'ErrorMessage'=>'当前手机号已存在', 'data'=>''];
}
// 获取CODE
$arr['check_code'] = self::getCheckCode($admin_id);
if (!$arr['check_code']) {
return ['ErrorCode'=>ErrorInc::INVALID_PARAM, 'ErrorMessage'=>'服务商不存在', 'data'=>''];
}
$is_shman = 1; //是否为店长1否,2是
if ($is_shman == 2) {
// 查看是否有店长,若存在,将原来的店长改为技师
$exit_id = InstallPerson::where('admin_id', $admin_id)->where('is_shman', 2)->value('id');
InstallPerson::where('id', $exit_id)->update(['is_shman' => 1, 'install_pid' => 0]);
} else {
// 查看是否有技师,没有,则将本次的添加的为店长
$exit_id = InstallPerson::where('admin_id', $admin_id)->value('id');
if (!$exit_id) {
$is_shman = 2;
}
}
$arr['install_name'] = $request['install_name'];
$arr['install_phone'] = $request['install_phone'];
$arr['install_is_type'] = $request['install_is_type'];
$arr['install_year'] = $request['install_year'];
if (isset($request['install_pic'])) {
$arr['install_pic'] = $request['install_pic'];
}
$arr['install_year'] = $request['install_year'];
$arr['admin_id'] = $admin_id;
$arr['is_shman'] = $is_shman;
$arr['install_remark'] = $request['install_remark'] ?? '';
$arr['install_password1'] = $arr['check_code'];
$arr['install_password'] = md5($arr['check_code']);
$ins_res = InstallPerson::insert($arr);
if ($ins_res) {
$content = "新增技师:" . $request['install_name'];
czrzLog("新增技师", '', $content, "移动端-技师管理", Request::ip(), '');
// 返回数据
$return_data['install_name'] = $arr['install_name'];
$return_data['install_phone'] = $arr['install_phone'];
$return_data['install_is_type'] = $arr['install_is_type'];
$return_data['check_code'] = $arr['check_code'];
$return_data['install_password'] = $arr['check_code'];
return ['ErrorCode' => 1, 'ErrorMessage'=>'成功', 'Data'=>$return_data];
} else {
return ['ErrorCode'=>500, 'ErrorMessage'=>'失败', 'Data'=>[]];
}
}
// 编辑显示
public static function editShow($request)
{
// 判断当前技师是否存在
$find_data = InstallPerson::where('admin_id', $request['admin_id'])
->where('id', $request['edit_install_id'])
->where('delet_y', 1)
->select('id', 'check_code', 'install_name', 'install_phone', 'install_year', 'install_pic', 'install_is_type', 'install_remark')
->first();
if (empty($find_data)) {
return ['ErrorCode'=>ErrorInc::BUSINESS_FORBID, 'ErrorMessage'=>'未查找到技师!', 'data'=>''];
}
return ['ErrorCode' => 1, 'ErrorMessage'=>'成功', 'Data'=>$find_data];
}
// 编辑技师
public static function edit($request)
{
$admin_id = $request['admin_id'];
// 判断当前技师是否存在
$find_id = InstallPerson::where('admin_id', $request['admin_id'])
->where('id', '<>', $request['edit_install_id'])
->where('install_phone', $request['install_phone'])
->where('delet_y', 1)
->value('id');
if ($find_id) {
return ['ErrorCode'=>ErrorInc::BUSINESS_FORBID, 'ErrorMessage'=>'当前手机号已存在', 'data'=>''];
}
$arr['install_name'] = $request['install_name'];
$arr['install_phone'] = $request['install_phone'];
$arr['install_is_type'] = $request['install_is_type'];
if (isset($request['install_pic'])) {
$arr['install_pic'] = $request['install_pic'];
}
$arr['install_year'] = $request['install_year'];
$arr['install_remark'] = $request['install_remark'] ?? '';
$ins_res = InstallPerson::where('id', $request['edit_install_id'])->update($arr);
if ($ins_res) {
$content = "编辑技师:" . $request['install_name'];
czrzLog("编辑技师", '', $content, "移动端-技师管理", Request::ip(), '');
return ['ErrorCode' => 1, 'ErrorMessage'=>'成功', 'Data'=>[]];
} else {
return ['ErrorCode'=>500, 'ErrorMessage'=>'失败', 'Data'=>[]];
}
}
// 修改密码
public static function changePassword($request)
{
$find_data = InstallPerson::where('id', $request['install_id'])
->where('admin_id', $request['admin_id'])
->where('delet_y', 1)
->select('install_password', 'install_name')
->first();
if (!$find_data) {
return ['ErrorCode'=>ErrorInc::BUSINESS_FORBID, 'ErrorMessage'=>'无此用户', 'data'=>''];
}
if (md5($request['password']) != $find_data->install_password) {
return ['ErrorCode'=>ErrorInc::BUSINESS_FORBID, 'ErrorMessage'=>'原密码不正确!', 'data'=>''];
}
$info['install_password'] = md5($request['new_password']);
$info['install_password1'] = $request['new_password'];
$info['updata_time'] = date('Y-m-d H:i:s');
$res = InstallPerson::where('id', $request['install_id'])->update($info);
if ($res) {
$content = $find_data['install_name'] . ",修改密码";
czrzLog("修改密码", '', $content, "移动端-技师管理", Request::ip(), '');
return ['ErrorCode' => 1, 'ErrorMessage'=>'成功', 'Data'=>[]];
} else {
return ['ErrorCode'=>500, 'ErrorMessage'=>'失败', 'Data'=>[]];
}
}
// 删除
public static function delete($request)
{
$find_data = InstallPerson::where('id', $request['install_id'])
->where('admin_id', $request['admin_id'])
->where('delet_y', 1)
->select('install_name', 'check_code')
->first();
if (!$find_data) {
return ['ErrorCode'=>ErrorInc::BUSINESS_FORBID, 'ErrorMessage'=>'无此用户', 'data'=>''];
}
$edit_inpe_data['delet_y'] = 2; //是否删除:1否2删除
$edit_inpe_data['updata_time'] = date('Y-m-d H:i:s');
$res = InstallPerson::where('id', $request['install_id'])->update($edit_inpe_data);
if ($res) {
$content = $find_data['install_name'] . '(' . $find_data['check_code'] . ')';
czrzLog("删除", '', $content, "移动端-技师管理", Request::ip(), '');
return ['ErrorCode' => 1, 'ErrorMessage'=>'成功', 'Data'=>[]];
} else {
return ['ErrorCode'=>500, 'ErrorMessage'=>'失败', 'Data'=>[]];
}
}
}
...@@ -1402,3 +1402,45 @@ Route::group(['prefix' => 'RequestApp', 'namespace' => 'AppApi', 'middleware' => ...@@ -1402,3 +1402,45 @@ Route::group(['prefix' => 'RequestApp', 'namespace' => 'AppApi', 'middleware' =>
Route::group(['prefix' => 'Dou', 'namespace' => 'Dou'], function () { Route::group(['prefix' => 'Dou', 'namespace' => 'Dou'], function () {
Route::any('MyTest/test', 'MyTestController@test'); //测试入口 Route::any('MyTest/test', 'MyTestController@test'); //测试入口
}); });
// 移动端网页功能
Route::namespace('Api')->group(function () {
// 技师登录
Route::post('w1/login', 'MobileWeb\LoginController@login'); //登录
Route::post('w1/quit', 'MobileWeb\LoginController@quit'); //退出
// 需要验证
Route::group(['middleware' => ['WebLogin']], function () {
Route::post('w1/OrderList/index', 'MobileWeb\OrderListController@index'); //服务工单列表
Route::post('w1/OrderList/receiving', 'MobileWeb\OrderListController@receiving'); //接单
Route::post('w1/OrderList/refuse', 'MobileWeb\OrderListController@refuse'); //拒单
Route::post('w1/OrderList/startInstall', 'MobileWeb\OrderListController@startInstall'); //开始安装
Route::post('w1/OrderList/inspect', 'MobileWeb\OrderListController@inspect'); //检验
Route::post('w1/OrderList/installFeedback', 'MobileWeb\OrderListController@installFeedback'); //安装反馈
Route::post('w1/OrderList/info', 'MobileWeb\OrderListController@info'); //详情
Route::post('w1/OrderList/getInstallPerson', 'MobileWeb\OrderListController@getInstallPerson'); //获取技师
Route::post('w1/OrderList/getLabel', 'MobileWeb\OrderListController@getLabel'); //获取标签
Route::post('w1/OrderList/operatingRecord', 'MobileWeb\OrderListController@operatingRecord'); //获取操作记录
Route::post('w1/OrderList/getFeedback', 'MobileWeb\OrderListController@getFeedback'); //获取安装反馈数据
Route::post('w1/OrderList/imageFeedback', 'MobileWeb\OrderListController@imageFeedback'); //施工反馈,图片反馈
Route::post('w1/OrderList/LicenseFeedback', 'MobileWeb\OrderListController@LicenseFeedback'); //施工反馈,车牌反馈
// 技师管理
Route::post('w1/Technician/index', 'MobileWeb\TechnicianController@index'); //技师列表
Route::post('w1/Technician/add', 'MobileWeb\TechnicianController@add'); //技师列表-新增
Route::post('w1/Technician/changePassword', 'MobileWeb\TechnicianController@changePassword'); //技师列表-修改密码
Route::post('w1/Technician/delete', 'MobileWeb\TechnicianController@delete'); //删除
Route::post('w1/Technician/edit', 'MobileWeb\TechnicianController@edit'); //编辑
// 账单模块
Route::post('w1/BillingModule/index', 'MobileWeb\BillingModuleController@index'); //列表
Route::post('w1/BillingModule/checkVoucher', 'MobileWeb\BillingModuleController@checkVoucher'); //查看凭证
Route::post('w1/BillingModule/checkInfo', 'MobileWeb\BillingModuleController@checkInfo'); //查看详情
Route::post('w1/BillingModule/affirmBill', 'MobileWeb\BillingModuleController@affirmBill'); //确认账单
Route::post('w1/BillingModule/uploadInvoice', 'MobileWeb\BillingModuleController@uploadInvoice'); //上传发票
// 服务评价
Route::post('w1/ServiceEvaluation/index', 'MobileWeb\ServiceEvaluationController@index'); //列表
});
});
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论