MemberWealController.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. <?php
  2. namespace hd\controllers;
  3. use bizHd\member\classes\MemberWealClass;
  4. use bizHd\shop\classes\ShopClass;
  5. use common\components\arrayUtil;
  6. use common\components\dict;
  7. use common\components\util;
  8. use Yii;
  9. class MemberWealController extends BaseController
  10. {
  11. public $guestAccess = [];
  12. //获取充值和会员的优惠政策 ssh 20250226
  13. public function actionGetWeal()
  14. {
  15. $shop = $this->shop;
  16. $shopId = $shop->id;
  17. $weal = MemberWealClass::getAllByCondition(['shopId' => $shopId], null, '*', null);
  18. $weal = arrayUtil::arraySort($weal, 'level', SORT_ASC);
  19. if (!empty($weal)) {
  20. foreach ($weal as $key => $val) {
  21. $recharge = $val['recharge'] ?? 0;
  22. $recharge = floatval($recharge);
  23. $giv = $val['give'] ?? 0;
  24. $giv = floatval($giv);
  25. $weal[$key]['recharge'] = $recharge;
  26. $weal[$key]['give'] = $giv;
  27. }
  28. }
  29. $rechargeWeal = $shop->rechargeWeal ?? 0;
  30. util::success(['weal' => $weal, 'rechargeWeal' => $rechargeWeal]);
  31. }
  32. //获取会员的初始数据
  33. public function actionGetInitData()
  34. {
  35. $map = dict::getDict('memberLevelMap');
  36. $shop = $this->shop;
  37. $reduceDay = $shop->reduceDay ?? 30;
  38. $member = [];
  39. foreach ($map as $key => $val) {
  40. $name = $val['name'] ?? '普通会员';
  41. $levelSn = $val['levelSn'] ?? 'general';
  42. $level = $val['level'] ?? 1;
  43. $discount = $val['discount'] ?? 0.95;
  44. $recharge = $val['recharge'] ?? 0;
  45. $it = [
  46. 'name' => $name,
  47. 'levelSn' => $levelSn,
  48. 'level' => $level,
  49. 'discount' => $discount,
  50. 'recharge' => $recharge,
  51. ];
  52. $member[] = $it;
  53. }
  54. $shopId = $this->shopId;
  55. $list = MemberWealClass::getAllByCondition(['shopId' => $shopId], null, '*', null);
  56. if (!empty($list)) {
  57. $list = arrayUtil::arraySort($list, 'level', SORT_ASC);
  58. $member = [];
  59. foreach ($list as $key => $val) {
  60. $name = $val['name'] ?? '普通会员';
  61. $levelSn = $val['levelSn'] ?? 'general';
  62. $level = $val['level'] ?? 1;
  63. $discount = $val['discount'] ?? 0.95;
  64. $recharge = $val['recharge'] ?? 0;
  65. if ($discount > 1) {
  66. util::fail($name . '的折扣必须小于等于1');
  67. }
  68. if ($discount <= 0) {
  69. util::fail($name . '的折扣必须大于0');
  70. }
  71. $it = [
  72. 'name' => $name,
  73. 'levelSn' => $levelSn,
  74. 'level' => $level,
  75. 'discount' => $discount,
  76. 'recharge' => $recharge,
  77. ];
  78. $member[] = $it;
  79. }
  80. }
  81. util::success(['member' => $member, 'reduceDay' => $reduceDay]);
  82. }
  83. public function actionGetRechargeData()
  84. {
  85. $recharge = dict::getDict('memberLevelMap');
  86. $shopId = $this->shopId;
  87. $has = MemberWealClass::getByCondition(['shopId' => $shopId], true);
  88. $hasMemberDiscount = !empty($has) ? 1 : 0;
  89. $weal = MemberWealClass::getAllByCondition(['shopId' => $shopId], null, '*', 'level');
  90. if (!empty($weal)) {
  91. foreach ($recharge as $key => $val) {
  92. $level = $val['level'];
  93. $current = $weal[$level] ?? [];
  94. $newDiscount = $current['discount'] ?? 0.9;
  95. $newRecharge = $current['recharge'] ?? 0;
  96. $newRecharge = floatval($newRecharge);
  97. $newGive = $current['give'] ?? 0;
  98. $newGive = floatval($newGive);
  99. $recharge[$key]['discount'] = $newDiscount;
  100. $recharge[$key]['recharge'] = $newRecharge;
  101. $recharge[$key]['give'] = $newGive;
  102. }
  103. }
  104. $shop = $this->shop;
  105. $rechargeWeal = $shop->rechargeWeal ?? 1;
  106. $rechargeWeal = $rechargeWeal == 0 ? 1 : $rechargeWeal;
  107. util::success(['recharge' => $recharge, 'hasMemberDiscount' => $hasMemberDiscount, 'rechargeWeal' => $rechargeWeal]);
  108. }
  109. public function actionModifyRecharge()
  110. {
  111. $shop = $this->shop;
  112. $rechargeWeal = $shop->rechargeWeal ?? 0;
  113. if ($rechargeWeal != 0) {
  114. util::fail('已经设置过了,不能修改');
  115. }
  116. $post = Yii::$app->request->post();
  117. $rechargeWeal = $post['rechargeWeal'] ?? 0;
  118. $data = $post['data'] ?? [];
  119. if ($rechargeWeal == 0) {
  120. util::fail('请选择优惠类型');
  121. }
  122. if (empty($data)) {
  123. util::fail('请填写内容');
  124. }
  125. // 验证recharge和give值递增,discount值递减
  126. $prevRecharge = -1;
  127. $prevGive = -1;
  128. $prevDiscount = 2; // 初始化为大于1的值,确保第一个元素能通过验证
  129. foreach ($data as $index => $item) {
  130. $currentRecharge = floatval($item['recharge'] ?? 0);
  131. $currentGive = floatval($item['give'] ?? 0);
  132. $currentDiscount = floatval($item['discount'] ?? 0);
  133. if ($currentRecharge <= $prevRecharge) {
  134. util::fail('充值金额必须递增');
  135. }
  136. if ($rechargeWeal == 2) {
  137. if ($currentGive <= $prevGive) {
  138. util::fail('赠送金额必须递增');
  139. }
  140. }
  141. if ($currentDiscount >= $prevDiscount) {
  142. util::fail('折扣必须递减');
  143. }
  144. $prevRecharge = $currentRecharge;
  145. $prevGive = $currentGive;
  146. $prevDiscount = $currentDiscount;
  147. }
  148. $connection = Yii::$app->db;
  149. $transaction = $connection->beginTransaction();
  150. try {
  151. $shop->rechargeWeal = $rechargeWeal;
  152. $shop->save();
  153. $params = [];
  154. foreach ($data as $key => $val) {
  155. $levelSn = $val['levelSn'];
  156. $params[$levelSn] = $val;
  157. }
  158. $shopId = $this->shopId;
  159. $list = MemberWealClass::getAllByCondition(['shopId' => $shopId], null, '*', null, true);
  160. if (empty($list)) {
  161. util::fail('请先设置会员折扣');
  162. }
  163. foreach ($list as $k => $obj) {
  164. $levelSn = $obj->levelSn ?? '';
  165. $current = $params[$levelSn] ?? [];
  166. $rechargeAmount = $current['recharge'] ?? 0;
  167. $obj->recharge = $rechargeAmount;
  168. if (!empty($current)) {
  169. $give = $current['give'] ?? 0;
  170. if ($rechargeWeal == 2) {
  171. //送钱
  172. $obj->give = $give;
  173. }
  174. $obj->save();
  175. }
  176. }
  177. $transaction->commit();
  178. util::complete('设置成功');
  179. } catch (\Exception $e) {
  180. $transaction->rollBack();
  181. Yii::info("失败原因:" . $e->getMessage());
  182. util::fail('设置失败');
  183. }
  184. }
  185. public function actionModify()
  186. {
  187. $post = Yii::$app->request->post();
  188. $shopId = $this->shopId;
  189. $mainId = $this->mainId;
  190. $has = MemberWealClass::getByCondition(['shopId' => $shopId], true);
  191. if (!empty($has)) {
  192. util::fail('已经设置过,不能再修改');
  193. }
  194. $connection = Yii::$app->db;
  195. $transaction = $connection->beginTransaction();
  196. try {
  197. $reduceDay = $post['reduceDay'] ?? 0;
  198. ShopClass::updateById($shopId, ['reduceDay' => $reduceDay]);
  199. $data = $post['data'] ?? [];
  200. if (empty($data)) {
  201. util::fail('没有折扣数据');
  202. }
  203. // 验证discount值递减
  204. $prevDiscount = 2; // 初始化为大于1的值,确保第一个元素能通过验证
  205. foreach ($data as $index => $item) {
  206. $currentDiscount = floatval($item['discount'] ?? 0);
  207. if ($currentDiscount >= $prevDiscount) {
  208. util::fail('折扣必须递减');
  209. }
  210. $prevDiscount = $currentDiscount;
  211. }
  212. foreach ($data as $k => $v) {
  213. $discount = $v['discount'] ?? 0.95;
  214. $levelSn = $v['levelSn'] ?? 'general';
  215. $level = $v['level'] ?? 1;
  216. $name = $v['name'] ?? '普通会员';
  217. $recharge = $v['recharge'] ?? 0;
  218. $it = [
  219. 'mainId' => $mainId,
  220. 'shopId' => $shopId,
  221. 'level' => $level,
  222. 'levelSn' => $levelSn,
  223. 'discount' => $discount,
  224. 'name' => $name,
  225. 'recharge' => $recharge,
  226. ];
  227. MemberWealClass::add($it, true);
  228. }
  229. $transaction->commit();
  230. util::complete('设置成功');
  231. } catch (\Exception $e) {
  232. $transaction->rollBack();
  233. Yii::info("失败原因:" . $e->getMessage());
  234. util::fail('设置失败');
  235. }
  236. }
  237. }