Просмотр исходного кода

益寿缘-销售端-获客链接-增加通过电话号码发送短信的功能

cgp 2 дней назад
Родитель
Сommit
fe392445d3

+ 30 - 0
fs-company/src/main/java/com/fs/company/controller/qw/QwAcquisitionAssistantController.java

@@ -55,6 +55,22 @@ public class QwAcquisitionAssistantController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 发送获客链接短信
+     */
+    @GetMapping("/sendAcquisitionMessage/{id}/{phone}")
+    public AjaxResult sendAcquisitionMessage(@PathVariable Long id,@PathVariable String phone) {
+        try {
+            validatePhone( phone);
+            qwAcquisitionAssistantService.sendMessageAcquisition( phone,id);
+            return AjaxResult.success();
+        } catch (CustomException e) {
+            return AjaxResult.error(e.getMessage());
+        } catch (Exception e) {
+            return AjaxResult.error("系统异常:" + e.getMessage());
+        }
+    }
+
     /**
      * 从企微同步获客链接列表(全量)
      * 手动点击同步按钮时调用
@@ -247,4 +263,18 @@ public class QwAcquisitionAssistantController extends BaseController {
         }
         return qwCompany;
     }
+
+    /**
+     * 校验电话
+     */
+    private void validatePhone(String phone) {
+        if (StringUtils.isEmpty(phone)) {
+            throw new CustomException("发送短信的电话号码不能为空", 400);
+        }
+
+        // 支持手机号或固话
+        if (!phone.matches("^1[3-9]\\d{9}$") && !phone.matches("^\\d{3,4}-?\\d{7,8}$")) {
+            throw new CustomException("电话号码格式不正确,请输入正确的手机号或固定电话", 400);
+        }
+    }
 }

+ 3 - 0
fs-service/src/main/java/com/fs/common/service/ISmsService.java

@@ -1,6 +1,7 @@
 package com.fs.common.service;
 
 import com.fs.common.core.domain.R;
+import com.fs.company.domain.CompanySmsTemp;
 import com.fs.crm.param.SmsSendBatchParam;
 import com.fs.crm.param.SmsSendParam;
 import com.fs.crm.param.SmsSendUserParam;
@@ -26,4 +27,6 @@ public interface ISmsService
 
     R sendUrl(String phone, String content, String code,Long uuid,Integer smsIndex,String deleteKey);
 
+    R sendAcquisitionMessage(String phone, String content, CompanySmsTemp temp);
+
 }

+ 47 - 0
fs-service/src/main/java/com/fs/common/service/impl/SmsServiceImpl.java

@@ -839,6 +839,53 @@ public class SmsServiceImpl implements ISmsService
         return R.ok();
     }
 
+    @Override
+    public R sendAcquisitionMessage(String phone, String content, CompanySmsTemp temp) {
+        String urls = null;
+        SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.sms");
+        FsSmsConfig sms = JSON.parseObject(sysConfig.getConfigValue(), FsSmsConfig.class);
+            try {
+                urls = sms.getRfUrl2() + "sms?action=send&account=" + sms.getRfAccount2() + "&password=" + sms.getRfPassword2() + "&mobile=" + phone + "&content=" + URLEncoder.encode(content, "UTF-8") + "&extno=" + sms.getRfCode2() + "&rt=json";
+            } catch (UnsupportedEncodingException e) {
+                log.error("{}发送失败", phone, e);
+                return R.error("短信发送失败:" + e.getMessage());
+            }
+            String post = HttpRequest.get(urls)
+                    .execute().body();
+            SmsSendVO vo = JSONUtil.toBean(post, SmsSendVO.class);
+            if (vo.getStatus().equals(0)) {
+                for (SmsSendItemVO itemVO : vo.getList()) {
+                    if (itemVO.getResult().equals("0")) {
+                        CompanySmsLogs logs = new CompanySmsLogs();
+                        logs.setContent(content);
+                        logs.setTempCode(temp.getTempCode());
+                        logs.setTempId(temp.getTempId());
+                        logs.setPhone(phone);
+                        logs.setSendTime(new Date());
+                        logs.setStatus(0);
+                        logs.setType(sms.getType());
+                        logs.setMid(itemVO.getMid());
+                        int counts = logs.getContent().length() / 67;
+                        if (logs.getContent().length() % 67 > 0) {
+                            counts = counts + 1;
+                        }
+                        if (counts == 0) {
+                            counts = 1;
+                        }
+                        logs.setNumber(counts);
+                        smsLogsService.insertCompanySmsLogs(logs);
+                    }else{
+                        log.info("{}不发送短信-itemVO.getResult().equals(\"0\"):{}", phone, itemVO);
+                    }
+                }
+            }else{
+                log.info("{}不发送短信-vo.getStatus().equals(0):{}", phone, vo.getStatus());
+
+                return R.error("发送短信失败!");
+            }
+        return R.ok();
+    }
+
     @Override
     @Synchronized
     public R sendBatchSms(SmsSendBatchParam param) {

+ 9 - 0
fs-service/src/main/java/com/fs/qw/service/IQwAcquisitionAssistantService.java

@@ -23,6 +23,15 @@ public interface IQwAcquisitionAssistantService
      */
     public List<QwAcquisitionAssistant> selectQwAcquisitionAssistantList(QwAcquisitionAssistant qwAcquisitionAssistant);
 
+    /**
+     * 发送获客链接短信
+     *
+     * @param phone 待发送短信的手机号
+     * @param qwAcquisitionId 获客链接Id
+     * @return 结果
+     */
+    public void sendMessageAcquisition(String phone,Long qwAcquisitionId);
+
     /**
      * 从企微同步获客链接列表(全量拉取所有详情)
      * @param corpid 企业ID

+ 35 - 0
fs-service/src/main/java/com/fs/qw/service/impl/QwAcquisitionAssistantServiceImpl.java

@@ -4,8 +4,11 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.exception.CustomException;
+import com.fs.common.service.ISmsService;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.CompanySmsTemp;
+import com.fs.company.service.ICompanySmsTempService;
 import com.fs.fastgptApi.util.HttpUtil;
 import com.fs.qw.domain.QwAcquisitionAssistant;
 import com.fs.qw.domain.QwCompany;
@@ -46,6 +49,11 @@ public class QwAcquisitionAssistantServiceImpl implements IQwAcquisitionAssistan
     @Autowired
     private IQwCompanyService qwCompanyService;
 
+    @Autowired
+    private  ISmsService smsService;
+
+    @Autowired
+    private ICompanySmsTempService smsTempService;
 
     // 获客链接管理-企微的ACCESS_TOKEN的key
     private static final String QW_ACQUISITION_KEY_PREFIX = "qw:acquisition:key:";
@@ -54,6 +62,12 @@ public class QwAcquisitionAssistantServiceImpl implements IQwAcquisitionAssistan
     // 获客链接-页面参数-url的key
     private static final String QW_ACQUISITION_URL_KEY_PREFIX = "qw:acquisition:url:key:";
 
+    //获客链接短信模板code
+    private static final String  SOP_SMS_TEMPLATE_CODE = "获客链接短信模板";
+
+    //访问链接域名
+    private static final String  LINK_DOMAIN = "https://c.ysyd.top/";
+
     /**
      * 获取access_token并返回完整URL
      */
@@ -241,6 +255,27 @@ public class QwAcquisitionAssistantServiceImpl implements IQwAcquisitionAssistan
         return list;
     }
 
+    @Override
+    public void sendMessageAcquisition(String phone,Long qwAcquisitionId) {
+        log.info("发送获客链接短信,号码:{}", phone);
+        CompanySmsTemp temp = smsTempService.selectCompanySmsTempByCode(SOP_SMS_TEMPLATE_CODE);
+        if (temp == null) {
+            log.info("获客链接-未找到短信模板:{}", SOP_SMS_TEMPLATE_CODE);
+            throw new CustomException("获客链接-未找到短信模板");
+        }
+        String originalContent = temp.getContent();
+        QwAcquisitionAssistant acquisitionAssistant = qwAcquisitionAssistantMapper.selectQwAcquisitionAssistantById(qwAcquisitionId);
+        if (acquisitionAssistant == null){
+            log.info("获客链接-未找到获客链接id:{}", qwAcquisitionId);
+            throw new CustomException("获客链接-未找到获客链接信息");
+        }
+        String replaceText=LINK_DOMAIN+acquisitionAssistant.getPageParam();
+        String content = originalContent
+                .replace("${sms.friendLink}", replaceText);
+        log.info("短信内容替换完成,原模板:{},替换后:{}", originalContent, content);
+        smsService.sendAcquisitionMessage(phone,content,temp);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String syncListFromQw(String corpid, String corpsecret) {