Center.php 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186
  1. <?php
  2. namespace app\data\controller\api\auth;
  3. use app\data\controller\api\Auth;
  4. use app\data\controller\api\Data;
  5. use app\data\model\BaseUserPayment;
  6. use app\data\model\BaseUserUpgrade;
  7. use app\data\model\DataBestKnowledge;
  8. use app\data\model\DataFeedback;
  9. use app\data\model\DataMaintenance;
  10. use app\data\model\DataMerchants;
  11. use app\data\model\DataPoolTalent;
  12. use app\data\model\DataPoolTalentChild;
  13. use app\data\model\DataShipyard;
  14. use app\data\model\DataTeachingKnowledge;
  15. use app\data\model\DataUser;
  16. use app\data\model\DataUserAcceptance;
  17. use app\data\model\DataUserApplyJobInfo;
  18. use app\data\model\DataUserApplyJobInfoChild;
  19. use app\data\model\DataUserBankCard;
  20. use app\data\model\DataUserLeaveMessage;
  21. use app\data\model\DataUserMoneyLog;
  22. use app\data\model\DataUserPurchaseAcceptance;
  23. use app\data\model\DataUserRepair;
  24. use app\data\model\DataUserRepairOffer;
  25. use app\data\model\DataUserVipOrder;
  26. use app\data\model\DataZhicheng;
  27. use app\data\service\payment\WechatPaymentService;
  28. use app\data\service\PaymentService;
  29. use app\data\service\UserAdminService;
  30. use app\data\service\UserUpgradeService;
  31. use think\admin\Storage;
  32. use think\db\Query;
  33. use think\exception\HttpResponseException;
  34. use think\admin\Controller;
  35. use hg\apidoc\annotation\Title;
  36. use hg\apidoc\annotation\Method;
  37. use hg\apidoc\annotation\Param;
  38. use hg\apidoc\annotation\Header;
  39. use hg\apidoc\annotation\Returned;
  40. use think\facade\Db;
  41. use think\facade\Validate;
  42. use WePay\Order;
  43. /**
  44. * @Title("个人中心")
  45. */
  46. class Center extends Auth
  47. {
  48. protected $noNeedLogin=['upload','image','uploadmore'];
  49. /**
  50. * @Title("获取用户资料")
  51. * @Method("post")
  52. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  53. * @Header("api-token",type="string",require=1,default="",desc="token")
  54. * @Returned("token.token",desc="token")
  55. * @Returned("pooltalent",desc="提交的人才库信息,为空则未提交")
  56. * @Returned("pooltalent.audit",desc="人才库审核状态1:待审核 2:审核通过 3:审核不通过")
  57. * @Returned("pooltalent.why",desc="人才库审核不通过原因")
  58. * @Returned("maintenance",desc="提交的维修工申请,为空则未提交")
  59. * @Returned("maintenance.audit",desc="维修工申请审核状态1:待审核 2:审核通过 3:审核不通过")
  60. * @Returned("maintenance.why",desc="维修工申请审核不通过原因")
  61. * @Returned("shipyard",desc="提交的入驻船厂申请,为空则未提交")
  62. * @Returned("shipyard.audit",desc="入驻船厂申请审核状态1:待审核 2:审核通过 3:审核不通过")
  63. * @Returned("shipyard.why",desc="入驻船厂申请审核不通过原因")
  64. * @Returned("merchants",desc="提交的入驻商家申请,为空则未提交")
  65. * @Returned("merchants.audit",desc="入驻商家申请审核状态1:待审核 2:审核通过 3:审核不通过")
  66. * @Returned("merchants.why",desc="入驻商家申请审核不通过原因")
  67. */
  68. public function get()
  69. {
  70. $user = $this->getUser();
  71. $this->success('获取用户资料', $user);
  72. }
  73. /**
  74. * @Title("Base64图片上传")
  75. * @Method("post")
  76. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  77. * @Header("api-token",type="string",require=0,default="",desc="token")
  78. * @Returned("url",desc="图片地址")
  79. */
  80. public function image()
  81. {
  82. try {
  83. $data = $this->_vali(['base64.require' => '图片内容不为空!']);
  84. if (preg_match($preg = '|^data:image/(.*?);base64,|i', $data['base64'])) {
  85. [$ext, $img] = explode('|||', preg_replace($preg, '$1|||', $data['base64']));
  86. if (empty($ext) || !in_array(strtolower($ext), ['png', 'jpg', 'jpeg'])) {
  87. $this->error('图片格式异常!');
  88. }
  89. $name = Storage::name($img, $ext, 'image/');
  90. $info = Storage::instance()->set($name, base64_decode($img));
  91. $this->success('图片上传成功!', ['url' => $info['url']]);
  92. } else {
  93. $this->error('解析内容失败!');
  94. }
  95. } catch (HttpResponseException $exception) {
  96. throw $exception;
  97. } catch (\Exception $exception) {
  98. trace_file($exception);
  99. $this->error($exception->getMessage());
  100. }
  101. }
  102. /**
  103. * @Title("二进制图片、文件上传")
  104. * @Method("post")
  105. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  106. * @Header("api-token",type="string",require=0,default="",desc="token")
  107. * @Param("file",type="file",require=1,default="",desc="文件")
  108. * @Returned("url",desc="图片地址")
  109. */
  110. public function upload()
  111. {
  112. ini_set ("memory_limit","-1");
  113. $file = $this->request->file('file');
  114. if (empty($file)) $this->error('文件上传异常!');
  115. $extension = strtolower($file->getOriginalExtension());
  116. if (in_array($extension, ['php', 'sh'])) $this->error('禁止上传此类文件!');
  117. $bina = file_get_contents($file->getRealPath());
  118. $name = Storage::name($file->getPathname(), $extension, '', 'md5_file');
  119. $info = Storage::instance()->set($name, $bina, false, $file->getOriginalName());
  120. if (is_array($info) && isset($info['url'])) {
  121. $this->success('文件上传成功!', $info);
  122. } else {
  123. $this->error('文件上传失败!');
  124. }
  125. }
  126. /**
  127. * @Title("二进制图片、文件上传多个")
  128. * @Method("post")
  129. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  130. * @Header("api-token",type="string",require=0,default="",desc="token")
  131. * @Param("file[]",type="file",require=1,default="",desc="文件")
  132. * @Returned("url",desc="图片地址")
  133. */
  134. public function uploadmore()
  135. {
  136. ini_set ("memory_limit","-1");
  137. $file = $this->request->file('file');
  138. if (empty($file)) $this->error('文件上传异常!');
  139. $array = [];
  140. foreach ($file as $file){
  141. $extension = strtolower($file->getOriginalExtension());
  142. if (in_array($extension, ['php', 'sh'])) $this->error('禁止上传此类文件!');
  143. $bina = file_get_contents($file->getRealPath());
  144. $name = Storage::name($file->getPathname(), $extension, '', 'md5_file');
  145. $info = Storage::instance()->set($name, $bina, false, $file->getOriginalName());
  146. array_push($array,$info);
  147. }
  148. $this->success('文件上传成功!', $array);
  149. }
  150. /**
  151. * @Title("更新用户资料")
  152. * @Method("post")
  153. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  154. * @Header("api-token",type="string",require=1,default="",desc="token")
  155. * @Param("headimg",type="string",require=0,default="",desc="头像")
  156. * @Param("nickname",type="string",require=0,default="",desc="昵称")
  157. * @Param("email",type="string",require=0,default="",desc="邮箱")
  158. * @Param("base_sex",type="string",require=0,default="",desc="性别")
  159. */
  160. public function set()
  161. {
  162. $data = $this->_vali([
  163. 'headimg.default' => '',
  164. 'nickname.default' => '',
  165. 'email.default' => '',
  166. 'base_sex.default' => '',
  167. ]);
  168. foreach ($data as $key => $vo) if ($vo === '') unset($data[$key]);
  169. if (empty($data)) $this->error('没有修改的数据!');
  170. if (DataUser::mk()->where(['id' => $this->uuid])->update($data) !== false) {
  171. $this->success('更新资料成功!', $this->getUser());
  172. } else {
  173. $this->error('更新资料失败!');
  174. }
  175. }
  176. /**
  177. * @Title("修改密码")
  178. * @Method("post")
  179. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  180. * @Header("api-token",type="string",require=1,default="",desc="token")
  181. * @Param("password",type="string",require=0,default="",desc="原密码")
  182. * @Param("newpassword",type="string",require=0,default="",desc="新密码")
  183. */
  184. public function uppass()
  185. {
  186. $data = $this->_vali([
  187. 'password.require'=>'原密码必须',
  188. 'newpassword.require'=>'新密码必须'
  189. ]);
  190. if ($data['password']==$data['newpassword']) $this->error('原密码与新密码一样');
  191. $pass = DataUser::mk()->where('id',$this->uuid)->value('password');
  192. if (md5($data['password'])!=$pass) $this->error('原密码验证错误');
  193. if (DataUser::mk()->where(['id' => $this->uuid])->update(['password'=>md5($data['newpassword'])]) !== false) {
  194. $this->success('更新密码成功!', $this->getUser());
  195. } else {
  196. $this->error('更新密码失败!');
  197. }
  198. }
  199. /**
  200. * @Title("获取开通vip配置信息")
  201. * @Method("post")
  202. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  203. * @Header("api-token",type="string",require=1,default="",desc="token")
  204. *
  205. * @Returned("price",desc="价格")
  206. * @Returned("user_vip_des",desc="会员权益说明")
  207. * @Returned("user_vip_agreement",desc="会员服务协议")
  208. */
  209. public function getvipinfo(){
  210. $info= [
  211. 'price'=>sysconf('user_vip.price'),
  212. 'user_vip_des'=>sysconf('user_vip.user_vip_des'),
  213. 'user_vip_agreement'=>sysconf('user_vip.user_vip_agreement'),
  214. ];
  215. $this->success('成功',$info);
  216. }
  217. /**
  218. * @Title("获取支付方式")
  219. * @Method("post")
  220. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  221. * @Header("api-token",type="string",require=1,default="",desc="token")
  222. *
  223. * @Returned("type",desc="1:开通会员vip 2:商城、充值")
  224. */
  225. public function channel()
  226. {
  227. $data = $this->_vali([
  228. 'type.require|in:1,2'=>'type有误'
  229. ]);
  230. $type = $data['type'];
  231. // 读取支付通道配置
  232. $query = BaseUserPayment::mk()->where(['status' => 1, 'deleted' => 0])->when($type,function ($query) use ($type){
  233. if ($type==2){
  234. $query->where('type','<>','balance');
  235. }
  236. });
  237. //$query->whereIn('code', str2arr($payments))->whereIn('type', PaymentService::getTypeApi($this->type));
  238. $result = $query->order('sort desc,id desc')->column('type,code,name,cover,content,remark', 'code');
  239. foreach ($result as &$vo) $vo['content'] = ['voucher_qrcode' => json_decode($vo['content'])->voucher_qrcode ?? ''];
  240. $this->success('获取支付参数数据', array_values($result));
  241. }
  242. /**
  243. * @Title("开通会员")
  244. * @Method("post")
  245. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  246. * @Header("api-token",type="string",require=1,default="",desc="token")
  247. * @Param("pay_type",type="string",require=1,default="",desc="支付方式,wx:微信zfb:支付宝yue:余额")
  248. * @Param("difference_pay_type",type="string",require=0,default="",desc="余额支付时,差价支付方式,wx:微信zfb:支付宝")
  249. * @Param("from",type="string",require=0,default="",desc="来源:wx:小程序支付,APP:app支付")
  250. *
  251. */
  252. public function openvip(){
  253. $user = $this->getUser();
  254. $data = $this->_vali([
  255. 'pay_type.require|in:zfb,wx,yue'=>'支付方式',
  256. 'difference_pay_type.default'=>'wx',
  257. 'from.default'=>'wx'
  258. ]);
  259. $all_price = sysconf('user_vip.price');
  260. $order_no = setorderno($this->uuid);
  261. $insert = [
  262. 'uuid'=>$this->uuid,
  263. 'order_no'=>$order_no,
  264. 'all_price'=>$all_price,
  265. 'pay_type'=>$data['pay_type']
  266. ];
  267. $error = 1;
  268. Db::startTrans();
  269. $retrun_data = [];
  270. try {
  271. $order_id = DataUserVipOrder::mk()->insertGetId($insert);
  272. switch ($data['pay_type']){
  273. case 'wx':
  274. break;
  275. case 'zfb':
  276. break;
  277. case 'yue':
  278. if ($user['money']<$all_price){
  279. $insert2['yue_price'] = $user['money'];
  280. $insert2['difference_money'] = bcsub($all_price,$user['money'],2);
  281. $insert2['difference_pay_type'] = $data['difference_pay_type'];
  282. if (empty($data['difference_pay_type']) || !isset($data['difference_pay_type'])){
  283. $error = 0;
  284. $errorinfo = '差价支付方式错误';
  285. }else{
  286. switch ($data['difference_pay_type']){
  287. case 'wx':
  288. $notify_url = sysuri("@data/api.notify/wxpay", [], false, true);
  289. echo $notify_url;die;
  290. $order =PaymentService::instance('M7712738901746185928')->create('oB4A641a1UxxruiYRJyCM42djTf8',$order_no,1,'开通vip','开通','','','',$data['from']);
  291. $retrun_data['order_no'] = $order_no;
  292. $retrun_data['pay_type'] = 'wx';
  293. $retrun_data['pay'] = $order;
  294. $retrun_data['success'] = 0;
  295. break;
  296. case 'zfb':
  297. break;
  298. }
  299. }
  300. }else{
  301. //余额支付
  302. userMoneyChange($all_price,1,$this->uuid,'开通会员',0,$order_id);
  303. DataUser::mk()->where('id',$this->uuid)->update(
  304. [
  305. 'is_vip'=>1,
  306. 'vip_name'=>'船白知会员',
  307. 'vip_order'=>$order_id,
  308. 'vip_datetime'=> $user['is_vip'] ? date('Y-m-d H:i:s',strtotime($user['vip_datetime'])+(365*24*60*60)) : date('Y-m-d H:i:s',time()+(365*24*60*60))
  309. ]
  310. );
  311. DataUserVipOrder::mk()->where('id',$order_id)->update(
  312. [
  313. 'status'=>1,
  314. 'pay_at'=>date('Y-m-d H:i:s')
  315. ]
  316. );
  317. Db::commit();
  318. $retrun_data['order_no'] = $order_no;
  319. $retrun_data['pay_type'] = 'yue';
  320. $retrun_data['pay'] = '';
  321. $retrun_data['success'] = 1;
  322. }
  323. break;
  324. }
  325. } catch (\Exception $e) {
  326. dump($e);
  327. // 回滚事务
  328. Db::rollback();
  329. $error = 0;
  330. $errorinfo = '未知错误';
  331. }
  332. if ($error){
  333. $this->success('成功',$retrun_data);
  334. }
  335. $this->error($errorinfo);
  336. }
  337. /**
  338. * @Title("人才库职称列表")
  339. * @Method("post")
  340. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  341. * @Header("api-token",type="string",require=1,default="",desc="token")
  342. */
  343. public function zclist()
  344. {
  345. $list = DataZhicheng::Show()->select();
  346. $this->success('成功',$list);
  347. }
  348. /**
  349. * @Title("加入人才库/编辑人才库")
  350. * @Method("post")
  351. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  352. * @Header("api-token",type="string",require=1,default="",desc="token")
  353. * @Param("name",type="string",require=1,default="",desc="姓名")
  354. * @Param("sex",type="string",require=1,default="",desc="性别")
  355. * @Param("age",type="string",require=1,default="",desc="年龄")
  356. * @Param("jg",type="string",require=1,default="",desc="籍贯")
  357. * @Param("phone",type="string",require=1,default="",desc="手机号")
  358. * @Param("email",type="string",require=1,default="",desc="邮箱")
  359. * @Param("province",type="string",require=1,default="",desc="省")
  360. * @Param("city",type="string",require=1,default="",desc="市")
  361. * @Param("area",type="string",require=1,default="",desc="区/镇")
  362. * @Param("address",type="string",require=1,default="",desc="详细地址")
  363. * @Param("graduate_school",type="string",require=1,default="",desc="毕业院校")
  364. * @Param("xl",type="string",require=1,default="",desc="学历")
  365. * @Param("major",type="string",require=1,default="",desc="专业")
  366. * @Param("working_life",type="string",require=1,default="",desc="工作年限")
  367. * @Param("tc",type="string",require=1,default="",desc="特长")
  368. * @Param("jn",type="string",require=1,default="",desc="技能")
  369. * @Param("zc_id",type="string",require=1,default="",desc="职称ID")
  370. * @Param("zz_imgs",type="string",require=1,default="",desc="资质证书,多个以逗号隔开")
  371. * @Param("pxjl",type="string",require=1,default="",desc="培训经历")
  372. * @Param("id",type="string",require=0,default="",desc="审核失败,修改,则必传之前提交的ID")
  373. */
  374. public function adduppooltalent()
  375. {
  376. $data = $this->_vali([
  377. 'uuid.default'=>$this->uuid,
  378. 'name.require'=>'姓名必须',
  379. 'sex.require'=>'性别必须',
  380. 'age.require|number|between:1,120'=>'年龄必须,1-120',
  381. 'jg.require'=>'籍贯必须',
  382. 'phone.require'=>'手机号必须',
  383. 'email.require'=>'邮箱必须',
  384. 'province.require'=>'省必须',
  385. 'city.require'=>'市必须',
  386. 'area.require'=>'区/镇必须',
  387. 'address.require'=>'详细地址必须',
  388. 'graduate_school.require'=>'毕业院校必须',
  389. 'xl.require'=>'学历必须',
  390. 'working_life.require'=>'工作年限必须',
  391. 'major.require'=>'专业必须',
  392. 'tc.require'=>'特长必须',
  393. 'jn.require'=>'技能必须',
  394. 'zc_id.require|number'=>'职称必须',
  395. 'zz_imgs.require'=>'资质证书必须',
  396. 'pxjl.require'=>'培训经历必须',
  397. ],'post');
  398. $id = input('id');
  399. if (!Validate::regex($data['phone'], "^1\d{10}$")) {
  400. $this->error('手机号格式错误');
  401. }
  402. DataZhicheng::mk()->where('id',$data['zc_id'])->where('is_del',1)->count() ? : $this->error('职称不存在');
  403. empty($id) ? $id = DataUserAcceptance::mk()->where('uuid',$this->uuid)->value('id') : $data['update_at']=date('Y-m-d H:i:s');
  404. DataPoolTalent::mk()->where('uuid',$this->uuid)->value('audit') == 3 ? $data['audit'] =1 : '';
  405. if (empty($id) ? DataPoolTalent::mk()->insert($data) : DataPoolTalent::mk()->where('id',$id)->update($data)){
  406. $this->success('提交成功');
  407. }
  408. $this->error('提交失败,请稍后重试');
  409. }
  410. /**
  411. * @Title("添加人才库工作经历/编辑人才库工作经历")
  412. * @Method("post")
  413. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  414. * @Header("api-token",type="string",require=1,default="",desc="token")
  415. * @Param("id",type="string",require=1,default="",desc="工作经历ID,编辑时穿")
  416. * @Param("content",type="json",require=0,default="",desc="工作经历json,(company_name:公司名称,position_name:职位名称,on_job_start:在职时间开始,on_job_end:在职时间结束,job_description:工作内容)")
  417. */
  418. public function adduppooltalentchild()
  419. {
  420. $data = $this->_vali([
  421. 'id.default'=>'',
  422. 'content.require'=>'作经历必须',
  423. ]);
  424. $info_id = DataPoolTalent::mk()->where('uuid',$this->uuid)->value('id') ? : DataPoolTalent::mk()->insertGetId(['uuid'=>$this->uuid]);
  425. $child_id = $data['id'];
  426. $child_array = [
  427. 'info_id'=>$info_id,
  428. 'content'=>$data['content']
  429. ];
  430. !empty($child_id) ? $child_array['update_at'] = date('Y-m-d H:i:s') : '';
  431. if (!empty($child_id) ? DataPoolTalentChild::mk()->where('id',$child_id)->update($child_array) : DataPoolTalentChild::mk()->insert($child_array)){
  432. $this->success('成功');
  433. }
  434. $this->error('失败');
  435. }
  436. /**
  437. * @Title("人才库工作经历删除")
  438. * @Method("post")
  439. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  440. * @Header("api-token",type="string",require=1,default="",desc="token")
  441. * @Param("id",type="string",require=1,default="",desc="ID")
  442. */
  443. public function delpooltalentchild(){
  444. $data = $this->_vali([
  445. 'id.require'=>'id必须',
  446. ]);
  447. if (DataPoolTalentChild::mk()->where('id',$data['id'])->delete()){
  448. $this->success('成功');
  449. }
  450. $this->error('失败');
  451. }
  452. /**
  453. * @Title("申请维修工/编辑维修工")
  454. * @Method("post")
  455. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  456. * @Header("api-token",type="string",require=1,default="",desc="token")
  457. * @Param("name",type="string",require=1,default="",desc="姓名")
  458. * @Param("id_card",type="string",require=1,default="",desc="身份证号")
  459. * @Param("email",type="string",require=1,default="",desc="邮箱")
  460. * @Param("province",type="string",require=1,default="",desc="省")
  461. * @Param("city",type="string",require=1,default="",desc="市")
  462. * @Param("area",type="string",require=1,default="",desc="区/镇")
  463. * @Param("address",type="string",require=1,default="",desc="详细地址")
  464. * @Param("id_card_img1",type="string",require=1,default="",desc="身份证人面照片")
  465. * @Param("id_card_img2",type="string",require=1,default="",desc="身份证国徽面照片")
  466. * @Param("business_img",type="string",require=1,default="",desc="营业执照图片")
  467. * @Param("authorization_img",type="string",require=0,default="",desc="厂家授权图片")
  468. * @Param("results",type="string",require=1,default="",desc="以往业绩")
  469. * @Param("id",type="string",require=0,default="",desc="审核失败,修改,则必传之前提交的ID")
  470. */
  471. public function addupmaintenance()
  472. {
  473. $data = $this->_vali([
  474. 'uuid.default'=>$this->uuid,
  475. 'name.require'=>'姓名必须',
  476. 'id_card.require'=>'身份证号必须',
  477. 'email.require'=>'邮箱必须',
  478. 'province.require'=>'省必须',
  479. 'city.require'=>'市必须',
  480. 'area.require'=>'区/镇必须',
  481. 'address.require'=>'详细地址必须',
  482. 'id_card_img1.require'=>'身份证人面照片必须',
  483. 'id_card_img2.require'=>'身份证国徽面照片必须',
  484. 'business_img.require'=>'营业执照图片必须',
  485. 'authorization_img.default'=>'',
  486. 'results.require'=>'以往业绩必须',
  487. ]);
  488. if (!check_idcard($data['id_card'])) $this->error('身份证号格式错误');
  489. $id = input('id');
  490. !empty($id) ? : (DataMaintenance::mk()->where('uuid',$this->uuid)->count() ? $this->error('已经提交过') : '' );
  491. empty($id) ? : $data['update_at']=date('Y-m-d H:i:s');
  492. DataMaintenance::mk()->where('uuid',$this->uuid)->value('audit') == 3 ? $data['audit'] =1 : '';
  493. if (empty($id) ? DataMaintenance::mk()->insert($data) : DataMaintenance::mk()->where('id',$id)->update($data)){
  494. $this->success('提交成功');
  495. }
  496. $this->error('提交失败,请稍后重试');
  497. }
  498. /**
  499. * @Title("申请船厂/编辑船厂")
  500. * @Method("post")
  501. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  502. * @Header("api-token",type="string",require=1,default="",desc="token")
  503. * @Param("name",type="string",require=1,default="",desc="船厂名称")
  504. * @Param("head_img",type="string",require=1,default="",desc="船厂头像")
  505. * @Param("province",type="string",require=1,default="",desc="省")
  506. * @Param("city",type="string",require=1,default="",desc="市")
  507. * @Param("area",type="string",require=1,default="",desc="区/镇")
  508. * @Param("address",type="string",require=1,default="",desc="详细地址")
  509. * @Param("contact_name",type="string",require=1,default="",desc="联系人")
  510. * @Param("contact_phone",type="string",require=1,default="",desc="联系电话")
  511. * @Param("intro",type="string",require=1,default="",desc="船厂简介")
  512. * @Param("environment_imgs",type="string",require=1,default="",desc="船厂环境,多个以英文逗号隔开")
  513. * @Param("product_intro",type="string",require=1,default="",desc="产品简介")
  514. * @Param("business_img",type="string",require=1,default="",desc="营业执照")
  515. * @Param("id",type="string",require=0,default="",desc="审核失败,修改,则必传之前提交的ID")
  516. */
  517. public function addupshipyard()
  518. {
  519. $data = $this->_vali([
  520. 'uuid.default'=>$this->uuid,
  521. 'name.require'=>'船厂名称必须',
  522. 'head_img.require'=>'船厂头像必须',
  523. 'province.require'=>'省必须',
  524. 'city.require'=>'市必须',
  525. 'area.require'=>'区/镇必须',
  526. 'address.require'=>'详细地址必须',
  527. 'contact_name.require'=>'联系人必须',
  528. 'contact_phone.require'=>'联系电话必须',
  529. 'intro.require'=>'船厂简介必须',
  530. 'environment_imgs.require'=>'船厂环境必须',
  531. 'product_intro.require'=>'产品简介必须',
  532. 'business_img.require'=>'营业执照必须',
  533. ]);
  534. $id = input('id');
  535. !empty($id) ? : (DataShipyard::mk()->where('uuid',$this->uuid)->count() ? $this->error('已经提交过') : '' );
  536. empty($id) ? : $data['update_at']=date('Y-m-d H:i:s');
  537. DataShipyard::mk()->where('uuid',$this->uuid)->value('audit') == 3 ? $data['audit'] =1 : '';
  538. if (empty($id) ? DataShipyard::mk()->insert($data) : DataShipyard::mk()->where('id',$id)->update($data)){
  539. $this->success('提交成功');
  540. }
  541. $this->error('提交失败,请稍后重试');
  542. }
  543. /**
  544. * @Title("申请商家/编辑商家")
  545. * @Method("post")
  546. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  547. * @Header("api-token",type="string",require=1,default="",desc="token")
  548. * @Param("name",type="string",require=1,default="",desc="商家名称")
  549. * @Param("head_img",type="string",require=1,default="",desc="商家头像")
  550. * @Param("province",type="string",require=1,default="",desc="省")
  551. * @Param("city",type="string",require=1,default="",desc="市")
  552. * @Param("area",type="string",require=1,default="",desc="区/镇")
  553. * @Param("address",type="string",require=1,default="",desc="详细地址")
  554. * @Param("contact_name",type="string",require=1,default="",desc="联系人")
  555. * @Param("contact_phone",type="string",require=1,default="",desc="联系电话")
  556. * @Param("intro",type="string",require=1,default="",desc="商家简介")
  557. * @Param("imgs_videos",type="string",require=1,default="",desc="图片及视频,以英文逗号隔开")
  558. * @Param("business_img",type="string",require=1,default="",desc="营业执照")
  559. * @Param("id",type="string",require=0,default="",desc="审核失败,修改,则必传之前提交的ID")
  560. */
  561. public function addupmerchants()
  562. {
  563. $data = $this->_vali([
  564. 'uuid.default'=>$this->uuid,
  565. 'name.require'=>'商家名称必须',
  566. 'head_img.require'=>'商家头像必须',
  567. 'province.require'=>'省必须',
  568. 'city.require'=>'市必须',
  569. 'area.require'=>'区/镇必须',
  570. 'address.require'=>'详细地址必须',
  571. 'contact_name.require'=>'联系人必须',
  572. 'contact_phone.require'=>'联系电话必须',
  573. 'intro.require'=>'商家简介必须',
  574. 'imgs_videos.require'=>'图片及视频必须',
  575. 'business_img.require'=>'营业执照必须',
  576. ]);
  577. $id = input('id');
  578. !empty($id) ? : (DataMerchants::mk()->where('uuid',$this->uuid)->count() ? $this->error('已经提交过') : '' );
  579. empty($id) ? : $data['update_at']=date('Y-m-d H:i:s');
  580. DataMerchants::mk()->where('uuid',$this->uuid)->value('audit') == 3 ? $data['audit'] =1 : '';
  581. if (empty($id) ? DataMerchants::mk()->insert($data) : DataMerchants::mk()->where('id',$id)->update($data)){
  582. $this->success('提交成功');
  583. }
  584. $this->error('提交失败,请稍后重试');
  585. }
  586. /**
  587. * @Title("实名认证")
  588. * @Method("post")
  589. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  590. * @Header("api-token",type="string",require=1,default="",desc="token")
  591. * @Param("username",type="string",require=1,default="",desc="真实姓名")
  592. * @Param("id_card",type="string",require=1,default="",desc="身份证号")
  593. */
  594. public function userCertification()
  595. {
  596. $user = $this->getUser();
  597. if ($user['is_auth']) $this->error('已实名认证');
  598. $data = $this->_vali([
  599. 'username.require'=>'真实姓名必须',
  600. 'id_card.require'=>'身份证号必须',
  601. 'is_auth.default'=>1
  602. ]);
  603. if (!isCreditNo($data['id_card'])) $this->error('身份证号格式错误');
  604. DataUser::mk()->where('id_card',$data['id_card'])->count() ? $this->error('身份证号已认证过') : '';
  605. if (DataUser::mk()->where(['id' => $this->uuid])->update($data) !== false) {
  606. $this->success('实名认证成功!');
  607. } else {
  608. $this->error('实名认证失败!');
  609. }
  610. }
  611. /**
  612. * @Title("钱包-我的余额")
  613. * @Method("post")
  614. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  615. * @Header("api-token",type="string",require=1,default="",desc="token")
  616. */
  617. public function moneylog(){
  618. $user = $this->getUser();
  619. $list = DataUserMoneyLog::Show($this->uuid)->paginate();
  620. $money = $user['money'];
  621. $bank_count = DataUserBankCard::Show($this->uuid)->count();
  622. $this->success('成功',compact('money','bank_count','list'));
  623. }
  624. /**
  625. * @Title("钱包-我的银行卡列表")
  626. * @Method("post")
  627. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  628. * @Header("api-token",type="string",require=1,default="",desc="token")
  629. */
  630. public function mybanklist(){
  631. $list = DataUserBankCard::Show($this->uuid)->select();
  632. $this->success('成功',$list);
  633. }
  634. /**
  635. * @Title("绑定银行卡")
  636. * @Method("post")
  637. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  638. * @Header("api-token",type="string",require=1,default="",desc="token")
  639. * @Param("name",type="string",require=1,default="",desc="姓名")
  640. * @Param("id_card",type="string",require=1,default="",desc="银行卡号")
  641. * @Param("id",type="string",require=0,default="",desc="修改,则必传之前提交的ID")
  642. */
  643. public function bind_bank(){
  644. $data = $this->_vali([
  645. 'uuid'=>$this->uuid,
  646. 'name.require'=>'姓名必须',
  647. 'id_card.require'=>'卡号必须',
  648. ]);
  649. !checkbank($data['id_card']) ? $this->error('卡号不正确') : '';
  650. $bank_name = bankInfo($data['id_card']);
  651. empty($bank_name) ? $this->error('卡号不正确或未录入') : '';
  652. $data['card_name'] = $bank_name;
  653. $id = input('id');
  654. DataUserBankCard::Show($this->uuid,$data['id_card'],$id)->count() ? $this->error('卡号已存在') : '';
  655. empty($id) ? : $data['update_at']=date('Y-m-d H:i:s');
  656. if (empty($id) ? DataUserBankCard::mk()->insert($data) : DataUserBankCard::mk()->where('id',$id)->update($data)){
  657. $this->success('提交成功');
  658. }
  659. $this->error('提交失败,请稍后重试');
  660. }
  661. /**
  662. * @Title("删除银行卡")
  663. * @Method("post")
  664. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  665. * @Header("api-token",type="string",require=1,default="",desc="token")
  666. * @Param("id",type="string",require=0,default="",desc="修改,则必传之前提交的ID")
  667. */
  668. public function delbank(){
  669. $data = $this->_vali([
  670. 'id.require'=>'id必须',
  671. ]);
  672. if (DataUserBankCard::mk()->where('id',$data['id'])->update(['is_del'=>0,'update_at'=>date('Y-m-d H:i:s')])){
  673. $this->success('删除成功');
  674. }
  675. $this->error('删除失败,请稍后重试');
  676. }
  677. /**
  678. * @Title("意见反馈列表")
  679. * @Method("post")
  680. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  681. * @Header("api-token",type="string",require=1,default="",desc="token")
  682. * @Param("page&limit",type="string",require=0,default="",desc="分页")
  683. */
  684. public function feedbacklist(){
  685. $list = DataFeedback::Show($this->uuid)->with(['reply'])->paginate();
  686. $this->success('成功',$list);
  687. }
  688. /**
  689. * @Title("意见反馈提交")
  690. * @Method("post")
  691. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  692. * @Header("api-token",type="string",require=1,default="",desc="token")
  693. * @Param("content",type="string",require=1,default="",desc="反馈内容")
  694. * @Param("imgs",type="string",require=0,default="",desc="图片,以逗号隔开")
  695. * @Param("phone",type="string",require=0,default="",desc="手机号")
  696. * @Param("id",type="string",require=0,default="",desc="修改,则必传之前提交的ID,只有未回复的能修改")
  697. */
  698. public function subfeedback(){
  699. $data = $this->_vali([
  700. 'uuid'=>$this->uuid,
  701. 'content.require'=>'反馈内容必须',
  702. 'imgs.default'=>'',
  703. 'phone.default'=>''
  704. ]);
  705. empty($id) ? : $data['update_at']=date('Y-m-d H:i:s');
  706. if (empty($id) ? DataFeedback::mk()->insert($data) : DataFeedback::mk()->where('id',$id)->update($data)){
  707. $this->success('提交成功');
  708. }
  709. $this->error('提交失败,请稍后重试');
  710. }
  711. /**
  712. * @Title("意见反馈删除")
  713. * @Method("post")
  714. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  715. * @Header("api-token",type="string",require=1,default="",desc="token")
  716. * @Param("id",type="string",require=1,default="",desc="反馈ID")
  717. */
  718. public function delfeedback(){
  719. $data = $this->_vali([
  720. 'id.require'=>'ID必须',
  721. 'is_del.default'=>'0',
  722. ]);
  723. $id = $data['id'];
  724. unset($data['id']);
  725. DataFeedback::Show($this->uuid,$id)->count() ? '' : $this->error('信息不存在');
  726. if (DataFeedback::mk()->where('id',$id)->update($data)){
  727. $this->success('删除成功');
  728. }
  729. $this->error('删除失败,请稍后重试');
  730. }
  731. /**
  732. * @Title("我的发布列表")
  733. * @Method("post")
  734. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  735. * @Header("api-token",type="string",require=1,default="",desc="token")
  736. * @Param("type",type="string",require=1,default="",desc="1:知识教学2:百知文库3:应聘信息")
  737. * @Returned("audit",desc="1:待审核2:审核成功3:审核失败")
  738. * @Returned("why",desc="审核失败原因")
  739. */
  740. public function myrelease(){
  741. $data = $this->_vali([
  742. 'type.require|in:1,2,3'=>'type有误'
  743. ]);
  744. switch ($data['type']){
  745. case 1:
  746. $list = DataTeachingKnowledge::mk()
  747. ->where('uuid',$this->uuid)
  748. ->where('is_del',1)
  749. ->with(['user'=>function($query){
  750. $query->field('id,headimg,nickname');
  751. }])
  752. ->order('id desc')->paginate();
  753. break;
  754. case 2:
  755. $list = DataBestKnowledge::mk()
  756. ->where('uuid',$this->uuid)
  757. ->where('is_del',1)
  758. ->with(['user'=>function($query){
  759. $query->field('id,headimg,nickname');
  760. },'classTo'])
  761. ->paginate();
  762. break;
  763. case 3:
  764. $list = DataUserApplyJobInfo::mk()
  765. ->where('uuid',$this->uuid)
  766. ->with(['workexperience','professionalskills','certificate'])
  767. ->findOrEmpty();
  768. break;
  769. }
  770. $this->success('成功',$list);
  771. }
  772. /**
  773. * @Title("应聘信息隐藏,取消隐藏")
  774. * @Method("post")
  775. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  776. * @Header("api-token",type="string",require=1,default="",desc="token")
  777. * @Param("hidden",type="string",require=1,default="",desc="0:隐藏 1:显示")
  778. */
  779. public function canhidden(){
  780. $data = $this->_vali([
  781. 'hidden.require|in:0,1'=>'字段有误',
  782. 'update_at.default'=>date('Y-m-d H:i:s')
  783. ]);
  784. DataUserApplyJobInfo::mk()->where('uuid',$this->uuid)->findOrEmpty() ? : $this->error('未提交') ;
  785. if (DataUserApplyJobInfo::mk()->where('uuid',$this->uuid)->update($data)){
  786. $this->success('成功');
  787. }
  788. $this->error('失败');
  789. }
  790. /**
  791. * @Title("我的需求")
  792. * @Method("post")
  793. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  794. * @Header("api-token",type="string",require=1,default="",desc="token")
  795. * @Param("type",type="string",require=1,default="",desc="1:采购接单需求2:船机修理接单需求")
  796. */
  797. public function myneed(){
  798. $data = $this->_vali([
  799. 'type.require|in:1,2'=>'字段有误',
  800. ]);
  801. switch ($data['type']){
  802. case 1:
  803. $info = DataUserPurchaseAcceptance::mk()
  804. ->where('uuid',$this->uuid)
  805. ->findOrEmpty();
  806. break;
  807. case 2:
  808. $info = DataUserAcceptance::mk()
  809. ->where('uuid',$this->uuid)
  810. ->findOrEmpty();
  811. break;
  812. }
  813. $this->success('成功',$info);
  814. }
  815. /**
  816. * @Title("发布、修改采购接单需求")
  817. * @Method("post")
  818. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  819. * @Header("api-token",type="string",require=1,default="",desc="token")
  820. * @Param("description",type="string",require=1,default="",desc="需求说明")
  821. * @Param("business_img",type="string",require=1,default="",desc="营业执照或身份证照")
  822. * @Param("imgs",type="string",require=1,default="",desc="图片及资质证件图片,多个以英文逗号隔开")
  823. * @Param("hidden",type="string",require=0,default="1",desc="是否隐藏1:不隐藏 2:隐藏")
  824. * @Param("province",type="string",require=1,default="",desc="定位-省")
  825. * @Param("city",type="string",require=1,default="",desc="定位-市")
  826. * @Param("area",type="string",require=1,default="",desc="定位-区")
  827. * @Param("id",type="string",require=0,default="",desc="修改时,传ID")
  828. */
  829. public function subpurchaseacceptance(){
  830. $data = $this->_vali([
  831. 'uuid.default'=>$this->uuid,
  832. 'description.require'=>'需求说明必须',
  833. 'business_img.require'=>'营业执照或身份证照必须',
  834. 'imgs.require'=>'图片及资质证件图片必须',
  835. 'province.require'=>'定位-省',
  836. 'city.require'=>'定位-市',
  837. 'area.require'=>'定位-区',
  838. 'hidden.default'=>1
  839. ]);
  840. $id = input('id');
  841. empty($id) ? $id = DataUserPurchaseAcceptance::mk()->where('uuid',$this->uuid)->value('id') : '' ;
  842. empty($id) ? : $data['update_at']=date('Y-m-d H:i:s');
  843. if (empty($id) ? DataUserPurchaseAcceptance::mk()->insert($data) : DataUserPurchaseAcceptance::mk()->where('id',$id)->update($data)){
  844. $this->success('提交成功');
  845. }
  846. $this->error('提交失败,请稍后重试');
  847. }
  848. /**
  849. * @Title("维修订单")
  850. * @Method("post")
  851. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  852. * @Header("api-token",type="string",require=1,default="",desc="token")
  853. * @Param("type",type="string",require=1,default="",desc="1:我是船老板2:我是维修工")
  854. * @Param("status",type="string",require=1,default="",desc="1:未报价2:已报价3:已匹配")
  855. */
  856. public function repair(){
  857. $data = $this->_vali([
  858. 'type.require|in:1,2'=>'字段有误',
  859. 'status.require|in:1,2,3'=>'字段有误',
  860. ]);
  861. switch ($data['type']){
  862. case 1:
  863. $list = DataUserRepair::mk()
  864. ->where('uuid',$this->uuid)
  865. ->where('status',$data['status'])
  866. ->where('is_del',1)
  867. ->paginate();
  868. break;
  869. case 2:
  870. $status = $data['status'];
  871. $list = DataUserRepairOffer::mk()
  872. ->hasWhere('repair',function (Query $query){
  873. $query->where('is_del',1);
  874. })
  875. ->with(['repair'=>function($query){
  876. $query->withoutField('is_del,update_at');
  877. }])
  878. ->where('offer_id',$this->uuid)
  879. ->where(function ($query) use ($status){
  880. $repair_ids = DataUserRepairOffer::mk()
  881. ->where('offer_id',$this->uuid)
  882. ->where('price','>',0)
  883. ->group('repair_id')
  884. ->column('repair_id');
  885. switch ($status){
  886. case 1:
  887. $query->whereNotIn('repair_id',$repair_ids)->where('is_deal',0)->where('status',2);
  888. break;
  889. case 2:
  890. $query->whereIn('repair_id',$repair_ids)->where('is_deal',0)->where('status',2);
  891. break;
  892. case 3:
  893. $query->where('is_deal',1)->where('status',3);
  894. break;
  895. }
  896. })
  897. ->field('data_user_repair_offer.id,repair_id,offer_id')
  898. ->order('id desc')
  899. ->group('repair_id')
  900. ->paginate();
  901. break;
  902. }
  903. $this->success('成功',$list);
  904. }
  905. /**
  906. * @Title("维修订单删除(只有维修订单未报价和已报价可以删除)")
  907. * @Method("post")
  908. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  909. * @Header("api-token",type="string",require=1,default="",desc="token")
  910. * @Param("id",type="string",require=1,default="",desc="type为1时:维修单ID type为2时报价记录ID")
  911. */
  912. public function repairdel(){
  913. $data = $this->_vali([
  914. 'id.require'=>'id有误',
  915. ]);
  916. if (DataUserRepair::mk()->where('id',$data['id'])->where('uuid',$this->uuid)->update(['is_del'=>0])){
  917. $this->success('成功');
  918. }
  919. $this->error('失败');
  920. }
  921. /**
  922. * @Title("维修订单详情页")
  923. * @Method("post")
  924. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  925. * @Header("api-token",type="string",require=1,default="",desc="token")
  926. * @Param("type",type="string",require=1,default="",desc="1:我是船老板2:我是维修工")
  927. * @Param("id",type="string",require=1,default="",desc="type为1时:维修单ID type为2时报价记录ID")
  928. */
  929. public function repairdetail(){
  930. $data = $this->_vali([
  931. 'type.require|in:1,2'=>'字段有误',
  932. 'id.require'=>'id有误',
  933. ]);
  934. switch ($data['type']){
  935. case 1:
  936. $info = DataUserRepair::mk()
  937. ->where('uuid',$this->uuid)
  938. ->where('is_del',1)
  939. ->where('id',$data['id'])
  940. ->with(['user'=>function($query){
  941. $query->field('id,nickname,headimg,phone');
  942. },'offer'=>function($query){
  943. $query->field('id,repair_id,offer_id,price,imgs')->group('offer_id')
  944. ->with(['user'=>function($query){
  945. $query->field('id,nickname,headimg,phone');
  946. }]);
  947. },'success'=>function($query){
  948. $query->field('id,nickname,headimg,phone');
  949. }])
  950. ->find()->toArray();
  951. foreach ($info['offer'] as &$v){
  952. $in = DataUserRepairOffer::mk()
  953. ->where('repair_id',$data['id'])
  954. ->where('offer_id',$v['offer_id'])
  955. ->order('id desc')
  956. ->limit(1)
  957. ->field('id,price')->find();
  958. $v['id'] = $in->id;
  959. $v['price'] = $in->price;
  960. }
  961. break;
  962. case 2:
  963. $info = DataUserRepairOffer::mk()
  964. ->where('id',$data['id'])
  965. ->with(['user'=>function($query){
  966. $query->field('id,nickname,headimg,phone');
  967. },'repair'=>function($query){
  968. $query->with(['user'=>function($query){
  969. $query->field('id,nickname,headimg,phone');
  970. }]);
  971. }])
  972. ->findOrEmpty();
  973. break;
  974. }
  975. $this->success('成功',$info);
  976. }
  977. /**
  978. * @Title("维修订单确认匹配")
  979. * @Method("post")
  980. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  981. * @Header("api-token",type="string",require=1,default="",desc="token")
  982. * @Param("id",type="string",require=1,default="",desc="维修单ID")
  983. * @Param("offer_id",type="string",require=1,default="",desc="匹配的记录ID")
  984. */
  985. public function repairoffer(){
  986. $data = $this->_vali([
  987. 'id.require'=>'id有误',
  988. 'offer_id.require'=>'offer_id有误',
  989. ]);
  990. DataUserRepair::mk()->where('id',$data['id'])->value('status') == 3 ? $this->error('订单已经匹配成功') : '';
  991. $offer = DataUserRepairOffer::mk()->where('id',$data['offer_id'])->find();
  992. if (DataUserRepair::mk()->where('id',$data['id'])->update(['status'=>3,'success_uuid'=>$offer->offer_id,'success_price'=>$offer->price,'success_at'=>date('Y-m-d H:i:s')])
  993. &&
  994. DataUserRepairOffer::mk()->where('id',$data['offer_id'])->update(['is_deal'=>1,'deal_at'=>date('Y-m-d H:i:s')])){
  995. $this->success('成功');
  996. }
  997. $this->error('失败');
  998. }
  999. /**
  1000. * @Title("维修订单详情页用户报价列表点击查看详情")
  1001. * @Method("post")
  1002. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1003. * @Header("api-token",type="string",require=1,default="",desc="token")
  1004. * @Param("id",type="string",require=1,default="",desc="维修单ID")
  1005. * @Param("offer_id",type="string",require=1,default="",desc="匹配的记录ID")
  1006. */
  1007. public function userofferinfo(){
  1008. $data = $this->_vali([
  1009. 'id.require'=>'id有误',
  1010. 'offer_id.require'=>'offer_id有误',
  1011. ]);
  1012. $offer_id = $data['offer_id'];
  1013. $list = DataUserRepairOffer::mk()
  1014. ->where('repair_id',$data['id'])
  1015. ->where(function ($query) use ($offer_id){
  1016. $query->where('offer_id',$offer_id);
  1017. })
  1018. ->field('id,price')
  1019. ->select();
  1020. $imgs = array_filter(explode(',',DataUserRepairOffer::mk()->where('repair_id',$data['id'])
  1021. ->where('offer_id',$this->uuid)
  1022. ->order('id desc')
  1023. ->limit(1)
  1024. ->value('imgs')));
  1025. $messagelist = DataUserLeaveMessage::mk()
  1026. ->where('type',1)
  1027. ->where('link_id',$data['id'])
  1028. ->with(['user'=>function($query){
  1029. $query->field('id,nickname,headimg');
  1030. }])
  1031. ->field('id,uuid,uuid2,content,create_at')
  1032. ->select();
  1033. $this->success('成功',compact('list','imgs','messagelist'));
  1034. }
  1035. /**
  1036. * @Title("维修订单留言")
  1037. * @Method("post")
  1038. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1039. * @Header("api-token",type="string",require=1,default="",desc="token")
  1040. * @Param("id",type="string",require=1,default="",desc="维修单ID")
  1041. * @Param("offer_id",type="string",require=1,default="",desc="匹配的记录ID")
  1042. * @Param("content",type="string",require=1,default="",desc="内容")
  1043. */
  1044. public function subleavemessage(){
  1045. $data = $this->_vali([
  1046. 'id.require'=>'id有误',
  1047. 'offer_id.require'=>'offer_id有误',
  1048. 'content.require'=>'内容必须',
  1049. ]);
  1050. $offer = DataUserRepairOffer::mk()->where('id',$data['offer_id'])->findOrEmpty();
  1051. $array = [
  1052. 'uuid'=>$this->uuid,
  1053. 'uuid2'=>$offer->offer_id,
  1054. 'content'=>$data['content'],
  1055. 'type'=>1,
  1056. 'link_id'=>$data['id'],
  1057. ];
  1058. if (DataUserLeaveMessage::mk()->insert($array)){
  1059. $this->success('成功');
  1060. }
  1061. $this->error('失败');
  1062. }
  1063. /**
  1064. * @Title("维修订单维修工回复留言")
  1065. * @Method("post")
  1066. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1067. * @Header("api-token",type="string",require=1,default="",desc="token")
  1068. * @Param("id",type="string",require=1,default="",desc="维修单ID")
  1069. * @Param("content",type="string",require=1,default="",desc="内容")
  1070. */
  1071. public function subofferleavemessage(){
  1072. $data = $this->_vali([
  1073. 'id.require'=>'id有误',
  1074. 'content.require'=>'内容必须',
  1075. ]);
  1076. $repair = DataUserRepair::mk()->where('id',$data['id'])->findOrEmpty();
  1077. $array = [
  1078. 'uuid'=>$this->uuid,
  1079. 'uuid2'=>$repair->uuid,
  1080. 'content'=>$data['content'],
  1081. 'type'=>1,
  1082. 'link_id'=>$data['id'],
  1083. ];
  1084. if (DataUserLeaveMessage::mk()->insert($array)){
  1085. $this->success('成功');
  1086. }
  1087. $this->error('失败');
  1088. }
  1089. /**
  1090. * @Title("维修订单维修工查看留言列表")
  1091. * @Method("post")
  1092. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1093. * @Header("api-token",type="string",require=1,default="",desc="token")
  1094. * @Param("id",type="string",require=1,default="",desc="维修单ID")
  1095. */
  1096. public function suboffermessagelist(){
  1097. $data = $this->_vali([
  1098. 'id.require'=>'id有误',
  1099. ]);
  1100. $messagelist = DataUserLeaveMessage::mk()
  1101. ->where('type',1)
  1102. ->where('link_id',$data['id'])
  1103. ->with(['user'=>function($query){
  1104. $query->field('id,nickname,headimg');
  1105. }])
  1106. ->field('id,uuid,uuid2,content,create_at')
  1107. ->select();
  1108. $this->success('成功',$messagelist);
  1109. }
  1110. }