Browse Source

feat:“添加公司人员帮客户退款时发送短信提醒功能“

soobin 1 year ago
parent
commit
84ce813c5f

+ 29 - 8
src/main/java/com/szwl/controller/TOrderController.java

@@ -9,9 +9,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.huifu.bspay.sdk.opps.core.utils.DateTools;
 import com.szwl.constant.HuifuConstant;
+import com.szwl.constant.JoinpayConstant;
 import com.szwl.constant.ResponseCodesEnum;
 import com.szwl.feign.bean.PayFeign;
-import com.szwl.constant.JoinpayConstant;
 import com.szwl.model.bo.R;
 import com.szwl.model.bo.ResponseModel;
 import com.szwl.model.entity.*;
@@ -19,6 +19,7 @@ import com.szwl.service.*;
 import com.szwl.service.es.EsTOrderService;
 import com.szwl.util.IDGenerator;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -39,6 +40,7 @@ import java.util.*;
  */
 @RestController
 @RequestMapping("/tOrder")
+@Slf4j
 public class TOrderController {
 
     @Autowired
@@ -84,6 +86,8 @@ public class TOrderController {
         Integer refundNumber = torder.getProductNumber();
         // 退款明细:note
         String note = torder.getNote();
+        // 操作员类型:type
+        Integer type = torder.getType();
         String[] refundDetails = note.split(",");
         Map<String, Integer> refundMap = new HashMap<>();
         for (String refundDetail : refundDetails) {
@@ -105,6 +109,10 @@ public class TOrderController {
         }
         List<TOrderDetails> orderDetails = R.getDataIfSuccess(payFeign.getOrderDetailsBySn(order.getSn()));
         TEquipment equipment = tEquipmentService.getById(order.getEquipmentId());
+        String name = equipment.getName();
+        if (StringUtils.isEmpty(name)) {
+            name = equipment.getClientId().substring(equipment.getClientId().length() - 6);
+        }
         Long equipmentId = equipment.getId();
         if (order.getProductName().equals("280充值")) {
             return R.fail(ResponseCodesEnum.A0002,"订单不退款");
@@ -113,10 +121,6 @@ public class TOrderController {
             return R.fail(ResponseCodesEnum.A0002,"订单非支付状态");
         }
         //判断是不是直连微信退款
-//        if(StringUtils.isNotEmpty(order.getPayPlatform())&&order.getPayPlatform().equals("3")){
-//            String ifSuccess = R.getDataIfSuccess(payFeign.refund(order.getSn(),refusePrice));
-//            return R.ok(ifSuccess);
-//        }
 
         String notifyUrl = JoinpayConstant.Notify_Refund_Url;
 
@@ -135,7 +139,6 @@ public class TOrderController {
             sumPrice = sumPrice.add(order.getPrice()).setScale(2, RoundingMode.HALF_DOWN);
         }
 
-//        BigDecimal pri = new BigDecimal(order.getPrice().toString()).setScale(2, RoundingMode.HALF_DOWN);
         BigDecimal p8_MarketRefAmount = BigDecimal.ZERO;
         //获取分销  关联设备
         LambdaQueryWrapper<TProportion> wrapper = new LambdaQueryWrapper<>();
@@ -220,7 +223,6 @@ public class TOrderController {
                     payFeign.updateOrder(order);
                     // 修改订单明细
                     for (TOrderDetails orderDetail : orderDetails) {
-//                        String productNo = orderDetail.getProductNo();
                         String orderDetailId = orderDetail.getId();
                         Integer productNumber = refundMap.get(orderDetailId);
                         if(productNumber != null && orderDetail.getAmount().compareTo(BigDecimal.ZERO) > 0) {
@@ -233,6 +235,17 @@ public class TOrderController {
                             payFeign.updateOrderDetails(orderDetail);
                         }
                     }
+                    // 如果是公司人员操作退款,需要发送短信提醒客户
+                    if (type != null && type < 2) {
+                        TAdmin admin = tAdminService.getById(order.getAdminId());
+                        // 获取客户手机号
+                        String phone = admin.getPhone();
+                        if (StringUtils.isNotEmpty(phone)) {
+                            String result = orderService.sendRefundSms(order, phone, name);
+                            log.info("退款短信发送结果:{}", result);
+                        }
+                    }
+
                     return R.ok("申请退款成功");
                 }else {
                     return R.fail(refundData);
@@ -256,7 +269,6 @@ public class TOrderController {
                     }
                     // 修改订单明细
                     for (TOrderDetails orderDetail : orderDetails) {
-//                        String productNo = orderDetail.getProductNo();
                         String orderDetailId = orderDetail.getId();
                         Integer productNumber = refundMap.get(orderDetailId);
                         if(productNumber != null && orderDetail.getAmount().compareTo(BigDecimal.ZERO) > 0) {
@@ -269,6 +281,15 @@ public class TOrderController {
                             payFeign.updateOrderDetails(orderDetail);
                         }
                     }
+                    if (type != null && type < 2) {
+                        TAdmin admin = tAdminService.getById(order.getAdminId());
+                        // 获取客户手机号
+                        String phone = admin.getPhone();
+                        if (StringUtils.isNotEmpty(phone)) {
+                            String sendResult = orderService.sendRefundSms(order, phone, name);
+                            log.info("退款短信发送结果:{}", sendResult);
+                        }
+                    }
                     order.setRefundTrxNo(String.valueOf(refusePrice));
                     payFeign.updateOrder(order);
                     return R.ok("申请退款已成功");

+ 9 - 0
src/main/java/com/szwl/service/TOrderService.java

@@ -25,4 +25,13 @@ public interface TOrderService extends MyIService<TOrder> {
     Object initRefundSn(String clientId, int refundNumber);
 
     String refund(String sn, Object o, BigDecimal price,BigDecimal p8_MarketRefAmount,String s, String notifyUrl, String s1);
+
+    /**
+     * 发送退款短信
+     * @param order 订单信息
+     * @param phone 客户手机号
+     * @param equipmentName 设备名称
+     * @return 短信发送结果
+     */
+    String sendRefundSms(TOrder order, String phone, String equipmentName);
 }

+ 53 - 10
src/main/java/com/szwl/service/impl/TOrderServiceImpl.java

@@ -1,14 +1,16 @@
 package com.szwl.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.szwl.constant.JoinpayConstant;
-import com.szwl.model.entity.TOrder;
 import com.szwl.mapper.TOrderMapper;
+import com.szwl.model.entity.TOrder;
 import com.szwl.model.utils.HttpClientUtils;
+import com.szwl.model.utils.YunPianSms;
 import com.szwl.service.TOrderService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang.StringUtils;
 import org.apache.http.message.BasicNameValuePair;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -23,7 +25,7 @@ import java.util.*;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author wuhs
@@ -32,8 +34,12 @@ import java.util.*;
 @Slf4j
 @Service
 public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> implements TOrderService {
+
     @Autowired
     private TOrderMapper tOrderMapper;
+
+    private static final String appId = "07784f5fedb508046c841b391005b7de";
+
     @Override
     public Double getAreaPrice(Map<String, Object> params) {
         return tOrderMapper.getAreaPrice(params);
@@ -89,8 +95,9 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         }
         return "r" + number.toString();
     }
+
     @Override
-    public String refund(String sn , Object refundSn  , BigDecimal refundAmount , BigDecimal p8_MarketRefAmount , String refundReason , String notifyUrl , String altRefInfo ) {
+    public String refund(String sn, Object refundSn, BigDecimal refundAmount, BigDecimal p8MarketRefAmount, String refundReason, String notifyUrl, String altRefInfo) {
         String url = "https://www.joinpay.com/trade/refund.action";
 
         List<BasicNameValuePair> data = new ArrayList<BasicNameValuePair>();
@@ -101,9 +108,9 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         data.add(new BasicNameValuePair("p4_RefundAmount", refundAmount.setScale(2, RoundingMode.HALF_DOWN).toString()));
         data.add(new BasicNameValuePair("p5_RefundReason", refundReason));
         data.add(new BasicNameValuePair("p6_NotifyUrl", notifyUrl));
-        data.add(new BasicNameValuePair("p7_AltRefInfo", altRefInfo==null?null:altRefInfo.toString()));
-        if(p8_MarketRefAmount!=null){
-            data.add(new BasicNameValuePair("p8_MarketRefAmount", p8_MarketRefAmount.toString()));
+        data.add(new BasicNameValuePair("p7_AltRefInfo", altRefInfo == null ? null : altRefInfo.toString()));
+        if (p8MarketRefAmount != null) {
+            data.add(new BasicNameValuePair("p8_MarketRefAmount", p8MarketRefAmount.toString()));
         }
         // TODO: 2019-04-01  空值不参与签名!!!!!!!!!!!!!!!!!!
         String hmac = null;
@@ -122,13 +129,38 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         System.out.println(result);
         return resultJson.getString("rc_CodeMsg");
     }
+
+    @Override
+    public String sendRefundSms(TOrder order, String phone, String equipmentName) {
+        String result = "";
+        try {
+            String companyType = order.getCompanyType();
+            String sn = order.getSn();
+            String price = String.valueOf(order.getPrice());
+            Date payDate = order.getPayDate();
+            String pattern = "yyyy-MM-dd HH:mm:ss";
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+            String refundTime = simpleDateFormat.format(new Date());
+            String payTime = simpleDateFormat.format(payDate);
+            if (StringUtils.isNotEmpty(companyType) && "1".equals(companyType)) {
+                result = YunPianSms.sendSms(appId, getScMessage(sn, price, refundTime, equipmentName, payTime), phone);
+            } else {
+                result = YunPianSms.sendSms(appId, getSzMessage(sn, price, refundTime, equipmentName, payTime), phone);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return "发送短信失败";
+        }
+        return result;
+    }
+
     /**
      * 签名算法sign , hmac 签名
      *
      * @param data
      * @return
      */
-    public static String createHmacSign( List<BasicNameValuePair> data , String key) throws UnsupportedEncodingException {
+    public static String createHmacSign(List<BasicNameValuePair> data, String key) throws UnsupportedEncodingException {
 
         StringBuffer sb = new StringBuffer();
         Iterator<BasicNameValuePair> es = data.iterator();
@@ -142,7 +174,18 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         }
 
         sb.append(key);
-        String sign = DigestUtils.md5Hex(sb.toString());
-        return sign;
+        return DigestUtils.md5Hex(sb.toString());
+    }
+
+    private String getSzMessage(String sn, String price, String time, String equipmentName, String payTime) {
+        return "【申泽智能】您好,接到消费者投诉:机器做糖出现问题。已帮您退款:订单号:"
+                + sn + ",所属机器:" + equipmentName + ",价格:" + price + "元,订单支付时间:"
+                + payTime + ",订单退款时间:" + time + "。如有疑问,请联系营销经理咨询或者在微信群里咨询";
+    }
+
+    private String getScMessage(String sn, String price, String time, String equipmentName, String payTime) {
+        return "【七云科技】您好,接到消费者投诉:机器做糖出现问题。已帮您退款:订单号:"
+                + sn + ",所属机器:" + equipmentName + ",价格:" + price + "元,订单支付时间:"
+                + payTime + ",订单退款时间:" + time + "。如有疑问,请联系营销经理咨询或者在微信群里咨询。";
     }
 }