package com.doumee.service.business.impl; import cn.hutool.core.util.IdcardUtil; import com.alibaba.fastjson.JSONObject; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.annotation.excel.ExcelImporter; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.service.business.third.model.LoginUserInfo; import com.doumee.service.business.third.model.PageData; import com.doumee.service.business.third.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DESUtil; import com.doumee.core.utils.DateUtil; import com.doumee.dao.admin.request.TrainTimeImport; import com.doumee.dao.business.EmpowerMapper; import com.doumee.dao.business.MemberRoleMapper; import com.doumee.dao.business.TrainTimeMapper; import com.doumee.dao.business.join.MemberJoinMapper; import com.doumee.dao.business.join.TrainTimeJoinMapper; import com.doumee.dao.business.join.UserActionJoinMapper; import com.doumee.dao.business.model.Company; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.TrainTime; import com.doumee.dao.system.model.SystemUser; import com.doumee.service.business.TrainTimeService; 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.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 人员培训有效期记录Service实现 * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Service public class TrainTimeServiceImpl implements TrainTimeService { @Value("${debug_model}") private Boolean isDebug; @Autowired private TrainTimeMapper trainTimeMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private TrainTimeJoinMapper trainTimeJoinMapper; @Autowired private MemberJoinMapper memberJoinMapper; @Autowired private MemberRoleMapper memberRoleMapper; @Autowired private EmpowerMapper empowerMapper; @Autowired private UserActionJoinMapper userActionJoinMapper; @Autowired private RedisTemplate redisTemplate; @Override public Integer create(TrainTime trainTime) { trainTimeMapper.insert(trainTime); return trainTime.getId(); } @Override public void deleteById(Integer id) { trainTimeMapper.deleteById(id); } @Override public void delete(TrainTime trainTime) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(trainTime); trainTimeMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } trainTimeMapper.deleteBatchIds(ids); } @Override public void updateById(TrainTime trainTime) { trainTimeMapper.updateById(trainTime); } @Override public void updateByIdInBatch(List trainTimes) { if (CollectionUtils.isEmpty(trainTimes)) { return; } for (TrainTime trainTime: trainTimes) { this.updateById(trainTime); } } @Override public TrainTime findById(Integer id) { return trainTimeMapper.selectById(id); } @Override public TrainTime findOne(TrainTime trainTime) { QueryWrapper wrapper = new QueryWrapper<>(trainTime); return trainTimeMapper.selectOne(wrapper); } @Override public List findList(TrainTime trainTime) { QueryWrapper wrapper = new QueryWrapper<>(trainTime); return trainTimeMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.leftJoin(Member.class,Member::getId,TrainTime::getMemberId); queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId); queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,TrainTime::getCreator); queryWrapper.selectAll(TrainTime.class); queryWrapper.selectAs(Member::getName,TrainTime::getName); queryWrapper.selectAs(Member::getPhone,TrainTime::getPhone); queryWrapper.selectAs(Member::getFaceImg,TrainTime::getFaceImg); queryWrapper.selectAs(Member::getIdcardDecode,TrainTime::getIdcardNo); queryWrapper.selectAs(Company::getCompanyNamePath,TrainTime::getCompanyName); queryWrapper.selectAs(SystemUser::getRealname,TrainTime::getCreateName); queryWrapper.eq(TrainTime::getIsdeleted, Constants.ZERO); queryWrapper.ge(pageWrap.getModel().getStartTimeStart() != null, TrainTime::getStartTime, pageWrap.getModel().getStartTimeStart()); queryWrapper.le(pageWrap.getModel().getStartTimeEnd() != null, TrainTime::getStartTime, pageWrap.getModel().getStartTimeEnd()); queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getName()), ms->ms.like(Member::getPhone,pageWrap.getModel().getName()) .or().like(Member::getName,pageWrap.getModel().getName())); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getName,pageWrap.getModel().getCompanyName()); queryWrapper.orderByDesc(TrainTime::getId); IPage result = trainTimeJoinMapper.selectJoinPage(page, TrainTime.class,queryWrapper); if(result!=null && result.getRecords()!=null){ String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode(); for(TrainTime model : result.getRecords()){ if(StringUtils.isNotBlank(model.getFaceImg())){ model.setFaceImg(path +model.getFaceImg()); } } } return PageData.from(result); } @Override public long count(TrainTime trainTime) { QueryWrapper wrapper = new QueryWrapper<>(trainTime); return trainTimeMapper.selectCount(wrapper); } @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public String importBatch(MultipartFile file, LoginUserInfo loginUserInfo){ Boolean importing = (Boolean) redisTemplate.opsForValue().get(com.doumee.core.utils.Constants.RedisKeys.IMPORTING_MEMBER); if(importing!=null && importing){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,已存在员工导入任务正在执行中,请稍后再试!"); } redisTemplate.opsForValue().set(com.doumee.core.utils.Constants.RedisKeys.IMPORTING_MEMBER,true); try { ExcelImporter ie = null; List dataList =null; try { ie = new ExcelImporter(file,1,0); dataList = ie.getDataList(TrainTimeImport.class,null); } catch (Exception e) { e.printStackTrace(); } if(dataList == null || dataList.size() ==0){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,录入数据为空!"); } //查询全部相关方人员信息 List list = memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper() .selectAll(Member.class) .leftJoin(Company.class,Company::getId,Member::getCompanyId) .eq(Company::getType,Constants.ZERO) // .in(Company::getId,loginUserInfo.getCompanyIdList() ) .eq(Member::getIsdeleted, com.doumee.core.utils.Constants.ZERO)); List newList = new ArrayList<>(); for(int i=0;i().lambda() .set(Member::getStartTime,null) .set(Member::getEndTime,null) .set(Member::getRoleId,null) .set(Member::getEditDate,insert.getEditDate()) .set(Member::getEditor,insert.getCreator()) .set(Member::getAuthStatus, Constants.ZERO) .eq(Member::getId,insert.getId())); Member member = new Member(); member.setId(insert.getMemberId()); member.setEditor(insert.getCreator()); member.setEditDate(insert.getCreateDate()); MemberServiceImpl.saveUserActionBiz(member,loginUserInfo,Constants.UserActionType.IMPORT_TRAIMETIME,userActionJoinMapper, JSONObject.toJSONString(insert)); //取消授权 MemberServiceImpl.cancelAllMemberEmpower(member,memberRoleMapper,empowerMapper); } if(newList == null || newList.size() ==0){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,录入有效数据为空!"); } trainTimeMapper.insert(newList); return "导入成功"; }catch (BusinessException e){ throw e; }catch (Exception e){ e.printStackTrace(); throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"员工信息导入失败,请稍后重试"); }finally { redisTemplate.delete( Constants.RedisKeys.IMPORTING_MEMBER); } } private TrainTime checkModelParam(TrainTimeImport model, int index, LoginUserInfo loginUserInfo, List list) { if(StringUtils.isBlank(model.getName()) || StringUtils.isBlank(model.getIdcardNo()) || model.getStartTime()==null || model.getEndTime()==null || model.getEndTime().getTime() < model.getStartTime().getTime() ){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行人员信息不完整,或者有效期不合法,请检查表格内容!"); } if ( !isDebug && !IdcardUtil.isValidCard(model.getIdcardNo())){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行身份证号【"+model.getIdcardNo()+"】格式不正确,请检查表格内容!"); } Member m = MemberServiceImpl.findMemberFromListByIdcard( DESUtil.encrypt(Constants.EDS_PWD, model.getIdcardNo()),list); if(m == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行身份证号【"+model.getIdcardNo()+"】不存在,请检查表格内容!"); } TrainTime trainTime = new TrainTime(); trainTime.setIsdeleted(Constants.ZERO); trainTime.setCreator(loginUserInfo.getId()); trainTime.setCreateDate(new Date()); trainTime.setEdirot(loginUserInfo.getId()); trainTime.setEditDate(trainTime.getCreateDate()); trainTime.setStartTime(model.getStartTime()); trainTime.setEndTime(model.getEndTime()); trainTime.setMemberId(m.getId()); trainTime.setImportStatus(Constants.ZERO); trainTime.setImportInfo("由【"+loginUserInfo.getRealname()+"】于"+DateUtil.getPlusTime2(trainTime.getCreateDate())+"导入"); return trainTime; } }