Explorar el Código

支付宝支付

suochencheng hace 7 años
padre
commit
a17493cc41
Se han modificado 25 ficheros con 3461 adiciones y 667 borrados
  1. 8 0
      pom.xml
  2. 137 37
      src/main/java/com/izouma/awesomeadmin/constant/AppConstant.java
  3. 33 0
      src/main/java/com/izouma/awesomeadmin/dao/AlipayTempMapper.java
  4. 527 0
      src/main/java/com/izouma/awesomeadmin/dao/AlipayTempMapper.xml
  5. 22 1
      src/main/java/com/izouma/awesomeadmin/dao/UserInfoMapper.xml
  6. 382 344
      src/main/java/com/izouma/awesomeadmin/dao/UserOrderMapper.xml
  7. 179 0
      src/main/java/com/izouma/awesomeadmin/model/AlipayTemp.java
  8. 154 135
      src/main/java/com/izouma/awesomeadmin/model/UserInfo.java
  9. 129 78
      src/main/java/com/izouma/awesomeadmin/model/UserOrder.java
  10. 27 0
      src/main/java/com/izouma/awesomeadmin/service/AlipayTempService.java
  11. 6 3
      src/main/java/com/izouma/awesomeadmin/service/MemberCoinService.java
  12. 11 3
      src/main/java/com/izouma/awesomeadmin/service/UserOrderService.java
  13. 137 0
      src/main/java/com/izouma/awesomeadmin/service/impl/AlipayTempServiceImpl.java
  14. 84 18
      src/main/java/com/izouma/awesomeadmin/service/impl/MemberCoinServiceImpl.java
  15. 215 20
      src/main/java/com/izouma/awesomeadmin/service/impl/UserOrderServiceImpl.java
  16. 156 0
      src/main/java/com/izouma/awesomeadmin/util/AlipayClientFactory.java
  17. 57 27
      src/main/java/com/izouma/awesomeadmin/util/MbappUtil.java
  18. 289 0
      src/main/java/com/izouma/awesomeadmin/web/AlipayController.java
  19. 167 0
      src/main/java/com/izouma/awesomeadmin/web/AlipayTempController.java
  20. 11 0
      src/main/java/com/izouma/awesomeadmin/web/UserOrderController.java
  21. 8 1
      src/main/resources/properties/outsidews.properties
  22. 132 0
      src/main/vue/src/pages/AlipayTemp.vue
  23. 551 0
      src/main/vue/src/pages/AlipayTemps.vue
  24. 10 0
      src/main/vue/src/router/index.js
  25. 29 0
      src/test/java/OrderServiceTest.java

+ 8 - 0
pom.xml

@@ -979,6 +979,14 @@
             <version>0.10.1</version>
             <scope>runtime</scope>
         </dependency>
+
+
+        <dependency>
+            <groupId>com.alipay.sdk</groupId>
+            <artifactId>alipay-sdk-java</artifactId>
+            <version>3.3.49.ALL</version>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 137 - 37
src/main/java/com/izouma/awesomeadmin/constant/AppConstant.java

@@ -1,7 +1,6 @@
 package com.izouma.awesomeadmin.constant;
 
 /**
- * 
  * <p>
  * app常量
  * </p>
@@ -9,56 +8,55 @@ package com.izouma.awesomeadmin.constant;
 public interface AppConstant {
 
 
-
     /**
      * 商户号
      */
-    String MCH_ID              = "1379284802";
+    String MCH_ID = "1379284802";
 
     /**
      * 子商户号
      */
-    String SUB_MCH_ID          = "";
+    String SUB_MCH_ID = "";
 
     /**
      * 商户密钥
      */
-    String MCH_SECRET          = "R4q0yoo5GXh9A3CDiKJ6v7hgiE0aT0rM";
+    String MCH_SECRET = "R4q0yoo5GXh9A3CDiKJ6v7hgiE0aT0rM";
 
     /**
      * 货币类型
      */
-    String FEE_TYPE            = "CNY";
+    String FEE_TYPE = "CNY";
 
     /**
-     *交易类型 
+     * 交易类型
      */
-    String TRADE_TYPE          = "JSAPI";
+    String TRADE_TYPE = "JSAPI";
 
     /**
      * 设备号 PC网页或公众号内支付请传"WEB"
      */
-    String DEVICE_INFO         = "WEB";
+    String DEVICE_INFO = "WEB";
 
     /**
      * 标题
      */
-    String BODY                = "工蜂家服产品";
+    String BODY = "工蜂家服产品";
 
     /**
      * 标题
      */
-    String BODY_RECHARGE       = "工蜂家服充值";
+    String BODY_RECHARGE = "工蜂家服充值";
 
     /**
      * 通知地址
      */
-    String NOTIFY_URL          = "http://www.gfjiafu.com/wxpay/notify";
+    String NOTIFY_URL = "http://www.gfjiafu.com/wxpay/notify";
 
     /**
      * 通知地址
      */
-    String GXNOTIFY_URL        = "http://www.gfjiafu.com/GXwxpay/notify";
+    String GXNOTIFY_URL = "http://www.gfjiafu.com/GXwxpay/notify";
 
     /**
      * 通知地址
@@ -68,9 +66,28 @@ public interface AppConstant {
     /**
      * 商户名称
      */
-    String SEND_NAME           = "工蜂家服";
+    String SEND_NAME = "工蜂家服";
+
+    String PAGE = "page";
+
+
+    public interface PayMode {
+
+        /**
+         * 支付宝
+         */
+        Integer ALIPAY = 0;
+
+        /**
+         * 微信
+         */
+        Integer WEI_XIN = 1;
 
-    String PAGE                = "page";
+        /**
+         * 电子币
+         */
+        Integer COIN = 2;
+    }
 
     public interface InergralUpdateType {
 
@@ -82,7 +99,7 @@ public interface AppConstant {
         /**
          * 任务
          */
-        Integer TASK     = 1;
+        Integer TASK = 1;
 
         /**
          * 充值
@@ -93,61 +110,144 @@ public interface AppConstant {
     public interface OrderStatus {
 
         /**
-         * 待付款
+         * 下单,待付款
+         */
+        Integer NO_PAY = 0;
+
+        /**
+         * 支付完成,待上传原图
          */
-        Integer NO_PAY  = 0;
+        Integer PAY_OVER = 1;
 
         /**
-         * 待平台确认
+         * 待修图
          */
-        Integer PYY     = 1;
+        Integer WAIT_REPAIR = 2;
 
         /**
-         * 预约成功
+         * 修图完成待验收
          */
-        Integer CONFIRM = 2;
+        Integer ACCEPT = 3;
 
         /**
-         * 人员派送中
+         * 验收不通过,待返修
          */
-        Integer ASSIGN  = 3;
+        Integer REWORK = 4;
+
+
+        /**
+         * 验收完成待评论
+         */
+        Integer FINISH = 5;
 
         /**
-         * 已完成
+         * 结束
          */
-        Integer FINISH  = 4;
+        Integer END = 6;
+
 
         /**
          * 退款中
          */
-        Integer REFUND  = 5;
+        Integer REFUND = 7;
 
         /**
          * 已经取消
          */
-        Integer CANCEL  = 6;
+        Integer CANCEL = 8;
 
     }
 
-    public interface template {
+    /**
+     * <p>货币类型。</p>
+     *
+     * @author 姓名 <br />
+     * 更新履历 <br />
+     * 日期 : 姓名: 更新内容<br />
+     * @version 1.0
+     */
+    public interface CoinType {
+
+        /**
+         * 充值
+         */
+        Integer RECHARGE = 0;
+
+        /**
+         * 消费
+         */
+        Integer CONSUMPTION = 1;
+
+        /**
+         * 兑换
+         */
+        Integer EXCHANGE = 2;
+
+        /**
+         * 提现
+         */
+        Integer CASH = 3;
+
+        /**
+         * 税收
+         */
+        Integer TAXES = 4;
+
 
         /**
-         * 咨询回复消息提醒 
+         * 销售
          */
-        String reply        = "B7pRn_aPMKJT41Q498Okw5ZPsFtjE5NW_vNO6l6K2hw";
+        Integer SALE = 5;
 
         /**
-         * 用户咨询提醒 
+         * 返还
          */
-        String consultation = "SOLot-tJ5XMziyrM8xrXwS4q1meGI8z7SL8_OklnigE";
+        Integer FAN_HUAN = 6;
+
+
+        /**
+         * 退款
+         */
+        Integer REFUND = 7;
 
         /**
-         * 入驻
+         * 赠送
          */
-        String settled      = "HJtFE3VjxVaP0vw0-k4rtn7LdN7xcPbwygLgvZbH6R8";
+        Integer SONG = 8;
+
     }
 
-    String weixinurl                = "http://i.izouma.cn/wx/auth";
+    public interface Aliapi {
+
+        /**
+         * 交易创建,等待买家付款
+         */
+        String WAIT_BUYER_PAY = "WAIT_BUYER_PAY";
+
+        /**
+         * 未付款交易超时关闭,或支付完成后全额退款
+         */
+        String TRADE_CLOSED = "TRADE_CLOSED";
+
+        /**
+         * 交易支付成功
+         */
+        String TRADE_SUCCESS = "TRADE_SUCCESS";
+
+        /**
+         * 交易结束,不可退款
+         */
+        String TRADE_FINISHED = "TRADE_FINISHED";
+
+        /**
+         * typeFlag, 购买,订单付款
+         */
+        Integer BUY = 0;
+
+        /**
+         * typeFlag,充值
+         */
+        Integer RECHARGE = 1;
 
-    String weixinurlRedirectUriFlag = "_redirectUri_";
+    }
 }

+ 33 - 0
src/main/java/com/izouma/awesomeadmin/dao/AlipayTempMapper.java

@@ -0,0 +1,33 @@
+package com.izouma.awesomeadmin.dao;
+
+import java.util.*;
+import com.izouma.awesomeadmin.datasource.DataSource;
+import org.springframework.stereotype.Repository;
+import com.izouma.awesomeadmin.model.AlipayTemp;
+
+
+/**
+*  Dao接口
+*/
+@Repository("com.zoumaframe.dao.AlipayTempMapper")
+public interface AlipayTempMapper{
+
+    int deleteByPrimaryKey(Integer id);
+
+    int insertSelective(AlipayTemp record);
+
+    AlipayTemp selectByPrimaryKey(Integer id);
+
+    int updateByPrimaryKeySelective(AlipayTemp record);
+
+    List<AlipayTemp> queryAllAlipayTemp(AlipayTemp record);
+
+    List<AlipayTemp> queryAlipayTempByPage(Map<String, Object> parameter);
+
+    int delete(String id);
+
+    AlipayTemp queryAlipayTemp(AlipayTemp record);
+
+    List<AlipayTemp> query(AlipayTemp record);
+}
+

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 527 - 0
src/main/java/com/izouma/awesomeadmin/dao/AlipayTempMapper.xml


+ 22 - 1
src/main/java/com/izouma/awesomeadmin/dao/UserInfoMapper.xml

@@ -19,13 +19,16 @@
         <result column="district" property="district" jdbcType="VARCHAR"/>
         <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
         <result column="del_flag" property="delFlag" jdbcType="CHAR"/>
+        <result column="money_coin" property="moneyCoin" jdbcType="DECIMAL"/>
+        <result column="money_point" property="moneyPoint" jdbcType="DECIMAL"/>
         <association property="departId" javaType="string" column="id"
                      select="com.izouma.awesomeadmin.dao.DepartInfoMapper.getUserDepartId"/>
         <association property="roleId" javaType="string" column="id"
                      select="com.izouma.awesomeadmin.dao.SysRoleMapper.getUserRoleId"/>
     </resultMap>
     <sql id="Base_Column_List">
-        id, username, nickname, icon, birthday, sex, open_id, union_id, phone, mail, country, province, city, district, create_time, del_flag
+        id, username, nickname, icon, birthday, sex, open_id, union_id, phone, mail,
+        country, province, city, district, create_time, del_flag, money_coin, money_point
     </sql>
     <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
         select
@@ -96,6 +99,12 @@
             <if test="delFlag != null">
                 del_flag,
             </if>
+            <if test="moneyCoin != null">
+                money_coin,
+            </if>
+            <if test="moneyPoint != null">
+                money_point,
+            </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">
@@ -152,6 +161,12 @@
             <if test="delFlag != null">
                 #{delFlag,jdbcType=CHAR},
             </if>
+            <if test="moneyCoin != null">
+                #{moneyCoin},
+            </if>
+            <if test="moneyPoint != null">
+                #{moneyPoint},
+            </if>
         </trim>
     </insert>
     <update id="updateByPrimaryKeySelective" parameterType="com.izouma.awesomeadmin.model.UserInfo">
@@ -208,6 +223,12 @@
             <if test="delFlag != null">
                 del_flag = #{delFlag,jdbcType=CHAR},
             </if>
+            <if test="moneyCoin != null">
+                money_coin = #{moneyCoin,jdbcType=CHAR},
+            </if>
+            <if test="moneyPoint != null">
+                money_point = #{moneyPoint,jdbcType=CHAR},
+            </if>
         </set>
         where id = #{id,jdbcType=INTEGER}
     </update>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 382 - 344
src/main/java/com/izouma/awesomeadmin/dao/UserOrderMapper.xml


+ 179 - 0
src/main/java/com/izouma/awesomeadmin/model/AlipayTemp.java

@@ -0,0 +1,179 @@
+package com.izouma.awesomeadmin.model;
+
+import java.math.BigDecimal;
+import java.util.*;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+
+@JsonAutoDetect
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class AlipayTemp{
+    private Integer id;
+    private String delFlag;
+    private Date updateTime;
+    private String updateUser;
+    private Date createTime;
+    private String createUser;
+    private String orderId;
+    private String tradeStatus;
+    private BigDecimal totalAmount;
+    private String outTradeNo;
+    private String refundNo;
+    private BigDecimal refundAmount;
+    private Integer typeFlag;
+    private BigDecimal coin;
+    private BigDecimal point;
+    private BigDecimal cash;
+
+private String searchKey;
+
+/**
+* and,test_name,like,value;or,remark,=,123
+*/
+private String advancedQuery;
+
+/**
+* column_name_,desc_;column_name_,asc
+*/
+private String orderByStr;
+
+    public Integer getId(){
+        return this.id;
+    }
+
+    public void setId(Integer id){
+        this.id = id;
+    }
+    public String getDelFlag(){
+        return this.delFlag;
+    }
+
+    public void setDelFlag(String delFlag){
+        this.delFlag = delFlag;
+    }
+    public Date getUpdateTime(){
+        return this.updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime){
+        this.updateTime = updateTime;
+    }
+    public String getUpdateUser(){
+        return this.updateUser;
+    }
+
+    public void setUpdateUser(String updateUser){
+        this.updateUser = updateUser;
+    }
+    public Date getCreateTime(){
+        return this.createTime;
+    }
+
+    public void setCreateTime(Date createTime){
+        this.createTime = createTime;
+    }
+    public String getCreateUser(){
+        return this.createUser;
+    }
+
+    public void setCreateUser(String createUser){
+        this.createUser = createUser;
+    }
+    public String getOrderId(){
+        return this.orderId;
+    }
+
+    public void setOrderId(String orderId){
+        this.orderId = orderId;
+    }
+    public String getTradeStatus(){
+        return this.tradeStatus;
+    }
+
+    public void setTradeStatus(String tradeStatus){
+        this.tradeStatus = tradeStatus;
+    }
+    public BigDecimal getTotalAmount(){
+        return this.totalAmount;
+    }
+
+    public void setTotalAmount(BigDecimal totalAmount){
+        this.totalAmount = totalAmount;
+    }
+    public String getOutTradeNo(){
+        return this.outTradeNo;
+    }
+
+    public void setOutTradeNo(String outTradeNo){
+        this.outTradeNo = outTradeNo;
+    }
+    public String getRefundNo(){
+        return this.refundNo;
+    }
+
+    public void setRefundNo(String refundNo){
+        this.refundNo = refundNo;
+    }
+    public BigDecimal getRefundAmount(){
+        return this.refundAmount;
+    }
+
+    public void setRefundAmount(BigDecimal refundAmount){
+        this.refundAmount = refundAmount;
+    }
+    public Integer getTypeFlag(){
+        return this.typeFlag;
+    }
+
+    public void setTypeFlag(Integer typeFlag){
+        this.typeFlag = typeFlag;
+    }
+    public BigDecimal getCoin(){
+        return this.coin;
+    }
+
+    public void setCoin(BigDecimal coin){
+        this.coin = coin;
+    }
+    public BigDecimal getPoint(){
+        return this.point;
+    }
+
+    public void setPoint(BigDecimal point){
+        this.point = point;
+    }
+    public BigDecimal getCash(){
+        return this.cash;
+    }
+
+    public void setCash(BigDecimal cash){
+        this.cash = cash;
+    }
+
+public String getSearchKey() {
+    return searchKey;
+}
+
+public void setSearchKey(String searchKey) {
+    this.searchKey = searchKey;
+}
+
+public String getAdvancedQuery() {
+    return advancedQuery;
+}
+
+public void setAdvancedQuery(String advancedQuery) {
+    this.advancedQuery = advancedQuery;
+}
+
+public String getOrderByStr() {
+    return orderByStr;
+}
+
+public void setOrderByStr(String orderByStr) {
+    this.orderByStr = orderByStr;
+}
+
+}
+

+ 154 - 135
src/main/java/com/izouma/awesomeadmin/model/UserInfo.java

@@ -8,200 +8,219 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 /**
  * user_info 实体类
  * Tue Apr 17 10:32:49 CST 2018  Suo Chen Cheng
- */ 
+ */
 @JsonAutoDetect
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class UserInfo{
+public class UserInfo {
 
-	private Integer id;
+    private Integer id;
 
-	private String username;
+    private String username;
 
-	private String nickname;
+    private String nickname;
 
-	private String password;
+    private String password;
 
-	private String icon;
+    private String icon;
 
-	private Date birthday;
+    private Date birthday;
 
-	private String sex;
+    private String sex;
 
-	private String openId;
+    private String openId;
 
-	private String unionId;
+    private String unionId;
 
-	private String phone;
+    private String phone;
 
-	private String mail;
+    private String mail;
 
-	private String country;
+    private String country;
 
-	private String province;
+    private String province;
 
-	private String city;
+    private String city;
 
-	private String district;
+    private String district;
 
-	private String roleId;
+    private String roleId;
 
-	private Date createTime;
+    private Date createTime;
 
-	private String delFlag;
+    private String delFlag;
 
-	private String departId;
+    private String departId;
 
-	public String getDepartId() {
-		return departId;
-	}
+    private Double moneyCoin;
 
-	public void setDepartId(String departId) {
-		this.departId = departId;
-	}
+    private Double moneyPoint;
 
-	public void setId(Integer id){
-		this.id=id;
-	}
+    public String getDepartId() {
+        return departId;
+    }
 
-	public Integer getId(){
-		return id;
-	}
+    public void setDepartId(String departId) {
+        this.departId = departId;
+    }
 
-	public void setUsername(String username){
-		this.username = username;
-	}
+    public void setId(Integer id) {
+        this.id = id;
+    }
 
-	public String getUsername(){
-		return username;
-	}
+    public Integer getId() {
+        return id;
+    }
 
-	public void setNickname(String nickname){
-		this.nickname = nickname;
-	}
+    public void setUsername(String username) {
+        this.username = username;
+    }
 
-	public String getNickname(){
-		return nickname;
-	}
+    public String getUsername() {
+        return username;
+    }
 
-	public void setPassword(String password){
-		this.password=password;
-	}
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
+    }
 
-	public String getPassword(){
-		return password;
-	}
+    public String getNickname() {
+        return nickname;
+    }
 
-	public void setIcon(String icon){
-		this.icon=icon;
-	}
+    public void setPassword(String password) {
+        this.password = password;
+    }
 
-	public String getIcon(){
-		return icon;
-	}
+    public String getPassword() {
+        return password;
+    }
 
-	public void setBirthday(Date birthday){
-		this.birthday=birthday;
-	}
+    public void setIcon(String icon) {
+        this.icon = icon;
+    }
 
-	public Date getBirthday(){
-		return birthday;
-	}
+    public String getIcon() {
+        return icon;
+    }
 
-	public void setSex(String sex){
-		this.sex=sex;
-	}
+    public void setBirthday(Date birthday) {
+        this.birthday = birthday;
+    }
 
-	public String getSex(){
-		return sex;
-	}
+    public Date getBirthday() {
+        return birthday;
+    }
 
-	public void setOpenId(String openId){
-		this.openId=openId;
-	}
+    public void setSex(String sex) {
+        this.sex = sex;
+    }
 
-	public String getOpenId(){
-		return openId;
-	}
+    public String getSex() {
+        return sex;
+    }
 
-	public void setUnionId(String unionId){
-		this.unionId=unionId;
-	}
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
 
-	public String getUnionId(){
-		return unionId;
-	}
+    public String getOpenId() {
+        return openId;
+    }
 
-	public void setPhone(String phone){
-		this.phone=phone;
-	}
+    public void setUnionId(String unionId) {
+        this.unionId = unionId;
+    }
 
-	public String getPhone(){
-		return phone;
-	}
+    public String getUnionId() {
+        return unionId;
+    }
 
-	public void setMail(String mail){
-		this.mail=mail;
-	}
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
 
-	public String getMail(){
-		return mail;
-	}
+    public String getPhone() {
+        return phone;
+    }
 
-	public void setCountry(String country){
-		this.country=country;
-	}
+    public void setMail(String mail) {
+        this.mail = mail;
+    }
 
-	public String getCountry(){
-		return country;
-	}
+    public String getMail() {
+        return mail;
+    }
 
-	public void setProvince(String province){
-		this.province=province;
-	}
+    public void setCountry(String country) {
+        this.country = country;
+    }
 
-	public String getProvince(){
-		return province;
-	}
+    public String getCountry() {
+        return country;
+    }
 
-	public void setCity(String city){
-		this.city=city;
-	}
+    public void setProvince(String province) {
+        this.province = province;
+    }
 
-	public String getCity(){
-		return city;
-	}
+    public String getProvince() {
+        return province;
+    }
 
-	public void setDistrict(String district){
-		this.district=district;
-	}
+    public void setCity(String city) {
+        this.city = city;
+    }
 
-	public String getDistrict(){
-		return district;
-	}
+    public String getCity() {
+        return city;
+    }
 
-	public void setRoleId(String roleId){
-		this.roleId=roleId;
-	}
+    public void setDistrict(String district) {
+        this.district = district;
+    }
 
-	public String getRoleId(){
-		return roleId;
-	}
+    public String getDistrict() {
+        return district;
+    }
 
-	public void setCreateTime(Date createTime){
-		this.createTime=createTime;
-	}
+    public void setRoleId(String roleId) {
+        this.roleId = roleId;
+    }
 
-	public Date getCreateTime(){
-		return createTime;
-	}
+    public String getRoleId() {
+        return roleId;
+    }
 
-	public void setDelFlag(String delFlag){
-		this.delFlag=delFlag;
-	}
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
 
-	public String getDelFlag(){
-		return delFlag;
-	}
+    public Date getCreateTime() {
+        return createTime;
+    }
 
+    public void setDelFlag(String delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() {
+        return delFlag;
+    }
+
+    public Double getMoneyCoin() {
+        return moneyCoin;
+    }
+
+    public void setMoneyCoin(Double moneyCoin) {
+        this.moneyCoin = moneyCoin;
+    }
+
+    public Double getMoneyPoint() {
+        return moneyPoint;
+    }
+
+    public void setMoneyPoint(Double moneyPoint) {
+        this.moneyPoint = moneyPoint;
+    }
 }
 

+ 129 - 78
src/main/java/com/izouma/awesomeadmin/model/UserOrder.java

@@ -2,13 +2,14 @@ package com.izouma.awesomeadmin.model;
 
 import java.math.BigDecimal;
 import java.util.*;
+
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonInclude;
 
 
 @JsonAutoDetect
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class UserOrder{
+public class UserOrder {
     private Integer id;
     private String delFlag;
     private Date updateTime;
@@ -34,218 +35,268 @@ public class UserOrder{
     private String showFlag;
     private Integer statusFlag;
     private BigDecimal fee;
+    private BigDecimal coin;
+    private BigDecimal point;
+    private BigDecimal cash;
 
-private String searchKey;
+    private String searchKey;
 
-/**
-* and,test_name,like,value;or,remark,=,123
-*/
-private String advancedQuery;
+    /**
+     * and,test_name,like,value;or,remark,=,123
+     */
+    private String advancedQuery;
 
-/**
-* column_name_,desc_;column_name_,asc
-*/
-private String orderByStr;
+    /**
+     * column_name_,desc_;column_name_,asc
+     */
+    private String orderByStr;
 
-    public Integer getId(){
+    public Integer getId() {
         return this.id;
     }
 
-    public void setId(Integer id){
+    public void setId(Integer id) {
         this.id = id;
     }
-    public String getDelFlag(){
+
+    public String getDelFlag() {
         return this.delFlag;
     }
 
-    public void setDelFlag(String delFlag){
+    public void setDelFlag(String delFlag) {
         this.delFlag = delFlag;
     }
-    public Date getUpdateTime(){
+
+    public Date getUpdateTime() {
         return this.updateTime;
     }
 
-    public void setUpdateTime(Date updateTime){
+    public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-    public String getUpdateUser(){
+
+    public String getUpdateUser() {
         return this.updateUser;
     }
 
-    public void setUpdateUser(String updateUser){
+    public void setUpdateUser(String updateUser) {
         this.updateUser = updateUser;
     }
-    public Date getCreateTime(){
+
+    public Date getCreateTime() {
         return this.createTime;
     }
 
-    public void setCreateTime(Date createTime){
+    public void setCreateTime(Date createTime) {
         this.createTime = createTime;
     }
-    public String getCreateUser(){
+
+    public String getCreateUser() {
         return this.createUser;
     }
 
-    public void setCreateUser(String createUser){
+    public void setCreateUser(String createUser) {
         this.createUser = createUser;
     }
-    public Integer getUserId(){
+
+    public Integer getUserId() {
         return this.userId;
     }
 
-    public void setUserId(Integer userId){
+    public void setUserId(Integer userId) {
         this.userId = userId;
     }
-    public String getOrderCode(){
+
+    public String getOrderCode() {
         return this.orderCode;
     }
 
-    public void setOrderCode(String orderCode){
+    public void setOrderCode(String orderCode) {
         this.orderCode = orderCode;
     }
-    public Integer getStoreId(){
+
+    public Integer getStoreId() {
         return this.storeId;
     }
 
-    public void setStoreId(Integer storeId){
+    public void setStoreId(Integer storeId) {
         this.storeId = storeId;
     }
-    public String getProductType(){
+
+    public String getProductType() {
         return this.productType;
     }
 
-    public void setProductType(String productType){
+    public void setProductType(String productType) {
         this.productType = productType;
     }
-    public Integer getProductId(){
+
+    public Integer getProductId() {
         return this.productId;
     }
 
-    public void setProductId(Integer productId){
+    public void setProductId(Integer productId) {
         this.productId = productId;
     }
-    public String getProductName(){
+
+    public String getProductName() {
         return this.productName;
     }
 
-    public void setProductName(String productName){
+    public void setProductName(String productName) {
         this.productName = productName;
     }
-    public String getSpecification(){
+
+    public String getSpecification() {
         return this.specification;
     }
 
-    public void setSpecification(String specification){
+    public void setSpecification(String specification) {
         this.specification = specification;
     }
-    public BigDecimal getUnitPrice(){
+
+    public BigDecimal getUnitPrice() {
         return this.unitPrice;
     }
 
-    public void setUnitPrice(BigDecimal unitPrice){
+    public void setUnitPrice(BigDecimal unitPrice) {
         this.unitPrice = unitPrice;
     }
-    public Integer getQuantity(){
+
+    public Integer getQuantity() {
         return this.quantity;
     }
 
-    public void setQuantity(Integer quantity){
+    public void setQuantity(Integer quantity) {
         this.quantity = quantity;
     }
-    public Integer getUserCouponId(){
+
+    public Integer getUserCouponId() {
         return this.userCouponId;
     }
 
-    public void setUserCouponId(Integer userCouponId){
+    public void setUserCouponId(Integer userCouponId) {
         this.userCouponId = userCouponId;
     }
-    public BigDecimal getOffPrice(){
+
+    public BigDecimal getOffPrice() {
         return this.offPrice;
     }
 
-    public void setOffPrice(BigDecimal offPrice){
+    public void setOffPrice(BigDecimal offPrice) {
         this.offPrice = offPrice;
     }
-    public BigDecimal getTotlePrice(){
+
+    public BigDecimal getTotlePrice() {
         return this.totlePrice;
     }
 
-    public void setTotlePrice(BigDecimal totlePrice){
+    public void setTotlePrice(BigDecimal totlePrice) {
         this.totlePrice = totlePrice;
     }
-    public BigDecimal getDealPrice(){
+
+    public BigDecimal getDealPrice() {
         return this.dealPrice;
     }
 
-    public void setDealPrice(BigDecimal dealPrice){
+    public void setDealPrice(BigDecimal dealPrice) {
         this.dealPrice = dealPrice;
     }
-    public Integer getPayMode(){
+
+    public Integer getPayMode() {
         return this.payMode;
     }
 
-    public void setPayMode(Integer payMode){
+    public void setPayMode(Integer payMode) {
         this.payMode = payMode;
     }
-    public Date getPayTime(){
+
+    public Date getPayTime() {
         return this.payTime;
     }
 
-    public void setPayTime(Date payTime){
+    public void setPayTime(Date payTime) {
         this.payTime = payTime;
     }
-    public String getRemark(){
+
+    public String getRemark() {
         return this.remark;
     }
 
-    public void setRemark(String remark){
+    public void setRemark(String remark) {
         this.remark = remark;
     }
-    public String getShowFlag(){
+
+    public String getShowFlag() {
         return this.showFlag;
     }
 
-    public void setShowFlag(String showFlag){
+    public void setShowFlag(String showFlag) {
         this.showFlag = showFlag;
     }
-    public Integer getStatusFlag(){
+
+    public Integer getStatusFlag() {
         return this.statusFlag;
     }
 
-    public void setStatusFlag(Integer statusFlag){
+    public void setStatusFlag(Integer statusFlag) {
         this.statusFlag = statusFlag;
     }
-    public BigDecimal getFee(){
+
+    public BigDecimal getFee() {
         return this.fee;
     }
 
-    public void setFee(BigDecimal fee){
+    public void setFee(BigDecimal fee) {
         this.fee = fee;
     }
 
-public String getSearchKey() {
-    return searchKey;
-}
+    public String getSearchKey() {
+        return searchKey;
+    }
 
-public void setSearchKey(String searchKey) {
-    this.searchKey = searchKey;
-}
+    public void setSearchKey(String searchKey) {
+        this.searchKey = searchKey;
+    }
 
-public String getAdvancedQuery() {
-    return advancedQuery;
-}
+    public String getAdvancedQuery() {
+        return advancedQuery;
+    }
 
-public void setAdvancedQuery(String advancedQuery) {
-    this.advancedQuery = advancedQuery;
-}
+    public void setAdvancedQuery(String advancedQuery) {
+        this.advancedQuery = advancedQuery;
+    }
 
-public String getOrderByStr() {
-    return orderByStr;
-}
+    public String getOrderByStr() {
+        return orderByStr;
+    }
 
-public void setOrderByStr(String orderByStr) {
-    this.orderByStr = orderByStr;
-}
+    public void setOrderByStr(String orderByStr) {
+        this.orderByStr = orderByStr;
+    }
+
+    public BigDecimal getCoin() {
+        return coin;
+    }
+
+    public void setCoin(BigDecimal coin) {
+        this.coin = coin;
+    }
+
+    public BigDecimal getPoint() {
+        return point;
+    }
+
+    public void setPoint(BigDecimal point) {
+        this.point = point;
+    }
 
+    public BigDecimal getCash() {
+        return cash;
+    }
+
+    public void setCash(BigDecimal cash) {
+        this.cash = cash;
+    }
 }
 

+ 27 - 0
src/main/java/com/izouma/awesomeadmin/service/AlipayTempService.java

@@ -0,0 +1,27 @@
+package com.izouma.awesomeadmin.service;
+
+import java.util.*;
+import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.model.AlipayTemp;
+
+
+/**
+*  service接口类
+*/
+public interface AlipayTempService{
+
+    List<AlipayTemp> getAlipayTempList(AlipayTemp record);
+
+    List<AlipayTemp> getAlipayTempByPage(Page page, AlipayTemp record);
+
+    AlipayTemp getAlipayTempById(String id);
+
+    AlipayTemp getAlipayTemp(AlipayTemp record);
+
+    boolean createAlipayTemp(AlipayTemp record);
+
+    boolean deleteAlipayTemp(String id);
+
+    boolean updateAlipayTemp(AlipayTemp record);
+}
+

+ 6 - 3
src/main/java/com/izouma/awesomeadmin/service/MemberCoinService.java

@@ -1,14 +1,15 @@
 package com.izouma.awesomeadmin.service;
 
 import java.util.*;
+
 import com.izouma.awesomeadmin.dto.Page;
 import com.izouma.awesomeadmin.model.MemberCoin;
 
 
 /**
-*  service接口类
-*/
-public interface MemberCoinService{
+ * service接口类
+ */
+public interface MemberCoinService {
 
     List<MemberCoin> getMemberCoinList(MemberCoin record);
 
@@ -23,5 +24,7 @@ public interface MemberCoinService{
     boolean deleteMemberCoin(String id);
 
     boolean updateMemberCoin(MemberCoin record);
+
+    void alipaySuccess(String tradeNo, String tradeStatus);
 }
 

+ 11 - 3
src/main/java/com/izouma/awesomeadmin/service/UserOrderService.java

@@ -1,14 +1,16 @@
 package com.izouma.awesomeadmin.service;
 
 import java.util.*;
+
 import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.dto.Result;
 import com.izouma.awesomeadmin.model.UserOrder;
 
 
 /**
-*  service接口类
-*/
-public interface UserOrderService{
+ * service接口类
+ */
+public interface UserOrderService {
 
     List<UserOrder> getUserOrderList(UserOrder record);
 
@@ -23,5 +25,11 @@ public interface UserOrderService{
     boolean deleteUserOrder(String id);
 
     boolean updateUserOrder(UserOrder record);
+
+    Result payOrder(String orderId, double coin, double point, double cash, int payMode);
+
+    double calculatedPrice(String orderId, double coin, double point);
+
+    void alipaySuccess(String tradeNo, String tradeStatus);
 }
 

+ 137 - 0
src/main/java/com/izouma/awesomeadmin/service/impl/AlipayTempServiceImpl.java

@@ -0,0 +1,137 @@
+package com.izouma.awesomeadmin.service.impl;
+
+import java.util.*;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.izouma.awesomeadmin.constant.AppConstant;
+import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.model.AlipayTemp;
+import com.izouma.awesomeadmin.service.AlipayTempService;
+import com.izouma.awesomeadmin.dao.AlipayTempMapper;
+
+/**
+*  service接口实现类
+*/
+@Service
+public class AlipayTempServiceImpl implements AlipayTempService{
+
+    private static Logger logger = Logger.getLogger(AlipayTempServiceImpl.class);
+
+    @Autowired
+    private AlipayTempMapper alipayTempMapper;
+
+    @Override
+    public List<AlipayTemp> getAlipayTempList(AlipayTemp record) {
+
+        logger.info("getAlipayTempList");
+        try {
+
+        return alipayTempMapper.queryAllAlipayTemp(record);
+        } catch (Exception e) {
+        logger.error("getAlipayTempList", e);
+        }
+
+        return null;
+    }
+    @Override
+    public List<AlipayTemp> getAlipayTempByPage(Page page, AlipayTemp record) {
+
+        logger.info("getAlipayTempByPage");
+        try {
+
+        Map<String, Object> parameter = new HashMap<String, Object>();
+        parameter.put("record", record);
+        parameter.put(AppConstant.PAGE, page);
+
+        return alipayTempMapper.queryAlipayTempByPage(parameter);
+        } catch (Exception e) {
+        logger.error("getAlipayTempByPage", e);
+        }
+
+        return null;
+    }
+
+    @Override
+    public AlipayTemp getAlipayTempById(String id) {
+
+        logger.info("getAlipayTempyId");
+        try {
+
+            return alipayTempMapper.selectByPrimaryKey(Integer.valueOf(id));
+        } catch (Exception e) {
+        logger.error("getAlipayTempById", e);
+        }
+
+        return null;
+    }
+
+    @Override
+    public AlipayTemp getAlipayTemp(AlipayTemp record) {
+
+        logger.info("getAlipayTemp");
+        try {
+
+            return alipayTempMapper.queryAlipayTemp(record);
+        } catch (Exception e) {
+        logger.error("getAlipayTemp", e);
+        }
+
+        return null;
+    }
+
+    @Override
+    public boolean createAlipayTemp(AlipayTemp record) {
+
+        logger.info("createAlipayTemp");
+        try {
+
+            int updates = alipayTempMapper.insertSelective(record);
+
+            if (updates > 0) {
+                 return true;
+            }
+        } catch (Exception e) {
+            logger.error("createAlipayTemp", e);
+        }
+
+        return false;
+    }
+
+    @Override
+    public boolean deleteAlipayTemp(String id) {
+
+        logger.info("deleteAlipayTemp");
+        try {
+
+             int updates = alipayTempMapper.delete(id);
+
+            if (updates > 0) {
+                 return true;
+            }
+        } catch (Exception e) {
+             logger.error("deleteAlipayTemp", e);
+        }
+
+        return false;
+    }
+
+    @Override
+    public boolean updateAlipayTemp(AlipayTemp record) {
+
+        logger.info("updateAlipayTemp");
+        try {
+
+            int updates = alipayTempMapper.updateByPrimaryKeySelective(record);
+
+            if (updates > 0) {
+                 return true;
+            }
+        } catch (Exception e) {
+             logger.error("updateAlipayTemp", e);
+        }
+
+        return false;
+    }
+}
+

+ 84 - 18
src/main/java/com/izouma/awesomeadmin/service/impl/MemberCoinServiceImpl.java

@@ -1,6 +1,11 @@
 package com.izouma.awesomeadmin.service.impl;
 
 import java.util.*;
+
+import com.izouma.awesomeadmin.dao.AlipayTempMapper;
+import com.izouma.awesomeadmin.model.AlipayTemp;
+import com.izouma.awesomeadmin.model.UserInfo;
+import com.izouma.awesomeadmin.service.UserInfoService;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -11,42 +16,49 @@ import com.izouma.awesomeadmin.service.MemberCoinService;
 import com.izouma.awesomeadmin.dao.MemberCoinMapper;
 
 /**
-*  service接口实现类
-*/
+ * service接口实现类
+ */
 @Service
-public class MemberCoinServiceImpl implements MemberCoinService{
+public class MemberCoinServiceImpl implements MemberCoinService {
 
     private static Logger logger = Logger.getLogger(MemberCoinServiceImpl.class);
 
     @Autowired
     private MemberCoinMapper memberCoinMapper;
 
+    @Autowired
+    private AlipayTempMapper alipayTempMapper;
+
+    @Autowired
+    private UserInfoService userInfoService;
+
     @Override
     public List<MemberCoin> getMemberCoinList(MemberCoin record) {
 
         logger.info("getMemberCoinList");
         try {
 
-        return memberCoinMapper.queryAllMemberCoin(record);
+            return memberCoinMapper.queryAllMemberCoin(record);
         } catch (Exception e) {
-        logger.error("getMemberCoinList", e);
+            logger.error("getMemberCoinList", e);
         }
 
         return null;
     }
+
     @Override
     public List<MemberCoin> getMemberCoinByPage(Page page, MemberCoin record) {
 
         logger.info("getMemberCoinByPage");
         try {
 
-        Map<String, Object> parameter = new HashMap<String, Object>();
-        parameter.put("record", record);
-        parameter.put(AppConstant.PAGE, page);
+            Map<String, Object> parameter = new HashMap<String, Object>();
+            parameter.put("record", record);
+            parameter.put(AppConstant.PAGE, page);
 
-        return memberCoinMapper.queryMemberCoinByPage(parameter);
+            return memberCoinMapper.queryMemberCoinByPage(parameter);
         } catch (Exception e) {
-        logger.error("getMemberCoinByPage", e);
+            logger.error("getMemberCoinByPage", e);
         }
 
         return null;
@@ -60,7 +72,7 @@ public class MemberCoinServiceImpl implements MemberCoinService{
 
             return memberCoinMapper.selectByPrimaryKey(Integer.valueOf(id));
         } catch (Exception e) {
-        logger.error("getMemberCoinById", e);
+            logger.error("getMemberCoinById", e);
         }
 
         return null;
@@ -74,7 +86,7 @@ public class MemberCoinServiceImpl implements MemberCoinService{
 
             return memberCoinMapper.queryMemberCoin(record);
         } catch (Exception e) {
-        logger.error("getMemberCoin", e);
+            logger.error("getMemberCoin", e);
         }
 
         return null;
@@ -89,7 +101,7 @@ public class MemberCoinServiceImpl implements MemberCoinService{
             int updates = memberCoinMapper.insertSelective(record);
 
             if (updates > 0) {
-                 return true;
+                return true;
             }
         } catch (Exception e) {
             logger.error("createMemberCoin", e);
@@ -104,13 +116,13 @@ public class MemberCoinServiceImpl implements MemberCoinService{
         logger.info("deleteMemberCoin");
         try {
 
-             int updates = memberCoinMapper.delete(id);
+            int updates = memberCoinMapper.delete(id);
 
             if (updates > 0) {
-                 return true;
+                return true;
             }
         } catch (Exception e) {
-             logger.error("deleteMemberCoin", e);
+            logger.error("deleteMemberCoin", e);
         }
 
         return false;
@@ -125,13 +137,67 @@ public class MemberCoinServiceImpl implements MemberCoinService{
             int updates = memberCoinMapper.updateByPrimaryKeySelective(record);
 
             if (updates > 0) {
-                 return true;
+                return true;
             }
         } catch (Exception e) {
-             logger.error("updateMemberCoin", e);
+            logger.error("updateMemberCoin", e);
         }
 
         return false;
     }
+
+    /**
+     * <p>支付宝支付成功回调接口。充值</p>
+     *
+     * @param tradeNo
+     * @param tradeStatus
+     */
+    @Override
+    public void alipaySuccess(String tradeNo, String tradeStatus) {
+
+        logger.info("alipaySuccess:支付宝支付成功回调接口 tradeNo:" + tradeNo + ", tradeStatus:" + tradeStatus);
+        try {
+            AlipayTemp alipayTemp = new AlipayTemp();
+            alipayTemp.setOutTradeNo(tradeNo);
+            alipayTemp = alipayTempMapper.queryAlipayTemp(alipayTemp);
+
+            if (alipayTemp != null) {
+
+                if (!AppConstant.Aliapi.TRADE_SUCCESS.equals(alipayTemp.getTradeStatus())) {
+
+                    UserInfo userInfo = userInfoService.getUserInfoById(alipayTemp.getOrderId());
+
+                    Double moneyCoin = userInfo.getMoneyCoin();
+
+                    MemberCoin memberCoin = new MemberCoin();
+
+                    memberCoin.setCreateUser("支付宝充值");
+                    memberCoin.setUserId(alipayTemp.getOrderId());
+                    memberCoin.setMoney(String.valueOf(alipayTemp.getTotalAmount()));
+                    memberCoin.setBalance(String.valueOf(moneyCoin + alipayTemp.getTotalAmount().doubleValue()));
+                    memberCoin.setTypeFlag(AppConstant.CoinType.RECHARGE);
+                    memberCoin.setRemark("线上充值:" + alipayTemp.getTotalAmount());
+                    memberCoinMapper.insertSelective(memberCoin);
+
+
+                    UserInfo updateUser = new UserInfo();
+                    updateUser.setId(userInfo.getId());
+                    updateUser.setMoneyCoin(moneyCoin + alipayTemp.getTotalAmount().doubleValue());
+                    userInfoService.updateUserInfo(updateUser);
+
+
+                    alipayTemp.setTradeStatus(tradeStatus);
+
+                    alipayTempMapper.updateByPrimaryKeySelective(alipayTemp);
+                }
+
+            }
+
+        } catch (Exception e) {
+            logger.error("alipaySuccess:支付宝支付成功回调接口异常 tradeNo:" + tradeNo + ", tradeStatus:" + tradeStatus, e);
+        }
+
+    }
+
 }
 

+ 215 - 20
src/main/java/com/izouma/awesomeadmin/service/impl/UserOrderServiceImpl.java

@@ -1,52 +1,74 @@
 package com.izouma.awesomeadmin.service.impl;
 
+import java.math.BigDecimal;
 import java.util.*;
+
+import com.izouma.awesomeadmin.dao.AlipayTempMapper;
+import com.izouma.awesomeadmin.dao.UserInfoMapper;
+import com.izouma.awesomeadmin.dto.Result;
+import com.izouma.awesomeadmin.model.*;
+import com.izouma.awesomeadmin.service.*;
+import com.izouma.awesomeadmin.util.MbappUtil;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.izouma.awesomeadmin.constant.AppConstant;
 import com.izouma.awesomeadmin.dto.Page;
-import com.izouma.awesomeadmin.model.UserOrder;
-import com.izouma.awesomeadmin.service.UserOrderService;
 import com.izouma.awesomeadmin.dao.UserOrderMapper;
 
 /**
-*  service接口实现类
-*/
+ * service接口实现类
+ */
 @Service
-public class UserOrderServiceImpl implements UserOrderService{
+public class UserOrderServiceImpl implements UserOrderService {
 
     private static Logger logger = Logger.getLogger(UserOrderServiceImpl.class);
 
     @Autowired
     private UserOrderMapper userOrderMapper;
 
+    @Autowired
+    private UserInfoService userInfoService;
+
+    @Autowired
+    private StoreInfoService storeInfoService;
+
+    @Autowired
+    private MemberPointService memberPointService;
+
+    @Autowired
+    private MemberCoinService memberCoinService;
+
+    @Autowired
+    private AlipayTempMapper alipayTempMapper;
+
     @Override
     public List<UserOrder> getUserOrderList(UserOrder record) {
 
         logger.info("getUserOrderList");
         try {
 
-        return userOrderMapper.queryAllUserOrder(record);
+            return userOrderMapper.queryAllUserOrder(record);
         } catch (Exception e) {
-        logger.error("getUserOrderList", e);
+            logger.error("getUserOrderList", e);
         }
 
         return null;
     }
+
     @Override
     public List<UserOrder> getUserOrderByPage(Page page, UserOrder record) {
 
         logger.info("getUserOrderByPage");
         try {
 
-        Map<String, Object> parameter = new HashMap<String, Object>();
-        parameter.put("record", record);
-        parameter.put(AppConstant.PAGE, page);
+            Map<String, Object> parameter = new HashMap<String, Object>();
+            parameter.put("record", record);
+            parameter.put(AppConstant.PAGE, page);
 
-        return userOrderMapper.queryUserOrderByPage(parameter);
+            return userOrderMapper.queryUserOrderByPage(parameter);
         } catch (Exception e) {
-        logger.error("getUserOrderByPage", e);
+            logger.error("getUserOrderByPage", e);
         }
 
         return null;
@@ -60,7 +82,7 @@ public class UserOrderServiceImpl implements UserOrderService{
 
             return userOrderMapper.selectByPrimaryKey(Integer.valueOf(id));
         } catch (Exception e) {
-        logger.error("getUserOrderById", e);
+            logger.error("getUserOrderById", e);
         }
 
         return null;
@@ -74,7 +96,7 @@ public class UserOrderServiceImpl implements UserOrderService{
 
             return userOrderMapper.queryUserOrder(record);
         } catch (Exception e) {
-        logger.error("getUserOrder", e);
+            logger.error("getUserOrder", e);
         }
 
         return null;
@@ -85,11 +107,12 @@ public class UserOrderServiceImpl implements UserOrderService{
 
         logger.info("createUserOrder");
         try {
+            record.setOrderCode(MbappUtil.getOrderIdByUUId());
 
             int updates = userOrderMapper.insertSelective(record);
 
             if (updates > 0) {
-                 return true;
+                return true;
             }
         } catch (Exception e) {
             logger.error("createUserOrder", e);
@@ -104,13 +127,13 @@ public class UserOrderServiceImpl implements UserOrderService{
         logger.info("deleteUserOrder");
         try {
 
-             int updates = userOrderMapper.delete(id);
+            int updates = userOrderMapper.delete(id);
 
             if (updates > 0) {
-                 return true;
+                return true;
             }
         } catch (Exception e) {
-             logger.error("deleteUserOrder", e);
+            logger.error("deleteUserOrder", e);
         }
 
         return false;
@@ -125,13 +148,185 @@ public class UserOrderServiceImpl implements UserOrderService{
             int updates = userOrderMapper.updateByPrimaryKeySelective(record);
 
             if (updates > 0) {
-                 return true;
+                return true;
             }
         } catch (Exception e) {
-             logger.error("updateUserOrder", e);
+            logger.error("updateUserOrder", e);
         }
 
         return false;
     }
+
+
+    @Override
+    public Result payOrder(String orderId, double coin, double point, double cash, int payMode) {
+
+        logger.info("payOrder:支付订单");
+        try {
+
+            UserOrder userOrder = new UserOrder();
+
+            userOrder.setId(Integer.valueOf(orderId));
+
+            userOrder = userOrderMapper.queryUserOrder(userOrder);
+
+            if (userOrder == null) {
+                return new Result(false, "支付失败,订单不存在");
+            }
+
+            double money = userOrder.getDealPrice().doubleValue();
+
+            if (AppConstant.PayMode.COIN == payMode) {
+                //如果支付总额不足则用余额补足;
+                if (money > (coin + point + cash)) {
+                    coin = money - point - cash;
+                }
+            }
+
+
+            UserInfo userInfo = userInfoService.getUserInfoById(userOrder.getUserId() + "");
+
+            if (userInfo == null) {
+                return new Result(false, "支付失败,用户不存在!");
+            }
+
+            /**
+             * 余额
+             */
+            double moneyCoin = userInfo.getMoneyCoin();
+            if (coin > moneyCoin) {
+                return new Result(false, "支付失败,余额不足");
+            }
+
+            /**
+             * 商城积分
+             */
+            double moneyPoint = userInfo.getMoneyPoint();
+            if (point > moneyPoint) {
+                return new Result(false, "支付失败,商城积分不足");
+            }
+
+
+            if (money > (coin + point + cash)) {
+                return new Result(false, "支付失败,金额不足");
+            }
+
+            if (point > 0) {
+                //积分兑换区 只能用商城积分
+                MemberPoint memberPoint = new MemberPoint();
+                memberPoint.setCreateUser("系统");
+                memberPoint.setUserId(userOrder.getUserId() + "");
+                memberPoint.setMoney(String.valueOf(-point + 0.0));
+                memberPoint.setBalance(String.valueOf(moneyPoint - point));
+                memberPoint.setTypeFlag(AppConstant.CoinType.CONSUMPTION);
+                memberPoint.setRemark("购买商品消费,订单号:" + userOrder.getOrderCode());
+                memberPointService.createMemberPoint(memberPoint);
+
+
+            }
+
+
+            // 个人店铺,只能用余额支付
+            if (coin > 0) {
+
+                MemberCoin memberCoin = new MemberCoin();
+                memberCoin.setCreateUser("系统");
+                memberCoin.setUserId(userOrder.getUserId() + "");
+                memberCoin.setMoney(String.valueOf(-coin + 0.0));
+                memberCoin.setBalance(String.valueOf(moneyCoin - coin));
+                memberCoin.setTypeFlag(AppConstant.CoinType.CONSUMPTION);
+                memberCoin.setRemark("购买积分商品消费,订单号:" + userOrder.getOrderCode());
+                memberCoinService.createMemberCoin(memberCoin);
+
+            }
+
+
+            UserInfo updateUser = new UserInfo();
+            updateUser.setId(userOrder.getUserId());
+            updateUser.setMoneyCoin(moneyCoin - coin);
+            updateUser.setMoneyPoint(moneyPoint - point);
+            userInfoService.updateUserInfo(updateUser);
+
+            //更新为已经支付
+            UserOrder userOrderPay = new UserOrder();
+
+            userOrderPay.setId(Integer.valueOf(orderId));
+            userOrderPay.setCoin(BigDecimal.valueOf(coin));
+            userOrderPay.setPoint(BigDecimal.valueOf(point));
+            userOrderPay.setCash(BigDecimal.valueOf(cash));
+            userOrderPay.setPayMode(payMode);
+            userOrderPay.setPayTime(new Date());
+            userOrderPay.setStatusFlag(AppConstant.OrderStatus.PAY_OVER);
+
+            userOrderMapper.updateByPrimaryKeySelective(userOrderPay);
+
+            return new Result(true, "支付成功");
+        } catch (Exception e) {
+            logger.error("payOrder:支付订单异常", e);
+        }
+        return new Result(false, "支付失败");
+    }
+
+    @Override
+    public double calculatedPrice(String orderId, double coin, double point) {
+
+        logger.info("calculatedPrice:计算价格");
+        try {
+
+            UserOrder userOrder = new UserOrder();
+
+            userOrder.setId(Integer.valueOf(orderId));
+
+            userOrder = userOrderMapper.queryUserOrder(userOrder);
+
+            double money = userOrder.getDealPrice().doubleValue();
+
+            double cash = money - coin - point;
+
+            return cash;
+
+        } catch (Exception e) {
+            logger.error("calculatedPrice:计算价格异常", e);
+        }
+        return 0;
+    }
+
+
+    /**
+     * <p>支付宝支付成功回调接口。</p>
+     *
+     * @param tradeNo
+     * @param tradeStatus
+     */
+    @Override
+    public void alipaySuccess(String tradeNo, String tradeStatus) {
+
+        logger.info("alipaySuccess:支付宝支付成功回调接口 tradeNo:" + tradeNo + ", tradeStatus:" + tradeStatus);
+        try {
+            AlipayTemp alipayTemp = new AlipayTemp();
+            alipayTemp.setOutTradeNo(tradeNo);
+            alipayTemp = alipayTempMapper.queryAlipayTemp(alipayTemp);
+
+            if (alipayTemp != null) {
+
+                if (!AppConstant.Aliapi.TRADE_SUCCESS.equals(alipayTemp.getTradeStatus())) {
+
+                    payOrder(alipayTemp.getOrderId() + "", alipayTemp.getCoin().doubleValue(),
+                            alipayTemp.getPoint().doubleValue(), alipayTemp.getCash().doubleValue(), AppConstant.PayMode.ALIPAY);
+
+                    alipayTemp.setTradeStatus(tradeStatus);
+
+                    alipayTempMapper.updateByPrimaryKeySelective(alipayTemp);
+                }
+
+            }
+
+        } catch (Exception e) {
+            logger.error("alipaySuccess:支付宝支付成功回调接口异常 tradeNo:" + tradeNo + ", tradeStatus:" + tradeStatus, e);
+        }
+
+    }
+
+
 }
 

+ 156 - 0
src/main/java/com/izouma/awesomeadmin/util/AlipayClientFactory.java

@@ -0,0 +1,156 @@
+package com.izouma.awesomeadmin.util;
+
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.internal.util.StringUtils;
+import com.alipay.api.request.*;
+import com.alipay.api.response.AlipayTradeCancelResponse;
+import com.alipay.api.response.AlipayTradePayResponse;
+import com.alipay.api.response.AlipayTradePrecreateResponse;
+import com.alipay.api.response.AlipayTradeRefundResponse;
+import net.sf.json.JSONObject;
+
+import java.util.Map;
+
+public class AlipayClientFactory {
+
+    // 手机网页支付 网站支付  
+    public static String ydAndPc_Pay(Map<String, String> maps) throws AlipayApiException {
+
+        AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
+        String NotifyUrl = maps.get("NotifyUrl");
+        String ReturnUrl = maps.get("ReturnUrl");
+        // 后台回调  
+        if (!StringUtils.isEmpty(NotifyUrl)) {
+            alipayRequest.setNotifyUrl(NotifyUrl);
+            // bizContent 中不需要 公共参数  
+            maps.remove("NotifyUrl");
+        }
+        // 页面回调  
+        if (!StringUtils.isEmpty(ReturnUrl)) {
+            alipayRequest.setReturnUrl(ReturnUrl);
+            // bizContent 中不需要 公共参数  
+            maps.remove("ReturnUrl");
+        }
+        String bizCon = JSONObject.fromObject(maps).toString();
+        alipayRequest.setBizContent(bizCon);
+        String form = "";
+        try {
+            form = AlipayClientFactory.getAlipayClientInstance().pageExecute(alipayRequest).getBody();
+        } catch (AlipayApiException e) {
+            form = "err";
+            e.printStackTrace();
+        } // 调用SDK生成表单  
+        return form;
+    }
+
+
+    // PC网页支付
+    public static String PC_Pay(Map<String, String> maps) throws AlipayApiException {
+
+        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
+
+        maps.put("product_code", "FAST_INSTANT_TRADE_PAY");//销售产品码,与支付宝签约的产品码名称。 注:目前仅支持FAST_INSTANT_TRADE_PAY
+
+        String NotifyUrl = maps.get("NotifyUrl");
+        String ReturnUrl = maps.get("ReturnUrl");
+        // 后台回调
+        if (!StringUtils.isEmpty(NotifyUrl)) {
+            alipayRequest.setNotifyUrl(NotifyUrl);
+            // bizContent 中不需要 公共参数
+            maps.remove("NotifyUrl");
+        }
+        // 页面回调
+        if (!StringUtils.isEmpty(ReturnUrl)) {
+            alipayRequest.setReturnUrl(ReturnUrl);
+            // bizContent 中不需要 公共参数
+            maps.remove("ReturnUrl");
+        }
+        String bizCon = JSONObject.fromObject(maps).toString();
+        alipayRequest.setBizContent(bizCon);
+        String form = "";
+        try {
+            form = AlipayClientFactory.getAlipayClientInstance().pageExecute(alipayRequest).getBody();
+        } catch (AlipayApiException e) {
+            form = "err";
+            e.printStackTrace();
+        } // 调用SDK生成表单
+        return form;
+    }
+
+
+    public static AlipayClient getAlipayClientInstance() {
+
+        AlipayClient alipayClient = new DefaultAlipayClient(PropertiesFileLoader.getProperties("ALIPAY_GATEWAY"),
+                PropertiesFileLoader.getProperties("ALIPAY_APP_ID"), PropertiesFileLoader.getProperties("ALIPAY_APP_PRIVATE_KEY"), "json", "utf-8",
+                PropertiesFileLoader.getProperties("ALIPAY_ALIPAY_PUBLIC_KEY"));
+        return alipayClient;
+    }
+
+
+    // 条码支付 
+    public static AlipayTradePayResponse pay(String appAuthToken, String bizContent) throws AlipayApiException {
+
+        AlipayTradePayRequest request = new AlipayTradePayRequest();
+        request.putOtherTextParam("app_auth_token", appAuthToken);
+        request.setBizContent(bizContent);
+        return AlipayClientFactory.getAlipayClientInstance().execute(request);
+    }
+
+
+    // 扫码支付 
+    public static AlipayTradePrecreateResponse precreate(String appAuthToken, String bizContent) throws AlipayApiException {
+
+        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
+        request.putOtherTextParam("app_auth_token", appAuthToken);
+        request.setBizContent(bizContent);
+        return AlipayClientFactory.getAlipayClientInstance().execute(request);
+    }
+
+
+    // 订单撤销 
+    public static AlipayTradeCancelResponse cancel(String appAuthToken, String bizContent) throws AlipayApiException {
+
+        AlipayTradeCancelRequest request = new AlipayTradeCancelRequest();
+        request.putOtherTextParam("app_auth_token", appAuthToken);
+        request.setBizContent(bizContent);
+        return AlipayClientFactory.getAlipayClientInstance().execute(request);
+    }
+
+
+    // 申请退款 
+    public static AlipayTradeRefundResponse refund(String appAuthToken, String bizContent) throws AlipayApiException {
+
+        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
+        request.putOtherTextParam("app_auth_token", appAuthToken);
+        request.setBizContent(bizContent);
+        return AlipayClientFactory.getAlipayClientInstance().execute(request);
+    }
+
+
+    // 申请退款 
+    public static boolean refund(String outTradeNo, double refundAmount) {
+
+        String bizContent = "{" + "    \"out_trade_no\":\"" + outTradeNo + "\"," + "    \"refund_amount\":" + refundAmount + ","
+                + "    \"refund_reason\":\"正常退款\"" + "  }";
+
+        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
+        request.setBizContent(bizContent);
+        AlipayTradeRefundResponse response;
+        try {
+            response = AlipayClientFactory.getAlipayClientInstance().execute(request);
+            if (response.isSuccess()) {
+                System.out.println("调用成功");
+                return true;
+            } else {
+                System.out.println("调用失败");
+
+            }
+        } catch (AlipayApiException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return false;
+    }
+}

+ 57 - 27
src/main/java/com/izouma/awesomeadmin/util/MbappUtil.java

@@ -26,6 +26,8 @@ import org.springframework.stereotype.Service;
 
 import com.izouma.awesomeadmin.constant.AppConstant;
 
+import javax.servlet.http.HttpServletRequest;
+
 @Service
 public class MbappUtil {
 
@@ -50,17 +52,18 @@ public class MbappUtil {
 
     /**
      * 用SHA1算法生成安全签名
-     * @param token 票据
+     *
+     * @param token     票据
      * @param timestamp 时间戳
-     * @param nonce 随机字符串
-     * @param encrypt 密文
+     * @param nonce     随机字符串
+     * @param encrypt   密文
      * @return 安全签名
-     * @throws NoSuchAlgorithmException 
-     * @throws AesException 
+     * @throws NoSuchAlgorithmException
+     * @throws AesException
      */
     public String getSHA1(String token, String timestamp, String nonce) throws NoSuchAlgorithmException {
 
-        String[] array = new String[] {token, timestamp, nonce};
+        String[] array = new String[]{token, timestamp, nonce};
         StringBuffer sb = new StringBuffer();
         // 字符串排序
         Arrays.sort(array);
@@ -117,8 +120,8 @@ public class MbappUtil {
     }
 
 
-    /** 
-     * @param args 
+    /**
+     * @param args
      */
     //  public static void main(String[] args) {
     public void xxx() {
@@ -132,7 +135,7 @@ public class MbappUtil {
         String body = "test";
         String nonce_str = "ibuaiVcKdpRxkhJA";
 
-        SortedMap <Object, Object> parameters = new TreeMap <Object, Object>();
+        SortedMap<Object, Object> parameters = new TreeMap<Object, Object>();
         parameters.put("appid", appid);
         parameters.put("mch_id", mch_id);
         parameters.put("device_info", device_info);
@@ -155,17 +158,18 @@ public class MbappUtil {
 
         char agent = userAgent.charAt(userAgent.indexOf("MicroMessenger") + 15);
 
-        System.out.println("微信的版本号:" + new String(new char[] {agent}));
+        System.out.println("微信的版本号:" + new String(new char[]{agent}));
     }
 
 
-    /** 
-     * 微信支付签名算法sign 
-     * @param characterEncoding 
-     * @param parameters 
-     * @return 
+    /**
+     * 微信支付签名算法sign
+     *
+     * @param characterEncoding
+     * @param parameters
+     * @return
      */
-    public static String createSign(String characterEncoding, SortedMap <Object, Object> parameters) {
+    public static String createSign(String characterEncoding, SortedMap<Object, Object> parameters) {
 
         StringBuffer sb = new StringBuffer();
         Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序(升序)  
@@ -179,7 +183,7 @@ public class MbappUtil {
             }
         }
         sb.append("key=" + AppConstant.MCH_SECRET);
-        System.out.println("连接商户key:"+sb.toString());
+        System.out.println("连接商户key:" + sb.toString());
         String sign = MD5Encode(sb.toString(), characterEncoding).toUpperCase();
         return sign;
     }
@@ -225,7 +229,6 @@ public class MbappUtil {
 
 
     /**
-     * 
      * <p>获取ip地址。</p>
      *
      * @return
@@ -249,11 +252,12 @@ public class MbappUtil {
     }
 
 
-    /** 
-     * 生成商户订单号 
-     * @param mch_id  商户号 
-     * @param userId  该用户的userID 
-     * @return 
+    /**
+     * 生成商户订单号
+     *
+     * @param mch_id 商户号
+     * @param userId 该用户的userID
+     * @return
      */
     public static String createBillNo(String userId) {
 
@@ -268,10 +272,11 @@ public class MbappUtil {
     }
 
 
-    /** 
-     * 生成特定位数的随机数字 
-     * @param length 
-     * @return 
+    /**
+     * 生成特定位数的随机数字
+     *
+     * @param length
+     * @return
      */
     public static String getRandomNum(int length) {
 
@@ -283,4 +288,29 @@ public class MbappUtil {
         return val;
     }
 
+    public static String getOrderIdByUUId() {
+        int machineId = 1;//最大支持1-9个集群机器部署
+        int hashCodeV = UUID.randomUUID().toString().hashCode();
+        if (hashCodeV < 0) {//有可能是负数
+            hashCodeV = -hashCodeV;
+        }
+        // 0 代表前面补充0
+        // 4 代表长度为4
+        // d 代表参数为正数型
+        return machineId + String.format("%015d", hashCodeV);
+    }
+
+    /**
+     * <p>获取域名,如:http://f0rb.iteye.com/ 。</p>
+     *
+     * @param request
+     * @return
+     */
+    public static String getDomain(HttpServletRequest request) {
+
+        StringBuffer url = request.getRequestURL();
+        String tempContextUrl = url.delete(url.length() - request.getRequestURI().length(), url.length()).append("/").toString();
+        return tempContextUrl;
+    }
+
 }

+ 289 - 0
src/main/java/com/izouma/awesomeadmin/web/AlipayController.java

@@ -0,0 +1,289 @@
+package com.izouma.awesomeadmin.web;
+
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.response.AlipayTradeRefundResponse;
+import com.izouma.awesomeadmin.constant.AppConstant;
+import com.izouma.awesomeadmin.dao.AlipayTempMapper;
+import com.izouma.awesomeadmin.model.AlipayTemp;
+import com.izouma.awesomeadmin.service.MemberCoinService;
+import com.izouma.awesomeadmin.service.UserOrderService;
+import com.izouma.awesomeadmin.util.AlipayClientFactory;
+import com.izouma.awesomeadmin.util.MbappUtil;
+import com.izouma.awesomeadmin.util.PropertiesFileLoader;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * <p>支付宝相关控制。</p>
+ *
+ * @author 姓名 <br />
+ * 更新履历 <br />
+ * 日期 : 姓名: 更新内容<br />
+ * @version 1.0
+ */
+@Controller
+@RequestMapping("/aliapi")
+//url:/模块/资源/{id}/细分
+public class AlipayController {
+
+    @Autowired
+    private UserOrderService userOrderService;
+
+    @Autowired
+    private MemberCoinService memberCoinService;
+
+
+    @Autowired
+    private AlipayTempMapper alipayTempMapper;
+
+
+    /**
+     * <p>付款订单产品。</p>
+     *
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "/buy", method = RequestMethod.GET)
+    @ResponseBody
+    public void buy(HttpServletRequest request, HttpServletResponse response, @RequestParam(required = true, value = "orderId") String orderId,
+                    @RequestParam(required = true, value = "coin") double coin, @RequestParam(required = true, value = "point") double point)
+            throws ServletException, IOException {
+
+        double cash = userOrderService.calculatedPrice(orderId, coin, point);
+        if (cash > 0) {
+            String totalAmount = cash + "";
+            String outTradeNo = MbappUtil.create_out_trade_no();
+
+            Map<String, String> maps = new HashMap<String, String>();
+            maps.put("out_trade_no", outTradeNo);
+            maps.put("total_amount", totalAmount);
+            maps.put("subject", "商盟订单号:" + orderId);
+            maps.put("seller_id", PropertiesFileLoader.getProperties("ALIPAY_SELLER"));
+            // 下面两个 参数的 KEY 不要乱写 要和工具类里面对应  
+            maps.put("ReturnUrl", MbappUtil.getDomain(request) + "aliapi/return_url");
+            maps.put("NotifyUrl", MbappUtil.getDomain(request) + "aliapi/async");
+            try {
+                String form = AlipayClientFactory.PC_Pay(maps);
+                if (!form.equals("err")) {
+
+                    AlipayTemp alipayTemp = new AlipayTemp();
+
+                    alipayTemp.setOrderId(orderId);
+                    alipayTemp.setTotalAmount(BigDecimal.valueOf(cash));
+                    alipayTemp.setTradeStatus(AppConstant.Aliapi.WAIT_BUYER_PAY);
+                    alipayTemp.setOutTradeNo(outTradeNo);
+                    alipayTemp.setCoin(BigDecimal.valueOf(coin));
+                    alipayTemp.setPoint(BigDecimal.valueOf(point));
+                    alipayTemp.setCash(BigDecimal.valueOf(cash));
+
+                    alipayTempMapper.insertSelective(alipayTemp);
+
+                    response.setContentType("text/html;charset=utf-8");
+                    response.getWriter().write(form);// 直接将完整的表单html输出到页面  
+                    response.getWriter().flush();
+
+                }
+            } catch (AlipayApiException e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
+
+
+    /**
+     * <p>充值舱豆。</p>
+     *
+     * @param request
+     * @param response
+     * @throws ServletException
+     * @throws IOException
+     */
+    @RequestMapping(value = "/recharge", method = RequestMethod.GET)
+    @ResponseBody
+    public void recharge(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+
+        String money = request.getParameter("money");
+        String userId = request.getParameter("userId");
+
+        String outTradeNo = MbappUtil.create_out_trade_no();
+
+        Map<String, String> maps = new HashMap<String, String>();
+        maps.put("out_trade_no", outTradeNo);
+        maps.put("total_amount", String.format("%.2f", Double.valueOf(money)));//PC支付需要两位小数
+        maps.put("subject", "充值金币:" + money + " 个");
+        maps.put("seller_id", PropertiesFileLoader.getProperties("ALIPAY_SELLER"));
+        // 下面两个 参数的 KEY 不要乱写 要和工具类里面对应  
+        maps.put("ReturnUrl", MbappUtil.getDomain(request) + "aliapi/recharge_return_url");
+        maps.put("NotifyUrl", MbappUtil.getDomain(request) + "aliapi/rechargeAsync");
+        try {
+            String form = AlipayClientFactory.PC_Pay(maps);
+            if (!form.equals("err")) {
+
+                AlipayTemp alipayTemp = new AlipayTemp();
+
+                alipayTemp.setOrderId(userId);
+                alipayTemp.setTotalAmount(BigDecimal.valueOf(Double.valueOf(money)));
+                alipayTemp.setTradeStatus(AppConstant.Aliapi.WAIT_BUYER_PAY);
+                alipayTemp.setOutTradeNo(outTradeNo);
+                alipayTemp.setTypeFlag(AppConstant.Aliapi.RECHARGE);
+                alipayTempMapper.insertSelective(alipayTemp);
+
+                response.setContentType("text/html;charset=utf-8");
+                response.getWriter().write(form);// 直接将完整的表单html输出到页面  
+                response.getWriter().flush();
+            }
+        } catch (AlipayApiException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    @RequestMapping(value = "/index")
+    public String index(HttpServletRequest request, HttpServletResponse response) {
+
+        return "pay/index.html";//付款的页面。本页面是为了测试而使用的
+    }
+
+
+    /**
+     * 同步通知的页面的Controller
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/return_url")
+    public String Return_url(HttpServletRequest request, HttpServletResponse response) {
+
+        return "pay/success.html";
+    }
+
+
+    /**
+     * <p>充值回调接口。</p>
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/recharge_return_url")
+    public String recharge_return_url(HttpServletRequest request, HttpServletResponse response) {
+
+        return "pay/recharge_success.html";
+    }
+
+
+    /**
+     * 异步通知付款状态的Controller
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @SuppressWarnings("rawtypes")
+    @RequestMapping(value = "/async", method = RequestMethod.POST)
+    public String async(HttpServletRequest request, HttpServletResponse response) {
+
+        Map<String, String> params = new HashMap<String, String>();
+        Map requestParams = request.getParameterMap();
+        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
+            String name = (String) iter.next();
+            String[] values = (String[]) requestParams.get(name);
+            String valueStr = "";
+            for (int i = 0; i < values.length; i++) {
+                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
+            }
+            params.put(name, valueStr);
+        }
+        String tradeNo = request.getParameter("out_trade_no");
+        String tradeStatus = request.getParameter("trade_status");
+        //String notifyId = request.getParameter("notify_id");  
+        //if(AlipayNotify.verify(params)){//验证成功  
+        if (tradeStatus.equals("TRADE_FINISHED") || tradeStatus.equals("TRADE_SUCCESS")) {
+            //要写的逻辑。自己按自己的要求写
+            System.out.println(">>>>>支付订单成功" + tradeNo);
+
+            userOrderService.alipaySuccess(tradeNo, tradeStatus);
+            return "pay/success.html";
+        } else {//验证失败  
+            return "pay/fail.html";
+        }
+
+    }
+
+
+    /**
+     * <p>充值异步通知付款状态。</p>
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @SuppressWarnings("rawtypes")
+    @RequestMapping(value = "/rechargeAsync", method = RequestMethod.POST)
+    public String rechargeAsync(HttpServletRequest request, HttpServletResponse response) {
+
+        Map<String, String> params = new HashMap<String, String>();
+        Map requestParams = request.getParameterMap();
+        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
+            String name = (String) iter.next();
+            String[] values = (String[]) requestParams.get(name);
+            String valueStr = "";
+            for (int i = 0; i < values.length; i++) {
+                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
+            }
+            params.put(name, valueStr);
+        }
+        String tradeNo = request.getParameter("out_trade_no");
+        String tradeStatus = request.getParameter("trade_status");
+        //String notifyId = request.getParameter("notify_id");  
+        //if(AlipayNotify.verify(params)){//验证成功  
+        if (tradeStatus.equals("TRADE_FINISHED") || tradeStatus.equals("TRADE_SUCCESS")) {
+            //要写的逻辑。自己按自己的要求写
+            System.out.println(">>>>>充值成功" + tradeNo);
+
+            memberCoinService.alipaySuccess(tradeNo, tradeStatus);
+            return "pay/recharge_success.html";
+        } else {//验证失败  
+            return "pay/recharge_fail.html";
+        }
+
+    }
+
+
+    @RequestMapping(value = "/refund", method = RequestMethod.GET)
+    @ResponseBody
+    public void refund(@RequestParam(required = true, value = "outTradeNo") String outTradeNo,
+                       @RequestParam(required = true, value = "refundAmount") double refundAmount) {
+
+        String bizContent = "{" + "    \"out_trade_no\":\"" + outTradeNo + "\"," + "    \"refund_amount\":" + refundAmount + ","
+                + "    \"refund_reason\":\"正常退款\"" + "  }";
+
+        try {
+            AlipayTradeRefundResponse response = AlipayClientFactory.refund(null, bizContent);
+            if (response.isSuccess()) {
+                System.out.println("调用成功");
+            } else {
+                System.out.println("调用失败");
+            }
+        } catch (AlipayApiException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+}

+ 167 - 0
src/main/java/com/izouma/awesomeadmin/web/AlipayTempController.java

@@ -0,0 +1,167 @@
+package com.izouma.awesomeadmin.web;
+
+import java.util.*;
+
+import com.izouma.awesomeadmin.util.ExportExcelUtil;
+import org.apache.commons.lang.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresAuthentication;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import com.izouma.awesomeadmin.constant.AppConstant;
+import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.dto.Result;
+import com.izouma.awesomeadmin.model.AlipayTemp;
+import com.izouma.awesomeadmin.service.AlipayTempService;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+*  controller类
+*/
+@Controller
+@RequestMapping("/alipayTemp")
+public class AlipayTempController {
+
+    @Autowired
+    private AlipayTempService alipayTempService;
+
+    /**
+    * <p>获取全部记录。</p>
+    */
+    @RequiresAuthentication
+    @RequestMapping(value = "/all", method = RequestMethod.GET)
+    @ResponseBody
+    public Result all(AlipayTemp record) {
+        List<AlipayTemp> pp = alipayTempService.getAlipayTempList(record);
+        return new Result(true, pp);
+    }
+
+    /**
+    * <p>根据Id。</p>
+    */
+    @RequestMapping(value = "/getAlipayTemp", method = RequestMethod.GET)
+    @ResponseBody
+    public Result getAlipayTemp(@RequestParam(required = false, value = "id") String id) {
+        AlipayTemp data = alipayTempService.getAlipayTempById(id);
+        return new Result(true, data);
+    }
+
+    /**
+    * <p>根据条件获取。</p>
+    */
+    @RequestMapping(value = "/getOne", method = RequestMethod.GET)
+    @ResponseBody
+    public Result getOne(AlipayTemp record) {
+        AlipayTemp data = alipayTempService.getAlipayTemp(record);
+        return new Result(true, data);
+    }
+
+
+    /**
+    * <p>分页查询。</p>
+    */
+    @RequestMapping(value = "/page", method = RequestMethod.GET)
+    @ResponseBody
+    public Result page(Page page, AlipayTemp record) {
+        Map<String, Object> result = new HashMap<>();
+
+        List<AlipayTemp> pp =alipayTempService.getAlipayTempByPage(page, record);
+
+        result.put(AppConstant.PAGE, page);
+        result.put("pp", pp);
+        return new Result(true, result);
+    }
+
+
+    /**
+    * <p>保存。</p>
+    */
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ResponseBody
+    public Result save(AlipayTemp record) {
+        boolean num = alipayTempService.createAlipayTemp(record);
+        if (num) {
+        return new Result(true, record.getId());
+        }
+        return new Result(false, "保存异常");
+    }
+
+    /**
+    * <p>更新信息。</p>
+    */
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    @ResponseBody
+    public Result updateAlipayTemp(AlipayTemp record) {
+        boolean num = alipayTempService.updateAlipayTemp(record);
+        if (num) {
+        return new Result(true, "保存成功");
+        }
+        return new Result(false, "保存异常");
+    }
+
+    /**
+    * <p>删除。</p>
+    */
+    @RequestMapping(value = "/del", method = RequestMethod.POST)
+    @ResponseBody
+    public Result deleteAlipayTemp(@RequestParam(required = true, value = "id") String id) {
+
+        boolean num = alipayTempService.deleteAlipayTemp(id);
+        if (num) {
+        return new Result(true, "删除成功");
+        }
+        return new Result(false, "删除异常");
+    }
+
+    /**
+    * 导出Excel
+    * @param request
+    * @param response
+    * @param record
+    * @throws Exception
+    */
+    @RequestMapping(value = "/exportExcel", method = RequestMethod.GET)
+    @ResponseBody
+    public void exportExcel(HttpServletRequest request, HttpServletResponse response, AlipayTemp record) throws Exception {
+
+    List<AlipayTemp> alipayTemps = alipayTempService.getAlipayTempList(record);
+
+
+        String sheetName = "alipay_temp";
+        String titleName = "支付宝支付记录数据表";
+        String fileName = "支付宝支付记录表";
+        int columnNumber = 16;
+        int[] columnWidth = { 20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20 };
+        String[] columnName = {  "" ,   "删除标识" ,   "更新时间" ,   "更新人" ,   "创建时间" ,   "创建人" ,   "订单" ,   "状态" ,   "金额" ,   "订单码" ,   "退款码" ,   "退款数" ,   "类型" ,   "余额" ,   "积分" ,   "现金"  };
+        String[][] dataList = new String[alipayTemps.size()][16];
+
+        for (int i = 0; i < alipayTemps.size(); i++) {
+
+                        dataList[i][0] = String.valueOf(alipayTemps.get(i).getId());
+                        dataList[i][1] = String.valueOf(alipayTemps.get(i).getDelFlag());
+                        dataList[i][2] = String.valueOf(alipayTemps.get(i).getUpdateTime());
+                        dataList[i][3] = String.valueOf(alipayTemps.get(i).getUpdateUser());
+                        dataList[i][4] = String.valueOf(alipayTemps.get(i).getCreateTime());
+                        dataList[i][5] = String.valueOf(alipayTemps.get(i).getCreateUser());
+                        dataList[i][6] = String.valueOf(alipayTemps.get(i).getOrderId());
+                        dataList[i][7] = String.valueOf(alipayTemps.get(i).getTradeStatus());
+                        dataList[i][8] = String.valueOf(alipayTemps.get(i).getTotalAmount());
+                        dataList[i][9] = String.valueOf(alipayTemps.get(i).getOutTradeNo());
+                        dataList[i][10] = String.valueOf(alipayTemps.get(i).getRefundNo());
+                        dataList[i][11] = String.valueOf(alipayTemps.get(i).getRefundAmount());
+                        dataList[i][12] = String.valueOf(alipayTemps.get(i).getTypeFlag());
+                        dataList[i][13] = String.valueOf(alipayTemps.get(i).getCoin());
+                        dataList[i][14] = String.valueOf(alipayTemps.get(i).getPoint());
+                        dataList[i][15] = String.valueOf(alipayTemps.get(i).getCash());
+                    }
+
+
+        ExportExcelUtil.ExportWithResponse(sheetName, titleName, fileName,
+        columnNumber, columnWidth, columnName, dataList, response);
+
+
+        }
+    }
+

+ 11 - 0
src/main/java/com/izouma/awesomeadmin/web/UserOrderController.java

@@ -172,5 +172,16 @@ public class UserOrderController {
 
 
         }
+
+
+    @RequestMapping(value = "/pay", method = RequestMethod.POST)
+    @ResponseBody
+    public Result pay(@RequestParam(required = true, value = "orderId") String orderId, @RequestParam(required = true, value = "coin") double coin,
+                      @RequestParam(required = true, value = "point") double point, @RequestParam(required = true, value = "cash") double cash) {
+
+        return userOrderService.payOrder(orderId, coin, point, cash, AppConstant.PayMode.COIN);
+
+    }
+
     }
 

+ 8 - 1
src/main/resources/properties/outsidews.properties

@@ -10,4 +10,11 @@ aliImageSever=http://oss.izouma.com
 rongyunappkey=pwe86ga5ee376
 rongyunappsecret=ARj0hyU5Cp
 jwtsecret=3MgWy/pJjxHCQW2pHlQbkjomTUPRo9WhsPFjUPYZZlo=
-host=http://1eaed69e.ngrok.io
+host=http://1eaed69e.ngrok.io
+base_domain=http://localhost:8080
+ALIPAY_APP_ID=2016101100660827
+ALIPAY_APP_PRIVATE_KEY=MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDNbcuW0ij0mOezs+mRAYoyXlN5jZzr8WaO4q1kXTy7Xu9+C3+vurYgrqb9j+IeVsph4rhyF9P98H0cFQABnumiV6jaY3/wke/9aj8uBV5zvHC3GrkSDUQotPAmE+blwqFdofQsaoOuHOR1FfstLg29jOaVipoNvkSGmOJqfIjAGaMEQy7p2S2jLIqyKGMj71TvoITAMCkkwbim0kmbN4reh5XPKTeT2upOa+64FNnYK3mJ141e2LNWNx2HAIhaw88+KUiHNXUS3LA+aGw0inZP3UdSPAetsEagNeD+NXNtWf7DeABn/0K8SGgUkScODeC8TesOpS5lcmVj5W5w9hK7AgMBAAECggEBAIzxG5Fqtza6AZ5FfaZDTDGqjdMD2fn3Mcous4/8eEKFrALqmLxUeciKi3/ES/tMyKXIC4wb1RKRAQVXUx3JjboYMn1Dbu/68JEJaDeG73qwexTlfLxp5a2YFnvJg813b4byKriei6HVqNi8MAybYEoAdeN7qJ5tQE6obg9pSdmhgg6tnza51ASlwepZqxQ2YDMvROg7KA2PHlIrdVhLBy0GGG3YvSxsl2jOmXst96mihYa6vD4rXZjVXnd+kwS+x5Mpw7tLdEkS+PSrFRFpW6W0LwnGcJm1lC3L5X8wQ+lXGT3X2TrZV4j+NCwTyn3WFr3yGRnLAzJD5vMJI/sTY8ECgYEA8o1+9ZW7XIvO+zIBEsq177pEYlqFoW2e8acokeYPXex6RmIhaikQVegnwSQcu8hvD2Gh0ozGEH1Y47vCvGi6Q9pswy4pT47BQyuir/8EVSPsO+2atWa/YXot0Gcmm2GSWXT/DNJViaGB+oT4m15mCDtzVeJIndytglx0TF9saFMCgYEA2NFob1K+fi4+NZD8WrkAnjPKodeOsu+YxNnB3E53xd8BgVLVgC9F/eEwDkbWazil5Wykwf07OGbBK5+rUv9w2DHJMHyaGQ5HpCRx06P2gxquFdudXjWwV+6TseEQDloyE13oKT8+oJBedYTNI3D6mjGv+ni+gksaU74WS0mtvvkCgYEAx5SSUTXBk6ceyyccJwBRsE6Oknd12Zy/2ov3IAYzws8g1eVNJXNgk6+RdqVmV0XXzMpDQ2K+Xzck+062MB3kloyWTgwfxezrLYAsP7EROZVzfuRGFtnSxDyqkf8uj1A8Agv5Ce3QoI0azK65ee60+jUg9BxcMDkzND8rGuSx6S0CgYAu2JAH/YjLGpK2YC0mLPLFO8t8TGa4oqwPXD1WrF2UkypwFsWqfIxS3mTTsNqDMCon9+FhSKWS+iCinE0YEbj//UHLCCEDaOJxxK4TXEnW6dzTPDA0OsVvOk0PEeG2OCa5qICQ6OlPJ+JA4gCwt6htyG6NX6lJ3ZBCp7+JZNH1gQKBgCbsC8LzVOLIw6GR87X0oeWTfq7KKVD6rMfG58jHpTSAdY6ge9f2CyxKhfUyemZtu7BsRCFeuI5NDmtmg5uXS6Nu1dL/R5Xs33mB64fwYX/kXErnrHYrCekC1uIM8I/hTyVfbUvoMArq+3s2W7KTmq63ygBEnNOAqomJDHeW+/wv
+ALIPAY_CHARSET=utf-8
+ALIPAY_ALIPAY_PUBLIC_KEY=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzW3LltIo9Jjns7PpkQGKMl5TeY2c6/FmjuKtZF08u17vfgt/r7q2IK6m/Y/iHlbKYeK4chfT/fB9HBUAAZ7poleo2mN/8JHv/Wo/LgVec7xwtxq5Eg1EKLTwJhPm5cKhXaH0LGqDrhzkdRX7LS4NvYzmlYqaDb5EhpjianyIwBmjBEMu6dktoyyKsihjI+9U76CEwDApJMG4ptJJmzeK3oeVzyk3k9rqTmvuuBTZ2Ct5ideNXtizVjcdhwCIWsPPPilIhzV1EtywPmhsNIp2T91HUjwHrbBGoDXg/jVzbVn+w3gAZ/9CvEhoFJEnDg3gvE3rDqUuZXJlY+VucPYSuwIDAQAB
+ALIPAY_SELLER=2088102179082444
+ALIPAY_GATEWAY=https://openapi.alipaydev.com/gateway.do

+ 132 - 0
src/main/vue/src/pages/AlipayTemp.vue

@@ -0,0 +1,132 @@
+<template>
+    <div>
+        <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small"
+                 style="max-width: 500px;">
+                                                                                                                                                                                                                                    <el-form-item prop="orderId" label="订单">
+                <el-input v-model="formData.orderId" :disabled="'orderId'==subColumn"></el-input>
+            </el-form-item>
+                                                                                                                                                                                                                                                                                                                            <el-form-item prop="tradeStatus" label="状态">
+                <el-input v-model="formData.tradeStatus" :disabled="'tradeStatus'==subColumn"></el-input>
+            </el-form-item>
+                                                                                                                                                                                                                                                                                                                            <el-form-item prop="totalAmount" label="金额">
+                <el-input v-model="formData.totalAmount" :disabled="'totalAmount'==subColumn"></el-input>
+            </el-form-item>
+                                                                                                                                                                                                                                                                                                                            <el-form-item prop="outTradeNo" label="订单码">
+                <el-input v-model="formData.outTradeNo" :disabled="'outTradeNo'==subColumn"></el-input>
+            </el-form-item>
+                                                                                                                                                                                                                                                                                                                            <el-form-item prop="refundNo" label="退款码">
+                <el-input v-model="formData.refundNo" :disabled="'refundNo'==subColumn"></el-input>
+            </el-form-item>
+                                                                                                                                                                                                                                                                                                                            <el-form-item prop="refundAmount" label="退款数">
+                <el-input v-model="formData.refundAmount" :disabled="'refundAmount'==subColumn"></el-input>
+            </el-form-item>
+                                                                                                                                                                                                                                                                                                                            <el-form-item prop="typeFlag" label="类型">
+                <el-input v-model="formData.typeFlag" :disabled="'typeFlag'==subColumn"></el-input>
+            </el-form-item>
+                                                                                                                                                                                                                                                                                                                            <el-form-item prop="coin" label="余额">
+                <el-input v-model="formData.coin" :disabled="'coin'==subColumn"></el-input>
+            </el-form-item>
+                                                                                                                                                                                                                                                                                                                            <el-form-item prop="point" label="积分">
+                <el-input v-model="formData.point" :disabled="'point'==subColumn"></el-input>
+            </el-form-item>
+                                                                                                                                                                                                                                                                                                                            <el-form-item prop="cash" label="现金">
+                <el-input v-model="formData.cash" :disabled="'cash'==subColumn"></el-input>
+            </el-form-item>
+                                                                                                                                                                                                                                                                                        <el-form-item>
+                <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
+                <el-button @click="onDelete" v-if="formData.id" type="danger">删除</el-button>
+                <el-button @click="$router.go(-1)">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+<script>
+    import formValidator from '../formValidator'
+
+    export default {
+        created() {
+            if (this.$route.query.column) {
+                this.subColumn = this.$route.query.column.split(',')[1];
+                this.subValue = this.$route.query.column.split(',')[0];
+            }
+
+            if (this.$route.query.id) {
+                this.$http.get({
+                    url: '/alipayTemp/getOne',
+                    data: {
+                        id: this.$route.query.id
+                    }
+                }).then(res => {
+                    if (res.success) {
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+                        this.formData = res.data;
+
+                    if (this.$route.query.column) {
+                        this.formData[this.subColumn] = this.subValue;
+                    }
+                    }
+                })
+            }else {
+                if (this.$route.query.column) {
+                    this.formData[this.subColumn] = this.subValue;
+                }
+            }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    },
+        data() {
+            return {
+                saving: false,
+                formData: {},
+                rules: {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    },
+                                                                                                                                            subColumn: '',
+            subValue: '',
+        }
+        },
+        methods: {
+            onSave() {
+                this.$refs.form.validate((valid) => {
+                    if (valid) {
+                        this.submit();
+                    } else {
+                        return false;
+                    }
+                });
+            },
+            submit() {
+                var data = JSON.parse(JSON.stringify(this.formData));
+                this.$http.post({
+                    url: this.formData.id ? '/alipayTemp/update' : '/alipayTemp/save',
+                    data: data
+                }).then(res => {
+                    if (res.success) {
+                        this.$message.success('成功');
+                        this.$router.go(-1);
+                    } else {
+                        this.$message.warning('失败')
+                    }
+                });
+            },
+            onDelete() {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' }).then(() => {
+                    return this.$http.post({
+                    url: '/alipayTemp/del',
+                    data: { id: this.formData.id }
+                    })
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.$router.go(-1);
+                }).catch(action => {
+                    if (action === 'cancel') {
+                        this.$message.info('删除取消');
+                    } else {
+                        this.$message.error('删除失败');
+                    }
+                })
+            },
+        }
+    }
+</script>
+<style lang="less" scoped>
+</style>

+ 551 - 0
src/main/vue/src/pages/AlipayTemps.vue

@@ -0,0 +1,551 @@
+<template>
+    <div>
+        <div class="filters-container">
+        
+            <el-input placeholder="关键字" size="small" v-model="filter1" clearable class="filter-item"></el-input>
+            <el-button @click="searchData" type="primary" size="small" icon="el-icon-search" class="filter-item">搜索
+            </el-button>
+            <el-button @click="showAdvancedQueryDialog = !showAdvancedQueryDialog" type="primary" size="small"
+                       icon="el-icon-search" class="filter-item">高级查询
+            </el-button>
+            <el-button @click="showTableSortDialog = !showTableSortDialog" type="primary" size="small"
+                       icon="el-icon-sort" class="filter-item">排序
+            </el-button>
+            <el-button @click="$router.push({path:'/alipayTemp',query:{column:$route.query.column}})" type="primary"
+                       size="small" icon="el-icon-edit"
+                       class="filter-item">添加
+            </el-button>
+            <el-button @click="exportExcel" type="primary" size="small" icon="el-icon-share" class="filter-item">导出EXCEL
+            </el-button>
+            <el-dropdown trigger="click" size="medium" class="table-column-filter">
+                <span>
+                  筛选数据<i class="el-icon-arrow-down el-icon--right"></i>
+                </span>
+                <el-dropdown-menu slot="dropdown" class="table-column-filter-wrapper">
+                    <el-checkbox v-for="item in tableColumns" :key="item.value" v-model="item.show">{{item.label}}
+                    </el-checkbox>
+                </el-dropdown-menu>
+            </el-dropdown>
+        </div>
+        <el-table
+                :data="tableData"
+                :height="tableHeight"
+                row-key="id"
+                ref="table">
+            <el-table-column
+                    v-if="multipleMode"
+                    align="center"
+                    type="selection"
+                    width="50">
+            </el-table-column>
+            <el-table-column
+                    type="index"
+                    min-width="50"
+                    align="center">
+            </el-table-column>
+                                                                                                                                                                                                    
+                                            <el-table-column
+                                v-if="isColumnShow('orderId')"
+                                prop="orderId"
+                                label="订单"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('tradeStatus')"
+                                prop="tradeStatus"
+                                label="状态"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('totalAmount')"
+                                prop="totalAmount"
+                                label="金额"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('outTradeNo')"
+                                prop="outTradeNo"
+                                label="订单码"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('refundNo')"
+                                prop="refundNo"
+                                label="退款码"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('refundAmount')"
+                                prop="refundAmount"
+                                label="退款数"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('typeFlag')"
+                                prop="typeFlag"
+                                label="类型"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('coin')"
+                                prop="coin"
+                                label="余额"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('point')"
+                                prop="point"
+                                label="积分"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('cash')"
+                                prop="cash"
+                                label="现金"
+                                min-width="100">
+                        </el-table-column>
+                                                            <el-table-column
+                    label="操作"
+                    align="center"
+                    fixed="right"
+                    min-width="150"
+            >
+                <template slot-scope="scope">
+                            <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="deleteRow(scope.row)" type="danger" size="mini" plain>删除</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <div class="multiple-mode-wrapper" v-if="0">
+                <el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
+                <el-button-group v-else>
+                    <el-button size="small" @click="operation1">批量操作1</el-button>
+                    <el-button size="small" @click="operation2">批量操作2</el-button>
+                    <el-button size="small" @click="toggleMultipleMode(false)">取消</el-button>
+                </el-button-group>
+            </div>
+            <el-pagination
+                    background
+                    @size-change="pageSizeChange"
+                    @current-change="currentPageChange"
+                    :current-page="currentPage"
+                    :page-sizes="[10, 20, 30, 40, 50]"
+                    :page-size="pageSize"
+                    layout="total, sizes, prev, pager, next, jumper"
+                    :total="totalNumber">
+            </el-pagination>
+        </div>
+        <el-dialog title="高级查询" :visible.sync="showAdvancedQueryDialog">
+            <el-button @click="addField" type="text" icon="el-icon-plus">添加</el-button>
+            <el-table :data="advancedQueryFields">
+
+                <el-table-column prop="link" label="链接符" align="center">
+                    <template slot-scope="{row}">
+                        <el-select placeholder="链接" size="small" v-model="row.link" class="filter-item">
+                            <el-option label="AND" value="AND">
+                            </el-option>
+                            <el-option label="OR" value="OR">
+                            </el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="name" label="字段" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.name">
+
+                            <el-option v-for="item in advancedQueryColumns" :label="item.label" :value="item.value"
+                                       :key="item.value"></el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.searchMethod">
+                            <el-option v-for="item in searchMethods" :label="item" :value="item"
+                                       :key="item"></el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="value" label="参数" align="center">
+                    <template slot-scope="{row}">
+                        <el-input v-model="row.value"></el-input>
+                    </template>
+                </el-table-column>
+                <el-table-column width="60" align="center">
+                    <template slot-scope="{ row, column, $index }">
+                        <el-button @click="removeField($index)" size="small" type="text">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+
+            <span slot="footer" class="dialog-footer">
+
+                <el-button @click="advancedQuery" :loading="$store.state.fetchingData">确定</el-button>
+            </span>
+        </el-dialog>
+
+        <el-dialog title="排序" :visible.sync="showTableSortDialog">
+            <el-button @click="addSortField" type="text" icon="el-icon-plus">添加</el-button>
+            <el-table :data="tableSortFields">
+
+                <el-table-column prop="name" label="字段" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.name">
+
+                            <el-option v-for="item in advancedQueryColumns" :label="item.label" :value="item.value"
+                                       :key="item.value"></el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="order" label="排序" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.order">
+                            <el-option label="降序" value="desc">
+                            </el-option>
+                            <el-option label="升序" value="asc">
+                            </el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column width="60" align="center">
+                    <template slot-scope="{ row, column, $index }">
+                        <el-button @click="removeSortField($index)" size="small" type="text">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+
+            <span slot="footer" class="dialog-footer">
+
+                <el-button @click="tableSortQuery" :loading="$store.state.fetchingData">确定</el-button>
+            </span>
+        </el-dialog>
+
+        <el-dialog title="查看图片" :visible.sync="imageDialogVisible" size="small">
+            <img width="100%" :src="imgSrc" alt="">
+        </el-dialog>
+
+    </div>
+</template>
+<script>
+    import {mapState} from 'vuex'
+    import {format} from 'date-fns'
+    import zh from 'date-fns/locale/zh_cn'
+
+    export default {
+        created() {
+            this.getData();
+        },
+        data() {
+            return {
+                totalNumber: 0,
+                totalPage: 10,
+                currentPage: 1,
+                pageSize: 20,
+                tableData: [],
+                filter1: '',
+                filter2: '',
+                tableColumns: [
+                                                                                                                                                                                                                                                                                                                                                {
+                                label: '订单',
+                                value: 'orderId',
+                                show: true
+                            },
+                                                                                                {
+                                label: '状态',
+                                value: 'tradeStatus',
+                                show: true
+                            },
+                                                                                                {
+                                label: '金额',
+                                value: 'totalAmount',
+                                show: true
+                            },
+                                                                                                {
+                                label: '订单码',
+                                value: 'outTradeNo',
+                                show: true
+                            },
+                                                                                                {
+                                label: '退款码',
+                                value: 'refundNo',
+                                show: true
+                            },
+                                                                                                {
+                                label: '退款数',
+                                value: 'refundAmount',
+                                show: true
+                            },
+                                                                                                {
+                                label: '类型',
+                                value: 'typeFlag',
+                                show: true
+                            },
+                                                                                                {
+                                label: '余额',
+                                value: 'coin',
+                                show: true
+                            },
+                                                                                                {
+                                label: '积分',
+                                value: 'point',
+                                show: true
+                            },
+                                                                                                {
+                                label: '现金',
+                                value: 'cash',
+                                show: true
+                            },
+                                                            ],
+                multipleMode: false,
+                showAdvancedQueryDialog: false,
+                advancedQueryFields: [],
+                showTableSortDialog: false,
+                tableSortFields: [],
+                searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'like'],
+                advancedQueryColumns: [
+                                                                                                                                                                                                                                                                                                                                                {
+                                label: '订单',
+                                value: 'order_id'
+                            },
+                                                                                                {
+                                label: '状态',
+                                value: 'trade_status'
+                            },
+                                                                                                {
+                                label: '金额',
+                                value: 'total_amount'
+                            },
+                                                                                                {
+                                label: '订单码',
+                                value: 'out_trade_no'
+                            },
+                                                                                                {
+                                label: '退款码',
+                                value: 'refund_no'
+                            },
+                                                                                                {
+                                label: '退款数',
+                                value: 'refund_amount'
+                            },
+                                                                                                {
+                                label: '类型',
+                                value: 'type_flag'
+                            },
+                                                                                                {
+                                label: '余额',
+                                value: 'coin'
+                            },
+                                                                                                {
+                                label: '积分',
+                                value: 'point'
+                            },
+                                                                                                {
+                                label: '现金',
+                                value: 'cash'
+                            },
+                                                            ],
+                advancedQuerySearchKey: '',
+                orderByStr: '',
+                imgSrc: '',
+                imageDialogVisible: false,
+            }
+        },
+        computed: {
+            ...mapState(['tableHeight']),
+            selection() {
+                return this.$refs.table.selection.map(i => i.id);
+            }
+        },
+        methods: {
+            pageSizeChange(size) {
+                this.currentPage = 1;
+                this.pageSize = size;
+                this.getData();
+            },
+            currentPageChange(page) {
+                this.currentPage = page;
+                this.getData();
+            },
+            getData() {
+
+                var data = {
+                    currentPage: this.currentPage,
+                    pageNumber: this.pageSize,
+                    searchKey: this.filter1,
+                    advancedQuery: this.advancedQuerySearchKey,
+                    orderByStr: this.orderByStr,
+                }
+
+                if (this.$route.query.column) {
+                    var tempColumn = this.$route.query.column;
+                    data[tempColumn.split(',')[1]] = tempColumn.split(',')[0];
+                }
+
+                this.$http.get({
+                    url: '/alipayTemp/page',
+                    data: data
+                }).then(res => {
+                    if (res.success) {
+                        this.totalNumber = res.data.page.totalNumber;
+                        this.tableData = res.data.pp;
+                    }
+                })
+            },
+            isColumnShow(column) {
+                var row = this.tableColumns.find(i => i.value === column);
+                return row ? row.show : false;
+            },
+            toggleMultipleMode(multipleMode) {
+                this.multipleMode = multipleMode;
+                if (!multipleMode) {
+                    this.$refs.table.clearSelection();
+                }
+            },
+            editRow(row) {
+                this.$router.push({
+                    path: '/alipayTemp',
+                    query: {
+                        id: row.id,
+                        column: this.$route.query.column,
+                    }
+                })
+            },
+            operation1() {
+                this.$notify({
+                    title: '提示',
+                    message: this.selection
+                });
+            },
+            operation2() {
+                this.$message('操作2');
+            },
+            addField() {
+                this.advancedQueryFields.push({
+                    link: 'AND',
+                    name: '',
+                    searchMethod: '=',
+                    value: '',
+                });
+            },
+            removeField(i) {
+                if (this.advancedQueryFields.length > 0) {
+                    this.advancedQueryFields.splice(i, 1);
+                }
+            },
+            advancedQuery() {
+
+                this.advancedQuerySearchKey = '';
+
+                if (this.advancedQueryFields.length > 0) {
+
+                    var templist = [];
+
+                    this.advancedQueryFields.forEach(item => {
+                        if (item.link && item.name && item.searchMethod && item.value) {
+                            var tempItem = item.link + '_,' + item.name + '_,' + item.searchMethod + '_,' + item.value;
+                            templist.push(tempItem);
+                        }
+                    })
+
+                    if (templist.length > 0) {
+
+                        this.advancedQuerySearchKey = templist.join('_;');
+                    }
+                }
+
+                this.getData();
+                this.showAdvancedQueryDialog = false;
+            },
+            addSortField() {
+                this.tableSortFields.push({
+                    name: '',
+                    order: 'asc',
+                });
+            },
+            removeSortField(i) {
+                if (this.tableSortFields.length > 0) {
+                    this.tableSortFields.splice(i, 1);
+                }
+            },
+            tableSortQuery() {
+
+                this.orderByStr = '';
+
+                if (this.tableSortFields.length > 0) {
+
+                    var templist = [];
+
+                    this.tableSortFields.forEach(item => {
+                        if (item.name && item.order) {
+                            var tempItem = item.name + '_,' + item.order;
+                            templist.push(tempItem);
+                        }
+                    })
+
+                    if (templist.length > 0) {
+
+                        this.orderByStr = templist.join('_;');
+                    }
+                }
+
+                this.getData();
+                this.showTableSortDialog = false;
+            },
+            exportExcel() {
+                window.location.href = this.$baseUrl + "/alipayTemp/exportExcel?searchKey="
+                        + this.filter1 + "&advancedQuery=" + this.advancedQuerySearchKey+"&orderByStr=" + this.orderByStr;
+            },
+            searchData() {
+                this.currentPage = 1;
+                this.getData();
+            },
+            deleteRow(row) {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
+                    return this.$http.post({
+                        url: '/alipayTemp/del',
+                        data: {id: row.id}
+                    })
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.getData();
+                }).catch(action => {
+                    if (action === 'cancel') {
+                        this.$message.info('删除取消');
+                    } else {
+                        this.$message.error('删除失败');
+                    }
+                })
+            },
+            DateTimeFormatter(row, column, cellValue) {
+                if (cellValue) {
+                    return format(cellValue, 'YYYY/MM/DD HH:mm', {locale: zh})
+                }
+
+            },
+            DateFormatter(row, column, cellValue) {
+                if (cellValue) {
+                    return format(cellValue, 'YYYY/MM/DD', {locale: zh})
+                }
+
+            },
+            showImg(img) {
+                this.imgSrc = img;
+                this.imageDialogVisible = true;
+            },
+
+        }
+    }
+</script>
+<style lang="less" scoped>
+
+</style>

+ 10 - 0
src/main/vue/src/router/index.js

@@ -554,6 +554,16 @@ const router = new Router({
                     path: '/storeLabels',
                     name: 'StoreLabels',
                     component: () => import('../pages/StoreLabels')
+                },
+                {
+                    path: '/alipayTemp',
+                    name: 'AlipayTemp',
+                    component: () => import('../pages/AlipayTemp')
+                },
+                {
+                    path: '/alipayTemps',
+                    name: 'AlipayTemps',
+                    component: () => import('../pages/AlipayTemps')
                 }
                 /**INSERT_LOCATION**/
             ]

+ 29 - 0
src/test/java/OrderServiceTest.java

@@ -0,0 +1,29 @@
+import com.izouma.awesomeadmin.service.UserInfoService;
+import com.izouma.awesomeadmin.util.MbappUtil;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.GenericXmlContextLoader;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.UUID;
+
+@RunWith(value = SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {"classpath:/spring/applicationContext.xml"}, loader = GenericXmlContextLoader.class)
+@Transactional
+public class OrderServiceTest {
+
+    @Test
+    public void testGenOrderID() {
+        String machineId = "1";
+        String OrderId =machineId +(System.currentTimeMillis() + "").substring(1) +(System.nanoTime() + "").substring(7, 10);
+
+        System.out.println(OrderId);
+
+        OrderId =MbappUtil.getOrderIdByUUId();
+        System.out.println(OrderId);
+    }
+
+}

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio