| | |
| | | package com.doumee.service.business.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.toolkit.Constants; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Utils; |
| | | 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.business.model.Visits; |
| | | import com.doumee.dao.system.model.SystemUser; |
| | | import com.doumee.service.business.TrainTimeService; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | |
| | | 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 |
| | | 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<String, Object> redisTemplate; |
| | | |
| | | |
| | | @Override |
| | |
| | | queryWrapper.selectAll(TrainTime.class); |
| | | queryWrapper.selectAs(Member::getName,TrainTime::getName); |
| | | queryWrapper.selectAs(Member::getPhone,TrainTime::getPhone); |
| | | queryWrapper.selectAs(Member::getIdcardNo,TrainTime::getIdcardNo); |
| | | queryWrapper.selectAs(Company::getName,TrainTime::getCompanyName); |
| | | queryWrapper.selectAs(SystemUser::getUsername,TrainTime::getCreateName); |
| | | |
| | | 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.and(StringUtils.isNotBlank(pageWrap.getModel().getName()), ms->ms.like(Member::getPhone,pageWrap.getModel().getName()) |
| | | .or().like(Member::getName,pageWrap.getModel().getName())); |
| | | 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().getKeyWords()), ms->ms.like(Member::getPhone,pageWrap.getModel().getKeyWords()) |
| | | .or().like(Member::getName,pageWrap.getModel().getKeyWords())); |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getName,pageWrap.getModel().getCompanyName()); |
| | | queryWrapper.orderByDesc(TrainTime::getCreateDate); |
| | | queryWrapper.orderByDesc(TrainTime::getId); |
| | | IPage<TrainTime> 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); |
| | | } |
| | | |
| | |
| | | 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<TrainTimeImport> 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<Member> list = memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>() |
| | | .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<TrainTime> newList = new ArrayList<>(); |
| | | for(int i=0;i<dataList.size();i++){ |
| | | TrainTimeImport model = dataList.get(i); |
| | | if(StringUtils.isBlank(model.getName()) |
| | | &&StringUtils.isBlank(model.getIdcardNo()) |
| | | && StringUtils.isBlank(model.getStartTimeStr()) |
| | | && StringUtils.isBlank(model.getEndTimeStr()) ){ |
| | | continue; |
| | | } |
| | | |
| | | model.setStartTime(DateUtil.getDateFromString2(model.getStartTimeStr())); |
| | | model.setEndTime(DateUtil.getDateFromString2(model.getEndTimeStr())); |
| | | TrainTime insert = checkModelParam(model,i,loginUserInfo,list); |
| | | newList.add(insert); |
| | | //更新用户下发状态为待下发 |
| | | memberJoinMapper. update(null,new UpdateWrapper<Member>().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<Member> 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; |
| | | } |
| | | |
| | | |
| | | } |