| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- <?php
- namespace app\api\logic;
- use app\common\logic\BaseLogic;
- use app\common\model\coupon\CouponRules;
- use app\common\model\coupon\UserCoupon;
- use think\facade\Db;
- /**
- * @author 林海涛
- * @date 2024/7/18 下午4:49
- */
- class UserCouponLogic extends BaseLogic
- {
- public static function add($params)
- {
- Db::startTrans();
- try{
- $errMsgArr = [];
- $rules = CouponRules::whereIn('id',$params['coupon_ids'])->lock(true)->select();
- $userCoupon = UserCoupon::where('user_id',$params['user_id'])
- ->whereIn('coupon_id',$params['coupon_ids'])
- ->where('voucher_count','>',0)
- ->select();
- $updateData = [];
- $createData = [];
- foreach($rules as $v) {
- if ($v->expire_time < time()) {
- $errMsgArr[] = $v->event_name .'已过期';
- continue;
- }
- if($v->voucher_status == 2){
- $errMsgArr[] = $v->event_name .'已设置为过期';
- continue;
- }
- if($userCoupon->where('coupon_id',$v->id)->count()){
- $errMsgArr[] = $v->event_name . '已领取';
- continue;
- }
- $updateData[$v->id] = ['voucher_count' => --$v->voucher_count];
- $createData[] = ['user_id'=>$params['user_id'],'coupon_id' => $v->id,'voucher_count' =>1];
- }
- CouponRules::updateWhenCase($updateData);
- if(!empty($createData)){
- (new UserCoupon())->saveAll($createData);
- }
- Db::commit();
- return $errMsgArr;
- }catch(\Exception $e){
- Db::rollback();
- self::setError($e->getMessage());
- return false;
- }
- }
- }
|