CardController.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <?php
  2. /**
  3. * 会员卡相关
  4. * @author x.b
  5. */
  6. declare(strict_types=1);
  7. namespace Modules\Manage\Controllers;
  8. use App\Model\VipCardModel as Model;
  9. use Hyperf\Validation\Contract\ValidatorFactoryInterface;
  10. use Psr\SimpleCache\CacheInterface;
  11. class CardController extends BaseController
  12. {
  13. /**
  14. * 列表
  15. * @param ValidatorFactoryInterface $validatorFactory
  16. * @return mixed
  17. * @example param_json_data string: {"handshake":"","data":{"page":1,"page_size":99,"search":{"status":"","title":""},"order":"id","order_sort":"asc"}}
  18. */
  19. public function list(ValidatorFactoryInterface $validatorFactory)
  20. {
  21. $inputData = $this->getJsonData();
  22. $page = isset($inputData['page']) ? (int)$inputData['page'] : 1;
  23. $page_size = isset($inputData['page_size']) ? (int)$inputData['page_size'] : 99;
  24. $select = ['*'];
  25. $model = Model::query();
  26. $order_key = isset($inputData['order']) ? $inputData['order'] : 'id';
  27. $order_value = isset($inputData['order_sort']) ? $inputData['order_sort'] : 'asc';
  28. if (!$order_key) {
  29. $order_key='id'; //不要信任前端,他可能会传个空字符串过来!
  30. }
  31. if (!$order_value) {
  32. $order_value = 'desc';
  33. }
  34. $search = isset($inputData['search']) ? $inputData['search'] : array();
  35. if ($search) {
  36. foreach ($search as $k => $v) {
  37. if (!strlen((string)$v)) {
  38. continue;
  39. }
  40. switch ($k) {
  41. case "title":
  42. $model->where($k, 'like', "{$v}%");
  43. break;
  44. default:
  45. $model->where($k, $v);
  46. }
  47. }
  48. }
  49. $result = $model->select($select)
  50. ->orderBy((string)$order_key, (string)$order_value)
  51. ->paginate($page_size, ['*'], 'page', $page);
  52. return json_success($result);
  53. }
  54. /**
  55. * 会员卡详细
  56. * @param yes id int $id 会员卡 如 1
  57. * @return mixed
  58. * @example param_json_data string: {"handshake":"","data":{"id":1}}
  59. */
  60. public function detail(ValidatorFactoryInterface $validatorFactory)
  61. {
  62. $inputData = $this->getJsonData();
  63. $rules = [
  64. 'id' => 'required|numeric',
  65. ];
  66. $validator = $validatorFactory->make($inputData, $rules);
  67. if ($validator->fails()) {
  68. return json_fail($validator->errors()->first());
  69. }
  70. $id = $inputData['id'];
  71. $select = ['*'];
  72. $model = Model::query();
  73. $result = $model->select($select)
  74. ->where('id', $id)
  75. ->first();
  76. if (!$result) {
  77. return json_fail('会员卡不存在');
  78. }
  79. return json_success($result);
  80. }
  81. /**
  82. * 新增会员卡
  83. * @param yes id int $id 会员卡 如 100
  84. * @return mixed
  85. * @example param_json_data string: {"handshake":"","data":{"title":"测试会员卡","remark":"会员卡备注","day":1,"price":10,"true_price":5,"sort":0,"status":0,"color":"#ff00ff"}}
  86. */
  87. public function add(ValidatorFactoryInterface $validatorFactory)
  88. {
  89. $inputData = $this->getJsonData();
  90. $rules = [
  91. 'title' => 'required|max:60',
  92. 'day' => 'required|numeric',
  93. ];
  94. $validator = $validatorFactory->make($inputData, $rules);
  95. if ($validator->fails()) {
  96. return json_fail($validator->errors()->first());
  97. }
  98. $title = isset($inputData['title']) ? $inputData['title'] : '';
  99. $day = isset($inputData['day']) ? $inputData['day'] : 0;
  100. if ($day<0) {
  101. return json_fail('天数不能小于0');
  102. }
  103. $check = Model::query()
  104. ->where('title', $title)
  105. ->first();
  106. if ($check) {
  107. return json_fail('此会员卡标题已存在,请更换一个标题');
  108. }
  109. $data = array(
  110. 'title' => $title,
  111. 'remark' => isset($inputData['remark']) ? $inputData['remark'] : '',
  112. 'day' => $day,
  113. 'price' => isset($inputData['price']) ? $inputData['price'] : 0,
  114. 'true_price' => isset($inputData['true_price']) ? $inputData['true_price'] : 0,
  115. 'sort' => isset($inputData['sort']) ? $inputData['sort'] : 0,
  116. 'status' => isset($inputData['status']) ? $inputData['status'] : 0,
  117. 'color' => isset($inputData['color']) ? $inputData['color'] : '',
  118. 'jdata' => isset($inputData['jdata']) ? $inputData['jdata'] : '',
  119. 'mark' => isset($inputData['mark']) ? $inputData['mark'] : '',
  120. 'is_super' => isset($inputData['is_super']) ? intval($inputData['is_super']) : 0,
  121. 'send_type' => isset($inputData['send_type']) ? intval($inputData['send_type']) : 0,
  122. 'send_num' => isset($inputData['send_num']) ? intval($inputData['send_num']) : 0,
  123. 'send_remark' => isset($inputData['send_remark']) ? $inputData['send_remark'] : '',
  124. 'coins' => $inputData['coins'] ?? 0,
  125. 'coin_remark' => $inputData['coin_remark'] ?? '',
  126. 'intro' => $inputData['intro'] ?? '',
  127. );
  128. $data = action_data($data);
  129. $result = Model::query()->create($data);
  130. if (!$result) {
  131. return json_fail('创建失败');
  132. }
  133. $this->clearCache();
  134. // 创建管理员日志
  135. $logSubject = '添加一个会员卡,名称:'. $data['title'];
  136. $logSvalue = $result->id;
  137. $logDbData = [
  138. 'after_items' => [
  139. $result->toArray(),
  140. ],
  141. 'before_items' => [],
  142. ];
  143. $this->log($logSubject, $logSvalue, $logDbData);
  144. return json_success($result, '创建成功');
  145. }
  146. /**
  147. * 编辑会员卡
  148. * @param yes id int $id 会员卡 如 100
  149. * @return mixed
  150. * @example param_json_data string: {"handshake":"","data":{"id":4,"title":"测试会员卡","remark":"会员卡备注","day":2,"price":10,"true_price":5,"sort":0,"status":0,"color":"#ffffff"}}
  151. */
  152. public function update(ValidatorFactoryInterface $validatorFactory)
  153. {
  154. $inputData = $this->getJsonData();
  155. $rules = [
  156. 'id' => 'required|numeric',
  157. 'title' => 'required|max:60',
  158. 'day' => 'required|numeric',
  159. ];
  160. $validator = $validatorFactory->make($inputData, $rules);
  161. if ($validator->fails()) {
  162. return json_fail($validator->errors()->first());
  163. }
  164. $id = isset($inputData['id']) ? $inputData['id'] : '';
  165. $title = isset($inputData['title']) ? $inputData['title'] : '';
  166. $day = isset($inputData['day']) ? $inputData['day'] : 0;
  167. if ($day<0) {
  168. return json_fail('天数不能小于0');
  169. }
  170. $card_info = Model::query()
  171. ->where('id', $id)
  172. ->first();
  173. if (!$card_info) {
  174. return json_fail('会员卡不存在');
  175. }
  176. $check = Model::query()
  177. ->where('title', $title)
  178. ->first();
  179. if ($check) {
  180. if ($check->id != $id) {
  181. return json_fail('此会员卡标题已存在,请更换一个标题');
  182. }
  183. }
  184. $data = action_data($inputData);
  185. $data['coin_remark'] = $data['coin_remark'] ?? '';
  186. $data['send_remark'] = $data['send_remark'] ?? '';
  187. $data['mark'] = $data['mark'] ?? '';
  188. $data['remark'] = $data['remark'] ?? '';
  189. $result = Model::query()
  190. ->where('id', $id)
  191. ->update($data);
  192. if (!$result) {
  193. return json_fail('操作失败');
  194. }
  195. $this->clearCache();
  196. // 创建管理员日志
  197. $oldItem = clone $card_info;
  198. $newItem = Model::query()->where('id', $id)->first();
  199. $logSubject = '修改会员卡,会员卡id为'.$id;
  200. $logSvalue = $id;
  201. $logDbData = [
  202. 'after_items' => [
  203. $newItem->toArray(),
  204. ],
  205. 'before_items' => [
  206. $oldItem->toArray(),
  207. ],
  208. ];
  209. $this->log($logSubject, $logSvalue, $logDbData);
  210. return json_success($result, '操作成功');
  211. }
  212. public function clearCache()
  213. {
  214. return make(CacheInterface::class)->delete('vip_list');
  215. }
  216. }