AdverController.php 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386
  1. <?php
  2. namespace App\Http\Controllers\Admins;
  3. use App\Http\Controllers\Controller;
  4. use App\Modes\AccountLog;
  5. use App\Modes\AdminArea;
  6. use App\Modes\Advertising;
  7. use App\Modes\AdverActivityLog;
  8. use App\Modes\Area;
  9. use App\Modes\MsgTemplate;
  10. use App\Modes\Order;
  11. use App\Modes\Proxy;
  12. use App\Modes\Config;
  13. use App\Modes\Industry;
  14. use App\Modes\ProxyArea;
  15. use App\Modes\Upgrade;
  16. use App\Modes\User;
  17. use App\Modes\UserMsg;
  18. use App\Service\AdverService;
  19. use App\Service\UpgradeService;
  20. use Carbon\Carbon;
  21. use Illuminate\Http\Request;
  22. use Illuminate\Support\Facades\DB;
  23. use Illuminate\Support\Facades\Storage;
  24. use function PHPSTORM_META\type;
  25. class AdverController extends Controller
  26. {
  27. protected $adverService;
  28. public function __construct(AdverService $adverService)
  29. {
  30. $this->adverService = $adverService;
  31. }
  32. /*
  33. * 对赌广告审核列表
  34. * wsl
  35. * 2019-07-24
  36. * */
  37. public function guaranteeAuditList(Request $request)
  38. {
  39. }
  40. /**
  41. * 广告列表
  42. * @param Request $request
  43. * @description
  44. * 查询:广告标题、广告主姓名、电话
  45. * 显示:发布者ID、广告标题、姓名、电话、企业名、所在行业、投放城区、费用、当时单价、总展示量、剩余量、投放时间段
  46. * @author lyh
  47. * @date 2019/4/10
  48. * @modify_author lyh
  49. * @modify_time 2019-4-26 14:31:29
  50. * @modify 确认已区分系统管理员与地区管理员权限
  51. */
  52. public function index(Request $request)
  53. {
  54. $validator = \Validator::make($param = $request->all(), [
  55. 'title' => 'string',
  56. 'nick_name' => 'string',
  57. //'mobile' => 'integer'
  58. ]);
  59. if ($validator->fails()) {
  60. return showJsonErr($validator->errors()->first());
  61. }
  62. $fields=[
  63. 'main.id',
  64. 'main.uid',
  65. 'main.title',
  66. 'u.real_name',
  67. 'u.nick_name',
  68. 'u.mobile',
  69. 'main.total_price',
  70. 'main.company_name',
  71. 'main.company_industry',
  72. 'main.province',
  73. 'main.city',
  74. 'main.district',
  75. 'main.price',
  76. 'main.total_num',
  77. 'main.residue_num',
  78. 'main.start_time',
  79. 'main.end_time',
  80. 'main.created_at',
  81. 'main.status',
  82. 'main.redirect',
  83. 'main.industry'
  84. ];
  85. $user = \DB::table('advertising as main')
  86. ->join('user as u', 'u.id', '=', 'main.uid')
  87. ->orderByDesc('id');
  88. //审核状态
  89. if (!empty($param['status'])) {
  90. if ($param['status'] == 9) {
  91. $user->where('main.end_time', '<', date('Y-m-d H:i:s'))->where('main.status', '=', 3);
  92. } elseif ($param['status'] == 4 || $param['status'] == 5) {
  93. $user->where('main.status', '=', $param['status']);
  94. } elseif(in_array($param['status'],[100,101,102])){
  95. //特意留空
  96. }else
  97. $user->where('main.status', '=', $param['status'])->where('main.end_time', '>', date('Y-m-d H:i:s'));
  98. } else {
  99. $user->whereIn('main.status', [3, 4, 5, 9]);
  100. }
  101. if (!empty($param['guarantee']) && $param['guarantee'] == 1) {
  102. $user->where('main.guarantee', '=', 1);
  103. $user->whereIn('main.bet_status', [0,3, 5, 6]);
  104. $user->leftJoin('advertising_bet as ab','main.id','=','ab.advertising_id');
  105. $betfields=['is_win'];
  106. $fields=array_merge($fields,$betfields);
  107. if(!empty($param['status']) && in_array($param['status'],[100,101,102])){
  108. if($param['status']==100) $is_win=0;
  109. if($param['status']==101) $is_win=2;
  110. if($param['status']==102) $is_win=1;
  111. $user->where('ab.is_win',$is_win);
  112. }
  113. } else {
  114. $user->where('main.guarantee', '=', 0);
  115. }
  116. $user->select($fields);
  117. //省市区查询
  118. if (!empty($param['province'])) {
  119. $user->where('main.province', '=', $param['province']);
  120. }
  121. if (!empty($param['city'])) {
  122. $user->where('main.city', '=', $param['city']);
  123. }
  124. if (!empty($param['district'])) {
  125. $user->where('main.district', '=', $param['district']);
  126. }
  127. //行业查询
  128. if (!empty($param['industry'])) {
  129. $user->where('main.industry', '=', $param['industry']);
  130. }
  131. //额度以上查询
  132. if (!empty($param['total_price'])) {
  133. $user->where('main.total_price', '>=', $param['total_price']);
  134. }
  135. // 如果是地区管理员,则不显示同等级的用户信息
  136. if (\Auth::user()->is_super == 3) {
  137. $user = $user->whereIn('u.id', getIds());
  138. }
  139. //管理员查看对应的代理
  140. $district = AdminArea::getAdminArea();
  141. if (!empty($district)) {
  142. if (!empty($district['city'])) {
  143. $user->where('main.city', '=', $district['city']);
  144. } else {
  145. $user->where('main.district', '=', $district['district']);
  146. }
  147. }
  148. // 广告标题
  149. if (!empty($param['title'])) {
  150. $user->where('main.title', 'like', "%{$param['title']}%");
  151. }
  152. // 广告主姓名
  153. if (!empty($param['real_name'])) {
  154. $user->where('u.real_name', 'like', "%{$param['real_name']}%");
  155. }
  156. // 手机号码
  157. if (!empty($param['mobile'])) {
  158. $user->where('u.mobile', 'like', "%{$param['mobile']}%");
  159. }
  160. //echo $user->toSql();exit;
  161. $res = $user->paginate(perPage());
  162. if ($res->isNotEmpty()) {
  163. collect($res->items())->each(function ($item, $key) {
  164. $item->area = trim(Area::getName($item->province) . ' ' . Area::getName($item->city) . ' ' . Area::getName($item->district));
  165. $item->companyIndustryMsg = Industry::find($item->company_industry)->content ?? '';
  166. if ($item->industry != 'all') {
  167. $industry = Industry::whereIn('id', explode(',', $item->industry))->get();
  168. foreach ($industry as $ind) {
  169. $arr[] = $ind['content'];
  170. }
  171. $item->industryArr = $arr;
  172. }
  173. });
  174. }
  175. return showJsonSucc(1001, $res);
  176. }
  177. /**
  178. * 广告列表-查看
  179. * @param Request $request
  180. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  181. * @description
  182. * @author lyh
  183. * @date 2019/4/10
  184. * @modify_author lyh
  185. * @modify_time 2019-4-26 14:31:18
  186. * @modify 确认已区分系统管理员与地区管理员权限
  187. */
  188. public function show(Request $request)
  189. {
  190. $validator = \Validator::make($param = $request->all(), [
  191. 'id' => 'required|exists:advertising,id',
  192. ]);
  193. if ($validator->fails()) {
  194. return showJsonErr($validator->errors()->first());
  195. }
  196. $res = Advertising::whereId($param['id'])
  197. ->first();
  198. // 区分系统管理员与地区管理员数据
  199. if (\Auth::user()->is_super == 3 && !in_array($res->uid, getIds())) {
  200. return showJsonErr('抱歉,该用户信息您没有权限查看');
  201. }
  202. /*if(!empty($res)&& $res->industry!='all'){
  203. $industry=explode(',',$res->industry);
  204. $industryarr=Industry::whereIn('id',$industry)->select('content')->get();
  205. $arr=[];
  206. if(!empty($industryarr)){
  207. foreach ($industryarr as $item){
  208. $arr[]=$item->content;
  209. }
  210. $res->industry=$arr;
  211. }
  212. }*/
  213. if ($res->guarantee == 1) {
  214. $res->bet = DB::table('advertising_bet')->where('advertising_id', '=', $res->id)->first();
  215. }
  216. $res->image = $res->image? getUrl($res->image) : '';
  217. $image_group = explode(',', $res->image_group);
  218. if($image_group){
  219. foreach ($image_group as $k => $item){
  220. $image_group[$k] = getUrl($item);
  221. }
  222. }
  223. $res->image_group = $image_group;
  224. return showJsonSucc(1001, $res);
  225. }
  226. /**
  227. * 广告列表-屏蔽
  228. * @param Request $request
  229. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  230. * @description
  231. * @author lyh
  232. * @date 2019/4/10
  233. * @modify_author lyh
  234. * @modify_time 2019-4-26 14:45:13
  235. * @modify 确认已区分系统管理员与地区管理员权限
  236. */
  237. public function shield(Request $request)
  238. {
  239. $validator = \Validator::make($param = $request->all(), [
  240. 'id' => 'required|exists:advertising,id',
  241. 'status' => 'required|integer|in:3,4'
  242. ]);
  243. if ($validator->fails()) {
  244. return showJsonErr($validator->errors()->first());
  245. }
  246. $adver = Advertising::find($param['id']);
  247. if (in_array($adver->status, [1, 2, 5, 9])) {
  248. return showJsonErr('抱歉,该广告不能修改');
  249. }
  250. // 区分系统管理员与地区管理员数据
  251. if (\Auth::user()->is_super == 3 && !in_array($adver->uid, getIds())) {
  252. return showJsonErr('抱歉,您没有权限查看');
  253. }
  254. if ($adver->residue_num <= 0 && $adver->end_time < Carbon::now()) {
  255. return showJsonErr('该广告不可操作');
  256. }
  257. $data = ['status' => $param['status']];
  258. if ($param['status'] == 4) {
  259. $data['before_status'] = $adver->status;
  260. }
  261. if ($param['status'] == 3) {
  262. //取消屏蔽
  263. $data['status'] = $adver->before_status;
  264. }
  265. $result = Advertising::whereId($param['id'])->update($data);
  266. if (!$result) {
  267. return showJsonErr('修改状态失败');
  268. }
  269. return showJsonSucc($resMsg ?? '修改状态成功');
  270. }
  271. /**
  272. * 广告审核列表
  273. * @param Request $request
  274. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  275. * @description
  276. * 查询:广告标题、广告主、是否对赌
  277. * 显示:发布者ID、广告标题、姓名、电话、企业名、行业、投放城区、费用(元)、当前单价、总展示量、是否对赌
  278. * @author lyh
  279. * @date 2019/4/10
  280. * @modify_author lyh
  281. * @modify_time 2019-4-26 14:36:09
  282. * @modify 确认已区分系统管理员与地区管理员权限
  283. */
  284. public function getListByAudit(Request $request)
  285. {
  286. $validator = \Validator::make($param = $request->all(), [
  287. 'title' => 'string',
  288. 'nick_name' => 'string',
  289. 'guarantee' => 'integer|in:0,1' // 是否平台担保:0-否 1-是
  290. ]);
  291. if ($validator->fails()) {
  292. return showJsonErr($validator->errors()->first());
  293. }
  294. $user = \DB::table('advertising as main')
  295. ->join('user as u', 'u.id', '=', 'main.uid')
  296. ->leftjoin('order as o', 'o.order_no', '=', 'main.order_no')
  297. ->select([
  298. 'main.id',
  299. 'main.uid',
  300. 'main.title',
  301. 'u.real_name',
  302. 'u.nick_name',
  303. 'u.mobile',
  304. 'main.company_name',
  305. 'main.company_industry',
  306. 'main.province',
  307. 'main.city',
  308. 'main.district',
  309. 'main.total_price',
  310. 'main.price',
  311. 'main.total_num',
  312. 'main.guarantee',
  313. 'main.guarantee_url',
  314. 'main.redirect',
  315. 'main.status',
  316. 'main.bet_status',
  317. 'main.industry',
  318. 'main.created_at',
  319. 'main.is_company'
  320. ])
  321. ->where(function ($q) {
  322. $q->whereOr('main.bet_status', '=', 3);
  323. $q->whereOr('main.bet_status', '=', 0);
  324. })
  325. ->where('main.status', '=', 2)
  326. ->whereOr('o.is_pay', '=', 1)
  327. ->whereOr('main.total_price', '=', 0)
  328. ->orderByDesc('id');
  329. // 区分系统管理员与地区管理员数据
  330. if (\Auth::user()->is_super == 3) {
  331. $user->whereIn('u.id', getIds());
  332. }
  333. // 地区过滤查询
  334. // $user = whereArea($user, $param);
  335. //管理员查看对应的代理
  336. $district = AdminArea::getAdminArea();
  337. if (!empty($district)) {
  338. if (!empty($district['city'])) {
  339. $user->where('main.city', '=', $district['city']);
  340. } else {
  341. $user->where('main.district', '=', $district['district']);
  342. }
  343. }
  344. // 广告标题
  345. if (!empty($param['title'])) {
  346. $user->where('main.title', 'like', "%{$param['title']}%");
  347. }
  348. // 广告主姓名
  349. if (!empty($param['nick_name'])) {
  350. $user->where(\DB::raw('concat(real_name,nick_name,mobile)'), 'like', "%{$param['nick_name']}%");
  351. }
  352. // 是否是对赌
  353. if (isset($param['guarantee'])) {
  354. $user->where('main.guarantee', '=', $param['guarantee']);
  355. }
  356. //省市区查询
  357. if (!empty($param['province'])) {
  358. $user->where('main.province', '=', $param['province']);
  359. }
  360. if (!empty($param['city'])) {
  361. $user->where('main.city', '=', $param['city']);
  362. }
  363. if (!empty($param['district'])) {
  364. $user->where('main.district', '=', $param['district']);
  365. }
  366. //行业查询
  367. if (!empty($param['industry'])) {
  368. $user->where('main.industry', '=', $param['industry']);
  369. }
  370. //额度以上查询
  371. if (!empty($param['total_price'])) {
  372. $param['total_price'] = floatval($param['total_price']);
  373. $user->where('main.total_price', '>=', $param['total_price']);
  374. }
  375. $res = $user->paginate(perPage());
  376. if ($res->isNotEmpty()) {
  377. collect($res->items())->each(function ($item, $key) {
  378. $item->area = trim(Area::getName($item->province) . ' ' . Area::getName($item->city) . ' ' . Area::getName($item->district));
  379. $item->companyIndustryMsg = Industry::find($item->company_industry)->content ?? '';
  380. /* 对赌广告状态不同 */
  381. if ($item->guarantee == 1) {
  382. $item->bet = DB::table('advertising_bet')->where('advertising_id', '=', $item->id)->first();
  383. }
  384. if ($item->industry != 'all') {
  385. $industry = Industry::whereIn('id', explode(',', $item->industry))->get();
  386. foreach ($industry as $ind) {
  387. $arr[] = $ind['content'];
  388. }
  389. $item->industryArr = $arr;
  390. }
  391. });
  392. }
  393. return showJsonSucc(1001, $res);
  394. }
  395. /*
  396. * 判断输赢 wsl 20190806
  397. * */
  398. public function judge(Request $request)
  399. {
  400. $validator = \Validator::make($param = $request->all(), [
  401. 'id' => 'required|exists:advertising,id',
  402. 'user_guarantee_url' => 'required|string',
  403. 'user_achievement_url' => 'required|string',
  404. 'is_win' => 'integer|in:1,2',
  405. ]);
  406. if ($validator->fails()) {
  407. return showJsonErr($validator->errors()->first());
  408. }
  409. $adver = Advertising::whereId($param['id'])->first();
  410. $betadver = DB::table('advertising_bet')->where('advertising_id', '=', $param['id'])->first();
  411. if (empty($betadver)) {
  412. return showJsonErr('对赌广告数据错误');
  413. }
  414. if (empty($betadver->user_achievement_url) && empty($param['user_achievement_url'])) {
  415. return showJsonErr('用户未上传业务数据,不能判定输赢');
  416. }
  417. if ($betadver->is_win > 0) {
  418. return showJsonErr('已经做过判定了,请勿重复判定');
  419. }
  420. $data = [
  421. 'user_guarantee_url' => $param['user_guarantee_url'],
  422. 'user_achievement_url' => $param['user_achievement_url'],
  423. 'is_win' => $param['is_win'],
  424. 'finish_time' => date('Y-m-d H:i:s'),
  425. 'do_id' => Admin()->id,
  426. ];
  427. //用户输了,没有佣金发放
  428. //“2019年7月17日提交的编号为xxx标题为“xxxx”的对赌广告,您所交的yyy元广告费将被桃典广告正式收取,若有任何意见,请致电桃典广告:0772-2998804。”
  429. //
  430. //1、对赌赢:
  431. \DB::beginTransaction();
  432. try {
  433. $msg_content = MsgTemplate::getTemplateContent(6, ['date' => $adver->created_at, 'adverid' => $adver->id, 'title' => $adver->title, 'totalprice' => $adver->total_price]);
  434. //您的对赌广告输了
  435. $msgarr = ['title' => '对赌判定通知', 'uid' => $adver->uid, 'type' => 16, 'content' => $msg_content];
  436. //用户赢了,退款给用户,无分佣
  437. if ($param['is_win'] == 1) {
  438. //退款操作
  439. if ($adver->total_price != '0.000' && $adver->total_price > 0) {
  440. $order = Order::where('order_no', '=', $adver->order_no)
  441. ->select('order_no', 'pay_no', 'price', 'pay_type')
  442. ->first();
  443. if (empty($order)) return showJsonErr('当前订单数据不完整无法原路退款!');
  444. $remark = '退款异常';
  445. if ($order->pay_type == 2 && $adver->status == 3) {
  446. $pay = \App::make('aliPay');
  447. $r = $pay->getReturnInfo($order->order_no, $order->pay_no, $order->price);
  448. if ($r->code == 10000) {
  449. $remark = '您发布的对赌广告-' . $adver->title . '-赢了!资金已原路退回支付宝';
  450. } else return showJsonErr('支付宝退款失败');
  451. } elseif ($order->pay_type == 3 && $adver->status == 3) {
  452. //微信退款
  453. $pay = \App::make('wechat');
  454. $r = $pay->getReturnInfo($order->order_no, $order->pay_no, $order->price, $order->price);
  455. if ($r->return_code == 'SUCCESS') {
  456. $remark = '您发布的对赌广告-' . $adver->title . '-赢了,资金已原路退回微信账户';
  457. } else return showJsonErr('微信退款失败');
  458. }
  459. AccountLog::saveDataByPost($adver->uid, 46, $order->price, User::whereId($adver->uid)->value('balance'), 2, 1, $remark);
  460. }
  461. $msg_content = MsgTemplate::getTemplateContent(5, ['date' => $adver->created_at, 'adverid' => $adver->id, 'title' => $adver->title, 'totalprice' => $adver->total_price]);
  462. //'您的对赌广告赢了!资金已原路退回'
  463. $msgarr = ['title' => '对赌判定通知', 'uid' => $adver->uid, 'type' => 16, 'content' => $msg_content];
  464. } else {
  465. //用户输了,广告费不退,并发放佣金
  466. //分佣
  467. Order::UserFenYong($adver->total_price, $adver->uid, 2);
  468. }
  469. UserMsg::SendGetui($msgarr);
  470. DB::table('advertising_bet')->where('advertising_id', '=', $param['id'])->update($data);
  471. \DB::commit();
  472. return showJsonSucc('判定成功');
  473. } catch (Exception $e) {
  474. \DB::rollBack();
  475. return showJsonErr($e->getMessage(), [
  476. 'file' => $e->getFile(),
  477. 'line' => $e->getLine(),
  478. 'messge' => $e->getMessage(),
  479. ]);
  480. }
  481. }
  482. /**
  483. * 广告审核列表-查看资质(企业信息)
  484. * @param Request $request
  485. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  486. * @description
  487. * @author lyh
  488. * @date 2019/4/10
  489. * @modify_author lyh
  490. * @modify_time 2019-4-26 14:40:47
  491. * @modify 确认已区分系统管理员与地区管理员权限
  492. */
  493. public function showCompany(Request $request)
  494. {
  495. $validator = \Validator::make($param = $request->all(), [
  496. 'id' => 'required|exists:advertising,id',
  497. ]);
  498. if ($validator->fails()) {
  499. return showJsonErr($validator->errors()->first());
  500. }
  501. $res = Advertising::whereId($param['id'])
  502. ->select([
  503. 'company_name', //企业名称
  504. 'company_industry', //行业
  505. 'license_number', //营业执照号码
  506. 'license', //营业执照图片
  507. 'real_name', //投放人姓名
  508. 'idcard_front', //身份证正面照
  509. 'idcard_reverse', //s身份证国徽照
  510. 'idcard_number', // 身份证号码
  511. 'is_company', // 判断广告类型: 1-个人 2-企业
  512. ])
  513. ->first();
  514. // 区分系统管理员与地区管理员数据
  515. if (\Auth::user()->is_super == 3 && !in_array($res->uid, getIds())) {
  516. return showJsonErr('抱歉,您没有权限查看');
  517. }
  518. if($res&&$res->is_company == 1){
  519. $res->company_industry = Industry::find($res->company_industry)->content ?? '';
  520. }
  521. return showJsonSucc(1001, $res);
  522. }
  523. /**
  524. * 广告审核列表-审核
  525. * @param Request $request
  526. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  527. * @description
  528. * @author lyh
  529. * @date 2019/4/10
  530. * @modify_author lyh
  531. * @modify_time 2019-4-26 14:42:24
  532. * @modify 确认已区分系统管理员与地区管理员权限
  533. */
  534. public function Audit(Request $request)
  535. {
  536. $validator = \Validator::make($param = $request->all(), [
  537. 'ids' => 'required|array',
  538. 'status' => 'required|integer|in:3,5' // 3-通过 5-拒绝
  539. ]);
  540. if ($validator->fails()) {
  541. return showJsonErr($validator->errors()->first());
  542. }
  543. \DB::beginTransaction();
  544. try {
  545. foreach ($param['ids'] as $id) {
  546. $adver = Advertising::find($id);
  547. if ($adver->guarantee == 1) {
  548. $betadver = DB::table('advertising_bet')->where('advertising_id', '=', $adver->id)->first();//担保广告数据
  549. }
  550. if (empty($adver)) {
  551. return showJsonErr("抱歉,【id:{$id}】不存在");
  552. }
  553. // 区分系统管理员与地区管理员数据
  554. if (\Auth::user()->is_super == 3 && !in_array($adver->uid, getIds())) {
  555. \DB::rollBack();
  556. return showJsonErr('抱歉,您没有权限查看');
  557. }
  558. if ($adver->status != 2) {
  559. \DB::rollBack();
  560. return showJsonErr("抱歉,广告【id:{$id}】不是待审核状态");
  561. }
  562. $curtime = time();
  563. $auditendtime = strtotime($adver->created_at) + 3600 * 24 * 3;//上级超过3天未确认上级才能操作
  564. $shengyu = $auditendtime - $curtime;
  565. if ($adver->bet_status == 0 && $shengyu > 0) {
  566. $sday = floatval($shengyu / (24 * 3600));
  567. if ($sday >= 2) $shengyu = '3天';
  568. if ($sday >= 1 && $sday < 2) $shengyu = '2天';
  569. if ($sday < 1) $shengyu = ceil($shengyu / 3600) . '小时';
  570. return showJsonErr("抱歉,上级用户未审核,请您".$shengyu."后再操作");
  571. }
  572. if (empty($adver->guarantee_url) && $param['status'] == 3 && $adver->guarantee == 1) {
  573. return showJsonErr("抱歉,用户未上传担保协议,您不能进行此项操作");
  574. }
  575. //退款操作wsl 20190628
  576. if ($param['status'] == 5 && $adver->total_price != '0.000' && $adver->total_price > 0) {
  577. $order = Order::where('order_no', '=', $adver->order_no)
  578. ->select('order_no', 'pay_no', 'price', 'pay_type')
  579. ->first();
  580. if (empty($order)) return showJsonErr('当前订单数据不完整无法原路退款!');
  581. $remark = '原路退款异常';
  582. if (in_array($order->pay_type,[2,21]) && $adver->status != 5) {
  583. $pay = \App::make('aliPay');
  584. $r = $pay->getReturnInfo($order->order_no, $order->pay_no, $order->price);
  585. if ($r->code == 10000) {
  586. $remark = '您发布的广告-' . $adver->title . '-审核不通过,资金原路退回支付宝';
  587. }
  588. } elseif (in_array($order->pay_type,[3,31]) && $adver->status != 5) {
  589. //微信退款
  590. $pay = \App::make('wechat');
  591. $r = $pay->getReturnInfo($order->order_no, $order->pay_no, $order->price, $order->price);
  592. if ($r->return_code == 'SUCCESS') {
  593. $remark = '您发布的广告-' . $adver->title . '-审核不通过,资金原路退回微信账户';
  594. }
  595. }
  596. AccountLog::saveDataByPost($adver->uid, 44, $order->price, User::whereId($adver->uid)->value('balance'), 2, 1, $remark);
  597. }
  598. // 修改广告状态
  599. $updata=[
  600. 'status'=> $param['status']
  601. ];
  602. $auitFailsendMsg = '';
  603. if($param['status'] == 5 && !empty($param['auitFailsendMsg'])){
  604. $auitFailsendMsg = $updata['auitFailsendMsg'] = trim($param['auitFailsendMsg']);
  605. }
  606. Advertising::whereId($id)->update($updata);
  607. //修改记录状态
  608. AdverActivityLog::whereId($adver->activity_id)->update(['status' => $param['status'] == 3 ? 3 : 4]);
  609. // $msg_content = MsgTemplate::getTemplateContent(8);
  610. $msg_content = MsgTemplate::getTemplateContent(8, ['date' => $adver->created_at,'adverid' => $adver->id, 'title' => $adver->title, 'totalprice' => $adver->total_price,'reason'=>$auitFailsendMsg]);
  611. // var_dump($msg_content);exit;
  612. $msgarr = ['title' => '广告审核通知', 'uid' => $adver->uid, 'type' => 12, 'content' => $msg_content];
  613. if ($param['status'] == 3) {
  614. // 交费升级添加账号流水
  615. /*发布的时候有加过一次记录了
  616. $remark = "用户【id:{$adver->uid}】发布广告,交费¥{$adver->total_price}成功";
  617. $result = AccountLog::insert([
  618. 'uid' => $adver->uid,
  619. 'type' => 6,
  620. 'money_type' => 2,
  621. 'money' => -(abs($adver->total_price)),
  622. 'current_money' => User::find($adver->uid)->balance,
  623. 'remark' => $remark
  624. ]);
  625. if (empty($result)) {
  626. \DB::rollBack();
  627. return showJsonErr('添加账号流水失败');
  628. }*/
  629. $msg_content = MsgTemplate::getTemplateContent(7, ['date' => $adver->created_at,'adverid' => $adver->id, 'title' => $adver->title]);
  630. $msgarr = ['title' => '广告审核通知', 'uid' => $adver->uid, 'type' => 12, 'content' => $msg_content];
  631. // 广告分佣addbywsl,编辑的不需要参与分佣,对赌广告不参与分佣 20190628
  632. //不用lyh的$this->adverService->commission($adver->uid, $adver->total_price);
  633. if (!empty($adver->total_price) && empty($adver->is_update) && $adver->guarantee == 0) {
  634. Order::UserFenYong($adver->total_price, $adver->uid, 2);
  635. }
  636. // zch 累加用户发布ad_num
  637. UpgradeService::incUserAccount($adver->uid,'ad_num',1);
  638. // zch 累加用户发布广告总额
  639. UpgradeService::incUserAccount($adver->uid,'ad_all_money',abs($adver->total_price));
  640. }
  641. UserMsg::SendGetui($msgarr);
  642. }
  643. \DB::commit();
  644. return showJsonSucc('审核成功');
  645. } catch (\Exception $e) {
  646. \DB::rollBack();
  647. return showJsonErr($e->getMessage(), [
  648. 'file' => $e->getFile(),
  649. 'line' => $e->getLine(),
  650. 'messge' => $e->getMessage(),
  651. ]);
  652. }
  653. }
  654. //add by wsl
  655. public function StatBrowse(Request $request)
  656. {
  657. $param = $request->all();
  658. if (@$param['timeType'] == 2) {
  659. //yue
  660. $starttime = date('Y-m-01 00:00');
  661. $endtime = date('Y-m-d 23:59:59', strtotime(date('Y-m-01', strtotime($starttime)) . ' +1 month') - 3600 * 24);;
  662. } elseif (@$param['timeType'] == 3) {
  663. //nian
  664. $starttime = date('Y-01-01 00:00');
  665. $endtime = date('Y-m-d 23:59:59', strtotime(date('Y-m-d', strtotime($starttime)) . ' +1 year') - 3600 * 24);
  666. } else {
  667. //zhou
  668. // $starttime=date('Y-m-d 00:00');
  669. // $endtime=date('Y-m-d 23:59');
  670. $starttime = date("Y-m-d 00:00:00", strtotime("this week"));
  671. $endtime = date("Y-m-d 23:59:59", strtotime("this week") + 7 * 24 * 3600);
  672. }
  673. $proxy = Proxy::select(['id', 'province', 'city', 'district', 'status', 'user_level'])
  674. ->where('province', '!=', 0);
  675. //后台管理员管理的区域展示
  676. $district = AdminArea::getAdminArea();
  677. if (!empty($district)) {
  678. if (!empty($district['city'])) {
  679. $proxy->whereCity($district['city']);
  680. if (!empty($param['district'])) {
  681. $proxy->whereDistrict($param['district']);
  682. }
  683. } else {
  684. $proxy->whereDistrict($district['district']);
  685. }
  686. }
  687. $res = $proxy->groupBy(['province', 'city', 'district'])->orderByDesc('created_at')->paginate(perPage());
  688. if ($res->isNotEmpty()) {
  689. collect($res->items())->each(function ($item, $key) use ($starttime, $endtime) {
  690. $item->area = Area::getName($item->province) . ' ' . Area::getName($item->city) . Area::getName($item->district);
  691. $item->browse_num = 0;
  692. $item->click_num = 0;
  693. $item->start = [$starttime, 'timezone_type' => 3, 'timezone' => 'Asia/Shanghai'];
  694. $item->end = [$endtime, 'timezone_type' => 3, 'timezone' => 'Asia/Shanghai'];
  695. unset($item->user_level);
  696. unset($item->status);
  697. unset($item->city);
  698. unset($item->district);
  699. unset($item->province);
  700. });
  701. }
  702. return showJsonSucc(1001, $res);
  703. }
  704. //add by wsl 20190809 后台确认并发送通知
  705. public function BetComfirm(Request $request)
  706. {
  707. $param = $request->all();
  708. if (empty($param['id'])) return showJsonErr('广告id不能为空');
  709. if (empty($param['name'])) return showJsonErr('业务经理不能为空');
  710. $adver = Advertising::whereId($param['id'])->first();
  711. if (empty($adver) || $adver->guarantee == 0) {
  712. return showJsonErr('当前广告不是对赌广告');
  713. }
  714. $betadver = \DB::table('advertising_bet')->where('advertising_id', '=', $adver->id)->first();
  715. $user = User::whereId($param['name'])->orWhere('mobile', '=', $param['name'])->first();
  716. $betuser = User::whereId($adver->uid)->first();
  717. if (empty($user)) {
  718. return showJsonErr('业务经理不存在');
  719. }
  720. if (empty($betadver)) {
  721. return showJsonErr('对赌广告数据错误');
  722. }
  723. if (in_array($adver->status, [1, 3, 4, 5, 9])) {
  724. return showJsonErr('抱歉,当前广告状态不能做此操作');
  725. }
  726. if ($betuser->id == $user->id) {
  727. return showJsonErr('抱歉,业务经理和对赌用户重复');
  728. }
  729. \DB::beginTransaction();
  730. try {
  731. $betdata = [
  732. 'bet_state' => 1
  733. ];
  734. $c = empty($betadver->bet_city) ? '' : Area::whereId($betadver->bet_city)->value('name');
  735. $d = empty($betadver->bet_district) ? '' : Area::whereId($betadver->bet_district)->value('name');
  736. Advertising::whereId($adver->id)->update(['bet_status' => 3]);//改成上级已确认
  737. \DB::table('advertising_bet')->where('id', '=', $betadver->id)->update($betdata);
  738. if ($betadver->bet_state != 1) {//用户不需重复发送
  739. $usermsg = MsgTemplate::getTemplateContent(1);
  740. UserMsg::SendGetui(['title' => '对赌确认通知', 'uid' => $betuser->id, 'type' => 17, 'content' => $usermsg]);
  741. }
  742. $managemsg = MsgTemplate::getTemplateContent(2, ['usermobile' => $betuser->mobile, 'nickname' => $betuser->nick_name, 'useraddress' => $c . $d . $betadver->bet_address]);
  743. UserMsg::SendGetui(['title' => '对赌确认通知', 'uid' => $user->id, 'type' => 17, 'content' => $managemsg]);
  744. \DB::commit();
  745. return showJsonSucc('操作成功,通知成功发送');
  746. } catch (\Exception $e) {
  747. \DB::rollBack();
  748. return showJsonErr($e->getMessage(), [
  749. 'file' => $e->getFile(),
  750. 'line' => $e->getLine(),
  751. 'messge' => $e->getMessage(),
  752. ]);
  753. }
  754. }
  755. /**
  756. * 广告浏览量监控数据统计
  757. * @author lyh 此处不知lyh是怎么计算的,editby wsl
  758. * @date 2019/4/8
  759. * @modify_author lyh
  760. * @modify 2019-4-26 11:23:14-确认已区分系统管理员与地区管理员权限
  761. * @description
  762. * 默认按周统计,显示最近一周的数据统计
  763. * 统计时间根据所选条件不同显示(周,年,月)
  764. * 显示信息:
  765. * 序号
  766. * 城区 当前登录用户的所在地区
  767. * 浏览量
  768. * 点击量
  769. * 统计时间
  770. */
  771. public function StatBrowselyh(Request $request)
  772. {
  773. $validator = \Validator::make($param = $request->all(), [
  774. 'timeType' => 'required|integer|between:1,3', // 1-按周 2-按月 3-按年
  775. 'perPage' => 'required|integer',
  776. 'page' => 'required|integer'
  777. ]);
  778. if ($validator->fails()) {
  779. return showJsonErr($validator->errors()->first());
  780. }
  781. // 获取时间数组
  782. // 每个时间段的开始、结束时间
  783. $start = (($param['page'] - 1) * $param['perPage']);
  784. $end = $start + $param['perPage'];
  785. switch ($param['timeType']) {
  786. case 2:
  787. $timeArray = self::getMonthArray($start, $end);
  788. break;
  789. case 3:
  790. $timeArray = self::getYearArray($start, $end);
  791. break;
  792. default;
  793. $timeArray = self::getWeekArray($start, $end);
  794. }
  795. $res = [];
  796. foreach ($timeArray as $item) {
  797. $adver = Advertising::whereBetween('created_at', [$item['start'], $item['end']])->select([
  798. \DB::raw('sum(browse_num) browse_num'),
  799. \DB::raw('sum(click_num) click_num'),
  800. ]);
  801. // 区分系统管理员与地区管理员的数据
  802. if (Admin()->is_super == 3) {
  803. $adver = $adver->whereIn('uid', getIds());
  804. $str = Area::getArea(Admin()->province, Admin()->city, Admin()->district);
  805. }
  806. $stat = $adver->first();
  807. $res[] = [
  808. 'area' => $str ?? '',
  809. 'browse_num' => $stat->browse_num ?? 0,
  810. 'click_num' => $stat->click_num ?? 0,
  811. 'start' => $item['start'],
  812. 'end' => $item['end']
  813. ];
  814. }
  815. return showJsonSucc(1001, $res);
  816. }
  817. /**
  818. * 城区业绩量统计
  819. * author wsl
  820. * 2019.7.9
  821. *
  822. *
  823. *
  824. **/
  825. public function StatArea(Request $request)
  826. {
  827. $validator = \Validator::make($param = $request->all(), [
  828. 'province' => 'exists:area,id',
  829. 'city' => 'exists:area,id',
  830. 'district' => 'exists:area,id',
  831. 'start' => 'date',
  832. 'end' => 'date',
  833. ]);
  834. if ($validator->fails()) {
  835. return showJsonErr($validator->errors()->first());
  836. }
  837. // 如果当前管理员是地区管理员
  838. if (Admin()->is_super == 3) {
  839. if (isset($param['district'])) {
  840. if (Admin()->level == 6 && $param['district'] != Admin()->district) {
  841. return showJsonErr('抱歉,您不能查看该地区的信息');
  842. }
  843. }
  844. if (isset($param['city'])) {
  845. if (Admin()->level == 7 && $param['city'] != Admin()->city) {
  846. return showJsonErr('抱歉,您不能查看该城市的信息');
  847. }
  848. }
  849. }
  850. //查找已开放的区域
  851. $proxy = Proxy::select(['id', 'province', 'city', 'district', 'status', 'user_level'])
  852. ->where('province', '!=', 0);
  853. //管理员查看对应的代理
  854. $district = AdminArea::getAdminArea();
  855. if (!empty($district)) {
  856. if (!empty($district['city'])) {
  857. $proxy->whereCity($district['city']);
  858. if (!empty($param['district'])) {
  859. $proxy->whereDistrict($param['district']);
  860. }
  861. } else {
  862. $proxy->whereDistrict($district['district']);
  863. }
  864. } else {
  865. // 地区查询
  866. if (isset($param['province']) && isset($param['province'])) {
  867. $proxy->where('province', '=', $param['province']);
  868. }
  869. if (isset($param['city']) && isset($param['city'])) {
  870. $proxy->where('city', '=', $param['city']);
  871. }
  872. if (isset($param['district']) && isset($param['district'])) {
  873. $proxy->where('district', '=', $param['district']);
  874. }
  875. }
  876. $res = $proxy->groupBy(['province', 'city', 'district'])->orderByDesc('created_at')->paginate(perPage());
  877. if ($res->isNotEmpty()) {
  878. collect($res->items())->each(function ($item, $key) use ($param) {
  879. $item->str = Area::getName($item->province) . ' ' . Area::getName($item->city) . ' ' . Area::getName($item->district);
  880. $adver = Advertising::whereIn('status', [3, 4, 9])->select([
  881. \DB::raw('count(id) count'), // 广告总笔数
  882. \DB::raw('sum(total_price) totalPrice'), // 广告业绩总额
  883. ]);
  884. $adver = $adver->whereProvince($item->province)->whereCity($item->city);
  885. $user = User::whereProvince($item->province)->whereCity($item->city);
  886. $upgrade = Upgrade::whereStatus(3)->whereProvince($item->province)->whereCity($item->city);
  887. $proxyarea = DB::table('proxy_area as pa')->join('order as o', 'o.id', '=', 'pa.order_id')
  888. ->select(\DB::raw('sum(price) totalprice'))->where('pa.status', '=', 3)
  889. ->where('pa.province', '=', $item->province)
  890. ->where('pa.city', '=', $item->city)
  891. ->where('pa.district', '=', $item->district);
  892. if (!empty($item->district)) {
  893. $adver->whereDistrict($item->district);
  894. $user->whereDistrict($item->district);
  895. $upgrade->whereDistrict($item->district);
  896. $proxyarea->whereDistrict($item->district);
  897. }
  898. if (isset($param['start']) && isset($param['end'])) {
  899. $adver->whereBetween('created_at', [$param['start'], $param['end']]);
  900. $upgrade->whereBetween('created_at', [$param['start'], $param['end']]);
  901. $proxyarea->whereBetween('created_at', [$param['start'], $param['end']]);
  902. }
  903. $adverres = $adver->first();
  904. $proxyareares = $proxyarea->first();
  905. $item->count = $adverres->count;//广告总笔数
  906. $item->proxyTotal = round($upgrade->sum('money') + $proxyareares->totalprice, 3);//代理费总额
  907. $item->totalPrice = round($adverres->totalPrice, 3);//广告业绩总额
  908. $item->proxynum = $user->count();//代理数量
  909. $item->allprice = round($item->proxyTotal + $item->totalPrice, 3);//代理数量
  910. });
  911. }
  912. return showJsonSucc(1001, $res);
  913. }
  914. /**
  915. * 城区业绩量统计,感觉不对,
  916. * @author lyh
  917. * @date 2019/4/8
  918. * @modify_author lyh
  919. * @modify 2019-4-26 11:25:25-确认已区分系统管理员与地区管理员权限
  920. * @description
  921. * 查询:地区(省市区)、时间(开始结束时间)
  922. * 城区
  923. * 代理数量
  924. * 代理费总额(元)
  925. * 广告总比数
  926. * 广告业绩总额(元)
  927. * 实付总额
  928. * todo 待定
  929. */
  930. public function StatAreaLyh(Request $request)
  931. {
  932. $validator = \Validator::make($param = $request->all(), [
  933. 'province' => 'exists:area,id',
  934. 'city' => 'exists:area,id',
  935. 'district' => 'exists:area,id',
  936. 'start' => 'date',
  937. 'end' => 'date',
  938. ]);
  939. if ($validator->fails()) {
  940. return showJsonErr($validator->errors()->first());
  941. }
  942. // 如果当前管理员是地区管理员
  943. if (Admin()->is_super == 3) {
  944. if (isset($param['district'])) {
  945. if (Admin()->level == 6 && $param['district'] != Admin()->district) {
  946. return showJsonErr('抱歉,您不能查看该地区的信息');
  947. }
  948. }
  949. if (isset($param['city'])) {
  950. if (Admin()->level == 7 && $param['city'] != Admin()->city) {
  951. return showJsonErr('抱歉,您不能查看该城市的信息');
  952. }
  953. }
  954. }
  955. $adver = Advertising::whereIn('status', [3, 4, 9])->select([
  956. \DB::raw('count(id) count'), // 广告总笔数
  957. \DB::raw('sum(total_price) totalPrice'), // 广告业绩总额
  958. 'province',
  959. 'city',
  960. 'district'
  961. ]);
  962. // 区分系统管理员与地区管理员数据
  963. if (\Auth::user()->is_super == 3) {
  964. $adver = $adver->whereIn('uid', getIds());
  965. }
  966. if (isset($param['start']) && isset($param['end'])) {
  967. $adver->whereBetween('created_at', [$param['start'], $param['end']]);
  968. }
  969. if (isset($param['province']) && isset($param['province'])) {
  970. $adver->where('province', '=', $param['province']);
  971. }
  972. if (isset($param['city']) && isset($param['city'])) {
  973. $adver->where('city', '=', $param['city']);
  974. }
  975. if (isset($param['district']) && isset($param['district'])) {
  976. $adver->where('district', '=', $param['district']);
  977. }
  978. $group = 'city';
  979. if (!empty($param['city'])) {
  980. $group = 'district';
  981. }
  982. $statAdver = $adver->groupBy($group)->paginate(perPage());
  983. if ($statAdver->isNotEmpty()) {
  984. foreach ($statAdver->items() as $item) {
  985. $user = Upgrade::whereStatus(3)->whereUpgradeWay(1)->select([
  986. \DB::raw('count(id) proxynum'), // 代理数量
  987. \DB::raw('sum(money) proxyTotal') // 代理费总额
  988. ]);
  989. if ($item->province) {
  990. $user->whereProvince($item->province);
  991. }
  992. if ($item->city) {
  993. $user->whereCity($item->city);
  994. }
  995. if ($item->district) {
  996. $user->whereDistrict($item->district);
  997. }
  998. if (isset($param['start']) && isset($param['end'])) {
  999. $user->whereBetween('created_at', [$param['start'], $param['end']]);
  1000. }
  1001. $statUser = $user->first();
  1002. $item->proxynum = $statUser->proxynum;
  1003. $item->proxyTotal = $statUser->proxyTotal;
  1004. $item->str = Area::getName($item->province) . ' ' . Area::getName($item->city) . ' ' . Area::getName($item->district);
  1005. }
  1006. }
  1007. return showJsonSucc(1001, $statAdver);
  1008. }
  1009. /**
  1010. * 担保协议上传
  1011. * @param Request $request
  1012. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  1013. * @description
  1014. * @author lyh
  1015. * @modify_author lyh
  1016. * @modify_time 2019-4-26 14:43:54
  1017. * @modify 确认已区分系统管理员与地区管理员权限
  1018. * @date 2019/4/11
  1019. */
  1020. public function procotolUpload(Request $request)
  1021. {
  1022. $validator = \Validator::make($param = $request->all(), [
  1023. 'id' => 'required|integer|exists:advertising,id',
  1024. 'file' => 'required'
  1025. ]);
  1026. if ($validator->fails()) {
  1027. return showJsonErr($validator->errors()->first());
  1028. }
  1029. $adver = Advertising::find($param['id']);
  1030. if ($adver->guarantee == 0) {
  1031. return showJsonErr('抱歉,该广告没有担保');
  1032. }
  1033. // 区分系统管理员与地区管理员数据
  1034. if (\Auth::user()->is_super == 3 && !in_array($adver->uid, getIds())) {
  1035. return showJsonErr('抱歉,您没有权限查看');
  1036. }
  1037. if ($adver->guarantee_url) {
  1038. return showJsonErr('抱歉,该广告已经上传担保协议');
  1039. }
  1040. $res = Advertising::whereId($param['id'])->update(['guarantee_url' => $param['file']]);
  1041. if (empty($res)) {
  1042. return showJsonErr('上传失败');
  1043. }
  1044. return showJsonSucc('上传成功', [
  1045. 'url' => $param['file']
  1046. ]);
  1047. }
  1048. /**
  1049. * 设置开通担保协议
  1050. * @param Request $request
  1051. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  1052. * @description
  1053. * @author lyh
  1054. * @date 2019/4/15
  1055. */
  1056. public function guarantee(Request $request)
  1057. {
  1058. $res = Config::getValue('GUARANTEE');
  1059. Config::where('key', '=', 'GUARANTEE')->update(['content' => $res == 1 ? 0 : 1]);
  1060. return showJsonSucc(1001, $res);
  1061. }
  1062. //审核中的编辑广告
  1063. public function modify(Request $request)
  1064. {
  1065. $validator = \Validator::make($param = $request->all(), [
  1066. 'id' => 'required|exists:advertising,id',
  1067. 'title' => 'required|string',
  1068. 'content' => 'required|string',
  1069. 'scene' => 'between:1,3',
  1070. 'image' => 'string',
  1071. // 'content' => '',
  1072. 'industry' => 'required|string',
  1073. 'province' => 'required|exists:area,id',
  1074. 'city' => 'required|exists:area,id',
  1075. 'district' => 'required|exists:area,id'
  1076. ]);
  1077. if ($validator->fails()) {
  1078. return showJsonErr($validator->errors()->first());
  1079. }
  1080. $adver = Advertising::find($param['id']);
  1081. if ($adver->status != 2) {
  1082. return showJsonErr('抱歉,当前广告不是待审核状态不能编辑');
  1083. }
  1084. if (!empty($param['image'])) {
  1085. $param['image_group'] = $param['image'];
  1086. $param['image'] = explode(',', $param['image_group'])[0];
  1087. }
  1088. $result = Advertising::whereId($param['id'])->update($param);
  1089. if (!$result) {
  1090. return showJsonErr('编辑广告失败');
  1091. }
  1092. return showJsonSucc('编辑广告成功');
  1093. }
  1094. /**
  1095. * 更新广告剩余量、投放时间
  1096. * @param Request $request
  1097. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  1098. * @description
  1099. */
  1100. public function modifyMore(Request $request)
  1101. {
  1102. $validator = \Validator::make($param = $request->all(), [
  1103. 'id' => 'required|exists:advertising,id',
  1104. 'residue_num' => 'integer',
  1105. 'start_time' => 'date',
  1106. 'end_time' => 'date|required_with:start_time'
  1107. ]);
  1108. if ($validator->fails()) {
  1109. return showJsonErr($validator->errors()->first());
  1110. }
  1111. $adver = Advertising::find($param['id']);
  1112. // 区分系统管理员与地区管理员数据
  1113. if (\Auth::user()->is_super == 3 && !in_array($adver->uid, getIds())) {
  1114. return showJsonErr('抱歉,您没有权限查看');
  1115. }
  1116. if (!in_array($adver->status, [3, 4])) {
  1117. return showJsonErr('抱歉,当前广告不能更新信息');
  1118. }
  1119. if (isset($param['start_time']) && $param['start_time'] > $param['end_time']) {
  1120. return showJsonErr('抱歉,投放开始时间不能大于结束时间');
  1121. }
  1122. if(!empty($param['residue_num'])){
  1123. $param['total_num']=$param['residue_num']>$adver->total_num?$param['residue_num']:$adver->total_num;
  1124. }
  1125. $result = Advertising::whereId($param['id'])->update($param);
  1126. if (!$result) {
  1127. return showJsonErr('抱歉,修改失败');
  1128. }
  1129. return showJsonSucc('修改成功', Advertising::whereId($param['id'])->select(['id', 'residue_num', 'start_time', 'end_time'])->first());
  1130. }
  1131. /**
  1132. * 获取月份数组
  1133. * @param int $perPage
  1134. * @description
  1135. * @author lyh
  1136. * @date 2019/4/8
  1137. */
  1138. private static function getMonthArray($start, $end)
  1139. {
  1140. $array = [];
  1141. for ($i = $start; $i <= $end; $i++) {
  1142. $array[] = [
  1143. 'start' => Carbon::now()->subMonth($i)->startOfMonth(),
  1144. 'end' => Carbon::now()->subMonth($i)->endOfMonth()
  1145. ];
  1146. }
  1147. return $array;
  1148. }
  1149. /**
  1150. * 获取月份数组
  1151. * @param int $perPage
  1152. * @description
  1153. * @author lyh
  1154. * @date 2019/4/8
  1155. */
  1156. private static function getYearArray($start, $end)
  1157. {
  1158. $array = [];
  1159. for ($i = $start; $i <= $end; $i++) {
  1160. $array[] = [
  1161. 'start' => Carbon::now()->subYear($i)->startOfYear(),
  1162. 'end' => Carbon::now()->subYear($i)->endOfYear()
  1163. ];
  1164. }
  1165. return $array;
  1166. }
  1167. /**
  1168. * 获取月份数组
  1169. * @param int $perPage
  1170. * @description
  1171. * @author lyh
  1172. * @date 2019/4/8
  1173. */
  1174. private static function getWeekArray($start, $end)
  1175. {
  1176. $array = [];
  1177. for ($i = $start; $i <= $end; $i++) {
  1178. $array[] = [
  1179. 'start' => Carbon::now()->subWeek($i)->startOfWeek(),
  1180. 'end' => Carbon::now()->subWeek($i)->endOfWeek()
  1181. ];
  1182. }
  1183. return $array;
  1184. }
  1185. //2021/6/21 lzj新增,某代理的广告列表
  1186. public function oneAdList(Request $request)
  1187. {
  1188. $validator = \Validator::make($param = array_filter($request->all()), [
  1189. 'id' => 'required|exists:user,id',
  1190. ]);
  1191. if ($validator->fails()) {
  1192. return showJsonErr($validator->errors()->first());
  1193. }
  1194. $fields=[
  1195. 'main.id',
  1196. 'main.uid',
  1197. 'main.title',
  1198. 'u.real_name',
  1199. 'u.nick_name',
  1200. 'u.mobile',
  1201. 'main.total_price',
  1202. 'main.company_name',
  1203. 'main.company_industry',
  1204. 'main.province',
  1205. 'main.city',
  1206. 'main.district',
  1207. 'main.price',
  1208. 'main.total_num',
  1209. 'main.residue_num',
  1210. 'main.start_time',
  1211. 'main.end_time',
  1212. 'main.created_at',
  1213. 'main.status',
  1214. 'main.redirect',
  1215. 'main.industry'
  1216. ];
  1217. $user = \DB::table('advertising as main')
  1218. ->join('user as u', 'u.id', '=', 'main.uid')
  1219. ->orderByDesc('id')
  1220. ->where('main.uid','=',$param['id'])
  1221. ->select($fields);
  1222. $res = $user->paginate(perPage());
  1223. if ($res->isNotEmpty()) {
  1224. collect($res->items())->each(function ($item, $key) {
  1225. $item->area = trim(Area::getName($item->province) . ' ' . Area::getName($item->city) . ' ' . Area::getName($item->district));
  1226. $item->companyIndustryMsg = Industry::find($item->company_industry)->content ?? '';
  1227. if ($item->industry != 'all') {
  1228. $industry = Industry::whereIn('id', explode(',', $item->industry))->get();
  1229. foreach ($industry as $ind) {
  1230. $arr[] = $ind['content'];
  1231. }
  1232. $item->industryArr = $arr;
  1233. }
  1234. });
  1235. }
  1236. return showJsonSucc(1001, $res);
  1237. }
  1238. //调整等级 2021/6/22
  1239. public function editAdver(Request $request)
  1240. {
  1241. $validator = \Validator::make($param = array_filter($request->all()), [
  1242. 'id' => 'required|exists:user,id',
  1243. 'level'=>'required|between:1,8',
  1244. ]);
  1245. if ($validator->fails()) {
  1246. return showJsonErr($validator->errors()->first());
  1247. }
  1248. if (\Auth::user()->is_super !== 1 ) {
  1249. return showJsonErr('抱歉,您没有权限调整等级');
  1250. }
  1251. $users = User::find($param['id']);
  1252. if(!$users){
  1253. return showJsonErr('用户不存在');
  1254. }
  1255. if($param['level'] == $users->level){
  1256. return showJsonErr('不能调整为用户当前的等级');
  1257. }
  1258. $users->level = $param['level'];
  1259. if(!$users->save()){
  1260. return showJsonErr('调整等级失败!');
  1261. }
  1262. return showJsonSucc('调整成功!');
  1263. }
  1264. }