liujiankang 6 роки тому
батько
коміт
be378b90af

+ 47 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/order/SmsTemplateInfo.java

@@ -0,0 +1,47 @@
+package com.iamberry.rst.core.order;
+
+import java.io.Serializable;
+
+/**
+ * 短信模板表
+ * Created by Administrator on 2019/3/21.
+ */
+public class SmsTemplateInfo implements Serializable{
+    private static final long serialVersionUID = 2475013638981240118L;
+    private Integer smsTemplateId;
+    private Integer smsSignatureId;
+    private String smsTemplateInfo;
+    private String smsTemplateDesc;
+
+    public Integer getSmsTemplateId() {
+        return smsTemplateId;
+    }
+
+    public void setSmsTemplateId(Integer smsTemplateId) {
+        this.smsTemplateId = smsTemplateId;
+    }
+
+    public Integer getSmsSignatureId() {
+        return smsSignatureId;
+    }
+
+    public void setSmsSignatureId(Integer smsSignatureId) {
+        this.smsSignatureId = smsSignatureId;
+    }
+
+    public String getSmsTemplateInfo() {
+        return smsTemplateInfo;
+    }
+
+    public void setSmsTemplateInfo(String smsTemplateInfo) {
+        this.smsTemplateInfo = smsTemplateInfo;
+    }
+
+    public String getSmsTemplateDesc() {
+        return smsTemplateDesc;
+    }
+
+    public void setSmsTemplateDesc(String smsTemplateDesc) {
+        this.smsTemplateDesc = smsTemplateDesc;
+    }
+}

+ 37 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/order/smsSignatureInfo.java

@@ -0,0 +1,37 @@
+package com.iamberry.rst.core.order;
+
+import java.io.Serializable;
+
+/**
+ * Created by Administrator on 2019/3/21.
+ */
+public class SmsSignatureInfo implements Serializable {
+    private static final long serialVersionUID = -1791768785944107991L;
+    private Integer smsSignatureId;
+    private String smsSignatureInfo;
+    private String smsSignatureDesc;
+
+    public Integer getSmsSignatureId() {
+        return smsSignatureId;
+    }
+
+    public void setSmsSignatureId(Integer smsSignatureId) {
+        this.smsSignatureId = smsSignatureId;
+    }
+
+    public String getSmsSignatureInfo() {
+        return smsSignatureInfo;
+    }
+
+    public void setSmsSignatureInfo(String smsSignatureInfo) {
+        this.smsSignatureInfo = smsSignatureInfo;
+    }
+
+    public String getSmsSignatureDesc() {
+        return smsSignatureDesc;
+    }
+
+    public void setSmsSignatureDesc(String smsSignatureDesc) {
+        this.smsSignatureDesc = smsSignatureDesc;
+    }
+}

+ 10 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/cm/SalesOrderService.java

@@ -437,4 +437,14 @@ public interface SalesOrderService {
     Integer updateOrderItemReturnNum(SalesOrderItem salesOrderItem);
 
 
+
+    /**
+     * 查询售后短信签名
+     */
+    List<SmsSignatureInfo> listSmsSignatureInfo(SmsSignatureInfo smsSignatureInfo);
+
+    /**
+     * 查询售后短信模板
+     */
+    List<SmsTemplateInfo> listSmsTemplateInfo(SmsTemplateInfo smsTemplateInfo);
 }

+ 11 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java

@@ -1211,4 +1211,15 @@ public class SalesOrderServiceImpl implements SalesOrderService {
     public Integer updateOrderItemReturnNum(SalesOrderItem salesOrderItem) {
         return salesOrderMapper.updateOrderItemReturnNum(salesOrderItem);
     }
+
+    @Override
+    public List<SmsSignatureInfo> listSmsSignatureInfo(SmsSignatureInfo smsSignatureInfo) {
+        return salesOrderMapper.listSmsSignatureInfo(smsSignatureInfo);
+    }
+
+    @Override
+    public List<SmsTemplateInfo> listSmsTemplateInfo(SmsTemplateInfo smsTemplateInfo) {
+        return salesOrderMapper.listSmsTemplateInfo(smsTemplateInfo);
+    }
+
 }

+ 10 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/SalesOrderMapper.java

@@ -360,4 +360,14 @@ public interface SalesOrderMapper {
      * 修改订单项退货数据
      */
     Integer updateOrderItemReturnNum(SalesOrderItem salesOrderItem);
+
+    /**
+     * 查询售后短信签名
+     */
+    List<SmsSignatureInfo> listSmsSignatureInfo(SmsSignatureInfo smsSignatureInfo);
+
+    /**
+     * 查询售后短信模板
+     */
+    List<SmsTemplateInfo> listSmsTemplateInfo(SmsTemplateInfo smsTemplateInfo);
 }

+ 15 - 3
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/salesOrderMapper.xml

@@ -1691,8 +1691,20 @@
         ORDER BY soi.sales_create_time DESC
     </select>
 
-    <select id="getAfterrulesInfo" parameterType="Integer" resultType="AfterrulesInfo">
-        select * from tb_rst_afterrules_info
-        WHERE store_id = #{storeId}
+    <select id="listSmsSignatureInfo" parameterType="SmsSignatureInfo" resultType="SmsSignatureInfo">
+        select * from tb_rst_smsSignature_info
+        <where>
+            <if test="smsSignatureId != null and smsSignatureId != '' ">
+                smsSignature_id = #{smsSignatureId}
+            </if>
+        </where>
+    </select>
+    <select id="listSmsTemplateInfo" parameterType="SmsTemplateInfo" resultType="SmsTemplateInfo">
+        SELECT * from tb_rst_smsTemplate_info
+        <where>
+            <if test="smsSignatureId != null and smsSignatureId != '' ">
+                smsSignature_id = #{smsSignatureId}
+            </if>
+        </where>
     </select>
 </mapper>

+ 79 - 9
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminSalesOrderController.java

@@ -1,14 +1,7 @@
 package com.iamberry.rst.controllers.order;
 
-import com.iamberry.rst.core.cm.CompanyInfo;
-import com.iamberry.rst.core.cm.SalesOrder;
-import com.iamberry.rst.core.cm.SalesOrderItem;
-import com.iamberry.rst.core.cm.StoreInfo;
-import com.iamberry.rst.core.order.AfterrulesInfo;
-import com.iamberry.rst.core.order.OrderBatch;
-import com.iamberry.rst.core.order.OrderCorrectInfo;
-import com.iamberry.rst.core.order.ProductColor;
-import com.iamberry.rst.core.order.ProductType;
+import com.iamberry.rst.core.cm.*;
+import com.iamberry.rst.core.order.*;
 import com.iamberry.rst.core.page.PagedResult;
 import com.iamberry.rst.core.sys.Admin;
 import com.iamberry.rst.core.tools.LogisticsInfo;
@@ -19,10 +12,14 @@ import com.iamberry.rst.faces.order.EfastOrderService;
 import com.iamberry.rst.faces.order.LogisticsInfoService;
 import com.iamberry.rst.faces.order.OrderBatchService;
 import com.iamberry.rst.faces.product.ProductService;
+import com.iamberry.rst.faces.sms.SmsService;
+import com.iamberry.rst.util.SmsConfig;
 import com.iamberry.rst.utils.*;
+import com.iamberry.wechat.tools.NameUtils;
 import com.iamberry.wechat.tools.ResponseJson;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
+import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang.StringUtils;
 import org.apache.poi.hssf.usermodel.*;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -41,6 +38,7 @@ import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
+import java.text.MessageFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -72,6 +70,8 @@ public class AdminSalesOrderController {
     private LogisticsInfoService logisticsInfoService;
     @Autowired
     private KuaiDi100 kuaidi100;
+    @Autowired
+    private SmsService smsService;
     /**
      * 分页查询订单列表信息
      * @param request
@@ -1550,4 +1550,74 @@ public class AdminSalesOrderController {
         mv.addObject("afterrulesInfo", afterrulesInfo);
         return mv;
     }
+
+    /**
+     * 进入发送售后短信页面
+     * @param request
+     * @return
+     */
+    @RequestMapping("/to_sendAfterSalesSms")
+    public ModelAndView to_sendAfterSalesSms(HttpServletRequest request){
+        ModelAndView mv = new ModelAndView("order/salesOrder/send_sms");
+        //查询所有短信签名
+        List<SmsSignatureInfo> signatures = salesOrderService.listSmsSignatureInfo(null);
+        //查询所有短信模板
+        SmsTemplateInfo smsTemplateInfo = new SmsTemplateInfo();
+        smsTemplateInfo.setSmsSignatureId(signatures.get(0).getSmsSignatureId());
+        List<SmsTemplateInfo> templates = salesOrderService.listSmsTemplateInfo(smsTemplateInfo);
+        mv.addObject("signatures",signatures);
+        mv.addObject("templates",templates);
+        mv.addObject("templatesOne",templates.get(0).getSmsTemplateInfo());
+        mv.addObject("templatesDesc",templates.get(0).getSmsTemplateDesc());
+        return mv;
+    }
+
+    /**
+     * 根据签名id查询模板
+     * @param request
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping("/get_templates")
+    public ResponseJson getTemplates(HttpServletRequest request,Integer smsSignatureId) throws Exception {
+        ResponseJson responseJson = ResponseJson.getSUCCESS();
+        if (smsSignatureId == null) {
+            return new ResponseJson(500, "未获取到参数!", 500);
+        }
+        //查询签名
+        SmsTemplateInfo smsTemplateInfo = new SmsTemplateInfo();
+        smsTemplateInfo.setSmsSignatureId(smsSignatureId);
+        List<SmsTemplateInfo> templates = salesOrderService.listSmsTemplateInfo(smsTemplateInfo);
+        responseJson.addResponseKeyValue("templates",templates);
+        responseJson.addResponseKeyValue("templatesOne",templates.get(0).getSmsTemplateInfo());
+        responseJson.addResponseKeyValue("templatesDesc",templates.get(0).getSmsTemplateDesc());
+        return responseJson;
+
+    }
+
+    /**
+     * 发送短信
+     *
+     * @param request
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping("/send_afterSales_sms")
+    public ResponseJson sendAfterSalesSms(HttpServletRequest request, SmsSignatureInfo smsSignatureInfo,SmsTemplateInfo smsTemplateInfo,String phone) throws Exception {
+        if (smsSignatureInfo.getSmsSignatureId() == null || smsTemplateInfo.getSmsTemplateInfo() == null|| phone == null) {
+            return new ResponseJson(500, "未获取到参数!", 500);
+        }
+        //查询签名
+        List<SmsSignatureInfo>  listEmsSignatureInfo = salesOrderService.listSmsSignatureInfo(smsSignatureInfo);
+        StringBuffer text = new StringBuffer(listEmsSignatureInfo.get(0).getSmsSignatureInfo());
+        text.append(smsTemplateInfo.getSmsTemplateInfo());
+        logger.info("给 " + phone + " 手机用户发送售后短信:" + text);
+        String result = smsService.sendOtherCMS(phone.trim(), text.toString());
+
+        if ("SUCCESS".equals(result)) {
+            return new ResponseJson(200, "发送短信成功!", 200);
+        } else {
+            return new ResponseJson(500, "发送短信失败,失败原因:" + result, 500);
+        }
+    }
 }

+ 3 - 0
watero-rst-web/src/main/resources/watero-rst-orm.xml

@@ -196,6 +196,9 @@
         <!-- scm - 上朵定制 -->
         <typeAlias type="com.iamberry.rst.core.scm.ScmOrderInfo" alias="ScmOrderInfo"/>
         <typeAlias type="com.iamberry.rst.core.scm.ScmOrderItem" alias="ScmOrderItem"/>
+
+		<typeAlias type="com.iamberry.rst.core.order.SmsTemplateInfo" alias="SmsTemplateInfo"/>
+		<typeAlias type="com.iamberry.rst.core.order.SmsSignatureInfo" alias="SmsSignatureInfo"/>
 	</typeAliases>
 	<!-- PageHelper -->
 	<plugins>

+ 5 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/sales_order_list.ftl

@@ -111,6 +111,7 @@
                 <input type="text" class="my-input trim_input"  style="margin-top: -3px;width:118px;margin-right: 0px;height: 28px;padding: 0px;" value="${salesOrder.salesAddressInfo!}" placeholder="收货人地址" name="salesAddressInfo" id="salesAddressInfo">
                 <button type="submit" class="btn" style="background: #32a3d8;color: #fff;-webkit-transform:translateY(-5%);height: 30px;" id="">搜索</button>
                 <button type="button" class="btn" style="background: #32a3d8;color: #fff;-webkit-transform:translateY(-5%);height: 30px;" id="order_excel">下载Efast格式订单</button>
+                <button type="button" class="btn" style="background: #32a3d8;color: #fff;-webkit-transform:translateY(-5%);height: 30px;" id="send_sms" onclick="sendEms();">发送售后短信</button>
             </div>
         </form>
     </div>
@@ -899,6 +900,10 @@ function isConfirm(salesOrderIds,isSplit) {
         function getAfterrulesInfo(salesId){
             layer_show("查看售后信息","${path}/admin/salesOrder/getAfterrulesInfo?salesId="+salesId,'570','450');
         }
+
+        function sendEms(){
+            layer_show("发送短信","${path}/admin/salesOrder/to_sendAfterSalesSms",'670','550');
+        }
     </script>
 </body>
 </html>

+ 169 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/send_sms.ftl

@@ -0,0 +1,169 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="renderer" content="webkit|ie-comp|ie-stand">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
+    <meta http-equiv="Cache-Control" content="no-siteapp"/>
+    <#include "/base/add_base.ftl">
+
+    <style>
+        .tit{position: relative;text-align: left;font-size: 16px;padding-left: 10px;}
+        .tit:after{content: '';position: absolute;left: 0;top: 20%;height: 60%;width: 3px;background-color: #32a3d8;}
+        .tit-2{position: relative;text-align: left;font-size: 16px;padding-left: 10px;}
+        .tit-2:after{content: '';position: absolute;left: 0;top: 20%;height: 60%;width: 3px;background-color: #32a3d8;}
+        #province select{margin-right:10px; width:100px;height: 31px;-webkit-appearance:none !important;appearance:none;background: url(${path}/common/images/cm/select-1.png) right center no-repeat;background-size: auto 100%;padding-left:3px;padding-right: 25px;}
+        .ac_results li a {white-space: nowrap;text-decoration:none;display:block;color:#05a;padding:1px 3px}
+        .ac_results li {border:1px solid #fff}
+        .ac_results li a span {float:right}
+        .select-box{background: url(${path}/common/images/cm/select-1.png) right center no-repeat;background-size: auto 100%;}
+        .select-box select{-webkit-appearance:none !important;background-color: transparent; appearance:none;padding-right: 25px;}
+        .dalog-ask{position: absolute;left:60%;top:0;-webkit-transform: translateY(-30%);transform: translateY(-30%);display: none;background-color: #fff;z-index: 10;}
+        .tag{ width:300px; min-height:300px; border:1px solid #32a3d8; position:relative;background-color: #fff;line-height: 1.5;padding: 10px 12px;}
+        .tag em{display:block; border-width:15px; position:absolute; top:30%; left:-30px;border-style:solid dashed dashed; border-color:transparent  #32a3d8 transparent transparent;font-size:0; line-height:0;}
+        .time-line-list{list-style: none;width: 100%;margin-left: -20px;}
+        .time-line-list>li{position: relative;float: left; text-align: center;width: 100px;overflow: hidden;white-space: nowrap;word-break: break-all;padding: 2px 0;}
+        .time-line-list .number{display: inline-block; padding: 2px; background: #32a3d8;border: 2px solid #fff;box-shadow:0 0 0 1px #32a3d8;width: 20px;height: 20px;color: #fff;line-height: 20px;border-radius: 50%;}
+        .time-line-list>li:before{content:'';position: absolute;height: 1px;width: 30%;right:0;top: 15px; background-color: #32a3d8;}
+        .time-line-list>li:after{content: '';position: absolute;height: 1px;width: 30%;left: 0;top: 15px;background:#32a3d8;}
+        .time-line-list>li:first-child:after,.time-line-list>li:last-child:before{display: none;}
+        .time-line-list .arrow{border-width:7px; position:absolute; left:25%; top:9px;border-style:solid dashed dashed; border-color:transparent  transparent  transparent #32a3d8;font-size:0; line-height:0;}
+        .time-line-list>li:first-child .arrow{display: none;}
+        .table-bg th{background-color: #e2f6ff;}
+        .update-parts>span{margin-right: 10px;padding: 3px 4px;background-color: #effaff;border: 1px solid #32a3d8;}
+        .msg-phone{height: 35px;line-height: 35px;}
+        .col-sm-1{width: 150px;}
+
+        .all_down{text-decoration: underline;color: #00c;}
+    </style>
+    <title>订单列表 - 发送短信 - RST</title>
+</head>
+<body>
+<article class="page-container" style="padding: 10px;">
+    <div class="pd-20 cl">
+        <form action="${path}/admin/salesOrder/add_salesOrder" method="post" class="form form-horizontal" id="form-order-add"  onkeydown="if(event.keyCode==13)return false;">
+
+            <div class="row cl">
+                <label class="form-label col-3">
+                    <div class="tit-2">发送短信</div>
+                </label>
+                <div class="formControls col-9">
+                </div>
+            </div>
+            <div class="row cl" id="">
+                <label class="form-label col-1 col-sm-1" style="float: left;text-align: right;">客户手机:</label>
+                <div class="formControls col-9 col-sm-9" style="float: left;">
+                    <input type="text" class="input-text" value="" placeholder="填写客户手机" id="phone" name="phone" >
+                </div>
+            </div>
+            <div class="row cl" style="">
+                <label class="form-label col-1 col-sm-1" style="float: left;text-align: right;">短信签名:</label>
+                <div class="formControls col-9 col-sm-9" style="float: left;">
+                    <span class="select-box">
+                        <select class="select" id="smsSignatureId" name="smsSignatureId" >
+                        <#list signatures as signature>
+                            <option value="${signature.smsSignatureId}" >${signature.smsSignatureInfo}</option>
+                        </#list>
+                        </select>
+				    </span>
+                </div>
+            </div>
+            <div class="row cl">
+                <label class="form-label col-1 col-sm-1"style="float: left;text-align: right;">短信模板:</label>
+                <div class="formControls col-9 col-sm-9" style="float: left;">
+                    <span class="select-box">
+                        <select class="select" id="templateId">
+                            <#list templates as template>
+                                <option value="${template.smsTemplateId}" >${template.smsTemplateInfo}</option>
+                            </#list>
+                        </select>
+				    </span>
+                    <span id="spanid" style="color: #D6E6DA">${templatesOne!''}</span>
+                </div>
+            </div>
+            <div class="row cl" id="" style="">
+                <label class="form-label col-1 col-sm-1"style="float: left;text-align: right;">短信内容:</label>
+                <div class="formControls col-9 col-sm-9"style="float: left;">
+                    <textarea name="smsTemplateInfo" id="smsTemplateInfo" cols="" rows="2"  class="textarea">${templatesOne!''}</textarea>
+                    <span id="spanidtwo" style="color: #D6E6DA">${templatesDesc!''}</span>
+                </div>
+            </div>
+            <div class="row cl" id="" style="">
+                <label class="form-label col-1 col-sm-1"style="float: left;text-align: right;"></label>
+                <div class="formControls col-5 col-sm-5"style="float: left;">
+                    <button class="btn btn-block btn-primary size-XL" type="button" onclick="send();">确认发送</button>
+                </div>
+            </div>
+        </form>
+    </div>
+</article>
+
+<script type="text/javascript">
+    var url_path = "${path}";
+</script>
+<#--时间控件-->
+<script type="text/javascript" src="${path}/common/lib/My97DatePicker/4.8/WdatePicker.js"></script>
+
+
+<script type="text/javascript">
+    $("#smsSignatureId").change(function (){
+        $.ajax({
+            type:'POST',
+            url: '${path}/admin/salesOrder/get_templates',
+            data:{
+                "smsSignatureId" : $("#smsSignatureId").val()
+            },
+            dataType: 'json',
+            success:function(res) {
+                if(res.resultCode == 200 && res.returnCode == 200){
+                    $("#templateId").empty();
+                    $(res.returnMsg.templates).each(function (){
+                        $("#templateId").append("<option value='"+ this.smsTemplateId +"'>"+ this.smsTemplateInfo +"</option>");
+
+                    });
+                    $("#spanid").html(res.returnMsg.templatesOne);
+                    $("#smsTemplateInfo").html(res.returnMsg.templatesOne);
+                    $("#smsTemplateInfo").val(res.returnMsg.templatesOne);
+                    $("#spanidtwo").html(res.returnMsg.templatesDesc);
+                }
+            }
+        });
+    });
+
+    function send() {
+       var phone = $("#phone").val();
+       var smsSignatureId = $("#smsSignatureId").val();
+       var smsTemplateInfo = $("#smsTemplateInfo").val();
+        //手机验证
+        if(phone == null || phone.length > 20){
+            layer.msg("手机号不能为空或格式错误",{icon: 5,time:3000});
+            return;
+        }
+        if(smsTemplateInfo == null){
+            layer.msg("短信模板不能为空",{icon: 5,time:3000});
+            return;
+        }
+        $.ajax({
+            type:'POST',
+            url: '${path}/admin/salesOrder/send_afterSales_sms',
+            data:{
+                "phone" : phone,
+                "smsSignatureId" : smsSignatureId,
+                "smsTemplateInfo" : smsTemplateInfo
+            },
+            dataType: 'json',
+            success:function(res) {
+                if(res.resultCode == 200 && res.returnCode == 200){
+                    layer.alert("发送成功!");
+                }else{
+                    layer.alert("发送失败!");
+                }
+            }
+        });
+    }
+
+</script>
+</body>
+</html>