| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\admin\models\alipay;
- use app\modules\admin\models\AlipayThirdForm;
- use app\models\Coupon;
- use app\models\User;
- use app\models\Store;
- use app\models\SaasUser;
- use yii\base\Model;
- use yii\data\Pagination;
- use \app\models\AlipayAcitvityVoucherCoupon;
- class Voucher extends Model
- {
- public $activity_ordervoucher_id;
- public $mini_id;
- public $alipay_activity_id;
- public $store_id;
- public $pageSize = 5;
- public $page = 1;
- public $publish_start_time;
- public $publish_end_time;
- public $status;
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['store_id', 'mini_id', 'page', 'pageSize'], 'integer'],
- [['publish_start_time', 'publish_end_time', 'status'], 'safe'],
- ];
- }
- public function search() {
- $query = AlipayAcitvityVoucherCoupon::find();
- $query->andWhere(['mini_id' => $this->mini_id, 'is_delete' => 0]);
- $this->publish_end_time && $query->andWhere(['<=', 'publish_start_time', $this->publish_end_time]);
- $this->publish_start_time && $query->andWhere(['>=', 'publish_end_time', $this->publish_start_time]);
- strlen($this->status) && $query->andWhere(['status' => $this->status]);
- $count = $query->count();
- $pagination = new Pagination(['totalCount' => $count, 'pageSize' => $this->pageSize, 'page' => $this->page - 1]);
- $list = $query->limit($pagination->limit)->offset($pagination->offset)->orderBy('id DESC')->all();
- $newList = [];
- foreach ($list as $item) {
- $alipayRes = $this->queryAlipayOV($item->alipay_activity_id);
- if($alipayRes['code'] == 0){
- $status = 0;
- if($alipayRes['data']->activity_base_info->activity_status == 'ACTIVE'){
- $status = 1;
- }
- if($alipayRes['data']->activity_base_info->activity_status == 'FINISHED'){
- $status = 2;
- }
- if($status != intval($item->status)){
- $item->status = $status;
- $item->save();
- }
- }
- $newList[] = array_merge($item->attributes, (array)$alipayRes['data']);
- }
- return [
- 'code' => 0,
- 'msg' => 'ok',
- 'count' => $count,
- 'data' => $newList,
- ];
- }
- public function listCanSendByUser($userId = '') {
- $query = AlipayAcitvityVoucherCoupon::find();
- $query->andWhere(['mini_id' => $this->mini_id, 'is_delete' => 0]);
- $query->andWhere(['<=', 'publish_start_time', date('Y-m-d H:i:s')]);
- $query->andWhere(['>=', 'publish_end_time', date('Y-m-d H:i:s')]);
- $query->andWhere(['status' => 1]);
- $count = $query->count();
- $pagination = new Pagination(['totalCount' => $count, 'pageSize' => $this->pageSize, 'page' => $this->page - 1]);
- $list = $query->limit($pagination->limit)->offset($pagination->offset)->orderBy('id DESC')->all();
- $aidList = [];
- $newList = [];
- foreach ($list as $item) {
- $alipayRes = $this->queryAlipayOV($item->alipay_activity_id);
- $aidList[] = $item->alipay_activity_id;
- $newList[] = array_merge($item->attributes, (array)$alipayRes['data']);
- }
- $resConsult = $this->activityConsult($userId, $aidList);
- if($resConsult['code'] == 0){
- foreach ($newList as &$item) {
- foreach($resConsult['data']->consult_result_info_list as $ritem){
- if($ritem->activity_id == $item['alipay_activity_id']){
- $item['consult_result_code'] = $ritem->consult_result_code;
- }
- }
- }
- }
- return [
- 'code' => 0,
- 'msg' => 'ok',
- 'count' => $count,
- 'data' => $newList,
- 'resConsult' => $resConsult,
- ];
- }
- public function queryAlipayOV($activity_id = 0) {
- $form = new AlipayThirdForm();
- $form->mini_id = $this->mini_id;
- $res = $form->AlipayMarketingActivityVoucherQuery($activity_id);
- return $res;
- }
- public function activityConsult($user_id = 0, $activity_ids = []) {
- $form = new AlipayThirdForm();
- $form->mini_id = $this->mini_id;
- $res = $form->AlipayMarketingActivityConsult($user_id, $activity_ids);
- return $res;
- }
- //创建支付券活动
- public function remove() {
- $condition = [
- 'mini_id' => $this->mini_id,
- 'alipay_activity_id' => $this->alipay_activity_id,
- ];
- $model = AlipayAcitvityVoucherCoupon::findOne($condition);
- if(!$model){
- return [
- 'code' => 1,
- 'msg' => '参数错误',
- ];
- }
- $alipayRes = $this->queryAlipayOV($this->alipay_activity_id);
- if($alipayRes['code'] == 0){
- if($alipayRes['data']->activity_base_info->activity_status != 'FINISHED'){
- return [
- 'code' => 1,
- 'msg' => '支付券活动未停止,禁止删除',
- ];
- }
- }else{
- \Yii::error([__METHOD__, $this->mini_id, $this->alipay_activity_id, $alipayRes]);
- return $alipayRes;
- }
- $model->is_delete = 1;
- if(!$model->save()){
- return [
- 'code' => 1,
- 'msg' => '操作失败',
- ];
- }
- return [
- 'code' => 0,
- 'msg' => 'ok',
- ];
- }
- //修改支付券活动
- public function modify($activity_id, $publish_end_time = null, $valid_end_time = null, $valid_days_after_receive = null) {
- $condition = [
- 'mini_id' => $this->mini_id,
- 'alipay_activity_id' => $activity_id,
- ];
- $t = \Yii::$app->db->beginTransaction();
- $model = AlipayAcitvityVoucherCoupon::findOne($condition);
- $publish_end_time && $model->publish_end_time = $publish_end_time;
- $valid_end_time && $model->end_time = $valid_end_time;
- $valid_days_after_receive && $model->expire_day = $valid_days_after_receive;
- $res = $model->save();
- if(!$res){
- \Yii::error(['model->save()', $model, $model->errors[0]]);
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => 'modelSave错误,' . $model->errors[0],
- ];
- }
-
- $form = new AlipayThirdForm();
- $form->mini_id = $this->mini_id;
- $biz_content = [];
- $biz_content['out_biz_no'] = microtime(true);
- $biz_content['activity_base_info']['activity_id'] = $activity_id;
- $publish_end_time && $biz_content['voucher_send_mode_info']['voucher_send_rule_info']['publish_end_time'] = $publish_end_time;
- $valid_end_time && $biz_content['voucher_use_rule_info']['voucher_use_time_info']['absolute_period_info']['valid_end_time'] = $valid_end_time;
- $valid_days_after_receive && $biz_content['voucher_use_rule_info']['voucher_use_time_info']['relative_period_info']['valid_days_after_receive'] = $valid_days_after_receive;
- $res = $form->AlipayMarketingActivityVoucherModify($biz_content);
- if($res['code'] !== 0){
- $t->rollBack();
- return $res;
- }
- $t->commit();
- return $res;
- }
- //创建支付券活动
- public function create($params = []) {
- if(!$params['name']){
- $id = $params['券参数'];
- $coupon = Coupon::findOne($id)->toArray();
- $params = array_merge($coupon, $params);
- }
- if (isset($params['begin_time']) && $params['begin_time']) {
- $params['begin_time'] = strtotime($params['begin_time']);
- }
- if (isset($params['end_time']) && $params['end_time']) {
- $params['end_time'] = strtotime($params['end_time']);
- }
- $t = \Yii::$app->db->beginTransaction();
- $res = $this->modelSave($params);
- if($res['code'] != 0){
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => 'modelSave错误,' . $res['msg'],
- ];
- }
- $model = $res['model'];
-
- $form = new AlipayThirdForm();
- $form->mini_id = $this->mini_id;
- $biz_content = [];
- $biz_content = $this->modelToBiz($params, $biz_content);
- $res = $form->AlipayMarketingActivityVoucherCreate($biz_content);
- if($res['code'] !== 0){
- $t->rollBack();
- return $res;
- }
- $activity_id = $res['data']->activity_id;
- $model->alipay_activity_id = $activity_id;
- if(!$model->save()){
- \Yii::error(['model->save(alipay_activity_id)', $model, $model->errors[0]]);
- }
- $t->commit();
- return $res;
- }
-
- public function modelSave($params) {
- $model = new AlipayAcitvityVoucherCoupon();
- $model->attributes = $params;
- $model->mini_id = $this->mini_id;
- $model->store_id = $this->store_id;
- $model->publish_start_time = $params['publish_start_time'];
- $model->publish_end_time = $params['publish_end_time'];
- if(!$model->save()){
- return [
- 'code' => 1,
- 'msg' => $model->errors[0],
- ];
- }
- return [
- 'code' => 0,
- 'msg' => 'ok',
- 'model' => $model,
- ];
- }
-
- public function modelToBiz($coupon, $biz_content = []) {
- $biz_content['merchant_access_mode'] = 'AGENCY_MODE';
- $biz_content['activity_base_info']['activity_name'] = $coupon['name'];
- $biz_content['voucher_send_mode_info']['voucher_send_mode'] = 'DIRECT_SEND_MODE';
- $biz_content['voucher_send_mode_info']['voucher_send_rule_info'] = [
- 'quantity' => $coupon['quantity'] ?? 0,
- 'quantity_limit_per_user' => $coupon['quantity_limit_per_user'],
- 'quantity_limit_per_user_period_type' => $coupon['quantity_limit_per_user_period_type'],
- 'publish_start_time' => $coupon['publish_start_time'],
- 'publish_end_time' => $coupon['publish_end_time'],
- ];
- //满减
- if($coupon['discount_type'] == 2){
- $biz_content['voucher_deduct_info'] = [
- 'voucher_type' => 'FIX_VOUCHER',
- 'fix_voucher_info' => [
- 'amount' => $coupon['sub_price'],
- 'floor_amount' => $coupon['min_price'],
- ],
- ];
- }
- //折扣
- if($coupon['discount_type'] == 1){
- $biz_content['voucher_deduct_info'] = [
- 'voucher_type' => 'DISCOUNT_VOUCHER',
- 'discount_voucher_info' => [
- 'discount' => $coupon['discount'],
- 'ceiling_amount' => $coupon['ceiling_amount'] ?? 5000.00,
- 'floor_amount' => $coupon['min_price'],
- ],
- ];
- }
- //券可用范围
- $biz_content['voucher_available_scope_info']['voucher_available_account_info'] = [
- 'available_pids' => [],
- ];
- $biz_content['voucher_available_scope_info']['voucher_available_app_info'] = [
- 'available_app_ids' => [],
- ];
- $biz_content['voucher_available_scope_info']['voucher_available_goods_info'] = [
- 'goods_name' => $coupon['goods_name'],
- 'goods_description' => $coupon['goods_description'],
- 'available_goods_sku_ids' => $coupon['goods_ids'],
- ];
- //券核销限制
- if($coupon['expire_type'] == 1){
- //相对时间
- $biz_content['voucher_use_rule_info']['voucher_use_time_info'] = [
- 'period_type' => 'RELATIVE',
- 'relative_period_info' => [
- 'wait_days_after_receive' => $coupon['wait_days_after_receive'] ?? 0,
- 'valid_days_after_receive' => $coupon['expire_day'],
- ],
- ];
- }
- if($coupon['expire_type'] == 2){
- //绝对时间
- $biz_content['voucher_use_rule_info']['voucher_use_time_info'] = [
- 'period_type' => 'ABSOLUTE',
- 'absolute_period_info' => [
- 'valid_begin_time' => date('Y-m-d H:i:s', $coupon['begin_time']),
- 'valid_end_time' => date('Y-m-d H:i:s', $coupon['end_time']),
- ],
- ];
- }
- //券引导信息
- $biz_content['voucher_customer_guide_info']['voucher_use_guide_info']['use_guide_mode'] = ['MINI_APP'];
- $biz_content['voucher_customer_guide_info']['voucher_use_guide_info']['mini_app_use_guide_info']['mini_app_url'] = 'alipays://platformapi/startapp?appId=[appId]&page=[page]&query=[query]';
- //资金信息
- $biz_content['voucher_budget_supply_info'] = [
- 'budget_type' => 'NO_CASH',
- ];
- //券展示信息
- $biz_content['voucher_display_pattern_info'] = [
- 'brand_name' => $coupon['voucher_display_pattern_info']['brand_name'],
- 'voucher_description' => $coupon['voucher_display_pattern_info']['voucher_description'],
- 'customer_service_mobile' => $coupon['voucher_display_pattern_info']['customer_service_mobile'],
- 'voucher_image' => $coupon['voucher_display_pattern_info']['voucher_image'],
- 'voucher_detail_images' => $coupon['voucher_display_pattern_info']['voucher_detail_images'],
- ];
- $biz_content['out_biz_no'] = date('Y-m-dH:i:s') . rand(100000, 999999);
- return $biz_content;
- }
- }
|