package com.cyksj.web.controller.register; import com.cyksj.common.annotation.NoSubmit; import com.cyksj.common.exception.BusinessRuntimeException; import com.cyksj.common.util.IoKit; import com.cyksj.common.util.Xmls; import com.cyksj.dto.Result; import com.cyksj.enums.GatewayResponse; import com.cyksj.mapper.AppleAutoRegisterDataMapper; import com.cyksj.model.dto.H5JsPayParams; import com.cyksj.model.entity.AppleAutoRegisterData; import com.cyksj.model.entity.RegisterOrderDon; import com.cyksj.model.entity.SpotifyUnLimitRecord; import com.cyksj.model.manage.request.RegisterReq; import com.cyksj.model.views.AppleIdCountryOrAreaDataView; import com.cyksj.model.views.CouponUserView; import com.cyksj.service.register.RegisterOrderDonService; import com.cyksj.web.util.StpUserUtil; import com.ejlchina.searcher.BeanSearcher; import com.ejlchina.searcher.SearchResult; import com.ejlchina.searcher.param.Operator; import com.ejlchina.searcher.util.MapUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.util.Map; /** * @author chan * @date 2022/11/7 1:49 PM */ @Slf4j @RestController @RequestMapping("/applets/register") @RequiredArgsConstructor public class RegisterController { private final RegisterOrderDonService registerOrderDonService; private final BeanSearcher beanSearcher; private final HttpServletRequest request; private final AppleAutoRegisterDataMapper appleAutoRegisterDataMapper; @PostMapping public Result register(@RequestBody RegisterReq req) throws Exception { long userId = StpUserUtil.getLoginIdAsLong(); //参数校验 boolean isFree = false; //判断Spotify是否拥有免费资格 if("spotify".equals(req.getPlatform())){ isFree = registerOrderDonService.isFree(userId,req.getPlatform()); } RegisterOrderDon orderDon = registerOrderDonService.saveOrder(userId,req,isFree); orderDon.setPassword(""); return GatewayResponse.SUCCESS.newBuilder().toResult(orderDon); } /** * 注册资料支付 * @author chan * @date 2022-11-07 3:44 PM */ @PostMapping("/post/pay/{orderId}") public Result pay(@PathVariable Long orderId) throws Exception { final String methodName = "提交注册资料 吊起微信支付"; log.info("{}[start] orderId:{}",methodName,orderId); H5JsPayParams payParams = registerOrderDonService.pay(orderId); return GatewayResponse.SUCCESS.newBuilder().toResult(payParams); } /** * 微信支付回调 * @author chan * @date 2021-10-11 下午5:42 */ @PostMapping("/prepay/notify") public void prepayNotify(HttpServletRequest request, HttpServletResponse response) throws Exception { String xml = IoKit.toString(request.getInputStream()); log.info("=== 基金会分发支付成功的回调: \n {}", xml); // 解析xml Map map = Xmls.toMap(xml); // 支付失败 if (!StringUtils.equals("SUCCESS", map.get("return_code")) || !StringUtils.equals("SUCCESS", map.get("result_code"))) { throw BusinessRuntimeException.getInstance("支付失败."); } registerOrderDonService.prepayNotify(map); String toWeChatXmlResponse = ""; OutputStream out = null; try { out = response.getOutputStream(); IoKit.write(toWeChatXmlResponse, out); } catch (Exception e) { throw BusinessRuntimeException.getInstance(e,e.getMessage()); } finally { IoKit.close(out); } } @GetMapping("/get") public Result> get(){ long userId = StpUserUtil.getLoginIdAsLong(); SearchResult search = beanSearcher.search(RegisterOrderDon.class, MapUtils.flatBuilder(request.getParameterMap()) .field(RegisterOrderDon::getUserId,userId).op(Operator.Equal) .build()); search.getDataList().forEach(data->{ if (data.getAppleIsAutoType() && (data.getStatus() == RegisterOrderDon.Status.noPayment || data.getStatus() == RegisterOrderDon.Status.close)) { data.setApplePwdId(null); data.setCountryOrArea(null); data.setRemark(null); } }); return GatewayResponse.SUCCESS.newBuilder().toResult(search); } @PutMapping("/put") public Result update(@RequestBody RegisterOrderDon req){ if (req.getId() == null) { throw new BusinessRuntimeException("缺少必填参数"); } RegisterOrderDon registerOrderDon = registerOrderDonService.getById(req.getId()); if (!registerOrderDon.getStatus().equals(RegisterOrderDon.Status.error)) { throw new BusinessRuntimeException("该状态下不可更改信息"); } req.setStatus(RegisterOrderDon.Status.hasPayment); registerOrderDonService.updateById(req); return GatewayResponse.SUCCESS.newBuilder().toResult(); } @GetMapping("/get/appleId/area/detail") public Result getAppleIdCountryOrAreaData() { AppleIdCountryOrAreaDataView appleIdCountryOrAreaDataView = new AppleIdCountryOrAreaDataView(); appleIdCountryOrAreaDataView.setJapanAvaNum(appleAutoRegisterDataMapper.selectAreaDataView(AppleAutoRegisterData.CountryOrArea.JAPAN)); appleIdCountryOrAreaDataView.setHongKongAvaNum(appleAutoRegisterDataMapper.selectAreaDataView(AppleAutoRegisterData.CountryOrArea.CN_HongKong)); appleIdCountryOrAreaDataView.setUsAvaNum(appleAutoRegisterDataMapper.selectAreaDataView(AppleAutoRegisterData.CountryOrArea.US)); appleIdCountryOrAreaDataView.setTaiWanAvaNum(appleAutoRegisterDataMapper.selectAreaDataView(AppleAutoRegisterData.CountryOrArea.CN_TaiWan)); return GatewayResponse.SUCCESS.newBuilder().toResult(appleIdCountryOrAreaDataView); } /** * 取消appleId订单 */ @PutMapping("/cancel/order/{orderId}") public Result cancelOrder(@PathVariable Long orderId) { registerOrderDonService.updateAppleAutoStatus(orderId); return GatewayResponse.SUCCESS.newBuilder().toResult("取消订单成功"); } /** * 解除限制申请 */ @PostMapping("/spotify/unLimit") @NoSubmit public Result spotifyUnLimit(@RequestBody @Validated SpotifyUnLimitRecord spotifyUnLimitRecord) { long userId = StpUserUtil.getLoginIdAsLong(); spotifyUnLimitRecord.setUserId(userId); CouponUserView couponUserView = registerOrderDonService.spotifyUnLimit(spotifyUnLimitRecord); return GatewayResponse.SUCCESS.newBuilder().toResult(couponUserView); } }