SignController.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use Illuminate\Http\Request;
  4. use App\Http\Controllers\Controller;
  5. use App\Http\Models\Sign;
  6. use App\Http\Models\UserInfo;
  7. use Illuminate\Support\Facades\DB;
  8. use \Exception;
  9. /**
  10. * 签到控制器
  11. */
  12. class SignController extends Controller
  13. {
  14. /**
  15. * 签到次数
  16. *
  17. * @access public
  18. * @param mixed $req 参数.
  19. * @return string
  20. */
  21. public function signCount(Request $req){
  22. try {
  23. $signModel = new Sign;
  24. $uid = S('token_user_id');
  25. // 查询用户ID.
  26. $getSignWhere['members_id'] = $uid;
  27. // 获取当周1.
  28. $timeMonday = date('Y-m-d', (time()-((date('w',time()) == 0?7:date('w',time()))-1)*24*3600));
  29. // 获取当月一号.
  30. $monthOne = date('Y-m-01');
  31. // 时间区间.
  32. $weekBetween = [
  33. strtotime($timeMonday),
  34. time(),
  35. ];
  36. $monthBetween = [
  37. strtotime($monthOne),
  38. time(),
  39. ];
  40. // 查询用户签到次数.
  41. $countWeek = $signModel->countSign($getSignWhere, $weekBetween);
  42. $countMonth = $signModel->countSign($getSignWhere, $monthBetween);
  43. $return = [
  44. 'countWeek' => $countWeek,
  45. 'countMonth' => $countMonth,
  46. ];
  47. return toJson(1, '成功', $return);
  48. } catch (Exception $e) {
  49. echo $e->getMessage();
  50. }//end try
  51. }//end signCount()
  52. /**
  53. * 签到
  54. *
  55. * @access public
  56. * @param mixed $req 参数.
  57. * @return string
  58. */
  59. public function pullSign(Request $req){
  60. try {
  61. // 查询参数.
  62. $signModel = new Sign;
  63. $userInfoModel = new UserInfo;
  64. $uid = S('token_user_id');
  65. // 获取当周1.
  66. $timeMonday = date('Y-m-d', (time()-((date('w',time())==0?7:date('w',time()))-1)*24*3600));
  67. // 获取当月一号.
  68. $monthOne = date('Y-m-01');
  69. // 时间区间.
  70. $weekBetween = [
  71. strtotime($timeMonday),
  72. time(),
  73. ];
  74. $monthBetween = [
  75. strtotime($monthOne),
  76. time(),
  77. ];
  78. $dayBetween = [
  79. strtotime(date('Y-m-d')),
  80. time(),
  81. ];
  82. // 查询用户ID.
  83. $getSignWhere['members_id'] = $uid;
  84. // 查询用户是否已签到.
  85. $countDay = $signModel->countSign($getSignWhere, $dayBetween);
  86. if ($countDay) {
  87. return toJson(-30004);
  88. }
  89. // 查询用户签到次数.
  90. $countWeek = $signModel->countSign($getSignWhere, $weekBetween);
  91. $countMonth = $signModel->countSign($getSignWhere, $monthBetween);
  92. // 查询设置表.
  93. $signSelect = [
  94. 'sign_title',
  95. 'sign_data',
  96. 'sign_id',
  97. ];
  98. $signWeekWhere = [];
  99. $signMonthWhere = [];
  100. // 根据签到天数获取查询条件.
  101. switch ($countWeek) {
  102. case 0:
  103. $signWeekWhere['sign_title'] = 'day1';
  104. break;
  105. case 1:
  106. $signWeekWhere['sign_title'] = 'day2';
  107. break;
  108. case 2:
  109. $signWeekWhere['sign_title'] = 'day3';
  110. break;
  111. case 3:
  112. $signWeekWhere['sign_title'] = 'day4';
  113. break;
  114. case 4:
  115. $signWeekWhere['sign_title'] = 'day5';
  116. break;
  117. case 5:
  118. $signWeekWhere['sign_title'] = 'day6';
  119. break;
  120. case 6:
  121. $signWeekWhere['sign_title'] = 'day7';
  122. break;
  123. }
  124. switch ($countMonth) {
  125. case 4:
  126. $signMonthWhere['sign_title'] = 'accumulate1';
  127. break;
  128. case 9:
  129. $signMonthWhere['sign_title'] = 'accumulate2';
  130. break;
  131. case 14:
  132. $signMonthWhere['sign_title'] = 'accumulate3';
  133. break;
  134. case 19:
  135. $signMonthWhere['sign_title'] = 'accumulate4';
  136. break;
  137. case 24:
  138. $signMonthWhere['sign_title'] = 'accumulate5';
  139. break;
  140. }
  141. $getWeekConfig = [];
  142. $getMonthConfig = [];
  143. // 查询周签到设置.
  144. if ($signWeekWhere) {
  145. $getWeekConfig = $signModel->signConfig($signSelect, $signWeekWhere, '');
  146. }
  147. // 查询月签到设置.
  148. if ($signMonthWhere) {
  149. $getMonthConfig = $signModel->signConfig($signSelect, $signMonthWhere, '');
  150. }
  151. // 查询用户余额.
  152. $getUserSelect = ['membersDetailed_cash'];
  153. $getUserWhere['members_id'] = $uid;
  154. $cash = $userInfoModel->userInfo($getUserSelect, $getUserWhere);
  155. $nowCash = $cash['membersDetailed_cash'];
  156. // 添加记录,修改用户信息.
  157. DB::beginTransaction();
  158. $upUserInfo = 1;
  159. $receiveMoney = 0;
  160. $signId = '';
  161. // 如果有签到奖励则修改用户余额.
  162. if ($signWeekWhere || $signMonthWhere) {
  163. $signIdArr = [];
  164. $getWeekMoney = 0;
  165. $getMonthMoney = 0;
  166. if ($getWeekConfig) {
  167. $signIdArr[] = $getWeekConfig[0]['sign_id'];
  168. $getWeekMoney = $getWeekConfig[0]['sign_data'];
  169. }
  170. if ($getMonthConfig) {
  171. $signIdArr[] = $getMonthConfig[0]['sign_id'];
  172. $getMonthMoney = $getMonthConfig[0]['sign_data'];
  173. }
  174. $signId = json_encode($signIdArr);
  175. // 计算签到后余额.
  176. $receiveMoney = intval($getWeekMoney) + intval($getMonthMoney);
  177. $nowCash += $receiveMoney;
  178. $upUserInfoWhere['members_id'] = $uid;
  179. $upUserInfoData['membersDetailed_cash'] = $nowCash;
  180. // 修改用户信息.
  181. $upUserInfo = $userInfoModel->upUserInfo($upUserInfoWhere, $upUserInfoData);
  182. }
  183. // 新增签到记录.
  184. $orderId = getOrderId();
  185. $addSignData = [
  186. 'getsign_identity' => $orderId,
  187. 'members_id' => $uid,
  188. 'getsign_addtime' => time(),
  189. 'getsign_mony' => $receiveMoney,
  190. 'getsign_begin_money' => $cash['membersDetailed_cash'],
  191. 'getsign_end_money' => $nowCash,
  192. 'sign_id' => $signId,
  193. ];
  194. $addSign = $signModel->addSign($addSignData);
  195. if ($addSign && $upUserInfo) {
  196. DB::commit();
  197. $return = [
  198. 'money' => $nowCash,
  199. 'countWeek' => $countWeek + 1,
  200. 'countMonth' => $countMonth + 1,
  201. ];
  202. return toJson(1, '成功', $return);
  203. } else {
  204. return toJson(-2);
  205. DB::rollBack();
  206. }
  207. } catch (Exception $e) {
  208. echo $e->getMessage();
  209. }//end try
  210. }//end pullSign()
  211. }