|  |  |  | 
|---|
|  |  |  | package com.doumee.service.business.impl; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.toolkit.Constants; | 
|---|
|  |  |  | import cn.hutool.core.util.IdcardUtil; | 
|---|
|  |  |  | import cn.hutool.core.util.PhoneUtil; | 
|---|
|  |  |  | 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.core.model.LoginUserInfo; | 
|---|
|  |  |  | import com.doumee.core.model.PageData; | 
|---|
|  |  |  | import com.doumee.core.model.PageWrap; | 
|---|
|  |  |  | import com.doumee.core.utils.Utils; | 
|---|
|  |  |  | import com.doumee.core.utils.Constants; | 
|---|
|  |  |  | import com.doumee.core.utils.DESUtil; | 
|---|
|  |  |  | import com.doumee.core.utils.DateUtil; | 
|---|
|  |  |  | import com.doumee.dao.admin.request.MemberImport; | 
|---|
|  |  |  | 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.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::getId) | 
|---|
|  |  |  | .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.insertBatchSomeColumn(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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|