xhCouponService.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <?php
  2. namespace common\services;
  3. use common\components\dict;
  4. use common\components\wxUtil;
  5. use Yii;
  6. use common\components\stringUtil;
  7. use common\models\xhCoupon;
  8. class xhCouponService {
  9. public static function getUserValidCoupon($userId,$consumePrice)
  10. {
  11. $coupon = self::getUserCoupon($userId);
  12. if(!empty($coupon)){
  13. foreach($coupon as $key => $val){
  14. $meetAmount = $val['meetAmount'];
  15. if($consumePrice < $meetAmount){//订单价格达到使用代金劵的金额要求
  16. unset($coupon[$key]);
  17. }
  18. }
  19. }
  20. return $coupon;
  21. }
  22. /**
  23. * 获取用户的代金劵
  24. */
  25. public static function getUserCoupon($userId)
  26. {
  27. $cacheKey = dict::getCacheKey('userCoupon').$userId;
  28. $exists = Yii::$app->redis->executeCommand('EXISTS', [$cacheKey]);
  29. if(empty($exists)){
  30. $coupon = xhCoupon::getAllByCondition(['userId' => $userId,'status' => 0]);
  31. $string = !empty($coupon) ? json_encode($coupon) : '';
  32. Yii::$app->redis->executeCommand('SET', [$cacheKey,$string]);
  33. }else{
  34. $cacheData = Yii::$app->redis->executeCommand('GET', [$cacheKey]);
  35. $coupon = !empty($cacheData) ? json_decode($cacheData,true) : [];
  36. if(!empty($coupon)){
  37. $now = time();
  38. foreach($coupon as $key => $val){
  39. if($now > $val['deadline'] || $val['useStatus'] == 1){//代金劵已经过期
  40. $couponId = $val['id'];
  41. $userId = $val['userId'];
  42. self::delById($couponId,$userId);//删除已经过期的代金劵
  43. unset($coupon[$key]);
  44. }
  45. }
  46. }
  47. }
  48. return $coupon;
  49. }
  50. /**
  51. * 刷新缓存的用户代金劵
  52. */
  53. public static function refreshUserCoupon($userId)
  54. {
  55. $cacheKey = dict::getCacheKey('userCoupon').$userId;
  56. Yii::$app->redis->executeCommand('DEL', [$cacheKey]);
  57. self::getUserCoupon($userId);
  58. }
  59. public static function add($data,$userId)
  60. {
  61. xhCoupon::add($data);
  62. self::refreshUserCoupon($userId);
  63. }
  64. public static function delById($id,$userId)
  65. {
  66. xhCoupon::deleteById($id);
  67. $cacheKey = dict::getCacheKey('coupon').$id;
  68. Yii::$app->redis->executeCommand('DEL', [$cacheKey]);
  69. self::refreshUserCoupon($userId);
  70. }
  71. public static function getById($id)
  72. {
  73. $cacheKey = dict::getCacheKey('coupon').$id;
  74. $coupon = Yii::$app->redis->executeCommand('HGETALL', [$cacheKey]);
  75. if(!empty($coupon)){
  76. $arr = [];
  77. $i = 0;
  78. $x = 0;
  79. foreach($coupon as $key => $val){
  80. $i++;
  81. if($i%2 == 0){
  82. $arr[$x]['value'] = $val;
  83. $x++;
  84. }else{
  85. $arr[$x]['key'] = $val;
  86. }
  87. }
  88. $couponArr = [];
  89. foreach($arr as $key => $val){
  90. $couponArr[$val['key']] = $val['value'];
  91. }
  92. unset($couponArr['info_already_get_by_sql']);
  93. return $couponArr;
  94. }
  95. $coupon = xhCoupon::find()->where(['id' => $id])->asArray()->one();
  96. $params = [$cacheKey];
  97. $params[] = 'info_already_get_by_sql';
  98. $params[] = 'ok';//redis没有办法设置带空值的键,加此可以数据空时表示取过
  99. if(!empty($coupon)){
  100. foreach($coupon as $key => $val){
  101. $params[] = $key;
  102. $params[] = $val;
  103. }
  104. }
  105. Yii::$app->redis->executeCommand('HMSET',$params);//将xhGoods信息放入缓存
  106. return $coupon;
  107. }
  108. public static function updateById($id,$userId,$data)
  109. {
  110. xhCoupon::updateById($id, $data);
  111. $cacheKey = dict::getCacheKey('coupon').$id;
  112. $couponParams = [$cacheKey];
  113. foreach($data as $key => $val){
  114. $couponParams[] = $key;
  115. $couponParams[] = $val;
  116. }
  117. Yii::$app->redis->executeCommand('HMSET',$couponParams);//更新缓存信息
  118. self::refreshUserCoupon($userId);
  119. }
  120. //关注公众号时,判断商家是否开启新客注册送券,并且客户提供了手机号,是则送券 ssh 2020.5.5
  121. public static function focusGiveCoupon($userId,$merchant,$merchantExtend)
  122. {
  123. $giveCouponPrice = $merchantExtend['giveCouponPrice'];//代金劵金额
  124. $couponMeetPrice = $merchantExtend['couponMeetPrice'];//消费额
  125. $sjId = $merchant['id'];
  126. $userInfo = xhUserService::getById($userId);
  127. $duration = $merchantExtend['couponValidity'];//有效期
  128. $amount = $giveCouponPrice;
  129. $meetAmount = $couponMeetPrice;
  130. $addData['beginTime'] = time();
  131. $addData['deadline'] = $addData['beginTime'] + $duration * 86400;
  132. $addData['amount'] = $amount;
  133. $addData['meetAmount'] = $meetAmount;
  134. $addData['createTime'] = date("Y-m-d H:i:s");
  135. $addData['sjId'] = $sjId;
  136. $addData['userId'] = $userId;
  137. $addData['number'] = 'CO'.stringUtil::buildOrderNo($userId);//代金劵编号
  138. xhCouponService::add($addData,$userId);
  139. /*
  140. $allTM = xhTMessageService::getList($sjId);
  141. $shortTempId = 'OPENTM207112032';//收入提醒
  142. $tempId = $allTM[$shortTempId];
  143. $openId = $userInfo['openId'];
  144. $data = ["touser" => $openId,"template_id" => $tempId,
  145. "url" => Yii::$app->params['frontUrl'].'/center/coupon?account='.$merchant['id'],
  146. "data" => [
  147. "first" => ["value" => "送您一张代金劵。","color" => "#173177"],
  148. "keyword1" => ["value" => '代金劵',"color" => "#173177"],
  149. "keyword2" => ["value" => $amount.'元',"color" => "#173177"],
  150. "keyword3" => ["value" => date("Y-m-d H:i"),"color" => "#173177"],
  151. "remark" => ["value" => "点击查看详情","color" => "#173177"]]];
  152. wxUtil::sendTaskInform($data,$merchant);
  153. */
  154. }
  155. }