DeductionManual.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\store\model\member;
  13. use app\common\enum\member\Action;
  14. use app\common\enum\member\AuditStatus;
  15. use app\common\model\member\DeductionManual as DeductionManualModel;
  16. use app\common\model\member\MemberCardsAction as MemberCardsActionModel;
  17. use app\store\model\User;
  18. /**
  19. * 金米粒手工扣减模型
  20. * Class Service
  21. */
  22. class DeductionManual extends DeductionManualModel
  23. {
  24. /**
  25. * 获取列表记录
  26. * @param array $param
  27. * @return \think\Paginator
  28. * @throws \think\db\exception\DbException
  29. */
  30. public function getList(array $param = [])
  31. {
  32. return $this->with(['user'])
  33. ->where($this->getFilter($param))
  34. ->order(['audit_status'=>'asc','id'=>'desc'])
  35. ->paginate();
  36. }
  37. /**
  38. * 获取查询条件
  39. * @param array $param
  40. * @return array
  41. */
  42. private function getFilter(array $param = [])
  43. {
  44. // 默认查询参数
  45. $params = $this->setQueryDefaultValue($param, [
  46. 'number' => '',
  47. 'betweenTime' => [], // 起止时间
  48. 'userId' => 0,
  49. 'auditStatus' => -1,
  50. ]);
  51. // 检索查询条件
  52. $filter = [];
  53. //扣减单号
  54. if(isset($params['number']) && !empty($params['number'])){
  55. $filter[] = ['number', 'like', "%{$params['number']}%"];
  56. }
  57. //申请时间
  58. if (!empty($params['betweenTime'])) {
  59. $times = between_time_format($params['betweenTime']);
  60. $filter[] = ['create_time', '>=', $times['start_time']];
  61. $filter[] = ['create_time', '<', $times['end_time']];
  62. }
  63. //会员ID
  64. if(isset($params['userId']) && $params['userId']>0){
  65. $filter[] = ['user_id', '=', $params['userId']];
  66. }
  67. //审核状态
  68. if(isset($params['auditStatus']) && $params['auditStatus']>-1){
  69. $filter[] = ['audit_status', '=', $params['auditStatus']];
  70. }
  71. return $filter;
  72. }
  73. /**
  74. * 新增记录
  75. * @param array $data
  76. * @return false|int
  77. */
  78. public function add(array $data)
  79. {
  80. $user = User::find($data['user_id']);
  81. if($user['gold_rice']<$data['score']){
  82. $this->error = '金米粒不足';
  83. return false;
  84. }
  85. //事物处理
  86. $this->transaction(function () use ($data,$user) {
  87. //新增手工扣减记录
  88. $this->save($data);
  89. // 新增操作行为日志
  90. $actionData = [
  91. 'target_type' => Action::DEDUCTION_MANUAL,
  92. 'audit_status' => AuditStatus::AUDIT_WAIT,
  93. 'audit_reason' => $data['audit_reason']??'',
  94. 'audit_user' => $data['audit_user'],
  95. 'audit_admin_id' => $data['audit_admin_id'],
  96. ];
  97. MemberCardsActionModel::add($this['id'], $actionData);
  98. //冻结用户金米粒
  99. $user['gold_rice_frozen'] += $data['score'];
  100. $user['gold_rice'] -= $data['score'];
  101. $user->save();
  102. });
  103. return true;
  104. }
  105. /**
  106. * 更新记录
  107. * @param array $data
  108. * @return bool|int
  109. */
  110. public function edit(array $data)
  111. {
  112. //判断合法性
  113. if($this->audit_status!=AuditStatus::AUDIT_NO_PASS){
  114. $this->error = '当前状态不能编辑';
  115. return false;
  116. }
  117. $user = User::find($this['user_id']);
  118. if($user['gold_rice']<$data['score']){
  119. $this->error = '金米粒不足';
  120. return false;
  121. }
  122. //事物处理
  123. $this->transaction(function () use ($data,$user) {
  124. //新增手工扣减记录
  125. $this->save($data);
  126. // 新增操作行为日志
  127. $actionData = [
  128. 'target_type' => Action::DEDUCTION_MANUAL,
  129. 'audit_status' => $data['audit_status'],
  130. 'audit_reason' => $data['audit_reason']??'',
  131. 'audit_user' => $data['audit_user'],
  132. 'audit_admin_id' => $data['audit_admin_id'],
  133. ];
  134. MemberCardsActionModel::add($data['id'], $actionData);
  135. //冻结用户金米粒
  136. $user['gold_rice_frozen'] += $data['score'];
  137. $user['gold_rice'] -= $data['score'];
  138. $user->save();
  139. });
  140. return true;
  141. }
  142. /**
  143. * 审核记录
  144. * @param array $data
  145. * @return bool|int
  146. */
  147. public function audit(array $data)
  148. {
  149. //申请不处于待审核
  150. if($this->audit_status!=AuditStatus::AUDIT_WAIT){
  151. $this->error = '当前状态不能审核';
  152. return false;
  153. }
  154. //事物处理
  155. $this->transaction(function () use ($data) {
  156. //新增手工扣减记录
  157. $this->save($data);
  158. // 新增操作行为日志
  159. $actionData = [
  160. 'target_type' => Action::DEDUCTION_MANUAL,
  161. 'audit_status' => $data['audit_status'],
  162. 'audit_reason' => $data['audit_reason']??'',
  163. 'audit_user' => $data['audit_user'],
  164. 'audit_admin_id' => $data['audit_admin_id'],
  165. ];
  166. MemberCardsActionModel::add($data['id'], $actionData);
  167. if($data['audit_status']==AuditStatus::AUDIT_NO_PASS){//审核不通过
  168. //归还冻结的用户金米粒
  169. User::setIncDecByField($this['user_id'],['gold_rice'=>$this['score']],['gold_rice_frozen'=>$this['score']]);
  170. }
  171. if($data['audit_status']==AuditStatus::AUDIT_PASS){//审核通过
  172. //扣除冻结的用户金米粒
  173. User::setDecByField($this['user_id'],'gold_rice_frozen',$this['score']);
  174. //写金米粒出账记录
  175. GoldRice::add($this['user_id'],$this['number'],'手工扣减',(int)$this['score'],0);
  176. }
  177. });
  178. return true;
  179. }
  180. }