package com.izouma.nineth.web; import com.izouma.nineth.domain.Invite; import com.izouma.nineth.domain.Rice; import com.izouma.nineth.domain.RiceInvite; import com.izouma.nineth.domain.RiceOperationRecord; import com.izouma.nineth.dto.R; import com.izouma.nineth.enums.RiceOperationType; import com.izouma.nineth.repo.*; import com.izouma.nineth.service.*; import com.izouma.nineth.dto.PageQuery; import com.izouma.nineth.exception.BusinessException; import com.izouma.nineth.utils.ObjUtils; import com.izouma.nineth.utils.excel.ExcelUtils; import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; import java.util.Optional; @RestController @RequestMapping("/riceInvite") @AllArgsConstructor public class RiceInviteController extends BaseController { private RiceInviteService riceInviteService; private RiceInviteRepo riceInviteRepo; private RiceService riceService; private RiceRepo riceRepo; private UserDetailService userDetailService; private UserDetailRepo userDetailRepo; private UserService userService; private UserRepo userRepo; private RiceInviteRepo RiceInviteRepo; private RiceInviteService RiceInviteService; private SysConfigService sysConfigService; private SysConfigRepo sysConfigRepo; private RiceOperationRecordRepo riceOperationRecordRepo; //@PreAuthorize("hasRole('ADMIN')") @PostMapping("/save") public RiceInvite save(@RequestBody RiceInvite record) { if (record.getId() != null) { RiceInvite orig = riceInviteRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录")); ObjUtils.merge(orig, record); return riceInviteRepo.save(orig); } return riceInviteRepo.save(record); } //@PreAuthorize("hasRole('ADMIN')") @PostMapping("/all") public Page all(@RequestBody PageQuery pageQuery) { return riceInviteService.all(pageQuery); } @GetMapping("/get/{id}") public RiceInvite get(@PathVariable Long id) { return riceInviteRepo.findById(id).orElseThrow(new BusinessException("无记录")); } @PostMapping("/del/{id}") public void del(@PathVariable Long id) { riceInviteRepo.softDelete(id); } @GetMapping("/excel") @ResponseBody public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException { List data = all(pageQuery).getContent(); ExcelUtils.export(response, data); } //邀请别人并认领水滴 @PostMapping("/inviteAndClaimWaterDrop") public R inviteAndClaimWaterDrop(@RequestParam Long inviterId, @RequestParam Long inviteeId) { // 检查邀请是否重复 Optional invite = riceInviteRepo.findByInviterIdAndInviteeId(inviterId, inviteeId); if (invite.isPresent()) { return R.error("邀请已发送,请勿重复发送"); } // 创建邀请记录 RiceInvite newInvite = new RiceInvite(); newInvite.setInviterId(inviterId); newInvite.setInviteeId(inviteeId); newInvite.setCreateTime(System.currentTimeMillis()); riceInviteRepo.save(newInvite); // 增加邀请者的水滴数 Optional inviterRice = riceRepo.findById(inviterId); if (!inviterRice.isPresent()) { return R.error("未找到邀请者的用户信息"); } Rice rice = inviterRice.get(); Long beforeWaterDropCount = rice.getWaterDropCount(); rice.setWaterDropCount(rice.getWaterDropCount() + 1); riceRepo.save(rice); createRiceOperationRecord(inviterId,RiceOperationType.WATER_DROP,1L,beforeWaterDropCount,rice.getWaterDropCount()); return R.success("邀请成功并领取水滴").add("waterDropCount", rice.getWaterDropCount()); } private void createRiceOperationRecord(Long userId, RiceOperationType type, Long amount, Long beforeAmount, Long afterAmount) { RiceOperationRecord record = new RiceOperationRecord(); record.setUserId(userId); record.setType(type); record.setAmount(amount); record.setBeforeAmount(beforeAmount); record.setAfterAmount(afterAmount); riceOperationRecordRepo.save(record); } }