MembersSetmealController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. <?php
  2. namespace App\Admin\Controllers\Company;
  3. use App\Http\Controllers\Controller;
  4. use App\Jobs\Cron\ClearExpiredSetmealJob;
  5. use App\Models\MembersChargeLog;
  6. use App\Models\MembersSetmeal;
  7. use App\Models\MembersSetmealsRecord;
  8. use App\Models\Setmeal;
  9. use App\Repositories\CompanyRepository;
  10. use App\Repositories\MemberLogRepository;
  11. use App\Services\Company\ServiceService;
  12. use Encore\Admin\Auth\Permission;
  13. use Encore\Admin\Controllers\HasResourceActions;
  14. use Encore\Admin\Facades\Admin;
  15. use Encore\Admin\Form;
  16. use Encore\Admin\Grid;
  17. use Encore\Admin\Layout\Content;
  18. use Encore\Admin\Show;
  19. use Encore\Admin\Widgets\Table;
  20. use function foo\func;
  21. use Illuminate\Support\Facades\Input;
  22. use Illuminate\Http\Request;
  23. use Illuminate\Support\MessageBag;
  24. use function Matrix\trace;
  25. class MembersSetmealController extends Controller
  26. {
  27. use HasResourceActions;
  28. public $companyRepository;
  29. public $memberLogRepository;
  30. /**
  31. * MembersSetmealController constructor.
  32. * @param $companyRepository
  33. */
  34. public function __construct(CompanyRepository $companyRepository,MemberLogRepository $memberLogRepository)
  35. {
  36. $this->companyRepository = $companyRepository;
  37. $this->memberLogRepository=$memberLogRepository;
  38. }
  39. /**
  40. * Index interface.
  41. *
  42. * @param Content $content
  43. * @return Content
  44. */
  45. public function index(Content $content)
  46. {
  47. return $content
  48. ->header('企业套餐')
  49. ->description('列表')
  50. ->body($this->grid());
  51. }
  52. /**
  53. * Show interface.
  54. *
  55. * @param mixed $id
  56. * @param Content $content
  57. * @return Content
  58. */
  59. public function show($id, Content $content)
  60. {
  61. return $content
  62. ->header('Detail')
  63. ->description('description')
  64. ->body($this->detail($id));
  65. }
  66. public function detail($id)
  67. {
  68. $show = new Show(MembersSetmeal::findOrFail($id));
  69. $show->setmeal_name('套餐名称');
  70. $show->companys()->companyname('公司名称')->as(function ($companys) {
  71. return $companys->companyname;
  72. });
  73. $show->companys()->username('用户名称')->as(function ($companys) {
  74. return $companys->username;
  75. });
  76. $show->starttime('开始时间')->as(function ($starttime) {
  77. return date('Y-m-d H:i:s', $starttime);
  78. });
  79. $show->endtime('结束时间')->as(function ($endtime) {
  80. if ($endtime!=0) {
  81. return $endtime;
  82. }
  83. return "永久";
  84. });
  85. $show->days('服务天数');
  86. $show->jobs_meanwhile('在招职位数');
  87. $show->jobfair_num('招聘会场次');
  88. $show->refresh_jobs_free('职位免费刷新数');
  89. $show->download_resume('下载简历数');
  90. $show->download_resume_max('下载简历数上限');
  91. $show->companys()->sms_num('短信数')->as(function ($companys) {
  92. return $companys->sms_num;
  93. });
  94. $show->show_apply_contact('收到简历的联系方式')->as(function ($show_apply_contact) {
  95. switch ($show_apply_contact) {
  96. case 0:
  97. return "需下载";
  98. break;
  99. case 1:
  100. return "免费查看";
  101. break;
  102. }
  103. });
  104. $show->expense('收费金额');
  105. $show->added('其他说明');
  106. return $show;
  107. }
  108. /**
  109. * Edit interface.
  110. *
  111. * @param mixed $id
  112. * @param Content $content
  113. * @return Content
  114. */
  115. public function edit($id, Content $content)
  116. {
  117. Permission::check('setmeal_manager');
  118. return $content
  119. ->header('企业套餐')
  120. ->description('修改')
  121. ->body($this->eidtForm()->edit($id));
  122. }
  123. /**
  124. * Make a grid builder.
  125. *
  126. * @return Grid
  127. */
  128. protected function grid()
  129. {
  130. Permission::check('setmeal_manager_companysetmeal_index');
  131. $grid = new Grid(new MembersSetmeal);
  132. $grid->model()->where('utype', 1)->whereHas('companys')->when(get_subsite_id()>0, function ($querys) {
  133. $querys->whereHas('companys', function ($query) {
  134. $query->where('subsite_id', get_subsite_id());
  135. });
  136. })->orderBy('id', 'desc');
  137. $grid->setmeal_name('套餐名称');
  138. $grid->column('companys.companyname', '公司名称');
  139. $grid->column('companys.username', '用户名称');
  140. $grid->starttime('开始时间')->display(function ($starttime) {
  141. return date('Y-m-d H:i:s', $starttime);
  142. });
  143. $grid->endtime('结束时间')->display(function ($endtime) {
  144. if ($endtime) {
  145. return $endtime;
  146. }
  147. return "永久";
  148. });
  149. $grid->actions(function ($actions) {
  150. if (Admin::user()->can('setmeal_manager_index_edit')) {
  151. $actions->disableEdit(false);
  152. }
  153. });
  154. $grid->filter(function ($filter) {
  155. $filter->equal('uid', '企业ID');
  156. $filter->like('companys.companyname', '企业名称');
  157. $filter->like('companys.username', '用户名称');
  158. $filter->equal('setmeal_id', '企业套餐')->select(Setmeal::get()->pluck('setmeal_name', 'id'));
  159. $filter->between('starttime', '开始时间')->datetime();
  160. $filter->between('endtime', '结束时间')->datetime();
  161. });
  162. return $grid;
  163. }
  164. public function eidtForm($setmeal_manager_index_edit=true)
  165. {
  166. //有在业务中的套餐修改用了,就不验证权限了
  167. if ($setmeal_manager_index_edit){
  168. Permission::check('setmeal_manager_index_edit');
  169. }
  170. $form = new Form(new MembersSetmeal);
  171. $form->display('id');
  172. $form->display('companys.companyname', '企业名称');
  173. $form->display('setmeal_name', '套餐名称');
  174. $form->display('setmealtime', '服务时间')->with(function () {
  175. return '起:'.date('Y-m-d H:i:s', $this->starttime).' ~ 止:'.($this->endtime ==0?"无限制":$this->endtime);
  176. });
  177. $form->datetime('endtime', '到期时间');
  178. $form->text('dayes', '服务天数')->help("默认为空表示不做修改,0为不限制,如填写3则延长3天,-3则减少3天");
  179. $form->hidden('days', "服务天数");
  180. $form->number('jobs_meanwhile', '在招职位数')->min(0);
  181. $form->number('jobfair_num', '招聘会场次')->min(0);
  182. $form->number('refresh_jobs_free', '职位免费刷新数')->min(0);
  183. $form->number('download_resume', '下载简历数')->min(0);
  184. $form->number('download_resume_max', '下载简历数上限')->min(0);
  185. $form->number('companys.sms_num', '短信数')->min(0);
  186. $form->radio('show_apply_contact', '收到简历的联系方式')->options([0=>'需下载',1=>'免费查看']);
  187. $form->switch('is_money', '是否已收费');
  188. $form->text('expense', '收费金额');
  189. $form->text('added', '其他说明');
  190. $form->hidden('uid');
  191. $form->hidden('utype');
  192. $form->hidden('companys.username');
  193. $form->hidden('setmeal_id');
  194. $form->hidden('setmeal_name');
  195. $form->hidden('is_money');
  196. $form->hidden('amount');
  197. $form->hidden('starttime');
  198. return $form;
  199. }
  200. public function store()
  201. {
  202. return $this->form()->store();
  203. }
  204. /**
  205. * @param $id
  206. * @param ServiceService $serviceService
  207. * @param CompanyRepository $companyRepository
  208. * @return \Illuminate\Http\RedirectResponse|\Symfony\Component\HttpFoundation\Response
  209. * @throws \Prettus\Validator\Exceptions\ValidatorException
  210. * 注意改动此方法会影响到企业管理-业务-套餐管理的功能
  211. */
  212. public function update($id,ServiceService $serviceService,CompanyRepository $companyRepository)
  213. {
  214. $data1 = Input::except('_token', '_method');
  215. //是否验证企业-套餐管理-修改 这个权限
  216. $setmeal_manager_index_edit=false;
  217. //在业务套餐修改中复用了此处并加上了更换套餐
  218. if (isset($data1['setmeal']) && $data1['setmeal']==1){ //只更换套餐 ,为1就是返回和修改套餐
  219. $data['setmeal_id'] = $data1['setmeal_id'];
  220. $setmeal = Setmeal::where('display', 1)->list()->pluck('setmeal_name', 'id')->toArray();
  221. $data['setmeal_name'] =$setmeal[$data['setmeal_id']];
  222. }else{
  223. $setmeal_manager_index_edit=true;
  224. Permission::check('setmeal_manager_index_edit');
  225. $data['jobs_meanwhile'] = $data1['jobs_meanwhile'];
  226. $data['jobfair_num'] = $data1['jobfair_num'];//招聘会场次
  227. $data['refresh_jobs_free'] = $data1['refresh_jobs_free'];
  228. $data['download_resume'] = $data1['download_resume'];
  229. $data['download_resume_max'] = $data1['download_resume_max'];
  230. $data['show_apply_contact'] = $data1['show_apply_contact'];
  231. $data['added'] = $data1['added'];
  232. if ($data1['endtime'] != '' && $data1['endtime'] != 0) {
  233. $data['endtime'] = strtotime($data1['endtime']);
  234. } else {
  235. $data['endtime'] = 0;
  236. }
  237. if ($data1['dayes'] <> '') {
  238. if ($data1['dayes'] <> 0) {
  239. $oldtime = strtotime($data1['endtime']);
  240. $data['days'] = abs($data1['dayes']);
  241. $data['endtime'] = strtotime(''.$data1['dayes'].' days', $oldtime==''?time():$oldtime);
  242. } else {
  243. $data['endtime'] = 0;
  244. }
  245. }
  246. if ($data1['dayes'] < 0) {
  247. $act = "-";
  248. if($data["endtime"]<=$data1["starttime"]){
  249. $error = new MessageBag([
  250. 'title' => '提示',
  251. 'message' => "到期日期不得小于等于开始日期",
  252. ]);
  253. return back()->with(compact('error'));
  254. }
  255. } else if ($data1['dayes'] > 0) {
  256. $act = "+";
  257. } else {
  258. $act = '';
  259. }
  260. $this->companyRepository->save(['sms_num'=>$data1['companys']['sms_num']], $data1['uid']);
  261. unset($data['dayes']);
  262. }
  263. $updateInfo=$this->eidtForm($setmeal_manager_index_edit)->update($id, $data);
  264. //更新完在去跑定时任务
  265. dispatch(new ClearExpiredSetmealJob()); //清理过期的会员套餐
  266. if (isset($data1['setmeal']) && $data1['setmeal']==1){
  267. $membersSetmeal=MembersSetmeal::find($id);
  268. $user = $companyRepository->getCompanyInfo(['id'=>$membersSetmeal->uid]);
  269. //直接调用公共的就OK了
  270. $serviceService->setMembersSetmeal($user,$data1['setmeal_id']);
  271. $amount = 0;
  272. if ($data1['is_money']) {
  273. $amount = $data1['amount'];
  274. }
  275. $logData['log_uid'] = $id;
  276. $logData['log_utype'] = 1;
  277. $logData['log_username'] = $user->username;
  278. $logData['log_value'] = "操作人:".Admin::user()->username.",说明:修改会员:{$user->username}套餐,(+收费".$amount."元)";
  279. $logData['log_amount'] = $amount;
  280. $logData['log_ismoney'] = $data1['is_money'];
  281. $logData['log_type'] = 2;
  282. $logData['log_mode'] = 1;
  283. if (!MembersChargeLog::create($logData)) {
  284. throw new \Exception('企业增加记录失败');
  285. }
  286. }
  287. if (isset($data1['setmeal']))
  288. {
  289. return back();
  290. }
  291. return $updateInfo;
  292. }
  293. public function SetmealRecord(Request $request,$Api=false)
  294. {
  295. $id = $request->id;
  296. $headers = ['setmeal_name'=>"套餐名称", 'starttime'=>'开始时间', 'endtime'=>'到期时间'];
  297. $data = [];
  298. $data=MembersSetmealsRecord::where(['uid'=>$id])->select('setmeal_name','starttime','endtime')->orderBy('id', 'desc')->get()->toArray();
  299. for ($i=0;$i<count($data);$i++){
  300. if ($i==count($data)-1){
  301. break;
  302. }
  303. $data[$i+1]['endtime']=$data[$i]['starttime']; //第一个的开始时间就是第二个的结束时间
  304. }
  305. if ($Api){
  306. return $data;
  307. }
  308. $table = new Table($headers, $data);
  309. return ['html'=>$table->render(),'detail'=>'套餐购买记录'];
  310. }
  311. }