123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- <?php
- // +----------------------------------------------------------------------
- // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
- // +----------------------------------------------------------------------
- // | Author: 萤火科技 <admin@yiovo.com>
- // +----------------------------------------------------------------------
- declare (strict_types = 1);
- namespace app\store\model\member;
- use app\common\enum\member\Action;
- use app\common\enum\member\AuditStatus;
- use app\common\model\member\DeductionManual as DeductionManualModel;
- use app\common\model\member\MemberCardsAction as MemberCardsActionModel;
- use app\store\model\User;
- /**
- * 金米粒手工扣减模型
- * Class Service
- */
- class DeductionManual extends DeductionManualModel
- {
- /**
- * 获取列表记录
- * @param array $param
- * @return \think\Paginator
- * @throws \think\db\exception\DbException
- */
- public function getList(array $param = [])
- {
- return $this->with(['user'])
- ->where($this->getFilter($param))
- ->order(['audit_status'=>'asc','id'=>'desc'])
- ->paginate();
- }
- /**
- * 获取查询条件
- * @param array $param
- * @return array
- */
- private function getFilter(array $param = [])
- {
- // 默认查询参数
- $params = $this->setQueryDefaultValue($param, [
- 'number' => '',
- 'betweenTime' => [], // 起止时间
- 'userId' => 0,
- 'auditStatus' => -1,
- ]);
- // 检索查询条件
- $filter = [];
- //扣减单号
- if(isset($params['number']) && !empty($params['number'])){
- $filter[] = ['number', 'like', "%{$params['number']}%"];
- }
- //申请时间
- if (!empty($params['betweenTime'])) {
- $times = between_time_format($params['betweenTime']);
- $filter[] = ['create_time', '>=', $times['start_time']];
- $filter[] = ['create_time', '<', $times['end_time']];
- }
- //会员ID
- if(isset($params['userId']) && $params['userId']>0){
- $filter[] = ['user_id', '=', $params['userId']];
- }
- //审核状态
- if(isset($params['auditStatus']) && $params['auditStatus']>-1){
- $filter[] = ['audit_status', '=', $params['auditStatus']];
- }
- return $filter;
- }
- /**
- * 新增记录
- * @param array $data
- * @return false|int
- */
- public function add(array $data)
- {
- $user = User::find($data['user_id']);
- if($user['gold_rice']<$data['score']){
- $this->error = '金米粒不足';
- return false;
- }
- //事物处理
- $this->transaction(function () use ($data,$user) {
- //新增手工扣减记录
- $this->save($data);
- // 新增操作行为日志
- $actionData = [
- 'target_type' => Action::DEDUCTION_MANUAL,
- 'audit_status' => AuditStatus::AUDIT_WAIT,
- 'audit_reason' => $data['audit_reason']??'',
- 'audit_user' => $data['audit_user'],
- 'audit_admin_id' => $data['audit_admin_id'],
- ];
- MemberCardsActionModel::add($this['id'], $actionData);
- //冻结用户金米粒
- $user['gold_rice_frozen'] += $data['score'];
- $user['gold_rice'] -= $data['score'];
- $user->save();
- });
- return true;
- }
- /**
- * 更新记录
- * @param array $data
- * @return bool|int
- */
- public function edit(array $data)
- {
- //判断合法性
- if($this->audit_status!=AuditStatus::AUDIT_NO_PASS){
- $this->error = '当前状态不能编辑';
- return false;
- }
- $user = User::find($this['user_id']);
- if($user['gold_rice']<$data['score']){
- $this->error = '金米粒不足';
- return false;
- }
- //事物处理
- $this->transaction(function () use ($data,$user) {
- //新增手工扣减记录
- $this->save($data);
- // 新增操作行为日志
- $actionData = [
- 'target_type' => Action::DEDUCTION_MANUAL,
- 'audit_status' => $data['audit_status'],
- 'audit_reason' => $data['audit_reason']??'',
- 'audit_user' => $data['audit_user'],
- 'audit_admin_id' => $data['audit_admin_id'],
- ];
- MemberCardsActionModel::add($data['id'], $actionData);
- //冻结用户金米粒
- $user['gold_rice_frozen'] += $data['score'];
- $user['gold_rice'] -= $data['score'];
- $user->save();
- });
- return true;
- }
- /**
- * 审核记录
- * @param array $data
- * @return bool|int
- */
- public function audit(array $data)
- {
- //申请不处于待审核
- if($this->audit_status!=AuditStatus::AUDIT_WAIT){
- $this->error = '当前状态不能审核';
- return false;
- }
- //事物处理
- $this->transaction(function () use ($data) {
- //新增手工扣减记录
- $this->save($data);
- // 新增操作行为日志
- $actionData = [
- 'target_type' => Action::DEDUCTION_MANUAL,
- 'audit_status' => $data['audit_status'],
- 'audit_reason' => $data['audit_reason']??'',
- 'audit_user' => $data['audit_user'],
- 'audit_admin_id' => $data['audit_admin_id'],
- ];
- MemberCardsActionModel::add($data['id'], $actionData);
- if($data['audit_status']==AuditStatus::AUDIT_NO_PASS){//审核不通过
- //归还冻结的用户金米粒
- User::setIncDecByField($this['user_id'],['gold_rice'=>$this['score']],['gold_rice_frozen'=>$this['score']]);
- }
- if($data['audit_status']==AuditStatus::AUDIT_PASS){//审核通过
- //扣除冻结的用户金米粒
- User::setDecByField($this['user_id'],'gold_rice_frozen',$this['score']);
- //写金米粒出账记录
- GoldRice::add($this['user_id'],$this['number'],'手工扣减',(int)$this['score'],0);
- }
- });
- return true;
- }
- }
|