diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/FlowOrgRepositoryServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/FlowOrgRepositoryServiceImpl.java index 469206478..86b04db3d 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/FlowOrgRepositoryServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/FlowOrgRepositoryServiceImpl.java @@ -291,13 +291,17 @@ public class FlowOrgRepositoryServiceImpl implements OrgRepositoryService { for (String userDeptId : userDeptIds) { UserDeptDo userDeptDo = new UserDeptDo(); String[] split = userDeptId.split("_"); - UserDo user = this.getUserById(split[0]); + UserVo user = this.getUserDetail(split[0]); DeptDo deptById = this.getDeptById(split[1]); userDeptDo.setUserId(user.getUserId()); - userDeptDo.setUserName(user.getUserName()); + userDeptDo.setUserName(user.getUsername()); userDeptDo.setAvatar(user.getAvatar()); userDeptDo.setDeptId(deptById.getId()); userDeptDo.setDeptName(deptById.getDeptName()); + List roles = user.getRoles(); + if (roles != null && roles.size() > 0) { + userDeptDo.setRoleName(roles.get(0)); + } list.add(userDeptDo); } return list.stream().collect(Collectors.toMap(UserDeptDo::getUserId, v -> v, (a, b) -> a)); diff --git a/src/main/java/com/zhgd/xmgl/modules/exam/controller/ExamQuestionBankController.java b/src/main/java/com/zhgd/xmgl/modules/exam/controller/ExamQuestionBankController.java index ca626f49c..b93b8ae03 100644 --- a/src/main/java/com/zhgd/xmgl/modules/exam/controller/ExamQuestionBankController.java +++ b/src/main/java/com/zhgd/xmgl/modules/exam/controller/ExamQuestionBankController.java @@ -4,9 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zhgd.annotation.OperLog; +import com.zhgd.exception.CustomException; +import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; +import com.zhgd.xmgl.modules.basicdata.service.ISystemUserService; +import com.zhgd.xmgl.modules.exam.entity.ExamQuestionOption; +import com.zhgd.xmgl.modules.exam.entity.ExamSubject; +import com.zhgd.xmgl.modules.exam.service.IExamQuestionOptionService; +import com.zhgd.xmgl.modules.exam.service.IExamSubjectService; +import com.zhgd.xmgl.modules.exam.vo.ExamQuestionBankImport; import com.zhgd.xmgl.modules.exam.vo.ExamQuestionBankQuery; import com.zhgd.xmgl.modules.exam.vo.ExamQuestionBankVo; import com.zhgd.xmgl.modules.exam.vo.RandomQuery; +import com.zhgd.xmgl.security.entity.UserInfo; import com.zhgd.xmgl.security.util.SecurityUtils; import com.zhgd.xmgl.util.PageUtil; import io.swagger.annotations.Api; @@ -39,7 +48,9 @@ import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; @@ -63,6 +74,15 @@ public class ExamQuestionBankController { @Autowired private IExamQuestionBankService examQuestionBankService; + @Autowired + private IExamQuestionOptionService examQuestionOptionService; + + @Autowired + private IExamSubjectService examSubjectService; + + @Autowired + private ISystemUserService systemUserService; + /** * 分页列表查询 * @@ -310,15 +330,40 @@ public class ExamQuestionBankController { } catch (UnsupportedEncodingException e) { e.printStackTrace(); } - +// UserInfo user = SecurityUtils.getUser(); //Step.2 AutoPoi 导出Excel ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); List pageList = examQuestionBankService.list(queryWrapper); + List subList = examSubjectService.list(); + List resultList = new ArrayList<>(); + int index = 1; + for (ExamQuestionBank examQuestionBank : pageList) { + ExamSubject examSubject = subList.stream().filter(s -> s.getId().toString().equals(examQuestionBank.getSubjectId().toString())) + .collect(Collectors.toList()).get(0); + ExamQuestionBankImport examQuestionBankImport = new ExamQuestionBankImport(); + examQuestionBankImport.setIndex(index + "、"); + examQuestionBankImport.setSubjectName(examSubject.getName()); + examQuestionBankImport.setQuestionName(examQuestionBank.getQuestionName()); + examQuestionBankImport.setTypeName(getType(examQuestionBank.getType())); + examQuestionBankImport.setDifficulty(getDifficulty(examQuestionBank.getDifficulty())); + examQuestionBankImport.setOptions(examQuestionBank.getOptions()); + examQuestionBankImport.setIsEnable(examQuestionBank.getIsEnable() == 1 ? "是" : "否"); + examQuestionBankImport.setScore(examQuestionBank.getScore()); + resultList.add(examQuestionBankImport); + List questionOptions = examQuestionOptionService.list(Wrappers.lambdaQuery().eq(ExamQuestionOption::getQuestionId, examQuestionBank.getId())); + for (ExamQuestionOption questionOption : questionOptions) { + ExamQuestionBankImport examQuestionBankImport1 = new ExamQuestionBankImport(); + examQuestionBankImport1.setSubjectName(questionOption.getOptionCode()); + examQuestionBankImport1.setQuestionName(questionOption.getOptionDesc()); + resultList.add(examQuestionBankImport1); + } + index++; + } //导出文件名称 mv.addObject(NormalExcelConstants.FILE_NAME, "题目管理列表"); - mv.addObject(NormalExcelConstants.CLASS, ExamQuestionBank.class); + mv.addObject(NormalExcelConstants.CLASS, ExamQuestionBankImport.class); mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("题目管理列表数据", "导出人:Jeecg", "导出信息")); - mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + mv.addObject(NormalExcelConstants.DATA_LIST, resultList); return mv; } @@ -334,6 +379,9 @@ public class ExamQuestionBankController { public Result importExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); + List subList = examSubjectService.list(); + UserInfo user = SecurityUtils.getUser(); + SystemUser systemUser = systemUserService.getById(user.getUserId()); for (Map.Entry entity : fileMap.entrySet()) { MultipartFile file = entity.getValue();// 获取上传文件对象 ImportParams params = new ImportParams(); @@ -341,11 +389,52 @@ public class ExamQuestionBankController { params.setHeadRows(1); params.setNeedSave(true); try { - List listExamQuestionBanks = ExcelImportUtil.importExcel(file.getInputStream(), ExamQuestionBank.class, params); - for (ExamQuestionBank examQuestionBankExcel : listExamQuestionBanks) { - examQuestionBankService.save(examQuestionBankExcel); + List examQuestionBankImports = ExcelImportUtil.importExcel(file.getInputStream(), ExamQuestionBankImport.class, params); + List examQuestionBankList = new ArrayList<>(); + List examQuestionOptionList = new ArrayList<>(); + int index = 0; + for (ExamQuestionBankImport examQuestionBankImport : examQuestionBankImports) { + if (StringUtils.isNotBlank(examQuestionBankImport.getIndex())) { + index++; + List subjects = subList.stream().filter(s -> s.getName().equals(examQuestionBankImport.getSubjectName())).collect(Collectors.toList()); + if (subjects == null || subjects.size() == 0) { + throw new CustomException("没有对应的科目名称,请检查", HttpStatus.INTERNAL_SERVER_ERROR); + } + ExamQuestionBank examQuestionBank = new ExamQuestionBank(); + examQuestionBank.setId((long) index); + examQuestionBank.setSubjectId(subjects.get(0).getId()); + examQuestionBank.setQuestionName(examQuestionBankImport.getQuestionName()); + examQuestionBank.setType(getType(examQuestionBankImport.getTypeName())); + examQuestionBank.setDifficulty(getDifficulty(examQuestionBankImport.getDifficulty())); + examQuestionBank.setOptions(examQuestionBankImport.getOptions()); + examQuestionBank.setIsEnable(examQuestionBankImport.getIsEnable().equals("是") ? 1 : 0); + examQuestionBank.setScore(examQuestionBankImport.getScore()); + examQuestionBank.setProjectSn(systemUser.getSn()); + examQuestionBank.setCreateBy(systemUser.getUserId().toString()); + examQuestionBank.setCreateTime(new Date()); + examQuestionBank.setUpdateBy(systemUser.getUserId().toString()); + examQuestionBank.setUpdateTime(examQuestionBank.getCreateTime()); + examQuestionBankList.add(examQuestionBank); + } else { + ExamQuestionOption examQuestionOption = new ExamQuestionOption(); + examQuestionOption.setQuestionId((long) index); + examQuestionOption.setOptionCode(examQuestionBankImport.getSubjectName()); + examQuestionOption.setOptionDesc(examQuestionBankImport.getQuestionName()); + examQuestionOptionList.add(examQuestionOption); + } } - return Result.ok("文件导入成功!数据行数:" + listExamQuestionBanks.size()); + for (ExamQuestionBank examQuestionBank : examQuestionBankList) { + ExamQuestionBankVo examQuestionBankVo = new ExamQuestionBankVo(); + List collect = examQuestionOptionList.stream().filter(e -> e.getQuestionId().toString().equals(examQuestionBank.getId().toString())).collect(Collectors.toList()); + for (ExamQuestionOption examQuestionOption : collect) { + examQuestionOption.setQuestionId(null); + } + examQuestionBank.setId(null); + BeanUtils.copyProperties(examQuestionBank, examQuestionBankVo); + examQuestionBankVo.setOptionList(collect); + examQuestionBankService.saveInfo(examQuestionBankVo); + } + return Result.ok("文件导入成功!数据行数:" + examQuestionBankImports.size()); } catch (Exception e) { log.error(e.getMessage()); return Result.error("文件导入失败!"); @@ -360,4 +449,60 @@ public class ExamQuestionBankController { return Result.ok("文件导入失败!"); } + private String getType(int type) { + String typeName = null; + switch (type) { + case 1 : + typeName = "单选题"; + break; + case 2 : + typeName = "多选题"; + break; + case 3 : + typeName = "填空题"; + break; + } + return typeName; + } + + private Integer getType(String typeName) { + Integer type = 0; + if (typeName.equals("单选题")) { + type = 1; + } else if (typeName.equals("多选题")) { + type = 2; + } else if (typeName.equals("填空题")) { + type = 3; + } + return type; + } + + private String getDifficulty(int type) { + String difficulty = null; + switch (type) { + case 1 : + difficulty = "简单"; + break; + case 2 : + difficulty = "一般"; + break; + case 3 : + difficulty = "困难"; + break; + } + return difficulty; + } + + private Integer getDifficulty(String difficulty) { + Integer type = 0; + if (difficulty.equals("简单")) { + type = 1; + } else if (difficulty.equals("一般")) { + type = 2; + } else if (difficulty.equals("困难")) { + type = 3; + } + return type; + } + } diff --git a/src/main/java/com/zhgd/xmgl/modules/exam/vo/ExamQuestionBankImport.java b/src/main/java/com/zhgd/xmgl/modules/exam/vo/ExamQuestionBankImport.java new file mode 100644 index 000000000..14d711fc1 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/exam/vo/ExamQuestionBankImport.java @@ -0,0 +1,43 @@ +package com.zhgd.xmgl.modules.exam.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + +@Data +@ApiModel(value = "试题导入(VO)", description = "ExamQuestionBankImport") +public class ExamQuestionBankImport { + + @Excel(name = "试题序号", width = 15) + @ApiModelProperty(value = "试题序号") + private String index; + + @Excel(name = "科目名称/选项代码", width = 15) + @ApiModelProperty(value = "科目名称/选项代码") + private String subjectName; + + @Excel(name = "试题名称/选项描述", width = 15) + @ApiModelProperty(value = "试题名称/选项描述") + private String questionName; + + @Excel(name = "试题类型(单选题;多选题;填空题;)", width = 15) + @ApiModelProperty(value = "试题类型(单选题;多选题;填空题;)") + private String typeName; + + @Excel(name = "难易程度", width = 15) + @ApiModelProperty(value = "难易程度") + private String difficulty; + + @Excel(name = "试题答案", width = 15) + @ApiModelProperty(value = "试题答案") + private String options; + + @Excel(name = "是否应用(否;是)", width = 15) + @ApiModelProperty(value = "是否应用(否;是)") + private String isEnable; + + @Excel(name = "作答正确得分", width = 15) + @ApiModelProperty(value = "作答正确得分") + private Integer score; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/xz.security/service/impl/XzSecurityXzSecurityQualityInspectionRecordServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/xz.security/service/impl/XzSecurityXzSecurityQualityInspectionRecordServiceImpl.java index 2168e0145..24fc6bea6 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz.security/service/impl/XzSecurityXzSecurityQualityInspectionRecordServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz.security/service/impl/XzSecurityXzSecurityQualityInspectionRecordServiceImpl.java @@ -52,6 +52,7 @@ import com.zhgd.xmgl.modules.xz.security.mapper.XzSecurityQualityRectifyRecordMa import com.zhgd.xmgl.modules.xz.security.service.IXzSecurityInspectTaskItemRecordService; import com.zhgd.xmgl.modules.xz.security.service.IXzSecurityInspectTaskRecordService; import com.zhgd.xmgl.modules.xz.security.service.IXzSecurityQualityInspectionRecordService; +import com.zhgd.xmgl.modules.xz.service.IXzWorkerSafeWatchConfigService; import com.zhgd.xmgl.push.config.PushPayloads; import com.zhgd.xmgl.util.*; import org.apache.commons.collections.CollectionUtils; @@ -117,6 +118,8 @@ public class XzSecurityXzSecurityQualityInspectionRecordServiceImpl extends Serv private IXzSecurityInspectTaskRecordService xzSecurityInspectTaskRecordService; @Autowired private IXzSecurityInspectTaskItemRecordService xzSecurityInspectTaskItemRecordService; + @Autowired + private IXzWorkerSafeWatchConfigService xzWorkerSafeWatchConfigService; private static List getChildrenByQualityRegionId(Long regionId, List all) { ArrayList list = new ArrayList<>(); @@ -315,6 +318,11 @@ public class XzSecurityXzSecurityQualityInspectionRecordServiceImpl extends Serv noticeBigScreen("31", record, record.getInspectTime(), StrUtil.format("{}检查到一条{}的{}安全隐患问题,请注意监督整改!", record.getRegionName(), enterpriseInfo.getEnterpriseName(), StrUtil.subAfter(record.getDangerItemContent(), "/", true))); } + Integer count = xzSecurityQualityInspectionRecordMapper.selectCount(Wrappers.lambdaQuery() + .eq(XzSecurityQualityInspectionRecord::getRecordType, 1) + .eq(XzSecurityQualityInspectionRecord::getDangerItemId, record.getDangerItemId())); + //安全履职记录 + xzWorkerSafeWatchConfigService.saveInfo(record.getProjectSn(), 5, count, record.getChangeId().toString(), record.getDangerItemContent()); } else if (record.getRecordType() == 2) { XzSecurityDangerItemRecord dangerItemRecord = dangerItemRecordMapper.selectById(record.getDangerItemId()); record.setLevel(dangerItemRecord.getLevel()); diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzWorkerSafeWatchConfigService.java b/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzWorkerSafeWatchConfigService.java index 0991f0e17..6ce622d3a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzWorkerSafeWatchConfigService.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzWorkerSafeWatchConfigService.java @@ -11,4 +11,5 @@ import com.zhgd.xmgl.modules.xz.entity.XzWorkerSafeWatchConfig; */ public interface IXzWorkerSafeWatchConfigService extends IService { + void saveInfo(String projectSn, Integer type, Integer num, String workerId, String desc); } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzWorkerSafeWatchConfigServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzWorkerSafeWatchConfigServiceImpl.java index 3d3d7610a..1bd0757c9 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzWorkerSafeWatchConfigServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzWorkerSafeWatchConfigServiceImpl.java @@ -1,12 +1,33 @@ package com.zhgd.xmgl.modules.xz.service.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.zhgd.xmgl.modules.basicdata.entity.Notice; +import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; +import com.zhgd.xmgl.modules.basicdata.service.INoticeService; +import com.zhgd.xmgl.modules.basicdata.service.ISystemUserService; +import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; +import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper; +import com.zhgd.xmgl.modules.worker.service.IWorkerInfoService; +import com.zhgd.xmgl.modules.xz.entity.XzWorkerSafeWatchAlarm; import com.zhgd.xmgl.modules.xz.entity.XzWorkerSafeWatchConfig; +import com.zhgd.xmgl.modules.xz.entity.XzWorkerSafeWatchManager; import com.zhgd.xmgl.modules.xz.mapper.XzWorkerSafeWatchConfigMapper; +import com.zhgd.xmgl.modules.xz.service.IXzWorkerSafeWatchAlarmService; import com.zhgd.xmgl.modules.xz.service.IXzWorkerSafeWatchConfigService; +import com.zhgd.xmgl.modules.xz.service.IXzWorkerSafeWatchManagerService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import java.util.*; +import java.util.stream.Collectors; + /** * @Description: 安全履职配置信息 * @author: pengj @@ -16,4 +37,71 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @Service public class XzWorkerSafeWatchConfigServiceImpl extends ServiceImpl implements IXzWorkerSafeWatchConfigService { + @Autowired + private IXzWorkerSafeWatchManagerService xzWorkerSafeWatchManagerService; + + @Autowired + private IXzWorkerSafeWatchAlarmService xzWorkerSafeWatchAlarmService; + + @Autowired + private INoticeService noticeService; + + @Autowired + private ISystemUserService systemUserService; + + @Autowired + private WorkerInfoMapper workerInfoMapper; + + @Async + @Override + public void saveInfo(String projectSn, Integer type, Integer num, String workerId, String desc) { + List list = this.list(Wrappers.lambdaQuery() + .eq(XzWorkerSafeWatchConfig::getProjectSn, projectSn)); + List collect = list.stream().filter(l -> l.getType().equals(type.toString())).collect(Collectors.toList()); + if (collect != null && collect.size() > 0) { + XzWorkerSafeWatchConfig xzWorkerSafeWatchConfig = collect.get(0); + int dayNum = xzWorkerSafeWatchConfig.getDayNum(); + if (num >= dayNum) { + SystemUser systemUser = systemUserService.getById(workerId); + Map requestParam = new HashMap<>(); + requestParam.put("id", systemUser.getWorkerId()); + requestParam.put("inserviceType", 1); + List workerInfoList = workerInfoMapper.selectWorkerInfoList(new Page<>(-1, -1), requestParam); + WorkerInfo workerInfo = workerInfoList.get(0); + XzWorkerSafeWatchAlarm xzWorkerSafeWatchAlarm = new XzWorkerSafeWatchAlarm(); + xzWorkerSafeWatchAlarm.setWorkerId(workerInfo.getId()); + xzWorkerSafeWatchAlarm.setWorkerName(workerInfo.getWorkerName()); + String deptName = workerInfo.getDepartmentName() == null ? "" : workerInfo.getDepartmentName(); + String teamName = workerInfo.getTeamName() == null ? "" : workerInfo.getTeamName(); + xzWorkerSafeWatchAlarm.setDeptName(deptName + teamName); + xzWorkerSafeWatchAlarm.setEnterpriseName(workerInfo.getEnterpriseName()); + xzWorkerSafeWatchAlarm.setAlarmTime(new Date()); + xzWorkerSafeWatchAlarm.setType(type.toString()); + xzWorkerSafeWatchAlarm.setProjectSn(projectSn); + xzWorkerSafeWatchAlarm.setDayNum(dayNum); + xzWorkerSafeWatchAlarm.setEnterpriseId(workerInfo.getEnterpriseId()); + xzWorkerSafeWatchAlarmService.save(xzWorkerSafeWatchAlarm); + + List userIds = Arrays.asList(xzWorkerSafeWatchManagerService.list(Wrappers.lambdaQuery() + .eq(XzWorkerSafeWatchManager::getWatchConfigId, xzWorkerSafeWatchConfig.getId())) + .stream().map(l -> l.getUserId()).collect(Collectors.joining(",")).split(",")); + List noticeList = new ArrayList<>(); + for (String userId : userIds) { + if (StringUtils.isNotBlank(userId)) { + Notice notice = new Notice(); + notice.setType("35"); +// 事件:xxx【企业名称】已连续被检查到xxx【隐患的描述】x次,请提醒责任人xxx【责任人姓名】及时整改并加强对此风险的管控措施。 + notice.setMsg(StrUtil.format("事件:【{}】已连续被检查到【{}】{}次,请提醒责任人【{}】及时整改并加强对此风险的管控措施", + workerInfo.getEnterpriseName(), desc, num, workerInfo.getWorkerName())); + notice.setTitle("人员安全履职预警提醒"); + notice.setIsRead(0); + notice.setAccountId(Long.valueOf(userId)); + notice.setSendTime(DateUtil.formatDateTime(new Date())); + noticeList.add(notice); + } + } + noticeService.saveBatch(noticeList); + } + } + } } diff --git a/src/main/resources/lib/wflow-server-1.0-SNAPSHOT.jar b/src/main/resources/lib/wflow-server-1.0-SNAPSHOT.jar index 120388966..5bfb0dc7f 100644 Binary files a/src/main/resources/lib/wflow-server-1.0-SNAPSHOT.jar and b/src/main/resources/lib/wflow-server-1.0-SNAPSHOT.jar differ