UserCouponLogic.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. namespace app\api\logic;
  3. use app\common\logic\BaseLogic;
  4. use app\common\model\coupon\CouponRules;
  5. use app\common\model\coupon\UserCoupon;
  6. use think\facade\Db;
  7. /**
  8. * @author 林海涛
  9. * @date 2024/7/18 下午4:49
  10. */
  11. class UserCouponLogic extends BaseLogic
  12. {
  13. public static function add($params)
  14. {
  15. Db::startTrans();
  16. try{
  17. $errMsgArr = [];
  18. $rules = CouponRules::whereIn('id',$params['coupon_ids'])->lock(true)->select();
  19. $userCoupon = UserCoupon::where('user_id',$params['user_id'])
  20. ->whereIn('coupon_id',$params['coupon_ids'])
  21. ->where('voucher_count','>',0)
  22. ->select();
  23. $updateData = [];
  24. $createData = [];
  25. foreach($rules as $v) {
  26. if ($v->expire_time < time()) {
  27. $errMsgArr[] = $v->event_name .'已过期';
  28. continue;
  29. }
  30. if($v->voucher_status == 2){
  31. $errMsgArr[] = $v->event_name .'已设置为过期';
  32. continue;
  33. }
  34. if($userCoupon->where('coupon_id',$v->id)->count()){
  35. $errMsgArr[] = $v->event_name . '已领取';
  36. continue;
  37. }
  38. $updateData[$v->id] = ['voucher_count' => --$v->voucher_count];
  39. $createData[] = ['user_id'=>$params['user_id'],'coupon_id' => $v->id,'voucher_count' =>1];
  40. }
  41. CouponRules::updateWhenCase($updateData);
  42. if(!empty($createData)){
  43. (new UserCoupon())->saveAll($createData);
  44. }
  45. Db::commit();
  46. return $errMsgArr;
  47. }catch(\Exception $e){
  48. Db::rollback();
  49. self::setError($e->getMessage());
  50. return false;
  51. }
  52. }
  53. }