| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- <?php
- namespace app\api\logic;
- use app\common\logic\BaseLogic;
- use app\common\model\coupon\CouponCategory;
- use app\common\model\coupon\CouponRules;
- use app\common\model\coupon\UserCoupon;
- use think\db\Query;
- use think\db\Where;
- 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;
- }
- }
- /**
- * @param $params
- * @return array|false
- */
- public static function categoryCouponList($params)
- {
- try{
- $data = CouponRules::whereIn('id',CouponCategory::where('goods_category_id',$params['goods_category_id'])->group('coupon_id')->column('coupon_id'))
- ->where(['coupon_type'=>1])
- ->field(['id', 'amount', 'coupon_type','amount_require', 'begin_use', 'discount_ratio', 'event_name', 'expire_time', 'max_deductible_price', 'mold_type', 'server_category_name', 'voucher_status', 'voucher_count'])
- ->order(['id' => 'desc'])
- ->select()
- ->toArray();
- foreach($data as $k => $v){
- $v['begin_use'] = $v['begin_use'] ? date('Y-m-d H:i:s',$v['begin_use']) :null;
- $v['expire_time'] = $v['begin_use'] ?date('Y-m-d H:i:s',$v['expire_time']) :null;
- $data[$k] = $v;
- }
- return $data;
- }catch(\Exception $e){
- Db::rollback();
- self::setError($e->getMessage());
- return false;
- }
- }
- }
|