|
|
@@ -2,6 +2,8 @@ package com.xunmei.core.letter.service.impl;
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.alibaba.excel.EasyExcel;
|
|
|
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
@@ -13,6 +15,7 @@ import com.xunmei.common.core.constant.CacheConstants;
|
|
|
import com.xunmei.common.core.constant.DictConstants;
|
|
|
import com.xunmei.common.core.constant.ErrorMsgConstants;
|
|
|
import com.xunmei.common.core.constant.SecurityConstants;
|
|
|
+import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskReportVo;
|
|
|
import com.xunmei.common.core.domain.letter.domain.*;
|
|
|
import com.xunmei.common.core.domain.letter.dto.*;
|
|
|
import com.xunmei.common.core.domain.letter.vo.*;
|
|
|
@@ -21,12 +24,18 @@ import com.xunmei.common.core.domain.panel.enums.PanelTypeEnums;
|
|
|
import com.xunmei.common.core.domain.panel.vo.PanelListVo;
|
|
|
import com.xunmei.common.core.domain.panel.vo.WebPanelResult;
|
|
|
import com.xunmei.common.core.enums.OrgTypeEnum;
|
|
|
+import com.xunmei.common.core.exception.SystemException;
|
|
|
import com.xunmei.common.core.util.BeanHelper;
|
|
|
import com.xunmei.common.core.utils.DateUtils;
|
|
|
+import com.xunmei.common.core.utils.StringUtils;
|
|
|
import com.xunmei.common.core.web.page.TableDataInfo;
|
|
|
import com.xunmei.common.redis.utils.RedisUtils;
|
|
|
import com.xunmei.common.security.utils.DictUtils;
|
|
|
import com.xunmei.common.security.utils.SecurityUtils;
|
|
|
+import com.xunmei.core.edu.service.impl.ValueCellWriteHandler;
|
|
|
+import com.xunmei.core.letter.export.CoreIntroduceLetterOutInRequestExcelVo;
|
|
|
+import com.xunmei.core.letter.export.IntroduceLetterOutInRequestMergeHandler;
|
|
|
+import com.xunmei.core.letter.export.MultiImageWriteHandler;
|
|
|
import com.xunmei.core.letter.mapper.CoreIntroduceLetterOutInRequestMapper;
|
|
|
import com.xunmei.core.letter.mapper.CoreIntroduceLetterMapper;
|
|
|
import com.xunmei.core.letter.mapper.CoreIntroduceLetterOutInRequestUserMapper;
|
|
|
@@ -34,6 +43,7 @@ import com.xunmei.core.letter.mapper.CoreOutInRecordMapper;
|
|
|
import com.xunmei.core.letter.service.ICoreIntroduceLetterOutInHistoryUserService;
|
|
|
import com.xunmei.core.letter.service.ICoreIntroduceLetterOutInRequestUserService;
|
|
|
import com.xunmei.core.letter.service.ICoreIntroduceLetterService;
|
|
|
+import com.xunmei.system.api.RemoteFileService;
|
|
|
import com.xunmei.system.api.RemoteOrgService;
|
|
|
import com.xunmei.system.api.RemoteRoleService;
|
|
|
import com.xunmei.system.api.RemoteUserService;
|
|
|
@@ -48,6 +58,8 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.net.URLEncoder;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -82,6 +94,9 @@ public class CoreIntroduceLetterServiceImpl extends ServiceImpl<CoreIntroduceLet
|
|
|
private RemoteRoleService roleService;
|
|
|
@Autowired
|
|
|
private RemoteUserService userService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private RemoteFileService fileService;
|
|
|
@Resource
|
|
|
private RemoteOrgService orgService;
|
|
|
|
|
|
@@ -227,6 +242,168 @@ public class CoreIntroduceLetterServiceImpl extends ServiceImpl<CoreIntroduceLet
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public TableDataInfo<CoreIntroduceLetterOutInRequestVo> selectWebOntInRequestListPage(CoreOutInRequestDto requestDto) {
|
|
|
+ Page<CoreIntroduceLetterOutInRequestVo> page;
|
|
|
+ //分页
|
|
|
+ if (requestDto.getPageNum() != null && requestDto.getPageSize() != null) {
|
|
|
+ page = new Page<>(requestDto.getPageNum(), requestDto.getPageSize());
|
|
|
+ } else {
|
|
|
+ page = new Page<>();
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(requestDto.getRange())) {
|
|
|
+ requestDto.setStartTime(DateUtil.beginOfDay(requestDto.getRange()[0]));
|
|
|
+ requestDto.setEndTime(DateUtil.endOfDay(requestDto.getRange()[1]));
|
|
|
+ }
|
|
|
+ if (Boolean.TRUE.equals(requestDto.getCheckSub())) {
|
|
|
+ SysOrg org = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgById(requestDto.getOrgId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
|
|
|
+ requestDto.setOrgPath(org.getPath());
|
|
|
+ }
|
|
|
+ //获取数据
|
|
|
+ page = coreIntroduceLetterMapper.selectWebOutInRequestPageList(page, requestDto);
|
|
|
+
|
|
|
+ if (CollectionUtils.isNotEmpty(page.getRecords())) {
|
|
|
+ //获取人员信息
|
|
|
+ final LambdaQueryWrapper<CoreIntroduceLetterOutInRequestUser> oqw = new LambdaQueryWrapper<CoreIntroduceLetterOutInRequestUser>();
|
|
|
+ oqw.in(CoreIntroduceLetterOutInRequestUser::getOutInRequestId, page.getRecords().stream().map(x->x.getId()).collect(Collectors.toList()));
|
|
|
+ List<CoreIntroduceLetterOutInRequestUser> userList = outInRequestUserMapper.selectList(oqw);
|
|
|
+ Map<Long, List<CoreIntroduceLetterOutInRequestUser>> userListMap = userList.stream().collect(Collectors.groupingBy(CoreIntroduceLetterOutInRequestUser::getOutInRequestId));
|
|
|
+
|
|
|
+
|
|
|
+ page.getRecords().stream().forEach(vo -> {
|
|
|
+ vo.setLetterFile(ObjectUtil.isNotEmpty(vo.getLetterFileStr()) ? JSON.parseArray(vo.getLetterFileStr(), String.class) : null);
|
|
|
+
|
|
|
+ if (CollectionUtils.isNotEmpty(userListMap) && userListMap.containsKey(vo.getId())) {
|
|
|
+ vo.setUserInfos(userListMap.get(vo.getId()));
|
|
|
+
|
|
|
+ List<String> names = userListMap.get(vo.getId()).stream().map(CoreIntroduceLetterOutInRequestUser::getUserName).filter(name -> name != null && !name.trim().isEmpty()).collect(Collectors.toList());
|
|
|
+ if(names.size()>0)
|
|
|
+ {
|
|
|
+ if(names.size() ==vo.getUserInfos().size())
|
|
|
+ {
|
|
|
+ vo.setUserNames(names.stream().collect(Collectors.joining(",")));
|
|
|
+ }
|
|
|
+ else if (names.size()>0 && names.size()<vo.getUserInfos().size()){
|
|
|
+ vo.setUserNames(names.stream().collect(Collectors.joining(",")) + " 等"+vo.getUserInfos().size()+"人");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ vo.setUserNames("待登记后显示");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ //抓换为TableDataInfo适配前端
|
|
|
+ return TableDataInfo.build(page);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void webExportOntInRequestExcel(CoreOutInRequestDto requestDto, HttpServletResponse response) {
|
|
|
+ if (ObjectUtil.isNotEmpty(requestDto.getRange())) {
|
|
|
+ requestDto.setStartTime(DateUtil.beginOfDay(requestDto.getRange()[0]));
|
|
|
+ requestDto.setEndTime(DateUtil.endOfDay(requestDto.getRange()[1]));
|
|
|
+ }
|
|
|
+ if (Boolean.TRUE.equals(requestDto.getCheckSub())) {
|
|
|
+ SysOrg org = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgById(requestDto.getOrgId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
|
|
|
+ requestDto.setOrgPath(org.getPath());
|
|
|
+ }
|
|
|
+ final List<CoreIntroduceLetterOutInRequestExcelVo> list = coreIntroduceLetterMapper.selectWebOutInRequestExportList(requestDto);
|
|
|
+ if (ObjectUtil.isEmpty(list)) {
|
|
|
+ throw new SystemException("未获取到数据");
|
|
|
+ }
|
|
|
+ String prefixPath = RemoteCallHandlerExecutor.executeRemoteCall(() -> fileService.getLocalPathPrefix(), ErrorMsgConstants.QUERY_FILE_PATH_ERROR).getData();
|
|
|
+ String staticsPath = RemoteCallHandlerExecutor.executeRemoteCall(() -> fileService.getStaticPathPrefix(), ErrorMsgConstants.QUERY_FILE_PATH_ERROR).getData();
|
|
|
+
|
|
|
+
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ CoreIntroduceLetterOutInRequestExcelVo outInRequestVo = list.get(i);
|
|
|
+
|
|
|
+ outInRequestVo.setNo(i + 1);
|
|
|
+ // 处理签名图片
|
|
|
+// if (ObjectUtil.isNotEmpty(outInRequestVo.getCheckSign())) {
|
|
|
+// outInRequestVo.setCheckSign(getFileRealPath(outInRequestVo.getCheckSign(), prefixPath, staticsPath));
|
|
|
+// }
|
|
|
+// // 处理签名图片
|
|
|
+// if (ObjectUtil.isNotEmpty(outInRequestVo.getApproveSignImg())) {
|
|
|
+// outInRequestVo.setApproveSignImg(getFileRealPath(outInRequestVo.getApproveSignImg(), prefixPath, staticsPath));
|
|
|
+// }
|
|
|
+ // 处理证件照片(逗号分隔)
|
|
|
+ if (ObjectUtil.isNotEmpty(outInRequestVo.getImgFileStr())) {
|
|
|
+ outInRequestVo.setImgFileList(getFileRealPath(Arrays.asList(outInRequestVo.getImgFileStr().split(",")), prefixPath, staticsPath));
|
|
|
+ }
|
|
|
+ // 处理介绍信文件(JSON 数组)
|
|
|
+ if (ObjectUtil.isNotEmpty(outInRequestVo.getLetterFileStr())) {
|
|
|
+
|
|
|
+ final List<String> letterFileList = JSON.parseArray(outInRequestVo.getLetterFileStr(), String.class);
|
|
|
+ List<String> strings = new ArrayList<>();
|
|
|
+ for (String json : letterFileList) {
|
|
|
+ final Map map = JSON.parseObject(json, Map.class);
|
|
|
+ final String url = (String) map.get("imgPath");
|
|
|
+ if (ObjectUtil.isNotEmpty(url)) {
|
|
|
+ strings.add(url);
|
|
|
+ } else {
|
|
|
+ strings.add((String) map.get("url"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ outInRequestVo.setLetterFile(getFileRealPath(strings, prefixPath, staticsPath));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ String baseHeaderName = "出入情况表";
|
|
|
+ // 设置响应头
|
|
|
+ response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(baseHeaderName, "utf-8"));
|
|
|
+ response.setContentType("application/octet-stream;charset=UTF-8");
|
|
|
+ response.setCharacterEncoding("utf-8");
|
|
|
+
|
|
|
+ String header = baseHeaderName + "(" + DateUtil.format(requestDto.getStartTime(), "yyyy-MM-dd") + "至" + DateUtil.format(requestDto.getEndTime(), "yyyy-MM-dd") + ")";
|
|
|
+ // 数据导出
|
|
|
+ EasyExcel.write(response.getOutputStream(), CoreIntroduceLetterOutInRequestExcelVo.class)
|
|
|
+ .registerWriteHandler(new IntroduceLetterOutInRequestMergeHandler(list)) // 注册合并处理器
|
|
|
+ .registerWriteHandler(new MultiImageWriteHandler(0,"checkSign","checkSign",list)) // 注册图片处理器
|
|
|
+
|
|
|
+ .registerWriteHandler(new ValueCellWriteHandler(header))
|
|
|
+ .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
|
|
+ .sheet(baseHeaderName).doWrite(list);
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 重置response
|
|
|
+ response.reset();
|
|
|
+ response.setContentType("application/json");
|
|
|
+ response.setCharacterEncoding("utf-8");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<String> getFileRealPath(List<String> fileList, String prefixPath, String staticsPath) {
|
|
|
+ List<String> list = new ArrayList<>();
|
|
|
+ if (ObjectUtil.isEmpty(fileList)) {
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+ for (String path : fileList) {
|
|
|
+ if (path.contains(staticsPath)) {
|
|
|
+ //删除 /statics 前缀路径
|
|
|
+ path = path.replace(staticsPath, StringUtil.EMPTY_STRING);
|
|
|
+ }
|
|
|
+ list.add(prefixPath + path);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getFileRealPath(String file, String prefixPath, String staticsPath) {
|
|
|
+
|
|
|
+ if (ObjectUtil.isEmpty(file)) {
|
|
|
+ return StringUtil.EMPTY_STRING;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (file.contains(staticsPath)) {
|
|
|
+ //删除 /statics 前缀路径
|
|
|
+ file = file.replace(staticsPath, StringUtil.EMPTY_STRING);
|
|
|
+ }
|
|
|
+ return prefixPath + file;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public List<CoreIntroduceLetterCheckLogVo> auditAllList(Long id) {
|
|
|
return coreIntroduceLetterMapper.auditAllList(id);
|
|
|
}
|
|
|
@@ -547,9 +724,27 @@ public class CoreIntroduceLetterServiceImpl extends ServiceImpl<CoreIntroduceLet
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public void updateCoreIntroduceLetterStatus(CoreIntroduceLetterUpdateStatusDto letterDto) {
|
|
|
CoreIntroduceLetter coreIntroduceLetter = coreIntroduceLetterMapper.selectById(letterDto.getId());
|
|
|
coreIntroduceLetter.setStatus(letterDto.getStatus());
|
|
|
+ //下发时 出入人员进入 创建机构历史人员库
|
|
|
+ if (ObjectUtil.equal(letterDto.getStatus(), 1)) {
|
|
|
+
|
|
|
+ CoreIntroduceLetterInfoVo coreIntroduceLetterVo = coreIntroduceLetterMapper.selectOneById(letterDto.getId());
|
|
|
+ List<CoreIntroduceLetterInfoVo> list = new ArrayList<>();
|
|
|
+ list.add(coreIntroduceLetterVo);
|
|
|
+ List<CoreIntroduceLetterUserAddDto> letterUserList = coreIntroduceLetterMapper.findUserList(list);
|
|
|
+
|
|
|
+ letterUserList =letterUserList.stream().filter(item ->
|
|
|
+ ObjectUtil.isNotEmpty(item.getUserName())
|
|
|
+ && ObjectUtil.isNotEmpty(item.getCompanyName())
|
|
|
+ && ObjectUtil.isNotEmpty(item.getIdCard())
|
|
|
+ ).collect(Collectors.toList());
|
|
|
+
|
|
|
+ //进入 历史人员库
|
|
|
+ outInHistoryUserService.batchInboundOutInHistory(letterUserList,coreIntroduceLetter.getOrgId(),null);
|
|
|
+ }
|
|
|
coreIntroduceLetterMapper.updateById(coreIntroduceLetter);
|
|
|
}
|
|
|
|