Commit fd9fb2a6 authored by dqjdda's avatar dqjdda
Browse files

Merge branch '2.3dev'

parents 7895e547 1839ef8d
...@@ -22,3 +22,12 @@ export function edit(data) { ...@@ -22,3 +22,12 @@ export function edit(data) {
data data
}) })
} }
export function download${className}(params) {
return request({
url: 'api/${changeClassName}/download',
method: 'get',
params,
responseType: 'blob'
})
}
...@@ -5,7 +5,11 @@ ...@@ -5,7 +5,11 @@
<#list columns as column> <#list columns as column>
<#if column.changeColumnName != '${pkChangeColName}'> <#if column.changeColumnName != '${pkChangeColName}'>
<el-form-item label="<#if column.columnComment != ''>${column.columnComment}<#else>${column.changeColumnName}</#if>" <#if column.columnKey = 'UNI'>prop="${column.changeColumnName}"</#if>> <el-form-item label="<#if column.columnComment != ''>${column.columnComment}<#else>${column.changeColumnName}</#if>" <#if column.columnKey = 'UNI'>prop="${column.changeColumnName}"</#if>>
<#if column.columnType != 'Timestamp'>
<el-input v-model="form.${column.changeColumnName}" style="width: 370px;"/> <el-input v-model="form.${column.changeColumnName}" style="width: 370px;"/>
<#else >
<el-date-picker v-model="form.${column.changeColumnName}" type="datetime" style="width: 370px;"/>
</#if>
</el-form-item> </el-form-item>
</#if> </#if>
</#list> </#list>
......
...@@ -14,13 +14,23 @@ ...@@ -14,13 +14,23 @@
<!-- 新增 --> <!-- 新增 -->
<div style="display: inline-block;margin: 0px 2px;"> <div style="display: inline-block;margin: 0px 2px;">
<el-button <el-button
v-permission="['ADMIN','${upperCaseClassName}_ALL','${upperCaseClassName}_CREATE']" v-permission="['admin','${changeClassName}:add']"
class="filter-item" class="filter-item"
size="mini" size="mini"
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
@click="add">新增</el-button> @click="add">新增</el-button>
</div> </div>
<!-- 导出 -->
<div style="display: inline-block;">
<el-button
:loading="downloadLoading"
size="mini"
class="filter-item"
type="warning"
icon="el-icon-download"
@click="download">导出</el-button>
</div>
</div> </div>
<!--表单组件--> <!--表单组件-->
<eForm ref="form" :is-add="isAdd"/> <eForm ref="form" :is-add="isAdd"/>
...@@ -41,11 +51,11 @@ ...@@ -41,11 +51,11 @@
</#if> </#if>
</#list> </#list>
</#if> </#if>
<el-table-column v-if="checkPermission(['ADMIN','${upperCaseClassName}_ALL','${upperCaseClassName}_EDIT','${upperCaseClassName}_DELETE'])" label="操作" width="150px" align="center"> <el-table-column v-if="checkPermission(['admin','${changeClassName}:edit','${changeClassName}:del'])" label="操作" width="150px" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-permission="['ADMIN','${upperCaseClassName}_ALL','${upperCaseClassName}_EDIT']" size="mini" type="primary" icon="el-icon-edit" @click="edit(scope.row)"/> <el-button v-permission="['admin','${changeClassName}:edit']" size="mini" type="primary" icon="el-icon-edit" @click="edit(scope.row)"/>
<el-popover <el-popover
v-permission="['ADMIN','${upperCaseClassName}_ALL','${upperCaseClassName}_DELETE']" v-permission="['admin','${changeClassName}:del']"
:ref="scope.row.${pkChangeColName}" :ref="scope.row.${pkChangeColName}"
placement="top" placement="top"
width="180"> width="180">
...@@ -73,9 +83,9 @@ ...@@ -73,9 +83,9 @@
<script> <script>
import checkPermission from '@/utils/permission' import checkPermission from '@/utils/permission'
import initData from '@/mixins/initData' import initData from '@/mixins/initData'
import { del } from '@/api/${changeClassName}' import { del, download${className} } from '@/api/${changeClassName}'
<#if hasTimestamp> <#if hasTimestamp>
import { parseTime } from '@/utils/index' import { parseTime, downloadFile } from '@/utils/index'
</#if> </#if>
import eForm from './form' import eForm from './form'
export default { export default {
...@@ -150,6 +160,17 @@ export default { ...@@ -150,6 +160,17 @@ export default {
</#if> </#if>
} }
_this.dialog = true _this.dialog = true
},
// 导出
download() {
this.beforeInit()
this.downloadLoading = true
download${className}(this.params).then(result => {
downloadFile(result, '${className}列表', 'xlsx')
this.downloadLoading = false
}).catch(() => {
this.downloadLoading = false
})
} }
} }
} }
......
...@@ -11,7 +11,7 @@ public class EladminSystemApplicationTests { ...@@ -11,7 +11,7 @@ public class EladminSystemApplicationTests {
@Test @Test
public void contextLoads() { public void contextLoads() {
}
}
} }
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>eladmin</artifactId> <artifactId>eladmin</artifactId>
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
<version>2.2</version> <version>2.3</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<dependency> <dependency>
<groupId>me.zhengjie</groupId> <groupId>me.zhengjie</groupId>
<artifactId>eladmin-logging</artifactId> <artifactId>eladmin-logging</artifactId>
<version>2.2</version> <version>2.3</version>
</dependency> </dependency>
<!--邮件依赖--> <!--邮件依赖-->
......
...@@ -18,66 +18,46 @@ public class AlipayConfig implements Serializable { ...@@ -18,66 +18,46 @@ public class AlipayConfig implements Serializable {
@Id @Id
private Long id; private Long id;
/** // 应用ID,APPID,收款账号既是APPID对应支付宝账号
* 应用ID,APPID,收款账号既是APPID对应支付宝账号
*/
@NotBlank @NotBlank
@Column(name = "app_id") @Column(name = "app_id")
private String appID; private String appID;
/** // 商户私钥,您的PKCS8格式RSA2私钥
* 商户私钥,您的PKCS8格式RSA2私钥
*/
@NotBlank @NotBlank
@Column(name = "private_key", columnDefinition = "text") @Column(name = "private_key", columnDefinition = "text")
private String privateKey; private String privateKey;
/** // 支付宝公钥
* 支付宝公钥
*/
@NotBlank @NotBlank
@Column(name = "public_key", columnDefinition = "text") @Column(name = "public_key", columnDefinition = "text")
private String publicKey; private String publicKey;
/** // 签名方式,固定格式
* 签名方式,固定格式
*/
@Column(name = "sign_type") @Column(name = "sign_type")
private String signType="RSA2"; private String signType="RSA2";
/** // 支付宝开放安全地址,一般不会变
* 支付宝开放安全地址,一般不会变
*/
@Column(name = "gateway_url") @Column(name = "gateway_url")
private String gatewayUrl = "https://openapi.alipaydev.com/gateway.do"; private String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
/** // 编码,固定格式
* 编码,固定格式
*/
private String charset= "utf-8"; private String charset= "utf-8";
/** // 异步通知地址
* 异步通知地址
*/
@NotBlank @NotBlank
@Column(name = "notify_url") @Column(name = "notify_url")
private String notifyUrl; private String notifyUrl;
/** // 订单完成后返回的页面
* 订单完成后返回的页面
*/
@NotBlank @NotBlank
@Column(name = "return_url") @Column(name = "return_url")
private String returnUrl; private String returnUrl;
/** // 类型,固定格式
* 类型,固定格式
*/
private String format="JSON"; private String format="JSON";
/** // 商户号
* 商户号
*/
@NotBlank @NotBlank
@Column(name = "sys_service_provider_id") @Column(name = "sys_service_provider_id")
private String sysServiceProviderId; private String sysServiceProviderId;
......
...@@ -19,30 +19,22 @@ public class EmailConfig implements Serializable { ...@@ -19,30 +19,22 @@ public class EmailConfig implements Serializable {
@Id @Id
private Long id; private Long id;
/** // 邮件服务器SMTP地址
*邮件服务器SMTP地址
*/
@NotBlank @NotBlank
private String host; private String host;
/** // 邮件服务器SMTP端口
* 邮件服务器SMTP端口
*/
@NotBlank @NotBlank
private String port; private String port;
/** // 发件者用户名,默认为发件人邮箱前缀
* 发件者用户名,默认为发件人邮箱前缀
*/
@NotBlank @NotBlank
private String user; private String user;
@NotBlank @NotBlank
private String pass; private String pass;
/** // 收件人
* 收件人
*/
@NotBlank @NotBlank
@Column(name = "from_user") @Column(name = "from_user")
private String fromUser; private String fromUser;
......
package me.zhengjie.domain; package me.zhengjie.domain;
import lombok.AllArgsConstructor; import lombok.*;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.CopyOptions;
import lombok.NoArgsConstructor; import me.zhengjie.base.BaseEntity;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*; import javax.persistence.*;
import java.sql.Timestamp;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp;
/** /**
* @author Zheng Jie * @author Zheng Jie
* @date 2019-09-05 * @date 2019-09-05
*/ */
@Getter
@Setter
@Entity @Entity
@Data
@Table(name="local_storage") @Table(name="local_storage")
@AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class LocalStorage implements Serializable { public class LocalStorage implements Serializable {
// ID
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id") @Column(name = "id")
...@@ -57,16 +54,10 @@ public class LocalStorage implements Serializable { ...@@ -57,16 +54,10 @@ public class LocalStorage implements Serializable {
@Column(name = "operate") @Column(name = "operate")
private String operate; private String operate;
// 创建日期
@Column(name = "create_time") @Column(name = "create_time")
@CreationTimestamp @CreationTimestamp
private Timestamp createTime; private Timestamp createTime;
// 修改日期
@Column(name = "update_time")
@UpdateTimestamp
private Timestamp updateTime;
public LocalStorage(String realName,String name, String suffix, String path, String type, String size, String operate) { public LocalStorage(String realName,String name, String suffix, String path, String type, String size, String operate) {
this.realName = realName; this.realName = realName;
this.name = name; this.name = name;
......
...@@ -32,9 +32,6 @@ public class Picture implements Serializable { ...@@ -32,9 +32,6 @@ public class Picture implements Serializable {
private String width; private String width;
/**
* delete URl
*/
@Column(name = "delete_url") @Column(name = "delete_url")
private String delete; private String delete;
...@@ -44,6 +41,9 @@ public class Picture implements Serializable { ...@@ -44,6 +41,9 @@ public class Picture implements Serializable {
@Column(name = "create_time") @Column(name = "create_time")
private Timestamp createTime; private Timestamp createTime;
// 用于检测文件是否重复
private String md5Code;
@Override @Override
public String toString() { public String toString() {
return "Picture{" + return "Picture{" +
......
...@@ -18,23 +18,17 @@ public class QiniuConfig implements Serializable { ...@@ -18,23 +18,17 @@ public class QiniuConfig implements Serializable {
@Id @Id
private Long id; private Long id;
/** // 一个账号最多拥有两对密钥(Access/Secret Key)
* 一个账号最多拥有两对密钥(Access/Secret Key)
*/
@NotBlank @NotBlank
@Column(name = "access_key", columnDefinition = "text") @Column(name = "access_key", columnDefinition = "text")
private String accessKey; private String accessKey;
/** // 一个账号最多拥有两对密钥(Access/Secret Key)
* 一个账号最多拥有两对密钥(Access/Secret Key)
*/
@NotBlank @NotBlank
@Column(name = "secret_key", columnDefinition = "text") @Column(name = "secret_key", columnDefinition = "text")
private String secretKey; private String secretKey;
/** // 存储空间名称作为唯一的 Bucket 识别符
* 存储空间名称作为唯一的 Bucket 识别符
*/
@NotBlank @NotBlank
private String bucket; private String bucket;
...@@ -49,14 +43,10 @@ public class QiniuConfig implements Serializable { ...@@ -49,14 +43,10 @@ public class QiniuConfig implements Serializable {
@NotBlank @NotBlank
private String zone; private String zone;
/** // 外链域名,可自定义,需在七牛云绑定
* 外链域名,可自定义,需在七牛云绑定
*/
@NotBlank @NotBlank
private String host; private String host;
/** // 空间类型:公开/私有
* 空间类型:公开/私有
*/
private String type = "公开"; private String type = "公开";
} }
...@@ -21,37 +21,25 @@ public class QiniuContent implements Serializable { ...@@ -21,37 +21,25 @@ public class QiniuContent implements Serializable {
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
/** // 文件名
* 文件名,如qiniu.jpg @Column(name = "name")
*/
@Column(name = "name",unique = false)
private String key; private String key;
/** // 空间名
* 空间名
*/
private String bucket; private String bucket;
/** // 大小
* 大小
*/
private String size; private String size;
/** // 文件地址
* 文件地址
*/
private String url; private String url;
private String suffix; private String suffix;
/** // 空间类型:公开/私有
* 空间类型:公开/私有
*/
private String type = "公开"; private String type = "公开";
/** // 更新时间
* 更新时间
*/
@UpdateTimestamp @UpdateTimestamp
@Column(name = "update_time") @Column(name = "update_time")
private Timestamp updateTime; private Timestamp updateTime;
......
...@@ -7,6 +7,7 @@ import org.hibernate.annotations.CreationTimestamp; ...@@ -7,6 +7,7 @@ import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.sql.Timestamp; import java.sql.Timestamp;
/** /**
...@@ -18,7 +19,7 @@ import java.sql.Timestamp; ...@@ -18,7 +19,7 @@ import java.sql.Timestamp;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Table(name = "verification_code") @Table(name = "verification_code")
public class VerificationCode { public class VerificationCode implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
...@@ -26,32 +27,21 @@ public class VerificationCode { ...@@ -26,32 +27,21 @@ public class VerificationCode {
private String code; private String code;
/** // 使用场景,自己定义
* 使用场景,自己定义
*/
private String scenes; private String scenes;
/** // true 为有效,false 为无效,验证时状态+时间+具体的邮箱或者手机号
* true 为有效,false 为无效,验证时状态+时间+具体的邮箱或者手机号
*/
private Boolean status = true; private Boolean status = true;
// 类型 :phone 和 email
/**
* 类型 :phone 和 email
*/
@NotBlank @NotBlank
private String type; private String type;
/** // 具体的phone与email
* 具体的phone与email
*/
@NotBlank @NotBlank
private String value; private String value;
/** // 创建日期
* 创建日期
*/
@CreationTimestamp @CreationTimestamp
@Column(name = "create_time") @Column(name = "create_time")
private Timestamp createTime; private Timestamp createTime;
......
...@@ -18,9 +18,7 @@ import java.util.List; ...@@ -18,9 +18,7 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
public class EmailVo { public class EmailVo {
/** // 收件人,支持多个收件人,用逗号分隔
* 收件人,支持多个收件人,用逗号分隔
*/
@NotEmpty @NotEmpty
private List<String> tos; private List<String> tos;
......
...@@ -15,51 +15,35 @@ import java.sql.Timestamp; ...@@ -15,51 +15,35 @@ import java.sql.Timestamp;
@Data @Data
public class TradeVo { public class TradeVo {
/** // (必填)商品描述
* (必填)商品描述
*/
@NotBlank @NotBlank
private String body; private String body;
/** // (必填)商品名称
* (必填)商品名称
*/
@NotBlank @NotBlank
private String subject; private String subject;
/** // (必填)商户订单号,应该由后台生成
* (必填)商户订单号,应该由后台生成
*/
@ApiModelProperty(hidden = true) @ApiModelProperty(hidden = true)
private String outTradeNo; private String outTradeNo;
/** // (必填)第三方订单号
* (必填)第三方订单号
*/
@ApiModelProperty(hidden = true) @ApiModelProperty(hidden = true)
private String tradeNo; private String tradeNo;
/** // (必填)价格
* (必填)价格
*/
@NotBlank @NotBlank
private String totalAmount; private String totalAmount;
/** // 订单状态,已支付,未支付,作废
* 订单状态,已支付,未支付,作废
*/
@ApiModelProperty(hidden = true) @ApiModelProperty(hidden = true)
private String state; private String state;
/** // 创建时间,存入数据库时需要
* 创建时间,存入数据库时需要
*/
@ApiModelProperty(hidden = true) @ApiModelProperty(hidden = true)
private Timestamp createTime; private Timestamp createTime;
/** // 作废时间,存入数据库时需要
* 作废时间,存入数据库时需要
*/
@ApiModelProperty(hidden = true) @ApiModelProperty(hidden = true)
private Date cancelTime; private Date cancelTime;
} }
...@@ -8,5 +8,5 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; ...@@ -8,5 +8,5 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
* @author Zheng Jie * @author Zheng Jie
* @date 2019-09-05 * @date 2019-09-05
*/ */
public interface LocalStorageRepository extends JpaRepository<LocalStorage, Long>, JpaSpecificationExecutor { public interface LocalStorageRepository extends JpaRepository<LocalStorage, Long>, JpaSpecificationExecutor<LocalStorage> {
} }
\ No newline at end of file
...@@ -8,5 +8,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; ...@@ -8,5 +8,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
* @author Zheng Jie * @author Zheng Jie
* @date 2018-12-27 * @date 2018-12-27
*/ */
public interface PictureRepository extends JpaRepository<Picture,Long>, JpaSpecificationExecutor { public interface PictureRepository extends JpaRepository<Picture,Long>, JpaSpecificationExecutor<Picture> {
Picture findByMd5Code(String code);
} }
...@@ -12,6 +12,6 @@ import org.springframework.data.jpa.repository.Query; ...@@ -12,6 +12,6 @@ import org.springframework.data.jpa.repository.Query;
public interface QiNiuConfigRepository extends JpaRepository<QiniuConfig,Long> { public interface QiNiuConfigRepository extends JpaRepository<QiniuConfig,Long> {
@Modifying @Modifying
@Query(value = "update qiniu_content set type = ?1", nativeQuery = true) @Query(value = "update QiniuConfig set type = ?1")
void update(String type); void update(String type);
} }
...@@ -8,12 +8,12 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; ...@@ -8,12 +8,12 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
* @author Zheng Jie * @author Zheng Jie
* @date 2018-12-31 * @date 2018-12-31
*/ */
public interface QiniuContentRepository extends JpaRepository<QiniuContent,Long>, JpaSpecificationExecutor { public interface QiniuContentRepository extends JpaRepository<QiniuContent,Long>, JpaSpecificationExecutor<QiniuContent> {
/** /**
* 根据key查询 * 根据key查询
* @param key * @param key 文件名
* @return * @return QiniuContent
*/ */
QiniuContent findByKey(String key); QiniuContent findByKey(String key);
} }
...@@ -12,9 +12,9 @@ public interface VerificationCodeRepository extends JpaRepository<VerificationCo ...@@ -12,9 +12,9 @@ public interface VerificationCodeRepository extends JpaRepository<VerificationCo
/** /**
* 获取有效的验证码 * 获取有效的验证码
* @param scenes 业务场景,如重置密码,重置邮箱等等 * @param scenes 业务场景,如重置密码,重置邮箱等等
* @param type * @param type 类型
* @param value * @param value
* @return * @return VerificationCode
*/ */
VerificationCode findByScenesAndTypeAndValueAndStatusIsTrue(String scenes, String type, String value); VerificationCode findByScenesAndTypeAndValueAndStatusIsTrue(String scenes, String type, String value);
} }
package me.zhengjie.rest; package me.zhengjie.rest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.zhengjie.annotation.AnonymousAccess;
import me.zhengjie.aop.log.Log; import me.zhengjie.aop.log.Log;
import me.zhengjie.domain.AlipayConfig; import me.zhengjie.domain.AlipayConfig;
import me.zhengjie.domain.vo.TradeVo; import me.zhengjie.domain.vo.TradeVo;
import me.zhengjie.service.AlipayService; import me.zhengjie.service.AlipayService;
import me.zhengjie.utils.AliPayStatusEnum; import me.zhengjie.utils.AliPayStatusEnum;
import me.zhengjie.utils.AlipayUtils; import me.zhengjie.utils.AlipayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore; import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.nio.charset.StandardCharsets;
import java.util.Map; import java.util.Map;
/** /**
...@@ -24,22 +26,27 @@ import java.util.Map; ...@@ -24,22 +26,27 @@ import java.util.Map;
*/ */
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api") @RequestMapping("/api/aliPay")
@Api(tags = "工具:支付宝管理")
public class AliPayController { public class AliPayController {
@Autowired private final AlipayUtils alipayUtils;
AlipayUtils alipayUtils;
@Autowired private final AlipayService alipayService;
private AlipayService alipayService;
@GetMapping(value = "/aliPay") public AliPayController(AlipayUtils alipayUtils, AlipayService alipayService) {
this.alipayUtils = alipayUtils;
this.alipayService = alipayService;
}
@GetMapping
public ResponseEntity<AlipayConfig> get(){ public ResponseEntity<AlipayConfig> get(){
return new ResponseEntity<>(alipayService.find(),HttpStatus.OK); return new ResponseEntity<>(alipayService.find(),HttpStatus.OK);
} }
@Log("配置支付宝") @Log("配置支付宝")
@PutMapping(value = "/aliPay") @ApiOperation("配置支付宝")
@PutMapping
public ResponseEntity payConfig(@Validated @RequestBody AlipayConfig alipayConfig){ public ResponseEntity payConfig(@Validated @RequestBody AlipayConfig alipayConfig){
alipayConfig.setId(1L); alipayConfig.setId(1L);
alipayService.update(alipayConfig); alipayService.update(alipayConfig);
...@@ -47,8 +54,8 @@ public class AliPayController { ...@@ -47,8 +54,8 @@ public class AliPayController {
} }
@Log("支付宝PC网页支付") @Log("支付宝PC网页支付")
@ApiOperation(value = "PC网页支付") @ApiOperation("PC网页支付")
@PostMapping(value = "/aliPay/toPayAsPC") @PostMapping(value = "/toPayAsPC")
public ResponseEntity<String> toPayAsPC(@Validated@RequestBody TradeVo trade) throws Exception{ public ResponseEntity<String> toPayAsPC(@Validated@RequestBody TradeVo trade) throws Exception{
AlipayConfig alipay = alipayService.find(); AlipayConfig alipay = alipayService.find();
trade.setOutTradeNo(alipayUtils.getOrderCode()); trade.setOutTradeNo(alipayUtils.getOrderCode());
...@@ -57,8 +64,8 @@ public class AliPayController { ...@@ -57,8 +64,8 @@ public class AliPayController {
} }
@Log("支付宝手机网页支付") @Log("支付宝手机网页支付")
@ApiOperation(value = "手机网页支付") @ApiOperation("手机网页支付")
@PostMapping(value = "/aliPay/toPayAsWeb") @PostMapping(value = "/toPayAsWeb")
public ResponseEntity<String> toPayAsWeb(@Validated @RequestBody TradeVo trade) throws Exception{ public ResponseEntity<String> toPayAsWeb(@Validated @RequestBody TradeVo trade) throws Exception{
AlipayConfig alipay = alipayService.find(); AlipayConfig alipay = alipayService.find();
trade.setOutTradeNo(alipayUtils.getOrderCode()); trade.setOutTradeNo(alipayUtils.getOrderCode());
...@@ -67,54 +74,48 @@ public class AliPayController { ...@@ -67,54 +74,48 @@ public class AliPayController {
} }
@ApiIgnore @ApiIgnore
@GetMapping("/aliPay/return") @GetMapping("/return")
@ApiOperation(value = "支付之后跳转的链接") @AnonymousAccess
public ResponseEntity<String> returnPage(HttpServletRequest request, HttpServletResponse response) throws Exception { @ApiOperation("支付之后跳转的链接")
public ResponseEntity<String> returnPage(HttpServletRequest request, HttpServletResponse response){
AlipayConfig alipay = alipayService.find(); AlipayConfig alipay = alipayService.find();
response.setContentType("text/html;charset=" + alipay.getCharset()); response.setContentType("text/html;charset=" + alipay.getCharset());
//内容验签,防止黑客篡改参数 //内容验签,防止黑客篡改参数
if(alipayUtils.rsaCheck(request,alipay)){ if(alipayUtils.rsaCheck(request,alipay)){
//商户订单号 //商户订单号
String outTradeNo = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8"); String outTradeNo = new String(request.getParameter("out_trade_no").getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
//支付宝交易号 //支付宝交易号
String tradeNo = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8"); String tradeNo = new String(request.getParameter("trade_no").getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
System.out.println("商户订单号"+outTradeNo+" "+"第三方交易号"+tradeNo); System.out.println("商户订单号"+outTradeNo+" "+"第三方交易号"+tradeNo);
/** // 根据业务需要返回数据,这里统一返回OK
* 根据业务需要返回数据,这里统一返回OK
*/
return new ResponseEntity<>("payment successful",HttpStatus.OK); return new ResponseEntity<>("payment successful",HttpStatus.OK);
}else{ }else{
/** // 根据业务需要返回数据
* 根据业务需要返回数据
*/
return new ResponseEntity<>(HttpStatus.BAD_REQUEST); return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
} }
} }
@ApiIgnore @ApiIgnore
@RequestMapping("/aliPay/notify") @RequestMapping("/notify")
@ApiOperation(value = "支付异步通知(要公网访问),接收异步通知,检查通知内容app_id、out_trade_no、total_amount是否与请求中的一致,根据trade_status进行后续业务处理") @AnonymousAccess
public ResponseEntity notify(HttpServletRequest request) throws Exception{ @ApiOperation("支付异步通知(要公网访问),接收异步通知,检查通知内容app_id、out_trade_no、total_amount是否与请求中的一致,根据trade_status进行后续业务处理")
public ResponseEntity notify(HttpServletRequest request){
AlipayConfig alipay = alipayService.find(); AlipayConfig alipay = alipayService.find();
Map<String, String[]> parameterMap = request.getParameterMap(); Map<String, String[]> parameterMap = request.getParameterMap();
StringBuilder notifyBuild = new StringBuilder("/****************************** pay notify ******************************/\n");
parameterMap.forEach((key, value) -> notifyBuild.append(key + "=" + value[0] + "\n") );
//内容验签,防止黑客篡改参数 //内容验签,防止黑客篡改参数
if (alipayUtils.rsaCheck(request,alipay)) { if (alipayUtils.rsaCheck(request,alipay)) {
//交易状态 //交易状态
String tradeStatus = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8"); String tradeStatus = new String(request.getParameter("trade_status").getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
// 商户订单号 // 商户订单号
String outTradeNo = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8"); String outTradeNo = new String(request.getParameter("out_trade_no").getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
//支付宝交易号 //支付宝交易号
String tradeNo = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8"); String tradeNo = new String(request.getParameter("trade_no").getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
//付款金额 //付款金额
String totalAmount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8"); String totalAmount = new String(request.getParameter("total_amount").getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
//验证 //验证
if(tradeStatus.equals(AliPayStatusEnum.SUCCESS.getValue())||tradeStatus.equals(AliPayStatusEnum.FINISHED.getValue())){ if(tradeStatus.equals(AliPayStatusEnum.SUCCESS.getValue())||tradeStatus.equals(AliPayStatusEnum.FINISHED.getValue())){
/** // 验证通过后应该根据业务需要处理订单
* 验证通过后应该根据业务需要处理订单
*/
} }
return new ResponseEntity(HttpStatus.OK); return new ResponseEntity(HttpStatus.OK);
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment