Browse Source

党员导入,sql脚本

dev
zhaoqifeng 3 years ago
parent
commit
6aa5305c59
  1. 1
      epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/constants/ImportTaskConstants.java
  2. 73
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartyMemberController.java
  3. 82
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartyMemberImportExcel.java
  4. 130
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/handler/IcPartyMemberImportListener.java
  5. 8
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartyMemberService.java
  6. 230
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartyMemberServiceImpl.java
  7. 132
      epmet-module/resi-partymember/resi-partymember-server/src/main/resources/db/migration/V0.0.4__party_member_manage.sql
  8. 41
      epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.50_ic_volunteer.sql

1
epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/constants/ImportTaskConstants.java

@ -18,6 +18,7 @@ public interface ImportTaskConstants {
String BIZ_TYPE_ATTENTION_NAT = "attention_nat"; String BIZ_TYPE_ATTENTION_NAT = "attention_nat";
String BIZ_TYPE_ATTENTION_VACCINATION = "attention_vaccination"; String BIZ_TYPE_ATTENTION_VACCINATION = "attention_vaccination";
String BIZ_TYPE_ATTENTION_TRIP_REPORT = "attention_vaccination"; String BIZ_TYPE_ATTENTION_TRIP_REPORT = "attention_vaccination";
String BIZ_TYPE_IC_PARTY_MEMBER = "ic_party_member";
/** /**
* 核酸检测 * 核酸检测
*/ */

73
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartyMemberController.java

@ -7,23 +7,27 @@ import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.annotation.MaskResponse; import com.epmet.commons.tools.annotation.MaskResponse;
import com.epmet.commons.tools.aop.NoRepeatSubmit; import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.dto.result.OptionDataResultDTO; import com.epmet.commons.tools.dto.result.OptionDataResultDTO;
import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.*;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.poi.excel.handler.FreezeAndFilter; import com.epmet.commons.tools.utils.poi.excel.handler.FreezeAndFilter;
import com.epmet.commons.tools.validator.AssertUtils; import com.epmet.commons.tools.validator.AssertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AddGroup; import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup; import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup; import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.constants.ImportTaskConstants;
import com.epmet.dto.result.ImportTaskCommonResultDTO;
import com.epmet.dto.form.IcPartyMemberFormDTO; import com.epmet.dto.form.IcPartyMemberFormDTO;
import com.epmet.dto.form.IcPartyMemberListFormDTO; import com.epmet.dto.form.IcPartyMemberListFormDTO;
import com.epmet.dto.result.PartyMemberAgeResultDTO; import com.epmet.dto.result.PartyMemberAgeResultDTO;
@ -33,15 +37,23 @@ import com.epmet.modules.partymember.service.IcPartyMemberService;
import com.epmet.resi.partymember.dto.partymember.IcPartyMemberDTO; import com.epmet.resi.partymember.dto.partymember.IcPartyMemberDTO;
import com.epmet.resi.partymember.dto.partymember.form.IcPartyMemberFromDTO; import com.epmet.resi.partymember.dto.partymember.form.IcPartyMemberFromDTO;
import com.epmet.resi.partymember.dto.partymember.result.IcPartyMemberResultDTO; import com.epmet.resi.partymember.dto.partymember.result.IcPartyMemberResultDTO;
import com.epmet.utils.ImportTaskUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.nio.file.Path;
import java.util.List; import java.util.List;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@ -54,7 +66,7 @@ import java.util.concurrent.atomic.AtomicInteger;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("icPartyMember") @RequestMapping("icPartyMember")
public class IcPartyMemberController { public class IcPartyMemberController implements ResultDataResolver {
@Autowired @Autowired
private IcPartyMemberService icPartyMemberService; private IcPartyMemberService icPartyMemberService;
@ -142,6 +154,59 @@ public class IcPartyMemberController {
return new Result(); return new Result();
} }
/**
* excel导入
* @Param file
* @Return {@link Result}
* @Author zhaoqifeng
* @Date 2022/5/23 16:05
*/
@PostMapping("import")
public Result importExcel(MultipartFile file) {
String userId = EpmetRequestHolder.getHeader(AppClientConstant.USER_ID);
// 1.暂存文件
String originalFilename = file.getOriginalFilename();
String extName = originalFilename.substring(originalFilename.lastIndexOf("."));
Path fileSavePath;
try {
Path importPath = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_party_member", "import");
fileSavePath = importPath.resolve(UUID.randomUUID().toString().concat(extName));
} catch (IOException e) {
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【党员管理导入】创建临时存储文件失败:{}", errorMsg);
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "文件上传失败", "文件上传失败");
}
InputStream is = null;
FileOutputStream os = null;
try {
is = file.getInputStream();
os = new FileOutputStream(fileSavePath.toString());
IOUtils.copy(is, os);
} catch (Exception e) {
log.error("method exception", e);
} finally {
org.apache.poi.util.IOUtils.closeQuietly(is);
org.apache.poi.util.IOUtils.closeQuietly(os);
}
// 2.生成导入任务记录
ImportTaskCommonResultDTO rstData = getResultDataOrThrowsException(
ImportTaskUtils.createImportTask(originalFilename, ImportTaskConstants.BIZ_TYPE_IC_PARTY_MEMBER),
ServiceConstant.EPMET_COMMON_SERVICE,
EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),
"excel导入党员信息错误",
"导入党员信息失败");
// 3.执行导入
icPartyMemberService.execAsyncExcelImport(fileSavePath, rstData.getTaskId());
return new Result();
}
/** /**
* @describe: 统计分析-党员学历统计 * @describe: 统计分析-党员学历统计
* @author wangtong * @author wangtong

82
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/IcPartyMemberImportExcel.java

@ -0,0 +1,82 @@
package com.epmet.modules.partymember.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.util.Date;
/**
* 核酸检测信息导入excel数据
* @author Administrator
*/
@Data
public class IcPartyMemberImportExcel {
@NotBlank(message = "所属党组织为必填项")
@ExcelProperty("所属党组织")
private String sszb;
@NotBlank(message = "姓名为必填项")
@ExcelProperty("姓名")
private String name;
@NotBlank(message = "手机号为必填项")
@ExcelProperty("手机号")
@Length(max = 15, message = "手机号长度不正确,应小于15位")
private String mobile;
@NotBlank(message = "身份证号为必填项")
@ExcelProperty("身份证号")
@Length(max = 18, message = "身份证号长度不正确,应小于18位")
private String idCard;
@ExcelProperty("地址")
private Date address;
@ExcelProperty("入党时间")
private String rdsj;
@ExcelProperty("流动党员")
private String isLd;
@ExcelProperty("流动党员证号")
private String ldzh;
@ExcelProperty("党员中心户")
private String isDyzxh;
@ExcelProperty("免学习")
private String isMxx;
@ExcelProperty("职务")
private String partyZw;
@ExcelProperty("文化程度")
private String culture;
@ExcelProperty("备注")
private String remark;
@Data
public static class RowRemarkMessage {
@ExcelProperty("姓名")
@ColumnWidth(20)
private String name;
@ExcelProperty("手机号")
@ColumnWidth(20)
private String mobile;
@ColumnWidth(20)
@ExcelProperty("身份证号")
private String idCard;
@ColumnWidth(60)
@ExcelProperty("错误信息")
private String errorInfo;
}
}

130
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/excel/handler/IcPartyMemberImportListener.java

@ -0,0 +1,130 @@
package com.epmet.modules.partymember.excel.handler;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.ValidateException;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.modules.partymember.entity.IcPartyMemberEntity;
import com.epmet.modules.partymember.excel.IcPartyMemberImportExcel;
import com.epmet.modules.partymember.service.impl.IcPartyMemberServiceImpl;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
* 核酸检测excel导入监听器
* @author Administrator
*/
@Data
@Slf4j
public class IcPartyMemberImportListener implements ReadListener<IcPartyMemberImportExcel> {
/**
* 最大条数阈值
*/
public static final int MAX_THRESHOLD = 200;
private String currentUserId;
/**
* 当前组织ID
*/
private String currentAgencyId;
private String currentAgencyPids;
/**
* 数据
*/
private List<IcPartyMemberEntity> datas = new ArrayList<>();
/**
* 错误项列表
*/
private List<IcPartyMemberImportExcel.RowRemarkMessage> errorRows = new ArrayList<>();
/**
* 其他被标记出来的列表列表
*/
private List<IcPartyMemberImportExcel.RowRemarkMessage> otherRows = new ArrayList<>();
private IcPartyMemberServiceImpl icPartyMemberService;
public IcPartyMemberImportListener(String currentUserId, IcPartyMemberServiceImpl icPartyMemberService) {
this.currentUserId = currentUserId;
this.icPartyMemberService = icPartyMemberService;
}
@Override
public void invoke(IcPartyMemberImportExcel data, AnalysisContext context) {
try {
// 先校验数据
ValidatorUtils.validateEntity(data);
if (StringUtils.isNotBlank(data.getSszb())) {
data.setSszb(data.getSszb().trim());
}
if (StringUtils.isNotBlank(data.getName())) {
data.setName(data.getName().trim());
}
if (StringUtils.isNotBlank(data.getMobile())) {
data.setMobile(data.getMobile().trim());
}
if (StringUtils.isNotBlank(data.getIdCard())) {
data.setIdCard(data.getIdCard().trim());
}
IcPartyMemberEntity icPartyMemberEntity = ConvertUtils.sourceToTarget(data, IcPartyMemberEntity.class);
datas.add(icPartyMemberEntity);
if (datas.size() == MAX_THRESHOLD) {
execPersist();
}
} catch (Exception e) {
String errorMsg = null;
if (e instanceof ValidateException) {
errorMsg = ((ValidateException) e).getMsg();
} else {
errorMsg = "未知错误";
log.error("【核酸检测信息导入】出错:{}", ExceptionUtils.getErrorStackTrace(e));
}
IcPartyMemberImportExcel.RowRemarkMessage errorRow = new IcPartyMemberImportExcel.RowRemarkMessage();
errorRow.setName(data.getName());
errorRow.setMobile(data.getMobile());
errorRow.setIdCard(data.getIdCard());
errorRow.setErrorInfo(errorMsg);
errorRows.add(errorRow);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 最后几条达不到阈值,这里必须再调用一次
execPersist();
}
/**
* 执行持久化
*/
private void execPersist() {
try {
if (datas != null && datas.size() > 0) {
icPartyMemberService.batchPersist(datas, this);
}
} finally {
datas.clear();
}
}
/**
* 获取错误行
* @return
*/
public List<IcPartyMemberImportExcel.RowRemarkMessage> getErrorRows() {
return errorRows;
}
}

8
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/IcPartyMemberService.java

@ -13,6 +13,7 @@ import com.epmet.resi.partymember.dto.partymember.IcPartyMemberDTO;
import com.epmet.resi.partymember.dto.partymember.form.IcPartyMemberFromDTO; import com.epmet.resi.partymember.dto.partymember.form.IcPartyMemberFromDTO;
import com.epmet.resi.partymember.dto.partymember.result.IcPartyMemberResultDTO; import com.epmet.resi.partymember.dto.partymember.result.IcPartyMemberResultDTO;
import java.nio.file.Path;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -129,4 +130,11 @@ public interface IcPartyMemberService extends BaseService<IcPartyMemberEntity> {
* @return com.epmet.commons.tools.utils.Result<java.util.List<com.epmet.commons.tools.dto.result.OptionDataResultDTO>> * @return com.epmet.commons.tools.utils.Result<java.util.List<com.epmet.commons.tools.dto.result.OptionDataResultDTO>>
*/ */
List<OptionDataResultDTO> partyMemberAgeStatistics(IcPartyMemberFormDTO formDTO); List<OptionDataResultDTO> partyMemberAgeStatistics(IcPartyMemberFormDTO formDTO);
/**
* 执行Excel导入
* @param filePath
*/
void execAsyncExcelImport(Path filePath, String importTaskId);
} }

230
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/IcPartyMemberServiceImpl.java

@ -1,9 +1,11 @@
package com.epmet.modules.partymember.service.impl; package com.epmet.modules.partymember.service.impl;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.constant.StrConstant;
@ -16,20 +18,23 @@ import com.epmet.commons.tools.enums.IcFormCodeEnum;
import com.epmet.commons.tools.enums.PartyPostEnum; import com.epmet.commons.tools.enums.PartyPostEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.*;
import com.epmet.commons.tools.utils.DateUtils; import com.epmet.constants.ImportTaskConstants;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.IcFormOptionsQueryFormDTO; import com.epmet.dto.form.IcFormOptionsQueryFormDTO;
import com.epmet.dto.form.IcPartyMemberFormDTO; import com.epmet.dto.form.IcPartyMemberFormDTO;
import com.epmet.dto.form.IcPartyMemberListFormDTO; import com.epmet.dto.form.IcPartyMemberListFormDTO;
import com.epmet.dto.result.PartyMemberAgeResultDTO; import com.epmet.dto.result.PartyMemberAgeResultDTO;
import com.epmet.dto.result.PartyMemberEducationResultDTO; import com.epmet.dto.result.PartyMemberEducationResultDTO;
import com.epmet.dto.result.UploadImgResultDTO;
import com.epmet.feign.EpmetAdminOpenFeignClient; import com.epmet.feign.EpmetAdminOpenFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.OperCustomizeOpenFeignClient; import com.epmet.feign.OperCustomizeOpenFeignClient;
import com.epmet.feign.OssFeignClient;
import com.epmet.modules.partyOrg.dao.IcPartyOrgDao; import com.epmet.modules.partyOrg.dao.IcPartyOrgDao;
import com.epmet.modules.partyOrg.entity.IcPartyOrgEntity; import com.epmet.modules.partyOrg.entity.IcPartyOrgEntity;
import com.epmet.modules.partyOrg.service.IcPartyOrgService; import com.epmet.modules.partyOrg.service.IcPartyOrgService;
@ -39,20 +44,34 @@ import com.epmet.modules.partymember.dao.IcPartyMemberPointDao;
import com.epmet.modules.partymember.entity.IcPartyMemberEntity; import com.epmet.modules.partymember.entity.IcPartyMemberEntity;
import com.epmet.modules.partymember.entity.IcPartyMemberPayRecordEntity; import com.epmet.modules.partymember.entity.IcPartyMemberPayRecordEntity;
import com.epmet.modules.partymember.entity.IcPartyMemberPointEntity; import com.epmet.modules.partymember.entity.IcPartyMemberPointEntity;
import com.epmet.modules.partymember.excel.IcPartyMemberImportExcel;
import com.epmet.modules.partymember.excel.handler.IcPartyMemberImportListener;
import com.epmet.modules.partymember.service.IcPartyMemberService; import com.epmet.modules.partymember.service.IcPartyMemberService;
import com.epmet.resi.partymember.dto.partymember.IcPartyMemberDTO; import com.epmet.resi.partymember.dto.partymember.IcPartyMemberDTO;
import com.epmet.resi.partymember.dto.partymember.form.IcPartyMemberFromDTO; import com.epmet.resi.partymember.dto.partymember.form.IcPartyMemberFromDTO;
import com.epmet.resi.partymember.dto.partymember.result.IcPartyMemberResultDTO; import com.epmet.resi.partymember.dto.partymember.result.IcPartyMemberResultDTO;
import com.epmet.utils.ImportTaskUtils;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.http.entity.ContentType;
import org.apache.poi.util.IOUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -62,8 +81,9 @@ import java.util.stream.Collectors;
* @author generator generator@elink-cn.com * @author generator generator@elink-cn.com
* @since v1.0.0 2022-05-17 * @since v1.0.0 2022-05-17
*/ */
@Slf4j
@Service @Service
public class IcPartyMemberServiceImpl extends BaseServiceImpl<IcPartyMemberDao, IcPartyMemberEntity> implements IcPartyMemberService { public class IcPartyMemberServiceImpl extends BaseServiceImpl<IcPartyMemberDao, IcPartyMemberEntity> implements IcPartyMemberService, ResultDataResolver {
@Resource @Resource
private IcPartyOrgService icPartyOrgService; private IcPartyOrgService icPartyOrgService;
@ -79,6 +99,8 @@ public class IcPartyMemberServiceImpl extends BaseServiceImpl<IcPartyMemberDao,
private IcPartyMemberPayRecordDao icPartyMemberPayRecordDao; private IcPartyMemberPayRecordDao icPartyMemberPayRecordDao;
@Resource @Resource
private IcPartyMemberPointDao icPartyMemberPointDao; private IcPartyMemberPointDao icPartyMemberPointDao;
@Resource
private OssFeignClient ossFeignClient;
@Override @Override
public PageData<IcPartyMemberResultDTO> page(TokenDto tokenDto, IcPartyMemberFromDTO formDTO) { public PageData<IcPartyMemberResultDTO> page(TokenDto tokenDto, IcPartyMemberFromDTO formDTO) {
@ -419,4 +441,202 @@ public class IcPartyMemberServiceImpl extends BaseServiceImpl<IcPartyMemberDao,
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
} /**
* 执行Excel导入
*
* @param filePath
* @param importTaskId
*/
@Async
@Override
public void execAsyncExcelImport(Path filePath, String importTaskId) {
String userId = null;
try {
userId = EpmetRequestHolder.getHeader(AppClientConstant.USER_ID);
String app = EpmetRequestHolder.getHeader(AppClientConstant.APP);
String client = EpmetRequestHolder.getHeader(AppClientConstant.CLIENT);
log.info("【核酸检测导入】userId:{}, app:{}, client:{}", userId, app, client);
IcPartyMemberImportListener listener = new IcPartyMemberImportListener(userId, this);
EasyExcel.read(filePath.toFile(), IcPartyMemberImportExcel.class, listener).headRowNumber(2).sheet(0).doRead();
String errorDesFileUrl = null;
List<IcPartyMemberImportExcel.RowRemarkMessage> errorRows = listener.getErrorRows();
List<IcPartyMemberImportExcel.RowRemarkMessage> otherRows = listener.getOtherRows();
boolean failed = errorRows.size() > 0;
// 合并到一起写入
errorRows.addAll(otherRows);
// 生成并上传描述文件
OutputStream os = null;
FileItem fileItem = null;
if (errorRows.size() > 0) {
try {
// 文件生成
Path errorDescDir = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_nat", "import", "error_des");
String timeMillis = String.valueOf(System.currentTimeMillis());
String fileName = "icnat_import_error_".concat(timeMillis).concat(".xlsx");
fileItem = new DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, errorDescDir.toFile())
.createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), false, fileName);
os = fileItem.getOutputStream();
EasyExcel.write(os, IcPartyMemberImportExcel.RowRemarkMessage.class).sheet("信息列表").doWrite(errorRows);
// 文件上传oss
Result<UploadImgResultDTO> errorDesFileUploadResult = ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem));
if (errorDesFileUploadResult.success()) {
errorDesFileUrl = errorDesFileUploadResult.getData().getUrl();
}
} finally {
IOUtils.closeQuietly(os);
try {
fileItem.delete();
} catch (Exception e){
log.error("【核酸检测导入】删除临时描述文件失败:{}", ExceptionUtils.getErrorStackTrace(e));
}
}
}
// 完成导入
Result result = ImportTaskUtils.finishImportTask(importTaskId,
failed ? ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL : ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS,
errorDesFileUrl,
"");
if (!result.success()) {
log.error("【核酸检测导入】导入记录状态修改为'finished_success'失败");
}
} catch (Exception e) {
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【核酸检测导入】出错:{}", errorMsg);
Result result = ImportTaskUtils.finishImportTask(importTaskId, ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL, null, "导入失败");
if (!result.success()) {
log.error("【核酸检测导入】导入记录状态修改为'finished_fail'失败");
}
} finally {
// 删除临时文件
if (Files.exists(filePath)) {
try {
Files.delete(filePath);
} catch (IOException e) {
log.error("method exception", e);
}
}
}
}
/**
* 批量持久化
* @param entities
*/
public void batchPersist(List<IcPartyMemberEntity> entities, IcPartyMemberImportListener listener) {
String customerId = EpmetRequestHolder.getHeader(AppClientConstant.CUSTOMER_ID);
String currentUserId = EpmetRequestHolder.getHeader(AppClientConstant.USER_ID);
entities.forEach(e -> {
try {
persistPartyMember(e, customerId, currentUserId, listener);
} catch (Exception exception) {
String errorMsg = ExceptionUtils.getErrorStackTrace(exception);
log.error(errorMsg);
IcPartyMemberImportExcel.RowRemarkMessage errorRow = new IcPartyMemberImportExcel.RowRemarkMessage();
errorRow.setName(e.getName());
errorRow.setMobile(e.getMobile());
errorRow.setIdCard(e.getIdCard());
errorRow.setErrorInfo("未知系统错误");
listener.getErrorRows().add(errorRow);
}
});
}
/**
* 单条持久化
* @Param e
* @Param customerId
* @Param currentUserId
* @Param listener
* @Return
* @Author zhaoqifeng
* @Date 2022/5/23 15:24
*/
@Transactional(rollbackFor = Exception.class)
public void persistPartyMember(IcPartyMemberEntity e, String customerId, String currentUserId, IcPartyMemberImportListener listener) {
List<IcPartyMemberImportExcel.RowRemarkMessage> otherRows = listener.getOtherRows();
String idCard = e.getIdCard();
String name = e.getName();
String mobile = e.getMobile();
//获取党组织信息
LambdaUpdateWrapper<IcPartyOrgEntity> orgWrapper = new LambdaUpdateWrapper<>();
orgWrapper.eq(IcPartyOrgEntity::getCustomerId, customerId);
orgWrapper.eq(IcPartyOrgEntity::getPartyOrgName, e.getSszb());
IcPartyOrgEntity org = icPartyOrgDao.selectOne(orgWrapper);
if (null == org) {
String message = "所属党组织不存在";
IcPartyMemberImportExcel.RowRemarkMessage errorRow = new IcPartyMemberImportExcel.RowRemarkMessage();
errorRow.setName(name);
errorRow.setMobile(mobile);
errorRow.setIdCard(idCard);
errorRow.setErrorInfo(message);
otherRows.add(errorRow);
return;
}
//判断党员是否已存在
LambdaQueryWrapper<IcPartyMemberEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(IcPartyMemberEntity::getCustomerId, customerId);
wrapper.eq(IcPartyMemberEntity::getIdCard, e.getIdCard());
IcPartyMemberEntity partyMember = baseDao.selectOne(wrapper);
if (null != partyMember) {
String message = "党员已存在";
IcPartyMemberImportExcel.RowRemarkMessage errorRow = new IcPartyMemberImportExcel.RowRemarkMessage();
errorRow.setName(name);
errorRow.setMobile(mobile);
errorRow.setIdCard(idCard);
errorRow.setErrorInfo(message);
otherRows.add(errorRow);
return;
}
e.setAgencyId(org.getAgencyId());
e.setAgencyPids(org.getAgencyPids());
e.setSszb(org.getId());
e.setOrgPids(org.getOrgPids());
e.setIsLd(("是").equals(e.getIsLd())?NumConstant.ONE_STR:NumConstant.ZERO_STR);
e.setIsDyzxh(("是").equals(e.getIsDyzxh())?NumConstant.ONE_STR:NumConstant.ZERO_STR);
e.setIsMxx(("是").equals(e.getIsMxx())?NumConstant.ONE_STR:NumConstant.ZERO_STR);
//职务
e.setPartyZw(PartyPostEnum.getCode(e.getPartyZw()));
//文化程度
//获取文化程度字典
DictListFormDTO dictFormDTO = new DictListFormDTO();
dictFormDTO.setDictType(DictTypeEnum.EDUCATION.getCode());
Result<List<DictListResultDTO>> education = epmetAdminOpenFeignClient.dictList(dictFormDTO);
if (CollectionUtils.isNotEmpty(education.getData())) {
Map<String, String> map = education.getData().stream().collect(Collectors.toMap(DictListResultDTO::getLabel, DictListResultDTO::getValue));
e.setCulture(map.get(e.getCulture()));
}
//同步ic_resi_user表对应的数据,并获取志愿者类型
Result<IcPartyMemberDTO> result = epmetUserOpenFeignClient.icPartyMemberSync(ConvertUtils.sourceToTarget(e, IcPartyMemberDTO.class));
if (!result.success() && null != result.getData()) {
e.setIcResiUser(result.getData().getIcResiUser());
e.setVolunteerCategory(result.getData().getVolunteerCategory());
}
baseDao.insert(e);
}
}

132
epmet-module/resi-partymember/resi-partymember-server/src/main/resources/db/migration/V0.0.4__party_member_manage.sql

@ -0,0 +1,132 @@
CREATE TABLE `ic_party_member`
(
`ID` varchar(64) NOT NULL COMMENT '唯一标识',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id customer.id',
`ORG_PIDS` varchar(255) DEFAULT NULL COMMENT '党组织的所有上级ID,没有上级时为0',
`AGENCY_ID` varchar(64) NOT NULL COMMENT '行政组织 机关ID',
`AGENCY_PIDS` varchar(255) NOT NULL COMMENT '行政组织 机关ID',
`IC_RESI_USER` varchar(64) DEFAULT NULL COMMENT '对应的ic_resi_user主表Id',
`NAME` varchar(64) NOT NULL COMMENT '姓名',
`MOBILE` varchar(15) DEFAULT NULL COMMENT '手机号',
`ID_CARD` varchar(18) NOT NULL COMMENT '身份证号',
`ADDRESS` varchar(255) DEFAULT NULL COMMENT '地址',
`RDSJ` varchar(64) DEFAULT NULL COMMENT '入党时间',
`SSZB` varchar(256) DEFAULT NULL COMMENT '所属支部',
`IS_LD` char(2) DEFAULT NULL COMMENT '是否流动党员',
`LDZH` varchar(64) DEFAULT NULL COMMENT '流动党员活动证号',
`PARTY_ZW` varchar(256) DEFAULT NULL COMMENT '职务',
`IS_TX` char(2) DEFAULT NULL COMMENT '是否退休',
`IS_DYZXH` char(2) DEFAULT NULL COMMENT '是否党员中心户',
`IS_MXX` char(2) DEFAULT NULL COMMENT '是否免学习0否,1是',
`CULTURE` varchar(20) DEFAULT NULL COMMENT '文化程度【字典表】',
`VOLUNTEER_CATEGORY` varchar(255) DEFAULT NULL COMMENT '志愿者类型,逗号隔开',
`REMARK` varchar(255) DEFAULT NULL COMMENT '备注',
`FIELD1` varchar(256) DEFAULT NULL COMMENT '预留字段1',
`FIELD2` varchar(256) DEFAULT NULL COMMENT '预留字段2',
`FIELD3` varchar(256) DEFAULT NULL COMMENT '预留字段3',
`FIELD4` varchar(256) DEFAULT NULL COMMENT '预留字段4',
`FIELD5` varchar(256) DEFAULT NULL COMMENT '预留字段5',
`DEL_FLAG` int(1) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(64) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`) USING BTREE,
UNIQUE KEY `un_party_mem` (`IC_RESI_USER`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT COMMENT ='数字平台党员信息表';
CREATE TABLE `ic_party_member_pay_record`
(
`ID` varchar(64) NOT NULL COMMENT '唯一标识',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id (customer.id)',
`PARTY_MEMBER_ID` varchar(64) NOT NULL COMMENT '党员ID',
`PAY_DATE` varchar(18) NOT NULL COMMENT '缴费日期',
`MONEY` decimal(8, 2) NOT NULL COMMENT '缴费金额',
`START_DATE` varchar(18) NOT NULL COMMENT '缴费开始时间',
`END_DATE` varchar(18) NOT NULL COMMENT '缴费结束时间',
`DEL_FLAG` int(11) NOT NULL COMMENT '删除标识:0.未删除 1.已删除',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT COMMENT ='党员缴费记录表';
CREATE TABLE `ic_party_member_pay_record_detail`
(
`ID` varchar(64) NOT NULL COMMENT '唯一标识',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id (customer.id)',
`PARTY_MEMBER_ID` varchar(64) NOT NULL COMMENT '党员ID',
`RECORD_ID` varchar(64) NOT NULL COMMENT '党员缴费记录表ID',
`YEAR` varchar(18) NOT NULL COMMENT '缴费年度',
`MONTH` varchar(18) NOT NULL COMMENT '缴费月份',
`MONEY` decimal(8, 2) NOT NULL COMMENT '缴费金额',
`DEL_FLAG` int(11) NOT NULL COMMENT '删除标识:0.未删除 1.已删除',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT COMMENT ='党员缴费记录明细表';
CREATE TABLE `ic_party_member_point`
(
`ID` varchar(64) NOT NULL DEFAULT '0' COMMENT '唯一标识',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id (customer.id)',
`PARTY_MEMBER_ID` varchar(64) NOT NULL COMMENT '党员ID',
`YEAR` varchar(8) NOT NULL COMMENT '',
`QUARTER` varchar(8) NOT NULL COMMENT '季度',
`BASE_POINT` int(11) DEFAULT '0' COMMENT '基础积分分值',
`BASE_OPTIONS` varchar(20) DEFAULT NULL COMMENT '基础积分选项 英文逗号隔开',
`REVIEW_POINT` int(11) DEFAULT '0' COMMENT '民主评议积分分值',
`REVIEW_OPTIONS` varchar(20) DEFAULT NULL COMMENT '民主评议积分选项',
`INSPIRE_POINT` int(11) unsigned DEFAULT '0' COMMENT '激励积分分值',
`INSPIRE_OPTIONS` varchar(20) DEFAULT NULL COMMENT '激励积分选项',
`WARN_POINT` int(11) DEFAULT '0' COMMENT '警示扣分分值',
`WARN_OPTIONS` varchar(20) DEFAULT NULL COMMENT '警示扣分选项',
`TOTAL_SCORE` int(32) DEFAULT '0' COMMENT '总分',
`DEL_FLAG` int(1) NOT NULL COMMENT '删除标识:0.未删除 1.已删除',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT COMMENT ='党员量化积分表';
CREATE TABLE `ic_party_org`
(
`ID` varchar(64) NOT NULL COMMENT '唯一标识',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id (customer.id)',
`ORG_PID` varchar(64) NOT NULL COMMENT '党组织的上级ID,没有上级时为0',
`ORG_PIDS` varchar(512) NOT NULL COMMENT '党组织的所有上级ID,没有上级时为0',
`AGENCY_ID` varchar(64) NOT NULL COMMENT '行政组织 机关ID',
`AGENCY_PIDS` varchar(512) NOT NULL COMMENT '行政组织 机关ID',
`PARTY_ORG_TYPE` char(1) NOT NULL COMMENT '党组织类型 0省委,1市委,2区委,3党工委,4党委,5支部',
`PARTY_ORG_NAME` varchar(20) NOT NULL COMMENT '组织名称',
`PARTY_ORG_CODE` varchar(128) DEFAULT NULL COMMENT '组织编码',
`LONGITUDE` varchar(32) NOT NULL COMMENT '经度',
`LATITUDE` varchar(32) NOT NULL COMMENT '纬度',
`ADDRESS` varchar(255) DEFAULT NULL COMMENT '地址',
`INTRODUCTION` varchar(500) DEFAULT NULL COMMENT '党组织介绍',
`DEL_FLAG` int(1) NOT NULL COMMENT '删除标识:0.未删除 1.已删除',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT COMMENT ='党组织表';

41
epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.50_ic_volunteer.sql

@ -0,0 +1,41 @@
CREATE TABLE `ic_volunteer_poly`
(
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id customer.id',
`USER_ID` varchar(64) DEFAULT NULL COMMENT '居民端用户id',
`IC_RESI_USER` varchar(64) DEFAULT NULL COMMENT '对应的ic_resi_user主表Id',
`AGENCY_ID` varchar(64) DEFAULT NULL COMMENT '行政组织 机关ID',
`AGENCY_PIDS` varchar(255) DEFAULT NULL COMMENT '行政组织 机关ID',
`NAME` varchar(32) NOT NULL COMMENT '居住成员1姓名',
`ID_CARD` varchar(18) NOT NULL COMMENT '身份证号',
`MOBILE` varchar(15) DEFAULT NULL COMMENT '手机号',
`GENDER` char(2) DEFAULT NULL COMMENT '性别',
`LONGITUDE` varchar(64) DEFAULT NULL COMMENT '经度',
`LATITUDE` varchar(64) DEFAULT NULL COMMENT '纬度',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`DEL_FLAG` int(11) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除',
`UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
`CREATED_BY` varchar(64) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='志愿者信息聚合';
CREATE TABLE `ic_volunteer_poly_category`
(
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id customer.id',
`ID_CARD` varchar(18) NOT NULL COMMENT '身份证号',
`VOLUNTEER_CATEGORY` varchar(256) DEFAULT NULL COMMENT '类别【字典表】',
`LONGITUDE` varchar(64) DEFAULT NULL COMMENT '经度',
`LATITUDE` varchar(64) DEFAULT NULL COMMENT '纬度',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`DEL_FLAG` int(11) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除',
`UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
`CREATED_BY` varchar(64) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='志愿者信息聚合,志愿者类别表';
Loading…
Cancel
Save