Center.php 65 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512
  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\BaseUserMessage;
  6. use app\data\model\BaseUserMessageRead;
  7. use app\data\model\BaseUserPayment;
  8. use app\data\model\BaseUserUpgrade;
  9. use app\data\model\DataBestKnowledge;
  10. use app\data\model\DataCollectionLog;
  11. use app\data\model\DataFeedback;
  12. use app\data\model\DataMaintenance;
  13. use app\data\model\DataMerchants;
  14. use app\data\model\DataPoolTalent;
  15. use app\data\model\DataPoolTalentChild;
  16. use app\data\model\DataShipyard;
  17. use app\data\model\DataTeachingKnowledge;
  18. use app\data\model\DataUser;
  19. use app\data\model\DataUserAcceptance;
  20. use app\data\model\DataUserApplyJobInfo;
  21. use app\data\model\DataUserApplyJobInfoChild;
  22. use app\data\model\DataUserBankCard;
  23. use app\data\model\DataUserLeaveMessage;
  24. use app\data\model\DataUserMoneyLog;
  25. use app\data\model\DataUserPurchaseAcceptance;
  26. use app\data\model\DataUserRepair;
  27. use app\data\model\DataUserRepairOffer;
  28. use app\data\model\DataUserVipOrder;
  29. use app\data\model\DataUserWithdraw;
  30. use app\data\model\DataZhicheng;
  31. use app\data\model\ShopCoordination;
  32. use app\data\model\ShopFavourite;
  33. use app\data\model\ShopOcean;
  34. use app\data\model\ShopProduction;
  35. use app\data\model\ShopPurchase;
  36. use app\data\service\payment\WechatPaymentService;
  37. use app\data\service\PaymentService;
  38. use app\data\service\UserAdminService;
  39. use app\data\service\UserUpgradeService;
  40. use think\admin\Storage;
  41. use think\db\Query;
  42. use think\exception\HttpResponseException;
  43. use think\admin\Controller;
  44. use hg\apidoc\annotation\Title;
  45. use hg\apidoc\annotation\Method;
  46. use hg\apidoc\annotation\Param;
  47. use hg\apidoc\annotation\Header;
  48. use hg\apidoc\annotation\Returned;
  49. use think\facade\Db;
  50. use think\facade\Validate;
  51. use WePay\Order;
  52. /**
  53. * @Title("个人中心")
  54. */
  55. class Center extends Auth
  56. {
  57. protected $noNeedLogin=['upload','image','uploadmore'];
  58. /**
  59. * @Title("获取用户资料")
  60. * @Method("post")
  61. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  62. * @Header("api-token",type="string",require=1,default="",desc="token")
  63. * @Returned("token.token",desc="token")
  64. * @Returned("pooltalent",desc="提交的人才库信息,为空则未提交")
  65. * @Returned("pooltalent.audit",desc="人才库审核状态1:待审核 2:审核通过 3:审核不通过")
  66. * @Returned("pooltalent.why",desc="人才库审核不通过原因")
  67. * @Returned("maintenance",desc="提交的维修工申请,为空则未提交")
  68. * @Returned("maintenance.audit",desc="维修工申请审核状态1:待审核 2:审核通过 3:审核不通过")
  69. * @Returned("maintenance.why",desc="维修工申请审核不通过原因")
  70. * @Returned("shipyard",desc="提交的入驻船厂申请,为空则未提交")
  71. * @Returned("shipyard.audit",desc="入驻船厂申请审核状态1:待审核 2:审核通过 3:审核不通过")
  72. * @Returned("shipyard.why",desc="入驻船厂申请审核不通过原因")
  73. * @Returned("merchants",desc="提交的入驻商家申请,为空则未提交")
  74. * @Returned("merchants.audit",desc="入驻商家申请审核状态1:待审核 2:审核通过 3:审核不通过")
  75. * @Returned("merchants.why",desc="入驻商家申请审核不通过原因")
  76. * @Returned("collection_count",desc="收藏数量")
  77. */
  78. public function get()
  79. {
  80. $user = $this->getUser();
  81. $user['collection_count'] = DataCollectionLog::mk()->where('uuid',$this->uuid)->where('cate',1)->whereNotIn('type',[3,4])->count();
  82. $this->success('获取用户资料', $user);
  83. }
  84. /**
  85. * @Title("平台规则")
  86. * @Method("post")
  87. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  88. * @Header("api-token",type="string",require=1,default="",desc="token")
  89. *
  90. * @Returned("platform_rules",desc="平台规则")
  91. */
  92. public function getplatformrules(){
  93. $info= [
  94. 'platform_rules'=>sysconf('platform.platform_rules'),
  95. ];
  96. $this->success('成功',$info);
  97. }
  98. /**
  99. * @Title("Base64图片上传")
  100. * @Method("post")
  101. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  102. * @Header("api-token",type="string",require=0,default="",desc="token")
  103. * @Returned("url",desc="图片地址")
  104. */
  105. public function image()
  106. {
  107. try {
  108. $data = $this->_vali(['base64.require' => '图片内容不为空!']);
  109. if (preg_match($preg = '|^data:image/(.*?);base64,|i', $data['base64'])) {
  110. [$ext, $img] = explode('|||', preg_replace($preg, '$1|||', $data['base64']));
  111. if (empty($ext) || !in_array(strtolower($ext), ['png', 'jpg', 'jpeg'])) {
  112. $this->error('图片格式异常!');
  113. }
  114. $name = Storage::name($img, $ext, 'image/');
  115. $info = Storage::instance()->set($name, base64_decode($img));
  116. $this->success('图片上传成功!', ['url' => $info['url']]);
  117. } else {
  118. $this->error('解析内容失败!');
  119. }
  120. } catch (HttpResponseException $exception) {
  121. throw $exception;
  122. } catch (\Exception $exception) {
  123. trace_file($exception);
  124. $this->error($exception->getMessage());
  125. }
  126. }
  127. /**
  128. * @Title("二进制图片、文件上传")
  129. * @Method("post")
  130. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  131. * @Header("api-token",type="string",require=0,default="",desc="token")
  132. * @Param("file",type="file",require=1,default="",desc="文件")
  133. * @Returned("url",desc="图片地址")
  134. */
  135. public function upload()
  136. {
  137. ini_set ("memory_limit","-1");
  138. $file = $this->request->file('file');
  139. if (empty($file)) $this->error('文件上传异常!');
  140. $extension = strtolower($file->getOriginalExtension());
  141. if (in_array($extension, ['php', 'sh'])) $this->error('禁止上传此类文件!');
  142. $bina = file_get_contents($file->getRealPath());
  143. $name = Storage::name($file->getPathname(), $extension, '', 'md5_file');
  144. $info = Storage::instance()->set($name, $bina, false, $file->getOriginalName());
  145. if (is_array($info) && isset($info['url'])) {
  146. $this->success('文件上传成功!', $info);
  147. } else {
  148. $this->error('文件上传失败!');
  149. }
  150. }
  151. /**
  152. * @Title("二进制图片、文件上传多个")
  153. * @Method("post")
  154. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  155. * @Header("api-token",type="string",require=0,default="",desc="token")
  156. * @Param("file[]",type="file",require=1,default="",desc="文件")
  157. * @Returned("url",desc="图片地址")
  158. */
  159. public function uploadmore()
  160. {
  161. ini_set ("memory_limit","-1");
  162. $file = $this->request->file('file');
  163. if (empty($file)) $this->error('文件上传异常!');
  164. $array = [];
  165. foreach ($file as $file){
  166. $extension = strtolower($file->getOriginalExtension());
  167. if (in_array($extension, ['php', 'sh'])) $this->error('禁止上传此类文件!');
  168. $bina = file_get_contents($file->getRealPath());
  169. $name = Storage::name($file->getPathname(), $extension, '', 'md5_file');
  170. $info = Storage::instance()->set($name, $bina, false, $file->getOriginalName());
  171. array_push($array,$info);
  172. }
  173. $this->success('文件上传成功!', $array);
  174. }
  175. /**
  176. * @Title("更新用户资料")
  177. * @Method("post")
  178. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  179. * @Header("api-token",type="string",require=1,default="",desc="token")
  180. * @Param("headimg",type="string",require=0,default="",desc="头像")
  181. * @Param("nickname",type="string",require=0,default="",desc="昵称")
  182. * @Param("email",type="string",require=0,default="",desc="邮箱")
  183. * @Param("base_sex",type="string",require=0,default="",desc="性别")
  184. */
  185. public function set()
  186. {
  187. $data = $this->_vali([
  188. 'headimg.default' => '',
  189. 'nickname.default' => '',
  190. 'email.default' => '',
  191. 'base_sex.default' => '',
  192. ]);
  193. foreach ($data as $key => $vo) if ($vo === '') unset($data[$key]);
  194. if (empty($data)) $this->error('没有修改的数据!');
  195. if (DataUser::mk()->where(['id' => $this->uuid])->update($data) !== false) {
  196. $this->success('更新资料成功!', $this->getUser());
  197. } else {
  198. $this->error('更新资料失败!');
  199. }
  200. }
  201. /**
  202. * @Title("修改密码")
  203. * @Method("post")
  204. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  205. * @Header("api-token",type="string",require=1,default="",desc="token")
  206. * @Param("password",type="string",require=0,default="",desc="原密码")
  207. * @Param("newpassword",type="string",require=0,default="",desc="新密码")
  208. */
  209. public function uppass()
  210. {
  211. $data = $this->_vali([
  212. 'password.require'=>'原密码必须',
  213. 'newpassword.require'=>'新密码必须'
  214. ]);
  215. if ($data['password']==$data['newpassword']) $this->error('原密码与新密码一样');
  216. $pass = DataUser::mk()->where('id',$this->uuid)->value('password');
  217. if (md5($data['password'])!=$pass) $this->error('原密码验证错误');
  218. if (DataUser::mk()->where(['id' => $this->uuid])->update(['password'=>md5($data['newpassword'])]) !== false) {
  219. $this->success('更新密码成功!', $this->getUser());
  220. } else {
  221. $this->error('更新密码失败!');
  222. }
  223. }
  224. /**
  225. * @Title("获取开通vip配置信息")
  226. * @Method("post")
  227. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  228. * @Header("api-token",type="string",require=1,default="",desc="token")
  229. *
  230. * @Returned("price",desc="价格")
  231. * @Returned("user_vip_des",desc="会员权益说明")
  232. * @Returned("user_vip_agreement",desc="会员服务协议")
  233. */
  234. public function getvipinfo(){
  235. $info= [
  236. 'price'=>sysconf('user_vip.price'),
  237. 'user_vip_des'=>sysconf('user_vip.user_vip_des'),
  238. 'user_vip_agreement'=>sysconf('user_vip.user_vip_agreement'),
  239. ];
  240. $this->success('成功',$info);
  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. *
  248. * @Param("type",type="string",require=1,default="",desc="1:开通会员vip 2:商城、充值")
  249. * @Param("from",type="string",require=1,default="",desc="1:微信小程序 2:APP")
  250. */
  251. public function channel()
  252. {
  253. $data = $this->_vali([
  254. 'type.require|in:1,2'=>'type有误',
  255. 'from.require|in:1,2'=>'来源有误'
  256. ]);
  257. $type = $data['type'];
  258. $from = $data['from'];
  259. // 读取支付通道配置
  260. $query = BaseUserPayment::mk()->where(['status' => 1, 'deleted' => 0])
  261. ->when($type,function ($query) use ($type){
  262. if ($type==2){
  263. $query->where('type','<>','balance');
  264. }
  265. })->where(function ($query) use ($from){
  266. if ($from==1){
  267. $query->whereNotIn('type',['wechat_app','alipay_app']);
  268. }else{
  269. $query->where('type','<>','wechat_xcx');
  270. }
  271. });
  272. //$query->whereIn('code', str2arr($payments))->whereIn('type', PaymentService::getTypeApi($this->type));
  273. $result = $query->order('sort desc,id desc')->column('type,code,name,cover,content,remark', 'code');
  274. foreach ($result as &$vo) $vo['content'] = ['voucher_qrcode' => json_decode($vo['content'])->voucher_qrcode ?? ''];
  275. $this->success('获取支付参数数据', array_values($result));
  276. }
  277. /**
  278. * @Title("开通会员")
  279. * @Method("post")
  280. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  281. * @Header("api-token",type="string",require=1,default="",desc="token")
  282. * @Param("pay_code",type="string",require=1,default="",desc="支付方式code")
  283. * @Param("difference_pay_code",type="string",require=0,default="",desc="余额支付时,差价支付方式code")
  284. *
  285. */
  286. public function openvip(){
  287. $user = $this->getUser();
  288. $data = $this->_vali([
  289. 'pay_code.require'=>'支付code有误',
  290. 'difference_pay_code.default'=>''
  291. ]);
  292. $code = $data['pay_code'];
  293. $difference_pay_code = $data['difference_pay_code'];
  294. $pay_type = BaseUserPayment::mk()->where(['status' => 1, 'deleted' => 0,'code'=>$code])->value('type') ? : $this->error('支付找不到');
  295. $all_price = sysconf('user_vip.price');
  296. $order_no = setorderno($this->uuid);
  297. $insert = [
  298. 'uuid'=>$this->uuid,
  299. 'order_no'=>$order_no,
  300. 'all_price'=>$all_price,
  301. 'pay_type'=>$pay_type
  302. ];
  303. $error = 1;
  304. Db::startTrans();
  305. $retrun_data = [];
  306. try {
  307. if ($pay_type=='balance'){
  308. if ($user['money']<$all_price){
  309. if (empty($difference_pay_code) || !isset($difference_pay_code)){
  310. $error = 0;
  311. $errorinfo = '差价支付方式错误';
  312. }else{
  313. $difference_pay_type = BaseUserPayment::mk()->where(['status' => 1, 'deleted' => 0,'code'=>$difference_pay_code])->value('type');
  314. if (!$difference_pay_type){
  315. $error = 0;
  316. $errorinfo = '差价支付找不到';
  317. }else{
  318. $all_price = bcsub($all_price,$user['money'],2);
  319. $insert['yue_price'] = $user['money'];
  320. $insert['difference_money'] = $all_price;
  321. $insert['difference_pay_type'] = $difference_pay_type;
  322. $code = $difference_pay_code;
  323. $pay_type = $difference_pay_type;
  324. }
  325. }
  326. }
  327. }
  328. $order_id = DataUserVipOrder::mk()->insertGetId($insert);
  329. if (stripos($pay_type, 'alipay_') === 0) {
  330. $notify_name = 'opvipzfb';
  331. } elseif (stripos($pay_type, 'wechat_') === 0) {
  332. $notify_name = 'opvipwx';
  333. } else{
  334. $notify_name = 'opvip';
  335. }
  336. $notify_url = sysuri("@data/api.notify/{$notify_name}/scene/order/param/{$code}", [], false, true);
  337. $parm = ['uuid'=>$this->uuid,'order_id'=>$order_id];
  338. $pay =PaymentService::instance($code)->create($user['openid1'],$order_no,$all_price,'开通vip','开通vip','','',$notify_url,$parm);
  339. $retrun_data['order_no'] = $order_no;
  340. $pay['packages'] = isset($pay['package']) ? $pay['package'] : '';
  341. $retrun_data['pay'] = $pay;
  342. $retrun_data['success'] = isset($pay['result']) && $pay['result']=='success' ? 1 : 0;
  343. Db::commit();
  344. } catch (\Exception $e) {
  345. dump($e);
  346. // 回滚事务
  347. Db::rollback();
  348. $error = 0;
  349. $errorinfo = '未知错误';
  350. }
  351. if ($error){
  352. $this->success('成功',$retrun_data);
  353. }
  354. $this->error($errorinfo);
  355. }
  356. /**
  357. * @Title("人才库职称列表")
  358. * @Method("post")
  359. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  360. * @Header("api-token",type="string",require=1,default="",desc="token")
  361. */
  362. public function zclist()
  363. {
  364. $list = DataZhicheng::Show()->select();
  365. $this->success('成功',$list);
  366. }
  367. /**
  368. * @Title("加入人才库/编辑人才库")
  369. * @Method("post")
  370. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  371. * @Header("api-token",type="string",require=1,default="",desc="token")
  372. * @Param("name",type="string",require=1,default="",desc="姓名")
  373. * @Param("sex",type="string",require=1,default="",desc="性别")
  374. * @Param("age",type="string",require=1,default="",desc="年龄")
  375. * @Param("jg",type="string",require=1,default="",desc="籍贯")
  376. * @Param("phone",type="string",require=1,default="",desc="手机号")
  377. * @Param("email",type="string",require=1,default="",desc="邮箱")
  378. * @Param("province",type="string",require=1,default="",desc="省")
  379. * @Param("city",type="string",require=1,default="",desc="市")
  380. * @Param("area",type="string",require=1,default="",desc="区/镇")
  381. * @Param("address",type="string",require=1,default="",desc="详细地址")
  382. * @Param("graduate_school",type="string",require=1,default="",desc="毕业院校")
  383. * @Param("xl",type="string",require=1,default="",desc="学历")
  384. * @Param("major",type="string",require=1,default="",desc="专业")
  385. * @Param("working_life",type="string",require=1,default="",desc="工作年限")
  386. * @Param("tc",type="string",require=1,default="",desc="特长")
  387. * @Param("jn",type="string",require=1,default="",desc="技能")
  388. * @Param("zc_id",type="string",require=1,default="",desc="职称ID")
  389. * @Param("zz_imgs",type="string",require=1,default="",desc="资质证书,多个以逗号隔开")
  390. * @Param("pxjl",type="string",require=1,default="",desc="培训经历")
  391. * @Param("id",type="string",require=0,default="",desc="审核失败,修改,则必传之前提交的ID")
  392. */
  393. public function adduppooltalent()
  394. {
  395. $data = $this->_vali([
  396. 'uuid.default'=>$this->uuid,
  397. 'name.require'=>'姓名必须',
  398. 'sex.require'=>'性别必须',
  399. 'age.require|number|between:1,120'=>'年龄必须,1-120',
  400. 'jg.require'=>'籍贯必须',
  401. 'phone.require'=>'手机号必须',
  402. 'email.require'=>'邮箱必须',
  403. 'province.require'=>'省必须',
  404. 'city.require'=>'市必须',
  405. 'area.require'=>'区/镇必须',
  406. 'address.require'=>'详细地址必须',
  407. 'graduate_school.require'=>'毕业院校必须',
  408. 'xl.require'=>'学历必须',
  409. 'working_life.require'=>'工作年限必须',
  410. 'major.require'=>'专业必须',
  411. 'tc.require'=>'特长必须',
  412. 'jn.require'=>'技能必须',
  413. 'zc_id.require|number'=>'职称必须',
  414. 'zz_imgs.require'=>'资质证书必须',
  415. 'pxjl.require'=>'培训经历必须',
  416. ],'post');
  417. $id = input('id');
  418. if (!Validate::regex($data['phone'], "^1\d{10}$")) {
  419. $this->error('手机号格式错误');
  420. }
  421. DataZhicheng::mk()->where('id',$data['zc_id'])->where('is_del',1)->count() ? : $this->error('职称不存在');
  422. empty($id) ? $id = DataUserAcceptance::mk()->where('uuid',$this->uuid)->value('id') : $data['update_at']=date('Y-m-d H:i:s');
  423. DataPoolTalent::mk()->where('uuid',$this->uuid)->value('audit') == 3 ? $data['audit'] =1 : '';
  424. if (empty($id) ? DataPoolTalent::mk()->insert($data) : DataPoolTalent::mk()->where('id',$id)->update($data)){
  425. $this->success('提交成功');
  426. }
  427. $this->error('提交失败,请稍后重试');
  428. }
  429. /**
  430. * @Title("添加人才库工作经历/编辑人才库工作经历")
  431. * @Method("post")
  432. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  433. * @Header("api-token",type="string",require=1,default="",desc="token")
  434. * @Param("id",type="string",require=1,default="",desc="工作经历ID,编辑时穿")
  435. * @Param("content",type="json",require=0,default="",desc="工作经历json,(company_name:公司名称,position_name:职位名称,on_job_start:在职时间开始,on_job_end:在职时间结束,job_description:工作内容)")
  436. */
  437. public function adduppooltalentchild()
  438. {
  439. $data = $this->_vali([
  440. 'id.default'=>'',
  441. 'content.require'=>'作经历必须',
  442. ]);
  443. $info_id = DataPoolTalent::mk()->where('uuid',$this->uuid)->value('id') ? : DataPoolTalent::mk()->insertGetId(['uuid'=>$this->uuid]);
  444. $child_id = $data['id'];
  445. $child_array = [
  446. 'info_id'=>$info_id,
  447. 'content'=>$data['content']
  448. ];
  449. !empty($child_id) ? $child_array['update_at'] = date('Y-m-d H:i:s') : '';
  450. if (!empty($child_id) ? DataPoolTalentChild::mk()->where('id',$child_id)->update($child_array) : DataPoolTalentChild::mk()->insert($child_array)){
  451. $this->success('成功');
  452. }
  453. $this->error('失败');
  454. }
  455. /**
  456. * @Title("人才库工作经历删除")
  457. * @Method("post")
  458. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  459. * @Header("api-token",type="string",require=1,default="",desc="token")
  460. * @Param("id",type="string",require=1,default="",desc="ID")
  461. */
  462. public function delpooltalentchild(){
  463. $data = $this->_vali([
  464. 'id.require'=>'id必须',
  465. ]);
  466. if (DataPoolTalentChild::mk()->where('id',$data['id'])->delete()){
  467. $this->success('成功');
  468. }
  469. $this->error('失败');
  470. }
  471. /**
  472. * @Title("申请维修工/编辑维修工")
  473. * @Method("post")
  474. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  475. * @Header("api-token",type="string",require=1,default="",desc="token")
  476. * @Param("name",type="string",require=1,default="",desc="姓名")
  477. * @Param("id_card",type="string",require=1,default="",desc="身份证号")
  478. * @Param("email",type="string",require=1,default="",desc="邮箱")
  479. * @Param("province",type="string",require=1,default="",desc="省")
  480. * @Param("city",type="string",require=1,default="",desc="市")
  481. * @Param("area",type="string",require=1,default="",desc="区/镇")
  482. * @Param("address",type="string",require=1,default="",desc="详细地址")
  483. * @Param("id_card_img1",type="string",require=1,default="",desc="身份证人面照片")
  484. * @Param("id_card_img2",type="string",require=1,default="",desc="身份证国徽面照片")
  485. * @Param("business_img",type="string",require=1,default="",desc="营业执照图片")
  486. * @Param("authorization_img",type="string",require=0,default="",desc="厂家授权图片")
  487. * @Param("results",type="string",require=1,default="",desc="以往业绩")
  488. * @Param("id",type="string",require=0,default="",desc="审核失败,修改,则必传之前提交的ID")
  489. */
  490. public function addupmaintenance()
  491. {
  492. $data = $this->_vali([
  493. 'uuid.default'=>$this->uuid,
  494. 'name.require'=>'姓名必须',
  495. 'id_card.require'=>'身份证号必须',
  496. 'email.require'=>'邮箱必须',
  497. 'province.require'=>'省必须',
  498. 'city.require'=>'市必须',
  499. 'area.require'=>'区/镇必须',
  500. 'address.require'=>'详细地址必须',
  501. 'id_card_img1.require'=>'身份证人面照片必须',
  502. 'id_card_img2.require'=>'身份证国徽面照片必须',
  503. 'business_img.require'=>'营业执照图片必须',
  504. 'authorization_img.default'=>'',
  505. 'results.require'=>'以往业绩必须',
  506. ]);
  507. if (!check_idcard($data['id_card'])) $this->error('身份证号格式错误');
  508. $id = input('id');
  509. !empty($id) ? : (DataMaintenance::mk()->where('uuid',$this->uuid)->count() ? $this->error('已经提交过') : '' );
  510. empty($id) ? : $data['update_at']=date('Y-m-d H:i:s');
  511. DataMaintenance::mk()->where('uuid',$this->uuid)->value('audit') == 3 ? $data['audit'] =1 : '';
  512. if (empty($id) ? DataMaintenance::mk()->insert($data) : DataMaintenance::mk()->where('id',$id)->update($data)){
  513. $this->success('提交成功');
  514. }
  515. $this->error('提交失败,请稍后重试');
  516. }
  517. /**
  518. * @Title("申请船厂/编辑船厂")
  519. * @Method("post")
  520. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  521. * @Header("api-token",type="string",require=1,default="",desc="token")
  522. * @Param("name",type="string",require=1,default="",desc="船厂名称")
  523. * @Param("head_img",type="string",require=1,default="",desc="船厂头像")
  524. * @Param("province",type="string",require=1,default="",desc="省")
  525. * @Param("city",type="string",require=1,default="",desc="市")
  526. * @Param("area",type="string",require=1,default="",desc="区/镇")
  527. * @Param("address",type="string",require=1,default="",desc="详细地址")
  528. * @Param("contact_name",type="string",require=1,default="",desc="联系人")
  529. * @Param("contact_phone",type="string",require=1,default="",desc="联系电话")
  530. * @Param("intro",type="string",require=1,default="",desc="船厂简介")
  531. * @Param("longitude",type="string",require=1,default="",desc="经度")
  532. * @Param("latitude",type="string",require=1,default="",desc="维度")
  533. * @Param("environment_imgs",type="string",require=1,default="",desc="船厂环境,多个以英文逗号隔开")
  534. * @Param("product_intro",type="string",require=1,default="",desc="产品简介")
  535. * @Param("business_img",type="string",require=1,default="",desc="营业执照")
  536. * @Param("num_staff",type="string",require=1,default="",desc="员工人数")
  537. * @Param("id",type="string",require=0,default="",desc="审核失败,修改,则必传之前提交的ID")
  538. */
  539. public function addupshipyard()
  540. {
  541. $data = $this->_vali([
  542. 'uuid.default'=>$this->uuid,
  543. 'name.require'=>'船厂名称必须',
  544. 'longitude.require'=>'经纬度必须',
  545. 'longitude.float'=>'经纬度有误',
  546. 'latitude.require'=>'经纬度必须',
  547. 'latitude.float'=>'经纬度有误',
  548. 'head_img.require'=>'船厂头像必须',
  549. 'province.require'=>'省必须',
  550. 'city.require'=>'市必须',
  551. 'area.require'=>'区/镇必须',
  552. 'address.require'=>'详细地址必须',
  553. 'contact_name.require'=>'联系人必须',
  554. 'contact_phone.require'=>'联系电话必须',
  555. 'intro.require'=>'船厂简介必须',
  556. 'environment_imgs.require'=>'船厂环境必须',
  557. 'product_intro.require'=>'产品简介必须',
  558. 'business_img.require'=>'营业执照必须',
  559. 'num_staff.require'=>'人数必须',
  560. ]);
  561. $id = input('id');
  562. !empty($id) ? : (DataShipyard::mk()->where('uuid',$this->uuid)->count() ? $this->error('已经提交过') : '' );
  563. empty($id) ? : $data['update_at']=date('Y-m-d H:i:s');
  564. DataShipyard::mk()->where('uuid',$this->uuid)->value('audit') == 3 ? $data['audit'] =1 : '';
  565. if (empty($id) ? DataShipyard::mk()->insert($data) : DataShipyard::mk()->where('id',$id)->update($data)){
  566. $this->success('提交成功');
  567. }
  568. $this->error('提交失败,请稍后重试');
  569. }
  570. /**
  571. * @Title("申请商家/编辑商家")
  572. * @Method("post")
  573. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  574. * @Header("api-token",type="string",require=1,default="",desc="token")
  575. * @Param("name",type="string",require=1,default="",desc="商家名称")
  576. * @Param("head_img",type="string",require=1,default="",desc="商家头像")
  577. * @Param("province",type="string",require=1,default="",desc="省")
  578. * @Param("city",type="string",require=1,default="",desc="市")
  579. * @Param("area",type="string",require=1,default="",desc="区/镇")
  580. * @Param("address",type="string",require=1,default="",desc="详细地址")
  581. * @Param("longitude",type="string",require=1,default="",desc="经度")
  582. * @Param("latitude",type="string",require=1,default="",desc="纬度")
  583. * @Param("address",type="string",require=1,default="",desc="详细地址")
  584. * @Param("contact_name",type="string",require=1,default="",desc="联系人")
  585. * @Param("contact_phone",type="string",require=1,default="",desc="联系电话")
  586. * @Param("intro",type="string",require=1,default="",desc="商家简介")
  587. * @Param("imgs_videos",type="string",require=1,default="",desc="图片及视频,以英文逗号隔开")
  588. * @Param("business_img",type="string",require=1,default="",desc="营业执照")
  589. * @Param("id",type="string",require=0,default="",desc="审核失败,修改,则必传之前提交的ID")
  590. */
  591. public function addupmerchants()
  592. {
  593. $data = $this->_vali([
  594. 'uuid.default'=>$this->uuid,
  595. 'name.require'=>'商家名称必须',
  596. 'head_img.require'=>'商家头像必须',
  597. 'province.require'=>'省必须',
  598. 'city.require'=>'市必须',
  599. 'area.require'=>'区/镇必须',
  600. 'address.require'=>'详细地址必须',
  601. 'longitude.require'=>'经纬度必须',
  602. 'latitude.require'=>'经纬度必须',
  603. 'contact_name.require'=>'联系人必须',
  604. 'contact_phone.require'=>'联系电话必须',
  605. 'intro.require'=>'商家简介必须',
  606. 'imgs_videos.require'=>'图片及视频必须',
  607. 'business_img.require'=>'营业执照必须',
  608. ]);
  609. $id = input('id');
  610. !empty($id) ? : (DataMerchants::mk()->where('uuid',$this->uuid)->count() ? $this->error('已经提交过') : '' );
  611. empty($id) ? : $data['update_at']=date('Y-m-d H:i:s');
  612. DataMerchants::mk()->where('uuid',$this->uuid)->value('audit') == 3 ? $data['audit'] =1 : '';
  613. if (empty($id) ? DataMerchants::mk()->insert($data) : DataMerchants::mk()->where('id',$id)->update($data)){
  614. $this->success('提交成功');
  615. }
  616. $this->error('提交失败,请稍后重试');
  617. }
  618. /**
  619. * @Title("实名认证")
  620. * @Method("post")
  621. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  622. * @Header("api-token",type="string",require=1,default="",desc="token")
  623. * @Param("username",type="string",require=1,default="",desc="真实姓名")
  624. * @Param("id_card",type="string",require=1,default="",desc="身份证号")
  625. */
  626. public function userCertification()
  627. {
  628. $user = $this->getUser();
  629. if ($user['is_auth']) $this->error('已实名认证');
  630. $data = $this->_vali([
  631. 'username.require'=>'真实姓名必须',
  632. 'id_card.require'=>'身份证号必须',
  633. 'is_auth.default'=>1
  634. ]);
  635. if (!isCreditNo($data['id_card'])) $this->error('身份证号格式错误');
  636. DataUser::mk()->where('id_card',$data['id_card'])->count() ? $this->error('身份证号已认证过') : '';
  637. $data['real_name']=$data['username'];
  638. unset($data['username']);
  639. if (DataUser::mk()->where(['id' => $this->uuid])->update($data) !== false) {
  640. $this->success('实名认证成功!');
  641. } else {
  642. $this->error('实名认证失败!');
  643. }
  644. }
  645. /**
  646. * @Title("钱包-我的余额")
  647. * @Method("post")
  648. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  649. * @Header("api-token",type="string",require=1,default="",desc="token")
  650. */
  651. public function moneylog(){
  652. $user = $this->getUser();
  653. $list = DataUserMoneyLog::Show($this->uuid)->paginate();
  654. $money = $user['money'];
  655. $bank_count = DataUserBankCard::Show($this->uuid)->count();
  656. $this->success('成功',compact('money','bank_count','list'));
  657. }
  658. /**
  659. * @Title("钱包-我的银行卡列表")
  660. * @Method("post")
  661. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  662. * @Header("api-token",type="string",require=1,default="",desc="token")
  663. */
  664. public function mybanklist(){
  665. $list = DataUserBankCard::Show($this->uuid)->select();
  666. $this->success('成功',$list);
  667. }
  668. /**
  669. * @Title("绑定银行卡")
  670. * @Method("post")
  671. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  672. * @Header("api-token",type="string",require=1,default="",desc="token")
  673. * @Param("name",type="string",require=1,default="",desc="姓名")
  674. * @Param("id_card",type="string",require=1,default="",desc="银行卡号")
  675. * @Param("id",type="string",require=0,default="",desc="修改,则必传之前提交的ID")
  676. */
  677. public function bind_bank(){
  678. $data = $this->_vali([
  679. 'uuid'=>$this->uuid,
  680. 'name.require'=>'姓名必须',
  681. 'id_card.require'=>'卡号必须',
  682. ]);
  683. !checkbank($data['id_card']) ? $this->error('卡号不正确') : '';
  684. $bank_name = bankInfo($data['id_card']);
  685. empty($bank_name) ? $this->error('卡号不正确或未录入') : '';
  686. $data['card_name'] = $bank_name;
  687. $id = input('id');
  688. DataUserBankCard::Show($this->uuid,$data['id_card'],$id)->count() ? $this->error('卡号已存在') : '';
  689. empty($id) ? : $data['update_at']=date('Y-m-d H:i:s');
  690. if (empty($id) ? DataUserBankCard::mk()->insert($data) : DataUserBankCard::mk()->where('id',$id)->update($data)){
  691. $this->success('提交成功');
  692. }
  693. $this->error('提交失败,请稍后重试');
  694. }
  695. /**
  696. * @Title("删除银行卡")
  697. * @Method("post")
  698. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  699. * @Header("api-token",type="string",require=1,default="",desc="token")
  700. * @Param("id",type="string",require=0,default="",desc="修改,则必传之前提交的ID")
  701. */
  702. public function delbank(){
  703. $data = $this->_vali([
  704. 'id.require'=>'id必须',
  705. ]);
  706. if (DataUserBankCard::mk()->where('id',$data['id'])->update(['is_del'=>0,'update_at'=>date('Y-m-d H:i:s')])){
  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. *
  717. * @Returned("withdraw_min_price",desc="最低提现金额")
  718. * @Returned("withdraw_max_price",desc="最大提现金额")
  719. * @Returned("poundage_proportion",desc="手续费百分比")
  720. * @Returned("money",desc="用户可提现余额")
  721. */
  722. public function getwithinfo(){
  723. $user = $this->getUser();
  724. $info= [
  725. 'withdraw_min_price'=>sysconf('user.withdraw_min_price'),
  726. 'withdraw_max_price'=>sysconf('user.withdraw_max_price'),
  727. 'poundage_proportion'=>sysconf('user.poundage_proportion'),
  728. 'money'=>$user['money']
  729. ];
  730. $this->success('成功',$info);
  731. }
  732. /**
  733. * @Title("提现")
  734. * @Method("post")
  735. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  736. * @Header("api-token",type="string",require=1,default="",desc="token")
  737. * @Param("money",type="string",require=1,default="",desc="提现金额")
  738. * @Param("bind_id",type="string",require=0,default="",desc="绑定的银行卡记录ID")
  739. */
  740. public function withdraw(){
  741. $user=$this->getUser();
  742. $data = $this->_vali([
  743. 'money.require'=>'金额必须',
  744. 'bind_id.require'=>'绑定的记录ID必须',
  745. ]);
  746. $money = $data['money'];
  747. isAmount($money) ? : $this->error('金额错误');
  748. $user['money']<$money ? $this->error('余额不足') : '';
  749. $bank = DataUserBankCard::mk()->where('id',$data['bind_id'])->where('uuid',$this->uuid)->where('is_del',1)->findOrEmpty();
  750. if ($bank->isEmpty()) $this->error('绑定记录不存在');
  751. $withdraw_min_price = sysconf('user.withdraw_min_price'); //最小提现金额
  752. $withdraw_max_price = sysconf('user.withdraw_max_price'); //最大提现金额
  753. $poundage_proportion = sysconf('user.poundage_proportion'); //手续费百分比
  754. $money < $withdraw_min_price ? $this->error('最低提现'.$withdraw_min_price.'元') : '';
  755. $money > $withdraw_max_price ? $this->error('最大提现'.$withdraw_min_price.'元') : '';
  756. $error = 1;
  757. Db::startTrans();
  758. try {
  759. $proportion = sprintf("%.2f", $money*($poundage_proportion/100)); //四舍五入保留两位小数点
  760. $real_money = bcsub($money,$proportion,2);
  761. $inset = [
  762. 'uuid'=>$this->uuid,
  763. 'order_no'=>setorderno($this->uuid),
  764. 'bink_id'=>$data['bind_id'],
  765. 'card_name'=>$bank['card_name'],
  766. 'name'=>$bank['name'],
  767. 'bank_id_card'=>$bank['id_card'],
  768. 'price'=>$money,
  769. 'poundage_proportion'=>$poundage_proportion,
  770. 'proportion'=>$proportion,
  771. 'real_money'=>$real_money
  772. ];
  773. $id = DataUserWithdraw::mk()->insertGetId($inset);
  774. //余额提现
  775. $res = userMoneyChange($money,1,$this->uuid,'余额提现',0,$id);
  776. if (!$res){
  777. $error = 0;
  778. $errorinfo = '提现失败';
  779. Db::rollback();
  780. }
  781. Db::commit();
  782. } catch (\Exception $e) {
  783. // 回滚事务
  784. Db::rollback();
  785. $error = 0;
  786. $errorinfo = '未知错误';
  787. }
  788. if ($error){
  789. $this->success('提现成功,等待审核');
  790. }
  791. $this->error($errorinfo);
  792. }
  793. /**
  794. * @Title("意见反馈列表")
  795. * @Method("post")
  796. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  797. * @Header("api-token",type="string",require=1,default="",desc="token")
  798. * @Param("page&limit",type="string",require=0,default="",desc="分页")
  799. */
  800. public function feedbacklist(){
  801. $list = DataFeedback::Show($this->uuid)->with(['reply'])->paginate();
  802. $this->success('成功',$list);
  803. }
  804. /**
  805. * @Title("意见反馈提交")
  806. * @Method("post")
  807. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  808. * @Header("api-token",type="string",require=1,default="",desc="token")
  809. * @Param("content",type="string",require=1,default="",desc="反馈内容")
  810. * @Param("imgs",type="string",require=0,default="",desc="图片,以逗号隔开")
  811. * @Param("phone",type="string",require=0,default="",desc="手机号")
  812. * @Param("id",type="string",require=0,default="",desc="修改,则必传之前提交的ID,只有未回复的能修改")
  813. */
  814. public function subfeedback(){
  815. $data = $this->_vali([
  816. 'uuid'=>$this->uuid,
  817. 'content.require'=>'反馈内容必须',
  818. 'imgs.default'=>'',
  819. 'phone.default'=>''
  820. ]);
  821. empty($id) ? : $data['update_at']=date('Y-m-d H:i:s');
  822. if (empty($id) ? DataFeedback::mk()->insert($data) : DataFeedback::mk()->where('id',$id)->update($data)){
  823. $this->success('提交成功');
  824. }
  825. $this->error('提交失败,请稍后重试');
  826. }
  827. /**
  828. * @Title("意见反馈删除")
  829. * @Method("post")
  830. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  831. * @Header("api-token",type="string",require=1,default="",desc="token")
  832. * @Param("id",type="string",require=1,default="",desc="反馈ID")
  833. */
  834. public function delfeedback(){
  835. $data = $this->_vali([
  836. 'id.require'=>'ID必须',
  837. 'is_del.default'=>'0',
  838. ]);
  839. $id = $data['id'];
  840. unset($data['id']);
  841. DataFeedback::Show($this->uuid,$id)->count() ? '' : $this->error('信息不存在');
  842. if (DataFeedback::mk()->where('id',$id)->update($data)){
  843. $this->success('删除成功');
  844. }
  845. $this->error('删除失败,请稍后重试');
  846. }
  847. /**
  848. * @Title("我的收藏列表")
  849. * @Method("post")
  850. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  851. * @Header("api-token",type="string",require=1,default="",desc="token")
  852. * @Param("type",type="string",require=1,default="",desc="1:知识教学2:百知文库3:采购订单4应聘信息,5:船厂")
  853. * @Param("longitude",type="string",require=1,default="",desc="经度,船厂必须")
  854. * @Param("latitude",type="string",require=1,default="",desc="纬度,船厂必须")
  855. * @Returned("shipyard",desc="船厂对象")
  856. * @Returned("shipyard.distance",desc="船厂距离你的距离km")
  857. */
  858. public function mycollection(){
  859. $data = $this->_vali([
  860. 'type.require|in:1,2,3,4,5'=>'type有误'
  861. ]);
  862. switch ($data['type']){
  863. case 1:
  864. $list = DataCollectionLog::mk()
  865. ->hasWhere('knowledge',function (Query $query){
  866. $query->where('is_del',1);
  867. })
  868. ->where('data_collection_log.uuid',$this->uuid)
  869. ->where('cate',1)
  870. ->where('data_collection_log.type',1)
  871. ->with(['knowledge'=>function($query){
  872. $query->with(['user'=>function($query){
  873. $query->field('id,nickname,headimg,is_auth,is_vip');
  874. }]);
  875. }])
  876. ->order('id desc')
  877. ->paginate();
  878. break;
  879. case 2:
  880. $list = DataCollectionLog::mk()
  881. ->hasWhere('knowledge',function (Query $query){
  882. $query->where('is_del',1);
  883. })
  884. ->where('data_collection_log.uuid',$this->uuid)
  885. ->where('cate',1)
  886. ->where('data_collection_log.type',2)
  887. ->with(['knowledge'=>function($query){
  888. $query->with(['user'=>function($query){
  889. $query->field('id,nickname,headimg,is_auth,is_vip');
  890. }]);
  891. }])
  892. ->order('id desc')
  893. ->paginate();
  894. break;
  895. case 3:
  896. $this->uuid = '46';
  897. $list = ShopFavourite::mk()
  898. ->where('user_id',$this->uuid)
  899. ->order('id desc')
  900. ->paginate()
  901. ->toArray();
  902. foreach ($list['data'] as &$v){
  903. switch ($v['target_type']){
  904. case 'shop_purchase':
  905. $v['info'] = ShopPurchase::mk()
  906. ->where('id',$v['target_id'])
  907. ->with(['items','merchant'])
  908. ->findOrFail();
  909. break;
  910. case 'shop_production':
  911. $v['info'] = ShopProduction::mk()
  912. ->where('id',$v['target_id'])
  913. ->with(['items','merchant'])
  914. ->findOrFail();
  915. break;
  916. case 'shop_coordination':
  917. $v['info'] = ShopCoordination::mk()
  918. ->where('id',$v['target_id'])
  919. ->with(['items','merchant'])
  920. ->findOrFail();
  921. break;
  922. case 'shop_ocean':
  923. $v['info'] = ShopOcean::mk()
  924. ->where('id',$v['target_id'])
  925. ->with(['items','merchant'])
  926. ->findOrFail();
  927. break;
  928. }
  929. }
  930. break;
  931. case 4:
  932. $list = [];
  933. break;
  934. case 5:
  935. $data = $this->_vali([
  936. 'longitude.require'=>'经度必须',
  937. 'longitude.float'=>'经纬度必须是数字',
  938. 'latitude.require'=>'纬度必须',
  939. 'latitude.float'=>'经纬度必须是数字',
  940. ]);
  941. $list = DataCollectionLog::hasShipyard()
  942. ->where('uuid',$this->uuid)
  943. ->with(['shipyard'])
  944. ->paginate();
  945. foreach ($list as $item){
  946. $item['shipyard']->makeDistance($data['longitude'],$data['latitude']);
  947. }
  948. break;
  949. }
  950. $this->success('成功',$list);
  951. }
  952. /**
  953. * @Title("我的发布列表")
  954. * @Method("post")
  955. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  956. * @Header("api-token",type="string",require=1,default="",desc="token")
  957. * @Param("type",type="string",require=1,default="",desc="1:知识教学2:百知文库3:应聘信息")
  958. * @Returned("audit",desc="1:待审核2:审核成功3:审核失败")
  959. * @Returned("why",desc="审核失败原因")
  960. */
  961. public function myrelease(){
  962. $data = $this->_vali([
  963. 'type.require|in:1,2,3'=>'type有误'
  964. ]);
  965. switch ($data['type']){
  966. case 1:
  967. $list = DataTeachingKnowledge::mk()
  968. ->where('uuid',$this->uuid)
  969. ->where('is_del',1)
  970. ->with(['user'=>function($query){
  971. $query->field('id,headimg,nickname');
  972. }])
  973. ->order('id desc')
  974. ->paginate();
  975. break;
  976. case 2:
  977. $list = DataBestKnowledge::mk()
  978. ->where('uuid',$this->uuid)
  979. ->where('is_del',1)
  980. ->with(['user'=>function($query){
  981. $query->field('id,headimg,nickname');
  982. },'classTo'])
  983. ->paginate();
  984. break;
  985. case 3:
  986. $list = DataUserApplyJobInfo::mk()
  987. ->where('uuid',$this->uuid)
  988. ->with(['workexperience','professionalskills','certificate'])
  989. ->findOrEmpty();
  990. if (!isset($list['id'])) $list = null;
  991. break;
  992. }
  993. $this->success('成功',$list);
  994. }
  995. /**
  996. * @Title("应聘信息隐藏,取消隐藏")
  997. * @Method("post")
  998. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  999. * @Header("api-token",type="string",require=1,default="",desc="token")
  1000. * @Param("hidden",type="string",require=1,default="",desc="0:隐藏 1:显示")
  1001. */
  1002. public function canhidden(){
  1003. $data = $this->_vali([
  1004. 'hidden.require|in:0,1'=>'字段有误',
  1005. 'update_at.default'=>date('Y-m-d H:i:s')
  1006. ]);
  1007. DataUserApplyJobInfo::mk()->where('uuid',$this->uuid)->findOrEmpty() ? : $this->error('未提交') ;
  1008. if (DataUserApplyJobInfo::mk()->where('uuid',$this->uuid)->update($data)){
  1009. $this->success('成功');
  1010. }
  1011. $this->error('失败');
  1012. }
  1013. /**
  1014. * @Title("我的需求")
  1015. * @Method("post")
  1016. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1017. * @Header("api-token",type="string",require=1,default="",desc="token")
  1018. * @Param("type",type="string",require=1,default="",desc="1:采购接单需求2:船机修理接单需求")
  1019. */
  1020. public function myneed(){
  1021. $data = $this->_vali([
  1022. 'type.require|in:1,2'=>'字段有误',
  1023. ]);
  1024. switch ($data['type']){
  1025. case 1:
  1026. $info = DataUserPurchaseAcceptance::mk()
  1027. ->where('uuid',$this->uuid)
  1028. ->findOrEmpty();
  1029. if (!isset($info['id'])) $info = null;
  1030. break;
  1031. case 2:
  1032. $info = DataUserAcceptance::mk()
  1033. ->where('uuid',$this->uuid)
  1034. ->findOrEmpty();
  1035. break;
  1036. }
  1037. $this->success('成功',$info);
  1038. }
  1039. /**
  1040. * @Title("发布、修改采购接单需求")
  1041. * @Method("post")
  1042. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1043. * @Header("api-token",type="string",require=1,default="",desc="token")
  1044. * @Param("description",type="string",require=1,default="",desc="需求说明")
  1045. * @Param("business_img",type="string",require=1,default="",desc="营业执照或身份证照")
  1046. * @Param("imgs",type="string",require=1,default="",desc="图片及资质证件图片,多个以英文逗号隔开")
  1047. * @Param("hidden",type="string",require=0,default="1",desc="是否隐藏1:不隐藏 2:隐藏")
  1048. * @Param("province",type="string",require=1,default="",desc="定位-省")
  1049. * @Param("city",type="string",require=1,default="",desc="定位-市")
  1050. * @Param("area",type="string",require=1,default="",desc="定位-区")
  1051. * @Param("id",type="string",require=0,default="",desc="修改时,传ID")
  1052. */
  1053. public function subpurchaseacceptance(){
  1054. $data = $this->_vali([
  1055. 'uuid.default'=>$this->uuid,
  1056. 'description.require'=>'需求说明必须',
  1057. 'business_img.require'=>'营业执照或身份证照必须',
  1058. 'imgs.require'=>'图片及资质证件图片必须',
  1059. 'province.require'=>'定位-省',
  1060. 'city.require'=>'定位-市',
  1061. 'area.require'=>'定位-区',
  1062. 'hidden.default'=>1
  1063. ]);
  1064. $id = input('id');
  1065. empty($id) ? $id = DataUserPurchaseAcceptance::mk()->where('uuid',$this->uuid)->value('id') : '' ;
  1066. empty($id) ? : $data['update_at']=date('Y-m-d H:i:s');
  1067. empty($id) ? : $data['create_at']=date('Y-m-d H:i:s');
  1068. if (empty($id) ? DataUserPurchaseAcceptance::mk()->insert($data) : DataUserPurchaseAcceptance::mk()->where('id',$id)->update($data)){
  1069. $this->success('提交成功');
  1070. }
  1071. $this->error('提交失败,请稍后重试');
  1072. }
  1073. /**
  1074. * @Title("维修订单")
  1075. * @Method("post")
  1076. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1077. * @Header("api-token",type="string",require=1,default="",desc="token")
  1078. * @Param("type",type="string",require=1,default="",desc="1:我是船老板2:我是维修工")
  1079. * @Param("status",type="string",require=1,default="",desc="1:未报价2:已报价3:已匹配")
  1080. */
  1081. public function repair(){
  1082. $data = $this->_vali([
  1083. 'type.require|in:1,2'=>'字段有误',
  1084. 'status.require|in:1,2,3'=>'字段有误',
  1085. ]);
  1086. switch ($data['type']){
  1087. case 1:
  1088. $list = DataUserRepair::mk()
  1089. ->where('uuid',$this->uuid)
  1090. ->where('status',$data['status'])
  1091. ->where('is_del',1)
  1092. ->paginate();
  1093. break;
  1094. case 2:
  1095. $status = $data['status'];
  1096. $list = DataUserRepairOffer::mk()
  1097. ->hasWhere('repair',function (Query $query){
  1098. $query->where('is_del',1);
  1099. })
  1100. ->with(['repair'=>function($query){
  1101. $query->withoutField('is_del,update_at');
  1102. }])
  1103. ->where('offer_id',$this->uuid)
  1104. ->where(function ($query) use ($status){
  1105. $repair_ids = DataUserRepairOffer::mk()
  1106. ->where('offer_id',$this->uuid)
  1107. ->where('price','>',0)
  1108. ->group('repair_id')
  1109. ->column('repair_id');
  1110. switch ($status){
  1111. case 1:
  1112. $query->whereNotIn('repair_id',$repair_ids)->where('is_deal',0)->where('status',2);
  1113. break;
  1114. case 2:
  1115. $query->whereIn('repair_id',$repair_ids)->where('is_deal',0)->where('status',2);
  1116. break;
  1117. case 3:
  1118. $query->where('is_deal',1)->where('status',3);
  1119. break;
  1120. }
  1121. })
  1122. ->field('data_user_repair_offer.id,repair_id,offer_id')
  1123. ->order('id desc')
  1124. ->group('repair_id')
  1125. ->paginate();
  1126. $list = $list->toArray();
  1127. foreach ($list['data'] as &$v){
  1128. $in = DataUserRepairOffer::mk()
  1129. ->where('repair_id',$v['repair_id'])
  1130. ->where('offer_id',$v['offer_id'])
  1131. ->order('id desc')
  1132. ->limit(1)
  1133. ->field('id,price')->find();
  1134. $v['price'] = $in->price;
  1135. }
  1136. break;
  1137. }
  1138. $this->success('成功',$list);
  1139. }
  1140. /**
  1141. * @Title("维修订单删除(只有维修订单未报价和已报价可以删除)")
  1142. * @Method("post")
  1143. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1144. * @Header("api-token",type="string",require=1,default="",desc="token")
  1145. * @Param("id",type="string",require=1,default="",desc="type为1时:维修单ID type为2时报价记录ID")
  1146. */
  1147. public function repairdel(){
  1148. $data = $this->_vali([
  1149. 'id.require'=>'id有误',
  1150. ]);
  1151. if (DataUserRepair::mk()->where('id',$data['id'])->where('uuid',$this->uuid)->update(['is_del'=>0])){
  1152. $this->success('成功');
  1153. }
  1154. $this->error('失败');
  1155. }
  1156. /**
  1157. * @Title("维修订单详情页")
  1158. * @Method("post")
  1159. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1160. * @Header("api-token",type="string",require=1,default="",desc="token")
  1161. * @Param("type",type="string",require=1,default="",desc="1:我是船老板2:我是维修工")
  1162. * @Param("id",type="string",require=1,default="",desc="type为1时:维修单ID type为2时报价记录ID")
  1163. */
  1164. public function repairdetail(){
  1165. $data = $this->_vali([
  1166. 'type.require|in:1,2'=>'字段有误',
  1167. 'id.require'=>'id有误',
  1168. ]);
  1169. switch ($data['type']){
  1170. case 1:
  1171. $info = DataUserRepair::mk()
  1172. ->where('uuid',$this->uuid)
  1173. ->where('is_del',1)
  1174. ->where('id',$data['id'])
  1175. ->with(['user'=>function($query){
  1176. $query->field('id,nickname,headimg,phone');
  1177. },'offer'=>function($query){
  1178. $query->field('id,repair_id,offer_id,price,imgs')->group('offer_id')
  1179. ->with(['user'=>function($query){
  1180. $query->field('id,nickname,headimg,phone');
  1181. }]);
  1182. },'success'=>function($query){
  1183. $query->field('id,nickname,headimg,phone');
  1184. }])
  1185. ->find()->toArray();
  1186. foreach ($info['offer'] as &$v){
  1187. $in = DataUserRepairOffer::mk()
  1188. ->where('repair_id',$data['id'])
  1189. ->where('offer_id',$v['offer_id'])
  1190. ->order('id desc')
  1191. ->limit(1)
  1192. ->field('id,price')->find();
  1193. $v['id'] = $in->id;
  1194. $v['price'] = $in->price;
  1195. }
  1196. break;
  1197. case 2:
  1198. $info = DataUserRepairOffer::mk()
  1199. ->where('id',$data['id'])
  1200. ->with(['user'=>function($query){
  1201. $query->field('id,nickname,headimg,phone');
  1202. },'repair'=>function($query){
  1203. $query->with(['user'=>function($query){
  1204. $query->field('id,nickname,headimg,phone');
  1205. }]);
  1206. }])
  1207. ->find()->toArray();
  1208. $in = DataUserRepairOffer::mk()
  1209. ->where('repair_id',$info['repair_id'])
  1210. ->where('offer_id',$info['offer_id'])
  1211. ->order('id desc')
  1212. ->limit(1)
  1213. ->field('id,price')->find();
  1214. $info['price'] = $in['price'];
  1215. break;
  1216. }
  1217. $this->success('成功',$info);
  1218. }
  1219. /**
  1220. * @Title("维修订单确认匹配")
  1221. * @Method("post")
  1222. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1223. * @Header("api-token",type="string",require=1,default="",desc="token")
  1224. * @Param("id",type="string",require=1,default="",desc="维修单ID")
  1225. * @Param("offer_id",type="string",require=1,default="",desc="匹配的记录ID")
  1226. */
  1227. public function repairoffer(){
  1228. $data = $this->_vali([
  1229. 'id.require'=>'id有误',
  1230. 'offer_id.require'=>'offer_id有误',
  1231. ]);
  1232. DataUserRepair::mk()->where('id',$data['id'])->value('status') == 3 ? $this->error('订单已经匹配成功') : '';
  1233. $offer = DataUserRepairOffer::mk()->where('id',$data['offer_id'])->find();
  1234. 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')])
  1235. &&
  1236. DataUserRepairOffer::mk()->where('id',$data['offer_id'])->update(['is_deal'=>1,'deal_at'=>date('Y-m-d H:i:s')])){
  1237. $this->success('成功');
  1238. }
  1239. $this->error('失败');
  1240. }
  1241. /**
  1242. * @Title("维修订单详情页用户报价列表点击查看详情")
  1243. * @Method("post")
  1244. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1245. * @Header("api-token",type="string",require=1,default="",desc="token")
  1246. * @Param("id",type="string",require=1,default="",desc="维修单ID")
  1247. * @Param("offer_id",type="string",require=1,default="",desc="匹配的记录ID")
  1248. */
  1249. public function userofferinfo(){
  1250. $data = $this->_vali([
  1251. 'id.require'=>'id有误',
  1252. 'offer_id.require'=>'offer_id有误',
  1253. ]);
  1254. $offer_id = $data['offer_id'];
  1255. $list = DataUserRepairOffer::mk()
  1256. ->where('repair_id',$data['id'])
  1257. ->where(function ($query) use ($offer_id){
  1258. $query->where('offer_id',$offer_id);
  1259. })
  1260. ->field('id,price')
  1261. ->select();
  1262. $imgs = array_filter(explode(',',DataUserRepairOffer::mk()->where('repair_id',$data['id'])
  1263. ->where('offer_id',$this->uuid)
  1264. ->order('id desc')
  1265. ->limit(1)
  1266. ->value('imgs')));
  1267. $messagelist = DataUserLeaveMessage::mk()
  1268. ->where('type',1)
  1269. ->where('link_id',$data['id'])
  1270. ->with(['user'=>function($query){
  1271. $query->field('id,nickname,headimg');
  1272. }])
  1273. ->field('id,uuid,uuid2,content,create_at')
  1274. ->select();
  1275. $this->success('成功',compact('list','imgs','messagelist'));
  1276. }
  1277. /**
  1278. * @Title("维修订单留言")
  1279. * @Method("post")
  1280. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1281. * @Header("api-token",type="string",require=1,default="",desc="token")
  1282. * @Param("id",type="string",require=1,default="",desc="维修单ID")
  1283. * @Param("offer_id",type="string",require=1,default="",desc="匹配的记录ID")
  1284. * @Param("content",type="string",require=1,default="",desc="内容")
  1285. */
  1286. public function subleavemessage(){
  1287. $data = $this->_vali([
  1288. 'id.require'=>'id有误',
  1289. 'offer_id.require'=>'offer_id有误',
  1290. 'content.require'=>'内容必须',
  1291. ]);
  1292. $offer = DataUserRepairOffer::mk()->where('id',$data['offer_id'])->findOrEmpty();
  1293. $array = [
  1294. 'uuid'=>$this->uuid,
  1295. 'uuid2'=>$offer->offer_id,
  1296. 'content'=>$data['content'],
  1297. 'type'=>1,
  1298. 'link_id'=>$data['id'],
  1299. ];
  1300. if (DataUserLeaveMessage::mk()->insert($array)){
  1301. $this->success('成功');
  1302. }
  1303. $this->error('失败');
  1304. }
  1305. /**
  1306. * @Title("维修订单维修工回复留言")
  1307. * @Method("post")
  1308. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1309. * @Header("api-token",type="string",require=1,default="",desc="token")
  1310. * @Param("id",type="string",require=1,default="",desc="维修单ID")
  1311. * @Param("content",type="string",require=1,default="",desc="内容")
  1312. */
  1313. public function subofferleavemessage(){
  1314. $data = $this->_vali([
  1315. 'id.require'=>'id有误',
  1316. 'content.require'=>'内容必须',
  1317. ]);
  1318. $repair = DataUserRepair::mk()->where('id',$data['id'])->findOrEmpty();
  1319. $array = [
  1320. 'uuid'=>$this->uuid,
  1321. 'uuid2'=>$repair->uuid,
  1322. 'content'=>$data['content'],
  1323. 'type'=>1,
  1324. 'link_id'=>$data['id'],
  1325. ];
  1326. if (DataUserLeaveMessage::mk()->insert($array)){
  1327. $this->success('成功');
  1328. }
  1329. $this->error('失败');
  1330. }
  1331. /**
  1332. * @Title("维修订单维修工查看留言列表")
  1333. * @Method("post")
  1334. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1335. * @Header("api-token",type="string",require=1,default="",desc="token")
  1336. * @Param("id",type="string",require=1,default="",desc="维修单ID")
  1337. */
  1338. public function suboffermessagelist(){
  1339. $data = $this->_vali([
  1340. 'id.require'=>'id有误',
  1341. ]);
  1342. $messagelist = DataUserLeaveMessage::mk()
  1343. ->where('type',1)
  1344. ->where('link_id',$data['id'])
  1345. ->with(['user'=>function($query){
  1346. $query->field('id,nickname,headimg');
  1347. }])
  1348. ->field('id,uuid,uuid2,content,create_at')
  1349. ->select();
  1350. $this->success('成功',$messagelist);
  1351. }
  1352. /**
  1353. * @Title("消息")
  1354. * @Method("post")
  1355. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1356. * @Header("api-token",type="string",require=1,default="",desc="token")
  1357. * @Param("type",type="string",require=1,default="",desc="message:后台消息 notice:系统通知")
  1358. * @Returned("is_read",desc="1:已读 0:未读")
  1359. */
  1360. public function messagelist(){
  1361. $data = $this->_vali([
  1362. 'type.require'=>'type有误',
  1363. ]);
  1364. $type = $data['type'];
  1365. $messagelist = BaseUserMessage::mk()
  1366. ->where('type',$data['type'])
  1367. ->when($type,function ($query) use ($type){
  1368. if ($type=='notice'){
  1369. $query->where('uuid',$this->uuid);
  1370. }
  1371. })
  1372. ->where('status',1)
  1373. ->where('deleted',0)
  1374. ->withoutField('deleted,sort,num_read,status')
  1375. ->order('id desc')
  1376. ->paginate()->toArray();
  1377. foreach ($messagelist['data'] as &$v){
  1378. $v['is_read'] = BaseUserMessageRead::mk()->where('uuid',$this->uuid)->where('message_id',$v['id'])->count() ? 1 : 0;
  1379. }
  1380. $this->success('成功',$messagelist);
  1381. }
  1382. /**
  1383. * @Title("点击消息")
  1384. * @Method("post")
  1385. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1386. * @Header("api-token",type="string",require=1,default="",desc="token")
  1387. * @Param("id",type="string",require=1,default="",desc="消息ID")
  1388. */
  1389. public function readmessage(){
  1390. $data = $this->_vali([
  1391. 'id.require'=>'id有误',
  1392. ]);
  1393. $info = BaseUserMessage::mk()->where('id',$data['id'])->findOrEmpty();
  1394. BaseUserMessageRead::mk()->where('uuid',$this->uuid)->where('message_id',$data['id'])->count() ? :
  1395. BaseUserMessageRead::mk()->insert(['message_id'=>$data['id'],'uuid'=>$this->uuid]);
  1396. $this->success('成功',$info);
  1397. }
  1398. /**
  1399. * @Title("获取安卓版本")
  1400. * @Method("post")
  1401. * @Header("api-name",type="string",require=1,default="",desc="访问类型")
  1402. * @Header("api-token",type="string",require=1,default="",desc="token")
  1403. *
  1404. * @Returned("version",desc="当前版本")
  1405. * @Returned("name",desc="版本名")
  1406. * @Returned("title",desc="更新标题")
  1407. * @Returned("isCompel",desc="1:强制更新 0:不强制更新")
  1408. * @Returned("content",desc="更新内容")
  1409. * @Returned("download_url",desc="下载地址")
  1410. */
  1411. public function getandroidversion(){
  1412. $info= [
  1413. 'version'=>(int)sysconf('android.version'),
  1414. 'name'=>sysconf('android.name'),
  1415. 'title'=>sysconf('android.title'),
  1416. 'isCompel'=>(int)sysconf('android.isCompel'),
  1417. 'content'=>sysconf('android.content'),
  1418. 'download_url'=>sysconf('android.download_url'),
  1419. ];
  1420. $this->success('成功',$info);
  1421. }
  1422. }