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; } }