1
0
Переглянути джерело

小程序前后端代码修改

hyq 6 роки тому
батько
коміт
59b12e26b8
31 змінених файлів з 686 додано та 90 видалено
  1. 3 0
      kmall-admin/src/main/java/com/kmall/admin/controller/ProductStoreRelaController.java
  2. 1 2
      kmall-api/kmall-api.iml
  3. 2 0
      kmall-api/src/main/java/com/kmall/api/api/ApiFootprintController.java
  4. 4 0
      kmall-api/src/main/java/com/kmall/api/api/ApiGoodsController.java
  5. 56 43
      kmall-api/src/main/java/com/kmall/api/api/ApiOrderController.java
  6. 2 2
      kmall-api/src/main/java/com/kmall/api/api/ApiPayController.java
  7. 3 2
      kmall-api/src/main/java/com/kmall/api/contants/Dict.java
  8. 1 1
      kmall-api/src/main/java/com/kmall/api/dao/ApiOrderRefundMapper.java
  9. 10 0
      kmall-api/src/main/java/com/kmall/api/entity/MallOrderRefund.java
  10. 2 2
      kmall-api/src/main/java/com/kmall/api/service/ApiOrderRefundService.java
  11. 23 8
      kmall-api/src/main/java/com/kmall/api/service/ApiPayService.java
  12. 3 0
      kmall-api/src/main/resources/mybatis/mapper/ApiGoodsMapper.xml
  13. 9 2
      kmall-api/src/main/resources/mybatis/mapper/ApiMallOrderRefundMapper.xml
  14. 14 8
      kmall-api/src/main/resources/mybatis/mapper/ApiOrderMapper.xml
  15. 276 0
      kmall-common/src/main/java/com/kmall/common/utils/wechat/WechatRefundQueryResult.java
  16. 53 2
      kmall-common/src/main/java/com/kmall/common/utils/wechat/WechatUtil.java
  17. 8 0
      kmall-schedule/src/main/java/com/kmall/schedule/dao/QzOrderMapper.java
  18. 22 0
      kmall-schedule/src/main/java/com/kmall/schedule/quartz/OrderTask.java
  19. 103 3
      kmall-schedule/src/main/java/com/kmall/schedule/service/QzOrderService.java
  20. 39 2
      kmall-schedule/src/main/resources/mybatis/mapper/QzOrderMapper.xml
  21. 8 0
      wx-mall/pages/goods/goods.js
  22. 1 1
      wx-mall/pages/payResult/payResult.wxss
  23. 0 1
      wx-mall/pages/search/search.wxss
  24. 5 1
      wx-mall/pages/ucenter/footprint/footprint.wxml
  25. 22 0
      wx-mall/pages/ucenter/footprint/footprint.wxss
  26. 1 1
      wx-mall/pages/ucenter/index/index.wxml
  27. 3 1
      wx-mall/pages/ucenter/order/order.js
  28. 1 1
      wx-mall/pages/ucenter/order/order.wxml
  29. 3 1
      wx-mall/pages/ucenter/orderDetail/orderDetail.wxml
  30. 5 3
      wx-mall/pages/ucenter/wuliu/wuliu.js
  31. 3 3
      wx-mall/pages/ucenter/wuliu/wuliu.wxml

+ 3 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/ProductStoreRelaController.java

@@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -73,6 +74,8 @@ public class ProductStoreRelaController {
                 || null == productStoreRela.getStoreId()) {
             return R.error("信息不全,保存失败");
         }
+        productStoreRela.setCreateTime(new Date());
+        productStoreRela.setModTime(new Date());
         ProductStoreRelaEntity productStoreRelaDb = productStoreRelaService.queryByStoreIdProductId(productStoreRela.getStoreId(), productStoreRela.getProductId());
         if (null != productStoreRelaDb) {
             productStoreRela.setId(productStoreRelaDb.getId());

+ 1 - 2
kmall-api/kmall-api.iml

@@ -87,8 +87,7 @@
     <orderEntry type="library" name="Maven: org.logback-extensions:logback-ext-spring:0.1.5" level="project" />
     <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:2.6.3" level="project" />
     <orderEntry type="library" name="Maven: org.mariadb.jdbc:mariadb-java-client:2.0.2" level="project" />
-    <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.12" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:2.6.0" level="project" />
+    <orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.39" level="project" />
     <orderEntry type="library" name="Maven: com.alibaba:druid:1.0.28" level="project" />
     <orderEntry type="module-library">
       <library name="Maven: com.alibaba:jconsole:1.8.0">

+ 2 - 0
kmall-api/src/main/java/com/kmall/api/api/ApiFootprintController.java

@@ -47,12 +47,14 @@ public class ApiFootprintController extends ApiBaseAction {
                        @RequestParam(value = "size", defaultValue = "10") Integer size) {
         Map resultObj = new HashMap();
 
+        Long storeId = getStoreId();
         //查询列表数据
         Map params = new HashMap();
         params.put("page", page);
         params.put("limit", size);
         params.put("sidx", "f.id");
         params.put("user_id", loginUser.getId());
+        params.put("store_id", storeId);
         params.put("maxFoot", true);
         params.put("order", "desc");
         Query query = new Query(params);

+ 4 - 0
kmall-api/src/main/java/com/kmall/api/api/ApiGoodsController.java

@@ -524,12 +524,16 @@ public class ApiGoodsController extends ApiBaseAction {
             GoodsVo goodsCategory = goodsService.queryObject(id);
             if (null != goodsCategory) {
                 Map paramRelated = new HashMap();
+                paramRelated.put("store_id", getStoreId());
+                paramRelated.put("notGoodsBizType", true);
                 paramRelated.put("fields", "a.id, a.name, a.list_pic_url, psr1.retail_price,b.id as product_id");
                 paramRelated.put("category_id", goodsCategory.getCategory_id());
                 relatedGoods = goodsService.queryList(paramRelated);
             }
         } else {
             Map paramRelated = new HashMap();
+            paramRelated.put("store_id", getStoreId());
+            paramRelated.put("notGoodsBizType", true);
             paramRelated.put("goods_ids", relatedGoodsIds);
             paramRelated.put("fields", "a.id, a.name, a.list_pic_url, psr1.retail_price,b.id as product_id");
             relatedGoods = goodsService.queryList(paramRelated);

+ 56 - 43
kmall-api/src/main/java/com/kmall/api/api/ApiOrderController.java

@@ -132,44 +132,53 @@ public class ApiOrderController extends ApiBaseAction {
 
         //查询物流轨迹
         List<Map> mapList = new ArrayList<>();
+
+        if(orderInfo.getOrderBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())
+                && orderInfo.getOrder_status() == Integer.parseInt(Dict.orderStatus.item_301.getItem())){
+            Map map = new HashMap();
+            map.put("AcceptStation", "交易完成,用户已提走");
+            mapList.add(map);
+        }
         OrderProcessRecordEntity entity = orderProcessRecordService.queryObjectByOrderSn(orderInfo.getOrder_sn());
-        if(entity !=null){
-            if(Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsCustomsSend())){
+        if (entity != null) {
+            if (Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsCustomsSend())) {
                 Map map = new HashMap();
-                map.put("AcceptTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(entity.getCustomsSuccTime()));
+                map.put("AcceptTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(entity.getCustomsSuccTime()));
                 map.put("AcceptStation", "订单清关完成,等待仓库发货");
                 mapList.add(map);
             }
-            if(Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsPaymentSend())){
+            if (Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsPaymentSend())) {
                 Map map = new HashMap();
-                map.put("AcceptTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(entity.getPaySuccTime()));
+                map.put("AcceptTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(entity.getPaySuccTime()));
                 map.put("AcceptStation", "订单支付成功,等待海关清关");
                 mapList.add(map);
             }
-            if(Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsAddOrderSend())){
+            if (Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsAddOrderSend())) {
                 Map map = new HashMap();
-                map.put("AcceptTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(entity.getAddOrderSuccTime()));
+                map.put("AcceptTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(entity.getAddOrderSuccTime()));
                 map.put("AcceptStation", "订单提交成功");
                 mapList.add(map);
             }
         }
-        if (!StringUtils.isEmpty(orderInfo.getShipping_code()) && !StringUtils.isEmpty(orderInfo.getShipping_no())) {
-            JSONObject Traces = apiKdniaoService.getOrderTracesByJson(orderInfo.getShipping_code(), orderInfo.getShipping_no());
-            if(Traces != null){
-                mapList = (List<Map>) Traces.get("Traces");
-                String State = (String) Traces.get("State"); //物流状态:2-在途中,3-签收,4-问题件
-                if(Dict.logisticsStatus.item_0.getItem().equalsIgnoreCase(State)){
-                    Map noDataMap = new HashMap();
-                    noDataMap.put("AcceptTime","");
-                    noDataMap.put("AcceptStation",Traces.get("Reason"));
-                    mapList.add(noDataMap);
+        if(!orderInfo.getOrderBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())){
+            if (!StringUtils.isEmpty(orderInfo.getShipping_code()) && !StringUtils.isEmpty(orderInfo.getShipping_no())) {
+                JSONObject Traces = apiKdniaoService.getOrderTracesByJson(orderInfo.getShipping_code(), orderInfo.getShipping_no());
+                if (Traces != null) {
+                    mapList = (List<Map>) Traces.get("Traces");
+                    String State = (String) Traces.get("State"); //物流状态:2-在途中,3-签收,4-问题件
+                    if (Dict.logisticsStatus.item_0.getItem().equalsIgnoreCase(State)) {
+                        Map noDataMap = new HashMap();
+                        noDataMap.put("AcceptTime", "");
+                        noDataMap.put("AcceptStation", Traces.get("Reason"));
+                        mapList.add(noDataMap);
+                    }
                 }
             }
         }
         resultObj.put("wuliu", mapList != null && mapList.size() > 0 ? mapList.get(0) : null);
 
         if(orderInfo.getOrder_status() == Integer.parseInt(Dict.orderStatus.item_401.getItem()) || orderInfo.getOrder_status() == Integer.parseInt(Dict.orderStatus.item_402.getItem()) ) {
-            MallOrderRefund refundInfo = apiOrderRefundService.queryObjectByOrderSn(String.valueOf(orderInfo.getId()));
+            MallOrderRefund refundInfo = apiOrderRefundService.queryObjectByOrderId(String.valueOf(orderInfo.getId()));
             resultObj.put("refundInfo", refundInfo);
         }
 
@@ -290,28 +299,35 @@ public class ApiOrderController extends ApiBaseAction {
         }
         List<WuliuVo> wuliuList = new ArrayList<WuliuVo>();
 
-        if (!StringUtils.isEmpty(orderInfo.getShipping_code()) && !StringUtils.isEmpty(orderInfo.getShipping_no())) {
-        // 快递
-            JSONObject Traces = apiKdniaoService.getOrderTracesByJson(orderInfo.getShipping_code(), orderInfo.getShipping_no());
-            List<Map> mapList = (List<Map>) Traces.get("Traces");
-            for (int i=0;i<mapList.size();i++){
-                WuliuVo vo = new WuliuVo();
-                vo.setAcceptTime((String)mapList.get(i).get("AcceptTime"));
-                vo.setAcceptStation((String)mapList.get(i).get("AcceptStation"));
-                wuliuList.add(vo);
-            }
+        if(orderInfo.getOrderBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())
+                && orderInfo.getOrder_status() == Integer.parseInt(Dict.orderStatus.item_301.getItem())){
+            WuliuVo vo = new WuliuVo();
+            vo.setAcceptStation("交易完成,用户已提走");
+            wuliuList.add(vo);
+        }
+        if(!orderInfo.getOrderBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())) {
+            if (!StringUtils.isEmpty(orderInfo.getShipping_code()) && !StringUtils.isEmpty(orderInfo.getShipping_no())) {
+                // 快递
+                JSONObject Traces = apiKdniaoService.getOrderTracesByJson(orderInfo.getShipping_code(), orderInfo.getShipping_no());
+                List<Map> mapList = (List<Map>) Traces.get("Traces");
+                for (int i = 0; i < mapList.size(); i++) {
+                    WuliuVo vo = new WuliuVo();
+                    vo.setAcceptTime((String) mapList.get(i).get("AcceptTime"));
+                    vo.setAcceptStation((String) mapList.get(i).get("AcceptStation"));
+                    wuliuList.add(vo);
+                }
 
-            String State = (String) Traces.get("State"); //物流状态:2-在途中,3-签收,4-问题件
-            String Reason = (String) Traces.get("Reason");
-            if(Dict.logisticsStatus.item_0.getItem().equalsIgnoreCase(State)){
-                WuliuVo wuliuVo = new WuliuVo();
-                wuliuVo.setAcceptStation(Reason);
-                wuliuList.add(wuliuVo);
+                String State = (String) Traces.get("State"); //物流状态:2-在途中,3-签收,4-问题件
+                String Reason = (String) Traces.get("Reason");
+                if (Dict.logisticsStatus.item_0.getItem().equalsIgnoreCase(State)) {
+                    WuliuVo wuliuVo = new WuliuVo();
+                    wuliuVo.setAcceptStation(Reason);
+                    wuliuList.add(wuliuVo);
+                }
+                map.put("State", Traces.get("State")); //物流状态:2-在途中,3-签收,4-问题件
+                map.put("Reason", Traces.get("Reason"));
             }
-            map.put("State", Traces.get("State")); //物流状态:2-在途中,3-签收,4-问题件
-            map.put("Reason", Traces.get("Reason"));
         }
-
         OrderProcessRecordEntity entity = orderProcessRecordService.queryObjectByOrderSn(orderInfo.getOrder_sn());
         if(entity !=null){
             if(Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsCustomsSend())){
@@ -359,9 +375,7 @@ public class ApiOrderController extends ApiBaseAction {
 //            orderVo.setOrder_status(Integer.parseInt(Dict.orderStatus.item_400.getItem()));
 //            orderVo.setId(orderInfo.getId());
 //            orderService.update(orderVo);//修改状态为维权申请中
-
-            MallOrderRefund mallOrderRefund = apiOrderRefundService.queryObjectByOrderSn(orderInfo.getId()+"");
-
+            MallOrderRefund mallOrderRefund = apiOrderRefundService.queryObjectByOrderId(orderInfo.getId()+"");
             MallOrderRefund orderRefund = new MallOrderRefund();
             orderRefund.setOrderId(Integer.parseInt(orderId));
             orderRefund.setUserId(Integer.parseInt(orderInfo.getUser_id()+""));
@@ -374,10 +388,9 @@ public class ApiOrderController extends ApiBaseAction {
                 apiOrderRefundService.update(orderRefund);
             }else{
                 orderRefund.setCreateTime(new Date());
-                if (apiOrderRefundService.save(orderRefund)>0) {
-                    return toResponsMsgSuccess("退款申请成功");
-                }
+                apiOrderRefundService.save(orderRefund);
             }
+            return toResponsMsgSuccess("退款申请成功");
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 2 - 2
kmall-api/src/main/java/com/kmall/api/api/ApiPayController.java

@@ -281,7 +281,7 @@ public class ApiPayController extends ApiBaseAction {
             apiPayService.refund(orderInfo,result,"");
             return toResponsObject(400, "成功退款", "");
         } else {
-            MallOrderRefund mallOrderRefund = mallOrderRefundMapper.queryObjectByOrderSn(orderInfo.getId()+"");
+            MallOrderRefund mallOrderRefund = mallOrderRefundMapper.queryObjectByOrderId(orderInfo.getId()+"");
             MallOrderRefund orderRefund = new MallOrderRefund();
             orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));
             orderRefund.setRefundMoney(BigDecimal.valueOf(orderInfo.getActual_price().multiply(new BigDecimal(100)).doubleValue()));
@@ -334,7 +334,7 @@ public class ApiPayController extends ApiBaseAction {
             WechatRefundResult result = (WechatRefundResult) XmlUtil.xmlStrToBean(reponseXml, WechatRefundResult.class);
 
             if (result.getReturn_code().equalsIgnoreCase("FAIL")) {
-                logger.error("退款失败");
+                logger.info("微信查询接口调用失败: "+result.getReturn_msg());
                 response.getWriter().write(setXml("SUCCESS", "OK"));
                 response.getWriter().close();
             }else {

+ 3 - 2
kmall-api/src/main/java/com/kmall/api/contants/Dict.java

@@ -476,13 +476,14 @@ public class Dict {
     }
 
     /**
-     *  退款状态 1 申请中 2 退款成功 3 已拒绝  4 微信退款失败
+     *  退款状态 1 申请中 2 退款成功 3 已拒绝  4 微信退款失败 5 微信退款处理中
      */
     public enum RefundStatus {
         item_1("1", "申请中"),
         item_2("2", "退款成功"),
         item_3("3", "已拒绝"),
-        item_4("4", "微信退款失败");
+        item_4("4", "微信退款失败"),
+        item_5("5", "微信退款处理中");
 
         private String item;
         private String itemName;

+ 1 - 1
kmall-api/src/main/java/com/kmall/api/dao/ApiOrderRefundMapper.java

@@ -9,5 +9,5 @@ import org.springframework.stereotype.Component;
 public interface ApiOrderRefundMapper extends BaseDao<MallOrderRefund> {
     MallOrderRefund selectByPrimaryKey(Integer id);
 
-    MallOrderRefund queryObjectByOrderSn(@Param("orderSn") String orderSn);
+    MallOrderRefund queryObjectByOrderId(@Param("orderId") String orderId);
 }

+ 10 - 0
kmall-api/src/main/java/com/kmall/api/entity/MallOrderRefund.java

@@ -94,6 +94,16 @@ public class MallOrderRefund implements Serializable {
 
     private String refundRecvAccout;
 
+    private String wechatRefundStatusDes;
+
+    public String getWechatRefundStatusDes() {
+        return wechatRefundStatusDes;
+    }
+
+    public void setWechatRefundStatusDes(String wechatRefundStatusDes) {
+        this.wechatRefundStatusDes = wechatRefundStatusDes;
+    }
+
     public String getRefundRecvAccout() {
         return refundRecvAccout;
     }

+ 2 - 2
kmall-api/src/main/java/com/kmall/api/service/ApiOrderRefundService.java

@@ -41,8 +41,8 @@ public class ApiOrderRefundService {
     public int update(MallOrderRefund orderRefund) {
         return orderRefundMapper.update(orderRefund);
     }
-    public MallOrderRefund queryObjectByOrderSn(String orderSn) {
-        return orderRefundMapper.queryObjectByOrderSn(orderSn);
+    public MallOrderRefund queryObjectByOrderId(String orderId) {
+        return orderRefundMapper.queryObjectByOrderId(orderId);
     }
 
 }

+ 23 - 8
kmall-api/src/main/java/com/kmall/api/service/ApiPayService.java

@@ -216,7 +216,7 @@ public class ApiPayService {
         }
         orderService.update(orderInfo);
 
-        MallOrderRefund mallOrderRefund = mallOrderRefundMapper.queryObjectByOrderSn(orderInfo.getId()+"");
+        MallOrderRefund mallOrderRefund = mallOrderRefundMapper.queryObjectByOrderId(orderInfo.getId()+"");
 
         MallOrderRefund orderRefund = new MallOrderRefund();
         orderRefund.setRefundId(result.getRefund_id());
@@ -277,26 +277,41 @@ public class ApiPayService {
         String out_trade_no = refundApiResult.getOut_trade_no();//商户订单号
         // 业务处理
         List<OrderVo> orderVoList = orderService.queryObjectByMerchOrderSn(out_trade_no);
-        Date successTime = DateUtils.convertStringToDate(success_time,DateUtils.DATE_TIME_PATTERN_YYYY_MM_DD_HH_MM_SS);
+        Date successTime = DateUtils.strToDate(success_time);
         if(orderVoList != null && orderVoList.size()>0) {
             for(OrderVo orderInfo:orderVoList) {
                 if(orderInfo.getOrder_status() == Integer.parseInt(Dict.orderStatus.item_201.getItem())
                         || orderInfo.getOrder_status() == Integer.parseInt(Dict.orderStatus.item_401.getItem())){
-                    MallOrderRefund mallOrderRefund = mallOrderRefundMapper.queryObjectByOrderSn(orderInfo.getOrder_sn());
+                    MallOrderRefund mallOrderRefund = mallOrderRefundMapper.queryObjectByOrderId(orderInfo.getId()+"");
                     MallOrderRefund orderRefund = new MallOrderRefund();
                     if(mallOrderRefund != null){
                         orderRefund.setRefundTime(successTime);//退款成功时间
                         orderRefund.setOutRefundNo(refundApiResult.getOut_refund_no());
                         orderRefund.setRefundId(refundApiResult.getRefund_id());
                         orderRefund.setRefundMoney(BigDecimal.valueOf(Long.valueOf(refundApiResult.getRefund_fee())));
-                        orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_2.getItem()));
+                        if (refundApiResult.getRefund_status().equalsIgnoreCase("SUCCESS")) {
+                            orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_2.getItem()));
+                            orderRefund.setWechatRefundStatusDes("退款成功");
+                        } else if (refundApiResult.getRefund_status().equalsIgnoreCase("REFUNDCLOSE")) {
+                            orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_4.getItem()));
+                            orderRefund.setWechatRefundStatusDes("退款关闭");
+                        } else if (refundApiResult.getRefund_status().equalsIgnoreCase("PROCESSING")) {
+                            orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_5.getItem()));
+                            orderRefund.setWechatRefundStatusDes("退款处理中");
+                        } else if (refundApiResult.getRefund_status().equalsIgnoreCase("CHANGE")) {
+                            orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_4.getItem()));
+                            orderRefund.setWechatRefundStatusDes("退款异常");
+                        }
                         orderRefund.setRefundRecvAccout(refundApiResult.getRefund_recv_accout());
                         orderRefund.setId(mallOrderRefund.getId());
+                        mallOrderRefundMapper.update(orderRefund);//更新订单退款信息
+
+                        OrderVo orderVo = new OrderVo();
+                        orderVo.setPay_status(Integer.parseInt(Dict.payStatus.item_4.getItem()));
+                        orderVo.setOrder_status(Integer.parseInt(Dict.orderStatus.item_401.getItem()));
+                        orderVo.setId(orderInfo.getId());
+                        orderService.update(orderVo);
                     }
-                    orderInfo.setPay_status(Integer.parseInt(Dict.payStatus.item_4.getItem()));
-                    orderInfo.setOrder_status(Integer.parseInt(Dict.orderStatus.item_401.getItem()));
-                    orderService.update(orderInfo);
-                    mallOrderRefundMapper.update(mallOrderRefund);//更新订单退款信息
                 }
             }
         }

+ 3 - 0
kmall-api/src/main/resources/mybatis/mapper/ApiGoodsMapper.xml

@@ -134,6 +134,9 @@
         <if test="goodsBizType != null">
             and a.goods_biz_type = #{goodsBizType}
         </if>
+        <if test="notGoodsBizType == true">
+            and a.goods_biz_type in ('00','11')
+        </if>
         <if test="categoryIds != null">
             and a.category_id in
             <foreach item="item" collection="categoryIds" open="(" separator="," close=")">

+ 9 - 2
kmall-api/src/main/resources/mybatis/mapper/ApiMallOrderRefundMapper.xml

@@ -24,6 +24,7 @@
     <result property="modTime" column="mod_time"/>
     <result property="tstm" column="tstm"/>
     <result property="refundRecvAccout" column="refund_recv_accout"/>
+    <result property="wechatRefundStatusDes" column="wechat_refund_status_des"/>
   </resultMap>
 
   <select id="queryObject" resultType="com.kmall.api.entity.MallOrderRefund">
@@ -40,6 +41,7 @@
     `refund_status`,
     `refund_reason`,
     `refund_recv_accout`,
+    `wechat_refund_status_des`,
     `approver`,
     `approval_time`,
     `approval_remark`,
@@ -52,7 +54,7 @@
     where id = #{id}
   </select>
 
-  <select id="queryObjectByOrderSn" resultType="com.kmall.api.entity.MallOrderRefund">
+  <select id="queryObjectByOrderId" resultType="com.kmall.api.entity.MallOrderRefund">
     select
     `id`,
     `order_id`,
@@ -66,6 +68,7 @@
     `refund_status`,
     `refund_reason`,
     `refund_recv_accout`,
+    `wechat_refund_status_des`,
     `approver`,
     `approval_time`,
     `approval_remark`,
@@ -75,7 +78,7 @@
     `mod_time`,
     `tstm`
     from mall_order_refund
-    where order_id = #{orderSn}
+    where order_id = #{orderId}
   </select>
 
   <select id="queryList" resultType="com.kmall.api.entity.MallOrderRefund">
@@ -92,6 +95,7 @@
     `refund_status`,
     `refund_reason`,
     `refund_recv_accout`,
+    `wechat_refund_status_des`,
     `approver`,
     `approval_time`,
     `approval_remark`,
@@ -139,6 +143,7 @@
     `refund_status`,
     `refund_reason`,
     `refund_recv_accout`,
+    `wechat_refund_status_des`,
     `approver`,
     `approval_time`,
     `approval_remark`,
@@ -159,6 +164,7 @@
     #{refundStatus},
     #{refundReason},
     #{refundRecvAccout},
+    #{wechatRefundStatusDes},
     #{approver},
     #{approvalTime},
     #{approvalRemark},
@@ -183,6 +189,7 @@
       <if test="refundStatus != null">`refund_status` = #{refundStatus}, </if>
       <if test="refundReason != null">`refund_reason` = #{refundReason}, </if>
       <if test="refundRecvAccout != null">`refund_recv_accout` = #{refundRecvAccout}, </if>
+      <if test="wechatRefundStatusDes != null">`wechat_refund_status_des` = #{wechatRefundStatusDes}, </if>
       <if test="approver != null">`approver` = #{approver}, </if>
       <if test="approvalTime != null">`approval_time` = #{approvalTime}, </if>
       <if test="approvalRemark != null">`approval_remark` = #{approvalRemark}, </if>

+ 14 - 8
kmall-api/src/main/resources/mybatis/mapper/ApiOrderMapper.xml

@@ -119,14 +119,20 @@
                 AND a.shipping_id = #{shippingId}
             </if>
         </where>
-        <choose>
-            <when test="sidx != null and sidx.trim() != ''">
-                order by ${sidx} ${order}
-            </when>
-            <otherwise>
-                order by a.id desc
-            </otherwise>
-        </choose>
+
+        <if test="order_status != 401">
+            <choose>
+                <when test="sidx != null and sidx.trim() != ''">
+                    order by ${sidx} ${order}
+                </when>
+                <otherwise>
+                    order by a.id desc
+                </otherwise>
+            </choose>
+        </if>
+        <if test="order_status == 401">
+            order by f.refund_time desc
+        </if>
         <if test="offset != null and limit != null">
             limit #{offset}, #{limit}
         </if>

+ 276 - 0
kmall-common/src/main/java/com/kmall/common/utils/wechat/WechatRefundQueryResult.java

@@ -0,0 +1,276 @@
+package com.kmall.common.utils.wechat;
+
+/**
+ * 微信查询接口返回的字段
+ * @author huangyaqin
+ * @version 1.0
+ * 2018-11-02 10:22
+ */
+public class WechatRefundQueryResult {
+    private String return_code;
+    private String return_msg;
+
+    private String result_code;
+    private String err_code;
+    private String err_code_des;
+    private String appid;
+    private String mch_id;
+    private String req_info;
+    private String nonce_str;
+    private String sign;
+    private String total_refund_count;//订单总退款次数
+    private String transaction_id;//微信订单号
+    private String out_trade_no;//商户订单号
+    private String total_fee;//订单金额 订单总金额,单位为分,只能为整数
+    private String settlement_total_fee;//应结订单金额 =订单金额-免充值优惠券金额
+    private String fee_type;//货币种类 默认人民币:CNY
+    private String cash_fee;//现金支付金额	现金支付金额,单位为分,只能为整数
+    private String refund_count;//退款笔数
+    private String out_refund_no_0;//商户退款单号
+    private String refund_id_0;//微信退款单号
+    private String refund_channel_0;//退款渠道 ORIGINAL—原路退款 BALANCE—退回到余额 OTHER_BALANCE—原账户异常退到其他余额账户 OTHER_BANKCARD—原银行卡异常退到其他银行卡
+    private String refund_fee_0;//申请退款金额	 退款总金额,单位为分,可以做部分退款
+    private String settlement_refund_fee_0;//退款金额
+    /**
+     * SUCCESS—退款成功
+     REFUNDCLOSE—退款关闭。
+     PROCESSING—退款处理中
+     CHANGE—退款异常,退款到银行发现用户的卡作废或者冻结了,导致原路退款银行卡失败
+     */
+    private String refund_status_0;//退款状态
+    /**
+     * REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款/基本账户
+     REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款
+     */
+    private String refund_account_0;//退款资金来源
+    /**
+     * 取当前退款单的退款入账方
+     1)退回银行卡:
+     {银行名称}{卡类型}{卡尾号}
+     2)退回支付用户零钱:
+     支付用户零钱
+     3)退还商户:
+     商户基本账户
+     商户结算银行账户
+     4)退回支付用户零钱通:
+     支付用户零钱通
+     */
+    private String refund_recv_accout_0;
+    private String refund_success_time_0;//退款成功时间
+
+    public String getReturn_code() {
+        return return_code;
+    }
+
+    public void setReturn_code(String return_code) {
+        this.return_code = return_code;
+    }
+
+    public String getReturn_msg() {
+        return return_msg;
+    }
+
+    public void setReturn_msg(String return_msg) {
+        this.return_msg = return_msg;
+    }
+
+    public String getResult_code() {
+        return result_code;
+    }
+
+    public void setResult_code(String result_code) {
+        this.result_code = result_code;
+    }
+
+    public String getErr_code() {
+        return err_code;
+    }
+
+    public void setErr_code(String err_code) {
+        this.err_code = err_code;
+    }
+
+    public String getErr_code_des() {
+        return err_code_des;
+    }
+
+    public void setErr_code_des(String err_code_des) {
+        this.err_code_des = err_code_des;
+    }
+
+    public String getAppid() {
+        return appid;
+    }
+
+    public void setAppid(String appid) {
+        this.appid = appid;
+    }
+
+    public String getMch_id() {
+        return mch_id;
+    }
+
+    public void setMch_id(String mch_id) {
+        this.mch_id = mch_id;
+    }
+
+    public String getReq_info() {
+        return req_info;
+    }
+
+    public void setReq_info(String req_info) {
+        this.req_info = req_info;
+    }
+
+    public String getNonce_str() {
+        return nonce_str;
+    }
+
+    public void setNonce_str(String nonce_str) {
+        this.nonce_str = nonce_str;
+    }
+
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
+
+    public String getTotal_refund_count() {
+        return total_refund_count;
+    }
+
+    public void setTotal_refund_count(String total_refund_count) {
+        this.total_refund_count = total_refund_count;
+    }
+
+    public String getTransaction_id() {
+        return transaction_id;
+    }
+
+    public void setTransaction_id(String transaction_id) {
+        this.transaction_id = transaction_id;
+    }
+
+    public String getOut_trade_no() {
+        return out_trade_no;
+    }
+
+    public void setOut_trade_no(String out_trade_no) {
+        this.out_trade_no = out_trade_no;
+    }
+
+    public String getTotal_fee() {
+        return total_fee;
+    }
+
+    public void setTotal_fee(String total_fee) {
+        this.total_fee = total_fee;
+    }
+
+    public String getSettlement_total_fee() {
+        return settlement_total_fee;
+    }
+
+    public void setSettlement_total_fee(String settlement_total_fee) {
+        this.settlement_total_fee = settlement_total_fee;
+    }
+
+    public String getFee_type() {
+        return fee_type;
+    }
+
+    public void setFee_type(String fee_type) {
+        this.fee_type = fee_type;
+    }
+
+    public String getCash_fee() {
+        return cash_fee;
+    }
+
+    public void setCash_fee(String cash_fee) {
+        this.cash_fee = cash_fee;
+    }
+
+    public String getRefund_count() {
+        return refund_count;
+    }
+
+    public void setRefund_count(String refund_count) {
+        this.refund_count = refund_count;
+    }
+
+    public String getOut_refund_no_0() {
+        return out_refund_no_0;
+    }
+
+    public void setOut_refund_no_0(String out_refund_no_0) {
+        this.out_refund_no_0 = out_refund_no_0;
+    }
+
+    public String getRefund_id_0() {
+        return refund_id_0;
+    }
+
+    public void setRefund_id_0(String refund_id_0) {
+        this.refund_id_0 = refund_id_0;
+    }
+
+    public String getRefund_channel_0() {
+        return refund_channel_0;
+    }
+
+    public void setRefund_channel_0(String refund_channel_0) {
+        this.refund_channel_0 = refund_channel_0;
+    }
+
+    public String getRefund_fee_0() {
+        return refund_fee_0;
+    }
+
+    public void setRefund_fee_0(String refund_fee_0) {
+        this.refund_fee_0 = refund_fee_0;
+    }
+
+    public String getSettlement_refund_fee_0() {
+        return settlement_refund_fee_0;
+    }
+
+    public void setSettlement_refund_fee_0(String settlement_refund_fee_0) {
+        this.settlement_refund_fee_0 = settlement_refund_fee_0;
+    }
+
+    public String getRefund_status_0() {
+        return refund_status_0;
+    }
+
+    public void setRefund_status_0(String refund_status_0) {
+        this.refund_status_0 = refund_status_0;
+    }
+
+    public String getRefund_account_0() {
+        return refund_account_0;
+    }
+
+    public void setRefund_account_0(String refund_account_0) {
+        this.refund_account_0 = refund_account_0;
+    }
+
+    public String getRefund_recv_accout_0() {
+        return refund_recv_accout_0;
+    }
+
+    public void setRefund_recv_accout_0(String refund_recv_accout_0) {
+        this.refund_recv_accout_0 = refund_recv_accout_0;
+    }
+
+    public String getRefund_success_time_0() {
+        return refund_success_time_0;
+    }
+
+    public void setRefund_success_time_0(String refund_success_time_0) {
+        this.refund_success_time_0 = refund_success_time_0;
+    }
+}

+ 53 - 2
kmall-common/src/main/java/com/kmall/common/utils/wechat/WechatUtil.java

@@ -148,7 +148,7 @@ public class WechatUtil {
      * @param
      * @return
      */
-    public static Map<String, Object> wxRefundquery(String out_trade_no, String out_refund_no) {
+    public static WechatRefundQueryResult wxRefundquery(String out_trade_no) {
         Map<Object, Object> params = new HashMap<Object, Object>();
         params.put("appid", CommonWxPayPropertiesBuilder.instance().getAppId());//微信分配的公众账号ID(企业号corpid即为此appId)
         params.put("mch_id", CommonWxPayPropertiesBuilder.instance().getMchId());//微信支付分配的商户号
@@ -173,7 +173,58 @@ public class WechatUtil {
             HttpEntity entity = response.getEntity();
             String xmlStr = EntityUtils.toString(entity, "UTF-8");
             System.out.println(xmlStr);
-            Map<String, Object> result = XmlUtil.xmlStrToMap(xmlStr);//.xmlStrToBean(xmlStr, WechatRefundApiResult.class);
+            WechatRefundQueryResult result = (WechatRefundQueryResult) XmlUtil.xmlStrToBean(xmlStr, WechatRefundQueryResult.class);
+//            Map<String, Object> result = XmlUtil.xmlStrToMap(xmlStr);//.xmlStrToBean(xmlStr, WechatRefundApiResult.class);
+            return result;
+            //将信息保存到数据库
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            return null;
+        } finally {
+            try {
+                if (response != null) {
+                    response.close();
+                }
+            } catch (IOException e) {
+                logger.error(e.getMessage(), e);
+            }
+        }
+    }
+
+
+    /**
+     * 方法描述:微信查询订单逻辑
+     * 创建时间:2018年11月02日  上午11:04:25
+     * 作者: huangyaqin
+     * @param
+     * @return
+     */
+    public static WechatRefundApiResult wxOrderQuery(String out_trade_no) {
+        Map<Object, Object> params = new HashMap<Object, Object>();
+        params.put("appid", CommonWxPayPropertiesBuilder.instance().getAppId());//微信分配的公众账号ID(企业号corpid即为此appId)
+        params.put("mch_id", CommonWxPayPropertiesBuilder.instance().getMchId());//微信支付分配的商户号
+        params.put("nonce_str", CharUtil.getRandomString(16));//随机字符串,不长于32位。推荐随机数生成算法
+        params.put("out_trade_no", out_trade_no);//商户侧传给微信的订单号
+        //签名前必须要参数全部写在前面
+        params.put("sign", arraySign(params, CommonWxPayPropertiesBuilder.instance().getPaySignKey()));//签名
+        String mapToXml = MapUtils.convertMap2Xml(params);
+        HttpPost httPost = new HttpPost(CommonWxPayPropertiesBuilder.instance().getOrderquery());
+        httPost.addHeader("Connection", "keep-alive");
+        httPost.addHeader("Accept", "*/*");
+        httPost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
+        httPost.addHeader("Host", "api.mch.weixin.qq.com");
+        httPost.addHeader("X-Requested-With", "XMLHttpRequest");
+        httPost.addHeader("Cache-Control", "max-age=0");
+        httPost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
+        httPost.setEntity(new StringEntity(mapToXml, "UTF-8"));
+        CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(WechatConfig.getSslcsf()).build();
+        CloseableHttpResponse response = null;
+        try {
+            response = httpClient.execute(httPost);
+            HttpEntity entity = response.getEntity();
+            String xmlStr = EntityUtils.toString(entity, "UTF-8");
+            System.out.println("xmlStr : " + xmlStr);
+            WechatRefundApiResult result = (WechatRefundApiResult) XmlUtil.xmlStrToBean(xmlStr, WechatRefundApiResult.class);
             return result;
             //将信息保存到数据库
         } catch (Exception e) {

+ 8 - 0
kmall-schedule/src/main/java/com/kmall/schedule/dao/QzOrderMapper.java

@@ -33,4 +33,12 @@ public interface QzOrderMapper {
     void unpayPastUpdate();
 
     void updateStockNum(Map param);
+
+    List<Map> queryRefundOrderList();
+
+    void updateOrderRefund(Map param);
+
+    void updateOrderInfo(Map param);
+
+    List<Map> queryPayingOrderList();
 }

+ 22 - 0
kmall-schedule/src/main/java/com/kmall/schedule/quartz/OrderTask.java

@@ -45,6 +45,28 @@ public class OrderTask {
         qzOrderService.unpayPastUpdate();
         logger.info(">>>>>>>>>>>>>>>>>>>>unpayPastUpdate is end ");
     }
+
+    /**
+     * 方法描述:查询已申请退款订单以及退款中订单,查询微信退款更新订单状态
+     * 二分钟更新订单
+     */
+    @Scheduled(fixedRate = 1000 * 60 * 2)
+    public void refundUpdate() {
+        logger.info(">>>>>>>>>>>>>>>>>>>>refundUpdate is start ");
+        qzOrderService.refundUpdate();
+        logger.info(">>>>>>>>>>>>>>>>>>>>refundUpdate is end ");
+    }
+
+    /**
+     * 方法描述:查询支付中的订单以及小程序更新支付信息异常订单,查询微信订单更新订单状态
+     * 二分钟更新订单
+     */
+    @Scheduled(fixedRate = 1000 * 60 * 2)
+    public void orderQueryUpdate() {
+        logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdate is start ");
+        qzOrderService.orderQueryUpdate();
+        logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdate is end ");
+    }
 }
 
 

+ 103 - 3
kmall-schedule/src/main/java/com/kmall/schedule/service/QzOrderService.java

@@ -1,5 +1,8 @@
 package com.kmall.schedule.service;
 
+import com.kmall.common.utils.wechat.WechatRefundApiResult;
+import com.kmall.common.utils.wechat.WechatRefundQueryResult;
+import com.kmall.common.utils.wechat.WechatUtil;
 import com.kmall.schedule.dao.QzGroupMapper;
 import com.kmall.schedule.dao.QzOrderMapper;
 import com.kmall.common.dao.TemplateConfDao;
@@ -66,7 +69,7 @@ public class QzOrderService {
                 }
                 WxTemplate tem = new WxTemplate();
                 tem.setTemplate_id(templateConfVo.getTemplateId());
-                tem.setTopcolor("#00DD00");
+//                tem.setTopcolor("#00DD00");
                 tem.setTouser(open_id);
                 tem.setPage("/pages/groupDetail/groupDetail?id=" + group_id);
                 tem.setForm_id(form_id);
@@ -119,7 +122,7 @@ public class QzOrderService {
                 }
                 WxTemplate tem = new WxTemplate();
                 tem.setTemplate_id(templateConfVo.getTemplateId());
-                tem.setTopcolor("#00DD00");
+//                tem.setTopcolor("#00DD00");
                 tem.setTouser(open_id);
                 tem.setPage("/pages/groupDetail/groupDetail?id=" + group_id);
                 tem.setForm_id(form_id);
@@ -164,7 +167,7 @@ public class QzOrderService {
                 }
                 WxTemplate tem = new WxTemplate();
                 tem.setTemplate_id(templateConfVo.getTemplateId());
-                tem.setTopcolor("#00DD00");
+//                tem.setTopcolor("#00DD00");
                 tem.setTouser(open_id);
                 tem.setPage("/pages/ucenter/orderDetail/orderDetail?id=" + id);
                 tem.setForm_id(form_id);
@@ -203,6 +206,100 @@ public class QzOrderService {
         logger.info(">>>>>>>>>>>>>>>>>>>>unpayPastUpdate is end ");
     }
 
+    /**
+     * 更新退款中或小程序更新退款信息异常订单
+     */
+    @Transactional
+    public void refundUpdate() {
+        logger.info(">>>>>>>>>>>>>>>>>>>>refundUpdate is start ");
+        // 获取退款中或更新退款信息异常订单
+        List<Map> refundOrderList = qzOrderMapper.queryRefundOrderList();
+        if (null != refundOrderList && refundOrderList.size() > 0) {
+            for (Map map : refundOrderList) {
+                String out_trade_no = MapUtils.getString("merch_order_sn", map);
+                String order_id = MapUtils.getString("order_id", map);
+                WechatRefundQueryResult result = WechatUtil.wxRefundquery(out_trade_no);
+                if (result.getReturn_code().equalsIgnoreCase("SUCCESS")) {
+                    if(result.getResult_code().equalsIgnoreCase("SUCCESS")) {
+                        Map refundRaram = new HashMap();
+                        Date successTime = DateUtils.strToDate(result.getRefund_success_time_0());
+                        refundRaram.put("refundTime", successTime);
+                        refundRaram.put("outRefundNo", result.getOut_refund_no_0());
+                        refundRaram.put("refundId", result.getRefund_id_0());
+                        refundRaram.put("refundMoney", result.getRefund_fee_0());
+                        if (result.getRefund_status_0().equalsIgnoreCase("SUCCESS")) {
+                            refundRaram.put("refundStatus", 2);
+                            refundRaram.put("wechat_refund_status_des", "退款成功");
+                        } else if (result.getRefund_status_0().equalsIgnoreCase("REFUNDCLOSE")) {
+                            refundRaram.put("refundStatus", 4);
+                            refundRaram.put("wechat_refund_status_des", "退款关闭");
+                        } else if (result.getRefund_status_0().equalsIgnoreCase("PROCESSING")) {
+                            refundRaram.put("refundStatus", 5);
+                            refundRaram.put("wechat_refund_status_des", "退款处理中");
+                        } else if (result.getRefund_status_0().equalsIgnoreCase("CHANGE")) {
+                            refundRaram.put("refundStatus", 4);
+                            refundRaram.put("wechat_refund_status_des", "退款异常");
+                        }
+                        refundRaram.put("refundRecvAccout", result.getRefund_recv_accout_0());
+                        refundRaram.put("orderRefundId", result.getOut_refund_no_0());
+                        qzOrderMapper.updateOrderRefund(refundRaram);//更新订单退款信息
+
+                        Map orderRaram = new HashMap();
+                        orderRaram.put("payStatus", 4);
+                        orderRaram.put("orderStatus", 401);
+                        orderRaram.put("orderId", order_id);
+                        orderRaram.put("payTransactionId", result.getTransaction_id());
+                        qzOrderMapper.updateOrderInfo(orderRaram);
+                    }else{
+                        logger.info(">>>>>>>>>>>>>>>>>>>>refundUpdate 微信退款查询接口返回失败信息:code 【"+result.getErr_code()+"】,des【"+result.getErr_code_des()+"】");
+                    }
+                }else {
+                    logger.info(">>>>>>>>>>>>>>>>>>>>refundUpdate 微信退款查询接口调用失败: "+result.getReturn_msg());
+                }
+            }
+        }else{
+            logger.info(">>>>>>>>>>>>>>>>>>>>refundUpdate 未查到退款数据 ");
+        }
+        logger.info(">>>>>>>>>>>>>>>>>>>>refundUpdate is end ");
+    }
+
+
+    /**
+     * 查询支付中的订单以及小程序更新支付信息异常订单,查询微信订单更新订单状态
+     */
+    @Transactional
+    public void orderQueryUpdate() {
+        logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdate is start ");
+        // 获取支付中的订单以及小程序更新支付信息异常订单
+        List<Map> orderList = qzOrderMapper.queryPayingOrderList();
+        if (null != orderList && orderList.size() > 0) {
+            for (Map map : orderList) {
+                String out_trade_no = MapUtils.getString("merch_order_sn", map);
+                String orderId = MapUtils.getString("order_id", map);
+                WechatRefundApiResult result = WechatUtil.wxOrderQuery(out_trade_no);
+                if (result.getReturn_code().equalsIgnoreCase("SUCCESS")) {
+                    if(result.getResult_code().equalsIgnoreCase("SUCCESS")) {
+                        Date successTime = DateUtils.convertStringToDate(result.getTime_end(),DateUtils.DATE_TIME_PATTERN_YYYY_MM_DD_HH_MM_SS);
+
+                        Map orderRaram = new HashMap();
+                        orderRaram.put("payStatus", 2);
+                        orderRaram.put("orderStatus", 201);
+                        orderRaram.put("payTransactionId", result.getTransaction_id());
+                        orderRaram.put("payTime", successTime);
+                        orderRaram.put("orderId", orderId);
+                        qzOrderMapper.updateOrderInfo(orderRaram);
+                    }else{
+                        logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdate 微信查询接口返回失败信息:code 【"+result.getErr_code()+"】,des【"+result.getErr_code_des()+"】");
+                    }
+                }else {
+                    logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdate 微信查询接口调用失败: "+result.getReturn_msg());
+                }
+            }
+        }else{
+            logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdate 未查到订单数据 ");
+        }
+        logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdate is end ");
+    }
 
     public static void main(String[] args) {
 //        Calendar calendar = Calendar.getInstance();
@@ -222,5 +319,8 @@ public class QzOrderService {
         Date date = new Date(currentTime);
         DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String nowTime="";nowTime= df.format(date);
         System.out.println(nowTime);
+
+        Date successTime = DateUtils.strToDate("2018-11-02 14:57:12");
+        System.out.println(successTime);
     }
 }

+ 39 - 2
kmall-schedule/src/main/resources/mybatis/mapper/QzOrderMapper.xml

@@ -30,10 +30,9 @@
         AND a.add_time <![CDATA[ < ]]> DATE_ADD(now(),INTERVAL -10 MINUTE)
         AND a.order_status = 0 and a.order_type = 1
     </select>
-
     <update id="unpayPastUpdate">
         UPDATE mall_order a
-        SET order_status=101,shipping_status=0
+        SET order_status=101,shipping_status=0,pay_status=0
         WHERE 1 = 1
         AND a.add_time <![CDATA[ <  ]]> DATE_ADD(now(),INTERVAL -10 MINUTE)
         AND a.order_status = 0  and a.order_type = 1
@@ -47,4 +46,42 @@
         where a.id = #{id}
     </update>
 
+
+    <select id="queryRefundOrderList" resultType="map">
+        select a.pay_transaction_id,a.merch_order_sn,a.order_sn,a.order_status,a.pay_status,f.out_refund_no,f.refund_id,f.order_id,f.id 'orderRefundId'
+        from mall_order a
+        inner join mall_order_refund f on a.id = f.order_id	where (f.out_refund_no is null or f.refund_id is null) and a.order_status != '101' and f.refund_status != 3
+    </select>
+
+    <select id="queryPayingOrderList" resultType="map">
+		select a.pay_transaction_id,a.order_sn,a.order_status,a.pay_status,a.id 'order_id',a.merch_order_sn
+        from mall_order a where (a.order_status = '201' and a.pay_status not in (0,3,4)) and (a.pay_transaction_id = '' or a.pay_transaction_id is null or a.pay_time is null or a.pay_time = '')
+    </select>
+
+
+    <update id="updateOrderInfo" parameterType="map">
+        UPDATE mall_order a
+        <set>
+            <if test="orderStatus != null">a.order_status = #{orderStatus},</if>
+            <if test="payStatus != null">a.pay_status = #{payStatus},</if>
+            <if test="payTransactionId != null">a.pay_transaction_id = #{payTransactionId},</if>
+            <if test="payTime != null">a.pay_time = #{payTime},</if>
+        </set>
+        WHERE 1 = 1
+        AND a.id = #{orderId}
+    </update>
+
+    <update id="updateOrderRefund" parameterType="map">
+        UPDATE mall_order_refund a
+        <set>
+            <if test="outRefundNo != null">a.out_refund_no = #{outRefundNo},</if>
+            <if test="refundId != null">a.refund_id = #{refundId},</if>
+            <if test="refundMoney != null">a.refund_money = #{refundMoney},</if>
+            <if test="refundStatus != null">a.refund_status = #{refundStatus},</if>
+            <if test="refundRecvAccout != null">a.refund_recv_accout = #{refundRecvAccout},</if>
+            <if test="refundTime != null">a.refund_time = #{refundTime},</if>
+        </set>
+        WHERE 1 = 1
+        AND a.id = #{orderRefundId}
+    </update>
 </mapper>

+ 8 - 0
wx-mall/pages/goods/goods.js

@@ -267,10 +267,18 @@ Page({
             that.setData({
               'collectBackImage': that.data.hasCollectImage
             });
+            wx.showToast({
+              title: "收藏成功",
+              mask: true
+            });
           } else {
             that.setData({
               'collectBackImage': that.data.noCollectImage
             });
+            wx.showToast({
+              title: "收藏取消",
+              mask: true
+            });
           }
 
         } else {

+ 1 - 1
wx-mall/pages/payResult/payResult.wxss

@@ -132,7 +132,7 @@ page {
   height: 33rpx;
   line-height: 33rpx;
   color: #333;
-  font-size: 30rpx;
+  font-size: 24rpx;
 }
 
 .order-goods .item .t .number {

+ 0 - 1
wx-mall/pages/search/search.wxss

@@ -324,7 +324,6 @@ page {
   color: #303030;
   display: inline;
   text-align: center;
-  display: inline;
 }
 
 .search-result-empty {

+ 5 - 1
wx-mall/pages/ucenter/footprint/footprint.wxml

@@ -1,6 +1,6 @@
 <view class="container">
   <view class="footprint">
-    <view class="day-item" wx:for="{{footprintList}}" wx:key="{{index}}">
+    <view class="day-item" wx:for="{{footprintList}}" wx:if="{{footprintList.length>0}}" wx:key="{{index}}">
       <view class="day-hd">{{item[0].add_time}}</view>
       <view class="day-list">
         <view class="item" data-footprint="{{iitem}}" bindtouchstart="touchStart" bindtouchend="touchEnd" bindtap="deleteItem" wx:for="{{item}}"  wx:for-item="iitem" wx:key="{{iitem.id}}">
@@ -13,5 +13,9 @@
         </view>
       </view>
     </view>
+    <view class="search-result-empty" wx:if="{{footprintList.length==0}}">
+      <image class="icon" src="/static/images/no-search.png"></image>
+      <text class="text">该门店暂无足迹数据</text>
+    </view>
   </view>
 </view>

+ 22 - 0
wx-mall/pages/ucenter/footprint/footprint.wxss

@@ -89,3 +89,25 @@ page{
   color: #333;
   line-height: 40rpx;
 }
+
+.search-result-empty {
+  width: 100%;
+  height: 100%;
+  padding-top: 300rpx;
+}
+
+.search-result-empty .icon {
+  margin: 0 auto;
+  display: block;
+  width: 240rpx;
+  height: 240rpx;
+}
+
+.search-result-empty .text {
+  display: block;
+  width: 100%;
+  height: 40rpx;
+  font-size: 28rpx;
+  text-align: center;
+  color: #999;
+}

+ 1 - 1
wx-mall/pages/ucenter/index/index.wxml

@@ -37,7 +37,7 @@
     </view>
     <view class="item">
       <navigator url="/pages/ucenter/order/order?tabIndex=4" class="a">
-         <view class="uneval-num" wx:if="{{unEvaNum>0}}">{{unEvaNum}}</view>
+         <view class="uneval-num" wx:if="{{unEvalNum>0}}">{{unEvalNum}}</view>
         <text class="icon evaluate"></text>
         <text class="txt">待评价</text>
       </navigator>

+ 3 - 1
wx-mall/pages/ucenter/order/order.js

@@ -177,6 +177,7 @@ Page({
     onShow: function () {
         // 页面显示
         let that = this;
+        that.setData({ orderList: [] });//初始化列表
         that.switchOrderType(that.data.tabIndex);
         that.setData({
           currentStoreId: wx.getStorageSync('storeId')
@@ -201,8 +202,9 @@ Page({
       let shippingNo = event.target.dataset.shippingNo;
       let shippingCode = event.target.dataset.shippingCode;
       let orderId = event.target.dataset.orderId;
+      let goodsType = event.target.dataset.goodsType;
       wx.navigateTo({
-        url: '/pages/ucenter/wuliu/wuliu?id=' + shippingNo + '&code=' + shippingCode + '&orderId=' + orderId,
+        url: '/pages/ucenter/wuliu/wuliu?id=' + shippingNo + '&code=' + shippingCode + '&orderId=' + orderId + '&goodsType=' + goodsType,
       });
   }
 })

+ 1 - 1
wx-mall/pages/ucenter/order/order.wxml

@@ -73,7 +73,7 @@
       <view class="list-cell">
         <view class="btn-box">
           <button wx:if="{{tabIndex != 5}}" class="{{item.orderBizType==00 && currentStoreId == item.store_id?'btn':'btn-disabel'}}" data-order-id="{{item.id}}" data-goods-type="{{item.orderBizType}}" data-is-Store='{{currentStoreId == item.store_id}}' catchtap="{{item.orderBizType==00 && currentStoreId == item.store_id ?'againBuy':'againBuyDisabel'}}">再来一单</button>
-          <button class="btn" wx:if="{{item.order_status==300 && tabIndex != 5}}" data-shipping-No="{{item.shipping_no}}" data-shipping-Code="{{item.shipping_code}}" data-order-id="{{item.id}}"  catchtap="getWuliuList">查看物流</button>
+          <button class="btn" wx:if="{{item.order_status==300 && tabIndex != 5}}" data-shipping-No="{{item.shipping_no}}" data-shipping-Code="{{item.shipping_code}}" data-order-id="{{item.id}}" data-goods-type="{{item.orderBizType}}" catchtap="getWuliuList">查看物流</button>
           <button class="btn" data-actual-price="{{item.actual_price}}" data-order-id="{{item.id}}" data-order-index="{{index}}" catchtap="payOrder" wx:if="{{item.handleOption.pay && item.dateformat && tabIndex != 5}}">去付款 {{item.dateformat.min}}{{item.dateformat?':':''}}{{item.dateformat.sec}}</button>
           <button wx:if="{{item.order_status==201 && tabIndex != 5 && !item.isRefundStatus}}" class="btn" data-order-Id="{{item.id}}" data-actual-Price="{{item.actual_price}}" data-is-Store='{{currentStoreId == item.store_id}}' catchtap="applyRefund">申请维权</button>
         </view>

+ 3 - 1
wx-mall/pages/ucenter/orderDetail/orderDetail.wxml

@@ -7,6 +7,7 @@
         {{orderInfo.order_status==101?"订单已取消":""}}
         {{orderInfo.order_status==201?"订单已付款":""}}
         {{orderInfo.order_status==300?"订单已发货":""}}
+        {{orderInfo.order_status==301?"确认收货":""}}
         {{orderInfo.order_status==401 || orderInfo.order_status==402?"订单已退款":""}}
         </view>
       </view>
@@ -18,6 +19,7 @@
             {{orderInfo.order_status==101?"您的订单已取消":""}}
             {{orderInfo.order_status==201?"您的订单已付款":""}}
             {{orderInfo.order_status==300?"您的订单已发货":""}}   
+            {{orderInfo.order_status==301?"用户已确认收货":""}}
             {{orderInfo.order_status==401 || orderInfo.order_status==402?"您的订单已退款":""}}
           </view>
           <view class="list-label week3" wx:if="{{orderInfo.order_status==201 && refundStatus == 3}}">
@@ -35,7 +37,7 @@
         </view>
       </view>
     </view>
-    <navigator open-type='navigate' wx:if="{{orderInfo.order_status==300}}" url="/pages/ucenter/wuliu/wuliu?id={{orderInfo.shipping_no}}&code={{orderInfo.shipping_code}}&orderId={{orderInfo.id}}">
+    <navigator open-type='navigate' wx:if="{{orderInfo.order_status==300 || orderInfo.order_status==301}}" url="/pages/ucenter/wuliu/wuliu?id={{orderInfo.shipping_no}}&code={{orderInfo.shipping_code}}&orderId={{orderInfo.id}}&goodsType={{orderInfo.orderBizType}}">
       <view class="list-cell">
         <view class="list-cell-bd">
           <view class="list-label week3">物流信息:  {{wuliu.AcceptTime}}</view>

+ 5 - 3
wx-mall/pages/ucenter/wuliu/wuliu.js

@@ -6,16 +6,18 @@ Page({
         shippingNo: '',
         shippingCode: '',
         orderId: '',
-        logistics: []
+        logistics: [],
+        goodsType:''
     },
     onLoad: function (options) {
         // 页面初始化 options为页面跳转所带来的参数
         console.log(options.id);
-        console.log(options.code);
+        console.log(options.goodsType);
         this.setData({
             shippingNo: options.id,
             shippingCode: options.code,
-            orderId: options.orderId
+            orderId: options.orderId,
+            goodsType: options.goodsType
         });
     },
     onShow: function () {

+ 3 - 3
wx-mall/pages/ucenter/wuliu/wuliu.wxml

@@ -1,12 +1,12 @@
 <view class="container">
-    <view class="top-sec">
+    <view class="top-sec" wx:if="{{goodsType!=10}}">
         <view class="a-row">
             <view class="label">物流单号</view>
-            <view class="text">{{logistics.LogisticCode}}</view>
+            <view class="text">{{logistics.LogisticCode==null?"":logistics.LogisticCode}}</view>
         </view>
         <view class="a-row">
             <view class="label">物流公司</view>
-            <view class="text">{{logistics.ShipperCode}}</view>
+            <view class="text">{{logistics.ShipperCode==null?"":logistics.ShipperCode}}</view>
         </view>
     </view>
     <view class="sec-wrap">