package com.doumee.service.business.impl; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.dao.business.SmsEmailMapper; import com.doumee.dao.business.model.Company; import com.doumee.dao.business.model.SmsEmail; import com.doumee.service.business.SmsEmailService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.service.business.third.EmailService; import com.doumee.service.business.third.EmayService; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.Date; import java.util.List; import java.util.Objects; /** * 短信邮件信息表Service实现 * @author 江蹄蹄 * @date 2024/01/16 10:03 */ @Service public class SmsEmailServiceImpl implements SmsEmailService { @Autowired private SmsEmailMapper smsEmailMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private EmayService emayService; @Autowired private EmailService emailService; public static void isCaptcheValide(SmsEmailMapper smsEmailMapper, String phone, String captche) { SmsEmail model = smsEmailMapper.selectOne(new QueryWrapper().lambda() .eq(SmsEmail::getType, Constants.ZERO) .eq(SmsEmail::getPhone, phone) .eq(SmsEmail::getRemark, captche) .eq(SmsEmail::getIsdeleted, Constants.ZERO) ); if(model == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,验证码不正确,请重新发送再试!"); } if(!Constants.equalsInteger(model.getStatus(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,验证码已失效,请重新发送再试!"); } if(model.getCreateDate() !=null && System.currentTimeMillis() - model.getCreateDate().getTime() > 3*60*1000){ model.setStatus(Constants.ONE); model.setEditDate(new Date()); smsEmailMapper.updateById(model); throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,验证码已失效,请重新发送再试~"); } model.setStatus(Constants.ONE); model.setEditDate(new Date()); smsEmailMapper.updateById(model); } @Override public Integer create(SmsEmail smsEmail) { smsEmailMapper.insert(smsEmail); return smsEmail.getId(); } @Override public Integer sendEmail(SmsEmail smsEmail) { if(StringUtils.isBlank(smsEmail.getEmail())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } boolean result= emailService.sendEmail(smsEmail.getEmail(),smsEmail.getTitle(),smsEmail.getContent(),smsEmail.getFileList()); smsEmail.setRemark("邮件发生成功"); if(!result){ smsEmail.setRemark("邮件发生失败"); } smsEmail.setIsdeleted(Constants.ZERO); smsEmail.setCreateDate(new Date()); smsEmail.setStatus(Constants.ONE); smsEmail.setType(Constants.TWO); smsEmailMapper.insert(smsEmail); return smsEmail.getId(); } @Override public Integer sendSms(SmsEmail smsEmail) { if(StringUtils.isBlank(smsEmail.getPhone())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } String nowDate = DateUtil.getFomartDate(new Date(),"yyyy-MM-dd HH:mm:ss"); if(smsEmailMapper.selectCount(new QueryWrapper().lambda() .eq(SmsEmail::getPhone,smsEmail.getPhone()) .eq(SmsEmail::getType,Constants.ZERO) .between(SmsEmail::getCreateDate, DateUtil.getFomartDate(DateUtil.afterMinutesDate(-5),"yyyy-MM-dd HH:mm:ss"),nowDate) )>=3){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,超出发送次数,请稍后重试!"); } String code = Constants.getRandom6Num(); String content = systemDictDataBiz.queryByCode(Constants.SMS,Constants.SMS_COMNAME).getCode()+"验证码为:"+code+",此验证码有效为3分钟。请勿泄露"; boolean result= emayService.sendSingleSms(smsEmail.getPhone(),content); if(!result){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,短信验证码发送失败,请稍后重试!"); } smsEmail.setRemark(code); smsEmail.setIsdeleted(Constants.ZERO); smsEmail.setCreateDate(new Date()); smsEmail.setStatus(Constants.ZERO); smsEmail.setType(Constants.ZERO); smsEmail.setTitle("短信验证码"); smsEmail.setContent(content); smsEmailMapper.insert(smsEmail); return smsEmail.getId(); } @Override public void validateCode(String code) { if(StringUtils.isBlank(code)){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(!loginUserInfo.getType().equals(Constants.ONE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户类别错误"); }; Company company = loginUserInfo.getCompany(); SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,company.getPhone(),code); } @Override public void deleteById(Integer id) { smsEmailMapper.deleteById(id); } @Override public void delete(SmsEmail smsEmail) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(smsEmail); smsEmailMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } smsEmailMapper.deleteBatchIds(ids); } @Override public void updateById(SmsEmail smsEmail) { smsEmailMapper.updateById(smsEmail); } @Override public void updateByIdInBatch(List smsEmails) { if (CollectionUtils.isEmpty(smsEmails)) { return; } for (SmsEmail smsEmail: smsEmails) { this.updateById(smsEmail); } } @Override public SmsEmail findById(Integer id) { return smsEmailMapper.selectById(id); } @Override public SmsEmail findOne(SmsEmail smsEmail) { QueryWrapper wrapper = new QueryWrapper<>(smsEmail); return smsEmailMapper.selectOne(wrapper); } @Override public List findList(SmsEmail smsEmail) { QueryWrapper wrapper = new QueryWrapper<>(smsEmail); return smsEmailMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().eq(SmsEmail::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getCreator() != null) { queryWrapper.lambda().eq(SmsEmail::getCreator, pageWrap.getModel().getCreator()); } if (pageWrap.getModel().getCreateDate() != null) { queryWrapper.lambda().ge(SmsEmail::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); queryWrapper.lambda().le(SmsEmail::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); } if (pageWrap.getModel().getEditor() != null) { queryWrapper.lambda().eq(SmsEmail::getEditor, pageWrap.getModel().getEditor()); } if (pageWrap.getModel().getEditDate() != null) { queryWrapper.lambda().ge(SmsEmail::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); queryWrapper.lambda().le(SmsEmail::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); } if (pageWrap.getModel().getIsdeleted() != null) { queryWrapper.lambda().eq(SmsEmail::getIsdeleted, pageWrap.getModel().getIsdeleted()); } if (pageWrap.getModel().getRemark() != null) { queryWrapper.lambda().eq(SmsEmail::getRemark, pageWrap.getModel().getRemark()); } if (pageWrap.getModel().getTitle() != null) { queryWrapper.lambda().eq(SmsEmail::getTitle, pageWrap.getModel().getTitle()); } if (pageWrap.getModel().getInfo() != null) { queryWrapper.lambda().eq(SmsEmail::getInfo, pageWrap.getModel().getInfo()); } if (pageWrap.getModel().getContent() != null) { queryWrapper.lambda().eq(SmsEmail::getContent, pageWrap.getModel().getContent()); } if (pageWrap.getModel().getPhone() != null) { queryWrapper.lambda().eq(SmsEmail::getPhone, pageWrap.getModel().getPhone()); } if (pageWrap.getModel().getEmail() != null) { queryWrapper.lambda().eq(SmsEmail::getEmail, pageWrap.getModel().getEmail()); } if (pageWrap.getModel().getStatus() != null) { queryWrapper.lambda().eq(SmsEmail::getStatus, pageWrap.getModel().getStatus()); } if (pageWrap.getModel().getType() != null) { queryWrapper.lambda().eq(SmsEmail::getType, pageWrap.getModel().getType()); } if (pageWrap.getModel().getObjId() != null) { queryWrapper.lambda().eq(SmsEmail::getObjId, pageWrap.getModel().getObjId()); } if (pageWrap.getModel().getObjType() != null) { queryWrapper.lambda().eq(SmsEmail::getObjType, pageWrap.getModel().getObjType()); } for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } return PageData.from(smsEmailMapper.selectPage(page, queryWrapper)); } @Override public long count(SmsEmail smsEmail) { QueryWrapper wrapper = new QueryWrapper<>(smsEmail); return smsEmailMapper.selectCount(wrapper); } }