package com.sp2p.service; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.sql.Connection; import java.sql.SQLException; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Properties; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import com.shove.Convert; import com.shove.base.BaseService; import com.shove.data.DataException; import com.shove.data.dao.MySQL; import com.shove.util.SMSUtil; import com.sp2p.constants.IConstants; import com.sp2p.dao.AccountUsersDao; import com.sp2p.dao.FundRecordDao; import com.sp2p.dao.SearchBasicInfoDao; import com.sp2p.service.FinanceService; import com.sp2p.service.admin.SMSInterfaceService; import com.sp2p.util.DateUtil; public class SendMessageService extends BaseService { public static Log log = LogFactory.getLog(FinanceService.class); private SearchBasicInfoDao searchBasicDao; private ThreadPoolTaskExecutor taskExecutor; private JavaMailSenderImpl senderImpl; private AccountUsersDao accountUsersDao; private SMSInterfaceService sMsService; private FundRecordDao fundRecordDao; private String from; private void init(){ String host = IConstants.MAIL_HOST; String username =IConstants.MAIL_USERNAME; String password = IConstants.MAIL_PASSWORD; this.from = IConstants.MAIL_FROM; senderImpl = new JavaMailSenderImpl(); senderImpl.setHost(host); senderImpl.setUsername(username); senderImpl.setPassword(password); Properties prop = new Properties(); prop.put("mail.smtp.auth", "true"); // 将这个参数设为true,让服务器进行认证,认证用户名和密码是否正确 prop.put("mail.smtp.timeout", "25000"); senderImpl.setJavaMailProperties(prop); } public SendMessageService(){ init(); } /** * 邮件发送 * @throws SQLException * @throws DataException */ public Long emailSend(String title,String content, Long receiver) throws SQLException, DataException{ Connection conn = connectionManager.getConnection(); try { Map<String,String> map = searchBasicDao.getUserById(conn, receiver); if(map != null){ String userName = map.get("username") == null?"":map.get("username"); String email = map.get("email") == null?"":map.get("email"); // 发送通知邮件 sendRegisterVerificationEmail( userName, email,content); } } catch (SQLException e) { log.error(e); e.printStackTrace(); throw e; } catch (DataException e) { log.error(e); e.printStackTrace(); throw e; } finally { conn.close(); } return -1L; } public Long emailSend(Connection conn,String title,String content, Long receiver) throws SQLException, DataException{ Map<String,String> map = searchBasicDao.getUserById(conn, receiver); if(map != null){ String email = map.get("email") ; if(StringUtils.isBlank(email)) return -1L; String userName = map.get("username") == null?"":map.get("username"); // 发送通知邮件 sendRegisterVerificationEmail(userName, email,content); } return -1L; } private void sendRegisterVerificationEmailMsg( String userName, String userEmail, String content) throws MessagingException{ MimeMessage msg = senderImpl.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(msg, true, "utf-8"); helper.setFrom(from); helper.setTo(userEmail); helper.setSubject("合和年在线通知!"); StringBuffer sb = new StringBuffer(); sb.append("<HTML><BODY style='border-width:0px'>"); sb.append("<H4 style='font-weight:normal;font-size:14px'>尊敬的<span>"); sb.append(userName); sb.append("</span>:</H4>"); sb.append("<BR/>"); sb.append("<DIV>"+content+"</DIV>"); sb.append("<BR/>"); sb.append("</BODY></HTML>"); helper.setText(sb.toString(), true); senderImpl.send(msg); } private void sendRegisterVerificationEmail( final String userName, final String userEmail,final String content) { taskExecutor.execute(new Runnable() { public void run() { try { getMailSet(); sendRegisterVerificationEmailMsg( userName, userEmail,content); } catch (MessagingException e) { log.error(e); e.printStackTrace(); } } }); } //------ public Long emailSendTemplate(String title,String content, Long receiver) throws SQLException, DataException{ Connection conn = connectionManager.getConnection(); try { Map<String,String> map = searchBasicDao.getUserById(conn, receiver); if(map != null){ String userName = map.get("username") == null?"":map.get("username"); String email = map.get("email") == null?"":map.get("email"); // 发送通知邮件 sendEmail( userName, email,content,title); } } catch (SQLException e) { log.error(e); e.printStackTrace(); throw e; } catch (DataException e) { log.error(e); e.printStackTrace(); throw e; } finally { conn.close(); } return -1L; } public Long emailSendTemplate(Connection conn,String title,String content, Long receiver) throws SQLException, DataException{ Map<String,String> map = searchBasicDao.getUserById(conn, receiver); if(map != null){ String userName = map.get("username") == null?"":map.get("username"); String email = map.get("email") == null?"":map.get("email"); // 发送通知邮件 sendEmail( userName, email,content,title); } return -1L; } private void sendEmailMsg( String userName, String userEmail, String content,String title) throws MessagingException{ MimeMessage msg = senderImpl.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(msg, true, "utf-8"); helper.setFrom(from); helper.setTo(userEmail); helper.setSubject("合和年在线通知!"); StringBuffer sb = new StringBuffer(); sb.append("<HTML><BODY style='border-width:0px'>"); sb.append("<H4 style='font-weight:normal;font-size:14px'>尊敬的合和年在线<span>"); sb.append(userName); sb.append("客户,以下是您的相关业务报告:</span>:</H4>"); sb.append("<BR/>"); sb.append("<DIV> " + "<table width='50%' border='1' cellspacing='0' cellpadding='0'>" + "<tr><td align='center'>标题</td><td align='center'>"+title+"</td></tr>" + "<tr><td align='center'>日期</td><td align='center'>"+DateUtil.dateToString(new Date())+"</td></tr>" + "<tr><td align='center'>内容</td><td align='center'>"+content+"</td></tr>" + "</table></DIV>"); sb.append("<BR/>"); sb.append("</BODY></HTML>"); helper.setText(sb.toString(), true); senderImpl.send(msg); } private void sendEmail( final String userName, final String userEmail,final String content,final String title) { taskExecutor.execute(new Runnable() { @Override public void run() { try { getMailSet(); sendEmailMsg( userName, userEmail,content,title); } catch (MessagingException e) { log.error(e); e.printStackTrace(); } } }); } //---- /** * 站内信发送 * @throws SQLException * @throws DataException */ public Long mailSend(String title,String content, Long receiver) throws SQLException, DataException{ Connection conn = MySQL.getConnection(); Long result = -1L; try { Map<String,String> map = new HashMap<String,String>(); /** * 添加t_mail表 */ map.put("mailTitle", title); map.put("mailContent", content); map.put("sendTime", DateUtil.dateToString(new Date())); map.put("sender",String.valueOf(-1 )); map.put("reciver",String.valueOf(receiver )); map.put("mailType", String.valueOf(IConstants.MALL_TYPE_SYS)); map.put("mailStatus",String.valueOf(IConstants.MAIL_UN_READ )); map.put("mailMode", String.valueOf(IConstants.MAIL_SYS_)); result = searchBasicDao.addMail(conn,map); if (result <= 0) { conn.rollback(); return -1L; } conn.commit(); } catch (SQLException e) { log.error(e); conn.rollback(); e.printStackTrace(); throw e; } finally { conn.close(); } return result; } public Long mailSend(Connection conn,String title,String content, Long receiver , Long borrowId) throws SQLException, DataException{ Long result = -1L; try { Map<String,String> map = new HashMap<String,String>(); /** * 添加t_mail表 */ map.put("mailTitle", title); map.put("mailContent", content); map.put("sendTime", DateUtil.dateToString(new Date())); map.put("sender",String.valueOf(-1 )); map.put("reciver",String.valueOf(receiver )); map.put("mailType", String.valueOf(IConstants.MALL_TYPE_SYS)); map.put("mailStatus",String.valueOf(IConstants.MAIL_UN_READ )); map.put("mailMode", String.valueOf(IConstants.MAIL_SYS_)); map.put("borrowId", String.valueOf(borrowId )); result = searchBasicDao.addMail(conn,map); } catch (SQLException e) { log.error(e); conn.rollback(); e.printStackTrace(); result = -1L; throw e; } return result; } /** * 短信通知 * 如果用户帐户没有余额,则不发送。如果有,则扣除0.1元/条。同时向资金记录表中添加记录。 * @throws SQLException * @throws DataException * @throws UnsupportedEncodingException */ public long noteSend(String content,Long userId) throws SQLException, DataException, UnsupportedEncodingException{ Connection conn = connectionManager.getConnection(); try { int id = IConstants.PHONE_IMP; //判断用户的帐号上是否有可用余额,没有就不发送短信 Map<String,String> userUsableSum = searchBasicDao.queryUserUsableSum(conn, userId); if(userUsableSum !=null){ Map<String,String> map = searchBasicDao.getUserMobile(conn,userId); Map<String,String> smsMap = searchBasicDao.getSMSById(conn,id); Map<String, String> sms=sMsService.getSMSById(1); String phone = ""; if(map != null && map.size() > 0){ phone = map.get("mobilePhone"); if(phone.length() != 11) return -1L; String retCode = SMSUtil.sendSMS(sms.get("Account"),sms.get("Password"),content,phone,null); long ret = retCode.equals("Sucess")?1L:-1L; } } } catch (SQLException e) { log.error(e); e.printStackTrace(); throw e; } catch (DataException e) { log.error(e); e.printStackTrace(); throw e; } finally { conn.close(); } return -1L; } public Long noteSend(Connection conn,String content,Long userId) throws SQLException, DataException, UnsupportedEncodingException{ long returnId = -1; int id = IConstants.PHONE_IMP; //判断用户的帐号上是否有可用余额,没有就不发送短信 // Map<String,String> userUsableSum = searchBasicDao.queryUserUsableSum(conn, userId); // if(userUsableSum !=null){ Map<String,String> map = searchBasicDao.getUserMobile(conn,userId); Map<String,String> smsMap = searchBasicDao.getSMSById(conn,id); String phone = ""; if(map != null && map.size() > 0){ phone = map.get("mobilePhone"); if(phone.length() != 11) return -1L; //发送短信 //TODO 暂时先注释了 //String retCode = SMSUtil.sendSMS(smsMap.get("Account"),smsMap.get("Password"),content,phone,null); /*long ret = retCode.equals("Sucess")?1L:-1L; //发送成功扣除短信服务费 if(ret == 1){ //扣除短信服务费 returnId = searchBasicDao.deductedNoteFee(conn,userId); //查询用户金额信息 Map<String,String> userAmount = searchBasicDao.queryUserAmount(conn, userId); double usableSum = Convert.strToDouble(userAmount.get("usableSum")+"", 0); double freezeSum = Convert.strToDouble(userAmount.get("freezeSum")+"", 0); double dueinSum = Convert.strToDouble(userAmount.get("dueinSum")+"", 0); //添加资金流动记录 returnId = fundRecordDao.addFundRecord(conn, userId, "扣除短信服务费", 0.1, usableSum, freezeSum, dueinSum, -1,"短信提醒服务费",0.0,0.1,-1,-1,801,0.0); //添加到新表 扣除短信服务费 String lastIP = Convert.strToStr( userAmount.get("lastIP"),""); accountUsersDao.addAccountUsers(conn, "扣除短信服务费", userId, new BigDecimal(0.1), -1L, "短信提醒服务费", lastIP); }*/ } // } return returnId; } private void getMailSet(){ this.from = IConstants.MAIL_FROM; senderImpl = new JavaMailSenderImpl(); senderImpl.setHost(IConstants.MAIL_HOST.trim()); senderImpl.setUsername(IConstants.MAIL_USERNAME.trim()); senderImpl.setPassword(IConstants.MAIL_PASSWORD.trim()); Properties javaMailProperties = new Properties(); javaMailProperties.put("mail.smtp.auth", "true"); javaMailProperties.put("mail.smtp.timeout", "25000"); senderImpl.setJavaMailProperties(javaMailProperties); } public SearchBasicInfoDao getSearchBasicDao() { return searchBasicDao; } public void setSearchBasicDao(SearchBasicInfoDao searchBasicDao) { this.searchBasicDao = searchBasicDao; } public ThreadPoolTaskExecutor getTaskExecutor() { return taskExecutor; } public void setTaskExecutor(ThreadPoolTaskExecutor taskExecutor) { this.taskExecutor = taskExecutor; } public void setAccountUsersDao(AccountUsersDao accountUsersDao) { this.accountUsersDao = accountUsersDao; } public SMSInterfaceService getSMsService() { return sMsService; } public void setSMsService(SMSInterfaceService msService) { sMsService = msService; } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public void setSenderImpl(JavaMailSenderImpl senderImpl) { this.senderImpl = senderImpl; } public void setsMsService(SMSInterfaceService sMsService) { this.sMsService = sMsService; } public FundRecordDao getFundRecordDao() { return fundRecordDao; } public void setFundRecordDao(FundRecordDao fundRecordDao) { this.fundRecordDao = fundRecordDao; } }