RiderFlashPayMethodController.java 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package com.ruoyi.app.pay;
  2. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  3. import com.ruoyi.app.pay.dto.MerchantPayMethodSaveDto;
  4. import com.ruoyi.common.annotation.Anonymous;
  5. import com.ruoyi.common.core.controller.BaseController;
  6. import com.ruoyi.common.core.domain.AjaxResult;
  7. import com.ruoyi.common.exception.ServiceException;
  8. import com.ruoyi.common.utils.MessageUtils;
  9. import com.ruoyi.system.domain.InfoUser;
  10. import com.ruoyi.system.mapper.InfoUserMapper;
  11. import com.ruoyi.system.service.PaymentMethodGateService;
  12. import com.ruoyi.system.utils.Auth;
  13. import com.ruoyi.system.utils.JwtUtil;
  14. import org.springframework.web.bind.annotation.GetMapping;
  15. import org.springframework.web.bind.annotation.PutMapping;
  16. import org.springframework.web.bind.annotation.RequestBody;
  17. import org.springframework.web.bind.annotation.RequestHeader;
  18. import org.springframework.web.bind.annotation.RequestMapping;
  19. import org.springframework.web.bind.annotation.RestController;
  20. import java.util.ArrayList;
  21. import java.util.Date;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;
  25. /**
  26. * 骑手闪送收款方式接口(031,骑手 App 接入;本期无前端页面)。
  27. * 未设置(NULL)=接受平台开放的全部方式,避免新单无人可见;
  28. * 抢单列表按此选择过滤订单支付方式(见 FlashDeliveryApplicationService.riderOrdersQuery)。
  29. */
  30. @RestController
  31. @RequestMapping("/system/riderFlashPayMethods")
  32. @Anonymous
  33. public class RiderFlashPayMethodController extends BaseController {
  34. private final PaymentMethodGateService gateService;
  35. private final InfoUserMapper userMapper;
  36. public RiderFlashPayMethodController(PaymentMethodGateService gateService, InfoUserMapper userMapper) {
  37. this.gateService = gateService;
  38. this.userMapper = userMapper;
  39. }
  40. /** 设置数据:available=平台闪送维度开放方式;selected=骑手当前选择(NULL 视为全部)。 */
  41. @Auth(session = true)
  42. @GetMapping
  43. public AjaxResult get(@RequestHeader String token) {
  44. InfoUser rider = requireRider(token);
  45. List<PaymentMethodGateService.PayMethodOption> available =
  46. gateService.listAvailable(PaymentMethodGateService.GateScope.RIDER_FLASH, null, null);
  47. List<String> selected = new ArrayList<>();
  48. String csv = rider.getFlashPayMethods();
  49. if (csv != null && !csv.trim().isEmpty()) {
  50. for (String part : csv.split(",")) {
  51. if (!part.trim().isEmpty()) selected.add(part.trim());
  52. }
  53. }
  54. Map<String, Object> data = new HashMap<>();
  55. data.put("available", available);
  56. data.put("selected", selected);
  57. return success(data);
  58. }
  59. /** 保存选择:空数组=清空回落"平台开放全部";值域校验闪送维度组合法。 */
  60. @Auth(session = true)
  61. @PutMapping
  62. public AjaxResult save(@RequestHeader String token, @RequestBody MerchantPayMethodSaveDto dto) {
  63. InfoUser rider = requireRider(token);
  64. List<String> groups = PaymentMethodGateService.groupsOf(PaymentMethodGateService.GateScope.RIDER_FLASH);
  65. String csv = null;
  66. if (dto != null && dto.getMethodCodes() != null && !dto.getMethodCodes().isEmpty()) {
  67. for (String code : dto.getMethodCodes()) {
  68. if (code == null || !groups.contains(code.trim())) {
  69. throw new ServiceException(MessageUtils.message("pay.method.config.invalid"));
  70. }
  71. }
  72. csv = String.join(",", dto.getMethodCodes());
  73. }
  74. userMapper.update(null, new UpdateWrapper<InfoUser>()
  75. .eq("user_id", rider.getUserId())
  76. .set("flash_pay_methods", csv)
  77. .set("update_time", new Date()));
  78. return success();
  79. }
  80. /** 仅 userType=2 骑手可设置;非骑手按无权限处理。 */
  81. private InfoUser requireRider(String token) {
  82. Long userId = Long.valueOf(new JwtUtil().getusid(token));
  83. InfoUser rider = userMapper.selectById(userId);
  84. if (rider == null || !"2".equals(rider.getUserType())) {
  85. throw new ServiceException(MessageUtils.message("no.user.stop"));
  86. }
  87. return rider;
  88. }
  89. }