GroupActivityLogic.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | likeadmin快速开发前后端分离管理后台(PHP版)
  4. // +----------------------------------------------------------------------
  5. // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
  6. // | 开源版本可自由商用,可去除界面版权logo
  7. // | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
  8. // | github下载:https://github.com/likeshop-github/likeadmin
  9. // | 访问官网:https://www.likeadmin.cn
  10. // | likeadmin团队 版权所有 拥有最终解释权
  11. // +----------------------------------------------------------------------
  12. // | author: likeadminTeam
  13. // +----------------------------------------------------------------------
  14. namespace app\adminapi\logic\group_activity;
  15. use think\facade\Db;
  16. use app\common\logic\BaseLogic;
  17. use app\common\model\group_activity\GroupActivity;
  18. use Endroid\QrCode\QrCode;
  19. use Endroid\QrCode\Logo\Logo;
  20. use Endroid\QrCode\Color\Color;
  21. use Endroid\QrCode\Writer\PngWriter;
  22. use Endroid\QrCode\Encoding\Encoding;
  23. use Endroid\QrCode\Label\Font\NotoSans;
  24. use Endroid\QrCode\Label\LabelAlignment;
  25. use Endroid\QrCode\ErrorCorrectionLevel;
  26. /**
  27. * 拼团活动逻辑
  28. * Class GroupActivityLogic
  29. * @package app\adminapi\logic\group_activity
  30. */
  31. class GroupActivityLogic extends BaseLogic
  32. {
  33. /**
  34. * @notes 添加拼团活动
  35. * @param array $params
  36. * @return bool
  37. * @author likeadmin
  38. * @date 2025/03/13 10:31
  39. */
  40. public static function add(array $params): bool
  41. {
  42. Db::startTrans();
  43. try {
  44. if ($params['type'] == 1) {
  45. $params['price'] = $params['price'][0];
  46. $params['participant_num'] = $params['participant_num'][0];
  47. } else {
  48. $params['price'] = implode(",",$params['price']);
  49. $params['participant_num'] = implode(",",$params['participant_num']);
  50. }
  51. if ($params['is_simulate_form'] == 1) {
  52. $params['simulate_num'] = $params['type'] == 1 ? $params['simulate_num'][0] : implode(",",$params['simulate_num']);
  53. } else {
  54. $params['simulate_num'] = '';
  55. }
  56. GroupActivity::create([
  57. 'title' => $params['title'],
  58. 'image' => $params['image'],
  59. 'equity_id' => $params['equity_id'],
  60. 'origin_price' => $params['origin_price'],
  61. 'price' => $params['price'],
  62. 'start_time' => strtotime($params['start_time']),
  63. 'end_time' => strtotime($params['end_time']),
  64. 'participant_num' => $params['participant_num'],
  65. 'type' => $params['type'],
  66. 'form_time_limit' => $params['form_time_limit'],
  67. 'is_online_join' => $params['is_online_join'],
  68. 'is_simulate_form' => $params['is_simulate_form'],
  69. 'simulate_num' => $params['simulate_num'],
  70. 'is_preheat' => $params['is_preheat'],
  71. 'is_support_refund' => $params['is_support_refund'],
  72. ]);
  73. Db::commit();
  74. return true;
  75. } catch (\Exception $e) {
  76. Db::rollback();
  77. self::setError($e->getMessage());
  78. return false;
  79. }
  80. }
  81. /**
  82. * @notes 编辑拼团活动
  83. * @param array $params
  84. * @return bool
  85. * @author likeadmin
  86. * @date 2025/03/13 10:31
  87. */
  88. public static function edit(array $params): bool
  89. {
  90. Db::startTrans();
  91. try {
  92. if ($params['type'] == 1) {
  93. $params['price'] = $params['price'][0];
  94. $params['participant_num'] = $params['participant_num'][0];
  95. } else {
  96. $params['price'] = implode(",",$params['price']);
  97. $params['participant_num'] = implode(",",$params['participant_num']);
  98. }
  99. if ($params['is_simulate_form'] == 1) {
  100. $params['simulate_num'] = $params['type'] == 1 ? $params['simulate_num'][0] : implode(",",$params['simulate_num']);
  101. } else {
  102. $params['simulate_num'] = '';
  103. }
  104. GroupActivity::where('id', $params['id'])->update([
  105. 'title' => $params['title'],
  106. 'image' => $params['image'],
  107. 'equity_id' => $params['equity_id'],
  108. 'origin_price' => $params['origin_price'],
  109. 'price' => $params['price'],
  110. 'start_time' => strtotime($params['start_time']),
  111. 'end_time' => strtotime($params['end_time']),
  112. 'participant_num' => $params['participant_num'],
  113. 'type' => $params['type'],
  114. 'form_time_limit' => $params['form_time_limit'],
  115. 'is_online_join' => $params['is_online_join'],
  116. 'is_simulate_form' => $params['is_simulate_form'],
  117. 'simulate_num' => $params['simulate_num'],
  118. 'is_preheat' => $params['is_preheat'],
  119. 'is_support_refund' => $params['is_support_refund'],
  120. ]);
  121. Db::commit();
  122. return true;
  123. } catch (\Exception $e) {
  124. Db::rollback();
  125. self::setError($e->getMessage());
  126. return false;
  127. }
  128. }
  129. /**
  130. * @notes 删除拼团活动
  131. * @param array $params
  132. * @return bool
  133. * @author likeadmin
  134. * @date 2025/03/13 10:31
  135. */
  136. public static function delete(array $params): bool
  137. {
  138. return GroupActivity::destroy($params['id']);
  139. }
  140. /**
  141. * @notes 获取拼团活动详情
  142. * @param $params
  143. * @return array
  144. * @author likeadmin
  145. * @date 2025/03/13 10:31
  146. */
  147. public static function detail($params): array
  148. {
  149. return GroupActivity::findOrEmpty($params['id'])->toArray();
  150. }
  151. /**
  152. * 获取活动二维码
  153. * @return string|void
  154. */
  155. public static function getQRCode($params,$url)
  156. {
  157. try {
  158. $savePath = './uploads/group_activity';
  159. $file_name = $savePath.'/123456789'.$params['id'].'.png';
  160. //判断二维码是否存在
  161. if (file_exists($file_name)) {
  162. return $url.'/'.$file_name;
  163. }
  164. // 要生成二维码的 H5 链接
  165. $h5Url = 'https://weixiuadmin.kyjlkj.com?id=' . $params['id'];
  166. // 创建一个 PNG 写入器实例
  167. $writer = new PngWriter();
  168. // 创建二维码实例
  169. $qrCode = QrCode::create($h5Url)
  170. ->setEncoding(new Encoding('UTF-8'))
  171. ->setErrorCorrectionLevel(ErrorCorrectionLevel::High)
  172. ->setSize(300)
  173. ->setMargin(10)
  174. ->setForegroundColor(new Color(0, 0, 0))
  175. ->setBackgroundColor(new Color(255, 255, 255));
  176. // 添加文字标签
  177. $label = \Endroid\QrCode\Label\Label::create('众盾闪修拼团活动')
  178. ->setFont(new NotoSans(20))
  179. ->setAlignment(LabelAlignment::Center);
  180. // 添加 logo
  181. $logoPath = './uploads/group_activity/logo.png';
  182. $logo = Logo::create($logoPath)->setResizeToWidth(80);
  183. // 生成二维码图像
  184. $result = $writer->write($qrCode, $logo, $label);
  185. // 定义保存二维码的文件路径
  186. if(!is_dir($savePath)){
  187. mkdir($savePath);
  188. }
  189. // 将二维码保存到本地文件
  190. $result->saveToFile($file_name);
  191. return $url.'/'.$file_name;
  192. } catch (\Throwable $e) {
  193. // 失败
  194. echo $e->getMessage();
  195. }
  196. }
  197. }