Honor.php 6.3 KB

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