123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- <?php
- // +----------------------------------------------------------------------
- // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
- // +----------------------------------------------------------------------
- // | Author: CRMEB Team <admin@crmeb.com>
- // +----------------------------------------------------------------------
- namespace app\services\user\member;
- use app\dao\user\member\MemberShipDao;
- use app\services\BaseServices;
- use app\services\user\UserServices;
- use crmeb\exceptions\AdminException;
- use think\exception\ValidateException;
- /**
- * Class MemberShipServices
- * @package app\services\user\member
- * @mixin MemberShipDao
- */
- class MemberShipServices extends BaseServices
- {
- public function __construct(MemberShipDao $memberShipDao)
- {
- $this->dao = $memberShipDao;
- }
- /**
- * 获取单个付费会员信息
- * @param int $id
- * @param string $field
- * @return array|\think\Model
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public function getMemberInfo(int $id, string $field = '*')
- {
- $member = $this->dao->getOne(['id' => $id, 'is_del' => 0], $field);
- if (!$member) {
- throw new ValidateException('该会员类型不存在或已删除');
- }
- return $member;
- }
- /**
- * 后台获取会员类型
- * @param array $where
- * @return array
- */
- public function getSearchList(array $where = [])
- {
- [$page, $limit] = $this->getPageValue();
- $list = $this->dao->getSearchList($where, $page, $limit);
- $count = $this->dao->count($where);
- return compact('list', 'count');
- }
- /**
- * 获取会员卡api接口
- * @return mixed
- */
- public function getApiList(array $where)
- {
- return $this->dao->getApiList($where);
- }
- /**
- * 卡类型编辑保存
- * @param int $id
- * @param array $data
- */
- public function save(int $id, array $data)
- {
- if (!$data['title']) throw new AdminException("请填写会员名称");
- if (!$data['type']) throw new AdminException("会员类型缺失");
- if ($data['type'] == "ever") {
- $data['vip_day'] = -1;
- } else {
- if (!$data['vip_day']) throw new AdminException("请填写体验天数");
- if ($data['vip_day'] < 0) throw new AdminException("体验天数不能为负数");
- }
- if ($data['type'] == "free") {
- // $data['price'] = 0.00;
- $data['pre_price'] = 0.00;
- } else {
- if ($data['pre_price'] == 0 || $data['price'] == 0) throw new AdminException("请填写价格");
- }
- if ($data['pre_price'] < 0 || $data['price'] < 0) throw new AdminException("价格不能为负数");
- if ($data['pre_price'] > $data['price']) throw new AdminException("优惠价不能大于原价");
- if ($id) {
- $data['id'] = $id;
- $this->dao->cacheUpdate($data);
- return $this->dao->update($id, $data);
- } else {
- $res = $this->dao->save($data);
- $data['id'] = $res->id;
- $this->dao->cacheUpdate($data);
- return $res;
- }
- }
- /**
- * 获取卡会员天数
- * @param array $where
- * @return mixed
- */
- public function getVipDay(array $where)
- {
- return $this->dao->value($where, 'vip_day');
- }
- /**
- * 修改会员类型状态
- * @param $id
- * @param $is_del
- * @return bool
- */
- public function setStatus($id, $is_del)
- {
- $res = $this->dao->update($id, ['is_del' => $is_del]);
- if ($is_del) {
- $this->cacheDelById($id);
- } else {
- $this->cacheSaveValue($id, 'is_del', 0);
- }
- if ($res) return true;
- return false;
- }
- /**
- * 查询会员类型select
- * @return array
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public function getShipSelect()
- {
- $menus = [];
- foreach ($this->dao->getSearchList(['is_del' => 0], 0, 0, ['id', 'title']) as $menu) {
- $menus[] = ['value' => $menu['id'], 'label' => $menu['title']];
- }
- $menus[] = ['value' => 'card' , 'label' => '卡密激活'];
- return $menus;
- }
- /**
- * 获取过期时间
- * @param int $uid
- * @param int $id
- * @param $userInfo
- * @param $memberInfo
- * @return false|string
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public function getOverdueTime(int $uid, int $id, $userInfo = [], $memberInfo = [])
- {
- if (!$id) {
- throw new ValidateException('缺少会员ID');
- }
- if (!$memberInfo) {
- /** @var MemberShipServices $memberShipService */
- $memberShipService = app()->make(MemberShipServices::class);
- $memberInfo = $memberShipService->get($id);
- }
- if (!$memberInfo) {
- throw new ValidateException('会员卡类型不存在');
- }
- if ($uid && !$userInfo) {
- /** @var UserServices $userServices */
- $userServices = app()->make(UserServices::class);
- $userInfo = $userServices->getUserInfo($uid);
- }
- $member_type = $memberInfo['type'];
- $vip_day = $memberInfo['vip_day'];
- if ($member_type == 'ever') {
- $overdue_time = 0;
- $is_ever_level = 1;
- } else {
- if (!$userInfo || $userInfo['is_money_level'] == 0) {
- $overdue_time = bcadd(bcmul($vip_day, 86400, 0), time(), 0);
- } else {
- $overdue_time = bcadd(bcmul($vip_day, 86400, 0), $userInfo['overdue_time'], 0);
- }
- $is_ever_level = 0;
- }
- if ($is_ever_level == 1) {
- $res = "永久会员";
- } else {
- $res = date('Y-m-d', $overdue_time);
- }
- return $res;
- }
- }
|