SignController.php 8.2 KB

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