Honor.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. declare (strict_types = 1);
  3. // +----------------------------------------------------------------------
  4. // | [ WE CAN DO IT MORE SIMPLE ]
  5. // +----------------------------------------------------------------------
  6. // | Copyright (c) 2018-2020 rights reserved.
  7. // +----------------------------------------------------------------------
  8. // | [ 用户荣誉管理 ]
  9. // +----------------------------------------------------------------------
  10. // | Date: 2026-05-22
  11. // +----------------------------------------------------------------------
  12. namespace app\system\controller;
  13. use app\BaseController;
  14. use app\model\api\UserHonor as HonorModel;
  15. use app\model\api\User as UserModel;
  16. use app\Request;
  17. use library\services\UtilService;
  18. class Honor extends BaseController
  19. {
  20. /**
  21. * 荣誉列表
  22. * @param Request $request
  23. * @return mixed
  24. */
  25. public function list(Request $request)
  26. {
  27. $post = UtilService::getMore([
  28. ['page', 1],
  29. ['pageSize', 50],
  30. ['name', ''],
  31. ['status', ''],
  32. ], $request);
  33. $data = (new HonorModel)->getList($post);
  34. return app('json')->success([
  35. 'list' => $data["list"],
  36. 'pageCount' => $data["totalCount"],
  37. 'pageSize' => $data["pageSize"],
  38. 'page' => $data["page"],
  39. ]);
  40. }
  41. /**
  42. * 荣誉添加/编辑
  43. * @param Request $request
  44. * @return mixed
  45. */
  46. public function save(Request $request)
  47. {
  48. $post = UtilService::getMore([
  49. ['id', '0'],
  50. ['name', '', 'empty', '请输入荣誉名称'],
  51. ['icon', '', 'empty', '请上传荣誉图标'],
  52. ['description', ''],
  53. ['sort', '0'],
  54. ['status', '1'],
  55. ], $request);
  56. $id = $post["id"];
  57. unset($post["id"]);
  58. $post["update_time"] = time();
  59. $r = 0;
  60. if (empty($id) || $id == "0") {
  61. $post["create_time"] = time();
  62. $r = (new HonorModel)->insert($post);
  63. } else {
  64. $r = (new HonorModel)->where("id", $id)->update($post);
  65. }
  66. if ($r) {
  67. return app('json')->success("数据保存成功");
  68. } else {
  69. return app('json')->fail("数据保存失败");
  70. }
  71. }
  72. /**
  73. * 荣誉删除
  74. * @param Request $request
  75. * @return mixed
  76. */
  77. public function del(Request $request)
  78. {
  79. [$id] = UtilService::getMore([
  80. ['id', 0, 'empty', '参数错误']
  81. ], $request, true);
  82. (new HonorModel)->where("id", $id)->delete();
  83. return app('json')->success("荣誉删除成功");
  84. }
  85. /**
  86. * 获取所有启用的荣誉列表(用于下拉选择)
  87. * @return mixed
  88. */
  89. public function allEnabled()
  90. {
  91. $data = (new HonorModel)->getAllEnabled();
  92. return app('json')->success($data);
  93. }
  94. /**
  95. * 修改用户荣誉标签
  96. * @param Request $request
  97. * @return mixed
  98. */
  99. public function userHonorSave(Request $request)
  100. {
  101. $post = UtilService::getMore([
  102. ['uid', '', 'empty', '请输入用户UID'],
  103. ['honor', ''],
  104. ], $request, true);
  105. $uid = (int)$post["uid"];
  106. if (empty($uid)) {
  107. return app('json')->fail("用户UID不能为空");
  108. }
  109. // 检查用户是否存在
  110. $userData = (new UserModel)->where("uid", $uid)->find();
  111. if (empty($userData)) {
  112. return app('json')->fail("用户不存在,请输入正确的用户UID");
  113. }
  114. // 处理荣誉ID字符串
  115. $honor = $post["honor"];
  116. if ($honor !== '') {
  117. // 清理格式:去除空格,过滤非数字和逗号字符
  118. $honor = trim($honor);
  119. $honorAr = $honor ? explode(',', $honor) : [];
  120. $validIds = [];
  121. foreach ($honorAr as $hid) {
  122. $hid = trim($hid);
  123. if (is_numeric($hid) && (int)$hid > 0) {
  124. $validIds[] = (int)$hid;
  125. }
  126. }
  127. // 去重并排序
  128. $validIds = array_unique($validIds);
  129. sort($validIds);
  130. $honor = implode(',', $validIds);
  131. // 验证明细Id是否存在
  132. if (!empty($validIds)) {
  133. $existCount = (new HonorModel)->where("id", "in", $validIds)->where("status", 1)->count();
  134. if ($existCount != count($validIds)) {
  135. return app('json')->fail("部分荣誉ID不存在或已禁用,请检查");
  136. }
  137. }
  138. }
  139. $r = (new UserModel)->where("uid", $uid)->update([
  140. "honor" => $honor
  141. ]);
  142. if ($r !== false) {
  143. return app('json')->success("用户荣誉标签修改成功");
  144. } else {
  145. return app('json')->fail("用户荣誉标签修改失败");
  146. }
  147. }
  148. /**
  149. * 获取用户荣誉详情
  150. * @param Request $request
  151. * @return mixed
  152. */
  153. public function getUserHonor(Request $request)
  154. {
  155. $post = UtilService::getMore([
  156. ['uid', '', 'empty', '请输入用户UID'],
  157. ], $request, true);
  158. $uid = (int)$post["uid"];
  159. if (empty($uid)) {
  160. return app('json')->fail("用户UID不能为空");
  161. }
  162. $userData = (new UserModel)->where("uid", $uid)->find();
  163. if (empty($userData)) {
  164. return app('json')->fail("用户不存在");
  165. }
  166. $honorIds = $userData["honor"] ? explode(',', $userData["honor"]) : [];
  167. $honorList = [];
  168. if (!empty($honorIds)) {
  169. $honorList = (new HonorModel)
  170. ->field("id,name,icon,description")
  171. ->where("id", "in", $honorIds)
  172. ->where("status", 1)
  173. ->order("sort", "desc")
  174. ->select();
  175. if (!empty($honorList)) {
  176. $honorList = $honorList->toArray();
  177. } else {
  178. $honorList = [];
  179. }
  180. }
  181. return app('json')->success([
  182. 'uid' => $uid,
  183. 'honor' => $userData["honor"],
  184. 'honor_list' => $honorList,
  185. ]);
  186. }
  187. }