package com.doumee.service.business.impl; import com.doumee.core.annotation.excel.ExcelImporter; import com.doumee.core.constants.Constants; 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.DateUtil; import com.doumee.dao.business.dto.CasesImport; import com.doumee.dao.business.dto.MemberImport; import com.doumee.dao.business.model.ImportRecord; import com.doumee.core.utils.Utils; import com.doumee.dao.business.ImportRecordMapper; import com.doumee.dao.business.model.Member; import com.doumee.service.business.ImportRecordService; 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.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.CellType; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; /** * 分类信息表Service实现 * @author doumee * @date 2026-01-27 16:02:37 */ @Service public class ImportRecordServiceImpl implements ImportRecordService { @Autowired private ImportRecordMapper importRecordMapper; @Resource private RedisTemplate redisTemplate; @Override public Integer create(ImportRecord importRecord) { if(StringUtils.isBlank(importRecord.getImgurl())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); importRecord.setDeleted(Constants.ZERO); importRecord.setStatus(Constants.ZERO); importRecord.setCreateTime(new Date()); importRecord.setCreateUser(loginUserInfo.getId()); importRecord.setUpdateTime(new Date()); importRecord.setUpdateUser(loginUserInfo.getId()); importRecordMapper.insert(importRecord); return importRecord.getId(); } @Override public void deleteById(Integer id) { importRecordMapper.deleteById(id); } @Override public void delete(ImportRecord importRecord) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(importRecord); importRecordMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } importRecordMapper.deleteBatchIds(ids); } @Override public void updateById(ImportRecord importRecord) { importRecordMapper.updateById(importRecord); } @Override public void updateByIdInBatch(List importRecords) { if (CollectionUtils.isEmpty(importRecords)) { return; } for (ImportRecord importRecord: importRecords) { this.updateById(importRecord); } } @Override public ImportRecord findById(Integer id) { return importRecordMapper.selectById(id); } @Override public ImportRecord findOne(ImportRecord importRecord) { QueryWrapper wrapper = new QueryWrapper<>(importRecord).last("limit 1"); return importRecordMapper.selectOne(wrapper); } @Override public List findList(ImportRecord importRecord) { QueryWrapper wrapper = new QueryWrapper<>(importRecord); return importRecordMapper.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()); queryWrapper.lambda().eq(pageWrap.getModel().getId() != null,ImportRecord::getId, pageWrap.getModel().getId()); queryWrapper.lambda().eq(pageWrap.getModel().getDeleted() != null,ImportRecord::getDeleted, pageWrap.getModel().getDeleted()); queryWrapper.lambda().eq(pageWrap.getModel().getCreateUser() != null,ImportRecord::getCreateUser, pageWrap.getModel().getCreateUser()); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().ge(ImportRecord::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime())); queryWrapper.lambda().le(ImportRecord::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime())); } queryWrapper.lambda().eq(pageWrap.getModel().getUpdateUser() != null,ImportRecord::getUpdateUser, pageWrap.getModel().getUpdateUser()); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().ge(ImportRecord::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime())); queryWrapper.lambda().le(ImportRecord::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime())); } queryWrapper.lambda().eq(pageWrap.getModel().getRemark() != null,ImportRecord::getRemark, pageWrap.getModel().getRemark()); queryWrapper.lambda().eq(pageWrap.getModel().getStatus() != null,ImportRecord::getStatus, pageWrap.getModel().getStatus()); queryWrapper.lambda().eq(pageWrap.getModel().getTitle() != null,ImportRecord::getTitle, pageWrap.getModel().getTitle()); queryWrapper.lambda().eq(pageWrap.getModel().getTotalNum() != null,ImportRecord::getTotalNum, pageWrap.getModel().getTotalNum()); queryWrapper.lambda().eq(pageWrap.getModel().getDetail() != null,ImportRecord::getDetail, pageWrap.getModel().getDetail()); queryWrapper.lambda().eq(pageWrap.getModel().getImgurl() != null,ImportRecord::getImgurl, pageWrap.getModel().getImgurl()); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().ge(ImportRecord::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate())); queryWrapper.lambda().le(ImportRecord::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getStartDate())); } if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().ge(ImportRecord::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDate())); queryWrapper.lambda().le(ImportRecord::getEndDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate())); } queryWrapper.lambda().eq(pageWrap.getModel().getSortnum() != null,ImportRecord::getSortnum, pageWrap.getModel().getSortnum()); queryWrapper.lambda().eq(pageWrap.getModel().getType() != null,ImportRecord::getType, pageWrap.getModel().getType()); queryWrapper.lambda().eq(pageWrap.getModel().getDoneNum() != null,ImportRecord::getDoneNum, pageWrap.getModel().getDoneNum()); queryWrapper.lambda().eq(pageWrap.getModel().getErrorNum() != null,ImportRecord::getErrorNum, pageWrap.getModel().getErrorNum()); for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } return PageData.from(importRecordMapper.selectPage(page, queryWrapper)); } @Override public long count(ImportRecord importRecord) { QueryWrapper wrapper = new QueryWrapper<>(importRecord); return importRecordMapper.selectCount(wrapper); } @Override public ImportRecord importBatch(MultipartFile file,int type ){ Boolean importing = (Boolean) redisTemplate.opsForValue().get(Constants.RedisKeys.IMPORTING_RECORD); if(importing!=null && importing){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,已存在导入任务正在执行中,请稍后再试!"); } redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_RECORD,true,30, TimeUnit.MINUTES); try { ImportRecord model = new ImportRecord(); LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); model.setDeleted(Constants.ZERO); model.setStatus(Constants.ONE);//异步处理中 model.setCreateTime(new Date()); model.setCreateUser(loginUserInfo.getId()); model.setUpdateTime(model.getCreateTime()); model.setUpdateUser(loginUserInfo.getId()); model.setType(type); model.setTitle((type==1?"案例信息批量导入":"老师信息批量导入")+ DateUtil.getPlusTime2(model.getCreateTime())); model.setTotalNum(0); ExcelImporter ie= new ExcelImporter(file,0,0, CellType.STRING); // 确保单元格类型为字符串); if(type == 1) { model.setCaseList(ie.getDataList(CasesImport.class,null)); if(model.getCaseList() ==null || model.getCaseList().size()==0){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"导入文件案例信息内容为空!"); } model.setTotalNum(model.getCaseList().size()); }else{ model.setMemberList(ie.getDataList(MemberImport.class,null)); if(model.getMemberList() ==null || model.getMemberList().size()==0){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"导入文件老师信息内容为空!"); } model.setTotalNum(model.getMemberList().size()); } // model.setPictureDataList(ie); importRecordMapper.insert(model); return model; }catch (Exception e){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"文件信息读取失败,请检查文件内容后重试!"); }finally { redisTemplate.delete(Constants.RedisKeys.IMPORTING_RECORD); } } /** * 异步执行文件任务 * @param importRecord */ @Override @Async public void dealImporTask(ImportRecord importRecord){ int success = 0; if(Constants.equalsInteger(importRecord.getType(),0)){ dealUserImportBiz(importRecord); }else{ dealCaseImportBiz(importRecord); } importRecord.setStatus(Constants.TWO); importRecord.setUpdateTime(new Date()); importRecordMapper.updateById(importRecord); } /** * 处理案例导入任务 * @param importRecord */ private int dealCaseImportBiz(ImportRecord importRecord) { int success=0; String msg =""; try { for(CasesImport param:importRecord.getCaseList()){ } }catch (Exception e){ } importRecord.setDoneNum(success); importRecord.setErrorNum(importRecord.getTotalNum() - success); return success; } /** * 处理人员导入记录 * @param importRecord */ private int dealUserImportBiz(ImportRecord importRecord) { int success=0; String msg = ""; try { for(MemberImport param:importRecord.getMemberList()){ } }catch (Exception e){ } importRecord.setDoneNum(success); importRecord.setErrorNum(importRecord.getTotalNum() - success); importRecord.setDetail(msg); return success; } }