ScoreClockinActive.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Facades\Servers\WechatMini\Mini;
  4. use App\Http\Requests\Admin\ScoreClockinActive as Request;
  5. use App\Models\City;
  6. use App\Models\Score\ClockinActive as Model;
  7. use App\Models\Score\Clockin as Clockin;
  8. use App\Facades\Servers\WechatWork\CorpTag as WorkTag;
  9. use Illuminate\Support\Facades\DB;
  10. /**
  11. * 打卡活动
  12. *
  13. * @author jun
  14. *
  15. */
  16. class ScoreClockinActive extends Auth
  17. {
  18. protected function _initialize()
  19. {
  20. parent::_initialize();
  21. $this->assign('breadcrumb1', '任务打卡');
  22. $this->assign('breadcrumb2', '打卡任务');
  23. }
  24. /**
  25. * 列表页
  26. *
  27. * */
  28. public function index(Model $Model, City $City) {
  29. // 接收参数
  30. $name = request('name', '');
  31. // 查询条件
  32. $map = [];
  33. // 组合条件
  34. if ($name) $map[] = ['name', '=', $name];
  35. // 查询数据
  36. $list = $Model->query()->where($map)->orderByDesc('id')->paginate(config('page_num', 10));
  37. // 循环处理数据
  38. foreach ($list as $key => $value) {
  39. // 小程序链接
  40. $value['mp_urllink'] = $this->getUrlLink($value['id']);
  41. if ($value['city_ids']) {
  42. // 解析数组
  43. $cityids = explode(',', $value['city_ids']);
  44. // 获取城市
  45. foreach ($cityids as $kk => $vv) {
  46. // 获取值
  47. $vv = $City->getOne($vv, 'name');
  48. // 获取城市名
  49. $cityids[$kk] = $vv;
  50. }
  51. // 城市列表
  52. $value['city_ids'] = implode('、', $cityids);
  53. }
  54. // 重组
  55. $list[$key] = $value;
  56. }
  57. // 分配数据
  58. $this->assign('empty', '<tr><td colspan="20">~~暂无数据</td></tr>');
  59. $this->assign('list', $list);
  60. // 加载模板
  61. return $this->fetch();
  62. }
  63. /**
  64. * 获取小程序链接
  65. *
  66. */
  67. private function getUrlLink($id){
  68. // 结果数据
  69. $link = cache('admin:clockin:active:urllink:' . $id);
  70. // 不存在数据
  71. if (is_null($link)) {
  72. // 从数据库获取数据
  73. $link = Mini::getUrlLink('pages/clockin/active', '?id=' . $id);
  74. // 存起来
  75. cache(['admin:clockin:active:urllink:' . $id => $link], $link ? now()->addDays(28) : now()->addMinutes(3));
  76. }
  77. // 返回结果
  78. return $link;
  79. }
  80. /**
  81. * 添加
  82. *
  83. * */
  84. public function add(Request $request, Model $Model, City $City){
  85. if (request()->isMethod('post')) {
  86. // 验证参数
  87. $request->scene('add')->validate();
  88. // 接收数据
  89. $data['banner_img'] = request('banner_img', '');
  90. $data['name'] = request('name', '');
  91. $data['active_rule'] = request('active_rule', '');
  92. $data['start_time'] = request('start_time', '');
  93. $data['end_time'] = request('end_time', '');
  94. $data['start_time'] = $data['start_time'] ? strtotime($data['start_time']) : 0;
  95. $data['end_time'] = $data['end_time'] ? strtotime($data['end_time']) : 0;
  96. $cityIds = request('city_ids', []);
  97. $tagScope = request('tag_scope', []);
  98. $data['city_ids'] = implode(',', $cityIds);
  99. $data['tag_scope'] = implode(',', $tagScope);
  100. $data['status'] = 1;
  101. // 写入数据表
  102. $id = $Model->add($data);
  103. // 如果操作失败
  104. if (!$id) return json_send(['code' => 'error', 'msg' => '新增失败']);
  105. // 记录行为
  106. $this->addAdminHistory(admin('uid'), $Model->getTable(), $id, 1, [], $data);
  107. // 告知结果
  108. return json_send(['code' => 'success', 'msg' => '新增成功', 'action' => 'add']);
  109. }
  110. // 获取列表
  111. $cityList = $City->getCityList();
  112. // 标签列表
  113. $tagList = WorkTag::getList();
  114. // 分配数据
  115. $this->assign('cityList', $cityList);
  116. $this->assign('tagList', $tagList);
  117. $this->assign('crumbs', '新增');
  118. // 加载模板
  119. return $this->fetch();
  120. }
  121. /**
  122. * 修改
  123. *
  124. * */
  125. public function edit(Request $request, Model $Model, City $City)
  126. {
  127. // 接收参数
  128. $id = request('id', 0);
  129. // 查询用户
  130. $oldData = $Model->where(['id' => $id])->first();
  131. // 修改
  132. if (request()->isMethod('post')) {
  133. // 验证参数
  134. $request->scene('edit')->validate();
  135. // 接收数据
  136. $data['banner_img'] = request('banner_img', '');
  137. $data['name'] = request('name', '');
  138. $data['active_rule'] = request('active_rule', '');
  139. $data['start_time'] = request('start_time', '');
  140. $data['end_time'] = request('end_time', '');
  141. $data['start_time'] = $data['start_time'] ? strtotime($data['start_time']) : 0;
  142. $data['end_time'] = $data['end_time'] ? strtotime($data['end_time']) : 0;
  143. $cityIds = request('city_ids', []);
  144. $tagScope = request('tag_scope', []);
  145. $data['city_ids'] = implode(',', $cityIds);
  146. $data['tag_scope'] = implode(',', $tagScope);
  147. // 写入数据表
  148. $result = $Model->edit($id, $data);
  149. // 如果操作失败
  150. if (!$result) return json_send(['code' => 'error', 'msg' => '修改失败']);
  151. // 记录行为
  152. $this->addAdminHistory(admin('uid'), $Model->getTable(), $id, 2, $oldData, $data);
  153. // 告知结果
  154. return json_send(['code' => 'success', 'msg' => '修改成功', 'action' => 'edit']);
  155. }
  156. // 错误告知
  157. if (!$oldData) return $this->error('查无数据');
  158. // 获取城市ID
  159. $oldData['city_ids'] = explode(',', $oldData['city_ids']);
  160. $oldData['tag_scope'] = explode(',', $oldData['tag_scope']);
  161. // 获取列表
  162. $cityList = $City->getCityList();
  163. // 标签列表
  164. $tagList = WorkTag::getList();
  165. // 分配数据
  166. $this->assign('cityList', $cityList);
  167. $this->assign('tagList', $tagList);
  168. $this->assign('oldData', $oldData);
  169. $this->assign('crumbs', '修改');
  170. // 加载模板
  171. return $this->fetch();
  172. }
  173. /**
  174. * 修改状态
  175. *
  176. * */
  177. public function set_status(Request $request, Model $Model)
  178. {
  179. // 验证参数
  180. $request->scene('set_status')->validate();
  181. // 设置状态
  182. $id = request('id', 0);
  183. $status = request('status', 0);
  184. // 查询用户
  185. $oldData = $Model->where(['id' => $id])->first();
  186. // 如果用户不存在
  187. if (!$oldData) return json_send(['code' => 'error', 'msg' => '数据不存在']);
  188. // 执行修改
  189. $result = $Model->edit($id, ['status' => $status]);
  190. // 提示新增失败
  191. if (!$result) return json_send(['code' => 'error', 'msg' => '设置失败']);
  192. // 记录行为
  193. $this->addAdminHistory(admin('uid'), $Model->getTable(), $id, 2, $oldData, ['status' => $status]);
  194. // 告知结果
  195. return json_send(['code' => 'success', 'msg' => '设置成功', 'path' => '']);
  196. }
  197. /**
  198. * 复制
  199. *
  200. * */
  201. public function copy(Request $request, Model $Model, Clockin $Clockin)
  202. {
  203. // 验证参数
  204. $request->scene('copy')->validate();
  205. // 设置状态
  206. $id = request('id', 0);
  207. $time = time();
  208. // 查询
  209. $data = $Model->where(['id' => $id])->first()->toArray();
  210. if (!$data) json_send(['code' => 'error', 'msg' => '复制失败,活动不存在']);
  211. $clockinList = $Clockin->getActiveList($id);
  212. DB::beginTransaction();
  213. try {
  214. unset($data['id']);
  215. $data['status'] = 1;
  216. $data['name'] = $data['name'] . '复制';
  217. //复制活动
  218. $newId = $Model->add($data);
  219. if (!$newId) {
  220. DB::rollBack();
  221. return json_send(['code' => 'error', 'msg' => '复制失败']);
  222. }
  223. if ($clockinList) {
  224. foreach ($clockinList as &$clockin) {
  225. $clockin['active_id'] = $newId;
  226. $clockin['insert_time'] = $time;
  227. $clockin['update_time'] = $time;
  228. unset($clockin['id']);
  229. }
  230. $re = $Clockin->Query()->insert($clockinList);
  231. if (!$re) return json_send(['code' => 'error', 'msg' => '复制失败']);
  232. }
  233. DB::commit();
  234. } catch (\Exception $e) {
  235. // 回退数据
  236. DB::rollBack();
  237. // 失败提示
  238. return json_send(['code' => 'error', 'msg' => '复制失败', 'data' => ['error' => $e->getMessage() . $e->getLine()]]);
  239. }
  240. return json_send(['code' => 'success', 'msg' => '复制成功', 'path' => '']);
  241. }
  242. }