| package com.matrix.system.shopXcx.action; | 
|   | 
| import com.matrix.component.rabbitmq.RabiitMqTemplate; | 
| import com.matrix.component.redis.RedisUserLoginUtils; | 
| import com.matrix.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil; | 
| import com.matrix.core.anotations.RemoveRequestToken; | 
| import com.matrix.core.anotations.SaveRequestToken; | 
| import com.matrix.core.constance.MatrixConstance; | 
| import com.matrix.core.constance.SystemErrorCode; | 
| import com.matrix.core.constance.SystemMessageCode; | 
| import com.matrix.core.exception.GlobleException; | 
| import com.matrix.core.pojo.AjaxResult; | 
| import com.matrix.core.pojo.PaginationVO; | 
| import com.matrix.core.tools.LogUtil; | 
| import com.matrix.core.tools.ModelUtils; | 
| import com.matrix.core.tools.StringUtils; | 
| import com.matrix.core.tools.WebUtil; | 
| import com.matrix.system.common.bean.SysUsers; | 
| import com.matrix.system.common.constance.AppConstance; | 
| import com.matrix.system.common.dao.BusParameterSettingsDao; | 
| import com.matrix.system.hive.action.util.QueryUtil; | 
| import com.matrix.system.shopXcx.api.service.WXShopOrderService; | 
| import com.matrix.system.shopXcx.api.service.WxShopRefundRecordService; | 
| import com.matrix.system.shopXcx.bean.*; | 
| import com.matrix.system.shopXcx.dao.ShopCouponRecordDao; | 
| import com.matrix.system.shopXcx.dao.ShopDeliveryInfoDao; | 
| import com.matrix.system.shopXcx.dao.ShopOrderDao; | 
| import com.matrix.system.shopXcx.dao.ShopRefundRecordDao; | 
| import com.matrix.system.shopXcx.mqTask.MQTaskRouting; | 
| import org.apache.commons.collections.CollectionUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.beans.propertyeditors.CustomDateEditor; | 
| import org.springframework.stereotype.Controller; | 
| import org.springframework.transaction.annotation.Transactional; | 
| import org.springframework.web.bind.WebDataBinder; | 
| import org.springframework.web.bind.annotation.InitBinder; | 
| import org.springframework.web.bind.annotation.RequestMapping; | 
| import org.springframework.web.bind.annotation.ResponseBody; | 
| import org.springframework.web.servlet.ModelAndView; | 
|   | 
| import java.math.BigDecimal; | 
| import java.text.SimpleDateFormat; | 
| import java.util.*; | 
|   | 
| /** | 
|  * @description 退款记录表 | 
|  * @author jiangyouyao | 
|  * @date 2019-06-16 15:34 | 
|  */ | 
| @Controller | 
| @RequestMapping(value = "admin/shopRefundRecord") | 
| public class ShopRefundRecordAction { | 
|   | 
|     @Autowired | 
|     private ShopRefundRecordDao shopRefundRecordDao; | 
|     @Autowired | 
|     private ShopOrderDao shopOrderDao; | 
|     @Autowired | 
|     private WeixinServiceUtil weixinServiceUtil; | 
|     @Autowired | 
|     private WXShopOrderService wxShopOrderService; | 
|     @Autowired | 
|     private ShopDeliveryInfoDao shopDeliveryInfoDao; | 
|     @Autowired | 
|     private RedisUserLoginUtils redisUserLoginUtils; | 
|   | 
|     @Autowired | 
|     private ShopCouponRecordDao shopCouponRecordDao; | 
|   | 
|     @Autowired | 
|     private WxShopRefundRecordService refundRecordService; | 
|   | 
|     //记录编辑前的值Before_Edit_Value | 
|     public static final String BEV="ShopRefundRecord_BEV"; | 
|   | 
|     @Value("${wx_pay_debug_onoff}") | 
|     private boolean isDebug; | 
|     @Value("${evn}") | 
|     private  String evn; | 
|   | 
|     @Autowired | 
|     private RabiitMqTemplate rabiitMqTemplate; | 
|   | 
|     @Autowired | 
|     BusParameterSettingsDao parameterSettingsDao; | 
|   | 
|     /** | 
|      * 列表显示 | 
|      */ | 
|     @RequestMapping(value =  "/showList") | 
|     public @ResponseBody AjaxResult showList(ShopRefundRecord shopRefundRecord, PaginationVO pageVo) { | 
|         QueryUtil.setQueryLimitCom(shopRefundRecord); | 
|         List<ShopRefundRecord> dataList = shopRefundRecordDao.selectInPage(shopRefundRecord, pageVo); | 
|         AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, dataList, | 
|                 shopRefundRecordDao.selectTotalRecord(shopRefundRecord)); | 
|         return result; | 
|     } | 
|         | 
|     /** | 
|      * 新增 | 
|      */    | 
|     @RemoveRequestToken     | 
|        @RequestMapping(value =  "/addShopRefundRecord") | 
|     public @ResponseBody AjaxResult addShopRefundRecord(ShopRefundRecord shopRefundRecord) { | 
|         SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); | 
|         shopRefundRecord.setCreateBy(user.getSuName()); | 
|         shopRefundRecord.setUpdateBy(user.getSuName()); | 
|         shopRefundRecord.setCompanyId(user.getCompanyId()); | 
|          int i=shopRefundRecordDao.insert(shopRefundRecord); | 
|          if(i > 0){ | 
|              return new AjaxResult(AjaxResult.STATUS_SUCCESS, SystemMessageCode.ADD_SUCCES, "退款记录表"); | 
|          }else { | 
|             throw new GlobleException(SystemErrorCode.DATA_ADD_FAIL); | 
|         } | 
|     } | 
|   | 
|   | 
|     /** | 
|      * | 
|      * @Description (TODO 自定义数据绑定, 解决此问题) | 
|      * @param binder | 
|      */ | 
|     @InitBinder | 
|     public void initBinder(WebDataBinder binder) { | 
|         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); | 
|         dateFormat.setLenient(false); | 
|         binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false)); | 
|     } | 
|   | 
|     /** | 
|      * 同意退款按钮 | 
|      */ | 
|     @RequestMapping(value = "/agreeRefund") | 
|     public @ResponseBody AjaxResult agreeRefund(ShopRefundRecord shopRefundRecord) { | 
|         //将申请退款状态改为等待用户填写物流单号 | 
|         Map<String, Object> modifyMap = new HashMap<>(); | 
|         SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); | 
|         String suName = user.getSuName(); | 
|         modifyMap.put("id", shopRefundRecord.getId()); | 
|         modifyMap.put("refundStatus", AppConstance.WAIT_USER_WRITE_WAYBILLNO); | 
|         modifyMap.put("auditStatus", AppConstance.REFUND_AUDITED_PASS); | 
|         modifyMap.put("handler", suName); | 
|         modifyMap.put("handingTime", new Date()); | 
|         int i = shopRefundRecordDao.updateByMap(modifyMap); | 
|         if (i > 0) { | 
|             return new AjaxResult(AjaxResult.STATUS_SUCCESS, "操作成功", "退款记录表"); | 
|         } else { | 
|             throw new GlobleException("操作失败"); | 
|         } | 
|   | 
|     } | 
|   | 
|     /** | 
|      * 拒绝退款 | 
|      */ | 
|     @Transactional(rollbackFor = Exception.class) | 
|     @RequestMapping(value = "/refundRefuse") | 
|     public @ResponseBody AjaxResult refundRefuse(ShopRefundRecord shopRefundRecord) { | 
|         //将拒绝理由加入退款表,将审核状态改为审核不通过 | 
|         Map<String, Object> modifyMap = new HashMap<>(); | 
|         SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); | 
|         String suName = user.getSuName(); | 
|         modifyMap.put("id", shopRefundRecord.getId()); | 
|         modifyMap.put("refundRefuseReason", shopRefundRecord.getRefundRefuseReason()); | 
|         modifyMap.put("auditStatus", AppConstance.REFUND_AUDITED_FAILED); | 
|         modifyMap.put("handler", suName); | 
|         modifyMap.put("handingTime", new Date()); | 
|         int i = shopRefundRecordDao.updateByMap(modifyMap); | 
|         //将申请退款状态改为退款失败 | 
|         shopRefundRecordDao.updateRefundStatusByFail(shopRefundRecord.getId(), AppConstance.REFUND_FAIL); | 
|         //如果运单号不等于null就将订单状态改为待收货3,为null就改为待配送2 | 
|         ShopRefundRecord record = new ShopRefundRecord(); | 
|         record = shopRefundRecordDao.selectById(shopRefundRecord.getId()); | 
|         Map<String, Object> modifyOrder = new HashMap<>(); | 
|         //如果运单号不等于null就将订单状态改为待收货3,为null就改为待配送2 | 
|         ShopDeliveryInfo shopDeliveryInfo = shopDeliveryInfoDao.selectByOrderId(record.getOrderId()); | 
|         ShopOrder order = shopOrderDao.selectById(record.getOrderId()); | 
|         if(null != order){ | 
|             //如果是门店自提就将订单状态改为待收货3 | 
|             if(AppConstance.SHIPPING_METHOD_SELF .equals(order.getShippingMethod()) ){ | 
|                 modifyOrder.put("orderStatus", ShopOrder.ORDER_STATUS_WAIT_RECEIVE); | 
|             } | 
|             if(AppConstance.SHIPPING_METHOD_LOGISTING .equals(order.getShippingMethod()) && null != shopDeliveryInfo.getWaybillNo()){ | 
|                 modifyOrder.put("orderStatus", ShopOrder.ORDER_STATUS_WAIT_RECEIVE); | 
|             } | 
|             if(AppConstance.SHIPPING_METHOD_LOGISTING .equals(order.getShippingMethod()) && null == shopDeliveryInfo.getWaybillNo()){ | 
|                 modifyOrder.put("orderStatus", ShopOrder.ORDER_STATUS_WAIT_SEND); | 
|             } | 
|             modifyOrder.put("id", record.getOrderId()); | 
|             shopOrderDao.updateByMap(modifyOrder); | 
|         } | 
|         if (i > 0) { | 
|             return new AjaxResult(AjaxResult.STATUS_SUCCESS, "操作成功", "退款记录表"); | 
|         } else { | 
|             throw new GlobleException("拒绝失败"); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 确认退款(退款审核) | 
|      */ | 
|     @Transactional(rollbackFor = Exception.class) | 
|     @RemoveRequestToken | 
|     @RequestMapping(value =  "/modifyShopRefundRecord") | 
|     public @ResponseBody AjaxResult modifyShopRefundRecord(ShopRefundRecord newShopRefundRecord) { | 
|         if(null != newShopRefundRecord.getRefundRefuseReason()){ | 
|             newShopRefundRecord.setRefundRefuseReason(""); | 
|         } | 
|         ShopRefundRecord oldShopRefundRecord = WebUtil.getSessionAttribute(BEV); | 
|             int i = 0; | 
|             Map<String, Object> modifyMap = new HashMap<>(); | 
|             try { | 
|                 if (!ModelUtils.isModified(oldShopRefundRecord, newShopRefundRecord)) { | 
|                     i = MatrixConstance.DML_SUCCESSS; | 
|                 } | 
|                 modifyMap = ModelUtils.comparePojo2Map(oldShopRefundRecord, newShopRefundRecord); | 
|   | 
|             } catch (Exception e) { | 
|                 throw new GlobleException(SystemErrorCode.DATA_UPDATE_FAIL, e, newShopRefundRecord); | 
|             } | 
|             if (modifyMap.size() > 0) { | 
|                 //如果修改退款金额就判断是否超过了订单金额 | 
|                 ShopRefundRecord cord = new ShopRefundRecord(); | 
|                 cord = shopRefundRecordDao.selectById(oldShopRefundRecord.getId()); | 
|                 ShopOrder shopOrder = shopOrderDao.selectById(cord.getOrderId()); | 
|                 BigDecimal orderMoney = shopOrder.getOrderMoney(); | 
|                 if(null != modifyMap.get("refundMoney")){ | 
|                     BigDecimal refundMoney = new BigDecimal(modifyMap.get("refundMoney").toString()); | 
|                     if(refundMoney.compareTo( orderMoney)>0){ | 
|                         throw new GlobleException("退款金额不能大于订单金额"); | 
|                     } | 
|                 } | 
|   | 
|                 SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); | 
|                 String suName = user.getSuName(); | 
|                 modifyMap.put("id", oldShopRefundRecord.getId()); | 
|                 modifyMap.put("handler", suName); | 
|                 modifyMap.put("handingTime", new Date()); | 
|                 shopRefundRecordDao.updateByMap(modifyMap); | 
|   | 
|             } | 
|             Boolean flag = false; | 
|             ShopRefundRecord shopRefundRecord = new ShopRefundRecord(); | 
|             shopRefundRecord = shopRefundRecordDao.selectById(oldShopRefundRecord.getId()); | 
|             //仅退款 | 
|             if(AppConstance.REFUND .equals(shopRefundRecord.getRefundType())){ | 
|                 LogUtil.debug("进入确认退款(仅退款)流程。。。", shopRefundRecord.getId()); | 
|                     //满足条件进行退款 | 
|                     Boolean aBoolean = refundToUser(oldShopRefundRecord.getId().toString(), shopRefundRecord); | 
|                     flag = aBoolean; | 
|                     if(flag){ | 
|                         //退款成功后发送微信提醒 | 
|                         ShopRefundRecord fundRecord = shopRefundRecordDao.selectById(oldShopRefundRecord.getId()); | 
|   | 
|                     } | 
|                 } | 
|   | 
|             //退货退款 | 
|             if(AppConstance.REFUND_GOODS .equals(shopRefundRecord.getRefundType())){ | 
|                 //只有审核通过的数据才能进行退款 | 
|                 if(!AppConstance.REFUND_AUDITED_PASS .equals(shopRefundRecord.getAuditStatus())){ | 
|                     throw new GlobleException("此条数据"+shopRefundRecord.getRefundNo()+":只有审核通过的数据才能进行退款"); | 
|                 } | 
|                 //只有已收货的数据才能进行退款 | 
|                 if(!AppConstance.GOODS_RECEIVED .equals(shopRefundRecord.getRefundGoodsStatus())){ | 
|                     throw new GlobleException("此条数据"+shopRefundRecord.getRefundNo()+":只有已收货的数据才能进行退款"); | 
|                 } | 
|                 //退款成功的状态不能重复退款 | 
|                 if(AppConstance.REFUND_SUCCESS.equals(shopRefundRecord.getRefundStatus())){ | 
|                     throw new GlobleException("此条数据"+shopRefundRecord.getRefundNo()+":该条订单已退款成功,不能重复退款"); | 
|                 } | 
|                 //满足条件进行退款 | 
|                 Boolean aBoolean = refundToUser(oldShopRefundRecord.getId().toString(), shopRefundRecord); | 
|                 flag = aBoolean; | 
|                 if(flag){ | 
|                     //退款成功后发送微信提醒 | 
|                     ShopRefundRecord fundRecord = shopRefundRecordDao.selectById(oldShopRefundRecord.getId()); | 
|   | 
|                 } | 
|             } | 
|   | 
|             i = MatrixConstance.DML_SUCCESSS; | 
|             WebUtil.removeSessionAttribute(BEV); | 
|             if (flag) { | 
|                 return new AjaxResult(AjaxResult.STATUS_SUCCESS, "操作成功", "退款记录表"); | 
|             } else { | 
|                 throw new GlobleException("操作失败"); | 
|             } | 
|   | 
|     } | 
|      | 
|      | 
|        /** | 
|      * 进入修改界面 | 
|      */    | 
|     @SaveRequestToken | 
|        @RequestMapping(value =  "/editForm") | 
|     public ModelAndView editForm(Integer id) { | 
|         ShopRefundRecord shopRefundRecord = new ShopRefundRecord(); | 
|         List<ShopRefundRecordDetails> shopRefundRecordDetails = new ArrayList<ShopRefundRecordDetails>(); | 
|         ModelAndView modelAndView = new ModelAndView("admin/shop/shopRefundRecord-form"); | 
|         if (id != null) { | 
|             shopRefundRecord = shopRefundRecordDao.selectById(id); | 
|             Integer orderId = shopRefundRecord.getOrderId(); | 
|             shopRefundRecordDetails = shopRefundRecordDao.selectDetailsById(orderId); | 
|             WebUtil.setSessionAttribute(BEV, shopRefundRecord); | 
|         } | 
|         modelAndView.addObject("obj",shopRefundRecord); | 
|         modelAndView.addObject("objDetails",shopRefundRecordDetails); | 
|         return modelAndView; | 
|     } | 
|   | 
|     /** | 
|      * 进入退款详情界面 | 
|      */ | 
|     @SaveRequestToken | 
|     @RequestMapping(value =  "/detailsForm") | 
|     public ModelAndView detailsForm(Integer id) { | 
|         ShopRefundRecord shopRefundRecord = new ShopRefundRecord(); | 
|         List<ShopRefundRecordDetails> shopRefundRecordDetails = new ArrayList<ShopRefundRecordDetails>(); | 
|         ModelAndView modelAndView = new ModelAndView("admin/shop/shopRefundRecord-details"); | 
|         if (id != null) { | 
|             shopRefundRecord = shopRefundRecordDao.selectById(id); | 
|             Integer orderId = shopRefundRecord.getOrderId(); | 
|             shopRefundRecordDetails = shopRefundRecordDao.selectDetailsById(orderId); | 
|             WebUtil.setSessionAttribute(BEV, shopRefundRecord); | 
|         } | 
|         modelAndView.addObject("obj",shopRefundRecord); | 
|         modelAndView.addObject("objDetails",shopRefundRecordDetails); | 
|         return modelAndView; | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 删除 | 
|      */   | 
|      @RequestMapping(value = "/del") | 
|     public @ResponseBody AjaxResult del(String keys) { | 
|         List<String> ids = StringUtils.strToCollToString(keys, ","); | 
|         int i =  shopRefundRecordDao.deleteByIds(ids); | 
|         if (i > 0) { | 
|             return new AjaxResult(AjaxResult.STATUS_SUCCESS, SystemMessageCode.DELETE_SUCCES, i); | 
|         } else { | 
|             throw new GlobleException(SystemErrorCode.DATA_DELETE_FAIL); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 确认收货 | 
|      */ | 
|     @RequestMapping(value = "/confirmReceivingGoods") | 
|     public @ResponseBody AjaxResult confirmReceivingGoods(String keys) { | 
|         List<String> ids = StringUtils.strToCollToString(keys, ","); | 
|         ShopRefundRecord shopRefundRecord = new ShopRefundRecord(); | 
|         for(String id : ids){ | 
|             shopRefundRecord = shopRefundRecordDao.selectById(Integer.valueOf(id)); | 
|             if(!AppConstance.REFUND_GOODS .equals(shopRefundRecord.getRefundType())){ | 
|                 throw new GlobleException("此条数据"+shopRefundRecord.getRefundNo()+":不是退货退款类型,不能确认收货"); | 
|             } | 
|             if(!AppConstance.REFUND_AUDITED_PASS .equals(shopRefundRecord.getAuditStatus())){ | 
|                 throw new GlobleException("此条数据"+shopRefundRecord.getRefundNo()+":审核通过的数据才能确认收货"); | 
|             } | 
|         } | 
|         int i =  shopRefundRecordDao.updateRefundTypeByIds(ids, AppConstance.GOODS_RECEIVED); | 
|         if (i > 0) { | 
|             return new AjaxResult(AjaxResult.STATUS_SUCCESS, "成功收货", i); | 
|         } else { | 
|             throw new GlobleException(SystemErrorCode.DATA_UPDATE_FAIL); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 退款 | 
|      */ | 
|     @RequestMapping(value = "/confirmRefund") | 
|     public @ResponseBody AjaxResult confirmRefund(String keys) { | 
|         List<String> ids = StringUtils.strToCollToString(keys, ","); | 
|         ShopRefundRecord shopRefundRecord = new ShopRefundRecord(); | 
|         Boolean flag = false; | 
|         for(String id : ids){ | 
|             shopRefundRecord = shopRefundRecordDao.selectById(Integer.valueOf(id)); | 
|             //仅退款 | 
|             if(AppConstance.REFUND .equals(shopRefundRecord.getRefundType())){ | 
|                 if(!AppConstance.REFUND_AUDITED_PASS .equals(shopRefundRecord.getAuditStatus())){ | 
|                     throw new GlobleException("此条数据"+shopRefundRecord.getRefundNo()+":只有审核通过的数据才能进行退款"); | 
|                 } | 
|                 //退款成功的状态不能重复退款 | 
|                 if(AppConstance.REFUND_SUCCESS.equals(shopRefundRecord.getRefundStatus())){ | 
|                     throw new GlobleException("此条数据"+shopRefundRecord.getRefundNo()+":该条订单已退款成功,不能重复退款"); | 
|                 } | 
|                 else{ | 
|                     //满足条件进行退款 | 
|                     Boolean aBoolean = refundToUser(id, shopRefundRecord); | 
|                     flag = aBoolean; | 
|                     if(flag){ | 
|                         //退款成功后发送微信提醒 | 
|                         ShopRefundRecord fundRecord = shopRefundRecordDao.selectById(Integer.valueOf(id)); | 
|   | 
|                         refundRecordService.updateGroupBuyStatus(Long.parseLong(id)); | 
|                     } | 
|                 } | 
|             } | 
|   | 
|             //退货退款 | 
|             if(AppConstance.REFUND_GOODS.equals(shopRefundRecord.getRefundType())){ | 
|                 //只有审核通过的数据才能进行退款 | 
|                 if(AppConstance.REFUND_AUDITED_PASS.equals(shopRefundRecord.getAuditStatus())){ | 
|                     throw new GlobleException("此条数据"+shopRefundRecord.getRefundNo()+":只有审核通过的数据才能进行退款"); | 
|                 } | 
|                 //只有已收货的数据才能进行退款 | 
|                 if(AppConstance.GOODS_RECEIVED.equals(shopRefundRecord.getRefundGoodsStatus()) ){ | 
|                     throw new GlobleException("此条数据"+shopRefundRecord.getRefundNo()+":只有已收货的数据才能进行退款"); | 
|                 } | 
|                 //退款成功的状态不能重复退款 | 
|                 if(AppConstance.REFUND_SUCCESS.equals(shopRefundRecord.getRefundStatus()) ){ | 
|                     throw new GlobleException("此条数据"+shopRefundRecord.getRefundNo()+":该条订单已退款成功,不能重复退款"); | 
|                 } | 
|                 //满足条件进行退款 | 
|                 Boolean aBoolean = refundToUser(id, shopRefundRecord); | 
|                 flag = aBoolean; | 
|                 if(flag){ | 
|                     //退款成功后发送微信提醒 | 
|                     ShopRefundRecord fundRecord = shopRefundRecordDao.selectById(Integer.valueOf(id)); | 
|   | 
|                     refundRecordService.updateGroupBuyStatus(Long.parseLong(id)); | 
|                 } | 
|             } | 
|         } | 
|   | 
|         if (flag) { | 
|             return new AjaxResult(AjaxResult.STATUS_SUCCESS, "退款成功"); | 
|         } else { | 
|             throw new GlobleException("退款失败"); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 调用退款接口进行退款 | 
|      * @param id | 
|      * @param shopRefundRecord | 
|      */ | 
|     public Boolean refundToUser(String id,ShopRefundRecord shopRefundRecord){ | 
|         LogUtil.info("进入退款接口进行退款。。。", id); | 
|         Boolean flag = false; | 
|         //调用退款接口,将钱返给用户 | 
|         ShopOrder shopOrder = shopOrderDao.selectById(shopRefundRecord.getOrderId()); | 
|         if(null == shopOrder){ | 
|             throw new GlobleException("没有找到需要退款的订单信息"); | 
|         } | 
|         //商户订单编号(原订单编号) | 
|         String orderNo = shopOrder.getOrderNo(); | 
|         LogUtil.info("退款商户订单编号为{}", orderNo); | 
|         //退款编号 | 
|         String refundNo = shopRefundRecord.getRefundNo(); | 
|         LogUtil.info("退款退款编号为{}", refundNo); | 
|         //订单金额 | 
|         BigDecimal orderMoney = shopOrder.getOrderMoney(); | 
|         LogUtil.info("订单金额{}。", orderMoney); | 
|         BigDecimal a1 = new BigDecimal(orderMoney.toString()); | 
|         BigDecimal aa = new BigDecimal(100); | 
|         int orMoney = a1.multiply(aa).intValue(); | 
|         LogUtil.info("退款订单金额{}", orMoney); | 
|         //Double orderMoney = 0.1 * 100; | 
|         //退款金额 | 
|         BigDecimal refundMoney = shopRefundRecord.getRefundMoney(); | 
|         LogUtil.info("退款金额{}。", refundMoney); | 
|         BigDecimal b1 = new BigDecimal(refundMoney.toString()); | 
|         BigDecimal bb = new BigDecimal(100); | 
|         int reMoney = b1.multiply(bb).intValue(); | 
|         LogUtil.info("退款退款金额{}", reMoney); | 
|   | 
|   | 
|   | 
|         if (isDebug) { | 
|             boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, 1, 1, null); | 
|             flag = b; | 
|         } else { | 
|             LogUtil.info("开始调用退款接口。。。退款编号为{}", refundNo); | 
|             boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, orMoney, reMoney, null); | 
|             flag = b; | 
|         } | 
|   | 
|         if(flag){ | 
|             try{ | 
|                 LogUtil.debug("退款成功,开始修改退款表和订单表状态。。。", id); | 
|                 //将申请退款状态改为成功退款 | 
|                 shopRefundRecordDao.updateRefundStatusByIds(Integer.valueOf(id), AppConstance.REFUND_SUCCESS); | 
|                 //将审核状态改为审核通过 | 
|                 Map<String, Object> modifyRefund = new HashMap<>(); | 
|                 modifyRefund.put("id", Integer.valueOf(id)); | 
|                 modifyRefund.put("auditStatus", AppConstance.REFUND_AUDITED_PASS); | 
|                 shopRefundRecordDao.updateByMap(modifyRefund); | 
|                 //退款成功后同时把优惠券退回到用户的账号中 | 
|                 if (shopOrder.getDiscountAmount() != null && shopOrder.getDiscountAmount().compareTo(BigDecimal.ZERO) == 0) { | 
|                     ShopCouponRecord shopCouponRecord = new ShopCouponRecord(); | 
|                     shopCouponRecord.setUserId(shopRefundRecord.getUserId()); | 
|                     shopCouponRecord.setOrderId(shopOrder.getId()); | 
|                     List<ShopCouponRecord> recordList = shopCouponRecordDao.selectByModel(shopCouponRecord); | 
|                     if (CollectionUtils.isNotEmpty(recordList)) { | 
|                         for (ShopCouponRecord record : recordList) { | 
|                             Map<String, Object> modifyMap = new HashMap<>(); | 
|                             modifyMap.put("id", record.getId()); | 
|                             modifyMap.put("isUsing", AppConstance.MY_COUPON_NOT_USE); | 
|                             modifyMap.put("orderId", 0); | 
|                             shopCouponRecordDao.updateByMap(modifyMap); | 
|                         } | 
|                     } | 
|                 } | 
|   | 
|                 //退款成功后加库存减销量 | 
|                 shopRefundRecord = shopRefundRecordDao.selectById(Integer.valueOf(id)); | 
|                 Integer orderId = shopRefundRecord.getOrderId(); | 
|                 Integer orderStatus = shopOrder.getOrderStatus(); | 
|                 Integer refundType = shopRefundRecord.getRefundType(); | 
|                 //----当订单是物流、待配送、仅退款状态就不要加库存减销量 | 
|                 //物流、待收货、仅退款不要加库存减销量 | 
|                 ShopDeliveryInfo shopDeliveryInfo = shopDeliveryInfoDao.selectByOrderId(orderId); | 
|                 Boolean refundFlag = AppConstance.SHIPPING_METHOD_LOGISTING.equals("物流配送") && null != shopDeliveryInfo.getWaybillNo() && AppConstance.REFUND .equals(refundType) ; | 
|                 if(!refundFlag){ | 
|                     wxShopOrderService.updateStockAndVolumeById(orderId); | 
|                 } | 
|   | 
|                 //将订单表的订单状态改为退款成功,更新退款费用 | 
|                 Map<String, Object> modifyMap = new HashMap<>(); | 
|                 modifyMap.put("id", shopRefundRecord.getOrderId()); | 
|                 modifyMap.put("orderStatus", ShopOrder.ORDER_STATUS_MONEYBACK_SUCCESS); | 
|                 modifyMap.put("refundCharge", shopRefundRecord.getRefundMoney()); | 
|                 shopOrderDao.updateByMap(modifyMap); | 
|   | 
|   | 
|   | 
|   | 
|                 rabiitMqTemplate.sendMsg(MQTaskRouting.SHOP_ORDER_REFUND+evn,shopRefundRecord.getOrderId()+""); | 
|   | 
|   | 
|             }catch (Exception e){ | 
|                 LogUtil.debug("退款成功,修改退款表和订单表状态出错。。。", id); | 
|                 e.printStackTrace(); | 
|             } | 
|         } | 
|         return flag; | 
|     } | 
|   | 
|   | 
|   | 
| } |