From ed7682093f3cdf3b020dd948e634c0ce983d74db Mon Sep 17 00:00:00 2001 From: qyhdd Date: Thu, 24 Aug 2023 23:56:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=A7=A3=E7=BA=A6=EF=BC=8C?= =?UTF-8?q?=E9=80=80=E6=AC=BE=E5=8A=9F=E8=83=BD=EF=BC=8C=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E6=9B=B4=E6=94=B9=E4=B8=BA=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E6=97=B6=E9=97=B4=E9=99=8D=E5=BA=8F=E6=8E=92?= =?UTF-8?q?=E5=88=97=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=80=80=E6=AC=BE=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=B1=95=E7=A4=BA=E5=92=8C=E6=9F=A5=E8=AF=A2=EF=BC=8C?= =?UTF-8?q?=E6=9D=83=E7=9B=8A=E9=A2=86=E5=8F=96=E5=A2=9E=E5=8A=A0=E9=80=80?= =?UTF-8?q?=E6=AC=BE=E7=94=A8=E6=88=B7=E4=B8=8D=E8=83=BD=E9=A2=86=E5=8F=96?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/compiler.xml | 10 ++++ .../controller/AliPayOrderController.java | 57 +++++++++++++++++++ .../AliPaySigningOrderController.java | 44 +++++++++++++- .../controller/RefundOrderController.java | 36 ++++++++++++ .../rights/controller/AliPayController.java | 28 +-------- .../com/cyjd/rights/dto/AliPayRefundDto.java | 21 +++++++ .../cyjd/rights/dto/AliPayUnSignOrderDto.java | 20 +++++++ .../com/cyjd/rights/dto/RefundOrderDto.java | 42 ++++++++++++++ .../cyjd/rights/entity/RefundOrderEntity.java | 39 +++++++++++++ .../com/cyjd/rights/enums/AliPayEnum.java | 2 +- .../utils/AlipayRequestBuilderUtil.java | 2 +- .../java/com/cyjd/rights/utils/OrderUtil.java | 26 +++++++++ .../business/service/AliPayService.java | 13 +++-- .../business/service/RefundOrderService.java | 13 +++++ .../business/mapper/RefundOrderMapper.java | 12 ++++ .../service/impl/AliPayServiceImpl.java | 31 +++++++++- .../service/impl/RefundOrderServiceImpl.java | 31 ++++++++++ .../service/impl/YunmeiServiceImpl.java | 13 +++++ .../mapper/business/AliPayOrderMapper.xml | 1 + .../business/AliPaySigningOrderMapper.xml | 1 + .../mapper/business/RefundOrderMapper.xml | 33 +++++++++++ .../mapper/business/RightsOrderMapper.xml | 1 + 22 files changed, 441 insertions(+), 35 deletions(-) create mode 100644 rights-admin-controller/src/main/java/com/cyjd/rights/controller/RefundOrderController.java create mode 100644 rights-entity/src/main/java/com/cyjd/rights/dto/AliPayRefundDto.java create mode 100644 rights-entity/src/main/java/com/cyjd/rights/dto/AliPayUnSignOrderDto.java create mode 100644 rights-entity/src/main/java/com/cyjd/rights/dto/RefundOrderDto.java create mode 100644 rights-entity/src/main/java/com/cyjd/rights/entity/RefundOrderEntity.java create mode 100644 rights-interface/src/main/java/com/cyjd/rights/business/service/RefundOrderService.java create mode 100644 rights-server/src/main/java/com/cyjd/rights/business/mapper/RefundOrderMapper.java create mode 100644 rights-server/src/main/java/com/cyjd/rights/business/service/impl/RefundOrderServiceImpl.java create mode 100644 rights-server/src/main/resources/mapper/business/RefundOrderMapper.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml index c9e76b9..6a5d4dd 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -2,6 +2,7 @@ + @@ -14,4 +15,13 @@ + + + \ No newline at end of file diff --git a/rights-admin-controller/src/main/java/com/cyjd/rights/controller/AliPayOrderController.java b/rights-admin-controller/src/main/java/com/cyjd/rights/controller/AliPayOrderController.java index a291fd8..1708819 100644 --- a/rights-admin-controller/src/main/java/com/cyjd/rights/controller/AliPayOrderController.java +++ b/rights-admin-controller/src/main/java/com/cyjd/rights/controller/AliPayOrderController.java @@ -1,8 +1,18 @@ package com.cyjd.rights.controller; +import com.alipay.api.response.AlipayTradeRefundResponse; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.cyjd.rights.beans.R; import com.cyjd.rights.business.service.AliPayOrderService; +import com.cyjd.rights.business.service.AliPayService; +import com.cyjd.rights.business.service.RefundOrderService; import com.cyjd.rights.dto.AliPayInOrderDto; +import com.cyjd.rights.dto.AliPayRefundDto; +import com.cyjd.rights.entity.AliPayOrderEntity; +import com.cyjd.rights.entity.RefundOrderEntity; +import com.cyjd.rights.entity.RightsOrderEntity; +import com.cyjd.rights.utils.OrderUtil; import com.cyjd.rights.vo.AliPayOrderVo; import com.github.pagehelper.PageHelper; import io.swagger.annotations.Api; @@ -16,6 +26,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.time.LocalDateTime; + @Api(value = "支付宝支付订单接口",tags = "支付宝支付订单接口") @RestController @RequestMapping("/rights/aliPayOrder") @@ -23,6 +35,13 @@ import org.springframework.web.bind.annotation.RestController; public class AliPayOrderController { @Autowired private AliPayOrderService aliPayOrderService; + + @Autowired + private AliPayService aliPayService; + + @Autowired + private RefundOrderService refundOrderService; + @ApiOperation(value="查看用户支付记录分页") @PostMapping(value = "/page") public IPage pageOrder(@Validated @RequestBody @ApiParam("用户支付订单对象") AliPayInOrderDto dto){ @@ -32,4 +51,42 @@ public class AliPayOrderController { } + @ApiOperation(value = "支付退款", notes = "支付退款") + @PostMapping("/aliPayRefund") + public R aliPayRefund(@RequestBody AliPayRefundDto aliPayRefundDto) { + //AliPayEnum aliPayEnum = AliPayEnum.getMessageEnum(inMap.get("app_id")); + String outRequestNo = OrderUtil.getItemID(9); + AlipayTradeRefundResponse response = aliPayService.aliPayRefund(aliPayRefundDto, outRequestNo); + if (response==null){ + return R.error(); + } + //保存 + int status=0; + LocalDateTime now = LocalDateTime.now(); + RefundOrderEntity refundOrderEntity = new RefundOrderEntity(); + refundOrderEntity.setRefundPrice(aliPayRefundDto.getRefundAmount().toString()); + refundOrderEntity.setRefundTime(now); + refundOrderEntity.setMobile(aliPayRefundDto.getMobile()); + refundOrderEntity.setLinkId(refundOrderEntity.getLinkId()); + refundOrderEntity.setOutTradeNo(aliPayRefundDto.getOutTradeNo()); + refundOrderEntity.setOutRequestNo(outRequestNo); + + if (response.isSuccess()) { + //修改支付宝退订时间 + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("other_order_id", aliPayRefundDto.getOutTradeNo()); + updateWrapper.eq("mobile", aliPayRefundDto.getMobile()); + updateWrapper.set("unsub_time", now); + aliPayOrderService.update(new AliPayOrderEntity(), updateWrapper); + log.info("手机号:"+ aliPayRefundDto.getMobile()+"商户订单号:"+aliPayRefundDto.getOutTradeNo()+"调用成功"); + status=1; + } else { + log.info("手机号:"+ aliPayRefundDto.getMobile()+"商户订单号:"+aliPayRefundDto.getOutTradeNo()+"调用成功"); + } + refundOrderEntity.setStatus(status); + refundOrderService.save(refundOrderEntity); + return R.ok().put("status",status); + } + + } diff --git a/rights-admin-controller/src/main/java/com/cyjd/rights/controller/AliPaySigningOrderController.java b/rights-admin-controller/src/main/java/com/cyjd/rights/controller/AliPaySigningOrderController.java index 04f2f3e..94eb332 100644 --- a/rights-admin-controller/src/main/java/com/cyjd/rights/controller/AliPaySigningOrderController.java +++ b/rights-admin-controller/src/main/java/com/cyjd/rights/controller/AliPaySigningOrderController.java @@ -1,9 +1,16 @@ package com.cyjd.rights.controller; +import com.alipay.api.response.AlipayUserAgreementUnsignResponse; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.cyjd.rights.beans.R; +import com.cyjd.rights.business.service.AliPayService; import com.cyjd.rights.business.service.AliPaySigningOrderService; import com.cyjd.rights.dto.AliPaySignOrderDto; +import com.cyjd.rights.dto.AliPayUnSignOrderDto; +import com.cyjd.rights.entity.AliPaySigningOrderEntity; import com.cyjd.rights.vo.AliPaySigningOrderVo; +import com.cyjd.rights.vo.AliPayUnSignReq; import com.github.pagehelper.PageHelper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -16,19 +23,50 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -@Api(value = "支付宝签约订单接口",tags = "支付宝签约订单接口") +import java.time.LocalDateTime; + +@Api(value = "支付宝签约订单接口", tags = "支付宝签约订单接口") @RestController @RequestMapping("/rights/aliPaySigningOrder") @Slf4j public class AliPaySigningOrderController { @Autowired private AliPaySigningOrderService aliPaySigningOrderService; - @ApiOperation(value="查看用户签约记录分页") + + @Autowired + private AliPayService aliPayService; + + @ApiOperation(value = "查看用户签约记录分页") @PostMapping(value = "/page") - public IPage pageOrder(@Validated @RequestBody @ApiParam("用户签约对象") AliPaySignOrderDto dto){ + public IPage pageOrder(@Validated @RequestBody @ApiParam("用户签约对象") AliPaySignOrderDto dto) { PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); IPage page = aliPaySigningOrderService.getPageOrder(dto); return page; } + @ApiOperation(value = "用户解约") + @PostMapping(value = "/aliPayUnSign") + public R pageOrder(@Validated @RequestBody @ApiParam("用户解约对象") AliPayUnSignOrderDto dto) { + AliPayUnSignReq aliPayUnSignReq = new AliPayUnSignReq(); + aliPayUnSignReq.setExternalAgreementNo(dto.getOrderId()); + AlipayUserAgreementUnsignResponse alipayUserAgreementUnsignResponse = aliPayService.aliPayUnSign(aliPayUnSignReq, dto.getAccountName()); + if (alipayUserAgreementUnsignResponse == null) { + return R.error(); + } + + if (alipayUserAgreementUnsignResponse.isSuccess()) { + //修改订单解约时间 + LocalDateTime now = LocalDateTime.now(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("order_id", dto.getOrderId()); + updateWrapper.eq("mobile", dto.getMobile()); + updateWrapper.set("unsub_time", now); + aliPaySigningOrderService.update(new AliPaySigningOrderEntity(), updateWrapper); + log.info("手机号:"+ dto.getMobile()+"订单号:"+dto.getOrderId()+"调用成功"); + return R.ok(); + } + log.info("手机号:"+ dto.getMobile()+"订单号:"+dto.getOrderId()+"调用失败"); + return R.error(); + } + } diff --git a/rights-admin-controller/src/main/java/com/cyjd/rights/controller/RefundOrderController.java b/rights-admin-controller/src/main/java/com/cyjd/rights/controller/RefundOrderController.java new file mode 100644 index 0000000..323a13c --- /dev/null +++ b/rights-admin-controller/src/main/java/com/cyjd/rights/controller/RefundOrderController.java @@ -0,0 +1,36 @@ +package com.cyjd.rights.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.cyjd.rights.business.service.RefundOrderService; +import com.cyjd.rights.dto.AliPayInOrderDto; +import com.cyjd.rights.dto.RefundOrderDto; +import com.cyjd.rights.entity.RefundOrderEntity; +import com.cyjd.rights.vo.AliPayOrderVo; +import com.github.pagehelper.PageHelper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(value = "退款类接口", tags = "退款类接口") +@RestController +@RequestMapping("/rights/refund") +@Slf4j +public class RefundOrderController { + @Autowired + private RefundOrderService refundOrderService; + @ApiOperation(value="查看用户退款记录分页") + @PostMapping(value = "/page") + public IPage pageOrder(@Validated @RequestBody @ApiParam("用户支付退款对象") RefundOrderDto dto){ + PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); + IPage page = refundOrderService.getPageOrder(dto); + return page; + } + +} diff --git a/rights-client-controller/src/main/java/com/cyjd/rights/controller/AliPayController.java b/rights-client-controller/src/main/java/com/cyjd/rights/controller/AliPayController.java index 6254d18..cce0f91 100644 --- a/rights-client-controller/src/main/java/com/cyjd/rights/controller/AliPayController.java +++ b/rights-client-controller/src/main/java/com/cyjd/rights/controller/AliPayController.java @@ -1,8 +1,11 @@ package com.cyjd.rights.controller; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.alipay.api.*; import com.alipay.api.internal.util.AlipaySignature; +import com.alipay.api.request.AlipayTradeRefundRequest; +import com.alipay.api.response.AlipayTradeRefundResponse; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.cyjd.rights.beans.AliPayProperties; import com.cyjd.rights.beans.R; @@ -202,31 +205,6 @@ public class AliPayController { } - @ApiOperation(value = "支付退款", notes = "支付退款") - @PostMapping("/alipayRefund") - public void alipayRefund() throws AlipayApiException { -// AliPayEnum aliPayEnum = AliPayEnum.getMessageEnum(inMap.get("app_id")); -// CertAlipayRequest certAlipayRequest = aliPayService.init(aliPayEnum.getAccountName()); -// AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); -// AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); -// JSONObject bizContent = new JSONObject(); -// bizContent.put("out_trade_no", "Y2023080420524534021000"); -// bizContent.put("refund_amount", 0.1); -// bizContent.put("out_request_no", "HZ01RF001"); -// //// 返回参数选项,按需传入 -// //JSONArray queryOptions = new JSONArray(); -// //queryOptions.add("refund_detail_item_list"); -// //bizContent.put("query_options", queryOptions); -// -// request.setBizContent(bizContent.toString()); -// AlipayTradeRefundResponse response = alipayClient.certificateExecute(request); -// if (response.isSuccess()) { -// System.out.println("调用成功"); -// } else { -// System.out.println("调用失败"); -// } - - } //@Scheduled(cron = "0 0 8,20 * * ?") diff --git a/rights-entity/src/main/java/com/cyjd/rights/dto/AliPayRefundDto.java b/rights-entity/src/main/java/com/cyjd/rights/dto/AliPayRefundDto.java new file mode 100644 index 0000000..863ed5c --- /dev/null +++ b/rights-entity/src/main/java/com/cyjd/rights/dto/AliPayRefundDto.java @@ -0,0 +1,21 @@ +package com.cyjd.rights.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@ApiModel(value = "用户退款请求") +@Data +public class AliPayRefundDto { + @ApiModelProperty(value = "账户名称") + private String aliAccountName; + + @ApiModelProperty("退订金额") + private Float refundAmount; + + @ApiModelProperty("商户订单号(对应支付表里的other_order_id)") + private String outTradeNo; + + @ApiModelProperty("用户手机号") + private String mobile; +} diff --git a/rights-entity/src/main/java/com/cyjd/rights/dto/AliPayUnSignOrderDto.java b/rights-entity/src/main/java/com/cyjd/rights/dto/AliPayUnSignOrderDto.java new file mode 100644 index 0000000..9b4ccdb --- /dev/null +++ b/rights-entity/src/main/java/com/cyjd/rights/dto/AliPayUnSignOrderDto.java @@ -0,0 +1,20 @@ +package com.cyjd.rights.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@ApiModel(value = "支付解约请求") +@Data +public class AliPayUnSignOrderDto{ + + @ApiModelProperty(value = "对应签约表的orderId") + private String orderId; + + + @ApiModelProperty(value = "手机号") + private String mobile; + + @ApiModelProperty(value = "对应的账户名字") + private String accountName; +} diff --git a/rights-entity/src/main/java/com/cyjd/rights/dto/RefundOrderDto.java b/rights-entity/src/main/java/com/cyjd/rights/dto/RefundOrderDto.java new file mode 100644 index 0000000..33fbd3a --- /dev/null +++ b/rights-entity/src/main/java/com/cyjd/rights/dto/RefundOrderDto.java @@ -0,0 +1,42 @@ +package com.cyjd.rights.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + + +@ApiModel(value = "退款请求") +@Data +public class RefundOrderDto extends BasePageDto{ + + @ApiModelProperty(value = "商户订单号 对应支付表的other_order_id") + private String outTradeNo; + + + @ApiModelProperty(value = "链接Id") + private String linkId; + + @ApiModelProperty(value = "退款订单号") + private String outRequestNo; + + @ApiModelProperty(value = "手机号") + private String mobile; + /** + * 0失败 1成功 + */ + @ApiModelProperty(value = "订单状态") + private String status; + + @ApiModelProperty(value = "查询开始时间") + @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime beginTime; + + @ApiModelProperty(value = "查询结束时间") + @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime endTime; + + +} diff --git a/rights-entity/src/main/java/com/cyjd/rights/entity/RefundOrderEntity.java b/rights-entity/src/main/java/com/cyjd/rights/entity/RefundOrderEntity.java new file mode 100644 index 0000000..8d73e60 --- /dev/null +++ b/rights-entity/src/main/java/com/cyjd/rights/entity/RefundOrderEntity.java @@ -0,0 +1,39 @@ +package com.cyjd.rights.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("tb_refund_order") +public class RefundOrderEntity { + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + //手机号 + private String mobile; + + //退款时间 + private LocalDateTime refundTime; + + //商户订单号 对应支付表的other_order_id + private String outTradeNo; + + //退款订单号,传了这个支付宝会保证同样的退款请求号多次请求只会退一次 + private String outRequestNo; + + //退款金额 + private String refundPrice; + + //链接Id + private Integer linkId; + + //0失败 1成功 + private Integer status; +} diff --git a/rights-entity/src/main/java/com/cyjd/rights/enums/AliPayEnum.java b/rights-entity/src/main/java/com/cyjd/rights/enums/AliPayEnum.java index a02d3c5..e7411fb 100644 --- a/rights-entity/src/main/java/com/cyjd/rights/enums/AliPayEnum.java +++ b/rights-entity/src/main/java/com/cyjd/rights/enums/AliPayEnum.java @@ -9,7 +9,7 @@ import java.util.Arrays; public enum AliPayEnum { CJYD1("cyjd1","2021003135690045"),CJYD2("cyjd2","2021004109660018"), - CYJD3("cyjd3","2021004110626111"); + CYJD3("cyjd3","2021004110626111"),ZX1("zx1","2021004111695300"); private String accountName; diff --git a/rights-entity/src/main/java/com/cyjd/rights/utils/AlipayRequestBuilderUtil.java b/rights-entity/src/main/java/com/cyjd/rights/utils/AlipayRequestBuilderUtil.java index 3cce3fd..c41ef33 100644 --- a/rights-entity/src/main/java/com/cyjd/rights/utils/AlipayRequestBuilderUtil.java +++ b/rights-entity/src/main/java/com/cyjd/rights/utils/AlipayRequestBuilderUtil.java @@ -125,7 +125,7 @@ public class AlipayRequestBuilderUtil { AlipayUserAgreementUnsignRequest request = new AlipayUserAgreementUnsignRequest(); AliPayUnSignContentReq aliPayUnSignContentReq = EntityConvertUtil.convertBean(aliPayUnSignReq, AliPayUnSignContentReq.class); aliPayUnSignContentReq.setPersonalProductCode(AliPayConstant.CYCLE_PAY_AUTH_P); - aliPayUnSignContentReq.setSignScene(AliPayConstant.CYCLE_SIGN_SCENE); + aliPayUnSignContentReq.setSignScene(AliPayConstant.INDUSTRY_DEFAULT_SCENE); request.setBizContent(GSON.toJson(aliPayUnSignContentReq)); return request; } diff --git a/rights-entity/src/main/java/com/cyjd/rights/utils/OrderUtil.java b/rights-entity/src/main/java/com/cyjd/rights/utils/OrderUtil.java index b34a404..c5d5c2e 100644 --- a/rights-entity/src/main/java/com/cyjd/rights/utils/OrderUtil.java +++ b/rights-entity/src/main/java/com/cyjd/rights/utils/OrderUtil.java @@ -25,4 +25,30 @@ public class OrderUtil { return "Y" + DateUtil.format(new Date(), "yyyyMMddHHmmss") + new Random().nextInt(8999) + 1000; } + + /** + * 生成随机数当作getItemID 退订单号 + * n : 需要的长度 + * @return + */ + public static String getItemID( int n ) + { + String val = ""; + Random random = new Random(); + for ( int i = 0; i < n; i++ ) + { + String str = random.nextInt( 2 ) % 2 == 0 ? "num" : "char"; + if ( "char".equalsIgnoreCase( str ) ) + { // 产生字母 + int nextInt = random.nextInt( 2 ) % 2 == 0 ? 65 : 97; + // System.out.println(nextInt + "!!!!"); 1,0,1,1,1,0,0 + val += (char) ( nextInt + random.nextInt( 26 ) ); + } + else if ( "num".equalsIgnoreCase( str ) ) + { // 产生数字 + val += String.valueOf( random.nextInt( 10 ) ); + } + } + return val; + } } diff --git a/rights-interface/src/main/java/com/cyjd/rights/business/service/AliPayService.java b/rights-interface/src/main/java/com/cyjd/rights/business/service/AliPayService.java index 2ba8e02..184b32f 100644 --- a/rights-interface/src/main/java/com/cyjd/rights/business/service/AliPayService.java +++ b/rights-interface/src/main/java/com/cyjd/rights/business/service/AliPayService.java @@ -2,10 +2,8 @@ package com.cyjd.rights.business.service; import com.alipay.api.CertAlipayRequest; -import com.alipay.api.response.AlipayTradeCancelResponse; -import com.alipay.api.response.AlipayTradePayResponse; -import com.alipay.api.response.AlipayUserAgreementExecutionplanModifyResponse; -import com.alipay.api.response.AlipayUserAgreementUnsignResponse; +import com.alipay.api.response.*; +import com.cyjd.rights.dto.AliPayRefundDto; import com.cyjd.rights.entity.AliPaySigningOrderEntity; import com.cyjd.rights.vo.*; @@ -65,5 +63,12 @@ public interface AliPayService { CertAlipayRequest init(String aliPayAccountName); + /** + * 退款 + * @param aliPayRefundDto + * @param outRequestNo + * @return + */ + AlipayTradeRefundResponse aliPayRefund(AliPayRefundDto aliPayRefundDto,String outRequestNo); } diff --git a/rights-interface/src/main/java/com/cyjd/rights/business/service/RefundOrderService.java b/rights-interface/src/main/java/com/cyjd/rights/business/service/RefundOrderService.java new file mode 100644 index 0000000..9f87d3f --- /dev/null +++ b/rights-interface/src/main/java/com/cyjd/rights/business/service/RefundOrderService.java @@ -0,0 +1,13 @@ +package com.cyjd.rights.business.service; + +import com.alipay.api.CertAlipayRequest; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.cyjd.rights.dto.RefundOrderDto; +import com.cyjd.rights.entity.AliAccountEntity; +import com.cyjd.rights.entity.RefundOrderEntity; + +public interface RefundOrderService extends IService { + + IPage getPageOrder(RefundOrderDto dto); +} diff --git a/rights-server/src/main/java/com/cyjd/rights/business/mapper/RefundOrderMapper.java b/rights-server/src/main/java/com/cyjd/rights/business/mapper/RefundOrderMapper.java new file mode 100644 index 0000000..879256f --- /dev/null +++ b/rights-server/src/main/java/com/cyjd/rights/business/mapper/RefundOrderMapper.java @@ -0,0 +1,12 @@ +package com.cyjd.rights.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cyjd.rights.dto.RefundOrderDto; +import com.cyjd.rights.entity.RefundOrderEntity; + +import java.util.List; + +public interface RefundOrderMapper extends BaseMapper { + + List getPageOrder(RefundOrderDto dto); +} diff --git a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayServiceImpl.java b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayServiceImpl.java index c908953..eb7d55a 100644 --- a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayServiceImpl.java +++ b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayServiceImpl.java @@ -1,5 +1,6 @@ package com.cyjd.rights.business.service.impl; +import com.alibaba.fastjson.JSONObject; import com.alipay.api.*; import com.alipay.api.request.*; import com.alipay.api.response.*; @@ -9,10 +10,12 @@ import com.cyjd.rights.business.service.AliAccountService; import com.cyjd.rights.business.service.AliPayOrderService; import com.cyjd.rights.business.service.AliPayService; import com.cyjd.rights.constant.AliPayConstant; +import com.cyjd.rights.dto.AliPayRefundDto; import com.cyjd.rights.entity.AliAccountEntity; import com.cyjd.rights.entity.AliPayOrderEntity; import com.cyjd.rights.entity.AliPaySigningOrderEntity; import com.cyjd.rights.utils.AlipayRequestBuilderUtil; +import com.cyjd.rights.utils.OrderUtil; import com.cyjd.rights.vo.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -251,7 +254,7 @@ public class AliPayServiceImpl implements AliPayService { AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); AlipayUserAgreementUnsignRequest request = alipayRequestBuilderUtil.buildAlipayUserAgreementUnsignRequest(aliPayUnSignReq); //log.info("签约号{}:周期扣款-解除签约入参:{}", aliPayUnSignReq.getExternalAgreementNo(), request.getBizContent()); - AlipayUserAgreementUnsignResponse response = alipayClient.execute(request); + AlipayUserAgreementUnsignResponse response = alipayClient.certificateExecute(request); if (response.isSuccess()) { //log.info("用户内部系统签约号{}:周期扣款-解除签约,调用成功", aliPayUnSignReq.getExternalAgreementNo()); return response; @@ -289,5 +292,31 @@ public class AliPayServiceImpl implements AliPayService { return certAlipayRequest; } + @Override + public AlipayTradeRefundResponse aliPayRefund(AliPayRefundDto aliPayRefundDto, String outRequestNo) { + CertAlipayRequest certAlipayRequest = init(aliPayRefundDto.getAliAccountName()); + AlipayClient alipayClient = null; + AlipayTradeRefundResponse response=null; + try { + alipayClient = new DefaultAlipayClient(certAlipayRequest); + AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); + JSONObject bizContent = new JSONObject(); + bizContent.put("out_trade_no", aliPayRefundDto.getOutTradeNo()); //商户订单号 + bizContent.put("refund_amount", aliPayRefundDto.getRefundAmount()); + bizContent.put("out_request_no", outRequestNo); //退订单号,传了这个支付宝会保证同样的退款请求号多次请求只会退一次 + //// 返回参数选项,按需传入 + //JSONArray queryOptions = new JSONArray(); + //queryOptions.add("refund_detail_item_list"); + //bizContent.put("query_options", queryOptions); + + request.setBizContent(bizContent.toString()); + response= alipayClient.certificateExecute(request); + return response; + } catch (AlipayApiException e) { + e.printStackTrace(); + return null; + } + } + } diff --git a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/RefundOrderServiceImpl.java b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/RefundOrderServiceImpl.java new file mode 100644 index 0000000..cfcf76f --- /dev/null +++ b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/RefundOrderServiceImpl.java @@ -0,0 +1,31 @@ +package com.cyjd.rights.business.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cyjd.rights.business.mapper.RefundOrderMapper; +import com.cyjd.rights.business.service.RefundOrderService; +import com.cyjd.rights.dto.RefundOrderDto; +import com.cyjd.rights.entity.RefundOrderEntity; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.extern.java.Log; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +@Log +public class RefundOrderServiceImpl extends ServiceImpl implements RefundOrderService { + @Resource + private RefundOrderMapper refundOrderMapper; + @Override + public IPage getPageOrder(RefundOrderDto dto) { + PageHelper.startPage(dto.getPageNum(),dto.getPageSize()); + List pageOrder = refundOrderMapper.getPageOrder(dto); + IPage page=new Page<>(dto.getPageNum(),dto.getPageSize(),new PageInfo(pageOrder).getTotal()); + page.setRecords(pageOrder); + return page; + } +} diff --git a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/YunmeiServiceImpl.java b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/YunmeiServiceImpl.java index 37cfbf6..38b1195 100644 --- a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/YunmeiServiceImpl.java +++ b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/YunmeiServiceImpl.java @@ -15,6 +15,7 @@ import com.cyjd.rights.dto.DirectBuyOrderDto; import com.cyjd.rights.dto.OrderNotifyDto; import com.cyjd.rights.entity.AliPayOrderEntity; import com.cyjd.rights.entity.AliPaySigningOrderEntity; +import com.cyjd.rights.entity.RefundOrderEntity; import com.cyjd.rights.entity.RightsOrderEntity; import com.cyjd.rights.enums.YunmeiCallbackEnum; import com.cyjd.rights.enums.YunmeiEnum; @@ -45,6 +46,9 @@ public class YunmeiServiceImpl implements YunmeiService { @Autowired private RightsOrderService rightsOrderService; + @Autowired + private RefundOrderServiceImpl refundOrderService; + @Override public JSONArray getProductList() { long timeMillis = System.currentTimeMillis(); @@ -181,6 +185,15 @@ public class YunmeiServiceImpl implements YunmeiService { JSONObject resJSON = new JSONObject(); String code = "10026"; String reason = "暂无领取资格"; + //判断用户是否退订 + RefundOrderEntity refundOrder = refundOrderService.getOne(new QueryWrapper().eq("mobile", mobile)); + if (refundOrder==null){ + code = "10027"; + reason = "黑名单用户或已退款"; + resJSON.put("code", code); + resJSON.put("reason", reason); + return resJSON; + } AliPayOrderEntity aliPayOrderEntity = aliPayOrderService.getOne(new QueryWrapper() .eq("mobile", mobile).eq("status", 1) .select("mobile,order_time").orderByDesc("order_time")); diff --git a/rights-server/src/main/resources/mapper/business/AliPayOrderMapper.xml b/rights-server/src/main/resources/mapper/business/AliPayOrderMapper.xml index 6fc7b0f..958e0ac 100644 --- a/rights-server/src/main/resources/mapper/business/AliPayOrderMapper.xml +++ b/rights-server/src/main/resources/mapper/business/AliPayOrderMapper.xml @@ -29,6 +29,7 @@ and order_time < #{endTime} + order by order_time desc \ No newline at end of file diff --git a/rights-server/src/main/resources/mapper/business/AliPaySigningOrderMapper.xml b/rights-server/src/main/resources/mapper/business/AliPaySigningOrderMapper.xml index a5e9fe1..f67873b 100644 --- a/rights-server/src/main/resources/mapper/business/AliPaySigningOrderMapper.xml +++ b/rights-server/src/main/resources/mapper/business/AliPaySigningOrderMapper.xml @@ -35,5 +35,6 @@ and next_pay_time < #{endSearchNextPayTime} + order by order_time desc \ No newline at end of file diff --git a/rights-server/src/main/resources/mapper/business/RefundOrderMapper.xml b/rights-server/src/main/resources/mapper/business/RefundOrderMapper.xml new file mode 100644 index 0000000..7cf3f76 --- /dev/null +++ b/rights-server/src/main/resources/mapper/business/RefundOrderMapper.xml @@ -0,0 +1,33 @@ + + + + + \ No newline at end of file diff --git a/rights-server/src/main/resources/mapper/business/RightsOrderMapper.xml b/rights-server/src/main/resources/mapper/business/RightsOrderMapper.xml index 89dd3e2..fd90a0c 100644 --- a/rights-server/src/main/resources/mapper/business/RightsOrderMapper.xml +++ b/rights-server/src/main/resources/mapper/business/RightsOrderMapper.xml @@ -23,5 +23,6 @@ and order_time < #{endTime} + order by order_time desc \ No newline at end of file