diff --git a/addon/futures/model/User.php b/addon/futures/model/User.php
index c3369870..041124bd 100644
--- a/addon/futures/model/User.php
+++ b/addon/futures/model/User.php
@@ -96,8 +96,40 @@ class User extends BaseModel{
}
}
+ /**
+ * Common: 赠送商品
+ * Author: wu-hui
+ * Time: 2023/02/23 13:58
+ * @return array
+ */
+ public function sendGoods(){
+ // 获取参数信息
+ $info = (array)input('info',[]);
+ $memberId = (int)input('member_id',0);
+ if($memberId <= 0) return $this->error('','用户信息错误!');
+ // 赠送商品
+ try{
+ $time = time();
+ $insert = [];
+ for($i=0;$i<$info['order_num'];$i++){
+ $insert[] = [
+ 'site_id' => $this->site_id,
+ 'member_id' => $memberId,
+ 'goods_id' => (int)$info['goods_id'],
+ 'total' => (int)$info['goods_num'],
+ 'unit_price' => sprintf("%.2f",$info['unit_price'] * $info['goods_num']),
+ 'status' => 1,
+ 'created_time' => $time,
+ ];
+ }
+ Db::name('futures')->insertAll($insert);
+ return $this->success();
+ }catch(Exception $e){
+ return $this->error('',$e->getMessage());
+ }
+ }
diff --git a/addon/futures/shop/controller/User.php b/addon/futures/shop/controller/User.php
index 36b9937d..0b1d4811 100644
--- a/addon/futures/shop/controller/User.php
+++ b/addon/futures/shop/controller/User.php
@@ -13,7 +13,7 @@
namespace addon\futures\shop\controller;
use app\shop\controller\BaseShop;
use addon\futures\model\User as userModel;
-
+error_reporting(E_ALL ^ E_NOTICE);
class User extends BaseShop{
/**
* Common: 进入首页
@@ -40,6 +40,14 @@ class User extends BaseShop{
}
+ // 商品赠送
+ public function sendGoods(){
+ if(request()->isAjax()) return (new userModel($this->site_id))->sendGoods();
+
+ $this->assign('member_id',input('member_id',0));
+ return $this->fetch('user/send_goods');
+ }
+
diff --git a/addon/futures/shop/view/user/index.html b/addon/futures/shop/view/user/index.html
index 9d1b5a6c..6ef0eda8 100644
--- a/addon/futures/shop/view/user/index.html
+++ b/addon/futures/shop/view/user/index.html
@@ -155,13 +155,16 @@
});
// 赠送商品
function sendGoods(data){
-
-
- console.log(data);
-
-
-
-
+ layer.open({
+ type: 2,
+ title: '赠送商品',
+ skin: 'layer-tips-class',
+ area: ['80%','90%'],
+ content: ns.url("futures://shop/user/sendGoods", { member_id: data.member_id }),
+ end: function(){
+ table.reload();
+ }
+ });
}
diff --git a/addon/futures/shop/view/user/send_goods.html b/addon/futures/shop/view/user/send_goods.html
new file mode 100644
index 00000000..ccddc8b3
--- /dev/null
+++ b/addon/futures/shop/view/user/send_goods.html
@@ -0,0 +1,207 @@
+{extend name="app/shop/view/base.html"/}
+{block name="resources"}
+
+{/block}
+
+{block name="body"}
+
+{/block}
+{block name="script"}
+
+{/block}
\ No newline at end of file
diff --git a/app/model/NewBaseModel.php b/app/model/NewBaseModel.php
index 68736497..2028231a 100644
--- a/app/model/NewBaseModel.php
+++ b/app/model/NewBaseModel.php
@@ -10,6 +10,8 @@
*/
namespace app\model;
+use think\facade\Cache;
+
error_reporting(E_ALL ^ E_NOTICE);
@@ -19,9 +21,13 @@ class NewBaseModel extends \think\Model{
protected $name = false;
protected $autoWriteTimestamp = false; // 开启自动时间戳
protected $deleteTime = false; // 软删除字段
+ protected $site_id;
public function __construct(array $data = []){
parent::__construct($data);
+
+ $data['table_name'] = $this->name ?? $data['table_name'];
+
if($data['table_name']) {
cache('new_model_table_name',$data['table_name']);
$tableName = $data['table_name'];
@@ -30,9 +36,66 @@ class NewBaseModel extends \think\Model{
}
$this->name = $tableName;
+ $this->site_id = (int)request()->siteid();
}
+ // 操作成功返回值函数
+ public function success($data = '',$code_var = 'SUCCESS'){
+ $lang_array = $this->getLang();
+ $lang_var = isset($lang_array[$code_var]) ? $lang_array[$code_var] : $code_var;
+ if($code_var == 'SUCCESS'){
+ $code_var = 0;
+ }
+ else{
+ $code_array = array_keys($lang_array);
+ $code_index = array_search($code_var,$code_array);
+ if($code_index != FALSE){
+ $code_var = 10000 + $code_index;
+ }
+ }
+ return success($code_var,$lang_var,$data);
+ }
+ // 操作失败返回值函数
+ public function error($data = '',$code_var = 'FAIL'){
-
+ $lang_array = $this->getLang();
+ if(isset($lang_array[$code_var])){
+ $lang_var = $lang_array[$code_var];
+ }
+ else{
+ $lang_var = $code_var;
+ $code_var = 'FAIL';
+ }
+ $code_array = array_keys($lang_array);
+ $code_index = array_search($code_var,$code_array);
+ if($code_index != FALSE){
+ $code_var = -10000 - $code_index;
+ }
+ return error($code_var,$lang_var,$data);
+ }
+ // 获取语言包数组
+ public function getLang(){
+ $default_lang = config("lang.default_lang");
+ $cache_common = Cache::get("lang_app/lang/".$default_lang.'/model.php');
+ if(empty($cache_common)){
+ $cache_common = include 'app/lang/'.$default_lang.'/model.php';
+ Cache::tag("lang")
+ ->set("lang_app/lang/".$default_lang,$cache_common);
+ }
+ $lang_path = isset($this->lang) ? $this->lang : '';
+ if(!empty($lang_path)){
+ $cache_path = Cache::get("lang_".$lang_path."/".$default_lang.'/model.php');
+ if(empty($cache_path)){
+ $cache_path = include $lang_path."/".$default_lang.'/model.php';
+ Cache::tag("lang")
+ ->set("lang_".$lang_path."/".$default_lang,$cache_path);
+ }
+ $lang = array_merge($cache_common,$cache_path);
+ }
+ else{
+ $lang = $cache_common;
+ }
+ return $lang;
+ }
}
\ No newline at end of file
diff --git a/app/model/newModel/Config.php b/app/model/newModel/Config.php
new file mode 100644
index 00000000..2d817df1
--- /dev/null
+++ b/app/model/newModel/Config.php
@@ -0,0 +1,158 @@
+where('app_module',$params['app_module'])
+ ->find();
+ if(!$save){
+ $save = new self();
+ $save->site_id = $params['site_id'];
+ $save->app_module = $params['app_module'];
+ $save->config_key = $params['config_key'];
+ }
+ $save->value = $params['value'];
+ $save->config_desc = $params['config_desc'];
+ $save->is_use = $params['is_use'];
+
+ Cache::delete($params['config_key']);
+
+ return $this->success($save->save());
+ }catch(Exception $e){
+ return $this->error('',$e->getMessage());
+ }
+ }
+ /**
+ * Common: 获取设置
+ * Author: wu-hui
+ * Time: 2022/10/20 16:32
+ * @param String $key
+ * @param string $module
+ * @return array|mixed
+ */
+ public function getConfigInfo(String $key,String $module = 'shop'){
+ // 信息获取
+ $info = Cache::get($key);
+ if(!$info){
+ $info = self::where('config_key',$key)
+ ->where('app_module',$module)
+ ->value('value');
+ if($info) $info = json_decode($info, TRUE);
+ $funName = camelize($key).'Default';
+ if(method_exists($this,$funName)) $info = (array) $this->$funName($info);
+
+ Cache::set($key, $info);
+ }
+
+ return $info;
+ }
+
+
+ /**
+ * Common: 默认设置 —— 个人名片
+ * Author: wu-hui
+ * Time: 2022/10/20 16:32
+ * @param $info
+ * @return array
+ */
+ public function businessCardSettingDefault($info){
+ return [
+ 'is_examine' => $info['is_examine'] ? : 0,// 是否开启自动审核 0=否,1=是
+ 'customer_service' => $info['customer_service'] ? : '',// 客服二维码图片
+ 'agreement' => $info['agreement'] ? : '',// 用户协议
+ 'nickname' => $info['nickname'] ? : '名片',// 文字替换 —— 名片
+ ];
+ }
+ /**
+ * Common: 默认设置 —— 文章
+ * Author: wu-hui
+ * Time: 2022/10/21 15:01
+ * @param $info
+ * @return array
+ */
+ public function articleSettingDefault($info){
+ return [
+ 'banner_list' => $info['banner_list'] ?: [],// 轮播图
+ 'share' => $info['share'] ?: '分享',// 文字替换 —— 分享
+ 'integral' => (int)$info['integral'],// 分享文章奖励积分
+ 'parent_integral' => (int)$info['parent_integral'],// 直推上级奖励积分
+ 'max_integral' => (int)$info['max_integral'],// 每日积分获取上限
+ ];
+ }
+ /**
+ * Common: 默认设置 —— 经销商
+ * Author: wu-hui
+ * Time: 2022/12/06 17:24
+ * @param $info
+ * @return array
+ */
+ public function distributorSettingDefault($info){
+ return [
+ 'switch' => $info['switch'] ?: 0,// 是否开启
+ 'gradational' => $info['gradational'] ?: 0,// 级差是否开启
+ 'same_grade' => $info['same_grade'] ?: 0,// 平级奖是否开启
+ 'same_grade_ratio' => $info['same_grade_ratio'] ?: 0,// 平级奖结算比例
+ 'settlement_time' => $info['settlement_time'] ?: 0,// 结算时间
+ 'settlement_day' => $info['settlement_day'] ?: 0,// 结算天数
+ ];
+ }
+ /**
+ * Common: 默认设置 —— 区域代理
+ * Author: wu-hui
+ * Time: 2023/02/07 10:52
+ * @param $info
+ * @return array
+ */
+ public function areaBonusSettingDefault($info){
+ return [
+ 'switch' => $info['switch'] ?: 0,// 是否开启
+ 'province_ratio' => $info['province_ratio'] ?: 0,// 省级提成比例
+ 'city_ratio' => $info['city_ratio'] ?: 0,// 市级提成比例
+ 'district_ratio' => $info['district_ratio'] ?: 0,// 区/县提成比例
+ 'is_averaging' => $info['is_averaging'] ?: 0,// 是否均分
+ 'settlement_time' => $info['settlement_time'] ?: 0,// 结算时间
+ 'settlement_day' => $info['settlement_day'] ?: 0,// 结算天数
+ ];
+ }
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/app/model/newModel/common/Area.php b/app/model/newModel/common/Area.php
new file mode 100644
index 00000000..b1e896af
--- /dev/null
+++ b/app/model/newModel/common/Area.php
@@ -0,0 +1,68 @@
+field('id,pid,name')
+ ->when($isGetChildren,function($query){
+ $query->with(['children'=>function($children){
+ $children->field('id,pid,name');
+ }]);
+ })
+ ->where('pid',$pid)
+ ->where('status',1)
+ ->select();
+ if($list) $list = $list->toArray();
+
+ return $this->success($list);
+ }
+ /**
+ * Common: 关联查询 当前类
+ * Author: wu-hui
+ * Time: 2022/10/24 9:04
+ * @return \think\model\relation\HasMany
+ */
+ public function children(){
+ return $this->hasMany(self::class,'pid','id');
+ }
+
+
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/app/model/newModel/common/CaChe.php b/app/model/newModel/common/CaChe.php
new file mode 100644
index 00000000..622680b4
--- /dev/null
+++ b/app/model/newModel/common/CaChe.php
@@ -0,0 +1,97 @@
+ 'timestamp:Y-m-d H:i',
+ ];
+
+
+ /**
+ * Common: 记录分享信息
+ * Author: wu-hui
+ * Time: 2022/11/04 15:09
+ * @param $params
+ * @return array
+ * @throws \think\db\exception\DataNotFoundException
+ * @throws \think\db\exception\DbException
+ * @throws \think\db\exception\ModelNotFoundException
+ */
+ public function addInfo($params){
+ $pathInfo = $this->handlePath($params['share_path']);
+ $where['member_id'] = $params['member_id'];
+ $objectName = '';
+ // 信息处理
+ switch($pathInfo['path']){
+ // 文章详情分享
+ case '/pages_aijiu/article/detail':
+ $where['object_id'] = $pathInfo['article_id'];
+ $where['type'] = 1;
+ $objectName = (new Article())->where('article_id',$pathInfo['article_id'])->value('article_title');
+ // 记录文章分享信息
+ $articleRecordInfo = [
+ 'article_id' => $pathInfo['article_id'],
+ 'member_id' => $params['member_id'],
+ 'share_id' => $pathInfo['share_id']
+ ];
+ (new ArticleShareRecord())->addInfo($articleRecordInfo);
+ break;
+ }
+ // 记录分享 由于要统计每天的分享 所以这里一直为添加
+ $recordInfo = $this->where($where)->find();
+ if(!$recordInfo) $recordInfo = new self();
+ $recordInfo->object_title = $objectName;
+ $recordInfo->object_id = $where['object_id'];
+ $recordInfo->member_id = $where['member_id'];
+ $recordInfo->type = $where['type'];
+ $recordInfo->frequency += 1;
+ $recordInfo->save();
+
+ return $this->success();
+ }
+ /**
+ * Common: 处理url信息
+ * Author: wu-hui
+ * Time: 2022/11/04 15:05
+ * @param $path
+ * @return array
+ */
+ private function handlePath($path){
+ $fragment = parse_url($path)['fragment'];
+ $pathArr = explode('?',$fragment);
+ $pathInfo['path'] = $pathArr[0];
+ foreach(explode('&',$pathArr[1]) as $item){
+ $field = explode('=',$item);
+ $pathInfo[$field[0]] = $field[1];
+ }
+
+ return $pathInfo;
+ }
+ /**
+ * Common: 文章分享记录
+ * Author: wu-hui
+ * Time: 2022/11/07 14:16
+ * @return array
+ */
+ public function articleRecord($memberId){
+ // 参数获取
+ $page = input('page',1);
+ $pageSize = input('page_size',PAGE_LIST_ROWS);
+ $searchText = (string)trim(input('search_text'));
+ // 列表获取
+ $result = $this->alias('sr')
+ ->field('a.article_id,a.article_title,a.cover_img,sr.update_time as time')
+ ->join('article a','a.article_id = sr.object_id','LEFT')
+ ->where('sr.type',1)
+ ->where('a.status',1)
+ ->where('a.site_id',$this->site_id)
+ ->where('sr.member_id',$memberId)
+ ->when(strlen($searchText) > 0,function($query) use ($searchText){
+ $query->where('a.article_title','like',"%{$searchText}%");
+ })
+ ->where('sr.member_id',$memberId)
+ ->order('sr.update_time','DESC')
+ ->paginate(['list_rows' => $pageSize,'page' => $page]);
+ if($result) $result = $result->toArray();
+ $list = [
+ 'count' => $result['total'],
+ 'list' => $result['data'],
+ 'page_count' => $result['last_page'],
+ ];
+
+ return $this->success($list);
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/model/newModel/goods/Goods.php b/app/model/newModel/goods/Goods.php
new file mode 100644
index 00000000..15719b98
--- /dev/null
+++ b/app/model/newModel/goods/Goods.php
@@ -0,0 +1,220 @@
+field($field)
+ ->where('site_id',$this->site_id)
+ ->where('is_delete',0)
+ ->when(!empty($search),function($query) use ($search){
+ $query->where('goods_name','like',"%{$search}%");
+ })
+ ->when(!empty($ids),function($query) use ($ids){
+ $ids = explode(',',$ids);
+ $query->whereNotIn('goods_id',$ids);
+ })
+ ->order('sort DESC,goods_id DESC')
+ ->paginate(['list_rows' => $pageSize,'page' => $page]);
+ if($result) $result = $result->toArray();
+ $list = [
+ 'count' => $result['total'],
+ 'list' => $result['data'],
+ 'page_count' => $result['last_page'],
+ ];
+
+ return $this->success($list);
+ }
+ /**
+ * Common: 根据id数组获取商品信息
+ * Author: wu-hui
+ * Time: 2022/12/06 16:05
+ * @param $ids
+ * @param string[] $field
+ * @return array
+ * @throws \think\db\exception\DataNotFoundException
+ * @throws \think\db\exception\DbException
+ * @throws \think\db\exception\ModelNotFoundException
+ */
+ public function getGoodsList($ids,$field = ['*']){
+ $list = $this
+ ->field($field)
+ ->where('site_id',$this->site_id)
+ ->where('is_delete',0)
+ ->whereIn('goods_id',$ids)
+ ->order('sort DESC,goods_id DESC')
+ ->select();
+
+ return $list ? $list->toArray() : [];
+ }
+ /**
+ * Common: 购买商品 奖励积分
+ * Author: wu-hui
+ * Time: 2022/12/09 17:11
+ * @param $orderId
+ * @param $memberId
+ * @throws \think\db\exception\DataNotFoundException
+ * @throws \think\db\exception\DbException
+ * @throws \think\db\exception\ModelNotFoundException
+ */
+ public function buyGoodsRewardIntegral($orderId,$memberId){
+ Log::debug('购买商品获取积分 ------ START ------ 订单id:'.$orderId);
+ // 获取全部相关的商品
+ $orderGoodsList = Db::name('order_goods')
+ ->field('goods_id,num,real_goods_money')
+ ->where('order_id',$orderId)
+ ->select();
+ if($orderGoodsList) $orderGoodsList = $orderGoodsList->toArray();
+ $orderGoodsIds = array_column($orderGoodsList,'goods_id');
+ $orderGoodsList = array_column($orderGoodsList,NULL,'goods_id');
+ $field = [
+ 'goods_id',
+ 'integral_switch',
+ 'integral_type',
+ 'integral',
+ 'integral_proportion',
+ 'parent_integral_proportion',
+ 'parent_integral_switch',
+ 'parent_integral_type',
+ 'parent_integral',
+ ];
+ $goodsList = Db::name('goods')
+ ->field($field)
+ ->whereIn('goods_id',$orderGoodsIds)
+ ->select();
+ if($goodsList) $goodsList = $goodsList->toArray();
+ // 获取上级用户id
+ $parentMemberId = (new Fenxiao())->getParentMemberId($memberId);
+ // 循环处理积分奖励
+ $siteId = $this->site_id;
+ foreach($goodsList as $item){
+ // 基本参数
+ //Log::debug('购买商品获取积分 - 商品id:'.$item['goods_id']);
+ $buyNum = (int)$orderGoodsList[$item['goods_id']]['num'] <= 0 ? 1 : (int)(int)$orderGoodsList[$item['goods_id']]['num'];
+ $realGoodsMoney = (float)$orderGoodsList[$item['goods_id']]['real_goods_money'] <= 0 ? 1 : (float)$orderGoodsList[$item['goods_id']]['real_goods_money'];
+ // 下单用户奖励积分
+ if($item['integral_switch'] == 1) {
+ // 积分计算类型:0=百分比,1=固定金额
+ if($item['integral_type'] == 1) $integral = (float)$item['integral'] * $buyNum;
+ else $integral = $realGoodsMoney * (float)($item['integral_proportion'] / 100);
+ // 奖励发放
+ //Log::debug('购买商品获取积分 - 下单人奖励积分:'.$integral);
+ if($integral > 0){
+ $remark = '购买商品奖励积分';
+ (new MemberAccountModel())->addMemberAccount($siteId, $memberId, 'point', $integral, 'buy_goods', 0, $remark);
+ }
+ }
+ // 下单用户上级奖励积分
+ if($item['parent_integral_switch'] == 1 && $parentMemberId > 0) {
+ // 积分计算类型:0=百分比,1=固定金额
+ if($item['parent_integral_type'] == 1) $parentIntegral = (float)$item['parent_integral'] * $buyNum;
+ else $parentIntegral = $realGoodsMoney * (float)($item['parent_integral_proportion'] / 100);
+ // 奖励发放
+ //Log::debug('购买商品获取积分 - 上级奖励积分:'.$parentIntegral);
+ if($parentIntegral > 0){
+ $remark = '购买商品奖励积分';
+ (new MemberAccountModel())->addMemberAccount($siteId, $parentMemberId, 'point', $parentIntegral, 'buy_goods', 0, $remark);
+ }
+ }
+ }
+
+ Log::debug('购买商品获取积分 ------ END ------ 订单id:'.$orderId);
+ }
+ /**
+ * Common: 购买商品 赠送会员卡
+ * Author: wu-hui
+ * Time: 2022/12/13 10:38
+ * @param $orderId
+ * @param $memberId
+ * @return false|void
+ * @throws \think\db\exception\DataNotFoundException
+ * @throws \think\db\exception\DbException
+ * @throws \think\db\exception\ModelNotFoundException
+ */
+ public function buyGoodsGiveMemberLevel($orderId,$memberId){
+ Log::debug('购买商品赠送会员卡 - 订单id:'.$orderId);
+ // 获取全部的商品id
+ $orderGoodsIds = Db::name('order_goods')->where('order_id',$orderId)->column('goods_id');
+ $goodsMemberLevelList = Db::name('goods')
+ ->field('goods_id,give_member_level_id,give_member_level_index')
+ ->whereIn('goods_id',$orderGoodsIds)
+ ->where('give_member_level_id','>',0)
+ ->select();
+ if($goodsMemberLevelList) $goodsMemberLevelList = $goodsMemberLevelList->toArray();
+ else return false;
+ // 循环处理数据
+ $memberLevelOrderModel = new MemberLevelOrder();
+ foreach($goodsMemberLevelList as $item){
+ // 生成会员卡订单
+ $data = [
+ 'level_id' => $item['give_member_level_id'],
+ 'period_index' => $item['give_member_level_index'],
+ 'member_id' => $memberId,
+ 'site_id' => $this->site_id,
+ 'purchase_method' => 'exchange',// 购买方式
+ 'is_balance' => 0,
+ ];
+ $res = $memberLevelOrderModel->create($data);
+ $result = $memberLevelOrderModel->offlinePay($res['data']['out_trade_no']);
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/model/newModel/member/Member.php b/app/model/newModel/member/Member.php
new file mode 100644
index 00000000..d031ed1c
--- /dev/null
+++ b/app/model/newModel/member/Member.php
@@ -0,0 +1,250 @@
+businessCardSelect($memberSearch,$siteId);
+ break;
+ case 'distributor':
+ // 经销商用户选择器
+ $model = $this->distributorSelect($memberSearch,$siteId);
+ break;
+ default:
+ $model = $this->defaultSelect($memberSearch,$siteId);
+ }
+ $result = $model->paginate(['list_rows' => $pageSize,'page' => $page]);
+ if($result) $result = $result->toArray();
+ $list = [
+ 'count' => $result['total'],
+ 'list' => $result['data'],
+ 'page_count' => $result['last_page'],
+ ];
+ return $this->success($list);
+ }
+ /**
+ * Common: 用戶选择器 —— 默认
+ * Author: wu-hui
+ * Time: 2022/10/20 14:54
+ * @param $memberSearch
+ * @param $siteId
+ * @return Member
+ */
+ private function defaultSelect($memberSearch,$siteId){
+ $field = [
+ 'member_id',
+ 'headimg',
+ 'nickname',
+ 'point',
+ 'balance'
+ ];
+ return $this
+ ->field($field)
+ ->where('site_id',$siteId)
+ ->where('is_delete',0)
+ ->where( 'mobile|email|nickname', 'like', "%{$memberSearch}%");
+ }
+ /**
+ * Common: 用户选择器 —— 名片用户选择
+ * Author: wu-hui
+ * Time: 2022/10/20 14:52
+ * @param $memberSearch
+ * @param $siteId
+ * @return mixed
+ */
+ private function businessCardSelect($memberSearch,$siteId){
+ $field = [
+ 'a.member_id',
+ 'a.headimg',
+ 'a.nickname',
+ 'a.point',
+ 'a.balance',
+ 'min(b.status) as min_status',
+ 'min(b.delete_time)',
+ 'b.id'
+ ];
+
+ return $this
+ ->field($field)->alias('a')
+ ->join('business_card b','a.member_id = b.member_id','LEFT')
+ ->where('a.site_id',$siteId)
+ ->where('a.is_delete',0)
+ ->having('min(b.delete_time) > 0 OR min(b.member_id) IS NULL ')
+ ->where('a.mobile|a.email|a.nickname', 'like', "%{$memberSearch}%")
+ ->order('a.member_id DESC,b.id DESC')
+ ->group('a.member_id');
+ }
+ /**
+ * Common: 用户选择器 —— 经销商
+ * Author: wu-hui
+ * Time: 2022/11/21 18:06
+ * @param $memberSearch
+ * @param $siteId
+ * @return mixed
+ */
+ private function distributorSelect($memberSearch,$siteId){
+ $field = [
+ 'a.member_id',
+ 'a.headimg',
+ 'a.nickname',
+ 'a.point',
+ 'a.balance'
+ ];
+
+ return $this
+ ->field($field)->alias('a')
+ ->join('distributor b','a.member_id = b.member_id','LEFT')
+ ->where('a.site_id',$siteId)
+ ->where('a.is_delete',0)
+ ->having('min(b.delete_time) > 0 OR min(b.member_id) IS NULL ')
+ ->where('a.mobile|a.email|a.nickname', 'like', "%{$memberSearch}%")
+ ->order('a.member_id DESC,b.id DESC')
+ ->group('a.member_id');
+ }
+
+
+ /**
+ * Common: 获取文章详情中的显示用户信息
+ * Author: wu-hui
+ * Time: 2022/11/03 13:36
+ * @param $memberId
+ * @return array
+ * @throws \think\db\exception\DataNotFoundException
+ * @throws \think\db\exception\DbException
+ * @throws \think\db\exception\ModelNotFoundException
+ */
+ public function getArticleMemberInfo($memberId){
+ // 获取用户信息
+ $info = $this
+ ->field('member_id,share_member,nickname,mobile,headimg,is_fenxiao,level_expire_time')
+ ->where('member_id',$memberId)
+ ->find();
+ if($info) $info = $info->toArray();
+ // 当前用户存在推荐人且本人不是分销商-显示推荐人信息,不存在推荐人或者本人是分销商-显示本人信息
+ if($info['share_member'] > 0 && $info['is_fenxiao'] != 1){
+ $shareMember = $this
+ ->field('nickname,mobile,headimg')
+ ->where('member_id',$info['share_member'])
+ ->find();
+ $info['nickname'] = $shareMember['nickname'];
+ $info['mobile'] = $shareMember['mobile'];
+ $info['headimg'] = $shareMember['headimg'];
+ }
+ // 信息处理
+ $info['nickname'] = desensitizationHandle($info['nickname'],1,0);
+ $info['mobile'] = desensitizationHandle($info['mobile'],3,4);
+ // 当:本人不是分销商或者会员卡已过期-显示升级名片,本人是分销商且会员卡未过期-显示我要分享
+ if($info['is_fenxiao'] != 1 || $info['level_expire_time'] <= time())$info['show_type'] = 'upgrade';
+ else $info['show_type'] = 'share';
+
+ return $info;
+ }
+ /**
+ * Common: 获取个人名片中的个人中心的用户信息
+ * Author: wu-hui
+ * Time: 2022/11/04 16:42
+ * @param $memberId
+ * @return array
+ * @throws \think\db\exception\DbException
+ */
+ public function getBusinessCardInfo($memberId){
+ // 获取用户信息
+ $field = [
+ 'm.member_id',
+ 'm.headimg',
+ 'm.nickname as member_nickname',
+ 'm.level_expire_time',
+ 'm.member_level_name',
+ 'm.balance_money',
+ 'bc.id as card_id',
+ 'bc.is_show',
+ 'bc.auto_examine',
+ 'bc.agreement',
+ ];
+ $info = (new Cards())->getSingleInfo($memberId,$field)['data'];
+ $info['level_status'] = 0; // 未开通
+ // 会员卡是否有效
+ if($info['level_expire_time'] > time()) {
+ $info['level_status'] = 1; // 正常
+ $info['level_expire_time'] = date('Y-m-d',$info['level_expire_time']);
+ }else if($info['level_expire_time'] > 0 && $info['level_expire_time'] <= time()){
+ $info['level_status'] = 2; // 过期
+ }
+ // 获取统计信息
+ $info['total_share'] = (new ShareRecord())->where('member_id',$memberId)->where('type',1)->count();
+ $info['total_fabulous'] = (new ArticleFabulous())->where('member_id',$memberId)->count();
+ $info['total_history'] = (new ArticleHistory())->where('member_id',$memberId)->count();
+ $info['integral'] = (new Member())->where('member_id',$memberId)->value('point');
+ // 获取名片设置信息
+ $info['set'] = (new Config())->getConfigInfo('BUSINESS_CARD_SETTING');
+ // 获取可提现金额
+ $info['account'] = (float)$info['balance_money'];
+
+ return $this->success($info);
+ }
+
+ /**
+ * Common: 关联会员卡
+ * Author: wu-hui
+ * Time: 2022/10/28 17:19
+ * @return \think\model\relation\HasOne
+ */
+ public function level(){
+ return $this->hasOne(MemberLevel::class,'level_id','member_level');
+ }
+
+}
\ No newline at end of file
diff --git a/app/model/newModel/member/MemberLevel.php b/app/model/newModel/member/MemberLevel.php
new file mode 100644
index 00000000..585ec041
--- /dev/null
+++ b/app/model/newModel/member/MemberLevel.php
@@ -0,0 +1,73 @@
+ '周',
+ 'month' => '月',
+ 'quarter' => '季',
+ 'year' => '年',
+ ];
+
+ /**
+ * Common: 获取会员卡详细信息
+ * Author: wu-hui
+ * Time: 2022/12/13 17:27
+ * @param $id
+ * @param $index
+ * @return MemberLevel|array|mixed|\think\Model|null
+ * @throws \think\db\exception\DataNotFoundException
+ * @throws \think\db\exception\DbException
+ * @throws \think\db\exception\ModelNotFoundException
+ */
+ public function getDetails($id,$index){
+ $info = $this
+ ->field('level_id,level_name,charge_rule')
+ ->where('level_id',$id)
+ ->find();
+ if($info) $info = $info->toArray();
+ $info['current_rule'] = json_decode($info['charge_rule'],true)[$index];
+
+ return $info;
+ }
+ /**
+ * Common: 获取某个会员卡的规格
+ * Author: wu-hui
+ * Time: 2022/12/23 17:20
+ * @param $levelId
+ * @return array
+ */
+ public function getChargeRule($levelId){
+ $chargeRule = $this->where('level_id',$levelId)->value('charge_rule');
+ if(!$chargeRule) return [];
+ $levelName = $this->levelName;
+ return array_map(function($item) use ($levelName){
+ $item['unit'] = $levelName[$item['date-cycle']];
+ $item['title'] = $item['date-num'].$levelName[$item['date-cycle']].'卡';
+
+ return $item;
+ },json_decode($chargeRule,TRUE));
+ }
+
+
+
+
+}
\ No newline at end of file
diff --git a/app/model/newModel/member/MemberLevelPopularize.php b/app/model/newModel/member/MemberLevelPopularize.php
new file mode 100644
index 00000000..24dcadd9
--- /dev/null
+++ b/app/model/newModel/member/MemberLevelPopularize.php
@@ -0,0 +1,175 @@
+site_id],
+ ['member_id','=',$memberId],
+ ['level_id','=',$levelId],
+ ['level_index','=',$levelIndex],
+ ];
+ $info = self::where($where)->find();
+ if($info) {
+ self::update(['member_id'=>$memberId], $where);
+ }
+ else{
+ $data = [
+ 'member_id' => $memberId,
+ 'site_id' => $this->site_id,
+ 'level_id' => $levelId,
+ 'level_index' => $levelIndex,
+ ];
+
+ self::create($data);
+ }
+ }
+ /**
+ * Common: 获取可用名额
+ * Author: wu-hui
+ * Time: 2022/12/13 18:15
+ * @param $memberId
+ * @return int
+ * @throws \think\db\exception\DbException
+ */
+ public function availableQuotaTotal($memberId){
+ $set = (new Config())->getConfigInfo('SUPERMEMBER_POPULARIZE');
+ $fenXiaoId = Db::name('fenxiao')
+ ->where('member_id',$memberId)
+ ->where('is_delete',0)
+ ->value('fenxiao_id');
+ if($fenXiaoId <= 0) return 0;
+
+ return (int)Db::name('fenxiao')->alias('fx')
+ ->join('member_level_popularize mlp','mlp.member_id = fx.member_id','LEFT')
+ ->where('fx.parent',$fenXiaoId)
+ ->where('fx.is_delete',0)
+ ->where('mlp.is_use',0)
+ ->where('mlp.level_id',$set['give_member_level_id'])
+ ->where('mlp.level_index',$set['give_member_level_index'])
+ ->count();
+ }
+ /**
+ * Common: 获取全部下级
+ * Author: wu-hui
+ * Time: 2022/12/13 18:33
+ * @param $memberId
+ * @return array
+ * @throws \think\db\exception\DbException
+ */
+ public function getWholeSubMember($memberId){
+ // 基本信息
+ $page = input('page',1);
+ $pageSize = input('page_size',PAGE_LIST_ROWS);
+ $set = (new Config())->getConfigInfo('SUPERMEMBER_POPULARIZE');
+ $fenXiaoId = Db::name('fenxiao')
+ ->where('member_id',$memberId)
+ ->where('is_delete',0)
+ ->value('fenxiao_id');
+ if($fenXiaoId <= 0) return [];
+ // 列表获取
+ $field = [
+ 'm.member_id',
+ 'fx.fenxiao_id',
+ 'm.nickname',
+ 'm.headimg',
+ ];
+ $result = Db::name('fenxiao')->alias('fx')
+ ->join('member m','m.member_id = fx.member_id','LEFT')
+ ->field($field)
+ ->where('fx.parent',$fenXiaoId)
+ ->where('fx.is_delete',0)
+ ->order('fx.fenxiao_id','DESC')
+ ->paginate(['list_rows' => $pageSize,'page' => $page]);
+ if($result) {
+ $result = $result->toArray();
+ // 获取:用户是否购买指定会员卡
+ $memberIds = array_column($result['data'],'member_id');
+ $popularizeList = $this->whereIn('member_id',$memberIds)
+ ->where('level_id',$set['give_member_level_id'])
+ ->where('level_index',$set['give_member_level_index'])
+ ->column('id','member_id');
+ $result['data'] = array_map(function($item) use ($popularizeList){
+ $item['popularize_id'] = $popularizeList[$item['member_id']] ?? 0;
+
+ return $item;
+ },$result['data']);
+ }
+
+ $list = [
+ 'count' => $result['total'],
+ 'list' => $result['data'],
+ 'page_count' => $result['last_page'],
+ ];
+ return $this->success($list);
+ }
+ /**
+ * Common: 根据用户id获取最早的指定数量的购买指定会员卡的信息id
+ * Author: wu-hui
+ * Time: 2022/12/14 15:18
+ * @param $memberId
+ * @param $limit
+ * @return array|int
+ */
+ public function availableQuotaIds($memberId,$limit){
+ $set = (new Config())->getConfigInfo('SUPERMEMBER_POPULARIZE');
+ $fenXiaoId = Db::name('fenxiao')
+ ->where('member_id',$memberId)
+ ->where('is_delete',0)
+ ->value('fenxiao_id');
+ if($fenXiaoId <= 0) return [];
+
+ return Db::name('fenxiao')->alias('fx')
+ ->join('member_level_popularize mlp','mlp.member_id = fx.member_id','LEFT')
+ ->where('fx.parent',$fenXiaoId)
+ ->where('fx.is_delete',0)
+ ->where('mlp.is_use',0)
+ ->where('mlp.level_id',$set['give_member_level_id'])
+ ->where('mlp.level_index',$set['give_member_level_index'])
+ ->order('id','ASC')
+ ->limit($limit)
+ ->column('mlp.id');
+ }
+
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/app/model/newModel/member/MemberLevelPrize.php b/app/model/newModel/member/MemberLevelPrize.php
new file mode 100644
index 00000000..73ef62de
--- /dev/null
+++ b/app/model/newModel/member/MemberLevelPrize.php
@@ -0,0 +1,84 @@
+ $memberId,
+ 'site_id' => $this->site_id,
+ 'cart_id' => implode(',',$cardIds),
+ 'order_id' => 0,
+ 'is_get' => 0,
+ 'popularize_num' => $popularizeNum,
+ 'create_time' => time()
+ ];
+ $this->insert($data);
+ }
+ /**
+ * Common: 处理领奖名额信息
+ * Author: wu-hui
+ * Time: 2022/12/14 15:28
+ * @param $out_trade_no
+ * @param $cardIdStr
+ * @throws \think\db\exception\DataNotFoundException
+ * @throws \think\db\exception\DbException
+ * @throws \think\db\exception\ModelNotFoundException
+ */
+ public function handleInfo($out_trade_no,$cardIdStr){
+ // 获取信息
+ $orderInfo = Db::name('order')
+ ->field('order_id,member_id')
+ ->where('out_trade_no',$out_trade_no)
+ ->find();
+ $popularizeNum = $this->where('cart_id',$cardIdStr)->value('popularize_num');
+ // 处理名额信息
+ $ids = (new MemberLevelPopularize())->availableQuotaIds($orderInfo['member_id'],$popularizeNum);
+ (new MemberLevelPopularize())->whereIn('id',$ids)->update(['is_use' => 1]);
+ $this->where('cart_id',$cardIdStr)->update(['is_get'=>1]);
+ }
+ /**
+ * Common: 获取领奖次数
+ * Author: wu-hui
+ * Time: 2022/12/14 20:46
+ * @param $memberId
+ * @return int
+ * @throws \think\db\exception\DbException
+ */
+ public function isGetTotal($memberId){
+ return (int)$this->where('member_id',$memberId)->where('is_get',1)->count();
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/shop/controller/Goods.php b/app/shop/controller/Goods.php
index e1fe96f8..f0a577f0 100644
--- a/app/shop/controller/Goods.php
+++ b/app/shop/controller/Goods.php
@@ -1615,4 +1615,20 @@ class Goods extends BaseShop
return $express_template_list;
}
}
+
+
+ /**
+ * Common: 商品选择器
+ * Author: wu-hui
+ * Time: 2022/12/06 16:45
+ * @return array|mixed
+ * @throws \think\db\exception\DbException
+ */
+ public function selectGoods(){
+ if(request()->isAjax()) return (new \app\model\newModel\goods\Goods())->selectList();// 查询信息
+
+ $this->assign('ids',input('ids'));
+ return $this->fetch('goods/select_goods');
+ }
+
}
\ No newline at end of file
diff --git a/app/shop/view/goods/select_goods.html b/app/shop/view/goods/select_goods.html
new file mode 100644
index 00000000..6988ec1c
--- /dev/null
+++ b/app/shop/view/goods/select_goods.html
@@ -0,0 +1,86 @@
+{extend name="app/shop/view/base.html"/}
+{block name="resources"}
+
+{/block}
+
+{block name="body"}
+
+{/block}
+
+{block name="script"}
+
+{/block}
\ No newline at end of file