zcb пре 4 година
родитељ
комит
d5493e8221

+ 43 - 2
kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java

@@ -5,6 +5,8 @@ import com.kmall.admin.entity.*;
 import com.kmall.admin.websocket.WebSocketServer;
 import com.kmall.common.constant.JxlsXmlTemplateName;
 import com.kmall.common.utils.excel.ExcelUtil;
+import com.kmall.manager.manager.alipay.AliPayMicropayApiResult;
+import com.kmall.manager.manager.alipay.AliPayUtil;
 import com.kmall.manager.manager.wechat.WechatUtil;
 import com.kmall.manager.manager.wechat.WechatGlobalUtil;
 import com.kmall.manager.manager.wechat.wxglobal.dto.WechatGlobalRefundApiResult;
@@ -526,7 +528,7 @@ public class OrderController {
         if (orderInfo.getOrderStatus() != Integer.parseInt(Dict.orderStatus.item_0.getItem())) {
             if (Dict.payFlag.item_cash.getItem().equals(orderInfo.getPayFlag())) {
                 //现金支付,直接修改订单状态
-                orderService.refund(orderInfo, null);
+                orderService.refund(orderInfo);
             } else if (Dict.payFlag.item_weixin.getItem().equals(orderInfo.getPayFlag())) {
                 //微信线下扫码支付
                 WechatRefundApiResult result = WechatUtil
@@ -559,6 +561,45 @@ public class OrderController {
 
                     return R.error(result.getErr_code_des());
                 }
+            }else if(Dict.payFlag.item_alipay.getItem().equals(orderInfo.getPayFlag())){
+                // 支付宝线下扫码支付
+                AliPayMicropayApiResult result = null;
+                try {
+                    result = AliPayUtil.aliTradeRefund(orderInfo.getOrderSn(),orderInfo.getActualPrice()+"",
+                            "顾客退款",orderInfo.getStoreId().toString());
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+                if (result.getCode().equals(AliPayUtil.AliPayTradeState.SUCC.getCode())) {
+                    orderService.refund(orderInfo, result);
+                } else {
+                    OrderRefundEntity mallOrderRefund = orderRefundService.queryObjectByOrderId(orderInfo.getId());
+                    OrderRefundEntity orderRefund = new OrderRefundEntity();
+                    orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));
+                    orderRefund.setRefundMoney(BigDecimal.valueOf(orderInfo.getActualPrice().doubleValue()));
+                    orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_4.getItem()));
+//                    orderRefund.setOutRefundNo(result.getOut_refund_no());
+                    SysUserEntity user = ShiroUtils.getUserEntity();
+                    orderRefund.setModerSn(user.getUsername());
+                    orderRefund.setModTime(new Date());
+                    if (mallOrderRefund != null) {
+                        orderRefund.setId(mallOrderRefund.getId());
+                        orderRefundService.update(orderRefund);//退款记录
+                    }
+
+                    OrderExceptionRecordEntity mallOrderExceptionRecord = new OrderExceptionRecordEntity();
+                    mallOrderExceptionRecord.setUserId(Integer.parseInt(orderInfo.getUserId() + ""));
+                    mallOrderExceptionRecord.setOrderSn(orderInfo.getOrderSn());
+                    mallOrderExceptionRecord.setExceptionStatus(Dict.exceptionStatus.item_03.getItem());
+                    mallOrderExceptionRecord.setExceptionContent("退款失败" + result.getSubMsg());
+                    mallOrderExceptionRecord.setCreateTime(new Date());
+                    orderExceptionRecordService.save(mallOrderExceptionRecord);
+
+                    return R.error(result.getSubMsg());
+                }
+            } else{
+                return R.ok("退款成功");
             }
 
         }
@@ -940,7 +981,7 @@ public class OrderController {
     public R getIdCardInfo() throws IOException {
 
         Map map = new HashMap();
-        String ssl = OkHttpUtils.post(map,"http://qhdswl.f3322.net:56800/api/limit/get", "SSL");
+        String ssl = OkHttpUtils.post(map,"http://192.168.1.68:8000/idcard/read", "SSL");
         Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");
         Matcher matcher = pattern.matcher(ssl);
         char ch;

+ 4 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/ProductController.java

@@ -36,6 +36,10 @@ public class ProductController {
     @RequestMapping("/list")
     @RequiresPermissions("product:list")
     public R list(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "categoryName");
+
         ParamUtils.setName(params, "goodsName");
         //查询列表数据
         Query query = new Query(params);

+ 4 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkCenterMenuController.java

@@ -45,6 +45,10 @@ public class MkCenterMenuController {
     @RequiresPermissions("mkcentermenu:list")
     @ResponseBody
     public R list(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "categoryName");
+
         //查询列表数据
         Query query = new Query(params);
 

+ 4 - 0
kmall-admin/src/main/java/com/kmall/admin/service/OrderService.java

@@ -7,6 +7,7 @@ import com.kmall.admin.entity.OrderEntity;
 import com.kmall.admin.entity.OrderRefundEntity;
 import com.kmall.admin.entity.WxOrderEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.manager.manager.alipay.AliPayMicropayApiResult;
 import com.kmall.manager.manager.wechat.wxglobal.dto.WechatGlobalRefundApiResult;
 import com.kmall.common.utils.print.ticket.item.Ticket;
 import com.kmall.common.utils.wechat.WechatRefundApiResult;
@@ -60,11 +61,14 @@ public interface OrderService {
 
     Ticket printMsg(Long id,String sessionId);
 
+    void refund(OrderEntity orderInfo);
     /**
      * 退款
      */
     void refund(OrderEntity orderInfo, WechatRefundApiResult result);
 
+    void refund(OrderEntity orderInfo, AliPayMicropayApiResult result);
+
     /**
      * 微信国际退款逻辑处理
      * @param order

+ 92 - 4
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -376,6 +376,37 @@ public class OrderServiceImpl implements OrderService {
         return TicketPrintUtil.print(head, goodsList, cashInfo, cusListing);
     }
 
+
+    /**
+     * 退款
+     */
+    @Transactional
+    public void refund(OrderEntity order) {
+        boolean needUpdateStock = true;
+        if (order.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_201.getItem())) {
+            order.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_401.getItem()));
+        }
+        if (Dict.payFlag.item_cash.getItem().equals(order.getPayFlag())) {
+            order.setPayStatus(Integer.parseInt(Dict.payStatus.item_4.getItem()));
+        }
+        orderDao.update(order);//修改为退款中
+        // TODO: 2019/6/13 定时任务查询退款成功后释放库存、优惠券
+        /*// 判断是否有优惠券
+        UserCouponEntity couponVo = userCouponDao.queryByOrderId(order.getId());
+        if (null != couponVo) {
+            userCouponDao.cancelOrder(couponVo);
+        }
+
+        if (!needUpdateStock) {
+            return;
+        }
+        // 更新库存
+        updateStock(order, "管理后台订单退款");*/
+//        updateStock(order, "管理后台订单退款");
+
+        queryStorePromRealUpdateIsScan(order);
+    }
+
     /**
      * 退款
      */
@@ -433,6 +464,62 @@ public class OrderServiceImpl implements OrderService {
         queryStorePromRealUpdateIsScan(order);
     }
 
+
+
+    @Transactional
+    public void refund(OrderEntity order, AliPayMicropayApiResult result) {
+        boolean needUpdateStock = true;
+        if (order.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_201.getItem())) {
+            order.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_401.getItem()));
+        }
+        if (Dict.payFlag.item_cash.getItem().equals(order.getPayFlag())) {
+            order.setPayStatus(Integer.parseInt(Dict.payStatus.item_4.getItem()));
+        }else{
+            order.setPayStatus(Integer.parseInt(Dict.payStatus.item_4.getItem()));
+            OrderRefundEntity mallOrderRefund = orderRefundDao.queryObjectByOrderId(order.getId());
+            OrderRefundEntity orderRefund = new OrderRefundEntity();
+            orderRefund.setRefundId(result.getTradeNo());
+            orderRefund.setOutRefundNo(result.getOutTradeNo());
+            orderRefund
+                    .setRefundMoney(new BigDecimal(result.getRefundFee()).divide(Constant.ONE_HUNDRED));
+            orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_2.getItem()));//退款处理中
+            orderRefund.setModTime(new Date());
+
+            if (mallOrderRefund != null) {
+                orderRefund.setId(mallOrderRefund.getId());
+                orderRefund.setRefundType(mallOrderRefund.getRefundType());
+                orderRefundDao.update(orderRefund);
+            } else {
+                orderRefund.setOrderId(Integer.parseInt(order.getId() + ""));
+                orderRefund.setUserId(Integer.parseInt(order.getUserId() + ""));
+                orderRefund.setCreateTime(new Date());
+                List<OrderEntity> list = orderDao.queryObjectByMerchOrderSn(order.getMerchOrderSn());
+                if(list.size()>1){//多条订单
+                    orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_2.getItem()));//部分退款
+                }else{
+                    orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));//用户全额退款
+                }
+                orderRefundDao.save(orderRefund);//退款记录
+            }
+        }
+        orderDao.update(order);//修改为退款中
+        // TODO: 2019/6/13 定时任务查询退款成功后释放库存、优惠券
+        /*// 判断是否有优惠券
+        UserCouponEntity couponVo = userCouponDao.queryByOrderId(order.getId());
+        if (null != couponVo) {
+            userCouponDao.cancelOrder(couponVo);
+        }
+
+        if (!needUpdateStock) {
+            return;
+        }
+        // 更新库存
+        updateStock(order, "管理后台订单退款");*/
+//        updateStock(order, "管理后台订单退款");
+
+//        queryStorePromRealUpdateIsScan(order);
+    }
+
     /**
      * 平安退款逻辑处理
      * @param order
@@ -1631,7 +1718,9 @@ public class OrderServiceImpl implements OrderService {
             // 微信支付
 //            wxPay(user, parCode, resultObj, order, processRecordEntity, orderWXPayRecordCurrent, store);
             // 支付宝支付
-            AliPay(user, parCode, resultObj, order, processRecordEntity, orderWXPayRecordCurrent, store);
+//            AliPay(user, parCode , order, processRecordEntity, orderWXPayRecordCurrent, store);
+            resultObj.put("shopName",store.getStoreName()); // 根据门店编号查询
+            resultObj.put("userName",user.getUsername());
 
             // 保存订单流转表
             // 设置下单完成时间
@@ -1665,7 +1754,7 @@ public class OrderServiceImpl implements OrderService {
         return resultObj;
     }
 
-    private void AliPay(SysUserEntity user, String parCode, Map resultObj, OrderVo order, OrderProcessRecordEntity processRecordEntity, OrderWXPayRecordEntity orderWXPayRecordCurrent, StoreEntity store) throws Exception {
+    private void AliPay(SysUserEntity user, String parCode,  OrderVo order, OrderProcessRecordEntity processRecordEntity, OrderWXPayRecordEntity orderWXPayRecordCurrent, StoreEntity store) throws Exception {
 
         AliPayRequestParams params = new AliPayRequestParams();
         params.setAuthCode(parCode);
@@ -1678,8 +1767,7 @@ public class OrderServiceImpl implements OrderService {
         AliPayMicropayApiResult aliPayMicropayApiResult = AliPayUtil.aliTradePay(params);
         orderWXPayRecordService.updateRecordByAli(orderWXPayRecordCurrent.getId(), aliPayMicropayApiResult);
         LOGGER.info("调用阿里支付接口的同步返回结果:"+JacksonUtils.toJson(aliPayMicropayApiResult));
-        resultObj.put("shopName",store.getStoreName()); // 根据门店编号查询
-        resultObj.put("userName",user.getUsername());
+
 
 
         // 修改订单状态

+ 3 - 3
kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml

@@ -179,7 +179,7 @@
         left join mall_merch m on a.merch_sn = m.merch_sn
         left join mall_product c on a.product_id = c.id
         LEFT JOIN mall_category cg ON a.category_id = cg.id
-        left join mall_store s on a.store_id = s.id
+        left join mall_store s on a.store_id = s.id AND s.third_party_merch_code = b.third_party_merch_code
         WHERE 1=1 and b.is_delete = 0
         <if test="categoryId != null and categoryId != '' ">
             AND a.category_id = #{categoryId}
@@ -200,7 +200,7 @@
             AND a.merch_sn = #{merchSn}
         </if>
         <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
-            AND s.third_party_merch_code = #{thirdPartyMerchCode}
+            AND b.third_party_merch_code = #{thirdPartyMerchCode}
         </if>
         <if test="goodsId != null">
             AND a.goods_id = #{goodsId}
@@ -311,7 +311,7 @@
         left join third_merchant_biz mb on mb.third_party_merch_code = b.third_party_merch_code and mb.merch_sn=b.merch_sn
         left join mall_product c on a.product_id = c.id
         LEFT JOIN mall_category cg ON a.category_id = cg.id
-        left join mall_store s on a.store_id = s.id
+        left join mall_store s on a.store_id = s.id AND s.third_party_merch_code = b.third_party_merch_code
         WHERE 1=1 and b.is_delete = 0
         <if test="storeId != null and storeId != '' ">
             AND a.store_id = #{storeId}

+ 1 - 1
kmall-admin/src/main/webapp/WEB-INF/page/sale/sale.html

@@ -32,7 +32,7 @@
             <div class="row" style="border:0;margin-bottom:10px">
                 <div class="col-md-3 logodiv">
                     <!--center-block-->
-                    <img src="${rc.contextPath}/statics/img/logotest2.jpg" class="img-rounded img-responsive" style="height: 70px;">
+                    <img src="${rc.contextPath}/statics/img/logotest2.png" class="img-rounded img-responsive" style="height: 70px;">
                 </div>
                 <div class="col-md-9" style="background-color: #f0f0f0;margin:0px;padding: 0px" >
                     <div v-show="showList">

+ 30 - 26
kmall-admin/src/main/webapp/js/shop/offilineOrderList.js

@@ -381,20 +381,22 @@ let vm = new Vue({
             let params = {};
             params.orderId = rowId;
 
-            $.ajax({
-                type: "POST",
-                url: '../order/offilineRefund',
-                data: params,
-                success: function (r) {
-                    if (r.code === 0) {
-                        alert('退款成功', function (index) {
-                            vm.reload();
-                        });
-                    } else {
-                        alert(r.msg);
+            confirm("确认退款吗?",function () {
+                $.ajax({
+                    type: "POST",
+                    url: '../order/offilineRefund',
+                    data: params,
+                    success: function (r) {
+                        if (r.code === 0) {
+                            alert('退款成功', function (index) {
+                                vm.reload();
+                            });
+                        } else {
+                            alert(r.msg);
+                        }
                     }
-                }
-            });
+                });
+            })
         },
         shippingBind: function (event) {
             let orderId = vm.order.id;
@@ -429,19 +431,21 @@ let vm = new Vue({
             let params = {};
             params.orderId = rowId;
 
-            $.ajax({
-                type: "POST",
-                url: '../order/cancel',
-                data: params,
-                success: function (r) {
-                    if (r.code === 0) {
-                        alert('取消成功', function (index) {
-                            vm.reload();
-                        });
-                    } else {
-                        alert(r.msg);
+            confirm("是否取消订单?",function(){
+                $.ajax({
+                    type: "POST",
+                    url: '../order/cancel',
+                    data: params,
+                    success: function (r) {
+                        if (r.code === 0) {
+                            alert('取消成功', function (index) {
+                                vm.reload();
+                            });
+                        } else {
+                            alert(r.msg);
+                        }
                     }
-                }
+                });
             });
         }
     },
@@ -599,4 +603,4 @@ let vm = new Vue({
     }
     var removePrintArea = function (id) {
         $("iframe#" + id).remove();
-    };
+    };