文件
mashangyoujiu/Application/Retail/Business/GeneralUser.class.php

340 行
14 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?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;
}
}