Center.php 75 KB

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