From 2a212f983f35e1c569dfec3a172fb5f0c9f85fac Mon Sep 17 00:00:00 2001
From: lidongdong <1459917685@qq.com>
Date: 星期二, 06 十二月 2022 13:43:43 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/haucheng_panzhihua' into haucheng_panzhihua

---
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopFlowerRefundOrderServiceImpl.java |  201 +++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 189 insertions(+), 12 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopFlowerRefundOrderServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopFlowerRefundOrderServiceImpl.java
index adccd32..7469c2b 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopFlowerRefundOrderServiceImpl.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopFlowerRefundOrderServiceImpl.java
@@ -1,32 +1,45 @@
 package com.panzhihua.service_community.service.impl;
 
+import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.panzhihua.common.constants.Constants;
 import com.panzhihua.common.model.dtos.shop.ComShopFlowerRefundOrderDTO;
+import com.panzhihua.common.model.dtos.shop.ComShopOrderQueryDTO;
 import com.panzhihua.common.model.dtos.shop.PageComOrderRefundDTO;
 import com.panzhihua.common.model.vos.R;
+import com.panzhihua.common.model.vos.community.convenient.ConvenientMerchantVO;
+import com.panzhihua.common.model.vos.shop.ComShopFlowerOrderGoodsVO;
 import com.panzhihua.common.model.vos.shop.ComShopFlowerRefundOrderVO;
 import com.panzhihua.common.model.vos.shop.ComShopOrderCountVO;
+import com.panzhihua.common.model.vos.user.SysUserVO;
+import com.panzhihua.common.service.user.UserService;
 import com.panzhihua.common.utlis.OrderNoUtils;
 import com.panzhihua.common.utlis.WxPayUtils;
+import com.panzhihua.common.utlis.WxUtil;
 import com.panzhihua.common.utlis.wx.WXPayUtil;
-import com.panzhihua.service_community.dao.ComShopFlowerOrderDAO;
-import com.panzhihua.service_community.dao.ComShopFlowerOrderPayDAO;
-import com.panzhihua.service_community.dao.ComShopFlowerRefundOrderDAO;
-import com.panzhihua.service_community.model.dos.ComShopFlowerOrderDO;
-import com.panzhihua.service_community.model.dos.ComShopFlowerOrderPayDO;
-import com.panzhihua.service_community.model.dos.ComShopFlowerRefundOrderDO;
+import com.panzhihua.service_community.dao.*;
+import com.panzhihua.service_community.model.dos.*;
 import com.panzhihua.service_community.service.ComShopFlowerRefundOrderService;
+import com.panzhihua.service_community.util.WxMaConfiguration;
 import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.*;
 import java.util.stream.Collectors;
+
+import static java.util.Objects.isNull;
+import static java.util.Objects.nonNull;
 
 /**
  * @ClassName: ComShopFlowerRefundOrderServiceImpl
@@ -54,18 +67,45 @@
     private ComShopFlowerOrderDAO comShopFlowerOrderDAO;
     @Resource
     private ComShopFlowerOrderPayDAO comShopFlowerOrderPayDAO;
+    @Resource
+    private ComShopFlowerOrderGoodsDAO comShopFlowerOrderGoodsDAO;
+    @Resource
+    private ComShopFlowerGoodsDAO comShopFlowerGoodsDAO;
+    @Resource
+    private ComShopFlowerGoodsAttrDAO comShopFlowerGoodsAttrDAO;
+    @Resource
+    private ConvenientMerchantDAO convenientMerchantDAO;
+    @Resource
+    private WxMaConfiguration wxMaConfiguration;
+    @Resource
+    private UserService userService;
+    @Resource
+    private ConvenientElevatingPointDAO convenientElevatingPointDAO;
 
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public R createRefundOrder(ComShopFlowerRefundOrderDTO comShopFlowerRefundOrderDTO) {
         ComShopFlowerRefundOrderDO comShopFlowerRefundOrderDO = new ComShopFlowerRefundOrderDO();
         BeanUtils.copyProperties(comShopFlowerRefundOrderDTO, comShopFlowerRefundOrderDO);
         // 生成退款订单号
-        String refundOrderNo = OrderNoUtils.NextOrderNo(comShopFlowerRefundOrderDTO.getUserId());
+        String refundOrderNo = OrderNoUtils.NextOrderNoFlower(comShopFlowerRefundOrderDTO.getUserId());
         comShopFlowerRefundOrderDO.setRefundOrderNo(refundOrderNo);
         comShopFlowerRefundOrderDO.setStatus(ComShopFlowerRefundOrderDO.status.clz);
         comShopFlowerRefundOrderDO.setDeleteStatus(ComShopFlowerRefundOrderDO.deleteStatus.no);
         this.baseMapper.insert(comShopFlowerRefundOrderDO);
+        //商家接受退款信息
+        ConvenientMerchantVO convenientMerchantVO = convenientMerchantDAO.selectMerchantById(comShopFlowerRefundOrderDTO.getStoreId());
+        WxMaService maService = wxMaConfiguration.getMaService(Constants.HC_APP_ID);
+        R sysUserVOR = userService.getSysUserVOByPhone(convenientMerchantVO.getMobilePhone());
+        if (R.isOk(sysUserVOR)) {
+            SysUserVO sysUserVO = JSONObject.parseObject(JSONObject.toJSONString(sysUserVOR.getData()), SysUserVO.class);
+            try {
+                WxUtil.sendNewRefundOrderNotice(sysUserVO.getOpenid(),maService.getAccessToken(),refundOrderNo,comShopFlowerRefundOrderDO.getRefundAmount().toString(),DateUtil.format(comShopFlowerRefundOrderDO.getRefundTime(),"yyyy-MM-dd HH:mm"));
+            } catch (WxErrorException e) {
+                e.printStackTrace();
+            }
+        }
         return R.ok();
     }
 
@@ -73,16 +113,61 @@
     public R pageRefundOrder(PageComOrderRefundDTO pageComOrderRefundDTO) {
         Page page = new Page<>(pageComOrderRefundDTO.getPageNum(), pageComOrderRefundDTO.getPageSize());
         IPage<ComShopFlowerRefundOrderVO> pages = this.baseMapper.pageRefundOrder(page, pageComOrderRefundDTO);
+        for (ComShopFlowerRefundOrderVO comShopFlowerRefundOrderVO : pages.getRecords()) {
+            String orderNo = comShopFlowerRefundOrderVO.getOrderNo();
+            ComShopFlowerOrderDO comShopFlowerOrderDO = comShopFlowerOrderDAO.selectById(comShopFlowerRefundOrderVO.getOrderId());
+            if (nonNull(comShopFlowerOrderDO)){
+                comShopFlowerRefundOrderVO.setTotalAmount(comShopFlowerOrderDO.getTotalAmount());
+                ConvenientElevatingPointDO convenientElevatingPointDO = convenientElevatingPointDAO.selectById(comShopFlowerOrderDO.getPointId());
+                if (nonNull(convenientElevatingPointDO)){
+                    comShopFlowerRefundOrderVO.setPointName(convenientElevatingPointDO.getName());
+                }
+            }
+
+            List<ComShopFlowerOrderGoodsVO> orderGoodsVOS = new ArrayList<>();
+            // 查询订单下商品信息
+            List<ComShopFlowerOrderGoodsDO> orderGoodsDOList = comShopFlowerOrderGoodsDAO
+                    .selectList(new QueryWrapper<ComShopFlowerOrderGoodsDO>().eq("order_no",orderNo));
+            StringBuilder sbr = new StringBuilder();
+            if (!orderGoodsDOList.isEmpty()) {
+                orderGoodsDOList.forEach(orderGoods -> {
+                    ComShopFlowerOrderGoodsVO orderGoodsVO = new ComShopFlowerOrderGoodsVO();
+                    BeanUtils.copyProperties(orderGoods, orderGoodsVO);
+                    orderGoodsVO.setNum(orderGoods.getAmount());
+                    orderGoodsVO.setGoodsPic(orderGoods.getGoodsAttrPic());
+                    orderGoodsVO.setPrice(orderGoods.getGoodsAttrPrice());
+                    orderGoodsVO.setGoodsAttr(orderGoods.getGoodsAttrName());
+                    orderGoodsVOS.add(orderGoodsVO);
+                    sbr.append(orderGoods.getGoodsName()).append(" ");
+                });
+                comShopFlowerRefundOrderVO.setGoodsAttrName(orderGoodsDOList.get(0).getGoodsAttrName());
+            }
+            comShopFlowerRefundOrderVO.setOrderGoodsVOList(orderGoodsVOS);
+            comShopFlowerRefundOrderVO.setGoodsName(sbr.toString());
+
+
+            // 查询店铺信息
+/*           ConvenientMerchantVO shopStoreVO = new ConvenientMerchantVO();
+            ConvenientMerchantDO shopStoreDO = convenientMerchantDAO.selectById(comShopFlowerRefundOrderVO.getStoreId());
+            if (shopStoreDO != null) {
+                BeanUtils.copyProperties(shopStoreDO, shopStoreVO);
+            }
+            comShopFlowerRefundOrderVO.setConvenientMerchantVO(shopStoreVO);
+*/
+
+        }
         return R.ok(pages);
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public R updateRefundOrder(ComShopFlowerRefundOrderDTO comShopFlowerRefundOrderDTO) {
         ComShopFlowerRefundOrderDO comShopFlowerRefundOrderDO = this.baseMapper.selectById(comShopFlowerRefundOrderDTO.getId());
 
         if (Objects.isNull(comShopFlowerRefundOrderDO)) {
             return R.fail("不存在该退款订单");
-        }
+        } ComShopFlowerOrderDO comShopFlowerOrderDO = comShopFlowerOrderDAO.selectById(comShopFlowerRefundOrderDO.getOrderId());
+
         if (ComShopFlowerRefundOrderDO.handleResult.agree.equals(comShopFlowerRefundOrderDTO.getHandleResult())) {
             //处理退款事宜
             comShopFlowerRefundOrderDO.setRefundTime(new Date());
@@ -91,9 +176,8 @@
             //微信处理退款
             try {
                 String refundNo = WXPayUtil.generateNonceStr();
-                ComShopFlowerOrderDO comShopFlowerOrderDO = comShopFlowerOrderDAO.selectById(comShopFlowerRefundOrderDO.getOrderId());
-                String refundStr = WxPayUtils.refund(appid, mchId, comShopFlowerOrderDO.getWxTardeNo(), comShopFlowerRefundOrderDO.getPayAmount(),
-                        comShopFlowerRefundOrderDO.getRefundAmount(), refundNo, isTest);
+                String refundStr = WxPayUtils.refund(appid, mchId, comShopFlowerOrderDO.getOrderNo(), comShopFlowerRefundOrderDO.getPayAmount(),
+                        comShopFlowerRefundOrderDO.getPayAmount(), refundNo, isTest);
                 log.info("退款请求接口返回参数:{}" , refundStr);
                 Map<String, String> mapResult  = WXPayUtil.xmlToMap(refundStr);
                 if (CollUtil.isNotEmpty(mapResult)) {
@@ -118,13 +202,21 @@
 //                        orderPayDO.setWxTradeNo(wxPayNotifyOrderDTO.getWxTradeNo());
                         orderPayDO.setPayStatus(ComShopFlowerOrderPayDO.payStatus.yes);
                         orderPayDO.setRefundStatus(ComShopFlowerOrderPayDO.refundStatus.tkcg);
+                        //更新订单状态
+                        comShopFlowerOrderDO.setStatus(ComShopFlowerOrderDO.status.ytk);
+                        comShopFlowerOrderDAO.updateById(comShopFlowerOrderDO);
+
+                        //退款成功发送消息
+                        sendRefundNotice(comShopFlowerRefundOrderDO, comShopFlowerOrderDO,"同意退款");
                     }else {
                         //退款失败
                         comShopFlowerRefundOrderDO.setStatus(ComShopFlowerRefundOrderDO.status.tksb);
-                        comShopFlowerRefundOrderDO.setRemark(comShopFlowerRefundOrderDO.getRemark() + "_"+return_msg);
+                        comShopFlowerRefundOrderDO.setRemark(comShopFlowerRefundOrderDO.getRemark() + "_退款失败");
                         // 添加订单支付记录表
                         orderPayDO.setPayStatus(ComShopFlowerOrderPayDO.payStatus.no);
                         orderPayDO.setRefundStatus(ComShopFlowerOrderPayDO.refundStatus.tksb);
+                        //退款失败发送消息
+                        sendRefundNotice(comShopFlowerRefundOrderDO, comShopFlowerOrderDO,"退款失败");
                     }
                     comShopFlowerOrderPayDAO.insert(orderPayDO);
                 }
@@ -137,11 +229,27 @@
             comShopFlowerRefundOrderDO.setHandleTime(new Date());
             comShopFlowerRefundOrderDO.setStatus(ComShopFlowerRefundOrderDO.status.tksb);
             comShopFlowerRefundOrderDO.setHandleResult(ComShopFlowerRefundOrderDO.handleResult.refuse);
+            //拒绝退款发送消息
+            sendRefundNotice(comShopFlowerRefundOrderDO, comShopFlowerOrderDO,"拒绝退款");
         }
         this.baseMapper.updateById(comShopFlowerRefundOrderDO);
         return R.ok();
     }
 
+    private void sendRefundNotice(ComShopFlowerRefundOrderDO comShopFlowerRefundOrderDO, ComShopFlowerOrderDO comShopFlowerOrderDO,String msg) {
+        WxMaService maService = wxMaConfiguration.getMaService(Constants.HC_APP_ID);
+        R userOpenId = userService.getUserOpenId(comShopFlowerOrderDO.getUserId());
+        if (R.isOk(userOpenId)) {
+            String openid = userOpenId.getData().toString();
+            try {
+                WxUtil.sendRefundNotice(openid,maService.getAccessToken(),comShopFlowerRefundOrderDO.getRefundOrderNo(),comShopFlowerRefundOrderDO.getRefundAmount().toString(),msg);
+            } catch (WxErrorException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Override
     public R selectCountGroupStatus(Long storeId){
         String[] statusStr = {"clz","tkcg","tksb","yqx","tkz"};
         List<ComShopOrderCountVO> comShopOrderCountVOS = this.baseMapper.selectCountGroupStatus(storeId);
@@ -160,4 +268,73 @@
         retMap.put("zdd",amountTotal);
         return R.ok(retMap);
     }
+
+    /**
+     * 根据订单id取消订单
+     *
+     * @param \
+     * @return 取消结果
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public R orderCancel(Long id) {
+        this.baseMapper.updateCancel(id,ComShopFlowerRefundOrderDO.status.yqx);
+        return R.ok();
+    }
+
+
+    @Override
+    public R refundOrderDetail(Long id){
+        ComShopFlowerRefundOrderDO comShopFlowerRefundOrderDO = this.baseMapper.selectById(id);
+        if (isNull(comShopFlowerRefundOrderDO)){
+            return R.fail("未查询到该退款订单");
+        }
+        ComShopFlowerRefundOrderVO comShopFlowerRefundOrderVO = new ComShopFlowerRefundOrderVO();
+        BeanUtils.copyProperties(comShopFlowerRefundOrderDO,comShopFlowerRefundOrderVO);
+        String orderNo = comShopFlowerRefundOrderDO.getOrderNo();
+        List<ComShopFlowerOrderGoodsVO> orderGoodsVOS = new ArrayList<>();
+        // 查询订单下商品信息
+        List<ComShopFlowerOrderGoodsDO> orderGoodsDOList = comShopFlowerOrderGoodsDAO
+                .selectList(new QueryWrapper<ComShopFlowerOrderGoodsDO>().eq("order_no",orderNo));
+        StringBuilder sbr = new StringBuilder();
+        if (!orderGoodsDOList.isEmpty()) {
+            orderGoodsDOList.forEach(orderGoods -> {
+                ComShopFlowerOrderGoodsVO orderGoodsVO = new ComShopFlowerOrderGoodsVO();
+                BeanUtils.copyProperties(orderGoods, orderGoodsVO);
+                orderGoodsVO.setNum(orderGoods.getAmount());
+                orderGoodsVO.setGoodsPic(orderGoods.getGoodsAttrPic());
+                orderGoodsVO.setPrice(orderGoods.getGoodsAttrPrice());
+                // 查询商品信息判断商品状态
+                ComShopFlowerGoodsDO goodsDO = comShopFlowerGoodsDAO.selectById(orderGoods.getGoodsId());
+                if (goodsDO == null || goodsDO.getDeleteStatus().equals(ComShopFlowerGoodsDO.deleteStatus.yes)
+                        || goodsDO.getDeleteStatus().equals(ComShopFlowerGoodsDO.status.recovery)) {
+                    orderGoodsVO.setGoodsStatus(ComShopFlowerOrderGoodsVO.goodsStatus.ysc);
+                } else if (goodsDO.getStatus().equals(ComShopFlowerGoodsDO.status.lower)) {
+                    orderGoodsVO.setGoodsStatus(ComShopFlowerOrderGoodsVO.goodsStatus.yxj);
+                } else if (goodsDO.getStatus().equals(ComShopFlowerGoodsDO.status.sell)) {
+                    orderGoodsVO.setGoodsStatus(ComShopFlowerOrderGoodsVO.goodsStatus.csz);
+                }
+
+                // 根据商品规格id查询商品规格
+                ComShopFlowerGoodsAttrDO goodsAttrDO = comShopFlowerGoodsAttrDAO.selectById(orderGoods.getGoodsAttrId());
+                if (goodsAttrDO != null) {
+                    orderGoodsVO.setGoodsAttr(goodsAttrDO.getGoodsAttrName());
+                }
+                comShopFlowerRefundOrderVO.setGoodsAttrName(orderGoodsDOList.get(0).getGoodsAttrName());
+                orderGoodsVOS.add(orderGoodsVO);
+                sbr.append(orderGoods.getGoodsName()).append(" ");
+            });
+        }
+        comShopFlowerRefundOrderVO.setOrderGoodsVOList(orderGoodsVOS);
+        comShopFlowerRefundOrderVO.setGoodsName(sbr.toString());
+
+        ConvenientMerchantVO shopStoreVO = new ConvenientMerchantVO();
+        // 查询店铺信息
+        ConvenientMerchantDO shopStoreDO = convenientMerchantDAO.selectById(comShopFlowerRefundOrderDO.getStoreId());
+        if (shopStoreDO != null) {
+            BeanUtils.copyProperties(shopStoreDO, shopStoreVO);
+        }
+        comShopFlowerRefundOrderVO.setConvenientMerchantVO(shopStoreVO);
+        return R.ok(comShopFlowerRefundOrderVO);
+    }
 }

--
Gitblit v1.7.1