RiceInviteController.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package com.izouma.nineth.web;
  2. import com.izouma.nineth.domain.Invite;
  3. import com.izouma.nineth.domain.Rice;
  4. import com.izouma.nineth.domain.RiceInvite;
  5. import com.izouma.nineth.domain.RiceOperationRecord;
  6. import com.izouma.nineth.dto.R;
  7. import com.izouma.nineth.enums.RiceOperationType;
  8. import com.izouma.nineth.repo.*;
  9. import com.izouma.nineth.service.*;
  10. import com.izouma.nineth.dto.PageQuery;
  11. import com.izouma.nineth.exception.BusinessException;
  12. import com.izouma.nineth.utils.ObjUtils;
  13. import com.izouma.nineth.utils.excel.ExcelUtils;
  14. import lombok.AllArgsConstructor;
  15. import org.springframework.data.domain.Page;
  16. import org.springframework.security.access.prepost.PreAuthorize;
  17. import org.springframework.web.bind.annotation.*;
  18. import javax.servlet.http.HttpServletResponse;
  19. import java.io.IOException;
  20. import java.util.List;
  21. import java.util.Optional;
  22. @RestController
  23. @RequestMapping("/riceInvite")
  24. @AllArgsConstructor
  25. public class RiceInviteController extends BaseController {
  26. private RiceInviteService riceInviteService;
  27. private RiceInviteRepo riceInviteRepo;
  28. private RiceService riceService;
  29. private RiceRepo riceRepo;
  30. private UserDetailService userDetailService;
  31. private UserDetailRepo userDetailRepo;
  32. private UserService userService;
  33. private UserRepo userRepo;
  34. private RiceInviteRepo RiceInviteRepo;
  35. private RiceInviteService RiceInviteService;
  36. private SysConfigService sysConfigService;
  37. private SysConfigRepo sysConfigRepo;
  38. private RiceOperationRecordRepo riceOperationRecordRepo;
  39. //@PreAuthorize("hasRole('ADMIN')")
  40. @PostMapping("/save")
  41. public RiceInvite save(@RequestBody RiceInvite record) {
  42. if (record.getId() != null) {
  43. RiceInvite orig = riceInviteRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
  44. ObjUtils.merge(orig, record);
  45. return riceInviteRepo.save(orig);
  46. }
  47. return riceInviteRepo.save(record);
  48. }
  49. //@PreAuthorize("hasRole('ADMIN')")
  50. @PostMapping("/all")
  51. public Page<RiceInvite> all(@RequestBody PageQuery pageQuery) {
  52. return riceInviteService.all(pageQuery);
  53. }
  54. @GetMapping("/get/{id}")
  55. public RiceInvite get(@PathVariable Long id) {
  56. return riceInviteRepo.findById(id).orElseThrow(new BusinessException("无记录"));
  57. }
  58. @PostMapping("/del/{id}")
  59. public void del(@PathVariable Long id) {
  60. riceInviteRepo.softDelete(id);
  61. }
  62. @GetMapping("/excel")
  63. @ResponseBody
  64. public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
  65. List<RiceInvite> data = all(pageQuery).getContent();
  66. ExcelUtils.export(response, data);
  67. }
  68. //邀请别人并认领水滴
  69. @PostMapping("/inviteAndClaimWaterDrop")
  70. public R<?> inviteAndClaimWaterDrop(@RequestParam Long inviterId, @RequestParam Long inviteeId) {
  71. // 检查邀请是否重复
  72. Optional<RiceInvite> invite = riceInviteRepo.findByInviterIdAndInviteeId(inviterId, inviteeId);
  73. if (invite.isPresent()) {
  74. return R.error("邀请已发送,请勿重复发送");
  75. }
  76. // 创建邀请记录
  77. RiceInvite newInvite = new RiceInvite();
  78. newInvite.setInviterId(inviterId);
  79. newInvite.setInviteeId(inviteeId);
  80. newInvite.setCreateTime(System.currentTimeMillis());
  81. riceInviteRepo.save(newInvite);
  82. // 增加邀请者的水滴数
  83. Optional<Rice> inviterRice = riceRepo.findById(inviterId);
  84. if (!inviterRice.isPresent()) {
  85. return R.error("未找到邀请者的用户信息");
  86. }
  87. Rice rice = inviterRice.get();
  88. Long beforeWaterDropCount = rice.getWaterDropCount();
  89. rice.setWaterDropCount(rice.getWaterDropCount() + 1);
  90. riceRepo.save(rice);
  91. createRiceOperationRecord(inviterId,RiceOperationType.WATER_DROP,1L,beforeWaterDropCount,rice.getWaterDropCount());
  92. return R.success("邀请成功并领取水滴").add("waterDropCount", rice.getWaterDropCount());
  93. }
  94. private void createRiceOperationRecord(Long userId, RiceOperationType type, Long amount, Long beforeAmount, Long afterAmount) {
  95. RiceOperationRecord record = new RiceOperationRecord();
  96. record.setUserId(userId);
  97. record.setType(type);
  98. record.setAmount(amount);
  99. record.setBeforeAmount(beforeAmount);
  100. record.setAfterAmount(afterAmount);
  101. riceOperationRecordRepo.save(record);
  102. }
  103. }