MembersSetmealController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  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. })->when(Admin::user()->isRole('health'), function ($querys) {
  137. $querys->whereHas('companys', function ($query) {
  138. $query->where('is_health',1);
  139. });
  140. })->when(Admin::user()->isRole('ic_group'), function ($querys) {
  141. $querys->whereHas('companys', function ($query) {
  142. $query->where('is_ic',1);
  143. });
  144. })->orderBy('id', 'desc');
  145. $grid->setmeal_name('套餐名称');
  146. $grid->column('companys.companyname', '公司名称');
  147. $grid->column('companys.username', '用户名称');
  148. $grid->starttime('开始时间')->display(function ($starttime) {
  149. return date('Y-m-d H:i:s', $starttime);
  150. });
  151. $grid->endtime('结束时间')->display(function ($endtime) {
  152. if ($endtime) {
  153. return $endtime;
  154. }
  155. return "永久";
  156. });
  157. $grid->actions(function ($actions) {
  158. if (Admin::user()->can('setmeal_manager_index_edit')) {
  159. $actions->disableEdit(false);
  160. }
  161. });
  162. $grid->filter(function ($filter) {
  163. $filter->equal('uid', '企业ID');
  164. $filter->like('companys.companyname', '企业名称');
  165. $filter->like('companys.username', '用户名称');
  166. $filter->equal('setmeal_id', '企业套餐')->select(Setmeal::get()->pluck('setmeal_name', 'id'));
  167. $filter->between('starttime', '开始时间')->datetime();
  168. $filter->between('endtime', '结束时间')->datetime();
  169. });
  170. return $grid;
  171. }
  172. public function eidtForm($setmeal_manager_index_edit=true)
  173. {
  174. //有在业务中的套餐修改用了,就不验证权限了
  175. if ($setmeal_manager_index_edit){
  176. Permission::check('setmeal_manager_index_edit');
  177. }
  178. $form = new Form(new MembersSetmeal);
  179. $form->display('id');
  180. $form->display('companys.companyname', '企业名称');
  181. $form->display('setmeal_name', '套餐名称');
  182. $form->display('setmealtime', '服务时间')->with(function () {
  183. return '起:'.date('Y-m-d H:i:s', $this->starttime).' ~ 止:'.($this->endtime ==0?"无限制":$this->endtime);
  184. });
  185. $form->datetime('endtime', '到期时间');
  186. $form->text('dayes', '服务天数')->help("默认为空表示不做修改,0为不限制,如填写3则延长3天,-3则减少3天");
  187. $form->hidden('days', "服务天数");
  188. $form->number('jobs_meanwhile', '在招职位数')->min(0);
  189. $form->number('jobfair_num', '招聘会场次')->min(0);
  190. $form->number('refresh_jobs_free', '职位免费刷新数')->min(0);
  191. $form->number('download_resume', '下载简历数')->min(0);
  192. $form->number('download_resume_max', '下载简历数上限')->min(0);
  193. $form->number('companys.sms_num', '短信数')->min(0);
  194. $form->radio('show_apply_contact', '收到简历的联系方式')->options([0=>'需下载',1=>'免费查看']);
  195. $form->switch('is_money', '是否已收费');
  196. $form->text('expense', '收费金额');
  197. $form->text('added', '其他说明');
  198. $form->hidden('uid');
  199. $form->hidden('utype');
  200. $form->hidden('companys.username');
  201. $form->hidden('setmeal_id');
  202. $form->hidden('setmeal_name');
  203. $form->hidden('is_money');
  204. $form->hidden('amount');
  205. $form->hidden('starttime');
  206. return $form;
  207. }
  208. public function store()
  209. {
  210. return $this->form()->store();
  211. }
  212. /**
  213. * @param $id
  214. * @param ServiceService $serviceService
  215. * @param CompanyRepository $companyRepository
  216. * @return \Illuminate\Http\RedirectResponse|\Symfony\Component\HttpFoundation\Response
  217. * @throws \Prettus\Validator\Exceptions\ValidatorException
  218. * 注意改动此方法会影响到企业管理-业务-套餐管理的功能
  219. */
  220. public function update($id,ServiceService $serviceService,CompanyRepository $companyRepository)
  221. {
  222. $data1 = Input::except('_token', '_method');
  223. //是否验证企业-套餐管理-修改 这个权限
  224. $setmeal_manager_index_edit=false;
  225. //在业务套餐修改中复用了此处并加上了更换套餐
  226. if (isset($data1['setmeal']) && $data1['setmeal']==1){ //只更换套餐 ,为1就是返回和修改套餐
  227. $data['setmeal_id'] = $data1['setmeal_id'];
  228. $setmeal = Setmeal::where('display', 1)->list()->pluck('setmeal_name', 'id')->toArray();
  229. $data['setmeal_name'] =$setmeal[$data['setmeal_id']];
  230. }else{
  231. $setmeal_manager_index_edit=true;
  232. Permission::check('setmeal_manager_index_edit');
  233. $data['jobs_meanwhile'] = $data1['jobs_meanwhile'];
  234. $data['jobfair_num'] = $data1['jobfair_num'];//招聘会场次
  235. $data['refresh_jobs_free'] = $data1['refresh_jobs_free'];
  236. $data['download_resume'] = $data1['download_resume'];
  237. $data['download_resume_max'] = $data1['download_resume_max'];
  238. $data['show_apply_contact'] = $data1['show_apply_contact'];
  239. $data['added'] = $data1['added'];
  240. if ($data1['endtime'] != '' && $data1['endtime'] != 0) {
  241. $data['endtime'] = strtotime($data1['endtime']);
  242. } else {
  243. $data['endtime'] = 0;
  244. }
  245. if ($data1['dayes'] <> '') {
  246. if ($data1['dayes'] <> 0) {
  247. $oldtime = strtotime($data1['endtime']);
  248. $data['days'] = abs($data1['dayes']);
  249. $data['endtime'] = strtotime(''.$data1['dayes'].' days', $oldtime==''?time():$oldtime);
  250. } else {
  251. $data['endtime'] = 0;
  252. }
  253. }
  254. if ($data1['dayes'] < 0) {
  255. $act = "-";
  256. if($data["endtime"]<=$data1["starttime"]){
  257. $error = new MessageBag([
  258. 'title' => '提示',
  259. 'message' => "到期日期不得小于等于开始日期",
  260. ]);
  261. return back()->with(compact('error'));
  262. }
  263. } else if ($data1['dayes'] > 0) {
  264. $act = "+";
  265. } else {
  266. $act = '';
  267. }
  268. $this->companyRepository->save(['sms_num'=>$data1['companys']['sms_num']], $data1['uid']);
  269. unset($data['dayes']);
  270. }
  271. $updateInfo=$this->eidtForm($setmeal_manager_index_edit)->update($id, $data);
  272. //更新完在去跑定时任务
  273. dispatch(new ClearExpiredSetmealJob()); //清理过期的会员套餐
  274. if (isset($data1['setmeal']) && $data1['setmeal']==1){
  275. $membersSetmeal=MembersSetmeal::find($id);
  276. $user = $companyRepository->getCompanyInfo(['id'=>$membersSetmeal->uid]);
  277. //直接调用公共的就OK了
  278. $serviceService->setMembersSetmeal($user,$data1['setmeal_id']);
  279. $amount = 0;
  280. if ($data1['is_money']) {
  281. $amount = $data1['amount'];
  282. }
  283. $logData['log_uid'] = $id;
  284. $logData['log_utype'] = 1;
  285. $logData['log_username'] = $user->username;
  286. $logData['log_value'] = "操作人:".Admin::user()->username.",说明:修改会员:{$user->username}套餐,(+收费".$amount."元)";
  287. $logData['log_amount'] = $amount;
  288. $logData['log_ismoney'] = $data1['is_money'];
  289. $logData['log_type'] = 2;
  290. $logData['log_mode'] = 1;
  291. if (!MembersChargeLog::create($logData)) {
  292. throw new \Exception('企业增加记录失败');
  293. }
  294. }
  295. if (isset($data1['setmeal']))
  296. {
  297. return back();
  298. }
  299. return $updateInfo;
  300. }
  301. public function SetmealRecord(Request $request,$Api=false)
  302. {
  303. $id = $request->id;
  304. $headers = ['setmeal_name'=>"套餐名称", 'starttime'=>'开始时间', 'endtime'=>'到期时间'];
  305. $data = [];
  306. $data=MembersSetmealsRecord::where(['uid'=>$id])->select('setmeal_name','starttime','endtime')->orderBy('id', 'desc')->get()->toArray();
  307. for ($i=0;$i<count($data);$i++){
  308. if ($i==count($data)-1){
  309. break;
  310. }
  311. $data[$i+1]['endtime']=$data[$i]['starttime']; //第一个的开始时间就是第二个的结束时间
  312. }
  313. if ($Api){
  314. return $data;
  315. }
  316. $table = new Table($headers, $data);
  317. return ['html'=>$table->render(),'detail'=>'套餐购买记录'];
  318. }
  319. }