package com.doumee.service.business.impl; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.CommonResponse; 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.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Strings; import com.doumee.core.utils.Utils; import com.doumee.core.utils.aliyun.ALiYunSmSUtil; import com.doumee.dao.business.SmsrecordMapper; import com.doumee.dao.business.model.Smsrecord; import com.doumee.service.business.SmsrecordService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.*; /** * 短信验证码Service实现 * @author rk * @date 2026/04/08 */ @Service public class SmsrecordServiceImpl implements SmsrecordService { @Autowired private SmsrecordMapper smsrecordMapper; @Override public Integer create(Smsrecord smsrecord) { smsrecordMapper.insert(smsrecord); return smsrecord.getId(); } @Override public void deleteById(Integer id) { smsrecordMapper.deleteById(id); } @Override public void delete(Smsrecord smsrecord) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(smsrecord); smsrecordMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } smsrecordMapper.deleteBatchIds(ids); } @Override public void updateById(Smsrecord smsrecord) { smsrecordMapper.updateById(smsrecord); } @Override public void updateByIdInBatch(List smsrecords) { if (CollectionUtils.isEmpty(smsrecords)) { return; } for (Smsrecord smsrecord : smsrecords) { this.updateById(smsrecord); } } @Override public Smsrecord findById(Integer id) { Smsrecord smsrecord = smsrecordMapper.selectById(id); if (Objects.isNull(smsrecord)) { throw new BusinessException(ResponseStatus.DATA_EMPTY); } return smsrecord; } @Override public Smsrecord findOne(Smsrecord smsrecord) { QueryWrapper wrapper = new QueryWrapper<>(smsrecord); return smsrecordMapper.selectOne(wrapper); } @Override public List findList(Smsrecord smsrecord) { QueryWrapper wrapper = new QueryWrapper<>(smsrecord); return smsrecordMapper.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()); pageWrap.getModel().setDeleted(Constants.ZERO); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().eq(Smsrecord::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getDeleted() != null) { queryWrapper.lambda().eq(Smsrecord::getDeleted, pageWrap.getModel().getDeleted()); } if (pageWrap.getModel().getCreateUser() != null) { queryWrapper.lambda().eq(Smsrecord::getCreateUser, pageWrap.getModel().getCreateUser()); } if (pageWrap.getModel().getCreateTime() != null) { queryWrapper.lambda().ge(Smsrecord::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime())); queryWrapper.lambda().le(Smsrecord::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime())); } if (pageWrap.getModel().getUpdateUser() != null) { queryWrapper.lambda().eq(Smsrecord::getUpdateUser, pageWrap.getModel().getUpdateUser()); } if (pageWrap.getModel().getUpdateTime() != null) { queryWrapper.lambda().ge(Smsrecord::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime())); queryWrapper.lambda().le(Smsrecord::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime())); } if (pageWrap.getModel().getRemark() != null) { queryWrapper.lambda().eq(Smsrecord::getRemark, pageWrap.getModel().getRemark()); } if (pageWrap.getModel().getPhone() != null) { queryWrapper.lambda().like(Smsrecord::getPhone, pageWrap.getModel().getPhone()); } if (pageWrap.getModel().getContent() != null) { queryWrapper.lambda().like(Smsrecord::getContent, pageWrap.getModel().getContent()); } if (pageWrap.getModel().getType() != null) { queryWrapper.lambda().eq(Smsrecord::getType, pageWrap.getModel().getType()); } if (pageWrap.getModel().getValidDate() != null) { queryWrapper.lambda().ge(Smsrecord::getValidDate, Utils.Date.getStart(pageWrap.getModel().getValidDate())); queryWrapper.lambda().le(Smsrecord::getValidDate, Utils.Date.getEnd(pageWrap.getModel().getValidDate())); } if (pageWrap.getModel().getCode() != null) { queryWrapper.lambda().eq(Smsrecord::getCode, pageWrap.getModel().getCode()); } if (pageWrap.getModel().getStatus() != null) { queryWrapper.lambda().eq(Smsrecord::getStatus, pageWrap.getModel().getStatus()); } for (PageWrap.SortData sortData : pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } return PageData.from(smsrecordMapper.selectPage(page, queryWrapper)); } @Override public long count(Smsrecord smsrecord) { QueryWrapper wrapper = new QueryWrapper<>(smsrecord); return smsrecordMapper.selectCount(wrapper); } /****************************************移动端接口开始********************************************************************/ /** * 发送短信 目前只有短信验证码 * @param memberId * @param phone */ @Override public void sendSms(Integer memberId,String phone){ smsrecordMapper.update(null, new UpdateWrapper() .set("STATUS",2) .eq("PHONE",phone) .eq("STATUS",0) ); String digits = Strings.randomNumeric(4); //发送验证码 Map map = new HashMap(); map.put("code",digits); CommonResponse response = ALiYunSmSUtil.sendMessage(phone,map); if(response.getHttpResponse().isSuccess()){ JSONObject data = JSONObject.parseObject(response.getData()); String returnCode = data.getString("Code"); if(!returnCode.equals("OK")){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"短信发送失败:" + data.getString("Message")); } } //存储短信验证码 Smsrecord smsrecord = new Smsrecord(); smsrecord.setCreateTime(new Date()); smsrecord.setMemberId(memberId); smsrecord.setPhone(phone); smsrecord.setContent("验证码短信"); smsrecord.setType(Constants.ZERO); smsrecord.setValidDate(DateUtil.afterMinutesDate(3)); smsrecord.setCode(digits); smsrecord.setStatus(Constants.ZERO); smsrecord.setDeleted(Constants.ZERO); smsrecordMapper.insert(smsrecord); } /** * 验证码验证 * @param memberId * @param phone * @param code */ @Override public void verifyCode(Integer memberId,String phone,String code){ Smsrecord smsrecord = smsrecordMapper.selectOne(new QueryWrapper() .eq("MEMBER_ID",memberId) .eq("PHONE",phone) .eq("CODE",code) .eq("TYPE",Constants.ZERO) .eq("STATUS",Constants.ZERO) .last(" limit 1 ") ); if(Objects.isNull(smsrecord)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"验证码输入错误或已过期!"); } if(smsrecord.getValidDate().getTime()