1
0
suochencheng 7 лет назад
Родитель
Сommit
9130201e80

+ 29 - 1
src/main/java/com/izouma/awesomeadmin/constant/AppConstant.java

@@ -159,13 +159,25 @@ public interface AppConstant {
         /**
          * 退款中
          */
-        Integer REFUND = 7;
+        Integer REFUNDING = 7;
 
         /**
          * 已经取消
          */
         Integer CANCEL = 8;
 
+
+        /**
+         * 退款失败
+         */
+        Integer REFUND_FAIL = 9;
+
+        /**
+         * 退款成功
+         */
+        Integer REFUND_SUCCESS = 10;
+
+
     }
 
     /**
@@ -265,4 +277,20 @@ public interface AppConstant {
         Integer CASH_PLEDGE = 2;
 
     }
+
+    /**
+     * 商品类型
+     */
+    public interface ProductType {
+
+        /**
+         * 修图
+         */
+        String IMAGE = "0";
+
+        /**
+         * 实体商品
+         */
+        String PHYSICAL = "1";
+    }
 }

+ 6 - 3
src/main/java/com/izouma/awesomeadmin/dao/UserOrderMapper.java

@@ -1,16 +1,17 @@
 package com.izouma.awesomeadmin.dao;
 
 import java.util.*;
+
 import com.izouma.awesomeadmin.datasource.DataSource;
 import org.springframework.stereotype.Repository;
 import com.izouma.awesomeadmin.model.UserOrder;
 
 
 /**
-*  Dao接口
-*/
+ * Dao接口
+ */
 @Repository("com.zoumaframe.dao.UserOrderMapper")
-public interface UserOrderMapper{
+public interface UserOrderMapper {
 
     int deleteByPrimaryKey(Integer id);
 
@@ -29,5 +30,7 @@ public interface UserOrderMapper{
     UserOrder queryUserOrder(UserOrder record);
 
     List<UserOrder> query(UserOrder record);
+
+    List<UserOrder> getAutoCancel();
 }
 

+ 11 - 0
src/main/java/com/izouma/awesomeadmin/dao/UserOrderMapper.xml

@@ -774,6 +774,17 @@
         </where>
         order by id desc
     </select>
+    <select id="getAutoCancel" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.UserOrder">
+        select
+        <include refid="Base_Column_List"/>
+        from user_order
+        <where>
+            and del_flag = 'N'
+            and status_flag = 0
+            <![CDATA[AND create_time < DATE_ADD(NOW(),INTERVAL -30 MINUTE)]]>
+        </where>
+        order by id desc
+    </select>
 
     <resultMap id="AllInfoForGetOne" type="com.izouma.awesomeadmin.model.UserOrder" extends="BaseResultMap">
 

+ 13 - 0
src/main/java/com/izouma/awesomeadmin/model/UserOrder.java

@@ -39,6 +39,11 @@ public class UserOrder {
     private BigDecimal point;
     private BigDecimal cash;
 
+    /**
+     * 取消原因
+     */
+    private String cancelReason;
+
     private String userAddressId;
 
     private ProductInfo productInfo;
@@ -328,5 +333,13 @@ public class UserOrder {
     public void setOrderAddress(OrderAddress orderAddress) {
         this.orderAddress = orderAddress;
     }
+
+    public String getCancelReason() {
+        return cancelReason;
+    }
+
+    public void setCancelReason(String cancelReason) {
+        this.cancelReason = cancelReason;
+    }
 }
 

+ 47 - 0
src/main/java/com/izouma/awesomeadmin/service/UserOrderService.java

@@ -38,5 +38,52 @@ public interface UserOrderService {
     void alipaySuccess(String tradeNo, String tradeStatus);
 
     Result recharge(HttpServletRequest request, HttpServletResponse response);
+
+    Result cancel(UserOrder record);
+
+    /**
+     * <p>确认收货。</p>
+     *
+     * @param
+     * @return
+     */
+    Result confirm(UserOrder record);
+
+    /**
+     * <p>结算订单。</p>
+     *
+     * @return
+     */
+    Result jieSuan(String orderId);
+
+    /**
+     * <p>退款。</p>
+     *
+     * @param orderId
+     * @return
+     */
+    Result refundOrder(String orderId);
+
+    /**
+     * <p>退款失败,被拒绝。</p>
+     *
+     * @param orderId
+     * @return
+     */
+    Result refundFail(String orderId);
+
+    /**
+     * <p>。自动执行任务</p>
+     *
+     * @return
+     */
+    Result ziDong();
+
+    /**
+     * 自动取消
+     *
+     * @return
+     */
+    Result autoCancel();
 }
 

+ 327 - 0
src/main/java/com/izouma/awesomeadmin/service/impl/UserOrderServiceImpl.java

@@ -8,9 +8,13 @@ import java.util.*;
 
 import com.izouma.awesomeadmin.dao.*;
 import com.izouma.awesomeadmin.dto.Result;
+import com.izouma.awesomeadmin.dto.WxPayRefundData;
 import com.izouma.awesomeadmin.model.*;
 import com.izouma.awesomeadmin.service.*;
+import com.izouma.awesomeadmin.util.AlipayClientFactory;
 import com.izouma.awesomeadmin.util.MbappUtil;
+import com.izouma.awesomeadmin.util.PropertiesFileLoader;
+import com.izouma.awesomeadmin.util.WXRefundService;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.jdom.Element;
@@ -58,6 +62,10 @@ public class UserOrderServiceImpl implements UserOrderService {
     @Autowired
     private OrderAddressMapper orderAddressMapper;
 
+    @Autowired
+    private SystemConfigMapper systemConfigMapper;
+
+
     @Override
     public List<UserOrder> getUserOrderList(UserOrder record) {
 
@@ -559,6 +567,325 @@ public class UserOrderServiceImpl implements UserOrderService {
 
     }
 
+    @Override
+    public Result cancel(UserOrder record) {
+
+        logger.info("cancel:取消订单");
+        try {
+            UserOrder userOrder = userOrderMapper.selectByPrimaryKey(record.getId());
+            if (userOrder != null) {
+                if (AppConstant.OrderStatus.NO_PAY == userOrder.getStatusFlag()) {
+
+                    record.setStatusFlag(AppConstant.OrderStatus.CANCEL);
+                    userOrderMapper.updateByPrimaryKeySelective(record);
+                }
+
+
+            }
+
+            return new Result(true, "cancel:取消订单成功");
+
+        } catch (Exception e) {
+            logger.error("cancel:取消订单异常", e);
+        }
+        return new Result(false, "cancel:取消订单失败");
+    }
+
+    @Override
+    public Result confirm(UserOrder record) {
+
+        logger.info("confirm:确认完成订单");
+        try {
+            UserOrder userOrder = userOrderMapper.selectByPrimaryKey(record.getId());
+            if (userOrder != null) {
+
+                boolean confirmFlag = false;
+
+                if (AppConstant.ProductType.IMAGE.equals(userOrder.getProductType())
+                        && AppConstant.OrderStatus.ACCEPT == userOrder.getStatusFlag()) {//修图完成
+                    confirmFlag = true;
+                    record.setStatusFlag(AppConstant.OrderStatus.FINISH);
+
+                } else if (AppConstant.ProductType.PHYSICAL.equals(userOrder.getProductType())
+                        && AppConstant.OrderStatus.WAIT_REPAIR == userOrder.getStatusFlag()) {//已发货
+                    confirmFlag = true;
+                    record.setStatusFlag(AppConstant.OrderStatus.FINISH);
+
+                }
+
+                if (confirmFlag) {
+
+                    userOrderMapper.updateByPrimaryKeySelective(record);
+
+                    //结算商家
+                    jieSuan(userOrder.getId() + "");
+
+                }
+
+
+            }
+
+            return new Result(true, "confirm:确认完成成功");
+
+        } catch (Exception e) {
+            logger.error("confirm:确认完成异常", e);
+        }
+        return new Result(false, "confirm:确认完成失败");
+    }
+
+    @Override
+    public Result jieSuan(String orderId) {
+
+        logger.info("jieSuan:结算订单");
+        try {
+
+            UserOrder userOrder = new UserOrder();
+
+            userOrder.setId(Integer.valueOf(orderId));
+
+            userOrder = userOrderMapper.queryUserOrder(userOrder);
+            if (userOrder != null) {
+
+                SystemConfig systemConfig = systemConfigMapper.selectByPrimaryKey(1);
+
+
+                double money = userOrder.getDealPrice().doubleValue();
+
+
+                UserInfo shangJiaUser = userInfoService.getUserInfoById(userOrder.getProductInfo().getStoreInfo().getUserId() + "");
+
+                double shangJiaCoin = shangJiaUser.getMoneyCoin();
+                double fee = 0;
+
+                if ("Y".equals(systemConfig.getUseFlag())) {
+                    fee = money * Double.valueOf(systemConfig.getOrderRate()) / 100.0;
+                }
+
+                //更新商家余额
+                MemberCoin memberCoin = new MemberCoin();
+                memberCoin.setCreateUser("系统");
+                memberCoin.setUserId(shangJiaUser.getId() + "");
+                memberCoin.setOrderId(orderId);
+                memberCoin.setMoney(String.valueOf(money - fee));
+                memberCoin.setBalance(String.valueOf(shangJiaCoin + money - fee));
+                memberCoin.setTypeFlag(AppConstant.CoinType.SALE);
+                memberCoin.setRemark("售卖商品获得" + money + "订单号:" + userOrder.getOrderCode() + ";服务费:" + fee);
+                memberCoinService.createMemberCoin(memberCoin);
+
+
+                UserInfo updateShangJia = new UserInfo();
+                updateShangJia.setId(shangJiaUser.getId());
+                updateShangJia.setMoneyCoin(shangJiaCoin + money - fee);
+                userInfoService.updateUserInfo(updateShangJia);
+
+            }
+
+            return new Result(true, "jieSuan:结算订单成功");
+
+        } catch (Exception e) {
+            logger.error("jieSuan:结算订单异常", e);
+        }
+        return new Result(false, "jieSuan:结算订单失败");
+    }
+
+
+    @Override
+    public Result refundFail(String orderId) {
+
+        logger.info("refundFail:拒绝退款");
+        try {
+
+            UserOrder userOrder = userOrderMapper.selectByPrimaryKey(Integer.valueOf(orderId));
+            if (userOrder != null) {
+
+                if (AppConstant.OrderStatus.REFUNDING == userOrder.getStatusFlag()) {
+
+                    UserOrder updateOrder = new UserOrder();
+                    updateOrder.setId(userOrder.getId());
+                    updateOrder.setStatusFlag(AppConstant.OrderStatus.REFUND_FAIL);
+                    userOrderMapper.updateByPrimaryKeySelective(updateOrder);
+
+                }
+            }
+
+            return new Result(true, "拒绝退款成功");
+
+        } catch (Exception e) {
+            logger.error("refundFail:拒绝退款异常", e);
+        }
+        return new Result(false, "拒绝退款失败");
+    }
+
+
+    @Override
+    public Result refundOrder(String orderId) {
+
+        logger.info("refundOrder:退款");
+        try {
+
+            UserOrder userOrder = userOrderMapper.selectByPrimaryKey(Integer.valueOf(orderId));
+            if (userOrder != null) {
+
+                if (AppConstant.OrderStatus.REFUNDING == userOrder.getStatusFlag()) {
+
+
+                    double coin = userOrder.getCoin().doubleValue();
+
+                    double point = userOrder.getPoint().doubleValue();
+
+                    double cash = userOrder.getCash().doubleValue();
+
+                    int payMode = userOrder.getPayMode();
+                    UserInfo userInfo = userInfoService.getUserInfoById(userOrder.getUserId() + "");
+
+
+                    /**
+                     * 余额
+                     */
+                    double moneyCoin = userInfo.getMoneyCoin();
+
+                    /**
+                     * 商城积分
+                     */
+                    double moneyPoint = userInfo.getMoneyPoint();
+
+
+                    if (coin > 0) {
+
+                        MemberCoin memberCoin = new MemberCoin();
+                        memberCoin.setCreateUser("系统");
+                        memberCoin.setUserId(userInfo.getId() + "");
+                        memberCoin.setOrderId(orderId);
+                        memberCoin.setMoney(String.valueOf(coin + 0.0));
+                        memberCoin.setBalance(String.valueOf(moneyCoin + coin));
+                        memberCoin.setTypeFlag(AppConstant.CoinType.REFUND);
+                        memberCoin.setRemark("退款,订单号:" + userOrder.getOrderCode());
+                        memberCoinService.createMemberCoin(memberCoin);
+
+                    }
+
+                    if (point > 0) {
+                        MemberPoint memberPoint = new MemberPoint();
+                        memberPoint.setCreateUser("系统");
+                        memberPoint.setOrderId(orderId);
+                        memberPoint.setUserId(userInfo.getId() + "");
+                        memberPoint.setMoney(String.valueOf(point + 0.0));
+                        memberPoint.setBalance(String.valueOf(moneyPoint + point));
+                        memberPoint.setTypeFlag(AppConstant.CoinType.REFUND);
+                        memberPoint.setRemark("退款,订单号:" + userOrder.getOrderCode());
+                        memberPointService.createMemberPoint(memberPoint);
+                    }
+
+
+                    if (cash > 0) {
+                        if (AppConstant.PayMode.ALIPAY == payMode) {
+                            AlipayTemp alipayTemp = new AlipayTemp();
+                            alipayTemp.setTradeStatus(AppConstant.Aliapi.TRADE_SUCCESS);
+                            alipayTemp.setOrderId(orderId);
+                            alipayTemp.setTypeFlag(AppConstant.Aliapi.BUY);
+                            alipayTemp = alipayTempMapper.queryAlipayTemp(alipayTemp);
+                            if (alipayTemp != null) {
+
+                                AlipayClientFactory.refund(alipayTemp.getOutTradeNo(), cash);
+                            }
+                        }
+
+                        if (AppConstant.PayMode.WEI_XIN == payMode) {
+
+                            WxpayTemp wxpayTemp = new WxpayTemp();
+                            wxpayTemp.setOrderId(orderId);
+                            wxpayTemp.setTypeFlag(AppConstant.Aliapi.BUY);
+                            wxpayTemp = wxpayTempMapper.queryWxpayTemp(wxpayTemp);
+
+                            if (wxpayTemp != null) {
+
+                                String out_refund_no = MbappUtil.create_out_trade_no();
+                                WxPayRefundData data = new WxPayRefundData();
+                                data.setAppid(PropertiesFileLoader.getProperties("weixinappid"));
+                                data.setMch_id(PropertiesFileLoader.getProperties("weixin_mch_id"));
+                                data.setDevice_info(AppConstant.DEVICE_INFO);
+                                data.setNonce_str(MbappUtil.create_nonce_str());
+                                data.setOut_trade_no(wxpayTemp.getOutTradeNo());
+                                data.setTransaction_id(wxpayTemp.getTransactionId());
+                                data.setOut_refund_no(out_refund_no);
+                                data.setTotal_fee((int) (cash * 100));
+                                data.setRefund_fee((int) (cash * 100));
+                                data.setOp_user_id(PropertiesFileLoader.getProperties("weixin_mch_id"));
+
+                                WXRefundService.refund(data, "UTF-8", PropertiesFileLoader.getProperties("weixin_cert_path"), PropertiesFileLoader.getProperties("weixin_mch_id"));
+
+                                wxpayTemp.setOutRefundNo(out_refund_no);
+
+                                wxpayTempMapper.updateByPrimaryKeySelective(wxpayTemp);
+
+                            }
+                        }
+                    }
+
+                    UserInfo updateUser = new UserInfo();
+                    updateUser.setId(userInfo.getId());
+                    updateUser.setMoneyCoin(moneyCoin + coin);
+                    updateUser.setMoneyPoint(moneyPoint + point);
+                    userInfoService.updateUserInfo(updateUser);
+
+                    UserOrder updateOrder = new UserOrder();
+                    updateOrder.setId(userOrder.getId());
+                    updateOrder.setStatusFlag(AppConstant.OrderStatus.REFUND_SUCCESS);
+
+
+                    userOrderMapper.updateByPrimaryKeySelective(updateOrder);
+
+                }
+            }
+
+            return new Result(true, "退款成功");
+
+        } catch (Exception e) {
+            logger.error("refundOrder:退款异常", e);
+        }
+        return new Result(false, "退款失败");
+    }
+
+    @Override
+    public Result ziDong() {
+
+        logger.info("ziDong:定时任务");
+        try {
 
+            //取消无效订单
+            autoCancel();
+
+
+            return new Result(true, "定时任务成功");
+
+        } catch (Exception e) {
+            logger.error("ziDong:定时任务异常", e);
+        }
+        return new Result(false, "定时任务失败");
+    }
+
+    @Override
+    public Result autoCancel() {
+
+        logger.info("autoCancel:取消无用订单");
+        try {
+            //获取待取消订单
+            List<UserOrder> userOrders = userOrderMapper.getAutoCancel();
+
+            for (UserOrder userOrder : userOrders) {
+
+                UserOrder record = new UserOrder();
+                record.setId(userOrder.getId());
+                record.setCancelReason("30分钟未支付,系统自动取消!");
+                cancel(record);
+            }
+
+            return new Result(true, "取消无用订单成功");
+
+        } catch (Exception e) {
+            logger.error("autoCancel:取消无用订单异常", e);
+        }
+        return new Result(false, "取消无用订单失败");
+    }
 }
 

+ 144 - 0
src/main/java/com/izouma/awesomeadmin/util/WXRefundService.java

@@ -0,0 +1,144 @@
+package com.izouma.awesomeadmin.util;
+
+import com.izouma.awesomeadmin.dto.WxPayRefundData;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.ssl.SSLContexts;
+import org.apache.http.util.EntityUtils;
+import org.apache.log4j.Logger;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import javax.net.ssl.SSLContext;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.security.KeyStore;
+import java.util.*;
+
+/**
+ * <p>微信申请退款相关服务类。</p>
+ *
+ * @author 索晨成 <br />
+ * 更新履历 <br />
+ * 日期 : 姓名: 更新内容<br />
+ * @version 1.0
+ */
+public class WXRefundService {
+
+    /**
+     * 日志对象
+     */
+    private static Logger logger = Logger.getLogger(WXRefundService.class);
+
+
+    public static Map<String, String> refund(WxPayRefundData data, String key, String certificatePath, String password) {
+
+        //统一下单支付
+        // 将解析结果存储在HashMap中
+        Map<String, String> map = new HashMap<String, String>();
+        try {
+            //生成sign签名
+            SortedMap<Object, Object> parameters = new TreeMap<Object, Object>();
+            parameters.put("appid", data.getAppid());
+            parameters.put("mch_id", data.getMch_id());
+            parameters.put("device_info", data.getDevice_info());
+            parameters.put("nonce_str", data.getNonce_str());
+            parameters.put("transaction_id", data.getTransaction_id());
+            parameters.put("out_trade_no", data.getOut_trade_no());
+            parameters.put("out_refund_no", data.getOut_refund_no());
+            parameters.put("total_fee", data.getTotal_fee());
+            parameters.put("refund_fee", data.getRefund_fee());
+            parameters.put("refund_fee_type", data.getRefund_fee_type());
+            parameters.put("op_user_id", data.getOp_user_id());
+
+            String mySign = MbappUtil.createSign(key, parameters);
+            logger.info("SIGN:" + mySign);
+            // System.out.println("SIGN:" + mySign);
+            data.setSign(mySign);
+            XStream xs = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("__", "_")));
+            xs.alias("xml", WxPayRefundData.class);
+            String xml = xs.toXML(data);
+            logger.error("申请退款xml为:\n" + xml);
+            //指定读取证书格式为PKCS12
+            KeyStore keyStore = KeyStore.getInstance("PKCS12");
+            //读取本机存放的PKCS12证书文件
+            FileInputStream instream = new FileInputStream(new File(certificatePath));
+            try {
+                //指定PKCS12的密码(商户ID)
+                keyStore.load(instream, password.toCharArray());
+            } finally {
+                instream.close();
+            }
+            SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, password.toCharArray()).build();
+            //指定TLS版本
+            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1"}, null,
+                    SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
+            //设置httpclient的SSLSocketFactory
+            CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
+
+            HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/secapi/pay/refund");
+
+            StringEntity reqEntity = new StringEntity(xml, "utf-8");
+
+            // 设置类型 
+            reqEntity.setContentType("application/x-www-form-urlencoded");
+
+            httpPost.setEntity(reqEntity);
+
+            System.out.println("executing request" + httpPost.getRequestLine());
+
+            HttpResponse response = httpclient.execute(httpPost);
+
+            try {
+                HttpEntity entity = response.getEntity();
+                System.out.println(response.getStatusLine());
+                if (entity != null) {
+
+                    // 从request中取得输入流
+                    InputStream inputStream = entity.getContent();
+                    // 读取输入流
+                    SAXReader reader = new SAXReader();
+                    Document document = reader.read(inputStream);
+                    // 得到xml根元素
+                    Element root = document.getRootElement();
+                    // 得到根元素的所有子节点
+                    @SuppressWarnings("unchecked")
+                    List<Element> elementList = root.elements();
+                    logger.error("微信退款信息");
+                    // 遍历所有子节点
+                    for (Element e : elementList) {
+                        map.put(e.getName(), e.getText());
+
+                        System.out.println(e.getName() + ":" + e.getText());
+                        logger.error(e.getName() + ":" + e.getText());
+                    }
+                    // 释放资源
+                    inputStream.close();
+                    inputStream = null;
+
+                }
+                EntityUtils.consume(entity);
+            } catch (Exception e) {
+                e.printStackTrace();
+                logger.error("微信退款异常", e);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            logger.error("微信退款异常", e);
+        }
+
+        return map;
+    }
+
+}

+ 127 - 57
src/main/java/com/izouma/awesomeadmin/web/UserOrderController.java

@@ -18,8 +18,8 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 /**
-*  controller类
-*/
+ * controller类
+ */
 @Controller
 @RequestMapping("/userOrder")
 public class UserOrderController {
@@ -28,8 +28,8 @@ public class UserOrderController {
     private UserOrderService userOrderService;
 
     /**
-    * <p>获取全部记录。</p>
-    */
+     * <p>获取全部记录。</p>
+     */
     @RequiresAuthentication
     @RequestMapping(value = "/all", method = RequestMethod.GET)
     @ResponseBody
@@ -39,8 +39,8 @@ public class UserOrderController {
     }
 
     /**
-    * <p>根据Id。</p>
-    */
+     * <p>根据Id。</p>
+     */
     @RequestMapping(value = "/getUserOrder", method = RequestMethod.GET)
     @ResponseBody
     public Result getUserOrder(@RequestParam(required = false, value = "id") String id) {
@@ -49,8 +49,8 @@ public class UserOrderController {
     }
 
     /**
-    * <p>根据条件获取。</p>
-    */
+     * <p>根据条件获取。</p>
+     */
     @RequestMapping(value = "/getOne", method = RequestMethod.GET)
     @ResponseBody
     public Result getOne(UserOrder record) {
@@ -60,14 +60,14 @@ public class UserOrderController {
 
 
     /**
-    * <p>分页查询。</p>
-    */
+     * <p>分页查询。</p>
+     */
     @RequestMapping(value = "/page", method = RequestMethod.GET)
     @ResponseBody
     public Result page(Page page, UserOrder record) {
         Map<String, Object> result = new HashMap<>();
 
-        List<UserOrder> pp =userOrderService.getUserOrderByPage(page, record);
+        List<UserOrder> pp = userOrderService.getUserOrderByPage(page, record);
 
         result.put(AppConstant.PAGE, page);
         result.put("pp", pp);
@@ -76,102 +76,103 @@ public class UserOrderController {
 
 
     /**
-    * <p>保存。</p>
-    */
+     * <p>保存。</p>
+     */
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @ResponseBody
     public Result save(UserOrder record) {
         boolean num = userOrderService.createUserOrder(record);
         if (num) {
-        return new Result(true, record.getId());
+            return new Result(true, record.getId());
         }
         return new Result(false, "保存异常");
     }
 
     /**
-    * <p>更新信息。</p>
-    */
+     * <p>更新信息。</p>
+     */
     @RequestMapping(value = "/update", method = RequestMethod.POST)
     @ResponseBody
     public Result updateUserOrder(UserOrder record) {
         boolean num = userOrderService.updateUserOrder(record);
         if (num) {
-        return new Result(true, "保存成功");
+            return new Result(true, "保存成功");
         }
         return new Result(false, "保存异常");
     }
 
     /**
-    * <p>删除。</p>
-    */
+     * <p>删除。</p>
+     */
     @RequestMapping(value = "/del", method = RequestMethod.POST)
     @ResponseBody
     public Result deleteUserOrder(@RequestParam(required = true, value = "id") String id) {
 
         boolean num = userOrderService.deleteUserOrder(id);
         if (num) {
-        return new Result(true, "删除成功");
+            return new Result(true, "删除成功");
         }
         return new Result(false, "删除异常");
     }
 
     /**
-    * 导出Excel
-    * @param request
-    * @param response
-    * @param record
-    * @throws Exception
-    */
+     * 导出Excel
+     *
+     * @param request
+     * @param response
+     * @param record
+     * @throws Exception
+     */
     @RequestMapping(value = "/exportExcel", method = RequestMethod.GET)
     @ResponseBody
     public void exportExcel(HttpServletRequest request, HttpServletResponse response, UserOrder record) throws Exception {
 
-    List<UserOrder> userOrders = userOrderService.getUserOrderList(record);
+        List<UserOrder> userOrders = userOrderService.getUserOrderList(record);
 
 
         String sheetName = "user_order";
         String titleName = "用户订单数据表";
         String fileName = "用户订单表";
         int columnNumber = 25;
-        int[] columnWidth = { 20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20 };
-        String[] columnName = {  "" ,   "删除标识" ,   "更新时间" ,   "更新人" ,   "创建时间" ,   "创建人" ,   "用户" ,   "订单编码" ,   "店铺" ,   "商品类型" ,   "商品ID" ,   "商品名称" ,   "规格" ,   "单价" ,   "数量" ,   "优惠券" ,   "优惠金额" ,   "总价" ,   "成交价" ,   "支付方式" ,   "支付时间" ,   "备注" ,   "显示标识" ,   "状态" ,   "手续费"  };
+        int[] columnWidth = {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20};
+        String[] columnName = {"", "删除标识", "更新时间", "更新人", "创建时间", "创建人", "用户", "订单编码", "店铺", "商品类型", "商品ID", "商品名称", "规格", "单价", "数量", "优惠券", "优惠金额", "总价", "成交价", "支付方式", "支付时间", "备注", "显示标识", "状态", "手续费"};
         String[][] dataList = new String[userOrders.size()][25];
 
         for (int i = 0; i < userOrders.size(); i++) {
 
-                        dataList[i][0] = String.valueOf(userOrders.get(i).getId());
-                        dataList[i][1] = String.valueOf(userOrders.get(i).getDelFlag());
-                        dataList[i][2] = String.valueOf(userOrders.get(i).getUpdateTime());
-                        dataList[i][3] = String.valueOf(userOrders.get(i).getUpdateUser());
-                        dataList[i][4] = String.valueOf(userOrders.get(i).getCreateTime());
-                        dataList[i][5] = String.valueOf(userOrders.get(i).getCreateUser());
-                        dataList[i][6] = String.valueOf(userOrders.get(i).getUserId());
-                        dataList[i][7] = String.valueOf(userOrders.get(i).getOrderCode());
-                        dataList[i][8] = String.valueOf(userOrders.get(i).getStoreId());
-                        dataList[i][9] = String.valueOf(userOrders.get(i).getProductType());
-                        dataList[i][10] = String.valueOf(userOrders.get(i).getProductId());
-                        dataList[i][11] = String.valueOf(userOrders.get(i).getProductName());
-                        dataList[i][12] = String.valueOf(userOrders.get(i).getSpecification());
-                        dataList[i][13] = String.valueOf(userOrders.get(i).getUnitPrice());
-                        dataList[i][14] = String.valueOf(userOrders.get(i).getQuantity());
-                        dataList[i][15] = String.valueOf(userOrders.get(i).getUserCouponId());
-                        dataList[i][16] = String.valueOf(userOrders.get(i).getOffPrice());
-                        dataList[i][17] = String.valueOf(userOrders.get(i).getTotlePrice());
-                        dataList[i][18] = String.valueOf(userOrders.get(i).getDealPrice());
-                        dataList[i][19] = String.valueOf(userOrders.get(i).getPayMode());
-                        dataList[i][20] = String.valueOf(userOrders.get(i).getPayTime());
-                        dataList[i][21] = String.valueOf(userOrders.get(i).getRemark());
-                        dataList[i][22] = String.valueOf(userOrders.get(i).getShowFlag());
-                        dataList[i][23] = String.valueOf(userOrders.get(i).getStatusFlag());
-                        dataList[i][24] = String.valueOf(userOrders.get(i).getFee());
-                    }
+            dataList[i][0] = String.valueOf(userOrders.get(i).getId());
+            dataList[i][1] = String.valueOf(userOrders.get(i).getDelFlag());
+            dataList[i][2] = String.valueOf(userOrders.get(i).getUpdateTime());
+            dataList[i][3] = String.valueOf(userOrders.get(i).getUpdateUser());
+            dataList[i][4] = String.valueOf(userOrders.get(i).getCreateTime());
+            dataList[i][5] = String.valueOf(userOrders.get(i).getCreateUser());
+            dataList[i][6] = String.valueOf(userOrders.get(i).getUserId());
+            dataList[i][7] = String.valueOf(userOrders.get(i).getOrderCode());
+            dataList[i][8] = String.valueOf(userOrders.get(i).getStoreId());
+            dataList[i][9] = String.valueOf(userOrders.get(i).getProductType());
+            dataList[i][10] = String.valueOf(userOrders.get(i).getProductId());
+            dataList[i][11] = String.valueOf(userOrders.get(i).getProductName());
+            dataList[i][12] = String.valueOf(userOrders.get(i).getSpecification());
+            dataList[i][13] = String.valueOf(userOrders.get(i).getUnitPrice());
+            dataList[i][14] = String.valueOf(userOrders.get(i).getQuantity());
+            dataList[i][15] = String.valueOf(userOrders.get(i).getUserCouponId());
+            dataList[i][16] = String.valueOf(userOrders.get(i).getOffPrice());
+            dataList[i][17] = String.valueOf(userOrders.get(i).getTotlePrice());
+            dataList[i][18] = String.valueOf(userOrders.get(i).getDealPrice());
+            dataList[i][19] = String.valueOf(userOrders.get(i).getPayMode());
+            dataList[i][20] = String.valueOf(userOrders.get(i).getPayTime());
+            dataList[i][21] = String.valueOf(userOrders.get(i).getRemark());
+            dataList[i][22] = String.valueOf(userOrders.get(i).getShowFlag());
+            dataList[i][23] = String.valueOf(userOrders.get(i).getStatusFlag());
+            dataList[i][24] = String.valueOf(userOrders.get(i).getFee());
+        }
 
 
         ExportExcelUtil.ExportWithResponse(sheetName, titleName, fileName,
-        columnNumber, columnWidth, columnName, dataList, response);
+                columnNumber, columnWidth, columnName, dataList, response);
 
 
-        }
+    }
 
 
     @RequestMapping(value = "/pay", method = RequestMethod.POST)
@@ -183,5 +184,74 @@ public class UserOrderController {
 
     }
 
+    /**
+     * 取消订单
+     *
+     * @param record id cancelReason
+     * @return
+     */
+    @RequestMapping(value = "/cancel", method = RequestMethod.POST)
+    @ResponseBody
+    public Result cancel(UserOrder record) {
+
+        return userOrderService.cancel(record);
+
+    }
+
+
+    /**
+     * 确认完成订单
+     *
+     * @param record
+     * @return
+     */
+    @RequestMapping(value = "/confirm", method = RequestMethod.POST)
+    @ResponseBody
+    public Result confirm(UserOrder record) {
+
+        return userOrderService.confirm(record);
+
+    }
+
+    /**
+     * <p>退款。</p>
+     *
+     * @param orderId
+     * @return
+     */
+    @RequestMapping(value = "/refund", method = RequestMethod.POST)
+    @ResponseBody
+    public Result refund(@RequestParam(required = true, value = "orderId") String orderId) {
+
+        return userOrderService.refundOrder(orderId);
+
+    }
+
+
+    /**
+     * 退款失败
+     *
+     * @param orderId
+     * @return
+     */
+    @RequestMapping(value = "/refundFail", method = RequestMethod.POST)
+    @ResponseBody
+    public Result refundFail(@RequestParam(required = true, value = "orderId") String orderId) {
+
+        return userOrderService.refundFail(orderId);
+
+    }
+
+
+    @RequestMapping(value = "/ziDong", method = RequestMethod.GET)
+    @ResponseBody
+    public Result ziDong() {
+
+        return userOrderService.ziDong();
+
     }
 
+
+
+}
+

+ 2 - 2
src/main/resources/properties/outsidews.properties

@@ -21,5 +21,5 @@ ALIPAY_GATEWAY=https://openapi.alipaydev.com/gateway.do
 weixin_mch_id=1480639272
 weixin_mch_secret=
 weixin_notify_url=
-weixin_cert_path=
-weixin_notify_url_recharge=
+weixin_cert_path=/home/cert/apiclient_cert.p12
+weixin_notify_url_recharge=