package com.product.text.message.service;
|
|
import java.util.Date;
|
import java.util.regex.Matcher;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import com.product.common.lang.StringUtils;
|
import com.product.core.cache.DataPoolCacheImpl;
|
import com.product.core.config.Global;
|
import com.product.core.dao.BaseDao;
|
import com.product.core.entity.DataTableEntity;
|
import com.product.core.entity.FieldMetaEntity;
|
import com.product.core.entity.FieldSetEntity;
|
import com.product.core.exception.BaseException;
|
import com.product.core.spring.context.SpringMVCContextHolder;
|
import com.product.core.util.SystemParamReplace;
|
import com.product.text.message.config.CmnConst;
|
import com.product.text.message.config.SystemCode;
|
import com.product.text.message.util.HttpSmsSendUtil;
|
import com.product.module.sys.entity.SystemUser;
|
|
@Component
|
public class SendTextMessageService {
|
|
@Autowired
|
BaseDao baseDao;
|
|
/**
|
* 短信发送方式选择
|
* @param fseMailInfo 单个邮件信息
|
* @param attachment 附件
|
* @throws BaseException
|
*/
|
public String sendMethod(FieldSetEntity fseMessageInfo,String attachment) throws BaseException {
|
int trety=fseMessageInfo.getInteger(CmnConst.TREATY);
|
|
//判断短信配置是否完整
|
if (StringUtils.isEmpty(trety)) {
|
fseMessageInfo.setValue("", Global.getSystemConfig("spring.mail.host",""));
|
fseMessageInfo.setValue("", Global.getSystemConfig("spring.mail.port",""));
|
fseMessageInfo.setValue("", Global.getSystemConfig("spring.mail.username",""));
|
fseMessageInfo.setValue("", Global.getSystemConfig("spring.mail.password",""));
|
}else {
|
fseMessageInfo.setValue("send_mode", trety);
|
//判断第三方配置选择
|
if (trety==0) {
|
|
}else {
|
HttpSmsSendUtil.sendMsg(fseMessageInfo);
|
}
|
}
|
|
//创建人和创建时间
|
if (SpringMVCContextHolder.getCurrentUser()!=null) {
|
fseMessageInfo.setValue(CmnConst.CREATED_BY, SpringMVCContextHolder.getCurrentUser().getUser_id());
|
}
|
fseMessageInfo.setValue(CmnConst.CREATED_UTC_DATETIME,new Date());
|
return baseDao.add(fseMessageInfo);
|
}
|
|
/**
|
* 解析短信模板所有数据,根据模板数据动态发送短信
|
* @param templateCode 模板code
|
* @param fseData 表单业务数据
|
* @throws BaseException
|
*/
|
public String parseMessageTemplate(String templateCode,FieldSetEntity fseData) throws BaseException {
|
|
//获取当前操作人
|
SystemUser currentUser=SpringMVCContextHolder.getCurrentUser();
|
if(currentUser==null ) {
|
Object user=fseData.getObject("current_user");
|
if(user!=null) {
|
currentUser=(SystemUser )user;
|
}
|
}
|
String org_level_uuid=""; //当前操作人所属公司
|
if (currentUser!=null) {
|
org_level_uuid=currentUser.getOrg_level_uuid();
|
}
|
//对应模板信息
|
FieldSetEntity fseMessageTemplate=null;
|
if (StringUtils.isEmpty(org_level_uuid)) {
|
fseMessageTemplate=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_MESSAGE_TEMPLATE, "template_code=?", new Object[] {templateCode}, false);
|
}else {
|
fseMessageTemplate=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_MESSAGE_TEMPLATE, "org_level_uuid=? and template_code=?", new Object[] {org_level_uuid,templateCode}, false);
|
if (fseMessageTemplate==null) {
|
fseMessageTemplate=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_MESSAGE_TEMPLATE, "template_code=?", new Object[] {templateCode}, false);
|
}
|
}
|
|
if (fseMessageTemplate==null) {
|
throw new BaseException(SystemCode.SYSTEM_MESSAGE_TEMPLATE_NO_EXIST.getValue(), SystemCode.SYSTEM_MESSAGE_TEMPLATE_NO_EXIST.getText(),this.getClass(),"parseMessageTemplate");
|
}
|
|
//获取收信人
|
String message_address=fseMessageTemplate.getString("template_addressee");
|
//模板内容
|
String messageContent=fseMessageTemplate.getString(CmnConst.TEMPLATE_CONTENT);
|
|
message_address=SystemParamReplace.replaceParamText(message_address, fseData);
|
messageContent=SystemParamReplace.paramReplace(messageContent, fseData);
|
|
//解析收信人
|
DataTableEntity dtMessageInfo = parseStaffInfo(message_address,messageContent,org_level_uuid,currentUser);
|
|
//发送短信
|
if (dtMessageInfo!=null && dtMessageInfo.getRows()>0) {
|
for (int i = 0; i < dtMessageInfo.getRows(); i++) {
|
FieldSetEntity fseMessageInfo=dtMessageInfo.getData().get(i);
|
sendMethod(fseMessageInfo,null);
|
}
|
}
|
|
//返回信息
|
return SystemCode.SYSTEM_OPERATION_SUCCESS.getText();
|
}
|
|
/**
|
* 解析收信人
|
* @param message_address 收信人数据(user_id,邮箱,电话)
|
* @param message_content 国际化短信内容
|
* @param org_level_uuid 当前人所属公司
|
* @param currentUser 当前操作人
|
* @return
|
* @throws BaseException
|
*/
|
public DataTableEntity parseStaffInfo(String message_address,String message_content,String org_level_uuid,SystemUser currentUser) throws BaseException {
|
|
//创建收信人列表
|
DataTableEntity dtMessageInfo=new DataTableEntity();
|
FieldMetaEntity fseMate=new FieldMetaEntity();
|
fseMate.setTableName(new Object[]{CmnConst.PRODUCT_SYS_MESSAGE_SEND});
|
|
//解析模板收信人
|
String [] new_message_address_array=message_address.split(",");
|
if(new_message_address_array.length<1){
|
throw new BaseException(SystemCode.REPEATED_MESSAGE_ADDRESS_ERROR.getValue(), SystemCode.REPEATED_MESSAGE_ADDRESS_ERROR.getText(),this.getClass(), "parseStaffInfo");
|
}
|
|
FieldSetEntity fseUser=null; //用户表对象
|
FieldSetEntity fseCompanyMessage=null; //公司短信配置
|
|
//遍历收信人
|
for (int i = 0; i < new_message_address_array.length; i++) {
|
|
//创建单个收信人信息
|
FieldSetEntity fseMessageInfo=new FieldSetEntity();
|
fseMessageInfo.setMeta(fseMate);
|
|
String filter=""; //过滤条件
|
|
//获取单个收信人
|
String messageAddress=new_message_address_array[i];
|
int addressType=getAddressType(messageAddress);
|
|
if (addressType==0) { //邮箱账户
|
filter="user_primary_email=?";
|
} else if (addressType==1) { //手机号码
|
filter="tricode=?";
|
} else { //错误收信人
|
filter="user_id=?";
|
}
|
|
//在员工信息表中获取对应人员信息
|
fseUser=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_USERS, filter, new Object[] {messageAddress}, false);
|
|
if (fseUser==null) { //外部人员
|
if (addressType!=1) { //是否为电话号码
|
throw new BaseException("", "", this.getClass(), "");
|
}
|
}else { //内部人员
|
SystemUser systemUser = DataPoolCacheImpl.getInstance().getSessionUser(String.valueOf(fseUser.getString("user_id")));
|
org_level_uuid=systemUser.getOrg_level_uuid();
|
}
|
//查找公司短信配置信息
|
fseCompanyMessage=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_COMPANY_MESSAGE, "org_level_uuid=?", new Object[] {org_level_uuid}, false);
|
if (fseCompanyMessage!=null) {
|
fseMessageInfo.setValue(CmnConst.USER_ACCOUNT, fseCompanyMessage.getString(CmnConst.USER_ACCOUNT));
|
fseMessageInfo.setValue(CmnConst.SECRETKEY, fseCompanyMessage.getString(CmnConst.SECRETKEY));
|
fseMessageInfo.setValue(CmnConst.ECNAME, fseCompanyMessage.getString(CmnConst.ECNAME));
|
fseMessageInfo.setValue(CmnConst.SIGN, fseCompanyMessage.getString(CmnConst.SIGN));
|
fseMessageInfo.setValue(CmnConst.ADDSERIAL, fseCompanyMessage.getString(CmnConst.ADDSERIAL));
|
fseMessageInfo.setValue(CmnConst.URL, fseCompanyMessage.getString(CmnConst.URL));
|
fseMessageInfo.setValue(CmnConst.TREATY, fseCompanyMessage.getString(CmnConst.TREATY));
|
fseMessageInfo.setValue(CmnConst.SEND_USER, currentUser.getUser_id());
|
} else {
|
fseMessageInfo.setValue(CmnConst.SEND_USER, CmnConst.SYSADMIN);
|
}
|
fseCompanyMessage.setValue(CmnConst.TEMPLATE_CONTENT, message_content);
|
fseMessageInfo.setValue(CmnConst.RECEIVE_USER,fseUser.getString(CmnConst.USER_PHONE_NUMBER));
|
dtMessageInfo.addFieldSetEntity(fseMessageInfo);
|
}
|
return dtMessageInfo;
|
}
|
|
/**
|
* 获取收信人
|
* @param messageAddress
|
* @return
|
*/
|
public int getAddressType(String messageAddress) {
|
Matcher m = CmnConst.CHINA_EMAIL.matcher(messageAddress);
|
if (m.matches()) {
|
return 0;
|
}
|
m = CmnConst.CHINA_PHONE.matcher(messageAddress);
|
if (m.matches()) {
|
return 1;
|
}
|
return 2;
|
}
|
}
|