UserScore.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. /**
  3. * @package merchant
  4. *
  5. * @author xaboy
  6. * @day 2020/6/23
  7. *
  8. *
  9. */
  10. namespace app\controller\admin\user;
  11. use app\common\repositories\finance\FinanceRepository;
  12. use crmeb\basic\BaseController;
  13. use crmeb\services\SpreadsheetExcelService;
  14. use think\App;
  15. use think\facade\Db;
  16. use think\facade\Log;
  17. class UserScore extends BaseController
  18. {
  19. protected $repository;
  20. public function __construct(App $app)
  21. {
  22. parent::__construct($app);
  23. }
  24. public function deduct($uid)
  25. {
  26. $user = Db::name('user')->where('uid', $uid)->find();
  27. if (empty($user)) {
  28. return app('json')->fail('用户不存在');
  29. }
  30. $user_score = $user['score'];
  31. $deduct_score = $this->request->param('deduct_score', 0);
  32. $desc = $this->request->param('mark', '');
  33. if (empty($desc)) {
  34. return app('json')->fail('请填写扣减原因~');
  35. }
  36. if (!$deduct_score) {
  37. return app('json')->fail('扣减积分数不能为0~');
  38. }
  39. if ($deduct_score < 0) {
  40. return app('json')->fail('扣减积分数不能为负数');
  41. }
  42. if ($deduct_score > $user_score) {
  43. return app('json')->fail('扣减积分数不得大于可用积分数~');
  44. }
  45. //开启事务
  46. Db::startTrans();
  47. try {
  48. $ins_data['uid'] = $uid;
  49. $ins_data['reward_socre'] = $deduct_score;
  50. $ins_data['addtime'] = time();
  51. $ins_data['status'] = 1;
  52. $ins_data['mark'] = "线下积分兑换扣减积分";
  53. $ins_data['desc'] = $desc;
  54. $ins_data['surplus'] = $user_score - $deduct_score;
  55. $ins_data['type'] = 3;
  56. $ins_data['pm'] = 2;
  57. Db::name('user_sign_score')->insertGetId($ins_data);
  58. Db::name('user')->where('uid', $uid)->dec('score', $deduct_score)->update();
  59. // 提交事务
  60. Db::commit();
  61. } catch (\Exception $e) {
  62. // 回滚事务
  63. Db::rollback();
  64. return app('json')->fail($e->getMessage());
  65. }
  66. return app('json')->success("成功");
  67. }
  68. public function excel()
  69. {
  70. $where = request()->params(['date']);
  71. $params = request()->params(['type', 'uid', 'pm', 'phone', 'status']);
  72. //商户ID
  73. $query = Db::name('user_sign_score')
  74. ->alias('uss')
  75. ->leftJoin('user u', 'u.uid=uss.uid')
  76. ->leftJoin('store_order o', 'o.order_id=uss.order_id')
  77. ->when(isset($params['uid']) && $params['uid'] != '', function ($query) use ($params) {
  78. $query->where('uss.uid', $params['uid']);
  79. })
  80. ->when(isset($params['pm']) && $params['pm'] != '', function ($query) use ($params) {
  81. $query->where('uss.pm', $params['pm']);
  82. })
  83. ->when(isset($params['status']) && $params['status'] != '', function ($query) use ($params) {
  84. $query->where('uss.status', $params['status']);
  85. })
  86. ->when(isset($params['phone']) && $params['phone'] != '', function ($query) use ($params) {
  87. $query->whereLike('u.phone', '%' . $params['phone'] . '%');
  88. })
  89. ->when(isset($params['type']) && $params['type'] != '', function ($query) use ($params) {
  90. $query->where('type', $params['type']);
  91. });
  92. $financeRepository = app()->make(FinanceRepository::class);
  93. $list = $financeRepository->date_where($query, $where['date'], 'uss,addtime', '-', 2)
  94. ->field('uss.id,uss.addtime,u.nickname,u.phone,uss.pm,uss.reward_socre,o.order_sn,uss.status,uss.mark,uss.desc')
  95. ->order('uss.id', 'desc')
  96. ->select()
  97. ->each(function ($item) {
  98. $item['mark'] = $item['mark'] . $item['desc'];
  99. $item['addtime'] = date('Y-m-d H:i:s', $item['addtime']);
  100. return $item;
  101. });
  102. foreach ($list as $k => $v) {
  103. $temp = array(
  104. $v['id'],
  105. $v['addtime'],
  106. $v['nickname'],
  107. $v['phone'],
  108. $v['reward_socre'],
  109. );
  110. $temp[] = $v['status'] == 1 ? '已结算': '未结算';
  111. $temp[] = $v['pm'] == 1 ? '增加': '扣减';
  112. $temp[] = $v['order_sn'] ?? '';
  113. $temp[] = $v['mark'] . $v['desc'];
  114. $arr[] = $temp;
  115. }
  116. $header = [
  117. 'ID', '创建时间', '用户昵称', '用户账号(手机号)', '积分数', '结算状态', '积分变动', '关联订单', '说明'
  118. ];
  119. $filename = '积分统计' . date('YmdHis') . '_' . rand(10000, 99999);
  120. $title = '积分统计';
  121. $name = '积分统计';
  122. $info = '生成时间:' . date('Y-m-d H:i:s', time());
  123. $suffix = 'xlsx';
  124. $path = 'extract';
  125. unset($_instance);
  126. $_instance = SpreadsheetExcelService::instance_xin();
  127. $_path = $_instance
  128. ->createOrActive()
  129. ->setExcelHeader($header)
  130. ->setExcelTile($title, $name, $info)
  131. ->setExcelContent($arr)
  132. ->excelSave($filename, $suffix, $path);
  133. $data = [
  134. 'name' => $filename . '.' . $suffix,
  135. 'status' => 1,
  136. 'path' => '/' . $_path
  137. ];
  138. return app('json')->success('ok', $data);
  139. }
  140. }