340 行
14 KiB
PHP
可执行文件
340 行
14 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace Retail\Business;
|
||
|
||
use Common\Model\PlusModel;
|
||
use Common\Model\RetailRechargeOrderModel;
|
||
use Common\Model\RetailSmallProgramUserModel;
|
||
use Common\Model\RetailVipChangeModel;
|
||
use Common\Model\RetailVipIntegralModel;
|
||
use Common\Model\RetailVipModel;
|
||
use LittleGift\Business\Vip;
|
||
use think\Exception;
|
||
|
||
use Common\Model\RetailStoreModel;
|
||
|
||
//[1.8.50]
|
||
|
||
/**
|
||
* 普通会员
|
||
* Class GeneralUser
|
||
* getGeneralUserList 获取普通会员列表
|
||
* changeXcxInfo 变更小程序用户
|
||
* @package Retail\Business
|
||
* @author GuYunQinFeng
|
||
*/
|
||
class GeneralUser
|
||
{
|
||
/**
|
||
* 获取普通会员列表
|
||
* @param param
|
||
* [
|
||
* merchant_id 商户id
|
||
* page 页码
|
||
* limit 页长
|
||
* search_info [
|
||
* time 时间搜索
|
||
* nick_name 昵称搜索
|
||
* ]
|
||
* ]
|
||
*/
|
||
public function getGeneralUserList($param)
|
||
{
|
||
$XcxUserModel = new RetailSmallProgramUserModel();
|
||
$merchant_id = $param['merchant_id'];
|
||
$search_info = json_decode($param['search_info'], true);
|
||
$timeArr = $search_info['time'];
|
||
$nick_name = $search_info['nick_name'];
|
||
$page = $param['page'];
|
||
$limit = $param['limit'];
|
||
|
||
$map = [
|
||
'merchant_id' => $merchant_id,
|
||
'login_state' => 1,
|
||
'vid' => [['exp', 'is null'], ['eq', 0], 'or'],
|
||
'plus_vip_id' => [['exp', 'is null'], ['eq', 0], 'or'],
|
||
];
|
||
if (!empty($timeArr)) {
|
||
$map['add_time'] = ['between', [strtotime($timeArr[0]), strtotime($timeArr[1])]];
|
||
}
|
||
if (trim($nick_name)) {
|
||
$map['nickname'] = ['like', '%' . trim($nick_name) . '%'];
|
||
}
|
||
|
||
//所属门店搜索:store_id,门店id
|
||
if (isset($search_info['store_id']) && $search_info['store_id'] !== '') {
|
||
$map['store_id'] = $search_info['store_id'];
|
||
}
|
||
|
||
if ($page && $limit) {
|
||
// 获取列表
|
||
$list = $XcxUserModel->getSelect($map, '', 'id desc', $page . ',' . $limit);
|
||
} else {
|
||
// 导出
|
||
$list = $XcxUserModel->getSelect($map, '');
|
||
}
|
||
$retailStoreModel = new RetailStoreModel();//门店表
|
||
$field = [
|
||
'storetag',
|
||
];
|
||
foreach ($list as &$val) {
|
||
$val['add_time'] = date('Y-m-d H:i:s', $val['add_time']);
|
||
$val['link_name'] = $val['link_name'] ? $val['link_name'] : '未设置';
|
||
$val['mobile_phone'] = $val['mobile_phone'] ? $val['mobile_phone'] : '未设置';
|
||
|
||
$where = [
|
||
'id' => $val['store_id'],
|
||
];
|
||
$retailStore = $retailStoreModel->getOrderFind($where, $field);//门店名称
|
||
$val['storetag'] = $retailStore['storetag'];
|
||
|
||
}
|
||
$count = $XcxUserModel->getCount($map);
|
||
$result = [
|
||
'status' => 1,
|
||
'list' => empty($list) ? [] : $list,
|
||
'count' => $count ? intval($count) : 0,
|
||
];
|
||
return $result;
|
||
}
|
||
|
||
/**
|
||
* 变更小程序用户
|
||
* @param edit_form 表单信息
|
||
* @param param [
|
||
* merchant_id 商户id
|
||
* operator_id 操作人员id
|
||
* platform_type 商户平台类型 1默认系统 2微礼平台
|
||
* ]
|
||
* @param type 1 商户后台 2 门店后台
|
||
*/
|
||
public function changeXcxInfo($edit_form, $param, $type)
|
||
{
|
||
$merchant_id = $param['merchant_id'];
|
||
$operator_id = $param['operator_id']; //操作人员id
|
||
$platform_type = $param['platform_type'];
|
||
switch ($type) {
|
||
case 1:
|
||
$recharge_user_type = 1; // 充值人员类型
|
||
$recharge_scene_type = 2; // 充值变动场景
|
||
$vip_change_operator = 1; // 操作记录人员类型
|
||
$log_type = 3; //日志类型
|
||
break;
|
||
case 2:
|
||
$recharge_user_type = 2;
|
||
$recharge_scene_type = 3;
|
||
$vip_change_operator = 2;
|
||
$log_type = 4;
|
||
break;
|
||
default:
|
||
// 默认商户
|
||
$recharge_user_type = 1;
|
||
$recharge_scene_type = 2;
|
||
$vip_change_operator = 1;
|
||
$log_type = 3;
|
||
break;
|
||
}
|
||
$time = time();
|
||
// 提交数据
|
||
if (!$edit_form['id'] || $edit_form['id'] == 0) {
|
||
return ['status' => 0, 'msg' => '提交失败,请刷新重试'];
|
||
}
|
||
// 查询小程序用户状态
|
||
$XcxUserModel = new RetailSmallProgramUserModel();
|
||
$infoMap['id'] = $edit_form['id'];
|
||
$infoMap['merchant_id'] = $merchant_id;
|
||
$infoMap['vid'] = [['exp', 'is null'], ['eq', 0], 'or'];
|
||
$infoMap['plus_vip_id'] = [['exp', 'is null'], ['eq', 0], 'or'];
|
||
$userInfo = $XcxUserModel->getFind($infoMap);
|
||
if (!$userInfo) {
|
||
return ['status' => 0, 'msg' => '用户查询失败,请检查用户状态'];
|
||
}
|
||
// 判断表单必填
|
||
if (!$edit_form['type'] || !$edit_form['name'] || !$edit_form['mobile_phone'] || ($edit_form['balance'] && $edit_form['balance'] < 0) || ($edit_form['type'] == 2 && !$edit_form['end_time'])) {
|
||
return ['status' => 0, 'msg' => '请确认表单提交是否正确'];
|
||
}
|
||
// 查询手机号是否可用
|
||
$phoneVerify['mobile_phone'] = $edit_form['mobile_phone'];
|
||
$phoneVerify['status'] = ['neq', 2]; // 2.删除的会员
|
||
$phoneVerify['merchantid'] = $merchant_id;
|
||
$RetailVipModel = new RetailVipModel();
|
||
$mobileRepeat = $RetailVipModel->getFindField($phoneVerify);
|
||
if ($mobileRepeat) {
|
||
return ['status' => 0, 'msg' => '该手机号已被注册,请更换手机号'];
|
||
}
|
||
if (!$edit_form['grade_id'] || $edit_form['grade_id'] === '') {
|
||
$newVipData['grade_integral'] = 0;
|
||
$grade_name = '无等级';
|
||
} else {
|
||
// 查询等级
|
||
$RetailVipIntegralModel = new RetailVipIntegralModel();
|
||
$find2 = $RetailVipIntegralModel->getFind(['id' => $edit_form['grade_id']], 'min_integral,cardname');
|
||
if (!$find2) {
|
||
return ['status' => 0, 'msg' => '提交失败,请检查等级是否有变动'];
|
||
} else {
|
||
$newVipData['grade_integral'] = $find2['min_integral'];
|
||
$grade_name = $find2['cardname'];
|
||
}
|
||
}
|
||
$pass = substr(trim($edit_form['mobile_phone']), -6);
|
||
$newVipData['password'] = createPassword($pass, intval($time));
|
||
$newVipData['mobile_phone'] = $edit_form['mobile_phone'];
|
||
$newVipData['balance'] = $edit_form['balance'] ? $edit_form['balance'] : 0;
|
||
$newVipData['merchantid'] = $merchant_id;
|
||
$newVipData['nickname'] = $edit_form['nickname'] ? $edit_form['nickname'] : '';
|
||
$newVipData['storeid'] = $edit_form['store_id'];
|
||
$newVipData['name'] = $edit_form['name'];
|
||
$newVipData['birthday'] = $edit_form['birthday'] ? $edit_form['birthday'] : null;
|
||
$newVipData['addtime'] = $time;
|
||
if ($platform_type == 2) {
|
||
//Q3平台
|
||
$StoreModel = new RetailStoreModel();
|
||
$third_code = $StoreModel->getFindField([
|
||
'id' => $edit_form['store_id']
|
||
], 'third_code');
|
||
$thirdData = [
|
||
'merchant_id' => $merchant_id,
|
||
'vip_info' => [
|
||
'Code' => $edit_form['mobile_phone'],
|
||
'Source' => '后台添加',
|
||
'Customer_Code' => $third_code,
|
||
'Name' => $edit_form['name']
|
||
]
|
||
];
|
||
if (!empty($edit_form['birthday'])) {
|
||
$thirdData['vip_info']['DateOfBirth'] = "/Date(" . (newStrToTime($edit_form['birthday']) * 1000) . "+0800)/";
|
||
}
|
||
$thirdData['vip_info'] = json_encode($thirdData['vip_info']);
|
||
$ThirdVipClass = new Vip();
|
||
$thirdResult = $ThirdVipClass->vipInsert($thirdData);
|
||
if ($thirdResult['status'] == 0) {
|
||
return ['status' => 0, 'msg' => 'Q3 ERP平台添加失败' . $thirdResult['message']];
|
||
}
|
||
if (!empty($thirdResult['data']) && !empty($thirdResult['data']['Code'])) {
|
||
//Q3已存在更新Q3的会员信息
|
||
$third_vip = $thirdResult['data'];
|
||
if (!empty($third_vip['Source'])) {
|
||
$newVipData['source_channel'] = $third_vip['Source'];
|
||
}
|
||
if (!empty($third_vip['Name'])) {
|
||
$newVipData['name'] = $third_vip['Name'];
|
||
}
|
||
if (!empty($third_vip['DateOfBirth'])) {
|
||
$newVipData['birthday'] = date('Y-m-d', substr($third_vip['DateOfBirth'], 6, 10));
|
||
}
|
||
if ($third_code != $third_vip['Customer_Code']) {
|
||
$StoreModel = new RetailStoreModel();
|
||
$new_store_id = $StoreModel->getFindField([
|
||
'third_code' => $third_vip['Customer_Code'],
|
||
'merchantid' => $merchant_id,
|
||
'state' => 0
|
||
], 'id');
|
||
if (!empty($new_store_id)) {
|
||
$newVipData['storeid'] = $new_store_id;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
// 添加会员
|
||
$vip_id = $RetailVipModel->addOrder($newVipData);
|
||
if (!$vip_id) {
|
||
return ['status' => 0, 'msg' => '变更失败'];
|
||
}
|
||
// 余额大于0添加记录(余额记录,变更记录)
|
||
$error_journal = array();
|
||
if ($edit_form['balance'] > 0) {
|
||
$newRechargeData['vid'] = $vip_id;
|
||
$newRechargeData['status'] = 1;
|
||
$newRechargeData['money'] = 0;
|
||
$newRechargeData['all_money'] = $edit_form['balance'];
|
||
$newRechargeData['scene_type'] = $recharge_scene_type; //变动场景 1收银机 2商户后台 3门店后台 4小程序 5公众号
|
||
$newRechargeData['type'] = 3; //变动类型 1充值 2消费 3编辑增加 4编辑减少 5退款增加 6红包充值 7大转盘充值 8礼品卡充值
|
||
$newRechargeData['store_id'] = 0;
|
||
$newRechargeData['add_time'] = $time;
|
||
$newRechargeData['remark'] = '普通成员角色更换赠送';
|
||
$newRechargeData['state'] = 1;
|
||
$newRechargeData['merchant_id'] = $merchant_id;
|
||
$newRechargeData['user_type'] = $recharge_user_type;
|
||
$RetailRechargeOrderModel = new RetailRechargeOrderModel();
|
||
$rechargeAddResult = $RetailRechargeOrderModel->addOrder($newRechargeData);
|
||
if (!$rechargeAddResult) {
|
||
array_push($error_journal, '余额记录添加失败');
|
||
}
|
||
}
|
||
// 修改小程序用户类型
|
||
$xcxUpdate['vid'] = $vip_id;
|
||
if ($edit_form['type'] == 2) {
|
||
$xcxUpdate['type'] = 2;
|
||
} else {
|
||
$xcxUpdate['type'] = 3;
|
||
}
|
||
$xcxUpdate['store_id'] = $edit_form['store_id'];
|
||
$xcxUpdateResult = $XcxUserModel->updateOrder(['id' => $edit_form['id']], $xcxUpdate);
|
||
if (!$xcxUpdateResult) {
|
||
return ['status' => 0, 'msg' => '用户变更失败'];
|
||
}
|
||
// 添加plus会员
|
||
if ($edit_form['type'] == 2) {
|
||
$newPlusData['vip_id'] = $vip_id;
|
||
$newPlusData['xcx_vip_id'] = $edit_form['id'];
|
||
$newPlusData['merchantid'] = $merchant_id;
|
||
$newPlusData['storeid'] = $edit_form['store_id'];
|
||
$newPlusData['addtime'] = $time;
|
||
$newPlusData['start_time'] = $time;
|
||
$newPlusData['end_time'] = strtotime($edit_form['end_time']);
|
||
$newPlusData['status'] = 1;
|
||
$PlusModel = new PlusModel();
|
||
$plus_id = $PlusModel->addPlus($newPlusData);
|
||
if (!$plus_id) {
|
||
return ['status' => 0, 'msg' => 'plus会员变更失败'];
|
||
}
|
||
// 修改用户、会员状态
|
||
$plusChangeResult = $XcxUserModel->updateOrder(['id' => $edit_form['id']], ['plus_vip_id' => $plus_id]);
|
||
if (!$plusChangeResult) {
|
||
array_push($error_journal, '用户plus状态修改失败');
|
||
}
|
||
$updateInfo = ['plus_id' => $plus_id, 'plus_type' => 2, 'plus_state' => 1, 'nickname' => $userInfo['nickname']];
|
||
$save3 = $RetailVipModel->updateOrder(['id' => $vip_id], $updateInfo);
|
||
if (!$save3) {
|
||
array_push($error_journal, '常规会员plus状态修改失败');
|
||
}
|
||
$grade_name = 'plus会员';
|
||
}
|
||
// 判断余额
|
||
if ($edit_form['balance'] && $edit_form['balance'] > 0) {
|
||
$newVipChangeData['after_balance'] = $edit_form['balance'];
|
||
$newVipChangeData['before_balance'] = 0;
|
||
}
|
||
// 判断等级
|
||
if ($grade_name) {
|
||
$newVipChangeData['before_grade'] = '无等级';
|
||
$newVipChangeData['after_grade'] = $grade_name;
|
||
}
|
||
$newVipChangeData['operator'] = $vip_change_operator;
|
||
$newVipChangeData['operator_id'] = $operator_id;
|
||
$newVipChangeData['merchant_id'] = $merchant_id;
|
||
$newVipChangeData['after_phone'] = $edit_form['mobile_phone'];
|
||
$newVipChangeData['add_time'] = $time;
|
||
$newVipChangeData['vip_id'] = $vip_id;
|
||
// 如果变更为Plus会员 存结束时间
|
||
if ($edit_form['type'] == 2) $newVipChangeData['after_plus_end_time'] = $edit_form['end_time'];
|
||
$RetailVipChangeModel = new RetailVipChangeModel();
|
||
$add5 = $RetailVipChangeModel->addOrder($newVipChangeData);
|
||
if (!$add5) {
|
||
array_push($error_journal, 'plus记录添加失败');
|
||
}
|
||
if (!$error_journal) {
|
||
$res = ['status' => 1, 'msg' => '变更成功'];
|
||
//操作日志记录
|
||
$source = 0; //请求来源: 0pc系统 1小助手
|
||
$type = $log_type; //平台:1合伙人端 2代理商端 3商户端 4门店端
|
||
$request_data = json_encode($edit_form); //请求参数 json数据
|
||
$desc = '普通用户进行用户信息变更'; //操作行为描述
|
||
action_log($source, $type, $request_data, $desc);
|
||
} else {
|
||
$res = ['status' => 2, 'error_journal' => $error_journal];
|
||
}
|
||
return $res;
|
||
}
|
||
}
|