Browse Source

Merge remote-tracking branch 'upsteam/master'

dq 6 years ago
parent
commit
a9a98c44db

+ 2 - 2
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -143,7 +143,7 @@ public class GoodsServiceImpl implements GoodsService {
         if (galleryEntityList == null || galleryEntityList.size() <= 0) {
             throw new RRException("至少添加一张商品轮播图!");
         }
-        GoodsEntity prodbarGoods = goodsDao.queryObjectByProdBarcode(goods.getProdBarcode(),"",null);
+        GoodsEntity prodbarGoods = goodsDao.queryObjectByProdBarcode(goods.getProdBarcode(),goods.getMerchSn(),null);
         if(prodbarGoods != null){
             throw new RRException("不能有重复的产品条码信息!");
         }
@@ -285,7 +285,7 @@ public class GoodsServiceImpl implements GoodsService {
         if (galleryEntityList == null || galleryEntityList.size() <= 0) {
             throw new RRException("至少保留一张商品轮播图!");
         }
-        GoodsEntity prodbarGoods = goodsDao.queryObjectByProdBarcode(goods.getProdBarcode(),"",goods.getId());
+        GoodsEntity prodbarGoods = goodsDao.queryObjectByProdBarcode(goods.getProdBarcode(),goods.getMerchSn(),goods.getId());
         if(prodbarGoods != null){
             throw new RRException("不能有重复的产品条码信息!");
         }

+ 1 - 2
kmall-admin/src/main/webapp/WEB-INF/page/shop/storeProductStock.html

@@ -101,8 +101,7 @@
                 <i-select v-model="productStoreRela.storeId" placeholder="门店" filterable @on-change="getGoods"
                           label-in-value>
                     <i-option v-for="store in stores" :value="store.id"
-                              :key="store.id">
-                        {{store.storeName}}
+                              :key="store.id">{{store.storeName}}
                     </i-option>
                 </i-select>
             </Form-item>

+ 2 - 1
kmall-api/src/main/java/com/kmall/api/api/ApiGoodsController.java

@@ -315,6 +315,7 @@ public class ApiGoodsController extends ApiBaseAction {
         params.put("sidx", order);
         params.put("goodsBizType", goodsBizType);
         params.put("store_id", getStoreId());
+        params.put("notGoodsBizType", true);
         //
         if (null != sort && sort.equals("price")) {
             params.put("sidx", "a.retail_price");
@@ -557,7 +558,7 @@ public class ApiGoodsController extends ApiBaseAction {
         Map<String, Object> resultObj = new HashMap();
         Map param = new HashMap();
         param.put("storeId", getStoreId());
-        param.put("searchGoodsCount", '1');
+        param.put("notGoodsBizType", true);
         param.put("is_delete", 0);
         param.put("is_on_sale", 1);
         Integer goodsCount = goodsService.queryTotal(param);

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

@@ -59,7 +59,7 @@ public class ApiPayController extends ApiBaseAction {
     }
 
     /**
-     * 获取支付的请求参数
+     * 获取支付的请求参数,用户生成订单, 商户订单号、预支付编号,且支付状态、订单状态均为支付中;
      */
     @GetMapping("pay_prepay")
     public Object payPrepay(@LoginUser UserVo loginUser, Long[] orderIds,String isMergePay) {

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

@@ -9,6 +9,7 @@ import com.kmall.common.service.FormIdsService;
 import com.kmall.common.utils.Constant;
 import com.kmall.common.utils.DateUtils;
 import com.kmall.common.utils.MapUtils;
+import com.kmall.common.utils.StringUtils;
 import com.kmall.common.utils.wechat.WechatRefundApiResult;
 import com.kmall.common.utils.wechat.WechatUtil;
 import org.apache.log4j.Logger;
@@ -126,7 +127,7 @@ public class ApiPayService {
         if(orderVoList != null && orderVoList.size()>0) {
             for(OrderVo orderInfo:orderVoList) {
                 //校验返回的订单金额是否与商户侧的订单金额一致
-                String actualPrice = String.valueOf(orderInfo.getActual_price().multiply(Constant.ONE_HUNDRED));
+                String actualPrice = String.valueOf(Math.round(orderInfo.getActual_price().multiply(Constant.ONE_HUNDRED).doubleValue()));
                 if(!total_fee.equalsIgnoreCase(actualPrice)){//不一致
                     MallOrderExceptionRecord mallOrderExceptionRecord = new MallOrderExceptionRecord();
                     mallOrderExceptionRecord.setUserId(Integer.parseInt(orderInfo.getUser_id()+""));
@@ -136,8 +137,10 @@ public class ApiPayService {
                     mallOrderExceptionRecord.setCreateTime(new Date());
                     mallOrderExceptionRecordMapper.save(mallOrderExceptionRecord);//支付订单异常记录
                 }
-                if(Dict.orderStatus.item_100.getItem().equalsIgnoreCase(orderInfo.getOrder_status()+"")
-                        && Dict.payStatus.item_1.getItem().equalsIgnoreCase(orderInfo.getPay_status()+"")){
+                if((Dict.orderStatus.item_100.getItem().equalsIgnoreCase(orderInfo.getOrder_status()+"")
+                        && Dict.payStatus.item_1.getItem().equalsIgnoreCase(orderInfo.getPay_status()+""))
+                        || (Dict.orderStatus.item_0.getItem().equalsIgnoreCase(orderInfo.getOrder_status()+"")
+                        && Dict.payStatus.item_0.getItem().equalsIgnoreCase(orderInfo.getPay_status()+""))){
 
                     OrderProcessRecordEntity processRecordEntity = orderProcessRecordMapper.queryObjectByOrderSn(orderInfo.getOrder_sn());
                     if(processRecordEntity != null){
@@ -153,7 +156,8 @@ public class ApiPayService {
                     orderInfo.setPayTransactionId(transaction_id);
                     orderInfo.setPay_status(Integer.parseInt(Dict.payStatus.item_2.getItem()));
                     orderInfo.setPay_time(timeEnd);//微信下单完成时间
-                    if (orderInfo.getOrder_status() == Integer.parseInt(Dict.orderStatus.item_100.getItem())) {
+                    if (orderInfo.getOrder_status() == Integer.parseInt(Dict.orderStatus.item_100.getItem()) ||
+                            orderInfo.getOrder_status() == Integer.parseInt(Dict.orderStatus.item_0.getItem())) {
                         orderInfo.setOrder_status(Integer.parseInt(Dict.orderStatus.item_201.getItem()));
                     }
                     orderService.update(orderInfo);

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

@@ -355,8 +355,8 @@
         <if test="goodsBizType != null and goodsBizType != ''">
             and a.goods_biz_type = #{goodsBizType}
         </if>
-        <if test="searchGoodsCount == '1'">
-            and a.goods_biz_type != '02' and a.goods_biz_type != '10'
+        <if test="notGoodsBizType == true">
+            and a.goods_biz_type in ('00','11')
         </if>
     </select>
 </mapper>

+ 25 - 0
kmall-common/src/main/java/com/kmall/common/utils/wechat/WechatUtil.java

@@ -525,6 +525,31 @@ public class WechatUtil {
                 (WechatRefundApiResult) XmlUtil.xmlStrToBean(reponseXml, WechatRefundApiResult.class);
         return result;
     }
+    /**
+     * 方法描述:微信查询订单逻辑
+     * 创建时间:2018年11月02日  上午11:04:25
+     * 作者: huangyaqin
+     *
+     * @param
+     * @return
+     */
+    public static WechatRefundApiResult wxOrderQueryByTransactionId(String payTransactionId) {
+        //初始化请求微信服务器的配置信息包括appid密钥等
+        //构建请求参数
+        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("transaction_id", payTransactionId);//微信的订单号
+        params.put("nonce_str", CharUtil.getRandomString(16));//随机字符串,不长于32位。推荐随机数生成算法
+        //签名前必须要参数全部写在前面
+        params.put("sign", arraySign(params, CommonWxPayPropertiesBuilder.instance().getPaySignKey()));//签名
+        String mapToXml = MapUtils.convertMap2Xml(params);
+        //请求微信
+        String reponseXml = sendQuerySSLPostToWx(mapToXml);
+        WechatRefundApiResult result =
+                (WechatRefundApiResult) XmlUtil.xmlStrToBean(reponseXml, WechatRefundApiResult.class);
+        return result;
+    }
 
     /**
      * 绑定提交付款码支付请求参数

+ 22 - 0
kmall-common/src/main/java/com/kmall/common/utils/wechat/wxglobal/WechatGlobalUtil.java

@@ -159,6 +159,28 @@ public class WechatGlobalUtil {
         return result;
     }
     /**
+     * 微信境外根据支付单查询订单
+     * @param
+     * @return
+     */
+    public static WechatGlobalQueryApiResult wxOrderQueryByTransactionId(String payTransactionId) {
+        //初始化请求微信服务器的配置信息包括appid密钥等
+        //构建请求参数
+        Map<Object, Object> params = new HashMap<Object, Object>();
+        params.put("appid", CommonWxGlobalPayPropertiesBuilder.instance().getAppId());//微信分配的公众账号ID(企业号corpid即为此appId)
+        params.put("mch_id", CommonWxGlobalPayPropertiesBuilder.instance().getMchId());//微信支付分配的商户号
+        params.put("transaction_id", payTransactionId);//微信的订单号
+        params.put("nonce_str", CharUtil.getRandomString(16));//随机字符串,不长于32位。推荐随机数生成算法
+        //签名前必须要参数全部写在前面
+        params.put("sign", WechatUtil.arraySign(params, CommonWxGlobalPayPropertiesBuilder.instance().getPaySignKey()));//签名
+        String mapToXml = MapUtils.convertMap2Xml(params);
+        //请求微信
+        String reponseXml = sendQuerySSLPostToWx(mapToXml, WechatConfig.getSslcsf());
+        WechatGlobalQueryApiResult result =
+                (WechatGlobalQueryApiResult) XmlUtil.xmlStrToBean(reponseXml, WechatGlobalQueryApiResult.class);
+        return result;
+    }
+    /**
      * 请求查询订单微信
      **/
     private static String sendQuerySSLPostToWx(String mapToXml, SSLConnectionSocketFactory sslcsf) {

+ 223 - 109
kmall-schedule/src/main/java/com/kmall/schedule/service/QzOrderService.java

@@ -254,6 +254,7 @@ public class QzOrderService {
         String out_trade_no = MapUtils.getString("merch_order_sn", map);
         String order_id = MapUtils.getString("order_id", map);
         String order_sn_wx = MapUtils.getString("order_sn_wx", map);
+        String out_refund_no = MapUtils.getString("out_refund_no", map);
         Integer is_onffline_order = MapUtils.getInteger("is_onffline_order", map);
         if (is_onffline_order == 1) {
             out_trade_no = order_sn_wx;
@@ -262,48 +263,50 @@ public class QzOrderService {
         if (result.getReturn_code().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode())) {
             if (result.getResult_code().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode())) {
                 Map refundRaram = new HashMap();
+                Map orderRaram = new HashMap();
                 int msgCount = Integer.parseInt(result.getRefund_count());
                 for (int i = 0; i < msgCount; i++) {
                     WechatRefundQueryResult querySuccessResponseDto =
                             ReaderXmlForDOM4J.parse(result.getXmlStr(), i);
-                    result.setRefund_success_time(querySuccessResponseDto.getRefund_success_time());
-                    result.setOut_refund_no(querySuccessResponseDto.getOut_refund_no());
-                    result.setRefund_account(querySuccessResponseDto.getRefund_account());
-                    result.setRefund_channel(querySuccessResponseDto.getRefund_channel());
-                    result.setRefund_fee(querySuccessResponseDto.getRefund_fee());
-                    result.setRefund_id(querySuccessResponseDto.getRefund_id());
-                    result.setRefund_recv_accout(querySuccessResponseDto.getRefund_recv_accout());
-                    result.setRefund_status(querySuccessResponseDto.getRefund_status());
-                }
-                Date successTime = DateUtils.strToDate(result.getRefund_success_time());
-                refundRaram.put("refundTime", successTime);
-                refundRaram.put("outRefundNo", result.getOut_refund_no());
-                refundRaram.put("refundId", result.getRefund_id());
-                refundRaram.put("refundMoney",
-                        BigDecimal.valueOf(Long.valueOf(result.getRefund_fee()))
-                                .divide(Constant.ONE_HUNDRED));
-                Map orderRaram = new HashMap();
-                if (result.getRefund_status().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode())) {
-                    refundRaram.put("refundStatus", Dict.RefundStatus.item_2.getItem());
-                    refundRaram.put("wechat_refund_status_des", "退款成功");
-                    orderRaram.put("payStatus", Dict.payStatus.item_4.getItem());
-                } else if (result.getRefund_status().equalsIgnoreCase("REFUNDCLOSE")) {
-                    refundRaram.put("refundStatus", Dict.RefundStatus.item_4.getItem());
-                    refundRaram.put("wechat_refund_status_des", "退款关闭");
-                    orderRaram.put("payStatus", Dict.payStatus.item_5.getItem());
-                } else if (result.getRefund_status().equalsIgnoreCase("CHANGE")) {
-                    refundRaram.put("refundStatus", Dict.RefundStatus.item_4.getItem());
-                    refundRaram.put("wechat_refund_status_des", "退款异常");
-                    orderRaram.put("payStatus", Dict.payStatus.item_6.getItem());
-                } else if (result.getRefund_status().equalsIgnoreCase("PROCESSING")) {
-                    refundRaram.put("refundStatus", Dict.RefundStatus.item_5.getItem());
-                    refundRaram.put("wechat_refund_status_des", "退款处理中");
-                    orderRaram.put("payStatus", Dict.payStatus.item_3.getItem());
+                    if(out_refund_no.equalsIgnoreCase(querySuccessResponseDto.getOut_refund_no())) {
+                        result.setRefund_success_time(querySuccessResponseDto.getRefund_success_time());
+                        result.setOut_refund_no(querySuccessResponseDto.getOut_refund_no());
+                        result.setRefund_account(querySuccessResponseDto.getRefund_account());
+                        result.setRefund_channel(querySuccessResponseDto.getRefund_channel());
+                        result.setRefund_fee(querySuccessResponseDto.getRefund_fee());
+                        result.setRefund_id(querySuccessResponseDto.getRefund_id());
+                        result.setRefund_recv_accout(querySuccessResponseDto.getRefund_recv_accout());
+                        result.setRefund_status(querySuccessResponseDto.getRefund_status());
+
+                        Date successTime = DateUtils.strToDate(result.getRefund_success_time());
+                        refundRaram.put("refundTime", successTime);
+                        refundRaram.put("outRefundNo", result.getOut_refund_no());
+                        refundRaram.put("refundId", result.getRefund_id());
+                        refundRaram.put("refundMoney",
+                                BigDecimal.valueOf(Long.valueOf(result.getRefund_fee()))
+                                        .divide(Constant.ONE_HUNDRED));
+                        if (result.getRefund_status().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode())) {
+                            refundRaram.put("refundStatus", Dict.RefundStatus.item_2.getItem());
+                            refundRaram.put("wechat_refund_status_des", "退款成功");
+                            orderRaram.put("payStatus", Dict.payStatus.item_4.getItem());
+                        } else if (result.getRefund_status().equalsIgnoreCase("REFUNDCLOSE")) {
+                            refundRaram.put("refundStatus", Dict.RefundStatus.item_4.getItem());
+                            refundRaram.put("wechat_refund_status_des", "退款关闭");
+                            orderRaram.put("payStatus", Dict.payStatus.item_5.getItem());
+                        } else if (result.getRefund_status().equalsIgnoreCase("CHANGE")) {
+                            refundRaram.put("refundStatus", Dict.RefundStatus.item_4.getItem());
+                            refundRaram.put("wechat_refund_status_des", "退款异常");
+                            orderRaram.put("payStatus", Dict.payStatus.item_6.getItem());
+                        } else if (result.getRefund_status().equalsIgnoreCase("PROCESSING")) {
+                            refundRaram.put("refundStatus", Dict.RefundStatus.item_5.getItem());
+                            refundRaram.put("wechat_refund_status_des", "退款处理中");
+                            orderRaram.put("payStatus", Dict.payStatus.item_3.getItem());
+                        }
+                        refundRaram.put("refundRecvAccout", result.getRefund_recv_accout());
+                        refundRaram.put("orderRefundId", result.getOut_refund_no());
+                        qzOrderMapper.updateOrderRefund(refundRaram);//更新订单退款信息
+                    }
                 }
-                refundRaram.put("refundRecvAccout", result.getRefund_recv_accout());
-                refundRaram.put("orderRefundId", result.getOut_refund_no());
-                qzOrderMapper.updateOrderRefund(refundRaram);//更新订单退款信息
-
                 orderRaram.put("orderStatus", Dict.orderStatus.item_401.getItem());
                 orderRaram.put("orderId", order_id);
                 orderRaram.put("payTransactionId", result.getTransaction_id());
@@ -325,65 +328,64 @@ public class QzOrderService {
         logger.info(">>>>>>>>>>>>>>>>>>>>wxGlobalRefundQuery 微信国际退款查询接口调用");
         String out_trade_no = MapUtils.getString("merch_order_sn", map);
         String order_id = MapUtils.getString("order_id", map);
-        Map orderRaram = new HashMap();
+        String out_refund_no = MapUtils.getString("out_refund_no", map);
         WechatGlobalRefundQueryResult result = WechatGlobalUtil.wxRefundquery(out_trade_no);
         if (result.getReturn_code().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode())) {
             if (result.getResult_code().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode())) {
+                Map orderRaram = new HashMap();
                 Map refundRaram = new HashMap();
                 int msgCount = Integer.parseInt(result.getRefund_count());
                 for (int i = 0; i < msgCount; i++) {
                     //微信部分退款时返回的多条退款信息数据解析
                     WechatRefundQueryResult querySuccessResponseDto = ReaderXmlForDOM4J.parse(result.getXmlStr(), i);
-                    if (result.getReturn_code().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode())) {
-                        if (result.getResult_code().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode())) {
-                            //微信部分退款时返回的多条退款信息数据
-                            result.setRefund_fee(querySuccessResponseDto.getRefund_fee());
-                            result.setOut_refund_no(querySuccessResponseDto.getOut_refund_no());
-                            result.setRefund_id(querySuccessResponseDto.getRefund_id());
-                            result.setRefund_channel(querySuccessResponseDto.getRefund_channel());
-                            result.setRefund_status(querySuccessResponseDto.getRefund_status());
-                            result.setRefund_account(querySuccessResponseDto.getRefund_account());
-                            result.setRefund_recv_accout(querySuccessResponseDto.getRefund_recv_accout());
-                            result.setRefund_success_time(querySuccessResponseDto.getRefund_success_time());
-
-                            refundRaram.put("refundTime", DateUtils.strToDate(result.getRefund_success_time()));
-                            refundRaram.put("outRefundNo", result.getOut_refund_no());
-                            refundRaram.put("refundId", result.getRefund_id());
-                            refundRaram.put("refundMoney",
-                                    BigDecimal.valueOf(Long.valueOf(result.getRefund_fee()))
-                                            .divide(Constant.ONE_HUNDRED));//退款金额
-                            if(org.apache.commons.lang3.StringUtils.isNotEmpty(result.getTotal_fee())) {
-                                refundRaram.put("totalFee", BigDecimal.valueOf(Long.valueOf(result.getTotal_fee()))
-                                        .divide(Constant.ONE_HUNDRED));//标价金额
-                            }
-                            refundRaram.put("feeType", result.getFee_type());//标价币种
-                            if(org.apache.commons.lang3.StringUtils.isNotEmpty(result.getCash_fee())) {
-                                refundRaram.put("cashFee", BigDecimal.valueOf(Long.valueOf(result.getCash_fee()))
-                                        .divide(Constant.ONE_HUNDRED));//用户支付金额
-                            }
-                            refundRaram.put("cashFeeType", result.getCash_fee_type());//用户支付金额币种
-                            refundRaram.put("rate", result.getRate());//汇率
-                            if (result.getRefund_status().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode())) {
-                                refundRaram.put("refundStatus", Dict.RefundStatus.item_2.getItem());
-                                refundRaram.put("wechat_refund_status_des", "退款成功");
-                                orderRaram.put("payStatus", Dict.payStatus.item_4.getItem());
-                            } else if (result.getRefund_status().equalsIgnoreCase("PROCESSING")) {
-                                refundRaram.put("refundStatus", Dict.RefundStatus.item_5.getItem());
-                                refundRaram.put("wechat_refund_status_des", "退款处理中");
-                                orderRaram.put("payStatus", Dict.payStatus.item_3.getItem());
-                            } else if (result.getRefund_status().equalsIgnoreCase("REFUNDCLOSE")) {
-                                refundRaram.put("refundStatus", Dict.RefundStatus.item_4.getItem());
-                                refundRaram.put("wechat_refund_status_des", "退款关闭");
-                                orderRaram.put("payStatus", Dict.payStatus.item_5.getItem());
-                            } else if (result.getRefund_status().equalsIgnoreCase("CHANGE")) {
-                                refundRaram.put("refundStatus", Dict.RefundStatus.item_4.getItem());
-                                refundRaram.put("wechat_refund_status_des", "退款异常");
-                                orderRaram.put("payStatus", Dict.payStatus.item_6.getItem());
-                            }
-                            refundRaram.put("refundRecvAccout", result.getRefund_recv_accout());
-                            refundRaram.put("orderRefundId", result.getOut_refund_no());
-                            qzOrderMapper.updateOrderRefund(refundRaram);//更新订单退款信息
+                    if(out_refund_no.equalsIgnoreCase(querySuccessResponseDto.getOut_refund_no())) {
+                        //微信部分退款时返回的多条退款信息数据
+                        result.setRefund_fee(querySuccessResponseDto.getRefund_fee());
+                        result.setOut_refund_no(querySuccessResponseDto.getOut_refund_no());
+                        result.setRefund_id(querySuccessResponseDto.getRefund_id());
+                        result.setRefund_channel(querySuccessResponseDto.getRefund_channel());
+                        result.setRefund_status(querySuccessResponseDto.getRefund_status());
+                        result.setRefund_account(querySuccessResponseDto.getRefund_account());
+                        result.setRefund_recv_accout(querySuccessResponseDto.getRefund_recv_accout());
+                        result.setRefund_success_time(querySuccessResponseDto.getRefund_success_time());
+
+                        refundRaram.put("refundTime", DateUtils.strToDate(result.getRefund_success_time()));
+                        refundRaram.put("outRefundNo", result.getOut_refund_no());
+                        refundRaram.put("refundId", result.getRefund_id());
+                        refundRaram.put("refundMoney",
+                                BigDecimal.valueOf(Long.valueOf(result.getRefund_fee()))
+                                        .divide(Constant.ONE_HUNDRED));//退款金额
+                        if (org.apache.commons.lang3.StringUtils.isNotEmpty(result.getTotal_fee())) {
+                            refundRaram.put("totalFee", BigDecimal.valueOf(Long.valueOf(result.getTotal_fee()))
+                                    .divide(Constant.ONE_HUNDRED));//标价金额
+                        }
+                        refundRaram.put("feeType", result.getFee_type());//标价币种
+                        if (org.apache.commons.lang3.StringUtils.isNotEmpty(result.getCash_fee())) {
+                            refundRaram.put("cashFee", BigDecimal.valueOf(Long.valueOf(result.getCash_fee()))
+                                    .divide(Constant.ONE_HUNDRED));//用户支付金额
+                        }
+                        refundRaram.put("cashFeeType", result.getCash_fee_type());//用户支付金额币种
+                        refundRaram.put("rate", result.getRate());//汇率
+                        if (result.getRefund_status().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode())) {
+                            refundRaram.put("refundStatus", Dict.RefundStatus.item_2.getItem());
+                            refundRaram.put("wechat_refund_status_des", "退款成功");
+                            orderRaram.put("payStatus", Dict.payStatus.item_4.getItem());
+                        } else if (result.getRefund_status().equalsIgnoreCase("PROCESSING")) {
+                            refundRaram.put("refundStatus", Dict.RefundStatus.item_5.getItem());
+                            refundRaram.put("wechat_refund_status_des", "退款处理中");
+                            orderRaram.put("payStatus", Dict.payStatus.item_3.getItem());
+                        } else if (result.getRefund_status().equalsIgnoreCase("REFUNDCLOSE")) {
+                            refundRaram.put("refundStatus", Dict.RefundStatus.item_4.getItem());
+                            refundRaram.put("wechat_refund_status_des", "退款关闭");
+                            orderRaram.put("payStatus", Dict.payStatus.item_5.getItem());
+                        } else if (result.getRefund_status().equalsIgnoreCase("CHANGE")) {
+                            refundRaram.put("refundStatus", Dict.RefundStatus.item_4.getItem());
+                            refundRaram.put("wechat_refund_status_des", "退款异常");
+                            orderRaram.put("payStatus", Dict.payStatus.item_6.getItem());
                         }
+                        refundRaram.put("refundRecvAccout", result.getRefund_recv_accout());
+                        refundRaram.put("orderRefundId", result.getOut_refund_no());
+                        qzOrderMapper.updateOrderRefund(refundRaram);//更新订单退款信息
                     }
                 }
                 orderRaram.put("orderStatus", Dict.orderStatus.item_401.getItem());
@@ -401,12 +403,12 @@ public class QzOrderService {
 
 
     /**
-     * 查询支付中的订单以及小程序更新支付信息异常订单,查询微信订单更新订单状态
+     * 查询小程序支付状态“支付中或成功”的订单信息,以及小程序更新支付信息缺失的订单,获取商户订单号查询微信支付信息更新小程序订单支付数据
      */
     @Transactional
     public void orderQueryUpdate() {
         logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdate is start ");
-        logger.info(">>>>>>>>>>>>>>>>>>>>查询支付中的订单以及小程序更新支付信息异常订单,查询微信订单信息更新订单状态 ");
+        logger.info(">>>>>>>>>>>>>>>>>>>>查询小程序支付状态“支付中或成功”的订单信息,以及小程序更新支付信息缺失的订单,获取商户订单号查询微信支付信息更新小程序订单支付数据");
         // 获取支付中的订单以及小程序更新支付信息异常订单
         List<Map> orderList = qzOrderMapper.queryPayingOrderList();
         if (null != orderList && orderList.size() > 0) {
@@ -464,8 +466,8 @@ public class QzOrderService {
                         param.put("id", storeRelaId);
                         param.put("stock_num", stock_num + number);
                         qzOrderMapper.updateStockNum(param);//库存还原
-                        orderRaram.put("payStatus", Dict.payStatus.item_0.getItem());//支付状态未支付
                         orderRaram.put("orderStatus", Dict.orderStatus.item_101.getItem());//订单状态已取消
+                        orderRaram.put("payStatus", Dict.payStatus.item_0.getItem());//支付状态未支付
                     } else {
                         orderRaram.put("payStatus", Dict.payStatus.item_0.getItem());//支付状态未支付
                         orderRaram.put("orderStatus", Dict.orderStatus.item_0.getItem());//订单状态未支付
@@ -482,7 +484,7 @@ public class QzOrderService {
                     param.put("id", storeRelaId);
                     param.put("stock_num", stock_num + number);
                     qzOrderMapper.updateStockNum(param);//库存还原
-                    logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderQuery 微信查询接口返回信息:state 【" + result.getTrade_state() +
+                    logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderByTransactionIdQueryUpdFail 根据支付单查询微信接口返回信息:state 【" + result.getTrade_state() +
                             "】,des【" + result.getTrade_state_desc() + "】");
                 } else if (result.getTrade_state().equalsIgnoreCase(Dict.tradeState.item_PAYERROR.getItem())) {
                     Map orderRaram = new HashMap();
@@ -490,7 +492,7 @@ public class QzOrderService {
                     orderRaram.put("orderStatus", Dict.orderStatus.item_501.getItem());
                     orderRaram.put("orderId", orderId);
                     qzOrderMapper.updateOrderInfo(orderRaram);
-                    logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderQuery 微信查询接口返回信息:state 【" + result.getTrade_state() +
+                    logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderByTransactionIdQueryUpdFail 根据支付单查询微信接口返回信息:state 【" + result.getTrade_state() +
                             "】,des【" + result.getTrade_state_desc() + "】");
                 } else if (result.getTrade_state().equalsIgnoreCase(Dict.tradeState.item_USERPAYING.getItem())) {
                     Map orderRaram = new HashMap();
@@ -498,10 +500,10 @@ public class QzOrderService {
                     orderRaram.put("orderStatus", Dict.orderStatus.item_100.getItem());
                     orderRaram.put("orderId", orderId);
                     qzOrderMapper.updateOrderInfo(orderRaram);
-                    logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderQuery 微信查询接口返回信息:state 【" + result.getTrade_state() +
+                    logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderByTransactionIdQueryUpdFail 根据支付单查询微信接口返回信息:state 【" + result.getTrade_state() +
                             "】,des【" + result.getTrade_state_desc() + "】");
                 } else if (result.getTrade_state().equalsIgnoreCase(Dict.tradeState.item_REVOKED.getItem())) {
-                    logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderQuery 微信查询接口返回信息:state 【" + result.getTrade_state() +
+                    logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderByTransactionIdQueryUpdFail 根据支付单查询微信接口返回信息:state 【" + result.getTrade_state() +
                             "】,des【" + result.getTrade_state_desc() + "】");
                 }
             }else {
@@ -527,7 +529,6 @@ public class QzOrderService {
         Long storeRelaId = MapUtils.getLong("storeRelaId", map);
         Date addTime = DateUtils.strToDate(add_time);
         Date nowDate = new Date();
-
         WechatGlobalQueryApiResult result = WechatGlobalUtil.wxOrderQuery(out_trade_no);
         if (result.getReturn_code().equalsIgnoreCase(WechatGlobalUtil.WXTradeState.SUCCESS.getCode())) {
             if (result.getResult_code().equalsIgnoreCase(WechatGlobalUtil.WXTradeState.SUCCESS.getCode())) {
@@ -550,26 +551,18 @@ public class QzOrderService {
                 } else if (result.getTrade_state().equalsIgnoreCase(Dict.tradeState.item_NOTPAY.getItem())) {//订单未支付
                     Map orderRaram = new HashMap();
                     if (getDateBetween(addTime, nowDate) >= 15) {//订单下单时间超过15分钟直接取消订单
-                        orderRaram.put("payStatus", Dict.payStatus.item_0.getItem());//支付状态未支付
-                        orderRaram.put("orderStatus", Dict.orderStatus.item_101.getItem());//订单状态已取消
                         Map param = new HashMap();
                         param.put("id", storeRelaId);
                         param.put("stock_num", stock_num + number);
-                        qzOrderMapper.updateStockNum(param);
+                        qzOrderMapper.updateStockNum(param);//库存还原
+                        orderRaram.put("orderStatus", Dict.orderStatus.item_101.getItem());//订单状态已取消
+                        orderRaram.put("payStatus", Dict.payStatus.item_0.getItem());//支付状态未支付
                     } else {
                         orderRaram.put("payStatus", Dict.payStatus.item_0.getItem());//支付状态未支付
                         orderRaram.put("orderStatus", Dict.orderStatus.item_0.getItem());//订单状态未支付
                     }
                     orderRaram.put("orderId", orderId);
                     qzOrderMapper.updateOrderInfo(orderRaram);
-                } else if (result.getTrade_state().equalsIgnoreCase(Dict.tradeState.item_PAYERROR.getItem())) {
-                    Map orderRaram = new HashMap();
-                    orderRaram.put("orderStatus", Dict.orderStatus.item_501.getItem());
-                    orderRaram.put("payStatus", Dict.payStatus.item_8.getItem());
-                    orderRaram.put("orderId", orderId);
-                    qzOrderMapper.updateOrderInfo(orderRaram);
-                    logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderQuery 微信查询接口返回信息:state 【" + result.getTrade_state() +
-                            "】,des【" + Dict.tradeState.item_PAYERROR.getItemName() + "】");
                 } else if (result.getTrade_state().equalsIgnoreCase(Dict.tradeState.item_CLOSED.getItem())) {
                     Map orderRaram = new HashMap();
                     orderRaram.put("payStatus", Dict.payStatus.item_7.getItem());
@@ -580,18 +573,26 @@ public class QzOrderService {
                     param.put("id", storeRelaId);
                     param.put("stock_num", stock_num + number);
                     qzOrderMapper.updateStockNum(param);//库存还原
-                    logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderQuery 微信查询接口返回信息:state 【" + result.getTrade_state() +
+                    logger.info(">>>>>>>>>>>>>>>>>>>>wxGlobalOrderByTransactionIdQueryUpdFail 根据支付单查询微信国际接口返回信息:state 【" + result.getTrade_state() +
                             "】,des【" + Dict.tradeState.item_CLOSED.getItemName() + "】");
+                } else if (result.getTrade_state().equalsIgnoreCase(Dict.tradeState.item_PAYERROR.getItem())) {
+                    Map orderRaram = new HashMap();
+                    orderRaram.put("payStatus", Dict.payStatus.item_8.getItem());
+                    orderRaram.put("orderStatus", Dict.orderStatus.item_501.getItem());
+                    orderRaram.put("orderId", orderId);
+                    qzOrderMapper.updateOrderInfo(orderRaram);
+                    logger.info(">>>>>>>>>>>>>>>>>>>>wxGlobalOrderByTransactionIdQueryUpdFail 根据支付单查询微信国际接口返回信息:state 【" + result.getTrade_state() +
+                            "】,des【" + Dict.tradeState.item_PAYERROR.getItemName() + "】");
                 } else if (result.getTrade_state().equalsIgnoreCase(Dict.tradeState.item_USERPAYING.getItem())) {
                     Map orderRaram = new HashMap();
                     orderRaram.put("payStatus", Dict.payStatus.item_1.getItem());
                     orderRaram.put("orderStatus", Dict.orderStatus.item_100.getItem());
                     orderRaram.put("orderId", orderId);
                     qzOrderMapper.updateOrderInfo(orderRaram);
-                    logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderQuery 微信查询接口返回信息:state 【" + result.getTrade_state() +
+                    logger.info(">>>>>>>>>>>>>>>>>>>>wxGlobalOrderByTransactionIdQueryUpdFail 根据支付单查询微信国际接口返回信息:state 【" + result.getTrade_state() +
                             "】,des【" + Dict.tradeState.item_USERPAYING.getItemName() + "】");
                 } else if (result.getTrade_state().equalsIgnoreCase(Dict.tradeState.item_REVOKED.getItem())) {
-                    logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderQuery 微信查询接口返回信息:state 【" + result.getTrade_state() +
+                    logger.info(">>>>>>>>>>>>>>>>>>>>wxGlobalOrderByTransactionIdQueryUpdFail 根据支付单查询微信国际接口返回信息:state 【" + result.getTrade_state() +
                             "】,des【" + Dict.tradeState.item_REVOKED.getItemName() + "】");
                 }
             }else {
@@ -604,6 +605,119 @@ public class QzOrderService {
     }
 
     /**
+     *  查询微信支付中且已生成支付单的订单,更新订单状态
+     *//*
+    @Transactional
+    public void orderQueryUpdateByWxTransactionId() {
+        logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdateByWxTransactionId is start ");
+        logger.info(">>>>>>>>>>>>>>>>>>>>查询微信支付中且已生成支付单的订单,更新订单状态");
+        // 查询订单状态为支付中,且已生成支付单号的订单数据
+        List<Map> orderList = qzOrderMapper.queryPayingOrderList();
+        if (null != orderList && orderList.size() > 0) {
+            for (Map map : orderList) {
+                String pay_flag = MapUtils.getString("pay_flag", map);
+                String orderId = MapUtils.getString("order_id", map);
+                if(org.apache.commons.lang.StringUtils.isNotEmpty(pay_flag)) {
+                    if (pay_flag.equalsIgnoreCase("wxglobalpay")) {//微信国际支付
+                        wxGlobalOrderByTransactionIdQueryUpdFail(map);
+                    } else {//微信支付、平安支付、线下扫码支付
+                        wxOrderByTransactionIdQueryUpdFail(map);
+                    }
+                }else{
+                    logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdateByWxTransactionId 订单编号【"+orderId+"】的支付方式不能为空! ");
+                }
+            }
+        } else {
+            logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdateByWxTransactionId 未查到订单数据 ");
+        }
+        logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdateByWxTransactionId is end ");
+    }
+
+    *//**
+     * 微信查询接口,根据支付单号查询微信失败数据,更新中网订单数据
+     * @param map
+     *//*
+    private void wxOrderByTransactionIdQueryUpdFail(Map map){
+        logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderByTransactionIdQueryUpdFail 根据支付单查询微信接口调用");
+        String orderId = MapUtils.getString("order_id", map);
+        String payTransactionId =  MapUtils.getString("payTransactionId", map);
+        String add_time = MapUtils.getString("add_time", map);
+        Integer number = MapUtils.getInteger("number", map);
+        Integer stock_num = MapUtils.getInteger("stock_num", map);
+        Long storeRelaId = MapUtils.getLong("storeRelaId", map);
+        Date addTime = DateUtils.strToDate(add_time);
+        Date nowDate = new Date();
+        WechatRefundApiResult result = WechatUtil.wxOrderQueryByTransactionId(payTransactionId);
+        if (result.getReturn_code().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode())) {
+            if (result.getResult_code().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode()) ){
+                //订单未支付
+                if (result.getTrade_state().equalsIgnoreCase(Dict.tradeState.item_NOTPAY.getItem())) {
+                    Map orderRaram = new HashMap();
+                    if (getDateBetween(addTime, nowDate) >= 15) {//订单下单时间超过15分钟直接取消订单
+                        Map param = new HashMap();
+                        param.put("id", storeRelaId);
+                        param.put("stock_num", stock_num + number);
+                        qzOrderMapper.updateStockNum(param);//库存还原
+                        orderRaram.put("payStatus", Dict.payStatus.item_0.getItem());//支付状态未支付
+                        orderRaram.put("orderStatus", Dict.orderStatus.item_101.getItem());//订单状态已取消
+                    } else {
+                        orderRaram.put("payStatus", Dict.payStatus.item_0.getItem());//支付状态未支付
+                        orderRaram.put("orderStatus", Dict.orderStatus.item_0.getItem());//订单状态未支付
+                    }
+                    orderRaram.put("orderId", orderId);
+                    qzOrderMapper.updateOrderInfo(orderRaram);
+                }
+            }else {
+                logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderByTransactionIdQueryUpdFail 根据支付单查询微信接口返回失败信息:code 【" + result.getErr_code() +
+                        "】,des【" + result.getErr_code_des() + "】");
+            }
+        } else {
+            logger.info(">>>>>>>>>>>>>>>>>>>>wxOrderByTransactionIdQueryUpdFail 根据支付单查询微信接口调用失败: " + result.getReturn_msg());
+        }
+    }
+    *//**
+     * 微信国际查询接口,根据支付单号查询微信失败数据,更新中网订单数据
+     * @param map
+     *//*
+    private void wxGlobalOrderByTransactionIdQueryUpdFail(Map map){
+        logger.info(">>>>>>>>>>>>>>>>>>>>wxGlobalOrderByTransactionIdQueryUpdFail 根据支付单查询微信国际接口调用");
+        String orderId = MapUtils.getString("order_id", map);
+        String payTransactionId =  MapUtils.getString("payTransactionId", map);
+        String add_time = MapUtils.getString("add_time", map);
+        Integer number = MapUtils.getInteger("number", map);
+        Integer stock_num = MapUtils.getInteger("stock_num", map);
+        Long storeRelaId = MapUtils.getLong("storeRelaId", map);
+        Date addTime = DateUtils.strToDate(add_time);
+        Date nowDate = new Date();
+        WechatGlobalQueryApiResult result = WechatGlobalUtil.wxOrderQueryByTransactionId(payTransactionId);
+        if (result.getReturn_code().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode())) {
+            if (result.getResult_code().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode()) ){
+                //订单未支付
+                if (result.getTrade_state().equalsIgnoreCase(Dict.tradeState.item_NOTPAY.getItem())) {
+                    Map orderRaram = new HashMap();
+                    if (getDateBetween(addTime, nowDate) >= 15) {//订单下单时间超过15分钟直接取消订单
+                        Map param = new HashMap();
+                        param.put("id", storeRelaId);
+                        param.put("stock_num", stock_num + number);
+                        qzOrderMapper.updateStockNum(param);//库存还原
+                        orderRaram.put("orderStatus", Dict.orderStatus.item_101.getItem());//订单状态已取消
+                        orderRaram.put("payStatus", Dict.payStatus.item_0.getItem());//支付状态未支付
+                    } else {
+                        orderRaram.put("payStatus", Dict.payStatus.item_0.getItem());//支付状态未支付
+                        orderRaram.put("orderStatus", Dict.orderStatus.item_0.getItem());//订单状态未支付
+                    }
+                    orderRaram.put("orderId", orderId);
+                    qzOrderMapper.updateOrderInfo(orderRaram);
+                }
+            }else {
+                logger.info(">>>>>>>>>>>>>>>>>>>>wxGlobalOrderByTransactionIdQueryUpdFail 根据支付单查询微信国际接口返回失败信息:code 【" + result.getErr_code() +
+                        "】,des【" + result.getErr_code_des() + "】");
+            }
+        } else {
+            logger.info(">>>>>>>>>>>>>>>>>>>>wxGlobalOrderByTransactionIdQueryUpdFail 根据支付单查询微信国际接口调用失败: " + result.getReturn_msg());
+        }
+    }*/
+    /**
      * 查询付款码支付记录的支付状态
      */
     @Transactional

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

@@ -62,9 +62,9 @@
         from mall_order a
         LEFT JOIN mall_order_goods b ON a.id = b.order_id
         LEFT JOIN mall_product_store_rela c ON b.product_id = c.product_id
-        AND c.store_id = a.store_id  where (a.order_status in ('100','201') and a.pay_status in (1,2))
+        AND c.store_id = a.store_id  where (a.order_status in ('0','100','201') and a.pay_status in (0,1,2)) and pay_id is not null
         and (a.pay_transaction_id = '' or a.pay_transaction_id is null or a.pay_time is null or a.pay_time = '')
-        AND a.is_onffline_order = 0
+        AND a.is_onffline_order = 0 and a.pay_flag = 'weixin'
     </select>
 
     <update id="updateOrderInfo" parameterType="map">

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

@@ -344,14 +344,14 @@ Page({
 
       // //根据选中的规格,判断是否有对应的sku信息
       let checkedProduct = goodsUtil.getCheckedProductItem(goodsUtil.getCheckedSpecKey(that), that);
-      // if (!checkedProduct || checkedProduct.length <= 0) {
-      //   wx.showToast({
-      //     title: '库存不足',
-      //     mask: true
-      //   });
-      //   //找不到对应的product信息,提示没有库存
-      //   return false;
-      // }
+      if (!checkedProduct || checkedProduct.length <= 0) {
+        wx.showToast({
+          title: '库存不足',
+          icon: 'none'
+        });
+        //找不到对应的product信息,提示没有库存
+        return false;
+      }
 
       //验证库存
       // if (checkedProduct.goods_number < this.data.number) {