Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
stock_new
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sugar
stock_new
Commits
a3b91047
Commit
a3b91047
authored
Jun 19, 2024
by
twj
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
EsopPlan
parent
11dfa27c
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
279 additions
and
215 deletions
+279
-215
application/member/model/Member.php
application/member/model/Member.php
+165
-143
application/money/admin/Esopplan.php
application/money/admin/Esopplan.php
+87
-69
application/money/model/EsopPlan.php
application/money/model/EsopPlan.php
+1
-1
application/stock/model/StockList.php
application/stock/model/StockList.php
+26
-2
No files found.
application/member/model/Member.php
View file @
a3b91047
<?php
namespace
app\member\model
;
use
think\helper\Hash
;
use
app\member\model\Role
as
RoleModel
;
use
think\model
;
use
think\Db
;
class
Member
extends
Model
namespace
app\member\model
;
use
think\helper\Hash
;
use
app\member\model\Role
as
RoleModel
;
use
think\model
;
use
think\Db
;
class
Member
extends
Model
{
// 设置当前模型对应的完整数据表名称
protected
$table
=
'__MEMBER__'
;
// 自动写入时间戳
protected
$autoWriteTimestamp
=
true
;
// 对密码进行加密
public
function
setPasswdAttr
(
$value
)
{
// 设置当前模型对应的完整数据表名称
protected
$table
=
'__MEMBER__'
;
// 自动写入时间戳
protected
$autoWriteTimestamp
=
true
;
// 对密码进行加密
public
function
setPasswdAttr
(
$value
)
{
return
Hash
::
make
((
string
)
$value
);
}
public
function
setPaywdAttr
(
$value
)
{
return
Hash
::
make
((
string
)
$value
);
}
return
Hash
::
make
((
string
)
$value
);
}
// 获取注册ip
public
function
setAddIpAttr
()
{
return
get_client_ip
(
1
);
}
public
function
setPaywdAttr
(
$value
)
{
return
Hash
::
make
((
string
)
$value
);
}
/**
* 自动登录
* @param object $member 用户对象
* @author 路人甲乙 <4853332099@qq.com>
* @return bool|int
*/
public
function
autoLogin
(
$member
)
{
// 记录登录SESSION和COOKIES
$auth
=
array
(
'mid'
=>
$member
->
id
,
'mobile'
=>
$member
->
mobile
,
'last_login_time'
=>
$member
->
last_login_time
,
'last_login_ip'
=>
get_client_ip
(
1
),
);
session
(
'member_auth'
,
$auth
);
session
(
'member_auth_sign'
,
data_auth_sign
(
$auth
));
return
$member
->
id
;
}
// 获取注册ip
public
function
setAddIpAttr
()
{
return
get_client_ip
(
1
);
}
/**
* 用户登录
* @param string $mobile 手机号
* @param string $password 密码
* @author 张继立 <404851763@qq.com>
* @return bool|mixed
*/
public
function
login
(
$mobile
=
''
,
$password
=
''
)
{
$mobile
=
trim
(
$mobile
);
$password
=
trim
(
$password
);
if
(
preg_match
(
"/^1\d
{
10
}
$/"
,
$mobile
))
{
// 手机号登录
$map
[
'mobile'
]
=
$mobile
;
}
else
{
$this
->
error
=
'请用手机号码登录'
;
return
false
;
}
/**
* 自动登录
* @param object $member 用户对象
* @author 路人甲乙 <4853332099@qq.com>
* @return bool|int
*/
public
function
autoLogin
(
$member
)
{
// 记录登录SESSION和COOKIES
$auth
=
array
(
'mid'
=>
$member
->
id
,
'mobile'
=>
$member
->
mobile
,
'last_login_time'
=>
$member
->
last_login_time
,
'last_login_ip'
=>
get_client_ip
(
1
),
);
session
(
'member_auth'
,
$auth
);
session
(
'member_auth_sign'
,
data_auth_sign
(
$auth
));
return
$member
->
id
;
}
/**
* 用户登录
* @param string $mobile 手机号
* @param string $password 密码
* @author 张继立 <404851763@qq.com>
* @return bool|mixed
*/
public
function
login
(
$mobile
=
''
,
$password
=
''
)
{
$mobile
=
trim
(
$mobile
);
$password
=
trim
(
$password
);
$map
[
'status'
]
=
1
;
$map
[
'is_del'
]
=
0
;
if
(
preg_match
(
"/^1\d
{
10
}
$/"
,
$mobile
))
{
// 手机号登录
$map
[
'mobile'
]
=
$mobile
;
}
else
{
$this
->
error
=
'请用手机号码登录'
;
return
false
;
}
// 查找用户
$member
=
$this
::
get
(
$map
);
if
(
!
$member
)
{
$this
->
error
=
'用户不存在或被禁用!'
;
$map
[
'status'
]
=
1
;
$map
[
'is_del'
]
=
0
;
// 查找用户
$member
=
$this
::
get
(
$map
);
if
(
!
$member
)
{
$this
->
error
=
'用户不存在或被禁用!'
;
}
else
{
if
(
!
Hash
::
check
((
string
)
$password
,
$member
[
'passwd'
]))
{
$this
->
error
=
'用户名或密码错误!'
;
}
else
{
if
(
!
Hash
::
check
((
string
)
$password
,
$member
[
'passwd'
]))
{
$this
->
error
=
'用户名或密码错误!'
;
$mid
=
$member
[
'id'
];
// 更新登录信息
$member
[
'last_login_time'
]
=
request
()
->
time
();
$member
[
'last_login_ip'
]
=
get_client_ip
(
1
);
if
(
$member
->
save
())
{
// 自动登录
return
$this
->
autoLogin
(
$this
::
get
(
$mid
));
}
else
{
$mid
=
$member
[
'id'
];
// 更新登录信息
$member
[
'last_login_time'
]
=
request
()
->
time
();
$member
[
'last_login_ip'
]
=
get_client_ip
(
1
);
if
(
$member
->
save
())
{
// 自动登录
return
$this
->
autoLogin
(
$this
::
get
(
$mid
));
}
else
{
// 更新登录信息失败
$this
->
error
=
'登录信息更新失败,请重新登录!'
;
return
false
;
}
// 更新登录信息失败
$this
->
error
=
'登录信息更新失败,请重新登录!'
;
return
false
;
}
}
return
false
;
}
return
false
;
}
/**
* 根据会员ID获取会员基本信息
* @param array $id 会员ID
* @author 路人甲乙
* @return mixed
*/
public
static
function
getMemberInfoByID
(
$id
=
null
)
{
$where
[
'm.id'
]
=
$id
;
//会员ID
$where
[
'm.status'
]
=
1
;
//会员状态
$data
=
self
::
view
(
'member m'
,
true
)
->
view
(
"money"
,
'account,freeze,operate_account,bond_account'
,
'money.mid=m.id'
,
'left'
)
->
where
(
$where
)
->
find
();
return
$data
;
}
/**
* 根据会员手机号获取会员基本信息
* @param array $id 会员ID
* @author 路人甲乙
* @return mixed
*/
public
static
function
getMemberInfoByMobile
(
$mobile
=
null
)
{
$where
[
'm.mobile'
]
=
$mobile
;
//会员手机号
$where
[
'm.status'
]
=
1
;
//会员状态
$data
=
self
::
view
(
'member m'
,
true
)
->
view
(
"money"
,
'account,freeze,operate_account,bond_account'
,
'money.mid=m.id'
,
'left'
)
->
where
(
$where
)
->
find
();
return
$data
;
/**
* 根据会员ID获取会员基本信息
* @param array $id 会员ID
* @author 路人甲乙
* @return mixed
*/
public
static
function
getMemberInfoByID
(
$id
=
null
)
{
$where
[
'm.id'
]
=
$id
;
//会员ID
$where
[
'm.status'
]
=
1
;
//会员状态
$data
=
self
::
view
(
'member m'
,
true
)
->
view
(
"money"
,
'account,freeze,operate_account,bond_account'
,
'money.mid=m.id'
,
'left'
)
->
where
(
$where
)
->
find
();
return
$data
;
}
/**
* 根据会员手机号获取会员基本信息
* @param array $id 会员ID
* @author 路人甲乙
* @return mixed
*/
public
static
function
getMemberInfoByMobile
(
$mobile
=
null
)
{
$where
[
'm.mobile'
]
=
$mobile
;
//会员手机号
$where
[
'm.status'
]
=
1
;
//会员状态
$data
=
self
::
view
(
'member m'
,
true
)
->
view
(
"money"
,
'account,freeze,operate_account,bond_account'
,
'money.mid=m.id'
,
'left'
)
->
where
(
$where
)
->
find
();
return
$data
;
}
/**
* 保存注册数据
* @param [type] $data [description]
* @return [type] [description]
* @author 张继立 <404851763@qq.com>
*/
public
static
function
saveData
(
$data
)
{
$sdata
[
'mobile'
]
=
$data
[
'mobile'
];
$sdata
[
'passwd'
]
=
$data
[
'password'
];
$sdata
[
'paywd'
]
=
substr
(
$data
[
'mobile'
],
-
6
,
6
);
$sdata
[
'pid'
]
=
0
;
$sdata
[
'agent_far'
]
=
intval
(
$data
[
'agent_far'
]);
$sdata
[
'create_ip'
]
=
get_client_ip
(
1
);
$sdata
[
'create_time'
]
=
time
();
$result
=
self
::
create
(
$sdata
);
if
(
$result
->
id
)
{
Db
(
'money'
)
->
insert
([
'mid'
=>
$result
->
id
]);
$sdata
[
'id'
]
=
$result
->
id
;
return
[
'status'
=>
1
,
'message'
=>
'注册成功'
,
'data'
=>
$sdata
];
}
else
{
return
[
'status'
=>
0
,
'message'
=>
'注册失败'
];
}
/**
* 保存注册数据
* @param [type] $data [description]
* @return [type] [description]
* @author 张继立 <404851763@qq.com>
*/
public
static
function
saveData
(
$data
)
{
$sdata
[
'mobile'
]
=
$data
[
'mobile'
];
$sdata
[
'passwd'
]
=
$data
[
'password'
];
$sdata
[
'paywd'
]
=
substr
(
$data
[
'mobile'
],
-
6
,
6
);
$sdata
[
'pid'
]
=
0
;
$sdata
[
'agent_far'
]
=
intval
(
$data
[
'agent_far'
]);
$sdata
[
'create_ip'
]
=
get_client_ip
(
1
);
$sdata
[
'create_time'
]
=
time
();
$result
=
self
::
create
(
$sdata
);
if
(
$result
->
id
){
Db
(
'money'
)
->
insert
([
'mid'
=>
$result
->
id
]);
$sdata
[
'id'
]
=
$result
->
id
;
return
[
'status'
=>
1
,
'message'
=>
'注册成功'
,
'data'
=>
$sdata
];
}
else
{
return
[
'status'
=>
0
,
'message'
=>
'注册失败'
];
}
/**
* 获取用户列表(下拉选择时使用)
* @param
* @author 路人甲乙
* @return mixed
*/
public
static
function
getMemberList
()
{
$list
=
[];
$where
[
'status'
]
=
1
;
$data_list
=
Db
::
name
(
'member'
)
->
where
(
$where
)
->
column
(
true
,
'id'
);
if
(
!
is_null
(
$data_list
))
{
foreach
(
$data_list
as
$v
)
{
$list
[
$v
[
'id'
]]
=
$v
[
'mobile'
];
}
}
else
{
$list
=
[];
}
return
$list
;
}
?>
}
application/money/admin/Esopplan.php
View file @
a3b91047
...
...
@@ -5,8 +5,10 @@ namespace app\money\admin;
use
app\admin\controller\Admin
;
use
app\common\builder\ZBuilder
;
use
app\money\model\EsopPlan
as
EsopPlanModel
;
use
app\member\model\Member
as
MemberModel
;
use
app\stock\model\StockList
as
StockListModel
;
use
think\Db
;
use
think\Hook
;
use
think\Hook
;
use
think\Cache
;
/**
...
...
@@ -21,108 +23,124 @@ class Esopplan extends Admin
*/
public
function
index
()
{
cookie
(
'__forward__'
,
$_SERVER
[
'REQUEST_URI'
]);
cookie
(
'__forward__'
,
$_SERVER
[
'REQUEST_URI'
]);
// 获取查询条件
$map
=
$this
->
getMap
();
$order
=
$this
->
getOrder
();
$order
=
$this
->
getOrder
();
empty
(
$order
)
&&
$order
=
'id desc'
;
// 数据列表
$data_list
=
EsopPlanModel
::
getAll
(
$map
,
$order
);
// 分页数据
// 分页数据
$page
=
$data_list
->
render
();
if
(
empty
(
$_SERVER
[
"QUERY_STRING"
])){
$excel_url
=
substr
(
http
()
.
$_SERVER
[
"SERVER_NAME"
]
.
$_SERVER
[
"REQUEST_URI"
],
0
,
-
5
)
.
"_export"
;
}
else
{
$excel_url
=
substr
(
http
()
.
$_SERVER
[
"SERVER_NAME"
]
.
$_SERVER
[
"PHP_SELF"
],
0
,
-
5
)
.
"_export?"
.
$_SERVER
[
"QUERY_STRING"
];
if
(
empty
(
$_SERVER
[
"QUERY_STRING"
]))
{
$excel_url
=
substr
(
http
()
.
$_SERVER
[
"SERVER_NAME"
]
.
$_SERVER
[
"REQUEST_URI"
],
0
,
-
5
)
.
"_export"
;
}
else
{
$excel_url
=
substr
(
http
()
.
$_SERVER
[
"SERVER_NAME"
]
.
$_SERVER
[
"PHP_SELF"
],
0
,
-
5
)
.
"_export?"
.
$_SERVER
[
"QUERY_STRING"
];
}
$btn_excel
=
[
'title'
=>
'导出EXCEL表'
,
'icon'
=>
'fa fa-fw fa-download'
,
'href'
=>
url
(
$excel_url
,
''
,
''
)
'href'
=>
url
(
$excel_url
,
''
,
''
)
];
return
ZBuilder
::
make
(
'table'
)
->
setSearch
([
'mid'
=>
'用户ID'
,
'member.name'
=>
'姓名'
,
'member.mobile'
=>
'手机号'
])
// 设置搜索框
return
ZBuilder
::
make
(
'table'
)
->
setSearch
([
'mid'
=>
'用户ID'
,
'member.name'
=>
'姓名'
,
'member.mobile'
=>
'手机号'
])
// 设置搜索框
->
addColumns
([
// 批量添加数据列
[
'id'
,
'ID'
],
[
'mobile'
,
'手机号'
],
[
'name'
,
'姓名'
],
[
'title'
,
'股票'
],
[
'title'
,
'股票'
],
[
'account'
,
'可用期权'
],
[
'plan_account'
,
'期权总值'
],
[
'remain_account'
,
'待释放'
],
[
'release_account'
,
'已释放'
],
[
'duration'
,
'总释放天数'
],
[
'duration'
,
'总释放天数'
],
[
'days'
,
'已释放天数'
],
[
'release_time'
,
'开始释放时间'
],
[
'release_time'
,
'开始释放时间'
],
[
'create_time'
,
'创建时间'
],
[
'status'
,
'状态'
,
'switch'
],
])
->
hideCheckbox
()
->
setTableName
(
'plan'
)
->
addTopButton
(
'custem'
,
$btn_excel
)
->
addRightButtons
([
'edit'
])
// 批量添加右侧按钮
->
setTableName
(
'esop_plan'
)
->
addTopButton
(
'custem'
,
$btn_excel
)
->
addTopButtons
(
'add'
)
->
addRightButton
(
'edit'
)
->
addRightButton
(
'delete'
)
->
addOrder
(
'id,create_time,release_time'
)
->
setRowList
(
$data_list
)
->
setRowList
(
$data_list
)
->
fetch
();
// 渲染模板
}
public
function
index_export
(){
// 获取查询条件
$map
=
$this
->
getMap
();
$order
=
$this
->
getOrder
();
empty
(
$order
)
&&
$order
=
'id desc'
;
// 数据列表
$xlsData
=
EsopPlanModel
::
getAll
(
$map
,
$order
);
$title
=
"期权计划列表"
;
$arrHeader
=
array
(
'ID'
,
'手机号'
,
'姓名'
,
'股票'
,
'可用期权'
,
'期权总值'
,
'待释放'
,
'已释放'
,
'总释放天数'
,
'已释放天数'
,
'开始释放时间'
,
'创建时间'
,
'状态'
);
$fields
=
array
(
'id'
,
'mobile'
,
'name'
,
'title'
,
'account'
,
'plan_account'
,
'remain_account'
,
'release_account'
,
'duration'
,
'days'
,
'release_time'
,
'create_time'
,
'status'
);
export
(
$arrHeader
,
$fields
,
$xlsData
,
$title
);
}
public
function
quickEdit
(
$record
=
[])
/**
* 新增
* @return mixed
*/
public
function
add
()
{
$id
=
input
(
'post.pk'
,
''
);
$field
=
input
(
'post.name'
,
''
);
$value
=
input
(
'post.value'
,
''
);
$table
=
input
(
'post.table'
,
''
);
$type
=
input
(
'post.type'
,
''
);
if
(
in_array
(
$field
,
array
(
'account'
,
'plan_account'
,
'remain_account'
,
'release_account'
))
){
$value
*=
100
;
// 保存数据
if
(
$this
->
request
->
isPost
())
{
$data
=
$this
->
request
->
post
();
$data
[
'create_time'
]
=
time
();
$data
[
'plan_account'
]
=
$data
[
'plan_account'
]
*
100
;
//业务逻辑处理
$result_up
=
Db
::
name
(
"esop_plan"
)
->
insert
(
$data
);
if
(
$result_up
===
1
)
{
$this
->
success
(
'添加成功'
,
'index'
);
}
else
{
$this
->
error
(
$result_up
);
}
}
$mid
=
EsopPlanModel
::
where
(
'id'
,
$id
)
->
value
(
'mid'
);
$old_value
=
EsopPlanModel
::
where
(
'id'
,
$id
)
->
value
(
$field
);
$mobile
=
Db
(
'member'
)
->
where
(
'id'
,
$mid
)
->
value
(
'mobile'
);
$details
=
$mobile
.
' 字段('
.
$field
.
'),原值:('
.
$old_value
.
')新值:('
.
$value
.
')'
;
// 使用ZBuilder快速创建表单
return
ZBuilder
::
make
(
'form'
)
->
setPageTitle
(
'新增'
)
// 设置页面标题
->
addFormItems
([
// 批量添加表单项
[
'select:5'
,
'mid'
,
'请选择用户'
,
''
,
MemberModel
::
getMemberList
(),
''
,
url
(
'get_mid'
),
'mid'
],
[
'select:5'
,
'stock_id'
,
'请选择股票'
,
''
,
StockListModel
::
getStockList
(),
''
,
url
(
'get_stock_id'
),
'stock_id'
],
[
'number'
,
'plan_account'
,
'期权总值'
,
'期权总的价值(港元)'
,
'0'
],
[
'number'
,
'duration'
,
'总释放天数'
,
'总释放天数'
,
'1000'
],
[
'datetime'
,
'release_time'
,
'开始时间'
,
'从哪天开始释放期权'
,
''
,
'YYYY-MM-DD HH:mm:ss'
],
])
->
fetch
();
}
switch
(
$type
)
{
// 日期时间需要转为时间戳
case
'release_time'
:
$value
=
strtotime
(
$value
);
break
;
// 开关
case
'switch'
:
$value
=
$value
==
'true'
?
1
:
0
;
break
;
// 根据所有用户ID
public
function
get_mid
(
$mid
)
{
$arr
=
[];
$where
[
'status'
]
=
1
;
$where
[
'id'
]
=
$mid
;
$data_list
=
Db
::
name
(
'member'
)
->
where
(
$where
)
->
find
();
if
(
!
is_null
(
$data_list
))
{
$arr
[
'code'
]
=
'1'
;
//判断状态
$arr
[
'msg'
]
=
'请求成功'
;
//回传信息
$result
[
$data_list
[
'id'
]]
=
$data_list
[
'id'
];
$arr
[
'list'
]
=
format_linkage
(
$result
);
//将一维数组转成联动需要的数据格式
}
else
{
$arr
[
'code'
]
=
'0'
;
//判断状态
$arr
[
'msg'
]
=
'数据请求失败'
;
//回传信息
$arr
[
'list'
]
=
[];
//将一维数组转成联动需要的数据格式
}
$pk
=
Db
(
'esop_plan'
)
->
getPk
();
$result
=
Db
(
'esop_plan'
)
->
where
(
$pk
,
$id
)
->
setField
(
$field
,
$value
);
if
(
false
!==
$result
)
{
Cache
::
clear
();
// 记录行为日志
if
(
!
empty
(
$member_mobile
))
{
call_user_func_array
(
'action_log'
,
[
'esop_plan_edit'
,
'esop_plan'
,
$id
,
UID
,
$details
]);
}
$this
->
success
(
'操作成功'
);
return
json
(
$arr
);
}
// 根据所有股票ID
public
function
get_stock_id
(
$stock_id
)
{
$arr
=
[];
$where
[
'status'
]
=
1
;
$where
[
'id'
]
=
$stock_id
;
$data_list
=
Db
::
name
(
'stock_list'
)
->
where
(
$where
)
->
find
();
if
(
!
is_null
(
$data_list
))
{
$arr
[
'code'
]
=
'1'
;
//判断状态
$arr
[
'msg'
]
=
'请求成功'
;
//回传信息
$result
[
$data_list
[
'id'
]]
=
$data_list
[
'id'
];
$arr
[
'list'
]
=
format_linkage
(
$result
);
//将一维数组转成联动需要的数据格式
}
else
{
$this
->
error
(
'操作失败'
);
$arr
[
'code'
]
=
'0'
;
//判断状态
$arr
[
'msg'
]
=
'数据请求失败'
;
//回传信息
$arr
[
'list'
]
=
[];
//将一维数组转成联动需要的数据格式
}
return
json
(
$arr
);
}
}
\ No newline at end of file
}
application/money/model/EsopPlan.php
View file @
a3b91047
...
...
@@ -16,7 +16,7 @@
{
$data_list
=
self
::
view
(
'esop_plan p'
,
true
)
->
view
(
'member'
,
'mobile, name, id_card'
,
'member.id=p.mid'
,
'left'
)
->
view
(
'stock
'
,
'title'
,
'stock
.id=p.stock_id'
,
'left'
)
->
view
(
'stock
_list'
,
'title'
,
'stock_list
.id=p.stock_id'
,
'left'
)
->
where
(
$map
)
->
order
(
$order
)
->
paginate
()
...
...
application/stock/model/StockList.php
View file @
a3b91047
...
...
@@ -8,11 +8,35 @@
// +----------------------------------------------------------------------
// | @author menghui
namespace
app\stock\model
;
use
think\model
;
use
think\Db
;
class
StockList
extends
Model
{
class
StockList
extends
Model
{
// 设置当前模型对应的完整数据表名称
protected
$table
=
'__STOCK_LIST__'
;
// 自动写入时间戳
protected
$autoWriteTimestamp
=
true
;
}
\ No newline at end of file
/**
* 获取股票列表(下拉选择时使用)
* @param
* @author 路人甲乙
* @return mixed
*/
public
static
function
getStockList
()
{
$list
=
[];
$where
[
'status'
]
=
1
;
$data_list
=
Db
::
name
(
'stock_list'
)
->
where
(
$where
)
->
column
(
true
,
'id'
);
if
(
!
is_null
(
$data_list
))
{
foreach
(
$data_list
as
$v
)
{
$list
[
$v
[
'id'
]]
=
$v
[
'title'
];
}
}
else
{
$list
=
[];
}
return
$list
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment