|  |  |  | 
|---|
|  |  |  | package com.matrix.system.shopXcx.action; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.matrix.component.wechat.externalInterface.common.WechatConfigure; | 
|---|
|  |  |  | 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.exception.GlobleException; | 
|---|
|  |  |  | import com.matrix.core.pojo.AjaxResult; | 
|---|
|  |  |  | import com.matrix.core.pojo.PaginationVO; | 
|---|
|  |  |  | import com.matrix.core.tools.*; | 
|---|
|  |  |  | import com.matrix.component.redis.RedisUserLoginUtils; | 
|---|
|  |  |  | 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.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil; | 
|---|
|  |  |  | 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.component.tools.WxTempLateMsgUtil; | 
|---|
|  |  |  | import com.matrix.system.shopXcx.api.service.WXShopOrderService; | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${wx_pay_debug_onoff}") | 
|---|
|  |  |  | private boolean isDebug; | 
|---|
|  |  |  | @Value("${evn}") | 
|---|
|  |  |  | private  String evn; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RabiitMqTemplate rabiitMqTemplate; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 列表显示 | 
|---|
|  |  |  | 
|---|
|  |  |  | modifyMap.put("handingTime", new Date()); | 
|---|
|  |  |  | int i = shopRefundRecordDao.updateByMap(modifyMap); | 
|---|
|  |  |  | if (i > 0) { | 
|---|
|  |  |  | //同意退款后发送微信提醒填写物流单号 | 
|---|
|  |  |  | ShopRefundRecord fundRecord = shopRefundRecordDao.selectById(shopRefundRecord.getId()); | 
|---|
|  |  |  | sendRefundLogisticsInfoToUser(fundRecord); | 
|---|
|  |  |  | return new AjaxResult(AjaxResult.STATUS_SUCCESS, "操作成功", "退款记录表"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | throw new GlobleException("操作失败"); | 
|---|
|  |  |  | 
|---|
|  |  |  | modifyOrder.put("id", record.getOrderId()); | 
|---|
|  |  |  | shopOrderDao.updateByMap(modifyOrder); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //退款拒绝后发送微信提醒 | 
|---|
|  |  |  | sendFailedRefundInfoToUser(record); | 
|---|
|  |  |  | if (i > 0) { | 
|---|
|  |  |  | return new AjaxResult(AjaxResult.STATUS_SUCCESS, "操作成功", "退款记录表"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | 
|---|
|  |  |  | if(flag){ | 
|---|
|  |  |  | //退款成功后发送微信提醒 | 
|---|
|  |  |  | ShopRefundRecord fundRecord = shopRefundRecordDao.selectById(oldShopRefundRecord.getId()); | 
|---|
|  |  |  | sendRefundInfoToUser(fundRecord); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | if(flag){ | 
|---|
|  |  |  | //退款成功后发送微信提醒 | 
|---|
|  |  |  | ShopRefundRecord fundRecord = shopRefundRecordDao.selectById(oldShopRefundRecord.getId()); | 
|---|
|  |  |  | sendRefundInfoToUser(fundRecord); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | if(flag){ | 
|---|
|  |  |  | //退款成功后发送微信提醒 | 
|---|
|  |  |  | ShopRefundRecord fundRecord = shopRefundRecordDao.selectById(Integer.valueOf(id)); | 
|---|
|  |  |  | sendRefundInfoToUser(fundRecord); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | refundRecordService.updateGroupBuyStatus(Long.parseLong(id)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | if(flag){ | 
|---|
|  |  |  | //退款成功后发送微信提醒 | 
|---|
|  |  |  | ShopRefundRecord fundRecord = shopRefundRecordDao.selectById(Integer.valueOf(id)); | 
|---|
|  |  |  | sendRefundInfoToUser(fundRecord); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | refundRecordService.updateGroupBuyStatus(Long.parseLong(id)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | int reMoney = b1.multiply(bb).intValue(); | 
|---|
|  |  |  | LogUtil.info("退款退款金额{}", reMoney); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //Double refundMoney = 0.1 * 100; | 
|---|
|  |  |  | //用户ID | 
|---|
|  |  |  | String userId = WechatConfigure.mchID; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (isDebug) { | 
|---|
|  |  |  | boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, 1, 1, userId); | 
|---|
|  |  |  | boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, 1, 1, null); | 
|---|
|  |  |  | flag = b; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | LogUtil.info("开始调用退款接口。。。退款编号为{}", refundNo); | 
|---|
|  |  |  | boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, orMoney, reMoney, userId); | 
|---|
|  |  |  | boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, orMoney, reMoney, null); | 
|---|
|  |  |  | flag = b; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | //退款成功后同时把优惠券退回到用户的账号中 | 
|---|
|  |  |  | if (shopOrder.getDiscountAmount() != null && shopOrder.getDiscountAmount().compareTo(BigDecimal.ZERO) == 0) { | 
|---|
|  |  |  | ShopCouponRecord shopCouponRecord = new ShopCouponRecord(); | 
|---|
|  |  |  | String userIds = shopRefundRecord.getUserId(); | 
|---|
|  |  |  | shopCouponRecord.setUserId(userIds); | 
|---|
|  |  |  | shopCouponRecord.setUserId(shopRefundRecord.getUserId()); | 
|---|
|  |  |  | shopCouponRecord.setOrderId(shopOrder.getId()); | 
|---|
|  |  |  | List<ShopCouponRecord> recordList = shopCouponRecordDao.selectByModel(shopCouponRecord); | 
|---|
|  |  |  | if (CollectionUtils.isNotEmpty(recordList)) { | 
|---|
|  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //退款成功后发送微信提醒 | 
|---|
|  |  |  | private int sendRefundInfoToUser(ShopRefundRecord shopRefundRecord) { | 
|---|
|  |  |  | ShopOrder order = shopOrderDao.selectById(shopRefundRecord.getOrderId()); | 
|---|
|  |  |  | if (order == null) { | 
|---|
|  |  |  | throw new GlobleException("没有找到需要退款的订单信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<String> msg = new ArrayList<>(); | 
|---|
|  |  |  | //退款说明 | 
|---|
|  |  |  | String refundExplain = "退款已经原路返回,具体到账时间可能会有1-3天延迟"; | 
|---|
|  |  |  | msg.add(order.getOrderNo()); | 
|---|
|  |  |  | msg.add(DateUtil.dateToString(shopRefundRecord.getRefundTime(),DateUtil.DATE_FORMAT_SS)); | 
|---|
|  |  |  | msg.add(refundExplain); | 
|---|
|  |  |  | msg.add("商品名称"); | 
|---|
|  |  |  | String formId = null; | 
|---|
|  |  |  | if(AppConstance.REFUND_GOODS.equals(shopRefundRecord.getRefundType()) && null != shopRefundRecord.getRefundTransactionNo()){ | 
|---|
|  |  |  | formId = shopRefundRecord.getRefundTransactionNo(); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | formId = order.getWxOrderNo().split("=")[1]; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String page = "pages/refunDetail/refunDetail?id=" + shopRefundRecord.getId() + "&&status=1" + "&&inform=1"; | 
|---|
|  |  |  | int res = WxTempLateMsgUtil.sendWxTemplateMsg(msg, order.getUserId(), | 
|---|
|  |  |  | page, WxTempLateMsgUtil.REFUND_SUCCESS, formId); | 
|---|
|  |  |  | return res; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //退款拒绝后发送微信提醒 | 
|---|
|  |  |  | private int sendFailedRefundInfoToUser(ShopRefundRecord shopRefundRecord) { | 
|---|
|  |  |  | ShopOrder order = shopOrderDao.selectById(shopRefundRecord.getOrderId()); | 
|---|
|  |  |  | if (order == null) { | 
|---|
|  |  |  | throw new GlobleException("没有找到拒绝退款的订单信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<String> msg = new ArrayList<>(); | 
|---|
|  |  |  | //退款说明 | 
|---|
|  |  |  | String remarks = "如有疑问请联系客服"; | 
|---|
|  |  |  | msg.add(order.getOrderNo()); | 
|---|
|  |  |  | msg.add("商品名称"); | 
|---|
|  |  |  | msg.add(shopRefundRecord.getRefundRefuseReason()); | 
|---|
|  |  |  | msg.add(shopRefundRecord.getRefundCause()); | 
|---|
|  |  |  | String formId = null; | 
|---|
|  |  |  | if(AppConstance.REFUND_GOODS .equals(shopRefundRecord.getRefundType()) && null != shopRefundRecord.getRefundTransactionNo()){ | 
|---|
|  |  |  | formId = shopRefundRecord.getRefundTransactionNo(); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | formId = order.getWxOrderNo().split("=")[1]; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String page = "pages/refunDetail/refunDetail?id=" + shopRefundRecord.getId() + "&&status=2" + "&&inform=1"; | 
|---|
|  |  |  | int res = WxTempLateMsgUtil.sendWxTemplateMsg(msg, order.getUserId(), | 
|---|
|  |  |  | page, WxTempLateMsgUtil.REFUND_FAILED, formId); | 
|---|
|  |  |  | return res; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //同意退款后发送微信提醒填写物流单号 | 
|---|
|  |  |  | private int sendRefundLogisticsInfoToUser(ShopRefundRecord shopRefundRecord) { | 
|---|
|  |  |  | ShopOrder order = shopOrderDao.selectById(shopRefundRecord.getOrderId()); | 
|---|
|  |  |  | if (order == null) { | 
|---|
|  |  |  | throw new GlobleException("没有找到发送微信提醒的订单信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<String> msg = new ArrayList<>(); | 
|---|
|  |  |  | //退款说明 | 
|---|
|  |  |  | String remarks = "申请退款已审核通过,请尽快填写退货物流信息"; | 
|---|
|  |  |  | msg.add(order.getOrderNo()); | 
|---|
|  |  |  | msg.add("商品名称"); | 
|---|
|  |  |  | msg.add("待退回"); | 
|---|
|  |  |  | msg.add(remarks); | 
|---|
|  |  |  | String formId = order.getWxOrderNo().split("=")[1]; | 
|---|
|  |  |  | String page = "pages/refunding/refunding?id=" + shopRefundRecord.getId() + "&&inform=1"; | 
|---|
|  |  |  | int res = WxTempLateMsgUtil.sendWxTemplateMsg(msg, order.getUserId(), | 
|---|
|  |  |  | page, WxTempLateMsgUtil.WRITE_LOGISTICS, formId); | 
|---|
|  |  |  | return res; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|