package com.apobates.forum.thrones.admin.controller; import com.apobates.forum.member.entity.Member; import com.apobates.forum.member.entity.MemberVipExchangeRecords; import com.apobates.forum.member.service.MemberService; import com.apobates.forum.member.service.MemberVipExchangeRecordsService; import com.apobates.forum.member.storage.core.MemberSessionBean; import com.apobates.forum.thrones.admin.controller.form.MemberExchangeForm; import com.apobates.forum.thrones.admin.exception.ResourceNotFoundException; import java.time.LocalDateTime; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import com.apobates.forum.utils.Commons; import com.apobates.forum.utils.DateTimeUtils; import com.apobates.forum.utils.FrontPageURL; import com.apobates.forum.utils.TipMessage; import com.apobates.forum.utils.persistence.Page; import com.apobates.forum.utils.persistence.PageRequest; import com.apobates.forum.utils.persistence.Pageable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; /** * * @author xiaofanku * @since 20200921 */ @Controller @RequestMapping(value = "/member/exchange") public class AdminMemberVipExchangeRecordsController { @Autowired private MemberService memberService; @Autowired private MemberVipExchangeRecordsService memberVipExchangeRecordsService; @Value("${site.pageSize}") private int pageSize; @GetMapping(path = "/") public String listPage( HttpServletRequest request, Model model) { Stream rs = memberVipExchangeRecordsService.getRecent(pageSize); model.addAttribute("rs", rs.collect(Collectors.toList())); return "admin/member_exchange/index"; } //创建 @GetMapping(path = "/create") public String createForm( @RequestParam(name = "member", required = false, defaultValue = "0") long memberId, @RequestParam(name = "names", required = false, defaultValue = "") String names, HttpServletRequest request, Model model) { MemberExchangeForm form = new MemberExchangeForm(); form.setMemberId(memberId); form.setNames(names); form.setLimit("1"); form.setUnit("5"); model.addAttribute("form", form); return "admin/member_exchange/create"; } @PostMapping(path = "/create") public String createAction( HttpServletRequest request, @Valid @ModelAttribute("form") MemberExchangeForm form, BindingResult bindingResult, Model model) { if (bindingResult.hasErrors()) { model.addAttribute("form", form); return "admin/member_exchange/create"; } Member m = memberService.get(form.getMemberId()).orElseThrow(()->new ResourceNotFoundException("会员不存在或暂时无法访问")); String errMsg = "创建VIP交易记录操作失败"; try { if (memberService.exchangeVIP(m.getId(), form.getIntegerLimit(), form.getEnumUnit(), form.getSerial()).orElse(false)) { return "redirect:/member/exchange/"; } } catch (Exception e) { errMsg = e.getMessage(); } model.addAttribute("errors", errMsg); model.addAttribute("form", form); return "admin/member_exchange/create"; } //指定会员的 @GetMapping(path="/query") public String getMemberResult( @RequestParam("uid") String memberUId, @RequestParam(value = "p", required = false, defaultValue = "1") int page, HttpServletRequest request, Model model){ FrontPageURL fpbuild = new FrontPageURL(request.getContextPath() + "/member/exchange/query").addPageSize("number", pageSize); long memberId = 0L; if (Commons.isNotBlank(memberUId) && memberUId.startsWith("u")) { fpbuild = fpbuild.addParameter("uid", memberUId); memberId = Commons.stringToLong(memberUId.substring(1), 0L); } Pageable pr = new PageRequest(page, fpbuild.getPageSize()); Page rs = (memberId > 0) ? memberVipExchangeRecordsService.getAll(memberId, pr) : memberVipExchangeRecordsService.getAll(pr); model.addAttribute("rs", rs.getResult().collect(Collectors.toList())); model.addAttribute("pageData", fpbuild.toPageData(pr, rs.getTotalElements())); return "admin/member_exchange/query_member"; } //指定日期区间 @GetMapping(path="/range") public String getDateRangeResult( @RequestParam("start") String startDateString, @RequestParam("end") String endDateString, @RequestParam(value = "p", required = false, defaultValue = "1") int page, HttpServletRequest request, Model model){ FrontPageURL fpbuild = new FrontPageURL(request.getContextPath() + "/member/exchange/range").addPageSize("number", pageSize); LocalDateTime start = null, end = null; try{ if (Commons.isNotBlank(startDateString)) { start = DateTimeUtils.parseDate(startDateString); } }catch(Exception e){ start = DateTimeUtils.getTodayEarlyMorning(); } try{ if(Commons.isNotBlank(endDateString)){ end = DateTimeUtils.parseDate(endDateString); } }catch(Exception e){ start = DateTimeUtils.getTodayMidnight(); } fpbuild = fpbuild.addParameter("start", DateTimeUtils.getRFC3339(start)); fpbuild = fpbuild.addParameter("end", DateTimeUtils.getRFC3339(end)); Pageable pr = new PageRequest(page, fpbuild.getPageSize()); Page rs = memberVipExchangeRecordsService.getAll(start, end, pr); model.addAttribute("rs", rs.getResult().collect(Collectors.toList())); model.addAttribute("pageData", fpbuild.toPageData(pr, rs.getTotalElements())); return "admin/member_exchange/query_range"; } //手动作废交易记录 @PostMapping(path = "/expire", produces = "application/json;charset=UTF-8") @ResponseBody public TipMessage recycleExchangeAction( @RequestParam("id") long id, MemberSessionBean mbean, HttpServletRequest request, Model model) { try{ if (memberVipExchangeRecordsService.expired(id).orElse(false)) { return TipMessage.ofSuccess("交易记录成功作废"); } }catch(IllegalArgumentException | IllegalStateException e){ return TipMessage.ofError(e.getMessage()); } return TipMessage.ofError("操作失败"); } }