CouponSetting.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. namespace addons\CloudStock\common\models;
  3. use addons\Coupon\common\enums\AddonsCouponEnum;
  4. use addons\Coupon\common\models\AddonsCoupon;
  5. use common\enums\StatusEnum;
  6. use common\models\base\BaseActiveRecord;
  7. use Yii;
  8. /**
  9. * This is the model class for table "qimall_addons_cloud_stock_give_coupon_setting".
  10. *
  11. * @property int $id
  12. * @property int $mall_id 商城ID
  13. * @property int|null $goods_id 设置id
  14. * @property int|null $level 等级权重
  15. * @property string|null $coupon_setting 赠送规则
  16. * @property int|null $num 满*赠送
  17. * @property int|null $status 状态[-1:删除;0:禁用;1启用]
  18. * @property int $created_at
  19. * @property int $updated_at
  20. */
  21. class CouponSetting extends BaseActiveRecord
  22. {
  23. /**
  24. * {@inheritdoc}
  25. */
  26. public static function tableName()
  27. {
  28. return 'qimall_addons_cloud_stock_give_coupon_setting';
  29. }
  30. /**
  31. * {@inheritdoc}
  32. */
  33. public function rules()
  34. {
  35. return [
  36. [['mall_id'], 'required'],
  37. [['mall_id', 'goods_id', 'level', 'num', 'status', 'created_at', 'updated_at'], 'integer'],
  38. [['coupon_setting'], 'string'],
  39. ];
  40. }
  41. /**
  42. * {@inheritdoc}
  43. */
  44. public function attributeLabels()
  45. {
  46. return [
  47. 'id' => 'ID',
  48. 'mall_id' => 'Mall ID',
  49. 'goods_id' => 'Goods ID',
  50. 'level' => 'Level',
  51. 'coupon_setting' => 'Coupon Setting',
  52. 'num' => 'Num',
  53. 'status' => 'Status',
  54. 'created_at' => 'Created At',
  55. 'updated_at' => 'Updated At',
  56. ];
  57. }
  58. public static function setData($params, $data)
  59. {
  60. try{
  61. $level_arr = array_column($data,'level');
  62. self::updateAll(['status'=>StatusEnum::DELETE],[
  63. 'and',
  64. ['goods_id'=>$params['goods_id']],
  65. ['mall_id'=>$params['mall_id']],
  66. ['not in','level',$level_arr],
  67. ]);
  68. foreach ($data as $item) {
  69. if(empty($item['multiple_selection']) == false){
  70. foreach ($item['multiple_selection'] as $key=>$select){
  71. $item['multiple_selection'][$key] = [
  72. 'coupon_id'=>$select['relevant_id'],
  73. 'num'=>$select['num'],
  74. ];
  75. }
  76. }else{
  77. $item['coupon_setting'] = '';
  78. }
  79. $item['coupon_setting'] = empty($item['multiple_selection'])?'':json_encode($item['multiple_selection']);
  80. unset($item['multiple_selection']);
  81. $model = self::findOne([
  82. 'mall_id' => $params['mall_id'],
  83. 'level' => $item['level'],
  84. 'goods_id' => $params['goods_id'],
  85. 'status' => [StatusEnum::ENABLED]
  86. ]);
  87. if (empty($model)) {
  88. $model = new self();
  89. $model->mall_id = $params['mall_id'];
  90. $model->goods_id = $params['goods_id'];
  91. $model->loadDefaultValues();
  92. }
  93. if(!$model->load($item,'') || !$model->save()){
  94. throw new \Exception($model->getErrorMessage());
  95. }
  96. }
  97. return true;
  98. }catch(\Exception $e){
  99. self::$static_error = $e->getMessage();
  100. return false;
  101. }
  102. }
  103. /**
  104. * 获取能赠送的优惠券
  105. * @param $mall_id
  106. * @param array $goods_arr [['goods_id'=>1,'num'=>2],['goods_id'=>2,'num'=>5]]
  107. * @param $level
  108. * @return array
  109. */
  110. public static function getGiveCoupon($mall_id,$goods_arr = [],$level){
  111. if(empty($goods_arr)) return [];
  112. $return = [];
  113. $setting_data = self::getSettingData($mall_id,array_column($goods_arr,'goods_id'),$level);
  114. foreach ($goods_arr as $item){
  115. $setting = $setting_data[$item['goods_id']];
  116. $coupon_arr = [];
  117. if(empty($setting['rule']) == false){
  118. foreach ($setting['rule'] as $rule){
  119. $coupon_arr[] = [
  120. 'name'=>$rule['name'],
  121. 'coupon_id'=>$rule['coupon_id'],
  122. 'num'=>$rule['num'],
  123. ];
  124. }
  125. $return[$item['goods_id']]['coupon_arr'] = $coupon_arr;
  126. $return[$item['goods_id']]['rule_num'] = $setting['num'];
  127. $return[$item['goods_id']]['give_num'] = floor($item['num']/$setting['num']);
  128. $return[$item['goods_id']]['bug_num'] = $item['num'];
  129. }
  130. }
  131. return $return;
  132. }
  133. /**
  134. * 获取能赠送的优惠券
  135. * @param $mall_id
  136. * @param array $goods_id_arr
  137. * @param $level
  138. * @return array
  139. */
  140. public static function getSettingData($mall_id,$goods_id_arr = [],$level){
  141. // 获取配置
  142. $result = self::find()->where([ 'mall_id' => $mall_id,'goods_id' => $goods_id_arr,'level' => $level,'status' => StatusEnum::ENABLED])->asArray()->all();
  143. $return = [];
  144. if(empty($result) == false){
  145. foreach ($result as $item) {
  146. $return[$item['goods_id']]['num'] = $item['num'];
  147. $item['coupon_setting'] = $item['coupon_setting']?json_decode($item['coupon_setting'],true):[];
  148. if(empty($item['coupon_setting']) == false){
  149. $coupon_list = array_column($item['coupon_setting'],null,'coupon_id');
  150. $params = [];
  151. $params['where'][] = ['mall_id' => $mall_id];
  152. $params['where'][] = ['status' => [StatusEnum::ENABLED]];
  153. $params['where'][] = ['coupon_status' => [AddonsCouponEnum::STATUS_RECEIVING]];
  154. $params['where'][] = ['in','id',array_keys($coupon_list)];
  155. $params['where'][] = ['or',
  156. ['=', 'total_count', -1],
  157. ['>', 'total_count', 'receive'],
  158. ];
  159. $params['order'] = 'sort asc,id desc';
  160. $params['select'] = 'id,name,type,discount,min_price,sub_price,expire_type,expire_day,begin_at,end_at,status,total_count';
  161. $list = AddonsCoupon::lists($params);
  162. if(empty($list) == false){
  163. foreach ($list as $coupon){
  164. $return[$item['goods_id']]['rule'][] = [
  165. 'discount_method' => $coupon['type'] == 1 ? $coupon['discount'] . '折' : $coupon['sub_price'] . '元',
  166. 'name' => $coupon['name'],
  167. 'num' => $coupon_list[$coupon['id']]['num'],
  168. 'coupon_id' => $coupon['id'],
  169. ];
  170. }
  171. }
  172. }
  173. }
  174. }
  175. return $return;
  176. }
  177. }