You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
509 lines
16 KiB
509 lines
16 KiB
<?php
|
|
|
|
namespace app\api\controller;
|
|
|
|
use app\common\controller\Api;
|
|
use app\common\library\esign\File;
|
|
use app\common\library\esign\SignFlow;
|
|
use app\common\library\esign\Template;
|
|
use app\common\model\Attachment;
|
|
use app\common\model\ProjectCategory;
|
|
use app\common\model\ProjectCategoryFlow;
|
|
use app\common\model\ProjectCompanyUser;
|
|
use app\common\model\ProjectMaterial;
|
|
use app\common\model\ProjectMaterialTemplate;
|
|
use app\common\model\ProjectOrderAfterSales;
|
|
use app\common\model\ProjectOrderFlow;
|
|
use app\common\model\ProjectOrderMaterial;
|
|
use app\common\model\ProjectWorkerOrder;
|
|
use app\common\model\UserGroup;
|
|
use think\Db;
|
|
|
|
class Project extends Api
|
|
{
|
|
protected $noNeedLogin = ['signNotifyUrl'];
|
|
protected $noNeedRight = '*';
|
|
|
|
/**
|
|
* @var array|mixed
|
|
*/
|
|
private $user_id;
|
|
/**
|
|
* @var array|mixed
|
|
*/
|
|
private $company_id;
|
|
|
|
public function _initialize()
|
|
{
|
|
parent::_initialize();
|
|
$user = $this->auth->getUser();
|
|
$this->user_id = $user->id;
|
|
$this->company_id = $user->company_id;
|
|
}
|
|
|
|
|
|
/**
|
|
* 工单列表
|
|
* @return void
|
|
*/
|
|
public function list() {
|
|
$page = $this->request->get('page', 1);
|
|
$limit = $this->request->get('limit', 10);
|
|
$category_id = $this->request->get('category_id');//分类
|
|
$search_type = $this->request->get('search_type');//part 参与 ;charge 负责
|
|
$search_input = $this->request->get('search_input');
|
|
$search_company_id = $this->request->get('search_company_id');
|
|
$status = $this->request->get('status');
|
|
|
|
$user = $this->auth->getUser();
|
|
$user_type = $this->isCompanyUser($user);//用户类型 general 普通员工; admin 企业管理员; customer 客户
|
|
$fields = 'id,category_id,company_id,ht_number,prj_name,mgr_id,mgr_phone,customer_company,job_location,detail_address,build_status,member_ids,iqc_id,status';
|
|
|
|
//默认只展示登陆用户绑定企业数据
|
|
$query = ProjectWorkerOrder::field($fields);
|
|
$company_ids = ProjectCompanyUser::getCompanyIds($user->id);
|
|
if ($search_company_id) {
|
|
$company_ids = $search_company_id;
|
|
}
|
|
|
|
if ($company_ids) {
|
|
if (is_array($company_ids)) {
|
|
$query->whereIn('company_id', $company_ids[0]);
|
|
} else {
|
|
$query->whereIn('company_id', $company_ids);
|
|
}
|
|
|
|
}
|
|
|
|
if($category_id) {
|
|
$query->where('category_id', $category_id);
|
|
}
|
|
|
|
if ($search_input) {
|
|
$query->where('prj_name|ht_number','like', "%".$search_input."%");
|
|
}
|
|
|
|
if ($status != '') {
|
|
$query->where('status', $status);
|
|
}
|
|
|
|
//用户类型
|
|
switch ($user_type) {
|
|
case 'general':
|
|
if ($search_type == 'part') {
|
|
$query->where('', 'exp', Db::raw("FIND_IN_SET($this->user_id,member_ids)"));
|
|
} elseif ($search_input == 'charge') {
|
|
$query->where('mgr_id', $this->user_id);
|
|
} else {
|
|
$query->where('', 'exp', Db::raw("FIND_IN_SET($this->user_id,member_ids) or mgr_id = $this->user_id"));
|
|
}
|
|
break;
|
|
case 'admin':
|
|
|
|
break;
|
|
case 'customer':
|
|
$query->where('customer_phone', $user->mobile);
|
|
}
|
|
// $data = $query->fetchSql()->select();
|
|
// $this->success('1', $data);
|
|
$data = $query->order('id DESC')->paginate($limit)->toArray();
|
|
|
|
foreach ($data['data'] as &$value) {
|
|
$value['build_status'] = $value['build_status'] ? $value['build_status'] : "未开始";
|
|
}
|
|
$this->success(__('Success'),$data);
|
|
}
|
|
|
|
/**
|
|
* 工单详情
|
|
* @return void
|
|
*/
|
|
public function detail() {
|
|
$order_id = $this->request->get('order_id');
|
|
if (!$order_id) {
|
|
$this->error(__('Parameter error'));
|
|
}
|
|
$data = ProjectWorkerOrder::where('id', $order_id)->find();
|
|
if (!$data) {
|
|
$this->success(__('Success'),null);
|
|
}
|
|
$data->hidden(['mgr_id','category_id','iqc_id','job_location','detail_address',
|
|
'member_ids','create_time', 'update_time', 'after_sale_status']);
|
|
$category_info = ProjectCategory::getProgress($order_id,$data['category_id']);
|
|
$data = array_merge($data->toArray(), $category_info);
|
|
$data['build_status'] = $data['build_status'] ? $data['build_status'] : "未开始";
|
|
$this->success(__('Success'),$data);
|
|
}
|
|
|
|
/**
|
|
* 提交工单
|
|
* @return void
|
|
*/
|
|
public function submit() {
|
|
$post = $this->request->post();
|
|
$res = $this->validate($post, 'project.submit');
|
|
if(true !== $res) {
|
|
$this->error($res);
|
|
}
|
|
$companyIds = ProjectCompanyUser::getCompanyIds($this->user_id);
|
|
$post['company_id'] = $companyIds ? $companyIds[0] : 0;
|
|
$post['user_id'] = $this->user_id;
|
|
$res = ProjectWorkerOrder::create($post);
|
|
if ($res) {
|
|
$this->success('添加成功', $res);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 添加售后进展
|
|
* @return void
|
|
*/
|
|
public function addOrderProgressAndSales() {
|
|
$post = $this->request->post();
|
|
$res = $this->validate($post, 'project.addOrderProgressAndSales');
|
|
if (true !== $res) {
|
|
$this->error($res);
|
|
}
|
|
$post['add_user'] = $this->user_id;
|
|
$res = ProjectOrderAfterSales::add($post);
|
|
if ($res) {
|
|
$this->success('添加成功');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 订单流程完成状态
|
|
*/
|
|
public function updateFlowStatus() {
|
|
$post = $this->request->post();
|
|
if (empty($post['flow_id']) || empty($post['order_id'])){
|
|
$this->error('参数错误');
|
|
}
|
|
$user = $this->auth->getUser();
|
|
//验证工单是否存在
|
|
$order = ProjectWorkerOrder::where('id', $post['order_id'])->find();
|
|
if (!$order) {
|
|
$this->error('工单不存在');
|
|
}
|
|
//验证流程是否存在
|
|
$flow = ProjectCategoryFlow::where('id', $post['flow_id'])->find();
|
|
if (!$flow) {
|
|
$this->error('流程不存在');
|
|
}
|
|
//验证流程是否完成
|
|
$obj = ProjectOrderFlow::where('flow_id', $post['flow_id'])->where('order_id', $post['order_id'])->find();
|
|
if ($obj) {
|
|
if ($obj['status'] == 1) {
|
|
$this->error('该工单进度已完成');
|
|
}
|
|
|
|
$obj->status = 1;
|
|
$obj->phone = $user->mobile;
|
|
$obj->save();
|
|
} else {
|
|
//添加流程完成记录
|
|
$insertData = [
|
|
'flow_id' => $post['flow_id'],
|
|
'order_id' => $post['order_id'],
|
|
'status' => 1,
|
|
'create_time' => time(),
|
|
'phone' => $user->mobile
|
|
];
|
|
ProjectOrderFlow::add($insertData);
|
|
}
|
|
$this->success('更新成功');
|
|
}
|
|
|
|
/**
|
|
* 工单完成状态更新
|
|
*/
|
|
public function updateOrderStatus() {
|
|
$order_id = $this->request->post('order_id');
|
|
if (empty($order_id)) {
|
|
$this->error('参数错误');
|
|
}
|
|
//验证流程是否都完成
|
|
$order = ProjectWorkerOrder::get($order_id);
|
|
if ($order) {
|
|
//获取完成的流程
|
|
$wc_flow = ProjectOrderFlow::where('order_id', $order_id)->where('status', 1)->count();
|
|
//待完成的流程
|
|
$dwc_flow = ProjectCategoryFlow::where('category_id', $order['category_id'])->count();
|
|
if ($dwc_flow != $wc_flow) {
|
|
$this->error('存在未完成的流程,工单状态无法完成');
|
|
}
|
|
|
|
$order->status = 1;
|
|
$order->save();
|
|
}
|
|
|
|
$this->success('更新成功');
|
|
}
|
|
|
|
/**
|
|
* 获取售后单
|
|
*/
|
|
public function getSalesOrder() {
|
|
$order_id = $this->request->get('order_id');
|
|
$res = ProjectOrderAfterSales::getSales($order_id);
|
|
foreach ($res as &$row) {
|
|
$row['images'] = ProjectCategory::imagesFormat($row['images']);
|
|
}
|
|
$this->success('获取成功',$res);
|
|
}
|
|
|
|
/**
|
|
* 获取项目配置
|
|
* @return void
|
|
*/
|
|
public function getProjectConfig() {
|
|
$data = ProjectCategory::getList();
|
|
$this->success('获取成功',$data);
|
|
|
|
}
|
|
|
|
/**
|
|
* 获取用户列表
|
|
* @return void
|
|
*/
|
|
public function getUserList() {
|
|
$company_id = $this->request->get('company_id');//企业id
|
|
if (!$company_id) {
|
|
$this->error('参数错误');
|
|
}
|
|
//展示选择企业下的用户
|
|
$user_ids = ProjectCompanyUser::getUserIds($company_id);
|
|
$data = \app\common\model\User::getUserByIds($user_ids);
|
|
$this->success('获取成功',$data);
|
|
}
|
|
|
|
|
|
/**
|
|
* 添加材料单
|
|
*/
|
|
public function addMaterialOrder() {
|
|
$order_id = $this->request->post('order_id');
|
|
$material_ids = $this->request->post('material_ids');
|
|
|
|
if (!$order_id || !$material_ids) {
|
|
$this->error('参数错误');
|
|
}
|
|
|
|
$params = [
|
|
'order_id' => $order_id,
|
|
'material_ids' => $material_ids
|
|
];
|
|
|
|
$res = ProjectOrderMaterial::getInfo($order_id);
|
|
if ($res) {
|
|
$ret = ProjectOrderMaterial::update($params, ['order_id' => $order_id]);
|
|
} else {
|
|
$ret = ProjectOrderMaterial::create($params);
|
|
}
|
|
|
|
if ($ret) {
|
|
$this->success('保存成功',[]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取材料模板
|
|
*/
|
|
public function getMaterialTemp() {
|
|
$ret = ProjectMaterialTemplate::getList();
|
|
$this->success('获取成功',$ret);
|
|
}
|
|
|
|
|
|
/**
|
|
* 获取材料配置
|
|
*/
|
|
public function getMaterial() {
|
|
$ret = ProjectMaterial::getList();
|
|
$this->success('获取成功', $ret);
|
|
}
|
|
|
|
/**
|
|
* 获取材料单
|
|
*/
|
|
public function getMaterialOrder() {
|
|
$order_id = $this->request->get('order_id');
|
|
$ret = ProjectOrderMaterial::getListByOrderId($order_id);
|
|
$this->success('获取成功',$ret);
|
|
}
|
|
|
|
/**
|
|
* 判断用户是不是企业用户或者工程客户
|
|
* @return string
|
|
*/
|
|
public function isCompanyUser($user) {
|
|
$user_type = 'general';
|
|
//是否企业管理员用户
|
|
$data = $this->auth->isCompanyAdminNew($user->id,$user->company_id);
|
|
if ($data) {
|
|
$user_type = 'admin';
|
|
}else {
|
|
$order = ProjectWorkerOrder::where('customer_phone', $user->mobile)->select();
|
|
if ($order) {
|
|
$user_type = 'customer';
|
|
}
|
|
}
|
|
return $user_type;
|
|
}
|
|
|
|
public function isProjectAuth() {
|
|
$comp_user = ProjectCompanyUser::getCompanyIds($this->user_id);
|
|
$order = ProjectWorkerOrder::where('customer_phone', $this->auth->getUser()->mobile)->select();
|
|
|
|
if ($comp_user) {
|
|
$this->success('success',1);
|
|
}
|
|
if ($order) {
|
|
$this->success('success',2);
|
|
}
|
|
$this->success('success', 0);
|
|
}
|
|
|
|
public function isSign() {
|
|
$comp_user = ProjectCompanyUser::getCompanyIds($this->user_id);
|
|
$order = ProjectWorkerOrder::where('customer_phone', $this->auth->getUser()->mobile)->select();
|
|
$urlType = 2;
|
|
if ($comp_user) {
|
|
$urlType = 1;
|
|
}
|
|
|
|
if ($order) {
|
|
$urlType = 2;
|
|
}
|
|
return $urlType;
|
|
}
|
|
|
|
public function getTemplateHtml() {
|
|
$flow_id = $this->request->get('flow_id');
|
|
$order_id = $this->request->get('order_id');
|
|
$res = ProjectCategoryFlow::get($flow_id);
|
|
$user = $this->auth->getUser();
|
|
// var_dump($res->toArray());
|
|
|
|
$phone = $user->mobile;
|
|
$htmlUrl = '';
|
|
//e签宝签署流程开始
|
|
if (!empty($res['sign_url']) && !empty($res['sign_fileId'])) {
|
|
$signFlow = new SignFlow();
|
|
$obj = ProjectOrderFlow::where('flow_id', $flow_id)->where('order_id', $order_id)->find();
|
|
if ($obj['phone']) {
|
|
$phone = $obj['phone'];
|
|
}
|
|
list($page,$x,$y) = $this->getLoaction($res['sign_url']);
|
|
|
|
$company = ProjectWorkerOrder::getCompanyInfo($order_id);
|
|
// var_dump($company);exit();
|
|
$flowId = $obj['sign_flowId'];
|
|
if (empty($flowId)) {
|
|
$flowId = $signFlow->createByFile($res['sign_fileId'],$res['id'],$order_id,$phone,$page,$x,$y,$company);
|
|
$obj->sign_flowId = $flowId;
|
|
$obj->save();
|
|
}
|
|
$signFlow = new SignFlow();
|
|
$url_type = $this->isSign();
|
|
$htmlUrl = $signFlow->getSignUrl($flowId,$company,$phone,$url_type);
|
|
}
|
|
|
|
$this->success('success', $htmlUrl);
|
|
}
|
|
|
|
public function getTemplateFileUrl() {
|
|
$template = new Template();
|
|
$flow_id = $this->request->get('flow_id');
|
|
$order_id = $this->request->get('order_id');
|
|
$user = $this->auth->getUser();
|
|
$res = ProjectCategoryFlow::get($flow_id);
|
|
$obj = ProjectOrderFlow::where('flow_id', $flow_id)->where('order_id', $order_id)->find();
|
|
if (empty($obj)) {
|
|
//模板填写 添加流程开始记录
|
|
$insertData = [
|
|
'flow_id' => $flow_id,
|
|
'order_id' => $order_id,
|
|
'create_time' => time(),
|
|
'phone' => $user->mobile,//记录用签署合同的手机号 查看合同用
|
|
];
|
|
ProjectOrderFlow::add($insertData);
|
|
}
|
|
$htmlUrl = '';
|
|
$msg = '';
|
|
//返回用户填写H5 有签署模板ID 并且模板未填写才去取填写地址
|
|
if ($obj['template_status'] == 1) {
|
|
$this->success('模板已填写完成',1);
|
|
}
|
|
if ($res['sign_templateId']) {
|
|
if ($res['sign_templateId'] == '89ad871246c845b0aed67eeb33047bfe') {//调试申请单
|
|
$order = ProjectWorkerOrder::get($order_id);
|
|
$data = [
|
|
'username' => $order['customer_name'] ?? '',
|
|
'phone' => $order['customer_phone'] ?? '',
|
|
'ht_number' => $order['ht_number']?? '',
|
|
'address' => $order['job_location'].$order['job_location'],
|
|
'mgr_name' => \app\common\model\User::get($order['mgr_id'])->nickname ?? '',
|
|
];
|
|
$htmlUrl = $template->docTemplateFileUrl($flow_id,$res['sign_templateId'],$order_id,$data);
|
|
} else {
|
|
$htmlUrl = $template->docTemplateFileUrl2($flow_id,$res['sign_templateId'],$order_id);
|
|
}
|
|
}
|
|
|
|
$this->success($msg, $htmlUrl);
|
|
}
|
|
|
|
public function getTemplateStatus() {
|
|
$flow_id = $this->request->get('flow_id');
|
|
$order_id = $this->request->get('order_id');
|
|
$obj = ProjectOrderFlow::where('flow_id', $flow_id)->where('order_id', $order_id)->find();
|
|
$status = 0;
|
|
if ($obj) {
|
|
$status = $obj->template_status;
|
|
}
|
|
$this->success('获取填写状态',['tempStatus' => $status]);
|
|
}
|
|
|
|
public function getLoaction($type) {
|
|
if ($type == 1) {
|
|
$page = ['1', '1'];
|
|
$x = [147,400];
|
|
$y = [300,300];
|
|
}
|
|
|
|
if ($type == 2) {//新风系统验收协议
|
|
$page = ['1', '1'];
|
|
$x = [200,450];
|
|
$y = [180,180];
|
|
}
|
|
|
|
if ($type == 3) {//锅炉地暖验收协议
|
|
$page = ['3', '3'];
|
|
$x = [220,420];
|
|
$y = [156,156];
|
|
}
|
|
|
|
if ($type == 4) {//锅炉水系统验收协议
|
|
$page = ['2', '2'];
|
|
$x = [220,420];
|
|
$y = [120,120];
|
|
}
|
|
|
|
if ($type == 5) {//空调氟系统验收协议
|
|
$page = ['3', '3'];
|
|
$x = [207,430];
|
|
$y = [430,430];
|
|
}
|
|
|
|
if ($type == 7) {//空调水系统验收协议
|
|
$page = ['4', '4'];
|
|
$x = [208,430];
|
|
$y = [371,366];
|
|
}
|
|
|
|
return [$page, $x ,$y];
|
|
}
|
|
|
|
|
|
} |